Date: Sun, 12 Apr 2015 22:49:55 +0700 MIME-Version: 1.0 Content-Type: multipart/related; boundary="--9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED"; type="text/html" X-MimeOLE: Produced By Mht File Maker v1.0 beta This is a multi-part message in MIME format. ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: text/html Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/index.html PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIg Imh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgo8aHRt bD4KPGhlYWQ+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRl eHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KICAgIDxsaW5rIHR5cGU9ImltYWdlL3gtaWNvbiIg aHJlZj0iL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iLz4KICAgIDxsaW5rIHR5cGU9 InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9leHRqcy9yZXNvdXJjZXMvY3NzL2V4 dC1hbGwuY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo cmVmPSIvZXh0anMvcmVzb3VyY2VzL2Nzcy9leHQtdXgteW91dHViZXBsYXllci1hbGwuY3NzIi8+ CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvY3NzL21h c3Rlci5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhy ZWY9Ii9jc3MvcXVpei5jc3MiLz4KICAgIAogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiIHNyYz0iL2V4dGpzL2FkYXB0ZXIvZXh0L2V4dC1iYXNlLmpzIj48L3NjcmlwdD4KICAgIDxz Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9leHRqcy9leHQtYWxsLmpzIiA+PC9z Y3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvc3RydWN0dXJl LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9q cy9wYWNrYWdlL1F1aXouanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz Y3JpcHQiIHNyYz0iL2FsbC1sb2NhbC1xdWl6LmpzIj48L3NjcmlwdD4KICAgIAo8L2hlYWQ+Cjxi b2R5Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+RXh0LmdldEJvZHkoKS5tYXNrKCk7 PC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPg== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: application/x-javascript Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/adapter/ext/ext-base.js LyoKICogRXh0IEpTIExpYnJhcnkgMy4wLjAKICogQ29weXJpZ2h0KGMpIDIwMDYtMjAwOSBFeHQg SlMsIExMQwogKiBsaWNlbnNpbmdAZXh0anMuY29tCiAqIGh0dHA6Ly93d3cuZXh0anMuY29tL2xp Y2Vuc2UKICovCndpbmRvdy51bmRlZmluZWQ9d2luZG93LnVuZGVmaW5lZDtFeHQ9e3ZlcnNpb246 IjMuMCJ9O0V4dC5hcHBseT1mdW5jdGlvbihkLGUsYil7aWYoYil7RXh0LmFwcGx5KGQsYil9aWYo ZCYmZSYmdHlwZW9mIGU9PSJvYmplY3QiKXtmb3IodmFyIGEgaW4gZSl7ZFthXT1lW2FdfX1yZXR1 cm4gZH07KGZ1bmN0aW9uKCl7dmFyIGc9MCx0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcscz1m dW5jdGlvbihlKXtpZihFeHQuaXNBcnJheShlKXx8ZS5jYWxsZWUpe3JldHVybiB0cnVlfWlmKC9O b2RlTGlzdHxIVE1MQ29sbGVjdGlvbi8udGVzdCh0LmNhbGwoZSkpKXtyZXR1cm4gdHJ1ZX1yZXR1 cm4oKGUubmV4dE5vZGV8fGUuaXRlbSkmJkV4dC5pc051bWJlcihlLmxlbmd0aCkpfSx1PW5hdmln YXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSx6PWZ1bmN0aW9uKGUpe3JldHVybiBlLnRlc3Qo dSl9LGk9ZG9jdW1lbnQsbD1pLmNvbXBhdE1vZGU9PSJDU1MxQ29tcGF0IixCPXooL29wZXJhLyks aD16KC9jaHJvbWUvKSx2PXooL3dlYmtpdC8pLHk9IWgmJnooL3NhZmFyaS8pLGY9eSYmeigvYXBw bGV3ZWJraXRcLzQvKSxiPXkmJnooL3ZlcnNpb25cLzMvKSxDPXkmJnooL3ZlcnNpb25cLzQvKSxy PSFCJiZ6KC9tc2llLykscD1yJiZ6KC9tc2llIDcvKSxvPXImJnooL21zaWUgOC8pLHE9ciYmIXAm JiFvLG49IXYmJnooL2dlY2tvLyksZD1uJiZ6KC9ydjoxXC44LyksYT1uJiZ6KC9ydjoxXC45Lyks dz1yJiYhbCxBPXooL3dpbmRvd3N8d2luMzIvKSxrPXooL21hY2ludG9zaHxtYWMgb3MgeC8pLGo9 eigvYWRvYmVhaXIvKSxtPXooL2xpbnV4LyksYz0vXmh0dHBzL2kudGVzdCh3aW5kb3cubG9jYXRp b24ucHJvdG9jb2wpO2lmKHEpe3RyeXtpLmV4ZWNDb21tYW5kKCJCYWNrZ3JvdW5kSW1hZ2VDYWNo ZSIsZmFsc2UsdHJ1ZSl9Y2F0Y2goeCl7fX1FeHQuYXBwbHkoRXh0LHtTU0xfU0VDVVJFX1VSTDoi amF2YXNjcmlwdDpmYWxzZSIsaXNTdHJpY3Q6bCxpc1NlY3VyZTpjLGlzUmVhZHk6ZmFsc2UsZW5h YmxlR2FyYmFnZUNvbGxlY3Rvcjp0cnVlLGVuYWJsZUxpc3RlbmVyQ29sbGVjdGlvbjpmYWxzZSxV U0VfTkFUSVZFX0pTT046ZmFsc2UsYXBwbHlJZjpmdW5jdGlvbihELEUpe2lmKEQpe2Zvcih2YXIg ZSBpbiBFKXtpZihFeHQuaXNFbXB0eShEW2VdKSl7RFtlXT1FW2VdfX19cmV0dXJuIER9LGlkOmZ1 bmN0aW9uKGUsRCl7cmV0dXJuKGU9RXh0LmdldERvbShlKXx8e30pLmlkPWUuaWR8fChEfHwiZXh0 LWdlbiIpKygrK2cpfSxleHRlbmQ6ZnVuY3Rpb24oKXt2YXIgRD1mdW5jdGlvbihGKXtmb3IodmFy IEUgaW4gRil7dGhpc1tFXT1GW0VdfX07dmFyIGU9T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rv cjtyZXR1cm4gZnVuY3Rpb24oSyxILEope2lmKEV4dC5pc09iamVjdChIKSl7Sj1IO0g9SztLPUou Y29uc3RydWN0b3IhPWU/Si5jb25zdHJ1Y3RvcjpmdW5jdGlvbigpe0guYXBwbHkodGhpcyxhcmd1 bWVudHMpfX12YXIgRz1mdW5jdGlvbigpe30sSSxFPUgucHJvdG90eXBlO0cucHJvdG90eXBlPUU7 ST1LLnByb3RvdHlwZT1uZXcgRygpO0kuY29uc3RydWN0b3I9SztLLnN1cGVyY2xhc3M9RTtpZihF LmNvbnN0cnVjdG9yPT1lKXtFLmNvbnN0cnVjdG9yPUh9Sy5vdmVycmlkZT1mdW5jdGlvbihGKXtF eHQub3ZlcnJpZGUoSyxGKX07SS5zdXBlcmNsYXNzPUkuc3Vwcj0oZnVuY3Rpb24oKXtyZXR1cm4g RX0pO0kub3ZlcnJpZGU9RDtFeHQub3ZlcnJpZGUoSyxKKTtLLmV4dGVuZD1mdW5jdGlvbihGKXtF eHQuZXh0ZW5kKEssRil9O3JldHVybiBLfX0oKSxvdmVycmlkZTpmdW5jdGlvbihlLEUpe2lmKEUp e3ZhciBEPWUucHJvdG90eXBlO0V4dC5hcHBseShELEUpO2lmKEV4dC5pc0lFJiZFLnRvU3RyaW5n IT1lLnRvU3RyaW5nKXtELnRvU3RyaW5nPUUudG9TdHJpbmd9fX0sbmFtZXNwYWNlOmZ1bmN0aW9u KCl7dmFyIEQsZTtFeHQuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oRSl7ZT1FLnNwbGl0KCIuIik7 RD13aW5kb3dbZVswXV09d2luZG93W2VbMF1dfHx7fTtFeHQuZWFjaChlLnNsaWNlKDEpLGZ1bmN0 aW9uKEYpe0Q9RFtGXT1EW0ZdfHx7fX0pfSk7cmV0dXJuIER9LHVybEVuY29kZTpmdW5jdGlvbihJ LEgpe3ZhciBGLEQ9W10sRSxHPWVuY29kZVVSSUNvbXBvbmVudDtmb3IoRSBpbiBJKXtGPSFFeHQu aXNEZWZpbmVkKElbRV0pO0V4dC5lYWNoKEY/RTpJW0VdLGZ1bmN0aW9uKEosZSl7RC5wdXNoKCIm IixHKEUpLCI9IiwoSiE9RXx8IUYpP0coSik6IiIpfSl9aWYoIUgpe0Quc2hpZnQoKTtIPSIifXJl dHVybiBIK0Quam9pbigiIil9LHVybERlY29kZTpmdW5jdGlvbihFLEQpe3ZhciBIPXt9LEc9RS5z cGxpdCgiJiIpLEk9ZGVjb2RlVVJJQ29tcG9uZW50LGUsRjtFeHQuZWFjaChHLGZ1bmN0aW9uKEop e0o9Si5zcGxpdCgiPSIpO2U9SShKWzBdKTtGPUkoSlsxXSk7SFtlXT1EfHwhSFtlXT9GOltdLmNv bmNhdChIW2VdKS5jb25jYXQoRil9KTtyZXR1cm4gSH0sdXJsQXBwZW5kOmZ1bmN0aW9uKGUsRCl7 aWYoIUV4dC5pc0VtcHR5KEQpKXtyZXR1cm4gZSsoZS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYi KStEfXJldHVybiBlfSx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHI/ZnVuY3Rpb24oZSxGLEQs RSl7RT1bXTtFeHQuZWFjaChlLGZ1bmN0aW9uKEcpe0UucHVzaChHKX0pO3JldHVybiBFLnNsaWNl KEZ8fDAsRHx8RS5sZW5ndGgpfTpmdW5jdGlvbihlLEUsRCl7cmV0dXJuIEFycmF5LnByb3RvdHlw ZS5zbGljZS5jYWxsKGUsRXx8MCxEfHxlLmxlbmd0aCl9fSgpLGVhY2g6ZnVuY3Rpb24oRyxGLEUp e2lmKEV4dC5pc0VtcHR5KEcsdHJ1ZSkpe3JldHVybn1pZighcyhHKXx8RXh0LmlzUHJpbWl0aXZl KEcpKXtHPVtHXX1mb3IodmFyIEQ9MCxlPUcubGVuZ3RoO0Q8ZTtEKyspe2lmKEYuY2FsbChFfHxH W0RdLEdbRF0sRCxHKT09PWZhbHNlKXtyZXR1cm4gRH19fSxpdGVyYXRlOmZ1bmN0aW9uKEUsRCxl KXtpZihzKEUpKXtFeHQuZWFjaChFLEQsZSk7cmV0dXJufWVsc2V7aWYoRXh0LmlzT2JqZWN0KEUp KXtmb3IodmFyIEYgaW4gRSl7aWYoRS5oYXNPd25Qcm9wZXJ0eShGKSl7aWYoRC5jYWxsKGV8fEUs RixFW0ZdKT09PWZhbHNlKXtyZXR1cm59fX19fX0sZ2V0RG9tOmZ1bmN0aW9uKGUpe2lmKCFlfHwh aSl7cmV0dXJuIG51bGx9cmV0dXJuIGUuZG9tP2UuZG9tOihFeHQuaXNTdHJpbmcoZSk/aS5nZXRF bGVtZW50QnlJZChlKTplKX0sZ2V0Qm9keTpmdW5jdGlvbigpe3JldHVybiBFeHQuZ2V0KGkuYm9k eXx8aS5kb2N1bWVudEVsZW1lbnQpfSxyZW1vdmVOb2RlOnI/ZnVuY3Rpb24oKXt2YXIgZTtyZXR1 cm4gZnVuY3Rpb24oRCl7aWYoRCYmRC50YWdOYW1lIT0iQk9EWSIpe2U9ZXx8aS5jcmVhdGVFbGVt ZW50KCJkaXYiKTtlLmFwcGVuZENoaWxkKEQpO2UuaW5uZXJIVE1MPSIifX19KCk6ZnVuY3Rpb24o ZSl7aWYoZSYmZS5wYXJlbnROb2RlJiZlLnRhZ05hbWUhPSJCT0RZIil7ZS5wYXJlbnROb2RlLnJl bW92ZUNoaWxkKGUpfX0saXNFbXB0eTpmdW5jdGlvbihELGUpe3JldHVybiBEPT09bnVsbHx8RD09 PXVuZGVmaW5lZHx8KChFeHQuaXNBcnJheShEKSYmIUQubGVuZ3RoKSl8fCghZT9EPT09IiI6ZmFs c2UpfSxpc0FycmF5OmZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KGUpPT09IltvYmplY3QgQXJy YXldIn0saXNPYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnR5cGVvZiBlPT0ib2JqZWN0In0s aXNQcmltaXRpdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIEV4dC5pc1N0cmluZyhlKXx8RXh0LmlzTnVt YmVyKGUpfHxFeHQuaXNCb29sZWFuKGUpfSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiB0 LmFwcGx5KGUpPT09IltvYmplY3QgRnVuY3Rpb25dIn0saXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0 dXJuIHR5cGVvZiBlPT09Im51bWJlciImJmlzRmluaXRlKGUpfSxpc1N0cmluZzpmdW5jdGlvbihl KXtyZXR1cm4gdHlwZW9mIGU9PT0ic3RyaW5nIn0saXNCb29sZWFuOmZ1bmN0aW9uKGUpe3JldHVy biB0eXBlb2YgZT09PSJib29sZWFuIn0saXNEZWZpbmVkOmZ1bmN0aW9uKGUpe3JldHVybiB0eXBl b2YgZSE9PSJ1bmRlZmluZWQifSxpc09wZXJhOkIsaXNXZWJLaXQ6dixpc0Nocm9tZTpoLGlzU2Fm YXJpOnksaXNTYWZhcmkzOmIsaXNTYWZhcmk0OkMsaXNTYWZhcmkyOmYsaXNJRTpyLGlzSUU2OnEs aXNJRTc6cCxpc0lFODpvLGlzR2Vja286bixpc0dlY2tvMjpkLGlzR2Vja28zOmEsaXNCb3JkZXJC b3g6dyxpc0xpbnV4Om0saXNXaW5kb3dzOkEsaXNNYWM6ayxpc0FpcjpqfSk7RXh0Lm5zPUV4dC5u YW1lc3BhY2V9KSgpO0V4dC5ucygiRXh0IiwiRXh0LnV0aWwiLCJFeHQubGliIiwiRXh0LmRhdGEi KTtFeHQuYXBwbHkoRnVuY3Rpb24ucHJvdG90eXBlLHtjcmVhdGVJbnRlcmNlcHRvcjpmdW5jdGlv bihiLGEpe3ZhciBjPXRoaXM7cmV0dXJuICFFeHQuaXNGdW5jdGlvbihiKT90aGlzOmZ1bmN0aW9u KCl7dmFyIGU9dGhpcyxkPWFyZ3VtZW50cztiLnRhcmdldD1lO2IubWV0aG9kPWM7cmV0dXJuKGIu YXBwbHkoYXx8ZXx8d2luZG93LGQpIT09ZmFsc2UpP2MuYXBwbHkoZXx8d2luZG93LGQpOm51bGx9 fSxjcmVhdGVDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50cyxiPXRoaXM7cmV0dXJu IGZ1bmN0aW9uKCl7cmV0dXJuIGIuYXBwbHkod2luZG93LGEpfX0sY3JlYXRlRGVsZWdhdGU6ZnVu Y3Rpb24oYyxiLGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9Ynx8YXJndW1l bnRzO2lmKGE9PT10cnVlKXtmPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyww KTtmPWYuY29uY2F0KGIpfWVsc2V7aWYoRXh0LmlzTnVtYmVyKGEpKXtmPUFycmF5LnByb3RvdHlw ZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTt2YXIgZT1bYSwwXS5jb25jYXQoYik7QXJyYXkucHJv dG90eXBlLnNwbGljZS5hcHBseShmLGUpfX1yZXR1cm4gZC5hcHBseShjfHx3aW5kb3csZil9fSxk ZWZlcjpmdW5jdGlvbihjLGUsYixhKXt2YXIgZD10aGlzLmNyZWF0ZURlbGVnYXRlKGUsYixhKTtp ZihjPjApe3JldHVybiBzZXRUaW1lb3V0KGQsYyl9ZCgpO3JldHVybiAwfX0pO0V4dC5hcHBseUlm KFN0cmluZyx7Zm9ybWF0OmZ1bmN0aW9uKGIpe3ZhciBhPUV4dC50b0FycmF5KGFyZ3VtZW50cywx KTtyZXR1cm4gYi5yZXBsYWNlKC9ceyhcZCspXH0vZyxmdW5jdGlvbihjLGQpe3JldHVybiBhW2Rd fSl9fSk7RXh0LmFwcGx5SWYoQXJyYXkucHJvdG90eXBlLHtpbmRleE9mOmZ1bmN0aW9uKGMpe2Zv cih2YXIgYj0wLGE9dGhpcy5sZW5ndGg7YjxhO2IrKyl7aWYodGhpc1tiXT09Yyl7cmV0dXJuIGJ9 fXJldHVybiAtMX0scmVtb3ZlOmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMuaW5kZXhPZihiKTtpZihh IT0tMSl7dGhpcy5zcGxpY2UoYSwxKX1yZXR1cm4gdGhpc319KTtFeHQubnMoIkV4dC5ncmlkIiwi RXh0LmRkIiwiRXh0LnRyZWUiLCJFeHQuZm9ybSIsIkV4dC5tZW51IiwiRXh0LnN0YXRlIiwiRXh0 LmxheW91dCIsIkV4dC5hcHAiLCJFeHQudXgiLCJFeHQuY2hhcnQiLCJFeHQuZGlyZWN0Iik7RXh0 LmFwcGx5KEV4dCxmdW5jdGlvbigpe3ZhciBiPUV4dCxhPTA7cmV0dXJue2VtcHR5Rm46ZnVuY3Rp b24oKXt9LEJMQU5LX0lNQUdFX1VSTDpFeHQuaXNJRTZ8fEV4dC5pc0lFNz8iaHR0cDovL2V4dGpz LmNvbS9zLmdpZiI6ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBSUQvQU1EQXdB QUFBQ0g1QkFFQUFBQUFMQUFBQUFBQkFBRUFBQUlDUkFFQU93PT0iLGV4dGVuZFg6ZnVuY3Rpb24o YyxkKXtyZXR1cm4gRXh0LmV4dGVuZChjLGQoYy5wcm90b3R5cGUpKX0sZ2V0RG9jOmZ1bmN0aW9u KCl7cmV0dXJuIEV4dC5nZXQoZG9jdW1lbnQpfSxpc0RhdGU6ZnVuY3Rpb24oYyl7cmV0dXJuIE9i amVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkoYyk9PT0iW29iamVjdCBEYXRlXSJ9LG51bTpm dW5jdGlvbihkLGMpe2Q9TnVtYmVyKGQ9PT1udWxsfHx0eXBlb2YgZD09ImJvb2xlYW4iP05hTjpk KTtyZXR1cm4gaXNOYU4oZCk/YzpkfSx2YWx1ZTpmdW5jdGlvbihlLGMsZCl7cmV0dXJuIEV4dC5p c0VtcHR5KGUsZCk/YzplfSxlc2NhcGVSZTpmdW5jdGlvbihjKXtyZXR1cm4gYy5yZXBsYWNlKC8o Wy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csIlxcJDEiKX0sc2VxdWVuY2U6ZnVuY3Rpb24oZixjLGUs ZCl7ZltjXT1mW2NdLmNyZWF0ZVNlcXVlbmNlKGUsZCl9LGFkZEJlaGF2aW9yczpmdW5jdGlvbihn KXtpZighRXh0LmlzUmVhZHkpe0V4dC5vblJlYWR5KGZ1bmN0aW9uKCl7RXh0LmFkZEJlaGF2aW9y cyhnKX0pfWVsc2V7dmFyIGQ9e30sZixjLGU7Zm9yKGMgaW4gZyl7aWYoKGY9Yy5zcGxpdCgiQCIp KVsxXSl7ZT1mWzBdO2lmKCFkW2VdKXtkW2VdPUV4dC5zZWxlY3QoZSl9ZFtlXS5vbihmWzFdLGdb Y10pfX1kPW51bGx9fSxjb21iaW5lOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLGQ9ZS5sZW5n dGgsZz1bXTtmb3IodmFyIGY9MDtmPGQ7ZisrKXt2YXIgYz1lW2ZdO2lmKEV4dC5pc0FycmF5KGMp KXtnPWcuY29uY2F0KGMpfWVsc2V7aWYoYy5sZW5ndGghPT11bmRlZmluZWQmJiFjLnN1YnN0cil7 Zz1nLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLDApKX1lbHNle2cucHVzaChj KX19fXJldHVybiBnfSxjb3B5VG86ZnVuY3Rpb24oYyxkLGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5n Iil7ZT1lLnNwbGl0KC9bLDtcc10vKX1FeHQuZWFjaChlLGZ1bmN0aW9uKGYpe2lmKGQuaGFzT3du UHJvcGVydHkoZikpe2NbZl09ZFtmXX19LHRoaXMpO3JldHVybiBjfSxkZXN0cm95OmZ1bmN0aW9u KCl7RXh0LmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGMpe2lmKGMpe2lmKEV4dC5pc0FycmF5KGMp KXt0aGlzLmRlc3Ryb3kuYXBwbHkodGhpcyxjKX1lbHNle2lmKEV4dC5pc0Z1bmN0aW9uKGMuZGVz dHJveSkpe2MuZGVzdHJveSgpfWVsc2V7aWYoYy5kb20pe2MucmVtb3ZlKCl9fX19fSx0aGlzKX0s ZGVzdHJveU1lbWJlcnM6ZnVuY3Rpb24oaixnLGUsZil7Zm9yKHZhciBoPTEsZD1hcmd1bWVudHMs Yz1kLmxlbmd0aDtoPGM7aCsrKXtFeHQuZGVzdHJveShqW2RbaF1dKTtkZWxldGUgaltkW2hdXX19 LGNsZWFuOmZ1bmN0aW9uKGMpe3ZhciBkPVtdO0V4dC5lYWNoKGMsZnVuY3Rpb24oZSl7aWYoISFl KXtkLnB1c2goZSl9fSk7cmV0dXJuIGR9LHVuaXF1ZTpmdW5jdGlvbihjKXt2YXIgZD1bXSxlPXt9 O0V4dC5lYWNoKGMsZnVuY3Rpb24oZil7aWYoIWVbZl0pe2QucHVzaChmKX1lW2ZdPXRydWV9KTty ZXR1cm4gZH0sZmxhdHRlbjpmdW5jdGlvbihjKXt2YXIgZT1bXTtmdW5jdGlvbiBkKGYpe0V4dC5l YWNoKGYsZnVuY3Rpb24oZyl7aWYoRXh0LmlzQXJyYXkoZykpe2QoZyl9ZWxzZXtlLnB1c2goZyl9 fSk7cmV0dXJuIGV9cmV0dXJuIGQoYyl9LG1pbjpmdW5jdGlvbihjLGQpe3ZhciBlPWNbMF07ZD1k fHxmdW5jdGlvbihnLGYpe3JldHVybiBnPGY/LTE6MX07RXh0LmVhY2goYyxmdW5jdGlvbihmKXtl PWQoZSxmKT09LTE/ZTpmfSk7cmV0dXJuIGV9LG1heDpmdW5jdGlvbihjLGQpe3ZhciBlPWNbMF07 ZD1kfHxmdW5jdGlvbihnLGYpe3JldHVybiBnPmY/MTotMX07RXh0LmVhY2goYyxmdW5jdGlvbihm KXtlPWQoZSxmKT09MT9lOmZ9KTtyZXR1cm4gZX0sbWVhbjpmdW5jdGlvbihjKXtyZXR1cm4gRXh0 LnN1bShjKS9jLmxlbmd0aH0sc3VtOmZ1bmN0aW9uKGMpe3ZhciBkPTA7RXh0LmVhY2goYyxmdW5j dGlvbihlKXtkKz1lfSk7cmV0dXJuIGR9LHBhcnRpdGlvbjpmdW5jdGlvbihjLGQpe3ZhciBlPVtb XSxbXV07RXh0LmVhY2goYyxmdW5jdGlvbihnLGgsZil7ZVsoZCYmZChnLGgsZikpfHwoIWQmJmcp PzA6MV0ucHVzaChnKX0pO3JldHVybiBlfSxpbnZva2U6ZnVuY3Rpb24oYyxkKXt2YXIgZj1bXSxl PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtFeHQuZWFjaChjLGZ1bmN0 aW9uKGcsaCl7aWYoZyYmdHlwZW9mIGdbZF09PSJmdW5jdGlvbiIpe2YucHVzaChnW2RdLmFwcGx5 KGcsZSkpfWVsc2V7Zi5wdXNoKHVuZGVmaW5lZCl9fSk7cmV0dXJuIGZ9LHBsdWNrOmZ1bmN0aW9u KGMsZSl7dmFyIGQ9W107RXh0LmVhY2goYyxmdW5jdGlvbihmKXtkLnB1c2goZltlXSl9KTtyZXR1 cm4gZH0semlwOmZ1bmN0aW9uKCl7dmFyIGw9RXh0LnBhcnRpdGlvbihhcmd1bWVudHMsZnVuY3Rp b24oaSl7cmV0dXJuICFFeHQuaXNGdW5jdGlvbihpKX0pLGc9bFswXSxrPWxbMV1bMF0sYz1FeHQu bWF4KEV4dC5wbHVjayhnLCJsZW5ndGgiKSksZj1bXTtmb3IodmFyIGg9MDtoPGM7aCsrKXtmW2hd PVtdO2lmKGspe2ZbaF09ay5hcHBseShrLEV4dC5wbHVjayhnLGgpKX1lbHNle2Zvcih2YXIgZT0w LGQ9Zy5sZW5ndGg7ZTxkO2UrKyl7ZltoXS5wdXNoKGdbZV1baF0pfX19cmV0dXJuIGZ9LGdldENt cDpmdW5jdGlvbihjKXtyZXR1cm4gRXh0LkNvbXBvbmVudE1nci5nZXQoYyl9LHVzZVNoaW1zOmIu aXNJRTZ8fChiLmlzTWFjJiZiLmlzR2Vja28yKSx0eXBlOmZ1bmN0aW9uKGQpe2lmKGQ9PT11bmRl ZmluZWR8fGQ9PT1udWxsKXtyZXR1cm4gZmFsc2V9aWYoZC5odG1sRWxlbWVudCl7cmV0dXJuImVs ZW1lbnQifXZhciBjPXR5cGVvZiBkO2lmKGM9PSJvYmplY3QiJiZkLm5vZGVOYW1lKXtzd2l0Y2go ZC5ub2RlVHlwZSl7Y2FzZSAxOnJldHVybiJlbGVtZW50IjtjYXNlIDM6cmV0dXJuKC9cUy8pLnRl c3QoZC5ub2RlVmFsdWUpPyJ0ZXh0bm9kZSI6IndoaXRlc3BhY2UifX1pZihjPT0ib2JqZWN0Inx8 Yz09ImZ1bmN0aW9uIil7c3dpdGNoKGQuY29uc3RydWN0b3Ipe2Nhc2UgQXJyYXk6cmV0dXJuImFy cmF5IjtjYXNlIFJlZ0V4cDpyZXR1cm4icmVnZXhwIjtjYXNlIERhdGU6cmV0dXJuImRhdGUifWlm KHR5cGVvZiBkLmxlbmd0aD09Im51bWJlciImJnR5cGVvZiBkLml0ZW09PSJmdW5jdGlvbiIpe3Jl dHVybiJub2RlbGlzdCJ9fXJldHVybiBjfSxpbnRlcmNlcHQ6ZnVuY3Rpb24oZixjLGUsZCl7Zltj XT1mW2NdLmNyZWF0ZUludGVyY2VwdG9yKGUsZCl9LGNhbGxiYWNrOmZ1bmN0aW9uKGMsZixlLGQp e2lmKEV4dC5pc0Z1bmN0aW9uKGMpKXtpZihkKXtjLmRlZmVyKGQsZixlfHxbXSl9ZWxzZXtjLmFw cGx5KGYsZXx8W10pfX19fX0oKSk7RXh0LmFwcGx5KEZ1bmN0aW9uLnByb3RvdHlwZSx7Y3JlYXRl U2VxdWVuY2U6ZnVuY3Rpb24oYixhKXt2YXIgYz10aGlzO3JldHVybiAhRXh0LmlzRnVuY3Rpb24o Yik/dGhpczpmdW5jdGlvbigpe3ZhciBkPWMuYXBwbHkodGhpc3x8d2luZG93LGFyZ3VtZW50cyk7 Yi5hcHBseShhfHx0aGlzfHx3aW5kb3csYXJndW1lbnRzKTtyZXR1cm4gZH19fSk7RXh0LmFwcGx5 SWYoU3RyaW5nLHtlc2NhcGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvKCd8XFwpL2cs IlxcJDEiKX0sbGVmdFBhZDpmdW5jdGlvbihkLGIsYyl7dmFyIGE9U3RyaW5nKGQpO2lmKCFjKXtj PSIgIn13aGlsZShhLmxlbmd0aDxiKXthPWMrYX1yZXR1cm4gYX19KTtTdHJpbmcucHJvdG90eXBl LnRvZ2dsZT1mdW5jdGlvbihiLGEpe3JldHVybiB0aGlzPT1iP2E6Yn07U3RyaW5nLnByb3RvdHlw ZS50cmltPWZ1bmN0aW9uKCl7dmFyIGE9L15ccyt8XHMrJC9nO3JldHVybiBmdW5jdGlvbigpe3Jl dHVybiB0aGlzLnJlcGxhY2UoYSwiIil9fSgpO0RhdGUucHJvdG90eXBlLmdldEVsYXBzZWQ9ZnVu Y3Rpb24oYSl7cmV0dXJuIE1hdGguYWJzKChhfHxuZXcgRGF0ZSgpKS5nZXRUaW1lKCktdGhpcy5n ZXRUaW1lKCkpfTtFeHQuYXBwbHlJZihOdW1iZXIucHJvdG90eXBlLHtjb25zdHJhaW46ZnVuY3Rp b24oYixhKXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgodGhpcyxiKSxhKX19KTtFeHQudXRpbC5U YXNrUnVubmVyPWZ1bmN0aW9uKGUpe2U9ZXx8MTA7dmFyIGY9W10sYT1bXSxiPTAsZz1mYWxzZSxk PWZ1bmN0aW9uKCl7Zz1mYWxzZTtjbGVhckludGVydmFsKGIpO2I9MH0saD1mdW5jdGlvbigpe2lm KCFnKXtnPXRydWU7Yj1zZXRJbnRlcnZhbChpLGUpfX0sYz1mdW5jdGlvbihqKXthLnB1c2goaik7 aWYoai5vblN0b3Ape2oub25TdG9wLmFwcGx5KGouc2NvcGV8fGopfX0saT1mdW5jdGlvbigpe3Zh ciBsPWEubGVuZ3RoLG49bmV3IERhdGUoKS5nZXRUaW1lKCk7aWYobD4wKXtmb3IodmFyIHA9MDtw PGw7cCsrKXtmLnJlbW92ZShhW3BdKX1hPVtdO2lmKGYubGVuZ3RoPDEpe2QoKTtyZXR1cm59fWZv cih2YXIgcD0wLG8sayxtLGo9Zi5sZW5ndGg7cDxqOysrcCl7bz1mW3BdO2s9bi1vLnRhc2tSdW5U aW1lO2lmKG8uaW50ZXJ2YWw8PWspe209by5ydW4uYXBwbHkoby5zY29wZXx8byxvLmFyZ3N8fFsr K28udGFza1J1bkNvdW50XSk7by50YXNrUnVuVGltZT1uO2lmKG09PT1mYWxzZXx8by50YXNrUnVu Q291bnQ9PT1vLnJlcGVhdCl7YyhvKTtyZXR1cm59fWlmKG8uZHVyYXRpb24mJm8uZHVyYXRpb248 PShuLW8udGFza1N0YXJ0VGltZSkpe2Mobyl9fX07dGhpcy5zdGFydD1mdW5jdGlvbihqKXtmLnB1 c2goaik7ai50YXNrU3RhcnRUaW1lPW5ldyBEYXRlKCkuZ2V0VGltZSgpO2oudGFza1J1blRpbWU9 MDtqLnRhc2tSdW5Db3VudD0wO2goKTtyZXR1cm4gan07dGhpcy5zdG9wPWZ1bmN0aW9uKGope2Mo aik7cmV0dXJuIGp9O3RoaXMuc3RvcEFsbD1mdW5jdGlvbigpe2QoKTtmb3IodmFyIGs9MCxqPWYu bGVuZ3RoO2s8ajtrKyspe2lmKGZba10ub25TdG9wKXtmW2tdLm9uU3RvcCgpfX1mPVtdO2E9W119 fTtFeHQuVGFza01ncj1uZXcgRXh0LnV0aWwuVGFza1J1bm5lcigpOyhmdW5jdGlvbigpe3ZhciBi O2Z1bmN0aW9uIGMoZCl7aWYoIWIpe2I9bmV3IEV4dC5FbGVtZW50LkZseXdlaWdodCgpfWIuZG9t PWQ7cmV0dXJuIGJ9KGZ1bmN0aW9uKCl7dmFyIGY9ZG9jdW1lbnQsZD1mLmNvbXBhdE1vZGU9PSJD U1MxQ29tcGF0IixlPU1hdGgubWF4LGc9cGFyc2VJbnQ7RXh0LmxpYi5Eb209e2lzQW5jZXN0b3I6 ZnVuY3Rpb24oaSxqKXt2YXIgaD1mYWxzZTtpPUV4dC5nZXREb20oaSk7aj1FeHQuZ2V0RG9tKGop O2lmKGkmJmope2lmKGkuY29udGFpbnMpe3JldHVybiBpLmNvbnRhaW5zKGopfWVsc2V7aWYoaS5j b21wYXJlRG9jdW1lbnRQb3NpdGlvbil7cmV0dXJuICEhKGkuY29tcGFyZURvY3VtZW50UG9zaXRp b24oaikmMTYpfWVsc2V7d2hpbGUoaj1qLnBhcmVudE5vZGUpe2g9aj09aXx8aH19fX1yZXR1cm4g aH0sZ2V0Vmlld1dpZHRoOmZ1bmN0aW9uKGgpe3JldHVybiBoP3RoaXMuZ2V0RG9jdW1lbnRXaWR0 aCgpOnRoaXMuZ2V0Vmlld3BvcnRXaWR0aCgpfSxnZXRWaWV3SGVpZ2h0OmZ1bmN0aW9uKGgpe3Jl dHVybiBoP3RoaXMuZ2V0RG9jdW1lbnRIZWlnaHQoKTp0aGlzLmdldFZpZXdwb3J0SGVpZ2h0KCl9 LGdldERvY3VtZW50SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIGUoIWQ/Zi5ib2R5LnNjcm9sbEhl aWdodDpmLmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQsdGhpcy5nZXRWaWV3cG9ydEhlaWdo dCgpKX0sZ2V0RG9jdW1lbnRXaWR0aDpmdW5jdGlvbigpe3JldHVybiBlKCFkP2YuYm9keS5zY3Jv bGxXaWR0aDpmLmRvY3VtZW50RWxlbWVudC5zY3JvbGxXaWR0aCx0aGlzLmdldFZpZXdwb3J0V2lk dGgoKSl9LGdldFZpZXdwb3J0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIEV4dC5pc0lFPyhFeHQu aXNTdHJpY3Q/Zi5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OmYuYm9keS5jbGllbnRIZWln aHQpOnNlbGYuaW5uZXJIZWlnaHR9LGdldFZpZXdwb3J0V2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4g IUV4dC5pc1N0cmljdCYmIUV4dC5pc09wZXJhP2YuYm9keS5jbGllbnRXaWR0aDpFeHQuaXNJRT9m LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDpzZWxmLmlubmVyV2lkdGh9LGdldFk6ZnVuY3Rp b24oaCl7cmV0dXJuIHRoaXMuZ2V0WFkoaClbMV19LGdldFg6ZnVuY3Rpb24oaCl7cmV0dXJuIHRo aXMuZ2V0WFkoaClbMF19LGdldFhZOmZ1bmN0aW9uKGope3ZhciBpLG8scix1LGssbCx0PTAscT0w LHMsaCxtPShmLmJvZHl8fGYuZG9jdW1lbnRFbGVtZW50KSxuPVswLDBdO2o9RXh0LmdldERvbShq KTtpZihqIT1tKXtpZihqLmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7cj1qLmdldEJvdW5kaW5nQ2xp ZW50UmVjdCgpO3M9Yyhkb2N1bWVudCkuZ2V0U2Nyb2xsKCk7bj1bci5sZWZ0K3MubGVmdCxyLnRv cCtzLnRvcF19ZWxzZXtpPWo7aD1jKGopLmlzU3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKTt3 aGlsZShpKXtvPWMoaSk7dCs9aS5vZmZzZXRMZWZ0O3ErPWkub2Zmc2V0VG9wO2g9aHx8by5pc1N0 eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIik7aWYoRXh0LmlzR2Vja28pe3ErPXU9ZyhvLmdldFN0 eWxlKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MDt0Kz1rPWcoby5nZXRTdHlsZSgiYm9yZGVyTGVm dFdpZHRoIiksMTApfHwwO2lmKGkhPWomJiFvLmlzU3R5bGUoIm92ZXJmbG93IiwidmlzaWJsZSIp KXt0Kz1rO3ErPXV9fWk9aS5vZmZzZXRQYXJlbnR9aWYoRXh0LmlzU2FmYXJpJiZoKXt0LT1tLm9m ZnNldExlZnQ7cS09bS5vZmZzZXRUb3B9aWYoRXh0LmlzR2Vja28mJiFoKXtsPWMobSk7dCs9Zyhs LmdldFN0eWxlKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDA7cSs9ZyhsLmdldFN0eWxlKCJib3Jk ZXJUb3BXaWR0aCIpLDEwKXx8MH1pPWoucGFyZW50Tm9kZTt3aGlsZShpJiZpIT1tKXtpZighRXh0 LmlzT3BlcmF8fChpLnRhZ05hbWUhPSJUUiImJiFjKGkpLmlzU3R5bGUoImRpc3BsYXkiLCJpbmxp bmUiKSkpe3QtPWkuc2Nyb2xsTGVmdDtxLT1pLnNjcm9sbFRvcH1pPWkucGFyZW50Tm9kZX1uPVt0 LHFdfX1yZXR1cm4gbn0sc2V0WFk6ZnVuY3Rpb24oaSxqKXsoaT1FeHQuZmx5KGksIl9zZXRYWSIp KS5wb3NpdGlvbigpO3ZhciBrPWkudHJhbnNsYXRlUG9pbnRzKGopLGg9aS5kb20uc3R5bGUsbDtm b3IobCBpbiBrKXtpZighaXNOYU4oa1tsXSkpe2hbbF09a1tsXSsicHgifX19LHNldFg6ZnVuY3Rp b24oaSxoKXt0aGlzLnNldFhZKGksW2gsZmFsc2VdKX0sc2V0WTpmdW5jdGlvbihoLGkpe3RoaXMu c2V0WFkoaCxbZmFsc2UsaV0pfX19KSgpO0V4dC5saWIuRG9tLmdldFJlZ2lvbj1mdW5jdGlvbihk KXtyZXR1cm4gRXh0LmxpYi5SZWdpb24uZ2V0UmVnaW9uKGQpfTtFeHQubGliLkV2ZW50PWZ1bmN0 aW9uKCl7dmFyIHk9ZmFsc2Usdz1bXSxnPVtdLEQ9MCxxPVtdLGQsRz1mYWxzZSxrPXdpbmRvdyxL PWRvY3VtZW50LGw9MjAwLHQ9MjAsRT0wLHM9MSxpPTIsbT0zLHU9Myx6PTQsdj0ic2Nyb2xsTGVm dCIscj0ic2Nyb2xsVG9wIixmPSJ1bmxvYWQiLEI9Im1vdXNlb3ZlciIsSj0ibW91c2VvdXQiLGU9 ZnVuY3Rpb24oKXt2YXIgTDtpZihrLmFkZEV2ZW50TGlzdGVuZXIpe0w9ZnVuY3Rpb24oUCxOLE8s TSl7aWYoTj09Im1vdXNlZW50ZXIiKXtPPU8uY3JlYXRlSW50ZXJjZXB0b3Iobyk7UC5hZGRFdmVu dExpc3RlbmVyKEIsTywoTSkpfWVsc2V7aWYoTj09Im1vdXNlbGVhdmUiKXtPPU8uY3JlYXRlSW50 ZXJjZXB0b3Iobyk7UC5hZGRFdmVudExpc3RlbmVyKEosTywoTSkpfWVsc2V7UC5hZGRFdmVudExp c3RlbmVyKE4sTywoTSkpfX1yZXR1cm4gT319ZWxzZXtpZihrLmF0dGFjaEV2ZW50KXtMPWZ1bmN0 aW9uKFAsTixPLE0pe1AuYXR0YWNoRXZlbnQoIm9uIitOLE8pO3JldHVybiBPfX1lbHNle0w9ZnVu Y3Rpb24oKXt9fX1yZXR1cm4gTH0oKSxoPWZ1bmN0aW9uKCl7dmFyIEw7aWYoay5yZW1vdmVFdmVu dExpc3RlbmVyKXtMPWZ1bmN0aW9uKFAsTixPLE0pe2lmKE49PSJtb3VzZWVudGVyIil7Tj1CfWVs c2V7aWYoTj09Im1vdXNlbGVhdmUiKXtOPUp9fVAucmVtb3ZlRXZlbnRMaXN0ZW5lcihOLE8sKE0p KX19ZWxzZXtpZihrLmRldGFjaEV2ZW50KXtMPWZ1bmN0aW9uKE8sTSxOKXtPLmRldGFjaEV2ZW50 KCJvbiIrTSxOKX19ZWxzZXtMPWZ1bmN0aW9uKCl7fX19cmV0dXJuIEx9KCk7dmFyIEY9RXh0Lmlz R2Vja28/ZnVuY3Rpb24oTCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChM KT09IltvYmplY3QgWFVMRWxlbWVudF0ifTpmdW5jdGlvbigpe307dmFyIHA9RXh0LmlzR2Vja28/ ZnVuY3Rpb24oTCl7dHJ5e3JldHVybiBMLm5vZGVUeXBlPT0zfWNhdGNoKE0pe3JldHVybiBmYWxz ZX19OmZ1bmN0aW9uKEwpe3JldHVybiBMLm5vZGVUeXBlPT0zfTtmdW5jdGlvbiBvKE0pe3ZhciBM PUEuZ2V0UmVsYXRlZFRhcmdldChNKTtyZXR1cm4gIShGKEwpfHx4KE0uY3VycmVudFRhcmdldCxM KSl9ZnVuY3Rpb24geChMLE4pe2lmKEwmJkwuZmlyc3RDaGlsZCl7d2hpbGUoTil7aWYoTj09PUwp e3JldHVybiB0cnVlfXRyeXtOPU4ucGFyZW50Tm9kZX1jYXRjaChNKXtyZXR1cm4gZmFsc2V9aWYo TiYmKE4ubm9kZVR5cGUhPTEpKXtOPW51bGx9fX1yZXR1cm4gZmFsc2V9ZnVuY3Rpb24gQyhPLEws Til7dmFyIE09LTE7RXh0LmVhY2godyxmdW5jdGlvbihQLFEpe2lmKFAmJlBbaV09PU4mJlBbRV09 PU8mJlBbc109PUwpe009UX19KTtyZXR1cm4gTX1mdW5jdGlvbiBIKCl7dmFyIEw9ZmFsc2UsTz1b XSxNLE49IXl8fChEPjApO2lmKCFHKXtHPXRydWU7RXh0LmVhY2gocSxmdW5jdGlvbihRLFIsUCl7 aWYoUSYmKE09Sy5nZXRFbGVtZW50QnlJZChRLmlkKSkpe2lmKCFRLmNoZWNrUmVhZHl8fHl8fE0u bmV4dFNpYmxpbmd8fChLJiZLLmJvZHkpKXtNPVEub3ZlcnJpZGU/KFEub3ZlcnJpZGU9PT10cnVl P1Eub2JqOlEub3ZlcnJpZGUpOk07US5mbi5jYWxsKE0sUS5vYmopO3FbUl09bnVsbH1lbHNle08u cHVzaChRKX19fSk7RD0oTy5sZW5ndGg9PT0wKT8wOkQtMTtpZihOKXtuKCl9ZWxzZXtjbGVhcklu dGVydmFsKGQpO2Q9bnVsbH1MPSEoRz1mYWxzZSl9cmV0dXJuIEx9ZnVuY3Rpb24gbigpe2lmKCFk KXt2YXIgTD1mdW5jdGlvbigpe0goKX07ZD1zZXRJbnRlcnZhbChMLHQpfX1mdW5jdGlvbiBJKCl7 dmFyIEw9Sy5kb2N1bWVudEVsZW1lbnQsTT1LLmJvZHk7aWYoTCYmKExbcl18fExbdl0pKXtyZXR1 cm5bTFt2XSxMW3JdXX1lbHNle2lmKE0pe3JldHVybltNW3ZdLE1bcl1dfWVsc2V7cmV0dXJuWzAs MF19fX1mdW5jdGlvbiBqKEwsTSl7TD1MLmJyb3dzZXJFdmVudHx8TDt2YXIgTj1MWyJwYWdlIitN XTtpZighTiYmTiE9PTApe049TFsiY2xpZW50IitNXXx8MDtpZihFeHQuaXNJRSl7Tis9SSgpW009 PSJYIj8wOjFdfX1yZXR1cm4gTn12YXIgQT17b25BdmFpbGFibGU6ZnVuY3Rpb24oTixMLE8sTSl7 cS5wdXNoKHtpZDpOLGZuOkwsb2JqOk8sb3ZlcnJpZGU6TSxjaGVja1JlYWR5OmZhbHNlfSk7RD1s O24oKX0sYWRkTGlzdGVuZXI6ZnVuY3Rpb24oTyxMLE4pe3ZhciBNO089RXh0LmdldERvbShPKTtp ZihPJiZOKXtpZihmPT1MKXtNPSEhKGdbZy5sZW5ndGhdPVtPLEwsTl0pfWVsc2V7dy5wdXNoKFtP LEwsTixNPWUoTyxMLE4sZmFsc2UpXSl9fXJldHVybiAhIU19LHJlbW92ZUxpc3RlbmVyOmZ1bmN0 aW9uKFEsTSxQKXt2YXIgTz1mYWxzZSxOLEw7UT1FeHQuZ2V0RG9tKFEpO2lmKCFQKXtPPXRoaXMu cHVyZ2VFbGVtZW50KFEsZmFsc2UsTSl9ZWxzZXtpZihmPT1NKXtFeHQuZWFjaChnLGZ1bmN0aW9u KFMsVCxSKXtpZihTJiZTWzBdPT1RJiZTWzFdPT1NJiZTWzJdPT1QKXtnLnNwbGljZShULDEpO089 dHJ1ZX19KX1lbHNle049YXJndW1lbnRzWzNdfHxDKFEsTSxQKTtMPXdbTl07aWYoUSYmTCl7aChR LE0sTFttXSxmYWxzZSk7TFttXT1MW2ldPW51bGw7dy5zcGxpY2UoTiwxKTtPPXRydWV9fX1yZXR1 cm4gT30sZ2V0VGFyZ2V0OmZ1bmN0aW9uKEwpe0w9TC5icm93c2VyRXZlbnR8fEw7cmV0dXJuIHRo aXMucmVzb2x2ZVRleHROb2RlKEwudGFyZ2V0fHxMLnNyY0VsZW1lbnQpfSxyZXNvbHZlVGV4dE5v ZGU6ZnVuY3Rpb24oTCl7cmV0dXJuIEwmJiFGKEwpJiZwKEwpP0wucGFyZW50Tm9kZTpMfSxnZXRS ZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKEwpe0w9TC5icm93c2VyRXZlbnR8fEw7cmV0dXJuIHRoaXMu cmVzb2x2ZVRleHROb2RlKEwucmVsYXRlZFRhcmdldHx8KEwudHlwZT09Sj9MLnRvRWxlbWVudDpM LnR5cGU9PUI/TC5mcm9tRWxlbWVudDpudWxsKSl9LGdldFBhZ2VYOmZ1bmN0aW9uKEwpe3JldHVy biBqKEwsIlgiKX0sZ2V0UGFnZVk6ZnVuY3Rpb24oTCl7cmV0dXJuIGooTCwiWSIpfSxnZXRYWTpm dW5jdGlvbihMKXtyZXR1cm5bdGhpcy5nZXRQYWdlWChMKSx0aGlzLmdldFBhZ2VZKEwpXX0sc3Rv cEV2ZW50OmZ1bmN0aW9uKEwpe3RoaXMuc3RvcFByb3BhZ2F0aW9uKEwpO3RoaXMucHJldmVudERl ZmF1bHQoTCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbihMKXtMPUwuYnJvd3NlckV2ZW50fHxM O2lmKEwuc3RvcFByb3BhZ2F0aW9uKXtMLnN0b3BQcm9wYWdhdGlvbigpfWVsc2V7TC5jYW5jZWxC dWJibGU9dHJ1ZX19LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKEwpe0w9TC5icm93c2VyRXZlbnR8 fEw7aWYoTC5wcmV2ZW50RGVmYXVsdCl7TC5wcmV2ZW50RGVmYXVsdCgpfWVsc2V7TC5yZXR1cm5W YWx1ZT1mYWxzZX19LGdldEV2ZW50OmZ1bmN0aW9uKEwpe0w9THx8ay5ldmVudDtpZighTCl7dmFy IE09dGhpcy5nZXRFdmVudC5jYWxsZXI7d2hpbGUoTSl7TD1NLmFyZ3VtZW50c1swXTtpZihMJiZF dmVudD09TC5jb25zdHJ1Y3Rvcil7YnJlYWt9TT1NLmNhbGxlcn19cmV0dXJuIEx9LGdldENoYXJD b2RlOmZ1bmN0aW9uKEwpe0w9TC5icm93c2VyRXZlbnR8fEw7cmV0dXJuIEwuY2hhckNvZGV8fEwu a2V5Q29kZXx8MH0sX2xvYWQ6ZnVuY3Rpb24oTSl7eT10cnVlO3ZhciBMPUV4dC5saWIuRXZlbnQ7 aWYoRXh0LmlzSUUmJk0hPT10cnVlKXtoKGssImxvYWQiLGFyZ3VtZW50cy5jYWxsZWUpfX0scHVy Z2VFbGVtZW50OmZ1bmN0aW9uKE0sTyxMKXt2YXIgTj10aGlzO0V4dC5lYWNoKE4uZ2V0TGlzdGVu ZXJzKE0sTCksZnVuY3Rpb24oUCl7aWYoUCl7Ti5yZW1vdmVMaXN0ZW5lcihNLFAudHlwZSxQLmZu KX19KTtpZihPJiZNJiZNLmNoaWxkTm9kZXMpe0V4dC5lYWNoKE0uY2hpbGROb2RlcyxmdW5jdGlv bihQKXtOLnB1cmdlRWxlbWVudChQLE8sTCl9KX19LGdldExpc3RlbmVyczpmdW5jdGlvbihPLE0p e3ZhciBQPXRoaXMsTj1bXSxMO2lmKE0pe0w9TT09Zj9nOnd9ZWxzZXtMPXcuY29uY2F0KGcpfUV4 dC5lYWNoKEwsZnVuY3Rpb24oUSxSKXtpZihRJiZRW0VdPT1PJiYoIU18fE09PVFbc10pKXtOLnB1 c2goe3R5cGU6UVtzXSxmbjpRW2ldLG9iajpRW3VdLGFkanVzdDpRW3pdLGluZGV4OlJ9KX19KTty ZXR1cm4gTi5sZW5ndGg/TjpudWxsfSxfdW5sb2FkOmZ1bmN0aW9uKFMpe3ZhciBSPUV4dC5saWIu RXZlbnQsUCxPLE0sTCxOLFE7RXh0LmVhY2goZyxmdW5jdGlvbihUKXtpZihUKXt0cnl7UT1UW3pd PyhUW3pdPT09dHJ1ZT9UW3VdOlRbel0pOms7VFtpXS5jYWxsKFEsUi5nZXRFdmVudChTKSxUW3Vd KX1jYXRjaChVKXt9fX0pO2c9bnVsbDtpZih3JiYoTz13Lmxlbmd0aCkpe3doaWxlKE8pe2lmKChN PXdbTj0tLU9dKSl7Ui5yZW1vdmVMaXN0ZW5lcihNW0VdLE1bc10sTVtpXSxOKX19fWgoayxmLFIu X3VubG9hZCl9fTtBLm9uPUEuYWRkTGlzdGVuZXI7QS51bj1BLnJlbW92ZUxpc3RlbmVyO2lmKEsm JksuYm9keSl7QS5fbG9hZCh0cnVlKX1lbHNle2UoaywibG9hZCIsQS5fbG9hZCl9ZShrLGYsQS5f dW5sb2FkKTtIKCk7cmV0dXJuIEF9KCk7RXh0LmxpYi5BamF4PWZ1bmN0aW9uKCl7dmFyIGc9WyJN U1hNTDIuWE1MSFRUUC4zLjAiLCJNU1hNTDIuWE1MSFRUUCIsIk1pY3Jvc29mdC5YTUxIVFRQIl0s ZD0iQ29udGVudC1UeXBlIjtmdW5jdGlvbiBoKHMpe3ZhciByPXMuY29ubix0O2Z1bmN0aW9uIHEo dSx2KXtmb3IodCBpbiB2KXtpZih2Lmhhc093blByb3BlcnR5KHQpKXt1LnNldFJlcXVlc3RIZWFk ZXIodCx2W3RdKX19fWlmKGsuZGVmYXVsdEhlYWRlcnMpe3EocixrLmRlZmF1bHRIZWFkZXJzKX1p ZihrLmhlYWRlcnMpe3EocixrLmhlYWRlcnMpO2suaGVhZGVycz1udWxsfX1mdW5jdGlvbiBlKHQs cyxyLHEpe3JldHVybnt0SWQ6dCxzdGF0dXM6cj8tMTowLHN0YXR1c1RleHQ6cj8idHJhbnNhY3Rp b24gYWJvcnRlZCI6ImNvbW11bmljYXRpb24gZmFpbHVyZSIsaXNBYm9ydDp0cnVlLGlzVGltZW91 dDp0cnVlLGFyZ3VtZW50OnN9fWZ1bmN0aW9uIGoocSxyKXsoay5oZWFkZXJzPWsuaGVhZGVyc3x8 e30pW3FdPXJ9ZnVuY3Rpb24gbyh6LHgpe3ZhciByPXt9LHYsdz16LmNvbm4scSx1O3RyeXt2PXou Y29ubi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTtFeHQuZWFjaCh2LnJlcGxhY2UoL1xyXG4vZywi XG4iKS5zcGxpdCgiXG4iKSxmdW5jdGlvbihzKXtxPXMuaW5kZXhPZigiOiIpO2lmKHE+PTApe3U9 cy5zdWJzdHIoMCxxKS50b0xvd2VyQ2FzZSgpO2lmKHMuY2hhckF0KHErMSk9PSIgIil7KytxfXJb dV09cy5zdWJzdHIocSsxKX19KX1jYXRjaCh5KXt9cmV0dXJue3RJZDp6LnRJZCxzdGF0dXM6dy5z dGF0dXMsc3RhdHVzVGV4dDp3LnN0YXR1c1RleHQsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24o cyl7cmV0dXJuIHJbcy50b0xvd2VyQ2FzZSgpXX0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0 aW9uKCl7cmV0dXJuIHZ9LHJlc3BvbnNlVGV4dDp3LnJlc3BvbnNlVGV4dCxyZXNwb25zZVhNTDp3 LnJlc3BvbnNlWE1MLGFyZ3VtZW50Onh9fWZ1bmN0aW9uIG4ocSl7cS5jb25uPW51bGw7cT1udWxs fWZ1bmN0aW9uIGYodix3LHIscSl7aWYoIXcpe24odik7cmV0dXJufXZhciB0LHM7dHJ5e2lmKHYu Y29ubi5zdGF0dXMhPT11bmRlZmluZWQmJnYuY29ubi5zdGF0dXMhPTApe3Q9di5jb25uLnN0YXR1 c31lbHNle3Q9MTMwMzB9fWNhdGNoKHUpe3Q9MTMwMzB9aWYoKHQ+PTIwMCYmdDwzMDApfHwoRXh0 LmlzSUUmJnQ9PTEyMjMpKXtzPW8odix3LmFyZ3VtZW50KTtpZih3LnN1Y2Nlc3Mpe2lmKCF3LnNj b3BlKXt3LnN1Y2Nlc3Mocyl9ZWxzZXt3LnN1Y2Nlc3MuYXBwbHkody5zY29wZSxbc10pfX19ZWxz ZXtzd2l0Y2godCl7Y2FzZSAxMjAwMjpjYXNlIDEyMDI5OmNhc2UgMTIwMzA6Y2FzZSAxMjAzMTpj YXNlIDEyMTUyOmNhc2UgMTMwMzA6cz1lKHYudElkLHcuYXJndW1lbnQsKHI/cjpmYWxzZSkscSk7 aWYody5mYWlsdXJlKXtpZighdy5zY29wZSl7dy5mYWlsdXJlKHMpfWVsc2V7dy5mYWlsdXJlLmFw cGx5KHcuc2NvcGUsW3NdKX19YnJlYWs7ZGVmYXVsdDpzPW8odix3LmFyZ3VtZW50KTtpZih3LmZh aWx1cmUpe2lmKCF3LnNjb3BlKXt3LmZhaWx1cmUocyl9ZWxzZXt3LmZhaWx1cmUuYXBwbHkody5z Y29wZSxbc10pfX19fW4odik7cz1udWxsfWZ1bmN0aW9uIG0ocyx2KXt2PXZ8fHt9O3ZhciBxPXMu Y29ubix1PXMudElkLHI9ay5wb2xsLHQ9di50aW1lb3V0fHxudWxsO2lmKHQpe2sudGltZW91dFt1 XT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ay5hYm9ydChzLHYsdHJ1ZSl9LHQpfXJbdV09c2V0SW50 ZXJ2YWwoZnVuY3Rpb24oKXtpZihxJiZxLnJlYWR5U3RhdGU9PTQpe2NsZWFySW50ZXJ2YWwoclt1 XSk7clt1XT1udWxsO2lmKHQpe2NsZWFyVGltZW91dChrLnRpbWVvdXRbdV0pO2sudGltZW91dFt1 XT1udWxsfWYocyx2KX19LGsucG9sbEludGVydmFsKX1mdW5jdGlvbiBpKHUscix0LHEpe3ZhciBz PWwoKXx8bnVsbDtpZihzKXtzLmNvbm4ub3Blbih1LHIsdHJ1ZSk7aWYoay51c2VEZWZhdWx0WGhy SGVhZGVyKXtqKCJYLVJlcXVlc3RlZC1XaXRoIixrLmRlZmF1bHRYaHJIZWFkZXIpfWlmKHEmJmsu dXNlRGVmYXVsdEhlYWRlciYmKCFrLmhlYWRlcnN8fCFrLmhlYWRlcnNbZF0pKXtqKGQsay5kZWZh dWx0UG9zdEhlYWRlcil9aWYoay5kZWZhdWx0SGVhZGVyc3x8ay5oZWFkZXJzKXtoKHMpfW0ocyx0 KTtzLmNvbm4uc2VuZChxfHxudWxsKX1yZXR1cm4gc31mdW5jdGlvbiBsKCl7dmFyIHI7dHJ5e2lm KHI9cChrLnRyYW5zYWN0aW9uSWQpKXtrLnRyYW5zYWN0aW9uSWQrK319Y2F0Y2gocSl7fWZpbmFs bHl7cmV0dXJuIHJ9fWZ1bmN0aW9uIHAodCl7dmFyIHE7dHJ5e3E9bmV3IFhNTEh0dHBSZXF1ZXN0 KCl9Y2F0Y2gocyl7Zm9yKHZhciByPTA7cjxnLmxlbmd0aDsrK3Ipe3RyeXtxPW5ldyBBY3RpdmVY T2JqZWN0KGdbcl0pO2JyZWFrfWNhdGNoKHMpe319fWZpbmFsbHl7cmV0dXJue2Nvbm46cSx0SWQ6 dH19fXZhciBrPXtyZXF1ZXN0OmZ1bmN0aW9uKHEscyx0LHUseSl7aWYoeSl7dmFyIHY9dGhpcyxy PXkueG1sRGF0YSx3PXkuanNvbkRhdGEseDtFeHQuYXBwbHlJZih2LHkpO2lmKHJ8fHcpe3g9di5o ZWFkZXJzO2lmKCF4fHwheFtkXSl7aihkLHI/InRleHQveG1sIjoiYXBwbGljYXRpb24vanNvbiIp fXU9cnx8KEV4dC5pc09iamVjdCh3KT9FeHQuZW5jb2RlKHcpOncpfX1yZXR1cm4gaShxfHx5Lm1l dGhvZHx8IlBPU1QiLHMsdCx1KX0sc2VyaWFsaXplRm9ybTpmdW5jdGlvbihyKXt2YXIgcz1yLmVs ZW1lbnRzfHwoZG9jdW1lbnQuZm9ybXNbcl18fEV4dC5nZXREb20ocikpLmVsZW1lbnRzLHk9ZmFs c2UseD1lbmNvZGVVUklDb21wb25lbnQsdix6LHEsdCx1PSIiLHc7RXh0LmVhY2gocyxmdW5jdGlv bihBKXtxPUEubmFtZTt3PUEudHlwZTtpZighQS5kaXNhYmxlZCYmcSl7aWYoL3NlbGVjdC0ob25l fG11bHRpcGxlKS9pLnRlc3Qodykpe0V4dC5lYWNoKEEub3B0aW9ucyxmdW5jdGlvbihCKXtpZihC LnNlbGVjdGVkKXt1Kz1TdHJpbmcuZm9ybWF0KCJ7MH09ezF9JiIseChxKSwoQi5oYXNBdHRyaWJ1 dGU/Qi5oYXNBdHRyaWJ1dGUoInZhbHVlIik6Qi5nZXRBdHRyaWJ1dGVOb2RlKCJ2YWx1ZSIpLnNw ZWNpZmllZCk/Qi52YWx1ZTpCLnRleHQpfX0pfWVsc2V7aWYoIS9maWxlfHVuZGVmaW5lZHxyZXNl dHxidXR0b24vaS50ZXN0KHcpKXtpZighKC9yYWRpb3xjaGVja2JveC9pLnRlc3QodykmJiFBLmNo ZWNrZWQpJiYhKHc9PSJzdWJtaXQiJiZ5KSl7dSs9eChxKSsiPSIreChBLnZhbHVlKSsiJiI7eT0v c3VibWl0L2kudGVzdCh3KX19fX19KTtyZXR1cm4gdS5zdWJzdHIoMCx1Lmxlbmd0aC0xKX0sdXNl RGVmYXVsdEhlYWRlcjp0cnVlLGRlZmF1bHRQb3N0SGVhZGVyOiJhcHBsaWNhdGlvbi94LXd3dy1m b3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLHVzZURlZmF1bHRYaHJIZWFkZXI6dHJ1ZSxk ZWZhdWx0WGhySGVhZGVyOiJYTUxIdHRwUmVxdWVzdCIscG9sbDp7fSx0aW1lb3V0Ont9LHBvbGxJ bnRlcnZhbDo1MCx0cmFuc2FjdGlvbklkOjAsYWJvcnQ6ZnVuY3Rpb24odCx2LHEpe3ZhciBzPXRo aXMsdT10LnRJZCxyPWZhbHNlO2lmKHMuaXNDYWxsSW5Qcm9ncmVzcyh0KSl7dC5jb25uLmFib3J0 KCk7Y2xlYXJJbnRlcnZhbChzLnBvbGxbdV0pO3MucG9sbFt1XT1udWxsO2lmKHEpe3MudGltZW91 dFt1XT1udWxsfWYodCx2LChyPXRydWUpLHEpfXJldHVybiByfSxpc0NhbGxJblByb2dyZXNzOmZ1 bmN0aW9uKHEpe3JldHVybiBxLmNvbm4mJiF7MDp0cnVlLDQ6dHJ1ZX1bcS5jb25uLnJlYWR5U3Rh dGVdfX07cmV0dXJuIGt9KCk7RXh0LmxpYi5SZWdpb249ZnVuY3Rpb24oZixoLGQsZSl7dmFyIGc9 dGhpcztnLnRvcD1mO2dbMV09ZjtnLnJpZ2h0PWg7Zy5ib3R0b209ZDtnLmxlZnQ9ZTtnWzBdPWV9 O0V4dC5saWIuUmVnaW9uLnByb3RvdHlwZT17Y29udGFpbnM6ZnVuY3Rpb24oZSl7dmFyIGQ9dGhp cztyZXR1cm4oZS5sZWZ0Pj1kLmxlZnQmJmUucmlnaHQ8PWQucmlnaHQmJmUudG9wPj1kLnRvcCYm ZS5ib3R0b208PWQuYm90dG9tKX0sZ2V0QXJlYTpmdW5jdGlvbigpe3ZhciBkPXRoaXM7cmV0dXJu KChkLmJvdHRvbS1kLnRvcCkqKGQucmlnaHQtZC5sZWZ0KSl9LGludGVyc2VjdDpmdW5jdGlvbihp KXt2YXIgaD10aGlzLGY9TWF0aC5tYXgoaC50b3AsaS50b3ApLGc9TWF0aC5taW4oaC5yaWdodCxp LnJpZ2h0KSxkPU1hdGgubWluKGguYm90dG9tLGkuYm90dG9tKSxlPU1hdGgubWF4KGgubGVmdCxp LmxlZnQpO2lmKGQ+PWYmJmc+PWUpe3JldHVybiBuZXcgRXh0LmxpYi5SZWdpb24oZixnLGQsZSl9 fSx1bmlvbjpmdW5jdGlvbihpKXt2YXIgaD10aGlzLGY9TWF0aC5taW4oaC50b3AsaS50b3ApLGc9 TWF0aC5tYXgoaC5yaWdodCxpLnJpZ2h0KSxkPU1hdGgubWF4KGguYm90dG9tLGkuYm90dG9tKSxl PU1hdGgubWluKGgubGVmdCxpLmxlZnQpO3JldHVybiBuZXcgRXh0LmxpYi5SZWdpb24oZixnLGQs ZSl9LGNvbnN0cmFpblRvOmZ1bmN0aW9uKGUpe3ZhciBkPXRoaXM7ZC50b3A9ZC50b3AuY29uc3Ry YWluKGUudG9wLGUuYm90dG9tKTtkLmJvdHRvbT1kLmJvdHRvbS5jb25zdHJhaW4oZS50b3AsZS5i b3R0b20pO2QubGVmdD1kLmxlZnQuY29uc3RyYWluKGUubGVmdCxlLnJpZ2h0KTtkLnJpZ2h0PWQu cmlnaHQuY29uc3RyYWluKGUubGVmdCxlLnJpZ2h0KTtyZXR1cm4gZH0sYWRqdXN0OmZ1bmN0aW9u KGYsZSxkLGgpe3ZhciBnPXRoaXM7Zy50b3ArPWY7Zy5sZWZ0Kz1lO2cucmlnaHQrPWg7Zy5ib3R0 b20rPWQ7cmV0dXJuIGd9fTtFeHQubGliLlJlZ2lvbi5nZXRSZWdpb249ZnVuY3Rpb24oZyl7dmFy IGk9RXh0LmxpYi5Eb20uZ2V0WFkoZyksZj1pWzFdLGg9aVswXStnLm9mZnNldFdpZHRoLGQ9aVsx XStnLm9mZnNldEhlaWdodCxlPWlbMF07cmV0dXJuIG5ldyBFeHQubGliLlJlZ2lvbihmLGgsZCxl KX07RXh0LmxpYi5Qb2ludD1mdW5jdGlvbihkLGYpe2lmKEV4dC5pc0FycmF5KGQpKXtmPWRbMV07 ZD1kWzBdfXZhciBlPXRoaXM7ZS54PWUucmlnaHQ9ZS5sZWZ0PWVbMF09ZDtlLnk9ZS50b3A9ZS5i b3R0b209ZVsxXT1mfTtFeHQubGliLlBvaW50LnByb3RvdHlwZT1uZXcgRXh0LmxpYi5SZWdpb24o KTsoZnVuY3Rpb24oKXt2YXIgZz1FeHQubGliLGk9L3dpZHRofGhlaWdodHxvcGFjaXR5fHBhZGRp bmcvaSxmPS9eKCh3aWR0aHxoZWlnaHQpfCh0b3B8bGVmdCkpJC8sZD0vd2lkdGh8aGVpZ2h0fHRv cCR8Ym90dG9tJHxsZWZ0JHxyaWdodCQvaSxoPS9cZCsoZW18JXxlbnxleHxwdHxpbnxjbXxtbXxw YykkL2ksaj1mdW5jdGlvbihrKXtyZXR1cm4gdHlwZW9mIGshPT0idW5kZWZpbmVkIn0sZT1mdW5j dGlvbigpe3JldHVybiBuZXcgRGF0ZSgpfTtnLkFuaW09e21vdGlvbjpmdW5jdGlvbihuLGwsbyxw LGssbSl7cmV0dXJuIHRoaXMucnVuKG4sbCxvLHAsayxtLEV4dC5saWIuTW90aW9uKX0scnVuOmZ1 bmN0aW9uKG8sbCxxLHIsayxuLG0pe209bXx8RXh0LmxpYi5BbmltQmFzZTtpZih0eXBlb2Ygcj09 InN0cmluZyIpe3I9RXh0LmxpYi5FYXNpbmdbcl19dmFyIHA9bmV3IG0obyxsLHEscik7cC5hbmlt YXRlWChmdW5jdGlvbigpe2lmKEV4dC5pc0Z1bmN0aW9uKGspKXtrLmNhbGwobil9fSk7cmV0dXJu IHB9fTtnLkFuaW1CYXNlPWZ1bmN0aW9uKGwsayxtLG4pe2lmKGwpe3RoaXMuaW5pdChsLGssbSxu KX19O2cuQW5pbUJhc2UucHJvdG90eXBlPXtkb01ldGhvZDpmdW5jdGlvbihrLG4sbCl7dmFyIG09 dGhpcztyZXR1cm4gbS5tZXRob2QobS5jdXJGcmFtZSxuLGwtbixtLnRvdGFsRnJhbWVzKX0sc2V0 QXR0cjpmdW5jdGlvbihrLG0sbCl7aWYoaS50ZXN0KGspJiZtPDApe209MH1FeHQuZmx5KHRoaXMu ZWwsIl9hbmltIikuc2V0U3R5bGUoayxtK2wpfSxnZXRBdHRyOmZ1bmN0aW9uKGspe3ZhciBtPUV4 dC5mbHkodGhpcy5lbCksbj1tLmdldFN0eWxlKGspLGw9Zi5leGVjKGspfHxbXTtpZihuIT09ImF1 dG8iJiYhaC50ZXN0KG4pKXtyZXR1cm4gcGFyc2VGbG9hdChuKX1yZXR1cm4oISEobFsyXSl8fCht LmdldFN0eWxlKCJwb3NpdGlvbiIpPT0iYWJzb2x1dGUiJiYhIShsWzNdKSkpP20uZG9tWyJvZmZz ZXQiK2xbMF0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbFswXS5zdWJzdHIoMSldOjB9LGdldERl ZmF1bHRVbml0OmZ1bmN0aW9uKGspe3JldHVybiBkLnRlc3Qoayk/InB4IjoiIn0sYW5pbWF0ZVg6 ZnVuY3Rpb24obixrKXt2YXIgbD10aGlzLG09ZnVuY3Rpb24oKXtsLm9uQ29tcGxldGUucmVtb3Zl TGlzdGVuZXIobSk7aWYoRXh0LmlzRnVuY3Rpb24obikpe24uY2FsbChrfHxsLGwpfX07bC5vbkNv bXBsZXRlLmFkZExpc3RlbmVyKG0sbCk7bC5hbmltYXRlKCl9LHNldFJ1bkF0dHI6ZnVuY3Rpb24o bil7dmFyIHA9dGhpcyxxPXRoaXMuYXR0cmlidXRlc1tuXSxyPXEudG8sbz1xLmJ5LHM9cS5mcm9t LHQ9cS51bml0LGw9KHRoaXMucnVuQXR0cnNbbl09e30pLG07aWYoIWoocikmJiFqKG8pKXtyZXR1 cm4gZmFsc2V9dmFyIGs9aihzKT9zOnAuZ2V0QXR0cihuKTtpZihqKHIpKXttPXJ9ZWxzZXtpZihq KG8pKXtpZihFeHQuaXNBcnJheShrKSl7bT1bXTtFeHQuZWFjaChrLGZ1bmN0aW9uKHUsdyl7bVt3 XT11K29bd119KX1lbHNle209aytvfX19RXh0LmFwcGx5KGwse3N0YXJ0OmssZW5kOm0sdW5pdDpq KHQpP3Q6cC5nZXREZWZhdWx0VW5pdChuKX0pfSxpbml0OmZ1bmN0aW9uKGwscCxvLGspe3ZhciBy PXRoaXMsbj0wLHM9Zy5BbmltTWdyO0V4dC5hcHBseShyLHtpc0FuaW1hdGVkOmZhbHNlLHN0YXJ0 VGltZTpudWxsLGVsOkV4dC5nZXREb20obCksYXR0cmlidXRlczpwfHx7fSxkdXJhdGlvbjpvfHwx LG1ldGhvZDprfHxnLkVhc2luZy5lYXNlTm9uZSx1c2VTZWM6dHJ1ZSxjdXJGcmFtZTowLHRvdGFs RnJhbWVzOnMuZnBzLHJ1bkF0dHJzOnt9LGFuaW1hdGU6ZnVuY3Rpb24oKXt2YXIgdT10aGlzLHY9 dS5kdXJhdGlvbjtpZih1LmlzQW5pbWF0ZWQpe3JldHVybiBmYWxzZX11LmN1ckZyYW1lPTA7dS50 b3RhbEZyYW1lcz11LnVzZVNlYz9NYXRoLmNlaWwocy5mcHMqdik6djtzLnJlZ2lzdGVyRWxlbWVu dCh1KX0sc3RvcDpmdW5jdGlvbih1KXt2YXIgdj10aGlzO2lmKHUpe3YuY3VyRnJhbWU9di50b3Rh bEZyYW1lczt2Ll9vblR3ZWVuLmZpcmUoKX1zLnN0b3Aodil9fSk7dmFyIHQ9ZnVuY3Rpb24oKXt2 YXIgdj10aGlzLHU7di5vblN0YXJ0LmZpcmUoKTt2LnJ1bkF0dHJzPXt9O2Zvcih1IGluIHRoaXMu YXR0cmlidXRlcyl7dGhpcy5zZXRSdW5BdHRyKHUpfXYuaXNBbmltYXRlZD10cnVlO3Yuc3RhcnRU aW1lPWUoKTtuPTB9O3ZhciBxPWZ1bmN0aW9uKCl7dmFyIHY9dGhpczt2Lm9uVHdlZW4uZmlyZSh7 ZHVyYXRpb246ZSgpLXYuc3RhcnRUaW1lLGN1ckZyYW1lOnYuY3VyRnJhbWV9KTt2YXIgdz12LnJ1 bkF0dHJzO2Zvcih2YXIgdSBpbiB3KXt0aGlzLnNldEF0dHIodSx2LmRvTWV0aG9kKHUsd1t1XS5z dGFydCx3W3VdLmVuZCksd1t1XS51bml0KX0rK259O3ZhciBtPWZ1bmN0aW9uKCl7dmFyIHU9dGhp cyx3PShlKCktdS5zdGFydFRpbWUpLzEwMDAsdj17ZHVyYXRpb246dyxmcmFtZXM6bixmcHM6bi93 fTt1LmlzQW5pbWF0ZWQ9ZmFsc2U7bj0wO3Uub25Db21wbGV0ZS5maXJlKHYpfTtyLm9uU3RhcnQ9 bmV3IEV4dC51dGlsLkV2ZW50KHIpO3Iub25Ud2Vlbj1uZXcgRXh0LnV0aWwuRXZlbnQocik7ci5v bkNvbXBsZXRlPW5ldyBFeHQudXRpbC5FdmVudChyKTsoci5fb25TdGFydD1uZXcgRXh0LnV0aWwu RXZlbnQocikpLmFkZExpc3RlbmVyKHQpOyhyLl9vblR3ZWVuPW5ldyBFeHQudXRpbC5FdmVudChy KSkuYWRkTGlzdGVuZXIocSk7KHIuX29uQ29tcGxldGU9bmV3IEV4dC51dGlsLkV2ZW50KHIpKS5h ZGRMaXN0ZW5lcihtKX19O0V4dC5saWIuQW5pbU1ncj1uZXcgZnVuY3Rpb24oKXt2YXIgbz10aGlz LG09bnVsbCxsPVtdLGs9MDtFeHQuYXBwbHkobyx7ZnBzOjEwMDAsZGVsYXk6MSxyZWdpc3RlckVs ZW1lbnQ6ZnVuY3Rpb24ocSl7bC5wdXNoKHEpOysraztxLl9vblN0YXJ0LmZpcmUoKTtvLnN0YXJ0 KCl9LHVuUmVnaXN0ZXI6ZnVuY3Rpb24ocixxKXtyLl9vbkNvbXBsZXRlLmZpcmUoKTtxPXF8fHAo cik7aWYocSE9LTEpe2wuc3BsaWNlKHEsMSl9aWYoLS1rPD0wKXtvLnN0b3AoKX19LHN0YXJ0OmZ1 bmN0aW9uKCl7aWYobT09PW51bGwpe209c2V0SW50ZXJ2YWwoby5ydW4sby5kZWxheSl9fSxzdG9w OmZ1bmN0aW9uKHMpe2lmKCFzKXtjbGVhckludGVydmFsKG0pO2Zvcih2YXIgcj0wLHE9bC5sZW5n dGg7cjxxOysrcil7aWYobFswXS5pc0FuaW1hdGVkKXtvLnVuUmVnaXN0ZXIobFswXSwwKX19bD1b XTttPW51bGw7az0wfWVsc2V7by51blJlZ2lzdGVyKHMpfX0scnVuOmZ1bmN0aW9uKCl7dmFyIHE7 RXh0LmVhY2gobCxmdW5jdGlvbihyKXtpZihyJiZyLmlzQW5pbWF0ZWQpe3E9ci50b3RhbEZyYW1l cztpZihyLmN1ckZyYW1lPHF8fHE9PT1udWxsKXsrK3IuY3VyRnJhbWU7aWYoci51c2VTZWMpe24o cil9ci5fb25Ud2Vlbi5maXJlKCl9ZWxzZXtvLnN0b3Aocil9fX0sbyl9fSk7dmFyIHA9ZnVuY3Rp b24ocil7dmFyIHE9LTE7RXh0LmVhY2gobCxmdW5jdGlvbih0LHMpe2lmKHQ9PXIpe3E9cztyZXR1 cm4gZmFsc2V9fSk7cmV0dXJuIHF9O3ZhciBuPWZ1bmN0aW9uKHIpe3ZhciB2PXIudG90YWxGcmFt ZXMsdT1yLmN1ckZyYW1lLHQ9ci5kdXJhdGlvbixzPSh1KnQqMTAwMC92KSxxPShlKCktci5zdGFy dFRpbWUpLHc9MDtpZihxPHQqMTAwMCl7dz1NYXRoLnJvdW5kKChxL3MtMSkqdSl9ZWxzZXt3PXYt KHUrMSl9aWYodz4wJiZpc0Zpbml0ZSh3KSl7aWYoci5jdXJGcmFtZSt3Pj12KXt3PXYtKHUrMSl9 ci5jdXJGcmFtZSs9d319fTtnLkJlemllcj1uZXcgZnVuY3Rpb24oKXt0aGlzLmdldFBvc2l0aW9u PWZ1bmN0aW9uKHAsbyl7dmFyIHI9cC5sZW5ndGgsbT1bXSxxPTEtbyxsLGs7Zm9yKGw9MDtsPHI7 KytsKXttW2xdPVtwW2xdWzBdLHBbbF1bMV1dfWZvcihrPTE7azxyOysrayl7Zm9yKGw9MDtsPHIt azsrK2wpe21bbF1bMF09cSptW2xdWzBdK28qbVtwYXJzZUludChsKzEsMTApXVswXTttW2xdWzFd PXEqbVtsXVsxXStvKm1bcGFyc2VJbnQobCsxLDEwKV1bMV19fXJldHVyblttWzBdWzBdLG1bMF1b MV1dfX07Zy5FYXNpbmc9e2Vhc2VOb25lOmZ1bmN0aW9uKGwsayxuLG0pe3JldHVybiBuKmwvbStr fSxlYXNlSW46ZnVuY3Rpb24obCxrLG4sbSl7cmV0dXJuIG4qKGwvPW0pKmwra30sZWFzZU91dDpm dW5jdGlvbihsLGssbixtKXtyZXR1cm4gLW4qKGwvPW0pKihsLTIpK2t9fTsoZnVuY3Rpb24oKXtn Lk1vdGlvbj1mdW5jdGlvbihwLG8scSxyKXtpZihwKXtnLk1vdGlvbi5zdXBlcmNsYXNzLmNvbnN0 cnVjdG9yLmNhbGwodGhpcyxwLG8scSxyKX19O0V4dC5leHRlbmQoZy5Nb3Rpb24sRXh0LmxpYi5B bmltQmFzZSk7dmFyIG49Zy5Nb3Rpb24uc3VwZXJjbGFzcyxtPWcuTW90aW9uLnByb3RvdHlwZSxs PS9ecG9pbnRzJC9pO0V4dC5hcHBseShnLk1vdGlvbi5wcm90b3R5cGUse3NldEF0dHI6ZnVuY3Rp b24obyxzLHIpe3ZhciBxPXRoaXMscD1uLnNldEF0dHI7aWYobC50ZXN0KG8pKXtyPXJ8fCJweCI7 cC5jYWxsKHEsImxlZnQiLHNbMF0scik7cC5jYWxsKHEsInRvcCIsc1sxXSxyKX1lbHNle3AuY2Fs bChxLG8scyxyKX19LGdldEF0dHI6ZnVuY3Rpb24obyl7dmFyIHE9dGhpcyxwPW4uZ2V0QXR0cjty ZXR1cm4gbC50ZXN0KG8pP1twLmNhbGwocSwibGVmdCIpLHAuY2FsbChxLCJ0b3AiKV06cC5jYWxs KHEsbyl9LGRvTWV0aG9kOmZ1bmN0aW9uKG8scixwKXt2YXIgcT10aGlzO3JldHVybiBsLnRlc3Qo byk/Zy5CZXppZXIuZ2V0UG9zaXRpb24ocS5ydW5BdHRyc1tvXSxxLm1ldGhvZChxLmN1ckZyYW1l LDAsMTAwLHEudG90YWxGcmFtZXMpLzEwMCk6bi5kb01ldGhvZC5jYWxsKHEsbyxyLHApfSxzZXRS dW5BdHRyOmZ1bmN0aW9uKHYpe2lmKGwudGVzdCh2KSl7dmFyIHg9dGhpcyxxPXRoaXMuZWwsQT10 aGlzLmF0dHJpYnV0ZXMucG9pbnRzLHQ9QS5jb250cm9sfHxbXSx5PUEuZnJvbSx6PUEudG8sdz1B LmJ5LEI9Zy5Eb20scCxzLHIsdSxvO2lmKHQubGVuZ3RoPjAmJiFFeHQuaXNBcnJheSh0WzBdKSl7 dD1bdF19ZWxzZXt9RXh0LmZseShxLCJfYW5pbSIpLnBvc2l0aW9uKCk7Qi5zZXRYWShxLGooeSk/ eTpCLmdldFhZKHEpKTtwPXguZ2V0QXR0cigicG9pbnRzIik7aWYoaih6KSl7cj1rLmNhbGwoeCx6 LHApO2ZvcihzPTAsdT10Lmxlbmd0aDtzPHU7KytzKXt0W3NdPWsuY2FsbCh4LHRbc10scCl9fWVs c2V7aWYoaih3KSl7cj1bcFswXSt3WzBdLHBbMV0rd1sxXV07Zm9yKHM9MCx1PXQubGVuZ3RoO3M8 dTsrK3Mpe3Rbc109W3BbMF0rdFtzXVswXSxwWzFdK3Rbc11bMV1dfX19bz10aGlzLnJ1bkF0dHJz W3ZdPVtwXTtpZih0Lmxlbmd0aD4wKXtvPW8uY29uY2F0KHQpfW9bby5sZW5ndGhdPXJ9ZWxzZXtu LnNldFJ1bkF0dHIuY2FsbCh0aGlzLHYpfX19KTt2YXIgaz1mdW5jdGlvbihvLHEpe3ZhciBwPWcu RG9tLmdldFhZKHRoaXMuZWwpO3JldHVybltvWzBdLXBbMF0rcVswXSxvWzFdLXBbMV0rcVsxXV19 fSkoKX0pKCk7KGZ1bmN0aW9uKCl7dmFyIGQ9TWF0aC5hYnMsaT1NYXRoLlBJLGg9TWF0aC5hc2lu LGc9TWF0aC5wb3csZT1NYXRoLnNpbixmPUV4dC5saWI7RXh0LmFwcGx5KGYuRWFzaW5nLHtlYXNl Qm90aDpmdW5jdGlvbihrLGosbSxsKXtyZXR1cm4oKGsvPWwvMik8MSk/bS8yKmsqaytqOi1tLzIq KCgtLWspKihrLTIpLTEpK2p9LGVhc2VJblN0cm9uZzpmdW5jdGlvbihrLGosbSxsKXtyZXR1cm4g bSooay89bCkqayprKmsran0sZWFzZU91dFN0cm9uZzpmdW5jdGlvbihrLGosbSxsKXtyZXR1cm4g LW0qKChrPWsvbC0xKSprKmsqay0xKStqfSxlYXNlQm90aFN0cm9uZzpmdW5jdGlvbihrLGosbSxs KXtyZXR1cm4oKGsvPWwvMik8MSk/bS8yKmsqayprKmsrajotbS8yKigoay09MikqayprKmstMikr an0sZWxhc3RpY0luOmZ1bmN0aW9uKGwsaixxLG8sayxuKXtpZihsPT0wfHwobC89byk9PTEpe3Jl dHVybiBsPT0wP2o6aitxfW49bnx8KG8qMC4zKTt2YXIgbTtpZihrPj1kKHEpKXttPW4vKDIqaSkq aChxL2spfWVsc2V7az1xO209bi80fXJldHVybiAtKGsqZygyLDEwKihsLT0xKSkqZSgobCpvLW0p KigyKmkpL24pKStqfSxlbGFzdGljT3V0OmZ1bmN0aW9uKGwsaixxLG8sayxuKXtpZihsPT0wfHwo bC89byk9PTEpe3JldHVybiBsPT0wP2o6aitxfW49bnx8KG8qMC4zKTt2YXIgbTtpZihrPj1kKHEp KXttPW4vKDIqaSkqaChxL2spfWVsc2V7az1xO209bi80fXJldHVybiBrKmcoMiwtMTAqbCkqZSgo bCpvLW0pKigyKmkpL24pK3Eran0sZWxhc3RpY0JvdGg6ZnVuY3Rpb24obCxqLHEsbyxrLG4pe2lm KGw9PTB8fChsLz1vLzIpPT0yKXtyZXR1cm4gbD09MD9qOmorcX1uPW58fChvKigwLjMqMS41KSk7 dmFyIG07aWYoaz49ZChxKSl7bT1uLygyKmkpKmgocS9rKX1lbHNle2s9cTttPW4vNH1yZXR1cm4g bDwxPy0wLjUqKGsqZygyLDEwKihsLT0xKSkqZSgobCpvLW0pKigyKmkpL24pKStqOmsqZygyLC0x MCoobC09MSkpKmUoKGwqby1tKSooMippKS9uKSowLjUrcStqfSxiYWNrSW46ZnVuY3Rpb24oayxq LG4sbSxsKXtsPWx8fDEuNzAxNTg7cmV0dXJuIG4qKGsvPW0pKmsqKChsKzEpKmstbCkran0sYmFj a091dDpmdW5jdGlvbihrLGosbixtLGwpe2lmKCFsKXtsPTEuNzAxNTh9cmV0dXJuIG4qKChrPWsv bS0xKSprKigobCsxKSprK2wpKzEpK2p9LGJhY2tCb3RoOmZ1bmN0aW9uKGssaixuLG0sbCl7bD1s fHwxLjcwMTU4O3JldHVybigoay89bS8yKTwxKT9uLzIqKGsqayooKChsKj0oMS41MjUpKSsxKSpr LWwpKStqOm4vMiooKGstPTIpKmsqKCgobCo9KDEuNTI1KSkrMSkqaytsKSsyKStqfSxib3VuY2VJ bjpmdW5jdGlvbihrLGosbSxsKXtyZXR1cm4gbS1mLkVhc2luZy5ib3VuY2VPdXQobC1rLDAsbSxs KStqfSxib3VuY2VPdXQ6ZnVuY3Rpb24oayxqLG0sbCl7aWYoKGsvPWwpPCgxLzIuNzUpKXtyZXR1 cm4gbSooNy41NjI1Kmsqaykran1lbHNle2lmKGs8KDIvMi43NSkpe3JldHVybiBtKig3LjU2MjUq KGstPSgxLjUvMi43NSkpKmsrMC43NSkran1lbHNle2lmKGs8KDIuNS8yLjc1KSl7cmV0dXJuIG0q KDcuNTYyNSooay09KDIuMjUvMi43NSkpKmsrMC45Mzc1KStqfX19cmV0dXJuIG0qKDcuNTYyNSoo ay09KDIuNjI1LzIuNzUpKSprKzAuOTg0Mzc1KStqfSxib3VuY2VCb3RoOmZ1bmN0aW9uKGssaixt LGwpe3JldHVybihrPGwvMik/Zi5FYXNpbmcuYm91bmNlSW4oayoyLDAsbSxsKSowLjUrajpmLkVh c2luZy5ib3VuY2VPdXQoayoyLWwsMCxtLGwpKjAuNSttKjAuNStqfX0pfSkoKTsoZnVuY3Rpb24o KXt2YXIgaD1FeHQubGliO2guQW5pbS5jb2xvcj1mdW5jdGlvbihwLG4scSxyLG0sbyl7cmV0dXJu IGguQW5pbS5ydW4ocCxuLHEscixtLG8saC5Db2xvckFuaW0pfTtoLkNvbG9yQW5pbT1mdW5jdGlv bihuLG0sbyxwKXtoLkNvbG9yQW5pbS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxu LG0sbyxwKX07RXh0LmV4dGVuZChoLkNvbG9yQW5pbSxoLkFuaW1CYXNlKTt2YXIgaj1oLkNvbG9y QW5pbS5zdXBlcmNsYXNzLGk9L2NvbG9yJC9pLGY9L150cmFuc3BhcmVudHxyZ2JhXCgwLCAwLCAw LCAwXCkkLyxsPS9ecmdiXCgoWzAtOV0rKVxzKixccyooWzAtOV0rKVxzKixccyooWzAtOV0rKVwp JC9pLGQ9L14jPyhbMC05QS1GXXsyfSkoWzAtOUEtRl17Mn0pKFswLTlBLUZdezJ9KSQvaSxlPS9e Iz8oWzAtOUEtRl17MX0pKFswLTlBLUZdezF9KShbMC05QS1GXXsxfSkkL2ksZz1mdW5jdGlvbiht KXtyZXR1cm4gdHlwZW9mIG0hPT0idW5kZWZpbmVkIn07ZnVuY3Rpb24gayhuKXt2YXIgcD1wYXJz ZUludCxvLG09bnVsbCxxO2lmKG4ubGVuZ3RoPT0zKXtyZXR1cm4gbn1FeHQuZWFjaChbZCxsLGVd LGZ1bmN0aW9uKHMscil7bz0ociUyPT0wKT8xNjoxMDtxPXMuZXhlYyhuKTtpZihxJiZxLmxlbmd0 aD09NCl7bT1bcChxWzFdLG8pLHAocVsyXSxvKSxwKHFbM10sbyldO3JldHVybiBmYWxzZX19KTty ZXR1cm4gbX1FeHQuYXBwbHkoaC5Db2xvckFuaW0ucHJvdG90eXBlLHtnZXRBdHRyOmZ1bmN0aW9u KG0pe3ZhciBvPXRoaXMsbj1vLmVsLHA7aWYoaS50ZXN0KG0pKXt3aGlsZShuJiZmLnRlc3QocD1F eHQuZmx5KG4pLmdldFN0eWxlKG0pKSl7bj1uLnBhcmVudE5vZGU7cD0iZmZmIn19ZWxzZXtwPWou Z2V0QXR0ci5jYWxsKG8sbSl9cmV0dXJuIHB9LGRvTWV0aG9kOmZ1bmN0aW9uKG0scixuKXt2YXIg cD10aGlzLHEsbz1NYXRoLmZsb29yO2lmKGkudGVzdChtKSl7cT1bXTtFeHQuZWFjaChyLGZ1bmN0 aW9uKHMsdCl7cVt0XT1qLmRvTWV0aG9kLmNhbGwocCxtLHMsblt0XSl9KTtxPSJyZ2IoIitvKHFb MF0pKyIsIitvKHFbMV0pKyIsIitvKHFbMl0pKyIpIn1lbHNle3E9ai5kb01ldGhvZC5jYWxsKHAs bSxyLG4pfXJldHVybiBxfSxzZXRSdW5BdHRyOmZ1bmN0aW9uKG0pe3ZhciBwPXRoaXMsbz1wLmF0 dHJpYnV0ZXNbbV0sdD1vLnRvLHE9by5ieSxyO2ouc2V0UnVuQXR0ci5jYWxsKHAsbSk7cj1wLnJ1 bkF0dHJzW21dO2lmKGkudGVzdChtKSl7dmFyIHM9ayhyLnN0YXJ0KSxuPWsoci5lbmQpO2lmKCFn KHQpJiZnKHEpKXtuPWsocSk7RXh0LmVhY2gocyxmdW5jdGlvbih2LHUpe25bdV09dituW3VdfSl9 ci5zdGFydD1zO3IuZW5kPW59fX0pfSkoKTsoZnVuY3Rpb24oKXt2YXIgZD1FeHQubGliO2QuQW5p bS5zY3JvbGw9ZnVuY3Rpb24oaixoLGssbCxnLGkpe3JldHVybiBkLkFuaW0ucnVuKGosaCxrLGws ZyxpLGQuU2Nyb2xsKX07ZC5TY3JvbGw9ZnVuY3Rpb24oaCxnLGksail7aWYoaCl7ZC5TY3JvbGwu c3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsaCxnLGksail9fTtFeHQuZXh0ZW5kKGQu U2Nyb2xsLGQuQ29sb3JBbmltKTt2YXIgZj1kLlNjcm9sbC5zdXBlcmNsYXNzLGU9InNjcm9sbCI7 RXh0LmFwcGx5KGQuU2Nyb2xsLnByb3RvdHlwZSx7ZG9NZXRob2Q6ZnVuY3Rpb24oZyxtLGgpe3Zh ciBrLGo9dGhpcyxsPWouY3VyRnJhbWUsaT1qLnRvdGFsRnJhbWVzO2lmKGc9PWUpe2s9W2oubWV0 aG9kKGwsbVswXSxoWzBdLW1bMF0saSksai5tZXRob2QobCxtWzFdLGhbMV0tbVsxXSxpKV19ZWxz ZXtrPWYuZG9NZXRob2QuY2FsbChqLGcsbSxoKX1yZXR1cm4ga30sZ2V0QXR0cjpmdW5jdGlvbihn KXt2YXIgaD10aGlzO2lmKGc9PWUpe3JldHVybltoLmVsLnNjcm9sbExlZnQsaC5lbC5zY3JvbGxU b3BdfWVsc2V7cmV0dXJuIGYuZ2V0QXR0ci5jYWxsKGgsZyl9fSxzZXRBdHRyOmZ1bmN0aW9uKGcs aixpKXt2YXIgaD10aGlzO2lmKGc9PWUpe2guZWwuc2Nyb2xsTGVmdD1qWzBdO2guZWwuc2Nyb2xs VG9wPWpbMV19ZWxzZXtmLnNldEF0dHIuY2FsbChoLGcsaixpKX19fSl9KSgpO2lmKEV4dC5pc0lF KXtmdW5jdGlvbiBhKCl7dmFyIGQ9RnVuY3Rpb24ucHJvdG90eXBlO2RlbGV0ZSBkLmNyZWF0ZVNl cXVlbmNlO2RlbGV0ZSBkLmRlZmVyO2RlbGV0ZSBkLmNyZWF0ZURlbGVnYXRlO2RlbGV0ZSBkLmNy ZWF0ZUNhbGxiYWNrO2RlbGV0ZSBkLmNyZWF0ZUludGVyY2VwdG9yO3dpbmRvdy5kZXRhY2hFdmVu dCgib251bmxvYWQiLGEpfXdpbmRvdy5hdHRhY2hFdmVudCgib251bmxvYWQiLGEpfX0pKCk7 ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: application/x-javascript Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/ext-all.js LyoKICogRXh0IEpTIExpYnJhcnkgMy4wLjAKICogQ29weXJpZ2h0KGMpIDIwMDYtMjAwOSBFeHQg SlMsIExMQwogKiBsaWNlbnNpbmdAZXh0anMuY29tCiAqIGh0dHA6Ly93d3cuZXh0anMuY29tL2xp Y2Vuc2UKICovCkV4dC5Eb21IZWxwZXI9ZnVuY3Rpb24oKXt2YXIgcz1udWxsLGo9L14oPzpicnxm cmFtZXxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHJhbmdlfHNwYWNlcnx3YnJ8YXJlYXxwYXJhbXxj b2wpJC9pLGw9L150YWJsZXx0Ym9keXx0cnx0ZCQvaSxwLG09ImFmdGVyYmVnaW4iLG49ImFmdGVy ZW5kIixjPSJiZWZvcmViZWdpbiIsbz0iYmVmb3JlZW5kIixhPSI8dGFibGU+IixoPSI8L3RhYmxl PiIsYj1hKyI8dGJvZHk+IixpPSI8L3Rib2R5PiIraCxrPWIrIjx0cj4iLHI9IjwvdHI+IitpO2Z1 bmN0aW9uIGcodyx5LHgseix2LHQpe3ZhciB1PXAuaW5zZXJ0SHRtbCh6LEV4dC5nZXREb20odyks cSh5KSk7cmV0dXJuIHg/RXh0LmdldCh1LHRydWUpOnV9ZnVuY3Rpb24gcSh5KXt2YXIgdj0iIix1 LHgsdyx0LHo7aWYodHlwZW9mIHk9PSJzdHJpbmciKXt2PXl9ZWxzZXtpZihFeHQuaXNBcnJheSh5 KSl7RXh0LmVhY2goeSxmdW5jdGlvbihBKXt2Kz1xKEEpfSl9ZWxzZXt2Kz0iPCIrKHkudGFnPXku dGFnfHwiZGl2Iik7RXh0Lml0ZXJhdGUoeSxmdW5jdGlvbihBLEIpe2lmKCEvdGFnfGNoaWxkcmVu fGNufGh0bWwkL2kudGVzdChBKSl7aWYoRXh0LmlzT2JqZWN0KEIpKXt2Kz0iICIrQSsiPSciO0V4 dC5pdGVyYXRlKEIsZnVuY3Rpb24oRCxDKXt2Kz1EKyI6IitDKyI7In0pO3YrPSInIn1lbHNle3Yr PSIgIisoe2NsczoiY2xhc3MiLGh0bWxGb3I6ImZvciJ9W0FdfHxBKSsiPSciK0IrIicifX19KTtp ZihqLnRlc3QoeS50YWcpKXt2Kz0iLz4ifWVsc2V7dis9Ij4iO2lmKCh6PXkuY2hpbGRyZW58fHku Y24pKXt2Kz1xKHopfWVsc2V7aWYoeS5odG1sKXt2Kz15Lmh0bWx9fXYrPSI8LyIreS50YWcrIj4i fX19cmV0dXJuIHZ9ZnVuY3Rpb24gZSh5LHcsdix4KXtzLmlubmVySFRNTD1bdyx2LHhdLmpvaW4o IiIpO3ZhciB0PS0xLHU9czt3aGlsZSgrK3Q8eSl7dT11LmZpcnN0Q2hpbGR9cmV0dXJuIHV9ZnVu Y3Rpb24gZCh0LHUsdyx2KXt2YXIgeCx5O3M9c3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2 Iik7aWYodD09InRkIiYmKHU9PW18fHU9PW8pfHwhL3RkfHRyfHRib2R5L2kudGVzdCh0KSYmKHU9 PWN8fHU9PW4pKXtyZXR1cm59eT11PT1jP3c6dT09bj93Lm5leHRTaWJsaW5nOnU9PW0/dy5maXJz dENoaWxkOm51bGw7aWYodT09Y3x8dT09bil7dz13LnBhcmVudE5vZGV9aWYodD09InRkInx8KHQ9 PSJ0ciImJih1PT1vfHx1PT1tKSkpe3g9ZSg0LGssdixyKX1lbHNle2lmKCh0PT0idGJvZHkiJiYo dT09b3x8dT09bSkpfHwodD09InRyIiYmKHU9PWN8fHU9PW4pKSl7eD1lKDMsYix2LGkpfWVsc2V7 eD1lKDIsYSx2LGgpfX13Lmluc2VydEJlZm9yZSh4LHkpO3JldHVybiB4fXA9e21hcmt1cDpmdW5j dGlvbih0KXtyZXR1cm4gcSh0KX0saW5zZXJ0SHRtbDpmdW5jdGlvbih5LHQseil7dmFyIHg9e30s dixCLEEsQyx3LHU7eT15LnRvTG93ZXJDYXNlKCk7eFtjXT1bIkJlZm9yZUJlZ2luIiwicHJldmlv dXNTaWJsaW5nIl07eFtuXT1bIkFmdGVyRW5kIiwibmV4dFNpYmxpbmciXTtpZih0Lmluc2VydEFk amFjZW50SFRNTCl7aWYobC50ZXN0KHQudGFnTmFtZSkmJih1PWQodC50YWdOYW1lLnRvTG93ZXJD YXNlKCkseSx0LHopKSl7cmV0dXJuIHV9eFttXT1bIkFmdGVyQmVnaW4iLCJmaXJzdENoaWxkIl07 eFtvXT1bIkJlZm9yZUVuZCIsImxhc3RDaGlsZCJdO2lmKCh2PXhbeV0pKXt0Lmluc2VydEFkamFj ZW50SFRNTCh2WzBdLHopO3JldHVybiB0W3ZbMV1dfX1lbHNle0E9dC5vd25lckRvY3VtZW50LmNy ZWF0ZVJhbmdlKCk7Qj0ic2V0U3RhcnQiKygvZW5kL2kudGVzdCh5KT8iQWZ0ZXIiOiJCZWZvcmUi KTtpZih4W3ldKXtBW0JdKHQpO0M9QS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoeik7dC5wYXJl bnROb2RlLmluc2VydEJlZm9yZShDLHk9PWM/dDp0Lm5leHRTaWJsaW5nKTtyZXR1cm4gdFsoeT09 Yz8icHJldmlvdXMiOiJuZXh0IikrIlNpYmxpbmciXX1lbHNle3c9KHk9PW0/ImZpcnN0IjoibGFz dCIpKyJDaGlsZCI7aWYodC5maXJzdENoaWxkKXtBW0JdKHRbd10pO0M9QS5jcmVhdGVDb250ZXh0 dWFsRnJhZ21lbnQoeik7aWYoeT09bSl7dC5pbnNlcnRCZWZvcmUoQyx0LmZpcnN0Q2hpbGQpfWVs c2V7dC5hcHBlbmRDaGlsZChDKX19ZWxzZXt0LmlubmVySFRNTD16fXJldHVybiB0W3ddfX10aHJv dydJbGxlZ2FsIGluc2VydGlvbiBwb2ludCAtPiAiJyt5KyciJ30saW5zZXJ0QmVmb3JlOmZ1bmN0 aW9uKHQsdix1KXtyZXR1cm4gZyh0LHYsdSxjKX0saW5zZXJ0QWZ0ZXI6ZnVuY3Rpb24odCx2LHUp e3JldHVybiBnKHQsdix1LG4sIm5leHRTaWJsaW5nIil9LGluc2VydEZpcnN0OmZ1bmN0aW9uKHQs dix1KXtyZXR1cm4gZyh0LHYsdSxtLCJmaXJzdENoaWxkIil9LGFwcGVuZDpmdW5jdGlvbih0LHYs dSl7cmV0dXJuIGcodCx2LHUsbywiIix0cnVlKX0sb3ZlcndyaXRlOmZ1bmN0aW9uKHQsdix1KXt0 PUV4dC5nZXREb20odCk7dC5pbm5lckhUTUw9cSh2KTtyZXR1cm4gdT9FeHQuZ2V0KHQuZmlyc3RD aGlsZCk6dC5maXJzdENoaWxkfSxjcmVhdGVIdG1sOnF9O3JldHVybiBwfSgpO0V4dC5hcHBseShF eHQuRG9tSGVscGVyLGZ1bmN0aW9uKCl7dmFyIGQsYT0iYWZ0ZXJiZWdpbiIsZz0iYWZ0ZXJlbmQi LGg9ImJlZm9yZWJlZ2luIixjPSJiZWZvcmVlbmQiO2Z1bmN0aW9uIGUobCxuLG0scCxrLGkpe2w9 RXh0LmdldERvbShsKTt2YXIgajtpZihkLnVzZURvbSl7aj1iKG4sbnVsbCk7aWYoaSl7bC5hcHBl bmRDaGlsZChqKX1lbHNleyhrPT0iZmlyc3RDaGlsZCI/bDpsLnBhcmVudE5vZGUpLmluc2VydEJl Zm9yZShqLGxba118fGwpfX1lbHNle2o9RXh0LkRvbUhlbHBlci5pbnNlcnRIdG1sKHAsbCxFeHQu RG9tSGVscGVyLmNyZWF0ZUh0bWwobikpfXJldHVybiBtP0V4dC5nZXQoaix0cnVlKTpqfWZ1bmN0 aW9uIGIocCxqKXt2YXIgbCxtPWRvY3VtZW50LGssaSxuLHE7aWYoRXh0LmlzQXJyYXkocCkpe2w9 bS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7RXh0LmVhY2gocCxmdW5jdGlvbihvKXtiKG8sbCl9 KX1lbHNle2lmKEV4dC5pc1N0cmluZyhwKSl7bD1tLmNyZWF0ZVRleHROb2RlKHApfWVsc2V7bD1t LmNyZWF0ZUVsZW1lbnQocC50YWd8fCJkaXYiKTtrPSEhbC5zZXRBdHRyaWJ1dGU7RXh0Lml0ZXJh dGUocCxmdW5jdGlvbihvLHIpe2lmKCEvdGFnfGNoaWxkcmVufGNufGh0bWx8c3R5bGUvLnRlc3Qo bykpe2lmKG89PSJjbHMiKXtsLmNsYXNzTmFtZT1yfWVsc2V7aWYoayl7bC5zZXRBdHRyaWJ1dGUo byxyKX1lbHNle2xbb109cn19fX0pO2QuYXBwbHlTdHlsZXMobCxwLnN0eWxlKTtpZigocT1wLmNo aWxkcmVufHxwLmNuKSl7YihxLGwpfWVsc2V7aWYocC5odG1sKXtsLmlubmVySFRNTD1wLmh0bWx9 fX19aWYoail7ai5hcHBlbmRDaGlsZChsKX1yZXR1cm4gbH1kPXtjcmVhdGVUZW1wbGF0ZTpmdW5j dGlvbihqKXt2YXIgaT1FeHQuRG9tSGVscGVyLmNyZWF0ZUh0bWwoaik7cmV0dXJuIG5ldyBFeHQu VGVtcGxhdGUoaSl9LHVzZURvbTpmYWxzZSxhcHBseVN0eWxlczpmdW5jdGlvbihtLG4pe2lmKG4p e3ZhciBrPTAsaixsO209RXh0LmZseShtKTtpZihFeHQuaXNGdW5jdGlvbihuKSl7bj1uLmNhbGwo KX1pZihFeHQuaXNTdHJpbmcobikpe249bi50cmltKCkuc3BsaXQoL1xzKig/Ojp8OylccyovKTtm b3Ioaj1uLmxlbmd0aDtrPGo7KXttLnNldFN0eWxlKG5baysrXSxuW2srK10pfX1lbHNle2lmKEV4 dC5pc09iamVjdChuKSl7bS5zZXRTdHlsZShuKX19fX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGks ayxqKXtyZXR1cm4gZShpLGssaixoKX0saW5zZXJ0QWZ0ZXI6ZnVuY3Rpb24oaSxrLGope3JldHVy biBlKGksayxqLGcsIm5leHRTaWJsaW5nIil9LGluc2VydEZpcnN0OmZ1bmN0aW9uKGksayxqKXty ZXR1cm4gZShpLGssaixhLCJmaXJzdENoaWxkIil9LGFwcGVuZDpmdW5jdGlvbihpLGssail7cmV0 dXJuIGUoaSxrLGosYywiIix0cnVlKX0sY3JlYXRlRG9tOmJ9O3JldHVybiBkfSgpKTtFeHQuVGVt cGxhdGU9ZnVuY3Rpb24oZCl7dmFyIGU9dGhpcyxiPWFyZ3VtZW50cyxjPVtdO2lmKEV4dC5pc0Fy cmF5KGQpKXtkPWQuam9pbigiIil9ZWxzZXtpZihiLmxlbmd0aD4xKXtFeHQuZWFjaChiLGZ1bmN0 aW9uKGEpe2lmKEV4dC5pc09iamVjdChhKSl7RXh0LmFwcGx5KGUsYSl9ZWxzZXtjLnB1c2goYSl9 fSk7ZD1jLmpvaW4oIiIpfX1lLmh0bWw9ZDtpZihlLmNvbXBpbGVkKXtlLmNvbXBpbGUoKX19O0V4 dC5UZW1wbGF0ZS5wcm90b3R5cGU9e2FwcGx5VGVtcGxhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhp cztyZXR1cm4gYi5jb21waWxlZD9iLmNvbXBpbGVkKGEpOmIuaHRtbC5yZXBsYWNlKGIucmUsZnVu Y3Rpb24oYyxkKXtyZXR1cm4gYVtkXSE9PXVuZGVmaW5lZD9hW2RdOiIifSl9LHNldDpmdW5jdGlv bihhLGMpe3ZhciBiPXRoaXM7Yi5odG1sPWE7Yi5jb21waWxlZD1udWxsO3JldHVybiBjP2IuY29t cGlsZSgpOmJ9LHJlOi9ceyhbXHctXSspXH0vZyxjb21waWxlOmZ1bmN0aW9uKCl7dmFyIG1lPXRo aXMsc2VwPUV4dC5pc0dlY2tvPyIrIjoiLCI7ZnVuY3Rpb24gZm4obSxuYW1lKXtuYW1lPSJ2YWx1 ZXNbJyIrbmFtZSsiJ10iO3JldHVybiInIitzZXArIigiK25hbWUrIiA9PSB1bmRlZmluZWQgPyAn JyA6ICIrbmFtZSsiKSIrc2VwKyInIn1ldmFsKCJ0aGlzLmNvbXBpbGVkID0gZnVuY3Rpb24odmFs dWVzKXsgcmV0dXJuICIrKEV4dC5pc0dlY2tvPyInIjoiWyciKSttZS5odG1sLnJlcGxhY2UoL1xc L2csIlxcXFwiKS5yZXBsYWNlKC8oXHJcbnxcbikvZywiXFxuIikucmVwbGFjZSgvJy9nLCJcXCci KS5yZXBsYWNlKHRoaXMucmUsZm4pKyhFeHQuaXNHZWNrbz8iJzt9OyI6IiddLmpvaW4oJycpO307 IikpO3JldHVybiBtZX0saW5zZXJ0Rmlyc3Q6ZnVuY3Rpb24oYixhLGMpe3JldHVybiB0aGlzLmRv SW5zZXJ0KCJhZnRlckJlZ2luIixiLGEsYyl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihiLGEsYyl7 cmV0dXJuIHRoaXMuZG9JbnNlcnQoImJlZm9yZUJlZ2luIixiLGEsYyl9LGluc2VydEFmdGVyOmZ1 bmN0aW9uKGIsYSxjKXtyZXR1cm4gdGhpcy5kb0luc2VydCgiYWZ0ZXJFbmQiLGIsYSxjKX0sYXBw ZW5kOmZ1bmN0aW9uKGIsYSxjKXtyZXR1cm4gdGhpcy5kb0luc2VydCgiYmVmb3JlRW5kIixiLGEs Yyl9LGRvSW5zZXJ0OmZ1bmN0aW9uKGMsZSxiLGEpe2U9RXh0LmdldERvbShlKTt2YXIgZD1FeHQu RG9tSGVscGVyLmluc2VydEh0bWwoYyxlLHRoaXMuYXBwbHlUZW1wbGF0ZShiKSk7cmV0dXJuIGE/ RXh0LmdldChkLHRydWUpOmR9LG92ZXJ3cml0ZTpmdW5jdGlvbihiLGEsYyl7Yj1FeHQuZ2V0RG9t KGIpO2IuaW5uZXJIVE1MPXRoaXMuYXBwbHlUZW1wbGF0ZShhKTtyZXR1cm4gYz9FeHQuZ2V0KGIu Zmlyc3RDaGlsZCx0cnVlKTpiLmZpcnN0Q2hpbGR9fTtFeHQuVGVtcGxhdGUucHJvdG90eXBlLmFw cGx5PUV4dC5UZW1wbGF0ZS5wcm90b3R5cGUuYXBwbHlUZW1wbGF0ZTtFeHQuVGVtcGxhdGUuZnJv bT1mdW5jdGlvbihiLGEpe2I9RXh0LmdldERvbShiKTtyZXR1cm4gbmV3IEV4dC5UZW1wbGF0ZShi LnZhbHVlfHxiLmlubmVySFRNTCxhfHwiIil9O0V4dC5hcHBseShFeHQuVGVtcGxhdGUucHJvdG90 eXBlLHthcHBseVRlbXBsYXRlOmZ1bmN0aW9uKGIpe3ZhciBnPXRoaXMsYT1nLmRpc2FibGVGb3Jt YXRzIT09dHJ1ZSxlPUV4dC51dGlsLkZvcm1hdCxjPWc7aWYoZy5jb21waWxlZCl7cmV0dXJuIGcu Y29tcGlsZWQoYil9ZnVuY3Rpb24gZChqLGwscCxrKXtpZihwJiZhKXtpZihwLnN1YnN0cigwLDUp PT0idGhpcy4iKXtyZXR1cm4gYy5jYWxsKHAuc3Vic3RyKDUpLGJbbF0sYil9ZWxzZXtpZihrKXt2 YXIgbz0vXlxzKlsnIl0oLiopWyInXVxzKiQvO2s9ay5zcGxpdCgiLCIpO2Zvcih2YXIgbj0wLGg9 ay5sZW5ndGg7bjxoO24rKyl7a1tuXT1rW25dLnJlcGxhY2UobywiJDEiKX1rPVtiW2xdXS5jb25j YXQoayl9ZWxzZXtrPVtiW2xdXX1yZXR1cm4gZVtwXS5hcHBseShlLGspfX1lbHNle3JldHVybiBi W2xdIT09dW5kZWZpbmVkP2JbbF06IiJ9fXJldHVybiBnLmh0bWwucmVwbGFjZShnLnJlLGQpfSxk aXNhYmxlRm9ybWF0czpmYWxzZSxyZTovXHsoW1x3LV0rKSg/Olw6KFtcd1wuXSopKD86XCgoLio/ KT9cKSk/KT9cfS9nLGNvbXBpbGU6ZnVuY3Rpb24oKXt2YXIgbWU9dGhpcyxmbT1FeHQudXRpbC5G b3JtYXQsdXNlRj1tZS5kaXNhYmxlRm9ybWF0cyE9PXRydWUsc2VwPUV4dC5pc0dlY2tvPyIrIjoi LCIsYm9keTtmdW5jdGlvbiBmbihtLG5hbWUsZm9ybWF0LGFyZ3Mpe2lmKGZvcm1hdCYmdXNlRil7 YXJncz1hcmdzPyIsIithcmdzOiIiO2lmKGZvcm1hdC5zdWJzdHIoMCw1KSE9InRoaXMuIil7Zm9y bWF0PSJmbS4iK2Zvcm1hdCsiKCJ9ZWxzZXtmb3JtYXQ9J3RoaXMuY2FsbCgiJytmb3JtYXQuc3Vi c3RyKDUpKyciLCAnO2FyZ3M9IiwgdmFsdWVzIn19ZWxzZXthcmdzPSIiO2Zvcm1hdD0iKHZhbHVl c1snIituYW1lKyInXSA9PSB1bmRlZmluZWQgPyAnJyA6ICJ9cmV0dXJuIiciK3NlcCtmb3JtYXQr InZhbHVlc1snIituYW1lKyInXSIrYXJncysiKSIrc2VwKyInIn1pZihFeHQuaXNHZWNrbyl7Ym9k eT0idGhpcy5jb21waWxlZCA9IGZ1bmN0aW9uKHZhbHVlcyl7IHJldHVybiAnIittZS5odG1sLnJl cGxhY2UoL1xcL2csIlxcXFwiKS5yZXBsYWNlKC8oXHJcbnxcbikvZywiXFxuIikucmVwbGFjZSgv Jy9nLCJcXCciKS5yZXBsYWNlKHRoaXMucmUsZm4pKyInO307In1lbHNle2JvZHk9WyJ0aGlzLmNv bXBpbGVkID0gZnVuY3Rpb24odmFsdWVzKXsgcmV0dXJuIFsnIl07Ym9keS5wdXNoKG1lLmh0bWwu cmVwbGFjZSgvXFwvZywiXFxcXCIpLnJlcGxhY2UoLyhcclxufFxuKS9nLCJcXG4iKS5yZXBsYWNl KC8nL2csIlxcJyIpLnJlcGxhY2UodGhpcy5yZSxmbikpO2JvZHkucHVzaCgiJ10uam9pbignJyk7 fTsiKTtib2R5PWJvZHkuam9pbigiIil9ZXZhbChib2R5KTtyZXR1cm4gbWV9LGNhbGw6ZnVuY3Rp b24oYyxiLGEpe3JldHVybiB0aGlzW2NdKGIsYSl9fSk7RXh0LlRlbXBsYXRlLnByb3RvdHlwZS5h cHBseT1FeHQuVGVtcGxhdGUucHJvdG90eXBlLmFwcGx5VGVtcGxhdGU7RXh0LkRvbVF1ZXJ5PWZ1 bmN0aW9uKCl7dmFyIGNhY2hlPXt9LHNpbXBsZUNhY2hlPXt9LHZhbHVlQ2FjaGU9e30sbm9uU3Bh Y2U9L1xTLyx0cmltUmU9L15ccyt8XHMrJC9nLHRwbFJlPS9ceyhcZCspXH0vZyxtb2RlUmU9L14o XHM/W1wvPit+XVxzP3xcc3wkKS8sdGFnVG9rZW5SZT0vXigjKT8oW1x3LVwqXSspLyxudGhSZT0v KFxkKiluXCs/KFxkKikvLG50aFJlMj0vXEQvLGlzSUU9d2luZG93LkFjdGl2ZVhPYmplY3Q/dHJ1 ZTpmYWxzZSxpc09wZXJhPUV4dC5pc09wZXJhLGtleT0zMDgwMztldmFsKCJ2YXIgYmF0Y2ggPSAz MDgwMzsiKTtmdW5jdGlvbiBjaGlsZChwLGluZGV4KXt2YXIgaT0wLG49cC5maXJzdENoaWxkO3do aWxlKG4pe2lmKG4ubm9kZVR5cGU9PTEpe2lmKCsraT09aW5kZXgpe3JldHVybiBufX1uPW4ubmV4 dFNpYmxpbmd9cmV0dXJuIG51bGx9ZnVuY3Rpb24gbmV4dChuKXt3aGlsZSgobj1uLm5leHRTaWJs aW5nKSYmbi5ub2RlVHlwZSE9MSl7fXJldHVybiBufWZ1bmN0aW9uIHByZXYobil7d2hpbGUoKG49 bi5wcmV2aW91c1NpYmxpbmcpJiZuLm5vZGVUeXBlIT0xKXt9cmV0dXJuIG59ZnVuY3Rpb24gY2hp bGRyZW4oZCl7dmFyIG49ZC5maXJzdENoaWxkLG5pPS0xLG54O3doaWxlKG4pe254PW4ubmV4dFNp Ymxpbmc7aWYobi5ub2RlVHlwZT09MyYmIW5vblNwYWNlLnRlc3Qobi5ub2RlVmFsdWUpKXtkLnJl bW92ZUNoaWxkKG4pfWVsc2V7bi5ub2RlSW5kZXg9KytuaX1uPW54fXJldHVybiB0aGlzfWZ1bmN0 aW9uIGJ5Q2xhc3NOYW1lKGMsYSx2KXtpZighdil7cmV0dXJuIGN9dmFyIHI9W10scmk9LTEsY247 Zm9yKHZhciBpPTAsY2k7Y2k9Y1tpXTtpKyspe2lmKCgiICIrY2kuY2xhc3NOYW1lKyIgIikuaW5k ZXhPZih2KSE9LTEpe3JbKytyaV09Y2l9fXJldHVybiByfWZ1bmN0aW9uIGF0dHJWYWx1ZShuLGF0 dHIpe2lmKCFuLnRhZ05hbWUmJnR5cGVvZiBuLmxlbmd0aCE9InVuZGVmaW5lZCIpe249blswXX1p Zighbil7cmV0dXJuIG51bGx9aWYoYXR0cj09ImZvciIpe3JldHVybiBuLmh0bWxGb3J9aWYoYXR0 cj09ImNsYXNzInx8YXR0cj09ImNsYXNzTmFtZSIpe3JldHVybiBuLmNsYXNzTmFtZX1yZXR1cm4g bi5nZXRBdHRyaWJ1dGUoYXR0cil8fG5bYXR0cl19ZnVuY3Rpb24gZ2V0Tm9kZXMobnMsbW9kZSx0 YWdOYW1lKXt2YXIgcmVzdWx0PVtdLHJpPS0xLGNzO2lmKCFucyl7cmV0dXJuIHJlc3VsdH10YWdO YW1lPXRhZ05hbWV8fCIqIjtpZih0eXBlb2YgbnMuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRl ZmluZWQiKXtucz1bbnNdfWlmKCFtb2RlKXtmb3IodmFyIGk9MCxuaTtuaT1uc1tpXTtpKyspe2Nz PW5pLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpO2Zvcih2YXIgaj0wLGNpO2NpPWNzW2pd O2orKyl7cmVzdWx0WysrcmldPWNpfX19ZWxzZXtpZihtb2RlPT0iLyJ8fG1vZGU9PSI+Iil7dmFy IHV0YWc9dGFnTmFtZS50b1VwcGVyQ2FzZSgpO2Zvcih2YXIgaT0wLG5pLGNuO25pPW5zW2ldO2kr Kyl7Y249aXNPcGVyYT9uaS5jaGlsZE5vZGVzOihuaS5jaGlsZHJlbnx8bmkuY2hpbGROb2Rlcyk7 Zm9yKHZhciBqPTAsY2o7Y2o9Y25bal07aisrKXtpZihjai5ub2RlTmFtZT09dXRhZ3x8Y2oubm9k ZU5hbWU9PXRhZ05hbWV8fHRhZ05hbWU9PSIqIil7cmVzdWx0WysrcmldPWNqfX19fWVsc2V7aWYo bW9kZT09IisiKXt2YXIgdXRhZz10YWdOYW1lLnRvVXBwZXJDYXNlKCk7Zm9yKHZhciBpPTAsbjtu PW5zW2ldO2krKyl7d2hpbGUoKG49bi5uZXh0U2libGluZykmJm4ubm9kZVR5cGUhPTEpe31pZihu JiYobi5ub2RlTmFtZT09dXRhZ3x8bi5ub2RlTmFtZT09dGFnTmFtZXx8dGFnTmFtZT09IioiKSl7 cmVzdWx0WysrcmldPW59fX1lbHNle2lmKG1vZGU9PSJ+Iil7dmFyIHV0YWc9dGFnTmFtZS50b1Vw cGVyQ2FzZSgpO2Zvcih2YXIgaT0wLG47bj1uc1tpXTtpKyspe3doaWxlKChuPW4ubmV4dFNpYmxp bmcpKXtpZihuLm5vZGVOYW1lPT11dGFnfHxuLm5vZGVOYW1lPT10YWdOYW1lfHx0YWdOYW1lPT0i KiIpe3Jlc3VsdFsrK3JpXT1ufX19fX19fXJldHVybiByZXN1bHR9ZnVuY3Rpb24gY29uY2F0KGEs Yil7aWYoYi5zbGljZSl7cmV0dXJuIGEuY29uY2F0KGIpfWZvcih2YXIgaT0wLGw9Yi5sZW5ndGg7 aTxsO2krKyl7YVthLmxlbmd0aF09YltpXX1yZXR1cm4gYX1mdW5jdGlvbiBieVRhZyhjcyx0YWdO YW1lKXtpZihjcy50YWdOYW1lfHxjcz09ZG9jdW1lbnQpe2NzPVtjc119aWYoIXRhZ05hbWUpe3Jl dHVybiBjc312YXIgcj1bXSxyaT0tMTt0YWdOYW1lPXRhZ05hbWUudG9Mb3dlckNhc2UoKTtmb3Io dmFyIGk9MCxjaTtjaT1jc1tpXTtpKyspe2lmKGNpLm5vZGVUeXBlPT0xJiZjaS50YWdOYW1lLnRv TG93ZXJDYXNlKCk9PXRhZ05hbWUpe3JbKytyaV09Y2l9fXJldHVybiByfWZ1bmN0aW9uIGJ5SWQo Y3MsYXR0cixpZCl7aWYoY3MudGFnTmFtZXx8Y3M9PWRvY3VtZW50KXtjcz1bY3NdfWlmKCFpZCl7 cmV0dXJuIGNzfXZhciByPVtdLHJpPS0xO2Zvcih2YXIgaT0wLGNpO2NpPWNzW2ldO2krKyl7aWYo Y2kmJmNpLmlkPT1pZCl7clsrK3JpXT1jaTtyZXR1cm4gcn19cmV0dXJuIHJ9ZnVuY3Rpb24gYnlB dHRyaWJ1dGUoY3MsYXR0cix2YWx1ZSxvcCxjdXN0b20pe3ZhciByPVtdLHJpPS0xLHN0PWN1c3Rv bT09InsiLGY9RXh0LkRvbVF1ZXJ5Lm9wZXJhdG9yc1tvcF07Zm9yKHZhciBpPTAsY2k7Y2k9Y3Nb aV07aSsrKXtpZihjaS5ub2RlVHlwZSE9MSl7Y29udGludWV9dmFyIGE7aWYoc3Qpe2E9RXh0LkRv bVF1ZXJ5LmdldFN0eWxlKGNpLGF0dHIpfWVsc2V7aWYoYXR0cj09ImNsYXNzInx8YXR0cj09ImNs YXNzTmFtZSIpe2E9Y2kuY2xhc3NOYW1lfWVsc2V7aWYoYXR0cj09ImZvciIpe2E9Y2kuaHRtbEZv cn1lbHNle2lmKGF0dHI9PSJocmVmIil7YT1jaS5nZXRBdHRyaWJ1dGUoImhyZWYiLDIpfWVsc2V7 YT1jaS5nZXRBdHRyaWJ1dGUoYXR0cil9fX19aWYoKGYmJmYoYSx2YWx1ZSkpfHwoIWYmJmEpKXty WysrcmldPWNpfX1yZXR1cm4gcn1mdW5jdGlvbiBieVBzZXVkbyhjcyxuYW1lLHZhbHVlKXtyZXR1 cm4gRXh0LkRvbVF1ZXJ5LnBzZXVkb3NbbmFtZV0oY3MsdmFsdWUpfWZ1bmN0aW9uIG5vZHVwSUVY bWwoY3Mpe3ZhciBkPSsra2V5LHI7Y3NbMF0uc2V0QXR0cmlidXRlKCJfbm9kdXAiLGQpO3I9W2Nz WzBdXTtmb3IodmFyIGk9MSxsZW49Y3MubGVuZ3RoO2k8bGVuO2krKyl7dmFyIGM9Y3NbaV07aWYo IWMuZ2V0QXR0cmlidXRlKCJfbm9kdXAiKSE9ZCl7Yy5zZXRBdHRyaWJ1dGUoIl9ub2R1cCIsZCk7 cltyLmxlbmd0aF09Y319Zm9yKHZhciBpPTAsbGVuPWNzLmxlbmd0aDtpPGxlbjtpKyspe2NzW2ld LnJlbW92ZUF0dHJpYnV0ZSgiX25vZHVwIil9cmV0dXJuIHJ9ZnVuY3Rpb24gbm9kdXAoY3Mpe2lm KCFjcyl7cmV0dXJuW119dmFyIGxlbj1jcy5sZW5ndGgsYyxpLHI9Y3MsY2oscmk9LTE7aWYoIWxl bnx8dHlwZW9mIGNzLm5vZGVUeXBlIT0idW5kZWZpbmVkInx8bGVuPT0xKXtyZXR1cm4gY3N9aWYo aXNJRSYmdHlwZW9mIGNzWzBdLnNlbGVjdFNpbmdsZU5vZGUhPSJ1bmRlZmluZWQiKXtyZXR1cm4g bm9kdXBJRVhtbChjcyl9dmFyIGQ9KytrZXk7Y3NbMF0uX25vZHVwPWQ7Zm9yKGk9MTtjPWNzW2ld O2krKyl7aWYoYy5fbm9kdXAhPWQpe2MuX25vZHVwPWR9ZWxzZXtyPVtdO2Zvcih2YXIgaj0wO2o8 aTtqKyspe3JbKytyaV09Y3Nbal19Zm9yKGo9aSsxO2NqPWNzW2pdO2orKyl7aWYoY2ouX25vZHVw IT1kKXtjai5fbm9kdXA9ZDtyWysrcmldPWNqfX1yZXR1cm4gcn19cmV0dXJuIHJ9ZnVuY3Rpb24g cXVpY2tEaWZmSUVYbWwoYzEsYzIpe3ZhciBkPSsra2V5LHI9W107Zm9yKHZhciBpPTAsbGVuPWMx Lmxlbmd0aDtpPGxlbjtpKyspe2MxW2ldLnNldEF0dHJpYnV0ZSgiX3FkaWZmIixkKX1mb3IodmFy IGk9MCxsZW49YzIubGVuZ3RoO2k8bGVuO2krKyl7aWYoYzJbaV0uZ2V0QXR0cmlidXRlKCJfcWRp ZmYiKSE9ZCl7cltyLmxlbmd0aF09YzJbaV19fWZvcih2YXIgaT0wLGxlbj1jMS5sZW5ndGg7aTxs ZW47aSsrKXtjMVtpXS5yZW1vdmVBdHRyaWJ1dGUoIl9xZGlmZiIpfXJldHVybiByfWZ1bmN0aW9u IHF1aWNrRGlmZihjMSxjMil7dmFyIGxlbjE9YzEubGVuZ3RoLGQ9KytrZXkscj1bXTtpZighbGVu MSl7cmV0dXJuIGMyfWlmKGlzSUUmJmMxWzBdLnNlbGVjdFNpbmdsZU5vZGUpe3JldHVybiBxdWlj a0RpZmZJRVhtbChjMSxjMil9Zm9yKHZhciBpPTA7aTxsZW4xO2krKyl7YzFbaV0uX3FkaWZmPWR9 Zm9yKHZhciBpPTAsbGVuPWMyLmxlbmd0aDtpPGxlbjtpKyspe2lmKGMyW2ldLl9xZGlmZiE9ZCl7 cltyLmxlbmd0aF09YzJbaV19fXJldHVybiByfWZ1bmN0aW9uIHF1aWNrSWQobnMsbW9kZSxyb290 LGlkKXtpZihucz09cm9vdCl7dmFyIGQ9cm9vdC5vd25lckRvY3VtZW50fHxyb290O3JldHVybiBk LmdldEVsZW1lbnRCeUlkKGlkKX1ucz1nZXROb2Rlcyhucyxtb2RlLCIqIik7cmV0dXJuIGJ5SWQo bnMsbnVsbCxpZCl9cmV0dXJue2dldFN0eWxlOmZ1bmN0aW9uKGVsLG5hbWUpe3JldHVybiBFeHQu Zmx5KGVsKS5nZXRTdHlsZShuYW1lKX0sY29tcGlsZTpmdW5jdGlvbihwYXRoLHR5cGUpe3R5cGU9 dHlwZXx8InNlbGVjdCI7dmFyIGZuPVsidmFyIGYgPSBmdW5jdGlvbihyb290KXtcbiB2YXIgbW9k ZTsgKytiYXRjaDsgdmFyIG4gPSByb290IHx8IGRvY3VtZW50O1xuIl0scT1wYXRoLG1vZGUsbHEs dGs9RXh0LkRvbVF1ZXJ5Lm1hdGNoZXJzLHRrbGVuPXRrLmxlbmd0aCxtbSxsbW9kZT1xLm1hdGNo KG1vZGVSZSk7aWYobG1vZGUmJmxtb2RlWzFdKXtmbltmbi5sZW5ndGhdPSdtb2RlPSInK2xtb2Rl WzFdLnJlcGxhY2UodHJpbVJlLCIiKSsnIjsnO3E9cS5yZXBsYWNlKGxtb2RlWzFdLCIiKX13aGls ZShwYXRoLnN1YnN0cigwLDEpPT0iLyIpe3BhdGg9cGF0aC5zdWJzdHIoMSl9d2hpbGUocSYmbHEh PXEpe2xxPXE7dmFyIHRtPXEubWF0Y2godGFnVG9rZW5SZSk7aWYodHlwZT09InNlbGVjdCIpe2lm KHRtKXtpZih0bVsxXT09IiMiKXtmbltmbi5sZW5ndGhdPSduID0gcXVpY2tJZChuLCBtb2RlLCBy b290LCAiJyt0bVsyXSsnIik7J31lbHNle2ZuW2ZuLmxlbmd0aF09J24gPSBnZXROb2RlcyhuLCBt b2RlLCAiJyt0bVsyXSsnIik7J31xPXEucmVwbGFjZSh0bVswXSwiIil9ZWxzZXtpZihxLnN1YnN0 cigwLDEpIT0iQCIpe2ZuW2ZuLmxlbmd0aF09J24gPSBnZXROb2RlcyhuLCBtb2RlLCAiKiIpOyd9 fX1lbHNle2lmKHRtKXtpZih0bVsxXT09IiMiKXtmbltmbi5sZW5ndGhdPSduID0gYnlJZChuLCBu dWxsLCAiJyt0bVsyXSsnIik7J31lbHNle2ZuW2ZuLmxlbmd0aF09J24gPSBieVRhZyhuLCAiJyt0 bVsyXSsnIik7J31xPXEucmVwbGFjZSh0bVswXSwiIil9fXdoaWxlKCEobW09cS5tYXRjaChtb2Rl UmUpKSl7dmFyIG1hdGNoZWQ9ZmFsc2U7Zm9yKHZhciBqPTA7ajx0a2xlbjtqKyspe3ZhciB0PXRr W2pdO3ZhciBtPXEubWF0Y2godC5yZSk7aWYobSl7Zm5bZm4ubGVuZ3RoXT10LnNlbGVjdC5yZXBs YWNlKHRwbFJlLGZ1bmN0aW9uKHgsaSl7cmV0dXJuIG1baV19KTtxPXEucmVwbGFjZShtWzBdLCIi KTttYXRjaGVkPXRydWU7YnJlYWt9fWlmKCFtYXRjaGVkKXt0aHJvdydFcnJvciBwYXJzaW5nIHNl bGVjdG9yLCBwYXJzaW5nIGZhaWxlZCBhdCAiJytxKyciJ319aWYobW1bMV0pe2ZuW2ZuLmxlbmd0 aF09J21vZGU9IicrbW1bMV0ucmVwbGFjZSh0cmltUmUsIiIpKyciOyc7cT1xLnJlcGxhY2UobW1b MV0sIiIpfX1mbltmbi5sZW5ndGhdPSJyZXR1cm4gbm9kdXAobik7XG59IjtldmFsKGZuLmpvaW4o IiIpKTtyZXR1cm4gZn0sc2VsZWN0OmZ1bmN0aW9uKHBhdGgscm9vdCx0eXBlKXtpZighcm9vdHx8 cm9vdD09ZG9jdW1lbnQpe3Jvb3Q9ZG9jdW1lbnR9aWYodHlwZW9mIHJvb3Q9PSJzdHJpbmciKXty b290PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHJvb3QpfXZhciBwYXRocz1wYXRoLnNwbGl0KCIs IikscmVzdWx0cz1bXTtmb3IodmFyIGk9MCxsZW49cGF0aHMubGVuZ3RoO2k8bGVuO2krKyl7dmFy IHA9cGF0aHNbaV0ucmVwbGFjZSh0cmltUmUsIiIpO2lmKCFjYWNoZVtwXSl7Y2FjaGVbcF09RXh0 LkRvbVF1ZXJ5LmNvbXBpbGUocCk7aWYoIWNhY2hlW3BdKXt0aHJvdyBwKyIgaXMgbm90IGEgdmFs aWQgc2VsZWN0b3IifX12YXIgcmVzdWx0PWNhY2hlW3BdKHJvb3QpO2lmKHJlc3VsdCYmcmVzdWx0 IT1kb2N1bWVudCl7cmVzdWx0cz1yZXN1bHRzLmNvbmNhdChyZXN1bHQpfX1pZihwYXRocy5sZW5n dGg+MSl7cmV0dXJuIG5vZHVwKHJlc3VsdHMpfXJldHVybiByZXN1bHRzfSxzZWxlY3ROb2RlOmZ1 bmN0aW9uKHBhdGgscm9vdCl7cmV0dXJuIEV4dC5Eb21RdWVyeS5zZWxlY3QocGF0aCxyb290KVsw XX0sc2VsZWN0VmFsdWU6ZnVuY3Rpb24ocGF0aCxyb290LGRlZmF1bHRWYWx1ZSl7cGF0aD1wYXRo LnJlcGxhY2UodHJpbVJlLCIiKTtpZighdmFsdWVDYWNoZVtwYXRoXSl7dmFsdWVDYWNoZVtwYXRo XT1FeHQuRG9tUXVlcnkuY29tcGlsZShwYXRoLCJzZWxlY3QiKX12YXIgbj12YWx1ZUNhY2hlW3Bh dGhdKHJvb3QpLHY7bj1uWzBdP25bMF06bjt2PShuJiZuLmZpcnN0Q2hpbGQ/bi5maXJzdENoaWxk Lm5vZGVWYWx1ZTpudWxsKTtyZXR1cm4oKHY9PT1udWxsfHx2PT09dW5kZWZpbmVkfHx2PT09IiIp P2RlZmF1bHRWYWx1ZTp2KX0sc2VsZWN0TnVtYmVyOmZ1bmN0aW9uKHBhdGgscm9vdCxkZWZhdWx0 VmFsdWUpe3ZhciB2PUV4dC5Eb21RdWVyeS5zZWxlY3RWYWx1ZShwYXRoLHJvb3QsZGVmYXVsdFZh bHVlfHwwKTtyZXR1cm4gcGFyc2VGbG9hdCh2KX0saXM6ZnVuY3Rpb24oZWwsc3Mpe2lmKHR5cGVv ZiBlbD09InN0cmluZyIpe2VsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsKX12YXIgaXNBcnJh eT1FeHQuaXNBcnJheShlbCkscmVzdWx0PUV4dC5Eb21RdWVyeS5maWx0ZXIoaXNBcnJheT9lbDpb ZWxdLHNzKTtyZXR1cm4gaXNBcnJheT8ocmVzdWx0Lmxlbmd0aD09ZWwubGVuZ3RoKToocmVzdWx0 Lmxlbmd0aD4wKX0sZmlsdGVyOmZ1bmN0aW9uKGVscyxzcyxub25NYXRjaGVzKXtzcz1zcy5yZXBs YWNlKHRyaW1SZSwiIik7aWYoIXNpbXBsZUNhY2hlW3NzXSl7c2ltcGxlQ2FjaGVbc3NdPUV4dC5E b21RdWVyeS5jb21waWxlKHNzLCJzaW1wbGUiKX12YXIgcmVzdWx0PXNpbXBsZUNhY2hlW3NzXShl bHMpO3JldHVybiBub25NYXRjaGVzP3F1aWNrRGlmZihyZXN1bHQsZWxzKTpyZXN1bHR9LG1hdGNo ZXJzOlt7cmU6L15cLihbXHctXSspLyxzZWxlY3Q6J24gPSBieUNsYXNzTmFtZShuLCBudWxsLCAi IHsxfSAiKTsnfSx7cmU6L15cOihbXHctXSspKD86XCgoKD86W15ccz5cL10qfC4qPykpXCkpPy8s c2VsZWN0OiduID0gYnlQc2V1ZG8obiwgInsxfSIsICJ7Mn0iKTsnfSx7cmU6L14oPzooW1xbXHtd KSg/OkApPyhbXHctXSspXHM/KD86KD18Lj0pXHM/WyciXT8oLio/KVsiJ10/KT9bXF1cfV0pLyxz ZWxlY3Q6J24gPSBieUF0dHJpYnV0ZShuLCAiezJ9IiwgIns0fSIsICJ7M30iLCAiezF9Iik7J30s e3JlOi9eIyhbXHctXSspLyxzZWxlY3Q6J24gPSBieUlkKG4sIG51bGwsICJ7MX0iKTsnfSx7cmU6 L15AKFtcdy1dKykvLHNlbGVjdDoncmV0dXJuIHtmaXJzdENoaWxkOntub2RlVmFsdWU6YXR0clZh bHVlKG4sICJ7MX0iKX19Oyd9XSxvcGVyYXRvcnM6eyI9IjpmdW5jdGlvbihhLHYpe3JldHVybiBh PT12fSwiIT0iOmZ1bmN0aW9uKGEsdil7cmV0dXJuIGEhPXZ9LCJePSI6ZnVuY3Rpb24oYSx2KXty ZXR1cm4gYSYmYS5zdWJzdHIoMCx2Lmxlbmd0aCk9PXZ9LCIkPSI6ZnVuY3Rpb24oYSx2KXtyZXR1 cm4gYSYmYS5zdWJzdHIoYS5sZW5ndGgtdi5sZW5ndGgpPT12fSwiKj0iOmZ1bmN0aW9uKGEsdil7 cmV0dXJuIGEmJmEuaW5kZXhPZih2KSE9PS0xfSwiJT0iOmZ1bmN0aW9uKGEsdil7cmV0dXJuKGEl dik9PTB9LCJ8PSI6ZnVuY3Rpb24oYSx2KXtyZXR1cm4gYSYmKGE9PXZ8fGEuc3Vic3RyKDAsdi5s ZW5ndGgrMSk9PXYrIi0iKX0sIn49IjpmdW5jdGlvbihhLHYpe3JldHVybiBhJiYoIiAiK2ErIiAi KS5pbmRleE9mKCIgIit2KyIgIikhPS0xfX0scHNldWRvczp7ImZpcnN0LWNoaWxkIjpmdW5jdGlv bihjKXt2YXIgcj1bXSxyaT0tMSxuO2Zvcih2YXIgaT0wLGNpO2NpPW49Y1tpXTtpKyspe3doaWxl KChuPW4ucHJldmlvdXNTaWJsaW5nKSYmbi5ub2RlVHlwZSE9MSl7fWlmKCFuKXtyWysrcmldPWNp fX1yZXR1cm4gcn0sImxhc3QtY2hpbGQiOmZ1bmN0aW9uKGMpe3ZhciByPVtdLHJpPS0xLG47Zm9y KHZhciBpPTAsY2k7Y2k9bj1jW2ldO2krKyl7d2hpbGUoKG49bi5uZXh0U2libGluZykmJm4ubm9k ZVR5cGUhPTEpe31pZighbil7clsrK3JpXT1jaX19cmV0dXJuIHJ9LCJudGgtY2hpbGQiOmZ1bmN0 aW9uKGMsYSl7dmFyIHI9W10scmk9LTEsbT1udGhSZS5leGVjKGE9PSJldmVuIiYmIjJuInx8YT09 Im9kZCImJiIybisxInx8IW50aFJlMi50ZXN0KGEpJiYibisiK2F8fGEpLGY9KG1bMV18fDEpLTAs bD1tWzJdLTA7Zm9yKHZhciBpPTAsbjtuPWNbaV07aSsrKXt2YXIgcG49bi5wYXJlbnROb2RlO2lm KGJhdGNoIT1wbi5fYmF0Y2gpe3ZhciBqPTA7Zm9yKHZhciBjbj1wbi5maXJzdENoaWxkO2NuO2Nu PWNuLm5leHRTaWJsaW5nKXtpZihjbi5ub2RlVHlwZT09MSl7Y24ubm9kZUluZGV4PSsran19cG4u X2JhdGNoPWJhdGNofWlmKGY9PTEpe2lmKGw9PTB8fG4ubm9kZUluZGV4PT1sKXtyWysrcmldPW59 fWVsc2V7aWYoKG4ubm9kZUluZGV4K2wpJWY9PTApe3JbKytyaV09bn19fXJldHVybiByfSwib25s eS1jaGlsZCI6ZnVuY3Rpb24oYyl7dmFyIHI9W10scmk9LTE7Zm9yKHZhciBpPTAsY2k7Y2k9Y1tp XTtpKyspe2lmKCFwcmV2KGNpKSYmIW5leHQoY2kpKXtyWysrcmldPWNpfX1yZXR1cm4gcn0sZW1w dHk6ZnVuY3Rpb24oYyl7dmFyIHI9W10scmk9LTE7Zm9yKHZhciBpPTAsY2k7Y2k9Y1tpXTtpKysp e3ZhciBjbnM9Y2kuY2hpbGROb2RlcyxqPTAsY24sZW1wdHk9dHJ1ZTt3aGlsZShjbj1jbnNbal0p eysrajtpZihjbi5ub2RlVHlwZT09MXx8Y24ubm9kZVR5cGU9PTMpe2VtcHR5PWZhbHNlO2JyZWFr fX1pZihlbXB0eSl7clsrK3JpXT1jaX19cmV0dXJuIHJ9LGNvbnRhaW5zOmZ1bmN0aW9uKGMsdil7 dmFyIHI9W10scmk9LTE7Zm9yKHZhciBpPTAsY2k7Y2k9Y1tpXTtpKyspe2lmKChjaS50ZXh0Q29u dGVudHx8Y2kuaW5uZXJUZXh0fHwiIikuaW5kZXhPZih2KSE9LTEpe3JbKytyaV09Y2l9fXJldHVy biByfSxub2RlVmFsdWU6ZnVuY3Rpb24oYyx2KXt2YXIgcj1bXSxyaT0tMTtmb3IodmFyIGk9MCxj aTtjaT1jW2ldO2krKyl7aWYoY2kuZmlyc3RDaGlsZCYmY2kuZmlyc3RDaGlsZC5ub2RlVmFsdWU9 PXYpe3JbKytyaV09Y2l9fXJldHVybiByfSxjaGVja2VkOmZ1bmN0aW9uKGMpe3ZhciByPVtdLHJp PS0xO2Zvcih2YXIgaT0wLGNpO2NpPWNbaV07aSsrKXtpZihjaS5jaGVja2VkPT10cnVlKXtyWysr cmldPWNpfX1yZXR1cm4gcn0sbm90OmZ1bmN0aW9uKGMsc3Mpe3JldHVybiBFeHQuRG9tUXVlcnku ZmlsdGVyKGMsc3MsdHJ1ZSl9LGFueTpmdW5jdGlvbihjLHNlbGVjdG9ycyl7dmFyIHNzPXNlbGVj dG9ycy5zcGxpdCgifCIpLHI9W10scmk9LTEscztmb3IodmFyIGk9MCxjaTtjaT1jW2ldO2krKyl7 Zm9yKHZhciBqPTA7cz1zc1tqXTtqKyspe2lmKEV4dC5Eb21RdWVyeS5pcyhjaSxzKSl7clsrK3Jp XT1jaTticmVha319fXJldHVybiByfSxvZGQ6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXNbIm50aC1j aGlsZCJdKGMsIm9kZCIpfSxldmVuOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzWyJudGgtY2hpbGQi XShjLCJldmVuIil9LG50aDpmdW5jdGlvbihjLGEpe3JldHVybiBjW2EtMV18fFtdfSxmaXJzdDpm dW5jdGlvbihjKXtyZXR1cm4gY1swXXx8W119LGxhc3Q6ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5s ZW5ndGgtMV18fFtdfSxoYXM6ZnVuY3Rpb24oYyxzcyl7dmFyIHM9RXh0LkRvbVF1ZXJ5LnNlbGVj dCxyPVtdLHJpPS0xO2Zvcih2YXIgaT0wLGNpO2NpPWNbaV07aSsrKXtpZihzKHNzLGNpKS5sZW5n dGg+MCl7clsrK3JpXT1jaX19cmV0dXJuIHJ9LG5leHQ6ZnVuY3Rpb24oYyxzcyl7dmFyIGlzPUV4 dC5Eb21RdWVyeS5pcyxyPVtdLHJpPS0xO2Zvcih2YXIgaT0wLGNpO2NpPWNbaV07aSsrKXt2YXIg bj1uZXh0KGNpKTtpZihuJiZpcyhuLHNzKSl7clsrK3JpXT1jaX19cmV0dXJuIHJ9LHByZXY6ZnVu Y3Rpb24oYyxzcyl7dmFyIGlzPUV4dC5Eb21RdWVyeS5pcyxyPVtdLHJpPS0xO2Zvcih2YXIgaT0w LGNpO2NpPWNbaV07aSsrKXt2YXIgbj1wcmV2KGNpKTtpZihuJiZpcyhuLHNzKSl7clsrK3JpXT1j aX19cmV0dXJuIHJ9fX19KCk7RXh0LnF1ZXJ5PUV4dC5Eb21RdWVyeS5zZWxlY3Q7KGZ1bmN0aW9u KCl7dmFyIGk9RXh0LnV0aWwsbD1FeHQudG9BcnJheSxrPUV4dC5lYWNoLGE9RXh0LmlzT2JqZWN0 LGg9dHJ1ZSxqPWZhbHNlO2kuT2JzZXJ2YWJsZT1mdW5jdGlvbigpe3ZhciBtPXRoaXMsbj1tLmV2 ZW50cztpZihtLmxpc3RlbmVycyl7bS5vbihtLmxpc3RlbmVycyk7ZGVsZXRlIG0ubGlzdGVuZXJz fW0uZXZlbnRzPW58fHt9fTtpLk9ic2VydmFibGUucHJvdG90eXBlPWZ1bmN0aW9uKCl7dmFyIG49 L14oPzpzY29wZXxkZWxheXxidWZmZXJ8c2luZ2xlKSQvLG09ZnVuY3Rpb24obyl7cmV0dXJuIG8u dG9Mb3dlckNhc2UoKX07cmV0dXJue2ZpcmVFdmVudDpmdW5jdGlvbigpe3ZhciBvPWwoYXJndW1l bnRzKSxyPW0ob1swXSkscz10aGlzLHA9aCx1PXMuZXZlbnRzW3JdLHQsdjtpZihzLmV2ZW50c1N1 c3BlbmRlZD09PWgpe2lmKHQ9cy5zdXNwZW5kZWRFdmVudHNRdWV1ZSl7dC5wdXNoKG8pfX1lbHNl e2lmKGEodSkmJnUuYnViYmxlKXtpZih1LmZpcmUuYXBwbHkodSxvLnNsaWNlKDEpKT09PWope3Jl dHVybiBqfXY9cy5nZXRCdWJibGVUYXJnZXQmJnMuZ2V0QnViYmxlVGFyZ2V0KCk7aWYodiYmdi5l bmFibGVCdWJibGUpe3YuZW5hYmxlQnViYmxlKHIpO3JldHVybiB2LmZpcmVFdmVudC5hcHBseSh2 LG8pfX1lbHNle2lmKGEodSkpe28uc2hpZnQoKTtwPXUuZmlyZS5hcHBseSh1LG8pfX19cmV0dXJu IHB9LGFkZExpc3RlbmVyOmZ1bmN0aW9uKHIsdSx3LHEpe3ZhciB0PXRoaXMscyx4LHYscDtpZihh KHIpKXtxPXI7Zm9yKHMgaW4gcSl7eD1xW3NdO2lmKCFuLnRlc3Qocykpe3QuYWRkTGlzdGVuZXIo cyx4LmZufHx4LHguc2NvcGV8fHEuc2NvcGUseC5mbj94OnEpfX19ZWxzZXtyPW0ocik7cD10LmV2 ZW50c1tyXXx8aDtpZih0eXBlb2YgcD09ImJvb2xlYW4iKXt0LmV2ZW50c1tyXT1wPW5ldyBpLkV2 ZW50KHQscil9cC5hZGRMaXN0ZW5lcih1LHcsYShxKT9xOnt9KX19LHJlbW92ZUxpc3RlbmVyOmZ1 bmN0aW9uKG8scSxwKXt2YXIgcj10aGlzLmV2ZW50c1ttKG8pXTtpZihhKHIpKXtyLnJlbW92ZUxp c3RlbmVyKHEscCl9fSxwdXJnZUxpc3RlbmVyczpmdW5jdGlvbigpe3ZhciBxPXRoaXMuZXZlbnRz LG8scDtmb3IocCBpbiBxKXtvPXFbcF07aWYoYShvKSl7by5jbGVhckxpc3RlbmVycygpfX19LGFk ZEV2ZW50czpmdW5jdGlvbihxKXt2YXIgcD10aGlzO3AuZXZlbnRzPXAuZXZlbnRzfHx7fTtpZih0 eXBlb2YgcT09InN0cmluZyIpe2soYXJndW1lbnRzLGZ1bmN0aW9uKG8pe3AuZXZlbnRzW29dPXAu ZXZlbnRzW29dfHxofSl9ZWxzZXtFeHQuYXBwbHlJZihwLmV2ZW50cyxxKX19LGhhc0xpc3RlbmVy OmZ1bmN0aW9uKG8pe3ZhciBwPXRoaXMuZXZlbnRzW29dO3JldHVybiBhKHApJiZwLmxpc3RlbmVy cy5sZW5ndGg+MH0sc3VzcGVuZEV2ZW50czpmdW5jdGlvbihvKXt0aGlzLmV2ZW50c1N1c3BlbmRl ZD1oO2lmKG8pe3RoaXMuc3VzcGVuZGVkRXZlbnRzUXVldWU9W119fSxyZXN1bWVFdmVudHM6ZnVu Y3Rpb24oKXt2YXIgbz10aGlzO28uZXZlbnRzU3VzcGVuZGVkPSFkZWxldGUgby5zdXNwZW5kZWRF dmVudFF1ZXVlO2soby5zdXNwZW5kZWRFdmVudHNRdWV1ZSxmdW5jdGlvbihwKXtvLmZpcmVFdmVu dC5hcHBseShvLHApfSl9fX0oKTt2YXIgZT1pLk9ic2VydmFibGUucHJvdG90eXBlO2Uub249ZS5h ZGRMaXN0ZW5lcjtlLnVuPWUucmVtb3ZlTGlzdGVuZXI7aS5PYnNlcnZhYmxlLnJlbGVhc2VDYXB0 dXJlPWZ1bmN0aW9uKG0pe20uZmlyZUV2ZW50PWUuZmlyZUV2ZW50fTtmdW5jdGlvbiBnKG4scCxt KXtyZXR1cm4gZnVuY3Rpb24oKXtpZihwLnRhcmdldD09YXJndW1lbnRzWzBdKXtuLmFwcGx5KG0s bChhcmd1bWVudHMpKX19fWZ1bmN0aW9uIGMocCxxLG4pe3ZhciBtPW5ldyBpLkRlbGF5ZWRUYXNr KCk7cmV0dXJuIGZ1bmN0aW9uKCl7bS5kZWxheShxLmJ1ZmZlcixwLG4sbChhcmd1bWVudHMpKX19 ZnVuY3Rpb24gZChvLHAsbixtKXtyZXR1cm4gZnVuY3Rpb24oKXtwLnJlbW92ZUxpc3RlbmVyKG4s bSk7cmV0dXJuIG8uYXBwbHkobSxhcmd1bWVudHMpfX1mdW5jdGlvbiBiKG4scCxtKXtyZXR1cm4g ZnVuY3Rpb24oKXt2YXIgbz1sKGFyZ3VtZW50cyk7KGZ1bmN0aW9uKCl7bi5hcHBseShtLG8pfSku ZGVmZXIocC5kZWxheXx8MTApfX1pLkV2ZW50PWZ1bmN0aW9uKG4sbSl7dGhpcy5uYW1lPW07dGhp cy5vYmo9bjt0aGlzLmxpc3RlbmVycz1bXX07aS5FdmVudC5wcm90b3R5cGU9e2FkZExpc3RlbmVy OmZ1bmN0aW9uKHAsbyxuKXt2YXIgcT10aGlzLG07bz1vfHxxLm9iajtpZighcS5pc0xpc3Rlbmlu ZyhwLG8pKXttPXEuY3JlYXRlTGlzdGVuZXIocCxvLG4pO2lmKHEuZmlyaW5nKXtxLmxpc3RlbmVy cz1xLmxpc3RlbmVycy5zbGljZSgwKX1xLmxpc3RlbmVycy5wdXNoKG0pfX0sY3JlYXRlTGlzdGVu ZXI6ZnVuY3Rpb24ocSxwLHIpe3I9cnx8e30scD1wfHx0aGlzLm9iajt2YXIgbT17Zm46cSxzY29w ZTpwLG9wdGlvbnM6cn0sbj1xO2lmKHIudGFyZ2V0KXtuPWcobixyLHApfWlmKHIuZGVsYXkpe249 YihuLHIscCl9aWYoci5zaW5nbGUpe249ZChuLHRoaXMscSxwKX1pZihyLmJ1ZmZlcil7bj1jKG4s cixwKX1tLmZpcmVGbj1uO3JldHVybiBtfSxmaW5kTGlzdGVuZXI6ZnVuY3Rpb24ocCxvKXt2YXIg bixtPS0xO2sodGhpcy5saXN0ZW5lcnMsZnVuY3Rpb24ocSxyKXtuPXEuc2NvcGU7aWYocS5mbj09 cCYmKG49PW98fG49PXRoaXMub2JqKSl7bT1yO3JldHVybiBqfX0sdGhpcyk7cmV0dXJuIG19LGlz TGlzdGVuaW5nOmZ1bmN0aW9uKG4sbSl7cmV0dXJuIHRoaXMuZmluZExpc3RlbmVyKG4sbSkhPS0x fSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihwLG8pe3ZhciBuLHE9dGhpcyxtPWo7aWYoKG49cS5m aW5kTGlzdGVuZXIocCxvKSkhPS0xKXtpZihxLmZpcmluZyl7cS5saXN0ZW5lcnM9cS5saXN0ZW5l cnMuc2xpY2UoMCl9cS5saXN0ZW5lcnMuc3BsaWNlKG4sMSk7bT1ofXJldHVybiBtfSxjbGVhckxp c3RlbmVyczpmdW5jdGlvbigpe3RoaXMubGlzdGVuZXJzPVtdfSxmaXJlOmZ1bmN0aW9uKCl7dmFy IG89dGhpcyxuPWwoYXJndW1lbnRzKSxtPWg7ayhvLmxpc3RlbmVycyxmdW5jdGlvbihwKXtvLmZp cmluZz1oO2lmKHAuZmlyZUZuLmFwcGx5KHAuc2NvcGV8fG8ub2JqfHx3aW5kb3csbik9PT1qKXty ZXR1cm4gbT1vLmZpcmluZz1qfX0pO28uZmlyaW5nPWo7cmV0dXJuIG19fX0pKCk7RXh0LmFwcGx5 KEV4dC51dGlsLk9ic2VydmFibGUucHJvdG90eXBlLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShqKXt2 YXIgaT0odGhpcy5tZXRob2RFdmVudHM9dGhpcy5tZXRob2RFdmVudHN8fHt9KVtqXSxkLGMsZyxo PXRoaXM7aWYoIWkpe3RoaXMubWV0aG9kRXZlbnRzW2pdPWk9e307aS5vcmlnaW5hbEZuPXRoaXNb al07aS5tZXRob2ROYW1lPWo7aS5iZWZvcmU9W107aS5hZnRlcj1bXTt2YXIgYj1mdW5jdGlvbihs LGssZSl7aWYoIUV4dC5pc0VtcHR5KGM9bC5hcHBseShrfHxoLGUpKSl7aWYoRXh0LmlzT2JqZWN0 KGMpKXtkPSFFeHQuaXNFbXB0eShjLnJldHVyblZhbHVlKT9jLnJldHVyblZhbHVlOmM7Zz0hIWMu Y2FuY2VsfWVsc2V7aWYoYz09PWZhbHNlKXtnPXRydWV9ZWxzZXtkPWN9fX19O3RoaXNbal09ZnVu Y3Rpb24oKXt2YXIgZT1FeHQudG9BcnJheShhcmd1bWVudHMpO2Q9Yz11bmRlZmluZWQ7Zz1mYWxz ZTtFeHQuZWFjaChpLmJlZm9yZSxmdW5jdGlvbihrKXtiKGsuZm4say5zY29wZSxlKTtpZihnKXty ZXR1cm4gZH19KTtpZighRXh0LmlzRW1wdHkoYz1pLm9yaWdpbmFsRm4uYXBwbHkoaCxlKSkpe2Q9 Y31FeHQuZWFjaChpLmFmdGVyLGZ1bmN0aW9uKGspe2Ioay5mbixrLnNjb3BlLGUpO2lmKGcpe3Jl dHVybiBkfX0pO3JldHVybiBkfX1yZXR1cm4gaX1yZXR1cm57YmVmb3JlTWV0aG9kOmZ1bmN0aW9u KGQsYyxiKXthLmNhbGwodGhpcyxkKS5iZWZvcmUucHVzaCh7Zm46YyxzY29wZTpifSl9LGFmdGVy TWV0aG9kOmZ1bmN0aW9uKGQsYyxiKXthLmNhbGwodGhpcyxkKS5hZnRlci5wdXNoKHtmbjpjLHNj b3BlOmJ9KX0scmVtb3ZlTWV0aG9kTGlzdGVuZXI6ZnVuY3Rpb24oaCxjLGIpe3ZhciBnPWEuY2Fs bCh0aGlzLGgpLGQ9ZmFsc2U7RXh0LmVhY2goZy5iZWZvcmUsZnVuY3Rpb24oaixrLGUpe2lmKGou Zm49PWMmJmouc2NvcGU9PWIpe2Uuc3BsaWNlKGssMSk7ZD10cnVlO3JldHVybiBmYWxzZX19KTtp ZighZCl7RXh0LmVhY2goZy5hZnRlcixmdW5jdGlvbihqLGssZSl7aWYoai5mbj09YyYmai5zY29w ZT09Yil7ZS5zcGxpY2UoaywxKTtyZXR1cm4gZmFsc2V9fSl9fSxyZWxheUV2ZW50czpmdW5jdGlv bihlLGIpe3ZhciBkPXRoaXM7ZnVuY3Rpb24gYyhnKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4g ZC5maXJlRXZlbnQuYXBwbHkoZCxbZ10uY29uY2F0KEV4dC50b0FycmF5KGFyZ3VtZW50cykpKX19 RXh0LmVhY2goYixmdW5jdGlvbihnKXtkLmV2ZW50c1tnXT1kLmV2ZW50c1tnXXx8dHJ1ZTtlLm9u KGcsYyhnKSxkKX0pfSxlbmFibGVCdWJibGU6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcztiPUV4dC5p c0FycmF5KGIpP2I6RXh0LnRvQXJyYXkoYXJndW1lbnRzKTtFeHQuZWFjaChiLGZ1bmN0aW9uKGQp e2Q9ZC50b0xvd2VyQ2FzZSgpO3ZhciBlPWMuZXZlbnRzW2RdfHx0cnVlO2lmKHR5cGVvZiBlPT0i Ym9vbGVhbiIpe2U9bmV3IEV4dC51dGlsLkV2ZW50KGMsZCk7Yy5ldmVudHNbZF09ZX1lLmJ1YmJs ZT10cnVlfSl9fX0oKSk7RXh0LnV0aWwuT2JzZXJ2YWJsZS5jYXB0dXJlPWZ1bmN0aW9uKGMsYixh KXtjLmZpcmVFdmVudD1jLmZpcmVFdmVudC5jcmVhdGVJbnRlcmNlcHRvcihiLGEpfTtFeHQudXRp bC5PYnNlcnZhYmxlLm9ic2VydmVDbGFzcz1mdW5jdGlvbihhKXtFeHQuYXBwbHkoYSxuZXcgRXh0 LnV0aWwuT2JzZXJ2YWJsZSgpKTthLnByb3RvdHlwZS5maXJlRXZlbnQ9ZnVuY3Rpb24oKXtyZXR1 cm4oYS5maXJlRXZlbnQuYXBwbHkoYSxhcmd1bWVudHMpIT09ZmFsc2UpJiYoRXh0LnV0aWwuT2Jz ZXJ2YWJsZS5wcm90b3R5cGUuZmlyZUV2ZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKSE9PWZhbHNl KX19O0V4dC5FdmVudE1hbmFnZXI9ZnVuY3Rpb24oKXt2YXIgdCxtLGo9ZmFsc2UsbD1FeHQubGli LkV2ZW50LG49RXh0LmxpYi5Eb20sYj1kb2N1bWVudCx1PXdpbmRvdyxnPSJpZS1kZWZlcnJlZC1s b2FkZXIiLG89IkRPTUNvbnRlbnRMb2FkZWQiLGU9e30saD0vXig/OnNjb3BlfGRlbGF5fGJ1ZmZl cnxzaW5nbGV8c3RvcEV2ZW50fHByZXZlbnREZWZhdWx0fHN0b3BQcm9wYWdhdGlvbnxub3JtYWxp emVkfGFyZ3N8ZGVsZWdhdGUpJC87ZnVuY3Rpb24gayhBLHcseix5LHgpe3ZhciBDPUV4dC5pZChB KSxCPWVbQ109ZVtDXXx8e307KEJbd109Qlt3XXx8W10pLnB1c2goW3oseSx4XSk7bC5vbihBLHcs eSk7aWYodz09Im1vdXNld2hlZWwiJiZBLmFkZEV2ZW50TGlzdGVuZXIpe3ZhciB2PVsiRE9NTW91 c2VTY3JvbGwiLHksZmFsc2VdO0EuYWRkRXZlbnRMaXN0ZW5lci5hcHBseShBLHYpO2wub24od2lu ZG93LCJ1bmxvYWQiLGZ1bmN0aW9uKCl7QS5yZW1vdmVFdmVudExpc3RlbmVyLmFwcGx5KEEsdil9 KX1pZih3PT0ibW91c2Vkb3duIiYmQT09ZG9jdW1lbnQpe0V4dC5FdmVudE1hbmFnZXIuc3RvcHBl ZE1vdXNlRG93bkV2ZW50LmFkZExpc3RlbmVyKHkpfX1mdW5jdGlvbiBjKCl7aWYoIWope0V4dC5p c1JlYWR5PWo9dHJ1ZTtpZihtKXtjbGVhckludGVydmFsKG0pfWlmKEV4dC5pc0dlY2tvfHxFeHQu aXNPcGVyYSl7Yi5yZW1vdmVFdmVudExpc3RlbmVyKG8sYyxmYWxzZSl9aWYoRXh0LmlzSUUpe3Zh ciB2PWIuZ2V0RWxlbWVudEJ5SWQoZyk7aWYodil7di5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbDt2 LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodil9fWlmKHQpe3QuZmlyZSgpO3QuY2xlYXJMaXN0ZW5l cnMoKX19fWZ1bmN0aW9uIGEoKXt2YXIgdj0iY29tcGxldGUiO3Q9bmV3IEV4dC51dGlsLkV2ZW50 KCk7aWYoRXh0LmlzR2Vja298fEV4dC5pc09wZXJhKXtiLmFkZEV2ZW50TGlzdGVuZXIobyxjLGZh bHNlKX1lbHNle2lmKEV4dC5pc0lFKXtiLndyaXRlKCI8c2NyaXB0IGlkPSIrZysnIGRlZmVyPSJk ZWZlciIgc3JjPSIvLzoiPjxcL3NjcmlwdD4nKTtiLmdldEVsZW1lbnRCeUlkKGcpLm9ucmVhZHlz dGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKHRoaXMucmVhZHlTdGF0ZT09dil7YygpfX19ZWxzZXtp ZihFeHQuaXNXZWJLaXQpe209c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtpZihiLnJlYWR5U3RhdGU9 PXYpe2MoKX19LDEwKX19fWwub24odSwibG9hZCIsYyl9ZnVuY3Rpb24gcih2LHcpe3JldHVybiBm dW5jdGlvbigpe3ZhciB4PUV4dC50b0FycmF5KGFyZ3VtZW50cyk7aWYody50YXJnZXQ9PUV4dC5F dmVudE9iamVjdC5zZXRFdmVudCh4WzBdKS50YXJnZXQpe3YuYXBwbHkodGhpcyx4KX19fWZ1bmN0 aW9uIHModyx4KXt2YXIgdj1uZXcgRXh0LnV0aWwuRGVsYXllZFRhc2sodyk7cmV0dXJuIGZ1bmN0 aW9uKHkpe3YuZGVsYXkoeC5idWZmZXIsdyxudWxsLFtuZXcgRXh0LkV2ZW50T2JqZWN0SW1wbCh5 KV0pfX1mdW5jdGlvbiBwKHoseSx2LHgsdyl7cmV0dXJuIGZ1bmN0aW9uKEEpe0V4dC5FdmVudE1h bmFnZXIucmVtb3ZlTGlzdGVuZXIoeSx2LHgsdyk7eihBKX19ZnVuY3Rpb24gZCh2LHcpe3JldHVy biBmdW5jdGlvbih4KXt4PW5ldyBFeHQuRXZlbnRPYmplY3RJbXBsKHgpO3NldFRpbWVvdXQoZnVu Y3Rpb24oKXt2KHgpfSx3LmRlbGF5fHwxMCl9fWZ1bmN0aW9uIGkoeCx3LHYsQixBKXt2YXIgQz0h RXh0LmlzT2JqZWN0KHYpP3t9OnYsej1FeHQuZ2V0RG9tKHgpO0I9Qnx8Qy5mbjtBPUF8fEMuc2Nv cGU7aWYoIXope3Rocm93J0Vycm9yIGxpc3RlbmluZyBmb3IgIicrdysnIi4gRWxlbWVudCAiJyt4 KyJcIiBkb2Vzbid0IGV4aXN0LiJ9ZnVuY3Rpb24geShFKXtpZighRXh0KXtyZXR1cm59RT1FeHQu RXZlbnRPYmplY3Quc2V0RXZlbnQoRSk7dmFyIEQ7aWYoQy5kZWxlZ2F0ZSl7aWYoIShEPUUuZ2V0 VGFyZ2V0KEMuZGVsZWdhdGUseikpKXtyZXR1cm59fWVsc2V7RD1FLnRhcmdldH1pZihDLnN0b3BF dmVudCl7RS5zdG9wRXZlbnQoKX1pZihDLnByZXZlbnREZWZhdWx0KXtFLnByZXZlbnREZWZhdWx0 KCl9aWYoQy5zdG9wUHJvcGFnYXRpb24pe0Uuc3RvcFByb3BhZ2F0aW9uKCl9aWYoQy5ub3JtYWxp emVkKXtFPUUuYnJvd3NlckV2ZW50fUIuY2FsbChBfHx6LEUsRCxDKX1pZihDLnRhcmdldCl7eT1y KHksQyl9aWYoQy5kZWxheSl7eT1kKHksQyl9aWYoQy5zaW5nbGUpe3k9cCh5LHosdyxCLEEpfWlm KEMuYnVmZmVyKXt5PXMoeSxDKX1rKHosdyxCLHksQSk7cmV0dXJuIHl9dmFyIHE9e2FkZExpc3Rl bmVyOmZ1bmN0aW9uKHgsdix6LHksdyl7aWYoRXh0LmlzT2JqZWN0KHYpKXt2YXIgQz12LEEsQjtm b3IoQSBpbiBDKXtCPUNbQV07aWYoIWgudGVzdChBKSl7aWYoRXh0LmlzRnVuY3Rpb24oQikpe2ko eCxBLEMsQixDLnNjb3BlKX1lbHNle2koeCxBLEIpfX19fWVsc2V7aSh4LHYsdyx6LHkpfX0scmVt b3ZlTGlzdGVuZXI6ZnVuY3Rpb24odyx2LEEseil7dmFyIHk9RXh0LmdldERvbSh3KSxCPUV4dC5p ZCh5KSx4O0V4dC5lYWNoKChlW0JdfHx7fSlbdl0sZnVuY3Rpb24oRCxFLEMpe2lmKEV4dC5pc0Fy cmF5KEQpJiZEWzBdPT1BJiYoIXp8fERbMl09PXopKXtsLnVuKHksdix4PURbMV0pO0Muc3BsaWNl KEUsMSk7cmV0dXJuIGZhbHNlfX0pO2lmKHY9PSJtb3VzZXdoZWVsIiYmeS5hZGRFdmVudExpc3Rl bmVyJiZ4KXt5LnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTU1vdXNlU2Nyb2xsIix4LGZhbHNlKX1p Zih2PT0ibW91c2Vkb3duIiYmeT09YiYmeCl7RXh0LkV2ZW50TWFuYWdlci5zdG9wcGVkTW91c2VE b3duRXZlbnQucmVtb3ZlTGlzdGVuZXIoeCl9fSxyZW1vdmVBbGw6ZnVuY3Rpb24odyl7dmFyIHk9 RXh0LmlkKHc9RXh0LmdldERvbSh3KSkseD1lW3ldLHY7Zm9yKHYgaW4geCl7aWYoeC5oYXNPd25Q cm9wZXJ0eSh2KSl7RXh0LmVhY2goeFt2XSxmdW5jdGlvbih6KXtsLnVuKHcsdix6LndyYXApfSl9 fWVbeV09bnVsbH0sb25Eb2N1bWVudFJlYWR5OmZ1bmN0aW9uKHgsdyx2KXtpZihqKXt0LmFkZExp c3RlbmVyKHgsdyx2KTt0LmZpcmUoKTt0LmNsZWFyTGlzdGVuZXJzKCl9ZWxzZXtpZighdCl7YSgp fXY9dnx8e307di5kZWxheT12LmRlbGF5fHwxO3QuYWRkTGlzdGVuZXIoeCx3LHYpfX0sZWxIYXNo OmV9O3Eub249cS5hZGRMaXN0ZW5lcjtxLnVuPXEucmVtb3ZlTGlzdGVuZXI7cS5zdG9wcGVkTW91 c2VEb3duRXZlbnQ9bmV3IEV4dC51dGlsLkV2ZW50KCk7cmV0dXJuIHF9KCk7RXh0Lm9uUmVhZHk9 RXh0LkV2ZW50TWFuYWdlci5vbkRvY3VtZW50UmVhZHk7KGZ1bmN0aW9uKCl7dmFyIGE9ZnVuY3Rp b24oKXt2YXIgYz1kb2N1bWVudC5ib2R5fHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgi Ym9keSIpWzBdO2lmKCFjKXtyZXR1cm4gZmFsc2V9dmFyIGI9WyIgIixFeHQuaXNJRT8iZXh0LWll ICIrKEV4dC5pc0lFNj8iZXh0LWllNiI6KEV4dC5pc0lFNz8iZXh0LWllNyI6ImV4dC1pZTgiKSk6 RXh0LmlzR2Vja28/ImV4dC1nZWNrbyAiKyhFeHQuaXNHZWNrbzI/ImV4dC1nZWNrbzIiOiJleHQt Z2Vja28zIik6RXh0LmlzT3BlcmE/ImV4dC1vcGVyYSI6RXh0LmlzV2ViS2l0PyJleHQtd2Via2l0 IjoiIl07aWYoRXh0LmlzU2FmYXJpKXtiLnB1c2goImV4dC1zYWZhcmkgIisoRXh0LmlzU2FmYXJp Mj8iZXh0LXNhZmFyaTIiOihFeHQuaXNTYWZhcmkzPyJleHQtc2FmYXJpMyI6ImV4dC1zYWZhcmk0 IikpKX1lbHNle2lmKEV4dC5pc0Nocm9tZSl7Yi5wdXNoKCJleHQtY2hyb21lIil9fWlmKEV4dC5p c01hYyl7Yi5wdXNoKCJleHQtbWFjIil9aWYoRXh0LmlzTGludXgpe2IucHVzaCgiZXh0LWxpbnV4 Iil9aWYoRXh0LmlzU3RyaWN0fHxFeHQuaXNCb3JkZXJCb3gpe3ZhciBkPWMucGFyZW50Tm9kZTtp ZihkKXtkLmNsYXNzTmFtZSs9RXh0LmlzU3RyaWN0PyIgZXh0LXN0cmljdCI6IiBleHQtYm9yZGVy LWJveCJ9fWMuY2xhc3NOYW1lKz1iLmpvaW4oIiAiKTtyZXR1cm4gdHJ1ZX07aWYoIWEoKSl7RXh0 Lm9uUmVhZHkoYSl9fSkoKTtFeHQuRXZlbnRPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgYj1FeHQubGli LkV2ZW50LGE9ezM6MTMsNjMyMzQ6MzcsNjMyMzU6MzksNjMyMzI6MzgsNjMyMzM6NDAsNjMyNzY6 MzMsNjMyNzc6MzQsNjMyNzI6NDYsNjMyNzM6MzYsNjMyNzU6MzV9LGM9RXh0LmlzSUU/ezE6MCw0 OjEsMjoyfTooRXh0LmlzV2ViS2l0P3sxOjAsMjoxLDM6Mn06ezA6MCwxOjEsMjoyfSk7RXh0LkV2 ZW50T2JqZWN0SW1wbD1mdW5jdGlvbihkKXtpZihkKXt0aGlzLnNldEV2ZW50KGQuYnJvd3NlckV2 ZW50fHxkKX19O0V4dC5FdmVudE9iamVjdEltcGwucHJvdG90eXBlPXtzZXRFdmVudDpmdW5jdGlv bihnKXt2YXIgZD10aGlzO2lmKGc9PWR8fChnJiZnLmJyb3dzZXJFdmVudCkpe3JldHVybiBnfWQu YnJvd3NlckV2ZW50PWc7aWYoZyl7ZC5idXR0b249Zy5idXR0b24/Y1tnLmJ1dHRvbl06KGcud2hp Y2g/Zy53aGljaC0xOi0xKTtpZihnLnR5cGU9PSJjbGljayImJmQuYnV0dG9uPT0tMSl7ZC5idXR0 b249MH1kLnR5cGU9Zy50eXBlO2Quc2hpZnRLZXk9Zy5zaGlmdEtleTtkLmN0cmxLZXk9Zy5jdHJs S2V5fHxnLm1ldGFLZXl8fGZhbHNlO2QuYWx0S2V5PWcuYWx0S2V5O2Qua2V5Q29kZT1nLmtleUNv ZGU7ZC5jaGFyQ29kZT1nLmNoYXJDb2RlO2QudGFyZ2V0PWIuZ2V0VGFyZ2V0KGcpO2QueHk9Yi5n ZXRYWShnKX1lbHNle2QuYnV0dG9uPS0xO2Quc2hpZnRLZXk9ZmFsc2U7ZC5jdHJsS2V5PWZhbHNl O2QuYWx0S2V5PWZhbHNlO2Qua2V5Q29kZT0wO2QuY2hhckNvZGU9MDtkLnRhcmdldD1udWxsO2Qu eHk9WzAsMF19cmV0dXJuIGR9LHN0b3BFdmVudDpmdW5jdGlvbigpe3ZhciBkPXRoaXM7aWYoZC5i cm93c2VyRXZlbnQpe2lmKGQuYnJvd3NlckV2ZW50LnR5cGU9PSJtb3VzZWRvd24iKXtFeHQuRXZl bnRNYW5hZ2VyLnN0b3BwZWRNb3VzZURvd25FdmVudC5maXJlKGQpfWIuc3RvcEV2ZW50KGQuYnJv d3NlckV2ZW50KX19LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5icm93c2VyRXZl bnQpe2IucHJldmVudERlZmF1bHQodGhpcy5icm93c2VyRXZlbnQpfX0sc3RvcFByb3BhZ2F0aW9u OmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztpZihkLmJyb3dzZXJFdmVudCl7aWYoZC5icm93c2VyRXZl bnQudHlwZT09Im1vdXNlZG93biIpe0V4dC5FdmVudE1hbmFnZXIuc3RvcHBlZE1vdXNlRG93bkV2 ZW50LmZpcmUoZCl9Yi5zdG9wUHJvcGFnYXRpb24oZC5icm93c2VyRXZlbnQpfX0sZ2V0Q2hhckNv ZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGFyQ29kZXx8dGhpcy5rZXlDb2RlfSxnZXRLZXk6 ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemVLZXkodGhpcy5rZXlDb2RlfHx0aGlzLmNo YXJDb2RlKX0sbm9ybWFsaXplS2V5OmZ1bmN0aW9uKGQpe3JldHVybiBFeHQuaXNTYWZhcmk/KGFb ZF18fGQpOmR9LGdldFBhZ2VYOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueHlbMF19LGdldFBhZ2VZ OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueHlbMV19LGdldFhZOmZ1bmN0aW9uKCl7cmV0dXJuIHRo aXMueHl9LGdldFRhcmdldDpmdW5jdGlvbihlLGcsZCl7cmV0dXJuIGU/RXh0LmZseSh0aGlzLnRh cmdldCkuZmluZFBhcmVudChlLGcsZCk6KGQ/RXh0LmdldCh0aGlzLnRhcmdldCk6dGhpcy50YXJn ZXQpfSxnZXRSZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnJvd3NlckV2ZW50 P2IuZ2V0UmVsYXRlZFRhcmdldCh0aGlzLmJyb3dzZXJFdmVudCk6bnVsbH0sZ2V0V2hlZWxEZWx0 YTpmdW5jdGlvbigpe3ZhciBkPXRoaXMuYnJvd3NlckV2ZW50O3ZhciBnPTA7aWYoZC53aGVlbERl bHRhKXtnPWQud2hlZWxEZWx0YS8xMjB9ZWxzZXtpZihkLmRldGFpbCl7Zz0tZC5kZXRhaWwvM319 cmV0dXJuIGd9LHdpdGhpbjpmdW5jdGlvbihnLGgsZCl7aWYoZyl7dmFyIGU9dGhpc1toPyJnZXRS ZWxhdGVkVGFyZ2V0IjoiZ2V0VGFyZ2V0Il0oKTtyZXR1cm4gZSYmKChkPyhlPT1FeHQuZ2V0RG9t KGcpKTpmYWxzZSl8fEV4dC5mbHkoZykuY29udGFpbnMoZSkpfXJldHVybiBmYWxzZX19O3JldHVy biBuZXcgRXh0LkV2ZW50T2JqZWN0SW1wbCgpfSgpO0V4dC5hcHBseShFeHQuRXZlbnRNYW5hZ2Vy LGZ1bmN0aW9uKCl7dmFyIGMsaixlLGIsYT1FeHQubGliLkRvbSxrPUV4dC5saWIuRXZlbnQsaT0v Xig/OnNjb3BlfGRlbGF5fGJ1ZmZlcnxzaW5nbGV8c3RvcEV2ZW50fHByZXZlbnREZWZhdWx0fHN0 b3BQcm9wYWdhdGlvbnxub3JtYWxpemVkfGFyZ3N8ZGVsZWdhdGUpJC8saD0wLGc9MCxkPUV4dC5p c1NhZmFyaT9FeHQubnVtKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgv dmVyc2lvblwvKFxkK1wuXGQpLylbMV18fDIpPj0zLjE6ISgoRXh0LmlzR2Vja28mJiFFeHQuaXNX aW5kb3dzKXx8RXh0LmlzT3BlcmEpO3JldHVybntkb1Jlc2l6ZUV2ZW50OmZ1bmN0aW9uKCl7dmFy IG09YS5nZXRWaWV3SGVpZ2h0KCksbD1hLmdldFZpZXdXaWR0aCgpO2lmKGchPW18fGghPWwpe2Mu ZmlyZShoPWwsZz1tKX19LG9uV2luZG93UmVzaXplOmZ1bmN0aW9uKG4sbSxsKXtpZighYyl7Yz1u ZXcgRXh0LnV0aWwuRXZlbnQoKTtqPW5ldyBFeHQudXRpbC5EZWxheWVkVGFzayh0aGlzLmRvUmVz aXplRXZlbnQpO2sub24od2luZG93LCJyZXNpemUiLHRoaXMuZmlyZVdpbmRvd1Jlc2l6ZSx0aGlz KX1jLmFkZExpc3RlbmVyKG4sbSxsKX0sZmlyZVdpbmRvd1Jlc2l6ZTpmdW5jdGlvbigpe2lmKGMp e2lmKChFeHQuaXNJRXx8RXh0LmlzQWlyKSYmail7ai5kZWxheSg1MCl9ZWxzZXtjLmZpcmUoYS5n ZXRWaWV3V2lkdGgoKSxhLmdldFZpZXdIZWlnaHQoKSl9fX0sb25UZXh0UmVzaXplOmZ1bmN0aW9u KG8sbixsKXtpZighZSl7ZT1uZXcgRXh0LnV0aWwuRXZlbnQoKTt2YXIgbT1uZXcgRXh0LkVsZW1l bnQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO20uZG9tLmNsYXNzTmFtZT0ieC10ZXh0 LXJlc2l6ZSI7bS5kb20uaW5uZXJIVE1MPSJYIjttLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpO2I9 bS5kb20ub2Zmc2V0SGVpZ2h0O3NldEludGVydmFsKGZ1bmN0aW9uKCl7aWYobS5kb20ub2Zmc2V0 SGVpZ2h0IT1iKXtlLmZpcmUoYixiPW0uZG9tLm9mZnNldEhlaWdodCl9fSx0aGlzLnRleHRSZXNp emVJbnRlcnZhbCl9ZS5hZGRMaXN0ZW5lcihvLG4sbCl9LHJlbW92ZVJlc2l6ZUxpc3RlbmVyOmZ1 bmN0aW9uKG0sbCl7aWYoYyl7Yy5yZW1vdmVMaXN0ZW5lcihtLGwpfX0sZmlyZVJlc2l6ZTpmdW5j dGlvbigpe2lmKGMpe2MuZmlyZShhLmdldFZpZXdXaWR0aCgpLGEuZ2V0Vmlld0hlaWdodCgpKX19 LHRleHRSZXNpemVJbnRlcnZhbDo1MCxpZURlZmVyU3JjOmZhbHNlLHVzZUtleWRvd246ZH19KCkp O0V4dC5FdmVudE1hbmFnZXIub249RXh0LkV2ZW50TWFuYWdlci5hZGRMaXN0ZW5lcjtFeHQuYXBw bHkoRXh0LkV2ZW50T2JqZWN0SW1wbC5wcm90b3R5cGUse0JBQ0tTUEFDRTo4LFRBQjo5LE5VTV9D RU5URVI6MTIsRU5URVI6MTMsUkVUVVJOOjEzLFNISUZUOjE2LENUUkw6MTcsQ09OVFJPTDoxNyxB TFQ6MTgsUEFVU0U6MTksQ0FQU19MT0NLOjIwLEVTQzoyNyxTUEFDRTozMixQQUdFX1VQOjMzLFBB R0VVUDozMyxQQUdFX0RPV046MzQsUEFHRURPV046MzQsRU5EOjM1LEhPTUU6MzYsTEVGVDozNyxV UDozOCxSSUdIVDozOSxET1dOOjQwLFBSSU5UX1NDUkVFTjo0NCxJTlNFUlQ6NDUsREVMRVRFOjQ2 LFpFUk86NDgsT05FOjQ5LFRXTzo1MCxUSFJFRTo1MSxGT1VSOjUyLEZJVkU6NTMsU0lYOjU0LFNF VkVOOjU1LEVJR0hUOjU2LE5JTkU6NTcsQTo2NSxCOjY2LEM6NjcsRDo2OCxFOjY5LEY6NzAsRzo3 MSxIOjcyLEk6NzMsSjo3NCxLOjc1LEw6NzYsTTo3NyxOOjc4LE86NzksUDo4MCxROjgxLFI6ODIs Uzo4MyxUOjg0LFU6ODUsVjo4NixXOjg3LFg6ODgsWTo4OSxaOjkwLENPTlRFWFRfTUVOVTo5MyxO VU1fWkVSTzo5NixOVU1fT05FOjk3LE5VTV9UV086OTgsTlVNX1RIUkVFOjk5LE5VTV9GT1VSOjEw MCxOVU1fRklWRToxMDEsTlVNX1NJWDoxMDIsTlVNX1NFVkVOOjEwMyxOVU1fRUlHSFQ6MTA0LE5V TV9OSU5FOjEwNSxOVU1fTVVMVElQTFk6MTA2LE5VTV9QTFVTOjEwNyxOVU1fTUlOVVM6MTA5LE5V TV9QRVJJT0Q6MTEwLE5VTV9ESVZJU0lPTjoxMTEsRjE6MTEyLEYyOjExMyxGMzoxMTQsRjQ6MTE1 LEY1OjExNixGNjoxMTcsRjc6MTE4LEY4OjExOSxGOToxMjAsRjEwOjEyMSxGMTE6MTIyLEYxMjox MjMsaXNOYXZLZXlQcmVzczpmdW5jdGlvbigpe3ZhciBiPXRoaXMsYT10aGlzLm5vcm1hbGl6ZUtl eShiLmtleUNvZGUpO3JldHVybihhPj0zMyYmYTw9NDApfHxhPT1iLlJFVFVSTnx8YT09Yi5UQUJ8 fGE9PWIuRVNDfSxpc1NwZWNpYWxLZXk6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm5vcm1hbGl6ZUtl eSh0aGlzLmtleUNvZGUpO3JldHVybih0aGlzLnR5cGU9PSJrZXlwcmVzcyImJnRoaXMuY3RybEtl eSl8fHRoaXMuaXNOYXZLZXlQcmVzcygpfHwoYT09dGhpcy5CQUNLU1BBQ0UpfHwoYT49MTYmJmE8 PTIwKXx8KGE+PTQ0JiZhPD00NSl9LGdldFBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFeHQu bGliLlBvaW50KHRoaXMueHlbMF0sdGhpcy54eVsxXSl9LGhhc01vZGlmaWVyOmZ1bmN0aW9uKCl7 cmV0dXJuKCh0aGlzLmN0cmxLZXl8fHRoaXMuYWx0S2V5KXx8dGhpcy5zaGlmdEtleSl9fSk7KGZ1 bmN0aW9uKCl7dmFyIGk9ZG9jdW1lbnQ7RXh0LkVsZW1lbnQ9ZnVuY3Rpb24obixvKXt2YXIgcD10 eXBlb2Ygbj09InN0cmluZyI/aS5nZXRFbGVtZW50QnlJZChuKTpuLHE7aWYoIXApe3JldHVybiBu dWxsfXE9cC5pZDtpZighbyYmcSYmRXh0LkVsZW1lbnQuY2FjaGVbcV0pe3JldHVybiBFeHQuRWxl bWVudC5jYWNoZVtxXX10aGlzLmRvbT1wO3RoaXMuaWQ9cXx8RXh0LmlkKHApfTt2YXIgYT1FeHQu bGliLkRvbSxlPUV4dC5Eb21IZWxwZXIsbD1FeHQubGliLkV2ZW50LGQ9RXh0LmxpYi5BbmltLGc9 RXh0LkVsZW1lbnQ7Zy5wcm90b3R5cGU9e3NldDpmdW5jdGlvbihzLHApe3ZhciBxPXRoaXMuZG9t LG4scjtmb3IobiBpbiBzKXtyPXNbbl07aWYobiE9InN0eWxlIiYmIUV4dC5pc0Z1bmN0aW9uKHIp KXtpZihuPT0iY2xzIil7cS5jbGFzc05hbWU9cn1lbHNle2lmKHMuaGFzT3duUHJvcGVydHkobikp e2lmKHB8fCEhcS5zZXRBdHRyaWJ1dGUpe3Euc2V0QXR0cmlidXRlKG4scil9ZWxzZXtxW25dPXJ9 fX19fWlmKHMuc3R5bGUpe0V4dC5Eb21IZWxwZXIuYXBwbHlTdHlsZXMocSxzLnN0eWxlKX1yZXR1 cm4gdGhpc30sZGVmYXVsdFVuaXQ6InB4IixpczpmdW5jdGlvbihuKXtyZXR1cm4gRXh0LkRvbVF1 ZXJ5LmlzKHRoaXMuZG9tLG4pfSxmb2N1czpmdW5jdGlvbihxLHApe3ZhciBuPXRoaXMscD1wfHxu LmRvbTt0cnl7aWYoTnVtYmVyKHEpKXtuLmZvY3VzLmRlZmVyKHEsbnVsbCxbbnVsbCxwXSl9ZWxz ZXtwLmZvY3VzKCl9fWNhdGNoKG8pe31yZXR1cm4gbn0sYmx1cjpmdW5jdGlvbigpe3RyeXt0aGlz LmRvbS5ibHVyKCl9Y2F0Y2gobil7fXJldHVybiB0aGlzfSxnZXRWYWx1ZTpmdW5jdGlvbihuKXt2 YXIgbz10aGlzLmRvbS52YWx1ZTtyZXR1cm4gbj9wYXJzZUludChvLDEwKTpvfSxhZGRMaXN0ZW5l cjpmdW5jdGlvbihuLHEscCxvKXtFeHQuRXZlbnRNYW5hZ2VyLm9uKHRoaXMuZG9tLG4scSxwfHx0 aGlzLG8pO3JldHVybiB0aGlzfSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihuLHAsbyl7RXh0LkV2 ZW50TWFuYWdlci5yZW1vdmVMaXN0ZW5lcih0aGlzLmRvbSxuLHAsb3x8dGhpcyk7cmV0dXJuIHRo aXN9LHJlbW92ZUFsbExpc3RlbmVyczpmdW5jdGlvbigpe0V4dC5FdmVudE1hbmFnZXIucmVtb3Zl QWxsKHRoaXMuZG9tKTtyZXR1cm4gdGhpc30sYWRkVW5pdHM6ZnVuY3Rpb24obil7aWYobj09PSIi fHxuPT0iYXV0byJ8fG49PT11bmRlZmluZWQpe249bnx8IiJ9ZWxzZXtpZighaXNOYU4obil8fCFq LnRlc3Qobikpe249bisodGhpcy5kZWZhdWx0VW5pdHx8InB4Iil9fXJldHVybiBufSxsb2FkOmZ1 bmN0aW9uKG8scCxuKXtFeHQuQWpheC5yZXF1ZXN0KEV4dC5hcHBseSh7cGFyYW1zOnAsdXJsOm8u dXJsfHxvLGNhbGxiYWNrOm4sZWw6dGhpcy5kb20saW5kaWNhdG9yVGV4dDpvLmluZGljYXRvclRl eHR8fCIifSxFeHQuaXNPYmplY3Qobyk/bzp7fSkpO3JldHVybiB0aGlzfSxpc0JvcmRlckJveDpm dW5jdGlvbigpe3JldHVybiBoWyh0aGlzLmRvbS50YWdOYW1lfHwiIikudG9Mb3dlckNhc2UoKV18 fEV4dC5pc0JvcmRlckJveH0scmVtb3ZlOmZ1bmN0aW9uKCl7dmFyIG49dGhpcyxvPW4uZG9tO24u cmVtb3ZlQWxsTGlzdGVuZXJzKCk7ZGVsZXRlIGcuY2FjaGVbby5pZF07ZGVsZXRlIGcuZGF0YUNh Y2hlW28uaWRdO0V4dC5yZW1vdmVOb2RlKG8pfSxob3ZlcjpmdW5jdGlvbihvLG4scSxwKXt2YXIg cj10aGlzO3Iub24oIm1vdXNlZW50ZXIiLG8scXx8ci5kb20scCk7ci5vbigibW91c2VsZWF2ZSIs bixxfHxyLmRvbSxwKTtyZXR1cm4gcn0sY29udGFpbnM6ZnVuY3Rpb24obil7cmV0dXJuICFuP2Zh bHNlOkV4dC5saWIuRG9tLmlzQW5jZXN0b3IodGhpcy5kb20sbi5kb20/bi5kb206bil9LGdldEF0 dHJpYnV0ZU5TOmZ1bmN0aW9uKG8sbil7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlKG4sbyl9LGdl dEF0dHJpYnV0ZTpFeHQuaXNJRT9mdW5jdGlvbihuLHApe3ZhciBxPXRoaXMuZG9tLG89dHlwZW9m IHFbcCsiOiIrbl07aWYoWyJ1bmRlZmluZWQiLCJ1bmtub3duIl0uaW5kZXhPZihvKT09LTEpe3Jl dHVybiBxW3ArIjoiK25dfXJldHVybiBxW25dfTpmdW5jdGlvbihuLG8pe3ZhciBwPXRoaXMuZG9t O3JldHVybiBwLmdldEF0dHJpYnV0ZU5TKG8sbil8fHAuZ2V0QXR0cmlidXRlKG8rIjoiK24pfHxw LmdldEF0dHJpYnV0ZShuKXx8cFtuXX0sdXBkYXRlOmZ1bmN0aW9uKG4pe3RoaXMuZG9tLmlubmVy SFRNTD1uO3JldHVybiB0aGlzfX07dmFyIG09Zy5wcm90b3R5cGU7Zy5hZGRNZXRob2RzPWZ1bmN0 aW9uKG4pe0V4dC5hcHBseShtLG4pfTttLm9uPW0uYWRkTGlzdGVuZXI7bS51bj1tLnJlbW92ZUxp c3RlbmVyO20uYXV0b0JveEFkanVzdD10cnVlO3ZhciBqPS9cZCsocHh8ZW18JXxlbnxleHxwdHxp bnxjbXxtbXxwYykkL2ksYztnLmNhY2hlPXt9O2cuZGF0YUNhY2hlPXt9O2cuZ2V0PWZ1bmN0aW9u KG8pe3ZhciBuLHIscTtpZighbyl7cmV0dXJuIG51bGx9aWYodHlwZW9mIG89PSJzdHJpbmciKXtp ZighKHI9aS5nZXRFbGVtZW50QnlJZChvKSkpe3JldHVybiBudWxsfWlmKG49Zy5jYWNoZVtvXSl7 bi5kb209cn1lbHNle249Zy5jYWNoZVtvXT1uZXcgZyhyKX1yZXR1cm4gbn1lbHNle2lmKG8udGFn TmFtZSl7aWYoIShxPW8uaWQpKXtxPUV4dC5pZChvKX1pZihuPWcuY2FjaGVbcV0pe24uZG9tPW99 ZWxzZXtuPWcuY2FjaGVbcV09bmV3IGcobyl9cmV0dXJuIG59ZWxzZXtpZihvIGluc3RhbmNlb2Yg Zyl7aWYobyE9Yyl7by5kb209aS5nZXRFbGVtZW50QnlJZChvLmlkKXx8by5kb207Zy5jYWNoZVtv LmlkXT1vfXJldHVybiBvfWVsc2V7aWYoby5pc0NvbXBvc2l0ZSl7cmV0dXJuIG99ZWxzZXtpZihF eHQuaXNBcnJheShvKSl7cmV0dXJuIGcuc2VsZWN0KG8pfWVsc2V7aWYobz09aSl7aWYoIWMpe3Zh ciBwPWZ1bmN0aW9uKCl7fTtwLnByb3RvdHlwZT1nLnByb3RvdHlwZTtjPW5ldyBwKCk7Yy5kb209 aX1yZXR1cm4gY319fX19fXJldHVybiBudWxsfTtnLmRhdGE9ZnVuY3Rpb24obyxuLHApe3ZhciBx PWcuZGF0YUNhY2hlW28uaWRdO2lmKCFxKXtxPWcuZGF0YUNhY2hlW28uaWRdPXt9fWlmKGFyZ3Vt ZW50cy5sZW5ndGg9PTIpe3JldHVybiBxW25dfWVsc2V7cVtuXT1wfX07ZnVuY3Rpb24gaygpe2lm KCFFeHQuZW5hYmxlR2FyYmFnZUNvbGxlY3Rvcil7Y2xlYXJJbnRlcnZhbChnLmNvbGxlY3RvclRo cmVhZCl9ZWxzZXt2YXIgbixvLHA7Zm9yKG4gaW4gZy5jYWNoZSl7bz1nLmNhY2hlW25dO3A9by5k b207aWYoIXB8fCFwLnBhcmVudE5vZGV8fCghcC5vZmZzZXRQYXJlbnQmJiFpLmdldEVsZW1lbnRC eUlkKG4pKSl7ZGVsZXRlIGcuY2FjaGVbbl07aWYocCYmRXh0LmVuYWJsZUxpc3RlbmVyQ29sbGVj dGlvbil7RXh0LkV2ZW50TWFuYWdlci5yZW1vdmVBbGwocCl9fX19fWcuY29sbGVjdG9yVGhyZWFk SWQ9c2V0SW50ZXJ2YWwoaywzMDAwMCk7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPWcu cHJvdG90eXBlO2cuRmx5d2VpZ2h0PWZ1bmN0aW9uKG4pe3RoaXMuZG9tPW59O2cuRmx5d2VpZ2h0 LnByb3RvdHlwZT1uZXcgYigpO2cuRmx5d2VpZ2h0LnByb3RvdHlwZS5pc0ZseXdlaWdodD10cnVl O2cuX2ZseXdlaWdodHM9e307Zy5mbHk9ZnVuY3Rpb24ocCxuKXt2YXIgbz1udWxsO249bnx8Il9n bG9iYWwiO2lmKHA9RXh0LmdldERvbShwKSl7KGcuX2ZseXdlaWdodHNbbl09Zy5fZmx5d2VpZ2h0 c1tuXXx8bmV3IGcuRmx5d2VpZ2h0KCkpLmRvbT1wO289Zy5fZmx5d2VpZ2h0c1tuXX1yZXR1cm4g b307RXh0LmdldD1nLmdldDtFeHQuZmx5PWcuZmx5O3ZhciBoPUV4dC5pc1N0cmljdD97c2VsZWN0 OjF9OntpbnB1dDoxLHNlbGVjdDoxLHRleHRhcmVhOjF9O2lmKEV4dC5pc0lFfHxFeHQuaXNHZWNr byl7aC5idXR0b249MX1FeHQuRXZlbnRNYW5hZ2VyLm9uKHdpbmRvdywidW5sb2FkIixmdW5jdGlv bigpe2RlbGV0ZSBnLmNhY2hlO2RlbGV0ZSBnLmRhdGFDYWNoZTtkZWxldGUgZy5fZmx5d2VpZ2h0 c30pfSkoKTtFeHQuRWxlbWVudC5hZGRNZXRob2RzKHtzd2FsbG93RXZlbnQ6ZnVuY3Rpb24oYSxi KXt2YXIgZD10aGlzO2Z1bmN0aW9uIGMoZyl7Zy5zdG9wUHJvcGFnYXRpb24oKTtpZihiKXtnLnBy ZXZlbnREZWZhdWx0KCl9fWlmKEV4dC5pc0FycmF5KGEpKXtFeHQuZWFjaChhLGZ1bmN0aW9uKGcp e2Qub24oZyxjKX0pO3JldHVybiBkfWQub24oYSxjKTtyZXR1cm4gZH0scmVsYXlFdmVudDpmdW5j dGlvbihhLGIpe3RoaXMub24oYSxmdW5jdGlvbihjKXtiLmZpcmVFdmVudChhLGMpfSl9LGNsZWFu OmZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMsZT1kLmRvbSxnPWUuZmlyc3RDaGlsZCxjPS0xO2lmKEV4 dC5FbGVtZW50LmRhdGEoZSwiaXNDbGVhbmVkIikmJmIhPT10cnVlKXtyZXR1cm4gZH13aGlsZShn KXt2YXIgYT1nLm5leHRTaWJsaW5nO2lmKGcubm9kZVR5cGU9PTMmJiEvXFMvLnRlc3QoZy5ub2Rl VmFsdWUpKXtlLnJlbW92ZUNoaWxkKGcpfWVsc2V7Zy5ub2RlSW5kZXg9KytjfWc9YX1FeHQuRWxl bWVudC5kYXRhKGUsImlzQ2xlYW5lZCIsdHJ1ZSk7cmV0dXJuIGR9LGxvYWQ6ZnVuY3Rpb24oKXt2 YXIgYT10aGlzLmdldFVwZGF0ZXIoKTthLnVwZGF0ZS5hcHBseShhLGFyZ3VtZW50cyk7cmV0dXJu IHRoaXN9LGdldFVwZGF0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51cGRhdGVNYW5hZ2VyfHwo dGhpcy51cGRhdGVNYW5hZ2VyPW5ldyBFeHQuVXBkYXRlcih0aGlzKSl9LHVwZGF0ZTpmdW5jdGlv bihodG1sLGxvYWRTY3JpcHRzLGNhbGxiYWNrKXtodG1sPWh0bWx8fCIiO2lmKGxvYWRTY3JpcHRz IT09dHJ1ZSl7dGhpcy5kb20uaW5uZXJIVE1MPWh0bWw7aWYoRXh0LmlzRnVuY3Rpb24oY2FsbGJh Y2spKXtjYWxsYmFjaygpfXJldHVybiB0aGlzfXZhciBpZD1FeHQuaWQoKSxkb209dGhpcy5kb207 aHRtbCs9JzxzcGFuIGlkPSInK2lkKyciPjwvc3Bhbj4nO0V4dC5saWIuRXZlbnQub25BdmFpbGFi bGUoaWQsZnVuY3Rpb24oKXt2YXIgRE9DPWRvY3VtZW50LGhkPURPQy5nZXRFbGVtZW50c0J5VGFn TmFtZSgiaGVhZCIpWzBdLHJlPS8oPzo8c2NyaXB0KFtePl0qKT8+KSgoXG58XHJ8LikqPykoPzo8 XC9zY3JpcHQ+KS9pZyxzcmNSZT0vXHNzcmM9KFtcJ1wiXSkoLio/KVwxL2ksdHlwZVJlPS9cc3R5 cGU9KFtcJ1wiXSkoLio/KVwxL2ksbWF0Y2gsYXR0cnMsc3JjTWF0Y2gsdHlwZU1hdGNoLGVsLHM7 d2hpbGUoKG1hdGNoPXJlLmV4ZWMoaHRtbCkpKXthdHRycz1tYXRjaFsxXTtzcmNNYXRjaD1hdHRy cz9hdHRycy5tYXRjaChzcmNSZSk6ZmFsc2U7aWYoc3JjTWF0Y2gmJnNyY01hdGNoWzJdKXtzPURP Qy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtzLnNyYz1zcmNNYXRjaFsyXTt0eXBlTWF0Y2g9YXR0 cnMubWF0Y2godHlwZVJlKTtpZih0eXBlTWF0Y2gmJnR5cGVNYXRjaFsyXSl7cy50eXBlPXR5cGVN YXRjaFsyXX1oZC5hcHBlbmRDaGlsZChzKX1lbHNle2lmKG1hdGNoWzJdJiZtYXRjaFsyXS5sZW5n dGg+MCl7aWYod2luZG93LmV4ZWNTY3JpcHQpe3dpbmRvdy5leGVjU2NyaXB0KG1hdGNoWzJdKX1l bHNle3dpbmRvdy5ldmFsKG1hdGNoWzJdKX19fX1lbD1ET0MuZ2V0RWxlbWVudEJ5SWQoaWQpO2lm KGVsKXtFeHQucmVtb3ZlTm9kZShlbCl9aWYoRXh0LmlzRnVuY3Rpb24oY2FsbGJhY2spKXtjYWxs YmFjaygpfX0pO2RvbS5pbm5lckhUTUw9aHRtbC5yZXBsYWNlKC8oPzo8c2NyaXB0Lio/PikoKFxu fFxyfC4pKj8pKD86PFwvc2NyaXB0PikvaWcsIiIpO3JldHVybiB0aGlzfSxjcmVhdGVQcm94eTpm dW5jdGlvbihhLGUsZCl7YT1FeHQuaXNPYmplY3QoYSk/YTp7dGFnOiJkaXYiLGNsczphfTt2YXIg Yz10aGlzLGI9ZT9FeHQuRG9tSGVscGVyLmFwcGVuZChlLGEsdHJ1ZSk6RXh0LkRvbUhlbHBlci5p bnNlcnRCZWZvcmUoYy5kb20sYSx0cnVlKTtpZihkJiZjLnNldEJveCYmYy5nZXRCb3gpe2Iuc2V0 Qm94KGMuZ2V0Qm94KCkpfXJldHVybiBifX0pO0V4dC5FbGVtZW50LnByb3RvdHlwZS5nZXRVcGRh dGVNYW5hZ2VyPUV4dC5FbGVtZW50LnByb3RvdHlwZS5nZXRVcGRhdGVyO0V4dC5FbGVtZW50LnVu Y2FjaGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciBkPTAsYz1hcmd1bWVudHMsYj1jLmxlbmd0aDtkPGI7 ZCsrKXtpZihjW2RdKXtkZWxldGUgRXh0LkVsZW1lbnQuY2FjaGVbY1tkXS5pZHx8Y1tkXV19fX07 RXh0LkVsZW1lbnQuYWRkTWV0aG9kcyh7Z2V0QW5jaG9yWFk6ZnVuY3Rpb24oZSxsLHEpe2U9KGV8 fCJ0bCIpLnRvTG93ZXJDYXNlKCk7cT1xfHx7fTt2YXIgaz10aGlzLGI9ay5kb209PWRvY3VtZW50 LmJvZHl8fGsuZG9tPT1kb2N1bWVudCxuPXEud2lkdGh8fGI/RXh0LmxpYi5Eb20uZ2V0Vmlld1dp ZHRoKCk6ay5nZXRXaWR0aCgpLGk9cS5oZWlnaHR8fGI/RXh0LmxpYi5Eb20uZ2V0Vmlld0hlaWdo dCgpOmsuZ2V0SGVpZ2h0KCkscCxhPU1hdGgucm91bmQsYz1rLmdldFhZKCksbT1rLmdldFNjcm9s bCgpLGo9Yj9tLmxlZnQ6IWw/Y1swXTowLGc9Yj9tLnRvcDohbD9jWzFdOjAsZD17YzpbYShuKjAu NSksYShpKjAuNSldLHQ6W2EobiowLjUpLDBdLGw6WzAsYShpKjAuNSldLHI6W24sYShpKjAuNSld LGI6W2EobiowLjUpLGldLHRsOlswLDBdLGJsOlswLGldLGJyOltuLGldLHRyOltuLDBdfTtwPWRb ZV07cmV0dXJuW3BbMF0raixwWzFdK2ddfSxhbmNob3JUbzpmdW5jdGlvbihiLGcsYyxhLGksail7 dmFyIGg9dGhpcyxlPWguZG9tO2Z1bmN0aW9uIGQoKXtFeHQuZmx5KGUpLmFsaWduVG8oYixnLGMs YSk7RXh0LmNhbGxiYWNrKGosRXh0LmZseShlKSl9RXh0LkV2ZW50TWFuYWdlci5vbldpbmRvd1Jl c2l6ZShkLGgpO2lmKCFFeHQuaXNFbXB0eShpKSl7RXh0LkV2ZW50TWFuYWdlci5vbih3aW5kb3cs InNjcm9sbCIsZCxoLHtidWZmZXI6IWlzTmFOKGkpP2k6NTB9KX1kLmNhbGwoaCk7cmV0dXJuIGh9 LGdldEFsaWduVG9YWTpmdW5jdGlvbihnLEEsQil7Zz1FeHQuZ2V0KGcpO2lmKCFnfHwhZy5kb20p e3Rocm93IkVsZW1lbnQuYWxpZ25Ub1hZIHdpdGggYW4gZWxlbWVudCB0aGF0IGRvZXNuJ3QgZXhp c3QifUI9Qnx8WzAsMF07QT0oQT09Ij8iPyJ0bC1ibD8iOighLy0vLnRlc3QoQSkmJkEhPT0iIj8i dGwtIitBOkF8fCJ0bC1ibCIpKS50b0xvd2VyQ2FzZSgpO3ZhciBLPXRoaXMsSD1LLmRvbSxNLEws bixsLHMsRix2LHQ9RXh0LmxpYi5Eb20uZ2V0Vmlld1dpZHRoKCktMTAsRz1FeHQubGliLkRvbS5n ZXRWaWV3SGVpZ2h0KCktMTAsYixpLGosayx1LHosTj1kb2N1bWVudCxKPU4uZG9jdW1lbnRFbGVt ZW50LHE9Ti5ib2R5LEU9KEouc2Nyb2xsTGVmdHx8cS5zY3JvbGxMZWZ0fHwwKSs1LEQ9KEouc2Ny b2xsVG9wfHxxLnNjcm9sbFRvcHx8MCkrNSxJPWZhbHNlLGU9IiIsYT0iIixDPUEubWF0Y2goL14o W2Etel0rKS0oW2Etel0rKShcPyk/JC8pO2lmKCFDKXt0aHJvdyJFbGVtZW50LmFsaWduVG8gd2l0 aCBhbiBpbnZhbGlkIGFsaWdubWVudCAiK0F9ZT1DWzFdO2E9Q1syXTtJPSEhQ1szXTtNPUsuZ2V0 QW5jaG9yWFkoZSx0cnVlKTtMPWcuZ2V0QW5jaG9yWFkoYSxmYWxzZSk7bj1MWzBdLU1bMF0rQlsw XTtsPUxbMV0tTVsxXStCWzFdO2lmKEkpe3M9Sy5nZXRXaWR0aCgpO0Y9Sy5nZXRIZWlnaHQoKTt2 PWcuZ2V0UmVnaW9uKCk7Yj1lLmNoYXJBdCgwKTtpPWUuY2hhckF0KGUubGVuZ3RoLTEpO2o9YS5j aGFyQXQoMCk7az1hLmNoYXJBdChhLmxlbmd0aC0xKTt1PSgoYj09InQiJiZqPT0iYiIpfHwoYj09 ImIiJiZqPT0idCIpKTt6PSgoaT09InIiJiZrPT0ibCIpfHwoaT09ImwiJiZrPT0iciIpKTtpZihu K3M+dCtFKXtuPXo/di5sZWZ0LXM6dCtFLXN9aWYobjxFKXtuPXo/di5yaWdodDpFfWlmKGwrRj5H K0Qpe2w9dT92LnRvcC1GOkcrRC1GfWlmKGw8RCl7bD11P3YuYm90dG9tOkR9fXJldHVybltuLGxd fSxhbGlnblRvOmZ1bmN0aW9uKGMsYSxlLGIpe3ZhciBkPXRoaXM7cmV0dXJuIGQuc2V0WFkoZC5n ZXRBbGlnblRvWFkoYyxhLGUpLGQucHJlYW5pbSYmISFiP2QucHJlYW5pbShhcmd1bWVudHMsMyk6 ZmFsc2UpfSxhZGp1c3RGb3JDb25zdHJhaW50czpmdW5jdGlvbihjLGEsYil7cmV0dXJuIHRoaXMu Z2V0Q29uc3RyYWluVG9YWShhfHxkb2N1bWVudCxmYWxzZSxiLGMpfHxjfSxnZXRDb25zdHJhaW5U b1hZOmZ1bmN0aW9uKGIsYSxjLGUpe3ZhciBkPXt0b3A6MCxsZWZ0OjAsYm90dG9tOjAscmlnaHQ6 MH07cmV0dXJuIGZ1bmN0aW9uKGkseixrLG0pe2k9RXh0LmdldChpKTtrPWs/RXh0LmFwcGx5SWYo ayxkKTpkO3ZhciB2LEMsdT0wLHQ9MDtpZihpLmRvbT09ZG9jdW1lbnQuYm9keXx8aS5kb209PWRv Y3VtZW50KXt2PUV4dC5saWIuRG9tLmdldFZpZXdXaWR0aCgpO0M9RXh0LmxpYi5Eb20uZ2V0Vmll d0hlaWdodCgpfWVsc2V7dj1pLmRvbS5jbGllbnRXaWR0aDtDPWkuZG9tLmNsaWVudEhlaWdodDtp Zigheil7dmFyIHI9aS5nZXRYWSgpO3U9clswXTt0PXJbMV19fXZhciBxPWkuZ2V0U2Nyb2xsKCk7 dSs9ay5sZWZ0K3EubGVmdDt0Kz1rLnRvcCtxLnRvcDt2LT1rLnJpZ2h0O0MtPWsuYm90dG9tO3Zh ciBBPXUrdjt2YXIgZz10K0M7dmFyIGo9bXx8KCF6P3RoaXMuZ2V0WFkoKTpbdGhpcy5nZXRMZWZ0 KHRydWUpLHRoaXMuZ2V0VG9wKHRydWUpXSk7dmFyIG89alswXSxuPWpbMV07dmFyIHA9dGhpcy5k b20ub2Zmc2V0V2lkdGgsQj10aGlzLmRvbS5vZmZzZXRIZWlnaHQ7dmFyIGw9ZmFsc2U7aWYoKG8r cCk+QSl7bz1BLXA7bD10cnVlfWlmKChuK0IpPmcpe249Zy1CO2w9dHJ1ZX1pZihvPHUpe289dTts PXRydWV9aWYobjx0KXtuPXQ7bD10cnVlfXJldHVybiBsP1tvLG5dOmZhbHNlfX0oKSxnZXRDZW50 ZXJYWTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEFsaWduVG9YWShkb2N1bWVudCwiYy1jIil9 LGNlbnRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hbGlnblRvKGF8fGRvY3VtZW50LCJjLWMi KX19KTtFeHQuRWxlbWVudC5hZGRNZXRob2RzKGZ1bmN0aW9uKCl7dmFyIGQ9InBhcmVudE5vZGUi LGI9Im5leHRTaWJsaW5nIixjPSJwcmV2aW91c1NpYmxpbmciLGU9RXh0LkRvbVF1ZXJ5LGE9RXh0 LmdldDtyZXR1cm57ZmluZFBhcmVudDpmdW5jdGlvbihtLGwsaCl7dmFyIGo9dGhpcy5kb20sZz1k b2N1bWVudC5ib2R5LGs9MCxpO2lmKEV4dC5pc0dlY2tvJiZPYmplY3QucHJvdG90eXBlLnRvU3Ry aW5nLmNhbGwoaik9PSJbb2JqZWN0IFhVTEVsZW1lbnRdIil7cmV0dXJuIG51bGx9bD1sfHw1MDtp Zihpc05hTihsKSl7aT1FeHQuZ2V0RG9tKGwpO2w9TnVtYmVyLk1BWF9WQUxVRX13aGlsZShqJiZq Lm5vZGVUeXBlPT0xJiZrPGwmJmohPWcmJmohPWkpe2lmKGUuaXMoaixtKSl7cmV0dXJuIGg/YShq KTpqfWsrKztqPWoucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH0sZmluZFBhcmVudE5vZGU6ZnVuY3Rp b24oaixpLGcpe3ZhciBoPUV4dC5mbHkodGhpcy5kb20ucGFyZW50Tm9kZSwiX2ludGVybmFsIik7 cmV0dXJuIGg/aC5maW5kUGFyZW50KGosaSxnKTpudWxsfSx1cDpmdW5jdGlvbihoLGcpe3JldHVy biB0aGlzLmZpbmRQYXJlbnROb2RlKGgsZyx0cnVlKX0sc2VsZWN0OmZ1bmN0aW9uKGcsaCl7cmV0 dXJuIEV4dC5FbGVtZW50LnNlbGVjdChnLGgsdGhpcy5kb20pfSxxdWVyeTpmdW5jdGlvbihnLGgp e3JldHVybiBlLnNlbGVjdChnLHRoaXMuZG9tKX0sY2hpbGQ6ZnVuY3Rpb24oZyxoKXt2YXIgaT1l LnNlbGVjdE5vZGUoZyx0aGlzLmRvbSk7cmV0dXJuIGg/aTphKGkpfSxkb3duOmZ1bmN0aW9uKGcs aCl7dmFyIGk9ZS5zZWxlY3ROb2RlKCIgPiAiK2csdGhpcy5kb20pO3JldHVybiBoP2k6YShpKX0s cGFyZW50OmZ1bmN0aW9uKGcsaCl7cmV0dXJuIHRoaXMubWF0Y2hOb2RlKGQsZCxnLGgpfSxuZXh0 OmZ1bmN0aW9uKGcsaCl7cmV0dXJuIHRoaXMubWF0Y2hOb2RlKGIsYixnLGgpfSxwcmV2OmZ1bmN0 aW9uKGcsaCl7cmV0dXJuIHRoaXMubWF0Y2hOb2RlKGMsYyxnLGgpfSxmaXJzdDpmdW5jdGlvbihn LGgpe3JldHVybiB0aGlzLm1hdGNoTm9kZShiLCJmaXJzdENoaWxkIixnLGgpfSxsYXN0OmZ1bmN0 aW9uKGcsaCl7cmV0dXJuIHRoaXMubWF0Y2hOb2RlKGMsImxhc3RDaGlsZCIsZyxoKX0sbWF0Y2hO b2RlOmZ1bmN0aW9uKGgsayxnLGkpe3ZhciBqPXRoaXMuZG9tW2tdO3doaWxlKGope2lmKGoubm9k ZVR5cGU9PTEmJighZ3x8ZS5pcyhqLGcpKSl7cmV0dXJuICFpP2Eoaik6an1qPWpbaF19cmV0dXJu IG51bGx9fX0oKSk7RXh0LkVsZW1lbnQuYWRkTWV0aG9kcyhmdW5jdGlvbigpe3ZhciBkPUV4dC5n ZXREb20sYT1FeHQuZ2V0LGM9RXh0LkRvbUhlbHBlcixiPWZ1bmN0aW9uKGUpe3JldHVybihlLm5v ZGVUeXBlfHxlLmRvbXx8dHlwZW9mIGU9PSJzdHJpbmciKX07cmV0dXJue2FwcGVuZENoaWxkOmZ1 bmN0aW9uKGUpe3JldHVybiBhKGUpLmFwcGVuZFRvKHRoaXMpfSxhcHBlbmRUbzpmdW5jdGlvbihl KXtkKGUpLmFwcGVuZENoaWxkKHRoaXMuZG9tKTtyZXR1cm4gdGhpc30saW5zZXJ0QmVmb3JlOmZ1 bmN0aW9uKGUpeyhlPWQoZSkpLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuZG9tLGUpO3Jl dHVybiB0aGlzfSxpbnNlcnRBZnRlcjpmdW5jdGlvbihlKXsoZT1kKGUpKS5wYXJlbnROb2RlLmlu c2VydEJlZm9yZSh0aGlzLmRvbSxlLm5leHRTaWJsaW5nKTtyZXR1cm4gdGhpc30saW5zZXJ0Rmly c3Q6ZnVuY3Rpb24oZyxlKXtnPWd8fHt9O2lmKGIoZykpe2c9ZChnKTt0aGlzLmRvbS5pbnNlcnRC ZWZvcmUoZyx0aGlzLmRvbS5maXJzdENoaWxkKTtyZXR1cm4gIWU/YShnKTpnfWVsc2V7cmV0dXJu IHRoaXMuY3JlYXRlQ2hpbGQoZyx0aGlzLmRvbS5maXJzdENoaWxkLGUpfX0scmVwbGFjZTpmdW5j dGlvbihlKXtlPWEoZSk7dGhpcy5pbnNlcnRCZWZvcmUoZSk7ZS5yZW1vdmUoKTtyZXR1cm4gdGhp c30scmVwbGFjZVdpdGg6ZnVuY3Rpb24oZyl7dmFyIGg9dGhpcyxlPUV4dC5FbGVtZW50O2lmKGIo Zykpe2c9ZChnKTtoLmRvbS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLGguZG9tKX1lbHNle2c9 Yy5pbnNlcnRCZWZvcmUoaC5kb20sZyl9ZGVsZXRlIGUuY2FjaGVbaC5pZF07RXh0LnJlbW92ZU5v ZGUoaC5kb20pO2guaWQ9RXh0LmlkKGguZG9tPWcpO3JldHVybiBlLmNhY2hlW2guaWRdPWh9LGNy ZWF0ZUNoaWxkOmZ1bmN0aW9uKGcsZSxoKXtnPWd8fHt0YWc6ImRpdiJ9O3JldHVybiBlP2MuaW5z ZXJ0QmVmb3JlKGUsZyxoIT09dHJ1ZSk6Y1shdGhpcy5kb20uZmlyc3RDaGlsZD8ib3ZlcndyaXRl IjoiYXBwZW5kIl0odGhpcy5kb20sZyxoIT09dHJ1ZSl9LHdyYXA6ZnVuY3Rpb24oZSxnKXt2YXIg aD1jLmluc2VydEJlZm9yZSh0aGlzLmRvbSxlfHx7dGFnOiJkaXYifSwhZyk7aC5kb20/aC5kb20u YXBwZW5kQ2hpbGQodGhpcy5kb20pOmguYXBwZW5kQ2hpbGQodGhpcy5kb20pO3JldHVybiBofSxp bnNlcnRIdG1sOmZ1bmN0aW9uKGcsaCxlKXt2YXIgaT1jLmluc2VydEh0bWwoZyx0aGlzLmRvbSxo KTtyZXR1cm4gZT9FeHQuZ2V0KGkpOml9fX0oKSk7RXh0LmFwcGx5KEV4dC5FbGVtZW50LnByb3Rv dHlwZSxmdW5jdGlvbigpe3ZhciBjPUV4dC5nZXREb20sYT1FeHQuZ2V0LGI9RXh0LkRvbUhlbHBl cjtyZXR1cm57aW5zZXJ0U2libGluZzpmdW5jdGlvbihoLGUsZyl7dmFyIGk9dGhpcyxkO2lmKEV4 dC5pc0FycmF5KGgpKXtFeHQuZWFjaChoLGZ1bmN0aW9uKGope2Q9aS5pbnNlcnRTaWJsaW5nKGos ZSxnKX0pO3JldHVybiBkfWU9KGV8fCJiZWZvcmUiKS50b0xvd2VyQ2FzZSgpO2g9aHx8e307aWYo aC5ub2RlVHlwZXx8aC5kb20pe2Q9aS5kb20ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYyhoKSxl PT0iYmVmb3JlIj9pLmRvbTppLmRvbS5uZXh0U2libGluZyk7aWYoIWcpe2Q9YShkKX19ZWxzZXtp ZihlPT0iYWZ0ZXIiJiYhaS5kb20ubmV4dFNpYmxpbmcpe2Q9Yi5hcHBlbmQoaS5kb20ucGFyZW50 Tm9kZSxoLCFnKX1lbHNle2Q9YltlPT0iYWZ0ZXIiPyJpbnNlcnRBZnRlciI6Imluc2VydEJlZm9y ZSJdKGkuZG9tLGgsIWcpfX1yZXR1cm4gZH19fSgpKTtFeHQuRWxlbWVudC5hZGRNZXRob2RzKGZ1 bmN0aW9uKCl7dmFyIGg9e30seT0vKC1bYS16XSkvZ2ksYj17fSx0PWRvY3VtZW50LmRlZmF1bHRW aWV3LHY9RXh0LmlzSUU/InN0eWxlRmxvYXQiOiJjc3NGbG9hdCIsRD0vYWxwaGFcKG9wYWNpdHk9 KC4qKVwpL2ksbD0vXlxzK3xccyskL2csQj1FeHQuRWxlbWVudCxkPSJwYWRkaW5nIixjPSJtYXJn aW4iLHo9ImJvcmRlciIsdT0iLWxlZnQiLHI9Ii1yaWdodCIseD0iLXRvcCIsbz0iLWJvdHRvbSIs aj0iLXdpZHRoIixzPU1hdGgsQT0iaGlkZGVuIixlPSJpc0NsaXBwZWQiLGs9Im92ZXJmbG93Iixu PSJvdmVyZmxvdy14IixtPSJvdmVyZmxvdy15IixDPSJvcmlnaW5hbENsaXAiLGk9e2w6eit1K2os cjp6K3Iraix0OnoreCtqLGI6eitvK2p9LGc9e2w6ZCt1LHI6ZCtyLHQ6ZCt4LGI6ZCtvfSxhPXts OmMrdSxyOmMrcix0OmMreCxiOmMrb30sRT1FeHQuRWxlbWVudC5kYXRhO2Z1bmN0aW9uIHEoRixH KXtyZXR1cm4gRy5jaGFyQXQoMSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBwKEcsRil7dmFyIEg9 MDtFeHQuZWFjaChHLm1hdGNoKC9cdy9nKSxmdW5jdGlvbihJKXtpZihJPXBhcnNlSW50KHRoaXMu Z2V0U3R5bGUoRltJXSksMTApKXtIKz1zLmFicyhJKX19LHRoaXMpO3JldHVybiBIfWZ1bmN0aW9u IHcoRil7cmV0dXJuIGhbRl18fChoW0ZdPUY9PSJmbG9hdCI/djpGLnJlcGxhY2UoeSxxKSl9cmV0 dXJue2FkanVzdFdpZHRoOmZ1bmN0aW9uKEYpe3ZhciBHPXRoaXM7dmFyIEg9KHR5cGVvZiBGPT0i bnVtYmVyIik7aWYoSCYmRy5hdXRvQm94QWRqdXN0JiYhRy5pc0JvcmRlckJveCgpKXtGLT0oRy5n ZXRCb3JkZXJXaWR0aCgibHIiKStHLmdldFBhZGRpbmcoImxyIikpfXJldHVybihIJiZGPDApPzA6 Rn0sYWRqdXN0SGVpZ2h0OmZ1bmN0aW9uKEYpe3ZhciBHPXRoaXM7dmFyIEg9KHR5cGVvZiBGPT0i bnVtYmVyIik7aWYoSCYmRy5hdXRvQm94QWRqdXN0JiYhRy5pc0JvcmRlckJveCgpKXtGLT0oRy5n ZXRCb3JkZXJXaWR0aCgidGIiKStHLmdldFBhZGRpbmcoInRiIikpfXJldHVybihIJiZGPDApPzA6 Rn0sYWRkQ2xhc3M6ZnVuY3Rpb24oRil7dmFyIEc9dGhpcztFeHQuZWFjaChGLGZ1bmN0aW9uKEgp e0cuZG9tLmNsYXNzTmFtZSs9KCFHLmhhc0NsYXNzKEgpJiZIPyIgIitIOiIiKX0pO3JldHVybiBH fSxyYWRpb0NsYXNzOmZ1bmN0aW9uKEYpe0V4dC5lYWNoKHRoaXMuZG9tLnBhcmVudE5vZGUuY2hp bGROb2RlcyxmdW5jdGlvbihHKXtpZihHLm5vZGVUeXBlPT0xKXtFeHQuZmx5KEcsIl9pbnRlcm5h bCIpLnJlbW92ZUNsYXNzKEYpfX0pO3JldHVybiB0aGlzLmFkZENsYXNzKEYpfSxyZW1vdmVDbGFz czpmdW5jdGlvbihGKXt2YXIgRz10aGlzO2lmKEcuZG9tLmNsYXNzTmFtZSl7RXh0LmVhY2goRixm dW5jdGlvbihIKXtHLmRvbS5jbGFzc05hbWU9Ry5kb20uY2xhc3NOYW1lLnJlcGxhY2UoYltIXT1i W0hdfHxuZXcgUmVnRXhwKCIoPzpefFxccyspIitIKyIoPzpcXHMrfCQpIiwiZyIpLCIgIil9KX1y ZXR1cm4gR30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuaGFzQ2xhc3MoRik/ dGhpcy5yZW1vdmVDbGFzcyhGKTp0aGlzLmFkZENsYXNzKEYpfSxoYXNDbGFzczpmdW5jdGlvbihG KXtyZXR1cm4gRiYmKCIgIit0aGlzLmRvbS5jbGFzc05hbWUrIiAiKS5pbmRleE9mKCIgIitGKyIg IikhPS0xfSxyZXBsYWNlQ2xhc3M6ZnVuY3Rpb24oRyxGKXtyZXR1cm4gdGhpcy5yZW1vdmVDbGFz cyhHKS5hZGRDbGFzcyhGKX0saXNTdHlsZTpmdW5jdGlvbihGLEcpe3JldHVybiB0aGlzLmdldFN0 eWxlKEYpPT1HfSxnZXRTdHlsZTpmdW5jdGlvbigpe3JldHVybiB0JiZ0LmdldENvbXB1dGVkU3R5 bGU/ZnVuY3Rpb24oSSl7dmFyIEg9dGhpcy5kb20sRixHO2lmKEg9PWRvY3VtZW50KXtyZXR1cm4g bnVsbH1JPXcoSSk7cmV0dXJuKEY9SC5zdHlsZVtJXSk/RjooRz10LmdldENvbXB1dGVkU3R5bGUo SCwiIikpP0dbSV06bnVsbH06ZnVuY3Rpb24oSil7dmFyIEg9dGhpcy5kb20sRixHO2lmKEg9PWRv Y3VtZW50KXtyZXR1cm4gbnVsbH1pZihKPT0ib3BhY2l0eSIpe2lmKEguc3R5bGUuZmlsdGVyLm1h dGNoKXtpZihGPUguc3R5bGUuZmlsdGVyLm1hdGNoKEQpKXt2YXIgST1wYXJzZUZsb2F0KEZbMV0p O2lmKCFpc05hTihJKSl7cmV0dXJuIEk/SS8xMDA6MH19fXJldHVybiAxfUo9dyhKKTtyZXR1cm4g SC5zdHlsZVtKXXx8KChHPUguY3VycmVudFN0eWxlKT9HW0pdOm51bGwpfX0oKSxnZXRDb2xvcjpm dW5jdGlvbihGLEcsSyl7dmFyIEk9dGhpcy5nZXRTdHlsZShGKSxIPUt8fCIjIixKO2lmKCFJfHwv dHJhbnNwYXJlbnR8aW5oZXJpdC8udGVzdChJKSl7cmV0dXJuIEd9aWYoL15yLy50ZXN0KEkpKXtF eHQuZWFjaChJLnNsaWNlKDQsSS5sZW5ndGgtMSkuc3BsaXQoIiwiKSxmdW5jdGlvbihMKXtKPXBh cnNlSW50KEwsMTApO0grPShKPDE2PyIwIjoiIikrSi50b1N0cmluZygxNil9KX1lbHNle0k9SS5y ZXBsYWNlKCIjIiwiIik7SCs9SS5sZW5ndGg9PTM/SS5yZXBsYWNlKC9eKFx3KShcdykoXHcpJC8s IiQxJDEkMiQyJDMkMyIpOkl9cmV0dXJuKEgubGVuZ3RoPjU/SC50b0xvd2VyQ2FzZSgpOkcpfSxz ZXRTdHlsZTpmdW5jdGlvbihKLEkpe3ZhciBHLEgsRjtpZighRXh0LmlzT2JqZWN0KEopKXtHPXt9 O0dbSl09STtKPUd9Zm9yKEggaW4gSil7ST1KW0hdO0g9PSJvcGFjaXR5Ij90aGlzLnNldE9wYWNp dHkoSSk6dGhpcy5kb20uc3R5bGVbdyhIKV09SX1yZXR1cm4gdGhpc30sc2V0T3BhY2l0eTpmdW5j dGlvbihHLEYpe3ZhciBKPXRoaXMsSD1KLmRvbS5zdHlsZTtpZighRnx8IUouYW5pbSl7aWYoRXh0 LmlzSUUpe3ZhciBJPUc8MT8iYWxwaGEob3BhY2l0eT0iK0cqMTAwKyIpIjoiIixLPUguZmlsdGVy LnJlcGxhY2UoRCwiIikucmVwbGFjZShsLCIiKTtILnpvb209MTtILmZpbHRlcj1LKyhLLmxlbmd0 aD4wPyIgIjoiIikrSX1lbHNle0gub3BhY2l0eT1HfX1lbHNle0ouYW5pbSh7b3BhY2l0eTp7dG86 R319LEoucHJlYW5pbShhcmd1bWVudHMsMSksbnVsbCwwLjM1LCJlYXNlSW4iKX1yZXR1cm4gSn0s Y2xlYXJPcGFjaXR5OmZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5kb20uc3R5bGU7aWYoRXh0LmlzSUUp e2lmKCFFeHQuaXNFbXB0eShGLmZpbHRlcikpe0YuZmlsdGVyPUYuZmlsdGVyLnJlcGxhY2UoRCwi IikucmVwbGFjZShsLCIiKX19ZWxzZXtGLm9wYWNpdHk9RlsiLW1vei1vcGFjaXR5Il09RlsiLWto dG1sLW9wYWNpdHkiXT0iIn1yZXR1cm4gdGhpc30sZ2V0SGVpZ2h0OmZ1bmN0aW9uKEgpe3ZhciBH PXRoaXMsST1HLmRvbSxGPXMubWF4KEkub2Zmc2V0SGVpZ2h0LEkuY2xpZW50SGVpZ2h0KXx8MDtG PSFIP0Y6Ri1HLmdldEJvcmRlcldpZHRoKCJ0YiIpLUcuZ2V0UGFkZGluZygidGIiKTtyZXR1cm4g RjwwPzA6Rn0sZ2V0V2lkdGg6ZnVuY3Rpb24oRyl7dmFyIEg9dGhpcyxJPUguZG9tLEY9cy5tYXgo SS5vZmZzZXRXaWR0aCxJLmNsaWVudFdpZHRoKXx8MDtGPSFHP0Y6Ri1ILmdldEJvcmRlcldpZHRo KCJsciIpLUguZ2V0UGFkZGluZygibHIiKTtyZXR1cm4gRjwwPzA6Rn0sc2V0V2lkdGg6ZnVuY3Rp b24oRyxGKXt2YXIgSD10aGlzO0c9SC5hZGp1c3RXaWR0aChHKTshRnx8IUguYW5pbT9ILmRvbS5z dHlsZS53aWR0aD1ILmFkZFVuaXRzKEcpOkguYW5pbSh7d2lkdGg6e3RvOkd9fSxILnByZWFuaW0o YXJndW1lbnRzLDEpKTtyZXR1cm4gSH0sc2V0SGVpZ2h0OmZ1bmN0aW9uKEYsRyl7dmFyIEg9dGhp cztGPUguYWRqdXN0SGVpZ2h0KEYpOyFHfHwhSC5hbmltP0guZG9tLnN0eWxlLmhlaWdodD1ILmFk ZFVuaXRzKEYpOkguYW5pbSh7aGVpZ2h0Ont0bzpGfX0sSC5wcmVhbmltKGFyZ3VtZW50cywxKSk7 cmV0dXJuIEh9LGdldEJvcmRlcldpZHRoOmZ1bmN0aW9uKEYpe3JldHVybiBwLmNhbGwodGhpcyxG LGkpfSxnZXRQYWRkaW5nOmZ1bmN0aW9uKEYpe3JldHVybiBwLmNhbGwodGhpcyxGLGcpfSxjbGlw OmZ1bmN0aW9uKCl7dmFyIEY9dGhpcyxHPUYuZG9tO2lmKCFFKEcsZSkpe0UoRyxlLHRydWUpO0Uo RyxDLHtvOkYuZ2V0U3R5bGUoaykseDpGLmdldFN0eWxlKG4pLHk6Ri5nZXRTdHlsZShtKX0pO0Yu c2V0U3R5bGUoayxBKTtGLnNldFN0eWxlKG4sQSk7Ri5zZXRTdHlsZShtLEEpfXJldHVybiBGfSx1 bmNsaXA6ZnVuY3Rpb24oKXt2YXIgRj10aGlzLEg9Ri5kb207aWYoRShILGUpKXtFKEgsZSxmYWxz ZSk7dmFyIEc9RShILEMpO2lmKEcubyl7Ri5zZXRTdHlsZShrLEcubyl9aWYoRy54KXtGLnNldFN0 eWxlKG4sRy54KX1pZihHLnkpe0Yuc2V0U3R5bGUobSxHLnkpfX1yZXR1cm4gRn0sYWRkU3R5bGVz OnAsbWFyZ2luczphfX0oKSk7RXh0LkVsZW1lbnQuYm94TWFya3VwPSc8ZGl2IGNsYXNzPSJ7MH0t dGwiPjxkaXYgY2xhc3M9InswfS10ciI+PGRpdiBjbGFzcz0iezB9LXRjIj48L2Rpdj48L2Rpdj48 L2Rpdj48ZGl2IGNsYXNzPSJ7MH0tbWwiPjxkaXYgY2xhc3M9InswfS1tciI+PGRpdiBjbGFzcz0i ezB9LW1jIj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJ7MH0tYmwiPjxkaXYgY2xhc3M9 InswfS1iciI+PGRpdiBjbGFzcz0iezB9LWJjIj48L2Rpdj48L2Rpdj48L2Rpdj4nO0V4dC5FbGVt ZW50LmFkZE1ldGhvZHMoZnVuY3Rpb24oKXt2YXIgYT0iX2ludGVybmFsIjtyZXR1cm57YXBwbHlT dHlsZXM6ZnVuY3Rpb24oYil7RXh0LkRvbUhlbHBlci5hcHBseVN0eWxlcyh0aGlzLmRvbSxiKTty ZXR1cm4gdGhpc30sZ2V0U3R5bGVzOmZ1bmN0aW9uKCl7dmFyIGI9e307RXh0LmVhY2goYXJndW1l bnRzLGZ1bmN0aW9uKGMpe2JbY109dGhpcy5nZXRTdHlsZShjKX0sdGhpcyk7cmV0dXJuIGJ9LGdl dFN0eWxlU2l6ZTpmdW5jdGlvbigpe3ZhciBnPXRoaXMsYixlLGk9dGhpcy5kb20sYz1pLnN0eWxl O2lmKGMud2lkdGgmJmMud2lkdGghPSJhdXRvIil7Yj1wYXJzZUludChjLndpZHRoLDEwKTtpZihn LmlzQm9yZGVyQm94KCkpe2ItPWcuZ2V0RnJhbWVXaWR0aCgibHIiKX19aWYoYy5oZWlnaHQmJmMu aGVpZ2h0IT0iYXV0byIpe2U9cGFyc2VJbnQoYy5oZWlnaHQsMTApO2lmKGcuaXNCb3JkZXJCb3go KSl7ZS09Zy5nZXRGcmFtZVdpZHRoKCJ0YiIpfX1yZXR1cm57d2lkdGg6Ynx8Zy5nZXRXaWR0aCh0 cnVlKSxoZWlnaHQ6ZXx8Zy5nZXRIZWlnaHQodHJ1ZSl9fSxzZXRPdmVyZmxvdzpmdW5jdGlvbihi KXt2YXIgYz10aGlzLmRvbTtpZihiPT0iYXV0byImJkV4dC5pc01hYyYmRXh0LmlzR2Vja28yKXtj LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iOyhmdW5jdGlvbigpe2Muc3R5bGUub3ZlcmZsb3c9ImF1 dG8ifSkuZGVmZXIoMSl9ZWxzZXtjLnN0eWxlLm92ZXJmbG93PWJ9fSxib3hXcmFwOmZ1bmN0aW9u KGIpe2I9Ynx8IngtYm94Ijt2YXIgYz1FeHQuZ2V0KHRoaXMuaW5zZXJ0SHRtbCgiYmVmb3JlQmVn aW4iLCI8ZGl2IGNsYXNzPSciK2IrIic+IitTdHJpbmcuZm9ybWF0KEV4dC5FbGVtZW50LmJveE1h cmt1cCxiKSsiPC9kaXY+IikpO0V4dC5Eb21RdWVyeS5zZWxlY3ROb2RlKCIuIitiKyItbWMiLGMu ZG9tKS5hcHBlbmRDaGlsZCh0aGlzLmRvbSk7cmV0dXJuIGN9LHNldFNpemU6ZnVuY3Rpb24oZCxi LGMpe3ZhciBlPXRoaXM7aWYoRXh0LmlzT2JqZWN0KGQpKXtiPWQuaGVpZ2h0O2Q9ZC53aWR0aH1k PWUuYWRqdXN0V2lkdGgoZCk7Yj1lLmFkanVzdEhlaWdodChiKTtpZighY3x8IWUuYW5pbSl7ZS5k b20uc3R5bGUud2lkdGg9ZS5hZGRVbml0cyhkKTtlLmRvbS5zdHlsZS5oZWlnaHQ9ZS5hZGRVbml0 cyhiKX1lbHNle2UuYW5pbSh7d2lkdGg6e3RvOmR9LGhlaWdodDp7dG86Yn19LGUucHJlYW5pbShh cmd1bWVudHMsMikpfXJldHVybiBlfSxnZXRDb21wdXRlZEhlaWdodDpmdW5jdGlvbigpe3ZhciBj PXRoaXMsYj1NYXRoLm1heChjLmRvbS5vZmZzZXRIZWlnaHQsYy5kb20uY2xpZW50SGVpZ2h0KTtp ZighYil7Yj1wYXJzZUludChjLmdldFN0eWxlKCJoZWlnaHQiKSwxMCl8fDA7aWYoIWMuaXNCb3Jk ZXJCb3goKSl7Yis9Yy5nZXRGcmFtZVdpZHRoKCJ0YiIpfX1yZXR1cm4gYn0sZ2V0Q29tcHV0ZWRX aWR0aDpmdW5jdGlvbigpe3ZhciBiPU1hdGgubWF4KHRoaXMuZG9tLm9mZnNldFdpZHRoLHRoaXMu ZG9tLmNsaWVudFdpZHRoKTtpZighYil7Yj1wYXJzZUludCh0aGlzLmdldFN0eWxlKCJ3aWR0aCIp LDEwKXx8MDtpZighdGhpcy5pc0JvcmRlckJveCgpKXtiKz10aGlzLmdldEZyYW1lV2lkdGgoImxy Iil9fXJldHVybiBifSxnZXRGcmFtZVdpZHRoOmZ1bmN0aW9uKGMsYil7cmV0dXJuIGImJnRoaXMu aXNCb3JkZXJCb3goKT8wOih0aGlzLmdldFBhZGRpbmcoYykrdGhpcy5nZXRCb3JkZXJXaWR0aChj KSl9LGFkZENsYXNzT25PdmVyOmZ1bmN0aW9uKGIpe3RoaXMuaG92ZXIoZnVuY3Rpb24oKXtFeHQu Zmx5KHRoaXMsYSkuYWRkQ2xhc3MoYil9LGZ1bmN0aW9uKCl7RXh0LmZseSh0aGlzLGEpLnJlbW92 ZUNsYXNzKGIpfSk7cmV0dXJuIHRoaXN9LGFkZENsYXNzT25Gb2N1czpmdW5jdGlvbihiKXt0aGlz Lm9uKCJmb2N1cyIsZnVuY3Rpb24oKXtFeHQuZmx5KHRoaXMsYSkuYWRkQ2xhc3MoYil9LHRoaXMu ZG9tKTt0aGlzLm9uKCJibHVyIixmdW5jdGlvbigpe0V4dC5mbHkodGhpcyxhKS5yZW1vdmVDbGFz cyhiKX0sdGhpcy5kb20pO3JldHVybiB0aGlzfSxhZGRDbGFzc09uQ2xpY2s6ZnVuY3Rpb24oYil7 dmFyIGM9dGhpcy5kb207dGhpcy5vbigibW91c2Vkb3duIixmdW5jdGlvbigpe0V4dC5mbHkoYyxh KS5hZGRDbGFzcyhiKTt2YXIgZz1FeHQuZ2V0RG9jKCksZT1mdW5jdGlvbigpe0V4dC5mbHkoYyxh KS5yZW1vdmVDbGFzcyhiKTtnLnJlbW92ZUxpc3RlbmVyKCJtb3VzZXVwIixlKX07Zy5vbigibW91 c2V1cCIsZSl9KTtyZXR1cm4gdGhpc30sZ2V0Vmlld1NpemU6ZnVuY3Rpb24oKXt2YXIgZT1kb2N1 bWVudCxnPXRoaXMuZG9tLGM9RXh0LmxpYi5Eb20sYj0oZz09ZXx8Zz09ZS5ib2R5KTtyZXR1cm57 d2lkdGg6KGI/Yy5nZXRWaWV3V2lkdGgoKTpnLmNsaWVudFdpZHRoKSxoZWlnaHQ6KGI/Yy5nZXRW aWV3SGVpZ2h0KCk6Zy5jbGllbnRIZWlnaHQpfX0sZ2V0U2l6ZTpmdW5jdGlvbihiKXtyZXR1cm57 d2lkdGg6dGhpcy5nZXRXaWR0aChiKSxoZWlnaHQ6dGhpcy5nZXRIZWlnaHQoYil9fSxyZXBhaW50 OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5kb207dGhpcy5hZGRDbGFzcygieC1yZXBhaW50Iik7c2V0 VGltZW91dChmdW5jdGlvbigpe0V4dC5mbHkoYikucmVtb3ZlQ2xhc3MoIngtcmVwYWludCIpfSwx KTtyZXR1cm4gdGhpc30sdW5zZWxlY3RhYmxlOmZ1bmN0aW9uKCl7dGhpcy5kb20udW5zZWxlY3Rh YmxlPSJvbiI7cmV0dXJuIHRoaXMuc3dhbGxvd0V2ZW50KCJzZWxlY3RzdGFydCIsdHJ1ZSkuYXBw bHlTdHlsZXMoIi1tb3otdXNlci1zZWxlY3Q6bm9uZTsta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsi KS5hZGRDbGFzcygieC11bnNlbGVjdGFibGUiKX0sZ2V0TWFyZ2luczpmdW5jdGlvbihjKXt2YXIg ZD10aGlzLGIsZT17dDoidG9wIixsOiJsZWZ0IixyOiJyaWdodCIsYjoiYm90dG9tIn0sZz17fTtp ZighYyl7Zm9yKGIgaW4gZC5tYXJnaW5zKXtnW2VbYl1dPXBhcnNlSW50KGQuZ2V0U3R5bGUoZC5t YXJnaW5zW2JdKSwxMCl8fDB9cmV0dXJuIGd9ZWxzZXtyZXR1cm4gZC5hZGRTdHlsZXMuY2FsbChk LGMsZC5tYXJnaW5zKX19fX0oKSk7KGZ1bmN0aW9uKCl7dmFyIGE9RXh0LmxpYi5Eb20sYj0ibGVm dCIsZz0icmlnaHQiLGQ9InRvcCIsaT0iYm90dG9tIixoPSJwb3NpdGlvbiIsYz0ic3RhdGljIixl PSJyZWxhdGl2ZSIsaj0iYXV0byIsaz0iei1pbmRleCI7ZnVuY3Rpb24gbChuLG0sbyl7cmV0dXJu IHRoaXMucHJlYW5pbSYmISFtP3RoaXMucHJlYW5pbShuLG8pOmZhbHNlfUV4dC5FbGVtZW50LmFk ZE1ldGhvZHMoe2dldFg6ZnVuY3Rpb24oKXtyZXR1cm4gYS5nZXRYKHRoaXMuZG9tKX0sZ2V0WTpm dW5jdGlvbigpe3JldHVybiBhLmdldFkodGhpcy5kb20pfSxnZXRYWTpmdW5jdGlvbigpe3JldHVy biBhLmdldFhZKHRoaXMuZG9tKX0sZ2V0T2Zmc2V0c1RvOmZ1bmN0aW9uKG0pe3ZhciBwPXRoaXMu Z2V0WFkoKSxuPUV4dC5mbHkobSwiX2ludGVybmFsIikuZ2V0WFkoKTtyZXR1cm5bcFswXS1uWzBd LHBbMV0tblsxXV19LHNldFg6ZnVuY3Rpb24obSxuKXtyZXR1cm4gdGhpcy5zZXRYWShbbSx0aGlz LmdldFkoKV0sbC5jYWxsKHRoaXMsYXJndW1lbnRzLG4sMSkpfSxzZXRZOmZ1bmN0aW9uKG4sbSl7 cmV0dXJuIHRoaXMuc2V0WFkoW3RoaXMuZ2V0WCgpLG5dLGwuY2FsbCh0aGlzLGFyZ3VtZW50cyxt LDEpKX0sc2V0TGVmdDpmdW5jdGlvbihtKXt0aGlzLnNldFN0eWxlKGIsdGhpcy5hZGRVbml0cyht KSk7cmV0dXJuIHRoaXN9LHNldFRvcDpmdW5jdGlvbihtKXt0aGlzLnNldFN0eWxlKGQsdGhpcy5h ZGRVbml0cyhtKSk7cmV0dXJuIHRoaXN9LHNldFJpZ2h0OmZ1bmN0aW9uKG0pe3RoaXMuc2V0U3R5 bGUoZyx0aGlzLmFkZFVuaXRzKG0pKTtyZXR1cm4gdGhpc30sc2V0Qm90dG9tOmZ1bmN0aW9uKG0p e3RoaXMuc2V0U3R5bGUoaSx0aGlzLmFkZFVuaXRzKG0pKTtyZXR1cm4gdGhpc30sc2V0WFk6ZnVu Y3Rpb24obyxtKXt2YXIgbj10aGlzO2lmKCFtfHwhbi5hbmltKXthLnNldFhZKG4uZG9tLG8pfWVs c2V7bi5hbmltKHtwb2ludHM6e3RvOm99fSxuLnByZWFuaW0oYXJndW1lbnRzLDEpLCJtb3Rpb24i KX1yZXR1cm4gbn0sc2V0TG9jYXRpb246ZnVuY3Rpb24obSxvLG4pe3JldHVybiB0aGlzLnNldFhZ KFttLG9dLGwuY2FsbCh0aGlzLGFyZ3VtZW50cyxuLDIpKX0sbW92ZVRvOmZ1bmN0aW9uKG0sbyxu KXtyZXR1cm4gdGhpcy5zZXRYWShbbSxvXSxsLmNhbGwodGhpcyxhcmd1bWVudHMsbiwyKSl9LGdl dExlZnQ6ZnVuY3Rpb24obSl7cmV0dXJuICFtP3RoaXMuZ2V0WCgpOnBhcnNlSW50KHRoaXMuZ2V0 U3R5bGUoYiksMTApfHwwfSxnZXRSaWdodDpmdW5jdGlvbihtKXt2YXIgbj10aGlzO3JldHVybiAh bT9uLmdldFgoKStuLmdldFdpZHRoKCk6KG4uZ2V0TGVmdCh0cnVlKStuLmdldFdpZHRoKCkpfHww fSxnZXRUb3A6ZnVuY3Rpb24obSl7cmV0dXJuICFtP3RoaXMuZ2V0WSgpOnBhcnNlSW50KHRoaXMu Z2V0U3R5bGUoZCksMTApfHwwfSxnZXRCb3R0b206ZnVuY3Rpb24obSl7dmFyIG49dGhpcztyZXR1 cm4gIW0/bi5nZXRZKCkrbi5nZXRIZWlnaHQoKToobi5nZXRUb3AodHJ1ZSkrbi5nZXRIZWlnaHQo KSl8fDB9LHBvc2l0aW9uOmZ1bmN0aW9uKHEscCxtLG8pe3ZhciBuPXRoaXM7aWYoIXEmJm4uaXNT dHlsZShoLGMpKXtuLnNldFN0eWxlKGgsZSl9ZWxzZXtpZihxKXtuLnNldFN0eWxlKGgscSl9fWlm KHApe24uc2V0U3R5bGUoayxwKX1pZihtfHxvKXtuLnNldFhZKFttfHxmYWxzZSxvfHxmYWxzZV0p fX0sY2xlYXJQb3NpdGlvbmluZzpmdW5jdGlvbihtKXttPW18fCIiO3RoaXMuc2V0U3R5bGUoe2xl ZnQ6bSxyaWdodDptLHRvcDptLGJvdHRvbTptLCJ6LWluZGV4IjoiIixwb3NpdGlvbjpjfSk7cmV0 dXJuIHRoaXN9LGdldFBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dmFyIG09dGhpcy5nZXRTdHlsZShi KTt2YXIgbj10aGlzLmdldFN0eWxlKGQpO3JldHVybntwb3NpdGlvbjp0aGlzLmdldFN0eWxlKGgp LGxlZnQ6bSxyaWdodDptPyIiOnRoaXMuZ2V0U3R5bGUoZyksdG9wOm4sYm90dG9tOm4/IiI6dGhp cy5nZXRTdHlsZShpKSwiei1pbmRleCI6dGhpcy5nZXRTdHlsZShrKX19LHNldFBvc2l0aW9uaW5n OmZ1bmN0aW9uKG0pe3ZhciBvPXRoaXMsbj1vLmRvbS5zdHlsZTtvLnNldFN0eWxlKG0pO2lmKG0u cmlnaHQ9PWope24ucmlnaHQ9IiJ9aWYobS5ib3R0b209PWope24uYm90dG9tPSIifXJldHVybiBv fSx0cmFuc2xhdGVQb2ludHM6ZnVuY3Rpb24obSx1KXt1PWlzTmFOKG1bMV0pP3U6bVsxXTttPWlz TmFOKG1bMF0pP206bVswXTt2YXIgcT10aGlzLHI9cS5pc1N0eWxlKGgsZSkscz1xLmdldFhZKCks bj1wYXJzZUludChxLmdldFN0eWxlKGIpLDEwKSxwPXBhcnNlSW50KHEuZ2V0U3R5bGUoZCksMTAp O249IWlzTmFOKG4pP246KHI/MDpxLmRvbS5vZmZzZXRMZWZ0KTtwPSFpc05hTihwKT9wOihyPzA6 cS5kb20ub2Zmc2V0VG9wKTtyZXR1cm57bGVmdDoobS1zWzBdK24pLHRvcDoodS1zWzFdK3ApfX0s YW5pbVRlc3Q6bH0pfSkoKTtFeHQuRWxlbWVudC5hZGRNZXRob2RzKHtzZXRCb3g6ZnVuY3Rpb24o ZSxnLGIpe3ZhciBkPXRoaXMsYT1lLndpZHRoLGM9ZS5oZWlnaHQ7aWYoKGcmJiFkLmF1dG9Cb3hB ZGp1c3QpJiYhZC5pc0JvcmRlckJveCgpKXthLT0oZC5nZXRCb3JkZXJXaWR0aCgibHIiKStkLmdl dFBhZGRpbmcoImxyIikpO2MtPShkLmdldEJvcmRlcldpZHRoKCJ0YiIpK2QuZ2V0UGFkZGluZygi dGIiKSl9ZC5zZXRCb3VuZHMoZS54LGUueSxhLGMsZC5hbmltVGVzdC5jYWxsKGQsYXJndW1lbnRz LGIsMikpO3JldHVybiBkfSxnZXRCb3g6ZnVuY3Rpb24oaixwKXt2YXIgbT10aGlzLHYsZSxvLGQ9 bS5nZXRCb3JkZXJXaWR0aCxxPW0uZ2V0UGFkZGluZyxnLGEsdSxuO2lmKCFwKXt2PW0uZ2V0WFko KX1lbHNle2U9cGFyc2VJbnQobS5nZXRTdHlsZSgibGVmdCIpLDEwKXx8MDtvPXBhcnNlSW50KG0u Z2V0U3R5bGUoInRvcCIpLDEwKXx8MDt2PVtlLG9dfXZhciBjPW0uZG9tLHM9Yy5vZmZzZXRXaWR0 aCxpPWMub2Zmc2V0SGVpZ2h0LGs7aWYoIWope2s9e3g6dlswXSx5OnZbMV0sMDp2WzBdLDE6dlsx XSx3aWR0aDpzLGhlaWdodDppfX1lbHNle2c9ZC5jYWxsKG0sImwiKStxLmNhbGwobSwibCIpO2E9 ZC5jYWxsKG0sInIiKStxLmNhbGwobSwiciIpO3U9ZC5jYWxsKG0sInQiKStxLmNhbGwobSwidCIp O249ZC5jYWxsKG0sImIiKStxLmNhbGwobSwiYiIpO2s9e3g6dlswXStnLHk6dlsxXSt1LDA6dlsw XStnLDE6dlsxXSt1LHdpZHRoOnMtKGcrYSksaGVpZ2h0OmktKHUrbil9fWsucmlnaHQ9ay54K2su d2lkdGg7ay5ib3R0b209ay55K2suaGVpZ2h0O3JldHVybiBrfSxtb3ZlOmZ1bmN0aW9uKGosYixj KXt2YXIgZz10aGlzLG09Zy5nZXRYWSgpLGs9bVswXSxpPW1bMV0sZD1bay1iLGldLGw9W2srYixp XSxoPVtrLGktYl0sYT1bayxpK2JdLGU9e2w6ZCxsZWZ0OmQscjpsLHJpZ2h0OmwsdDpoLHRvcDpo LHVwOmgsYjphLGJvdHRvbTphLGRvd246YX07aj1qLnRvTG93ZXJDYXNlKCk7Zy5tb3ZlVG8oZVtq XVswXSxlW2pdWzFdLGcuYW5pbVRlc3QuY2FsbChnLGFyZ3VtZW50cyxjLDIpKX0sc2V0TGVmdFRv cDpmdW5jdGlvbihkLGMpe3ZhciBiPXRoaXMsYT1iLmRvbS5zdHlsZTthLmxlZnQ9Yi5hZGRVbml0 cyhkKTthLnRvcD1iLmFkZFVuaXRzKGMpO3JldHVybiBifSxnZXRSZWdpb246ZnVuY3Rpb24oKXty ZXR1cm4gRXh0LmxpYi5Eb20uZ2V0UmVnaW9uKHRoaXMuZG9tKX0sc2V0Qm91bmRzOmZ1bmN0aW9u KGIsZyxkLGEsYyl7dmFyIGU9dGhpcztpZighY3x8IWUuYW5pbSl7ZS5zZXRTaXplKGQsYSk7ZS5z ZXRMb2NhdGlvbihiLGcpfWVsc2V7ZS5hbmltKHtwb2ludHM6e3RvOltiLGddfSx3aWR0aDp7dG86 ZS5hZGp1c3RXaWR0aChkKX0saGVpZ2h0Ont0bzplLmFkanVzdEhlaWdodChhKX19LGUucHJlYW5p bShhcmd1bWVudHMsNCksIm1vdGlvbiIpfXJldHVybiBlfSxzZXRSZWdpb246ZnVuY3Rpb24oYixh KXtyZXR1cm4gdGhpcy5zZXRCb3VuZHMoYi5sZWZ0LGIudG9wLGIucmlnaHQtYi5sZWZ0LGIuYm90 dG9tLWIudG9wLHRoaXMuYW5pbVRlc3QuY2FsbCh0aGlzLGFyZ3VtZW50cyxhLDEpKX19KTtFeHQu RWxlbWVudC5hZGRNZXRob2RzKHtpc1Njcm9sbGFibGU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmRv bTtyZXR1cm4gYS5zY3JvbGxIZWlnaHQ+YS5jbGllbnRIZWlnaHR8fGEuc2Nyb2xsV2lkdGg+YS5j bGllbnRXaWR0aH0sc2Nyb2xsVG86ZnVuY3Rpb24oYSxiKXt0aGlzLmRvbVsic2Nyb2xsIisoL3Rv cC9pLnRlc3QoYSk/IlRvcCI6IkxlZnQiKV09YjtyZXR1cm4gdGhpc30sZ2V0U2Nyb2xsOmZ1bmN0 aW9uKCl7dmFyIGk9dGhpcy5kb20saD1kb2N1bWVudCxhPWguYm9keSxjPWguZG9jdW1lbnRFbGVt ZW50LGIsZyxlO2lmKGk9PWh8fGk9PWEpe2lmKEV4dC5pc0lFJiZFeHQuaXNTdHJpY3Qpe2I9Yy5z Y3JvbGxMZWZ0O2c9Yy5zY3JvbGxUb3B9ZWxzZXtiPXdpbmRvdy5wYWdlWE9mZnNldDtnPXdpbmRv dy5wYWdlWU9mZnNldH1lPXtsZWZ0OmJ8fChhP2Euc2Nyb2xsTGVmdDowKSx0b3A6Z3x8KGE/YS5z Y3JvbGxUb3A6MCl9fWVsc2V7ZT17bGVmdDppLnNjcm9sbExlZnQsdG9wOmkuc2Nyb2xsVG9wfX1y ZXR1cm4gZX19KTtFeHQuRWxlbWVudC5hZGRNZXRob2RzKHtzY3JvbGxUbzpmdW5jdGlvbihjLGUs Yil7dmFyIGE9L3RvcC9pLGg9InNjcm9sbCIrKGEudGVzdChjKT8iVG9wIjoiTGVmdCIpLGQ9dGhp cyxnPWQuZG9tO2lmKCFifHwhZC5hbmltKXtnW2hdPWV9ZWxzZXtkLmFuaW0oe3Njcm9sbDp7dG86 YS50ZXN0KGgpP1tnW2hdLGVdOltlLGdbaF1dfX0sZC5wcmVhbmltKGFyZ3VtZW50cywyKSwic2Ny b2xsIil9cmV0dXJuIGR9LHNjcm9sbEludG9WaWV3OmZ1bmN0aW9uKGUsaSl7dmFyIHA9RXh0Lmdl dERvbShlKXx8RXh0LmdldEJvZHkoKS5kb20saD10aGlzLmRvbSxnPXRoaXMuZ2V0T2Zmc2V0c1Rv KHApLGs9Z1swXStwLnNjcm9sbExlZnQsdT1nWzFdK3Auc2Nyb2xsVG9wLHE9dStoLm9mZnNldEhl aWdodCxkPWsraC5vZmZzZXRXaWR0aCxhPXAuY2xpZW50SGVpZ2h0LG09cGFyc2VJbnQocC5zY3Jv bGxUb3AsMTApLHM9cGFyc2VJbnQocC5zY3JvbGxMZWZ0LDEwKSxqPW0rYSxuPXMrcC5jbGllbnRX aWR0aDtpZihoLm9mZnNldEhlaWdodD5hfHx1PG0pe3Auc2Nyb2xsVG9wPXV9ZWxzZXtpZihxPmop e3Auc2Nyb2xsVG9wPXEtYX19cC5zY3JvbGxUb3A9cC5zY3JvbGxUb3A7aWYoaSE9PWZhbHNlKXtp ZihoLm9mZnNldFdpZHRoPnAuY2xpZW50V2lkdGh8fGs8cyl7cC5zY3JvbGxMZWZ0PWt9ZWxzZXtp ZihkPm4pe3Auc2Nyb2xsTGVmdD1kLXAuY2xpZW50V2lkdGh9fXAuc2Nyb2xsTGVmdD1wLnNjcm9s bExlZnR9cmV0dXJuIHRoaXN9LHNjcm9sbENoaWxkSW50b1ZpZXc6ZnVuY3Rpb24oYixhKXtFeHQu Zmx5KGIsIl9zY3JvbGxDaGlsZEludG9WaWV3Iikuc2Nyb2xsSW50b1ZpZXcodGhpcyxhKX0sc2Ny b2xsOmZ1bmN0aW9uKG0sYixkKXtpZighdGhpcy5pc1Njcm9sbGFibGUoKSl7cmV0dXJufXZhciBl PXRoaXMuZG9tLGc9ZS5zY3JvbGxMZWZ0LHA9ZS5zY3JvbGxUb3Asbj1lLnNjcm9sbFdpZHRoLGs9 ZS5zY3JvbGxIZWlnaHQsaT1lLmNsaWVudFdpZHRoLGE9ZS5jbGllbnRIZWlnaHQsYz1mYWxzZSxv LGo9e2w6TWF0aC5taW4oZytiLG4taSkscjpvPU1hdGgubWF4KGctYiwwKSx0Ok1hdGgubWF4KHAt YiwwKSxiOk1hdGgubWluKHArYixrLWEpfTtqLmQ9ai5iO2oudT1qLnQ7bT1tLnN1YnN0cigwLDEp O2lmKChvPWpbbV0pPi0xKXtjPXRydWU7dGhpcy5zY3JvbGxUbyhtPT0ibCJ8fG09PSJyIj8ibGVm dCI6InRvcCIsbyx0aGlzLnByZWFuaW0oYXJndW1lbnRzLDIpKX1yZXR1cm4gY319KTtFeHQuRWxl bWVudC5WSVNJQklMSVRZPTE7RXh0LkVsZW1lbnQuRElTUExBWT0yO0V4dC5FbGVtZW50LmFkZE1l dGhvZHMoZnVuY3Rpb24oKXt2YXIgaD0idmlzaWJpbGl0eSIsZD0iZGlzcGxheSIsYj0iaGlkZGVu IixqPSJub25lIixhPSJvcmlnaW5hbERpc3BsYXkiLGM9InZpc2liaWxpdHlNb2RlIixlPUV4dC5F bGVtZW50LkRJU1BMQVksZz1FeHQuRWxlbWVudC5kYXRhLGk9ZnVuY3Rpb24obSl7dmFyIGw9Zyht LGEpO2lmKGw9PT11bmRlZmluZWQpe2cobSxhLGw9IiIpfXJldHVybiBsfSxrPWZ1bmN0aW9uKG4p e3ZhciBsPWcobixjKTtpZihsPT09dW5kZWZpbmVkKXtnKG4sYyxsPTEpfXJldHVybiBsfTtyZXR1 cm57b3JpZ2luYWxEaXNwbGF5OiIiLHZpc2liaWxpdHlNb2RlOjEsc2V0VmlzaWJpbGl0eU1vZGU6 ZnVuY3Rpb24obCl7Zyh0aGlzLmRvbSxjLGwpO3JldHVybiB0aGlzfSxhbmltYXRlOmZ1bmN0aW9u KG0sbyxuLHAsbCl7dGhpcy5hbmltKG0se2R1cmF0aW9uOm8sY2FsbGJhY2s6bixlYXNpbmc6cH0s bCk7cmV0dXJuIHRoaXN9LGFuaW06ZnVuY3Rpb24obyxwLG0scixuLGwpe209bXx8InJ1biI7cD1w fHx7fTt2YXIgcT10aGlzLHM9RXh0LmxpYi5BbmltW21dKHEuZG9tLG8sKHAuZHVyYXRpb258fHIp fHwwLjM1LChwLmVhc2luZ3x8bil8fCJlYXNlT3V0IixmdW5jdGlvbigpe2lmKGwpe2wuY2FsbChx KX1pZihwLmNhbGxiYWNrKXtwLmNhbGxiYWNrLmNhbGwocC5zY29wZXx8cSxxLHApfX0scSk7cC5h bmltPXM7cmV0dXJuIHN9LHByZWFuaW06ZnVuY3Rpb24obCxtKXtyZXR1cm4gIWxbbV0/ZmFsc2U6 KEV4dC5pc09iamVjdChsW21dKT9sW21dOntkdXJhdGlvbjpsW20rMV0sY2FsbGJhY2s6bFttKzJd LGVhc2luZzpsW20rM119KX0saXNWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuICF0aGlzLmlzU3R5 bGUoaCxiKSYmIXRoaXMuaXNTdHlsZShkLGopfSxzZXRWaXNpYmxlOmZ1bmN0aW9uKHAsbSl7dmFy IG49dGhpcyxvPW4uZG9tLGw9ayh0aGlzLmRvbSk9PWU7aWYoIW18fCFuLmFuaW0pe2lmKGwpe24u c2V0RGlzcGxheWVkKHApfWVsc2V7bi5maXhEaXNwbGF5KCk7by5zdHlsZS52aXNpYmlsaXR5PXA/ InZpc2libGUiOmJ9fWVsc2V7aWYocCl7bi5zZXRPcGFjaXR5KDAuMDEpO24uc2V0VmlzaWJsZSh0 cnVlKX1uLmFuaW0oe29wYWNpdHk6e3RvOihwPzE6MCl9fSxuLnByZWFuaW0oYXJndW1lbnRzLDEp LG51bGwsMC4zNSwiZWFzZUluIixmdW5jdGlvbigpe2lmKCFwKXtvLnN0eWxlW2w/ZDpoXT0obCk/ ajpiO0V4dC5mbHkobykuc2V0T3BhY2l0eSgxKX19KX1yZXR1cm4gbn0sdG9nZ2xlOmZ1bmN0aW9u KGwpe3ZhciBtPXRoaXM7bS5zZXRWaXNpYmxlKCFtLmlzVmlzaWJsZSgpLG0ucHJlYW5pbShhcmd1 bWVudHMsMCkpO3JldHVybiBtfSxzZXREaXNwbGF5ZWQ6ZnVuY3Rpb24obCl7aWYodHlwZW9mIGw9 PSJib29sZWFuIil7bD1sP2kodGhpcy5kb20pOmp9dGhpcy5zZXRTdHlsZShkLGwpO3JldHVybiB0 aGlzfSxmaXhEaXNwbGF5OmZ1bmN0aW9uKCl7dmFyIGw9dGhpcztpZihsLmlzU3R5bGUoZCxqKSl7 bC5zZXRTdHlsZShoLGIpO2wuc2V0U3R5bGUoZCxpKHRoaXMuZG9tKSk7aWYobC5pc1N0eWxlKGQs aikpe2wuc2V0U3R5bGUoZCwiYmxvY2siKX19fSxoaWRlOmZ1bmN0aW9uKGwpe3RoaXMuc2V0Vmlz aWJsZShmYWxzZSx0aGlzLnByZWFuaW0oYXJndW1lbnRzLDApKTtyZXR1cm4gdGhpc30sc2hvdzpm dW5jdGlvbihsKXt0aGlzLnNldFZpc2libGUodHJ1ZSx0aGlzLnByZWFuaW0oYXJndW1lbnRzLDAp KTtyZXR1cm4gdGhpc319fSgpKTtFeHQuRWxlbWVudC5hZGRNZXRob2RzKGZ1bmN0aW9uKCl7dmFy IGQ9InZpc2liaWxpdHkiLGI9ImRpc3BsYXkiLGE9ImhpZGRlbiIsaD0ibm9uZSIsYz0ieC1tYXNr ZWQiLGc9IngtbWFza2VkLXJlbGF0aXZlIixlPUV4dC5FbGVtZW50LmRhdGE7cmV0dXJue2lzVmlz aWJsZTpmdW5jdGlvbihpKXt2YXIgaj0hdGhpcy5pc1N0eWxlKGQsYSkmJiF0aGlzLmlzU3R5bGUo YixoKSxrPXRoaXMuZG9tLnBhcmVudE5vZGU7aWYoaSE9PXRydWV8fCFqKXtyZXR1cm4gan13aGls ZShrJiYhL2JvZHkvaS50ZXN0KGsudGFnTmFtZSkpe2lmKCFFeHQuZmx5KGssIl9pc1Zpc2libGUi KS5pc1Zpc2libGUoKSl7cmV0dXJuIGZhbHNlfWs9ay5wYXJlbnROb2RlfXJldHVybiB0cnVlfSxp c0Rpc3BsYXllZDpmdW5jdGlvbigpe3JldHVybiAhdGhpcy5pc1N0eWxlKGIsaCl9LGVuYWJsZURp c3BsYXlNb2RlOmZ1bmN0aW9uKGkpe3RoaXMuc2V0VmlzaWJpbGl0eU1vZGUoRXh0LkVsZW1lbnQu RElTUExBWSk7aWYoIUV4dC5pc0VtcHR5KGkpKXtlKHRoaXMuZG9tLCJvcmlnaW5hbERpc3BsYXki LGkpfXJldHVybiB0aGlzfSxtYXNrOmZ1bmN0aW9uKGosbil7dmFyIHA9dGhpcyxsPXAuZG9tLG89 RXh0LkRvbUhlbHBlcixtPSJleHQtZWwtbWFzay1tc2ciLGkscTtpZihwLmdldFN0eWxlKCJwb3Np dGlvbiIpPT0ic3RhdGljIil7cC5hZGRDbGFzcyhnKX1pZigoaT1lKGwsIm1hc2tNc2ciKSkpe2ku cmVtb3ZlKCl9aWYoKGk9ZShsLCJtYXNrIikpKXtpLnJlbW92ZSgpfXE9by5hcHBlbmQobCx7Y2xz OiJleHQtZWwtbWFzayJ9LHRydWUpO2UobCwibWFzayIscSk7cC5hZGRDbGFzcyhjKTtxLnNldERp c3BsYXllZCh0cnVlKTtpZih0eXBlb2Ygaj09InN0cmluZyIpe3ZhciBrPW8uYXBwZW5kKGwse2Ns czptLGNuOnt0YWc6ImRpdiJ9fSx0cnVlKTtlKGwsIm1hc2tNc2ciLGspO2suZG9tLmNsYXNzTmFt ZT1uP20rIiAiK246bTtrLmRvbS5maXJzdENoaWxkLmlubmVySFRNTD1qO2suc2V0RGlzcGxheWVk KHRydWUpO2suY2VudGVyKHApfWlmKEV4dC5pc0lFJiYhKEV4dC5pc0lFNyYmRXh0LmlzU3RyaWN0 KSYmcC5nZXRTdHlsZSgiaGVpZ2h0Iik9PSJhdXRvIil7cS5zZXRTaXplKHVuZGVmaW5lZCxwLmdl dEhlaWdodCgpKX1yZXR1cm4gcX0sdW5tYXNrOmZ1bmN0aW9uKCl7dmFyIGs9dGhpcyxsPWsuZG9t LGk9ZShsLCJtYXNrIiksaj1lKGwsIm1hc2tNc2ciKTtpZihpKXtpZihqKXtqLnJlbW92ZSgpO2Uo bCwibWFza01zZyIsdW5kZWZpbmVkKX1pLnJlbW92ZSgpO2UobCwibWFzayIsdW5kZWZpbmVkKX1r LnJlbW92ZUNsYXNzKFtjLGddKX0saXNNYXNrZWQ6ZnVuY3Rpb24oKXt2YXIgaT1lKHRoaXMuZG9t LCJtYXNrIik7cmV0dXJuIGkmJmkuaXNWaXNpYmxlKCl9LGNyZWF0ZVNoaW06ZnVuY3Rpb24oKXt2 YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxqO2kuZnJhbWVCb3JkZXI9IjAi O2kuY2xhc3NOYW1lPSJleHQtc2hpbSI7aWYoRXh0LmlzSUUmJkV4dC5pc1NlY3VyZSl7aS5zcmM9 RXh0LlNTTF9TRUNVUkVfVVJMfWo9RXh0LmdldCh0aGlzLmRvbS5wYXJlbnROb2RlLmluc2VydEJl Zm9yZShpLHRoaXMuZG9tKSk7ai5hdXRvQm94QWRqdXN0PWZhbHNlO3JldHVybiBqfX19KCkpO0V4 dC5FbGVtZW50LmFkZE1ldGhvZHMoe2FkZEtleUxpc3RlbmVyOmZ1bmN0aW9uKGIsZCxjKXt2YXIg YTtpZighRXh0LmlzT2JqZWN0KGIpfHxFeHQuaXNBcnJheShiKSl7YT17a2V5OmIsZm46ZCxzY29w ZTpjfX1lbHNle2E9e2tleTpiLmtleSxzaGlmdDpiLnNoaWZ0LGN0cmw6Yi5jdHJsLGFsdDpiLmFs dCxmbjpkLHNjb3BlOmN9fXJldHVybiBuZXcgRXh0LktleU1hcCh0aGlzLGEpfSxhZGRLZXlNYXA6 ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBFeHQuS2V5TWFwKHRoaXMsYSl9fSk7KGZ1bmN0aW9uKCl7 dmFyIHk9bnVsbCxBPXVuZGVmaW5lZCxrPXRydWUsdD1mYWxzZSxqPSJzZXRYIixoPSJzZXRZIixh PSJzZXRYWSIsbj0ibGVmdCIsbD0iYm90dG9tIixzPSJ0b3AiLG09InJpZ2h0IixxPSJoZWlnaHQi LGc9IndpZHRoIixpPSJwb2ludHMiLHc9ImhpZGRlbiIsej0iYWJzb2x1dGUiLHU9InZpc2libGUi LGU9Im1vdGlvbiIsbz0icG9zaXRpb24iLHI9ImVhc2VPdXQiLGQ9bmV3IEV4dC5FbGVtZW50LkZs eXdlaWdodCgpLHY9e30seD1mdW5jdGlvbihCKXtyZXR1cm4gQnx8e319LHA9ZnVuY3Rpb24oQil7 ZC5kb209QjtkLmlkPUV4dC5pZChCKTtyZXR1cm4gZH0sYz1mdW5jdGlvbihCKXtpZighdltCXSl7 dltCXT1bXX1yZXR1cm4gdltCXX0sYj1mdW5jdGlvbihDLEIpe3ZbQ109Qn07RXh0LmVuYWJsZUZ4 PWs7RXh0LkZ4PXtzd2l0Y2hTdGF0ZW1lbnRzOmZ1bmN0aW9uKEMsRCxCKXtyZXR1cm4gRC5hcHBs eSh0aGlzLEJbQ10pfSxzbGlkZUluOmZ1bmN0aW9uKEgsRSl7RT14KEUpO3ZhciBKPXRoaXMsRz1K LmRvbSxNPUcuc3R5bGUsTyxCLEwsRCxDLE0sSSxOLEssRjtIPUh8fCJ0IjtKLnF1ZXVlRngoRSxm dW5jdGlvbigpe089cChHKS5nZXRYWSgpO3AoRykuZml4RGlzcGxheSgpO0I9cChHKS5nZXRGeFJl c3RvcmUoKTtMPXt4Ok9bMF0seTpPWzFdLDA6T1swXSwxOk9bMV0sd2lkdGg6Ry5vZmZzZXRXaWR0 aCxoZWlnaHQ6Ry5vZmZzZXRIZWlnaHR9O0wucmlnaHQ9TC54K0wud2lkdGg7TC5ib3R0b209TC55 K0wuaGVpZ2h0O3AoRykuc2V0V2lkdGgoTC53aWR0aCkuc2V0SGVpZ2h0KEwuaGVpZ2h0KTtEPXAo RykuZnhXcmFwKEIucG9zLEUsdyk7TS52aXNpYmlsaXR5PXU7TS5wb3NpdGlvbj16O2Z1bmN0aW9u IFAoKXtwKEcpLmZ4VW53cmFwKEQsQi5wb3MsRSk7TS53aWR0aD1CLndpZHRoO00uaGVpZ2h0PUIu aGVpZ2h0O3AoRykuYWZ0ZXJGeChFKX1OPXt0bzpbTC54LEwueV19O0s9e3RvOkwud2lkdGh9O0Y9 e3RvOkwuaGVpZ2h0fTtmdW5jdGlvbiBRKFUsUixWLFMsWCxaLGFjLGFiLGFhLFcsVCl7dmFyIFk9 e307cChVKS5zZXRXaWR0aChWKS5zZXRIZWlnaHQoUyk7aWYocChVKVtYXSl7cChVKVtYXShaKX1S W2FjXT1SW2FiXT0iMCI7aWYoYWEpe1kud2lkdGg9YWF9aWYoVyl7WS5oZWlnaHQ9V31pZihUKXtZ LnBvaW50cz1UfXJldHVybiBZfUk9cChHKS5zd2l0Y2hTdGF0ZW1lbnRzKEgudG9Mb3dlckNhc2Uo KSxRLHt0OltELE0sTC53aWR0aCwwLHkseSxuLGwseSxGLHldLGw6W0QsTSwwLEwuaGVpZ2h0LHks eSxtLHMsSyx5LHldLHI6W0QsTSxMLndpZHRoLEwuaGVpZ2h0LGosTC5yaWdodCxuLHMseSx5LE5d LGI6W0QsTSxMLndpZHRoLEwuaGVpZ2h0LGgsTC5ib3R0b20sbixzLHksRixOXSx0bDpbRCxNLDAs MCx5LHksbSxsLEssRixOXSxibDpbRCxNLDAsMCxoLEwueStMLmhlaWdodCxtLHMsSyxGLE5dLGJy OltELE0sMCwwLGEsW0wucmlnaHQsTC5ib3R0b21dLG4scyxLLEYsTl0sdHI6W0QsTSwwLDAsaixM LngrTC53aWR0aCxuLGwsSyxGLE5dfSk7TS52aXNpYmlsaXR5PXU7cChEKS5zaG93KCk7YXJndW1l bnRzLmNhbGxlZS5hbmltPXAoRCkuZnhhbmltKEksRSxlLDAuNSxyLFApfSk7cmV0dXJuIEp9LHNs aWRlT3V0OmZ1bmN0aW9uKEYsRCl7RD14KEQpO3ZhciBIPXRoaXMsRT1ILmRvbSxLPUUuc3R5bGUs TD1ILmdldFhZKCksQyxCLEksSixHPXt0bzowfTtGPUZ8fCJ0IjtILnF1ZXVlRngoRCxmdW5jdGlv bigpe0I9cChFKS5nZXRGeFJlc3RvcmUoKTtJPXt4OkxbMF0seTpMWzFdLDA6TFswXSwxOkxbMV0s d2lkdGg6RS5vZmZzZXRXaWR0aCxoZWlnaHQ6RS5vZmZzZXRIZWlnaHR9O0kucmlnaHQ9SS54K0ku d2lkdGg7SS5ib3R0b209SS55K0kuaGVpZ2h0O3AoRSkuc2V0V2lkdGgoSS53aWR0aCkuc2V0SGVp Z2h0KEkuaGVpZ2h0KTtDPXAoRSkuZnhXcmFwKEIucG9zLEQsdSk7Sy52aXNpYmlsaXR5PXU7Sy5w b3NpdGlvbj16O3AoQykuc2V0V2lkdGgoSS53aWR0aCkuc2V0SGVpZ2h0KEkuaGVpZ2h0KTtmdW5j dGlvbiBNKCl7RC51c2VEaXNwbGF5P3AoRSkuc2V0RGlzcGxheWVkKHQpOnAoRSkuaGlkZSgpO3Ao RSkuZnhVbndyYXAoQyxCLnBvcyxEKTtLLndpZHRoPUIud2lkdGg7Sy5oZWlnaHQ9Qi5oZWlnaHQ7 cChFKS5hZnRlckZ4KEQpfWZ1bmN0aW9uIE4oTyxXLFUsWCxTLFYsUixULFEpe3ZhciBQPXt9O09b V109T1tVXT0iMCI7UFtYXT1TO2lmKFYpe1BbVl09Un1pZihUKXtQW1RdPVF9cmV0dXJuIFB9Sj1w KEUpLnN3aXRjaFN0YXRlbWVudHMoRi50b0xvd2VyQ2FzZSgpLE4se3Q6W0ssbixsLHEsR10sbDpb SyxtLHMsZyxHXSxyOltLLG4scyxnLEcsaSx7dG86W0kucmlnaHQsSS55XX1dLGI6W0ssbixzLHEs RyxpLHt0bzpbSS54LEkuYm90dG9tXX1dLHRsOltLLG0sbCxnLEcscSxHXSxibDpbSyxtLHMsZyxH LHEsRyxpLHt0bzpbSS54LEkuYm90dG9tXX1dLGJyOltLLG4scyxnLEcscSxHLGkse3RvOltJLngr SS53aWR0aCxJLmJvdHRvbV19XSx0cjpbSyxuLGwsZyxHLHEsRyxpLHt0bzpbSS5yaWdodCxJLnld fV19KTthcmd1bWVudHMuY2FsbGVlLmFuaW09cChDKS5meGFuaW0oSixELGUsMC41LHIsTSl9KTty ZXR1cm4gSH0scHVmZjpmdW5jdGlvbihIKXtIPXgoSCk7dmFyIEY9dGhpcyxHPUYuZG9tLEM9Ry5z dHlsZSxELEIsRTtGLnF1ZXVlRngoSCxmdW5jdGlvbigpe0Q9cChHKS5nZXRXaWR0aCgpO0I9cChH KS5nZXRIZWlnaHQoKTtwKEcpLmNsZWFyT3BhY2l0eSgpO3AoRykuc2hvdygpO0U9cChHKS5nZXRG eFJlc3RvcmUoKTtmdW5jdGlvbiBJKCl7SC51c2VEaXNwbGF5P3AoRykuc2V0RGlzcGxheWVkKHQp OnAoRykuaGlkZSgpO3AoRykuY2xlYXJPcGFjaXR5KCk7cChHKS5zZXRQb3NpdGlvbmluZyhFLnBv cyk7Qy53aWR0aD1FLndpZHRoO0MuaGVpZ2h0PUUuaGVpZ2h0O0MuZm9udFNpemU9IiI7cChHKS5h ZnRlckZ4KEgpfWFyZ3VtZW50cy5jYWxsZWUuYW5pbT1wKEcpLmZ4YW5pbSh7d2lkdGg6e3RvOnAo RykuYWRqdXN0V2lkdGgoRCoyKX0saGVpZ2h0Ont0bzpwKEcpLmFkanVzdEhlaWdodChCKjIpfSxw b2ludHM6e2J5OlstRCowLjUsLUIqMC41XX0sb3BhY2l0eTp7dG86MH0sZm9udFNpemU6e3RvOjIw MCx1bml0OiIlIn19LEgsZSwwLjUscixJKX0pO3JldHVybiBGfSxzd2l0Y2hPZmY6ZnVuY3Rpb24o Ril7Rj14KEYpO3ZhciBEPXRoaXMsRT1ELmRvbSxCPUUuc3R5bGUsQztELnF1ZXVlRngoRixmdW5j dGlvbigpe3AoRSkuY2xlYXJPcGFjaXR5KCk7cChFKS5jbGlwKCk7Qz1wKEUpLmdldEZ4UmVzdG9y ZSgpO2Z1bmN0aW9uIEcoKXtGLnVzZURpc3BsYXk/cChFKS5zZXREaXNwbGF5ZWQodCk6cChFKS5o aWRlKCk7cChFKS5jbGVhck9wYWNpdHkoKTtwKEUpLnNldFBvc2l0aW9uaW5nKEMucG9zKTtCLndp ZHRoPUMud2lkdGg7Qi5oZWlnaHQ9Qy5oZWlnaHQ7cChFKS5hZnRlckZ4KEYpfXAoRSkuZnhhbmlt KHtvcGFjaXR5Ont0bzowLjN9fSx5LHksMC4xLHksZnVuY3Rpb24oKXtwKEUpLmNsZWFyT3BhY2l0 eSgpOyhmdW5jdGlvbigpe3AoRSkuZnhhbmltKHtoZWlnaHQ6e3RvOjF9LHBvaW50czp7Ynk6WzAs cChFKS5nZXRIZWlnaHQoKSowLjVdfX0sRixlLDAuMywiZWFzZUluIixHKX0pLmRlZmVyKDEwMCl9 KX0pO3JldHVybiBEfSxoaWdobGlnaHQ6ZnVuY3Rpb24oRCxIKXtIPXgoSCk7dmFyIEY9dGhpcyxH PUYuZG9tLEI9SC5hdHRyfHwiYmFja2dyb3VuZENvbG9yIixDPXt9LEU7Ri5xdWV1ZUZ4KEgsZnVu Y3Rpb24oKXtwKEcpLmNsZWFyT3BhY2l0eSgpO3AoRykuc2hvdygpO2Z1bmN0aW9uIEkoKXtHLnN0 eWxlW0JdPUU7cChHKS5hZnRlckZ4KEgpfUU9Ry5zdHlsZVtCXTtDW0JdPXtmcm9tOkR8fCJmZmZm OWMiLHRvOkguZW5kQ29sb3J8fHAoRykuZ2V0Q29sb3IoQil8fCJmZmZmZmYifTthcmd1bWVudHMu Y2FsbGVlLmFuaW09cChHKS5meGFuaW0oQyxILCJjb2xvciIsMSwiZWFzZUluIixJKX0pO3JldHVy biBGfSxmcmFtZTpmdW5jdGlvbihCLEUsSCl7SD14KEgpO3ZhciBEPXRoaXMsRz1ELmRvbSxDLEY7 RC5xdWV1ZUZ4KEgsZnVuY3Rpb24oKXtCPUJ8fCIjQzNEQUY5IjtpZihCLmxlbmd0aD09Nil7Qj0i IyIrQn1FPUV8fDE7cChHKS5zaG93KCk7dmFyIEw9cChHKS5nZXRYWSgpLEo9e3g6TFswXSx5Okxb MV0sMDpMWzBdLDE6TFsxXSx3aWR0aDpHLm9mZnNldFdpZHRoLGhlaWdodDpHLm9mZnNldEhlaWdo dH0sST1mdW5jdGlvbigpe0M9cChkb2N1bWVudC5ib2R5fHxkb2N1bWVudC5kb2N1bWVudEVsZW1l bnQpLmNyZWF0ZUNoaWxkKHtzdHlsZTp7dmlzYmlsaXR5OncscG9zaXRpb246eiwiei1pbmRleCI6 MzUwMDAsYm9yZGVyOiIwcHggc29saWQgIitCfX0pO3JldHVybiBDLnF1ZXVlRngoe30sSyl9O2Fy Z3VtZW50cy5jYWxsZWUuYW5pbT17aXNBbmltYXRlZDp0cnVlLHN0b3A6ZnVuY3Rpb24oKXtFPTA7 Qy5zdG9wRngoKX19O2Z1bmN0aW9uIEsoKXt2YXIgTT1FeHQuaXNCb3JkZXJCb3g/MjoxO0Y9Qy5h bmltKHt0b3A6e2Zyb206Si55LHRvOkoueS0yMH0sbGVmdDp7ZnJvbTpKLngsdG86Si54LTIwfSxi b3JkZXJXaWR0aDp7ZnJvbTowLHRvOjEwfSxvcGFjaXR5Ontmcm9tOjEsdG86MH0saGVpZ2h0Ontm cm9tOkouaGVpZ2h0LHRvOkouaGVpZ2h0KzIwKk19LHdpZHRoOntmcm9tOkoud2lkdGgsdG86Si53 aWR0aCsyMCpNfX0se2R1cmF0aW9uOkguZHVyYXRpb258fDEsY2FsbGJhY2s6ZnVuY3Rpb24oKXtD LnJlbW92ZSgpOy0tRT4wP0koKTpwKEcpLmFmdGVyRngoSCl9fSk7YXJndW1lbnRzLmNhbGxlZS5h bmltPXtpc0FuaW1hdGVkOnRydWUsc3RvcDpmdW5jdGlvbigpe0Yuc3RvcCgpfX19SSgpfSk7cmV0 dXJuIER9LHBhdXNlOmZ1bmN0aW9uKEQpe3ZhciBDPXRoaXMuZG9tLEI7dGhpcy5xdWV1ZUZ4KHt9 LGZ1bmN0aW9uKCl7Qj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cChDKS5hZnRlckZ4KHt9KX0sRCox MDAwKTthcmd1bWVudHMuY2FsbGVlLmFuaW09e2lzQW5pbWF0ZWQ6dHJ1ZSxzdG9wOmZ1bmN0aW9u KCl7Y2xlYXJUaW1lb3V0KEIpO3AoQykuYWZ0ZXJGeCh7fSl9fX0pO3JldHVybiB0aGlzfSxmYWRl SW46ZnVuY3Rpb24oRCl7RD14KEQpO3ZhciBCPXRoaXMsQz1CLmRvbSxFPUQuZW5kT3BhY2l0eXx8 MTtCLnF1ZXVlRngoRCxmdW5jdGlvbigpe3AoQykuc2V0T3BhY2l0eSgwKTtwKEMpLmZpeERpc3Bs YXkoKTtDLnN0eWxlLnZpc2liaWxpdHk9dTthcmd1bWVudHMuY2FsbGVlLmFuaW09cChDKS5meGFu aW0oe29wYWNpdHk6e3RvOkV9fSxELHksMC41LHIsZnVuY3Rpb24oKXtpZihFPT0xKXtwKEMpLmNs ZWFyT3BhY2l0eSgpfXAoQykuYWZ0ZXJGeChEKX0pfSk7cmV0dXJuIEJ9LGZhZGVPdXQ6ZnVuY3Rp b24oRSl7RT14KEUpO3ZhciBDPXRoaXMsRD1DLmRvbSxCPUQuc3R5bGUsRj1FLmVuZE9wYWNpdHl8 fDA7Qy5xdWV1ZUZ4KEUsZnVuY3Rpb24oKXthcmd1bWVudHMuY2FsbGVlLmFuaW09cChEKS5meGFu aW0oe29wYWNpdHk6e3RvOkZ9fSxFLHksMC41LHIsZnVuY3Rpb24oKXtpZihGPT0wKXtFeHQuRWxl bWVudC5kYXRhKEQsInZpc2liaWxpdHlNb2RlIik9PUV4dC5FbGVtZW50LkRJU1BMQVl8fEUudXNl RGlzcGxheT9CLmRpc3BsYXk9Im5vbmUiOkIudmlzaWJpbGl0eT13O3AoRCkuY2xlYXJPcGFjaXR5 KCl9cChEKS5hZnRlckZ4KEUpfSl9KTtyZXR1cm4gQ30sc2NhbGU6ZnVuY3Rpb24oQixDLEQpe3Ro aXMuc2hpZnQoRXh0LmFwcGx5KHt9LEQse3dpZHRoOkIsaGVpZ2h0OkN9KSk7cmV0dXJuIHRoaXN9 LHNoaWZ0OmZ1bmN0aW9uKEQpe0Q9eChEKTt2YXIgQz10aGlzLmRvbSxCPXt9O3RoaXMucXVldWVG eChELGZ1bmN0aW9uKCl7Zm9yKHZhciBFIGluIEQpe2lmKERbRV0hPUEpe0JbRV09e3RvOkRbRV19 fX1CLndpZHRoP0Iud2lkdGgudG89cChDKS5hZGp1c3RXaWR0aChELndpZHRoKTpCO0IuaGVpZ2h0 P0IuaGVpZ2h0LnRvPXAoQykuYWRqdXN0V2lkdGgoRC5oZWlnaHQpOkI7aWYoQi54fHxCLnl8fEIu eHkpe0IucG9pbnRzPUIueHl8fHt0bzpbQi54P0IueC50bzpwKEMpLmdldFgoKSxCLnk/Qi55LnRv OnAoQykuZ2V0WSgpXX19YXJndW1lbnRzLmNhbGxlZS5hbmltPXAoQykuZnhhbmltKEIsRCxlLDAu MzUscixmdW5jdGlvbigpe3AoQykuYWZ0ZXJGeChEKX0pfSk7cmV0dXJuIHRoaXN9LGdob3N0OmZ1 bmN0aW9uKEUsQyl7Qz14KEMpO3ZhciBHPXRoaXMsRD1HLmRvbSxKPUQuc3R5bGUsSD17b3BhY2l0 eTp7dG86MH0scG9pbnRzOnt9fSxLPUgucG9pbnRzLEIsSSxGO0U9RXx8ImIiO0cucXVldWVGeChD LGZ1bmN0aW9uKCl7Qj1wKEQpLmdldEZ4UmVzdG9yZSgpO0k9cChEKS5nZXRXaWR0aCgpO0Y9cChE KS5nZXRIZWlnaHQoKTtmdW5jdGlvbiBMKCl7Qy51c2VEaXNwbGF5P3AoRCkuc2V0RGlzcGxheWVk KHQpOnAoRCkuaGlkZSgpO3AoRCkuY2xlYXJPcGFjaXR5KCk7cChEKS5zZXRQb3NpdGlvbmluZyhC LnBvcyk7Si53aWR0aD1CLndpZHRoO0ouaGVpZ2h0PUIuaGVpZ2h0O3AoRCkuYWZ0ZXJGeChDKX1L LmJ5PXAoRCkuc3dpdGNoU3RhdGVtZW50cyhFLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24oTixNKXty ZXR1cm5bTixNXX0se3Q6WzAsLUZdLGw6Wy1JLDBdLHI6W0ksMF0sYjpbMCxGXSx0bDpbLUksLUZd LGJsOlstSSxGXSxicjpbSSxGXSx0cjpbSSwtRl19KTthcmd1bWVudHMuY2FsbGVlLmFuaW09cChE KS5meGFuaW0oSCxDLGUsMC41LHIsTCl9KTtyZXR1cm4gR30sc3luY0Z4OmZ1bmN0aW9uKCl7dmFy IEI9dGhpcztCLmZ4RGVmYXVsdHM9RXh0LmFwcGx5KEIuZnhEZWZhdWx0c3x8e30se2Jsb2NrOnQs Y29uY3VycmVudDprLHN0b3BGeDp0fSk7cmV0dXJuIEJ9LHNlcXVlbmNlRng6ZnVuY3Rpb24oKXt2 YXIgQj10aGlzO0IuZnhEZWZhdWx0cz1FeHQuYXBwbHkoQi5meERlZmF1bHRzfHx7fSx7YmxvY2s6 dCxjb25jdXJyZW50OnQsc3RvcEZ4OnR9KTtyZXR1cm4gQn0sbmV4dEZ4OmZ1bmN0aW9uKCl7dmFy IEI9Yyh0aGlzLmRvbS5pZClbMF07aWYoQil7Qi5jYWxsKHRoaXMpfX0saGFzQWN0aXZlRng6ZnVu Y3Rpb24oKXtyZXR1cm4gYyh0aGlzLmRvbS5pZClbMF19LHN0b3BGeDpmdW5jdGlvbihCKXt2YXIg Qz10aGlzLEU9Qy5kb20uaWQ7aWYoQy5oYXNBY3RpdmVGeCgpKXt2YXIgRD1jKEUpWzBdO2lmKEQm JkQuYW5pbSl7aWYoRC5hbmltLmlzQW5pbWF0ZWQpe2IoRSxbRF0pO0QuYW5pbS5zdG9wKEIhPT11 bmRlZmluZWQ/QjprKX1lbHNle2IoRSxbXSl9fX1yZXR1cm4gQ30sYmVmb3JlRng6ZnVuY3Rpb24o Qil7aWYodGhpcy5oYXNBY3RpdmVGeCgpJiYhQi5jb25jdXJyZW50KXtpZihCLnN0b3BGeCl7dGhp cy5zdG9wRngoKTtyZXR1cm4ga31yZXR1cm4gdH1yZXR1cm4ga30saGFzRnhCbG9jazpmdW5jdGlv bigpe3ZhciBCPWModGhpcy5kb20uaWQpO3JldHVybiBCJiZCWzBdJiZCWzBdLmJsb2NrfSxxdWV1 ZUZ4OmZ1bmN0aW9uKEUsQil7dmFyIEM9dGhpcztpZighQy5oYXNGeEJsb2NrKCkpe0V4dC5hcHBs eUlmKEUsQy5meERlZmF1bHRzKTtpZighRS5jb25jdXJyZW50KXt2YXIgRD1DLmJlZm9yZUZ4KEUp O0IuYmxvY2s9RS5ibG9jaztjKEMuZG9tLmlkKS5wdXNoKEIpO2lmKEQpe0MubmV4dEZ4KCl9fWVs c2V7Qi5jYWxsKEMpfX1yZXR1cm4gQ30sZnhXcmFwOmZ1bmN0aW9uKEgsRixEKXt2YXIgRT10aGlz LmRvbSxDLEI7aWYoIUYud3JhcHx8IShDPUV4dC5nZXREb20oRi53cmFwKSkpe2lmKEYuZml4UG9z aXRpb24pe0I9cChFKS5nZXRYWSgpfXZhciBHPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp O0cuc3R5bGUudmlzaWJpbGl0eT1EO0M9RS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShHLEUpO3Ao Qykuc2V0UG9zaXRpb25pbmcoSCk7aWYocChDKS5pc1N0eWxlKG8sInN0YXRpYyIpKXtwKEMpLnBv c2l0aW9uKCJyZWxhdGl2ZSIpfXAoRSkuY2xlYXJQb3NpdGlvbmluZygiYXV0byIpO3AoQykuY2xp cCgpO0MuYXBwZW5kQ2hpbGQoRSk7aWYoQil7cChDKS5zZXRYWShCKX19cmV0dXJuIEN9LGZ4VW53 cmFwOmZ1bmN0aW9uKEIsRSxEKXt2YXIgQz10aGlzLmRvbTtwKEMpLmNsZWFyUG9zaXRpb25pbmco KTtwKEMpLnNldFBvc2l0aW9uaW5nKEUpO2lmKCFELndyYXApe0IucGFyZW50Tm9kZS5pbnNlcnRC ZWZvcmUoQyxCKTtwKEIpLnJlbW92ZSgpfX0sZ2V0RnhSZXN0b3JlOmZ1bmN0aW9uKCl7dmFyIEI9 dGhpcy5kb20uc3R5bGU7cmV0dXJue3Bvczp0aGlzLmdldFBvc2l0aW9uaW5nKCksd2lkdGg6Qi53 aWR0aCxoZWlnaHQ6Qi5oZWlnaHR9fSxhZnRlckZ4OmZ1bmN0aW9uKEMpe3ZhciBCPXRoaXMuZG9t LEU9Qi5pZCxEPSFDLmNvbmN1cnJlbnQ7aWYoQy5hZnRlclN0eWxlKXtwKEIpLnNldFN0eWxlKEMu YWZ0ZXJTdHlsZSl9aWYoQy5hZnRlckNscyl7cChCKS5hZGRDbGFzcyhDLmFmdGVyQ2xzKX1pZihD LnJlbW92ZT09ayl7cChCKS5yZW1vdmUoKX1pZihEKXtjKEUpLnNoaWZ0KCl9aWYoQy5jYWxsYmFj ayl7Qy5jYWxsYmFjay5jYWxsKEMuc2NvcGUscChCKSl9aWYoRCl7cChCKS5uZXh0RngoKX19LGZ4 YW5pbTpmdW5jdGlvbihFLEYsQyxHLEQsQil7Qz1DfHwicnVuIjtGPUZ8fHt9O3ZhciBIPUV4dC5s aWIuQW5pbVtDXSh0aGlzLmRvbSxFLChGLmR1cmF0aW9ufHxHKXx8MC4zNSwoRi5lYXNpbmd8fEQp fHxyLEIsdGhpcyk7Ri5hbmltPUg7cmV0dXJuIEh9fTtFeHQuRngucmVzaXplPUV4dC5GeC5zY2Fs ZTtFeHQuRWxlbWVudC5hZGRNZXRob2RzKEV4dC5GeCl9KSgpO0V4dC5Db21wb3NpdGVFbGVtZW50 TGl0ZT1mdW5jdGlvbihiLGEpe3RoaXMuZWxlbWVudHM9W107dGhpcy5hZGQoYixhKTt0aGlzLmVs PW5ldyBFeHQuRWxlbWVudC5GbHl3ZWlnaHQoKX07RXh0LkNvbXBvc2l0ZUVsZW1lbnRMaXRlLnBy b3RvdHlwZT17aXNDb21wb3NpdGU6dHJ1ZSxnZXRDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlz LmVsZW1lbnRzLmxlbmd0aH0sYWRkOmZ1bmN0aW9uKGIpe2lmKGIpe2lmKEV4dC5pc0FycmF5KGIp KXt0aGlzLmVsZW1lbnRzPXRoaXMuZWxlbWVudHMuY29uY2F0KGIpfWVsc2V7dmFyIGE9dGhpcy5l bGVtZW50cztFeHQuZWFjaChiLGZ1bmN0aW9uKGMpe2EucHVzaChjKX0pfX1yZXR1cm4gdGhpc30s aW52b2tlOmZ1bmN0aW9uKGQsYSl7dmFyIGI9dGhpcy5lbGVtZW50cyxjPXRoaXMuZWw7RXh0LmVh Y2goYixmdW5jdGlvbihnKXtjLmRvbT1nO0V4dC5FbGVtZW50LnByb3RvdHlwZVtkXS5hcHBseShj LGEpfSk7cmV0dXJuIHRoaXN9LGl0ZW06ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZighYi5lbGVt ZW50c1thXSl7cmV0dXJuIG51bGx9Yi5lbC5kb209Yi5lbGVtZW50c1thXTtyZXR1cm4gYi5lbH0s YWRkTGlzdGVuZXI6ZnVuY3Rpb24oYSxkLGMsYil7RXh0LmVhY2godGhpcy5lbGVtZW50cyxmdW5j dGlvbihnKXtFeHQuRXZlbnRNYW5hZ2VyLm9uKGcsYSxkLGN8fGcsYil9KTtyZXR1cm4gdGhpc30s ZWFjaDpmdW5jdGlvbihjLGIpe3ZhciBkPXRoaXMsYT1kLmVsO0V4dC5lYWNoKGQuZWxlbWVudHMs ZnVuY3Rpb24oaCxnKXthLmRvbT1oO3JldHVybiBjLmNhbGwoYnx8YSxhLGQsZyl9KTtyZXR1cm4g ZH0saW5kZXhPZjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5pbmRleE9mKEV4dC5n ZXREb20oYSkpfSxyZXBsYWNlRWxlbWVudDpmdW5jdGlvbihlLGMsYSl7dmFyIGI9IWlzTmFOKGUp P2U6dGhpcy5pbmRleE9mKGUpLGc7aWYoYj4tMSl7Yz1FeHQuZ2V0RG9tKGMpO2lmKGEpe2c9dGhp cy5lbGVtZW50c1tiXTtnLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGMsZyk7RXh0LnJlbW92ZU5v ZGUoZyl9dGhpcy5lbGVtZW50cy5zcGxpY2UoYiwxLGMpfXJldHVybiB0aGlzfSxjbGVhcjpmdW5j dGlvbigpe3RoaXMuZWxlbWVudHM9W119fTtFeHQuQ29tcG9zaXRlRWxlbWVudExpdGUucHJvdG90 eXBlLm9uPUV4dC5Db21wb3NpdGVFbGVtZW50TGl0ZS5wcm90b3R5cGUuYWRkTGlzdGVuZXI7KGZ1 bmN0aW9uKCl7dmFyIGMsYj1FeHQuRWxlbWVudC5wcm90b3R5cGUsYT1FeHQuQ29tcG9zaXRlRWxl bWVudExpdGUucHJvdG90eXBlO2ZvcihjIGluIGIpe2lmKEV4dC5pc0Z1bmN0aW9uKGJbY10pKXso ZnVuY3Rpb24oZCl7YVtkXT1hW2RdfHxmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZShkLGFy Z3VtZW50cyl9fSkuY2FsbChhLGMpfX19KSgpO2lmKEV4dC5Eb21RdWVyeSl7RXh0LkVsZW1lbnQu c2VsZWN0b3JGdW5jdGlvbj1FeHQuRG9tUXVlcnkuc2VsZWN0fUV4dC5FbGVtZW50LnNlbGVjdD1m dW5jdGlvbihhLGQsYil7dmFyIGM7aWYodHlwZW9mIGE9PSJzdHJpbmciKXtjPUV4dC5FbGVtZW50 LnNlbGVjdG9yRnVuY3Rpb24oYSxiKX1lbHNle2lmKGEubGVuZ3RoIT09dW5kZWZpbmVkKXtjPWF9 ZWxzZXt0aHJvdyJJbnZhbGlkIHNlbGVjdG9yIn19cmV0dXJuIG5ldyBFeHQuQ29tcG9zaXRlRWxl bWVudExpdGUoYyl9O0V4dC5zZWxlY3Q9RXh0LkVsZW1lbnQuc2VsZWN0O0V4dC5hcHBseShFeHQu Q29tcG9zaXRlRWxlbWVudExpdGUucHJvdG90eXBlLHthZGRFbGVtZW50czpmdW5jdGlvbihjLGEp e2lmKCFjKXtyZXR1cm4gdGhpc31pZih0eXBlb2YgYz09InN0cmluZyIpe2M9RXh0LkVsZW1lbnQu c2VsZWN0b3JGdW5jdGlvbihjLGEpfXZhciBiPXRoaXMuZWxlbWVudHM7RXh0LmVhY2goYyxmdW5j dGlvbihkKXtiLnB1c2goRXh0LmdldChkKSl9KTtyZXR1cm4gdGhpc30sZmlsbDpmdW5jdGlvbihh KXt0aGlzLmVsZW1lbnRzPVtdO3RoaXMuYWRkKGEpO3JldHVybiB0aGlzfSxmaXJzdDpmdW5jdGlv bigpe3JldHVybiB0aGlzLml0ZW0oMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVt KHRoaXMuZ2V0Q291bnQoKS0xKX0sY29udGFpbnM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaW5k ZXhPZihhKSE9LTF9LGZpbHRlcjpmdW5jdGlvbihhKXt2YXIgYj1bXTt0aGlzLmVhY2goZnVuY3Rp b24oYyl7aWYoYy5pcyhhKSl7YltiLmxlbmd0aF09Yy5kb219fSk7dGhpcy5maWxsKGIpO3JldHVy biB0aGlzfSxyZW1vdmVFbGVtZW50OmZ1bmN0aW9uKGQsZSl7dmFyIGM9dGhpcyxhPXRoaXMuZWxl bWVudHMsYjtFeHQuZWFjaChkLGZ1bmN0aW9uKGcpe2lmKChiPShhW2ddfHxhW2c9Yy5pbmRleE9m KGcpXSkpKXtpZihlKXtpZihiLmRvbSl7Yi5yZW1vdmUoKX1lbHNle0V4dC5yZW1vdmVOb2RlKGIp fX1hLnNwbGljZShnLDEpfX0pO3JldHVybiB0aGlzfX0pO0V4dC5Db21wb3NpdGVFbGVtZW50PWZ1 bmN0aW9uKGIsYSl7dGhpcy5lbGVtZW50cz1bXTt0aGlzLmFkZChiLGEpfTtFeHQuZXh0ZW5kKEV4 dC5Db21wb3NpdGVFbGVtZW50LEV4dC5Db21wb3NpdGVFbGVtZW50TGl0ZSx7aW52b2tlOmZ1bmN0 aW9uKGIsYSl7RXh0LmVhY2godGhpcy5lbGVtZW50cyxmdW5jdGlvbihjKXtFeHQuRWxlbWVudC5w cm90b3R5cGVbYl0uYXBwbHkoYyxhKX0pO3JldHVybiB0aGlzfSxhZGQ6ZnVuY3Rpb24oYyxhKXtp ZighYyl7cmV0dXJuIHRoaXN9aWYodHlwZW9mIGM9PSJzdHJpbmciKXtjPUV4dC5FbGVtZW50LnNl bGVjdG9yRnVuY3Rpb24oYyxhKX12YXIgYj10aGlzLmVsZW1lbnRzO0V4dC5lYWNoKGMsZnVuY3Rp b24oZCl7Yi5wdXNoKEV4dC5nZXQoZCkpfSk7cmV0dXJuIHRoaXN9LGl0ZW06ZnVuY3Rpb24oYSl7 cmV0dXJuIHRoaXMuZWxlbWVudHNbYV18fG51bGx9LGluZGV4T2Y6ZnVuY3Rpb24oYSl7cmV0dXJu IHRoaXMuZWxlbWVudHMuaW5kZXhPZihFeHQuZ2V0KGEpKX0sZmlsdGVyOmZ1bmN0aW9uKGEpe3Zh ciBjPXRoaXMsYj1bXTtFeHQuZWFjaChjLmVsZW1lbnRzLGZ1bmN0aW9uKGQpe2lmKGQuaXMoYSkp e2IucHVzaChFeHQuZ2V0KGQpKX19KTtjLmVsZW1lbnRzPWI7cmV0dXJuIGN9LGVhY2g6ZnVuY3Rp b24oYixhKXtFeHQuZWFjaCh0aGlzLmVsZW1lbnRzLGZ1bmN0aW9uKGQsYyl7cmV0dXJuIGIuY2Fs bChhfHxkLGQsdGhpcyxjKX0sdGhpcyk7cmV0dXJuIHRoaXN9fSk7RXh0LkVsZW1lbnQuc2VsZWN0 PWZ1bmN0aW9uKGEsZCxiKXt2YXIgYztpZih0eXBlb2YgYT09InN0cmluZyIpe2M9RXh0LkVsZW1l bnQuc2VsZWN0b3JGdW5jdGlvbihhLGIpfWVsc2V7aWYoYS5sZW5ndGghPT11bmRlZmluZWQpe2M9 YX1lbHNle3Rocm93IkludmFsaWQgc2VsZWN0b3IifX1yZXR1cm4oZD09PXRydWUpP25ldyBFeHQu Q29tcG9zaXRlRWxlbWVudChjKTpuZXcgRXh0LkNvbXBvc2l0ZUVsZW1lbnRMaXRlKGMpfTtFeHQu c2VsZWN0PUV4dC5FbGVtZW50LnNlbGVjdDsoZnVuY3Rpb24oKXt2YXIgYz0iYmVmb3JlcmVxdWVz dCIsbD0icmVxdWVzdGNvbXBsZXRlIixrPSJyZXF1ZXN0ZXhjZXB0aW9uIixlPXVuZGVmaW5lZCxp PSJsb2FkIixoPSJQT1NUIixqPSJHRVQiLGc9d2luZG93O0V4dC5kYXRhLkNvbm5lY3Rpb249ZnVu Y3Rpb24obSl7RXh0LmFwcGx5KHRoaXMsbSk7dGhpcy5hZGRFdmVudHMoYyxsLGspO0V4dC5kYXRh LkNvbm5lY3Rpb24uc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpfTtmdW5jdGlvbiBi KG0pe3RoaXMudHJhbnNJZD1mYWxzZTt2YXIgbj1tLmFyZ3VtZW50Lm9wdGlvbnM7bS5hcmd1bWVu dD1uP24uYXJndW1lbnQ6bnVsbDt0aGlzLmZpcmVFdmVudChsLHRoaXMsbSxuKTtpZihuLnN1Y2Nl c3Mpe24uc3VjY2Vzcy5jYWxsKG4uc2NvcGUsbSxuKX1pZihuLmNhbGxiYWNrKXtuLmNhbGxiYWNr LmNhbGwobi5zY29wZSxuLHRydWUsbSl9fWZ1bmN0aW9uIGQobSxvKXt0aGlzLnRyYW5zSWQ9ZmFs c2U7dmFyIG49bS5hcmd1bWVudC5vcHRpb25zO20uYXJndW1lbnQ9bj9uLmFyZ3VtZW50Om51bGw7 dGhpcy5maXJlRXZlbnQoayx0aGlzLG0sbixvKTtpZihuLmZhaWx1cmUpe24uZmFpbHVyZS5jYWxs KG4uc2NvcGUsbSxuKX1pZihuLmNhbGxiYWNrKXtuLmNhbGxiYWNrLmNhbGwobi5zY29wZSxuLGZh bHNlLG0pfX1mdW5jdGlvbiBhKHQsbSxuKXt2YXIgcD1FeHQuaWQoKSx6PWRvY3VtZW50LHU9ei5j cmVhdGVFbGVtZW50KCJpZnJhbWUiKSxxPUV4dC5nZXREb20odC5mb3JtKSx5PVtdLHgscz0ibXVs dGlwYXJ0L2Zvcm0tZGF0YSIscj17dGFyZ2V0OnEudGFyZ2V0LG1ldGhvZDpxLm1ldGhvZCxlbmNv ZGluZzpxLmVuY29kaW5nLGVuY3R5cGU6cS5lbmN0eXBlLGFjdGlvbjpxLmFjdGlvbn07RXh0LmFw cGx5KHUse2lkOnAsbmFtZTpwLGNsYXNzTmFtZToieC1oaWRkZW4iLHNyYzpFeHQuU1NMX1NFQ1VS RV9VUkx9KTt6LmJvZHkuYXBwZW5kQ2hpbGQodSk7aWYoRXh0LmlzSUUpe2RvY3VtZW50LmZyYW1l c1twXS5uYW1lPXB9RXh0LmFwcGx5KHEse3RhcmdldDpwLG1ldGhvZDpoLGVuY3R5cGU6cyxlbmNv ZGluZzpzLGFjdGlvbjpufHxyLmFjdGlvbn0pO209RXh0LnVybERlY29kZShtLGZhbHNlKTtmb3Io dmFyIHcgaW4gbSl7aWYobS5oYXNPd25Qcm9wZXJ0eSh3KSl7eD16LmNyZWF0ZUVsZW1lbnQoImlu cHV0Iik7eC50eXBlPSJoaWRkZW4iO3gudmFsdWU9bVt4Lm5hbWU9d107cS5hcHBlbmRDaGlsZCh4 KTt5LnB1c2goeCl9fWZ1bmN0aW9uIHYoKXt2YXIgQj10aGlzLEE9e3Jlc3BvbnNlVGV4dDoiIixy ZXNwb25zZVhNTDpudWxsLGFyZ3VtZW50OnQuYXJndW1lbnR9LEUsRDt0cnl7RT11LmNvbnRlbnRX aW5kb3cuZG9jdW1lbnR8fHUuY29udGVudERvY3VtZW50fHxnLmZyYW1lc1twXS5kb2N1bWVudDtp ZihFKXtpZihFLmJvZHkpe2lmKC90ZXh0YXJlYS9pLnRlc3QoKEQ9RS5ib2R5LmZpcnN0Q2hpbGR8 fHt9KS50YWdOYW1lKSl7QS5yZXNwb25zZVRleHQ9RC52YWx1ZX1lbHNle0EucmVzcG9uc2VUZXh0 PUUuYm9keS5pbm5lckhUTUx9fUEucmVzcG9uc2VYTUw9RS5YTUxEb2N1bWVudHx8RX19Y2F0Y2go Qyl7fUV4dC5FdmVudE1hbmFnZXIucmVtb3ZlTGlzdGVuZXIodSxpLHYsQik7Qi5maXJlRXZlbnQo bCxCLEEsdCk7ZnVuY3Rpb24gbyhILEcsRil7aWYoRXh0LmlzRnVuY3Rpb24oSCkpe0guYXBwbHko RyxGKX19byh0LnN1Y2Nlc3MsdC5zY29wZSxbQSx0XSk7byh0LmNhbGxiYWNrLHQuc2NvcGUsW3Qs dHJ1ZSxBXSk7aWYoIUIuZGVidWdVcGxvYWRzKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7RXh0LnJl bW92ZU5vZGUodSl9LDEwMCl9fUV4dC5FdmVudE1hbmFnZXIub24odSxpLHYsdGhpcyk7cS5zdWJt aXQoKTtFeHQuYXBwbHkocSxyKTtFeHQuZWFjaCh5LGZ1bmN0aW9uKG8pe0V4dC5yZW1vdmVOb2Rl KG8pfSl9RXh0LmV4dGVuZChFeHQuZGF0YS5Db25uZWN0aW9uLEV4dC51dGlsLk9ic2VydmFibGUs e3RpbWVvdXQ6MzAwMDAsYXV0b0Fib3J0OmZhbHNlLGRpc2FibGVDYWNoaW5nOnRydWUsZGlzYWJs ZUNhY2hpbmdQYXJhbToiX2RjIixyZXF1ZXN0OmZ1bmN0aW9uKHMpe3ZhciB2PXRoaXM7aWYodi5m aXJlRXZlbnQoYyx2LHMpKXtpZihzLmVsKXtpZighRXh0LmlzRW1wdHkocy5pbmRpY2F0b3JUZXh0 KSl7di5pbmRpY2F0b3JUZXh0PSc8ZGl2IGNsYXNzPSJsb2FkaW5nLWluZGljYXRvciI+JytzLmlu ZGljYXRvclRleHQrIjwvZGl2PiJ9aWYodi5pbmRpY2F0b3JUZXh0KXtFeHQuZ2V0RG9tKHMuZWwp LmlubmVySFRNTD12LmluZGljYXRvclRleHR9cy5zdWNjZXNzPShFeHQuaXNGdW5jdGlvbihzLnN1 Y2Nlc3MpP3Muc3VjY2VzczpmdW5jdGlvbigpe30pLmNyZWF0ZUludGVyY2VwdG9yKGZ1bmN0aW9u KG8pe0V4dC5nZXREb20ocy5lbCkuaW5uZXJIVE1MPW8ucmVzcG9uc2VUZXh0fSl9dmFyIHE9cy5w YXJhbXMsbj1zLnVybHx8di51cmwsbSx0PXtzdWNjZXNzOmIsZmFpbHVyZTpkLHNjb3BlOnYsYXJn dW1lbnQ6e29wdGlvbnM6c30sdGltZW91dDpzLnRpbWVvdXR8fHYudGltZW91dH0scix3O2lmKEV4 dC5pc0Z1bmN0aW9uKHEpKXtxPXEuY2FsbChzLnNjb3BlfHxnLHMpfXE9RXh0LnVybEVuY29kZSh2 LmV4dHJhUGFyYW1zLEV4dC5pc09iamVjdChxKT9FeHQudXJsRW5jb2RlKHEpOnEpO2lmKEV4dC5p c0Z1bmN0aW9uKG4pKXtuPW4uY2FsbChzLnNjb3BlfHxnLHMpfWlmKChyPUV4dC5nZXREb20ocy5m b3JtKSkpe249bnx8ci5hY3Rpb247aWYocy5pc1VwbG9hZHx8L211bHRpcGFydFwvZm9ybS1kYXRh L2kudGVzdChyLmdldEF0dHJpYnV0ZSgiZW5jdHlwZSIpKSl7cmV0dXJuIGEuY2FsbCh2LHMscSxu KX13PUV4dC5saWIuQWpheC5zZXJpYWxpemVGb3JtKHIpO3E9cT8ocSsiJiIrdyk6d31tPXMubWV0 aG9kfHx2Lm1ldGhvZHx8KChxfHxzLnhtbERhdGF8fHMuanNvbkRhdGEpP2g6aik7aWYobT09PWom Jih2LmRpc2FibGVDYWNoaW5nJiZzLmRpc2FibGVDYWNoaW5nIT09ZmFsc2UpfHxzLmRpc2FibGVD YWNoaW5nPT09dHJ1ZSl7dmFyIHU9cy5kaXNhYmxlQ2FjaGluZ1BhcmFtfHx2LmRpc2FibGVDYWNo aW5nUGFyYW07bj1FeHQudXJsQXBwZW5kKG4sdSsiPSIrKG5ldyBEYXRlKCkuZ2V0VGltZSgpKSl9 cy5oZWFkZXJzPUV4dC5hcHBseShzLmhlYWRlcnN8fHt9LHYuZGVmYXVsdEhlYWRlcnN8fHt9KTtp ZihzLmF1dG9BYm9ydD09PXRydWV8fHYuYXV0b0Fib3J0KXt2LmFib3J0KCl9aWYoKG09PWp8fHMu eG1sRGF0YXx8cy5qc29uRGF0YSkmJnEpe249RXh0LnVybEFwcGVuZChuLHEpO3E9IiJ9cmV0dXJu KHYudHJhbnNJZD1FeHQubGliLkFqYXgucmVxdWVzdChtLG4sdCxxLHMpKX1lbHNle3JldHVybiBz LmNhbGxiYWNrP3MuY2FsbGJhY2suYXBwbHkocy5zY29wZSxbcyxlLGVdKTpudWxsfX0saXNMb2Fk aW5nOmZ1bmN0aW9uKG0pe3JldHVybiBtP0V4dC5saWIuQWpheC5pc0NhbGxJblByb2dyZXNzKG0p OiEhdGhpcy50cmFuc0lkfSxhYm9ydDpmdW5jdGlvbihtKXtpZihtfHx0aGlzLmlzTG9hZGluZygp KXtFeHQubGliLkFqYXguYWJvcnQobXx8dGhpcy50cmFuc0lkKX19fSl9KSgpO0V4dC5BamF4PW5l dyBFeHQuZGF0YS5Db25uZWN0aW9uKHthdXRvQWJvcnQ6ZmFsc2Usc2VyaWFsaXplRm9ybTpmdW5j dGlvbihhKXtyZXR1cm4gRXh0LmxpYi5BamF4LnNlcmlhbGl6ZUZvcm0oYSl9fSk7RXh0LlVwZGF0 ZU1hbmFnZXI9RXh0LlVwZGF0ZXI9RXh0LmV4dGVuZChFeHQudXRpbC5PYnNlcnZhYmxlLGZ1bmN0 aW9uKCl7dmFyIGI9ImJlZm9yZXVwZGF0ZSIsZD0idXBkYXRlIixjPSJmYWlsdXJlIjtmdW5jdGlv biBhKGgpe3ZhciBpPXRoaXM7aS50cmFuc2FjdGlvbj1udWxsO2lmKGguYXJndW1lbnQuZm9ybSYm aC5hcmd1bWVudC5yZXNldCl7dHJ5e2guYXJndW1lbnQuZm9ybS5yZXNldCgpfWNhdGNoKGope319 aWYoaS5sb2FkU2NyaXB0cyl7aS5yZW5kZXJlci5yZW5kZXIoaS5lbCxoLGksZy5jcmVhdGVEZWxl Z2F0ZShpLFtoXSkpfWVsc2V7aS5yZW5kZXJlci5yZW5kZXIoaS5lbCxoLGkpO2cuY2FsbChpLGgp fX1mdW5jdGlvbiBnKGgsaSxqKXt0aGlzLmZpcmVFdmVudChpfHxkLHRoaXMuZWwsaCk7aWYoRXh0 LmlzRnVuY3Rpb24oaC5hcmd1bWVudC5jYWxsYmFjaykpe2guYXJndW1lbnQuY2FsbGJhY2suY2Fs bChoLmFyZ3VtZW50LnNjb3BlLHRoaXMuZWwsRXh0LmlzRW1wdHkoaik/dHJ1ZTpmYWxzZSxoLGgu YXJndW1lbnQub3B0aW9ucyl9fWZ1bmN0aW9uIGUoaCl7Zy5jYWxsKHRoaXMsaCxjLCEhKHRoaXMu dHJhbnNhY3Rpb249bnVsbCkpfXJldHVybntjb25zdHJ1Y3RvcjpmdW5jdGlvbihpLGgpe3ZhciBq PXRoaXM7aT1FeHQuZ2V0KGkpO2lmKCFoJiZpLnVwZGF0ZU1hbmFnZXIpe3JldHVybiBpLnVwZGF0 ZU1hbmFnZXJ9ai5lbD1pO2ouZGVmYXVsdFVybD1udWxsO2ouYWRkRXZlbnRzKGIsZCxjKTtFeHQu YXBwbHkoaixFeHQuVXBkYXRlci5kZWZhdWx0cyk7ai50cmFuc2FjdGlvbj1udWxsO2oucmVmcmVz aERlbGVnYXRlPWoucmVmcmVzaC5jcmVhdGVEZWxlZ2F0ZShqKTtqLnVwZGF0ZURlbGVnYXRlPWou dXBkYXRlLmNyZWF0ZURlbGVnYXRlKGopO2ouZm9ybVVwZGF0ZURlbGVnYXRlPShqLmZvcm1VcGRh dGV8fGZ1bmN0aW9uKCl7fSkuY3JlYXRlRGVsZWdhdGUoaik7ai5yZW5kZXJlcj1qLnJlbmRlcmVy fHxqLmdldERlZmF1bHRSZW5kZXJlcigpO0V4dC5VcGRhdGVyLnN1cGVyY2xhc3MuY29uc3RydWN0 b3IuY2FsbChqKX0sc2V0UmVuZGVyZXI6ZnVuY3Rpb24oaCl7dGhpcy5yZW5kZXJlcj1ofSxnZXRS ZW5kZXJlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlcmVyfSxnZXREZWZhdWx0UmVuZGVy ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEV4dC5VcGRhdGVyLkJhc2ljUmVuZGVyZXIoKX0sc2V0 RGVmYXVsdFVybDpmdW5jdGlvbihoKXt0aGlzLmRlZmF1bHRVcmw9aH0sZ2V0RWw6ZnVuY3Rpb24o KXtyZXR1cm4gdGhpcy5lbH0sdXBkYXRlOmZ1bmN0aW9uKGksbixwLGwpe3ZhciBrPXRoaXMsaCxq O2lmKGsuZmlyZUV2ZW50KGIsay5lbCxpLG4pIT09ZmFsc2Upe2lmKEV4dC5pc09iamVjdChpKSl7 aD1pO2k9aC51cmw7bj1ufHxoLnBhcmFtcztwPXB8fGguY2FsbGJhY2s7bD1sfHxoLmRpc2NhcmRV cmw7aj1oLnNjb3BlO2lmKCFFeHQuaXNFbXB0eShoLm5vY2FjaGUpKXtrLmRpc2FibGVDYWNoaW5n PWgubm9jYWNoZX1pZighRXh0LmlzRW1wdHkoaC50ZXh0KSl7ay5pbmRpY2F0b3JUZXh0PSc8ZGl2 IGNsYXNzPSJsb2FkaW5nLWluZGljYXRvciI+JytoLnRleHQrIjwvZGl2PiJ9aWYoIUV4dC5pc0Vt cHR5KGguc2NyaXB0cykpe2subG9hZFNjcmlwdHM9aC5zY3JpcHRzfWlmKCFFeHQuaXNFbXB0eSho LnRpbWVvdXQpKXtrLnRpbWVvdXQ9aC50aW1lb3V0fX1rLnNob3dMb2FkaW5nKCk7aWYoIWwpe2su ZGVmYXVsdFVybD1pfWlmKEV4dC5pc0Z1bmN0aW9uKGkpKXtpPWkuY2FsbChrKX12YXIgbT1FeHQu YXBwbHkoe30se3VybDppLHBhcmFtczooRXh0LmlzRnVuY3Rpb24obikmJmopP24uY3JlYXRlRGVs ZWdhdGUoaik6bixzdWNjZXNzOmEsZmFpbHVyZTplLHNjb3BlOmssY2FsbGJhY2s6dW5kZWZpbmVk LHRpbWVvdXQ6KGsudGltZW91dCoxMDAwKSxkaXNhYmxlQ2FjaGluZzprLmRpc2FibGVDYWNoaW5n LGFyZ3VtZW50OntvcHRpb25zOmgsdXJsOmksZm9ybTpudWxsLGNhbGxiYWNrOnAsc2NvcGU6anx8 d2luZG93LHBhcmFtczpufX0saCk7ay50cmFuc2FjdGlvbj1FeHQuQWpheC5yZXF1ZXN0KG0pfX0s Zm9ybVVwZGF0ZTpmdW5jdGlvbihrLGgsaixsKXt2YXIgaT10aGlzO2lmKGkuZmlyZUV2ZW50KGIs aS5lbCxrLGgpIT09ZmFsc2Upe2lmKEV4dC5pc0Z1bmN0aW9uKGgpKXtoPWguY2FsbChpKX1rPUV4 dC5nZXREb20oayk7aS50cmFuc2FjdGlvbj1FeHQuQWpheC5yZXF1ZXN0KHtmb3JtOmssdXJsOmgs c3VjY2VzczphLGZhaWx1cmU6ZSxzY29wZTppLHRpbWVvdXQ6KGkudGltZW91dCoxMDAwKSxhcmd1 bWVudDp7dXJsOmgsZm9ybTprLGNhbGxiYWNrOmwscmVzZXQ6an19KTtpLnNob3dMb2FkaW5nLmRl ZmVyKDEsaSl9fSxzdGFydEF1dG9SZWZyZXNoOmZ1bmN0aW9uKGksaixsLG0saCl7dmFyIGs9dGhp cztpZihoKXtrLnVwZGF0ZShqfHxrLmRlZmF1bHRVcmwsbCxtLHRydWUpfWlmKGsuYXV0b1JlZnJl c2hQcm9jSWQpe2NsZWFySW50ZXJ2YWwoay5hdXRvUmVmcmVzaFByb2NJZCl9ay5hdXRvUmVmcmVz aFByb2NJZD1zZXRJbnRlcnZhbChrLnVwZGF0ZS5jcmVhdGVEZWxlZ2F0ZShrLFtqfHxrLmRlZmF1 bHRVcmwsbCxtLHRydWVdKSxpKjEwMDApfSxzdG9wQXV0b1JlZnJlc2g6ZnVuY3Rpb24oKXtpZih0 aGlzLmF1dG9SZWZyZXNoUHJvY0lkKXtjbGVhckludGVydmFsKHRoaXMuYXV0b1JlZnJlc2hQcm9j SWQpO2RlbGV0ZSB0aGlzLmF1dG9SZWZyZXNoUHJvY0lkfX0saXNBdXRvUmVmcmVzaGluZzpmdW5j dGlvbigpe3JldHVybiAhIXRoaXMuYXV0b1JlZnJlc2hQcm9jSWR9LHNob3dMb2FkaW5nOmZ1bmN0 aW9uKCl7aWYodGhpcy5zaG93TG9hZEluZGljYXRvcil7dGhpcy5lbC5kb20uaW5uZXJIVE1MPXRo aXMuaW5kaWNhdG9yVGV4dH19LGFib3J0OmZ1bmN0aW9uKCl7aWYodGhpcy50cmFuc2FjdGlvbil7 RXh0LkFqYXguYWJvcnQodGhpcy50cmFuc2FjdGlvbil9fSxpc1VwZGF0aW5nOmZ1bmN0aW9uKCl7 cmV0dXJuIHRoaXMudHJhbnNhY3Rpb24/RXh0LkFqYXguaXNMb2FkaW5nKHRoaXMudHJhbnNhY3Rp b24pOmZhbHNlfSxyZWZyZXNoOmZ1bmN0aW9uKGgpe2lmKHRoaXMuZGVmYXVsdFVybCl7dGhpcy51 cGRhdGUodGhpcy5kZWZhdWx0VXJsLG51bGwsaCx0cnVlKX19fX0oKSk7RXh0LlVwZGF0ZXIuZGVm YXVsdHM9e3RpbWVvdXQ6MzAsZGlzYWJsZUNhY2hpbmc6ZmFsc2Usc2hvd0xvYWRJbmRpY2F0b3I6 dHJ1ZSxpbmRpY2F0b3JUZXh0Oic8ZGl2IGNsYXNzPSJsb2FkaW5nLWluZGljYXRvciI+TG9hZGlu Zy4uLjwvZGl2PicsbG9hZFNjcmlwdHM6ZmFsc2Usc3NsQmxhbmtVcmw6KEV4dC5TU0xfU0VDVVJF X1VSTHx8ImphdmFzY3JpcHQ6ZmFsc2UiKX07RXh0LlVwZGF0ZXIudXBkYXRlRWxlbWVudD1mdW5j dGlvbihkLGMsZSxiKXt2YXIgYT1FeHQuZ2V0KGQpLmdldFVwZGF0ZXIoKTtFeHQuYXBwbHkoYSxi KTthLnVwZGF0ZShjLGUsYj9iLmNhbGxiYWNrOm51bGwpfTtFeHQuVXBkYXRlci5CYXNpY1JlbmRl cmVyPWZ1bmN0aW9uKCl7fTtFeHQuVXBkYXRlci5CYXNpY1JlbmRlcmVyLnByb3RvdHlwZT17cmVu ZGVyOmZ1bmN0aW9uKGMsYSxiLGQpe2MudXBkYXRlKGEucmVzcG9uc2VUZXh0LGIubG9hZFNjcmlw dHMsZCl9fTsoZnVuY3Rpb24oKXtEYXRlLnVzZVN0cmljdD1mYWxzZTtmdW5jdGlvbiBiKGQpe3Zh ciBjPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZC5yZXBs YWNlKC9ceyhcZCspXH0vZyxmdW5jdGlvbihlLGcpe3JldHVybiBjW2ddfSl9RGF0ZS5mb3JtYXRD b2RlVG9SZWdleD1mdW5jdGlvbihkLGMpe3ZhciBlPURhdGUucGFyc2VDb2Rlc1tkXTtpZihlKXtl PXR5cGVvZiBlPT0iZnVuY3Rpb24iP2UoKTplO0RhdGUucGFyc2VDb2Rlc1tkXT1lfXJldHVybiBl P0V4dC5hcHBseUlmKHtjOmUuYz9iKGUuYyxjfHwiezB9Iik6ZS5jfSxlKTp7ZzowLGM6bnVsbCxz OkV4dC5lc2NhcGVSZShkKX19O3ZhciBhPURhdGUuZm9ybWF0Q29kZVRvUmVnZXg7RXh0LmFwcGx5 KERhdGUse3BhcnNlRnVuY3Rpb25zOnsiTSQiOmZ1bmN0aW9uKGQsYyl7dmFyIGU9bmV3IFJlZ0V4 cCgiXFwvRGF0ZVxcKChbLStdKT8oXFxkKykoPzpbKy1dXFxkezR9KT9cXClcXC8iKTt2YXIgZz0o ZHx8IiIpLm1hdGNoKGUpO3JldHVybiBnP25ldyBEYXRlKCgoZ1sxXXx8IiIpK2dbMl0pKjEpOm51 bGx9fSxwYXJzZVJlZ2V4ZXM6W10sZm9ybWF0RnVuY3Rpb25zOnsiTSQiOmZ1bmN0aW9uKCl7cmV0 dXJuIlxcL0RhdGUoIit0aGlzLmdldFRpbWUoKSsiKVxcLyJ9fSx5MmtZZWFyOjUwLE1JTExJOiJt cyIsU0VDT05EOiJzIixNSU5VVEU6Im1pIixIT1VSOiJoIixEQVk6ImQiLE1PTlRIOiJtbyIsWUVB UjoieSIsZGVmYXVsdHM6e30sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5Iiwi V2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLG1vbnRoTmFtZXM6WyJK YW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJB dWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRo TnVtYmVyczp7SmFuOjAsRmViOjEsTWFyOjIsQXByOjMsTWF5OjQsSnVuOjUsSnVsOjYsQXVnOjcs U2VwOjgsT2N0OjksTm92OjEwLERlYzoxMX0sZ2V0U2hvcnRNb250aE5hbWU6ZnVuY3Rpb24oYyl7 cmV0dXJuIERhdGUubW9udGhOYW1lc1tjXS5zdWJzdHJpbmcoMCwzKX0sZ2V0U2hvcnREYXlOYW1l OmZ1bmN0aW9uKGMpe3JldHVybiBEYXRlLmRheU5hbWVzW2NdLnN1YnN0cmluZygwLDMpfSxnZXRN b250aE51bWJlcjpmdW5jdGlvbihjKXtyZXR1cm4gRGF0ZS5tb250aE51bWJlcnNbYy5zdWJzdHJp bmcoMCwxKS50b1VwcGVyQ2FzZSgpK2Muc3Vic3RyaW5nKDEsMykudG9Mb3dlckNhc2UoKV19LGZv cm1hdENvZGVzOntkOiJTdHJpbmcubGVmdFBhZCh0aGlzLmdldERhdGUoKSwgMiwgJzAnKSIsRDoi RGF0ZS5nZXRTaG9ydERheU5hbWUodGhpcy5nZXREYXkoKSkiLGo6InRoaXMuZ2V0RGF0ZSgpIixs OiJEYXRlLmRheU5hbWVzW3RoaXMuZ2V0RGF5KCldIixOOiIodGhpcy5nZXREYXkoKSA/IHRoaXMu Z2V0RGF5KCkgOiA3KSIsUzoidGhpcy5nZXRTdWZmaXgoKSIsdzoidGhpcy5nZXREYXkoKSIsejoi dGhpcy5nZXREYXlPZlllYXIoKSIsVzoiU3RyaW5nLmxlZnRQYWQodGhpcy5nZXRXZWVrT2ZZZWFy KCksIDIsICcwJykiLEY6IkRhdGUubW9udGhOYW1lc1t0aGlzLmdldE1vbnRoKCldIixtOiJTdHJp bmcubGVmdFBhZCh0aGlzLmdldE1vbnRoKCkgKyAxLCAyLCAnMCcpIixNOiJEYXRlLmdldFNob3J0 TW9udGhOYW1lKHRoaXMuZ2V0TW9udGgoKSkiLG46Iih0aGlzLmdldE1vbnRoKCkgKyAxKSIsdDoi dGhpcy5nZXREYXlzSW5Nb250aCgpIixMOiIodGhpcy5pc0xlYXBZZWFyKCkgPyAxIDogMCkiLG86 Iih0aGlzLmdldEZ1bGxZZWFyKCkgKyAodGhpcy5nZXRXZWVrT2ZZZWFyKCkgPT0gMSAmJiB0aGlz LmdldE1vbnRoKCkgPiAwID8gKzEgOiAodGhpcy5nZXRXZWVrT2ZZZWFyKCkgPj0gNTIgJiYgdGhp cy5nZXRNb250aCgpIDwgMTEgPyAtMSA6IDApKSkiLFk6InRoaXMuZ2V0RnVsbFllYXIoKSIseToi KCcnICsgdGhpcy5nZXRGdWxsWWVhcigpKS5zdWJzdHJpbmcoMiwgNCkiLGE6Iih0aGlzLmdldEhv dXJzKCkgPCAxMiA/ICdhbScgOiAncG0nKSIsQToiKHRoaXMuZ2V0SG91cnMoKSA8IDEyID8gJ0FN JyA6ICdQTScpIixnOiIoKHRoaXMuZ2V0SG91cnMoKSAlIDEyKSA/IHRoaXMuZ2V0SG91cnMoKSAl IDEyIDogMTIpIixHOiJ0aGlzLmdldEhvdXJzKCkiLGg6IlN0cmluZy5sZWZ0UGFkKCh0aGlzLmdl dEhvdXJzKCkgJSAxMikgPyB0aGlzLmdldEhvdXJzKCkgJSAxMiA6IDEyLCAyLCAnMCcpIixIOiJT dHJpbmcubGVmdFBhZCh0aGlzLmdldEhvdXJzKCksIDIsICcwJykiLGk6IlN0cmluZy5sZWZ0UGFk KHRoaXMuZ2V0TWludXRlcygpLCAyLCAnMCcpIixzOiJTdHJpbmcubGVmdFBhZCh0aGlzLmdldFNl Y29uZHMoKSwgMiwgJzAnKSIsdToiU3RyaW5nLmxlZnRQYWQodGhpcy5nZXRNaWxsaXNlY29uZHMo KSwgMywgJzAnKSIsTzoidGhpcy5nZXRHTVRPZmZzZXQoKSIsUDoidGhpcy5nZXRHTVRPZmZzZXQo dHJ1ZSkiLFQ6InRoaXMuZ2V0VGltZXpvbmUoKSIsWjoiKHRoaXMuZ2V0VGltZXpvbmVPZmZzZXQo KSAqIC02MCkiLGM6ZnVuY3Rpb24oKXtmb3IodmFyIGs9IlktbS1kVEg6aTpzUCIsaD1bXSxnPTAs ZD1rLmxlbmd0aDtnPGQ7KytnKXt2YXIgaj1rLmNoYXJBdChnKTtoLnB1c2goaj09IlQiPyInVCci OkRhdGUuZ2V0Rm9ybWF0Q29kZShqKSl9cmV0dXJuIGguam9pbigiICsgIil9LFU6Ik1hdGgucm91 bmQodGhpcy5nZXRUaW1lKCkgLyAxMDAwKSJ9LGlzVmFsaWQ6ZnVuY3Rpb24obyxjLG4sayxnLGos ZSl7az1rfHwwO2c9Z3x8MDtqPWp8fDA7ZT1lfHwwO3ZhciBsPW5ldyBEYXRlKG8sYy0xLG4sayxn LGosZSk7cmV0dXJuIG89PWwuZ2V0RnVsbFllYXIoKSYmYz09bC5nZXRNb250aCgpKzEmJm49PWwu Z2V0RGF0ZSgpJiZrPT1sLmdldEhvdXJzKCkmJmc9PWwuZ2V0TWludXRlcygpJiZqPT1sLmdldFNl Y29uZHMoKSYmZT09bC5nZXRNaWxsaXNlY29uZHMoKX0scGFyc2VEYXRlOmZ1bmN0aW9uKGQsZyxj KXt2YXIgZT1EYXRlLnBhcnNlRnVuY3Rpb25zO2lmKGVbZ109PW51bGwpe0RhdGUuY3JlYXRlUGFy c2VyKGcpfXJldHVybiBlW2ddKGQsRXh0LmlzRGVmaW5lZChjKT9jOkRhdGUudXNlU3RyaWN0KX0s Z2V0Rm9ybWF0Q29kZTpmdW5jdGlvbihkKXt2YXIgYz1EYXRlLmZvcm1hdENvZGVzW2RdO2lmKGMp e2M9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YygpOmM7RGF0ZS5mb3JtYXRDb2Rlc1tkXT1jfXJldHVy biBjfHwoIiciK1N0cmluZy5lc2NhcGUoZCkrIiciKX0sY3JlYXRlRm9ybWF0OmZ1bmN0aW9uKGgp e3ZhciBnPVtdLGM9ZmFsc2UsZT0iIjtmb3IodmFyIGQ9MDtkPGgubGVuZ3RoOysrZCl7ZT1oLmNo YXJBdChkKTtpZighYyYmZT09IlxcIil7Yz10cnVlfWVsc2V7aWYoYyl7Yz1mYWxzZTtnLnB1c2go IiciK1N0cmluZy5lc2NhcGUoZSkrIiciKX1lbHNle2cucHVzaChEYXRlLmdldEZvcm1hdENvZGUo ZSkpfX19RGF0ZS5mb3JtYXRGdW5jdGlvbnNbaF09bmV3IEZ1bmN0aW9uKCJyZXR1cm4gIitnLmpv aW4oIisiKSl9LGNyZWF0ZVBhcnNlcjpmdW5jdGlvbigpe3ZhciBjPVsidmFyIGR0LCB5LCBtLCBk LCBoLCBpLCBzLCBtcywgbywgeiwgenosIHUsIHYsIiwiZGVmID0gRGF0ZS5kZWZhdWx0cywiLCJy ZXN1bHRzID0gU3RyaW5nKGlucHV0KS5tYXRjaChEYXRlLnBhcnNlUmVnZXhlc1t7MH1dKTsiLCJp ZihyZXN1bHRzKXsiLCJ7MX0iLCJpZih1ICE9IG51bGwpeyIsInYgPSBuZXcgRGF0ZSh1ICogMTAw MCk7IiwifWVsc2V7IiwiZHQgPSAobmV3IERhdGUoKSkuY2xlYXJUaW1lKCk7IiwieSA9IHkgPj0g MD8geSA6IEV4dC5udW0oZGVmLnksIGR0LmdldEZ1bGxZZWFyKCkpOyIsIm0gPSBtID49IDA/IG0g OiBFeHQubnVtKGRlZi5tIC0gMSwgZHQuZ2V0TW9udGgoKSk7IiwiZCA9IGQgPj0gMD8gZCA6IEV4 dC5udW0oZGVmLmQsIGR0LmdldERhdGUoKSk7IiwiaCAgPSBoIHx8IEV4dC5udW0oZGVmLmgsIGR0 LmdldEhvdXJzKCkpOyIsImkgID0gaSB8fCBFeHQubnVtKGRlZi5pLCBkdC5nZXRNaW51dGVzKCkp OyIsInMgID0gcyB8fCBFeHQubnVtKGRlZi5zLCBkdC5nZXRTZWNvbmRzKCkpOyIsIm1zID0gbXMg fHwgRXh0Lm51bShkZWYubXMsIGR0LmdldE1pbGxpc2Vjb25kcygpKTsiLCJpZih6ID49IDAgJiYg eSA+PSAwKXsiLCJ2ID0gbmV3IERhdGUoeSwgMCwgMSwgaCwgaSwgcywgbXMpOyIsInYgPSAhc3Ry aWN0PyB2IDogKHN0cmljdCA9PT0gdHJ1ZSAmJiAoeiA8PSAzNjQgfHwgKHYuaXNMZWFwWWVhcigp ICYmIHogPD0gMzY1KSk/IHYuYWRkKERhdGUuREFZLCB6KSA6IG51bGwpOyIsIn1lbHNlIGlmKHN0 cmljdCA9PT0gdHJ1ZSAmJiAhRGF0ZS5pc1ZhbGlkKHksIG0gKyAxLCBkLCBoLCBpLCBzLCBtcykp eyIsInYgPSBudWxsOyIsIn1lbHNleyIsInYgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBpLCBzLCBt cyk7IiwifSIsIn0iLCJ9IiwiaWYodil7IiwiaWYoenogIT0gbnVsbCl7IiwidiA9IHYuYWRkKERh dGUuU0VDT05ELCAtdi5nZXRUaW1lem9uZU9mZnNldCgpICogNjAgLSB6eik7IiwifWVsc2UgaWYo byl7IiwidiA9IHYuYWRkKERhdGUuTUlOVVRFLCAtdi5nZXRUaW1lem9uZU9mZnNldCgpICsgKHNu ID09ICcrJz8gLTEgOiAxKSAqIChociAqIDYwICsgbW4pKTsiLCJ9IiwifSIsInJldHVybiB2OyJd LmpvaW4oIlxuIik7cmV0dXJuIGZ1bmN0aW9uKG0pe3ZhciBlPURhdGUucGFyc2VSZWdleGVzLmxl bmd0aCxuPTEsZz1bXSxsPVtdLGs9ZmFsc2UsZD0iIjtmb3IodmFyIGo9MDtqPG0ubGVuZ3RoOysr ail7ZD1tLmNoYXJBdChqKTtpZighayYmZD09IlxcIil7az10cnVlfWVsc2V7aWYoayl7az1mYWxz ZTtsLnB1c2goU3RyaW5nLmVzY2FwZShkKSl9ZWxzZXt2YXIgaD1hKGQsbik7bis9aC5nO2wucHVz aChoLnMpO2lmKGguZyYmaC5jKXtnLnB1c2goaC5jKX19fX1EYXRlLnBhcnNlUmVnZXhlc1tlXT1u ZXcgUmVnRXhwKCJeIitsLmpvaW4oIiIpKyIkIiwiaSIpO0RhdGUucGFyc2VGdW5jdGlvbnNbbV09 bmV3IEZ1bmN0aW9uKCJpbnB1dCIsInN0cmljdCIsYihjLGUsZy5qb2luKCIiKSkpfX0oKSxwYXJz ZUNvZGVzOntkOntnOjEsYzoiZCA9IHBhcnNlSW50KHJlc3VsdHNbezB9XSwgMTApO1xuIixzOiIo XFxkezJ9KSJ9LGo6e2c6MSxjOiJkID0gcGFyc2VJbnQocmVzdWx0c1t7MH1dLCAxMCk7XG4iLHM6 IihcXGR7MSwyfSkifSxEOmZ1bmN0aW9uKCl7Zm9yKHZhciBjPVtdLGQ9MDtkPDc7Yy5wdXNoKERh dGUuZ2V0U2hvcnREYXlOYW1lKGQpKSwrK2Qpe31yZXR1cm57ZzowLGM6bnVsbCxzOiIoPzoiK2Mu am9pbigifCIpKyIpIn19LGw6ZnVuY3Rpb24oKXtyZXR1cm57ZzowLGM6bnVsbCxzOiIoPzoiK0Rh dGUuZGF5TmFtZXMuam9pbigifCIpKyIpIn19LE46e2c6MCxjOm51bGwsczoiWzEtN10ifSxTOntn OjAsYzpudWxsLHM6Iig/OnN0fG5kfHJkfHRoKSJ9LHc6e2c6MCxjOm51bGwsczoiWzAtNl0ifSx6 OntnOjEsYzoieiA9IHBhcnNlSW50KHJlc3VsdHNbezB9XSwgMTApO1xuIixzOiIoXFxkezEsM30p In0sVzp7ZzowLGM6bnVsbCxzOiIoPzpcXGR7Mn0pIn0sRjpmdW5jdGlvbigpe3JldHVybntnOjEs YzoibSA9IHBhcnNlSW50KERhdGUuZ2V0TW9udGhOdW1iZXIocmVzdWx0c1t7MH1dKSwgMTApO1xu IixzOiIoIitEYXRlLm1vbnRoTmFtZXMuam9pbigifCIpKyIpIn19LE06ZnVuY3Rpb24oKXtmb3Io dmFyIGM9W10sZD0wO2Q8MTI7Yy5wdXNoKERhdGUuZ2V0U2hvcnRNb250aE5hbWUoZCkpLCsrZCl7 fXJldHVybiBFeHQuYXBwbHlJZih7czoiKCIrYy5qb2luKCJ8IikrIikifSxhKCJGIikpfSxtOntn OjEsYzoibSA9IHBhcnNlSW50KHJlc3VsdHNbezB9XSwgMTApIC0gMTtcbiIsczoiKFxcZHsyfSki fSxuOntnOjEsYzoibSA9IHBhcnNlSW50KHJlc3VsdHNbezB9XSwgMTApIC0gMTtcbiIsczoiKFxc ZHsxLDJ9KSJ9LHQ6e2c6MCxjOm51bGwsczoiKD86XFxkezJ9KSJ9LEw6e2c6MCxjOm51bGwsczoi KD86MXwwKSJ9LG86ZnVuY3Rpb24oKXtyZXR1cm4gYSgiWSIpfSxZOntnOjEsYzoieSA9IHBhcnNl SW50KHJlc3VsdHNbezB9XSwgMTApO1xuIixzOiIoXFxkezR9KSJ9LHk6e2c6MSxjOiJ2YXIgdHkg PSBwYXJzZUludChyZXN1bHRzW3swfV0sIDEwKTtcbnkgPSB0eSA+IERhdGUueTJrWWVhciA/IDE5 MDAgKyB0eSA6IDIwMDAgKyB0eTtcbiIsczoiKFxcZHsxLDJ9KSJ9LGE6e2c6MSxjOiJpZiAocmVz dWx0c1t7MH1dID09ICdhbScpIHtcbmlmIChoID09IDEyKSB7IGggPSAwOyB9XG59IGVsc2UgeyBp ZiAoaCA8IDEyKSB7IGggKz0gMTI7IH19IixzOiIoYW18cG0pIn0sQTp7ZzoxLGM6ImlmIChyZXN1 bHRzW3swfV0gPT0gJ0FNJykge1xuaWYgKGggPT0gMTIpIHsgaCA9IDA7IH1cbn0gZWxzZSB7IGlm IChoIDwgMTIpIHsgaCArPSAxMjsgfX0iLHM6IihBTXxQTSkifSxnOmZ1bmN0aW9uKCl7cmV0dXJu IGEoIkciKX0sRzp7ZzoxLGM6ImggPSBwYXJzZUludChyZXN1bHRzW3swfV0sIDEwKTtcbiIsczoi KFxcZHsxLDJ9KSJ9LGg6ZnVuY3Rpb24oKXtyZXR1cm4gYSgiSCIpfSxIOntnOjEsYzoiaCA9IHBh cnNlSW50KHJlc3VsdHNbezB9XSwgMTApO1xuIixzOiIoXFxkezJ9KSJ9LGk6e2c6MSxjOiJpID0g cGFyc2VJbnQocmVzdWx0c1t7MH1dLCAxMCk7XG4iLHM6IihcXGR7Mn0pIn0sczp7ZzoxLGM6InMg PSBwYXJzZUludChyZXN1bHRzW3swfV0sIDEwKTtcbiIsczoiKFxcZHsyfSkifSx1OntnOjEsYzoi bXMgPSByZXN1bHRzW3swfV07IG1zID0gcGFyc2VJbnQobXMsIDEwKS9NYXRoLnBvdygxMCwgbXMu bGVuZ3RoIC0gMyk7XG4iLHM6IihcXGQrKSJ9LE86e2c6MSxjOlsibyA9IHJlc3VsdHNbezB9XTsi LCJ2YXIgc24gPSBvLnN1YnN0cmluZygwLDEpLCIsImhyID0gby5zdWJzdHJpbmcoMSwzKSoxICsg TWF0aC5mbG9vcihvLnN1YnN0cmluZygzLDUpIC8gNjApLCIsIm1uID0gby5zdWJzdHJpbmcoMyw1 KSAlIDYwOyIsIm8gPSAoKC0xMiA8PSAoaHIqNjAgKyBtbikvNjApICYmICgoaHIqNjAgKyBtbikv NjAgPD0gMTQpKT8gKHNuICsgU3RyaW5nLmxlZnRQYWQoaHIsIDIsICcwJykgKyBTdHJpbmcubGVm dFBhZChtbiwgMiwgJzAnKSkgOiBudWxsO1xuIl0uam9pbigiXG4iKSxzOiIoWystXVxcZHs0fSki fSxQOntnOjEsYzpbIm8gPSByZXN1bHRzW3swfV07IiwidmFyIHNuID0gby5zdWJzdHJpbmcoMCwx KSwiLCJociA9IG8uc3Vic3RyaW5nKDEsMykqMSArIE1hdGguZmxvb3Ioby5zdWJzdHJpbmcoNCw2 KSAvIDYwKSwiLCJtbiA9IG8uc3Vic3RyaW5nKDQsNikgJSA2MDsiLCJvID0gKCgtMTIgPD0gKGhy KjYwICsgbW4pLzYwKSAmJiAoKGhyKjYwICsgbW4pLzYwIDw9IDE0KSk/IChzbiArIFN0cmluZy5s ZWZ0UGFkKGhyLCAyLCAnMCcpICsgU3RyaW5nLmxlZnRQYWQobW4sIDIsICcwJykpIDogbnVsbDtc biJdLmpvaW4oIlxuIiksczoiKFsrLV1cXGR7Mn06XFxkezJ9KSJ9LFQ6e2c6MCxjOm51bGwsczoi W0EtWl17MSw0fSJ9LFo6e2c6MSxjOiJ6eiA9IHJlc3VsdHNbezB9XSAqIDE7XG56eiA9ICgtNDMy MDAgPD0genogJiYgenogPD0gNTA0MDApPyB6eiA6IG51bGw7XG4iLHM6IihbKy1dP1xcZHsxLDV9 KSJ9LGM6ZnVuY3Rpb24oKXt2YXIgZT1bXSxjPVthKCJZIiwxKSxhKCJtIiwyKSxhKCJkIiwzKSxh KCJoIiw0KSxhKCJpIiw1KSxhKCJzIiw2KSx7YzoibXMgPSByZXN1bHRzWzddIHx8ICcwJzsgbXMg PSBwYXJzZUludChtcywgMTApL01hdGgucG93KDEwLCBtcy5sZW5ndGggLSAzKTtcbiJ9LHtjOlsi aWYocmVzdWx0c1s4XSkgeyIsImlmKHJlc3VsdHNbOF0gPT0gJ1onKXsiLCJ6eiA9IDA7IiwifWVs c2UgaWYgKHJlc3VsdHNbOF0uaW5kZXhPZignOicpID4gLTEpeyIsYSgiUCIsOCkuYywifWVsc2V7 IixhKCJPIiw4KS5jLCJ9IiwifSJdLmpvaW4oIlxuIil9XTtmb3IodmFyIGc9MCxkPWMubGVuZ3Ro O2c8ZDsrK2cpe2UucHVzaChjW2ddLmMpfXJldHVybntnOjEsYzplLmpvaW4oIiIpLHM6W2NbMF0u cywiKD86IiwiLSIsY1sxXS5zLCIoPzoiLCItIixjWzJdLnMsIig/OiIsIig/OlR8ICk/IixjWzNd LnMsIjoiLGNbNF0ucywiKD86OiIsY1s1XS5zLCIpPyIsIig/Oig/OlxcLnwsKShcXGQrKSk/Iiwi KFp8KD86Wy0rXVxcZHsyfSg/OjopP1xcZHsyfSkpPyIsIik/IiwiKT8iLCIpPyJdLmpvaW4oIiIp fX0sVTp7ZzoxLGM6InUgPSBwYXJzZUludChyZXN1bHRzW3swfV0sIDEwKTtcbiIsczoiKC0/XFxk KykifX19KX0oKSk7RXh0LmFwcGx5KERhdGUucHJvdG90eXBlLHtkYXRlRm9ybWF0OmZ1bmN0aW9u KGEpe2lmKERhdGUuZm9ybWF0RnVuY3Rpb25zW2FdPT1udWxsKXtEYXRlLmNyZWF0ZUZvcm1hdChh KX1yZXR1cm4gRGF0ZS5mb3JtYXRGdW5jdGlvbnNbYV0uY2FsbCh0aGlzKX0sZ2V0VGltZXpvbmU6 ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygpLnJlcGxhY2UoL14uKiAoPzpcKCguKilc KXwoW0EtWl17MSw0fSkoPzpbXC0rXVswLTldezR9KT8oPzogLT9cZCspPykkLywiJDEkMiIpLnJl cGxhY2UoL1teQS1aXS9nLCIiKX0sZ2V0R01UT2Zmc2V0OmZ1bmN0aW9uKGEpe3JldHVybih0aGlz LmdldFRpbWV6b25lT2Zmc2V0KCk+MD8iLSI6IisiKStTdHJpbmcubGVmdFBhZChNYXRoLmZsb29y KE1hdGguYWJzKHRoaXMuZ2V0VGltZXpvbmVPZmZzZXQoKSkvNjApLDIsIjAiKSsoYT8iOiI6IiIp K1N0cmluZy5sZWZ0UGFkKE1hdGguYWJzKHRoaXMuZ2V0VGltZXpvbmVPZmZzZXQoKSU2MCksMiwi MCIpfSxnZXREYXlPZlllYXI6ZnVuY3Rpb24oKXt2YXIgYz0wLGI9MCxlPXRoaXMuY2xvbmUoKSxh PXRoaXMuZ2V0TW9udGgoKTtmb3IoYz0wLGUuc2V0TW9udGgoMCk7YzxhO2Uuc2V0TW9udGgoKytj KSl7Yis9ZS5nZXREYXlzSW5Nb250aCgpfXJldHVybiBiK3RoaXMuZ2V0RGF0ZSgpLTF9LGdldFdl ZWtPZlllYXI6ZnVuY3Rpb24oKXt2YXIgYT04NjQwMDAwMCxiPTcqYTtyZXR1cm4gZnVuY3Rpb24o KXt2YXIgZD1EYXRlLlVUQyh0aGlzLmdldEZ1bGxZZWFyKCksdGhpcy5nZXRNb250aCgpLHRoaXMu Z2V0RGF0ZSgpKzMpL2EsYz1NYXRoLmZsb29yKGQvNyksZT1uZXcgRGF0ZShjKmIpLmdldFVUQ0Z1 bGxZZWFyKCk7cmV0dXJuIGMtTWF0aC5mbG9vcihEYXRlLlVUQyhlLDAsNykvYikrMX19KCksaXNM ZWFwWWVhcjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0RnVsbFllYXIoKTtyZXR1cm4gISEoKGEm Myk9PTAmJihhJTEwMHx8KGElNDAwPT0wJiZhKSkpfSxnZXRGaXJzdERheU9mTW9udGg6ZnVuY3Rp b24oKXt2YXIgYT0odGhpcy5nZXREYXkoKS0odGhpcy5nZXREYXRlKCktMSkpJTc7cmV0dXJuKGE8 MCk/KGErNyk6YX0sZ2V0TGFzdERheU9mTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRM YXN0RGF0ZU9mTW9udGgoKS5nZXREYXkoKX0sZ2V0Rmlyc3REYXRlT2ZNb250aDpmdW5jdGlvbigp e3JldHVybiBuZXcgRGF0ZSh0aGlzLmdldEZ1bGxZZWFyKCksdGhpcy5nZXRNb250aCgpLDEpfSxn ZXRMYXN0RGF0ZU9mTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy5nZXRGdWxs WWVhcigpLHRoaXMuZ2V0TW9udGgoKSx0aGlzLmdldERheXNJbk1vbnRoKCkpfSxnZXREYXlzSW5N b250aDpmdW5jdGlvbigpe3ZhciBhPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwz MV07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5nZXRNb250aCgpO3JldHVybiBiPT0xJiZ0 aGlzLmlzTGVhcFllYXIoKT8yOTphW2JdfX0oKSxnZXRTdWZmaXg6ZnVuY3Rpb24oKXtzd2l0Y2go dGhpcy5nZXREYXRlKCkpe2Nhc2UgMTpjYXNlIDIxOmNhc2UgMzE6cmV0dXJuInN0IjtjYXNlIDI6 Y2FzZSAyMjpyZXR1cm4ibmQiO2Nhc2UgMzpjYXNlIDIzOnJldHVybiJyZCI7ZGVmYXVsdDpyZXR1 cm4idGgifX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy5nZXRUaW1lKCkp fSxpc0RTVDpmdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLmdldEZ1bGxZZWFyKCksMCwx KS5nZXRUaW1lem9uZU9mZnNldCgpIT10aGlzLmdldFRpbWV6b25lT2Zmc2V0KCl9LGNsZWFyVGlt ZTpmdW5jdGlvbihnKXtpZihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmNsZWFyVGltZSgpfXZhciBi PXRoaXMuZ2V0RGF0ZSgpO3RoaXMuc2V0SG91cnMoMCk7dGhpcy5zZXRNaW51dGVzKDApO3RoaXMu c2V0U2Vjb25kcygwKTt0aGlzLnNldE1pbGxpc2Vjb25kcygwKTtpZih0aGlzLmdldERhdGUoKSE9 Yil7Zm9yKHZhciBhPTEsZT10aGlzLmFkZChEYXRlLkhPVVIsYSk7ZS5nZXREYXRlKCkhPWI7YSsr LGU9dGhpcy5hZGQoRGF0ZS5IT1VSLGEpKXt9dGhpcy5zZXREYXRlKGIpO3RoaXMuc2V0SG91cnMo ZS5nZXRIb3VycygpKX1yZXR1cm4gdGhpc30sYWRkOmZ1bmN0aW9uKGIsYyl7dmFyIGU9dGhpcy5j bG9uZSgpO2lmKCFifHxjPT09MCl7cmV0dXJuIGV9c3dpdGNoKGIudG9Mb3dlckNhc2UoKSl7Y2Fz ZSBEYXRlLk1JTExJOmUuc2V0TWlsbGlzZWNvbmRzKHRoaXMuZ2V0TWlsbGlzZWNvbmRzKCkrYyk7 YnJlYWs7Y2FzZSBEYXRlLlNFQ09ORDplLnNldFNlY29uZHModGhpcy5nZXRTZWNvbmRzKCkrYyk7 YnJlYWs7Y2FzZSBEYXRlLk1JTlVURTplLnNldE1pbnV0ZXModGhpcy5nZXRNaW51dGVzKCkrYyk7 YnJlYWs7Y2FzZSBEYXRlLkhPVVI6ZS5zZXRIb3Vycyh0aGlzLmdldEhvdXJzKCkrYyk7YnJlYWs7 Y2FzZSBEYXRlLkRBWTplLnNldERhdGUodGhpcy5nZXREYXRlKCkrYyk7YnJlYWs7Y2FzZSBEYXRl Lk1PTlRIOnZhciBhPXRoaXMuZ2V0RGF0ZSgpO2lmKGE+Mjgpe2E9TWF0aC5taW4oYSx0aGlzLmdl dEZpcnN0RGF0ZU9mTW9udGgoKS5hZGQoIm1vIixjKS5nZXRMYXN0RGF0ZU9mTW9udGgoKS5nZXRE YXRlKCkpfWUuc2V0RGF0ZShhKTtlLnNldE1vbnRoKHRoaXMuZ2V0TW9udGgoKStjKTticmVhaztj YXNlIERhdGUuWUVBUjplLnNldEZ1bGxZZWFyKHRoaXMuZ2V0RnVsbFllYXIoKStjKTticmVha31y ZXR1cm4gZX0sYmV0d2VlbjpmdW5jdGlvbihjLGEpe3ZhciBiPXRoaXMuZ2V0VGltZSgpO3JldHVy biBjLmdldFRpbWUoKTw9YiYmYjw9YS5nZXRUaW1lKCl9fSk7RGF0ZS5wcm90b3R5cGUuZm9ybWF0 PURhdGUucHJvdG90eXBlLmRhdGVGb3JtYXQ7aWYoRXh0LmlzU2FmYXJpJiYobmF2aWdhdG9yLnVz ZXJBZ2VudC5tYXRjaCgvV2ViS2l0XC8oXGQrKS8pWzFdfHxOYU4pPDQyMCl7RXh0LmFwcGx5KERh dGUucHJvdG90eXBlLHtfeE1vbnRoOkRhdGUucHJvdG90eXBlLnNldE1vbnRoLF94RGF0ZTpEYXRl LnByb3RvdHlwZS5zZXREYXRlLHNldE1vbnRoOmZ1bmN0aW9uKGEpe2lmKGE8PS0xKXt2YXIgZD1N YXRoLmNlaWwoLWEpLGM9TWF0aC5jZWlsKGQvMTIpLGI9KGQlMTIpPzEyLWQlMTI6MDt0aGlzLnNl dEZ1bGxZZWFyKHRoaXMuZ2V0RnVsbFllYXIoKS1jKTtyZXR1cm4gdGhpcy5feE1vbnRoKGIpfWVs c2V7cmV0dXJuIHRoaXMuX3hNb250aChhKX19LHNldERhdGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRo aXMuc2V0VGltZSh0aGlzLmdldFRpbWUoKS0odGhpcy5nZXREYXRlKCktYSkqODY0MDAwMDApfX0p fUV4dC51dGlsLkRlbGF5ZWRUYXNrPWZ1bmN0aW9uKGQsYyxhKXt2YXIgZT10aGlzLGcsYj1mdW5j dGlvbigpe2NsZWFySW50ZXJ2YWwoZyk7Zz1udWxsO2QuYXBwbHkoYyxhfHxbXSl9O2UuZGVsYXk9 ZnVuY3Rpb24oaSxrLGosaCl7ZS5jYW5jZWwoKTtkPWt8fGQ7Yz1qfHxjO2E9aHx8YTtnPXNldElu dGVydmFsKGIsaSl9O2UuY2FuY2VsPWZ1bmN0aW9uKCl7aWYoZyl7Y2xlYXJJbnRlcnZhbChnKTtn PW51bGx9fX07RXh0LnV0aWwuTWl4ZWRDb2xsZWN0aW9uPWZ1bmN0aW9uKGIsYSl7dGhpcy5pdGVt cz1bXTt0aGlzLm1hcD17fTt0aGlzLmtleXM9W107dGhpcy5sZW5ndGg9MDt0aGlzLmFkZEV2ZW50 cygiY2xlYXIiLCJhZGQiLCJyZXBsYWNlIiwicmVtb3ZlIiwic29ydCIpO3RoaXMuYWxsb3dGdW5j dGlvbnM9Yj09PXRydWU7aWYoYSl7dGhpcy5nZXRLZXk9YX1FeHQudXRpbC5NaXhlZENvbGxlY3Rp b24uc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpfTtFeHQuZXh0ZW5kKEV4dC51dGls Lk1peGVkQ29sbGVjdGlvbixFeHQudXRpbC5PYnNlcnZhYmxlLHthbGxvd0Z1bmN0aW9uczpmYWxz ZSxhZGQ6ZnVuY3Rpb24oYixjKXtpZihhcmd1bWVudHMubGVuZ3RoPT0xKXtjPWFyZ3VtZW50c1sw XTtiPXRoaXMuZ2V0S2V5KGMpfWlmKHR5cGVvZiBiIT0idW5kZWZpbmVkIiYmYiE9PW51bGwpe3Zh ciBhPXRoaXMubWFwW2JdO2lmKHR5cGVvZiBhIT0idW5kZWZpbmVkIil7cmV0dXJuIHRoaXMucmVw bGFjZShiLGMpfXRoaXMubWFwW2JdPWN9dGhpcy5sZW5ndGgrKzt0aGlzLml0ZW1zLnB1c2goYyk7 dGhpcy5rZXlzLnB1c2goYik7dGhpcy5maXJlRXZlbnQoImFkZCIsdGhpcy5sZW5ndGgtMSxjLGIp O3JldHVybiBjfSxnZXRLZXk6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaWR9LHJlcGxhY2U6ZnVuY3Rp b24oYyxkKXtpZihhcmd1bWVudHMubGVuZ3RoPT0xKXtkPWFyZ3VtZW50c1swXTtjPXRoaXMuZ2V0 S2V5KGQpfXZhciBhPXRoaXMubWFwW2NdO2lmKHR5cGVvZiBjPT0idW5kZWZpbmVkInx8Yz09PW51 bGx8fHR5cGVvZiBhPT0idW5kZWZpbmVkIil7cmV0dXJuIHRoaXMuYWRkKGMsZCl9dmFyIGI9dGhp cy5pbmRleE9mS2V5KGMpO3RoaXMuaXRlbXNbYl09ZDt0aGlzLm1hcFtjXT1kO3RoaXMuZmlyZUV2 ZW50KCJyZXBsYWNlIixjLGEsZCk7cmV0dXJuIGR9LGFkZEFsbDpmdW5jdGlvbihlKXtpZihhcmd1 bWVudHMubGVuZ3RoPjF8fEV4dC5pc0FycmF5KGUpKXt2YXIgYj1hcmd1bWVudHMubGVuZ3RoPjE/ YXJndW1lbnRzOmU7Zm9yKHZhciBkPTAsYT1iLmxlbmd0aDtkPGE7ZCsrKXt0aGlzLmFkZChiW2Rd KX19ZWxzZXtmb3IodmFyIGMgaW4gZSl7aWYodGhpcy5hbGxvd0Z1bmN0aW9uc3x8dHlwZW9mIGVb Y10hPSJmdW5jdGlvbiIpe3RoaXMuYWRkKGMsZVtjXSl9fX19LGVhY2g6ZnVuY3Rpb24oZSxkKXt2 YXIgYj1bXS5jb25jYXQodGhpcy5pdGVtcyk7Zm9yKHZhciBjPTAsYT1iLmxlbmd0aDtjPGE7Yysr KXtpZihlLmNhbGwoZHx8YltjXSxiW2NdLGMsYSk9PT1mYWxzZSl7YnJlYWt9fX0sZWFjaEtleTpm dW5jdGlvbihkLGMpe2Zvcih2YXIgYj0wLGE9dGhpcy5rZXlzLmxlbmd0aDtiPGE7YisrKXtkLmNh bGwoY3x8d2luZG93LHRoaXMua2V5c1tiXSx0aGlzLml0ZW1zW2JdLGIsYSl9fSxmaW5kOmZ1bmN0 aW9uKGQsYyl7Zm9yKHZhciBiPTAsYT10aGlzLml0ZW1zLmxlbmd0aDtiPGE7YisrKXtpZihkLmNh bGwoY3x8d2luZG93LHRoaXMuaXRlbXNbYl0sdGhpcy5rZXlzW2JdKSl7cmV0dXJuIHRoaXMuaXRl bXNbYl19fXJldHVybiBudWxsfSxpbnNlcnQ6ZnVuY3Rpb24oYSxiLGMpe2lmKGFyZ3VtZW50cy5s ZW5ndGg9PTIpe2M9YXJndW1lbnRzWzFdO2I9dGhpcy5nZXRLZXkoYyl9aWYodGhpcy5jb250YWlu c0tleShiKSl7dGhpcy5zdXNwZW5kRXZlbnRzKCk7dGhpcy5yZW1vdmVLZXkoYik7dGhpcy5yZXN1 bWVFdmVudHMoKX1pZihhPj10aGlzLmxlbmd0aCl7cmV0dXJuIHRoaXMuYWRkKGIsYyl9dGhpcy5s ZW5ndGgrKzt0aGlzLml0ZW1zLnNwbGljZShhLDAsYyk7aWYodHlwZW9mIGIhPSJ1bmRlZmluZWQi JiZiIT09bnVsbCl7dGhpcy5tYXBbYl09Y310aGlzLmtleXMuc3BsaWNlKGEsMCxiKTt0aGlzLmZp cmVFdmVudCgiYWRkIixhLGMsYik7cmV0dXJuIGN9LHJlbW92ZTpmdW5jdGlvbihhKXtyZXR1cm4g dGhpcy5yZW1vdmVBdCh0aGlzLmluZGV4T2YoYSkpfSxyZW1vdmVBdDpmdW5jdGlvbihhKXtpZihh PHRoaXMubGVuZ3RoJiZhPj0wKXt0aGlzLmxlbmd0aC0tO3ZhciBjPXRoaXMuaXRlbXNbYV07dGhp cy5pdGVtcy5zcGxpY2UoYSwxKTt2YXIgYj10aGlzLmtleXNbYV07aWYodHlwZW9mIGIhPSJ1bmRl ZmluZWQiKXtkZWxldGUgdGhpcy5tYXBbYl19dGhpcy5rZXlzLnNwbGljZShhLDEpO3RoaXMuZmly ZUV2ZW50KCJyZW1vdmUiLGMsYik7cmV0dXJuIGN9cmV0dXJuIGZhbHNlfSxyZW1vdmVLZXk6ZnVu Y3Rpb24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlQXQodGhpcy5pbmRleE9mS2V5KGEpKX0sZ2V0Q291 bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LGluZGV4T2Y6ZnVuY3Rpb24oYSl7cmV0 dXJuIHRoaXMuaXRlbXMuaW5kZXhPZihhKX0saW5kZXhPZktleTpmdW5jdGlvbihhKXtyZXR1cm4g dGhpcy5rZXlzLmluZGV4T2YoYSl9LGl0ZW06ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5tYXBbYl0s Yz1hIT09dW5kZWZpbmVkP2E6KHR5cGVvZiBiPT0ibnVtYmVyIik/dGhpcy5pdGVtc1tiXTp1bmRl ZmluZWQ7cmV0dXJuICFFeHQuaXNGdW5jdGlvbihjKXx8dGhpcy5hbGxvd0Z1bmN0aW9ucz9jOm51 bGx9LGl0ZW1BdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5pdGVtc1thXX0sa2V5OmZ1bmN0aW9u KGEpe3JldHVybiB0aGlzLm1hcFthXX0sY29udGFpbnM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu aW5kZXhPZihhKSE9LTF9LGNvbnRhaW5zS2V5OmZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgdGhp cy5tYXBbYV0hPSJ1bmRlZmluZWQifSxjbGVhcjpmdW5jdGlvbigpe3RoaXMubGVuZ3RoPTA7dGhp cy5pdGVtcz1bXTt0aGlzLmtleXM9W107dGhpcy5tYXA9e307dGhpcy5maXJlRXZlbnQoImNsZWFy Iil9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlbXNbMF19LGxhc3Q6ZnVuY3Rpb24o KXtyZXR1cm4gdGhpcy5pdGVtc1t0aGlzLmxlbmd0aC0xXX0sX3NvcnQ6ZnVuY3Rpb24obSxhLGwp e3ZhciBlLGcsZD1TdHJpbmcoYSkudG9VcHBlckNhc2UoKT09IkRFU0MiPy0xOjEsaj1bXSxiPXRo aXMua2V5cyxoPXRoaXMuaXRlbXM7bD1sfHxmdW5jdGlvbihpLGMpe3JldHVybiBpLWN9O2Zvcihl PTAsZz1oLmxlbmd0aDtlPGc7ZSsrKXtqW2oubGVuZ3RoXT17a2V5OmJbZV0sdmFsdWU6aFtlXSxp bmRleDplfX1qLnNvcnQoZnVuY3Rpb24oaSxjKXt2YXIgaz1sKGlbbV0sY1ttXSkqZDtpZihrPT09 MCl7az0oaS5pbmRleDxjLmluZGV4Py0xOjEpfXJldHVybiBrfSk7Zm9yKGU9MCxnPWoubGVuZ3Ro O2U8ZztlKyspe2hbZV09altlXS52YWx1ZTtiW2VdPWpbZV0ua2V5fXRoaXMuZmlyZUV2ZW50KCJz b3J0Iix0aGlzKX0sc29ydDpmdW5jdGlvbihhLGIpe3RoaXMuX3NvcnQoInZhbHVlIixhLGIpfSxr ZXlTb3J0OmZ1bmN0aW9uKGEsYil7dGhpcy5fc29ydCgia2V5IixhLGJ8fGZ1bmN0aW9uKGQsYyl7 dmFyIGc9U3RyaW5nKGQpLnRvVXBwZXJDYXNlKCksZT1TdHJpbmcoYykudG9VcHBlckNhc2UoKTty ZXR1cm4gZz5lPzE6KGc8ZT8tMTowKX0pfSxnZXRSYW5nZTpmdW5jdGlvbihlLGEpe3ZhciBiPXRo aXMuaXRlbXM7aWYoYi5sZW5ndGg8MSl7cmV0dXJuW119ZT1lfHwwO2E9TWF0aC5taW4odHlwZW9m IGE9PSJ1bmRlZmluZWQiP3RoaXMubGVuZ3RoLTE6YSx0aGlzLmxlbmd0aC0xKTt2YXIgYyxkPVtd O2lmKGU8PWEpe2ZvcihjPWU7Yzw9YTtjKyspe2RbZC5sZW5ndGhdPWJbY119fWVsc2V7Zm9yKGM9 ZTtjPj1hO2MtLSl7ZFtkLmxlbmd0aF09YltjXX19cmV0dXJuIGR9LGZpbHRlcjpmdW5jdGlvbihj LGIsZCxhKXtpZihFeHQuaXNFbXB0eShiLGZhbHNlKSl7cmV0dXJuIHRoaXMuY2xvbmUoKX1iPXRo aXMuY3JlYXRlVmFsdWVNYXRjaGVyKGIsZCxhKTtyZXR1cm4gdGhpcy5maWx0ZXJCeShmdW5jdGlv bihlKXtyZXR1cm4gZSYmYi50ZXN0KGVbY10pfSl9LGZpbHRlckJ5OmZ1bmN0aW9uKGcsZSl7dmFy IGg9bmV3IEV4dC51dGlsLk1peGVkQ29sbGVjdGlvbigpO2guZ2V0S2V5PXRoaXMuZ2V0S2V5O3Zh ciBiPXRoaXMua2V5cyxkPXRoaXMuaXRlbXM7Zm9yKHZhciBjPTAsYT1kLmxlbmd0aDtjPGE7Yysr KXtpZihnLmNhbGwoZXx8dGhpcyxkW2NdLGJbY10pKXtoLmFkZChiW2NdLGRbY10pfX1yZXR1cm4g aH0sZmluZEluZGV4OmZ1bmN0aW9uKGMsYixlLGQsYSl7aWYoRXh0LmlzRW1wdHkoYixmYWxzZSkp e3JldHVybiAtMX1iPXRoaXMuY3JlYXRlVmFsdWVNYXRjaGVyKGIsZCxhKTtyZXR1cm4gdGhpcy5m aW5kSW5kZXhCeShmdW5jdGlvbihnKXtyZXR1cm4gZyYmYi50ZXN0KGdbY10pfSxudWxsLGUpfSxm aW5kSW5kZXhCeTpmdW5jdGlvbihnLGUsaCl7dmFyIGI9dGhpcy5rZXlzLGQ9dGhpcy5pdGVtcztm b3IodmFyIGM9KGh8fDApLGE9ZC5sZW5ndGg7YzxhO2MrKyl7aWYoZy5jYWxsKGV8fHRoaXMsZFtj XSxiW2NdKSl7cmV0dXJuIGN9fXJldHVybiAtMX0sY3JlYXRlVmFsdWVNYXRjaGVyOmZ1bmN0aW9u KGIsYyxhKXtpZighYi5leGVjKXtiPVN0cmluZyhiKTtiPW5ldyBSZWdFeHAoKGM9PT10cnVlPyIi OiJeIikrRXh0LmVzY2FwZVJlKGIpLGE/IiI6ImkiKX1yZXR1cm4gYn0sY2xvbmU6ZnVuY3Rpb24o KXt2YXIgZT1uZXcgRXh0LnV0aWwuTWl4ZWRDb2xsZWN0aW9uKCk7dmFyIGI9dGhpcy5rZXlzLGQ9 dGhpcy5pdGVtcztmb3IodmFyIGM9MCxhPWQubGVuZ3RoO2M8YTtjKyspe2UuYWRkKGJbY10sZFtj XSl9ZS5nZXRLZXk9dGhpcy5nZXRLZXk7cmV0dXJuIGV9fSk7RXh0LnV0aWwuTWl4ZWRDb2xsZWN0 aW9uLnByb3RvdHlwZS5nZXQ9RXh0LnV0aWwuTWl4ZWRDb2xsZWN0aW9uLnByb3RvdHlwZS5pdGVt O0V4dC51dGlsLkpTT049bmV3IChmdW5jdGlvbigpe3ZhciB1c2VIYXNPd249ISF7fS5oYXNPd25Q cm9wZXJ0eSxpc05hdGl2ZT1mdW5jdGlvbigpe3ZhciB1c2VOYXRpdmU9bnVsbDtyZXR1cm4gZnVu Y3Rpb24oKXtpZih1c2VOYXRpdmU9PT1udWxsKXt1c2VOYXRpdmU9RXh0LlVTRV9OQVRJVkVfSlNP TiYmd2luZG93LkpTT04mJkpTT04udG9TdHJpbmcoKT09IltvYmplY3QgSlNPTl0ifXJldHVybiB1 c2VOYXRpdmV9fSgpLHBhZD1mdW5jdGlvbihuKXtyZXR1cm4gbjwxMD8iMCIrbjpufSxkb0RlY29k ZT1mdW5jdGlvbihqc29uKXtyZXR1cm4gZXZhbCgiKCIranNvbisiKSIpfSxkb0VuY29kZT1mdW5j dGlvbihvKXtpZih0eXBlb2Ygbz09InVuZGVmaW5lZCJ8fG89PT1udWxsKXtyZXR1cm4ibnVsbCJ9 ZWxzZXtpZihFeHQuaXNBcnJheShvKSl7cmV0dXJuIGVuY29kZUFycmF5KG8pfWVsc2V7aWYoT2Jq ZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShvKT09PSJbb2JqZWN0IERhdGVdIil7cmV0dXJu IEV4dC51dGlsLkpTT04uZW5jb2RlRGF0ZShvKX1lbHNle2lmKHR5cGVvZiBvPT0ic3RyaW5nIil7 cmV0dXJuIGVuY29kZVN0cmluZyhvKX1lbHNle2lmKHR5cGVvZiBvPT0ibnVtYmVyIil7cmV0dXJu IGlzRmluaXRlKG8pP1N0cmluZyhvKToibnVsbCJ9ZWxzZXtpZih0eXBlb2Ygbz09ImJvb2xlYW4i KXtyZXR1cm4gU3RyaW5nKG8pfWVsc2V7dmFyIGE9WyJ7Il0sYixpLHY7Zm9yKGkgaW4gbyl7aWYo IXVzZUhhc093bnx8by5oYXNPd25Qcm9wZXJ0eShpKSl7dj1vW2ldO3N3aXRjaCh0eXBlb2Ygdil7 Y2FzZSJ1bmRlZmluZWQiOmNhc2UiZnVuY3Rpb24iOmNhc2UidW5rbm93biI6YnJlYWs7ZGVmYXVs dDppZihiKXthLnB1c2goIiwiKX1hLnB1c2goZG9FbmNvZGUoaSksIjoiLHY9PT1udWxsPyJudWxs Ijpkb0VuY29kZSh2KSk7Yj10cnVlfX19YS5wdXNoKCJ9Iik7cmV0dXJuIGEuam9pbigiIil9fX19 fX19LG09eyJcYiI6IlxcYiIsIlx0IjoiXFx0IiwiXG4iOiJcXG4iLCJcZiI6IlxcZiIsIlxyIjoi XFxyIiwnIic6J1xcIicsIlxcIjoiXFxcXCJ9LGVuY29kZVN0cmluZz1mdW5jdGlvbihzKXtpZigv WyJcXFx4MDAtXHgxZl0vLnRlc3Qocykpe3JldHVybiciJytzLnJlcGxhY2UoLyhbXHgwMC1ceDFm XFwiXSkvZyxmdW5jdGlvbihhLGIpe3ZhciBjPW1bYl07aWYoYyl7cmV0dXJuIGN9Yz1iLmNoYXJD b2RlQXQoKTtyZXR1cm4iXFx1MDAiK01hdGguZmxvb3IoYy8xNikudG9TdHJpbmcoMTYpKyhjJTE2 KS50b1N0cmluZygxNil9KSsnIid9cmV0dXJuJyInK3MrJyInfSxlbmNvZGVBcnJheT1mdW5jdGlv bihvKXt2YXIgYT1bIlsiXSxiLGksbD1vLmxlbmd0aCx2O2ZvcihpPTA7aTxsO2krPTEpe3Y9b1tp XTtzd2l0Y2godHlwZW9mIHYpe2Nhc2UidW5kZWZpbmVkIjpjYXNlImZ1bmN0aW9uIjpjYXNlInVu a25vd24iOmJyZWFrO2RlZmF1bHQ6aWYoYil7YS5wdXNoKCIsIil9YS5wdXNoKHY9PT1udWxsPyJu dWxsIjpFeHQudXRpbC5KU09OLmVuY29kZSh2KSk7Yj10cnVlfX1hLnB1c2goIl0iKTtyZXR1cm4g YS5qb2luKCIiKX07dGhpcy5lbmNvZGVEYXRlPWZ1bmN0aW9uKG8pe3JldHVybiciJytvLmdldEZ1 bGxZZWFyKCkrIi0iK3BhZChvLmdldE1vbnRoKCkrMSkrIi0iK3BhZChvLmdldERhdGUoKSkrIlQi K3BhZChvLmdldEhvdXJzKCkpKyI6IitwYWQoby5nZXRNaW51dGVzKCkpKyI6IitwYWQoby5nZXRT ZWNvbmRzKCkpKyciJ307dGhpcy5lbmNvZGU9ZnVuY3Rpb24oKXt2YXIgZWM7cmV0dXJuIGZ1bmN0 aW9uKG8pe2lmKCFlYyl7ZWM9aXNOYXRpdmUoKT9KU09OLnN0cmluZ2lmeTpkb0VuY29kZX1yZXR1 cm4gZWMobyl9fSgpO3RoaXMuZGVjb2RlPWZ1bmN0aW9uKCl7dmFyIGRjO3JldHVybiBmdW5jdGlv bihqc29uKXtpZighZGMpe2RjPWlzTmF0aXZlKCk/SlNPTi5wYXJzZTpkb0RlY29kZX1yZXR1cm4g ZGMoanNvbil9fSgpfSkoKTtFeHQuZW5jb2RlPUV4dC51dGlsLkpTT04uZW5jb2RlO0V4dC5kZWNv ZGU9RXh0LnV0aWwuSlNPTi5kZWNvZGU7RXh0LnV0aWwuRm9ybWF0PWZ1bmN0aW9uKCl7dmFyIHRy aW1SZT0vXlxzK3xccyskL2c7cmV0dXJue2VsbGlwc2lzOmZ1bmN0aW9uKHZhbHVlLGxlbix3b3Jk KXtpZih2YWx1ZSYmdmFsdWUubGVuZ3RoPmxlbil7aWYod29yZCl7dmFyIHZzPXZhbHVlLnN1YnN0 cigwLGxlbi0yKTt2YXIgaW5kZXg9TWF0aC5tYXgodnMubGFzdEluZGV4T2YoIiAiKSx2cy5sYXN0 SW5kZXhPZigiLiIpLHZzLmxhc3RJbmRleE9mKCIhIiksdnMubGFzdEluZGV4T2YoIj8iKSk7aWYo aW5kZXg9PS0xfHxpbmRleDwobGVuLTE1KSl7cmV0dXJuIHZhbHVlLnN1YnN0cigwLGxlbi0zKSsi Li4uIn1lbHNle3JldHVybiB2cy5zdWJzdHIoMCxpbmRleCkrIi4uLiJ9fWVsc2V7cmV0dXJuIHZh bHVlLnN1YnN0cigwLGxlbi0zKSsiLi4uIn19cmV0dXJuIHZhbHVlfSx1bmRlZjpmdW5jdGlvbih2 YWx1ZSl7cmV0dXJuIHZhbHVlIT09dW5kZWZpbmVkP3ZhbHVlOiIifSxkZWZhdWx0VmFsdWU6ZnVu Y3Rpb24odmFsdWUsZGVmYXVsdFZhbHVlKXtyZXR1cm4gdmFsdWUhPT11bmRlZmluZWQmJnZhbHVl IT09IiI/dmFsdWU6ZGVmYXVsdFZhbHVlfSxodG1sRW5jb2RlOmZ1bmN0aW9uKHZhbHVlKXtyZXR1 cm4gIXZhbHVlP3ZhbHVlOlN0cmluZyh2YWx1ZSkucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxh Y2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLyIvZywiJnF1b3Q7 Iil9LGh0bWxEZWNvZGU6ZnVuY3Rpb24odmFsdWUpe3JldHVybiAhdmFsdWU/dmFsdWU6U3RyaW5n KHZhbHVlKS5yZXBsYWNlKC8mZ3Q7L2csIj4iKS5yZXBsYWNlKC8mbHQ7L2csIjwiKS5yZXBsYWNl KC8mcXVvdDsvZywnIicpLnJlcGxhY2UoLyZhbXA7L2csIiYiKX0sdHJpbTpmdW5jdGlvbih2YWx1 ZSl7cmV0dXJuIFN0cmluZyh2YWx1ZSkucmVwbGFjZSh0cmltUmUsIiIpfSxzdWJzdHI6ZnVuY3Rp b24odmFsdWUsc3RhcnQsbGVuZ3RoKXtyZXR1cm4gU3RyaW5nKHZhbHVlKS5zdWJzdHIoc3RhcnQs bGVuZ3RoKX0sbG93ZXJjYXNlOmZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gU3RyaW5nKHZhbHVlKS50 b0xvd2VyQ2FzZSgpfSx1cHBlcmNhc2U6ZnVuY3Rpb24odmFsdWUpe3JldHVybiBTdHJpbmcodmFs dWUpLnRvVXBwZXJDYXNlKCl9LGNhcGl0YWxpemU6ZnVuY3Rpb24odmFsdWUpe3JldHVybiAhdmFs dWU/dmFsdWU6dmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdmFsdWUuc3Vic3RyKDEpLnRv TG93ZXJDYXNlKCl9LGNhbGw6ZnVuY3Rpb24odmFsdWUsZm4pe2lmKGFyZ3VtZW50cy5sZW5ndGg+ Mil7dmFyIGFyZ3M9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO2FyZ3Mu dW5zaGlmdCh2YWx1ZSk7cmV0dXJuIGV2YWwoZm4pLmFwcGx5KHdpbmRvdyxhcmdzKX1lbHNle3Jl dHVybiBldmFsKGZuKS5jYWxsKHdpbmRvdyx2YWx1ZSl9fSx1c01vbmV5OmZ1bmN0aW9uKHYpe3Y9 KE1hdGgucm91bmQoKHYtMCkqMTAwKSkvMTAwO3Y9KHY9PU1hdGguZmxvb3IodikpP3YrIi4wMCI6 KCh2KjEwPT1NYXRoLmZsb29yKHYqMTApKT92KyIwIjp2KTt2PVN0cmluZyh2KTt2YXIgcHM9di5z cGxpdCgiLiIpO3ZhciB3aG9sZT1wc1swXTt2YXIgc3ViPXBzWzFdPyIuIitwc1sxXToiLjAwIjt2 YXIgcj0vKFxkKykoXGR7M30pLzt3aGlsZShyLnRlc3Qod2hvbGUpKXt3aG9sZT13aG9sZS5yZXBs YWNlKHIsIiQxLCQyIil9dj13aG9sZStzdWI7aWYodi5jaGFyQXQoMCk9PSItIil7cmV0dXJuIi0k Iit2LnN1YnN0cigxKX1yZXR1cm4iJCIrdn0sZGF0ZTpmdW5jdGlvbih2LGZvcm1hdCl7aWYoIXYp e3JldHVybiIifWlmKCFFeHQuaXNEYXRlKHYpKXt2PW5ldyBEYXRlKERhdGUucGFyc2UodikpfXJl dHVybiB2LmRhdGVGb3JtYXQoZm9ybWF0fHwibS9kL1kiKX0sZGF0ZVJlbmRlcmVyOmZ1bmN0aW9u KGZvcm1hdCl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBFeHQudXRpbC5Gb3JtYXQuZGF0ZSh2 LGZvcm1hdCl9fSxzdHJpcFRhZ3NSRTovPFwvP1tePl0rPi9naSxzdHJpcFRhZ3M6ZnVuY3Rpb24o dil7cmV0dXJuICF2P3Y6U3RyaW5nKHYpLnJlcGxhY2UodGhpcy5zdHJpcFRhZ3NSRSwiIil9LHN0 cmlwU2NyaXB0c1JlOi8oPzo8c2NyaXB0Lio/PikoKFxufFxyfC4pKj8pKD86PFwvc2NyaXB0Pikv aWcsc3RyaXBTY3JpcHRzOmZ1bmN0aW9uKHYpe3JldHVybiAhdj92OlN0cmluZyh2KS5yZXBsYWNl KHRoaXMuc3RyaXBTY3JpcHRzUmUsIiIpfSxmaWxlU2l6ZTpmdW5jdGlvbihzaXplKXtpZihzaXpl PDEwMjQpe3JldHVybiBzaXplKyIgYnl0ZXMifWVsc2V7aWYoc2l6ZTwxMDQ4NTc2KXtyZXR1cm4o TWF0aC5yb3VuZCgoKHNpemUqMTApLzEwMjQpKS8xMCkrIiBLQiJ9ZWxzZXtyZXR1cm4oTWF0aC5y b3VuZCgoKHNpemUqMTApLzEwNDg1NzYpKS8xMCkrIiBNQiJ9fX0sbWF0aDpmdW5jdGlvbigpe3Zh ciBmbnM9e307cmV0dXJuIGZ1bmN0aW9uKHYsYSl7aWYoIWZuc1thXSl7Zm5zW2FdPW5ldyBGdW5j dGlvbigidiIsInJldHVybiB2ICIrYSsiOyIpfXJldHVybiBmbnNbYV0odil9fSgpLHJvdW5kOmZ1 bmN0aW9uKHZhbHVlLHByZWNpc2lvbil7dmFyIHJlc3VsdD1OdW1iZXIodmFsdWUpO2lmKHR5cGVv ZiBwcmVjaXNpb249PSJudW1iZXIiKXtwcmVjaXNpb249TWF0aC5wb3coMTAscHJlY2lzaW9uKTty ZXN1bHQ9TWF0aC5yb3VuZCh2YWx1ZSpwcmVjaXNpb24pL3ByZWNpc2lvbn1yZXR1cm4gcmVzdWx0 fSxudW1iZXI6ZnVuY3Rpb24odixmb3JtYXQpe2lmKCFmb3JtYXQpe3JldHVybiB2fXY9RXh0Lm51 bSh2LE5hTik7aWYoaXNOYU4odikpe3JldHVybiIifXZhciBjb21tYT0iLCIsZGVjPSIuIixpMThu PWZhbHNlLG5lZz12PDA7dj1NYXRoLmFicyh2KTtpZihmb3JtYXQuc3Vic3RyKGZvcm1hdC5sZW5n dGgtMik9PSIvaSIpe2Zvcm1hdD1mb3JtYXQuc3Vic3RyKDAsZm9ybWF0Lmxlbmd0aC0yKTtpMThu PXRydWU7Y29tbWE9Ii4iO2RlYz0iLCJ9dmFyIGhhc0NvbW1hPWZvcm1hdC5pbmRleE9mKGNvbW1h KSE9LTEscHNwbGl0PShpMThuP2Zvcm1hdC5yZXBsYWNlKC9bXlxkXCxdL2csIiIpOmZvcm1hdC5y ZXBsYWNlKC9bXlxkXC5dL2csIiIpKS5zcGxpdChkZWMpO2lmKDE8cHNwbGl0Lmxlbmd0aCl7dj12 LnRvRml4ZWQocHNwbGl0WzFdLmxlbmd0aCl9ZWxzZXtpZigyPHBzcGxpdC5sZW5ndGgpe3Rocm93 ICgiTnVtYmVyRm9ybWF0RXhjZXB0aW9uOiBpbnZhbGlkIGZvcm1hdCwgZm9ybWF0cyBzaG91bGQg aGF2ZSBubyBtb3JlIHRoYW4gMSBwZXJpb2Q6ICIrZm9ybWF0KX1lbHNle3Y9di50b0ZpeGVkKDAp fX12YXIgZm51bT12LnRvU3RyaW5nKCk7aWYoaGFzQ29tbWEpe3BzcGxpdD1mbnVtLnNwbGl0KCIu Iik7dmFyIGNudW09cHNwbGl0WzBdLHBhcnI9W10saj1jbnVtLmxlbmd0aCxtPU1hdGguZmxvb3Io ai8zKSxuPWNudW0ubGVuZ3RoJTN8fDM7Zm9yKHZhciBpPTA7aTxqO2krPW4pe2lmKGkhPTApe249 M31wYXJyW3BhcnIubGVuZ3RoXT1jbnVtLnN1YnN0cihpLG4pO20tPTF9Zm51bT1wYXJyLmpvaW4o Y29tbWEpO2lmKHBzcGxpdFsxXSl7Zm51bSs9ZGVjK3BzcGxpdFsxXX19cmV0dXJuKG5lZz8iLSI6 IiIpK2Zvcm1hdC5yZXBsYWNlKC9bXGQsP1wuP10rLyxmbnVtKX0sbnVtYmVyUmVuZGVyZXI6ZnVu Y3Rpb24oZm9ybWF0KXtyZXR1cm4gZnVuY3Rpb24odil7cmV0dXJuIEV4dC51dGlsLkZvcm1hdC5u dW1iZXIodixmb3JtYXQpfX0scGx1cmFsOmZ1bmN0aW9uKHYscyxwKXtyZXR1cm4gdisiICIrKHY9 PTE/czoocD9wOnMrInMiKSl9LG5sMmJyOmZ1bmN0aW9uKHYpe3JldHVybiB2PT09dW5kZWZpbmVk fHx2PT09bnVsbD8iIjp2LnJlcGxhY2UoL1xuL2csIjxici8+Iil9fX0oKTtFeHQuWFRlbXBsYXRl PWZ1bmN0aW9uKCl7RXh0LlhUZW1wbGF0ZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmFwcGx5KHRo aXMsYXJndW1lbnRzKTt2YXIgdz10aGlzLGk9dy5odG1sLHA9Lzx0cGxcYltePl0qPigoPzooPz0o W148XSspKVwyfDwoPyF0cGxcYltePl0qPikpKj8pPFwvdHBsPi8sZD0vXjx0cGxcYltePl0qP2Zv cj0iKC4qPykiLyx0PS9ePHRwbFxiW14+XSo/aWY9IiguKj8pIi8sdj0vXjx0cGxcYltePl0qP2V4 ZWM9IiguKj8pIi8scSxvPTAsaj1bXSxuPSJ2YWx1ZXMiLHU9InBhcmVudCIsaz0ieGluZGV4Iixs PSJ4Y291bnQiLGU9InJldHVybiAiLGM9IndpdGgodmFsdWVzKXsgIjtpPVsiPHRwbD4iLGksIjwv dHBsPiJdLmpvaW4oIiIpO3doaWxlKChxPWkubWF0Y2gocCkpKXt2YXIgYj1xWzBdLm1hdGNoKGQp LGE9cVswXS5tYXRjaCh0KSx5PXFbMF0ubWF0Y2godiksZz1udWxsLGg9bnVsbCxyPW51bGwseD1i JiZiWzFdP2JbMV06IiI7aWYoYSl7Zz1hJiZhWzFdP2FbMV06bnVsbDtpZihnKXtoPW5ldyBGdW5j dGlvbihuLHUsayxsLGMrZSsoRXh0LnV0aWwuRm9ybWF0Lmh0bWxEZWNvZGUoZykpKyI7IH0iKX19 aWYoeSl7Zz15JiZ5WzFdP3lbMV06bnVsbDtpZihnKXtyPW5ldyBGdW5jdGlvbihuLHUsayxsLGMr KEV4dC51dGlsLkZvcm1hdC5odG1sRGVjb2RlKGcpKSsiOyB9Iil9fWlmKHgpe3N3aXRjaCh4KXtj YXNlIi4iOng9bmV3IEZ1bmN0aW9uKG4sdSxjK2UrbisiOyB9Iik7YnJlYWs7Y2FzZSIuLiI6eD1u ZXcgRnVuY3Rpb24obix1LGMrZSt1KyI7IH0iKTticmVhaztkZWZhdWx0Ong9bmV3IEZ1bmN0aW9u KG4sdSxjK2UreCsiOyB9Iil9fWoucHVzaCh7aWQ6byx0YXJnZXQ6eCxleGVjOnIsdGVzdDpoLGJv ZHk6cVsxXXx8IiJ9KTtpPWkucmVwbGFjZShxWzBdLCJ7eHRwbCIrbysifSIpOysrb31FeHQuZWFj aChqLGZ1bmN0aW9uKG0pe3cuY29tcGlsZVRwbChtKX0pO3cubWFzdGVyPWpbai5sZW5ndGgtMV07 dy50cGxzPWp9O0V4dC5leHRlbmQoRXh0LlhUZW1wbGF0ZSxFeHQuVGVtcGxhdGUse3JlOi9ceyhb XHctXC5cI10rKSg/Olw6KFtcd1wuXSopKD86XCgoLio/KT9cKSk/KT8oXHM/W1wrXC1cKlxcXVxz P1tcZFwuXCtcLVwqXFxcKFwpXSspP1x9L2csY29kZVJlOi9ce1xbKCg/OlxcXF18LnxcbikqPylc XVx9L2csYXBwbHlTdWJUZW1wbGF0ZTpmdW5jdGlvbihhLGksaCxkLGMpe3ZhciBnPXRoaXMsZSxr PWcudHBsc1thXSxqLGI9W107aWYoKGsudGVzdCYmIWsudGVzdC5jYWxsKGcsaSxoLGQsYykpfHwo ay5leGVjJiZrLmV4ZWMuY2FsbChnLGksaCxkLGMpKSl7cmV0dXJuIiJ9aj1rLnRhcmdldD9rLnRh cmdldC5jYWxsKGcsaSxoKTppO2U9ai5sZW5ndGg7aD1rLnRhcmdldD9pOmg7aWYoay50YXJnZXQm JkV4dC5pc0FycmF5KGopKXtFeHQuZWFjaChqLGZ1bmN0aW9uKGwsbSl7YltiLmxlbmd0aF09ay5j b21waWxlZC5jYWxsKGcsbCxoLG0rMSxlKX0pO3JldHVybiBiLmpvaW4oIiIpfXJldHVybiBrLmNv bXBpbGVkLmNhbGwoZyxqLGgsZCxjKX0sY29tcGlsZVRwbDpmdW5jdGlvbih0cGwpe3ZhciBmbT1F eHQudXRpbC5Gb3JtYXQsdXNlRj10aGlzLmRpc2FibGVGb3JtYXRzIT09dHJ1ZSxzZXA9RXh0Lmlz R2Vja28/IisiOiIsIixib2R5O2Z1bmN0aW9uIGZuKG0sbmFtZSxmb3JtYXQsYXJncyxtYXRoKXtp ZihuYW1lLnN1YnN0cigwLDQpPT0ieHRwbCIpe3JldHVybiInIitzZXArInRoaXMuYXBwbHlTdWJU ZW1wbGF0ZSgiK25hbWUuc3Vic3RyKDQpKyIsIHZhbHVlcywgcGFyZW50LCB4aW5kZXgsIHhjb3Vu dCkiK3NlcCsiJyJ9dmFyIHY7aWYobmFtZT09PSIuIil7dj0idmFsdWVzIn1lbHNle2lmKG5hbWU9 PT0iIyIpe3Y9InhpbmRleCJ9ZWxzZXtpZihuYW1lLmluZGV4T2YoIi4iKSE9LTEpe3Y9bmFtZX1l bHNle3Y9InZhbHVlc1snIituYW1lKyInXSJ9fX1pZihtYXRoKXt2PSIoIit2K21hdGgrIikifWlm KGZvcm1hdCYmdXNlRil7YXJncz1hcmdzPyIsIithcmdzOiIiO2lmKGZvcm1hdC5zdWJzdHIoMCw1 KSE9InRoaXMuIil7Zm9ybWF0PSJmbS4iK2Zvcm1hdCsiKCJ9ZWxzZXtmb3JtYXQ9J3RoaXMuY2Fs bCgiJytmb3JtYXQuc3Vic3RyKDUpKyciLCAnO2FyZ3M9IiwgdmFsdWVzIn19ZWxzZXthcmdzPSIi O2Zvcm1hdD0iKCIrdisiID09PSB1bmRlZmluZWQgPyAnJyA6ICJ9cmV0dXJuIiciK3NlcCtmb3Jt YXQrdithcmdzKyIpIitzZXArIicifWZ1bmN0aW9uIGNvZGVGbihtLGNvZGUpe3JldHVybiInIitz ZXArIigiK2NvZGUrIikiK3NlcCsiJyJ9aWYoRXh0LmlzR2Vja28pe2JvZHk9InRwbC5jb21waWxl ZCA9IGZ1bmN0aW9uKHZhbHVlcywgcGFyZW50LCB4aW5kZXgsIHhjb3VudCl7IHJldHVybiAnIit0 cGwuYm9keS5yZXBsYWNlKC8oXHJcbnxcbikvZywiXFxuIikucmVwbGFjZSgvJy9nLCJcXCciKS5y ZXBsYWNlKHRoaXMucmUsZm4pLnJlcGxhY2UodGhpcy5jb2RlUmUsY29kZUZuKSsiJzt9OyJ9ZWxz ZXtib2R5PVsidHBsLmNvbXBpbGVkID0gZnVuY3Rpb24odmFsdWVzLCBwYXJlbnQsIHhpbmRleCwg eGNvdW50KXsgcmV0dXJuIFsnIl07Ym9keS5wdXNoKHRwbC5ib2R5LnJlcGxhY2UoLyhcclxufFxu KS9nLCJcXG4iKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UodGhpcy5yZSxmbikucmVwbGFj ZSh0aGlzLmNvZGVSZSxjb2RlRm4pKTtib2R5LnB1c2goIiddLmpvaW4oJycpO307Iik7Ym9keT1i b2R5LmpvaW4oIiIpfWV2YWwoYm9keSk7cmV0dXJuIHRoaXN9LGFwcGx5VGVtcGxhdGU6ZnVuY3Rp b24oYSl7cmV0dXJuIHRoaXMubWFzdGVyLmNvbXBpbGVkLmNhbGwodGhpcyxhLHt9LDEsMSl9LGNv bXBpbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KTtFeHQuWFRlbXBsYXRlLnByb3RvdHlwZS5h cHBseT1FeHQuWFRlbXBsYXRlLnByb3RvdHlwZS5hcHBseVRlbXBsYXRlO0V4dC5YVGVtcGxhdGUu ZnJvbT1mdW5jdGlvbihhKXthPUV4dC5nZXREb20oYSk7cmV0dXJuIG5ldyBFeHQuWFRlbXBsYXRl KGEudmFsdWV8fGEuaW5uZXJIVE1MKX07RXh0LnV0aWwuQ1NTPWZ1bmN0aW9uKCl7dmFyIGQ9bnVs bDt2YXIgYz1kb2N1bWVudDt2YXIgYj0vKC1bYS16XSkvZ2k7dmFyIGE9ZnVuY3Rpb24oZSxnKXty ZXR1cm4gZy5jaGFyQXQoMSkudG9VcHBlckNhc2UoKX07cmV0dXJue2NyZWF0ZVN0eWxlU2hlZXQ6 ZnVuY3Rpb24oaSxsKXt2YXIgaDt2YXIgZz1jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilb MF07dmFyIGs9Yy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2suc2V0QXR0cmlidXRlKCJ0eXBlIiwi dGV4dC9jc3MiKTtpZihsKXtrLnNldEF0dHJpYnV0ZSgiaWQiLGwpfWlmKEV4dC5pc0lFKXtnLmFw cGVuZENoaWxkKGspO2g9ay5zdHlsZVNoZWV0O2guY3NzVGV4dD1pfWVsc2V7dHJ5e2suYXBwZW5k Q2hpbGQoYy5jcmVhdGVUZXh0Tm9kZShpKSl9Y2F0Y2goail7ay5jc3NUZXh0PWl9Zy5hcHBlbmRD aGlsZChrKTtoPWsuc3R5bGVTaGVldD9rLnN0eWxlU2hlZXQ6KGsuc2hlZXR8fGMuc3R5bGVTaGVl dHNbYy5zdHlsZVNoZWV0cy5sZW5ndGgtMV0pfXRoaXMuY2FjaGVTdHlsZVNoZWV0KGgpO3JldHVy biBofSxyZW1vdmVTdHlsZVNoZWV0OmZ1bmN0aW9uKGcpe3ZhciBlPWMuZ2V0RWxlbWVudEJ5SWQo Zyk7aWYoZSl7ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfX0sc3dhcFN0eWxlU2hlZXQ6ZnVu Y3Rpb24oaCxlKXt0aGlzLnJlbW92ZVN0eWxlU2hlZXQoaCk7dmFyIGc9Yy5jcmVhdGVFbGVtZW50 KCJsaW5rIik7Zy5zZXRBdHRyaWJ1dGUoInJlbCIsInN0eWxlc2hlZXQiKTtnLnNldEF0dHJpYnV0 ZSgidHlwZSIsInRleHQvY3NzIik7Zy5zZXRBdHRyaWJ1dGUoImlkIixoKTtnLnNldEF0dHJpYnV0 ZSgiaHJlZiIsZSk7Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxk KGcpfSxyZWZyZXNoQ2FjaGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSdWxlcyh0cnVlKX0s Y2FjaGVTdHlsZVNoZWV0OmZ1bmN0aW9uKGgpe2lmKCFkKXtkPXt9fXRyeXt2YXIgaz1oLmNzc1J1 bGVzfHxoLnJ1bGVzO2Zvcih2YXIgZz1rLmxlbmd0aC0xO2c+PTA7LS1nKXtkW2tbZ10uc2VsZWN0 b3JUZXh0XT1rW2ddfX1jYXRjaChpKXt9fSxnZXRSdWxlczpmdW5jdGlvbihoKXtpZihkPT09bnVs bHx8aCl7ZD17fTt2YXIgaz1jLnN0eWxlU2hlZXRzO2Zvcih2YXIgaj0wLGc9ay5sZW5ndGg7ajxn O2orKyl7dHJ5e3RoaXMuY2FjaGVTdHlsZVNoZWV0KGtbal0pfWNhdGNoKGwpe319fXJldHVybiBk fSxnZXRSdWxlOmZ1bmN0aW9uKGUsaCl7dmFyIGc9dGhpcy5nZXRSdWxlcyhoKTtpZighRXh0Lmlz QXJyYXkoZSkpe3JldHVybiBnW2VdfWZvcih2YXIgaj0wO2o8ZS5sZW5ndGg7aisrKXtpZihnW2Vb al1dKXtyZXR1cm4gZ1tlW2pdXX19cmV0dXJuIG51bGx9LHVwZGF0ZVJ1bGU6ZnVuY3Rpb24oZSxq LGgpe2lmKCFFeHQuaXNBcnJheShlKSl7dmFyIGs9dGhpcy5nZXRSdWxlKGUpO2lmKGspe2suc3R5 bGVbai5yZXBsYWNlKGIsYSldPWg7cmV0dXJuIHRydWV9fWVsc2V7Zm9yKHZhciBnPTA7ZzxlLmxl bmd0aDtnKyspe2lmKHRoaXMudXBkYXRlUnVsZShlW2ddLGosaCkpe3JldHVybiB0cnVlfX19cmV0 dXJuIGZhbHNlfX19KCk7RXh0LnV0aWwuQ2xpY2tSZXBlYXRlcj1mdW5jdGlvbihiLGEpe3RoaXMu ZWw9RXh0LmdldChiKTt0aGlzLmVsLnVuc2VsZWN0YWJsZSgpO0V4dC5hcHBseSh0aGlzLGEpO3Ro aXMuYWRkRXZlbnRzKCJtb3VzZWRvd24iLCJjbGljayIsIm1vdXNldXAiKTtpZighdGhpcy5kaXNh YmxlZCl7dGhpcy5kaXNhYmxlZD10cnVlO3RoaXMuZW5hYmxlKCl9aWYodGhpcy5oYW5kbGVyKXt0 aGlzLm9uKCJjbGljayIsdGhpcy5oYW5kbGVyLHRoaXMuc2NvcGV8fHRoaXMpfUV4dC51dGlsLkNs aWNrUmVwZWF0ZXIuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpfTtFeHQuZXh0ZW5k KEV4dC51dGlsLkNsaWNrUmVwZWF0ZXIsRXh0LnV0aWwuT2JzZXJ2YWJsZSx7aW50ZXJ2YWw6MjAs ZGVsYXk6MjUwLHByZXZlbnREZWZhdWx0OnRydWUsc3RvcERlZmF1bHQ6ZmFsc2UsdGltZXI6MCxl bmFibGU6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2FibGVkKXt0aGlzLmVsLm9uKCJtb3VzZWRvd24i LHRoaXMuaGFuZGxlTW91c2VEb3duLHRoaXMpO2lmKHRoaXMucHJldmVudERlZmF1bHR8fHRoaXMu c3RvcERlZmF1bHQpe3RoaXMuZWwub24oImNsaWNrIix0aGlzLmV2ZW50T3B0aW9ucyx0aGlzKX19 dGhpcy5kaXNhYmxlZD1mYWxzZX0sZGlzYWJsZTpmdW5jdGlvbihhKXtpZihhfHwhdGhpcy5kaXNh YmxlZCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO2lmKHRoaXMucHJlc3NDbGFzcyl7dGhpcy5l bC5yZW1vdmVDbGFzcyh0aGlzLnByZXNzQ2xhc3MpfUV4dC5nZXREb2MoKS51bigibW91c2V1cCIs dGhpcy5oYW5kbGVNb3VzZVVwLHRoaXMpO3RoaXMuZWwucmVtb3ZlQWxsTGlzdGVuZXJzKCl9dGhp cy5kaXNhYmxlZD10cnVlfSxzZXREaXNhYmxlZDpmdW5jdGlvbihhKXt0aGlzW2E/ImRpc2FibGUi OiJlbmFibGUiXSgpfSxldmVudE9wdGlvbnM6ZnVuY3Rpb24oYSl7aWYodGhpcy5wcmV2ZW50RGVm YXVsdCl7YS5wcmV2ZW50RGVmYXVsdCgpfWlmKHRoaXMuc3RvcERlZmF1bHQpe2Euc3RvcEV2ZW50 KCl9fSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlKHRydWUpO0V4dC5kZXN0cm95KHRo aXMuZWwpO3RoaXMucHVyZ2VMaXN0ZW5lcnMoKX0saGFuZGxlTW91c2VEb3duOmZ1bmN0aW9uKCl7 Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO3RoaXMuZWwuYmx1cigpO2lmKHRoaXMucHJlc3NDbGFz cyl7dGhpcy5lbC5hZGRDbGFzcyh0aGlzLnByZXNzQ2xhc3MpfXRoaXMubW91c2Vkb3duVGltZT1u ZXcgRGF0ZSgpO0V4dC5nZXREb2MoKS5vbigibW91c2V1cCIsdGhpcy5oYW5kbGVNb3VzZVVwLHRo aXMpO3RoaXMuZWwub24oIm1vdXNlb3V0Iix0aGlzLmhhbmRsZU1vdXNlT3V0LHRoaXMpO3RoaXMu ZmlyZUV2ZW50KCJtb3VzZWRvd24iLHRoaXMpO3RoaXMuZmlyZUV2ZW50KCJjbGljayIsdGhpcyk7 aWYodGhpcy5hY2NlbGVyYXRlKXt0aGlzLmRlbGF5PTQwMH10aGlzLnRpbWVyPXRoaXMuY2xpY2su ZGVmZXIodGhpcy5kZWxheXx8dGhpcy5pbnRlcnZhbCx0aGlzKX0sY2xpY2s6ZnVuY3Rpb24oKXt0 aGlzLmZpcmVFdmVudCgiY2xpY2siLHRoaXMpO3RoaXMudGltZXI9dGhpcy5jbGljay5kZWZlcih0 aGlzLmFjY2VsZXJhdGU/dGhpcy5lYXNlT3V0RXhwbyh0aGlzLm1vdXNlZG93blRpbWUuZ2V0RWxh cHNlZCgpLDQwMCwtMzkwLDEyMDAwKTp0aGlzLmludGVydmFsLHRoaXMpfSxlYXNlT3V0RXhwbzpm dW5jdGlvbihlLGEsaCxnKXtyZXR1cm4oZT09Zyk/YStoOmgqKC1NYXRoLnBvdygyLC0xMCplL2cp KzEpK2F9LGhhbmRsZU1vdXNlT3V0OmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIp O2lmKHRoaXMucHJlc3NDbGFzcyl7dGhpcy5lbC5yZW1vdmVDbGFzcyh0aGlzLnByZXNzQ2xhc3Mp fXRoaXMuZWwub24oIm1vdXNlb3ZlciIsdGhpcy5oYW5kbGVNb3VzZVJldHVybix0aGlzKX0saGFu ZGxlTW91c2VSZXR1cm46ZnVuY3Rpb24oKXt0aGlzLmVsLnVuKCJtb3VzZW92ZXIiLHRoaXMuaGFu ZGxlTW91c2VSZXR1cm4sdGhpcyk7aWYodGhpcy5wcmVzc0NsYXNzKXt0aGlzLmVsLmFkZENsYXNz KHRoaXMucHJlc3NDbGFzcyl9dGhpcy5jbGljaygpfSxoYW5kbGVNb3VzZVVwOmZ1bmN0aW9uKCl7 Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO3RoaXMuZWwudW4oIm1vdXNlb3ZlciIsdGhpcy5oYW5k bGVNb3VzZVJldHVybix0aGlzKTt0aGlzLmVsLnVuKCJtb3VzZW91dCIsdGhpcy5oYW5kbGVNb3Vz ZU91dCx0aGlzKTtFeHQuZ2V0RG9jKCkudW4oIm1vdXNldXAiLHRoaXMuaGFuZGxlTW91c2VVcCx0 aGlzKTt0aGlzLmVsLnJlbW92ZUNsYXNzKHRoaXMucHJlc3NDbGFzcyk7dGhpcy5maXJlRXZlbnQo Im1vdXNldXAiLHRoaXMpfX0pO0V4dC5LZXlOYXY9ZnVuY3Rpb24oYixhKXt0aGlzLmVsPUV4dC5n ZXQoYik7RXh0LmFwcGx5KHRoaXMsYSk7aWYoIXRoaXMuZGlzYWJsZWQpe3RoaXMuZGlzYWJsZWQ9 dHJ1ZTt0aGlzLmVuYWJsZSgpfX07RXh0LktleU5hdi5wcm90b3R5cGU9e2Rpc2FibGVkOmZhbHNl LGRlZmF1bHRFdmVudEFjdGlvbjoic3RvcEV2ZW50Iixmb3JjZUtleURvd246ZmFsc2UscHJlcGFy ZUV2ZW50OmZ1bmN0aW9uKGMpe3ZhciBhPWMuZ2V0S2V5KCk7dmFyIGI9dGhpcy5rZXlUb0hhbmRs ZXJbYV07aWYoRXh0LmlzU2FmYXJpMiYmYiYmYT49MzcmJmE8PTQwKXtjLnN0b3BFdmVudCgpfX0s cmVsYXk6ZnVuY3Rpb24oYyl7dmFyIGE9Yy5nZXRLZXkoKTt2YXIgYj10aGlzLmtleVRvSGFuZGxl clthXTtpZihiJiZ0aGlzW2JdKXtpZih0aGlzLmRvUmVsYXkoYyx0aGlzW2JdLGIpIT09dHJ1ZSl7 Y1t0aGlzLmRlZmF1bHRFdmVudEFjdGlvbl0oKX19fSxkb1JlbGF5OmZ1bmN0aW9uKGMsYixhKXty ZXR1cm4gYi5jYWxsKHRoaXMuc2NvcGV8fHRoaXMsYyl9LGVudGVyOmZhbHNlLGxlZnQ6ZmFsc2Us cmlnaHQ6ZmFsc2UsdXA6ZmFsc2UsZG93bjpmYWxzZSx0YWI6ZmFsc2UsZXNjOmZhbHNlLHBhZ2VV cDpmYWxzZSxwYWdlRG93bjpmYWxzZSxkZWw6ZmFsc2UsaG9tZTpmYWxzZSxlbmQ6ZmFsc2Usa2V5 VG9IYW5kbGVyOnszNzoibGVmdCIsMzk6InJpZ2h0IiwzODoidXAiLDQwOiJkb3duIiwzMzoicGFn ZVVwIiwzNDoicGFnZURvd24iLDQ2OiJkZWwiLDM2OiJob21lIiwzNToiZW5kIiwxMzoiZW50ZXIi LDI3OiJlc2MiLDk6InRhYiJ9LGVuYWJsZTpmdW5jdGlvbigpe2lmKHRoaXMuZGlzYWJsZWQpe2lm KHRoaXMuaXNLZXlkb3duKCkpe3RoaXMuZWwub24oImtleWRvd24iLHRoaXMucmVsYXksdGhpcyl9 ZWxzZXt0aGlzLmVsLm9uKCJrZXlkb3duIix0aGlzLnByZXBhcmVFdmVudCx0aGlzKTt0aGlzLmVs Lm9uKCJrZXlwcmVzcyIsdGhpcy5yZWxheSx0aGlzKX10aGlzLmRpc2FibGVkPWZhbHNlfX0sZGlz YWJsZTpmdW5jdGlvbigpe2lmKCF0aGlzLmRpc2FibGVkKXtpZih0aGlzLmlzS2V5ZG93bigpKXt0 aGlzLmVsLnVuKCJrZXlkb3duIix0aGlzLnJlbGF5LHRoaXMpfWVsc2V7dGhpcy5lbC51bigia2V5 ZG93biIsdGhpcy5wcmVwYXJlRXZlbnQsdGhpcyk7dGhpcy5lbC51bigia2V5cHJlc3MiLHRoaXMu cmVsYXksdGhpcyl9dGhpcy5kaXNhYmxlZD10cnVlfX0sc2V0RGlzYWJsZWQ6ZnVuY3Rpb24oYSl7 dGhpc1thPyJkaXNhYmxlIjoiZW5hYmxlIl0oKX0saXNLZXlkb3duOmZ1bmN0aW9uKCl7cmV0dXJu IHRoaXMuZm9yY2VLZXlEb3dufHxFeHQuRXZlbnRNYW5hZ2VyLnVzZUtleWRvd259fTtFeHQuS2V5 TWFwPWZ1bmN0aW9uKGMsYixhKXt0aGlzLmVsPUV4dC5nZXQoYyk7dGhpcy5ldmVudE5hbWU9YXx8 ImtleWRvd24iO3RoaXMuYmluZGluZ3M9W107aWYoYil7dGhpcy5hZGRCaW5kaW5nKGIpfXRoaXMu ZW5hYmxlKCl9O0V4dC5LZXlNYXAucHJvdG90eXBlPXtzdG9wRXZlbnQ6ZmFsc2UsYWRkQmluZGlu ZzpmdW5jdGlvbihiKXtpZihFeHQuaXNBcnJheShiKSl7RXh0LmVhY2goYixmdW5jdGlvbihqKXt0 aGlzLmFkZEJpbmRpbmcoail9LHRoaXMpO3JldHVybn12YXIgaz1iLmtleSxnPWIuZm58fGIuaGFu ZGxlcixsPWIuc2NvcGU7aWYoYi5zdG9wRXZlbnQpe3RoaXMuc3RvcEV2ZW50PWIuc3RvcEV2ZW50 fWlmKHR5cGVvZiBrPT0ic3RyaW5nIil7dmFyIGg9W107dmFyIGU9ay50b1VwcGVyQ2FzZSgpO2Zv cih2YXIgYz0wLGQ9ZS5sZW5ndGg7YzxkO2MrKyl7aC5wdXNoKGUuY2hhckNvZGVBdChjKSl9az1o fXZhciBhPUV4dC5pc0FycmF5KGspO3ZhciBpPWZ1bmN0aW9uKG8pe2lmKHRoaXMuY2hlY2tNb2Rp ZmllcnMoYixvKSl7dmFyIG09by5nZXRLZXkoKTtpZihhKXtmb3IodmFyIG49MCxqPWsubGVuZ3Ro O248ajtuKyspe2lmKGtbbl09PW0pe2lmKHRoaXMuc3RvcEV2ZW50KXtvLnN0b3BFdmVudCgpfWcu Y2FsbChsfHx3aW5kb3csbSxvKTtyZXR1cm59fX1lbHNle2lmKG09PWspe2lmKHRoaXMuc3RvcEV2 ZW50KXtvLnN0b3BFdmVudCgpfWcuY2FsbChsfHx3aW5kb3csbSxvKX19fX07dGhpcy5iaW5kaW5n cy5wdXNoKGkpfSxjaGVja01vZGlmaWVyczpmdW5jdGlvbihiLGgpe3ZhciBqLGQsZz1bInNoaWZ0 IiwiY3RybCIsImFsdCJdO2Zvcih2YXIgYz0wLGE9Zy5sZW5ndGg7YzxhOysrYyl7ZD1nW2NdO2o9 YltkXTtpZighKGo9PT11bmRlZmluZWR8fChqPT09aFtkKyJLZXkiXSkpKXtyZXR1cm4gZmFsc2V9 fXJldHVybiB0cnVlfSxvbjpmdW5jdGlvbihiLGQsYyl7dmFyIGgsYSxlLGc7aWYodHlwZW9mIGI9 PSJvYmplY3QiJiYhRXh0LmlzQXJyYXkoYikpe2g9Yi5rZXk7YT1iLnNoaWZ0O2U9Yi5jdHJsO2c9 Yi5hbHR9ZWxzZXtoPWJ9dGhpcy5hZGRCaW5kaW5nKHtrZXk6aCxzaGlmdDphLGN0cmw6ZSxhbHQ6 ZyxmbjpkLHNjb3BlOmN9KX0saGFuZGxlS2V5RG93bjpmdW5jdGlvbihnKXtpZih0aGlzLmVuYWJs ZWQpe3ZhciBjPXRoaXMuYmluZGluZ3M7Zm9yKHZhciBkPTAsYT1jLmxlbmd0aDtkPGE7ZCsrKXtj W2RdLmNhbGwodGhpcyxnKX19fSxpc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmFi bGVkfSxlbmFibGU6ZnVuY3Rpb24oKXtpZighdGhpcy5lbmFibGVkKXt0aGlzLmVsLm9uKHRoaXMu ZXZlbnROYW1lLHRoaXMuaGFuZGxlS2V5RG93bix0aGlzKTt0aGlzLmVuYWJsZWQ9dHJ1ZX19LGRp c2FibGU6ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWQpe3RoaXMuZWwucmVtb3ZlTGlzdGVuZXIo dGhpcy5ldmVudE5hbWUsdGhpcy5oYW5kbGVLZXlEb3duLHRoaXMpO3RoaXMuZW5hYmxlZD1mYWxz ZX19LHNldERpc2FibGVkOmZ1bmN0aW9uKGEpe3RoaXNbYT8iZGlzYWJsZSI6ImVuYWJsZSJdKCl9 fTtFeHQudXRpbC5UZXh0TWV0cmljcz1mdW5jdGlvbigpe3ZhciBhO3JldHVybnttZWFzdXJlOmZ1 bmN0aW9uKGIsYyxkKXtpZighYSl7YT1FeHQudXRpbC5UZXh0TWV0cmljcy5JbnN0YW5jZShiLGQp fWEuYmluZChiKTthLnNldEZpeGVkV2lkdGgoZHx8ImF1dG8iKTtyZXR1cm4gYS5nZXRTaXplKGMp fSxjcmVhdGVJbnN0YW5jZTpmdW5jdGlvbihiLGMpe3JldHVybiBFeHQudXRpbC5UZXh0TWV0cmlj cy5JbnN0YW5jZShiLGMpfX19KCk7RXh0LnV0aWwuVGV4dE1ldHJpY3MuSW5zdGFuY2U9ZnVuY3Rp b24oYixkKXt2YXIgYz1uZXcgRXh0LkVsZW1lbnQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2 IikpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYy5kb20pO2MucG9zaXRpb24oImFic29sdXRl Iik7Yy5zZXRMZWZ0VG9wKC0xMDAwLC0xMDAwKTtjLmhpZGUoKTtpZihkKXtjLnNldFdpZHRoKGQp fXZhciBhPXtnZXRTaXplOmZ1bmN0aW9uKGcpe2MudXBkYXRlKGcpO3ZhciBlPWMuZ2V0U2l6ZSgp O2MudXBkYXRlKCIiKTtyZXR1cm4gZX0sYmluZDpmdW5jdGlvbihlKXtjLnNldFN0eWxlKEV4dC5m bHkoZSkuZ2V0U3R5bGVzKCJmb250LXNpemUiLCJmb250LXN0eWxlIiwiZm9udC13ZWlnaHQiLCJm b250LWZhbWlseSIsImxpbmUtaGVpZ2h0IiwidGV4dC10cmFuc2Zvcm0iLCJsZXR0ZXItc3BhY2lu ZyIpKX0sc2V0Rml4ZWRXaWR0aDpmdW5jdGlvbihlKXtjLnNldFdpZHRoKGUpfSxnZXRXaWR0aDpm dW5jdGlvbihlKXtjLmRvbS5zdHlsZS53aWR0aD0iYXV0byI7cmV0dXJuIHRoaXMuZ2V0U2l6ZShl KS53aWR0aH0sZ2V0SGVpZ2h0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldFNpemUoZSkuaGVp Z2h0fX07YS5iaW5kKGIpO3JldHVybiBhfTtFeHQuRWxlbWVudC5hZGRNZXRob2RzKHtnZXRUZXh0 V2lkdGg6ZnVuY3Rpb24oYyxiLGEpe3JldHVybihFeHQudXRpbC5UZXh0TWV0cmljcy5tZWFzdXJl KHRoaXMuZG9tLEV4dC52YWx1ZShjLHRoaXMuZG9tLmlubmVySFRNTCx0cnVlKSkud2lkdGgpLmNv bnN0cmFpbihifHwwLGF8fDEwMDAwMDApfX0pO0V4dC51dGlsLkNvb2tpZXM9e3NldDpmdW5jdGlv bihjLGUpe3ZhciBhPWFyZ3VtZW50czt2YXIgaT1hcmd1bWVudHMubGVuZ3RoO3ZhciBiPShpPjIp P2FbMl06bnVsbDt2YXIgaD0oaT4zKT9hWzNdOiIvIjt2YXIgZD0oaT40KT9hWzRdOm51bGw7dmFy IGc9KGk+NSk/YVs1XTpmYWxzZTtkb2N1bWVudC5jb29raWU9YysiPSIrZXNjYXBlKGUpKygoYj09 PW51bGwpPyIiOigiOyBleHBpcmVzPSIrYi50b0dNVFN0cmluZygpKSkrKChoPT09bnVsbCk/IiI6 KCI7IHBhdGg9IitoKSkrKChkPT09bnVsbCk/IiI6KCI7IGRvbWFpbj0iK2QpKSsoKGc9PT10cnVl KT8iOyBzZWN1cmUiOiIiKX0sZ2V0OmZ1bmN0aW9uKGQpe3ZhciBiPWQrIj0iO3ZhciBnPWIubGVu Z3RoO3ZhciBhPWRvY3VtZW50LmNvb2tpZS5sZW5ndGg7dmFyIGU9MDt2YXIgYz0wO3doaWxlKGU8 YSl7Yz1lK2c7aWYoZG9jdW1lbnQuY29va2llLnN1YnN0cmluZyhlLGMpPT1iKXtyZXR1cm4gRXh0 LnV0aWwuQ29va2llcy5nZXRDb29raWVWYWwoYyl9ZT1kb2N1bWVudC5jb29raWUuaW5kZXhPZigi ICIsZSkrMTtpZihlPT09MCl7YnJlYWt9fXJldHVybiBudWxsfSxjbGVhcjpmdW5jdGlvbihhKXtp ZihFeHQudXRpbC5Db29raWVzLmdldChhKSl7ZG9jdW1lbnQuY29va2llPWErIj07IGV4cGlyZXM9 VGh1LCAwMS1KYW4tNzAgMDA6MDA6MDEgR01UIn19LGdldENvb2tpZVZhbDpmdW5jdGlvbihiKXt2 YXIgYT1kb2N1bWVudC5jb29raWUuaW5kZXhPZigiOyIsYik7aWYoYT09LTEpe2E9ZG9jdW1lbnQu Y29va2llLmxlbmd0aH1yZXR1cm4gdW5lc2NhcGUoZG9jdW1lbnQuY29va2llLnN1YnN0cmluZyhi LGEpKX19O0V4dC5oYW5kbGVFcnJvcj1mdW5jdGlvbihhKXt0aHJvdyBhfTtFeHQuRXJyb3I9ZnVu Y3Rpb24oYSl7dGhpcy5tZXNzYWdlPSh0aGlzLmxhbmdbYV0pP3RoaXMubGFuZ1thXTphfTtFeHQu RXJyb3IucHJvdG90eXBlPW5ldyBFcnJvcigpO0V4dC5hcHBseShFeHQuRXJyb3IucHJvdG90eXBl LHtsYW5nOnt9LG5hbWU6IkV4dC5FcnJvciIsZ2V0TmFtZTpmdW5jdGlvbigpe3JldHVybiB0aGlz Lm5hbWV9LGdldE1lc3NhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlfSx0b0pzb246 ZnVuY3Rpb24oKXtyZXR1cm4gRXh0LmVuY29kZSh0aGlzKX19KTtFeHQuQ29tcG9uZW50TWdyPWZ1 bmN0aW9uKCl7dmFyIGM9bmV3IEV4dC51dGlsLk1peGVkQ29sbGVjdGlvbigpO3ZhciBiPXt9O3Zh ciBhPXt9O3JldHVybntyZWdpc3RlcjpmdW5jdGlvbihkKXtjLmFkZChkKX0sdW5yZWdpc3Rlcjpm dW5jdGlvbihkKXtjLnJlbW92ZShkKX0sZ2V0OmZ1bmN0aW9uKGQpe3JldHVybiBjLmdldChkKX0s b25BdmFpbGFibGU6ZnVuY3Rpb24oZyxlLGQpe2Mub24oImFkZCIsZnVuY3Rpb24oaCxpKXtpZihp LmlkPT1nKXtlLmNhbGwoZHx8aSxpKTtjLnVuKCJhZGQiLGUsZCl9fSl9LGFsbDpjLGlzUmVnaXN0 ZXJlZDpmdW5jdGlvbihkKXtyZXR1cm4gYltkXSE9PXVuZGVmaW5lZH0scmVnaXN0ZXJUeXBlOmZ1 bmN0aW9uKGUsZCl7YltlXT1kO2QueHR5cGU9ZX0sY3JlYXRlOmZ1bmN0aW9uKGQsZSl7cmV0dXJu IGQucmVuZGVyP2Q6bmV3IGJbZC54dHlwZXx8ZV0oZCl9LHJlZ2lzdGVyUGx1Z2luOmZ1bmN0aW9u KGUsZCl7YVtlXT1kO2QucHR5cGU9ZX0sY3JlYXRlUGx1Z2luOmZ1bmN0aW9uKGQsZSl7cmV0dXJu IG5ldyBhW2QucHR5cGV8fGVdKGQpfX19KCk7RXh0LnJlZz1FeHQuQ29tcG9uZW50TWdyLnJlZ2lz dGVyVHlwZTtFeHQucHJlZz1FeHQuQ29tcG9uZW50TWdyLnJlZ2lzdGVyUGx1Z2luO0V4dC5jcmVh dGU9RXh0LkNvbXBvbmVudE1nci5jcmVhdGU7RXh0LkNvbXBvbmVudD1mdW5jdGlvbihiKXtiPWJ8 fHt9O2lmKGIuaW5pdGlhbENvbmZpZyl7aWYoYi5pc0FjdGlvbil7dGhpcy5iYXNlQWN0aW9uPWJ9 Yj1iLmluaXRpYWxDb25maWd9ZWxzZXtpZihiLnRhZ05hbWV8fGIuZG9tfHxFeHQuaXNTdHJpbmco Yikpe2I9e2FwcGx5VG86YixpZDpiLmlkfHxifX19dGhpcy5pbml0aWFsQ29uZmlnPWI7RXh0LmFw cGx5KHRoaXMsYik7dGhpcy5hZGRFdmVudHMoImRpc2FibGUiLCJlbmFibGUiLCJiZWZvcmVzaG93 Iiwic2hvdyIsImJlZm9yZWhpZGUiLCJoaWRlIiwiYmVmb3JlcmVuZGVyIiwicmVuZGVyIiwiYWZ0 ZXJyZW5kZXIiLCJiZWZvcmVkZXN0cm95IiwiZGVzdHJveSIsImJlZm9yZXN0YXRlcmVzdG9yZSIs InN0YXRlcmVzdG9yZSIsImJlZm9yZXN0YXRlc2F2ZSIsInN0YXRlc2F2ZSIpO3RoaXMuZ2V0SWQo KTtFeHQuQ29tcG9uZW50TWdyLnJlZ2lzdGVyKHRoaXMpO0V4dC5Db21wb25lbnQuc3VwZXJjbGFz cy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO2lmKHRoaXMuYmFzZUFjdGlvbil7dGhpcy5iYXNlQWN0 aW9uLmFkZENvbXBvbmVudCh0aGlzKX10aGlzLmluaXRDb21wb25lbnQoKTtpZih0aGlzLnBsdWdp bnMpe2lmKEV4dC5pc0FycmF5KHRoaXMucGx1Z2lucykpe2Zvcih2YXIgYz0wLGE9dGhpcy5wbHVn aW5zLmxlbmd0aDtjPGE7YysrKXt0aGlzLnBsdWdpbnNbY109dGhpcy5pbml0UGx1Z2luKHRoaXMu cGx1Z2luc1tjXSl9fWVsc2V7dGhpcy5wbHVnaW5zPXRoaXMuaW5pdFBsdWdpbih0aGlzLnBsdWdp bnMpfX1pZih0aGlzLnN0YXRlZnVsIT09ZmFsc2Upe3RoaXMuaW5pdFN0YXRlKGIpfWlmKHRoaXMu YXBwbHlUbyl7dGhpcy5hcHBseVRvTWFya3VwKHRoaXMuYXBwbHlUbyk7ZGVsZXRlIHRoaXMuYXBw bHlUb31lbHNle2lmKHRoaXMucmVuZGVyVG8pe3RoaXMucmVuZGVyKHRoaXMucmVuZGVyVG8pO2Rl bGV0ZSB0aGlzLnJlbmRlclRvfX19O0V4dC5Db21wb25lbnQuQVVUT19JRD0xMDAwO0V4dC5leHRl bmQoRXh0LkNvbXBvbmVudCxFeHQudXRpbC5PYnNlcnZhYmxlLHtkaXNhYmxlZDpmYWxzZSxoaWRk ZW46ZmFsc2UsYXV0b0VsOiJkaXYiLGRpc2FibGVkQ2xhc3M6IngtaXRlbS1kaXNhYmxlZCIsYWxs b3dEb21Nb3ZlOnRydWUsYXV0b1Nob3c6ZmFsc2UsaGlkZU1vZGU6ImRpc3BsYXkiLGhpZGVQYXJl bnQ6ZmFsc2UscmVuZGVyZWQ6ZmFsc2UsY3R5cGU6IkV4dC5Db21wb25lbnQiLGFjdGlvbk1vZGU6 ImVsIixnZXRBY3Rpb25FbDpmdW5jdGlvbigpe3JldHVybiB0aGlzW3RoaXMuYWN0aW9uTW9kZV19 LGluaXRQbHVnaW46ZnVuY3Rpb24oYSl7aWYoYS5wdHlwZSYmIUV4dC5pc0Z1bmN0aW9uKGEuaW5p dCkpe2E9RXh0LkNvbXBvbmVudE1nci5jcmVhdGVQbHVnaW4oYSl9ZWxzZXtpZihFeHQuaXNTdHJp bmcoYSkpe2E9RXh0LkNvbXBvbmVudE1nci5jcmVhdGVQbHVnaW4oe3B0eXBlOmF9KX19YS5pbml0 KHRoaXMpO3JldHVybiBhfSxpbml0Q29tcG9uZW50OkV4dC5lbXB0eUZuLHJlbmRlcjpmdW5jdGlv bihiLGEpe2lmKCF0aGlzLnJlbmRlcmVkJiZ0aGlzLmZpcmVFdmVudCgiYmVmb3JlcmVuZGVyIix0 aGlzKSE9PWZhbHNlKXtpZighYiYmdGhpcy5lbCl7dGhpcy5lbD1FeHQuZ2V0KHRoaXMuZWwpO2I9 dGhpcy5lbC5kb20ucGFyZW50Tm9kZTt0aGlzLmFsbG93RG9tTW92ZT1mYWxzZX10aGlzLmNvbnRh aW5lcj1FeHQuZ2V0KGIpO2lmKHRoaXMuY3RDbHMpe3RoaXMuY29udGFpbmVyLmFkZENsYXNzKHRo aXMuY3RDbHMpfXRoaXMucmVuZGVyZWQ9dHJ1ZTtpZihhIT09dW5kZWZpbmVkKXtpZihFeHQuaXNO dW1iZXIoYSkpe2E9dGhpcy5jb250YWluZXIuZG9tLmNoaWxkTm9kZXNbYV19ZWxzZXthPUV4dC5n ZXREb20oYSl9fXRoaXMub25SZW5kZXIodGhpcy5jb250YWluZXIsYXx8bnVsbCk7aWYodGhpcy5h dXRvU2hvdyl7dGhpcy5lbC5yZW1vdmVDbGFzcyhbIngtaGlkZGVuIiwieC1oaWRlLSIrdGhpcy5o aWRlTW9kZV0pfWlmKHRoaXMuY2xzKXt0aGlzLmVsLmFkZENsYXNzKHRoaXMuY2xzKTtkZWxldGUg dGhpcy5jbHN9aWYodGhpcy5zdHlsZSl7dGhpcy5lbC5hcHBseVN0eWxlcyh0aGlzLnN0eWxlKTtk ZWxldGUgdGhpcy5zdHlsZX1pZih0aGlzLm92ZXJDbHMpe3RoaXMuZWwuYWRkQ2xhc3NPbk92ZXIo dGhpcy5vdmVyQ2xzKX10aGlzLmZpcmVFdmVudCgicmVuZGVyIix0aGlzKTt0aGlzLmFmdGVyUmVu ZGVyKHRoaXMuY29udGFpbmVyKTtpZih0aGlzLmhpZGRlbil7dGhpcy5kb0hpZGUoKX1pZih0aGlz LmRpc2FibGVkKXt0aGlzLmRpc2FibGUodHJ1ZSl9aWYodGhpcy5zdGF0ZWZ1bCE9PWZhbHNlKXt0 aGlzLmluaXRTdGF0ZUV2ZW50cygpfXRoaXMuaW5pdFJlZigpO3RoaXMuZmlyZUV2ZW50KCJhZnRl cnJlbmRlciIsdGhpcyl9cmV0dXJuIHRoaXN9LGluaXRSZWY6ZnVuY3Rpb24oKXtpZih0aGlzLnJl Zil7dmFyIGQ9dGhpcy5yZWYuc3BsaXQoIi8iKTt2YXIgYz1kLmxlbmd0aCxiPTA7dmFyIGE9dGhp czt3aGlsZShiPGMpe2lmKGEub3duZXJDdCl7YT1hLm93bmVyQ3R9YisrfWFbZFstLWJdXT10aGlz fX0saW5pdFN0YXRlOmZ1bmN0aW9uKGEpe2lmKEV4dC5zdGF0ZS5NYW5hZ2VyKXt2YXIgYz10aGlz LmdldFN0YXRlSWQoKTtpZihjKXt2YXIgYj1FeHQuc3RhdGUuTWFuYWdlci5nZXQoYyk7aWYoYil7 aWYodGhpcy5maXJlRXZlbnQoImJlZm9yZXN0YXRlcmVzdG9yZSIsdGhpcyxiKSE9PWZhbHNlKXt0 aGlzLmFwcGx5U3RhdGUoYik7dGhpcy5maXJlRXZlbnQoInN0YXRlcmVzdG9yZSIsdGhpcyxiKX19 fX19LGdldFN0YXRlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGF0ZUlkfHwoKHRoaXMuaWQu aW5kZXhPZigiZXh0LWNvbXAtIik9PTB8fHRoaXMuaWQuaW5kZXhPZigiZXh0LWdlbiIpPT0wKT9u dWxsOnRoaXMuaWQpfSxpbml0U3RhdGVFdmVudHM6ZnVuY3Rpb24oKXtpZih0aGlzLnN0YXRlRXZl bnRzKXtmb3IodmFyIGE9MCxiO2I9dGhpcy5zdGF0ZUV2ZW50c1thXTthKyspe3RoaXMub24oYix0 aGlzLnNhdmVTdGF0ZSx0aGlzLHtkZWxheToxMDB9KX19fSxhcHBseVN0YXRlOmZ1bmN0aW9uKGIs YSl7aWYoYil7RXh0LmFwcGx5KHRoaXMsYil9fSxnZXRTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBu dWxsfSxzYXZlU3RhdGU6ZnVuY3Rpb24oKXtpZihFeHQuc3RhdGUuTWFuYWdlciYmdGhpcy5zdGF0 ZWZ1bCE9PWZhbHNlKXt2YXIgYj10aGlzLmdldFN0YXRlSWQoKTtpZihiKXt2YXIgYT10aGlzLmdl dFN0YXRlKCk7aWYodGhpcy5maXJlRXZlbnQoImJlZm9yZXN0YXRlc2F2ZSIsdGhpcyxhKSE9PWZh bHNlKXtFeHQuc3RhdGUuTWFuYWdlci5zZXQoYixhKTt0aGlzLmZpcmVFdmVudCgic3RhdGVzYXZl Iix0aGlzLGEpfX19fSxhcHBseVRvTWFya3VwOmZ1bmN0aW9uKGEpe3RoaXMuYWxsb3dEb21Nb3Zl PWZhbHNlO3RoaXMuZWw9RXh0LmdldChhKTt0aGlzLnJlbmRlcih0aGlzLmVsLmRvbS5wYXJlbnRO b2RlKX0sYWRkQ2xhc3M6ZnVuY3Rpb24oYSl7aWYodGhpcy5lbCl7dGhpcy5lbC5hZGRDbGFzcyhh KX1lbHNle3RoaXMuY2xzPXRoaXMuY2xzP3RoaXMuY2xzKyIgIithOmF9cmV0dXJuIHRoaXN9LHJl bW92ZUNsYXNzOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWwpe3RoaXMuZWwucmVtb3ZlQ2xhc3MoYSl9 ZWxzZXtpZih0aGlzLmNscyl7dGhpcy5jbHM9dGhpcy5jbHMuc3BsaXQoIiAiKS5yZW1vdmUoYSku am9pbigiICIpfX1yZXR1cm4gdGhpc30sb25SZW5kZXI6ZnVuY3Rpb24oYixhKXtpZighdGhpcy5l bCYmdGhpcy5hdXRvRWwpe2lmKEV4dC5pc1N0cmluZyh0aGlzLmF1dG9FbCkpe3RoaXMuZWw9ZG9j dW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmF1dG9FbCl9ZWxzZXt2YXIgYz1kb2N1bWVudC5jcmVh dGVFbGVtZW50KCJkaXYiKTtFeHQuRG9tSGVscGVyLm92ZXJ3cml0ZShjLHRoaXMuYXV0b0VsKTt0 aGlzLmVsPWMuZmlyc3RDaGlsZH1pZighdGhpcy5lbC5pZCl7dGhpcy5lbC5pZD10aGlzLmdldElk KCl9fWlmKHRoaXMuZWwpe3RoaXMuZWw9RXh0LmdldCh0aGlzLmVsKTtpZih0aGlzLmFsbG93RG9t TW92ZSE9PWZhbHNlKXtiLmRvbS5pbnNlcnRCZWZvcmUodGhpcy5lbC5kb20sYSl9fX0sZ2V0QXV0 b0NyZWF0ZTpmdW5jdGlvbigpe3ZhciBhPUV4dC5pc09iamVjdCh0aGlzLmF1dG9DcmVhdGUpP3Ro aXMuYXV0b0NyZWF0ZTpFeHQuYXBwbHkoe30sdGhpcy5kZWZhdWx0QXV0b0NyZWF0ZSk7aWYodGhp cy5pZCYmIWEuaWQpe2EuaWQ9dGhpcy5pZH1yZXR1cm4gYX0sYWZ0ZXJSZW5kZXI6RXh0LmVtcHR5 Rm4sZGVzdHJveTpmdW5jdGlvbigpe2lmKHRoaXMuZmlyZUV2ZW50KCJiZWZvcmVkZXN0cm95Iix0 aGlzKSE9PWZhbHNlKXt0aGlzLmJlZm9yZURlc3Ryb3koKTtpZih0aGlzLnJlbmRlcmVkKXt0aGlz LmVsLnJlbW92ZUFsbExpc3RlbmVycygpO3RoaXMuZWwucmVtb3ZlKCk7aWYodGhpcy5hY3Rpb25N b2RlPT0iY29udGFpbmVyInx8dGhpcy5yZW1vdmVNb2RlPT0iY29udGFpbmVyIil7dGhpcy5jb250 YWluZXIucmVtb3ZlKCl9fXRoaXMub25EZXN0cm95KCk7RXh0LkNvbXBvbmVudE1nci51bnJlZ2lz dGVyKHRoaXMpO3RoaXMuZmlyZUV2ZW50KCJkZXN0cm95Iix0aGlzKTt0aGlzLnB1cmdlTGlzdGVu ZXJzKCl9fSxiZWZvcmVEZXN0cm95OkV4dC5lbXB0eUZuLG9uRGVzdHJveTpFeHQuZW1wdHlGbixn ZXRFbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsfSxnZXRJZDpmdW5jdGlvbigpe3JldHVybiB0 aGlzLmlkfHwodGhpcy5pZD0iZXh0LWNvbXAtIisoKytFeHQuQ29tcG9uZW50LkFVVE9fSUQpKX0s Z2V0SXRlbUlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlbUlkfHx0aGlzLmdldElkKCl9LGZv Y3VzOmZ1bmN0aW9uKGIsYSl7aWYoYSl7dGhpcy5mb2N1cy5kZWZlcihFeHQuaXNOdW1iZXIoYSk/ YToxMCx0aGlzLFtiLGZhbHNlXSk7cmV0dXJufWlmKHRoaXMucmVuZGVyZWQpe3RoaXMuZWwuZm9j dXMoKTtpZihiPT09dHJ1ZSl7dGhpcy5lbC5kb20uc2VsZWN0KCl9fXJldHVybiB0aGlzfSxibHVy OmZ1bmN0aW9uKCl7aWYodGhpcy5yZW5kZXJlZCl7dGhpcy5lbC5ibHVyKCl9cmV0dXJuIHRoaXN9 LGRpc2FibGU6ZnVuY3Rpb24oYSl7aWYodGhpcy5yZW5kZXJlZCl7dGhpcy5vbkRpc2FibGUoKX10 aGlzLmRpc2FibGVkPXRydWU7aWYoYSE9PXRydWUpe3RoaXMuZmlyZUV2ZW50KCJkaXNhYmxlIix0 aGlzKX1yZXR1cm4gdGhpc30sb25EaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5nZXRBY3Rpb25FbCgp LmFkZENsYXNzKHRoaXMuZGlzYWJsZWRDbGFzcyk7dGhpcy5lbC5kb20uZGlzYWJsZWQ9dHJ1ZX0s ZW5hYmxlOmZ1bmN0aW9uKCl7aWYodGhpcy5yZW5kZXJlZCl7dGhpcy5vbkVuYWJsZSgpfXRoaXMu ZGlzYWJsZWQ9ZmFsc2U7dGhpcy5maXJlRXZlbnQoImVuYWJsZSIsdGhpcyk7cmV0dXJuIHRoaXN9 LG9uRW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5nZXRBY3Rpb25FbCgpLnJlbW92ZUNsYXNzKHRoaXMu ZGlzYWJsZWRDbGFzcyk7dGhpcy5lbC5kb20uZGlzYWJsZWQ9ZmFsc2V9LHNldERpc2FibGVkOmZ1 bmN0aW9uKGEpe3JldHVybiB0aGlzW2E/ImRpc2FibGUiOiJlbmFibGUiXSgpfSxzaG93OmZ1bmN0 aW9uKCl7aWYodGhpcy5maXJlRXZlbnQoImJlZm9yZXNob3ciLHRoaXMpIT09ZmFsc2Upe3RoaXMu aGlkZGVuPWZhbHNlO2lmKHRoaXMuYXV0b1JlbmRlcil7dGhpcy5yZW5kZXIoRXh0LmlzQm9vbGVh bih0aGlzLmF1dG9SZW5kZXIpP0V4dC5nZXRCb2R5KCk6dGhpcy5hdXRvUmVuZGVyKX1pZih0aGlz LnJlbmRlcmVkKXt0aGlzLm9uU2hvdygpfXRoaXMuZmlyZUV2ZW50KCJzaG93Iix0aGlzKX1yZXR1 cm4gdGhpc30sb25TaG93OmZ1bmN0aW9uKCl7dGhpcy5nZXRWaXNpYmlsdHlFbCgpLnJlbW92ZUNs YXNzKCJ4LWhpZGUtIit0aGlzLmhpZGVNb2RlKX0saGlkZTpmdW5jdGlvbigpe2lmKHRoaXMuZmly ZUV2ZW50KCJiZWZvcmVoaWRlIix0aGlzKSE9PWZhbHNlKXt0aGlzLmRvSGlkZSgpO3RoaXMuZmly ZUV2ZW50KCJoaWRlIix0aGlzKX1yZXR1cm4gdGhpc30sZG9IaWRlOmZ1bmN0aW9uKCl7dGhpcy5o aWRkZW49dHJ1ZTtpZih0aGlzLnJlbmRlcmVkKXt0aGlzLm9uSGlkZSgpfX0sb25IaWRlOmZ1bmN0 aW9uKCl7dGhpcy5nZXRWaXNpYmlsdHlFbCgpLmFkZENsYXNzKCJ4LWhpZGUtIit0aGlzLmhpZGVN b2RlKX0sZ2V0VmlzaWJpbHR5RWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oaWRlUGFyZW50P3Ro aXMuY29udGFpbmVyOnRoaXMuZ2V0QWN0aW9uRWwoKX0sc2V0VmlzaWJsZTpmdW5jdGlvbihhKXty ZXR1cm4gdGhpc1thPyJzaG93IjoiaGlkZSJdKCl9LGlzVmlzaWJsZTpmdW5jdGlvbigpe3JldHVy biB0aGlzLnJlbmRlcmVkJiZ0aGlzLmdldFZpc2liaWx0eUVsKCkuaXNWaXNpYmxlKCl9LGNsb25l Q29uZmlnOmZ1bmN0aW9uKGIpe2I9Ynx8e307dmFyIGM9Yi5pZHx8RXh0LmlkKCk7dmFyIGE9RXh0 LmFwcGx5SWYoYix0aGlzLmluaXRpYWxDb25maWcpO2EuaWQ9YztyZXR1cm4gbmV3IHRoaXMuY29u c3RydWN0b3IoYSl9LGdldFhUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3Iu eHR5cGV9LGlzWFR5cGU6ZnVuY3Rpb24oYixhKXtpZihFeHQuaXNGdW5jdGlvbihiKSl7Yj1iLnh0 eXBlfWVsc2V7aWYoRXh0LmlzT2JqZWN0KGIpKXtiPWIuY29uc3RydWN0b3IueHR5cGV9fXJldHVy biAhYT8oIi8iK3RoaXMuZ2V0WFR5cGVzKCkrIi8iKS5pbmRleE9mKCIvIitiKyIvIikhPS0xOnRo aXMuY29uc3RydWN0b3IueHR5cGU9PWJ9LGdldFhUeXBlczpmdW5jdGlvbigpe3ZhciBhPXRoaXMu Y29uc3RydWN0b3I7aWYoIWEueHR5cGVzKXt2YXIgZD1bXSxiPXRoaXM7d2hpbGUoYiYmYi5jb25z dHJ1Y3Rvci54dHlwZSl7ZC51bnNoaWZ0KGIuY29uc3RydWN0b3IueHR5cGUpO2I9Yi5jb25zdHJ1 Y3Rvci5zdXBlcmNsYXNzfWEueHR5cGVDaGFpbj1kO2EueHR5cGVzPWQuam9pbigiLyIpfXJldHVy biBhLnh0eXBlc30sZmluZFBhcmVudEJ5OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLm93bmVy Q3Q7KGIhPW51bGwpJiYhYShiLHRoaXMpO2I9Yi5vd25lckN0KXt9cmV0dXJuIGJ8fG51bGx9LGZp bmRQYXJlbnRCeVR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIEV4dC5pc0Z1bmN0aW9uKGEpP3RoaXMu ZmluZFBhcmVudEJ5KGZ1bmN0aW9uKGIpe3JldHVybiBiLmNvbnN0cnVjdG9yPT09YX0pOnRoaXMu ZmluZFBhcmVudEJ5KGZ1bmN0aW9uKGIpe3JldHVybiBiLmNvbnN0cnVjdG9yLnh0eXBlPT09YX0p fSxnZXREb21Qb3NpdGlvbkVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UG9zaXRpb25FbD90 aGlzLmdldFBvc2l0aW9uRWwoKTp0aGlzLmdldEVsKCl9LHB1cmdlTGlzdGVuZXJzOmZ1bmN0aW9u KCl7RXh0LkNvbXBvbmVudC5zdXBlcmNsYXNzLnB1cmdlTGlzdGVuZXJzLmNhbGwodGhpcyk7aWYo dGhpcy5tb25zKXt0aGlzLm9uKCJiZWZvcmVkZXN0cm95Iix0aGlzLmNsZWFyTW9ucyx0aGlzLHtz aW5nbGU6dHJ1ZX0pfX0sY2xlYXJNb25zOmZ1bmN0aW9uKCl7RXh0LmVhY2godGhpcy5tb25zLGZ1 bmN0aW9uKGEpe2EuaXRlbS51bihhLmVuYW1lLGEuZm4sYS5zY29wZSl9LHRoaXMpO3RoaXMubW9u cz1bXX0sbW9uOmZ1bmN0aW9uKGcsYixkLGMsYSl7aWYoIXRoaXMubW9ucyl7dGhpcy5tb25zPVtd O3RoaXMub24oImJlZm9yZWRlc3Ryb3kiLHRoaXMuY2xlYXJNb25zLHRoaXMse3NpbmdsZTp0cnVl fSl9aWYoRXh0LmlzT2JqZWN0KGIpKXt2YXIgaj0vXig/OnNjb3BlfGRlbGF5fGJ1ZmZlcnxzaW5n bGV8c3RvcEV2ZW50fHByZXZlbnREZWZhdWx0fHN0b3BQcm9wYWdhdGlvbnxub3JtYWxpemVkfGFy Z3N8ZGVsZWdhdGUpJC87dmFyIGk9Yjtmb3IodmFyIGggaW4gaSl7aWYoai50ZXN0KGgpKXtjb250 aW51ZX1pZihFeHQuaXNGdW5jdGlvbihpW2hdKSl7dGhpcy5tb25zLnB1c2goe2l0ZW06ZyxlbmFt ZTpoLGZuOmlbaF0sc2NvcGU6aS5zY29wZX0pO2cub24oaCxpW2hdLGkuc2NvcGUsaSl9ZWxzZXt0 aGlzLm1vbnMucHVzaCh7aXRlbTpnLGVuYW1lOmgsZm46aVtoXSxzY29wZTppLnNjb3BlfSk7Zy5v bihoLGlbaF0pfX1yZXR1cm59dGhpcy5tb25zLnB1c2goe2l0ZW06ZyxlbmFtZTpiLGZuOmQsc2Nv cGU6Y30pO2cub24oYixkLGMsYSl9LG11bjpmdW5jdGlvbihoLGMsZyxlKXt2YXIgaixkO2Zvcih2 YXIgYj0wLGE9dGhpcy5tb25zLmxlbmd0aDtiPGE7KytiKXtkPXRoaXMubW9uc1tiXTtpZihoPT09 ZC5pdGVtJiZjPT1kLmVuYW1lJiZnPT09ZC5mbiYmZT09PWQuc2NvcGUpe3RoaXMubW9ucy5zcGxp Y2UoYiwxKTtoLnVuKGMsZyxlKTtqPXRydWU7YnJlYWt9fXJldHVybiBqfSxuZXh0U2libGluZzpm dW5jdGlvbigpe2lmKHRoaXMub3duZXJDdCl7dmFyIGE9dGhpcy5vd25lckN0Lml0ZW1zLmluZGV4 T2YodGhpcyk7aWYoYSE9LTEmJmErMTx0aGlzLm93bmVyQ3QuaXRlbXMuZ2V0Q291bnQoKSl7cmV0 dXJuIHRoaXMub3duZXJDdC5pdGVtcy5pdGVtQXQoYSsxKX19cmV0dXJuIG51bGx9LHByZXZpb3Vz U2libGluZzpmdW5jdGlvbigpe2lmKHRoaXMub3duZXJDdCl7dmFyIGE9dGhpcy5vd25lckN0Lml0 ZW1zLmluZGV4T2YodGhpcyk7aWYoYT4wKXtyZXR1cm4gdGhpcy5vd25lckN0Lml0ZW1zLml0ZW1B dChhLTEpfX1yZXR1cm4gbnVsbH0sZ2V0QnViYmxlVGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRo aXMub3duZXJDdH19KTtFeHQucmVnKCJjb21wb25lbnQiLEV4dC5Db21wb25lbnQpO0V4dC5BY3Rp b249ZnVuY3Rpb24oYSl7dGhpcy5pbml0aWFsQ29uZmlnPWE7dGhpcy5pdGVtSWQ9YS5pdGVtSWQ9 KGEuaXRlbUlkfHxhLmlkfHxFeHQuaWQoKSk7dGhpcy5pdGVtcz1bXX07RXh0LkFjdGlvbi5wcm90 b3R5cGU9e2lzQWN0aW9uOnRydWUsc2V0VGV4dDpmdW5jdGlvbihhKXt0aGlzLmluaXRpYWxDb25m aWcudGV4dD1hO3RoaXMuY2FsbEVhY2goInNldFRleHQiLFthXSl9LGdldFRleHQ6ZnVuY3Rpb24o KXtyZXR1cm4gdGhpcy5pbml0aWFsQ29uZmlnLnRleHR9LHNldEljb25DbGFzczpmdW5jdGlvbihh KXt0aGlzLmluaXRpYWxDb25maWcuaWNvbkNscz1hO3RoaXMuY2FsbEVhY2goInNldEljb25DbGFz cyIsW2FdKX0sZ2V0SWNvbkNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdGlhbENvbmZp Zy5pY29uQ2xzfSxzZXREaXNhYmxlZDpmdW5jdGlvbihhKXt0aGlzLmluaXRpYWxDb25maWcuZGlz YWJsZWQ9YTt0aGlzLmNhbGxFYWNoKCJzZXREaXNhYmxlZCIsW2FdKX0sZW5hYmxlOmZ1bmN0aW9u KCl7dGhpcy5zZXREaXNhYmxlZChmYWxzZSl9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLnNldERp c2FibGVkKHRydWUpfSxpc0Rpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdGlhbENv bmZpZy5kaXNhYmxlZH0sc2V0SGlkZGVuOmZ1bmN0aW9uKGEpe3RoaXMuaW5pdGlhbENvbmZpZy5o aWRkZW49YTt0aGlzLmNhbGxFYWNoKCJzZXRWaXNpYmxlIixbIWFdKX0sc2hvdzpmdW5jdGlvbigp e3RoaXMuc2V0SGlkZGVuKGZhbHNlKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuc2V0SGlkZGVuKHRy dWUpfSxpc0hpZGRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXRpYWxDb25maWcuaGlkZGVu fSxzZXRIYW5kbGVyOmZ1bmN0aW9uKGIsYSl7dGhpcy5pbml0aWFsQ29uZmlnLmhhbmRsZXI9Yjt0 aGlzLmluaXRpYWxDb25maWcuc2NvcGU9YTt0aGlzLmNhbGxFYWNoKCJzZXRIYW5kbGVyIixbYixh XSl9LGVhY2g6ZnVuY3Rpb24oYixhKXtFeHQuZWFjaCh0aGlzLml0ZW1zLGIsYSl9LGNhbGxFYWNo OmZ1bmN0aW9uKGUsYil7dmFyIGQ9dGhpcy5pdGVtcztmb3IodmFyIGM9MCxhPWQubGVuZ3RoO2M8 YTtjKyspe2RbY11bZV0uYXBwbHkoZFtjXSxiKX19LGFkZENvbXBvbmVudDpmdW5jdGlvbihhKXt0 aGlzLml0ZW1zLnB1c2goYSk7YS5vbigiZGVzdHJveSIsdGhpcy5yZW1vdmVDb21wb25lbnQsdGhp cyl9LHJlbW92ZUNvbXBvbmVudDpmdW5jdGlvbihhKXt0aGlzLml0ZW1zLnJlbW92ZShhKX0sZXhl Y3V0ZTpmdW5jdGlvbigpe3RoaXMuaW5pdGlhbENvbmZpZy5oYW5kbGVyLmFwcGx5KHRoaXMuaW5p dGlhbENvbmZpZy5zY29wZXx8d2luZG93LGFyZ3VtZW50cyl9fTsoZnVuY3Rpb24oKXtFeHQuTGF5 ZXI9ZnVuY3Rpb24oZCxjKXtkPWR8fHt9O3ZhciBlPUV4dC5Eb21IZWxwZXI7dmFyIGg9ZC5wYXJl bnRFbCxnPWg/RXh0LmdldERvbShoKTpkb2N1bWVudC5ib2R5O2lmKGMpe3RoaXMuZG9tPUV4dC5n ZXREb20oYyl9aWYoIXRoaXMuZG9tKXt2YXIgaT1kLmRofHx7dGFnOiJkaXYiLGNsczoieC1sYXll ciJ9O3RoaXMuZG9tPWUuYXBwZW5kKGcsaSl9aWYoZC5jbHMpe3RoaXMuYWRkQ2xhc3MoZC5jbHMp fXRoaXMuY29uc3RyYWluPWQuY29uc3RyYWluIT09ZmFsc2U7dGhpcy5zZXRWaXNpYmlsaXR5TW9k ZShFeHQuRWxlbWVudC5WSVNJQklMSVRZKTtpZihkLmlkKXt0aGlzLmlkPXRoaXMuZG9tLmlkPWQu aWR9ZWxzZXt0aGlzLmlkPUV4dC5pZCh0aGlzLmRvbSl9dGhpcy56aW5kZXg9ZC56aW5kZXh8fHRo aXMuZ2V0WkluZGV4KCk7dGhpcy5wb3NpdGlvbigiYWJzb2x1dGUiLHRoaXMuemluZGV4KTtpZihk LnNoYWRvdyl7dGhpcy5zaGFkb3dPZmZzZXQ9ZC5zaGFkb3dPZmZzZXR8fDQ7dGhpcy5zaGFkb3c9 bmV3IEV4dC5TaGFkb3coe29mZnNldDp0aGlzLnNoYWRvd09mZnNldCxtb2RlOmQuc2hhZG93fSl9 ZWxzZXt0aGlzLnNoYWRvd09mZnNldD0wfXRoaXMudXNlU2hpbT1kLnNoaW0hPT1mYWxzZSYmRXh0 LnVzZVNoaW1zO3RoaXMudXNlRGlzcGxheT1kLnVzZURpc3BsYXk7dGhpcy5oaWRlKCl9O3ZhciBh PUV4dC5FbGVtZW50LnByb3RvdHlwZTt2YXIgYj1bXTtFeHQuZXh0ZW5kKEV4dC5MYXllcixFeHQu RWxlbWVudCx7Z2V0WkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuemluZGV4fHxwYXJzZUlu dCgodGhpcy5nZXRTaGltKCl8fHRoaXMpLmdldFN0eWxlKCJ6LWluZGV4IiksMTApfHwxMTAwMH0s Z2V0U2hpbTpmdW5jdGlvbigpe2lmKCF0aGlzLnVzZVNoaW0pe3JldHVybiBudWxsfWlmKHRoaXMu c2hpbSl7cmV0dXJuIHRoaXMuc2hpbX12YXIgZD1iLnNoaWZ0KCk7aWYoIWQpe2Q9dGhpcy5jcmVh dGVTaGltKCk7ZC5lbmFibGVEaXNwbGF5TW9kZSgiYmxvY2siKTtkLmRvbS5zdHlsZS5kaXNwbGF5 PSJub25lIjtkLmRvbS5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIn12YXIgYz10aGlzLmRvbS5w YXJlbnROb2RlO2lmKGQuZG9tLnBhcmVudE5vZGUhPWMpe2MuaW5zZXJ0QmVmb3JlKGQuZG9tLHRo aXMuZG9tKX1kLnNldFN0eWxlKCJ6LWluZGV4Iix0aGlzLmdldFpJbmRleCgpLTIpO3RoaXMuc2hp bT1kO3JldHVybiBkfSxoaWRlU2hpbTpmdW5jdGlvbigpe2lmKHRoaXMuc2hpbSl7dGhpcy5zaGlt LnNldERpc3BsYXllZChmYWxzZSk7Yi5wdXNoKHRoaXMuc2hpbSk7ZGVsZXRlIHRoaXMuc2hpbX19 LGRpc2FibGVTaGFkb3c6ZnVuY3Rpb24oKXtpZih0aGlzLnNoYWRvdyl7dGhpcy5zaGFkb3dEaXNh YmxlZD10cnVlO3RoaXMuc2hhZG93LmhpZGUoKTt0aGlzLmxhc3RTaGFkb3dPZmZzZXQ9dGhpcy5z aGFkb3dPZmZzZXQ7dGhpcy5zaGFkb3dPZmZzZXQ9MH19LGVuYWJsZVNoYWRvdzpmdW5jdGlvbihj KXtpZih0aGlzLnNoYWRvdyl7dGhpcy5zaGFkb3dEaXNhYmxlZD1mYWxzZTt0aGlzLnNoYWRvd09m ZnNldD10aGlzLmxhc3RTaGFkb3dPZmZzZXQ7ZGVsZXRlIHRoaXMubGFzdFNoYWRvd09mZnNldDtp ZihjKXt0aGlzLnN5bmModHJ1ZSl9fX0sc3luYzpmdW5jdGlvbihjKXt2YXIgaz10aGlzLnNoYWRv dztpZighdGhpcy51cGRhdGluZyYmdGhpcy5pc1Zpc2libGUoKSYmKGt8fHRoaXMudXNlU2hpbSkp e3ZhciBnPXRoaXMuZ2V0U2hpbSgpO3ZhciBqPXRoaXMuZ2V0V2lkdGgoKSxlPXRoaXMuZ2V0SGVp Z2h0KCk7dmFyIGQ9dGhpcy5nZXRMZWZ0KHRydWUpLG09dGhpcy5nZXRUb3AodHJ1ZSk7aWYoayYm IXRoaXMuc2hhZG93RGlzYWJsZWQpe2lmKGMmJiFrLmlzVmlzaWJsZSgpKXtrLnNob3codGhpcyl9 ZWxzZXtrLnJlYWxpZ24oZCxtLGosZSl9aWYoZyl7aWYoYyl7Zy5zaG93KCl9dmFyIGk9ay5hZGp1 c3RzLG49Zy5kb20uc3R5bGU7bi5sZWZ0PShNYXRoLm1pbihkLGQraS5sKSkrInB4IjtuLnRvcD0o TWF0aC5taW4obSxtK2kudCkpKyJweCI7bi53aWR0aD0oaitpLncpKyJweCI7bi5oZWlnaHQ9KGUr aS5oKSsicHgifX1lbHNle2lmKGcpe2lmKGMpe2cuc2hvdygpfWcuc2V0U2l6ZShqLGUpO2cuc2V0 TGVmdFRvcChkLG0pfX19fSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5oaWRlU2hpbSgpO2lmKHRo aXMuc2hhZG93KXt0aGlzLnNoYWRvdy5oaWRlKCl9dGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtF eHQucmVtb3ZlTm9kZSh0aGlzLmRvbSk7RXh0LkVsZW1lbnQudW5jYWNoZSh0aGlzLmlkKX0scmVt b3ZlOmZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95KCl9LGJlZ2luVXBkYXRlOmZ1bmN0aW9uKCl7dGhp cy51cGRhdGluZz10cnVlfSxlbmRVcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0aW5nPWZhbHNl O3RoaXMuc3luYyh0cnVlKX0saGlkZVVuZGVyczpmdW5jdGlvbihjKXtpZih0aGlzLnNoYWRvdyl7 dGhpcy5zaGFkb3cuaGlkZSgpfXRoaXMuaGlkZVNoaW0oKX0sY29uc3RyYWluWFk6ZnVuY3Rpb24o KXtpZih0aGlzLmNvbnN0cmFpbil7dmFyIGo9RXh0LmxpYi5Eb20uZ2V0Vmlld1dpZHRoKCksZD1F eHQubGliLkRvbS5nZXRWaWV3SGVpZ2h0KCk7dmFyIG89RXh0LmdldERvYygpLmdldFNjcm9sbCgp O3ZhciBuPXRoaXMuZ2V0WFkoKTt2YXIgaz1uWzBdLGk9blsxXTt2YXIgYz10aGlzLnNoYWRvd09m ZnNldDt2YXIgbD10aGlzLmRvbS5vZmZzZXRXaWR0aCtjLGU9dGhpcy5kb20ub2Zmc2V0SGVpZ2h0 K2M7dmFyIGc9ZmFsc2U7aWYoKGsrbCk+aitvLmxlZnQpe2s9ai1sLWM7Zz10cnVlfWlmKChpK2Up PmQrby50b3Ape2k9ZC1lLWM7Zz10cnVlfWlmKGs8by5sZWZ0KXtrPW8ubGVmdDtnPXRydWV9aWYo aTxvLnRvcCl7aT1vLnRvcDtnPXRydWV9aWYoZyl7aWYodGhpcy5hdm9pZFkpe3ZhciBtPXRoaXMu YXZvaWRZO2lmKGk8PW0mJihpK2UpPj1tKXtpPW0tZS01fX1uPVtrLGldO3RoaXMuc3RvcmVYWShu KTthLnNldFhZLmNhbGwodGhpcyxuKTt0aGlzLnN5bmMoKX19cmV0dXJuIHRoaXN9LGlzVmlzaWJs ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpc2libGV9LHNob3dBY3Rpb246ZnVuY3Rpb24oKXt0 aGlzLnZpc2libGU9dHJ1ZTtpZih0aGlzLnVzZURpc3BsYXk9PT10cnVlKXt0aGlzLnNldERpc3Bs YXllZCgiIil9ZWxzZXtpZih0aGlzLmxhc3RYWSl7YS5zZXRYWS5jYWxsKHRoaXMsdGhpcy5sYXN0 WFkpfWVsc2V7aWYodGhpcy5sYXN0TFQpe2Euc2V0TGVmdFRvcC5jYWxsKHRoaXMsdGhpcy5sYXN0 TFRbMF0sdGhpcy5sYXN0TFRbMV0pfX19fSxoaWRlQWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy52aXNp YmxlPWZhbHNlO2lmKHRoaXMudXNlRGlzcGxheT09PXRydWUpe3RoaXMuc2V0RGlzcGxheWVkKGZh bHNlKX1lbHNle3RoaXMuc2V0TGVmdFRvcCgtMTAwMDAsLTEwMDAwKX19LHNldFZpc2libGU6ZnVu Y3Rpb24oaSxoLGssbCxqKXtpZihpKXt0aGlzLnNob3dBY3Rpb24oKX1pZihoJiZpKXt2YXIgZz1m dW5jdGlvbigpe3RoaXMuc3luYyh0cnVlKTtpZihsKXtsKCl9fS5jcmVhdGVEZWxlZ2F0ZSh0aGlz KTthLnNldFZpc2libGUuY2FsbCh0aGlzLHRydWUsdHJ1ZSxrLGcsail9ZWxzZXtpZighaSl7dGhp cy5oaWRlVW5kZXJzKHRydWUpfXZhciBnPWw7aWYoaCl7Zz1mdW5jdGlvbigpe3RoaXMuaGlkZUFj dGlvbigpO2lmKGwpe2woKX19LmNyZWF0ZURlbGVnYXRlKHRoaXMpfWEuc2V0VmlzaWJsZS5jYWxs KHRoaXMsaSxoLGssZyxqKTtpZihpKXt0aGlzLnN5bmModHJ1ZSl9ZWxzZXtpZighaCl7dGhpcy5o aWRlQWN0aW9uKCl9fX1yZXR1cm4gdGhpc30sc3RvcmVYWTpmdW5jdGlvbihjKXtkZWxldGUgdGhp cy5sYXN0TFQ7dGhpcy5sYXN0WFk9Y30sc3RvcmVMZWZ0VG9wOmZ1bmN0aW9uKGQsYyl7ZGVsZXRl IHRoaXMubGFzdFhZO3RoaXMubGFzdExUPVtkLGNdfSxiZWZvcmVGeDpmdW5jdGlvbigpe3RoaXMu YmVmb3JlQWN0aW9uKCk7cmV0dXJuIEV4dC5MYXllci5zdXBlcmNsYXNzLmJlZm9yZUZ4LmFwcGx5 KHRoaXMsYXJndW1lbnRzKX0sYWZ0ZXJGeDpmdW5jdGlvbigpe0V4dC5MYXllci5zdXBlcmNsYXNz LmFmdGVyRnguYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuc3luYyh0aGlzLmlzVmlzaWJsZSgp KX0sYmVmb3JlQWN0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXMudXBkYXRpbmcmJnRoaXMuc2hhZG93 KXt0aGlzLnNoYWRvdy5oaWRlKCl9fSxzZXRMZWZ0OmZ1bmN0aW9uKGMpe3RoaXMuc3RvcmVMZWZ0 VG9wKGMsdGhpcy5nZXRUb3AodHJ1ZSkpO2Euc2V0TGVmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7 dGhpcy5zeW5jKCk7cmV0dXJuIHRoaXN9LHNldFRvcDpmdW5jdGlvbihjKXt0aGlzLnN0b3JlTGVm dFRvcCh0aGlzLmdldExlZnQodHJ1ZSksYyk7YS5zZXRUb3AuYXBwbHkodGhpcyxhcmd1bWVudHMp O3RoaXMuc3luYygpO3JldHVybiB0aGlzfSxzZXRMZWZ0VG9wOmZ1bmN0aW9uKGQsYyl7dGhpcy5z dG9yZUxlZnRUb3AoZCxjKTthLnNldExlZnRUb3AuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMu c3luYygpO3JldHVybiB0aGlzfSxzZXRYWTpmdW5jdGlvbihqLGgsayxsLGkpe3RoaXMuZml4RGlz cGxheSgpO3RoaXMuYmVmb3JlQWN0aW9uKCk7dGhpcy5zdG9yZVhZKGopO3ZhciBnPXRoaXMuY3Jl YXRlQ0IobCk7YS5zZXRYWS5jYWxsKHRoaXMsaixoLGssZyxpKTtpZighaCl7ZygpfXJldHVybiB0 aGlzfSxjcmVhdGVDQjpmdW5jdGlvbihlKXt2YXIgZD10aGlzO3JldHVybiBmdW5jdGlvbigpe2Qu Y29uc3RyYWluWFkoKTtkLnN5bmModHJ1ZSk7aWYoZSl7ZSgpfX19LHNldFg6ZnVuY3Rpb24oZyxo LGosayxpKXt0aGlzLnNldFhZKFtnLHRoaXMuZ2V0WSgpXSxoLGosayxpKTtyZXR1cm4gdGhpc30s c2V0WTpmdW5jdGlvbihrLGcsaSxqLGgpe3RoaXMuc2V0WFkoW3RoaXMuZ2V0WCgpLGtdLGcsaSxq LGgpO3JldHVybiB0aGlzfSxzZXRTaXplOmZ1bmN0aW9uKGosayxpLG0sbixsKXt0aGlzLmJlZm9y ZUFjdGlvbigpO3ZhciBnPXRoaXMuY3JlYXRlQ0Iobik7YS5zZXRTaXplLmNhbGwodGhpcyxqLGss aSxtLGcsbCk7aWYoIWkpe2coKX1yZXR1cm4gdGhpc30sc2V0V2lkdGg6ZnVuY3Rpb24oaSxoLGss bCxqKXt0aGlzLmJlZm9yZUFjdGlvbigpO3ZhciBnPXRoaXMuY3JlYXRlQ0IobCk7YS5zZXRXaWR0 aC5jYWxsKHRoaXMsaSxoLGssZyxqKTtpZighaCl7ZygpfXJldHVybiB0aGlzfSxzZXRIZWlnaHQ6 ZnVuY3Rpb24oaixpLGwsbSxrKXt0aGlzLmJlZm9yZUFjdGlvbigpO3ZhciBnPXRoaXMuY3JlYXRl Q0IobSk7YS5zZXRIZWlnaHQuY2FsbCh0aGlzLGosaSxsLGcsayk7aWYoIWkpe2coKX1yZXR1cm4g dGhpc30sc2V0Qm91bmRzOmZ1bmN0aW9uKG8sbSxwLGksbixrLGwsail7dGhpcy5iZWZvcmVBY3Rp b24oKTt2YXIgZz10aGlzLmNyZWF0ZUNCKGwpO2lmKCFuKXt0aGlzLnN0b3JlWFkoW28sbV0pO2Eu c2V0WFkuY2FsbCh0aGlzLFtvLG1dKTthLnNldFNpemUuY2FsbCh0aGlzLHAsaSxuLGssZyxqKTtn KCl9ZWxzZXthLnNldEJvdW5kcy5jYWxsKHRoaXMsbyxtLHAsaSxuLGssZyxqKX1yZXR1cm4gdGhp c30sc2V0WkluZGV4OmZ1bmN0aW9uKGMpe3RoaXMuemluZGV4PWM7dGhpcy5zZXRTdHlsZSgiei1p bmRleCIsYysyKTtpZih0aGlzLnNoYWRvdyl7dGhpcy5zaGFkb3cuc2V0WkluZGV4KGMrMSl9aWYo dGhpcy5zaGltKXt0aGlzLnNoaW0uc2V0U3R5bGUoInotaW5kZXgiLGMpfXJldHVybiB0aGlzfX0p fSkoKTtFeHQuU2hhZG93PWZ1bmN0aW9uKGQpe0V4dC5hcHBseSh0aGlzLGQpO2lmKHR5cGVvZiB0 aGlzLm1vZGUhPSJzdHJpbmciKXt0aGlzLm1vZGU9dGhpcy5kZWZhdWx0TW9kZX12YXIgZT10aGlz Lm9mZnNldCxjPXtoOjB9O3ZhciBiPU1hdGguZmxvb3IodGhpcy5vZmZzZXQvMik7c3dpdGNoKHRo aXMubW9kZS50b0xvd2VyQ2FzZSgpKXtjYXNlImRyb3AiOmMudz0wO2MubD1jLnQ9ZTtjLnQtPTE7 aWYoRXh0LmlzSUUpe2MubC09dGhpcy5vZmZzZXQrYjtjLnQtPXRoaXMub2Zmc2V0K2I7Yy53LT1i O2MuaC09YjtjLnQrPTF9YnJlYWs7Y2FzZSJzaWRlcyI6Yy53PShlKjIpO2MubD0tZTtjLnQ9ZS0x O2lmKEV4dC5pc0lFKXtjLmwtPSh0aGlzLm9mZnNldC1iKTtjLnQtPXRoaXMub2Zmc2V0K2I7Yy5s Kz0xO2Mudy09KHRoaXMub2Zmc2V0LWIpKjI7Yy53LT1iKzE7Yy5oLT0xfWJyZWFrO2Nhc2UiZnJh bWUiOmMudz1jLmg9KGUqMik7Yy5sPWMudD0tZTtjLnQrPTE7Yy5oLT0yO2lmKEV4dC5pc0lFKXtj LmwtPSh0aGlzLm9mZnNldC1iKTtjLnQtPSh0aGlzLm9mZnNldC1iKTtjLmwrPTE7Yy53LT0odGhp cy5vZmZzZXQrYisxKTtjLmgtPSh0aGlzLm9mZnNldCtiKTtjLmgrPTF9YnJlYWt9dGhpcy5hZGp1 c3RzPWN9O0V4dC5TaGFkb3cucHJvdG90eXBlPXtvZmZzZXQ6NCxkZWZhdWx0TW9kZToiZHJvcCIs c2hvdzpmdW5jdGlvbihhKXthPUV4dC5nZXQoYSk7aWYoIXRoaXMuZWwpe3RoaXMuZWw9RXh0LlNo YWRvdy5Qb29sLnB1bGwoKTtpZih0aGlzLmVsLmRvbS5uZXh0U2libGluZyE9YS5kb20pe3RoaXMu ZWwuaW5zZXJ0QmVmb3JlKGEpfX10aGlzLmVsLnNldFN0eWxlKCJ6LWluZGV4Iix0aGlzLnpJbmRl eHx8cGFyc2VJbnQoYS5nZXRTdHlsZSgiei1pbmRleCIpLDEwKS0xKTtpZihFeHQuaXNJRSl7dGhp cy5lbC5kb20uc3R5bGUuZmlsdGVyPSJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQu YWxwaGEob3BhY2l0eT01MCkgcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJsdXIo cGl4ZWxyYWRpdXM9IisodGhpcy5vZmZzZXQpKyIpIn10aGlzLnJlYWxpZ24oYS5nZXRMZWZ0KHRy dWUpLGEuZ2V0VG9wKHRydWUpLGEuZ2V0V2lkdGgoKSxhLmdldEhlaWdodCgpKTt0aGlzLmVsLmRv bS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9LGlzVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlz LmVsP3RydWU6ZmFsc2V9LHJlYWxpZ246ZnVuY3Rpb24oYixyLHEsZyl7aWYoIXRoaXMuZWwpe3Jl dHVybn12YXIgbj10aGlzLmFkanVzdHMsaz10aGlzLmVsLmRvbSx1PWsuc3R5bGU7dmFyIGk9MDt1 LmxlZnQ9KGIrbi5sKSsicHgiO3UudG9wPShyK24udCkrInB4Ijt2YXIgcD0ocStuLncpLGU9KGcr bi5oKSxqPXArInB4IixvPWUrInB4IjtpZih1LndpZHRoIT1qfHx1LmhlaWdodCE9byl7dS53aWR0 aD1qO3UuaGVpZ2h0PW87aWYoIUV4dC5pc0lFKXt2YXIgbT1rLmNoaWxkTm9kZXM7dmFyIGM9TWF0 aC5tYXgoMCwocC0xMikpKyJweCI7bVswXS5jaGlsZE5vZGVzWzFdLnN0eWxlLndpZHRoPWM7bVsx XS5jaGlsZE5vZGVzWzFdLnN0eWxlLndpZHRoPWM7bVsyXS5jaGlsZE5vZGVzWzFdLnN0eWxlLndp ZHRoPWM7bVsxXS5zdHlsZS5oZWlnaHQ9TWF0aC5tYXgoMCwoZS0xMikpKyJweCJ9fX0saGlkZTpm dW5jdGlvbigpe2lmKHRoaXMuZWwpe3RoaXMuZWwuZG9tLnN0eWxlLmRpc3BsYXk9Im5vbmUiO0V4 dC5TaGFkb3cuUG9vbC5wdXNoKHRoaXMuZWwpO2RlbGV0ZSB0aGlzLmVsfX0sc2V0WkluZGV4OmZ1 bmN0aW9uKGEpe3RoaXMuekluZGV4PWE7aWYodGhpcy5lbCl7dGhpcy5lbC5zZXRTdHlsZSgiei1p bmRleCIsYSl9fX07RXh0LlNoYWRvdy5Qb29sPWZ1bmN0aW9uKCl7dmFyIGI9W107dmFyIGE9RXh0 LmlzSUU/JzxkaXYgY2xhc3M9IngtaWUtc2hhZG93Ij48L2Rpdj4nOic8ZGl2IGNsYXNzPSJ4LXNo YWRvdyI+PGRpdiBjbGFzcz0ieHN0Ij48ZGl2IGNsYXNzPSJ4c3RsIj48L2Rpdj48ZGl2IGNsYXNz PSJ4c3RjIj48L2Rpdj48ZGl2IGNsYXNzPSJ4c3RyIj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJ4 c2MiPjxkaXYgY2xhc3M9InhzbWwiPjwvZGl2PjxkaXYgY2xhc3M9InhzbWMiPjwvZGl2PjxkaXYg Y2xhc3M9InhzbXIiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InhzYiI+PGRpdiBjbGFzcz0ieHNi bCI+PC9kaXY+PGRpdiBjbGFzcz0ieHNiYyI+PC9kaXY+PGRpdiBjbGFzcz0ieHNiciI+PC9kaXY+ PC9kaXY+PC9kaXY+JztyZXR1cm57cHVsbDpmdW5jdGlvbigpe3ZhciBjPWIuc2hpZnQoKTtpZigh Yyl7Yz1FeHQuZ2V0KEV4dC5Eb21IZWxwZXIuaW5zZXJ0SHRtbCgiYmVmb3JlQmVnaW4iLGRvY3Vt ZW50LmJvZHkuZmlyc3RDaGlsZCxhKSk7Yy5hdXRvQm94QWRqdXN0PWZhbHNlfXJldHVybiBjfSxw dXNoOmZ1bmN0aW9uKGMpe2IucHVzaChjKX19fSgpO0V4dC5Cb3hDb21wb25lbnQ9RXh0LmV4dGVu ZChFeHQuQ29tcG9uZW50LHtpbml0Q29tcG9uZW50OmZ1bmN0aW9uKCl7RXh0LkJveENvbXBvbmVu dC5zdXBlcmNsYXNzLmluaXRDb21wb25lbnQuY2FsbCh0aGlzKTt0aGlzLmFkZEV2ZW50cygicmVz aXplIiwibW92ZSIpfSxib3hSZWFkeTpmYWxzZSxkZWZlckhlaWdodDpmYWxzZSxzZXRTaXplOmZ1 bmN0aW9uKGIsZCl7aWYodHlwZW9mIGI9PSJvYmplY3QiKXtkPWIuaGVpZ2h0O2I9Yi53aWR0aH1p ZighdGhpcy5ib3hSZWFkeSl7dGhpcy53aWR0aD1iO3RoaXMuaGVpZ2h0PWQ7cmV0dXJuIHRoaXN9 aWYodGhpcy5jYWNoZVNpemVzIT09ZmFsc2UmJnRoaXMubGFzdFNpemUmJnRoaXMubGFzdFNpemUu d2lkdGg9PWImJnRoaXMubGFzdFNpemUuaGVpZ2h0PT1kKXtyZXR1cm4gdGhpc310aGlzLmxhc3RT aXplPXt3aWR0aDpiLGhlaWdodDpkfTt2YXIgYz10aGlzLmFkanVzdFNpemUoYixkKTt2YXIgZz1j LndpZHRoLGE9Yy5oZWlnaHQ7aWYoZyE9PXVuZGVmaW5lZHx8YSE9PXVuZGVmaW5lZCl7dmFyIGU9 dGhpcy5nZXRSZXNpemVFbCgpO2lmKCF0aGlzLmRlZmVySGVpZ2h0JiZnIT09dW5kZWZpbmVkJiZh IT09dW5kZWZpbmVkKXtlLnNldFNpemUoZyxhKX1lbHNle2lmKCF0aGlzLmRlZmVySGVpZ2h0JiZh IT09dW5kZWZpbmVkKXtlLnNldEhlaWdodChhKX1lbHNle2lmKGchPT11bmRlZmluZWQpe2Uuc2V0 V2lkdGgoZyl9fX10aGlzLm9uUmVzaXplKGcsYSxiLGQpO3RoaXMuZmlyZUV2ZW50KCJyZXNpemUi LHRoaXMsZyxhLGIsZCl9cmV0dXJuIHRoaXN9LHNldFdpZHRoOmZ1bmN0aW9uKGEpe3JldHVybiB0 aGlzLnNldFNpemUoYSl9LHNldEhlaWdodDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zZXRTaXpl KHVuZGVmaW5lZCxhKX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFJlc2l6ZUVs KCkuZ2V0U2l6ZSgpfSxnZXRXaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFJlc2l6ZUVs KCkuZ2V0V2lkdGgoKX0sZ2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UmVzaXpl RWwoKS5nZXRIZWlnaHQoKX0sZ2V0T3V0ZXJTaXplOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRS ZXNpemVFbCgpO3JldHVybnt3aWR0aDphLmdldFdpZHRoKCkrYS5nZXRNYXJnaW5zKCJsciIpLGhl aWdodDphLmdldEhlaWdodCgpK2EuZ2V0TWFyZ2lucygidGIiKX19LGdldFBvc2l0aW9uOmZ1bmN0 aW9uKGEpe3ZhciBiPXRoaXMuZ2V0UG9zaXRpb25FbCgpO2lmKGE9PT10cnVlKXtyZXR1cm5bYi5n ZXRMZWZ0KHRydWUpLGIuZ2V0VG9wKHRydWUpXX1yZXR1cm4gdGhpcy54eXx8Yi5nZXRYWSgpfSxn ZXRCb3g6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5nZXRQb3NpdGlvbihhKTt2YXIgYj10aGlzLmdl dFNpemUoKTtiLng9Y1swXTtiLnk9Y1sxXTtyZXR1cm4gYn0sdXBkYXRlQm94OmZ1bmN0aW9uKGEp e3RoaXMuc2V0U2l6ZShhLndpZHRoLGEuaGVpZ2h0KTt0aGlzLnNldFBhZ2VQb3NpdGlvbihhLngs YS55KTtyZXR1cm4gdGhpc30sZ2V0UmVzaXplRWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXNp emVFbHx8dGhpcy5lbH0sZ2V0UG9zaXRpb25FbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0 aW9uRWx8fHRoaXMuZWx9LHNldFBvc2l0aW9uOmZ1bmN0aW9uKGEsZyl7aWYoYSYmdHlwZW9mIGFb MV09PSJudW1iZXIiKXtnPWFbMV07YT1hWzBdfXRoaXMueD1hO3RoaXMueT1nO2lmKCF0aGlzLmJv eFJlYWR5KXtyZXR1cm4gdGhpc312YXIgYj10aGlzLmFkanVzdFBvc2l0aW9uKGEsZyk7dmFyIGU9 Yi54LGQ9Yi55O3ZhciBjPXRoaXMuZ2V0UG9zaXRpb25FbCgpO2lmKGUhPT11bmRlZmluZWR8fGQh PT11bmRlZmluZWQpe2lmKGUhPT11bmRlZmluZWQmJmQhPT11bmRlZmluZWQpe2Muc2V0TGVmdFRv cChlLGQpfWVsc2V7aWYoZSE9PXVuZGVmaW5lZCl7Yy5zZXRMZWZ0KGUpfWVsc2V7aWYoZCE9PXVu ZGVmaW5lZCl7Yy5zZXRUb3AoZCl9fX10aGlzLm9uUG9zaXRpb24oZSxkKTt0aGlzLmZpcmVFdmVu dCgibW92ZSIsdGhpcyxlLGQpfXJldHVybiB0aGlzfSxzZXRQYWdlUG9zaXRpb246ZnVuY3Rpb24o YSxjKXtpZihhJiZ0eXBlb2YgYVsxXT09Im51bWJlciIpe2M9YVsxXTthPWFbMF19dGhpcy5wYWdl WD1hO3RoaXMucGFnZVk9YztpZighdGhpcy5ib3hSZWFkeSl7cmV0dXJufWlmKGE9PT11bmRlZmlu ZWR8fGM9PT11bmRlZmluZWQpe3JldHVybn12YXIgYj10aGlzLmdldFBvc2l0aW9uRWwoKS50cmFu c2xhdGVQb2ludHMoYSxjKTt0aGlzLnNldFBvc2l0aW9uKGIubGVmdCxiLnRvcCk7cmV0dXJuIHRo aXN9LG9uUmVuZGVyOmZ1bmN0aW9uKGIsYSl7RXh0LkJveENvbXBvbmVudC5zdXBlcmNsYXNzLm9u UmVuZGVyLmNhbGwodGhpcyxiLGEpO2lmKHRoaXMucmVzaXplRWwpe3RoaXMucmVzaXplRWw9RXh0 LmdldCh0aGlzLnJlc2l6ZUVsKX1pZih0aGlzLnBvc2l0aW9uRWwpe3RoaXMucG9zaXRpb25FbD1F eHQuZ2V0KHRoaXMucG9zaXRpb25FbCl9fSxhZnRlclJlbmRlcjpmdW5jdGlvbigpe0V4dC5Cb3hD b21wb25lbnQuc3VwZXJjbGFzcy5hZnRlclJlbmRlci5jYWxsKHRoaXMpO3RoaXMuYm94UmVhZHk9 dHJ1ZTt0aGlzLnNldFNpemUodGhpcy53aWR0aCx0aGlzLmhlaWdodCk7aWYodGhpcy54fHx0aGlz Lnkpe3RoaXMuc2V0UG9zaXRpb24odGhpcy54LHRoaXMueSl9ZWxzZXtpZih0aGlzLnBhZ2VYfHx0 aGlzLnBhZ2VZKXt0aGlzLnNldFBhZ2VQb3NpdGlvbih0aGlzLnBhZ2VYLHRoaXMucGFnZVkpfX19 LHN5bmNTaXplOmZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMubGFzdFNpemU7dGhpcy5zZXRTaXplKHRo aXMuYXV0b1dpZHRoP3VuZGVmaW5lZDp0aGlzLmdldFJlc2l6ZUVsKCkuZ2V0V2lkdGgoKSx0aGlz LmF1dG9IZWlnaHQ/dW5kZWZpbmVkOnRoaXMuZ2V0UmVzaXplRWwoKS5nZXRIZWlnaHQoKSk7cmV0 dXJuIHRoaXN9LG9uUmVzaXplOmZ1bmN0aW9uKGQsYixhLGMpe30sb25Qb3NpdGlvbjpmdW5jdGlv bihhLGIpe30sYWRqdXN0U2l6ZTpmdW5jdGlvbihhLGIpe2lmKHRoaXMuYXV0b1dpZHRoKXthPSJh dXRvIn1pZih0aGlzLmF1dG9IZWlnaHQpe2I9ImF1dG8ifXJldHVybnt3aWR0aDphLGhlaWdodDpi fX0sYWRqdXN0UG9zaXRpb246ZnVuY3Rpb24oYSxiKXtyZXR1cm57eDphLHk6Yn19fSk7RXh0LnJl ZygiYm94IixFeHQuQm94Q29tcG9uZW50KTtFeHQuU3BhY2VyPUV4dC5leHRlbmQoRXh0LkJveENv bXBvbmVudCx7YXV0b0VsOiJkaXYifSk7RXh0LnJlZygic3BhY2VyIixFeHQuU3BhY2VyKTtFeHQu U3BsaXRCYXI9ZnVuY3Rpb24oYyxlLGIsZCxhKXt0aGlzLmVsPUV4dC5nZXQoYyx0cnVlKTt0aGlz LmVsLmRvbS51bnNlbGVjdGFibGU9Im9uIjt0aGlzLnJlc2l6aW5nRWw9RXh0LmdldChlLHRydWUp O3RoaXMub3JpZW50YXRpb249Ynx8RXh0LlNwbGl0QmFyLkhPUklaT05UQUw7dGhpcy5taW5TaXpl PTA7dGhpcy5tYXhTaXplPTIwMDA7dGhpcy5hbmltYXRlPWZhbHNlO3RoaXMudXNlU2hpbT1mYWxz ZTt0aGlzLnNoaW09bnVsbDtpZighYSl7dGhpcy5wcm94eT1FeHQuU3BsaXRCYXIuY3JlYXRlUHJv eHkodGhpcy5vcmllbnRhdGlvbil9ZWxzZXt0aGlzLnByb3h5PUV4dC5nZXQoYSkuZG9tfXRoaXMu ZGQ9bmV3IEV4dC5kZC5ERFByb3h5KHRoaXMuZWwuZG9tLmlkLCJYU3BsaXRCYXJzIix7ZHJhZ0Vs SWQ6dGhpcy5wcm94eS5pZH0pO3RoaXMuZGQuYjRTdGFydERyYWc9dGhpcy5vblN0YXJ0UHJveHlE cmFnLmNyZWF0ZURlbGVnYXRlKHRoaXMpO3RoaXMuZGQuZW5kRHJhZz10aGlzLm9uRW5kUHJveHlE cmFnLmNyZWF0ZURlbGVnYXRlKHRoaXMpO3RoaXMuZHJhZ1NwZWNzPXt9O3RoaXMuYWRhcHRlcj1u ZXcgRXh0LlNwbGl0QmFyLkJhc2ljTGF5b3V0QWRhcHRlcigpO3RoaXMuYWRhcHRlci5pbml0KHRo aXMpO2lmKHRoaXMub3JpZW50YXRpb249PUV4dC5TcGxpdEJhci5IT1JJWk9OVEFMKXt0aGlzLnBs YWNlbWVudD1kfHwodGhpcy5lbC5nZXRYKCk+dGhpcy5yZXNpemluZ0VsLmdldFgoKT9FeHQuU3Bs aXRCYXIuTEVGVDpFeHQuU3BsaXRCYXIuUklHSFQpO3RoaXMuZWwuYWRkQ2xhc3MoIngtc3BsaXRi YXItaCIpfWVsc2V7dGhpcy5wbGFjZW1lbnQ9ZHx8KHRoaXMuZWwuZ2V0WSgpPnRoaXMucmVzaXpp bmdFbC5nZXRZKCk/RXh0LlNwbGl0QmFyLlRPUDpFeHQuU3BsaXRCYXIuQk9UVE9NKTt0aGlzLmVs LmFkZENsYXNzKCJ4LXNwbGl0YmFyLXYiKX10aGlzLmFkZEV2ZW50cygicmVzaXplIiwibW92ZWQi LCJiZWZvcmVyZXNpemUiLCJiZWZvcmVhcHBseSIpO0V4dC5TcGxpdEJhci5zdXBlcmNsYXNzLmNv bnN0cnVjdG9yLmNhbGwodGhpcyl9O0V4dC5leHRlbmQoRXh0LlNwbGl0QmFyLEV4dC51dGlsLk9i c2VydmFibGUse29uU3RhcnRQcm94eURyYWc6ZnVuY3Rpb24oYSxlKXt0aGlzLmZpcmVFdmVudCgi YmVmb3JlcmVzaXplIix0aGlzKTt0aGlzLm92ZXJsYXk9RXh0LkRvbUhlbHBlci5hcHBlbmQoZG9j dW1lbnQuYm9keSx7Y2xzOiJ4LWRyYWctb3ZlcmxheSIsaHRtbDoiJiMxNjA7In0sdHJ1ZSk7dGhp cy5vdmVybGF5LnVuc2VsZWN0YWJsZSgpO3RoaXMub3ZlcmxheS5zZXRTaXplKEV4dC5saWIuRG9t LmdldFZpZXdXaWR0aCh0cnVlKSxFeHQubGliLkRvbS5nZXRWaWV3SGVpZ2h0KHRydWUpKTt0aGlz Lm92ZXJsYXkuc2hvdygpO0V4dC5nZXQodGhpcy5wcm94eSkuc2V0RGlzcGxheWVkKCJibG9jayIp O3ZhciBjPXRoaXMuYWRhcHRlci5nZXRFbGVtZW50U2l6ZSh0aGlzKTt0aGlzLmFjdGl2ZU1pblNp emU9dGhpcy5nZXRNaW5pbXVtU2l6ZSgpO3RoaXMuYWN0aXZlTWF4U2l6ZT10aGlzLmdldE1heGlt dW1TaXplKCk7dmFyIGQ9Yy10aGlzLmFjdGl2ZU1pblNpemU7dmFyIGI9TWF0aC5tYXgodGhpcy5h Y3RpdmVNYXhTaXplLWMsMCk7aWYodGhpcy5vcmllbnRhdGlvbj09RXh0LlNwbGl0QmFyLkhPUkla T05UQUwpe3RoaXMuZGQucmVzZXRDb25zdHJhaW50cygpO3RoaXMuZGQuc2V0WENvbnN0cmFpbnQo dGhpcy5wbGFjZW1lbnQ9PUV4dC5TcGxpdEJhci5MRUZUP2Q6Yix0aGlzLnBsYWNlbWVudD09RXh0 LlNwbGl0QmFyLkxFRlQ/YjpkLHRoaXMudGlja1NpemUpO3RoaXMuZGQuc2V0WUNvbnN0cmFpbnQo MCwwKX1lbHNle3RoaXMuZGQucmVzZXRDb25zdHJhaW50cygpO3RoaXMuZGQuc2V0WENvbnN0cmFp bnQoMCwwKTt0aGlzLmRkLnNldFlDb25zdHJhaW50KHRoaXMucGxhY2VtZW50PT1FeHQuU3BsaXRC YXIuVE9QP2Q6Yix0aGlzLnBsYWNlbWVudD09RXh0LlNwbGl0QmFyLlRPUD9iOmQsdGhpcy50aWNr U2l6ZSl9dGhpcy5kcmFnU3BlY3Muc3RhcnRTaXplPWM7dGhpcy5kcmFnU3BlY3Muc3RhcnRQb2lu dD1bYSxlXTtFeHQuZGQuRERQcm94eS5wcm90b3R5cGUuYjRTdGFydERyYWcuY2FsbCh0aGlzLmRk LGEsZSl9LG9uRW5kUHJveHlEcmFnOmZ1bmN0aW9uKGMpe0V4dC5nZXQodGhpcy5wcm94eSkuc2V0 RGlzcGxheWVkKGZhbHNlKTt2YXIgYj1FeHQubGliLkV2ZW50LmdldFhZKGMpO2lmKHRoaXMub3Zl cmxheSl7RXh0LmRlc3Ryb3kodGhpcy5vdmVybGF5KTtkZWxldGUgdGhpcy5vdmVybGF5fXZhciBh O2lmKHRoaXMub3JpZW50YXRpb249PUV4dC5TcGxpdEJhci5IT1JJWk9OVEFMKXthPXRoaXMuZHJh Z1NwZWNzLnN0YXJ0U2l6ZSsodGhpcy5wbGFjZW1lbnQ9PUV4dC5TcGxpdEJhci5MRUZUP2JbMF0t dGhpcy5kcmFnU3BlY3Muc3RhcnRQb2ludFswXTp0aGlzLmRyYWdTcGVjcy5zdGFydFBvaW50WzBd LWJbMF0pfWVsc2V7YT10aGlzLmRyYWdTcGVjcy5zdGFydFNpemUrKHRoaXMucGxhY2VtZW50PT1F eHQuU3BsaXRCYXIuVE9QP2JbMV0tdGhpcy5kcmFnU3BlY3Muc3RhcnRQb2ludFsxXTp0aGlzLmRy YWdTcGVjcy5zdGFydFBvaW50WzFdLWJbMV0pfWE9TWF0aC5taW4oTWF0aC5tYXgoYSx0aGlzLmFj dGl2ZU1pblNpemUpLHRoaXMuYWN0aXZlTWF4U2l6ZSk7aWYoYSE9dGhpcy5kcmFnU3BlY3Muc3Rh cnRTaXplKXtpZih0aGlzLmZpcmVFdmVudCgiYmVmb3JlYXBwbHkiLHRoaXMsYSkhPT1mYWxzZSl7 dGhpcy5hZGFwdGVyLnNldEVsZW1lbnRTaXplKHRoaXMsYSk7dGhpcy5maXJlRXZlbnQoIm1vdmVk Iix0aGlzLGEpO3RoaXMuZmlyZUV2ZW50KCJyZXNpemUiLHRoaXMsYSl9fX0sZ2V0QWRhcHRlcjpm dW5jdGlvbigpe3JldHVybiB0aGlzLmFkYXB0ZXJ9LHNldEFkYXB0ZXI6ZnVuY3Rpb24oYSl7dGhp cy5hZGFwdGVyPWE7dGhpcy5hZGFwdGVyLmluaXQodGhpcyl9LGdldE1pbmltdW1TaXplOmZ1bmN0 aW9uKCl7cmV0dXJuIHRoaXMubWluU2l6ZX0sc2V0TWluaW11bVNpemU6ZnVuY3Rpb24oYSl7dGhp cy5taW5TaXplPWF9LGdldE1heGltdW1TaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4U2l6 ZX0sc2V0TWF4aW11bVNpemU6ZnVuY3Rpb24oYSl7dGhpcy5tYXhTaXplPWF9LHNldEN1cnJlbnRT aXplOmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMuYW5pbWF0ZTt0aGlzLmFuaW1hdGU9ZmFsc2U7dGhp cy5hZGFwdGVyLnNldEVsZW1lbnRTaXplKHRoaXMsYik7dGhpcy5hbmltYXRlPWF9LGRlc3Ryb3k6 ZnVuY3Rpb24oYSl7RXh0LmRlc3Ryb3kodGhpcy5zaGltLEV4dC5nZXQodGhpcy5wcm94eSkpO3Ro aXMuZGQudW5yZWcoKTtpZihhKXt0aGlzLmVsLnJlbW92ZSgpfXRoaXMucHVyZ2VMaXN0ZW5lcnMo KX19KTtFeHQuU3BsaXRCYXIuY3JlYXRlUHJveHk9ZnVuY3Rpb24oYil7dmFyIGM9bmV3IEV4dC5F bGVtZW50KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtjLnVuc2VsZWN0YWJsZSgpO3Zh ciBhPSJ4LXNwbGl0YmFyLXByb3h5IjtjLmFkZENsYXNzKGErIiAiKyhiPT1FeHQuU3BsaXRCYXIu SE9SSVpPTlRBTD9hKyItaCI6YSsiLXYiKSk7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjLmRv bSk7cmV0dXJuIGMuZG9tfTtFeHQuU3BsaXRCYXIuQmFzaWNMYXlvdXRBZGFwdGVyPWZ1bmN0aW9u KCl7fTtFeHQuU3BsaXRCYXIuQmFzaWNMYXlvdXRBZGFwdGVyLnByb3RvdHlwZT17aW5pdDpmdW5j dGlvbihhKXt9LGdldEVsZW1lbnRTaXplOmZ1bmN0aW9uKGEpe2lmKGEub3JpZW50YXRpb249PUV4 dC5TcGxpdEJhci5IT1JJWk9OVEFMKXtyZXR1cm4gYS5yZXNpemluZ0VsLmdldFdpZHRoKCl9ZWxz ZXtyZXR1cm4gYS5yZXNpemluZ0VsLmdldEhlaWdodCgpfX0sc2V0RWxlbWVudFNpemU6ZnVuY3Rp b24oYixhLGMpe2lmKGIub3JpZW50YXRpb249PUV4dC5TcGxpdEJhci5IT1JJWk9OVEFMKXtpZigh Yi5hbmltYXRlKXtiLnJlc2l6aW5nRWwuc2V0V2lkdGgoYSk7aWYoYyl7YyhiLGEpfX1lbHNle2Iu cmVzaXppbmdFbC5zZXRXaWR0aChhLHRydWUsMC4xLGMsImVhc2VPdXQiKX19ZWxzZXtpZighYi5h bmltYXRlKXtiLnJlc2l6aW5nRWwuc2V0SGVpZ2h0KGEpO2lmKGMpe2MoYixhKX19ZWxzZXtiLnJl c2l6aW5nRWwuc2V0SGVpZ2h0KGEsdHJ1ZSwwLjEsYywiZWFzZU91dCIpfX19fTtFeHQuU3BsaXRC YXIuQWJzb2x1dGVMYXlvdXRBZGFwdGVyPWZ1bmN0aW9uKGEpe3RoaXMuYmFzaWM9bmV3IEV4dC5T cGxpdEJhci5CYXNpY0xheW91dEFkYXB0ZXIoKTt0aGlzLmNvbnRhaW5lcj1FeHQuZ2V0KGEpfTtF eHQuU3BsaXRCYXIuQWJzb2x1dGVMYXlvdXRBZGFwdGVyLnByb3RvdHlwZT17aW5pdDpmdW5jdGlv bihhKXt0aGlzLmJhc2ljLmluaXQoYSl9LGdldEVsZW1lbnRTaXplOmZ1bmN0aW9uKGEpe3JldHVy biB0aGlzLmJhc2ljLmdldEVsZW1lbnRTaXplKGEpfSxzZXRFbGVtZW50U2l6ZTpmdW5jdGlvbihi LGEsYyl7dGhpcy5iYXNpYy5zZXRFbGVtZW50U2l6ZShiLGEsdGhpcy5tb3ZlU3BsaXR0ZXIuY3Jl YXRlRGVsZWdhdGUodGhpcyxbYl0pKX0sbW92ZVNwbGl0dGVyOmZ1bmN0aW9uKGEpe3ZhciBiPUV4 dC5TcGxpdEJhcjtzd2l0Y2goYS5wbGFjZW1lbnQpe2Nhc2UgYi5MRUZUOmEuZWwuc2V0WChhLnJl c2l6aW5nRWwuZ2V0UmlnaHQoKSk7YnJlYWs7Y2FzZSBiLlJJR0hUOmEuZWwuc2V0U3R5bGUoInJp Z2h0IiwodGhpcy5jb250YWluZXIuZ2V0V2lkdGgoKS1hLnJlc2l6aW5nRWwuZ2V0TGVmdCgpKSsi cHgiKTticmVhaztjYXNlIGIuVE9QOmEuZWwuc2V0WShhLnJlc2l6aW5nRWwuZ2V0Qm90dG9tKCkp O2JyZWFrO2Nhc2UgYi5CT1RUT006YS5lbC5zZXRZKGEucmVzaXppbmdFbC5nZXRUb3AoKS1hLmVs LmdldEhlaWdodCgpKTticmVha319fTtFeHQuU3BsaXRCYXIuVkVSVElDQUw9MTtFeHQuU3BsaXRC YXIuSE9SSVpPTlRBTD0yO0V4dC5TcGxpdEJhci5MRUZUPTE7RXh0LlNwbGl0QmFyLlJJR0hUPTI7 RXh0LlNwbGl0QmFyLlRPUD0zO0V4dC5TcGxpdEJhci5CT1RUT009NDtFeHQuQ29udGFpbmVyPUV4 dC5leHRlbmQoRXh0LkJveENvbXBvbmVudCx7YnVmZmVyUmVzaXplOjEwMCxhdXRvRGVzdHJveTp0 cnVlLGZvcmNlTGF5b3V0OmZhbHNlLGRlZmF1bHRUeXBlOiJwYW5lbCIsaW5pdENvbXBvbmVudDpm dW5jdGlvbigpe0V4dC5Db250YWluZXIuc3VwZXJjbGFzcy5pbml0Q29tcG9uZW50LmNhbGwodGhp cyk7dGhpcy5hZGRFdmVudHMoImFmdGVybGF5b3V0IiwiYmVmb3JlYWRkIiwiYmVmb3JlcmVtb3Zl IiwiYWRkIiwicmVtb3ZlIik7dGhpcy5lbmFibGVCdWJibGUoImFkZCIsInJlbW92ZSIpO3ZhciBh PXRoaXMuaXRlbXM7aWYoYSl7ZGVsZXRlIHRoaXMuaXRlbXM7aWYoRXh0LmlzQXJyYXkoYSkmJmEu bGVuZ3RoPjApe3RoaXMuYWRkLmFwcGx5KHRoaXMsYSl9ZWxzZXt0aGlzLmFkZChhKX19fSxpbml0 SXRlbXM6ZnVuY3Rpb24oKXtpZighdGhpcy5pdGVtcyl7dGhpcy5pdGVtcz1uZXcgRXh0LnV0aWwu TWl4ZWRDb2xsZWN0aW9uKGZhbHNlLHRoaXMuZ2V0Q29tcG9uZW50SWQpO3RoaXMuZ2V0TGF5b3V0 KCl9fSxzZXRMYXlvdXQ6ZnVuY3Rpb24oYSl7aWYodGhpcy5sYXlvdXQmJnRoaXMubGF5b3V0IT1h KXt0aGlzLmxheW91dC5zZXRDb250YWluZXIobnVsbCl9dGhpcy5pbml0SXRlbXMoKTt0aGlzLmxh eW91dD1hO2Euc2V0Q29udGFpbmVyKHRoaXMpfSxyZW5kZXI6ZnVuY3Rpb24oKXtFeHQuQ29udGFp bmVyLnN1cGVyY2xhc3MucmVuZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZih0aGlzLmxheW91 dCl7aWYoRXh0LmlzT2JqZWN0KHRoaXMubGF5b3V0KSYmIXRoaXMubGF5b3V0LmxheW91dCl7dGhp cy5sYXlvdXRDb25maWc9dGhpcy5sYXlvdXQ7dGhpcy5sYXlvdXQ9dGhpcy5sYXlvdXRDb25maWcu dHlwZX1pZih0eXBlb2YgdGhpcy5sYXlvdXQ9PSJzdHJpbmciKXt0aGlzLmxheW91dD1uZXcgRXh0 LkNvbnRhaW5lci5MQVlPVVRTW3RoaXMubGF5b3V0LnRvTG93ZXJDYXNlKCldKHRoaXMubGF5b3V0 Q29uZmlnKX10aGlzLnNldExheW91dCh0aGlzLmxheW91dCk7aWYodGhpcy5hY3RpdmVJdGVtIT09 dW5kZWZpbmVkKXt2YXIgYT10aGlzLmFjdGl2ZUl0ZW07ZGVsZXRlIHRoaXMuYWN0aXZlSXRlbTt0 aGlzLmxheW91dC5zZXRBY3RpdmVJdGVtKGEpfX1pZighdGhpcy5vd25lckN0KXt0aGlzLmRvTGF5 b3V0KGZhbHNlLHRydWUpfWlmKHRoaXMubW9uaXRvclJlc2l6ZT09PXRydWUpe0V4dC5FdmVudE1h bmFnZXIub25XaW5kb3dSZXNpemUodGhpcy5kb0xheW91dCx0aGlzLFtmYWxzZV0pfX0sZ2V0TGF5 b3V0VGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWx9LGdldENvbXBvbmVudElkOmZ1bmN0 aW9uKGEpe3JldHVybiBhLmdldEl0ZW1JZCgpfSxhZGQ6ZnVuY3Rpb24oYSl7dGhpcy5pbml0SXRl bXMoKTt2YXIgYj1hcmd1bWVudHMubGVuZ3RoPjE7aWYoYnx8RXh0LmlzQXJyYXkoYSkpe0V4dC5l YWNoKGI/YXJndW1lbnRzOmEsZnVuY3Rpb24oZyl7dGhpcy5hZGQoZyl9LHRoaXMpO3JldHVybn12 YXIgZT10aGlzLmxvb2t1cENvbXBvbmVudCh0aGlzLmFwcGx5RGVmYXVsdHMoYSkpO3ZhciBkPXRo aXMuaXRlbXMubGVuZ3RoO2lmKHRoaXMuZmlyZUV2ZW50KCJiZWZvcmVhZGQiLHRoaXMsZSxkKSE9 PWZhbHNlJiZ0aGlzLm9uQmVmb3JlQWRkKGUpIT09ZmFsc2Upe3RoaXMuaXRlbXMuYWRkKGUpO2Uu b3duZXJDdD10aGlzO3RoaXMuZmlyZUV2ZW50KCJhZGQiLHRoaXMsZSxkKX1yZXR1cm4gZX0saW5z ZXJ0OmZ1bmN0aW9uKGcsZSl7dGhpcy5pbml0SXRlbXMoKTt2YXIgZD1hcmd1bWVudHMsYj1kLmxl bmd0aDtpZihiPjIpe2Zvcih2YXIgaD1iLTE7aD49MTstLWgpe3RoaXMuaW5zZXJ0KGcsZFtoXSl9 cmV0dXJufXZhciBqPXRoaXMubG9va3VwQ29tcG9uZW50KHRoaXMuYXBwbHlEZWZhdWx0cyhlKSk7 aWYoai5vd25lckN0PT10aGlzJiZ0aGlzLml0ZW1zLmluZGV4T2Yoaik8Zyl7LS1nfWlmKHRoaXMu ZmlyZUV2ZW50KCJiZWZvcmVhZGQiLHRoaXMsaixnKSE9PWZhbHNlJiZ0aGlzLm9uQmVmb3JlQWRk KGopIT09ZmFsc2Upe3RoaXMuaXRlbXMuaW5zZXJ0KGcsaik7ai5vd25lckN0PXRoaXM7dGhpcy5m aXJlRXZlbnQoImFkZCIsdGhpcyxqLGcpfXJldHVybiBqfSxhcHBseURlZmF1bHRzOmZ1bmN0aW9u KGEpe2lmKHRoaXMuZGVmYXVsdHMpe2lmKHR5cGVvZiBhPT0ic3RyaW5nIil7YT1FeHQuQ29tcG9u ZW50TWdyLmdldChhKTtFeHQuYXBwbHkoYSx0aGlzLmRlZmF1bHRzKX1lbHNle2lmKCFhLmV2ZW50 cyl7RXh0LmFwcGx5SWYoYSx0aGlzLmRlZmF1bHRzKX1lbHNle0V4dC5hcHBseShhLHRoaXMuZGVm YXVsdHMpfX19cmV0dXJuIGF9LG9uQmVmb3JlQWRkOmZ1bmN0aW9uKGEpe2lmKGEub3duZXJDdCl7 YS5vd25lckN0LnJlbW92ZShhLGZhbHNlKX1pZih0aGlzLmhpZGVCb3JkZXJzPT09dHJ1ZSl7YS5i b3JkZXI9KGEuYm9yZGVyPT09dHJ1ZSl9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiKXt0aGlzLmluaXRJ dGVtcygpO3ZhciBkPXRoaXMuZ2V0Q29tcG9uZW50KGEpO2lmKGQmJnRoaXMuZmlyZUV2ZW50KCJi ZWZvcmVyZW1vdmUiLHRoaXMsZCkhPT1mYWxzZSl7dGhpcy5pdGVtcy5yZW1vdmUoZCk7ZGVsZXRl IGQub3duZXJDdDtpZihiPT09dHJ1ZXx8KGIhPT1mYWxzZSYmdGhpcy5hdXRvRGVzdHJveSkpe2Qu ZGVzdHJveSgpfWlmKHRoaXMubGF5b3V0JiZ0aGlzLmxheW91dC5hY3RpdmVJdGVtPT1kKXtkZWxl dGUgdGhpcy5sYXlvdXQuYWN0aXZlSXRlbX10aGlzLmZpcmVFdmVudCgicmVtb3ZlIix0aGlzLGQp fXJldHVybiBkfSxyZW1vdmVBbGw6ZnVuY3Rpb24oYyl7dGhpcy5pbml0SXRlbXMoKTt2YXIgZSxn PVtdLGI9W107dGhpcy5pdGVtcy5lYWNoKGZ1bmN0aW9uKGgpe2cucHVzaChoKX0pO2Zvcih2YXIg ZD0wLGE9Zy5sZW5ndGg7ZDxhOysrZCl7ZT1nW2RdO3RoaXMucmVtb3ZlKGUsYyk7aWYoZS5vd25l ckN0IT09dGhpcyl7Yi5wdXNoKGUpfX1yZXR1cm4gYn0sZ2V0Q29tcG9uZW50OmZ1bmN0aW9uKGEp e2lmKEV4dC5pc09iamVjdChhKSl7cmV0dXJuIGF9cmV0dXJuIHRoaXMuaXRlbXMuZ2V0KGEpfSxs b29rdXBDb21wb25lbnQ6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXtyZXR1cm4g RXh0LkNvbXBvbmVudE1nci5nZXQoYSl9ZWxzZXtpZighYS5ldmVudHMpe3JldHVybiB0aGlzLmNy ZWF0ZUNvbXBvbmVudChhKX19cmV0dXJuIGF9LGNyZWF0ZUNvbXBvbmVudDpmdW5jdGlvbihhKXty ZXR1cm4gRXh0LmNyZWF0ZShhLHRoaXMuZGVmYXVsdFR5cGUpfSxkb0xheW91dDpmdW5jdGlvbihn LGUpe3ZhciBrPXRoaXMucmVuZGVyZWQsaj10aGlzLmZvcmNlTGF5b3V0O2lmKCF0aGlzLmlzVmlz aWJsZSgpfHx0aGlzLmNvbGxhcHNlZCl7dGhpcy5kZWZlckxheW91dD10aGlzLmRlZmVyTGF5b3V0 fHwhZztpZighKGV8fGopKXtyZXR1cm59Zz1nJiYhdGhpcy5kZWZlckxheW91dH1lbHNle2RlbGV0 ZSB0aGlzLmRlZmVyTGF5b3V0fWlmKGsmJnRoaXMubGF5b3V0KXt0aGlzLmxheW91dC5sYXlvdXQo KX1pZihnIT09dHJ1ZSYmdGhpcy5pdGVtcyl7dmFyIGQ9dGhpcy5pdGVtcy5pdGVtcztmb3IodmFy IGI9MCxhPWQubGVuZ3RoO2I8YTtiKyspe3ZhciBoPWRbYl07aWYoaC5kb0xheW91dCl7aC5mb3Jj ZUxheW91dD1qO2guZG9MYXlvdXQoKX19fWlmKGspe3RoaXMub25MYXlvdXQoZyxlKX1kZWxldGUg dGhpcy5mb3JjZUxheW91dH0sb25MYXlvdXQ6RXh0LmVtcHR5Rm4sb25TaG93OmZ1bmN0aW9uKCl7 RXh0LkNvbnRhaW5lci5zdXBlcmNsYXNzLm9uU2hvdy5jYWxsKHRoaXMpO2lmKHRoaXMuZGVmZXJM YXlvdXQhPT11bmRlZmluZWQpe3RoaXMuZG9MYXlvdXQodHJ1ZSl9fSxnZXRMYXlvdXQ6ZnVuY3Rp b24oKXtpZighdGhpcy5sYXlvdXQpe3ZhciBhPW5ldyBFeHQubGF5b3V0LkNvbnRhaW5lckxheW91 dCh0aGlzLmxheW91dENvbmZpZyk7dGhpcy5zZXRMYXlvdXQoYSl9cmV0dXJuIHRoaXMubGF5b3V0 fSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7aWYodGhpcy5pdGVtcyl7RXh0LmRlc3Ryb3kuYXBw bHkoRXh0LHRoaXMuaXRlbXMuaXRlbXMpfWlmKHRoaXMubW9uaXRvclJlc2l6ZSl7RXh0LkV2ZW50 TWFuYWdlci5yZW1vdmVSZXNpemVMaXN0ZW5lcih0aGlzLmRvTGF5b3V0LHRoaXMpfUV4dC5kZXN0 cm95KHRoaXMubGF5b3V0KTtFeHQuQ29udGFpbmVyLnN1cGVyY2xhc3MuYmVmb3JlRGVzdHJveS5j YWxsKHRoaXMpfSxidWJibGU6ZnVuY3Rpb24oYyxiLGEpe3ZhciBkPXRoaXM7d2hpbGUoZCl7aWYo Yy5hcHBseShifHxkLGF8fFtkXSk9PT1mYWxzZSl7YnJlYWt9ZD1kLm93bmVyQ3R9cmV0dXJuIHRo aXN9LGNhc2NhZGU6ZnVuY3Rpb24oZyxlLGIpe2lmKGcuYXBwbHkoZXx8dGhpcyxifHxbdGhpc10p IT09ZmFsc2Upe2lmKHRoaXMuaXRlbXMpe3ZhciBkPXRoaXMuaXRlbXMuaXRlbXM7Zm9yKHZhciBj PTAsYT1kLmxlbmd0aDtjPGE7YysrKXtpZihkW2NdLmNhc2NhZGUpe2RbY10uY2FzY2FkZShnLGUs Yil9ZWxzZXtnLmFwcGx5KGV8fGRbY10sYnx8W2RbY11dKX19fX1yZXR1cm4gdGhpc30sZmluZEJ5 SWQ6ZnVuY3Rpb24oYyl7dmFyIGEsYj10aGlzO3RoaXMuY2FzY2FkZShmdW5jdGlvbihkKXtpZihi IT1kJiZkLmlkPT09Yyl7YT1kO3JldHVybiBmYWxzZX19KTtyZXR1cm4gYXx8bnVsbH0sZmluZEJ5 VHlwZTpmdW5jdGlvbihiLGEpe3JldHVybiB0aGlzLmZpbmRCeShmdW5jdGlvbihkKXtyZXR1cm4g ZC5pc1hUeXBlKGIsYSl9KX0sZmluZDpmdW5jdGlvbihiLGEpe3JldHVybiB0aGlzLmZpbmRCeShm dW5jdGlvbihkKXtyZXR1cm4gZFtiXT09PWF9KX0sZmluZEJ5OmZ1bmN0aW9uKGQsYyl7dmFyIGE9 W10sYj10aGlzO3RoaXMuY2FzY2FkZShmdW5jdGlvbihlKXtpZihiIT1lJiZkLmNhbGwoY3x8ZSxl LGIpPT09dHJ1ZSl7YS5wdXNoKGUpfX0pO3JldHVybiBhfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJu IHRoaXMuaXRlbXMuZ2V0KGEpfX0pO0V4dC5Db250YWluZXIuTEFZT1VUUz17fTtFeHQucmVnKCJj b250YWluZXIiLEV4dC5Db250YWluZXIpO0V4dC5sYXlvdXQuQ29udGFpbmVyTGF5b3V0PWZ1bmN0 aW9uKGEpe0V4dC5hcHBseSh0aGlzLGEpfTtFeHQubGF5b3V0LkNvbnRhaW5lckxheW91dC5wcm90 b3R5cGU9e21vbml0b3JSZXNpemU6ZmFsc2UsYWN0aXZlSXRlbTpudWxsLGxheW91dDpmdW5jdGlv bigpe3ZhciBhPXRoaXMuY29udGFpbmVyLmdldExheW91dFRhcmdldCgpO3RoaXMub25MYXlvdXQo dGhpcy5jb250YWluZXIsYSk7dGhpcy5jb250YWluZXIuZmlyZUV2ZW50KCJhZnRlcmxheW91dCIs dGhpcy5jb250YWluZXIsdGhpcyl9LG9uTGF5b3V0OmZ1bmN0aW9uKGEsYil7dGhpcy5yZW5kZXJB bGwoYSxiKX0saXNWYWxpZFBhcmVudDpmdW5jdGlvbihiLGEpe3JldHVybiBhJiZiLmdldERvbVBv c2l0aW9uRWwoKS5kb20ucGFyZW50Tm9kZT09KGEuZG9tfHxhKX0scmVuZGVyQWxsOmZ1bmN0aW9u KGUsZyl7dmFyIGI9ZS5pdGVtcy5pdGVtcztmb3IodmFyIGQ9MCxhPWIubGVuZ3RoO2Q8YTtkKysp e3ZhciBoPWJbZF07aWYoaCYmKCFoLnJlbmRlcmVkfHwhdGhpcy5pc1ZhbGlkUGFyZW50KGgsZykp KXt0aGlzLnJlbmRlckl0ZW0oaCxkLGcpfX19LHJlbmRlckl0ZW06ZnVuY3Rpb24oZCxhLGIpe2lm KGQmJiFkLnJlbmRlcmVkKXtkLnJlbmRlcihiLGEpO3RoaXMuY29uZmlndXJlSXRlbShkLGEpfWVs c2V7aWYoZCYmIXRoaXMuaXNWYWxpZFBhcmVudChkLGIpKXtpZih0eXBlb2YgYT09Im51bWJlciIp e2E9Yi5kb20uY2hpbGROb2Rlc1thXX1iLmRvbS5pbnNlcnRCZWZvcmUoZC5nZXREb21Qb3NpdGlv bkVsKCkuZG9tLGF8fG51bGwpO2QuY29udGFpbmVyPWI7dGhpcy5jb25maWd1cmVJdGVtKGQsYSl9 fX0sY29uZmlndXJlSXRlbTpmdW5jdGlvbihkLGEpe2lmKHRoaXMuZXh0cmFDbHMpe3ZhciBiPWQu Z2V0UG9zaXRpb25FbD9kLmdldFBvc2l0aW9uRWwoKTpkO2IuYWRkQ2xhc3ModGhpcy5leHRyYUNs cyl9aWYodGhpcy5yZW5kZXJIaWRkZW4mJmQhPXRoaXMuYWN0aXZlSXRlbSl7ZC5oaWRlKCl9aWYo ZC5kb0xheW91dCl7ZC5kb0xheW91dChmYWxzZSx0aGlzLmZvcmNlTGF5b3V0KX19LG9uUmVzaXpl OmZ1bmN0aW9uKCl7aWYodGhpcy5jb250YWluZXIuY29sbGFwc2VkKXtyZXR1cm59dmFyIGE9dGhp cy5jb250YWluZXIuYnVmZmVyUmVzaXplO2lmKGEpe2lmKCF0aGlzLnJlc2l6ZVRhc2spe3RoaXMu cmVzaXplVGFzaz1uZXcgRXh0LnV0aWwuRGVsYXllZFRhc2sodGhpcy5ydW5MYXlvdXQsdGhpcyk7 dGhpcy5yZXNpemVCdWZmZXI9dHlwZW9mIGE9PSJudW1iZXIiP2E6MTAwfXRoaXMucmVzaXplVGFz ay5kZWxheSh0aGlzLnJlc2l6ZUJ1ZmZlcil9ZWxzZXt0aGlzLnJ1bkxheW91dCgpfX0scnVuTGF5 b3V0OmZ1bmN0aW9uKCl7dGhpcy5sYXlvdXQoKTt0aGlzLmNvbnRhaW5lci5vbkxheW91dCgpfSxz ZXRDb250YWluZXI6ZnVuY3Rpb24oYSl7aWYodGhpcy5tb25pdG9yUmVzaXplJiZhIT10aGlzLmNv bnRhaW5lcil7aWYodGhpcy5jb250YWluZXIpe3RoaXMuY29udGFpbmVyLnVuKCJyZXNpemUiLHRo aXMub25SZXNpemUsdGhpcyk7dGhpcy5jb250YWluZXIudW4oImJvZHlyZXNpemUiLHRoaXMub25S ZXNpemUsdGhpcyl9aWYoYSl7YS5vbih7c2NvcGU6dGhpcyxyZXNpemU6dGhpcy5vblJlc2l6ZSxi b2R5cmVzaXplOnRoaXMub25SZXNpemV9KX19dGhpcy5jb250YWluZXI9YX0scGFyc2VNYXJnaW5z OmZ1bmN0aW9uKGIpe2lmKHR5cGVvZiBiPT0ibnVtYmVyIil7Yj1iLnRvU3RyaW5nKCl9dmFyIGM9 Yi5zcGxpdCgiICIpO3ZhciBhPWMubGVuZ3RoO2lmKGE9PTEpe2NbMV09Y1swXTtjWzJdPWNbMF07 Y1szXT1jWzBdfWlmKGE9PTIpe2NbMl09Y1swXTtjWzNdPWNbMV19aWYoYT09Myl7Y1szXT1jWzFd fXJldHVybnt0b3A6cGFyc2VJbnQoY1swXSwxMCl8fDAscmlnaHQ6cGFyc2VJbnQoY1sxXSwxMCl8 fDAsYm90dG9tOnBhcnNlSW50KGNbMl0sMTApfHwwLGxlZnQ6cGFyc2VJbnQoY1szXSwxMCl8fDB9 fSxmaWVsZFRwbDooZnVuY3Rpb24oKXt2YXIgYT1uZXcgRXh0LlRlbXBsYXRlKCc8ZGl2IGNsYXNz PSJ4LWZvcm0taXRlbSB7aXRlbUNsc30iIHRhYkluZGV4PSItMSI+JywnPGxhYmVsIGZvcj0ie2lk fSIgc3R5bGU9IntsYWJlbFN0eWxlfSIgY2xhc3M9IngtZm9ybS1pdGVtLWxhYmVsIj57bGFiZWx9 e2xhYmVsU2VwYXJhdG9yfTwvbGFiZWw+JywnPGRpdiBjbGFzcz0ieC1mb3JtLWVsZW1lbnQiIGlk PSJ4LWZvcm0tZWwte2lkfSIgc3R5bGU9IntlbGVtZW50U3R5bGV9Ij4nLCc8L2Rpdj48ZGl2IGNs YXNzPSJ7Y2xlYXJDbHN9Ij48L2Rpdj4nLCI8L2Rpdj4iKTthLmRpc2FibGVGb3JtYXRzPXRydWU7 cmV0dXJuIGEuY29tcGlsZSgpfSkoKSxkZXN0cm95OkV4dC5lbXB0eUZufTtFeHQuQ29udGFpbmVy LkxBWU9VVFMuYXV0bz1FeHQubGF5b3V0LkNvbnRhaW5lckxheW91dDtFeHQubGF5b3V0LkZpdExh eW91dD1FeHQuZXh0ZW5kKEV4dC5sYXlvdXQuQ29udGFpbmVyTGF5b3V0LHttb25pdG9yUmVzaXpl OnRydWUsb25MYXlvdXQ6ZnVuY3Rpb24oYSxjKXtFeHQubGF5b3V0LkZpdExheW91dC5zdXBlcmNs YXNzLm9uTGF5b3V0LmNhbGwodGhpcyxhLGMpO2lmKCF0aGlzLmNvbnRhaW5lci5jb2xsYXBzZWQp e3ZhciBiPShFeHQuaXNJRTYmJkV4dC5pc1N0cmljdCYmYy5kb209PWRvY3VtZW50LmJvZHkpP2Mu Z2V0Vmlld1NpemUoKTpjLmdldFN0eWxlU2l6ZSgpO3RoaXMuc2V0SXRlbVNpemUodGhpcy5hY3Rp dmVJdGVtfHxhLml0ZW1zLml0ZW1BdCgwKSxiKX19LHNldEl0ZW1TaXplOmZ1bmN0aW9uKGIsYSl7 aWYoYiYmYS5oZWlnaHQ+MCl7Yi5zZXRTaXplKGEpfX19KTtFeHQuQ29udGFpbmVyLkxBWU9VVFMu Zml0PUV4dC5sYXlvdXQuRml0TGF5b3V0O0V4dC5sYXlvdXQuQ2FyZExheW91dD1FeHQuZXh0ZW5k KEV4dC5sYXlvdXQuRml0TGF5b3V0LHtkZWZlcnJlZFJlbmRlcjpmYWxzZSxsYXlvdXRPbkNhcmRD aGFuZ2U6ZmFsc2UscmVuZGVySGlkZGVuOnRydWUsY29uc3RydWN0b3I6ZnVuY3Rpb24oYSl7RXh0 LmxheW91dC5DYXJkTGF5b3V0LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3Ro aXMuZm9yY2VMYXlvdXQ9KHRoaXMuZGVmZXJyZWRSZW5kZXI9PT1mYWxzZSl9LHNldEFjdGl2ZUl0 ZW06ZnVuY3Rpb24oYSl7YT10aGlzLmNvbnRhaW5lci5nZXRDb21wb25lbnQoYSk7aWYodGhpcy5h Y3RpdmVJdGVtIT1hKXtpZih0aGlzLmFjdGl2ZUl0ZW0pe3RoaXMuYWN0aXZlSXRlbS5oaWRlKCl9 dGhpcy5hY3RpdmVJdGVtPWE7YS5zaG93KCk7dGhpcy5jb250YWluZXIuZG9MYXlvdXQoKTtpZih0 aGlzLmxheW91dE9uQ2FyZENoYW5nZSYmYS5kb0xheW91dCl7YS5kb0xheW91dCgpfX19LHJlbmRl ckFsbDpmdW5jdGlvbihhLGIpe2lmKHRoaXMuZGVmZXJyZWRSZW5kZXIpe3RoaXMucmVuZGVySXRl bSh0aGlzLmFjdGl2ZUl0ZW0sdW5kZWZpbmVkLGIpfWVsc2V7RXh0LmxheW91dC5DYXJkTGF5b3V0 LnN1cGVyY2xhc3MucmVuZGVyQWxsLmNhbGwodGhpcyxhLGIpfX19KTtFeHQuQ29udGFpbmVyLkxB WU9VVFMuY2FyZD1FeHQubGF5b3V0LkNhcmRMYXlvdXQ7RXh0LmxheW91dC5BbmNob3JMYXlvdXQ9 RXh0LmV4dGVuZChFeHQubGF5b3V0LkNvbnRhaW5lckxheW91dCx7bW9uaXRvclJlc2l6ZTp0cnVl LGdldEFuY2hvclZpZXdTaXplOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIuZG9tPT1kb2N1bWVudC5i b2R5P2IuZ2V0Vmlld1NpemUoKTpiLmdldFN0eWxlU2l6ZSgpfSxvbkxheW91dDpmdW5jdGlvbihr LG4pe0V4dC5sYXlvdXQuQW5jaG9yTGF5b3V0LnN1cGVyY2xhc3Mub25MYXlvdXQuY2FsbCh0aGlz LGssbik7dmFyIHQ9dGhpcy5nZXRBbmNob3JWaWV3U2l6ZShrLG4pO3ZhciByPXQud2lkdGgsaj10 LmhlaWdodDtpZihyPDIwJiZqPDIwKXtyZXR1cm59dmFyIGQscDtpZihrLmFuY2hvclNpemUpe2lm KHR5cGVvZiBrLmFuY2hvclNpemU9PSJudW1iZXIiKXtkPWsuYW5jaG9yU2l6ZX1lbHNle2Q9ay5h bmNob3JTaXplLndpZHRoO3A9ay5hbmNob3JTaXplLmhlaWdodH19ZWxzZXtkPWsuaW5pdGlhbENv bmZpZy53aWR0aDtwPWsuaW5pdGlhbENvbmZpZy5oZWlnaHR9dmFyIG09ay5pdGVtcy5pdGVtcyxs PW0ubGVuZ3RoLGcsbyxxLGUsYjtmb3IoZz0wO2c8bDtnKyspe289bVtnXTtpZihvLmFuY2hvcil7 cT1vLmFuY2hvclNwZWM7aWYoIXEpe3ZhciBzPW8uYW5jaG9yLnNwbGl0KCIgIik7by5hbmNob3JT cGVjPXE9e3JpZ2h0OnRoaXMucGFyc2VBbmNob3Ioc1swXSxvLmluaXRpYWxDb25maWcud2lkdGgs ZCksYm90dG9tOnRoaXMucGFyc2VBbmNob3Ioc1sxXSxvLmluaXRpYWxDb25maWcuaGVpZ2h0LHAp fX1lPXEucmlnaHQ/dGhpcy5hZGp1c3RXaWR0aEFuY2hvcihxLnJpZ2h0KHIpLG8pOnVuZGVmaW5l ZDtiPXEuYm90dG9tP3RoaXMuYWRqdXN0SGVpZ2h0QW5jaG9yKHEuYm90dG9tKGopLG8pOnVuZGVm aW5lZDtpZihlfHxiKXtvLnNldFNpemUoZXx8dW5kZWZpbmVkLGJ8fHVuZGVmaW5lZCl9fX19LHBh cnNlQW5jaG9yOmZ1bmN0aW9uKGMsaCxiKXtpZihjJiZjIT0ibm9uZSIpe3ZhciBlO2lmKC9eKHJ8 cmlnaHR8Ynxib3R0b20pJC9pLnRlc3QoYykpe3ZhciBnPWItaDtyZXR1cm4gZnVuY3Rpb24oYSl7 aWYoYSE9PWUpe2U9YTtyZXR1cm4gYS1nfX19ZWxzZXtpZihjLmluZGV4T2YoIiUiKSE9LTEpe3Zh ciBkPXBhcnNlRmxvYXQoYy5yZXBsYWNlKCIlIiwiIikpKjAuMDE7cmV0dXJuIGZ1bmN0aW9uKGEp e2lmKGEhPT1lKXtlPWE7cmV0dXJuIE1hdGguZmxvb3IoYSpkKX19fWVsc2V7Yz1wYXJzZUludChj LDEwKTtpZighaXNOYU4oYykpe3JldHVybiBmdW5jdGlvbihhKXtpZihhIT09ZSl7ZT1hO3JldHVy biBhK2N9fX19fX1yZXR1cm4gZmFsc2V9LGFkanVzdFdpZHRoQW5jaG9yOmZ1bmN0aW9uKGIsYSl7 cmV0dXJuIGJ9LGFkanVzdEhlaWdodEFuY2hvcjpmdW5jdGlvbihiLGEpe3JldHVybiBifX0pO0V4 dC5Db250YWluZXIuTEFZT1VUUy5hbmNob3I9RXh0LmxheW91dC5BbmNob3JMYXlvdXQ7RXh0Lmxh eW91dC5Db2x1bW5MYXlvdXQ9RXh0LmV4dGVuZChFeHQubGF5b3V0LkNvbnRhaW5lckxheW91dCx7 bW9uaXRvclJlc2l6ZTp0cnVlLGV4dHJhQ2xzOiJ4LWNvbHVtbiIsc2Nyb2xsT2Zmc2V0OjAsaXNW YWxpZFBhcmVudDpmdW5jdGlvbihiLGEpe3JldHVybihiLmdldFBvc2l0aW9uRWw/Yi5nZXRQb3Np dGlvbkVsKCk6Yi5nZXRFbCgpKS5kb20ucGFyZW50Tm9kZT09dGhpcy5pbm5lckN0LmRvbX0sb25M YXlvdXQ6ZnVuY3Rpb24oZCxqKXt2YXIgZT1kLml0ZW1zLml0ZW1zLGc9ZS5sZW5ndGgsayxhO2lm KCF0aGlzLmlubmVyQ3Qpe2ouYWRkQ2xhc3MoIngtY29sdW1uLWxheW91dC1jdCIpO3RoaXMuaW5u ZXJDdD1qLmNyZWF0ZUNoaWxkKHtjbHM6IngtY29sdW1uLWlubmVyIn0pO3RoaXMuaW5uZXJDdC5j cmVhdGVDaGlsZCh7Y2xzOiJ4LWNsZWFyIn0pfXRoaXMucmVuZGVyQWxsKGQsdGhpcy5pbm5lckN0 KTt2YXIgbj1FeHQuaXNJRSYmai5kb20hPUV4dC5nZXRCb2R5KCkuZG9tP2ouZ2V0U3R5bGVTaXpl KCk6ai5nZXRWaWV3U2l6ZSgpO2lmKG4ud2lkdGg8MSYmbi5oZWlnaHQ8MSl7cmV0dXJufXZhciBs PW4ud2lkdGgtai5nZXRQYWRkaW5nKCJsciIpLXRoaXMuc2Nyb2xsT2Zmc2V0LGI9bi5oZWlnaHQt ai5nZXRQYWRkaW5nKCJ0YiIpLG09bDt0aGlzLmlubmVyQ3Quc2V0V2lkdGgobCk7Zm9yKGE9MDth PGc7YSsrKXtrPWVbYV07aWYoIWsuY29sdW1uV2lkdGgpe20tPShrLmdldFNpemUoKS53aWR0aCtr LmdldEVsKCkuZ2V0TWFyZ2lucygibHIiKSl9fW09bTwwPzA6bTtmb3IoYT0wO2E8ZzthKyspe2s9 ZVthXTtpZihrLmNvbHVtbldpZHRoKXtrLnNldFNpemUoTWF0aC5mbG9vcihrLmNvbHVtbldpZHRo Km0pLWsuZ2V0RWwoKS5nZXRNYXJnaW5zKCJsciIpKX19fX0pO0V4dC5Db250YWluZXIuTEFZT1VU Uy5jb2x1bW49RXh0LmxheW91dC5Db2x1bW5MYXlvdXQ7RXh0LmxheW91dC5Cb3JkZXJMYXlvdXQ9 RXh0LmV4dGVuZChFeHQubGF5b3V0LkNvbnRhaW5lckxheW91dCx7bW9uaXRvclJlc2l6ZTp0cnVl LHJlbmRlcmVkOmZhbHNlLG9uTGF5b3V0OmZ1bmN0aW9uKGQsSCl7dmFyIGc7aWYoIXRoaXMucmVu ZGVyZWQpe0guYWRkQ2xhc3MoIngtYm9yZGVyLWxheW91dC1jdCIpO3ZhciB2PWQuaXRlbXMuaXRl bXM7Zz1bXTtmb3IodmFyIEE9MCxCPXYubGVuZ3RoO0E8QjtBKyspe3ZhciBFPXZbQV07dmFyIGw9 RS5yZWdpb247aWYoRS5jb2xsYXBzZWQpe2cucHVzaChFKX1FLmNvbGxhcHNlZD1mYWxzZTtpZigh RS5yZW5kZXJlZCl7RS5jbHM9RS5jbHM/RS5jbHMrIiB4LWJvcmRlci1wYW5lbCI6IngtYm9yZGVy LXBhbmVsIjtFLnJlbmRlcihILEEpfXRoaXNbbF09bCE9ImNlbnRlciImJkUuc3BsaXQ/bmV3IEV4 dC5sYXlvdXQuQm9yZGVyTGF5b3V0LlNwbGl0UmVnaW9uKHRoaXMsRS5pbml0aWFsQ29uZmlnLGwp Om5ldyBFeHQubGF5b3V0LkJvcmRlckxheW91dC5SZWdpb24odGhpcyxFLmluaXRpYWxDb25maWcs bCk7dGhpc1tsXS5yZW5kZXIoSCxFKX10aGlzLnJlbmRlcmVkPXRydWV9dmFyIHU9SC5nZXRWaWV3 U2l6ZSgpO2lmKHUud2lkdGg8MjB8fHUuaGVpZ2h0PDIwKXtpZihnKXt0aGlzLnJlc3RvcmVDb2xs YXBzZWQ9Z31yZXR1cm59ZWxzZXtpZih0aGlzLnJlc3RvcmVDb2xsYXBzZWQpe2c9dGhpcy5yZXN0 b3JlQ29sbGFwc2VkO2RlbGV0ZSB0aGlzLnJlc3RvcmVDb2xsYXBzZWR9fXZhciByPXUud2lkdGgs Qz11LmhlaWdodDt2YXIgcT1yLHo9QyxvPTAscD0wO3ZhciB4PXRoaXMubm9ydGgsdD10aGlzLnNv dXRoLGs9dGhpcy53ZXN0LEQ9dGhpcy5lYXN0LEU9dGhpcy5jZW50ZXI7aWYoIUUmJkV4dC5sYXlv dXQuQm9yZGVyTGF5b3V0LldBUk4hPT1mYWxzZSl7dGhyb3ciTm8gY2VudGVyIHJlZ2lvbiBkZWZp bmVkIGluIEJvcmRlckxheW91dCAiK2QuaWR9aWYoeCYmeC5pc1Zpc2libGUoKSl7dmFyIEc9eC5n ZXRTaXplKCk7dmFyIHk9eC5nZXRNYXJnaW5zKCk7Ry53aWR0aD1yLSh5LmxlZnQreS5yaWdodCk7 Ry54PXkubGVmdDtHLnk9eS50b3A7bz1HLmhlaWdodCtHLnkreS5ib3R0b207ei09bzt4LmFwcGx5 TGF5b3V0KEcpfWlmKHQmJnQuaXNWaXNpYmxlKCkpe3ZhciBHPXQuZ2V0U2l6ZSgpO3ZhciB5PXQu Z2V0TWFyZ2lucygpO0cud2lkdGg9ci0oeS5sZWZ0K3kucmlnaHQpO0cueD15LmxlZnQ7dmFyIEY9 KEcuaGVpZ2h0K3kudG9wK3kuYm90dG9tKTtHLnk9Qy1GK3kudG9wO3otPUY7dC5hcHBseUxheW91 dChHKX1pZihrJiZrLmlzVmlzaWJsZSgpKXt2YXIgRz1rLmdldFNpemUoKTt2YXIgeT1rLmdldE1h cmdpbnMoKTtHLmhlaWdodD16LSh5LnRvcCt5LmJvdHRvbSk7Ry54PXkubGVmdDtHLnk9byt5LnRv cDt2YXIgYT0oRy53aWR0aCt5LmxlZnQreS5yaWdodCk7cCs9YTtxLT1hO2suYXBwbHlMYXlvdXQo Ryl9aWYoRCYmRC5pc1Zpc2libGUoKSl7dmFyIEc9RC5nZXRTaXplKCk7dmFyIHk9RC5nZXRNYXJn aW5zKCk7Ry5oZWlnaHQ9ei0oeS50b3AreS5ib3R0b20pO3ZhciBhPShHLndpZHRoK3kubGVmdCt5 LnJpZ2h0KTtHLng9ci1hK3kubGVmdDtHLnk9byt5LnRvcDtxLT1hO0QuYXBwbHlMYXlvdXQoRyl9 aWYoRSl7dmFyIHk9RS5nZXRNYXJnaW5zKCk7dmFyIGo9e3g6cCt5LmxlZnQseTpvK3kudG9wLHdp ZHRoOnEtKHkubGVmdCt5LnJpZ2h0KSxoZWlnaHQ6ei0oeS50b3AreS5ib3R0b20pfTtFLmFwcGx5 TGF5b3V0KGopfWlmKGcpe2Zvcih2YXIgQT0wLEI9Zy5sZW5ndGg7QTxCO0ErKyl7Z1tBXS5jb2xs YXBzZShmYWxzZSl9fWlmKEV4dC5pc0lFJiZFeHQuaXNTdHJpY3Qpe0gucmVwYWludCgpfX0sZGVz dHJveTpmdW5jdGlvbigpe3ZhciBiPVsibm9ydGgiLCJzb3V0aCIsImVhc3QiLCJ3ZXN0Il07Zm9y KHZhciBhPTA7YTxiLmxlbmd0aDthKyspe3ZhciBjPXRoaXNbYlthXV07aWYoYyl7aWYoYy5kZXN0 cm95KXtjLmRlc3Ryb3koKX1lbHNle2lmKGMuc3BsaXQpe2Muc3BsaXQuZGVzdHJveSh0cnVlKX19 fX1FeHQubGF5b3V0LkJvcmRlckxheW91dC5zdXBlcmNsYXNzLmRlc3Ryb3kuY2FsbCh0aGlzKX19 KTtFeHQubGF5b3V0LkJvcmRlckxheW91dC5SZWdpb249ZnVuY3Rpb24oYixhLGMpe0V4dC5hcHBs eSh0aGlzLGEpO3RoaXMubGF5b3V0PWI7dGhpcy5wb3NpdGlvbj1jO3RoaXMuc3RhdGU9e307aWYo dHlwZW9mIHRoaXMubWFyZ2lucz09InN0cmluZyIpe3RoaXMubWFyZ2lucz10aGlzLmxheW91dC5w YXJzZU1hcmdpbnModGhpcy5tYXJnaW5zKX10aGlzLm1hcmdpbnM9RXh0LmFwcGx5SWYodGhpcy5t YXJnaW5zfHx7fSx0aGlzLmRlZmF1bHRNYXJnaW5zKTtpZih0aGlzLmNvbGxhcHNpYmxlKXtpZih0 eXBlb2YgdGhpcy5jbWFyZ2lucz09InN0cmluZyIpe3RoaXMuY21hcmdpbnM9dGhpcy5sYXlvdXQu cGFyc2VNYXJnaW5zKHRoaXMuY21hcmdpbnMpfWlmKHRoaXMuY29sbGFwc2VNb2RlPT0ibWluaSIm JiF0aGlzLmNtYXJnaW5zKXt0aGlzLmNtYXJnaW5zPXtsZWZ0OjAsdG9wOjAscmlnaHQ6MCxib3R0 b206MH19ZWxzZXt0aGlzLmNtYXJnaW5zPUV4dC5hcHBseUlmKHRoaXMuY21hcmdpbnN8fHt9LGM9 PSJub3J0aCJ8fGM9PSJzb3V0aCI/dGhpcy5kZWZhdWx0TlNDTWFyZ2luczp0aGlzLmRlZmF1bHRF V0NNYXJnaW5zKX19fTtFeHQubGF5b3V0LkJvcmRlckxheW91dC5SZWdpb24ucHJvdG90eXBlPXtj b2xsYXBzaWJsZTpmYWxzZSxzcGxpdDpmYWxzZSxmbG9hdGFibGU6dHJ1ZSxtaW5XaWR0aDo1MCxt aW5IZWlnaHQ6NTAsZGVmYXVsdE1hcmdpbnM6e2xlZnQ6MCx0b3A6MCxyaWdodDowLGJvdHRvbTow fSxkZWZhdWx0TlNDTWFyZ2luczp7bGVmdDo1LHRvcDo1LHJpZ2h0OjUsYm90dG9tOjV9LGRlZmF1 bHRFV0NNYXJnaW5zOntsZWZ0OjUsdG9wOjAscmlnaHQ6NSxib3R0b206MH0sZmxvYXRpbmdaSW5k ZXg6MTAwLGlzQ29sbGFwc2VkOmZhbHNlLHJlbmRlcjpmdW5jdGlvbihiLGMpe3RoaXMucGFuZWw9 YztjLmVsLmVuYWJsZURpc3BsYXlNb2RlKCk7dGhpcy50YXJnZXRFbD1iO3RoaXMuZWw9Yy5lbDt2 YXIgYT1jLmdldFN0YXRlLGQ9dGhpcy5wb3NpdGlvbjtjLmdldFN0YXRlPWZ1bmN0aW9uKCl7cmV0 dXJuIEV4dC5hcHBseShhLmNhbGwoYyl8fHt9LHRoaXMuc3RhdGUpfS5jcmVhdGVEZWxlZ2F0ZSh0 aGlzKTtpZihkIT0iY2VudGVyIil7Yy5hbGxvd1F1ZXVlZEV4cGFuZD1mYWxzZTtjLm9uKHtiZWZv cmVjb2xsYXBzZTp0aGlzLmJlZm9yZUNvbGxhcHNlLGNvbGxhcHNlOnRoaXMub25Db2xsYXBzZSxi ZWZvcmVleHBhbmQ6dGhpcy5iZWZvcmVFeHBhbmQsZXhwYW5kOnRoaXMub25FeHBhbmQsaGlkZTp0 aGlzLm9uSGlkZSxzaG93OnRoaXMub25TaG93LHNjb3BlOnRoaXN9KTtpZih0aGlzLmNvbGxhcHNp YmxlfHx0aGlzLmZsb2F0YWJsZSl7Yy5jb2xsYXBzZUVsPSJlbCI7Yy5zbGlkZUFuY2hvcj10aGlz LmdldFNsaWRlQW5jaG9yKCl9aWYoYy50b29scyYmYy50b29scy50b2dnbGUpe2MudG9vbHMudG9n Z2xlLmFkZENsYXNzKCJ4LXRvb2wtY29sbGFwc2UtIitkKTtjLnRvb2xzLnRvZ2dsZS5hZGRDbGFz c09uT3ZlcigieC10b29sLWNvbGxhcHNlLSIrZCsiLW92ZXIiKX19fSxnZXRDb2xsYXBzZWRFbDpm dW5jdGlvbigpe2lmKCF0aGlzLmNvbGxhcHNlZEVsKXtpZighdGhpcy50b29sVGVtcGxhdGUpe3Zh ciBiPW5ldyBFeHQuVGVtcGxhdGUoJzxkaXYgY2xhc3M9IngtdG9vbCB4LXRvb2wte2lkfSI+JiMx NjA7PC9kaXY+Jyk7Yi5kaXNhYmxlRm9ybWF0cz10cnVlO2IuY29tcGlsZSgpO0V4dC5sYXlvdXQu Qm9yZGVyTGF5b3V0LlJlZ2lvbi5wcm90b3R5cGUudG9vbFRlbXBsYXRlPWJ9dGhpcy5jb2xsYXBz ZWRFbD10aGlzLnRhcmdldEVsLmNyZWF0ZUNoaWxkKHtjbHM6IngtbGF5b3V0LWNvbGxhcHNlZCB4 LWxheW91dC1jb2xsYXBzZWQtIit0aGlzLnBvc2l0aW9uLGlkOnRoaXMucGFuZWwuaWQrIi14Y29s bGFwc2VkIn0pO3RoaXMuY29sbGFwc2VkRWwuZW5hYmxlRGlzcGxheU1vZGUoImJsb2NrIik7aWYo dGhpcy5jb2xsYXBzZU1vZGU9PSJtaW5pIil7dGhpcy5jb2xsYXBzZWRFbC5hZGRDbGFzcygieC1s YXlvdXQtY21pbmktIit0aGlzLnBvc2l0aW9uKTt0aGlzLm1pbmlDb2xsYXBzZWRFbD10aGlzLmNv bGxhcHNlZEVsLmNyZWF0ZUNoaWxkKHtjbHM6IngtbGF5b3V0LW1pbmkgeC1sYXlvdXQtbWluaS0i K3RoaXMucG9zaXRpb24saHRtbDoiJiMxNjA7In0pO3RoaXMubWluaUNvbGxhcHNlZEVsLmFkZENs YXNzT25PdmVyKCJ4LWxheW91dC1taW5pLW92ZXIiKTt0aGlzLmNvbGxhcHNlZEVsLmFkZENsYXNz T25PdmVyKCJ4LWxheW91dC1jb2xsYXBzZWQtb3ZlciIpO3RoaXMuY29sbGFwc2VkRWwub24oImNs aWNrIix0aGlzLm9uRXhwYW5kQ2xpY2ssdGhpcyx7c3RvcEV2ZW50OnRydWV9KX1lbHNle2lmKHRo aXMuY29sbGFwc2libGUhPT1mYWxzZSYmIXRoaXMuaGlkZUNvbGxhcHNlVG9vbCl7dmFyIGE9dGhp cy50b29sVGVtcGxhdGUuYXBwZW5kKHRoaXMuY29sbGFwc2VkRWwuZG9tLHtpZDoiZXhwYW5kLSIr dGhpcy5wb3NpdGlvbn0sdHJ1ZSk7YS5hZGRDbGFzc09uT3ZlcigieC10b29sLWV4cGFuZC0iK3Ro aXMucG9zaXRpb24rIi1vdmVyIik7YS5vbigiY2xpY2siLHRoaXMub25FeHBhbmRDbGljayx0aGlz LHtzdG9wRXZlbnQ6dHJ1ZX0pfWlmKHRoaXMuZmxvYXRhYmxlIT09ZmFsc2V8fHRoaXMudGl0bGVD b2xsYXBzZSl7dGhpcy5jb2xsYXBzZWRFbC5hZGRDbGFzc09uT3ZlcigieC1sYXlvdXQtY29sbGFw c2VkLW92ZXIiKTt0aGlzLmNvbGxhcHNlZEVsLm9uKCJjbGljayIsdGhpc1t0aGlzLmZsb2F0YWJs ZT8iY29sbGFwc2VDbGljayI6Im9uRXhwYW5kQ2xpY2siXSx0aGlzKX19fXJldHVybiB0aGlzLmNv bGxhcHNlZEVsfSxvbkV4cGFuZENsaWNrOmZ1bmN0aW9uKGEpe2lmKHRoaXMuaXNTbGlkKXt0aGlz LmFmdGVyU2xpZGVJbigpO3RoaXMucGFuZWwuZXhwYW5kKGZhbHNlKX1lbHNle3RoaXMucGFuZWwu ZXhwYW5kKCl9fSxvbkNvbGxhcHNlQ2xpY2s6ZnVuY3Rpb24oYSl7dGhpcy5wYW5lbC5jb2xsYXBz ZSgpfSxiZWZvcmVDb2xsYXBzZTpmdW5jdGlvbihiLGEpe3RoaXMubGFzdEFuaW09YTtpZih0aGlz LnNwbGl0RWwpe3RoaXMuc3BsaXRFbC5oaWRlKCl9dGhpcy5nZXRDb2xsYXBzZWRFbCgpLnNob3co KTt0aGlzLnBhbmVsLmVsLnNldFN0eWxlKCJ6LWluZGV4IiwxMDApO3RoaXMuaXNDb2xsYXBzZWQ9 dHJ1ZTt0aGlzLmxheW91dC5sYXlvdXQoKX0sb25Db2xsYXBzZTpmdW5jdGlvbihhKXt0aGlzLnBh bmVsLmVsLnNldFN0eWxlKCJ6LWluZGV4IiwxKTtpZih0aGlzLmxhc3RBbmltPT09ZmFsc2V8fHRo aXMucGFuZWwuYW5pbUNvbGxhcHNlPT09ZmFsc2Upe3RoaXMuZ2V0Q29sbGFwc2VkRWwoKS5kb20u c3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSJ9ZWxzZXt0aGlzLmdldENvbGxhcHNlZEVsKCkuc2xp ZGVJbih0aGlzLnBhbmVsLnNsaWRlQW5jaG9yLHtkdXJhdGlvbjowLjJ9KX10aGlzLnN0YXRlLmNv bGxhcHNlZD10cnVlO3RoaXMucGFuZWwuc2F2ZVN0YXRlKCl9LGJlZm9yZUV4cGFuZDpmdW5jdGlv bihhKXt2YXIgYj10aGlzLmdldENvbGxhcHNlZEVsKCk7dGhpcy5lbC5zaG93KCk7aWYodGhpcy5w b3NpdGlvbj09ImVhc3QifHx0aGlzLnBvc2l0aW9uPT0id2VzdCIpe3RoaXMucGFuZWwuc2V0U2l6 ZSh1bmRlZmluZWQsYi5nZXRIZWlnaHQoKSl9ZWxzZXt0aGlzLnBhbmVsLnNldFNpemUoYi5nZXRX aWR0aCgpLHVuZGVmaW5lZCl9Yi5oaWRlKCk7Yi5kb20uc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVu Ijt0aGlzLnBhbmVsLmVsLnNldFN0eWxlKCJ6LWluZGV4Iix0aGlzLmZsb2F0aW5nWkluZGV4KX0s b25FeHBhbmQ6ZnVuY3Rpb24oKXt0aGlzLmlzQ29sbGFwc2VkPWZhbHNlO2lmKHRoaXMuc3BsaXRF bCl7dGhpcy5zcGxpdEVsLnNob3coKX10aGlzLmxheW91dC5sYXlvdXQoKTt0aGlzLnBhbmVsLmVs LnNldFN0eWxlKCJ6LWluZGV4IiwxKTt0aGlzLnN0YXRlLmNvbGxhcHNlZD1mYWxzZTt0aGlzLnBh bmVsLnNhdmVTdGF0ZSgpfSxjb2xsYXBzZUNsaWNrOmZ1bmN0aW9uKGEpe2lmKHRoaXMuaXNTbGlk KXthLnN0b3BQcm9wYWdhdGlvbigpO3RoaXMuc2xpZGVJbigpfWVsc2V7YS5zdG9wUHJvcGFnYXRp b24oKTt0aGlzLnNsaWRlT3V0KCl9fSxvbkhpZGU6ZnVuY3Rpb24oKXtpZih0aGlzLmlzQ29sbGFw c2VkKXt0aGlzLmdldENvbGxhcHNlZEVsKCkuaGlkZSgpfWVsc2V7aWYodGhpcy5zcGxpdEVsKXt0 aGlzLnNwbGl0RWwuaGlkZSgpfX19LG9uU2hvdzpmdW5jdGlvbigpe2lmKHRoaXMuaXNDb2xsYXBz ZWQpe3RoaXMuZ2V0Q29sbGFwc2VkRWwoKS5zaG93KCl9ZWxzZXtpZih0aGlzLnNwbGl0RWwpe3Ro aXMuc3BsaXRFbC5zaG93KCl9fX0saXNWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuICF0aGlzLnBh bmVsLmhpZGRlbn0sZ2V0TWFyZ2luczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQ29sbGFwc2Vk JiZ0aGlzLmNtYXJnaW5zP3RoaXMuY21hcmdpbnM6dGhpcy5tYXJnaW5zfSxnZXRTaXplOmZ1bmN0 aW9uKCl7cmV0dXJuIHRoaXMuaXNDb2xsYXBzZWQ/dGhpcy5nZXRDb2xsYXBzZWRFbCgpLmdldFNp emUoKTp0aGlzLnBhbmVsLmdldFNpemUoKX0sc2V0UGFuZWw6ZnVuY3Rpb24oYSl7dGhpcy5wYW5l bD1hfSxnZXRNaW5XaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1pbldpZHRofSxnZXRNaW5I ZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5taW5IZWlnaHR9LGFwcGx5TGF5b3V0Q29sbGFw c2VkOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0Q29sbGFwc2VkRWwoKTtiLnNldExlZnRUb3Ao YS54LGEueSk7Yi5zZXRTaXplKGEud2lkdGgsYS5oZWlnaHQpfSxhcHBseUxheW91dDpmdW5jdGlv bihhKXtpZih0aGlzLmlzQ29sbGFwc2VkKXt0aGlzLmFwcGx5TGF5b3V0Q29sbGFwc2VkKGEpfWVs c2V7dGhpcy5wYW5lbC5zZXRQb3NpdGlvbihhLngsYS55KTt0aGlzLnBhbmVsLnNldFNpemUoYS53 aWR0aCxhLmhlaWdodCl9fSxiZWZvcmVTbGlkZTpmdW5jdGlvbigpe3RoaXMucGFuZWwuYmVmb3Jl RWZmZWN0KCl9LGFmdGVyU2xpZGU6ZnVuY3Rpb24oKXt0aGlzLnBhbmVsLmFmdGVyRWZmZWN0KCl9 LGluaXRBdXRvSGlkZTpmdW5jdGlvbigpe2lmKHRoaXMuYXV0b0hpZGUhPT1mYWxzZSl7aWYoIXRo aXMuYXV0b0hpZGVIZCl7dmFyIGE9bmV3IEV4dC51dGlsLkRlbGF5ZWRUYXNrKHRoaXMuc2xpZGVJ bix0aGlzKTt0aGlzLmF1dG9IaWRlSGQ9e21vdXNlb3V0OmZ1bmN0aW9uKGIpe2lmKCFiLndpdGhp bih0aGlzLmVsLHRydWUpKXthLmRlbGF5KDUwMCl9fSxtb3VzZW92ZXI6ZnVuY3Rpb24oYil7YS5j YW5jZWwoKX0sc2NvcGU6dGhpc319dGhpcy5lbC5vbih0aGlzLmF1dG9IaWRlSGQpfX0sY2xlYXJB dXRvSGlkZTpmdW5jdGlvbigpe2lmKHRoaXMuYXV0b0hpZGUhPT1mYWxzZSl7dGhpcy5lbC51bigi bW91c2VvdXQiLHRoaXMuYXV0b0hpZGVIZC5tb3VzZW91dCk7dGhpcy5lbC51bigibW91c2VvdmVy Iix0aGlzLmF1dG9IaWRlSGQubW91c2VvdmVyKX19LGNsZWFyTW9uaXRvcjpmdW5jdGlvbigpe0V4 dC5nZXREb2MoKS51bigiY2xpY2siLHRoaXMuc2xpZGVJbklmLHRoaXMpfSxzbGlkZU91dDpmdW5j dGlvbigpe2lmKHRoaXMuaXNTbGlkfHx0aGlzLmVsLmhhc0FjdGl2ZUZ4KCkpe3JldHVybn10aGlz LmlzU2xpZD10cnVlO3ZhciBhPXRoaXMucGFuZWwudG9vbHM7aWYoYSYmYS50b2dnbGUpe2EudG9n Z2xlLmhpZGUoKX10aGlzLmVsLnNob3coKTtpZih0aGlzLnBvc2l0aW9uPT0iZWFzdCJ8fHRoaXMu cG9zaXRpb249PSJ3ZXN0Iil7dGhpcy5wYW5lbC5zZXRTaXplKHVuZGVmaW5lZCx0aGlzLmNvbGxh cHNlZEVsLmdldEhlaWdodCgpKX1lbHNle3RoaXMucGFuZWwuc2V0U2l6ZSh0aGlzLmNvbGxhcHNl ZEVsLmdldFdpZHRoKCksdW5kZWZpbmVkKX10aGlzLnJlc3RvcmVMVD1bdGhpcy5lbC5kb20uc3R5 bGUubGVmdCx0aGlzLmVsLmRvbS5zdHlsZS50b3BdO3RoaXMuZWwuYWxpZ25Ubyh0aGlzLmNvbGxh cHNlZEVsLHRoaXMuZ2V0Q29sbGFwc2VBbmNob3IoKSk7dGhpcy5lbC5zZXRTdHlsZSgiei1pbmRl eCIsdGhpcy5mbG9hdGluZ1pJbmRleCsyKTt0aGlzLnBhbmVsLmVsLnJlcGxhY2VDbGFzcygieC1w YW5lbC1jb2xsYXBzZWQiLCJ4LXBhbmVsLWZsb2F0aW5nIik7aWYodGhpcy5hbmltRmxvYXQhPT1m YWxzZSl7dGhpcy5iZWZvcmVTbGlkZSgpO3RoaXMuZWwuc2xpZGVJbih0aGlzLmdldFNsaWRlQW5j aG9yKCkse2NhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy5hZnRlclNsaWRlKCk7dGhpcy5pbml0QXV0 b0hpZGUoKTtFeHQuZ2V0RG9jKCkub24oImNsaWNrIix0aGlzLnNsaWRlSW5JZix0aGlzKX0sc2Nv cGU6dGhpcyxibG9jazp0cnVlfSl9ZWxzZXt0aGlzLmluaXRBdXRvSGlkZSgpO0V4dC5nZXREb2Mo KS5vbigiY2xpY2siLHRoaXMuc2xpZGVJbklmLHRoaXMpfX0sYWZ0ZXJTbGlkZUluOmZ1bmN0aW9u KCl7dGhpcy5jbGVhckF1dG9IaWRlKCk7dGhpcy5pc1NsaWQ9ZmFsc2U7dGhpcy5jbGVhck1vbml0 b3IoKTt0aGlzLmVsLnNldFN0eWxlKCJ6LWluZGV4IiwiIik7dGhpcy5wYW5lbC5lbC5yZXBsYWNl Q2xhc3MoIngtcGFuZWwtZmxvYXRpbmciLCJ4LXBhbmVsLWNvbGxhcHNlZCIpO3RoaXMuZWwuZG9t LnN0eWxlLmxlZnQ9dGhpcy5yZXN0b3JlTFRbMF07dGhpcy5lbC5kb20uc3R5bGUudG9wPXRoaXMu cmVzdG9yZUxUWzFdO3ZhciBhPXRoaXMucGFuZWwudG9vbHM7aWYoYSYmYS50b2dnbGUpe2EudG9n Z2xlLnNob3coKX19LHNsaWRlSW46ZnVuY3Rpb24oYSl7aWYoIXRoaXMuaXNTbGlkfHx0aGlzLmVs Lmhhc0FjdGl2ZUZ4KCkpe0V4dC5jYWxsYmFjayhhKTtyZXR1cm59dGhpcy5pc1NsaWQ9ZmFsc2U7 aWYodGhpcy5hbmltRmxvYXQhPT1mYWxzZSl7dGhpcy5iZWZvcmVTbGlkZSgpO3RoaXMuZWwuc2xp ZGVPdXQodGhpcy5nZXRTbGlkZUFuY2hvcigpLHtjYWxsYmFjazpmdW5jdGlvbigpe3RoaXMuZWwu aGlkZSgpO3RoaXMuYWZ0ZXJTbGlkZSgpO3RoaXMuYWZ0ZXJTbGlkZUluKCk7RXh0LmNhbGxiYWNr KGEpfSxzY29wZTp0aGlzLGJsb2NrOnRydWV9KX1lbHNle3RoaXMuZWwuaGlkZSgpO3RoaXMuYWZ0 ZXJTbGlkZUluKCl9fSxzbGlkZUluSWY6ZnVuY3Rpb24oYSl7aWYoIWEud2l0aGluKHRoaXMuZWwp KXt0aGlzLnNsaWRlSW4oKX19LGFuY2hvcnM6e3dlc3Q6ImxlZnQiLGVhc3Q6InJpZ2h0Iixub3J0 aDoidG9wIixzb3V0aDoiYm90dG9tIn0sc2FuY2hvcnM6e3dlc3Q6ImwiLGVhc3Q6InIiLG5vcnRo OiJ0Iixzb3V0aDoiYiJ9LGNhbmNob3JzOnt3ZXN0OiJ0bC10ciIsZWFzdDoidHItdGwiLG5vcnRo OiJ0bC1ibCIsc291dGg6ImJsLXRsIn0sZ2V0QW5jaG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu YW5jaG9yc1t0aGlzLnBvc2l0aW9uXX0sZ2V0Q29sbGFwc2VBbmNob3I6ZnVuY3Rpb24oKXtyZXR1 cm4gdGhpcy5jYW5jaG9yc1t0aGlzLnBvc2l0aW9uXX0sZ2V0U2xpZGVBbmNob3I6ZnVuY3Rpb24o KXtyZXR1cm4gdGhpcy5zYW5jaG9yc1t0aGlzLnBvc2l0aW9uXX0sZ2V0QWxpZ25BZGo6ZnVuY3Rp b24oKXt2YXIgYT10aGlzLmNtYXJnaW5zO3N3aXRjaCh0aGlzLnBvc2l0aW9uKXtjYXNlIndlc3Qi OnJldHVyblswLDBdO2JyZWFrO2Nhc2UiZWFzdCI6cmV0dXJuWzAsMF07YnJlYWs7Y2FzZSJub3J0 aCI6cmV0dXJuWzAsMF07YnJlYWs7Y2FzZSJzb3V0aCI6cmV0dXJuWzAsMF07YnJlYWt9fSxnZXRF eHBhbmRBZGo6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmNvbGxhcHNlZEVsLGE9dGhpcy5jbWFyZ2lu cztzd2l0Y2godGhpcy5wb3NpdGlvbil7Y2FzZSJ3ZXN0IjpyZXR1cm5bLShhLnJpZ2h0K2IuZ2V0 V2lkdGgoKSthLmxlZnQpLDBdO2JyZWFrO2Nhc2UiZWFzdCI6cmV0dXJuW2EucmlnaHQrYi5nZXRX aWR0aCgpK2EubGVmdCwwXTticmVhaztjYXNlIm5vcnRoIjpyZXR1cm5bMCwtKGEudG9wK2EuYm90 dG9tK2IuZ2V0SGVpZ2h0KCkpXTticmVhaztjYXNlInNvdXRoIjpyZXR1cm5bMCxhLnRvcCthLmJv dHRvbStiLmdldEhlaWdodCgpXTticmVha319fTtFeHQubGF5b3V0LkJvcmRlckxheW91dC5TcGxp dFJlZ2lvbj1mdW5jdGlvbihiLGEsYyl7RXh0LmxheW91dC5Cb3JkZXJMYXlvdXQuU3BsaXRSZWdp b24uc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYixhLGMpO3RoaXMuYXBwbHlMYXlv dXQ9dGhpcy5hcHBseUZuc1tjXX07RXh0LmV4dGVuZChFeHQubGF5b3V0LkJvcmRlckxheW91dC5T cGxpdFJlZ2lvbixFeHQubGF5b3V0LkJvcmRlckxheW91dC5SZWdpb24se3NwbGl0VGlwOiJEcmFn IHRvIHJlc2l6ZS4iLGNvbGxhcHNpYmxlU3BsaXRUaXA6IkRyYWcgdG8gcmVzaXplLiBEb3VibGUg Y2xpY2sgdG8gaGlkZS4iLHVzZVNwbGl0VGlwczpmYWxzZSxzcGxpdFNldHRpbmdzOntub3J0aDp7 b3JpZW50YXRpb246RXh0LlNwbGl0QmFyLlZFUlRJQ0FMLHBsYWNlbWVudDpFeHQuU3BsaXRCYXIu VE9QLG1heEZuOiJnZXRWTWF4U2l6ZSIsbWluUHJvcDoibWluSGVpZ2h0IixtYXhQcm9wOiJtYXhI ZWlnaHQifSxzb3V0aDp7b3JpZW50YXRpb246RXh0LlNwbGl0QmFyLlZFUlRJQ0FMLHBsYWNlbWVu dDpFeHQuU3BsaXRCYXIuQk9UVE9NLG1heEZuOiJnZXRWTWF4U2l6ZSIsbWluUHJvcDoibWluSGVp Z2h0IixtYXhQcm9wOiJtYXhIZWlnaHQifSxlYXN0OntvcmllbnRhdGlvbjpFeHQuU3BsaXRCYXIu SE9SSVpPTlRBTCxwbGFjZW1lbnQ6RXh0LlNwbGl0QmFyLlJJR0hULG1heEZuOiJnZXRITWF4U2l6 ZSIsbWluUHJvcDoibWluV2lkdGgiLG1heFByb3A6Im1heFdpZHRoIn0sd2VzdDp7b3JpZW50YXRp b246RXh0LlNwbGl0QmFyLkhPUklaT05UQUwscGxhY2VtZW50OkV4dC5TcGxpdEJhci5MRUZULG1h eEZuOiJnZXRITWF4U2l6ZSIsbWluUHJvcDoibWluV2lkdGgiLG1heFByb3A6Im1heFdpZHRoIn19 LGFwcGx5Rm5zOnt3ZXN0OmZ1bmN0aW9uKGMpe2lmKHRoaXMuaXNDb2xsYXBzZWQpe3JldHVybiB0 aGlzLmFwcGx5TGF5b3V0Q29sbGFwc2VkKGMpfXZhciBkPXRoaXMuc3BsaXRFbC5kb20sYj1kLnN0 eWxlO3RoaXMucGFuZWwuc2V0UG9zaXRpb24oYy54LGMueSk7dmFyIGE9ZC5vZmZzZXRXaWR0aDti LmxlZnQ9KGMueCtjLndpZHRoLWEpKyJweCI7Yi50b3A9KGMueSkrInB4IjtiLmhlaWdodD1NYXRo Lm1heCgwLGMuaGVpZ2h0KSsicHgiO3RoaXMucGFuZWwuc2V0U2l6ZShjLndpZHRoLWEsYy5oZWln aHQpfSxlYXN0OmZ1bmN0aW9uKGMpe2lmKHRoaXMuaXNDb2xsYXBzZWQpe3JldHVybiB0aGlzLmFw cGx5TGF5b3V0Q29sbGFwc2VkKGMpfXZhciBkPXRoaXMuc3BsaXRFbC5kb20sYj1kLnN0eWxlO3Zh ciBhPWQub2Zmc2V0V2lkdGg7dGhpcy5wYW5lbC5zZXRQb3NpdGlvbihjLngrYSxjLnkpO2IubGVm dD0oYy54KSsicHgiO2IudG9wPShjLnkpKyJweCI7Yi5oZWlnaHQ9TWF0aC5tYXgoMCxjLmhlaWdo dCkrInB4Ijt0aGlzLnBhbmVsLnNldFNpemUoYy53aWR0aC1hLGMuaGVpZ2h0KX0sbm9ydGg6ZnVu Y3Rpb24oYyl7aWYodGhpcy5pc0NvbGxhcHNlZCl7cmV0dXJuIHRoaXMuYXBwbHlMYXlvdXRDb2xs YXBzZWQoYyl9dmFyIGQ9dGhpcy5zcGxpdEVsLmRvbSxiPWQuc3R5bGU7dmFyIGE9ZC5vZmZzZXRI ZWlnaHQ7dGhpcy5wYW5lbC5zZXRQb3NpdGlvbihjLngsYy55KTtiLmxlZnQ9KGMueCkrInB4Ijti LnRvcD0oYy55K2MuaGVpZ2h0LWEpKyJweCI7Yi53aWR0aD1NYXRoLm1heCgwLGMud2lkdGgpKyJw eCI7dGhpcy5wYW5lbC5zZXRTaXplKGMud2lkdGgsYy5oZWlnaHQtYSl9LHNvdXRoOmZ1bmN0aW9u KGMpe2lmKHRoaXMuaXNDb2xsYXBzZWQpe3JldHVybiB0aGlzLmFwcGx5TGF5b3V0Q29sbGFwc2Vk KGMpfXZhciBkPXRoaXMuc3BsaXRFbC5kb20sYj1kLnN0eWxlO3ZhciBhPWQub2Zmc2V0SGVpZ2h0 O3RoaXMucGFuZWwuc2V0UG9zaXRpb24oYy54LGMueSthKTtiLmxlZnQ9KGMueCkrInB4IjtiLnRv cD0oYy55KSsicHgiO2Iud2lkdGg9TWF0aC5tYXgoMCxjLndpZHRoKSsicHgiO3RoaXMucGFuZWwu c2V0U2l6ZShjLndpZHRoLGMuaGVpZ2h0LWEpfX0scmVuZGVyOmZ1bmN0aW9uKGEsYyl7RXh0Lmxh eW91dC5Cb3JkZXJMYXlvdXQuU3BsaXRSZWdpb24uc3VwZXJjbGFzcy5yZW5kZXIuY2FsbCh0aGlz LGEsYyk7dmFyIGQ9dGhpcy5wb3NpdGlvbjt0aGlzLnNwbGl0RWw9YS5jcmVhdGVDaGlsZCh7Y2xz OiJ4LWxheW91dC1zcGxpdCB4LWxheW91dC1zcGxpdC0iK2QsaHRtbDoiJiMxNjA7IixpZDp0aGlz LnBhbmVsLmlkKyIteHNwbGl0In0pO2lmKHRoaXMuY29sbGFwc2VNb2RlPT0ibWluaSIpe3RoaXMu bWluaVNwbGl0RWw9dGhpcy5zcGxpdEVsLmNyZWF0ZUNoaWxkKHtjbHM6IngtbGF5b3V0LW1pbmkg eC1sYXlvdXQtbWluaS0iK2QsaHRtbDoiJiMxNjA7In0pO3RoaXMubWluaVNwbGl0RWwuYWRkQ2xh c3NPbk92ZXIoIngtbGF5b3V0LW1pbmktb3ZlciIpO3RoaXMubWluaVNwbGl0RWwub24oImNsaWNr Iix0aGlzLm9uQ29sbGFwc2VDbGljayx0aGlzLHtzdG9wRXZlbnQ6dHJ1ZX0pfXZhciBiPXRoaXMu c3BsaXRTZXR0aW5nc1tkXTt0aGlzLnNwbGl0PW5ldyBFeHQuU3BsaXRCYXIodGhpcy5zcGxpdEVs LmRvbSxjLmVsLGIub3JpZW50YXRpb24pO3RoaXMuc3BsaXQudGlja1NpemU9dGhpcy50aWNrU2l6 ZTt0aGlzLnNwbGl0LnBsYWNlbWVudD1iLnBsYWNlbWVudDt0aGlzLnNwbGl0LmdldE1heGltdW1T aXplPXRoaXNbYi5tYXhGbl0uY3JlYXRlRGVsZWdhdGUodGhpcyk7dGhpcy5zcGxpdC5taW5TaXpl PXRoaXMubWluU2l6ZXx8dGhpc1tiLm1pblByb3BdO3RoaXMuc3BsaXQub24oImJlZm9yZWFwcGx5 Iix0aGlzLm9uU3BsaXRNb3ZlLHRoaXMpO3RoaXMuc3BsaXQudXNlU2hpbT10aGlzLnVzZVNoaW09 PT10cnVlO3RoaXMubWF4U2l6ZT10aGlzLm1heFNpemV8fHRoaXNbYi5tYXhQcm9wXTtpZihjLmhp ZGRlbil7dGhpcy5zcGxpdEVsLmhpZGUoKX1pZih0aGlzLnVzZVNwbGl0VGlwcyl7dGhpcy5zcGxp dEVsLmRvbS50aXRsZT10aGlzLmNvbGxhcHNpYmxlP3RoaXMuY29sbGFwc2libGVTcGxpdFRpcDp0 aGlzLnNwbGl0VGlwfWlmKHRoaXMuY29sbGFwc2libGUpe3RoaXMuc3BsaXRFbC5vbigiZGJsY2xp Y2siLHRoaXMub25Db2xsYXBzZUNsaWNrLHRoaXMpfX0sZ2V0U2l6ZTpmdW5jdGlvbigpe2lmKHRo aXMuaXNDb2xsYXBzZWQpe3JldHVybiB0aGlzLmNvbGxhcHNlZEVsLmdldFNpemUoKX12YXIgYT10 aGlzLnBhbmVsLmdldFNpemUoKTtpZih0aGlzLnBvc2l0aW9uPT0ibm9ydGgifHx0aGlzLnBvc2l0 aW9uPT0ic291dGgiKXthLmhlaWdodCs9dGhpcy5zcGxpdEVsLmRvbS5vZmZzZXRIZWlnaHR9ZWxz ZXthLndpZHRoKz10aGlzLnNwbGl0RWwuZG9tLm9mZnNldFdpZHRofXJldHVybiBhfSxnZXRITWF4 U2l6ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMubWF4U2l6ZXx8MTAwMDA7dmFyIGE9dGhpcy5sYXlv dXQuY2VudGVyO3JldHVybiBNYXRoLm1pbihiLCh0aGlzLmVsLmdldFdpZHRoKCkrYS5lbC5nZXRX aWR0aCgpKS1hLmdldE1pbldpZHRoKCkpfSxnZXRWTWF4U2l6ZTpmdW5jdGlvbigpe3ZhciBiPXRo aXMubWF4U2l6ZXx8MTAwMDA7dmFyIGE9dGhpcy5sYXlvdXQuY2VudGVyO3JldHVybiBNYXRoLm1p bihiLCh0aGlzLmVsLmdldEhlaWdodCgpK2EuZWwuZ2V0SGVpZ2h0KCkpLWEuZ2V0TWluSGVpZ2h0 KCkpfSxvblNwbGl0TW92ZTpmdW5jdGlvbihiLGEpe3ZhciBjPXRoaXMucGFuZWwuZ2V0U2l6ZSgp O3RoaXMubGFzdFNwbGl0U2l6ZT1hO2lmKHRoaXMucG9zaXRpb249PSJub3J0aCJ8fHRoaXMucG9z aXRpb249PSJzb3V0aCIpe3RoaXMucGFuZWwuc2V0U2l6ZShjLndpZHRoLGEpO3RoaXMuc3RhdGUu aGVpZ2h0PWF9ZWxzZXt0aGlzLnBhbmVsLnNldFNpemUoYSxjLmhlaWdodCk7dGhpcy5zdGF0ZS53 aWR0aD1hfXRoaXMubGF5b3V0LmxheW91dCgpO3RoaXMucGFuZWwuc2F2ZVN0YXRlKCk7cmV0dXJu IGZhbHNlfSxnZXRTcGxpdEJhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNwbGl0fSxkZXN0cm95 OmZ1bmN0aW9uKCl7RXh0LmRlc3Ryb3kodGhpcy5taW5pU3BsaXRFbCx0aGlzLnNwbGl0LHRoaXMu c3BsaXRFbCl9fSk7RXh0LkNvbnRhaW5lci5MQVlPVVRTLmJvcmRlcj1FeHQubGF5b3V0LkJvcmRl ckxheW91dDtFeHQubGF5b3V0LkZvcm1MYXlvdXQ9RXh0LmV4dGVuZChFeHQubGF5b3V0LkFuY2hv ckxheW91dCx7bGFiZWxTZXBhcmF0b3I6IjoiLHNldENvbnRhaW5lcjpmdW5jdGlvbihhKXtFeHQu bGF5b3V0LkZvcm1MYXlvdXQuc3VwZXJjbGFzcy5zZXRDb250YWluZXIuY2FsbCh0aGlzLGEpO2lm KGEubGFiZWxBbGlnbil7YS5hZGRDbGFzcygieC1mb3JtLWxhYmVsLSIrYS5sYWJlbEFsaWduKX1p ZihhLmhpZGVMYWJlbHMpe3RoaXMubGFiZWxTdHlsZT0iZGlzcGxheTpub25lIjt0aGlzLmVsZW1l bnRTdHlsZT0icGFkZGluZy1sZWZ0OjA7Ijt0aGlzLmxhYmVsQWRqdXN0PTB9ZWxzZXt0aGlzLmxh YmVsU2VwYXJhdG9yPWEubGFiZWxTZXBhcmF0b3J8fHRoaXMubGFiZWxTZXBhcmF0b3I7YS5sYWJl bFdpZHRoPWEubGFiZWxXaWR0aHx8MTAwO2lmKHR5cGVvZiBhLmxhYmVsV2lkdGg9PSJudW1iZXIi KXt2YXIgYj0odHlwZW9mIGEubGFiZWxQYWQ9PSJudW1iZXIiP2EubGFiZWxQYWQ6NSk7dGhpcy5s YWJlbEFkanVzdD1hLmxhYmVsV2lkdGgrYjt0aGlzLmxhYmVsU3R5bGU9IndpZHRoOiIrYS5sYWJl bFdpZHRoKyJweDsiO3RoaXMuZWxlbWVudFN0eWxlPSJwYWRkaW5nLWxlZnQ6IisoYS5sYWJlbFdp ZHRoK2IpKyJweCJ9aWYoYS5sYWJlbEFsaWduPT0idG9wIil7dGhpcy5sYWJlbFN0eWxlPSJ3aWR0 aDphdXRvOyI7dGhpcy5sYWJlbEFkanVzdD0wO3RoaXMuZWxlbWVudFN0eWxlPSJwYWRkaW5nLWxl ZnQ6MDsifX19LGdldExhYmVsU3R5bGU6ZnVuY3Rpb24oZSl7dmFyIGI9IiIsYz1bdGhpcy5sYWJl bFN0eWxlLGVdO2Zvcih2YXIgZD0wLGE9Yy5sZW5ndGg7ZDxhOysrZCl7aWYoY1tkXSl7Yis9Y1tk XTtpZihiLnN1YnN0cigtMSwxKSE9IjsiKXtiKz0iOyJ9fX1yZXR1cm4gYn0scmVuZGVySXRlbTpm dW5jdGlvbihlLGEsZCl7aWYoZSYmIWUucmVuZGVyZWQmJihlLmlzRm9ybUZpZWxkfHxlLmZpZWxk TGFiZWwpJiZlLmlucHV0VHlwZSE9ImhpZGRlbiIpe3ZhciBiPXRoaXMuZ2V0VGVtcGxhdGVBcmdz KGUpO2lmKHR5cGVvZiBhPT0ibnVtYmVyIil7YT1kLmRvbS5jaGlsZE5vZGVzW2FdfHxudWxsfWlm KGEpe3RoaXMuZmllbGRUcGwuaW5zZXJ0QmVmb3JlKGEsYil9ZWxzZXt0aGlzLmZpZWxkVHBsLmFw cGVuZChkLGIpfWUucmVuZGVyKCJ4LWZvcm0tZWwtIitlLmlkKX1lbHNle0V4dC5sYXlvdXQuRm9y bUxheW91dC5zdXBlcmNsYXNzLnJlbmRlckl0ZW0uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZ2V0 VGVtcGxhdGVBcmdzOmZ1bmN0aW9uKGIpe3ZhciBhPSFiLmZpZWxkTGFiZWx8fGIuaGlkZUxhYmVs O3JldHVybntpZDpiLmlkLGxhYmVsOmIuZmllbGRMYWJlbCxsYWJlbFN0eWxlOmIubGFiZWxTdHls ZXx8dGhpcy5sYWJlbFN0eWxlfHwiIixlbGVtZW50U3R5bGU6dGhpcy5lbGVtZW50U3R5bGV8fCIi LGxhYmVsU2VwYXJhdG9yOmE/IiI6KHR5cGVvZiBiLmxhYmVsU2VwYXJhdG9yPT0idW5kZWZpbmVk Ij90aGlzLmxhYmVsU2VwYXJhdG9yOmIubGFiZWxTZXBhcmF0b3IpLGl0ZW1DbHM6KGIuaXRlbUNs c3x8dGhpcy5jb250YWluZXIuaXRlbUNsc3x8IiIpKyhiLmhpZGVMYWJlbD8iIHgtaGlkZS1sYWJl bCI6IiIpLGNsZWFyQ2xzOmIuY2xlYXJDbHN8fCJ4LWZvcm0tY2xlYXItbGVmdCJ9fSxhZGp1c3RX aWR0aEFuY2hvcjpmdW5jdGlvbihiLGEpe3JldHVybiBiLShhLmlzRm9ybUZpZWxkfHxhLmZpZWxk TGFiZWw/KGEuaGlkZUxhYmVsPzA6dGhpcy5sYWJlbEFkanVzdCk6MCl9LGlzVmFsaWRQYXJlbnQ6 ZnVuY3Rpb24oYixhKXtyZXR1cm4gdHJ1ZX19KTtFeHQuQ29udGFpbmVyLkxBWU9VVFMuZm9ybT1F eHQubGF5b3V0LkZvcm1MYXlvdXQ7RXh0LmxheW91dC5BY2NvcmRpb25MYXlvdXQ9RXh0LmV4dGVu ZChFeHQubGF5b3V0LkZpdExheW91dCx7ZmlsbDp0cnVlLGF1dG9XaWR0aDp0cnVlLHRpdGxlQ29s bGFwc2U6dHJ1ZSxoaWRlQ29sbGFwc2VUb29sOmZhbHNlLGNvbGxhcHNlRmlyc3Q6ZmFsc2UsYW5p bWF0ZTpmYWxzZSxzZXF1ZW5jZTpmYWxzZSxhY3RpdmVPblRvcDpmYWxzZSxyZW5kZXJJdGVtOmZ1 bmN0aW9uKGEpe2lmKHRoaXMuYW5pbWF0ZT09PWZhbHNlKXthLmFuaW1Db2xsYXBzZT1mYWxzZX1h LmNvbGxhcHNpYmxlPXRydWU7aWYodGhpcy5hdXRvV2lkdGgpe2EuYXV0b1dpZHRoPXRydWV9aWYo dGhpcy50aXRsZUNvbGxhcHNlKXthLnRpdGxlQ29sbGFwc2U9dHJ1ZX1pZih0aGlzLmhpZGVDb2xs YXBzZVRvb2wpe2EuaGlkZUNvbGxhcHNlVG9vbD10cnVlfWlmKHRoaXMuY29sbGFwc2VGaXJzdCE9 PXVuZGVmaW5lZCl7YS5jb2xsYXBzZUZpcnN0PXRoaXMuY29sbGFwc2VGaXJzdH1pZighdGhpcy5h Y3RpdmVJdGVtJiYhYS5jb2xsYXBzZWQpe3RoaXMuYWN0aXZlSXRlbT1hfWVsc2V7aWYodGhpcy5h Y3RpdmVJdGVtJiZ0aGlzLmFjdGl2ZUl0ZW0hPWEpe2EuY29sbGFwc2VkPXRydWV9fUV4dC5sYXlv dXQuQWNjb3JkaW9uTGF5b3V0LnN1cGVyY2xhc3MucmVuZGVySXRlbS5hcHBseSh0aGlzLGFyZ3Vt ZW50cyk7YS5oZWFkZXIuYWRkQ2xhc3MoIngtYWNjb3JkaW9uLWhkIik7YS5vbigiYmVmb3JlZXhw YW5kIix0aGlzLmJlZm9yZUV4cGFuZCx0aGlzKX0sYmVmb3JlRXhwYW5kOmZ1bmN0aW9uKGMsYil7 dmFyIGE9dGhpcy5hY3RpdmVJdGVtO2lmKGEpe2lmKHRoaXMuc2VxdWVuY2Upe2RlbGV0ZSB0aGlz LmFjdGl2ZUl0ZW07aWYoIWEuY29sbGFwc2VkKXthLmNvbGxhcHNlKHtjYWxsYmFjazpmdW5jdGlv bigpe2MuZXhwYW5kKGJ8fHRydWUpfSxzY29wZTp0aGlzfSk7cmV0dXJuIGZhbHNlfX1lbHNle2Eu Y29sbGFwc2UodGhpcy5hbmltYXRlKX19dGhpcy5hY3RpdmVJdGVtPWM7aWYodGhpcy5hY3RpdmVP blRvcCl7Yy5lbC5kb20ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYy5lbC5kb20sYy5lbC5kb20u cGFyZW50Tm9kZS5maXJzdENoaWxkKX10aGlzLmxheW91dCgpfSxzZXRJdGVtU2l6ZTpmdW5jdGlv bihjLGIpe2lmKHRoaXMuZmlsbCYmYyl7dmFyIGE9MDt0aGlzLmNvbnRhaW5lci5pdGVtcy5lYWNo KGZ1bmN0aW9uKGQpe2lmKGQhPWMpe2ErPWQuaGVhZGVyLmdldEhlaWdodCgpfX0pO2IuaGVpZ2h0 LT1hO2Muc2V0U2l6ZShiKX19LHNldEFjdGl2ZUl0ZW06ZnVuY3Rpb24oYSl7YT10aGlzLmNvbnRh aW5lci5nZXRDb21wb25lbnQoYSk7aWYodGhpcy5hY3RpdmVJdGVtIT1hKXtpZihhLnJlbmRlcmVk JiZhLmNvbGxhcHNlZCl7YS5leHBhbmQoKX1lbHNle3RoaXMuYWN0aXZlSXRlbT1hfX19fSk7RXh0 LkNvbnRhaW5lci5MQVlPVVRTLmFjY29yZGlvbj1FeHQubGF5b3V0LkFjY29yZGlvbkxheW91dDtF eHQubGF5b3V0LkFjY29yZGlvbj1FeHQubGF5b3V0LkFjY29yZGlvbkxheW91dDtFeHQubGF5b3V0 LlRhYmxlTGF5b3V0PUV4dC5leHRlbmQoRXh0LmxheW91dC5Db250YWluZXJMYXlvdXQse21vbml0 b3JSZXNpemU6ZmFsc2UsdGFibGVBdHRyczpudWxsLHNldENvbnRhaW5lcjpmdW5jdGlvbihhKXtF eHQubGF5b3V0LlRhYmxlTGF5b3V0LnN1cGVyY2xhc3Muc2V0Q29udGFpbmVyLmNhbGwodGhpcyxh KTt0aGlzLmN1cnJlbnRSb3c9MDt0aGlzLmN1cnJlbnRDb2x1bW49MDt0aGlzLmNlbGxzPVtdfSxv bkxheW91dDpmdW5jdGlvbihkLGcpe3ZhciBlPWQuaXRlbXMuaXRlbXMsYT1lLmxlbmd0aCxoLGI7 aWYoIXRoaXMudGFibGUpe2cuYWRkQ2xhc3MoIngtdGFibGUtbGF5b3V0LWN0Iik7dGhpcy50YWJs ZT1nLmNyZWF0ZUNoaWxkKEV4dC5hcHBseSh7dGFnOiJ0YWJsZSIsY2xzOiJ4LXRhYmxlLWxheW91 dCIsY2VsbHNwYWNpbmc6MCxjbjp7dGFnOiJ0Ym9keSJ9fSx0aGlzLnRhYmxlQXR0cnMpLG51bGws dHJ1ZSl9dGhpcy5yZW5kZXJBbGwoZCxnKX0sZ2V0Um93OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMu dGFibGUudEJvZGllc1swXS5jaGlsZE5vZGVzW2FdO2lmKCFiKXtiPWRvY3VtZW50LmNyZWF0ZUVs ZW1lbnQoInRyIik7dGhpcy50YWJsZS50Qm9kaWVzWzBdLmFwcGVuZENoaWxkKGIpfXJldHVybiBi fSxnZXROZXh0Q2VsbDpmdW5jdGlvbihqKXt2YXIgYT10aGlzLmdldE5leHROb25TcGFuKHRoaXMu Y3VycmVudENvbHVtbix0aGlzLmN1cnJlbnRSb3cpO3ZhciBnPXRoaXMuY3VycmVudENvbHVtbj1h WzBdLGU9dGhpcy5jdXJyZW50Um93PWFbMV07Zm9yKHZhciBpPWU7aTxlKyhqLnJvd3NwYW58fDEp O2krKyl7aWYoIXRoaXMuY2VsbHNbaV0pe3RoaXMuY2VsbHNbaV09W119Zm9yKHZhciBkPWc7ZDxn KyhqLmNvbHNwYW58fDEpO2QrKyl7dGhpcy5jZWxsc1tpXVtkXT10cnVlfX12YXIgaD1kb2N1bWVu dC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2lmKGouY2VsbElkKXtoLmlkPWouY2VsbElkfXZhciBiPSJ4 LXRhYmxlLWxheW91dC1jZWxsIjtpZihqLmNlbGxDbHMpe2IrPSIgIitqLmNlbGxDbHN9aC5jbGFz c05hbWU9YjtpZihqLmNvbHNwYW4pe2guY29sU3Bhbj1qLmNvbHNwYW59aWYoai5yb3dzcGFuKXto LnJvd1NwYW49ai5yb3dzcGFufXRoaXMuZ2V0Um93KGUpLmFwcGVuZENoaWxkKGgpO3JldHVybiBo fSxnZXROZXh0Tm9uU3BhbjpmdW5jdGlvbihhLGMpe3ZhciBiPXRoaXMuY29sdW1uczt3aGlsZSgo YiYmYT49Yil8fCh0aGlzLmNlbGxzW2NdJiZ0aGlzLmNlbGxzW2NdW2FdKSl7aWYoYiYmYT49Yil7 YysrO2E9MH1lbHNle2ErK319cmV0dXJuW2EsY119LHJlbmRlckl0ZW06ZnVuY3Rpb24oZSxhLGQp e2lmKGUmJiFlLnJlbmRlcmVkKXtlLnJlbmRlcih0aGlzLmdldE5leHRDZWxsKGUpKTtpZih0aGlz LmV4dHJhQ2xzKXt2YXIgYj1lLmdldFBvc2l0aW9uRWw/ZS5nZXRQb3NpdGlvbkVsKCk6ZTtiLmFk ZENsYXNzKHRoaXMuZXh0cmFDbHMpfX19LGlzVmFsaWRQYXJlbnQ6ZnVuY3Rpb24oYixhKXtyZXR1 cm4gdHJ1ZX19KTtFeHQuQ29udGFpbmVyLkxBWU9VVFMudGFibGU9RXh0LmxheW91dC5UYWJsZUxh eW91dDtFeHQubGF5b3V0LkFic29sdXRlTGF5b3V0PUV4dC5leHRlbmQoRXh0LmxheW91dC5BbmNo b3JMYXlvdXQse2V4dHJhQ2xzOiJ4LWFicy1sYXlvdXQtaXRlbSIsb25MYXlvdXQ6ZnVuY3Rpb24o YSxiKXtiLnBvc2l0aW9uKCk7dGhpcy5wYWRkaW5nTGVmdD1iLmdldFBhZGRpbmcoImwiKTt0aGlz LnBhZGRpbmdUb3A9Yi5nZXRQYWRkaW5nKCJ0Iik7RXh0LmxheW91dC5BYnNvbHV0ZUxheW91dC5z dXBlcmNsYXNzLm9uTGF5b3V0LmNhbGwodGhpcyxhLGIpfSxhZGp1c3RXaWR0aEFuY2hvcjpmdW5j dGlvbihiLGEpe3JldHVybiBiP2ItYS5nZXRQb3NpdGlvbih0cnVlKVswXSt0aGlzLnBhZGRpbmdM ZWZ0OmJ9LGFkanVzdEhlaWdodEFuY2hvcjpmdW5jdGlvbihiLGEpe3JldHVybiBiP2ItYS5nZXRQ b3NpdGlvbih0cnVlKVsxXSt0aGlzLnBhZGRpbmdUb3A6Yn19KTtFeHQuQ29udGFpbmVyLkxBWU9V VFMuYWJzb2x1dGU9RXh0LmxheW91dC5BYnNvbHV0ZUxheW91dDtFeHQubGF5b3V0LkJveExheW91 dD1FeHQuZXh0ZW5kKEV4dC5sYXlvdXQuQ29udGFpbmVyTGF5b3V0LHtkZWZhdWx0TWFyZ2luczp7 bGVmdDowLHRvcDowLHJpZ2h0OjAsYm90dG9tOjB9LHBhZGRpbmc6IjAiLHBhY2s6InN0YXJ0Iixt b25pdG9yUmVzaXplOnRydWUsc2Nyb2xsT2Zmc2V0OjAsZXh0cmFDbHM6IngtYm94LWl0ZW0iLGN0 Q2xzOiJ4LWJveC1sYXlvdXQtY3QiLGlubmVyQ2xzOiJ4LWJveC1pbm5lciIsaXNWYWxpZFBhcmVu dDpmdW5jdGlvbihiLGEpe3JldHVybiBiLmdldEVsKCkuZG9tLnBhcmVudE5vZGU9PXRoaXMuaW5u ZXJDdC5kb219LG9uTGF5b3V0OmZ1bmN0aW9uKGUsail7dmFyIGc9ZS5pdGVtcy5pdGVtcyxiPWcu bGVuZ3RoLGssZCxoPWItMSxhO2lmKCF0aGlzLmlubmVyQ3Qpe2ouYWRkQ2xhc3ModGhpcy5jdENs cyk7dGhpcy5pbm5lckN0PWouY3JlYXRlQ2hpbGQoe2Nsczp0aGlzLmlubmVyQ2xzfSk7dGhpcy5w YWRkaW5nPXRoaXMucGFyc2VNYXJnaW5zKHRoaXMucGFkZGluZyl9dGhpcy5yZW5kZXJBbGwoZSx0 aGlzLmlubmVyQ3QpfSxyZW5kZXJJdGVtOmZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhLm1hcmdpbnM9 PSJzdHJpbmciKXthLm1hcmdpbnM9dGhpcy5wYXJzZU1hcmdpbnMoYS5tYXJnaW5zKX1lbHNle2lm KCFhLm1hcmdpbnMpe2EubWFyZ2lucz10aGlzLmRlZmF1bHRNYXJnaW5zfX1FeHQubGF5b3V0LkJv eExheW91dC5zdXBlcmNsYXNzLnJlbmRlckl0ZW0uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxnZXRU YXJnZXRTaXplOmZ1bmN0aW9uKGEpe3JldHVybihFeHQuaXNJRTYmJkV4dC5pc1N0cmljdCYmYS5k b209PWRvY3VtZW50LmJvZHkpP2EuZ2V0U3R5bGVTaXplKCk6YS5nZXRWaWV3U2l6ZSgpfSxnZXRJ dGVtczpmdW5jdGlvbihiKXt2YXIgYT1bXTtiLml0ZW1zLmVhY2goZnVuY3Rpb24oZCl7aWYoZC5p c1Zpc2libGUoKSl7YS5wdXNoKGQpfX0pO3JldHVybiBhfX0pO0V4dC5sYXlvdXQuVkJveExheW91 dD1FeHQuZXh0ZW5kKEV4dC5sYXlvdXQuQm94TGF5b3V0LHthbGlnbjoibGVmdCIsb25MYXlvdXQ6 ZnVuY3Rpb24oZSxFKXtFeHQubGF5b3V0LlZCb3hMYXlvdXQuc3VwZXJjbGFzcy5vbkxheW91dC5j YWxsKHRoaXMsZSxFKTt2YXIgZz10aGlzLmdldEl0ZW1zKGUpLGosbSxxLHI9dGhpcy5nZXRUYXJn ZXRTaXplKEUpLGs9ci53aWR0aC1FLmdldFBhZGRpbmcoImxyIiktdGhpcy5zY3JvbGxPZmZzZXQs eT1yLmhlaWdodC1FLmdldFBhZGRpbmcoInRiIikscz10aGlzLnBhZGRpbmcubGVmdCxuPXRoaXMu cGFkZGluZy50b3AsaT10aGlzLnBhY2s9PSJzdGFydCIsdj1bInN0cmV0Y2giLCJzdHJldGNobWF4 Il0uaW5kZXhPZih0aGlzLmFsaWduKT09LTEsQj1rLSh0aGlzLnBhZGRpbmcubGVmdCt0aGlzLnBh ZGRpbmcucmlnaHQpLG89MCxBPTAsdT0wLEM9MCxkPTA7RXh0LmVhY2goZyxmdW5jdGlvbihoKXtq PWgubWFyZ2luczt1Kz1oLmZsZXh8fDA7bT1oLmdldEhlaWdodCgpO3E9ai50b3Arai5ib3R0b207 bys9bStxO0MrPXErKGguZmxleD8wOm0pO0E9TWF0aC5tYXgoQSxoLmdldFdpZHRoKCkrai5sZWZ0 K2oucmlnaHQpfSk7bz15LW8tdGhpcy5wYWRkaW5nLnRvcC10aGlzLnBhZGRpbmcuYm90dG9tO3Zh ciBhPUErdGhpcy5wYWRkaW5nLmxlZnQrdGhpcy5wYWRkaW5nLnJpZ2h0O3N3aXRjaCh0aGlzLmFs aWduKXtjYXNlInN0cmV0Y2giOnRoaXMuaW5uZXJDdC5zZXRTaXplKGsseSk7YnJlYWs7Y2FzZSJz dHJldGNobWF4IjpjYXNlImxlZnQiOnRoaXMuaW5uZXJDdC5zZXRTaXplKGEseSk7YnJlYWs7Y2Fz ZSJjZW50ZXIiOnRoaXMuaW5uZXJDdC5zZXRTaXplKGs9TWF0aC5tYXgoayxhKSx5KTticmVha312 YXIgYz1NYXRoLm1heCgwLHktdGhpcy5wYWRkaW5nLnRvcC10aGlzLnBhZGRpbmcuYm90dG9tLUMp LEQ9Yyx6PVtdLHg9W10scD0wLGI9TWF0aC5tYXgoMCxrLXRoaXMucGFkZGluZy5sZWZ0LXRoaXMu cGFkZGluZy5yaWdodCk7RXh0LmVhY2goZyxmdW5jdGlvbihoKXtpZihpJiZoLmZsZXgpe209TWF0 aC5mbG9vcihjKihoLmZsZXgvdSkpO0QtPW07ei5wdXNoKG0pfX0pO2lmKHRoaXMucGFjaz09ImNl bnRlciIpe24rPW8/by8yOjB9ZWxzZXtpZih0aGlzLnBhY2s9PSJlbmQiKXtuKz1vfX1FeHQuZWFj aChnLGZ1bmN0aW9uKGgpe2o9aC5tYXJnaW5zO24rPWoudG9wO2guc2V0UG9zaXRpb24ocytqLmxl ZnQsbik7aWYoaSYmaC5mbGV4KXttPU1hdGgubWF4KDAseltwKytdKyhELS0+MD8xOjApKTtpZih2 KXt4LnB1c2goaC5nZXRXaWR0aCgpKX1oLnNldFNpemUoYixtKX1lbHNle209aC5nZXRIZWlnaHQo KX1uKz1tK2ouYm90dG9tfSk7cD0wO0V4dC5lYWNoKGcsZnVuY3Rpb24obCl7aj1sLm1hcmdpbnM7 aWYodGhpcy5hbGlnbj09InN0cmV0Y2giKXtsLnNldFdpZHRoKChCLShqLmxlZnQrai5yaWdodCkp LmNvbnN0cmFpbihsLm1pbldpZHRofHwwLGwubWF4V2lkdGh8fDEwMDAwMDApKX1lbHNle2lmKHRo aXMuYWxpZ249PSJzdHJldGNobWF4Iil7bC5zZXRXaWR0aCgoQS0oai5sZWZ0K2oucmlnaHQpKS5j b25zdHJhaW4obC5taW5XaWR0aHx8MCxsLm1heFdpZHRofHwxMDAwMDAwKSl9ZWxzZXtpZih0aGlz LmFsaWduPT0iY2VudGVyIil7dmFyIGg9Yi0obC5nZXRXaWR0aCgpK2oubGVmdCtqLnJpZ2h0KTtp ZihoPjApe2wuc2V0UG9zaXRpb24ocytqLmxlZnQrKGgvMiksbC55KX19aWYoaSYmbC5mbGV4KXts LnNldFdpZHRoKHhbcCsrXSl9fX19LHRoaXMpfX0pO0V4dC5Db250YWluZXIuTEFZT1VUUy52Ym94 PUV4dC5sYXlvdXQuVkJveExheW91dDtFeHQubGF5b3V0LkhCb3hMYXlvdXQ9RXh0LmV4dGVuZChF eHQubGF5b3V0LkJveExheW91dCx7YWxpZ246InRvcCIsb25MYXlvdXQ6ZnVuY3Rpb24oZCxFKXtF eHQubGF5b3V0LkhCb3hMYXlvdXQuc3VwZXJjbGFzcy5vbkxheW91dC5jYWxsKHRoaXMsZCxFKTt2 YXIgZT10aGlzLmdldEl0ZW1zKGQpLGosYyxxLHI9dGhpcy5nZXRUYXJnZXRTaXplKEUpLG09ci53 aWR0aC1FLmdldFBhZGRpbmcoImxyIiktdGhpcy5zY3JvbGxPZmZzZXQsQj1yLmhlaWdodC1FLmdl dFBhZGRpbmcoInRiIiksdT10aGlzLnBhZGRpbmcubGVmdCxvPXRoaXMucGFkZGluZy50b3AsaT10 aGlzLnBhY2s9PSJzdGFydCIsej1bInN0cmV0Y2giLCJzdHJldGNobWF4Il0uaW5kZXhPZih0aGlz LmFsaWduKT09LTEsbj1CLSh0aGlzLnBhZGRpbmcudG9wK3RoaXMucGFkZGluZy5ib3R0b20pLEM9 MCxzPTAsdj0wLGI9MCxnPTA7RXh0LmVhY2goZSxmdW5jdGlvbihoKXtqPWgubWFyZ2luczt2Kz1o LmZsZXh8fDA7Yz1oLmdldFdpZHRoKCk7cT1qLmxlZnQrai5yaWdodDtDKz1jK3E7Yis9cSsoaC5m bGV4PzA6Yyk7cz1NYXRoLm1heChzLGguZ2V0SGVpZ2h0KCkrai50b3Arai5ib3R0b20pfSk7Qz1t LUMtdGhpcy5wYWRkaW5nLmxlZnQtdGhpcy5wYWRkaW5nLnJpZ2h0O3ZhciB5PXMrdGhpcy5wYWRk aW5nLnRvcCt0aGlzLnBhZGRpbmcuYm90dG9tO3N3aXRjaCh0aGlzLmFsaWduKXtjYXNlInN0cmV0 Y2giOnRoaXMuaW5uZXJDdC5zZXRTaXplKG0sQik7YnJlYWs7Y2FzZSJzdHJldGNobWF4IjpjYXNl InRvcCI6dGhpcy5pbm5lckN0LnNldFNpemUobSx5KTticmVhaztjYXNlIm1pZGRsZSI6dGhpcy5p bm5lckN0LnNldFNpemUobSxCPU1hdGgubWF4KEIseSkpO2JyZWFrfXZhciB4PU1hdGgubWF4KDAs bS10aGlzLnBhZGRpbmcubGVmdC10aGlzLnBhZGRpbmcucmlnaHQtYiksRD14LGs9W10sQT1bXSxw PTAsYT1NYXRoLm1heCgwLEItdGhpcy5wYWRkaW5nLnRvcC10aGlzLnBhZGRpbmcuYm90dG9tKTtF eHQuZWFjaChlLGZ1bmN0aW9uKGgpe2lmKGkmJmguZmxleCl7Yz1NYXRoLmZsb29yKHgqKGguZmxl eC92KSk7RC09YztrLnB1c2goYyl9fSk7aWYodGhpcy5wYWNrPT0iY2VudGVyIil7dSs9Qz9DLzI6 MH1lbHNle2lmKHRoaXMucGFjaz09ImVuZCIpe3UrPUN9fUV4dC5lYWNoKGUsZnVuY3Rpb24oaCl7 aj1oLm1hcmdpbnM7dSs9ai5sZWZ0O2guc2V0UG9zaXRpb24odSxvK2oudG9wKTtpZihpJiZoLmZs ZXgpe2M9TWF0aC5tYXgoMCxrW3ArK10rKEQtLT4wPzE6MCkpO2lmKHope0EucHVzaChoLmdldEhl aWdodCgpKX1oLnNldFNpemUoYyxhKX1lbHNle2M9aC5nZXRXaWR0aCgpfXUrPWMrai5yaWdodH0p O3A9MDtFeHQuZWFjaChlLGZ1bmN0aW9uKHQpe3ZhciBoPXQubWFyZ2lucztpZih0aGlzLmFsaWdu PT0ic3RyZXRjaCIpe3Quc2V0SGVpZ2h0KChuLShoLnRvcCtoLmJvdHRvbSkpLmNvbnN0cmFpbih0 Lm1pbkhlaWdodHx8MCx0Lm1heEhlaWdodHx8MTAwMDAwMCkpfWVsc2V7aWYodGhpcy5hbGlnbj09 InN0cmV0Y2htYXgiKXt0LnNldEhlaWdodCgocy0oaC50b3AraC5ib3R0b20pKS5jb25zdHJhaW4o dC5taW5IZWlnaHR8fDAsdC5tYXhIZWlnaHR8fDEwMDAwMDApKX1lbHNle2lmKHRoaXMuYWxpZ249 PSJtaWRkbGUiKXt2YXIgbD1hLSh0LmdldEhlaWdodCgpK2gudG9wK2guYm90dG9tKTtpZihsPjAp e3Quc2V0UG9zaXRpb24odC54LG8raC50b3ArKGwvMikpfX1pZihpJiZ0LmZsZXgpe3Quc2V0SGVp Z2h0KEFbcCsrXSl9fX19LHRoaXMpfX0pO0V4dC5Db250YWluZXIuTEFZT1VUUy5oYm94PUV4dC5s YXlvdXQuSEJveExheW91dDtFeHQuVmlld3BvcnQ9RXh0LmV4dGVuZChFeHQuQ29udGFpbmVyLHtp bml0Q29tcG9uZW50OmZ1bmN0aW9uKCl7RXh0LlZpZXdwb3J0LnN1cGVyY2xhc3MuaW5pdENvbXBv bmVudC5jYWxsKHRoaXMpO2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF0u Y2xhc3NOYW1lKz0iIHgtdmlld3BvcnQiO3RoaXMuZWw9RXh0LmdldEJvZHkoKTt0aGlzLmVsLnNl dEhlaWdodD1FeHQuZW1wdHlGbjt0aGlzLmVsLnNldFdpZHRoPUV4dC5lbXB0eUZuO3RoaXMuZWwu c2V0U2l6ZT1FeHQuZW1wdHlGbjt0aGlzLmVsLmRvbS5zY3JvbGw9Im5vIjt0aGlzLmFsbG93RG9t TW92ZT1mYWxzZTt0aGlzLmF1dG9XaWR0aD10cnVlO3RoaXMuYXV0b0hlaWdodD10cnVlO0V4dC5F dmVudE1hbmFnZXIub25XaW5kb3dSZXNpemUodGhpcy5maXJlUmVzaXplLHRoaXMpO3RoaXMucmVu ZGVyVG89dGhpcy5lbH0sZmlyZVJlc2l6ZTpmdW5jdGlvbihhLGIpe3RoaXMuZmlyZUV2ZW50KCJy ZXNpemUiLHRoaXMsYSxiLGEsYil9fSk7RXh0LnJlZygidmlld3BvcnQiLEV4dC5WaWV3cG9ydCk7 RXh0LlBhbmVsPUV4dC5leHRlbmQoRXh0LkNvbnRhaW5lcix7YmFzZUNsczoieC1wYW5lbCIsY29s bGFwc2VkQ2xzOiJ4LXBhbmVsLWNvbGxhcHNlZCIsbWFza0Rpc2FibGVkOnRydWUsYW5pbUNvbGxh cHNlOkV4dC5lbmFibGVGeCxoZWFkZXJBc1RleHQ6dHJ1ZSxidXR0b25BbGlnbjoicmlnaHQiLGNv bGxhcHNlZDpmYWxzZSxjb2xsYXBzZUZpcnN0OnRydWUsbWluQnV0dG9uV2lkdGg6NzUsZWxlbWVu dHM6ImJvZHkiLHByZXZlbnRCb2R5UmVzZXQ6ZmFsc2UsdG9vbFRhcmdldDoiaGVhZGVyIixjb2xs YXBzZUVsOiJid3JhcCIsc2xpZGVBbmNob3I6InQiLGRpc2FibGVkQ2xhc3M6IiIsZGVmZXJIZWln aHQ6dHJ1ZSxleHBhbmREZWZhdWx0czp7ZHVyYXRpb246MC4yNX0sY29sbGFwc2VEZWZhdWx0czp7 ZHVyYXRpb246MC4yNX0saW5pdENvbXBvbmVudDpmdW5jdGlvbigpe0V4dC5QYW5lbC5zdXBlcmNs YXNzLmluaXRDb21wb25lbnQuY2FsbCh0aGlzKTt0aGlzLmFkZEV2ZW50cygiYm9keXJlc2l6ZSIs InRpdGxlY2hhbmdlIiwiaWNvbmNoYW5nZSIsImNvbGxhcHNlIiwiZXhwYW5kIiwiYmVmb3JlY29s bGFwc2UiLCJiZWZvcmVleHBhbmQiLCJiZWZvcmVjbG9zZSIsImNsb3NlIiwiYWN0aXZhdGUiLCJk ZWFjdGl2YXRlIik7aWYodGhpcy51bnN0eWxlZCl7dGhpcy5iYXNlQ2xzPSJ4LXBsYWluIn1pZih0 aGlzLnRiYXIpe3RoaXMuZWxlbWVudHMrPSIsdGJhciI7aWYoRXh0LmlzT2JqZWN0KHRoaXMudGJh cikpe3RoaXMudG9wVG9vbGJhcj10aGlzLnRiYXJ9ZGVsZXRlIHRoaXMudGJhcn1pZih0aGlzLmJi YXIpe3RoaXMuZWxlbWVudHMrPSIsYmJhciI7aWYoRXh0LmlzT2JqZWN0KHRoaXMuYmJhcikpe3Ro aXMuYm90dG9tVG9vbGJhcj10aGlzLmJiYXJ9ZGVsZXRlIHRoaXMuYmJhcn1pZih0aGlzLmhlYWRl cj09PXRydWUpe3RoaXMuZWxlbWVudHMrPSIsaGVhZGVyIjtkZWxldGUgdGhpcy5oZWFkZXJ9ZWxz ZXtpZih0aGlzLmhlYWRlckNmZ3x8KHRoaXMudGl0bGUmJnRoaXMuaGVhZGVyIT09ZmFsc2UpKXt0 aGlzLmVsZW1lbnRzKz0iLGhlYWRlciJ9fWlmKHRoaXMuZm9vdGVyQ2ZnfHx0aGlzLmZvb3Rlcj09 PXRydWUpe3RoaXMuZWxlbWVudHMrPSIsZm9vdGVyIjtkZWxldGUgdGhpcy5mb290ZXJ9aWYodGhp cy5idXR0b25zKXt0aGlzLmVsZW1lbnRzKz0iLGZvb3RlciI7dmFyIGM9dGhpcy5idXR0b25zO3Ro aXMuYnV0dG9ucz1bXTtmb3IodmFyIGI9MCxhPWMubGVuZ3RoO2I8YTtiKyspe2lmKGNbYl0ucmVu ZGVyKXt0aGlzLmJ1dHRvbnMucHVzaChjW2JdKX1lbHNle2lmKGNbYl0ueHR5cGUpe3RoaXMuYnV0 dG9ucy5wdXNoKEV4dC5jcmVhdGUoY1tiXSwiYnV0dG9uIikpfWVsc2V7dGhpcy5hZGRCdXR0b24o Y1tiXSl9fX19aWYodGhpcy5mYmFyKXt0aGlzLmVsZW1lbnRzKz0iLGZvb3RlciJ9aWYodGhpcy5h dXRvTG9hZCl7dGhpcy5vbigicmVuZGVyIix0aGlzLmRvQXV0b0xvYWQsdGhpcyx7ZGVsYXk6MTB9 KX19LGNyZWF0ZUVsZW1lbnQ6ZnVuY3Rpb24oYSxjKXtpZih0aGlzW2FdKXtjLmFwcGVuZENoaWxk KHRoaXNbYV0uZG9tKTtyZXR1cm59aWYoYT09PSJid3JhcCJ8fHRoaXMuZWxlbWVudHMuaW5kZXhP ZihhKSE9LTEpe2lmKHRoaXNbYSsiQ2ZnIl0pe3RoaXNbYV09RXh0LmZseShjKS5jcmVhdGVDaGls ZCh0aGlzW2ErIkNmZyJdKX1lbHNle3ZhciBiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp O2IuY2xhc3NOYW1lPXRoaXNbYSsiQ2xzIl07dGhpc1thXT1FeHQuZ2V0KGMuYXBwZW5kQ2hpbGQo YikpfWlmKHRoaXNbYSsiQ3NzQ2xhc3MiXSl7dGhpc1thXS5hZGRDbGFzcyh0aGlzW2ErIkNzc0Ns YXNzIl0pfWlmKHRoaXNbYSsiU3R5bGUiXSl7dGhpc1thXS5hcHBseVN0eWxlcyh0aGlzW2ErIlN0 eWxlIl0pfX19LG9uUmVuZGVyOmZ1bmN0aW9uKGcsZSl7RXh0LlBhbmVsLnN1cGVyY2xhc3Mub25S ZW5kZXIuY2FsbCh0aGlzLGcsZSk7dGhpcy5jcmVhdGVDbGFzc2VzKCk7dmFyIGE9dGhpcy5lbCxp PWEuZG9tLGs7YS5hZGRDbGFzcyh0aGlzLmJhc2VDbHMpO2lmKGkuZmlyc3RDaGlsZCl7dGhpcy5o ZWFkZXI9YS5kb3duKCIuIit0aGlzLmhlYWRlckNscyk7dGhpcy5id3JhcD1hLmRvd24oIi4iK3Ro aXMuYndyYXBDbHMpO3ZhciBqPXRoaXMuYndyYXA/dGhpcy5id3JhcDphO3RoaXMudGJhcj1qLmRv d24oIi4iK3RoaXMudGJhckNscyk7dGhpcy5ib2R5PWouZG93bigiLiIrdGhpcy5ib2R5Q2xzKTt0 aGlzLmJiYXI9ai5kb3duKCIuIit0aGlzLmJiYXJDbHMpO3RoaXMuZm9vdGVyPWouZG93bigiLiIr dGhpcy5mb290ZXJDbHMpO3RoaXMuZnJvbU1hcmt1cD10cnVlfWlmKHRoaXMucHJldmVudEJvZHlS ZXNldD09PXRydWUpe2EuYWRkQ2xhc3MoIngtcGFuZWwtcmVzZXQiKX1pZih0aGlzLmNscyl7YS5h ZGRDbGFzcyh0aGlzLmNscyl9aWYodGhpcy5idXR0b25zKXt0aGlzLmVsZW1lbnRzKz0iLGZvb3Rl ciJ9aWYodGhpcy5mcmFtZSl7YS5pbnNlcnRIdG1sKCJhZnRlckJlZ2luIixTdHJpbmcuZm9ybWF0 KEV4dC5FbGVtZW50LmJveE1hcmt1cCx0aGlzLmJhc2VDbHMpKTt0aGlzLmNyZWF0ZUVsZW1lbnQo ImhlYWRlciIsaS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCk7dGhpcy5jcmVhdGVF bGVtZW50KCJid3JhcCIsaSk7az10aGlzLmJ3cmFwLmRvbTt2YXIgYz1pLmNoaWxkTm9kZXNbMV0s Yj1pLmNoaWxkTm9kZXNbMl07ay5hcHBlbmRDaGlsZChjKTtrLmFwcGVuZENoaWxkKGIpO3ZhciBs PWsuZmlyc3RDaGlsZC5maXJzdENoaWxkLmZpcnN0Q2hpbGQ7dGhpcy5jcmVhdGVFbGVtZW50KCJ0 YmFyIixsKTt0aGlzLmNyZWF0ZUVsZW1lbnQoImJvZHkiLGwpO3RoaXMuY3JlYXRlRWxlbWVudCgi YmJhciIsbCk7dGhpcy5jcmVhdGVFbGVtZW50KCJmb290ZXIiLGsubGFzdENoaWxkLmZpcnN0Q2hp bGQuZmlyc3RDaGlsZCk7aWYoIXRoaXMuZm9vdGVyKXt0aGlzLmJ3cmFwLmRvbS5sYXN0Q2hpbGQu Y2xhc3NOYW1lKz0iIHgtcGFuZWwtbm9mb290ZXIifX1lbHNle3RoaXMuY3JlYXRlRWxlbWVudCgi aGVhZGVyIixpKTt0aGlzLmNyZWF0ZUVsZW1lbnQoImJ3cmFwIixpKTtrPXRoaXMuYndyYXAuZG9t O3RoaXMuY3JlYXRlRWxlbWVudCgidGJhciIsayk7dGhpcy5jcmVhdGVFbGVtZW50KCJib2R5Iixr KTt0aGlzLmNyZWF0ZUVsZW1lbnQoImJiYXIiLGspO3RoaXMuY3JlYXRlRWxlbWVudCgiZm9vdGVy IixrKTtpZighdGhpcy5oZWFkZXIpe3RoaXMuYm9keS5hZGRDbGFzcyh0aGlzLmJvZHlDbHMrIi1u b2hlYWRlciIpO2lmKHRoaXMudGJhcil7dGhpcy50YmFyLmFkZENsYXNzKHRoaXMudGJhckNscysi LW5vaGVhZGVyIil9fX1pZih0aGlzLnBhZGRpbmchPT11bmRlZmluZWQpe3RoaXMuYm9keS5zZXRT dHlsZSgicGFkZGluZyIsdGhpcy5ib2R5LmFkZFVuaXRzKHRoaXMucGFkZGluZykpfWlmKHRoaXMu Ym9yZGVyPT09ZmFsc2Upe3RoaXMuZWwuYWRkQ2xhc3ModGhpcy5iYXNlQ2xzKyItbm9ib3JkZXIi KTt0aGlzLmJvZHkuYWRkQ2xhc3ModGhpcy5ib2R5Q2xzKyItbm9ib3JkZXIiKTtpZih0aGlzLmhl YWRlcil7dGhpcy5oZWFkZXIuYWRkQ2xhc3ModGhpcy5oZWFkZXJDbHMrIi1ub2JvcmRlciIpfWlm KHRoaXMuZm9vdGVyKXt0aGlzLmZvb3Rlci5hZGRDbGFzcyh0aGlzLmZvb3RlckNscysiLW5vYm9y ZGVyIil9aWYodGhpcy50YmFyKXt0aGlzLnRiYXIuYWRkQ2xhc3ModGhpcy50YmFyQ2xzKyItbm9i b3JkZXIiKX1pZih0aGlzLmJiYXIpe3RoaXMuYmJhci5hZGRDbGFzcyh0aGlzLmJiYXJDbHMrIi1u b2JvcmRlciIpfX1pZih0aGlzLmJvZHlCb3JkZXI9PT1mYWxzZSl7dGhpcy5ib2R5LmFkZENsYXNz KHRoaXMuYm9keUNscysiLW5vYm9yZGVyIil9dGhpcy5id3JhcC5lbmFibGVEaXNwbGF5TW9kZSgi YmxvY2siKTtpZih0aGlzLmhlYWRlcil7dGhpcy5oZWFkZXIudW5zZWxlY3RhYmxlKCk7aWYodGhp cy5oZWFkZXJBc1RleHQpe3RoaXMuaGVhZGVyLmRvbS5pbm5lckhUTUw9JzxzcGFuIGNsYXNzPSIn K3RoaXMuaGVhZGVyVGV4dENscysnIj4nK3RoaXMuaGVhZGVyLmRvbS5pbm5lckhUTUwrIjwvc3Bh bj4iO2lmKHRoaXMuaWNvbkNscyl7dGhpcy5zZXRJY29uQ2xhc3ModGhpcy5pY29uQ2xzKX19fWlm KHRoaXMuZmxvYXRpbmcpe3RoaXMubWFrZUZsb2F0aW5nKHRoaXMuZmxvYXRpbmcpfWlmKHRoaXMu Y29sbGFwc2libGUpe3RoaXMudG9vbHM9dGhpcy50b29scz90aGlzLnRvb2xzLnNsaWNlKDApOltd O2lmKCF0aGlzLmhpZGVDb2xsYXBzZVRvb2wpe3RoaXMudG9vbHNbdGhpcy5jb2xsYXBzZUZpcnN0 PyJ1bnNoaWZ0IjoicHVzaCJdKHtpZDoidG9nZ2xlIixoYW5kbGVyOnRoaXMudG9nZ2xlQ29sbGFw c2Usc2NvcGU6dGhpc30pfWlmKHRoaXMudGl0bGVDb2xsYXBzZSYmdGhpcy5oZWFkZXIpe3RoaXMu bW9uKHRoaXMuaGVhZGVyLCJjbGljayIsdGhpcy50b2dnbGVDb2xsYXBzZSx0aGlzKTt0aGlzLmhl YWRlci5zZXRTdHlsZSgiY3Vyc29yIiwicG9pbnRlciIpfX1pZih0aGlzLnRvb2xzKXt2YXIgaD10 aGlzLnRvb2xzO3RoaXMudG9vbHM9e307dGhpcy5hZGRUb29sLmFwcGx5KHRoaXMsaCl9ZWxzZXt0 aGlzLnRvb2xzPXt9fWlmKHRoaXMuYnV0dG9ucyYmdGhpcy5idXR0b25zLmxlbmd0aD4wKXt0aGlz LmZiYXI9bmV3IEV4dC5Ub29sYmFyKHtpdGVtczp0aGlzLmJ1dHRvbnMsdG9vbGJhckNsczoieC1w YW5lbC1mYmFyIn0pfXRoaXMudG9vbGJhcnM9W107aWYodGhpcy5mYmFyKXt0aGlzLmZiYXI9RXh0 LmNyZWF0ZSh0aGlzLmZiYXIsInRvb2xiYXIiKTt0aGlzLmZiYXIuZW5hYmxlT3ZlcmZsb3c9ZmFs c2U7aWYodGhpcy5mYmFyLml0ZW1zKXt0aGlzLmZiYXIuaXRlbXMuZWFjaChmdW5jdGlvbihkKXtk Lm1pbldpZHRoPWQubWluV2lkdGh8fHRoaXMubWluQnV0dG9uV2lkdGh9LHRoaXMpfXRoaXMuZmJh ci50b29sYmFyQ2xzPSJ4LXBhbmVsLWZiYXIiO3ZhciBtPXRoaXMuZm9vdGVyLmNyZWF0ZUNoaWxk KHtjbHM6IngtcGFuZWwtYnRucyB4LXBhbmVsLWJ0bnMtIit0aGlzLmJ1dHRvbkFsaWdufSk7dGhp cy5mYmFyLm93bmVyQ3Q9dGhpczt0aGlzLmZiYXIucmVuZGVyKG0pO20uY3JlYXRlQ2hpbGQoe2Ns czoieC1jbGVhciJ9KTt0aGlzLnRvb2xiYXJzLnB1c2godGhpcy5mYmFyKX1pZih0aGlzLnRiYXIm JnRoaXMudG9wVG9vbGJhcil7aWYoRXh0LmlzQXJyYXkodGhpcy50b3BUb29sYmFyKSl7dGhpcy50 b3BUb29sYmFyPW5ldyBFeHQuVG9vbGJhcih0aGlzLnRvcFRvb2xiYXIpfWVsc2V7aWYoIXRoaXMu dG9wVG9vbGJhci5ldmVudHMpe3RoaXMudG9wVG9vbGJhcj1FeHQuY3JlYXRlKHRoaXMudG9wVG9v bGJhciwidG9vbGJhciIpfX10aGlzLnRvcFRvb2xiYXIub3duZXJDdD10aGlzO3RoaXMudG9wVG9v bGJhci5yZW5kZXIodGhpcy50YmFyKTt0aGlzLnRvb2xiYXJzLnB1c2godGhpcy50b3BUb29sYmFy KX1pZih0aGlzLmJiYXImJnRoaXMuYm90dG9tVG9vbGJhcil7aWYoRXh0LmlzQXJyYXkodGhpcy5i b3R0b21Ub29sYmFyKSl7dGhpcy5ib3R0b21Ub29sYmFyPW5ldyBFeHQuVG9vbGJhcih0aGlzLmJv dHRvbVRvb2xiYXIpfWVsc2V7aWYoIXRoaXMuYm90dG9tVG9vbGJhci5ldmVudHMpe3RoaXMuYm90 dG9tVG9vbGJhcj1FeHQuY3JlYXRlKHRoaXMuYm90dG9tVG9vbGJhciwidG9vbGJhciIpfX10aGlz LmJvdHRvbVRvb2xiYXIub3duZXJDdD10aGlzO3RoaXMuYm90dG9tVG9vbGJhci5yZW5kZXIodGhp cy5iYmFyKTt0aGlzLnRvb2xiYXJzLnB1c2godGhpcy5ib3R0b21Ub29sYmFyKX1FeHQuZWFjaCh0 aGlzLnRvb2xiYXJzLGZ1bmN0aW9uKGQpe2Qub24oe3Njb3BlOnRoaXMsYWZ0ZXJsYXlvdXQ6dGhp cy5zeW5jSGVpZ2h0LHJlbW92ZTp0aGlzLnN5bmNIZWlnaHR9KX0sdGhpcyl9LHNldEljb25DbGFz czpmdW5jdGlvbihiKXt2YXIgYT10aGlzLmljb25DbHM7dGhpcy5pY29uQ2xzPWI7aWYodGhpcy5y ZW5kZXJlZCYmdGhpcy5oZWFkZXIpe2lmKHRoaXMuZnJhbWUpe3RoaXMuaGVhZGVyLmFkZENsYXNz KCJ4LXBhbmVsLWljb24iKTt0aGlzLmhlYWRlci5yZXBsYWNlQ2xhc3MoYSx0aGlzLmljb25DbHMp fWVsc2V7dmFyIGQ9dGhpcy5oZWFkZXIuZG9tO3ZhciBjPWQuZmlyc3RDaGlsZCYmU3RyaW5nKGQu Zmlyc3RDaGlsZC50YWdOYW1lKS50b0xvd2VyQ2FzZSgpPT0iaW1nIj9kLmZpcnN0Q2hpbGQ6bnVs bDtpZihjKXtFeHQuZmx5KGMpLnJlcGxhY2VDbGFzcyhhLHRoaXMuaWNvbkNscyl9ZWxzZXtFeHQu RG9tSGVscGVyLmluc2VydEJlZm9yZShkLmZpcnN0Q2hpbGQse3RhZzoiaW1nIixzcmM6RXh0LkJM QU5LX0lNQUdFX1VSTCxjbHM6IngtcGFuZWwtaW5saW5lLWljb24gIit0aGlzLmljb25DbHN9KX19 fXRoaXMuZmlyZUV2ZW50KCJpY29uY2hhbmdlIix0aGlzLGIsYSl9LG1ha2VGbG9hdGluZzpmdW5j dGlvbihhKXt0aGlzLmZsb2F0aW5nPXRydWU7dGhpcy5lbD1uZXcgRXh0LkxheWVyKEV4dC5pc09i amVjdChhKT9hOntzaGFkb3c6dGhpcy5zaGFkb3chPT11bmRlZmluZWQ/dGhpcy5zaGFkb3c6InNp ZGVzIixzaGFkb3dPZmZzZXQ6dGhpcy5zaGFkb3dPZmZzZXQsY29uc3RyYWluOmZhbHNlLHNoaW06 dGhpcy5zaGltPT09ZmFsc2U/ZmFsc2U6dW5kZWZpbmVkfSx0aGlzLmVsKX0sZ2V0VG9wVG9vbGJh cjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvcFRvb2xiYXJ9LGdldEJvdHRvbVRvb2xiYXI6ZnVu Y3Rpb24oKXtyZXR1cm4gdGhpcy5ib3R0b21Ub29sYmFyfSxhZGRCdXR0b246ZnVuY3Rpb24oYSxk LGMpe3ZhciBlPXtoYW5kbGVyOmQsc2NvcGU6YyxtaW5XaWR0aDp0aGlzLm1pbkJ1dHRvbldpZHRo LGhpZGVQYXJlbnQ6dHJ1ZX07aWYodHlwZW9mIGE9PSJzdHJpbmciKXtlLnRleHQ9YX1lbHNle0V4 dC5hcHBseShlLGEpfXZhciBiPW5ldyBFeHQuQnV0dG9uKGUpO2lmKCF0aGlzLmJ1dHRvbnMpe3Ro aXMuYnV0dG9ucz1bXX10aGlzLmJ1dHRvbnMucHVzaChiKTtyZXR1cm4gYn0sYWRkVG9vbDpmdW5j dGlvbigpe2lmKCF0aGlzW3RoaXMudG9vbFRhcmdldF0pe3JldHVybn1pZighdGhpcy50b29sVGVt cGxhdGUpe3ZhciBoPW5ldyBFeHQuVGVtcGxhdGUoJzxkaXYgY2xhc3M9IngtdG9vbCB4LXRvb2wt e2lkfSI+JiMxNjA7PC9kaXY+Jyk7aC5kaXNhYmxlRm9ybWF0cz10cnVlO2guY29tcGlsZSgpO0V4 dC5QYW5lbC5wcm90b3R5cGUudG9vbFRlbXBsYXRlPWh9Zm9yKHZhciBnPTAsZD1hcmd1bWVudHMs Yz1kLmxlbmd0aDtnPGM7ZysrKXt2YXIgYj1kW2ddO2lmKCF0aGlzLnRvb2xzW2IuaWRdKXt2YXIg aj0ieC10b29sLSIrYi5pZCsiLW92ZXIiO3ZhciBlPXRoaXMudG9vbFRlbXBsYXRlLmluc2VydEZp cnN0KChiLmFsaWduIT09ImxlZnQiKT90aGlzW3RoaXMudG9vbFRhcmdldF06dGhpc1t0aGlzLnRv b2xUYXJnZXRdLmNoaWxkKCJzcGFuIiksYix0cnVlKTt0aGlzLnRvb2xzW2IuaWRdPWU7ZS5lbmFi bGVEaXNwbGF5TW9kZSgiYmxvY2siKTt0aGlzLm1vbihlLCJjbGljayIsdGhpcy5jcmVhdGVUb29s SGFuZGxlcihlLGIsaix0aGlzKSk7aWYoYi5vbil7dGhpcy5tb24oZSxiLm9uKX1pZihiLmhpZGRl bil7ZS5oaWRlKCl9aWYoYi5xdGlwKXtpZihFeHQuaXNPYmplY3QoYi5xdGlwKSl7RXh0LlF1aWNr VGlwcy5yZWdpc3RlcihFeHQuYXBwbHkoe3RhcmdldDplLmlkfSxiLnF0aXApKX1lbHNle2UuZG9t LnF0aXA9Yi5xdGlwfX1lLmFkZENsYXNzT25PdmVyKGopfX19LG9uTGF5b3V0OmZ1bmN0aW9uKCl7 aWYodGhpcy50b29sYmFycy5sZW5ndGg+MCl7dGhpcy5kdXJpbmdMYXlvdXQ9dHJ1ZTtFeHQuZWFj aCh0aGlzLnRvb2xiYXJzLGZ1bmN0aW9uKGEpe2EuZG9MYXlvdXQoKX0pO2RlbGV0ZSB0aGlzLmR1 cmluZ0xheW91dDt0aGlzLnN5bmNIZWlnaHQoKX19LHN5bmNIZWlnaHQ6ZnVuY3Rpb24oKXtpZigh KHRoaXMuYXV0b0hlaWdodHx8dGhpcy5kdXJpbmdMYXlvdXQpKXt2YXIgZD10aGlzLmxhc3RTaXpl O2lmKGQmJiFFeHQuaXNFbXB0eShkLmhlaWdodCkpe3ZhciBiPWQuaGVpZ2h0LGM9dGhpcy5lbC5n ZXRIZWlnaHQoKTtpZihiIT0iYXV0byImJmIhPWMpe3ZhciBlPXRoaXMuYm9keSxhPWUuZ2V0SGVp Z2h0KCk7Yz1NYXRoLm1heChhK2ItYywwKTtpZihhPjAmJmEhPWMpe2Uuc2V0SGVpZ2h0KGMpO2lm KEV4dC5pc0lFJiZjPD0wKXtyZXR1cm59dmFyIGc9ZS5nZXRTaXplKCk7dGhpcy5maXJlRXZlbnQo ImJvZHlyZXNpemUiLGcud2lkdGgsZy5oZWlnaHQpfX19fX0sb25TaG93OmZ1bmN0aW9uKCl7aWYo dGhpcy5mbG9hdGluZyl7cmV0dXJuIHRoaXMuZWwuc2hvdygpfUV4dC5QYW5lbC5zdXBlcmNsYXNz Lm9uU2hvdy5jYWxsKHRoaXMpfSxvbkhpZGU6ZnVuY3Rpb24oKXtpZih0aGlzLmZsb2F0aW5nKXty ZXR1cm4gdGhpcy5lbC5oaWRlKCl9RXh0LlBhbmVsLnN1cGVyY2xhc3Mub25IaWRlLmNhbGwodGhp cyl9LGNyZWF0ZVRvb2xIYW5kbGVyOmZ1bmN0aW9uKGMsYSxkLGIpe3JldHVybiBmdW5jdGlvbihn KXtjLnJlbW92ZUNsYXNzKGQpO2lmKGEuc3RvcEV2ZW50IT09ZmFsc2Upe2cuc3RvcEV2ZW50KCl9 aWYoYS5oYW5kbGVyKXthLmhhbmRsZXIuY2FsbChhLnNjb3BlfHxjLGcsYyxiLGEpfX19LGFmdGVy UmVuZGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5mbG9hdGluZyYmIXRoaXMuaGlkZGVuKXt0aGlzLmVs LnNob3coKX1pZih0aGlzLnRpdGxlKXt0aGlzLnNldFRpdGxlKHRoaXMudGl0bGUpfXRoaXMuc2V0 QXV0b1Njcm9sbCgpO2lmKHRoaXMuaHRtbCl7dGhpcy5ib2R5LnVwZGF0ZShFeHQuaXNPYmplY3Qo dGhpcy5odG1sKT9FeHQuRG9tSGVscGVyLm1hcmt1cCh0aGlzLmh0bWwpOnRoaXMuaHRtbCk7ZGVs ZXRlIHRoaXMuaHRtbH1pZih0aGlzLmNvbnRlbnRFbCl7dmFyIGE9RXh0LmdldERvbSh0aGlzLmNv bnRlbnRFbCk7RXh0LmZseShhKS5yZW1vdmVDbGFzcyhbIngtaGlkZGVuIiwieC1oaWRlLWRpc3Bs YXkiXSk7dGhpcy5ib2R5LmRvbS5hcHBlbmRDaGlsZChhKX1pZih0aGlzLmNvbGxhcHNlZCl7dGhp cy5jb2xsYXBzZWQ9ZmFsc2U7dGhpcy5jb2xsYXBzZShmYWxzZSl9RXh0LlBhbmVsLnN1cGVyY2xh c3MuYWZ0ZXJSZW5kZXIuY2FsbCh0aGlzKTt0aGlzLmluaXRFdmVudHMoKX0sc2V0QXV0b1Njcm9s bDpmdW5jdGlvbigpe2lmKHRoaXMucmVuZGVyZWQmJnRoaXMuYXV0b1Njcm9sbCl7dmFyIGE9dGhp cy5ib2R5fHx0aGlzLmVsO2lmKGEpe2Euc2V0T3ZlcmZsb3coImF1dG8iKX19fSxnZXRLZXlNYXA6 ZnVuY3Rpb24oKXtpZighdGhpcy5rZXlNYXApe3RoaXMua2V5TWFwPW5ldyBFeHQuS2V5TWFwKHRo aXMuZWwsdGhpcy5rZXlzKX1yZXR1cm4gdGhpcy5rZXlNYXB9LGluaXRFdmVudHM6ZnVuY3Rpb24o KXtpZih0aGlzLmtleXMpe3RoaXMuZ2V0S2V5TWFwKCl9aWYodGhpcy5kcmFnZ2FibGUpe3RoaXMu aW5pdERyYWdnYWJsZSgpfX0saW5pdERyYWdnYWJsZTpmdW5jdGlvbigpe3RoaXMuZGQ9bmV3IEV4 dC5QYW5lbC5ERCh0aGlzLHR5cGVvZiB0aGlzLmRyYWdnYWJsZT09ImJvb2xlYW4iP251bGw6dGhp cy5kcmFnZ2FibGUpfSxiZWZvcmVFZmZlY3Q6ZnVuY3Rpb24oKXtpZih0aGlzLmZsb2F0aW5nKXt0 aGlzLmVsLmJlZm9yZUFjdGlvbigpfXRoaXMuZWwuYWRkQ2xhc3MoIngtcGFuZWwtYW5pbWF0ZWQi KX0sYWZ0ZXJFZmZlY3Q6ZnVuY3Rpb24oKXt0aGlzLnN5bmNTaGFkb3coKTt0aGlzLmVsLnJlbW92 ZUNsYXNzKCJ4LXBhbmVsLWFuaW1hdGVkIil9LGNyZWF0ZUVmZmVjdDpmdW5jdGlvbihjLGIsZCl7 dmFyIGU9e3Njb3BlOmQsYmxvY2s6dHJ1ZX07aWYoYz09PXRydWUpe2UuY2FsbGJhY2s9YjtyZXR1 cm4gZX1lbHNle2lmKCFjLmNhbGxiYWNrKXtlLmNhbGxiYWNrPWJ9ZWxzZXtlLmNhbGxiYWNrPWZ1 bmN0aW9uKCl7Yi5jYWxsKGQpO0V4dC5jYWxsYmFjayhjLmNhbGxiYWNrLGMuc2NvcGUpfX19cmV0 dXJuIEV4dC5hcHBseUlmKGUsYyl9LGNvbGxhcHNlOmZ1bmN0aW9uKGIpe2lmKHRoaXMuY29sbGFw c2VkfHx0aGlzLmVsLmhhc0Z4QmxvY2soKXx8dGhpcy5maXJlRXZlbnQoImJlZm9yZWNvbGxhcHNl Iix0aGlzLGIpPT09ZmFsc2Upe3JldHVybn12YXIgYT1iPT09dHJ1ZXx8KGIhPT1mYWxzZSYmdGhp cy5hbmltQ29sbGFwc2UpO3RoaXMuYmVmb3JlRWZmZWN0KCk7dGhpcy5vbkNvbGxhcHNlKGEsYik7 cmV0dXJuIHRoaXN9LG9uQ29sbGFwc2U6ZnVuY3Rpb24oYSxiKXtpZihhKXt0aGlzW3RoaXMuY29s bGFwc2VFbF0uc2xpZGVPdXQodGhpcy5zbGlkZUFuY2hvcixFeHQuYXBwbHkodGhpcy5jcmVhdGVF ZmZlY3QoYnx8dHJ1ZSx0aGlzLmFmdGVyQ29sbGFwc2UsdGhpcyksdGhpcy5jb2xsYXBzZURlZmF1 bHRzKSl9ZWxzZXt0aGlzW3RoaXMuY29sbGFwc2VFbF0uaGlkZSgpO3RoaXMuYWZ0ZXJDb2xsYXBz ZSgpfX0sYWZ0ZXJDb2xsYXBzZTpmdW5jdGlvbigpe3RoaXMuY29sbGFwc2VkPXRydWU7dGhpcy5l bC5hZGRDbGFzcyh0aGlzLmNvbGxhcHNlZENscyk7dGhpcy5hZnRlckVmZmVjdCgpO3RoaXMuZmly ZUV2ZW50KCJjb2xsYXBzZSIsdGhpcyl9LGV4cGFuZDpmdW5jdGlvbihiKXtpZighdGhpcy5jb2xs YXBzZWR8fHRoaXMuZWwuaGFzRnhCbG9jaygpfHx0aGlzLmZpcmVFdmVudCgiYmVmb3JlZXhwYW5k Iix0aGlzLGIpPT09ZmFsc2Upe3JldHVybn12YXIgYT1iPT09dHJ1ZXx8KGIhPT1mYWxzZSYmdGhp cy5hbmltQ29sbGFwc2UpO3RoaXMuZWwucmVtb3ZlQ2xhc3ModGhpcy5jb2xsYXBzZWRDbHMpO3Ro aXMuYmVmb3JlRWZmZWN0KCk7dGhpcy5vbkV4cGFuZChhLGIpO3JldHVybiB0aGlzfSxvbkV4cGFu ZDpmdW5jdGlvbihhLGIpe2lmKGEpe3RoaXNbdGhpcy5jb2xsYXBzZUVsXS5zbGlkZUluKHRoaXMu c2xpZGVBbmNob3IsRXh0LmFwcGx5KHRoaXMuY3JlYXRlRWZmZWN0KGJ8fHRydWUsdGhpcy5hZnRl ckV4cGFuZCx0aGlzKSx0aGlzLmV4cGFuZERlZmF1bHRzKSl9ZWxzZXt0aGlzW3RoaXMuY29sbGFw c2VFbF0uc2hvdygpO3RoaXMuYWZ0ZXJFeHBhbmQoKX19LGFmdGVyRXhwYW5kOmZ1bmN0aW9uKCl7 dGhpcy5jb2xsYXBzZWQ9ZmFsc2U7dGhpcy5hZnRlckVmZmVjdCgpO2lmKHRoaXMuZGVmZXJMYXlv dXQhPT11bmRlZmluZWQpe3RoaXMuZG9MYXlvdXQodHJ1ZSl9dGhpcy5maXJlRXZlbnQoImV4cGFu ZCIsdGhpcyl9LHRvZ2dsZUNvbGxhcHNlOmZ1bmN0aW9uKGEpe3RoaXNbdGhpcy5jb2xsYXBzZWQ/ ImV4cGFuZCI6ImNvbGxhcHNlIl0oYSk7cmV0dXJuIHRoaXN9LG9uRGlzYWJsZTpmdW5jdGlvbigp e2lmKHRoaXMucmVuZGVyZWQmJnRoaXMubWFza0Rpc2FibGVkKXt0aGlzLmVsLm1hc2soKX1FeHQu UGFuZWwuc3VwZXJjbGFzcy5vbkRpc2FibGUuY2FsbCh0aGlzKX0sb25FbmFibGU6ZnVuY3Rpb24o KXtpZih0aGlzLnJlbmRlcmVkJiZ0aGlzLm1hc2tEaXNhYmxlZCl7dGhpcy5lbC51bm1hc2soKX1F eHQuUGFuZWwuc3VwZXJjbGFzcy5vbkVuYWJsZS5jYWxsKHRoaXMpfSxvblJlc2l6ZTpmdW5jdGlv bihiLGMpe2lmKGIhPT11bmRlZmluZWR8fGMhPT11bmRlZmluZWQpe2lmKCF0aGlzLmNvbGxhcHNl ZCl7aWYodHlwZW9mIGI9PSJudW1iZXIiKXtiPXRoaXMuYWRqdXN0Qm9keVdpZHRoKGItdGhpcy5n ZXRGcmFtZVdpZHRoKCkpO2lmKHRoaXMudGJhcil7dGhpcy50YmFyLnNldFdpZHRoKGIpO2lmKHRo aXMudG9wVG9vbGJhcil7dGhpcy50b3BUb29sYmFyLnNldFNpemUoYil9fWlmKHRoaXMuYmJhcil7 dGhpcy5iYmFyLnNldFdpZHRoKGIpO2lmKHRoaXMuYm90dG9tVG9vbGJhcil7dGhpcy5ib3R0b21U b29sYmFyLnNldFNpemUoYil9fWlmKHRoaXMuZmJhcil7dmFyIGQ9dGhpcy5mYmFyLGU9MSxhPUV4 dC5pc1N0cmljdDtpZih0aGlzLmJ1dHRvbkFsaWduPT0ibGVmdCIpe2U9Yi1kLmNvbnRhaW5lci5n ZXRGcmFtZVdpZHRoKCJsciIpfWVsc2V7aWYoRXh0LmlzSUV8fEV4dC5pc1dlYktpdCl7aWYoISh0 aGlzLmJ1dHRvbkFsaWduPT0iY2VudGVyIiYmRXh0LmlzV2ViS2l0KSYmKCFhfHwoIUV4dC5pc0lF OCYmYSkpKXsoZnVuY3Rpb24oKXtkLnNldFdpZHRoKGQuZ2V0RWwoKS5jaGlsZCgiLngtdG9vbGJh ci1jdCIpLmdldFdpZHRoKCkpfSkuZGVmZXIoMSl9ZWxzZXtlPSJhdXRvIn19ZWxzZXtlPSJhdXRv In19ZC5zZXRXaWR0aChlKX10aGlzLmJvZHkuc2V0V2lkdGgoYil9ZWxzZXtpZihiPT0iYXV0byIp e3RoaXMuYm9keS5zZXRXaWR0aChiKX19aWYodHlwZW9mIGM9PSJudW1iZXIiKXtjPU1hdGgubWF4 KDAsdGhpcy5hZGp1c3RCb2R5SGVpZ2h0KGMtdGhpcy5nZXRGcmFtZUhlaWdodCgpKSk7dGhpcy5i b2R5LnNldEhlaWdodChjKX1lbHNle2lmKGM9PSJhdXRvIil7dGhpcy5ib2R5LnNldEhlaWdodChj KX19aWYodGhpcy5kaXNhYmxlZCYmdGhpcy5lbC5fbWFzayl7dGhpcy5lbC5fbWFzay5zZXRTaXpl KHRoaXMuZWwuZG9tLmNsaWVudFdpZHRoLHRoaXMuZWwuZ2V0SGVpZ2h0KCkpfX1lbHNle3RoaXMu cXVldWVkQm9keVNpemU9e3dpZHRoOmIsaGVpZ2h0OmN9O2lmKCF0aGlzLnF1ZXVlZEV4cGFuZCYm dGhpcy5hbGxvd1F1ZXVlZEV4cGFuZCE9PWZhbHNlKXt0aGlzLnF1ZXVlZEV4cGFuZD10cnVlO3Ro aXMub24oImV4cGFuZCIsZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5xdWV1ZWRFeHBhbmQ7dGhpcy5v blJlc2l6ZSh0aGlzLnF1ZXVlZEJvZHlTaXplLndpZHRoLHRoaXMucXVldWVkQm9keVNpemUuaGVp Z2h0KTt0aGlzLmRvTGF5b3V0KCl9LHRoaXMse3NpbmdsZTp0cnVlfSl9fXRoaXMuZmlyZUV2ZW50 KCJib2R5cmVzaXplIix0aGlzLGIsYyl9dGhpcy5zeW5jU2hhZG93KCl9LGFkanVzdEJvZHlIZWln aHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LGFkanVzdEJvZHlXaWR0aDpmdW5jdGlvbihhKXtyZXR1 cm4gYX0sb25Qb3NpdGlvbjpmdW5jdGlvbigpe3RoaXMuc3luY1NoYWRvdygpfSxnZXRGcmFtZVdp ZHRoOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbC5nZXRGcmFtZVdpZHRoKCJsciIpK3RoaXMuYndy YXAuZ2V0RnJhbWVXaWR0aCgibHIiKTtpZih0aGlzLmZyYW1lKXt2YXIgYT10aGlzLmJ3cmFwLmRv bS5maXJzdENoaWxkO2IrPShFeHQuZmx5KGEpLmdldEZyYW1lV2lkdGgoImwiKStFeHQuZmx5KGEu Zmlyc3RDaGlsZCkuZ2V0RnJhbWVXaWR0aCgiciIpKTt2YXIgYz10aGlzLmJ3cmFwLmRvbS5maXJz dENoaWxkLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZDtiKz1FeHQuZmx5KGMpLmdldEZyYW1lV2lkdGgo ImxyIil9cmV0dXJuIGJ9LGdldEZyYW1lSGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5lbC5n ZXRGcmFtZVdpZHRoKCJ0YiIpK3RoaXMuYndyYXAuZ2V0RnJhbWVXaWR0aCgidGIiKTthKz0odGhp cy50YmFyP3RoaXMudGJhci5nZXRIZWlnaHQoKTowKSsodGhpcy5iYmFyP3RoaXMuYmJhci5nZXRI ZWlnaHQoKTowKTtpZih0aGlzLmZyYW1lKXt2YXIgYz10aGlzLmVsLmRvbS5maXJzdENoaWxkO3Zh ciBkPXRoaXMuYndyYXAuZG9tLmxhc3RDaGlsZDthKz0oYy5vZmZzZXRIZWlnaHQrZC5vZmZzZXRI ZWlnaHQpO3ZhciBiPXRoaXMuYndyYXAuZG9tLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5maXJzdENo aWxkO2ErPUV4dC5mbHkoYikuZ2V0RnJhbWVXaWR0aCgidGIiKX1lbHNle2ErPSh0aGlzLmhlYWRl cj90aGlzLmhlYWRlci5nZXRIZWlnaHQoKTowKSsodGhpcy5mb290ZXI/dGhpcy5mb290ZXIuZ2V0 SGVpZ2h0KCk6MCl9cmV0dXJuIGF9LGdldElubmVyV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp cy5nZXRTaXplKCkud2lkdGgtdGhpcy5nZXRGcmFtZVdpZHRoKCl9LGdldElubmVySGVpZ2h0OmZ1 bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLmhlaWdodC10aGlzLmdldEZyYW1lSGVpZ2h0 KCl9LHN5bmNTaGFkb3c6ZnVuY3Rpb24oKXtpZih0aGlzLmZsb2F0aW5nKXt0aGlzLmVsLnN5bmMo dHJ1ZSl9fSxnZXRMYXlvdXRUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib2R5fSxzZXRU aXRsZTpmdW5jdGlvbihiLGEpe3RoaXMudGl0bGU9YjtpZih0aGlzLmhlYWRlciYmdGhpcy5oZWFk ZXJBc1RleHQpe3RoaXMuaGVhZGVyLmNoaWxkKCJzcGFuIikudXBkYXRlKGIpfWlmKGEpe3RoaXMu c2V0SWNvbkNsYXNzKGEpfXRoaXMuZmlyZUV2ZW50KCJ0aXRsZWNoYW5nZSIsdGhpcyxiKTtyZXR1 cm4gdGhpc30sZ2V0VXBkYXRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJvZHkuZ2V0VXBkYXRl cigpfSxsb2FkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ib2R5LmdldFVwZGF0ZXIoKTthLnVwZGF0 ZS5hcHBseShhLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXN9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24o KXtpZih0aGlzLmhlYWRlcil7dGhpcy5oZWFkZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCk7aWYodGhp cy5oZWFkZXJBc1RleHQpe0V4dC5FbGVtZW50LnVuY2FjaGUodGhpcy5oZWFkZXIuY2hpbGQoInNw YW4iKSl9fUV4dC5FbGVtZW50LnVuY2FjaGUodGhpcy5oZWFkZXIsdGhpcy50YmFyLHRoaXMuYmJh cix0aGlzLmZvb3Rlcix0aGlzLmJvZHksdGhpcy5id3JhcCk7aWYodGhpcy50b29scyl7Zm9yKHZh ciBjIGluIHRoaXMudG9vbHMpe0V4dC5kZXN0cm95KHRoaXMudG9vbHNbY10pfX1pZih0aGlzLmJ1 dHRvbnMpe2Zvcih2YXIgYSBpbiB0aGlzLmJ1dHRvbnMpe0V4dC5kZXN0cm95KHRoaXMuYnV0dG9u c1thXSl9fUV4dC5kZXN0cm95KHRoaXMudG9vbGJhcnMpO0V4dC5QYW5lbC5zdXBlcmNsYXNzLmJl Zm9yZURlc3Ryb3kuY2FsbCh0aGlzKX0sY3JlYXRlQ2xhc3NlczpmdW5jdGlvbigpe3RoaXMuaGVh ZGVyQ2xzPXRoaXMuYmFzZUNscysiLWhlYWRlciI7dGhpcy5oZWFkZXJUZXh0Q2xzPXRoaXMuYmFz ZUNscysiLWhlYWRlci10ZXh0Ijt0aGlzLmJ3cmFwQ2xzPXRoaXMuYmFzZUNscysiLWJ3cmFwIjt0 aGlzLnRiYXJDbHM9dGhpcy5iYXNlQ2xzKyItdGJhciI7dGhpcy5ib2R5Q2xzPXRoaXMuYmFzZUNs cysiLWJvZHkiO3RoaXMuYmJhckNscz10aGlzLmJhc2VDbHMrIi1iYmFyIjt0aGlzLmZvb3RlckNs cz10aGlzLmJhc2VDbHMrIi1mb290ZXIifSxjcmVhdGVHaG9zdDpmdW5jdGlvbihhLGUsYil7dmFy IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5jbGFzc05hbWU9IngtcGFuZWwtZ2hv c3QgIisoYT9hOiIiKTtpZih0aGlzLmhlYWRlcil7ZC5hcHBlbmRDaGlsZCh0aGlzLmVsLmRvbS5m aXJzdENoaWxkLmNsb25lTm9kZSh0cnVlKSl9RXh0LmZseShkLmFwcGVuZENoaWxkKGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoInVsIikpKS5zZXRIZWlnaHQodGhpcy5id3JhcC5nZXRIZWlnaHQoKSk7 ZC5zdHlsZS53aWR0aD10aGlzLmVsLmRvbS5vZmZzZXRXaWR0aCsicHgiO2lmKCFiKXt0aGlzLmNv bnRhaW5lci5kb20uYXBwZW5kQ2hpbGQoZCl9ZWxzZXtFeHQuZ2V0RG9tKGIpLmFwcGVuZENoaWxk KGQpfWlmKGUhPT1mYWxzZSYmdGhpcy5lbC51c2VTaGltIT09ZmFsc2Upe3ZhciBjPW5ldyBFeHQu TGF5ZXIoe3NoYWRvdzpmYWxzZSx1c2VEaXNwbGF5OnRydWUsY29uc3RyYWluOmZhbHNlfSxkKTtj LnNob3coKTtyZXR1cm4gY31lbHNle3JldHVybiBuZXcgRXh0LkVsZW1lbnQoZCl9fSxkb0F1dG9M b2FkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5ib2R5LmdldFVwZGF0ZXIoKTtpZih0aGlzLnJlbmRl cmVyKXthLnNldFJlbmRlcmVyKHRoaXMucmVuZGVyZXIpfWEudXBkYXRlKEV4dC5pc09iamVjdCh0 aGlzLmF1dG9Mb2FkKT90aGlzLmF1dG9Mb2FkOnt1cmw6dGhpcy5hdXRvTG9hZH0pfSxnZXRUb29s OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnRvb2xzW2FdfX0pO0V4dC5yZWcoInBhbmVsIixFeHQu UGFuZWwpO0V4dC5FZGl0b3I9ZnVuY3Rpb24oYixhKXtpZihiLmZpZWxkKXt0aGlzLmZpZWxkPUV4 dC5jcmVhdGUoYi5maWVsZCwidGV4dGZpZWxkIik7YT1FeHQuYXBwbHkoe30sYik7ZGVsZXRlIGEu ZmllbGR9ZWxzZXt0aGlzLmZpZWxkPWJ9RXh0LkVkaXRvci5zdXBlcmNsYXNzLmNvbnN0cnVjdG9y LmNhbGwodGhpcyxhKX07RXh0LmV4dGVuZChFeHQuRWRpdG9yLEV4dC5Db21wb25lbnQse3ZhbHVl OiIiLGFsaWdubWVudDoiYy1jPyIsc2hhZG93OiJmcmFtZSIsY29uc3RyYWluOmZhbHNlLHN3YWxs b3dLZXlzOnRydWUsY29tcGxldGVPbkVudGVyOmZhbHNlLGNhbmNlbE9uRXNjOmZhbHNlLHVwZGF0 ZUVsOmZhbHNlLGluaXRDb21wb25lbnQ6ZnVuY3Rpb24oKXtFeHQuRWRpdG9yLnN1cGVyY2xhc3Mu aW5pdENvbXBvbmVudC5jYWxsKHRoaXMpO3RoaXMuYWRkRXZlbnRzKCJiZWZvcmVzdGFydGVkaXQi LCJzdGFydGVkaXQiLCJiZWZvcmVjb21wbGV0ZSIsImNvbXBsZXRlIiwiY2FuY2VsZWRpdCIsInNw ZWNpYWxrZXkiKX0sb25SZW5kZXI6ZnVuY3Rpb24oYixhKXt0aGlzLmVsPW5ldyBFeHQuTGF5ZXIo e3NoYWRvdzp0aGlzLnNoYWRvdyxjbHM6IngtZWRpdG9yIixwYXJlbnRFbDpiLHNoaW06dGhpcy5z aGltLHNoYWRvd09mZnNldDp0aGlzLnNoYWRvd09mZnNldHx8NCxpZDp0aGlzLmlkLGNvbnN0cmFp bjp0aGlzLmNvbnN0cmFpbn0pO2lmKHRoaXMuekluZGV4KXt0aGlzLmVsLnNldFpJbmRleCh0aGlz LnpJbmRleCl9dGhpcy5lbC5zZXRTdHlsZSgib3ZlcmZsb3ciLEV4dC5pc0dlY2tvPyJhdXRvIjoi aGlkZGVuIik7aWYodGhpcy5maWVsZC5tc2dUYXJnZXQhPSJ0aXRsZSIpe3RoaXMuZmllbGQubXNn VGFyZ2V0PSJxdGlwIn10aGlzLmZpZWxkLmluRWRpdG9yPXRydWU7dGhpcy5maWVsZC5yZW5kZXIo dGhpcy5lbCk7aWYoRXh0LmlzR2Vja28pe3RoaXMuZmllbGQuZWwuZG9tLnNldEF0dHJpYnV0ZSgi YXV0b2NvbXBsZXRlIiwib2ZmIil9dGhpcy5tb24odGhpcy5maWVsZCwic3BlY2lhbGtleSIsdGhp cy5vblNwZWNpYWxLZXksdGhpcyk7aWYodGhpcy5zd2FsbG93S2V5cyl7dGhpcy5maWVsZC5lbC5z d2FsbG93RXZlbnQoWyJrZXlkb3duIiwia2V5cHJlc3MiXSl9dGhpcy5maWVsZC5zaG93KCk7dGhp cy5tb24odGhpcy5maWVsZCwiYmx1ciIsdGhpcy5vbkJsdXIsdGhpcyk7aWYodGhpcy5maWVsZC5n cm93KXt0aGlzLm1vbih0aGlzLmZpZWxkLCJhdXRvc2l6ZSIsdGhpcy5lbC5zeW5jLHRoaXMuZWws e2RlbGF5OjF9KX19LG9uU3BlY2lhbEtleTpmdW5jdGlvbihjLGIpe3ZhciBhPWIuZ2V0S2V5KCk7 aWYodGhpcy5jb21wbGV0ZU9uRW50ZXImJmE9PWIuRU5URVIpe2Iuc3RvcEV2ZW50KCk7dGhpcy5j b21wbGV0ZUVkaXQoKX1lbHNle2lmKHRoaXMuY2FuY2VsT25Fc2MmJmE9PWIuRVNDKXt0aGlzLmNh bmNlbEVkaXQoKX1lbHNle3RoaXMuZmlyZUV2ZW50KCJzcGVjaWFsa2V5IixjLGIpfX1pZih0aGlz LmZpZWxkLnRyaWdnZXJCbHVyJiYoYT09Yi5FTlRFUnx8YT09Yi5FU0N8fGE9PWIuVEFCKSl7dGhp cy5maWVsZC50cmlnZ2VyQmx1cigpfX0sc3RhcnRFZGl0OmZ1bmN0aW9uKGIsYyl7aWYodGhpcy5l ZGl0aW5nKXt0aGlzLmNvbXBsZXRlRWRpdCgpfXRoaXMuYm91bmRFbD1FeHQuZ2V0KGIpO3ZhciBh PWMhPT11bmRlZmluZWQ/Yzp0aGlzLmJvdW5kRWwuZG9tLmlubmVySFRNTDtpZighdGhpcy5yZW5k ZXJlZCl7dGhpcy5yZW5kZXIodGhpcy5wYXJlbnRFbHx8ZG9jdW1lbnQuYm9keSl9aWYodGhpcy5m aXJlRXZlbnQoImJlZm9yZXN0YXJ0ZWRpdCIsdGhpcyx0aGlzLmJvdW5kRWwsYSk9PT1mYWxzZSl7 cmV0dXJufXRoaXMuc3RhcnRWYWx1ZT1hO3RoaXMuZmllbGQuc2V0VmFsdWUoYSk7dGhpcy5kb0F1 dG9TaXplKCk7dGhpcy5lbC5hbGlnblRvKHRoaXMuYm91bmRFbCx0aGlzLmFsaWdubWVudCk7dGhp cy5lZGl0aW5nPXRydWU7dGhpcy5zaG93KCl9LGRvQXV0b1NpemU6ZnVuY3Rpb24oKXtpZih0aGlz LmF1dG9TaXplKXt2YXIgYT10aGlzLmJvdW5kRWwuZ2V0U2l6ZSgpO3N3aXRjaCh0aGlzLmF1dG9T aXplKXtjYXNlIndpZHRoIjp0aGlzLnNldFNpemUoYS53aWR0aCwiIik7YnJlYWs7Y2FzZSJoZWln aHQiOnRoaXMuc2V0U2l6ZSgiIixhLmhlaWdodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnNldFNpemUo YS53aWR0aCxhLmhlaWdodCl9fX0sc2V0U2l6ZTpmdW5jdGlvbihhLGIpe2RlbGV0ZSB0aGlzLmZp ZWxkLmxhc3RTaXplO3RoaXMuZmllbGQuc2V0U2l6ZShhLGIpO2lmKHRoaXMuZWwpe2lmKEV4dC5p c0dlY2tvMnx8RXh0LmlzT3BlcmEpe3RoaXMuZWwuc2V0U2l6ZShhLGIpfXRoaXMuZWwuc3luYygp fX0scmVhbGlnbjpmdW5jdGlvbigpe3RoaXMuZWwuYWxpZ25Ubyh0aGlzLmJvdW5kRWwsdGhpcy5h bGlnbm1lbnQpfSxjb21wbGV0ZUVkaXQ6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuZWRpdGluZyl7cmV0 dXJufXZhciBiPXRoaXMuZ2V0VmFsdWUoKTtpZighdGhpcy5maWVsZC5pc1ZhbGlkKCkpe2lmKHRo aXMucmV2ZXJ0SW52YWxpZCE9PWZhbHNlKXt0aGlzLmNhbmNlbEVkaXQoYSl9cmV0dXJufWlmKFN0 cmluZyhiKT09PVN0cmluZyh0aGlzLnN0YXJ0VmFsdWUpJiZ0aGlzLmlnbm9yZU5vQ2hhbmdlKXt0 aGlzLmhpZGVFZGl0KGEpO3JldHVybn1pZih0aGlzLmZpcmVFdmVudCgiYmVmb3JlY29tcGxldGUi LHRoaXMsYix0aGlzLnN0YXJ0VmFsdWUpIT09ZmFsc2Upe2I9dGhpcy5nZXRWYWx1ZSgpO2lmKHRo aXMudXBkYXRlRWwmJnRoaXMuYm91bmRFbCl7dGhpcy5ib3VuZEVsLnVwZGF0ZShiKX10aGlzLmhp ZGVFZGl0KGEpO3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIsdGhpcyxiLHRoaXMuc3RhcnRWYWx1 ZSl9fSxvblNob3c6ZnVuY3Rpb24oKXt0aGlzLmVsLnNob3coKTtpZih0aGlzLmhpZGVFbCE9PWZh bHNlKXt0aGlzLmJvdW5kRWwuaGlkZSgpfXRoaXMuZmllbGQuc2hvdygpO2lmKEV4dC5pc0lFJiYh dGhpcy5maXhJRUZvY3VzKXt0aGlzLmZpeElFRm9jdXM9dHJ1ZTt0aGlzLmRlZmVycmVkRm9jdXMu ZGVmZXIoNTAsdGhpcyl9ZWxzZXt0aGlzLmZpZWxkLmZvY3VzKCl9dGhpcy5maXJlRXZlbnQoInN0 YXJ0ZWRpdCIsdGhpcy5ib3VuZEVsLHRoaXMuc3RhcnRWYWx1ZSl9LGRlZmVycmVkRm9jdXM6ZnVu Y3Rpb24oKXtpZih0aGlzLmVkaXRpbmcpe3RoaXMuZmllbGQuZm9jdXMoKX19LGNhbmNlbEVkaXQ6 ZnVuY3Rpb24oYSl7aWYodGhpcy5lZGl0aW5nKXt2YXIgYj10aGlzLmdldFZhbHVlKCk7dGhpcy5z ZXRWYWx1ZSh0aGlzLnN0YXJ0VmFsdWUpO3RoaXMuaGlkZUVkaXQoYSk7dGhpcy5maXJlRXZlbnQo ImNhbmNlbGVkaXQiLHRoaXMsYix0aGlzLnN0YXJ0VmFsdWUpfX0saGlkZUVkaXQ6ZnVuY3Rpb24o YSl7aWYoYSE9PXRydWUpe3RoaXMuZWRpdGluZz1mYWxzZTt0aGlzLmhpZGUoKX19LG9uQmx1cjpm dW5jdGlvbigpe2lmKHRoaXMuYWxsb3dCbHVyIT09dHJ1ZSYmdGhpcy5lZGl0aW5nKXt0aGlzLmNv bXBsZXRlRWRpdCgpfX0sb25IaWRlOmZ1bmN0aW9uKCl7aWYodGhpcy5lZGl0aW5nKXt0aGlzLmNv bXBsZXRlRWRpdCgpO3JldHVybn10aGlzLmZpZWxkLmJsdXIoKTtpZih0aGlzLmZpZWxkLmNvbGxh cHNlKXt0aGlzLmZpZWxkLmNvbGxhcHNlKCl9dGhpcy5lbC5oaWRlKCk7aWYodGhpcy5oaWRlRWwh PT1mYWxzZSl7dGhpcy5ib3VuZEVsLnNob3coKX19LHNldFZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMu ZmllbGQuc2V0VmFsdWUoYSl9LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmllbGQu Z2V0VmFsdWUoKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe0V4dC5kZXN0cm95KHRoaXMuZmll bGQpO3RoaXMuZmllbGQ9bnVsbH19KTtFeHQucmVnKCJlZGl0b3IiLEV4dC5FZGl0b3IpO0V4dC5D b2xvclBhbGV0dGU9ZnVuY3Rpb24oYSl7RXh0LkNvbG9yUGFsZXR0ZS5zdXBlcmNsYXNzLmNvbnN0 cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmFkZEV2ZW50cygic2VsZWN0Iik7aWYodGhpcy5oYW5k bGVyKXt0aGlzLm9uKCJzZWxlY3QiLHRoaXMuaGFuZGxlcix0aGlzLnNjb3BlLHRydWUpfX07RXh0 LmV4dGVuZChFeHQuQ29sb3JQYWxldHRlLEV4dC5Db21wb25lbnQse2l0ZW1DbHM6IngtY29sb3It cGFsZXR0ZSIsdmFsdWU6bnVsbCxjbGlja0V2ZW50OiJjbGljayIsY3R5cGU6IkV4dC5Db2xvclBh bGV0dGUiLGFsbG93UmVzZWxlY3Q6ZmFsc2UsY29sb3JzOlsiMDAwMDAwIiwiOTkzMzAwIiwiMzMz MzAwIiwiMDAzMzAwIiwiMDAzMzY2IiwiMDAwMDgwIiwiMzMzMzk5IiwiMzMzMzMzIiwiODAwMDAw IiwiRkY2NjAwIiwiODA4MDAwIiwiMDA4MDAwIiwiMDA4MDgwIiwiMDAwMEZGIiwiNjY2Njk5Iiwi ODA4MDgwIiwiRkYwMDAwIiwiRkY5OTAwIiwiOTlDQzAwIiwiMzM5OTY2IiwiMzNDQ0NDIiwiMzM2 NkZGIiwiODAwMDgwIiwiOTY5Njk2IiwiRkYwMEZGIiwiRkZDQzAwIiwiRkZGRjAwIiwiMDBGRjAw IiwiMDBGRkZGIiwiMDBDQ0ZGIiwiOTkzMzY2IiwiQzBDMEMwIiwiRkY5OUNDIiwiRkZDQzk5Iiwi RkZGRjk5IiwiQ0NGRkNDIiwiQ0NGRkZGIiwiOTlDQ0ZGIiwiQ0M5OUZGIiwiRkZGRkZGIl0sb25S ZW5kZXI6ZnVuY3Rpb24oYixhKXt2YXIgYz10aGlzLnRwbHx8bmV3IEV4dC5YVGVtcGxhdGUoJzx0 cGwgZm9yPSIuIj48YSBocmVmPSIjIiBjbGFzcz0iY29sb3Itey59IiBoaWRlZm9jdXM9Im9uIj48 ZW0+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6I3sufSIgdW5zZWxlY3RhYmxlPSJvbiI+JiMxNjA7 PC9zcGFuPjwvZW0+PC9hPjwvdHBsPicpO3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp diIpO2QuaWQ9dGhpcy5nZXRJZCgpO2QuY2xhc3NOYW1lPXRoaXMuaXRlbUNscztjLm92ZXJ3cml0 ZShkLHRoaXMuY29sb3JzKTtiLmRvbS5pbnNlcnRCZWZvcmUoZCxhKTt0aGlzLmVsPUV4dC5nZXQo ZCk7dGhpcy5tb24odGhpcy5lbCx0aGlzLmNsaWNrRXZlbnQsdGhpcy5oYW5kbGVDbGljayx0aGlz LHtkZWxlZ2F0ZToiYSJ9KTtpZih0aGlzLmNsaWNrRXZlbnQhPSJjbGljayIpe3RoaXMubW9uKHRo aXMuZWwsImNsaWNrIixFeHQuZW1wdHlGbix0aGlzLHtkZWxlZ2F0ZToiYSIscHJldmVudERlZmF1 bHQ6dHJ1ZX0pfX0sYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXtFeHQuQ29sb3JQYWxldHRlLnN1cGVy Y2xhc3MuYWZ0ZXJSZW5kZXIuY2FsbCh0aGlzKTtpZih0aGlzLnZhbHVlKXt2YXIgYT10aGlzLnZh bHVlO3RoaXMudmFsdWU9bnVsbDt0aGlzLnNlbGVjdChhKX19LGhhbmRsZUNsaWNrOmZ1bmN0aW9u KGIsYSl7Yi5wcmV2ZW50RGVmYXVsdCgpO2lmKCF0aGlzLmRpc2FibGVkKXt2YXIgZD1hLmNsYXNz TmFtZS5tYXRjaCgvKD86Xnxccyljb2xvci0oLns2fSkoPzpcc3wkKS8pWzFdO3RoaXMuc2VsZWN0 KGQudG9VcHBlckNhc2UoKSl9fSxzZWxlY3Q6ZnVuY3Rpb24oYSl7YT1hLnJlcGxhY2UoIiMiLCIi KTtpZihhIT10aGlzLnZhbHVlfHx0aGlzLmFsbG93UmVzZWxlY3Qpe3ZhciBiPXRoaXMuZWw7aWYo dGhpcy52YWx1ZSl7Yi5jaGlsZCgiYS5jb2xvci0iK3RoaXMudmFsdWUpLnJlbW92ZUNsYXNzKCJ4 LWNvbG9yLXBhbGV0dGUtc2VsIil9Yi5jaGlsZCgiYS5jb2xvci0iK2EpLmFkZENsYXNzKCJ4LWNv bG9yLXBhbGV0dGUtc2VsIik7dGhpcy52YWx1ZT1hO3RoaXMuZmlyZUV2ZW50KCJzZWxlY3QiLHRo aXMsYSl9fX0pO0V4dC5yZWcoImNvbG9ycGFsZXR0ZSIsRXh0LkNvbG9yUGFsZXR0ZSk7RXh0LkRh dGVQaWNrZXI9RXh0LmV4dGVuZChFeHQuQm94Q29tcG9uZW50LHt0b2RheVRleHQ6IlRvZGF5Iixv a1RleHQ6IiYjMTYwO09LJiMxNjA7IixjYW5jZWxUZXh0OiJDYW5jZWwiLHRvZGF5VGlwOiJ7MH0g KFNwYWNlYmFyKSIsbWluVGV4dDoiVGhpcyBkYXRlIGlzIGJlZm9yZSB0aGUgbWluaW11bSBkYXRl IixtYXhUZXh0OiJUaGlzIGRhdGUgaXMgYWZ0ZXIgdGhlIG1heGltdW0gZGF0ZSIsZm9ybWF0OiJt L2QveSIsZGlzYWJsZWREYXlzVGV4dDoiRGlzYWJsZWQiLGRpc2FibGVkRGF0ZXNUZXh0OiJEaXNh YmxlZCIsbW9udGhOYW1lczpEYXRlLm1vbnRoTmFtZXMsZGF5TmFtZXM6RGF0ZS5kYXlOYW1lcyxu ZXh0VGV4dDoiTmV4dCBNb250aCAoQ29udHJvbCtSaWdodCkiLHByZXZUZXh0OiJQcmV2aW91cyBN b250aCAoQ29udHJvbCtMZWZ0KSIsbW9udGhZZWFyVGV4dDoiQ2hvb3NlIGEgbW9udGggKENvbnRy b2wrVXAvRG93biB0byBtb3ZlIHllYXJzKSIsc3RhcnREYXk6MCxzaG93VG9kYXk6dHJ1ZSxpbml0 Q29tcG9uZW50OmZ1bmN0aW9uKCl7RXh0LkRhdGVQaWNrZXIuc3VwZXJjbGFzcy5pbml0Q29tcG9u ZW50LmNhbGwodGhpcyk7dGhpcy52YWx1ZT10aGlzLnZhbHVlP3RoaXMudmFsdWUuY2xlYXJUaW1l KCk6bmV3IERhdGUoKS5jbGVhclRpbWUoKTt0aGlzLmFkZEV2ZW50cygic2VsZWN0Iik7aWYodGhp cy5oYW5kbGVyKXt0aGlzLm9uKCJzZWxlY3QiLHRoaXMuaGFuZGxlcix0aGlzLnNjb3BlfHx0aGlz KX10aGlzLmluaXREaXNhYmxlZERheXMoKX0saW5pdERpc2FibGVkRGF5czpmdW5jdGlvbigpe2lm KCF0aGlzLmRpc2FibGVkRGF0ZXNSRSYmdGhpcy5kaXNhYmxlZERhdGVzKXt2YXIgYj10aGlzLmRp c2FibGVkRGF0ZXMsYT1iLmxlbmd0aC0xLGM9Iig/OiI7RXh0LmVhY2goYixmdW5jdGlvbihnLGUp e2MrPUV4dC5pc0RhdGUoZyk/Il4iK0V4dC5lc2NhcGVSZShnLmRhdGVGb3JtYXQodGhpcy5mb3Jt YXQpKSsiJCI6YltlXTtpZihlIT1hKXtjKz0ifCJ9fSx0aGlzKTt0aGlzLmRpc2FibGVkRGF0ZXNS RT1uZXcgUmVnRXhwKGMrIikiKX19LHNldERpc2FibGVkRGF0ZXM6ZnVuY3Rpb24oYSl7aWYoRXh0 LmlzQXJyYXkoYSkpe3RoaXMuZGlzYWJsZWREYXRlcz1hO3RoaXMuZGlzYWJsZWREYXRlc1JFPW51 bGx9ZWxzZXt0aGlzLmRpc2FibGVkRGF0ZXNSRT1hfXRoaXMuaW5pdERpc2FibGVkRGF5cygpO3Ro aXMudXBkYXRlKHRoaXMudmFsdWUsdHJ1ZSl9LHNldERpc2FibGVkRGF5czpmdW5jdGlvbihhKXt0 aGlzLmRpc2FibGVkRGF5cz1hO3RoaXMudXBkYXRlKHRoaXMudmFsdWUsdHJ1ZSl9LHNldE1pbkRh dGU6ZnVuY3Rpb24oYSl7dGhpcy5taW5EYXRlPWE7dGhpcy51cGRhdGUodGhpcy52YWx1ZSx0cnVl KX0sc2V0TWF4RGF0ZTpmdW5jdGlvbihhKXt0aGlzLm1heERhdGU9YTt0aGlzLnVwZGF0ZSh0aGlz LnZhbHVlLHRydWUpfSxzZXRWYWx1ZTpmdW5jdGlvbihiKXt2YXIgYT10aGlzLnZhbHVlO3RoaXMu dmFsdWU9Yi5jbGVhclRpbWUodHJ1ZSk7aWYodGhpcy5lbCl7dGhpcy51cGRhdGUodGhpcy52YWx1 ZSl9fSxnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfSxmb2N1czpmdW5jdGlv bigpe2lmKHRoaXMuZWwpe3RoaXMudXBkYXRlKHRoaXMuYWN0aXZlRGF0ZSl9fSxvbkVuYWJsZTpm dW5jdGlvbihhKXtFeHQuRGF0ZVBpY2tlci5zdXBlcmNsYXNzLm9uRW5hYmxlLmNhbGwodGhpcyk7 dGhpcy5kb0Rpc2FibGVkKGZhbHNlKTt0aGlzLnVwZGF0ZShhP3RoaXMudmFsdWU6dGhpcy5hY3Rp dmVEYXRlKTtpZihFeHQuaXNJRSl7dGhpcy5lbC5yZXBhaW50KCl9fSxvbkRpc2FibGU6ZnVuY3Rp b24oKXtFeHQuRGF0ZVBpY2tlci5zdXBlcmNsYXNzLm9uRGlzYWJsZS5jYWxsKHRoaXMpO3RoaXMu ZG9EaXNhYmxlZCh0cnVlKTtpZihFeHQuaXNJRSYmIUV4dC5pc0lFOCl7RXh0LmVhY2goW10uY29u Y2F0KHRoaXMudGV4dE5vZGVzLHRoaXMuZWwucXVlcnkoInRoIHNwYW4iKSksZnVuY3Rpb24oYSl7 RXh0LmZseShhKS5yZXBhaW50KCl9KX19LGRvRGlzYWJsZWQ6ZnVuY3Rpb24oYSl7dGhpcy5rZXlO YXYuc2V0RGlzYWJsZWQoYSk7dGhpcy5wcmV2UmVwZWF0ZXIuc2V0RGlzYWJsZWQoYSk7dGhpcy5u ZXh0UmVwZWF0ZXIuc2V0RGlzYWJsZWQoYSk7aWYodGhpcy5zaG93VG9kYXkpe3RoaXMudG9kYXlL ZXlMaXN0ZW5lci5zZXREaXNhYmxlZChhKTt0aGlzLnRvZGF5QnRuLnNldERpc2FibGVkKGEpfX0s b25SZW5kZXI6ZnVuY3Rpb24oZSxiKXt2YXIgYT1bJzx0YWJsZSBjZWxsc3BhY2luZz0iMCI+Jywn PHRyPjx0ZCBjbGFzcz0ieC1kYXRlLWxlZnQiPjxhIGhyZWY9IiMiIHRpdGxlPSInLHRoaXMucHJl dlRleHQsJyI+JiMxNjA7PC9hPjwvdGQ+PHRkIGNsYXNzPSJ4LWRhdGUtbWlkZGxlIiBhbGlnbj0i Y2VudGVyIj48L3RkPjx0ZCBjbGFzcz0ieC1kYXRlLXJpZ2h0Ij48YSBocmVmPSIjIiB0aXRsZT0i Jyx0aGlzLm5leHRUZXh0LCciPiYjMTYwOzwvYT48L3RkPjwvdHI+JywnPHRyPjx0ZCBjb2xzcGFu PSIzIj48dGFibGUgY2xhc3M9IngtZGF0ZS1pbm5lciIgY2VsbHNwYWNpbmc9IjAiPjx0aGVhZD48 dHI+J10sYz10aGlzLmRheU5hbWVzLGg7Zm9yKGg9MDtoPDc7aCsrKXt2YXIgaz10aGlzLnN0YXJ0 RGF5K2g7aWYoaz42KXtrPWstN31hLnB1c2goIjx0aD48c3Bhbj4iLGNba10uc3Vic3RyKDAsMSks Ijwvc3Bhbj48L3RoPiIpfWFbYS5sZW5ndGhdPSI8L3RyPjwvdGhlYWQ+PHRib2R5Pjx0cj4iO2Zv cihoPTA7aDw0MjtoKyspe2lmKGglNz09PTAmJmghPT0wKXthW2EubGVuZ3RoXT0iPC90cj48dHI+ In1hW2EubGVuZ3RoXT0nPHRkPjxhIGhyZWY9IiMiIGhpZGVmb2N1cz0ib24iIGNsYXNzPSJ4LWRh dGUtZGF0ZSIgdGFiSW5kZXg9IjEiPjxlbT48c3Bhbj48L3NwYW4+PC9lbT48L2E+PC90ZD4nfWEu cHVzaCgiPC90cj48L3Rib2R5PjwvdGFibGU+PC90ZD48L3RyPiIsdGhpcy5zaG93VG9kYXk/Jzx0 cj48dGQgY29sc3Bhbj0iMyIgY2xhc3M9IngtZGF0ZS1ib3R0b20iIGFsaWduPSJjZW50ZXIiPjwv dGQ+PC90cj4nOiIiLCc8L3RhYmxlPjxkaXYgY2xhc3M9IngtZGF0ZS1tcCI+PC9kaXY+Jyk7dmFy IGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ai5jbGFzc05hbWU9IngtZGF0ZS1waWNr ZXIiO2ouaW5uZXJIVE1MPWEuam9pbigiIik7ZS5kb20uaW5zZXJ0QmVmb3JlKGosYik7dGhpcy5l bD1FeHQuZ2V0KGopO3RoaXMuZXZlbnRFbD1FeHQuZ2V0KGouZmlyc3RDaGlsZCk7dGhpcy5wcmV2 UmVwZWF0ZXI9bmV3IEV4dC51dGlsLkNsaWNrUmVwZWF0ZXIodGhpcy5lbC5jaGlsZCgidGQueC1k YXRlLWxlZnQgYSIpLHtoYW5kbGVyOnRoaXMuc2hvd1ByZXZNb250aCxzY29wZTp0aGlzLHByZXZl bnREZWZhdWx0OnRydWUsc3RvcERlZmF1bHQ6dHJ1ZX0pO3RoaXMubmV4dFJlcGVhdGVyPW5ldyBF eHQudXRpbC5DbGlja1JlcGVhdGVyKHRoaXMuZWwuY2hpbGQoInRkLngtZGF0ZS1yaWdodCBhIiks e2hhbmRsZXI6dGhpcy5zaG93TmV4dE1vbnRoLHNjb3BlOnRoaXMscHJldmVudERlZmF1bHQ6dHJ1 ZSxzdG9wRGVmYXVsdDp0cnVlfSk7dGhpcy5tb250aFBpY2tlcj10aGlzLmVsLmRvd24oImRpdi54 LWRhdGUtbXAiKTt0aGlzLm1vbnRoUGlja2VyLmVuYWJsZURpc3BsYXlNb2RlKCJibG9jayIpO3Ro aXMua2V5TmF2PW5ldyBFeHQuS2V5TmF2KHRoaXMuZXZlbnRFbCx7bGVmdDpmdW5jdGlvbihkKXtp ZihkLmN0cmxLZXkpe3RoaXMuc2hvd1ByZXZNb250aCgpfWVsc2V7dGhpcy51cGRhdGUodGhpcy5h Y3RpdmVEYXRlLmFkZCgiZCIsLTEpKX19LHJpZ2h0OmZ1bmN0aW9uKGQpe2lmKGQuY3RybEtleSl7 dGhpcy5zaG93TmV4dE1vbnRoKCl9ZWxzZXt0aGlzLnVwZGF0ZSh0aGlzLmFjdGl2ZURhdGUuYWRk KCJkIiwxKSl9fSx1cDpmdW5jdGlvbihkKXtpZihkLmN0cmxLZXkpe3RoaXMuc2hvd05leHRZZWFy KCl9ZWxzZXt0aGlzLnVwZGF0ZSh0aGlzLmFjdGl2ZURhdGUuYWRkKCJkIiwtNykpfX0sZG93bjpm dW5jdGlvbihkKXtpZihkLmN0cmxLZXkpe3RoaXMuc2hvd1ByZXZZZWFyKCl9ZWxzZXt0aGlzLnVw ZGF0ZSh0aGlzLmFjdGl2ZURhdGUuYWRkKCJkIiw3KSl9fSxwYWdlVXA6ZnVuY3Rpb24oZCl7dGhp cy5zaG93TmV4dE1vbnRoKCl9LHBhZ2VEb3duOmZ1bmN0aW9uKGQpe3RoaXMuc2hvd1ByZXZNb250 aCgpfSxlbnRlcjpmdW5jdGlvbihkKXtkLnN0b3BQcm9wYWdhdGlvbigpO3JldHVybiB0cnVlfSxz Y29wZTp0aGlzfSk7dGhpcy5lbC51bnNlbGVjdGFibGUoKTt0aGlzLmNlbGxzPXRoaXMuZWwuc2Vs ZWN0KCJ0YWJsZS54LWRhdGUtaW5uZXIgdGJvZHkgdGQiKTt0aGlzLnRleHROb2Rlcz10aGlzLmVs LnF1ZXJ5KCJ0YWJsZS54LWRhdGUtaW5uZXIgdGJvZHkgc3BhbiIpO3RoaXMubWJ0bj1uZXcgRXh0 LkJ1dHRvbih7dGV4dDoiJiMxNjA7Iix0b29sdGlwOnRoaXMubW9udGhZZWFyVGV4dCxyZW5kZXJU bzp0aGlzLmVsLmNoaWxkKCJ0ZC54LWRhdGUtbWlkZGxlIix0cnVlKX0pO3RoaXMubWJ0bi5lbC5j aGlsZCgiZW0iKS5hZGRDbGFzcygieC1idG4tYXJyb3ciKTtpZih0aGlzLnNob3dUb2RheSl7dGhp cy50b2RheUtleUxpc3RlbmVyPXRoaXMuZXZlbnRFbC5hZGRLZXlMaXN0ZW5lcihFeHQuRXZlbnRP YmplY3QuU1BBQ0UsdGhpcy5zZWxlY3RUb2RheSx0aGlzKTt2YXIgZz0obmV3IERhdGUoKSkuZGF0 ZUZvcm1hdCh0aGlzLmZvcm1hdCk7dGhpcy50b2RheUJ0bj1uZXcgRXh0LkJ1dHRvbih7cmVuZGVy VG86dGhpcy5lbC5jaGlsZCgidGQueC1kYXRlLWJvdHRvbSIsdHJ1ZSksdGV4dDpTdHJpbmcuZm9y bWF0KHRoaXMudG9kYXlUZXh0LGcpLHRvb2x0aXA6U3RyaW5nLmZvcm1hdCh0aGlzLnRvZGF5VGlw LGcpLGhhbmRsZXI6dGhpcy5zZWxlY3RUb2RheSxzY29wZTp0aGlzfSl9dGhpcy5tb24odGhpcy5l dmVudEVsLCJtb3VzZXdoZWVsIix0aGlzLmhhbmRsZU1vdXNlV2hlZWwsdGhpcyk7dGhpcy5tb24o dGhpcy5ldmVudEVsLCJjbGljayIsdGhpcy5oYW5kbGVEYXRlQ2xpY2ssdGhpcyx7ZGVsZWdhdGU6 ImEueC1kYXRlLWRhdGUifSk7dGhpcy5tb24odGhpcy5tYnRuLCJjbGljayIsdGhpcy5zaG93TW9u dGhQaWNrZXIsdGhpcyk7dGhpcy5vbkVuYWJsZSh0cnVlKX0sY3JlYXRlTW9udGhQaWNrZXI6ZnVu Y3Rpb24oKXtpZighdGhpcy5tb250aFBpY2tlci5kb20uZmlyc3RDaGlsZCl7dmFyIGE9Wyc8dGFi bGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCI+J107Zm9yKHZhciBiPTA7Yjw2O2IrKyl7YS5w dXNoKCc8dHI+PHRkIGNsYXNzPSJ4LWRhdGUtbXAtbW9udGgiPjxhIGhyZWY9IiMiPicsRGF0ZS5n ZXRTaG9ydE1vbnRoTmFtZShiKSwiPC9hPjwvdGQ+IiwnPHRkIGNsYXNzPSJ4LWRhdGUtbXAtbW9u dGggeC1kYXRlLW1wLXNlcCI+PGEgaHJlZj0iIyI+JyxEYXRlLmdldFNob3J0TW9udGhOYW1lKGIr NiksIjwvYT48L3RkPiIsYj09PTA/Jzx0ZCBjbGFzcz0ieC1kYXRlLW1wLXlidG4iIGFsaWduPSJj ZW50ZXIiPjxhIGNsYXNzPSJ4LWRhdGUtbXAtcHJldiI+PC9hPjwvdGQ+PHRkIGNsYXNzPSJ4LWRh dGUtbXAteWJ0biIgYWxpZ249ImNlbnRlciI+PGEgY2xhc3M9IngtZGF0ZS1tcC1uZXh0Ij48L2E+ PC90ZD48L3RyPic6Jzx0ZCBjbGFzcz0ieC1kYXRlLW1wLXllYXIiPjxhIGhyZWY9IiMiPjwvYT48 L3RkPjx0ZCBjbGFzcz0ieC1kYXRlLW1wLXllYXIiPjxhIGhyZWY9IiMiPjwvYT48L3RkPjwvdHI+ Jyl9YS5wdXNoKCc8dHIgY2xhc3M9IngtZGF0ZS1tcC1idG5zIj48dGQgY29sc3Bhbj0iNCI+PGJ1 dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJ4LWRhdGUtbXAtb2siPicsdGhpcy5va1RleHQsJzwv YnV0dG9uPjxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ieC1kYXRlLW1wLWNhbmNlbCI+Jyx0 aGlzLmNhbmNlbFRleHQsIjwvYnV0dG9uPjwvdGQ+PC90cj4iLCI8L3RhYmxlPiIpO3RoaXMubW9u dGhQaWNrZXIudXBkYXRlKGEuam9pbigiIikpO3RoaXMubW9uKHRoaXMubW9udGhQaWNrZXIsImNs aWNrIix0aGlzLm9uTW9udGhDbGljayx0aGlzKTt0aGlzLm1vbih0aGlzLm1vbnRoUGlja2VyLCJk YmxjbGljayIsdGhpcy5vbk1vbnRoRGJsQ2xpY2ssdGhpcyk7dGhpcy5tcE1vbnRocz10aGlzLm1v bnRoUGlja2VyLnNlbGVjdCgidGQueC1kYXRlLW1wLW1vbnRoIik7dGhpcy5tcFllYXJzPXRoaXMu bW9udGhQaWNrZXIuc2VsZWN0KCJ0ZC54LWRhdGUtbXAteWVhciIpO3RoaXMubXBNb250aHMuZWFj aChmdW5jdGlvbihjLGQsZSl7ZSs9MTtpZigoZSUyKT09PTApe2MuZG9tLnhtb250aD01K01hdGgu cm91bmQoZSowLjUpfWVsc2V7Yy5kb20ueG1vbnRoPU1hdGgucm91bmQoKGUtMSkqMC41KX19KX19 LHNob3dNb250aFBpY2tlcjpmdW5jdGlvbigpe2lmKCF0aGlzLmRpc2FibGVkKXt0aGlzLmNyZWF0 ZU1vbnRoUGlja2VyKCk7dmFyIGE9dGhpcy5lbC5nZXRTaXplKCk7dGhpcy5tb250aFBpY2tlci5z ZXRTaXplKGEpO3RoaXMubW9udGhQaWNrZXIuY2hpbGQoInRhYmxlIikuc2V0U2l6ZShhKTt0aGlz Lm1wU2VsTW9udGg9KHRoaXMuYWN0aXZlRGF0ZXx8dGhpcy52YWx1ZSkuZ2V0TW9udGgoKTt0aGlz LnVwZGF0ZU1QTW9udGgodGhpcy5tcFNlbE1vbnRoKTt0aGlzLm1wU2VsWWVhcj0odGhpcy5hY3Rp dmVEYXRlfHx0aGlzLnZhbHVlKS5nZXRGdWxsWWVhcigpO3RoaXMudXBkYXRlTVBZZWFyKHRoaXMu bXBTZWxZZWFyKTt0aGlzLm1vbnRoUGlja2VyLnNsaWRlSW4oInQiLHtkdXJhdGlvbjowLjJ9KX19 LHVwZGF0ZU1QWWVhcjpmdW5jdGlvbihlKXt0aGlzLm1weWVhcj1lO3ZhciBjPXRoaXMubXBZZWFy cy5lbGVtZW50cztmb3IodmFyIGI9MTtiPD0xMDtiKyspe3ZhciBkPWNbYi0xXSxhO2lmKChiJTIp PT09MCl7YT1lK01hdGgucm91bmQoYiowLjUpO2QuZmlyc3RDaGlsZC5pbm5lckhUTUw9YTtkLnh5 ZWFyPWF9ZWxzZXthPWUtKDUtTWF0aC5yb3VuZChiKjAuNSkpO2QuZmlyc3RDaGlsZC5pbm5lckhU TUw9YTtkLnh5ZWFyPWF9dGhpcy5tcFllYXJzLml0ZW0oYi0xKVthPT10aGlzLm1wU2VsWWVhcj8i YWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKCJ4LWRhdGUtbXAtc2VsIil9fSx1cGRhdGVNUE1vbnRo OmZ1bmN0aW9uKGEpe3RoaXMubXBNb250aHMuZWFjaChmdW5jdGlvbihiLGMsZCl7YltiLmRvbS54 bW9udGg9PWE/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXSgieC1kYXRlLW1wLXNlbCIpfSl9LHNl bGVjdE1QTW9udGg6ZnVuY3Rpb24oYSl7fSxvbk1vbnRoQ2xpY2s6ZnVuY3Rpb24oZyxiKXtnLnN0 b3BFdmVudCgpO3ZhciBjPW5ldyBFeHQuRWxlbWVudChiKSxhO2lmKGMuaXMoImJ1dHRvbi54LWRh dGUtbXAtY2FuY2VsIikpe3RoaXMuaGlkZU1vbnRoUGlja2VyKCl9ZWxzZXtpZihjLmlzKCJidXR0 b24ueC1kYXRlLW1wLW9rIikpe3ZhciBoPW5ldyBEYXRlKHRoaXMubXBTZWxZZWFyLHRoaXMubXBT ZWxNb250aCwodGhpcy5hY3RpdmVEYXRlfHx0aGlzLnZhbHVlKS5nZXREYXRlKCkpO2lmKGguZ2V0 TW9udGgoKSE9dGhpcy5tcFNlbE1vbnRoKXtoPW5ldyBEYXRlKHRoaXMubXBTZWxZZWFyLHRoaXMu bXBTZWxNb250aCwxKS5nZXRMYXN0RGF0ZU9mTW9udGgoKX10aGlzLnVwZGF0ZShoKTt0aGlzLmhp ZGVNb250aFBpY2tlcigpfWVsc2V7aWYoKGE9Yy51cCgidGQueC1kYXRlLW1wLW1vbnRoIiwyKSkp e3RoaXMubXBNb250aHMucmVtb3ZlQ2xhc3MoIngtZGF0ZS1tcC1zZWwiKTthLmFkZENsYXNzKCJ4 LWRhdGUtbXAtc2VsIik7dGhpcy5tcFNlbE1vbnRoPWEuZG9tLnhtb250aH1lbHNle2lmKChhPWMu dXAoInRkLngtZGF0ZS1tcC15ZWFyIiwyKSkpe3RoaXMubXBZZWFycy5yZW1vdmVDbGFzcygieC1k YXRlLW1wLXNlbCIpO2EuYWRkQ2xhc3MoIngtZGF0ZS1tcC1zZWwiKTt0aGlzLm1wU2VsWWVhcj1h LmRvbS54eWVhcn1lbHNle2lmKGMuaXMoImEueC1kYXRlLW1wLXByZXYiKSl7dGhpcy51cGRhdGVN UFllYXIodGhpcy5tcHllYXItMTApfWVsc2V7aWYoYy5pcygiYS54LWRhdGUtbXAtbmV4dCIpKXt0 aGlzLnVwZGF0ZU1QWWVhcih0aGlzLm1weWVhcisxMCl9fX19fX19LG9uTW9udGhEYmxDbGljazpm dW5jdGlvbihkLGIpe2Quc3RvcEV2ZW50KCk7dmFyIGM9bmV3IEV4dC5FbGVtZW50KGIpLGE7aWYo KGE9Yy51cCgidGQueC1kYXRlLW1wLW1vbnRoIiwyKSkpe3RoaXMudXBkYXRlKG5ldyBEYXRlKHRo aXMubXBTZWxZZWFyLGEuZG9tLnhtb250aCwodGhpcy5hY3RpdmVEYXRlfHx0aGlzLnZhbHVlKS5n ZXREYXRlKCkpKTt0aGlzLmhpZGVNb250aFBpY2tlcigpfWVsc2V7aWYoKGE9Yy51cCgidGQueC1k YXRlLW1wLXllYXIiLDIpKSl7dGhpcy51cGRhdGUobmV3IERhdGUoYS5kb20ueHllYXIsdGhpcy5t cFNlbE1vbnRoLCh0aGlzLmFjdGl2ZURhdGV8fHRoaXMudmFsdWUpLmdldERhdGUoKSkpO3RoaXMu aGlkZU1vbnRoUGlja2VyKCl9fX0saGlkZU1vbnRoUGlja2VyOmZ1bmN0aW9uKGEpe2lmKHRoaXMu bW9udGhQaWNrZXIpe2lmKGE9PT10cnVlKXt0aGlzLm1vbnRoUGlja2VyLmhpZGUoKX1lbHNle3Ro aXMubW9udGhQaWNrZXIuc2xpZGVPdXQoInQiLHtkdXJhdGlvbjowLjJ9KX19fSxzaG93UHJldk1v bnRoOmZ1bmN0aW9uKGEpe3RoaXMudXBkYXRlKHRoaXMuYWN0aXZlRGF0ZS5hZGQoIm1vIiwtMSkp fSxzaG93TmV4dE1vbnRoOmZ1bmN0aW9uKGEpe3RoaXMudXBkYXRlKHRoaXMuYWN0aXZlRGF0ZS5h ZGQoIm1vIiwxKSl9LHNob3dQcmV2WWVhcjpmdW5jdGlvbigpe3RoaXMudXBkYXRlKHRoaXMuYWN0 aXZlRGF0ZS5hZGQoInkiLC0xKSl9LHNob3dOZXh0WWVhcjpmdW5jdGlvbigpe3RoaXMudXBkYXRl KHRoaXMuYWN0aXZlRGF0ZS5hZGQoInkiLDEpKX0saGFuZGxlTW91c2VXaGVlbDpmdW5jdGlvbihh KXthLnN0b3BFdmVudCgpO2lmKCF0aGlzLmRpc2FibGVkKXt2YXIgYj1hLmdldFdoZWVsRGVsdGEo KTtpZihiPjApe3RoaXMuc2hvd1ByZXZNb250aCgpfWVsc2V7aWYoYjwwKXt0aGlzLnNob3dOZXh0 TW9udGgoKX19fX0saGFuZGxlRGF0ZUNsaWNrOmZ1bmN0aW9uKGIsYSl7Yi5zdG9wRXZlbnQoKTtp ZighdGhpcy5kaXNhYmxlZCYmYS5kYXRlVmFsdWUmJiFFeHQuZmx5KGEucGFyZW50Tm9kZSkuaGFz Q2xhc3MoIngtZGF0ZS1kaXNhYmxlZCIpKXt0aGlzLnNldFZhbHVlKG5ldyBEYXRlKGEuZGF0ZVZh bHVlKSk7dGhpcy5maXJlRXZlbnQoInNlbGVjdCIsdGhpcyx0aGlzLnZhbHVlKX19LHNlbGVjdFRv ZGF5OmZ1bmN0aW9uKCl7aWYodGhpcy50b2RheUJ0biYmIXRoaXMudG9kYXlCdG4uZGlzYWJsZWQp e3RoaXMuc2V0VmFsdWUobmV3IERhdGUoKS5jbGVhclRpbWUoKSk7dGhpcy5maXJlRXZlbnQoInNl bGVjdCIsdGhpcyx0aGlzLnZhbHVlKX19LHVwZGF0ZTpmdW5jdGlvbihILEIpe3ZhciBhPXRoaXMu YWN0aXZlRGF0ZSxwPXRoaXMuaXNWaXNpYmxlKCk7dGhpcy5hY3RpdmVEYXRlPUg7aWYoIUImJmEm JnRoaXMuZWwpe3ZhciBvPUguZ2V0VGltZSgpO2lmKGEuZ2V0TW9udGgoKT09SC5nZXRNb250aCgp JiZhLmdldEZ1bGxZZWFyKCk9PUguZ2V0RnVsbFllYXIoKSl7dGhpcy5jZWxscy5yZW1vdmVDbGFz cygieC1kYXRlLXNlbGVjdGVkIik7dGhpcy5jZWxscy5lYWNoKGZ1bmN0aW9uKGQpe2lmKGQuZG9t LmZpcnN0Q2hpbGQuZGF0ZVZhbHVlPT1vKXtkLmFkZENsYXNzKCJ4LWRhdGUtc2VsZWN0ZWQiKTtp ZihwKXtFeHQuZmx5KGQuZG9tLmZpcnN0Q2hpbGQpLmZvY3VzKDUwKX1yZXR1cm4gZmFsc2V9fSk7 cmV0dXJufX12YXIgaz1ILmdldERheXNJbk1vbnRoKCk7dmFyIHE9SC5nZXRGaXJzdERhdGVPZk1v bnRoKCk7dmFyIGc9cS5nZXREYXkoKS10aGlzLnN0YXJ0RGF5O2lmKGc8PXRoaXMuc3RhcnREYXkp e2crPTd9dmFyIEM9SC5hZGQoIm1vIiwtMSk7dmFyIGg9Qy5nZXREYXlzSW5Nb250aCgpLWc7dmFy IGU9dGhpcy5jZWxscy5lbGVtZW50czt2YXIgcj10aGlzLnRleHROb2RlcztrKz1nO3ZhciB6PTg2 NDAwMDAwO3ZhciBFPShuZXcgRGF0ZShDLmdldEZ1bGxZZWFyKCksQy5nZXRNb250aCgpLGgpKS5j bGVhclRpbWUoKTt2YXIgRD1uZXcgRGF0ZSgpLmNsZWFyVGltZSgpLmdldFRpbWUoKTt2YXIgdj1I LmNsZWFyVGltZSgpLmdldFRpbWUoKTt2YXIgdT10aGlzLm1pbkRhdGU/dGhpcy5taW5EYXRlLmNs ZWFyVGltZSgpOk51bWJlci5ORUdBVElWRV9JTkZJTklUWTt2YXIgeT10aGlzLm1heERhdGU/dGhp cy5tYXhEYXRlLmNsZWFyVGltZSgpOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTt2YXIgRz10aGlz LmRpc2FibGVkRGF0ZXNSRTt2YXIgcz10aGlzLmRpc2FibGVkRGF0ZXNUZXh0O3ZhciBKPXRoaXMu ZGlzYWJsZWREYXlzP3RoaXMuZGlzYWJsZWREYXlzLmpvaW4oIiIpOmZhbHNlO3ZhciBGPXRoaXMu ZGlzYWJsZWREYXlzVGV4dDt2YXIgQT10aGlzLmZvcm1hdDtpZih0aGlzLnNob3dUb2RheSl7dmFy IG09bmV3IERhdGUoKS5jbGVhclRpbWUoKTt2YXIgYz0obTx1fHxtPnl8fChHJiZBJiZHLnRlc3Qo bS5kYXRlRm9ybWF0KEEpKSl8fChKJiZKLmluZGV4T2YobS5nZXREYXkoKSkhPS0xKSk7aWYoIXRo aXMuZGlzYWJsZWQpe3RoaXMudG9kYXlCdG4uc2V0RGlzYWJsZWQoYyk7dGhpcy50b2RheUtleUxp c3RlbmVyW2M/ImRpc2FibGUiOiJlbmFibGUiXSgpfX12YXIgbD1mdW5jdGlvbihLLGQpe2QudGl0 bGU9IiI7dmFyIGk9RS5nZXRUaW1lKCk7ZC5maXJzdENoaWxkLmRhdGVWYWx1ZT1pO2lmKGk9PUQp e2QuY2xhc3NOYW1lKz0iIHgtZGF0ZS10b2RheSI7ZC50aXRsZT1LLnRvZGF5VGV4dH1pZihpPT12 KXtkLmNsYXNzTmFtZSs9IiB4LWRhdGUtc2VsZWN0ZWQiO2lmKHApe0V4dC5mbHkoZC5maXJzdENo aWxkKS5mb2N1cyg1MCl9fWlmKGk8dSl7ZC5jbGFzc05hbWU9IiB4LWRhdGUtZGlzYWJsZWQiO2Qu dGl0bGU9Sy5taW5UZXh0O3JldHVybn1pZihpPnkpe2QuY2xhc3NOYW1lPSIgeC1kYXRlLWRpc2Fi bGVkIjtkLnRpdGxlPUsubWF4VGV4dDtyZXR1cm59aWYoSil7aWYoSi5pbmRleE9mKEUuZ2V0RGF5 KCkpIT0tMSl7ZC50aXRsZT1GO2QuY2xhc3NOYW1lPSIgeC1kYXRlLWRpc2FibGVkIn19aWYoRyYm QSl7dmFyIHc9RS5kYXRlRm9ybWF0KEEpO2lmKEcudGVzdCh3KSl7ZC50aXRsZT1zLnJlcGxhY2Uo IiUwIix3KTtkLmNsYXNzTmFtZT0iIHgtZGF0ZS1kaXNhYmxlZCJ9fX07dmFyIHg9MDtmb3IoO3g8 Zzt4Kyspe3JbeF0uaW5uZXJIVE1MPSgrK2gpO0Uuc2V0RGF0ZShFLmdldERhdGUoKSsxKTtlW3hd LmNsYXNzTmFtZT0ieC1kYXRlLXByZXZkYXkiO2wodGhpcyxlW3hdKX1mb3IoO3g8azt4Kyspe3Zh ciBiPXgtZysxO3JbeF0uaW5uZXJIVE1MPShiKTtFLnNldERhdGUoRS5nZXREYXRlKCkrMSk7ZVt4 XS5jbGFzc05hbWU9IngtZGF0ZS1hY3RpdmUiO2wodGhpcyxlW3hdKX12YXIgST0wO2Zvcig7eDw0 Mjt4Kyspe3JbeF0uaW5uZXJIVE1MPSgrK0kpO0Uuc2V0RGF0ZShFLmdldERhdGUoKSsxKTtlW3hd LmNsYXNzTmFtZT0ieC1kYXRlLW5leHRkYXkiO2wodGhpcyxlW3hdKX10aGlzLm1idG4uc2V0VGV4 dCh0aGlzLm1vbnRoTmFtZXNbSC5nZXRNb250aCgpXSsiICIrSC5nZXRGdWxsWWVhcigpKTtpZigh dGhpcy5pbnRlcm5hbFJlbmRlcil7dmFyIGo9dGhpcy5lbC5kb20uZmlyc3RDaGlsZDt2YXIgbj1q Lm9mZnNldFdpZHRoO3RoaXMuZWwuc2V0V2lkdGgobit0aGlzLmVsLmdldEJvcmRlcldpZHRoKCJs ciIpKTtFeHQuZmx5KGopLnNldFdpZHRoKG4pO3RoaXMuaW50ZXJuYWxSZW5kZXI9dHJ1ZTtpZihF eHQuaXNPcGVyYSYmIXRoaXMuc2Vjb25kUGFzcyl7ai5yb3dzWzBdLmNlbGxzWzFdLnN0eWxlLndp ZHRoPShuLShqLnJvd3NbMF0uY2VsbHNbMF0ub2Zmc2V0V2lkdGgrai5yb3dzWzBdLmNlbGxzWzJd Lm9mZnNldFdpZHRoKSkrInB4Ijt0aGlzLnNlY29uZFBhc3M9dHJ1ZTt0aGlzLnVwZGF0ZS5kZWZl cigxMCx0aGlzLFtIXSl9fX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2lmKHRoaXMucmVuZGVy ZWQpe3RoaXMua2V5TmF2LmRpc2FibGUoKTt0aGlzLmtleU5hdj1udWxsO0V4dC5kZXN0cm95KHRo aXMubGVmdENsaWNrUnB0LHRoaXMucmlnaHRDbGlja1JwdCx0aGlzLm1vbnRoUGlja2VyLHRoaXMu ZXZlbnRFbCx0aGlzLm1idG4sdGhpcy50b2RheUJ0bil9fX0pO0V4dC5yZWcoImRhdGVwaWNrZXIi LEV4dC5EYXRlUGlja2VyKTtFeHQuTG9hZE1hc2s9ZnVuY3Rpb24oYyxiKXt0aGlzLmVsPUV4dC5n ZXQoYyk7RXh0LmFwcGx5KHRoaXMsYik7aWYodGhpcy5zdG9yZSl7dGhpcy5zdG9yZS5vbigiYmVm b3JlbG9hZCIsdGhpcy5vbkJlZm9yZUxvYWQsdGhpcyk7dGhpcy5zdG9yZS5vbigibG9hZCIsdGhp cy5vbkxvYWQsdGhpcyk7dGhpcy5zdG9yZS5vbigiZXhjZXB0aW9uIix0aGlzLm9uTG9hZCx0aGlz KTt0aGlzLnJlbW92ZU1hc2s9RXh0LnZhbHVlKHRoaXMucmVtb3ZlTWFzayxmYWxzZSl9ZWxzZXt2 YXIgYT10aGlzLmVsLmdldFVwZGF0ZXIoKTthLnNob3dMb2FkSW5kaWNhdG9yPWZhbHNlO2Eub24o ImJlZm9yZXVwZGF0ZSIsdGhpcy5vbkJlZm9yZUxvYWQsdGhpcyk7YS5vbigidXBkYXRlIix0aGlz Lm9uTG9hZCx0aGlzKTthLm9uKCJmYWlsdXJlIix0aGlzLm9uTG9hZCx0aGlzKTt0aGlzLnJlbW92 ZU1hc2s9RXh0LnZhbHVlKHRoaXMucmVtb3ZlTWFzayx0cnVlKX19O0V4dC5Mb2FkTWFzay5wcm90 b3R5cGU9e21zZzoiTG9hZGluZy4uLiIsbXNnQ2xzOiJ4LW1hc2stbG9hZGluZyIsZGlzYWJsZWQ6 ZmFsc2UsZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9dHJ1ZX0sZW5hYmxlOmZ1bmN0 aW9uKCl7dGhpcy5kaXNhYmxlZD1mYWxzZX0sb25Mb2FkOmZ1bmN0aW9uKCl7dGhpcy5lbC51bm1h c2sodGhpcy5yZW1vdmVNYXNrKX0sb25CZWZvcmVMb2FkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZGlz YWJsZWQpe3RoaXMuZWwubWFzayh0aGlzLm1zZyx0aGlzLm1zZ0Nscyl9fSxzaG93OmZ1bmN0aW9u KCl7dGhpcy5vbkJlZm9yZUxvYWQoKX0saGlkZTpmdW5jdGlvbigpe3RoaXMub25Mb2FkKCl9LGRl c3Ryb3k6ZnVuY3Rpb24oKXtpZih0aGlzLnN0b3JlKXt0aGlzLnN0b3JlLnVuKCJiZWZvcmVsb2Fk Iix0aGlzLm9uQmVmb3JlTG9hZCx0aGlzKTt0aGlzLnN0b3JlLnVuKCJsb2FkIix0aGlzLm9uTG9h ZCx0aGlzKTt0aGlzLnN0b3JlLnVuKCJleGNlcHRpb24iLHRoaXMub25Mb2FkLHRoaXMpfWVsc2V7 dmFyIGE9dGhpcy5lbC5nZXRVcGRhdGVyKCk7YS51bigiYmVmb3JldXBkYXRlIix0aGlzLm9uQmVm b3JlTG9hZCx0aGlzKTthLnVuKCJ1cGRhdGUiLHRoaXMub25Mb2FkLHRoaXMpO2EudW4oImZhaWx1 cmUiLHRoaXMub25Mb2FkLHRoaXMpfX19O0V4dC5TbGlkZXI9RXh0LmV4dGVuZChFeHQuQm94Q29t cG9uZW50LHt2ZXJ0aWNhbDpmYWxzZSxtaW5WYWx1ZTowLG1heFZhbHVlOjEwMCxkZWNpbWFsUHJl Y2lzaW9uOjAsa2V5SW5jcmVtZW50OjEsaW5jcmVtZW50OjAsY2xpY2tSYW5nZTpbNSwxNV0sY2xp Y2tUb0NoYW5nZTp0cnVlLGFuaW1hdGU6dHJ1ZSxkcmFnZ2luZzpmYWxzZSxpbml0Q29tcG9uZW50 OmZ1bmN0aW9uKCl7aWYoIUV4dC5pc0RlZmluZWQodGhpcy52YWx1ZSkpe3RoaXMudmFsdWU9dGhp cy5taW5WYWx1ZX1FeHQuU2xpZGVyLnN1cGVyY2xhc3MuaW5pdENvbXBvbmVudC5jYWxsKHRoaXMp O3RoaXMua2V5SW5jcmVtZW50PU1hdGgubWF4KHRoaXMuaW5jcmVtZW50LHRoaXMua2V5SW5jcmVt ZW50KTt0aGlzLmFkZEV2ZW50cygiYmVmb3JlY2hhbmdlIiwiY2hhbmdlIiwiY2hhbmdlY29tcGxl dGUiLCJkcmFnc3RhcnQiLCJkcmFnIiwiZHJhZ2VuZCIpO2lmKHRoaXMudmVydGljYWwpe0V4dC5h cHBseSh0aGlzLEV4dC5TbGlkZXIuVmVydGljYWwpfX0sb25SZW5kZXI6ZnVuY3Rpb24oKXt0aGlz LmF1dG9FbD17Y2xzOiJ4LXNsaWRlciAiKyh0aGlzLnZlcnRpY2FsPyJ4LXNsaWRlci12ZXJ0Ijoi eC1zbGlkZXItaG9yeiIpLGNuOntjbHM6Ingtc2xpZGVyLWVuZCIsY246e2NsczoieC1zbGlkZXIt aW5uZXIiLGNuOlt7Y2xzOiJ4LXNsaWRlci10aHVtYiJ9LHt0YWc6ImEiLGNsczoieC1zbGlkZXIt Zm9jdXMiLGhyZWY6IiMiLHRhYkluZGV4OiItMSIsaGlkZWZvY3VzOiJvbiJ9XX19fTtFeHQuU2xp ZGVyLnN1cGVyY2xhc3Mub25SZW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuZW5kRWw9 dGhpcy5lbC5maXJzdCgpO3RoaXMuaW5uZXJFbD10aGlzLmVuZEVsLmZpcnN0KCk7dGhpcy50aHVt Yj10aGlzLmlubmVyRWwuZmlyc3QoKTt0aGlzLmhhbGZUaHVtYj0odGhpcy52ZXJ0aWNhbD90aGlz LnRodW1iLmdldEhlaWdodCgpOnRoaXMudGh1bWIuZ2V0V2lkdGgoKSkvMjt0aGlzLmZvY3VzRWw9 dGhpcy50aHVtYi5uZXh0KCk7dGhpcy5pbml0RXZlbnRzKCl9LGluaXRFdmVudHM6ZnVuY3Rpb24o KXt0aGlzLnRodW1iLmFkZENsYXNzT25PdmVyKCJ4LXNsaWRlci10aHVtYi1vdmVyIik7dGhpcy5t b24odGhpcy5lbCx7c2NvcGU6dGhpcyxtb3VzZWRvd246dGhpcy5vbk1vdXNlRG93bixrZXlkb3du OnRoaXMub25LZXlEb3dufSk7dGhpcy5mb2N1c0VsLnN3YWxsb3dFdmVudCgiY2xpY2siLHRydWUp O3RoaXMudHJhY2tlcj1uZXcgRXh0LmRkLkRyYWdUcmFja2VyKHtvbkJlZm9yZVN0YXJ0OnRoaXMu b25CZWZvcmVEcmFnU3RhcnQuY3JlYXRlRGVsZWdhdGUodGhpcyksb25TdGFydDp0aGlzLm9uRHJh Z1N0YXJ0LmNyZWF0ZURlbGVnYXRlKHRoaXMpLG9uRHJhZzp0aGlzLm9uRHJhZy5jcmVhdGVEZWxl Z2F0ZSh0aGlzKSxvbkVuZDp0aGlzLm9uRHJhZ0VuZC5jcmVhdGVEZWxlZ2F0ZSh0aGlzKSx0b2xl cmFuY2U6MyxhdXRvU3RhcnQ6MzAwfSk7dGhpcy50cmFja2VyLmluaXRFbCh0aGlzLnRodW1iKTt0 aGlzLm9uKCJiZWZvcmVkZXN0cm95Iix0aGlzLnRyYWNrZXIuZGVzdHJveSx0aGlzLnRyYWNrZXIp fSxvbk1vdXNlRG93bjpmdW5jdGlvbihiKXtpZih0aGlzLmRpc2FibGVkKXtyZXR1cm59aWYodGhp cy5jbGlja1RvQ2hhbmdlJiZiLnRhcmdldCE9dGhpcy50aHVtYi5kb20pe3ZhciBhPXRoaXMuaW5u ZXJFbC50cmFuc2xhdGVQb2ludHMoYi5nZXRYWSgpKTt0aGlzLm9uQ2xpY2tDaGFuZ2UoYSl9dGhp cy5mb2N1cygpfSxvbkNsaWNrQ2hhbmdlOmZ1bmN0aW9uKGEpe2lmKGEudG9wPnRoaXMuY2xpY2tS YW5nZVswXSYmYS50b3A8dGhpcy5jbGlja1JhbmdlWzFdKXt0aGlzLnNldFZhbHVlKEV4dC51dGls LkZvcm1hdC5yb3VuZCh0aGlzLnJldmVyc2VWYWx1ZShhLmxlZnQpLHRoaXMuZGVjaW1hbFByZWNp c2lvbiksdW5kZWZpbmVkLHRydWUpfX0sb25LZXlEb3duOmZ1bmN0aW9uKGIpe2lmKHRoaXMuZGlz YWJsZWQpe2IucHJldmVudERlZmF1bHQoKTtyZXR1cm59dmFyIGE9Yi5nZXRLZXkoKTtzd2l0Y2go YSl7Y2FzZSBiLlVQOmNhc2UgYi5SSUdIVDpiLnN0b3BFdmVudCgpO2lmKGIuY3RybEtleSl7dGhp cy5zZXRWYWx1ZSh0aGlzLm1heFZhbHVlLHVuZGVmaW5lZCx0cnVlKX1lbHNle3RoaXMuc2V0VmFs dWUodGhpcy52YWx1ZSt0aGlzLmtleUluY3JlbWVudCx1bmRlZmluZWQsdHJ1ZSl9YnJlYWs7Y2Fz ZSBiLkRPV046Y2FzZSBiLkxFRlQ6Yi5zdG9wRXZlbnQoKTtpZihiLmN0cmxLZXkpe3RoaXMuc2V0 VmFsdWUodGhpcy5taW5WYWx1ZSx1bmRlZmluZWQsdHJ1ZSl9ZWxzZXt0aGlzLnNldFZhbHVlKHRo aXMudmFsdWUtdGhpcy5rZXlJbmNyZW1lbnQsdW5kZWZpbmVkLHRydWUpfWJyZWFrO2RlZmF1bHQ6 Yi5wcmV2ZW50RGVmYXVsdCgpfX0sZG9TbmFwOmZ1bmN0aW9uKGIpe2lmKCF0aGlzLmluY3JlbWVu dHx8dGhpcy5pbmNyZW1lbnQ9PTF8fCFiKXtyZXR1cm4gYn12YXIgZD1iLGM9dGhpcy5pbmNyZW1l bnQ7dmFyIGE9YiVjO2lmKGEhPTApe2QtPWE7aWYoYSoyPmMpe2QrPWN9ZWxzZXtpZihhKjI8LWMp e2QtPWN9fX1yZXR1cm4gZC5jb25zdHJhaW4odGhpcy5taW5WYWx1ZSx0aGlzLm1heFZhbHVlKX0s YWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXtFeHQuU2xpZGVyLnN1cGVyY2xhc3MuYWZ0ZXJSZW5kZXIu YXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHRoaXMudmFsdWUhPT11bmRlZmluZWQpe3ZhciBhPXRo aXMubm9ybWFsaXplVmFsdWUodGhpcy52YWx1ZSk7aWYoYSE9PXRoaXMudmFsdWUpe2RlbGV0ZSB0 aGlzLnZhbHVlO3RoaXMuc2V0VmFsdWUoYSxmYWxzZSl9ZWxzZXt0aGlzLm1vdmVUaHVtYih0aGlz LnRyYW5zbGF0ZVZhbHVlKGEpLGZhbHNlKX19fSxnZXRSYXRpbzpmdW5jdGlvbigpe3ZhciBhPXRo aXMuaW5uZXJFbC5nZXRXaWR0aCgpO3ZhciBiPXRoaXMubWF4VmFsdWUtdGhpcy5taW5WYWx1ZTty ZXR1cm4gYj09MD9hOihhL2IpfSxub3JtYWxpemVWYWx1ZTpmdW5jdGlvbihhKXthPXRoaXMuZG9T bmFwKGEpO2E9RXh0LnV0aWwuRm9ybWF0LnJvdW5kKGEsdGhpcy5kZWNpbWFsUHJlY2lzaW9uKTth PWEuY29uc3RyYWluKHRoaXMubWluVmFsdWUsdGhpcy5tYXhWYWx1ZSk7cmV0dXJuIGF9LHNldFZh bHVlOmZ1bmN0aW9uKGIsYSxjKXtiPXRoaXMubm9ybWFsaXplVmFsdWUoYik7aWYoYiE9PXRoaXMu dmFsdWUmJnRoaXMuZmlyZUV2ZW50KCJiZWZvcmVjaGFuZ2UiLHRoaXMsYix0aGlzLnZhbHVlKSE9 PWZhbHNlKXt0aGlzLnZhbHVlPWI7dGhpcy5tb3ZlVGh1bWIodGhpcy50cmFuc2xhdGVWYWx1ZShi KSxhIT09ZmFsc2UpO3RoaXMuZmlyZUV2ZW50KCJjaGFuZ2UiLHRoaXMsYik7aWYoYyl7dGhpcy5m aXJlRXZlbnQoImNoYW5nZWNvbXBsZXRlIix0aGlzLGIpfX19LHRyYW5zbGF0ZVZhbHVlOmZ1bmN0 aW9uKGEpe3ZhciBiPXRoaXMuZ2V0UmF0aW8oKTtyZXR1cm4oYSpiKS0odGhpcy5taW5WYWx1ZSpi KS10aGlzLmhhbGZUaHVtYn0scmV2ZXJzZVZhbHVlOmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMuZ2V0 UmF0aW8oKTtyZXR1cm4oYit0aGlzLmhhbGZUaHVtYisodGhpcy5taW5WYWx1ZSphKSkvYX0sbW92 ZVRodW1iOmZ1bmN0aW9uKGIsYSl7aWYoIWF8fHRoaXMuYW5pbWF0ZT09PWZhbHNlKXt0aGlzLnRo dW1iLnNldExlZnQoYil9ZWxzZXt0aGlzLnRodW1iLnNoaWZ0KHtsZWZ0OmIsc3RvcEZ4OnRydWUs ZHVyYXRpb246MC4zNX0pfX0sZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLmZvY3VzRWwuZm9jdXMoMTAp fSxvbkJlZm9yZURyYWdTdGFydDpmdW5jdGlvbihhKXtyZXR1cm4gIXRoaXMuZGlzYWJsZWR9LG9u RHJhZ1N0YXJ0OmZ1bmN0aW9uKGEpe3RoaXMudGh1bWIuYWRkQ2xhc3MoIngtc2xpZGVyLXRodW1i LWRyYWciKTt0aGlzLmRyYWdnaW5nPXRydWU7dGhpcy5kcmFnU3RhcnRWYWx1ZT10aGlzLnZhbHVl O3RoaXMuZmlyZUV2ZW50KCJkcmFnc3RhcnQiLHRoaXMsYSl9LG9uRHJhZzpmdW5jdGlvbihhKXt2 YXIgYj10aGlzLmlubmVyRWwudHJhbnNsYXRlUG9pbnRzKHRoaXMudHJhY2tlci5nZXRYWSgpKTt0 aGlzLnNldFZhbHVlKEV4dC51dGlsLkZvcm1hdC5yb3VuZCh0aGlzLnJldmVyc2VWYWx1ZShiLmxl ZnQpLHRoaXMuZGVjaW1hbFByZWNpc2lvbiksZmFsc2UpO3RoaXMuZmlyZUV2ZW50KCJkcmFnIix0 aGlzLGEpfSxvbkRyYWdFbmQ6ZnVuY3Rpb24oYSl7dGhpcy50aHVtYi5yZW1vdmVDbGFzcygieC1z bGlkZXItdGh1bWItZHJhZyIpO3RoaXMuZHJhZ2dpbmc9ZmFsc2U7dGhpcy5maXJlRXZlbnQoImRy YWdlbmQiLHRoaXMsYSk7aWYodGhpcy5kcmFnU3RhcnRWYWx1ZSE9dGhpcy52YWx1ZSl7dGhpcy5m aXJlRXZlbnQoImNoYW5nZWNvbXBsZXRlIix0aGlzLHRoaXMudmFsdWUpfX0sb25SZXNpemU6ZnVu Y3Rpb24oYSxiKXt0aGlzLmlubmVyRWwuc2V0V2lkdGgoYS0odGhpcy5lbC5nZXRQYWRkaW5nKCJs IikrdGhpcy5lbmRFbC5nZXRQYWRkaW5nKCJyIikpKTt0aGlzLnN5bmNUaHVtYigpfSxvbkRpc2Fi bGU6ZnVuY3Rpb24oKXtFeHQuU2xpZGVyLnN1cGVyY2xhc3Mub25EaXNhYmxlLmNhbGwodGhpcyk7 dGhpcy50aHVtYi5hZGRDbGFzcyh0aGlzLmRpc2FibGVkQ2xhc3MpO2lmKEV4dC5pc0lFKXt2YXIg YT10aGlzLnRodW1iLmdldFhZKCk7dGhpcy50aHVtYi5oaWRlKCk7dGhpcy5pbm5lckVsLmFkZENs YXNzKHRoaXMuZGlzYWJsZWRDbGFzcykuZG9tLmRpc2FibGVkPXRydWU7aWYoIXRoaXMudGh1bWJI b2xkZXIpe3RoaXMudGh1bWJIb2xkZXI9dGhpcy5lbmRFbC5jcmVhdGVDaGlsZCh7Y2xzOiJ4LXNs aWRlci10aHVtYiAiK3RoaXMuZGlzYWJsZWRDbGFzc30pfXRoaXMudGh1bWJIb2xkZXIuc2hvdygp LnNldFhZKGEpfX0sb25FbmFibGU6ZnVuY3Rpb24oKXtFeHQuU2xpZGVyLnN1cGVyY2xhc3Mub25F bmFibGUuY2FsbCh0aGlzKTt0aGlzLnRodW1iLnJlbW92ZUNsYXNzKHRoaXMuZGlzYWJsZWRDbGFz cyk7aWYoRXh0LmlzSUUpe3RoaXMuaW5uZXJFbC5yZW1vdmVDbGFzcyh0aGlzLmRpc2FibGVkQ2xh c3MpLmRvbS5kaXNhYmxlZD1mYWxzZTtpZih0aGlzLnRodW1iSG9sZGVyKXt0aGlzLnRodW1iSG9s ZGVyLmhpZGUoKX10aGlzLnRodW1iLnNob3coKTt0aGlzLnN5bmNUaHVtYigpfX0sc3luY1RodW1i OmZ1bmN0aW9uKCl7aWYodGhpcy5yZW5kZXJlZCl7dGhpcy5tb3ZlVGh1bWIodGhpcy50cmFuc2xh dGVWYWx1ZSh0aGlzLnZhbHVlKSl9fSxnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZh bHVlfX0pO0V4dC5yZWcoInNsaWRlciIsRXh0LlNsaWRlcik7RXh0LlNsaWRlci5WZXJ0aWNhbD17 b25SZXNpemU6ZnVuY3Rpb24oYSxiKXt0aGlzLmlubmVyRWwuc2V0SGVpZ2h0KGItKHRoaXMuZWwu Z2V0UGFkZGluZygidCIpK3RoaXMuZW5kRWwuZ2V0UGFkZGluZygiYiIpKSk7dGhpcy5zeW5jVGh1 bWIoKX0sZ2V0UmF0aW86ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmlubmVyRWwuZ2V0SGVpZ2h0KCk7 dmFyIGE9dGhpcy5tYXhWYWx1ZS10aGlzLm1pblZhbHVlO3JldHVybiBiL2F9LG1vdmVUaHVtYjpm dW5jdGlvbihiLGEpe2lmKCFhfHx0aGlzLmFuaW1hdGU9PT1mYWxzZSl7dGhpcy50aHVtYi5zZXRC b3R0b20oYil9ZWxzZXt0aGlzLnRodW1iLnNoaWZ0KHtib3R0b206YixzdG9wRng6dHJ1ZSxkdXJh dGlvbjowLjM1fSl9fSxvbkRyYWc6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5pbm5lckVsLnRyYW5z bGF0ZVBvaW50cyh0aGlzLnRyYWNrZXIuZ2V0WFkoKSk7dmFyIGE9dGhpcy5pbm5lckVsLmdldEhl aWdodCgpLWMudG9wO3RoaXMuc2V0VmFsdWUodGhpcy5taW5WYWx1ZStFeHQudXRpbC5Gb3JtYXQu cm91bmQoYS90aGlzLmdldFJhdGlvKCksdGhpcy5kZWNpbWFsUHJlY2lzaW9uKSxmYWxzZSk7dGhp cy5maXJlRXZlbnQoImRyYWciLHRoaXMsYil9LG9uQ2xpY2tDaGFuZ2U6ZnVuY3Rpb24oYil7aWYo Yi5sZWZ0PnRoaXMuY2xpY2tSYW5nZVswXSYmYi5sZWZ0PHRoaXMuY2xpY2tSYW5nZVsxXSl7dmFy IGE9dGhpcy5pbm5lckVsLmdldEhlaWdodCgpLWIudG9wO3RoaXMuc2V0VmFsdWUodGhpcy5taW5W YWx1ZStFeHQudXRpbC5Gb3JtYXQucm91bmQoYS90aGlzLmdldFJhdGlvKCksdGhpcy5kZWNpbWFs UHJlY2lzaW9uKSx1bmRlZmluZWQsdHJ1ZSl9fX07RXh0LlByb2dyZXNzQmFyPUV4dC5leHRlbmQo RXh0LkJveENvbXBvbmVudCx7YmFzZUNsczoieC1wcm9ncmVzcyIsYW5pbWF0ZTpmYWxzZSx3YWl0 VGltZXI6bnVsbCxpbml0Q29tcG9uZW50OmZ1bmN0aW9uKCl7RXh0LlByb2dyZXNzQmFyLnN1cGVy Y2xhc3MuaW5pdENvbXBvbmVudC5jYWxsKHRoaXMpO3RoaXMuYWRkRXZlbnRzKCJ1cGRhdGUiKX0s b25SZW5kZXI6ZnVuY3Rpb24oZCxhKXt2YXIgYz1uZXcgRXh0LlRlbXBsYXRlKCc8ZGl2IGNsYXNz PSJ7Y2xzfS13cmFwIj4nLCc8ZGl2IGNsYXNzPSJ7Y2xzfS1pbm5lciI+JywnPGRpdiBjbGFzcz0i e2Nsc30tYmFyIj4nLCc8ZGl2IGNsYXNzPSJ7Y2xzfS10ZXh0Ij4nLCI8ZGl2PiYjMTYwOzwvZGl2 PiIsIjwvZGl2PiIsIjwvZGl2PiIsJzxkaXYgY2xhc3M9IntjbHN9LXRleHQge2Nsc30tdGV4dC1i YWNrIj4nLCI8ZGl2PiYjMTYwOzwvZGl2PiIsIjwvZGl2PiIsIjwvZGl2PiIsIjwvZGl2PiIpO3Ro aXMuZWw9YT9jLmluc2VydEJlZm9yZShhLHtjbHM6dGhpcy5iYXNlQ2xzfSx0cnVlKTpjLmFwcGVu ZChkLHtjbHM6dGhpcy5iYXNlQ2xzfSx0cnVlKTtpZih0aGlzLmlkKXt0aGlzLmVsLmRvbS5pZD10 aGlzLmlkfXZhciBiPXRoaXMuZWwuZG9tLmZpcnN0Q2hpbGQ7dGhpcy5wcm9ncmVzc0Jhcj1FeHQu Z2V0KGIuZmlyc3RDaGlsZCk7aWYodGhpcy50ZXh0RWwpe3RoaXMudGV4dEVsPUV4dC5nZXQodGhp cy50ZXh0RWwpO2RlbGV0ZSB0aGlzLnRleHRUb3BFbH1lbHNle3RoaXMudGV4dFRvcEVsPUV4dC5n ZXQodGhpcy5wcm9ncmVzc0Jhci5kb20uZmlyc3RDaGlsZCk7dmFyIGU9RXh0LmdldChiLmNoaWxk Tm9kZXNbMV0pO3RoaXMudGV4dFRvcEVsLnNldFN0eWxlKCJ6LWluZGV4Iiw5OSkuYWRkQ2xhc3Mo IngtaGlkZGVuIik7dGhpcy50ZXh0RWw9bmV3IEV4dC5Db21wb3NpdGVFbGVtZW50KFt0aGlzLnRl eHRUb3BFbC5kb20uZmlyc3RDaGlsZCxlLmRvbS5maXJzdENoaWxkXSk7dGhpcy50ZXh0RWwuc2V0 V2lkdGgoYi5vZmZzZXRXaWR0aCl9dGhpcy5wcm9ncmVzc0Jhci5zZXRIZWlnaHQoYi5vZmZzZXRI ZWlnaHQpfSxhZnRlclJlbmRlcjpmdW5jdGlvbigpe0V4dC5Qcm9ncmVzc0Jhci5zdXBlcmNsYXNz LmFmdGVyUmVuZGVyLmNhbGwodGhpcyk7aWYodGhpcy52YWx1ZSl7dGhpcy51cGRhdGVQcm9ncmVz cyh0aGlzLnZhbHVlLHRoaXMudGV4dCl9ZWxzZXt0aGlzLnVwZGF0ZVRleHQodGhpcy50ZXh0KX19 LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKGMsZCxiKXt0aGlzLnZhbHVlPWN8fDA7aWYoZCl7dGhp cy51cGRhdGVUZXh0KGQpfWlmKHRoaXMucmVuZGVyZWQpe3ZhciBhPU1hdGguZmxvb3IoYyp0aGlz LmVsLmRvbS5maXJzdENoaWxkLm9mZnNldFdpZHRoKTt0aGlzLnByb2dyZXNzQmFyLnNldFdpZHRo KGEsYj09PXRydWV8fChiIT09ZmFsc2UmJnRoaXMuYW5pbWF0ZSkpO2lmKHRoaXMudGV4dFRvcEVs KXt0aGlzLnRleHRUb3BFbC5yZW1vdmVDbGFzcygieC1oaWRkZW4iKS5zZXRXaWR0aChhKX19dGhp cy5maXJlRXZlbnQoInVwZGF0ZSIsdGhpcyxjLGQpO3JldHVybiB0aGlzfSx3YWl0OmZ1bmN0aW9u KGIpe2lmKCF0aGlzLndhaXRUaW1lcil7dmFyIGE9dGhpcztiPWJ8fHt9O3RoaXMudXBkYXRlVGV4 dChiLnRleHQpO3RoaXMud2FpdFRpbWVyPUV4dC5UYXNrTWdyLnN0YXJ0KHtydW46ZnVuY3Rpb24o Yyl7dmFyIGQ9Yi5pbmNyZW1lbnR8fDEwO3RoaXMudXBkYXRlUHJvZ3Jlc3MoKCgoKGMrZCklZCkr MSkqKDEwMC9kKSkqMC4wMSxudWxsLGIuYW5pbWF0ZSl9LGludGVydmFsOmIuaW50ZXJ2YWx8fDEw MDAsZHVyYXRpb246Yi5kdXJhdGlvbixvblN0b3A6ZnVuY3Rpb24oKXtpZihiLmZuKXtiLmZuLmFw cGx5KGIuc2NvcGV8fHRoaXMpfXRoaXMucmVzZXQoKX0sc2NvcGU6YX0pfXJldHVybiB0aGlzfSxp c1dhaXRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53YWl0VGltZXIhPT1udWxsfSx1cGRhdGVU ZXh0OmZ1bmN0aW9uKGEpe3RoaXMudGV4dD1hfHwiJiMxNjA7IjtpZih0aGlzLnJlbmRlcmVkKXt0 aGlzLnRleHRFbC51cGRhdGUodGhpcy50ZXh0KX1yZXR1cm4gdGhpc30sc3luY1Byb2dyZXNzQmFy OmZ1bmN0aW9uKCl7aWYodGhpcy52YWx1ZSl7dGhpcy51cGRhdGVQcm9ncmVzcyh0aGlzLnZhbHVl LHRoaXMudGV4dCl9cmV0dXJuIHRoaXN9LHNldFNpemU6ZnVuY3Rpb24oYSxjKXtFeHQuUHJvZ3Jl c3NCYXIuc3VwZXJjbGFzcy5zZXRTaXplLmNhbGwodGhpcyxhLGMpO2lmKHRoaXMudGV4dFRvcEVs KXt2YXIgYj10aGlzLmVsLmRvbS5maXJzdENoaWxkO3RoaXMudGV4dEVsLnNldFNpemUoYi5vZmZz ZXRXaWR0aCxiLm9mZnNldEhlaWdodCl9dGhpcy5zeW5jUHJvZ3Jlc3NCYXIoKTtyZXR1cm4gdGhp c30scmVzZXQ6ZnVuY3Rpb24oYSl7dGhpcy51cGRhdGVQcm9ncmVzcygwKTtpZih0aGlzLnRleHRU b3BFbCl7dGhpcy50ZXh0VG9wRWwuYWRkQ2xhc3MoIngtaGlkZGVuIil9aWYodGhpcy53YWl0VGlt ZXIpe3RoaXMud2FpdFRpbWVyLm9uU3RvcD1udWxsO0V4dC5UYXNrTWdyLnN0b3AodGhpcy53YWl0 VGltZXIpO3RoaXMud2FpdFRpbWVyPW51bGx9aWYoYT09PXRydWUpe3RoaXMuaGlkZSgpfXJldHVy biB0aGlzfX0pO0V4dC5yZWcoInByb2dyZXNzIixFeHQuUHJvZ3Jlc3NCYXIpOyhmdW5jdGlvbigp e3ZhciBhPUV4dC5FdmVudE1hbmFnZXI7dmFyIGI9RXh0LmxpYi5Eb207RXh0LmRkLkRyYWdEcm9w PWZ1bmN0aW9uKGUsYyxkKXtpZihlKXt0aGlzLmluaXQoZSxjLGQpfX07RXh0LmRkLkRyYWdEcm9w LnByb3RvdHlwZT17aWQ6bnVsbCxjb25maWc6bnVsbCxkcmFnRWxJZDpudWxsLGhhbmRsZUVsSWQ6 bnVsbCxpbnZhbGlkSGFuZGxlVHlwZXM6bnVsbCxpbnZhbGlkSGFuZGxlSWRzOm51bGwsaW52YWxp ZEhhbmRsZUNsYXNzZXM6bnVsbCxzdGFydFBhZ2VYOjAsc3RhcnRQYWdlWTowLGdyb3VwczpudWxs LGxvY2tlZDpmYWxzZSxsb2NrOmZ1bmN0aW9uKCl7dGhpcy5sb2NrZWQ9dHJ1ZX0sbW92ZU9ubHk6 ZmFsc2UsdW5sb2NrOmZ1bmN0aW9uKCl7dGhpcy5sb2NrZWQ9ZmFsc2V9LGlzVGFyZ2V0OnRydWUs cGFkZGluZzpudWxsLF9kb21SZWY6bnVsbCxfX3lnRHJhZ0Ryb3A6dHJ1ZSxjb25zdHJhaW5YOmZh bHNlLGNvbnN0cmFpblk6ZmFsc2UsbWluWDowLG1heFg6MCxtaW5ZOjAsbWF4WTowLG1haW50YWlu T2Zmc2V0OmZhbHNlLHhUaWNrczpudWxsLHlUaWNrczpudWxsLHByaW1hcnlCdXR0b25Pbmx5OnRy dWUsYXZhaWxhYmxlOmZhbHNlLGhhc091dGVySGFuZGxlczpmYWxzZSxiNFN0YXJ0RHJhZzpmdW5j dGlvbihjLGQpe30sc3RhcnREcmFnOmZ1bmN0aW9uKGMsZCl7fSxiNERyYWc6ZnVuY3Rpb24oYyl7 fSxvbkRyYWc6ZnVuY3Rpb24oYyl7fSxvbkRyYWdFbnRlcjpmdW5jdGlvbihjLGQpe30sYjREcmFn T3ZlcjpmdW5jdGlvbihjKXt9LG9uRHJhZ092ZXI6ZnVuY3Rpb24oYyxkKXt9LGI0RHJhZ091dDpm dW5jdGlvbihjKXt9LG9uRHJhZ091dDpmdW5jdGlvbihjLGQpe30sYjREcmFnRHJvcDpmdW5jdGlv bihjKXt9LG9uRHJhZ0Ryb3A6ZnVuY3Rpb24oYyxkKXt9LG9uSW52YWxpZERyb3A6ZnVuY3Rpb24o Yyl7fSxiNEVuZERyYWc6ZnVuY3Rpb24oYyl7fSxlbmREcmFnOmZ1bmN0aW9uKGMpe30sYjRNb3Vz ZURvd246ZnVuY3Rpb24oYyl7fSxvbk1vdXNlRG93bjpmdW5jdGlvbihjKXt9LG9uTW91c2VVcDpm dW5jdGlvbihjKXt9LG9uQXZhaWxhYmxlOmZ1bmN0aW9uKCl7fSxkZWZhdWx0UGFkZGluZzp7bGVm dDowLHJpZ2h0OjAsdG9wOjAsYm90dG9tOjB9LGNvbnN0cmFpblRvOmZ1bmN0aW9uKGosaCxvKXtp Zih0eXBlb2YgaD09Im51bWJlciIpe2g9e2xlZnQ6aCxyaWdodDpoLHRvcDpoLGJvdHRvbTpofX1o PWh8fHRoaXMuZGVmYXVsdFBhZGRpbmc7dmFyIGw9RXh0LmdldCh0aGlzLmdldEVsKCkpLmdldEJv eCgpO3ZhciBkPUV4dC5nZXQoaik7dmFyIG49ZC5nZXRTY3JvbGwoKTt2YXIgayxlPWQuZG9tO2lm KGU9PWRvY3VtZW50LmJvZHkpe2s9e3g6bi5sZWZ0LHk6bi50b3Asd2lkdGg6RXh0LmxpYi5Eb20u Z2V0Vmlld1dpZHRoKCksaGVpZ2h0OkV4dC5saWIuRG9tLmdldFZpZXdIZWlnaHQoKX19ZWxzZXt2 YXIgbT1kLmdldFhZKCk7az17eDptWzBdK24ubGVmdCx5Om1bMV0rbi50b3Asd2lkdGg6ZS5jbGll bnRXaWR0aCxoZWlnaHQ6ZS5jbGllbnRIZWlnaHR9fXZhciBpPWwueS1rLnk7dmFyIGc9bC54LWsu eDt0aGlzLnJlc2V0Q29uc3RyYWludHMoKTt0aGlzLnNldFhDb25zdHJhaW50KGctKGgubGVmdHx8 MCksay53aWR0aC1nLWwud2lkdGgtKGgucmlnaHR8fDApLHRoaXMueFRpY2tTaXplKTt0aGlzLnNl dFlDb25zdHJhaW50KGktKGgudG9wfHwwKSxrLmhlaWdodC1pLWwuaGVpZ2h0LShoLmJvdHRvbXx8 MCksdGhpcy55VGlja1NpemUpfSxnZXRFbDpmdW5jdGlvbigpe2lmKCF0aGlzLl9kb21SZWYpe3Ro aXMuX2RvbVJlZj1FeHQuZ2V0RG9tKHRoaXMuaWQpfXJldHVybiB0aGlzLl9kb21SZWZ9LGdldERy YWdFbDpmdW5jdGlvbigpe3JldHVybiBFeHQuZ2V0RG9tKHRoaXMuZHJhZ0VsSWQpfSxpbml0OmZ1 bmN0aW9uKGUsYyxkKXt0aGlzLmluaXRUYXJnZXQoZSxjLGQpO2Eub24odGhpcy5pZCwibW91c2Vk b3duIix0aGlzLmhhbmRsZU1vdXNlRG93bix0aGlzKX0saW5pdFRhcmdldDpmdW5jdGlvbihlLGMs ZCl7dGhpcy5jb25maWc9ZHx8e307dGhpcy5ERE09RXh0LmRkLkRETTt0aGlzLmdyb3Vwcz17fTtp Zih0eXBlb2YgZSE9PSJzdHJpbmciKXtlPUV4dC5pZChlKX10aGlzLmlkPWU7dGhpcy5hZGRUb0dy b3VwKChjKT9jOiJkZWZhdWx0Iik7dGhpcy5oYW5kbGVFbElkPWU7dGhpcy5zZXREcmFnRWxJZChl KTt0aGlzLmludmFsaWRIYW5kbGVUeXBlcz17QToiQSJ9O3RoaXMuaW52YWxpZEhhbmRsZUlkcz17 fTt0aGlzLmludmFsaWRIYW5kbGVDbGFzc2VzPVtdO3RoaXMuYXBwbHlDb25maWcoKTt0aGlzLmhh bmRsZU9uQXZhaWxhYmxlKCl9LGFwcGx5Q29uZmlnOmZ1bmN0aW9uKCl7dGhpcy5wYWRkaW5nPXRo aXMuY29uZmlnLnBhZGRpbmd8fFswLDAsMCwwXTt0aGlzLmlzVGFyZ2V0PSh0aGlzLmNvbmZpZy5p c1RhcmdldCE9PWZhbHNlKTt0aGlzLm1haW50YWluT2Zmc2V0PSh0aGlzLmNvbmZpZy5tYWludGFp bk9mZnNldCk7dGhpcy5wcmltYXJ5QnV0dG9uT25seT0odGhpcy5jb25maWcucHJpbWFyeUJ1dHRv bk9ubHkhPT1mYWxzZSl9LGhhbmRsZU9uQXZhaWxhYmxlOmZ1bmN0aW9uKCl7dGhpcy5hdmFpbGFi bGU9dHJ1ZTt0aGlzLnJlc2V0Q29uc3RyYWludHMoKTt0aGlzLm9uQXZhaWxhYmxlKCl9LHNldFBh ZGRpbmc6ZnVuY3Rpb24oZSxjLGcsZCl7aWYoIWMmJjAhPT1jKXt0aGlzLnBhZGRpbmc9W2UsZSxl LGVdfWVsc2V7aWYoIWcmJjAhPT1nKXt0aGlzLnBhZGRpbmc9W2UsYyxlLGNdfWVsc2V7dGhpcy5w YWRkaW5nPVtlLGMsZyxkXX19fSxzZXRJbml0UG9zaXRpb246ZnVuY3Rpb24oZyxlKXt2YXIgaD10 aGlzLmdldEVsKCk7aWYoIXRoaXMuRERNLnZlcmlmeUVsKGgpKXtyZXR1cm59dmFyIGQ9Z3x8MDt2 YXIgYz1lfHwwO3ZhciBpPWIuZ2V0WFkoaCk7dGhpcy5pbml0UGFnZVg9aVswXS1kO3RoaXMuaW5p dFBhZ2VZPWlbMV0tYzt0aGlzLmxhc3RQYWdlWD1pWzBdO3RoaXMubGFzdFBhZ2VZPWlbMV07dGhp cy5zZXRTdGFydFBvc2l0aW9uKGkpfSxzZXRTdGFydFBvc2l0aW9uOmZ1bmN0aW9uKGQpe3ZhciBj PWR8fGIuZ2V0WFkodGhpcy5nZXRFbCgpKTt0aGlzLmRlbHRhU2V0WFk9bnVsbDt0aGlzLnN0YXJ0 UGFnZVg9Y1swXTt0aGlzLnN0YXJ0UGFnZVk9Y1sxXX0sYWRkVG9Hcm91cDpmdW5jdGlvbihjKXt0 aGlzLmdyb3Vwc1tjXT10cnVlO3RoaXMuRERNLnJlZ0RyYWdEcm9wKHRoaXMsYyl9LHJlbW92ZUZy b21Hcm91cDpmdW5jdGlvbihjKXtpZih0aGlzLmdyb3Vwc1tjXSl7ZGVsZXRlIHRoaXMuZ3JvdXBz W2NdfXRoaXMuRERNLnJlbW92ZURERnJvbUdyb3VwKHRoaXMsYyl9LHNldERyYWdFbElkOmZ1bmN0 aW9uKGMpe3RoaXMuZHJhZ0VsSWQ9Y30sc2V0SGFuZGxlRWxJZDpmdW5jdGlvbihjKXtpZih0eXBl b2YgYyE9PSJzdHJpbmciKXtjPUV4dC5pZChjKX10aGlzLmhhbmRsZUVsSWQ9Yzt0aGlzLkRETS5y ZWdIYW5kbGUodGhpcy5pZCxjKX0sc2V0T3V0ZXJIYW5kbGVFbElkOmZ1bmN0aW9uKGMpe2lmKHR5 cGVvZiBjIT09InN0cmluZyIpe2M9RXh0LmlkKGMpfWEub24oYywibW91c2Vkb3duIix0aGlzLmhh bmRsZU1vdXNlRG93bix0aGlzKTt0aGlzLnNldEhhbmRsZUVsSWQoYyk7dGhpcy5oYXNPdXRlckhh bmRsZXM9dHJ1ZX0sdW5yZWc6ZnVuY3Rpb24oKXthLnVuKHRoaXMuaWQsIm1vdXNlZG93biIsdGhp cy5oYW5kbGVNb3VzZURvd24pO3RoaXMuX2RvbVJlZj1udWxsO3RoaXMuRERNLl9yZW1vdmUodGhp cyl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnVucmVnKCl9LGlzTG9ja2VkOmZ1bmN0aW9uKCl7 cmV0dXJuKHRoaXMuRERNLmlzTG9ja2VkKCl8fHRoaXMubG9ja2VkKX0saGFuZGxlTW91c2VEb3du OmZ1bmN0aW9uKGcsZCl7aWYodGhpcy5wcmltYXJ5QnV0dG9uT25seSYmZy5idXR0b24hPTApe3Jl dHVybn1pZih0aGlzLmlzTG9ja2VkKCkpe3JldHVybn10aGlzLkRETS5yZWZyZXNoQ2FjaGUodGhp cy5ncm91cHMpO3ZhciBjPW5ldyBFeHQubGliLlBvaW50KEV4dC5saWIuRXZlbnQuZ2V0UGFnZVgo ZyksRXh0LmxpYi5FdmVudC5nZXRQYWdlWShnKSk7aWYoIXRoaXMuaGFzT3V0ZXJIYW5kbGVzJiYh dGhpcy5ERE0uaXNPdmVyVGFyZ2V0KGMsdGhpcykpe31lbHNle2lmKHRoaXMuY2xpY2tWYWxpZGF0 b3IoZykpe3RoaXMuc2V0U3RhcnRQb3NpdGlvbigpO3RoaXMuYjRNb3VzZURvd24oZyk7dGhpcy5v bk1vdXNlRG93bihnKTt0aGlzLkRETS5oYW5kbGVNb3VzZURvd24oZyx0aGlzKTt0aGlzLkRETS5z dG9wRXZlbnQoZyl9ZWxzZXt9fX0sY2xpY2tWYWxpZGF0b3I6ZnVuY3Rpb24oZCl7dmFyIGM9ZC5n ZXRUYXJnZXQoKTtyZXR1cm4odGhpcy5pc1ZhbGlkSGFuZGxlQ2hpbGQoYykmJih0aGlzLmlkPT10 aGlzLmhhbmRsZUVsSWR8fHRoaXMuRERNLmhhbmRsZVdhc0NsaWNrZWQoYyx0aGlzLmlkKSkpfSxh ZGRJbnZhbGlkSGFuZGxlVHlwZTpmdW5jdGlvbihjKXt2YXIgZD1jLnRvVXBwZXJDYXNlKCk7dGhp cy5pbnZhbGlkSGFuZGxlVHlwZXNbZF09ZH0sYWRkSW52YWxpZEhhbmRsZUlkOmZ1bmN0aW9uKGMp e2lmKHR5cGVvZiBjIT09InN0cmluZyIpe2M9RXh0LmlkKGMpfXRoaXMuaW52YWxpZEhhbmRsZUlk c1tjXT1jfSxhZGRJbnZhbGlkSGFuZGxlQ2xhc3M6ZnVuY3Rpb24oYyl7dGhpcy5pbnZhbGlkSGFu ZGxlQ2xhc3Nlcy5wdXNoKGMpfSxyZW1vdmVJbnZhbGlkSGFuZGxlVHlwZTpmdW5jdGlvbihjKXt2 YXIgZD1jLnRvVXBwZXJDYXNlKCk7ZGVsZXRlIHRoaXMuaW52YWxpZEhhbmRsZVR5cGVzW2RdfSxy ZW1vdmVJbnZhbGlkSGFuZGxlSWQ6ZnVuY3Rpb24oYyl7aWYodHlwZW9mIGMhPT0ic3RyaW5nIil7 Yz1FeHQuaWQoYyl9ZGVsZXRlIHRoaXMuaW52YWxpZEhhbmRsZUlkc1tjXX0scmVtb3ZlSW52YWxp ZEhhbmRsZUNsYXNzOmZ1bmN0aW9uKGQpe2Zvcih2YXIgZT0wLGM9dGhpcy5pbnZhbGlkSGFuZGxl Q2xhc3Nlcy5sZW5ndGg7ZTxjOysrZSl7aWYodGhpcy5pbnZhbGlkSGFuZGxlQ2xhc3Nlc1tlXT09 ZCl7ZGVsZXRlIHRoaXMuaW52YWxpZEhhbmRsZUNsYXNzZXNbZV19fX0saXNWYWxpZEhhbmRsZUNo aWxkOmZ1bmN0aW9uKGgpe3ZhciBnPXRydWU7dmFyIGs7dHJ5e2s9aC5ub2RlTmFtZS50b1VwcGVy Q2FzZSgpfWNhdGNoKGope2s9aC5ub2RlTmFtZX1nPWcmJiF0aGlzLmludmFsaWRIYW5kbGVUeXBl c1trXTtnPWcmJiF0aGlzLmludmFsaWRIYW5kbGVJZHNbaC5pZF07Zm9yKHZhciBkPTAsYz10aGlz LmludmFsaWRIYW5kbGVDbGFzc2VzLmxlbmd0aDtnJiZkPGM7KytkKXtnPSFFeHQuZmx5KGgpLmhh c0NsYXNzKHRoaXMuaW52YWxpZEhhbmRsZUNsYXNzZXNbZF0pfXJldHVybiBnfSxzZXRYVGlja3M6 ZnVuY3Rpb24oZyxjKXt0aGlzLnhUaWNrcz1bXTt0aGlzLnhUaWNrU2l6ZT1jO3ZhciBlPXt9O2Zv cih2YXIgZD10aGlzLmluaXRQYWdlWDtkPj10aGlzLm1pblg7ZD1kLWMpe2lmKCFlW2RdKXt0aGlz LnhUaWNrc1t0aGlzLnhUaWNrcy5sZW5ndGhdPWQ7ZVtkXT10cnVlfX1mb3IoZD10aGlzLmluaXRQ YWdlWDtkPD10aGlzLm1heFg7ZD1kK2Mpe2lmKCFlW2RdKXt0aGlzLnhUaWNrc1t0aGlzLnhUaWNr cy5sZW5ndGhdPWQ7ZVtkXT10cnVlfX10aGlzLnhUaWNrcy5zb3J0KHRoaXMuRERNLm51bWVyaWNT b3J0KX0sc2V0WVRpY2tzOmZ1bmN0aW9uKGcsYyl7dGhpcy55VGlja3M9W107dGhpcy55VGlja1Np emU9Yzt2YXIgZT17fTtmb3IodmFyIGQ9dGhpcy5pbml0UGFnZVk7ZD49dGhpcy5taW5ZO2Q9ZC1j KXtpZighZVtkXSl7dGhpcy55VGlja3NbdGhpcy55VGlja3MubGVuZ3RoXT1kO2VbZF09dHJ1ZX19 Zm9yKGQ9dGhpcy5pbml0UGFnZVk7ZDw9dGhpcy5tYXhZO2Q9ZCtjKXtpZighZVtkXSl7dGhpcy55 VGlja3NbdGhpcy55VGlja3MubGVuZ3RoXT1kO2VbZF09dHJ1ZX19dGhpcy55VGlja3Muc29ydCh0 aGlzLkRETS5udW1lcmljU29ydCl9LHNldFhDb25zdHJhaW50OmZ1bmN0aW9uKGUsZCxjKXt0aGlz LmxlZnRDb25zdHJhaW50PWU7dGhpcy5yaWdodENvbnN0cmFpbnQ9ZDt0aGlzLm1pblg9dGhpcy5p bml0UGFnZVgtZTt0aGlzLm1heFg9dGhpcy5pbml0UGFnZVgrZDtpZihjKXt0aGlzLnNldFhUaWNr cyh0aGlzLmluaXRQYWdlWCxjKX10aGlzLmNvbnN0cmFpblg9dHJ1ZX0sY2xlYXJDb25zdHJhaW50 czpmdW5jdGlvbigpe3RoaXMuY29uc3RyYWluWD1mYWxzZTt0aGlzLmNvbnN0cmFpblk9ZmFsc2U7 dGhpcy5jbGVhclRpY2tzKCl9LGNsZWFyVGlja3M6ZnVuY3Rpb24oKXt0aGlzLnhUaWNrcz1udWxs O3RoaXMueVRpY2tzPW51bGw7dGhpcy54VGlja1NpemU9MDt0aGlzLnlUaWNrU2l6ZT0wfSxzZXRZ Q29uc3RyYWludDpmdW5jdGlvbihjLGUsZCl7dGhpcy50b3BDb25zdHJhaW50PWM7dGhpcy5ib3R0 b21Db25zdHJhaW50PWU7dGhpcy5taW5ZPXRoaXMuaW5pdFBhZ2VZLWM7dGhpcy5tYXhZPXRoaXMu aW5pdFBhZ2VZK2U7aWYoZCl7dGhpcy5zZXRZVGlja3ModGhpcy5pbml0UGFnZVksZCl9dGhpcy5j b25zdHJhaW5ZPXRydWV9LHJlc2V0Q29uc3RyYWludHM6ZnVuY3Rpb24oKXtpZih0aGlzLmluaXRQ YWdlWHx8dGhpcy5pbml0UGFnZVg9PT0wKXt2YXIgZD0odGhpcy5tYWludGFpbk9mZnNldCk/dGhp cy5sYXN0UGFnZVgtdGhpcy5pbml0UGFnZVg6MDt2YXIgYz0odGhpcy5tYWludGFpbk9mZnNldCk/ dGhpcy5sYXN0UGFnZVktdGhpcy5pbml0UGFnZVk6MDt0aGlzLnNldEluaXRQb3NpdGlvbihkLGMp fWVsc2V7dGhpcy5zZXRJbml0UG9zaXRpb24oKX1pZih0aGlzLmNvbnN0cmFpblgpe3RoaXMuc2V0 WENvbnN0cmFpbnQodGhpcy5sZWZ0Q29uc3RyYWludCx0aGlzLnJpZ2h0Q29uc3RyYWludCx0aGlz LnhUaWNrU2l6ZSl9aWYodGhpcy5jb25zdHJhaW5ZKXt0aGlzLnNldFlDb25zdHJhaW50KHRoaXMu dG9wQ29uc3RyYWludCx0aGlzLmJvdHRvbUNvbnN0cmFpbnQsdGhpcy55VGlja1NpemUpfX0sZ2V0 VGljazpmdW5jdGlvbihrLGcpe2lmKCFnKXtyZXR1cm4ga31lbHNle2lmKGdbMF0+PWspe3JldHVy biBnWzBdfWVsc2V7Zm9yKHZhciBkPTAsYz1nLmxlbmd0aDtkPGM7KytkKXt2YXIgZT1kKzE7aWYo Z1tlXSYmZ1tlXT49ayl7dmFyIGo9ay1nW2RdO3ZhciBoPWdbZV0taztyZXR1cm4oaD5qKT9nW2Rd OmdbZV19fXJldHVybiBnW2cubGVuZ3RoLTFdfX19LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJu KCJEcmFnRHJvcCAiK3RoaXMuaWQpfX19KSgpO2lmKCFFeHQuZGQuRHJhZ0Ryb3BNZ3Ipe0V4dC5k ZC5EcmFnRHJvcE1ncj1mdW5jdGlvbigpe3ZhciBhPUV4dC5FdmVudE1hbmFnZXI7cmV0dXJue2lk czp7fSxoYW5kbGVJZHM6e30sZHJhZ0N1cnJlbnQ6bnVsbCxkcmFnT3ZlcnM6e30sZGVsdGFYOjAs ZGVsdGFZOjAscHJldmVudERlZmF1bHQ6dHJ1ZSxzdG9wUHJvcGFnYXRpb246dHJ1ZSxpbml0aWFs aXplZDpmYWxzZSxsb2NrZWQ6ZmFsc2UsaW5pdDpmdW5jdGlvbigpe3RoaXMuaW5pdGlhbGl6ZWQ9 dHJ1ZX0sUE9JTlQ6MCxJTlRFUlNFQ1Q6MSxtb2RlOjAsX2V4ZWNPbkFsbDpmdW5jdGlvbihkLGMp e2Zvcih2YXIgZSBpbiB0aGlzLmlkcyl7Zm9yKHZhciBiIGluIHRoaXMuaWRzW2VdKXt2YXIgZz10 aGlzLmlkc1tlXVtiXTtpZighdGhpcy5pc1R5cGVPZkREKGcpKXtjb250aW51ZX1nW2RdLmFwcGx5 KGcsYyl9fX0sX29uTG9hZDpmdW5jdGlvbigpe3RoaXMuaW5pdCgpO2Eub24oZG9jdW1lbnQsIm1v dXNldXAiLHRoaXMuaGFuZGxlTW91c2VVcCx0aGlzLHRydWUpO2Eub24oZG9jdW1lbnQsIm1vdXNl bW92ZSIsdGhpcy5oYW5kbGVNb3VzZU1vdmUsdGhpcyx0cnVlKTthLm9uKHdpbmRvdywidW5sb2Fk Iix0aGlzLl9vblVubG9hZCx0aGlzLHRydWUpO2Eub24od2luZG93LCJyZXNpemUiLHRoaXMuX29u UmVzaXplLHRoaXMsdHJ1ZSl9LF9vblJlc2l6ZTpmdW5jdGlvbihiKXt0aGlzLl9leGVjT25BbGwo InJlc2V0Q29uc3RyYWludHMiLFtdKX0sbG9jazpmdW5jdGlvbigpe3RoaXMubG9ja2VkPXRydWV9 LHVubG9jazpmdW5jdGlvbigpe3RoaXMubG9ja2VkPWZhbHNlfSxpc0xvY2tlZDpmdW5jdGlvbigp e3JldHVybiB0aGlzLmxvY2tlZH0sbG9jYXRpb25DYWNoZTp7fSx1c2VDYWNoZTp0cnVlLGNsaWNr UGl4ZWxUaHJlc2g6MyxjbGlja1RpbWVUaHJlc2g6MzUwLGRyYWdUaHJlc2hNZXQ6ZmFsc2UsY2xp Y2tUaW1lb3V0Om51bGwsc3RhcnRYOjAsc3RhcnRZOjAscmVnRHJhZ0Ryb3A6ZnVuY3Rpb24oYyxi KXtpZighdGhpcy5pbml0aWFsaXplZCl7dGhpcy5pbml0KCl9aWYoIXRoaXMuaWRzW2JdKXt0aGlz Lmlkc1tiXT17fX10aGlzLmlkc1tiXVtjLmlkXT1jfSxyZW1vdmVEREZyb21Hcm91cDpmdW5jdGlv bihkLGIpe2lmKCF0aGlzLmlkc1tiXSl7dGhpcy5pZHNbYl09e319dmFyIGM9dGhpcy5pZHNbYl07 aWYoYyYmY1tkLmlkXSl7ZGVsZXRlIGNbZC5pZF19fSxfcmVtb3ZlOmZ1bmN0aW9uKGMpe2Zvcih2 YXIgYiBpbiBjLmdyb3Vwcyl7aWYoYiYmdGhpcy5pZHNbYl0mJnRoaXMuaWRzW2JdW2MuaWRdKXtk ZWxldGUgdGhpcy5pZHNbYl1bYy5pZF19fWRlbGV0ZSB0aGlzLmhhbmRsZUlkc1tjLmlkXX0scmVn SGFuZGxlOmZ1bmN0aW9uKGMsYil7aWYoIXRoaXMuaGFuZGxlSWRzW2NdKXt0aGlzLmhhbmRsZUlk c1tjXT17fX10aGlzLmhhbmRsZUlkc1tjXVtiXT1ifSxpc0RyYWdEcm9wOmZ1bmN0aW9uKGIpe3Jl dHVybih0aGlzLmdldEREQnlJZChiKSk/dHJ1ZTpmYWxzZX0sZ2V0UmVsYXRlZDpmdW5jdGlvbiho LGMpe3ZhciBnPVtdO2Zvcih2YXIgZSBpbiBoLmdyb3Vwcyl7Zm9yKHZhciBkIGluIHRoaXMuaWRz W2VdKXt2YXIgYj10aGlzLmlkc1tlXVtkXTtpZighdGhpcy5pc1R5cGVPZkREKGIpKXtjb250aW51 ZX1pZighY3x8Yi5pc1RhcmdldCl7Z1tnLmxlbmd0aF09Yn19fXJldHVybiBnfSxpc0xlZ2FsVGFy Z2V0OmZ1bmN0aW9uKGcsZSl7dmFyIGM9dGhpcy5nZXRSZWxhdGVkKGcsdHJ1ZSk7Zm9yKHZhciBk PTAsYj1jLmxlbmd0aDtkPGI7KytkKXtpZihjW2RdLmlkPT1lLmlkKXtyZXR1cm4gdHJ1ZX19cmV0 dXJuIGZhbHNlfSxpc1R5cGVPZkREOmZ1bmN0aW9uKGIpe3JldHVybihiJiZiLl9feWdEcmFnRHJv cCl9LGlzSGFuZGxlOmZ1bmN0aW9uKGMsYil7cmV0dXJuKHRoaXMuaGFuZGxlSWRzW2NdJiZ0aGlz LmhhbmRsZUlkc1tjXVtiXSl9LGdldEREQnlJZDpmdW5jdGlvbihjKXtmb3IodmFyIGIgaW4gdGhp cy5pZHMpe2lmKHRoaXMuaWRzW2JdW2NdKXtyZXR1cm4gdGhpcy5pZHNbYl1bY119fXJldHVybiBu dWxsfSxoYW5kbGVNb3VzZURvd246ZnVuY3Rpb24oZCxjKXtpZihFeHQuUXVpY2tUaXBzKXtFeHQu UXVpY2tUaXBzLmRpc2FibGUoKX1pZih0aGlzLmRyYWdDdXJyZW50KXt0aGlzLmhhbmRsZU1vdXNl VXAoZCl9dGhpcy5jdXJyZW50VGFyZ2V0PWQuZ2V0VGFyZ2V0KCk7dGhpcy5kcmFnQ3VycmVudD1j O3ZhciBiPWMuZ2V0RWwoKTt0aGlzLnN0YXJ0WD1kLmdldFBhZ2VYKCk7dGhpcy5zdGFydFk9ZC5n ZXRQYWdlWSgpO3RoaXMuZGVsdGFYPXRoaXMuc3RhcnRYLWIub2Zmc2V0TGVmdDt0aGlzLmRlbHRh WT10aGlzLnN0YXJ0WS1iLm9mZnNldFRvcDt0aGlzLmRyYWdUaHJlc2hNZXQ9ZmFsc2U7dGhpcy5j bGlja1RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBlPUV4dC5kZC5ERE07ZS5zdGFy dERyYWcoZS5zdGFydFgsZS5zdGFydFkpfSx0aGlzLmNsaWNrVGltZVRocmVzaCl9LHN0YXJ0RHJh ZzpmdW5jdGlvbihiLGMpe2NsZWFyVGltZW91dCh0aGlzLmNsaWNrVGltZW91dCk7aWYodGhpcy5k cmFnQ3VycmVudCl7dGhpcy5kcmFnQ3VycmVudC5iNFN0YXJ0RHJhZyhiLGMpO3RoaXMuZHJhZ0N1 cnJlbnQuc3RhcnREcmFnKGIsYyl9dGhpcy5kcmFnVGhyZXNoTWV0PXRydWV9LGhhbmRsZU1vdXNl VXA6ZnVuY3Rpb24oYil7aWYoRXh0LlF1aWNrVGlwcyl7RXh0LlF1aWNrVGlwcy5lbmFibGUoKX1p ZighdGhpcy5kcmFnQ3VycmVudCl7cmV0dXJufWNsZWFyVGltZW91dCh0aGlzLmNsaWNrVGltZW91 dCk7aWYodGhpcy5kcmFnVGhyZXNoTWV0KXt0aGlzLmZpcmVFdmVudHMoYix0cnVlKX1lbHNle310 aGlzLnN0b3BEcmFnKGIpO3RoaXMuc3RvcEV2ZW50KGIpfSxzdG9wRXZlbnQ6ZnVuY3Rpb24oYil7 aWYodGhpcy5zdG9wUHJvcGFnYXRpb24pe2Iuc3RvcFByb3BhZ2F0aW9uKCl9aWYodGhpcy5wcmV2 ZW50RGVmYXVsdCl7Yi5wcmV2ZW50RGVmYXVsdCgpfX0sc3RvcERyYWc6ZnVuY3Rpb24oYil7aWYo dGhpcy5kcmFnQ3VycmVudCl7aWYodGhpcy5kcmFnVGhyZXNoTWV0KXt0aGlzLmRyYWdDdXJyZW50 LmI0RW5kRHJhZyhiKTt0aGlzLmRyYWdDdXJyZW50LmVuZERyYWcoYil9dGhpcy5kcmFnQ3VycmVu dC5vbk1vdXNlVXAoYil9dGhpcy5kcmFnQ3VycmVudD1udWxsO3RoaXMuZHJhZ092ZXJzPXt9fSxo YW5kbGVNb3VzZU1vdmU6ZnVuY3Rpb24oZCl7aWYoIXRoaXMuZHJhZ0N1cnJlbnQpe3JldHVybiB0 cnVlfWlmKEV4dC5pc0lFJiYoZC5idXR0b24hPT0wJiZkLmJ1dHRvbiE9PTEmJmQuYnV0dG9uIT09 Mikpe3RoaXMuc3RvcEV2ZW50KGQpO3JldHVybiB0aGlzLmhhbmRsZU1vdXNlVXAoZCl9aWYoIXRo aXMuZHJhZ1RocmVzaE1ldCl7dmFyIGM9TWF0aC5hYnModGhpcy5zdGFydFgtZC5nZXRQYWdlWCgp KTt2YXIgYj1NYXRoLmFicyh0aGlzLnN0YXJ0WS1kLmdldFBhZ2VZKCkpO2lmKGM+dGhpcy5jbGlj a1BpeGVsVGhyZXNofHxiPnRoaXMuY2xpY2tQaXhlbFRocmVzaCl7dGhpcy5zdGFydERyYWcodGhp cy5zdGFydFgsdGhpcy5zdGFydFkpfX1pZih0aGlzLmRyYWdUaHJlc2hNZXQpe3RoaXMuZHJhZ0N1 cnJlbnQuYjREcmFnKGQpO3RoaXMuZHJhZ0N1cnJlbnQub25EcmFnKGQpO2lmKCF0aGlzLmRyYWdD dXJyZW50Lm1vdmVPbmx5KXt0aGlzLmZpcmVFdmVudHMoZCxmYWxzZSl9fXRoaXMuc3RvcEV2ZW50 KGQpO3JldHVybiB0cnVlfSxmaXJlRXZlbnRzOmZ1bmN0aW9uKG4sbyl7dmFyIHE9dGhpcy5kcmFn Q3VycmVudDtpZighcXx8cS5pc0xvY2tlZCgpKXtyZXR1cm59dmFyIHI9bi5nZXRQb2ludCgpO3Zh ciBiPVtdO3ZhciBnPVtdO3ZhciBsPVtdO3ZhciBqPVtdO3ZhciBkPVtdO2Zvcih2YXIgaCBpbiB0 aGlzLmRyYWdPdmVycyl7dmFyIGM9dGhpcy5kcmFnT3ZlcnNbaF07aWYoIXRoaXMuaXNUeXBlT2ZE RChjKSl7Y29udGludWV9aWYoIXRoaXMuaXNPdmVyVGFyZ2V0KHIsYyx0aGlzLm1vZGUpKXtnLnB1 c2goYyl9YltoXT10cnVlO2RlbGV0ZSB0aGlzLmRyYWdPdmVyc1toXX1mb3IodmFyIHAgaW4gcS5n cm91cHMpe2lmKCJzdHJpbmciIT10eXBlb2YgcCl7Y29udGludWV9Zm9yKGggaW4gdGhpcy5pZHNb cF0pe3ZhciBrPXRoaXMuaWRzW3BdW2hdO2lmKCF0aGlzLmlzVHlwZU9mREQoaykpe2NvbnRpbnVl fWlmKGsuaXNUYXJnZXQmJiFrLmlzTG9ja2VkKCkmJigoayE9cSl8fChxLmlnbm9yZVNlbGY9PT1m YWxzZSkpKXtpZih0aGlzLmlzT3ZlclRhcmdldChyLGssdGhpcy5tb2RlKSl7aWYobyl7ai5wdXNo KGspfWVsc2V7aWYoIWJbay5pZF0pe2QucHVzaChrKX1lbHNle2wucHVzaChrKX10aGlzLmRyYWdP dmVyc1trLmlkXT1rfX19fX1pZih0aGlzLm1vZGUpe2lmKGcubGVuZ3RoKXtxLmI0RHJhZ091dChu LGcpO3Eub25EcmFnT3V0KG4sZyl9aWYoZC5sZW5ndGgpe3Eub25EcmFnRW50ZXIobixkKX1pZihs Lmxlbmd0aCl7cS5iNERyYWdPdmVyKG4sbCk7cS5vbkRyYWdPdmVyKG4sbCl9aWYoai5sZW5ndGgp e3EuYjREcmFnRHJvcChuLGopO3Eub25EcmFnRHJvcChuLGopfX1lbHNle3ZhciBtPTA7Zm9yKGg9 MCxtPWcubGVuZ3RoO2g8bTsrK2gpe3EuYjREcmFnT3V0KG4sZ1toXS5pZCk7cS5vbkRyYWdPdXQo bixnW2hdLmlkKX1mb3IoaD0wLG09ZC5sZW5ndGg7aDxtOysraCl7cS5vbkRyYWdFbnRlcihuLGRb aF0uaWQpfWZvcihoPTAsbT1sLmxlbmd0aDtoPG07KytoKXtxLmI0RHJhZ092ZXIobixsW2hdLmlk KTtxLm9uRHJhZ092ZXIobixsW2hdLmlkKX1mb3IoaD0wLG09ai5sZW5ndGg7aDxtOysraCl7cS5i NERyYWdEcm9wKG4saltoXS5pZCk7cS5vbkRyYWdEcm9wKG4saltoXS5pZCl9fWlmKG8mJiFqLmxl bmd0aCl7cS5vbkludmFsaWREcm9wKG4pfX0sZ2V0QmVzdE1hdGNoOmZ1bmN0aW9uKGQpe3ZhciBn PW51bGw7dmFyIGM9ZC5sZW5ndGg7aWYoYz09MSl7Zz1kWzBdfWVsc2V7Zm9yKHZhciBlPTA7ZTxj OysrZSl7dmFyIGI9ZFtlXTtpZihiLmN1cnNvcklzT3Zlcil7Zz1iO2JyZWFrfWVsc2V7aWYoIWd8 fGcub3ZlcmxhcC5nZXRBcmVhKCk8Yi5vdmVybGFwLmdldEFyZWEoKSl7Zz1ifX19fXJldHVybiBn fSxyZWZyZXNoQ2FjaGU6ZnVuY3Rpb24oYyl7Zm9yKHZhciBiIGluIGMpe2lmKCJzdHJpbmciIT10 eXBlb2YgYil7Y29udGludWV9Zm9yKHZhciBkIGluIHRoaXMuaWRzW2JdKXt2YXIgZT10aGlzLmlk c1tiXVtkXTtpZih0aGlzLmlzVHlwZU9mREQoZSkpe3ZhciBnPXRoaXMuZ2V0TG9jYXRpb24oZSk7 aWYoZyl7dGhpcy5sb2NhdGlvbkNhY2hlW2UuaWRdPWd9ZWxzZXtkZWxldGUgdGhpcy5sb2NhdGlv bkNhY2hlW2UuaWRdfX19fX0sdmVyaWZ5RWw6ZnVuY3Rpb24oYyl7aWYoYyl7dmFyIGI7aWYoRXh0 LmlzSUUpe3RyeXtiPWMub2Zmc2V0UGFyZW50fWNhdGNoKGQpe319ZWxzZXtiPWMub2Zmc2V0UGFy ZW50fWlmKGIpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9LGdldExvY2F0aW9uOmZ1bmN0aW9u KGope2lmKCF0aGlzLmlzVHlwZU9mREQoaikpe3JldHVybiBudWxsfXZhciBoPWouZ2V0RWwoKSxu LGcsZCxwLG8scSxjLG0saTt0cnl7bj1FeHQubGliLkRvbS5nZXRYWShoKX1jYXRjaChrKXt9aWYo IW4pe3JldHVybiBudWxsfWc9blswXTtkPWcraC5vZmZzZXRXaWR0aDtwPW5bMV07bz1wK2gub2Zm c2V0SGVpZ2h0O3E9cC1qLnBhZGRpbmdbMF07Yz1kK2oucGFkZGluZ1sxXTttPW8rai5wYWRkaW5n WzJdO2k9Zy1qLnBhZGRpbmdbM107cmV0dXJuIG5ldyBFeHQubGliLlJlZ2lvbihxLGMsbSxpKX0s aXNPdmVyVGFyZ2V0OmZ1bmN0aW9uKGssYixkKXt2YXIgZz10aGlzLmxvY2F0aW9uQ2FjaGVbYi5p ZF07aWYoIWd8fCF0aGlzLnVzZUNhY2hlKXtnPXRoaXMuZ2V0TG9jYXRpb24oYik7dGhpcy5sb2Nh dGlvbkNhY2hlW2IuaWRdPWd9aWYoIWcpe3JldHVybiBmYWxzZX1iLmN1cnNvcklzT3Zlcj1nLmNv bnRhaW5zKGspO3ZhciBqPXRoaXMuZHJhZ0N1cnJlbnQ7aWYoIWp8fCFqLmdldFRhcmdldENvb3Jk fHwoIWQmJiFqLmNvbnN0cmFpblgmJiFqLmNvbnN0cmFpblkpKXtyZXR1cm4gYi5jdXJzb3JJc092 ZXJ9Yi5vdmVybGFwPW51bGw7dmFyIGg9ai5nZXRUYXJnZXRDb29yZChrLngsay55KTt2YXIgYz1q LmdldERyYWdFbCgpO3ZhciBlPW5ldyBFeHQubGliLlJlZ2lvbihoLnksaC54K2Mub2Zmc2V0V2lk dGgsaC55K2Mub2Zmc2V0SGVpZ2h0LGgueCk7dmFyIGk9ZS5pbnRlcnNlY3QoZyk7aWYoaSl7Yi5v dmVybGFwPWk7cmV0dXJuKGQpP3RydWU6Yi5jdXJzb3JJc092ZXJ9ZWxzZXtyZXR1cm4gZmFsc2V9 fSxfb25VbmxvYWQ6ZnVuY3Rpb24oYyxiKXtFeHQuZGQuRHJhZ0Ryb3BNZ3IudW5yZWdBbGwoKX0s dW5yZWdBbGw6ZnVuY3Rpb24oKXtpZih0aGlzLmRyYWdDdXJyZW50KXt0aGlzLnN0b3BEcmFnKCk7 dGhpcy5kcmFnQ3VycmVudD1udWxsfXRoaXMuX2V4ZWNPbkFsbCgidW5yZWciLFtdKTtmb3IodmFy IGIgaW4gdGhpcy5lbGVtZW50Q2FjaGUpe2RlbGV0ZSB0aGlzLmVsZW1lbnRDYWNoZVtiXX10aGlz LmVsZW1lbnRDYWNoZT17fTt0aGlzLmlkcz17fX0sZWxlbWVudENhY2hlOnt9LGdldEVsV3JhcHBl cjpmdW5jdGlvbihjKXt2YXIgYj10aGlzLmVsZW1lbnRDYWNoZVtjXTtpZighYnx8IWIuZWwpe2I9 dGhpcy5lbGVtZW50Q2FjaGVbY109bmV3IHRoaXMuRWxlbWVudFdyYXBwZXIoRXh0LmdldERvbShj KSl9cmV0dXJuIGJ9LGdldEVsZW1lbnQ6ZnVuY3Rpb24oYil7cmV0dXJuIEV4dC5nZXREb20oYil9 LGdldENzczpmdW5jdGlvbihjKXt2YXIgYj1FeHQuZ2V0RG9tKGMpO3JldHVybihiKT9iLnN0eWxl Om51bGx9LEVsZW1lbnRXcmFwcGVyOmZ1bmN0aW9uKGIpe3RoaXMuZWw9Ynx8bnVsbDt0aGlzLmlk PXRoaXMuZWwmJmIuaWQ7dGhpcy5jc3M9dGhpcy5lbCYmYi5zdHlsZX0sZ2V0UG9zWDpmdW5jdGlv bihiKXtyZXR1cm4gRXh0LmxpYi5Eb20uZ2V0WChiKX0sZ2V0UG9zWTpmdW5jdGlvbihiKXtyZXR1 cm4gRXh0LmxpYi5Eb20uZ2V0WShiKX0sc3dhcE5vZGU6ZnVuY3Rpb24oZCxiKXtpZihkLnN3YXBO b2RlKXtkLnN3YXBOb2RlKGIpfWVsc2V7dmFyIGU9Yi5wYXJlbnROb2RlO3ZhciBjPWIubmV4dFNp Ymxpbmc7aWYoYz09ZCl7ZS5pbnNlcnRCZWZvcmUoZCxiKX1lbHNle2lmKGI9PWQubmV4dFNpYmxp bmcpe2UuaW5zZXJ0QmVmb3JlKGIsZCl9ZWxzZXtkLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGIs ZCk7ZS5pbnNlcnRCZWZvcmUoZCxjKX19fX0sZ2V0U2Nyb2xsOmZ1bmN0aW9uKCl7dmFyIGQsYixl PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxjPWRvY3VtZW50LmJvZHk7aWYoZSYmKGUuc2Nyb2xs VG9wfHxlLnNjcm9sbExlZnQpKXtkPWUuc2Nyb2xsVG9wO2I9ZS5zY3JvbGxMZWZ0fWVsc2V7aWYo Yyl7ZD1jLnNjcm9sbFRvcDtiPWMuc2Nyb2xsTGVmdH1lbHNle319cmV0dXJue3RvcDpkLGxlZnQ6 Yn19LGdldFN0eWxlOmZ1bmN0aW9uKGMsYil7cmV0dXJuIEV4dC5mbHkoYykuZ2V0U3R5bGUoYil9 LGdldFNjcm9sbFRvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFNjcm9sbCgpLnRvcH0sZ2V0 U2Nyb2xsTGVmdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFNjcm9sbCgpLmxlZnR9LG1vdmVU b0VsOmZ1bmN0aW9uKGIsZCl7dmFyIGM9RXh0LmxpYi5Eb20uZ2V0WFkoZCk7RXh0LmxpYi5Eb20u c2V0WFkoYixjKX0sbnVtZXJpY1NvcnQ6ZnVuY3Rpb24oZCxjKXtyZXR1cm4oZC1jKX0sX3RpbWVv dXRDb3VudDowLF9hZGRMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt2YXIgYj1FeHQuZGQuRERNO2lmKEV4 dC5saWIuRXZlbnQmJmRvY3VtZW50KXtiLl9vbkxvYWQoKX1lbHNle2lmKGIuX3RpbWVvdXRDb3Vu dD4yMDAwKXt9ZWxzZXtzZXRUaW1lb3V0KGIuX2FkZExpc3RlbmVycywxMCk7aWYoZG9jdW1lbnQm JmRvY3VtZW50LmJvZHkpe2IuX3RpbWVvdXRDb3VudCs9MX19fX0saGFuZGxlV2FzQ2xpY2tlZDpm dW5jdGlvbihiLGQpe2lmKHRoaXMuaXNIYW5kbGUoZCxiLmlkKSl7cmV0dXJuIHRydWV9ZWxzZXt2 YXIgYz1iLnBhcmVudE5vZGU7d2hpbGUoYyl7aWYodGhpcy5pc0hhbmRsZShkLGMuaWQpKXtyZXR1 cm4gdHJ1ZX1lbHNle2M9Yy5wYXJlbnROb2RlfX19cmV0dXJuIGZhbHNlfX19KCk7RXh0LmRkLkRE TT1FeHQuZGQuRHJhZ0Ryb3BNZ3I7RXh0LmRkLkRETS5fYWRkTGlzdGVuZXJzKCl9RXh0LmRkLkRE PWZ1bmN0aW9uKGMsYSxiKXtpZihjKXt0aGlzLmluaXQoYyxhLGIpfX07RXh0LmV4dGVuZChFeHQu ZGQuREQsRXh0LmRkLkRyYWdEcm9wLHtzY3JvbGw6dHJ1ZSxhdXRvT2Zmc2V0OmZ1bmN0aW9uKGMs Yil7dmFyIGE9Yy10aGlzLnN0YXJ0UGFnZVg7dmFyIGQ9Yi10aGlzLnN0YXJ0UGFnZVk7dGhpcy5z ZXREZWx0YShhLGQpfSxzZXREZWx0YTpmdW5jdGlvbihiLGEpe3RoaXMuZGVsdGFYPWI7dGhpcy5k ZWx0YVk9YX0sc2V0RHJhZ0VsUG9zOmZ1bmN0aW9uKGMsYil7dmFyIGE9dGhpcy5nZXREcmFnRWwo KTt0aGlzLmFsaWduRWxXaXRoTW91c2UoYSxjLGIpfSxhbGlnbkVsV2l0aE1vdXNlOmZ1bmN0aW9u KGMsaCxnKXt2YXIgZT10aGlzLmdldFRhcmdldENvb3JkKGgsZyk7dmFyIGI9Yy5kb20/YzpFeHQu Zmx5KGMsIl9kZCIpO2lmKCF0aGlzLmRlbHRhU2V0WFkpe3ZhciBpPVtlLngsZS55XTtiLnNldFhZ KGkpO3ZhciBkPWIuZ2V0TGVmdCh0cnVlKTt2YXIgYT1iLmdldFRvcCh0cnVlKTt0aGlzLmRlbHRh U2V0WFk9W2QtZS54LGEtZS55XX1lbHNle2Iuc2V0TGVmdFRvcChlLngrdGhpcy5kZWx0YVNldFhZ WzBdLGUueSt0aGlzLmRlbHRhU2V0WFlbMV0pfXRoaXMuY2FjaGVQb3NpdGlvbihlLngsZS55KTt0 aGlzLmF1dG9TY3JvbGwoZS54LGUueSxjLm9mZnNldEhlaWdodCxjLm9mZnNldFdpZHRoKTtyZXR1 cm4gZX0sY2FjaGVQb3NpdGlvbjpmdW5jdGlvbihiLGEpe2lmKGIpe3RoaXMubGFzdFBhZ2VYPWI7 dGhpcy5sYXN0UGFnZVk9YX1lbHNle3ZhciBjPUV4dC5saWIuRG9tLmdldFhZKHRoaXMuZ2V0RWwo KSk7dGhpcy5sYXN0UGFnZVg9Y1swXTt0aGlzLmxhc3RQYWdlWT1jWzFdfX0sYXV0b1Njcm9sbDpm dW5jdGlvbihsLGssZSxtKXtpZih0aGlzLnNjcm9sbCl7dmFyIG49RXh0LmxpYi5Eb20uZ2V0Vmll d0hlaWdodCgpO3ZhciBiPUV4dC5saWIuRG9tLmdldFZpZXdXaWR0aCgpO3ZhciBwPXRoaXMuRERN LmdldFNjcm9sbFRvcCgpO3ZhciBkPXRoaXMuRERNLmdldFNjcm9sbExlZnQoKTt2YXIgaj1lK2s7 dmFyIG89bStsO3ZhciBpPShuK3Atay10aGlzLmRlbHRhWSk7dmFyIGc9KGIrZC1sLXRoaXMuZGVs dGFYKTt2YXIgYz00MDt2YXIgYT0oZG9jdW1lbnQuYWxsKT84MDozMDtpZihqPm4mJmk8Yyl7d2lu ZG93LnNjcm9sbFRvKGQscCthKX1pZihrPHAmJnA+MCYmay1wPGMpe3dpbmRvdy5zY3JvbGxUbyhk LHAtYSl9aWYobz5iJiZnPGMpe3dpbmRvdy5zY3JvbGxUbyhkK2EscCl9aWYobDxkJiZkPjAmJmwt ZDxjKXt3aW5kb3cuc2Nyb2xsVG8oZC1hLHApfX19LGdldFRhcmdldENvb3JkOmZ1bmN0aW9uKGMs Yil7dmFyIGE9Yy10aGlzLmRlbHRhWDt2YXIgZD1iLXRoaXMuZGVsdGFZO2lmKHRoaXMuY29uc3Ry YWluWCl7aWYoYTx0aGlzLm1pblgpe2E9dGhpcy5taW5YfWlmKGE+dGhpcy5tYXhYKXthPXRoaXMu bWF4WH19aWYodGhpcy5jb25zdHJhaW5ZKXtpZihkPHRoaXMubWluWSl7ZD10aGlzLm1pbll9aWYo ZD50aGlzLm1heFkpe2Q9dGhpcy5tYXhZfX1hPXRoaXMuZ2V0VGljayhhLHRoaXMueFRpY2tzKTtk PXRoaXMuZ2V0VGljayhkLHRoaXMueVRpY2tzKTtyZXR1cm57eDphLHk6ZH19LGFwcGx5Q29uZmln OmZ1bmN0aW9uKCl7RXh0LmRkLkRELnN1cGVyY2xhc3MuYXBwbHlDb25maWcuY2FsbCh0aGlzKTt0 aGlzLnNjcm9sbD0odGhpcy5jb25maWcuc2Nyb2xsIT09ZmFsc2UpfSxiNE1vdXNlRG93bjpmdW5j dGlvbihhKXt0aGlzLmF1dG9PZmZzZXQoYS5nZXRQYWdlWCgpLGEuZ2V0UGFnZVkoKSl9LGI0RHJh ZzpmdW5jdGlvbihhKXt0aGlzLnNldERyYWdFbFBvcyhhLmdldFBhZ2VYKCksYS5nZXRQYWdlWSgp KX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4oIkREICIrdGhpcy5pZCl9fSk7RXh0LmRkLkRE UHJveHk9ZnVuY3Rpb24oYyxhLGIpe2lmKGMpe3RoaXMuaW5pdChjLGEsYik7dGhpcy5pbml0RnJh bWUoKX19O0V4dC5kZC5ERFByb3h5LmRyYWdFbElkPSJ5Z2RkZmRpdiI7RXh0LmV4dGVuZChFeHQu ZGQuRERQcm94eSxFeHQuZGQuREQse3Jlc2l6ZUZyYW1lOnRydWUsY2VudGVyRnJhbWU6ZmFsc2Us Y3JlYXRlRnJhbWU6ZnVuY3Rpb24oKXt2YXIgYj10aGlzO3ZhciBhPWRvY3VtZW50LmJvZHk7aWYo IWF8fCFhLmZpcnN0Q2hpbGQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtiLmNyZWF0ZUZyYW1lKCl9 LDUwKTtyZXR1cm59dmFyIGQ9dGhpcy5nZXREcmFnRWwoKTtpZighZCl7ZD1kb2N1bWVudC5jcmVh dGVFbGVtZW50KCJkaXYiKTtkLmlkPXRoaXMuZHJhZ0VsSWQ7dmFyIGM9ZC5zdHlsZTtjLnBvc2l0 aW9uPSJhYnNvbHV0ZSI7Yy52aXNpYmlsaXR5PSJoaWRkZW4iO2MuY3Vyc29yPSJtb3ZlIjtjLmJv cmRlcj0iMnB4IHNvbGlkICNhYWEiO2MuekluZGV4PTk5OTthLmluc2VydEJlZm9yZShkLGEuZmly c3RDaGlsZCl9fSxpbml0RnJhbWU6ZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZUZyYW1lKCl9LGFwcGx5 Q29uZmlnOmZ1bmN0aW9uKCl7RXh0LmRkLkREUHJveHkuc3VwZXJjbGFzcy5hcHBseUNvbmZpZy5j YWxsKHRoaXMpO3RoaXMucmVzaXplRnJhbWU9KHRoaXMuY29uZmlnLnJlc2l6ZUZyYW1lIT09ZmFs c2UpO3RoaXMuY2VudGVyRnJhbWU9KHRoaXMuY29uZmlnLmNlbnRlckZyYW1lKTt0aGlzLnNldERy YWdFbElkKHRoaXMuY29uZmlnLmRyYWdFbElkfHxFeHQuZGQuRERQcm94eS5kcmFnRWxJZCl9LHNo b3dGcmFtZTpmdW5jdGlvbihlLGQpe3ZhciBjPXRoaXMuZ2V0RWwoKTt2YXIgYT10aGlzLmdldERy YWdFbCgpO3ZhciBiPWEuc3R5bGU7dGhpcy5fcmVzaXplUHJveHkoKTtpZih0aGlzLmNlbnRlckZy YW1lKXt0aGlzLnNldERlbHRhKE1hdGgucm91bmQocGFyc2VJbnQoYi53aWR0aCwxMCkvMiksTWF0 aC5yb3VuZChwYXJzZUludChiLmhlaWdodCwxMCkvMikpfXRoaXMuc2V0RHJhZ0VsUG9zKGUsZCk7 RXh0LmZseShhKS5zaG93KCl9LF9yZXNpemVQcm94eTpmdW5jdGlvbigpe2lmKHRoaXMucmVzaXpl RnJhbWUpe3ZhciBhPXRoaXMuZ2V0RWwoKTtFeHQuZmx5KHRoaXMuZ2V0RHJhZ0VsKCkpLnNldFNp emUoYS5vZmZzZXRXaWR0aCxhLm9mZnNldEhlaWdodCl9fSxiNE1vdXNlRG93bjpmdW5jdGlvbihi KXt2YXIgYT1iLmdldFBhZ2VYKCk7dmFyIGM9Yi5nZXRQYWdlWSgpO3RoaXMuYXV0b09mZnNldChh LGMpO3RoaXMuc2V0RHJhZ0VsUG9zKGEsYyl9LGI0U3RhcnREcmFnOmZ1bmN0aW9uKGEsYil7dGhp cy5zaG93RnJhbWUoYSxiKX0sYjRFbmREcmFnOmZ1bmN0aW9uKGEpe0V4dC5mbHkodGhpcy5nZXRE cmFnRWwoKSkuaGlkZSgpfSxlbmREcmFnOmZ1bmN0aW9uKGMpe3ZhciBiPXRoaXMuZ2V0RWwoKTt2 YXIgYT10aGlzLmdldERyYWdFbCgpO2Euc3R5bGUudmlzaWJpbGl0eT0iIjt0aGlzLmJlZm9yZU1v dmUoKTtiLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7RXh0LmRkLkRETS5tb3ZlVG9FbChiLGEp O2Euc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjtiLnN0eWxlLnZpc2liaWxpdHk9IiI7dGhpcy5h ZnRlckRyYWcoKX0sYmVmb3JlTW92ZTpmdW5jdGlvbigpe30sYWZ0ZXJEcmFnOmZ1bmN0aW9uKCl7 fSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybigiRERQcm94eSAiK3RoaXMuaWQpfX0pO0V4dC5k ZC5ERFRhcmdldD1mdW5jdGlvbihjLGEsYil7aWYoYyl7dGhpcy5pbml0VGFyZ2V0KGMsYSxiKX19 O0V4dC5leHRlbmQoRXh0LmRkLkREVGFyZ2V0LEV4dC5kZC5EcmFnRHJvcCx7dG9TdHJpbmc6ZnVu Y3Rpb24oKXtyZXR1cm4oIkREVGFyZ2V0ICIrdGhpcy5pZCl9fSk7RXh0LmRkLkRyYWdUcmFja2Vy PWZ1bmN0aW9uKGEpe0V4dC5hcHBseSh0aGlzLGEpO3RoaXMuYWRkRXZlbnRzKCJtb3VzZWRvd24i LCJtb3VzZXVwIiwibW91c2Vtb3ZlIiwiZHJhZ3N0YXJ0IiwiZHJhZ2VuZCIsImRyYWciKTt0aGlz LmRyYWdSZWdpb249bmV3IEV4dC5saWIuUmVnaW9uKDAsMCwwLDApO2lmKHRoaXMuZWwpe3RoaXMu aW5pdEVsKHRoaXMuZWwpfX07RXh0LmV4dGVuZChFeHQuZGQuRHJhZ1RyYWNrZXIsRXh0LnV0aWwu T2JzZXJ2YWJsZSx7YWN0aXZlOmZhbHNlLHRvbGVyYW5jZTo1LGF1dG9TdGFydDpmYWxzZSxpbml0 RWw6ZnVuY3Rpb24oYSl7dGhpcy5lbD1FeHQuZ2V0KGEpO2Eub24oIm1vdXNlZG93biIsdGhpcy5v bk1vdXNlRG93bix0aGlzLHRoaXMuZGVsZWdhdGU/e2RlbGVnYXRlOnRoaXMuZGVsZWdhdGV9OnVu ZGVmaW5lZCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsLnVuKCJtb3VzZWRvd24iLHRoaXMu b25Nb3VzZURvd24sdGhpcyl9LG9uTW91c2VEb3duOmZ1bmN0aW9uKGMsYil7aWYodGhpcy5maXJl RXZlbnQoIm1vdXNlZG93biIsdGhpcyxjKSE9PWZhbHNlJiZ0aGlzLm9uQmVmb3JlU3RhcnQoYykh PT1mYWxzZSl7dGhpcy5zdGFydFhZPXRoaXMubGFzdFhZPWMuZ2V0WFkoKTt0aGlzLmRyYWdUYXJn ZXQ9dGhpcy5kZWxlZ2F0ZT9iOnRoaXMuZWwuZG9tO2lmKHRoaXMucHJldmVudERlZmF1bHQhPT1m YWxzZSl7Yy5wcmV2ZW50RGVmYXVsdCgpfXZhciBhPUV4dC5nZXREb2MoKTthLm9uKCJtb3VzZXVw Iix0aGlzLm9uTW91c2VVcCx0aGlzKTthLm9uKCJtb3VzZW1vdmUiLHRoaXMub25Nb3VzZU1vdmUs dGhpcyk7YS5vbigic2VsZWN0c3RhcnQiLHRoaXMuc3RvcFNlbGVjdCx0aGlzKTtpZih0aGlzLmF1 dG9TdGFydCl7dGhpcy50aW1lcj10aGlzLnRyaWdnZXJTdGFydC5kZWZlcih0aGlzLmF1dG9TdGFy dD09PXRydWU/MTAwMDp0aGlzLmF1dG9TdGFydCx0aGlzKX19fSxvbk1vdXNlTW92ZTpmdW5jdGlv bihkLGMpe2lmKHRoaXMuYWN0aXZlJiZFeHQuaXNJRSYmIWQuYnJvd3NlckV2ZW50LmJ1dHRvbil7 ZC5wcmV2ZW50RGVmYXVsdCgpO3RoaXMub25Nb3VzZVVwKGQpO3JldHVybn1kLnByZXZlbnREZWZh dWx0KCk7dmFyIGI9ZC5nZXRYWSgpLGE9dGhpcy5zdGFydFhZO3RoaXMubGFzdFhZPWI7aWYoIXRo aXMuYWN0aXZlKXtpZihNYXRoLmFicyhhWzBdLWJbMF0pPnRoaXMudG9sZXJhbmNlfHxNYXRoLmFi cyhhWzFdLWJbMV0pPnRoaXMudG9sZXJhbmNlKXt0aGlzLnRyaWdnZXJTdGFydCgpfWVsc2V7cmV0 dXJufX10aGlzLmZpcmVFdmVudCgibW91c2Vtb3ZlIix0aGlzLGQpO3RoaXMub25EcmFnKGQpO3Ro aXMuZmlyZUV2ZW50KCJkcmFnIix0aGlzLGQpfSxvbk1vdXNlVXA6ZnVuY3Rpb24oYyl7dmFyIGI9 RXh0LmdldERvYygpO2IudW4oIm1vdXNlbW92ZSIsdGhpcy5vbk1vdXNlTW92ZSx0aGlzKTtiLnVu KCJtb3VzZXVwIix0aGlzLm9uTW91c2VVcCx0aGlzKTtiLnVuKCJzZWxlY3RzdGFydCIsdGhpcy5z dG9wU2VsZWN0LHRoaXMpO2MucHJldmVudERlZmF1bHQoKTt0aGlzLmNsZWFyU3RhcnQoKTt2YXIg YT10aGlzLmFjdGl2ZTt0aGlzLmFjdGl2ZT1mYWxzZTtkZWxldGUgdGhpcy5lbFJlZ2lvbjt0aGlz LmZpcmVFdmVudCgibW91c2V1cCIsdGhpcyxjKTtpZihhKXt0aGlzLm9uRW5kKGMpO3RoaXMuZmly ZUV2ZW50KCJkcmFnZW5kIix0aGlzLGMpfX0sdHJpZ2dlclN0YXJ0OmZ1bmN0aW9uKGEpe3RoaXMu Y2xlYXJTdGFydCgpO3RoaXMuYWN0aXZlPXRydWU7dGhpcy5vblN0YXJ0KHRoaXMuc3RhcnRYWSk7 dGhpcy5maXJlRXZlbnQoImRyYWdzdGFydCIsdGhpcyx0aGlzLnN0YXJ0WFkpfSxjbGVhclN0YXJ0 OmZ1bmN0aW9uKCl7aWYodGhpcy50aW1lcil7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO2RlbGV0 ZSB0aGlzLnRpbWVyfX0sc3RvcFNlbGVjdDpmdW5jdGlvbihhKXthLnN0b3BFdmVudCgpO3JldHVy biBmYWxzZX0sb25CZWZvcmVTdGFydDpmdW5jdGlvbihhKXt9LG9uU3RhcnQ6ZnVuY3Rpb24oYSl7 fSxvbkRyYWc6ZnVuY3Rpb24oYSl7fSxvbkVuZDpmdW5jdGlvbihhKXt9LGdldERyYWdUYXJnZXQ6 ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcmFnVGFyZ2V0fSxnZXREcmFnQ3Q6ZnVuY3Rpb24oKXty ZXR1cm4gdGhpcy5lbH0sZ2V0WFk6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/dGhpcy5jb25zdHJhaW5N b2Rlc1thXS5jYWxsKHRoaXMsdGhpcy5sYXN0WFkpOnRoaXMubGFzdFhZfSxnZXRPZmZzZXQ6ZnVu Y3Rpb24oYyl7dmFyIGI9dGhpcy5nZXRYWShjKTt2YXIgYT10aGlzLnN0YXJ0WFk7cmV0dXJuW2Fb MF0tYlswXSxhWzFdLWJbMV1dfSxjb25zdHJhaW5Nb2Rlczp7cG9pbnQ6ZnVuY3Rpb24oYil7aWYo IXRoaXMuZWxSZWdpb24pe3RoaXMuZWxSZWdpb249dGhpcy5nZXREcmFnQ3QoKS5nZXRSZWdpb24o KX12YXIgYT10aGlzLmRyYWdSZWdpb247YS5sZWZ0PWJbMF07YS50b3A9YlsxXTthLnJpZ2h0PWJb MF07YS5ib3R0b209YlsxXTthLmNvbnN0cmFpblRvKHRoaXMuZWxSZWdpb24pO3JldHVyblthLmxl ZnQsYS50b3BdfX19KTtFeHQuZGQuU2Nyb2xsTWFuYWdlcj1mdW5jdGlvbigpe3ZhciBjPUV4dC5k ZC5EcmFnRHJvcE1ncjt2YXIgZT17fTt2YXIgYj1udWxsO3ZhciBpPXt9O3ZhciBoPWZ1bmN0aW9u KGwpe2I9bnVsbDthKCl9O3ZhciBqPWZ1bmN0aW9uKCl7aWYoYy5kcmFnQ3VycmVudCl7Yy5yZWZy ZXNoQ2FjaGUoYy5kcmFnQ3VycmVudC5ncm91cHMpfX07dmFyIGQ9ZnVuY3Rpb24oKXtpZihjLmRy YWdDdXJyZW50KXt2YXIgbD1FeHQuZGQuU2Nyb2xsTWFuYWdlcjt2YXIgbT1pLmVsLmRkU2Nyb2xs Q29uZmlnP2kuZWwuZGRTY3JvbGxDb25maWcuaW5jcmVtZW50OmwuaW5jcmVtZW50O2lmKCFsLmFu aW1hdGUpe2lmKGkuZWwuc2Nyb2xsKGkuZGlyLG0pKXtqKCl9fWVsc2V7aS5lbC5zY3JvbGwoaS5k aXIsbSx0cnVlLGwuYW5pbUR1cmF0aW9uLGopfX19O3ZhciBhPWZ1bmN0aW9uKCl7aWYoaS5pZCl7 Y2xlYXJJbnRlcnZhbChpLmlkKX1pLmlkPTA7aS5lbD1udWxsO2kuZGlyPSIifTt2YXIgZz1mdW5j dGlvbihtLGwpe2EoKTtpLmVsPW07aS5kaXI9bDt2YXIgbj0obS5kZFNjcm9sbENvbmZpZyYmbS5k ZFNjcm9sbENvbmZpZy5mcmVxdWVuY3kpP20uZGRTY3JvbGxDb25maWcuZnJlcXVlbmN5OkV4dC5k ZC5TY3JvbGxNYW5hZ2VyLmZyZXF1ZW5jeTtpLmlkPXNldEludGVydmFsKGQsbil9O3ZhciBrPWZ1 bmN0aW9uKG8scSl7aWYocXx8IWMuZHJhZ0N1cnJlbnQpe3JldHVybn12YXIgcz1FeHQuZGQuU2Ny b2xsTWFuYWdlcjtpZighYnx8YiE9Yy5kcmFnQ3VycmVudCl7Yj1jLmRyYWdDdXJyZW50O3MucmVm cmVzaENhY2hlKCl9dmFyIHQ9RXh0LmxpYi5FdmVudC5nZXRYWShvKTt2YXIgdT1uZXcgRXh0Lmxp Yi5Qb2ludCh0WzBdLHRbMV0pO2Zvcih2YXIgbSBpbiBlKXt2YXIgbj1lW21dLGw9bi5fcmVnaW9u O3ZhciBwPW4uZGRTY3JvbGxDb25maWc/bi5kZFNjcm9sbENvbmZpZzpzO2lmKGwmJmwuY29udGFp bnModSkmJm4uaXNTY3JvbGxhYmxlKCkpe2lmKGwuYm90dG9tLXUueTw9cC52dGhyZXNoKXtpZihp LmVsIT1uKXtnKG4sImRvd24iKX1yZXR1cm59ZWxzZXtpZihsLnJpZ2h0LXUueDw9cC5odGhyZXNo KXtpZihpLmVsIT1uKXtnKG4sImxlZnQiKX1yZXR1cm59ZWxzZXtpZih1LnktbC50b3A8PXAudnRo cmVzaCl7aWYoaS5lbCE9bil7ZyhuLCJ1cCIpfXJldHVybn1lbHNle2lmKHUueC1sLmxlZnQ8PXAu aHRocmVzaCl7aWYoaS5lbCE9bil7ZyhuLCJyaWdodCIpfXJldHVybn19fX19fWEoKX07Yy5maXJl RXZlbnRzPWMuZmlyZUV2ZW50cy5jcmVhdGVTZXF1ZW5jZShrLGMpO2Muc3RvcERyYWc9Yy5zdG9w RHJhZy5jcmVhdGVTZXF1ZW5jZShoLGMpO3JldHVybntyZWdpc3RlcjpmdW5jdGlvbihuKXtpZihF eHQuaXNBcnJheShuKSl7Zm9yKHZhciBtPTAsbD1uLmxlbmd0aDttPGw7bSsrKXt0aGlzLnJlZ2lz dGVyKG5bbV0pfX1lbHNle249RXh0LmdldChuKTtlW24uaWRdPW59fSx1bnJlZ2lzdGVyOmZ1bmN0 aW9uKG4pe2lmKEV4dC5pc0FycmF5KG4pKXtmb3IodmFyIG09MCxsPW4ubGVuZ3RoO208bDttKysp e3RoaXMudW5yZWdpc3RlcihuW21dKX19ZWxzZXtuPUV4dC5nZXQobik7ZGVsZXRlIGVbbi5pZF19 fSx2dGhyZXNoOjI1LGh0aHJlc2g6MjUsaW5jcmVtZW50OjEwMCxmcmVxdWVuY3k6NTAwLGFuaW1h dGU6dHJ1ZSxhbmltRHVyYXRpb246MC40LHJlZnJlc2hDYWNoZTpmdW5jdGlvbigpe2Zvcih2YXIg bCBpbiBlKXtpZih0eXBlb2YgZVtsXT09Im9iamVjdCIpe2VbbF0uX3JlZ2lvbj1lW2xdLmdldFJl Z2lvbigpfX19fX0oKTtFeHQuZGQuUmVnaXN0cnk9ZnVuY3Rpb24oKXt2YXIgZD17fTt2YXIgYj17 fTt2YXIgYT0wO3ZhciBjPWZ1bmN0aW9uKGcsZSl7aWYodHlwZW9mIGc9PSJzdHJpbmciKXtyZXR1 cm4gZ312YXIgaD1nLmlkO2lmKCFoJiZlIT09ZmFsc2Upe2g9ImV4dGRkLSIrKCsrYSk7Zy5pZD1o fXJldHVybiBofTtyZXR1cm57cmVnaXN0ZXI6ZnVuY3Rpb24oaixrKXtrPWt8fHt9O2lmKHR5cGVv ZiBqPT0ic3RyaW5nIil7aj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChqKX1rLmRkZWw9ajtkW2Mo aildPWs7aWYoay5pc0hhbmRsZSE9PWZhbHNlKXtiW2suZGRlbC5pZF09a31pZihrLmhhbmRsZXMp e3ZhciBoPWsuaGFuZGxlcztmb3IodmFyIGc9MCxlPWgubGVuZ3RoO2c8ZTtnKyspe2JbYyhoW2dd KV09a319fSx1bnJlZ2lzdGVyOmZ1bmN0aW9uKGope3ZhciBsPWMoaixmYWxzZSk7dmFyIGs9ZFts XTtpZihrKXtkZWxldGUgZFtsXTtpZihrLmhhbmRsZXMpe3ZhciBoPWsuaGFuZGxlcztmb3IodmFy IGc9MCxlPWgubGVuZ3RoO2c8ZTtnKyspe2RlbGV0ZSBiW2MoaFtnXSxmYWxzZSldfX19fSxnZXRI YW5kbGU6ZnVuY3Rpb24oZSl7aWYodHlwZW9mIGUhPSJzdHJpbmciKXtlPWUuaWR9cmV0dXJuIGJb ZV19LGdldEhhbmRsZUZyb21FdmVudDpmdW5jdGlvbihoKXt2YXIgZz1FeHQubGliLkV2ZW50Lmdl dFRhcmdldChoKTtyZXR1cm4gZz9iW2cuaWRdOm51bGx9LGdldFRhcmdldDpmdW5jdGlvbihlKXtp Zih0eXBlb2YgZSE9InN0cmluZyIpe2U9ZS5pZH1yZXR1cm4gZFtlXX0sZ2V0VGFyZ2V0RnJvbUV2 ZW50OmZ1bmN0aW9uKGgpe3ZhciBnPUV4dC5saWIuRXZlbnQuZ2V0VGFyZ2V0KGgpO3JldHVybiBn P2RbZy5pZF18fGJbZy5pZF06bnVsbH19fSgpO0V4dC5kZC5TdGF0dXNQcm94eT1mdW5jdGlvbihh KXtFeHQuYXBwbHkodGhpcyxhKTt0aGlzLmlkPXRoaXMuaWR8fEV4dC5pZCgpO3RoaXMuZWw9bmV3 IEV4dC5MYXllcih7ZGg6e2lkOnRoaXMuaWQsdGFnOiJkaXYiLGNsczoieC1kZC1kcmFnLXByb3h5 ICIrdGhpcy5kcm9wTm90QWxsb3dlZCxjaGlsZHJlbjpbe3RhZzoiZGl2IixjbHM6IngtZGQtZHJv cC1pY29uIn0se3RhZzoiZGl2IixjbHM6IngtZGQtZHJhZy1naG9zdCJ9XX0sc2hhZG93OiFhfHxh LnNoYWRvdyE9PWZhbHNlfSk7dGhpcy5naG9zdD1FeHQuZ2V0KHRoaXMuZWwuZG9tLmNoaWxkTm9k ZXNbMV0pO3RoaXMuZHJvcFN0YXR1cz10aGlzLmRyb3BOb3RBbGxvd2VkfTtFeHQuZGQuU3RhdHVz UHJveHkucHJvdG90eXBlPXtkcm9wQWxsb3dlZDoieC1kZC1kcm9wLW9rIixkcm9wTm90QWxsb3dl ZDoieC1kZC1kcm9wLW5vZHJvcCIsc2V0U3RhdHVzOmZ1bmN0aW9uKGEpe2E9YXx8dGhpcy5kcm9w Tm90QWxsb3dlZDtpZih0aGlzLmRyb3BTdGF0dXMhPWEpe3RoaXMuZWwucmVwbGFjZUNsYXNzKHRo aXMuZHJvcFN0YXR1cyxhKTt0aGlzLmRyb3BTdGF0dXM9YX19LHJlc2V0OmZ1bmN0aW9uKGEpe3Ro aXMuZWwuZG9tLmNsYXNzTmFtZT0ieC1kZC1kcmFnLXByb3h5ICIrdGhpcy5kcm9wTm90QWxsb3dl ZDt0aGlzLmRyb3BTdGF0dXM9dGhpcy5kcm9wTm90QWxsb3dlZDtpZihhKXt0aGlzLmdob3N0LnVw ZGF0ZSgiIil9fSx1cGRhdGU6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXt0aGlz Lmdob3N0LnVwZGF0ZShhKX1lbHNle3RoaXMuZ2hvc3QudXBkYXRlKCIiKTthLnN0eWxlLm1hcmdp bj0iMCI7dGhpcy5naG9zdC5kb20uYXBwZW5kQ2hpbGQoYSl9dmFyIGI9dGhpcy5naG9zdC5kb20u Zmlyc3RDaGlsZDtpZihiKXtFeHQuZmx5KGIpLnNldFN0eWxlKCJmbG9hdCIsIm5vbmUiKX19LGdl dEVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWx9LGdldEdob3N0OmZ1bmN0aW9uKCl7cmV0dXJu IHRoaXMuZ2hvc3R9LGhpZGU6ZnVuY3Rpb24oYSl7dGhpcy5lbC5oaWRlKCk7aWYoYSl7dGhpcy5y ZXNldCh0cnVlKX19LHN0b3A6ZnVuY3Rpb24oKXtpZih0aGlzLmFuaW0mJnRoaXMuYW5pbS5pc0Fu aW1hdGVkJiZ0aGlzLmFuaW0uaXNBbmltYXRlZCgpKXt0aGlzLmFuaW0uc3RvcCgpfX0sc2hvdzpm dW5jdGlvbigpe3RoaXMuZWwuc2hvdygpfSxzeW5jOmZ1bmN0aW9uKCl7dGhpcy5lbC5zeW5jKCl9 LHJlcGFpcjpmdW5jdGlvbihiLGMsYSl7dGhpcy5jYWxsYmFjaz1jO3RoaXMuc2NvcGU9YTtpZihi JiZ0aGlzLmFuaW1SZXBhaXIhPT1mYWxzZSl7dGhpcy5lbC5hZGRDbGFzcygieC1kZC1kcmFnLXJl cGFpciIpO3RoaXMuZWwuaGlkZVVuZGVycyh0cnVlKTt0aGlzLmFuaW09dGhpcy5lbC5zaGlmdCh7 ZHVyYXRpb246dGhpcy5yZXBhaXJEdXJhdGlvbnx8MC41LGVhc2luZzoiZWFzZU91dCIseHk6Yixz dG9wRng6dHJ1ZSxjYWxsYmFjazp0aGlzLmFmdGVyUmVwYWlyLHNjb3BlOnRoaXN9KX1lbHNle3Ro aXMuYWZ0ZXJSZXBhaXIoKX19LGFmdGVyUmVwYWlyOmZ1bmN0aW9uKCl7dGhpcy5oaWRlKHRydWUp O2lmKHR5cGVvZiB0aGlzLmNhbGxiYWNrPT0iZnVuY3Rpb24iKXt0aGlzLmNhbGxiYWNrLmNhbGwo dGhpcy5zY29wZXx8dGhpcyl9dGhpcy5jYWxsYmFjaz1udWxsO3RoaXMuc2NvcGU9bnVsbH19O0V4 dC5kZC5EcmFnU291cmNlPWZ1bmN0aW9uKGIsYSl7dGhpcy5lbD1FeHQuZ2V0KGIpO2lmKCF0aGlz LmRyYWdEYXRhKXt0aGlzLmRyYWdEYXRhPXt9fUV4dC5hcHBseSh0aGlzLGEpO2lmKCF0aGlzLnBy b3h5KXt0aGlzLnByb3h5PW5ldyBFeHQuZGQuU3RhdHVzUHJveHkoKX1FeHQuZGQuRHJhZ1NvdXJj ZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyx0aGlzLmVsLmRvbSx0aGlzLmRkR3Jv dXB8fHRoaXMuZ3JvdXAse2RyYWdFbElkOnRoaXMucHJveHkuaWQscmVzaXplRnJhbWU6ZmFsc2Us aXNUYXJnZXQ6ZmFsc2Usc2Nyb2xsOnRoaXMuc2Nyb2xsPT09dHJ1ZX0pO3RoaXMuZHJhZ2dpbmc9 ZmFsc2V9O0V4dC5leHRlbmQoRXh0LmRkLkRyYWdTb3VyY2UsRXh0LmRkLkREUHJveHkse2Ryb3BB bGxvd2VkOiJ4LWRkLWRyb3Atb2siLGRyb3BOb3RBbGxvd2VkOiJ4LWRkLWRyb3Atbm9kcm9wIixn ZXREcmFnRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kcmFnRGF0YX0sb25EcmFnRW50ZXI6 ZnVuY3Rpb24oYyxkKXt2YXIgYj1FeHQuZGQuRHJhZ0Ryb3BNZ3IuZ2V0RERCeUlkKGQpO3RoaXMu Y2FjaGVkVGFyZ2V0PWI7aWYodGhpcy5iZWZvcmVEcmFnRW50ZXIoYixjLGQpIT09ZmFsc2Upe2lm KGIuaXNOb3RpZnlUYXJnZXQpe3ZhciBhPWIubm90aWZ5RW50ZXIodGhpcyxjLHRoaXMuZHJhZ0Rh dGEpO3RoaXMucHJveHkuc2V0U3RhdHVzKGEpfWVsc2V7dGhpcy5wcm94eS5zZXRTdGF0dXModGhp cy5kcm9wQWxsb3dlZCl9aWYodGhpcy5hZnRlckRyYWdFbnRlcil7dGhpcy5hZnRlckRyYWdFbnRl cihiLGMsZCl9fX0sYmVmb3JlRHJhZ0VudGVyOmZ1bmN0aW9uKGIsYSxjKXtyZXR1cm4gdHJ1ZX0s YWxpZ25FbFdpdGhNb3VzZTpmdW5jdGlvbigpe0V4dC5kZC5EcmFnU291cmNlLnN1cGVyY2xhc3Mu YWxpZ25FbFdpdGhNb3VzZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5wcm94eS5zeW5jKCl9 LG9uRHJhZ092ZXI6ZnVuY3Rpb24oYyxkKXt2YXIgYj10aGlzLmNhY2hlZFRhcmdldHx8RXh0LmRk LkRyYWdEcm9wTWdyLmdldEREQnlJZChkKTtpZih0aGlzLmJlZm9yZURyYWdPdmVyKGIsYyxkKSE9 PWZhbHNlKXtpZihiLmlzTm90aWZ5VGFyZ2V0KXt2YXIgYT1iLm5vdGlmeU92ZXIodGhpcyxjLHRo aXMuZHJhZ0RhdGEpO3RoaXMucHJveHkuc2V0U3RhdHVzKGEpfWlmKHRoaXMuYWZ0ZXJEcmFnT3Zl cil7dGhpcy5hZnRlckRyYWdPdmVyKGIsYyxkKX19fSxiZWZvcmVEcmFnT3ZlcjpmdW5jdGlvbihi LGEsYyl7cmV0dXJuIHRydWV9LG9uRHJhZ091dDpmdW5jdGlvbihiLGMpe3ZhciBhPXRoaXMuY2Fj aGVkVGFyZ2V0fHxFeHQuZGQuRHJhZ0Ryb3BNZ3IuZ2V0RERCeUlkKGMpO2lmKHRoaXMuYmVmb3Jl RHJhZ091dChhLGIsYykhPT1mYWxzZSl7aWYoYS5pc05vdGlmeVRhcmdldCl7YS5ub3RpZnlPdXQo dGhpcyxiLHRoaXMuZHJhZ0RhdGEpfXRoaXMucHJveHkucmVzZXQoKTtpZih0aGlzLmFmdGVyRHJh Z091dCl7dGhpcy5hZnRlckRyYWdPdXQoYSxiLGMpfX10aGlzLmNhY2hlZFRhcmdldD1udWxsfSxi ZWZvcmVEcmFnT3V0OmZ1bmN0aW9uKGIsYSxjKXtyZXR1cm4gdHJ1ZX0sb25EcmFnRHJvcDpmdW5j dGlvbihiLGMpe3ZhciBhPXRoaXMuY2FjaGVkVGFyZ2V0fHxFeHQuZGQuRHJhZ0Ryb3BNZ3IuZ2V0 RERCeUlkKGMpO2lmKHRoaXMuYmVmb3JlRHJhZ0Ryb3AoYSxiLGMpIT09ZmFsc2Upe2lmKGEuaXNO b3RpZnlUYXJnZXQpe2lmKGEubm90aWZ5RHJvcCh0aGlzLGIsdGhpcy5kcmFnRGF0YSkpe3RoaXMu b25WYWxpZERyb3AoYSxiLGMpfWVsc2V7dGhpcy5vbkludmFsaWREcm9wKGEsYixjKX19ZWxzZXt0 aGlzLm9uVmFsaWREcm9wKGEsYixjKX1pZih0aGlzLmFmdGVyRHJhZ0Ryb3Ape3RoaXMuYWZ0ZXJE cmFnRHJvcChhLGIsYyl9fWRlbGV0ZSB0aGlzLmNhY2hlZFRhcmdldH0sYmVmb3JlRHJhZ0Ryb3A6 ZnVuY3Rpb24oYixhLGMpe3JldHVybiB0cnVlfSxvblZhbGlkRHJvcDpmdW5jdGlvbihiLGEsYyl7 dGhpcy5oaWRlUHJveHkoKTtpZih0aGlzLmFmdGVyVmFsaWREcm9wKXt0aGlzLmFmdGVyVmFsaWRE cm9wKGIsYSxjKX19LGdldFJlcGFpclhZOmZ1bmN0aW9uKGIsYSl7cmV0dXJuIHRoaXMuZWwuZ2V0 WFkoKX0sb25JbnZhbGlkRHJvcDpmdW5jdGlvbihiLGEsYyl7dGhpcy5iZWZvcmVJbnZhbGlkRHJv cChiLGEsYyk7aWYodGhpcy5jYWNoZWRUYXJnZXQpe2lmKHRoaXMuY2FjaGVkVGFyZ2V0LmlzTm90 aWZ5VGFyZ2V0KXt0aGlzLmNhY2hlZFRhcmdldC5ub3RpZnlPdXQodGhpcyxhLHRoaXMuZHJhZ0Rh dGEpfXRoaXMuY2FjaGVUYXJnZXQ9bnVsbH10aGlzLnByb3h5LnJlcGFpcih0aGlzLmdldFJlcGFp clhZKGEsdGhpcy5kcmFnRGF0YSksdGhpcy5hZnRlclJlcGFpcix0aGlzKTtpZih0aGlzLmFmdGVy SW52YWxpZERyb3Ape3RoaXMuYWZ0ZXJJbnZhbGlkRHJvcChhLGMpfX0sYWZ0ZXJSZXBhaXI6ZnVu Y3Rpb24oKXtpZihFeHQuZW5hYmxlRngpe3RoaXMuZWwuaGlnaGxpZ2h0KHRoaXMuaGxDb2xvcnx8 ImMzZGFmOSIpfXRoaXMuZHJhZ2dpbmc9ZmFsc2V9LGJlZm9yZUludmFsaWREcm9wOmZ1bmN0aW9u KGIsYSxjKXtyZXR1cm4gdHJ1ZX0saGFuZGxlTW91c2VEb3duOmZ1bmN0aW9uKGIpe2lmKHRoaXMu ZHJhZ2dpbmcpe3JldHVybn12YXIgYT10aGlzLmdldERyYWdEYXRhKGIpO2lmKGEmJnRoaXMub25C ZWZvcmVEcmFnKGEsYikhPT1mYWxzZSl7dGhpcy5kcmFnRGF0YT1hO3RoaXMucHJveHkuc3RvcCgp O0V4dC5kZC5EcmFnU291cmNlLnN1cGVyY2xhc3MuaGFuZGxlTW91c2VEb3duLmFwcGx5KHRoaXMs YXJndW1lbnRzKX19LG9uQmVmb3JlRHJhZzpmdW5jdGlvbihhLGIpe3JldHVybiB0cnVlfSxvblN0 YXJ0RHJhZzpFeHQuZW1wdHlGbixzdGFydERyYWc6ZnVuY3Rpb24oYSxiKXt0aGlzLnByb3h5LnJl c2V0KCk7dGhpcy5kcmFnZ2luZz10cnVlO3RoaXMucHJveHkudXBkYXRlKCIiKTt0aGlzLm9uSW5p dERyYWcoYSxiKTt0aGlzLnByb3h5LnNob3coKX0sb25Jbml0RHJhZzpmdW5jdGlvbihhLGMpe3Zh ciBiPXRoaXMuZWwuZG9tLmNsb25lTm9kZSh0cnVlKTtiLmlkPUV4dC5pZCgpO3RoaXMucHJveHku dXBkYXRlKGIpO3RoaXMub25TdGFydERyYWcoYSxjKTtyZXR1cm4gdHJ1ZX0sZ2V0UHJveHk6ZnVu Y3Rpb24oKXtyZXR1cm4gdGhpcy5wcm94eX0saGlkZVByb3h5OmZ1bmN0aW9uKCl7dGhpcy5wcm94 eS5oaWRlKCk7dGhpcy5wcm94eS5yZXNldCh0cnVlKTt0aGlzLmRyYWdnaW5nPWZhbHNlfSx0cmln Z2VyQ2FjaGVSZWZyZXNoOmZ1bmN0aW9uKCl7RXh0LmRkLkRETS5yZWZyZXNoQ2FjaGUodGhpcy5n cm91cHMpfSxiNEVuZERyYWc6ZnVuY3Rpb24oYSl7fSxlbmREcmFnOmZ1bmN0aW9uKGEpe3RoaXMu b25FbmREcmFnKHRoaXMuZHJhZ0RhdGEsYSl9LG9uRW5kRHJhZzpmdW5jdGlvbihhLGIpe30sYXV0 b09mZnNldDpmdW5jdGlvbihhLGIpe3RoaXMuc2V0RGVsdGEoLTEyLC0yMCl9fSk7RXh0LmRkLkRy b3BUYXJnZXQ9ZnVuY3Rpb24oYixhKXt0aGlzLmVsPUV4dC5nZXQoYik7RXh0LmFwcGx5KHRoaXMs YSk7aWYodGhpcy5jb250YWluZXJTY3JvbGwpe0V4dC5kZC5TY3JvbGxNYW5hZ2VyLnJlZ2lzdGVy KHRoaXMuZWwpfUV4dC5kZC5Ecm9wVGFyZ2V0LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0 aGlzLHRoaXMuZWwuZG9tLHRoaXMuZGRHcm91cHx8dGhpcy5ncm91cCx7aXNUYXJnZXQ6dHJ1ZX0p fTtFeHQuZXh0ZW5kKEV4dC5kZC5Ecm9wVGFyZ2V0LEV4dC5kZC5ERFRhcmdldCx7ZHJvcEFsbG93 ZWQ6IngtZGQtZHJvcC1vayIsZHJvcE5vdEFsbG93ZWQ6IngtZGQtZHJvcC1ub2Ryb3AiLGlzVGFy Z2V0OnRydWUsaXNOb3RpZnlUYXJnZXQ6dHJ1ZSxub3RpZnlFbnRlcjpmdW5jdGlvbihhLGMsYil7 aWYodGhpcy5vdmVyQ2xhc3Mpe3RoaXMuZWwuYWRkQ2xhc3ModGhpcy5vdmVyQ2xhc3MpfXJldHVy biB0aGlzLmRyb3BBbGxvd2VkfSxub3RpZnlPdmVyOmZ1bmN0aW9uKGEsYyxiKXtyZXR1cm4gdGhp cy5kcm9wQWxsb3dlZH0sbm90aWZ5T3V0OmZ1bmN0aW9uKGEsYyxiKXtpZih0aGlzLm92ZXJDbGFz cyl7dGhpcy5lbC5yZW1vdmVDbGFzcyh0aGlzLm92ZXJDbGFzcyl9fSxub3RpZnlEcm9wOmZ1bmN0 aW9uKGEsYyxiKXtyZXR1cm4gZmFsc2V9fSk7RXh0LmRkLkRyYWdab25lPWZ1bmN0aW9uKGIsYSl7 RXh0LmRkLkRyYWdab25lLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGIsYSk7aWYo dGhpcy5jb250YWluZXJTY3JvbGwpe0V4dC5kZC5TY3JvbGxNYW5hZ2VyLnJlZ2lzdGVyKHRoaXMu ZWwpfX07RXh0LmV4dGVuZChFeHQuZGQuRHJhZ1pvbmUsRXh0LmRkLkRyYWdTb3VyY2Use2dldERy YWdEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiBFeHQuZGQuUmVnaXN0cnkuZ2V0SGFuZGxlRnJvbUV2 ZW50KGEpfSxvbkluaXREcmFnOmZ1bmN0aW9uKGEsYil7dGhpcy5wcm94eS51cGRhdGUodGhpcy5k cmFnRGF0YS5kZGVsLmNsb25lTm9kZSh0cnVlKSk7dGhpcy5vblN0YXJ0RHJhZyhhLGIpO3JldHVy biB0cnVlfSxhZnRlclJlcGFpcjpmdW5jdGlvbigpe2lmKEV4dC5lbmFibGVGeCl7RXh0LkVsZW1l bnQuZmx5KHRoaXMuZHJhZ0RhdGEuZGRlbCkuaGlnaGxpZ2h0KHRoaXMuaGxDb2xvcnx8ImMzZGFm OSIpfXRoaXMuZHJhZ2dpbmc9ZmFsc2V9LGdldFJlcGFpclhZOmZ1bmN0aW9uKGEpe3JldHVybiBF eHQuRWxlbWVudC5mbHkodGhpcy5kcmFnRGF0YS5kZGVsKS5nZXRYWSgpfX0pO0V4dC5kZC5Ecm9w Wm9uZT1mdW5jdGlvbihiLGEpe0V4dC5kZC5Ecm9wWm9uZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9y LmNhbGwodGhpcyxiLGEpfTtFeHQuZXh0ZW5kKEV4dC5kZC5Ecm9wWm9uZSxFeHQuZGQuRHJvcFRh cmdldCx7Z2V0VGFyZ2V0RnJvbUV2ZW50OmZ1bmN0aW9uKGEpe3JldHVybiBFeHQuZGQuUmVnaXN0 cnkuZ2V0VGFyZ2V0RnJvbUV2ZW50KGEpfSxvbk5vZGVFbnRlcjpmdW5jdGlvbihkLGEsYyxiKXt9 LG9uTm9kZU92ZXI6ZnVuY3Rpb24oZCxhLGMsYil7cmV0dXJuIHRoaXMuZHJvcEFsbG93ZWR9LG9u Tm9kZU91dDpmdW5jdGlvbihkLGEsYyxiKXt9LG9uTm9kZURyb3A6ZnVuY3Rpb24oZCxhLGMsYil7 cmV0dXJuIGZhbHNlfSxvbkNvbnRhaW5lck92ZXI6ZnVuY3Rpb24oYSxjLGIpe3JldHVybiB0aGlz LmRyb3BOb3RBbGxvd2VkfSxvbkNvbnRhaW5lckRyb3A6ZnVuY3Rpb24oYSxjLGIpe3JldHVybiBm YWxzZX0sbm90aWZ5RW50ZXI6ZnVuY3Rpb24oYSxjLGIpe3JldHVybiB0aGlzLmRyb3BOb3RBbGxv d2VkfSxub3RpZnlPdmVyOmZ1bmN0aW9uKGEsYyxiKXt2YXIgZD10aGlzLmdldFRhcmdldEZyb21F dmVudChjKTtpZighZCl7aWYodGhpcy5sYXN0T3Zlck5vZGUpe3RoaXMub25Ob2RlT3V0KHRoaXMu bGFzdE92ZXJOb2RlLGEsYyxiKTt0aGlzLmxhc3RPdmVyTm9kZT1udWxsfXJldHVybiB0aGlzLm9u Q29udGFpbmVyT3ZlcihhLGMsYil9aWYodGhpcy5sYXN0T3Zlck5vZGUhPWQpe2lmKHRoaXMubGFz dE92ZXJOb2RlKXt0aGlzLm9uTm9kZU91dCh0aGlzLmxhc3RPdmVyTm9kZSxhLGMsYil9dGhpcy5v bk5vZGVFbnRlcihkLGEsYyxiKTt0aGlzLmxhc3RPdmVyTm9kZT1kfXJldHVybiB0aGlzLm9uTm9k ZU92ZXIoZCxhLGMsYil9LG5vdGlmeU91dDpmdW5jdGlvbihhLGMsYil7aWYodGhpcy5sYXN0T3Zl ck5vZGUpe3RoaXMub25Ob2RlT3V0KHRoaXMubGFzdE92ZXJOb2RlLGEsYyxiKTt0aGlzLmxhc3RP dmVyTm9kZT1udWxsfX0sbm90aWZ5RHJvcDpmdW5jdGlvbihhLGMsYil7aWYodGhpcy5sYXN0T3Zl ck5vZGUpe3RoaXMub25Ob2RlT3V0KHRoaXMubGFzdE92ZXJOb2RlLGEsYyxiKTt0aGlzLmxhc3RP dmVyTm9kZT1udWxsfXZhciBkPXRoaXMuZ2V0VGFyZ2V0RnJvbUV2ZW50KGMpO3JldHVybiBkP3Ro aXMub25Ob2RlRHJvcChkLGEsYyxiKTp0aGlzLm9uQ29udGFpbmVyRHJvcChhLGMsYil9LHRyaWdn ZXJDYWNoZVJlZnJlc2g6ZnVuY3Rpb24oKXtFeHQuZGQuRERNLnJlZnJlc2hDYWNoZSh0aGlzLmdy b3Vwcyl9fSk7RXh0LkVsZW1lbnQuYWRkTWV0aG9kcyh7aW5pdEREOmZ1bmN0aW9uKGMsYixkKXt2 YXIgYT1uZXcgRXh0LmRkLkREKEV4dC5pZCh0aGlzLmRvbSksYyxiKTtyZXR1cm4gRXh0LmFwcGx5 KGEsZCl9LGluaXRERFByb3h5OmZ1bmN0aW9uKGMsYixkKXt2YXIgYT1uZXcgRXh0LmRkLkREUHJv eHkoRXh0LmlkKHRoaXMuZG9tKSxjLGIpO3JldHVybiBFeHQuYXBwbHkoYSxkKX0saW5pdEREVGFy Z2V0OmZ1bmN0aW9uKGMsYixkKXt2YXIgYT1uZXcgRXh0LmRkLkREVGFyZ2V0KEV4dC5pZCh0aGlz LmRvbSksYyxiKTtyZXR1cm4gRXh0LmFwcGx5KGEsZCl9fSk7RXh0LmRhdGEuQXBpPShmdW5jdGlv bigpe3ZhciBhPXt9O3JldHVybnthY3Rpb25zOntjcmVhdGU6ImNyZWF0ZSIscmVhZDoicmVhZCIs dXBkYXRlOiJ1cGRhdGUiLGRlc3Ryb3k6ImRlc3Ryb3kifSxyZXN0QWN0aW9uczp7Y3JlYXRlOiJQ T1NUIixyZWFkOiJHRVQiLHVwZGF0ZToiUFVUIixkZXN0cm95OiJERUxFVEUifSxpc0FjdGlvbjpm dW5jdGlvbihiKXtyZXR1cm4oRXh0LmRhdGEuQXBpLmFjdGlvbnNbYl0pP3RydWU6ZmFsc2V9LGdl dFZlcmI6ZnVuY3Rpb24oYil7aWYoYVtiXSl7cmV0dXJuIGFbYl19Zm9yKHZhciBjIGluIHRoaXMu YWN0aW9ucyl7aWYodGhpcy5hY3Rpb25zW2NdPT09Yil7YVtiXT1jO2JyZWFrfX1yZXR1cm4oYVti XSE9PXVuZGVmaW5lZCk/YVtiXTpudWxsfSxpc1ZhbGlkOmZ1bmN0aW9uKGIpe3ZhciBlPVtdO3Zh ciBkPXRoaXMuYWN0aW9ucztmb3IodmFyIGMgaW4gYil7aWYoIShjIGluIGQpKXtlLnB1c2goYyl9 fXJldHVybighZS5sZW5ndGgpP3RydWU6ZX0saGFzVW5pcXVlVXJsOmZ1bmN0aW9uKGMsZyl7dmFy IGI9KGMuYXBpW2ddKT9jLmFwaVtnXS51cmw6bnVsbDt2YXIgZT10cnVlO2Zvcih2YXIgZCBpbiBj LmFwaSl7aWYoKGU9KGQ9PT1nKT90cnVlOihjLmFwaVtkXS51cmwhPWIpP3RydWU6ZmFsc2UpPT09 ZmFsc2Upe2JyZWFrfX1yZXR1cm4gZX0scHJlcGFyZTpmdW5jdGlvbihiKXtpZighYi5hcGkpe2Iu YXBpPXt9fWZvcih2YXIgZCBpbiB0aGlzLmFjdGlvbnMpe3ZhciBjPXRoaXMuYWN0aW9uc1tkXTti LmFwaVtjXT1iLmFwaVtjXXx8Yi51cmx8fGIuZGlyZWN0Rm47aWYodHlwZW9mKGIuYXBpW2NdKT09 InN0cmluZyIpe2IuYXBpW2NdPXt1cmw6Yi5hcGlbY119fX19LHJlc3RpZnk6ZnVuY3Rpb24oYil7 Yi5yZXN0ZnVsPXRydWU7Zm9yKHZhciBjIGluIHRoaXMucmVzdEFjdGlvbnMpe2IuYXBpW3RoaXMu YWN0aW9uc1tjXV0ubWV0aG9kPXRoaXMucmVzdEFjdGlvbnNbY119fX19KSgpO0V4dC5kYXRhLkFw aS5FcnJvcj1FeHQuZXh0ZW5kKEV4dC5FcnJvcix7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYixhKXt0 aGlzLmFyZz1hO0V4dC5FcnJvci5jYWxsKHRoaXMsYil9LG5hbWU6IkV4dC5kYXRhLkFwaSJ9KTtF eHQuYXBwbHkoRXh0LmRhdGEuQXBpLkVycm9yLnByb3RvdHlwZSx7bGFuZzp7ImFjdGlvbi11cmwt dW5kZWZpbmVkIjoiTm8gZmFsbGJhY2sgdXJsIGRlZmluZWQgZm9yIHRoaXMgYWN0aW9uLiAgV2hl biBkZWZpbmluZyBhIERhdGFQcm94eSBhcGksIHBsZWFzZSBiZSBzdXJlIHRvIGRlZmluZSBhbiB1 cmwgZm9yIGVhY2ggQ1JVRCBhY3Rpb24gaW4gRXh0LmRhdGEuQXBpLmFjdGlvbnMgb3IgZGVmaW5l IGEgZGVmYXVsdCB1cmwgaW4gYWRkaXRpb24gdG8geW91ciBhcGktY29uZmlndXJhdGlvbi4iLGlu dmFsaWQ6InJlY2VpdmVkIGFuIGludmFsaWQgQVBJLWNvbmZpZ3VyYXRpb24uICBQbGVhc2UgZW5z dXJlIHlvdXIgcHJveHkgQVBJLWNvbmZpZ3VyYXRpb24gY29udGFpbnMgb25seSB0aGUgYWN0aW9u cyBkZWZpbmVkIGluIEV4dC5kYXRhLkFwaS5hY3Rpb25zIiwiaW52YWxpZC11cmwiOiJJbnZhbGlk IHVybC4gIFBsZWFzZSByZXZpZXcgeW91ciBwcm94eSBjb25maWd1cmF0aW9uLiIsZXhlY3V0ZTon QXR0ZW1wdGVkIHRvIGV4ZWN1dGUgYW4gdW5rbm93biBhY3Rpb24uICBWYWxpZCBBUEkgYWN0aW9u cyBhcmUgZGVmaW5lZCBpbiBFeHQuZGF0YS5BcGkuYWN0aW9ucyInfX0pO0V4dC5kYXRhLlNvcnRU eXBlcz17bm9uZTpmdW5jdGlvbihhKXtyZXR1cm4gYX0sc3RyaXBUYWdzUkU6LzxcLz9bXj5dKz4v Z2ksYXNUZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBTdHJpbmcoYSkucmVwbGFjZSh0aGlzLnN0cmlw VGFnc1JFLCIiKX0sYXNVQ1RleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFN0cmluZyhhKS50b1VwcGVy Q2FzZSgpLnJlcGxhY2UodGhpcy5zdHJpcFRhZ3NSRSwiIil9LGFzVUNTdHJpbmc6ZnVuY3Rpb24o YSl7cmV0dXJuIFN0cmluZyhhKS50b1VwcGVyQ2FzZSgpfSxhc0RhdGU6ZnVuY3Rpb24oYSl7aWYo IWEpe3JldHVybiAwfWlmKEV4dC5pc0RhdGUoYSkpe3JldHVybiBhLmdldFRpbWUoKX1yZXR1cm4g RGF0ZS5wYXJzZShTdHJpbmcoYSkpfSxhc0Zsb2F0OmZ1bmN0aW9uKGEpe3ZhciBiPXBhcnNlRmxv YXQoU3RyaW5nKGEpLnJlcGxhY2UoLywvZywiIikpO3JldHVybiBpc05hTihiKT8wOmJ9LGFzSW50 OmZ1bmN0aW9uKGEpe3ZhciBiPXBhcnNlSW50KFN0cmluZyhhKS5yZXBsYWNlKC8sL2csIiIpLDEw KTtyZXR1cm4gaXNOYU4oYik/MDpifX07RXh0LmRhdGEuUmVjb3JkPWZ1bmN0aW9uKGEsYil7dGhp cy5pZD0oYnx8Yj09PTApP2I6RXh0LmRhdGEuUmVjb3JkLmlkKHRoaXMpO3RoaXMuZGF0YT1hfHx7 fX07RXh0LmRhdGEuUmVjb3JkLmNyZWF0ZT1mdW5jdGlvbihlKXt2YXIgYz1FeHQuZXh0ZW5kKEV4 dC5kYXRhLlJlY29yZCx7fSk7dmFyIGQ9Yy5wcm90b3R5cGU7ZC5maWVsZHM9bmV3IEV4dC51dGls Lk1peGVkQ29sbGVjdGlvbihmYWxzZSxmdW5jdGlvbihnKXtyZXR1cm4gZy5uYW1lfSk7Zm9yKHZh ciBiPTAsYT1lLmxlbmd0aDtiPGE7YisrKXtkLmZpZWxkcy5hZGQobmV3IEV4dC5kYXRhLkZpZWxk KGVbYl0pKX1jLmdldEZpZWxkPWZ1bmN0aW9uKGcpe3JldHVybiBkLmZpZWxkcy5nZXQoZyl9O3Jl dHVybiBjfTtFeHQuZGF0YS5SZWNvcmQuUFJFRklYPSJleHQtcmVjb3JkIjtFeHQuZGF0YS5SZWNv cmQuQVVUT19JRD0xO0V4dC5kYXRhLlJlY29yZC5FRElUPSJlZGl0IjtFeHQuZGF0YS5SZWNvcmQu UkVKRUNUPSJyZWplY3QiO0V4dC5kYXRhLlJlY29yZC5DT01NSVQ9ImNvbW1pdCI7RXh0LmRhdGEu UmVjb3JkLmlkPWZ1bmN0aW9uKGEpe2EucGhhbnRvbT10cnVlO3JldHVybltFeHQuZGF0YS5SZWNv cmQuUFJFRklYLCItIixFeHQuZGF0YS5SZWNvcmQuQVVUT19JRCsrXS5qb2luKCIiKX07RXh0LmRh dGEuUmVjb3JkLnByb3RvdHlwZT17ZGlydHk6ZmFsc2UsZWRpdGluZzpmYWxzZSxlcnJvcjpudWxs LG1vZGlmaWVkOm51bGwscGhhbnRvbTpmYWxzZSxqb2luOmZ1bmN0aW9uKGEpe3RoaXMuc3RvcmU9 YX0sc2V0OmZ1bmN0aW9uKGIsYyl7dmFyIGE9KHR5cGVvZiBjPT09Im9iamVjdCIpO2lmKCFhJiZT dHJpbmcodGhpcy5kYXRhW2JdKT09PVN0cmluZyhjKSl7cmV0dXJufWVsc2V7aWYoYSYmRXh0LmVu Y29kZSh0aGlzLmRhdGFbYl0pPT09RXh0LmVuY29kZShjKSl7cmV0dXJufX10aGlzLmRpcnR5PXRy dWU7aWYoIXRoaXMubW9kaWZpZWQpe3RoaXMubW9kaWZpZWQ9e319aWYodHlwZW9mIHRoaXMubW9k aWZpZWRbYl09PSJ1bmRlZmluZWQiKXt0aGlzLm1vZGlmaWVkW2JdPXRoaXMuZGF0YVtiXX10aGlz LmRhdGFbYl09YztpZighdGhpcy5lZGl0aW5nKXt0aGlzLmFmdGVyRWRpdCgpfX0sYWZ0ZXJFZGl0 OmZ1bmN0aW9uKCl7aWYodGhpcy5zdG9yZSl7dGhpcy5zdG9yZS5hZnRlckVkaXQodGhpcyl9fSxh ZnRlclJlamVjdDpmdW5jdGlvbigpe2lmKHRoaXMuc3RvcmUpe3RoaXMuc3RvcmUuYWZ0ZXJSZWpl Y3QodGhpcyl9fSxhZnRlckNvbW1pdDpmdW5jdGlvbigpe2lmKHRoaXMuc3RvcmUpe3RoaXMuc3Rv cmUuYWZ0ZXJDb21taXQodGhpcyl9fSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YVth XX0sYmVnaW5FZGl0OmZ1bmN0aW9uKCl7dGhpcy5lZGl0aW5nPXRydWU7dGhpcy5tb2RpZmllZD10 aGlzLm1vZGlmaWVkfHx7fX0sY2FuY2VsRWRpdDpmdW5jdGlvbigpe3RoaXMuZWRpdGluZz1mYWxz ZTtkZWxldGUgdGhpcy5tb2RpZmllZH0sZW5kRWRpdDpmdW5jdGlvbigpe3RoaXMuZWRpdGluZz1m YWxzZTtpZih0aGlzLmRpcnR5KXt0aGlzLmFmdGVyRWRpdCgpfX0scmVqZWN0OmZ1bmN0aW9uKGIp e3ZhciBhPXRoaXMubW9kaWZpZWQ7Zm9yKHZhciBjIGluIGEpe2lmKHR5cGVvZiBhW2NdIT0iZnVu Y3Rpb24iKXt0aGlzLmRhdGFbY109YVtjXX19dGhpcy5kaXJ0eT1mYWxzZTtkZWxldGUgdGhpcy5t b2RpZmllZDt0aGlzLmVkaXRpbmc9ZmFsc2U7aWYoYiE9PXRydWUpe3RoaXMuYWZ0ZXJSZWplY3Qo KX19LGNvbW1pdDpmdW5jdGlvbihhKXt0aGlzLmRpcnR5PWZhbHNlO2RlbGV0ZSB0aGlzLm1vZGlm aWVkO3RoaXMuZWRpdGluZz1mYWxzZTtpZihhIT09dHJ1ZSl7dGhpcy5hZnRlckNvbW1pdCgpfX0s Z2V0Q2hhbmdlczpmdW5jdGlvbigpe3ZhciBhPXRoaXMubW9kaWZpZWQsYj17fTtmb3IodmFyIGMg aW4gYSl7aWYoYS5oYXNPd25Qcm9wZXJ0eShjKSl7YltjXT10aGlzLmRhdGFbY119fXJldHVybiBi fSxoYXNFcnJvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9yIT09bnVsbH0sY2xlYXJFcnJv cjpmdW5jdGlvbigpe3RoaXMuZXJyb3I9bnVsbH0sY29weTpmdW5jdGlvbihhKXtyZXR1cm4gbmV3 IHRoaXMuY29uc3RydWN0b3IoRXh0LmFwcGx5KHt9LHRoaXMuZGF0YSksYXx8dGhpcy5pZCl9LGlz TW9kaWZpZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuICEhKHRoaXMubW9kaWZpZWQmJnRoaXMubW9kaWZp ZWQuaGFzT3duUHJvcGVydHkoYSkpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmll bGRzLmZpbmQoZnVuY3Rpb24oYSl7cmV0dXJuKGEuYWxsb3dCbGFuaz09PWZhbHNlJiZFeHQuaXNF bXB0eSh0aGlzLmRhdGFbYS5uYW1lXSkpP3RydWU6ZmFsc2V9LHRoaXMpP2ZhbHNlOnRydWV9LG1h cmtEaXJ0eTpmdW5jdGlvbigpe3RoaXMuZGlydHk9dHJ1ZTtpZighdGhpcy5tb2RpZmllZCl7dGhp cy5tb2RpZmllZD17fX10aGlzLmZpZWxkcy5lYWNoKGZ1bmN0aW9uKGEpe3RoaXMubW9kaWZpZWRb YS5uYW1lXT10aGlzLmRhdGFbYS5uYW1lXX0sdGhpcyl9fTtFeHQuU3RvcmVNZ3I9RXh0LmFwcGx5 KG5ldyBFeHQudXRpbC5NaXhlZENvbGxlY3Rpb24oKSx7cmVnaXN0ZXI6ZnVuY3Rpb24oKXtmb3Io dmFyIGE9MCxiOyhiPWFyZ3VtZW50c1thXSk7YSsrKXt0aGlzLmFkZChiKX19LHVucmVnaXN0ZXI6 ZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxiOyhiPWFyZ3VtZW50c1thXSk7YSsrKXt0aGlzLnJlbW92 ZSh0aGlzLmxvb2t1cChiKSl9fSxsb29rdXA6ZnVuY3Rpb24oZSl7aWYoRXh0LmlzQXJyYXkoZSkp e3ZhciBiPVsiZmllbGQxIl0sZD0hRXh0LmlzQXJyYXkoZVswXSk7aWYoIWQpe2Zvcih2YXIgYz0y LGE9ZVswXS5sZW5ndGg7Yzw9YTsrK2Mpe2IucHVzaCgiZmllbGQiK2MpfX1yZXR1cm4gbmV3IEV4 dC5kYXRhLkFycmF5U3RvcmUoe2ZpZWxkczpiLGRhdGE6ZSxleHBhbmREYXRhOmQsYXV0b0Rlc3Ry b3k6dHJ1ZSxhdXRvQ3JlYXRlZDp0cnVlfSl9cmV0dXJuIEV4dC5pc09iamVjdChlKT8oZS5ldmVu dHM/ZTpFeHQuY3JlYXRlKGUsInN0b3JlIikpOnRoaXMuZ2V0KGUpfSxnZXRLZXk6ZnVuY3Rpb24o YSl7cmV0dXJuIGEuc3RvcmVJZH19KTtFeHQuZGF0YS5TdG9yZT1mdW5jdGlvbihhKXt0aGlzLmRh dGE9bmV3IEV4dC51dGlsLk1peGVkQ29sbGVjdGlvbihmYWxzZSk7dGhpcy5kYXRhLmdldEtleT1m dW5jdGlvbihiKXtyZXR1cm4gYi5pZH07dGhpcy5iYXNlUGFyYW1zPXt9O3RoaXMucmVtb3ZlZD1b XTtpZihhJiZhLmRhdGEpe3RoaXMuaW5saW5lRGF0YT1hLmRhdGE7ZGVsZXRlIGEuZGF0YX1FeHQu YXBwbHkodGhpcyxhKTt0aGlzLnBhcmFtTmFtZXM9RXh0LmFwcGx5SWYodGhpcy5wYXJhbU5hbWVz fHx7fSx0aGlzLmRlZmF1bHRQYXJhbU5hbWVzKTtpZih0aGlzLnVybCYmIXRoaXMucHJveHkpe3Ro aXMucHJveHk9bmV3IEV4dC5kYXRhLkh0dHBQcm94eSh7dXJsOnRoaXMudXJsfSl9aWYodGhpcy5y ZXN0ZnVsPT09dHJ1ZSYmdGhpcy5wcm94eSl7dGhpcy5iYXRjaD1mYWxzZTtFeHQuZGF0YS5BcGku cmVzdGlmeSh0aGlzLnByb3h5KX1pZih0aGlzLnJlYWRlcil7aWYoIXRoaXMucmVjb3JkVHlwZSl7 dGhpcy5yZWNvcmRUeXBlPXRoaXMucmVhZGVyLnJlY29yZFR5cGV9aWYodGhpcy5yZWFkZXIub25N ZXRhQ2hhbmdlKXt0aGlzLnJlYWRlci5vbk1ldGFDaGFuZ2U9dGhpcy5vbk1ldGFDaGFuZ2UuY3Jl YXRlRGVsZWdhdGUodGhpcyl9aWYodGhpcy53cml0ZXIpe3RoaXMud3JpdGVyLm1ldGE9dGhpcy5y ZWFkZXIubWV0YTt0aGlzLnBydW5lTW9kaWZpZWRSZWNvcmRzPXRydWV9fWlmKHRoaXMucmVjb3Jk VHlwZSl7dGhpcy5maWVsZHM9dGhpcy5yZWNvcmRUeXBlLnByb3RvdHlwZS5maWVsZHN9dGhpcy5t b2RpZmllZD1bXTt0aGlzLmFkZEV2ZW50cygiZGF0YWNoYW5nZWQiLCJtZXRhY2hhbmdlIiwiYWRk IiwicmVtb3ZlIiwidXBkYXRlIiwiY2xlYXIiLCJleGNlcHRpb24iLCJiZWZvcmVsb2FkIiwibG9h ZCIsImxvYWRleGNlcHRpb24iLCJiZWZvcmV3cml0ZSIsIndyaXRlIik7aWYodGhpcy5wcm94eSl7 dGhpcy5yZWxheUV2ZW50cyh0aGlzLnByb3h5LFsibG9hZGV4Y2VwdGlvbiIsImV4Y2VwdGlvbiJd KX1pZih0aGlzLndyaXRlcil7dGhpcy5vbih7c2NvcGU6dGhpcyxhZGQ6dGhpcy5jcmVhdGVSZWNv cmRzLHJlbW92ZTp0aGlzLmRlc3Ryb3lSZWNvcmQsdXBkYXRlOnRoaXMudXBkYXRlUmVjb3JkfSl9 dGhpcy5zb3J0VG9nZ2xlPXt9O2lmKHRoaXMuc29ydEZpZWxkKXt0aGlzLnNldERlZmF1bHRTb3J0 KHRoaXMuc29ydEZpZWxkLHRoaXMuc29ydERpcil9ZWxzZXtpZih0aGlzLnNvcnRJbmZvKXt0aGlz LnNldERlZmF1bHRTb3J0KHRoaXMuc29ydEluZm8uZmllbGQsdGhpcy5zb3J0SW5mby5kaXJlY3Rp b24pfX1FeHQuZGF0YS5TdG9yZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7aWYo dGhpcy5pZCl7dGhpcy5zdG9yZUlkPXRoaXMuaWQ7ZGVsZXRlIHRoaXMuaWR9aWYodGhpcy5zdG9y ZUlkKXtFeHQuU3RvcmVNZ3IucmVnaXN0ZXIodGhpcyl9aWYodGhpcy5pbmxpbmVEYXRhKXt0aGlz LmxvYWREYXRhKHRoaXMuaW5saW5lRGF0YSk7ZGVsZXRlIHRoaXMuaW5saW5lRGF0YX1lbHNle2lm KHRoaXMuYXV0b0xvYWQpe3RoaXMubG9hZC5kZWZlcigxMCx0aGlzLFt0eXBlb2YgdGhpcy5hdXRv TG9hZD09Im9iamVjdCI/dGhpcy5hdXRvTG9hZDp1bmRlZmluZWRdKX19fTtFeHQuZXh0ZW5kKEV4 dC5kYXRhLlN0b3JlLEV4dC51dGlsLk9ic2VydmFibGUse3dyaXRlcjp1bmRlZmluZWQscmVtb3Rl U29ydDpmYWxzZSxhdXRvRGVzdHJveTpmYWxzZSxwcnVuZU1vZGlmaWVkUmVjb3JkczpmYWxzZSxs YXN0T3B0aW9uczpudWxsLGF1dG9TYXZlOnRydWUsYmF0Y2g6dHJ1ZSxyZXN0ZnVsOmZhbHNlLHBh cmFtTmFtZXM6dW5kZWZpbmVkLGRlZmF1bHRQYXJhbU5hbWVzOntzdGFydDoic3RhcnQiLGxpbWl0 OiJsaW1pdCIsc29ydDoic29ydCIsZGlyOiJkaXIifSxkZXN0cm95OmZ1bmN0aW9uKCl7aWYodGhp cy5zdG9yZUlkKXtFeHQuU3RvcmVNZ3IudW5yZWdpc3Rlcih0aGlzKX10aGlzLmRhdGE9bnVsbDtF eHQuZGVzdHJveSh0aGlzLnByb3h5KTt0aGlzLnJlYWRlcj10aGlzLndyaXRlcj1udWxsO3RoaXMu cHVyZ2VMaXN0ZW5lcnMoKX0sYWRkOmZ1bmN0aW9uKGIpe2I9W10uY29uY2F0KGIpO2lmKGIubGVu Z3RoPDEpe3JldHVybn1mb3IodmFyIGQ9MCxhPWIubGVuZ3RoO2Q8YTtkKyspe2JbZF0uam9pbih0 aGlzKX12YXIgYz10aGlzLmRhdGEubGVuZ3RoO3RoaXMuZGF0YS5hZGRBbGwoYik7aWYodGhpcy5z bmFwc2hvdCl7dGhpcy5zbmFwc2hvdC5hZGRBbGwoYil9dGhpcy5maXJlRXZlbnQoImFkZCIsdGhp cyxiLGMpfSxhZGRTb3J0ZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5maW5kSW5zZXJ0SW5kZXgo YSk7dGhpcy5pbnNlcnQoYixhKX0scmVtb3ZlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZGF0YS5p bmRleE9mKGEpO2lmKGI+LTEpe3RoaXMuZGF0YS5yZW1vdmVBdChiKTtpZih0aGlzLnBydW5lTW9k aWZpZWRSZWNvcmRzKXt0aGlzLm1vZGlmaWVkLnJlbW92ZShhKX1pZih0aGlzLnNuYXBzaG90KXt0 aGlzLnNuYXBzaG90LnJlbW92ZShhKX10aGlzLmZpcmVFdmVudCgicmVtb3ZlIix0aGlzLGEsYil9 fSxyZW1vdmVBdDpmdW5jdGlvbihhKXt0aGlzLnJlbW92ZSh0aGlzLmdldEF0KGEpKX0scmVtb3Zl QWxsOmZ1bmN0aW9uKCl7dGhpcy5kYXRhLmNsZWFyKCk7aWYodGhpcy5zbmFwc2hvdCl7dGhpcy5z bmFwc2hvdC5jbGVhcigpfWlmKHRoaXMucHJ1bmVNb2RpZmllZFJlY29yZHMpe3RoaXMubW9kaWZp ZWQ9W119dGhpcy5maXJlRXZlbnQoImNsZWFyIix0aGlzKX0saW5zZXJ0OmZ1bmN0aW9uKGMsYil7 Yj1bXS5jb25jYXQoYik7Zm9yKHZhciBkPTAsYT1iLmxlbmd0aDtkPGE7ZCsrKXt0aGlzLmRhdGEu aW5zZXJ0KGMsYltkXSk7YltkXS5qb2luKHRoaXMpfXRoaXMuZmlyZUV2ZW50KCJhZGQiLHRoaXMs YixjKX0saW5kZXhPZjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRhLmluZGV4T2YoYSl9LGlu ZGV4T2ZJZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRhLmluZGV4T2ZLZXkoYSl9LGdldEJ5 SWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0YS5rZXkoYSl9LGdldEF0OmZ1bmN0aW9uKGEp e3JldHVybiB0aGlzLmRhdGEuaXRlbUF0KGEpfSxnZXRSYW5nZTpmdW5jdGlvbihiLGEpe3JldHVy biB0aGlzLmRhdGEuZ2V0UmFuZ2UoYixhKX0sc3RvcmVPcHRpb25zOmZ1bmN0aW9uKGEpe2E9RXh0 LmFwcGx5KHt9LGEpO2RlbGV0ZSBhLmNhbGxiYWNrO2RlbGV0ZSBhLnNjb3BlO3RoaXMubGFzdE9w dGlvbnM9YX0sbG9hZDpmdW5jdGlvbihiKXtiPWJ8fHt9O3RoaXMuc3RvcmVPcHRpb25zKGIpO2lm KHRoaXMuc29ydEluZm8mJnRoaXMucmVtb3RlU29ydCl7dmFyIGE9dGhpcy5wYXJhbU5hbWVzO2Iu cGFyYW1zPWIucGFyYW1zfHx7fTtiLnBhcmFtc1thLnNvcnRdPXRoaXMuc29ydEluZm8uZmllbGQ7 Yi5wYXJhbXNbYS5kaXJdPXRoaXMuc29ydEluZm8uZGlyZWN0aW9ufXRyeXtyZXR1cm4gdGhpcy5l eGVjdXRlKCJyZWFkIixudWxsLGIpfWNhdGNoKGMpe3RoaXMuaGFuZGxlRXhjZXB0aW9uKGMpO3Jl dHVybiBmYWxzZX19LHVwZGF0ZVJlY29yZDpmdW5jdGlvbihiLGEsYyl7aWYoYz09RXh0LmRhdGEu UmVjb3JkLkVESVQmJnRoaXMuYXV0b1NhdmU9PT10cnVlJiYoIWEucGhhbnRvbXx8KGEucGhhbnRv bSYmYS5pc1ZhbGlkKSkpe3RoaXMuc2F2ZSgpfX0sY3JlYXRlUmVjb3JkczpmdW5jdGlvbihjLGIs ZCl7Zm9yKHZhciBlPTAsYT1iLmxlbmd0aDtlPGE7ZSsrKXtpZihiW2VdLnBoYW50b20mJmJbZV0u aXNWYWxpZCgpKXtiW2VdLm1hcmtEaXJ0eSgpO3RoaXMubW9kaWZpZWQucHVzaChiW2VdKX19aWYo dGhpcy5hdXRvU2F2ZT09PXRydWUpe3RoaXMuc2F2ZSgpfX0sZGVzdHJveVJlY29yZDpmdW5jdGlv bihiLGEsYyl7aWYodGhpcy5tb2RpZmllZC5pbmRleE9mKGEpIT0tMSl7dGhpcy5tb2RpZmllZC5y ZW1vdmUoYSl9aWYoIWEucGhhbnRvbSl7dGhpcy5yZW1vdmVkLnB1c2goYSk7YS5sYXN0SW5kZXg9 YztpZih0aGlzLmF1dG9TYXZlPT09dHJ1ZSl7dGhpcy5zYXZlKCl9fX0sZXhlY3V0ZTpmdW5jdGlv bihkLGEsYil7aWYoIUV4dC5kYXRhLkFwaS5pc0FjdGlvbihkKSl7dGhyb3cgbmV3IEV4dC5kYXRh LkFwaS5FcnJvcigiZXhlY3V0ZSIsZCl9Yj1FeHQuYXBwbHlJZihifHx7fSx7cGFyYW1zOnt9fSk7 dmFyIGM9dHJ1ZTtpZihkPT09InJlYWQiKXtjPXRoaXMuZmlyZUV2ZW50KCJiZWZvcmVsb2FkIix0 aGlzLGIpfWVsc2V7aWYodGhpcy53cml0ZXIubGlzdGZ1bD09PXRydWUmJnRoaXMucmVzdGZ1bCE9 PXRydWUpe2E9KEV4dC5pc0FycmF5KGEpKT9hOlthXX1lbHNle2lmKEV4dC5pc0FycmF5KGEpJiZh Lmxlbmd0aD09MSl7YT1hLnNoaWZ0KCl9fWlmKChjPXRoaXMuZmlyZUV2ZW50KCJiZWZvcmV3cml0 ZSIsdGhpcyxkLGEsYikpIT09ZmFsc2Upe3RoaXMud3JpdGVyLndyaXRlKGQsYi5wYXJhbXMsYSl9 fWlmKGMhPT1mYWxzZSl7dmFyIGU9RXh0LmFwcGx5KHt9LGIucGFyYW1zLHRoaXMuYmFzZVBhcmFt cyk7aWYodGhpcy53cml0ZXImJnRoaXMucHJveHkudXJsJiYhdGhpcy5wcm94eS5yZXN0ZnVsJiYh RXh0LmRhdGEuQXBpLmhhc1VuaXF1ZVVybCh0aGlzLnByb3h5LGQpKXtlLnhhY3Rpb249ZH10aGlz LnByb3h5LnJlcXVlc3QoRXh0LmRhdGEuQXBpLmFjdGlvbnNbZF0sYSxlLHRoaXMucmVhZGVyLHRo aXMuY3JlYXRlQ2FsbGJhY2soZCxhKSx0aGlzLGIpfXJldHVybiBjfSxzYXZlOmZ1bmN0aW9uKCl7 aWYoIXRoaXMud3JpdGVyKXt0aHJvdyBuZXcgRXh0LmRhdGEuU3RvcmUuRXJyb3IoIndyaXRlci11 bmRlZmluZWQiKX1pZih0aGlzLnJlbW92ZWQubGVuZ3RoKXt0aGlzLmRvVHJhbnNhY3Rpb24oImRl c3Ryb3kiLHRoaXMucmVtb3ZlZCl9dmFyIGE9W10uY29uY2F0KHRoaXMuZ2V0TW9kaWZpZWRSZWNv cmRzKCkpO2lmKCFhLmxlbmd0aCl7cmV0dXJuIHRydWV9dmFyIGM9W107Zm9yKHZhciBiPWEubGVu Z3RoLTE7Yj49MDtiLS0pe2lmKGFbYl0ucGhhbnRvbT09PXRydWUpe3ZhciBkPWEuc3BsaWNlKGIs MSkuc2hpZnQoKTtpZihkLmlzVmFsaWQoKSl7Yy5wdXNoKGQpfX1lbHNle2lmKCFhW2JdLmlzVmFs aWQoKSl7YS5zcGxpY2UoYiwxKX19fWlmKGMubGVuZ3RoKXt0aGlzLmRvVHJhbnNhY3Rpb24oImNy ZWF0ZSIsYyl9aWYoYS5sZW5ndGgpe3RoaXMuZG9UcmFuc2FjdGlvbigidXBkYXRlIixhKX1yZXR1 cm4gdHJ1ZX0sZG9UcmFuc2FjdGlvbjpmdW5jdGlvbihkLGIpe2Z1bmN0aW9uIGUoZyl7dHJ5e3Ro aXMuZXhlY3V0ZShkLGcpfWNhdGNoKGgpe3RoaXMuaGFuZGxlRXhjZXB0aW9uKGgpfX1pZih0aGlz LmJhdGNoPT09ZmFsc2Upe2Zvcih2YXIgYz0wLGE9Yi5sZW5ndGg7YzxhO2MrKyl7ZS5jYWxsKHRo aXMsYltjXSl9fWVsc2V7ZS5jYWxsKHRoaXMsYil9fSxjcmVhdGVDYWxsYmFjazpmdW5jdGlvbihi LGEpe3ZhciBjPUV4dC5kYXRhLkFwaS5hY3Rpb25zO3JldHVybihiPT0icmVhZCIpP3RoaXMubG9h ZFJlY29yZHM6ZnVuY3Rpb24oZSxkLGcpe3RoaXNbIm9uIitFeHQudXRpbC5Gb3JtYXQuY2FwaXRh bGl6ZShiKSsiUmVjb3JkcyJdKGcsYSxlKTtpZihnPT09dHJ1ZSl7dGhpcy5maXJlRXZlbnQoIndy aXRlIix0aGlzLGIsZSxkLGEpfX19LGNsZWFyTW9kaWZpZWQ6ZnVuY3Rpb24oYSl7aWYoRXh0Lmlz QXJyYXkoYSkpe2Zvcih2YXIgYj1hLmxlbmd0aC0xO2I+PTA7Yi0tKXt0aGlzLm1vZGlmaWVkLnNw bGljZSh0aGlzLm1vZGlmaWVkLmluZGV4T2YoYVtiXSksMSl9fWVsc2V7dGhpcy5tb2RpZmllZC5z cGxpY2UodGhpcy5tb2RpZmllZC5pbmRleE9mKGEpLDEpfX0scmVNYXA6ZnVuY3Rpb24oYil7aWYo RXh0LmlzQXJyYXkoYikpe2Zvcih2YXIgZD0wLGE9Yi5sZW5ndGg7ZDxhO2QrKyl7dGhpcy5yZU1h cChiW2RdKX19ZWxzZXtkZWxldGUgdGhpcy5kYXRhLm1hcFtiLl9waGlkXTt0aGlzLmRhdGEubWFw W2IuaWRdPWI7dmFyIGM9dGhpcy5kYXRhLmtleXMuaW5kZXhPZihiLl9waGlkKTt0aGlzLmRhdGEu a2V5cy5zcGxpY2UoYywxLGIuaWQpO2RlbGV0ZSBiLl9waGlkfX0sb25DcmVhdGVSZWNvcmRzOmZ1 bmN0aW9uKGQsYSxiKXtpZihkPT09dHJ1ZSl7dHJ5e3RoaXMucmVhZGVyLnJlYWxpemUoYSxiKTt0 aGlzLnJlTWFwKGEpfWNhdGNoKGMpe3RoaXMuaGFuZGxlRXhjZXB0aW9uKGMpO2lmKEV4dC5pc0Fy cmF5KGEpKXt0aGlzLm9uQ3JlYXRlUmVjb3JkcyhkLGEsYil9fX19LG9uVXBkYXRlUmVjb3Jkczpm dW5jdGlvbihkLGEsYil7aWYoZD09PXRydWUpe3RyeXt0aGlzLnJlYWRlci51cGRhdGUoYSxiKX1j YXRjaChjKXt0aGlzLmhhbmRsZUV4Y2VwdGlvbihjKTtpZihFeHQuaXNBcnJheShhKSl7dGhpcy5v blVwZGF0ZVJlY29yZHMoZCxhLGIpfX19fSxvbkRlc3Ryb3lSZWNvcmRzOmZ1bmN0aW9uKGUsYixk KXtiPShiIGluc3RhbmNlb2YgRXh0LmRhdGEuUmVjb3JkKT9bYl06Yjtmb3IodmFyIGM9MCxhPWIu bGVuZ3RoO2M8YTtjKyspe3RoaXMucmVtb3ZlZC5zcGxpY2UodGhpcy5yZW1vdmVkLmluZGV4T2Yo YltjXSksMSl9aWYoZT09PWZhbHNlKXtmb3IoYz1iLmxlbmd0aC0xO2M+PTA7Yy0tKXt0aGlzLmlu c2VydChiW2NdLmxhc3RJbmRleCxiW2NdKX19fSxoYW5kbGVFeGNlcHRpb246ZnVuY3Rpb24oYSl7 RXh0LmhhbmRsZUVycm9yKGEpfSxyZWxvYWQ6ZnVuY3Rpb24oYSl7dGhpcy5sb2FkKEV4dC5hcHBs eUlmKGF8fHt9LHRoaXMubGFzdE9wdGlvbnMpKX0sbG9hZFJlY29yZHM6ZnVuY3Rpb24oaCxiLGcp e2lmKCFofHxnPT09ZmFsc2Upe2lmKGchPT1mYWxzZSl7dGhpcy5maXJlRXZlbnQoImxvYWQiLHRo aXMsW10sYil9aWYoYi5jYWxsYmFjayl7Yi5jYWxsYmFjay5jYWxsKGIuc2NvcGV8fHRoaXMsW10s YixmYWxzZSxoKX1yZXR1cm59dmFyIGU9aC5yZWNvcmRzLGQ9aC50b3RhbFJlY29yZHN8fGUubGVu Z3RoO2lmKCFifHxiLmFkZCE9PXRydWUpe2lmKHRoaXMucHJ1bmVNb2RpZmllZFJlY29yZHMpe3Ro aXMubW9kaWZpZWQ9W119Zm9yKHZhciBjPTAsYT1lLmxlbmd0aDtjPGE7YysrKXtlW2NdLmpvaW4o dGhpcyl9aWYodGhpcy5zbmFwc2hvdCl7dGhpcy5kYXRhPXRoaXMuc25hcHNob3Q7ZGVsZXRlIHRo aXMuc25hcHNob3R9dGhpcy5kYXRhLmNsZWFyKCk7dGhpcy5kYXRhLmFkZEFsbChlKTt0aGlzLnRv dGFsTGVuZ3RoPWQ7dGhpcy5hcHBseVNvcnQoKTt0aGlzLmZpcmVFdmVudCgiZGF0YWNoYW5nZWQi LHRoaXMpfWVsc2V7dGhpcy50b3RhbExlbmd0aD1NYXRoLm1heChkLHRoaXMuZGF0YS5sZW5ndGgr ZS5sZW5ndGgpO3RoaXMuYWRkKGUpfXRoaXMuZmlyZUV2ZW50KCJsb2FkIix0aGlzLGUsYik7aWYo Yi5jYWxsYmFjayl7Yi5jYWxsYmFjay5jYWxsKGIuc2NvcGV8fHRoaXMsZSxiLHRydWUpfX0sbG9h ZERhdGE6ZnVuY3Rpb24oYyxhKXt2YXIgYj10aGlzLnJlYWRlci5yZWFkUmVjb3JkcyhjKTt0aGlz LmxvYWRSZWNvcmRzKGIse2FkZDphfSx0cnVlKX0sZ2V0Q291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4g dGhpcy5kYXRhLmxlbmd0aHx8MH0sZ2V0VG90YWxDb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlz LnRvdGFsTGVuZ3RofHwwfSxnZXRTb3J0U3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3J0 SW5mb30sYXBwbHlTb3J0OmZ1bmN0aW9uKCl7aWYodGhpcy5zb3J0SW5mbyYmIXRoaXMucmVtb3Rl U29ydCl7dmFyIGE9dGhpcy5zb3J0SW5mbyxiPWEuZmllbGQ7dGhpcy5zb3J0RGF0YShiLGEuZGly ZWN0aW9uKX19LHNvcnREYXRhOmZ1bmN0aW9uKGMsZCl7ZD1kfHwiQVNDIjt2YXIgYT10aGlzLmZp ZWxkcy5nZXQoYykuc29ydFR5cGU7dmFyIGI9ZnVuY3Rpb24oZyxlKXt2YXIgaT1hKGcuZGF0YVtj XSksaD1hKGUuZGF0YVtjXSk7cmV0dXJuIGk+aD8xOihpPGg/LTE6MCl9O3RoaXMuZGF0YS5zb3J0 KGQsYik7aWYodGhpcy5zbmFwc2hvdCYmdGhpcy5zbmFwc2hvdCE9dGhpcy5kYXRhKXt0aGlzLnNu YXBzaG90LnNvcnQoZCxiKX19LHNldERlZmF1bHRTb3J0OmZ1bmN0aW9uKGIsYSl7YT1hP2EudG9V cHBlckNhc2UoKToiQVNDIjt0aGlzLnNvcnRJbmZvPXtmaWVsZDpiLGRpcmVjdGlvbjphfTt0aGlz LnNvcnRUb2dnbGVbYl09YX0sc29ydDpmdW5jdGlvbihlLGMpe3ZhciBkPXRoaXMuZmllbGRzLmdl dChlKTtpZighZCl7cmV0dXJuIGZhbHNlfWlmKCFjKXtpZih0aGlzLnNvcnRJbmZvJiZ0aGlzLnNv cnRJbmZvLmZpZWxkPT1kLm5hbWUpe2M9KHRoaXMuc29ydFRvZ2dsZVtkLm5hbWVdfHwiQVNDIiku dG9nZ2xlKCJBU0MiLCJERVNDIil9ZWxzZXtjPWQuc29ydERpcn19dmFyIGI9KHRoaXMuc29ydFRv Z2dsZSk/dGhpcy5zb3J0VG9nZ2xlW2QubmFtZV06bnVsbDt2YXIgYT0odGhpcy5zb3J0SW5mbyk/ dGhpcy5zb3J0SW5mbzpudWxsO3RoaXMuc29ydFRvZ2dsZVtkLm5hbWVdPWM7dGhpcy5zb3J0SW5m bz17ZmllbGQ6ZC5uYW1lLGRpcmVjdGlvbjpjfTtpZighdGhpcy5yZW1vdGVTb3J0KXt0aGlzLmFw cGx5U29ydCgpO3RoaXMuZmlyZUV2ZW50KCJkYXRhY2hhbmdlZCIsdGhpcyl9ZWxzZXtpZighdGhp cy5sb2FkKHRoaXMubGFzdE9wdGlvbnMpKXtpZihiKXt0aGlzLnNvcnRUb2dnbGVbZC5uYW1lXT1i fWlmKGEpe3RoaXMuc29ydEluZm89YX19fX0sZWFjaDpmdW5jdGlvbihiLGEpe3RoaXMuZGF0YS5l YWNoKGIsYSl9LGdldE1vZGlmaWVkUmVjb3JkczpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGlm aWVkfSxjcmVhdGVGaWx0ZXJGbjpmdW5jdGlvbihjLGIsZCxhKXtpZihFeHQuaXNFbXB0eShiLGZh bHNlKSl7cmV0dXJuIGZhbHNlfWI9dGhpcy5kYXRhLmNyZWF0ZVZhbHVlTWF0Y2hlcihiLGQsYSk7 cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBiLnRlc3QoZS5kYXRhW2NdKX19LHN1bTpmdW5jdGlv bihlLGcsYSl7dmFyIGM9dGhpcy5kYXRhLml0ZW1zLGI9MDtnPWd8fDA7YT0oYXx8YT09PTApP2E6 Yy5sZW5ndGgtMTtmb3IodmFyIGQ9ZztkPD1hO2QrKyl7Yis9KGNbZF0uZGF0YVtlXXx8MCl9cmV0 dXJuIGJ9LGZpbHRlcjpmdW5jdGlvbihkLGMsZSxhKXt2YXIgYj10aGlzLmNyZWF0ZUZpbHRlckZu KGQsYyxlLGEpO3JldHVybiBiP3RoaXMuZmlsdGVyQnkoYik6dGhpcy5jbGVhckZpbHRlcigpfSxm aWx0ZXJCeTpmdW5jdGlvbihiLGEpe3RoaXMuc25hcHNob3Q9dGhpcy5zbmFwc2hvdHx8dGhpcy5k YXRhO3RoaXMuZGF0YT10aGlzLnF1ZXJ5QnkoYixhfHx0aGlzKTt0aGlzLmZpcmVFdmVudCgiZGF0 YWNoYW5nZWQiLHRoaXMpfSxxdWVyeTpmdW5jdGlvbihkLGMsZSxhKXt2YXIgYj10aGlzLmNyZWF0 ZUZpbHRlckZuKGQsYyxlLGEpO3JldHVybiBiP3RoaXMucXVlcnlCeShiKTp0aGlzLmRhdGEuY2xv bmUoKX0scXVlcnlCeTpmdW5jdGlvbihiLGEpe3ZhciBjPXRoaXMuc25hcHNob3R8fHRoaXMuZGF0 YTtyZXR1cm4gYy5maWx0ZXJCeShiLGF8fHRoaXMpfSxmaW5kOmZ1bmN0aW9uKGQsYyxnLGUsYSl7 dmFyIGI9dGhpcy5jcmVhdGVGaWx0ZXJGbihkLGMsZSxhKTtyZXR1cm4gYj90aGlzLmRhdGEuZmlu ZEluZGV4QnkoYixudWxsLGcpOi0xfSxmaW5kRXhhY3Q6ZnVuY3Rpb24oYixhLGMpe3JldHVybiB0 aGlzLmRhdGEuZmluZEluZGV4QnkoZnVuY3Rpb24oZCl7cmV0dXJuIGQuZ2V0KGIpPT09YX0sdGhp cyxjKX0sZmluZEJ5OmZ1bmN0aW9uKGIsYSxjKXtyZXR1cm4gdGhpcy5kYXRhLmZpbmRJbmRleEJ5 KGIsYSxjKX0sY29sbGVjdDpmdW5jdGlvbihqLGssYil7dmFyIGg9KGI9PT10cnVlJiZ0aGlzLnNu YXBzaG90KT90aGlzLnNuYXBzaG90Lml0ZW1zOnRoaXMuZGF0YS5pdGVtczt2YXIgbSxuLGE9W10s Yz17fTtmb3IodmFyIGU9MCxnPWgubGVuZ3RoO2U8ZztlKyspe209aFtlXS5kYXRhW2pdO249U3Ry aW5nKG0pO2lmKChrfHwhRXh0LmlzRW1wdHkobSkpJiYhY1tuXSl7Y1tuXT10cnVlO2FbYS5sZW5n dGhdPW19fXJldHVybiBhfSxjbGVhckZpbHRlcjpmdW5jdGlvbihhKXtpZih0aGlzLmlzRmlsdGVy ZWQoKSl7dGhpcy5kYXRhPXRoaXMuc25hcHNob3Q7ZGVsZXRlIHRoaXMuc25hcHNob3Q7aWYoYSE9 PXRydWUpe3RoaXMuZmlyZUV2ZW50KCJkYXRhY2hhbmdlZCIsdGhpcyl9fX0saXNGaWx0ZXJlZDpm dW5jdGlvbigpe3JldHVybiB0aGlzLnNuYXBzaG90JiZ0aGlzLnNuYXBzaG90IT10aGlzLmRhdGF9 LGFmdGVyRWRpdDpmdW5jdGlvbihhKXtpZih0aGlzLm1vZGlmaWVkLmluZGV4T2YoYSk9PS0xKXt0 aGlzLm1vZGlmaWVkLnB1c2goYSl9dGhpcy5maXJlRXZlbnQoInVwZGF0ZSIsdGhpcyxhLEV4dC5k YXRhLlJlY29yZC5FRElUKX0sYWZ0ZXJSZWplY3Q6ZnVuY3Rpb24oYSl7dGhpcy5tb2RpZmllZC5y ZW1vdmUoYSk7dGhpcy5maXJlRXZlbnQoInVwZGF0ZSIsdGhpcyxhLEV4dC5kYXRhLlJlY29yZC5S RUpFQ1QpfSxhZnRlckNvbW1pdDpmdW5jdGlvbihhKXt0aGlzLm1vZGlmaWVkLnJlbW92ZShhKTt0 aGlzLmZpcmVFdmVudCgidXBkYXRlIix0aGlzLGEsRXh0LmRhdGEuUmVjb3JkLkNPTU1JVCl9LGNv bW1pdENoYW5nZXM6ZnVuY3Rpb24oKXt2YXIgYj10aGlzLm1vZGlmaWVkLnNsaWNlKDApO3RoaXMu bW9kaWZpZWQ9W107Zm9yKHZhciBjPTAsYT1iLmxlbmd0aDtjPGE7YysrKXtiW2NdLmNvbW1pdCgp fX0scmVqZWN0Q2hhbmdlczpmdW5jdGlvbigpe3ZhciBiPXRoaXMubW9kaWZpZWQuc2xpY2UoMCk7 dGhpcy5tb2RpZmllZD1bXTtmb3IodmFyIGM9MCxhPWIubGVuZ3RoO2M8YTtjKyspe2JbY10ucmVq ZWN0KCl9fSxvbk1ldGFDaGFuZ2U6ZnVuY3Rpb24oYixhLGMpe3RoaXMucmVjb3JkVHlwZT1hO3Ro aXMuZmllbGRzPWEucHJvdG90eXBlLmZpZWxkcztkZWxldGUgdGhpcy5zbmFwc2hvdDtpZihiLnNv cnRJbmZvKXt0aGlzLnNvcnRJbmZvPWIuc29ydEluZm99ZWxzZXtpZih0aGlzLnNvcnRJbmZvJiYh dGhpcy5maWVsZHMuZ2V0KHRoaXMuc29ydEluZm8uZmllbGQpKXtkZWxldGUgdGhpcy5zb3J0SW5m b319dGhpcy5tb2RpZmllZD1bXTt0aGlzLmZpcmVFdmVudCgibWV0YWNoYW5nZSIsdGhpcyx0aGlz LnJlYWRlci5tZXRhKX0sZmluZEluc2VydEluZGV4OmZ1bmN0aW9uKGEpe3RoaXMuc3VzcGVuZEV2 ZW50cygpO3ZhciBjPXRoaXMuZGF0YS5jbG9uZSgpO3RoaXMuZGF0YS5hZGQoYSk7dGhpcy5hcHBs eVNvcnQoKTt2YXIgYj10aGlzLmRhdGEuaW5kZXhPZihhKTt0aGlzLmRhdGE9Yzt0aGlzLnJlc3Vt ZUV2ZW50cygpO3JldHVybiBifSxzZXRCYXNlUGFyYW06ZnVuY3Rpb24oYSxiKXt0aGlzLmJhc2VQ YXJhbXM9dGhpcy5iYXNlUGFyYW1zfHx7fTt0aGlzLmJhc2VQYXJhbXNbYV09Yn19KTtFeHQucmVn KCJzdG9yZSIsRXh0LmRhdGEuU3RvcmUpO0V4dC5kYXRhLlN0b3JlLkVycm9yPUV4dC5leHRlbmQo RXh0LkVycm9yLHtuYW1lOiJFeHQuZGF0YS5TdG9yZSJ9KTtFeHQuYXBwbHkoRXh0LmRhdGEuU3Rv cmUuRXJyb3IucHJvdG90eXBlLHtsYW5nOnsid3JpdGVyLXVuZGVmaW5lZCI6IkF0dGVtcHRlZCB0 byBleGVjdXRlIGEgd3JpdGUtYWN0aW9uIHdpdGhvdXQgYSBEYXRhV3JpdGVyIGluc3RhbGxlZC4i fX0pO0V4dC5kYXRhLkZpZWxkPWZ1bmN0aW9uKGQpe2lmKHR5cGVvZiBkPT0ic3RyaW5nIil7ZD17 bmFtZTpkfX1FeHQuYXBwbHkodGhpcyxkKTtpZighdGhpcy50eXBlKXt0aGlzLnR5cGU9ImF1dG8i fXZhciBjPUV4dC5kYXRhLlNvcnRUeXBlcztpZih0eXBlb2YgdGhpcy5zb3J0VHlwZT09InN0cmlu ZyIpe3RoaXMuc29ydFR5cGU9Y1t0aGlzLnNvcnRUeXBlXX1pZighdGhpcy5zb3J0VHlwZSl7c3dp dGNoKHRoaXMudHlwZSl7Y2FzZSJzdHJpbmciOnRoaXMuc29ydFR5cGU9Yy5hc1VDU3RyaW5nO2Jy ZWFrO2Nhc2UiZGF0ZSI6dGhpcy5zb3J0VHlwZT1jLmFzRGF0ZTticmVhaztkZWZhdWx0OnRoaXMu c29ydFR5cGU9Yy5ub25lfX12YXIgZT0vW1wkLCVdL2c7aWYoIXRoaXMuY29udmVydCl7dmFyIGIs YT10aGlzLmRhdGVGb3JtYXQ7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSIiOmNhc2UiYXV0byI6Y2Fz ZSB1bmRlZmluZWQ6Yj1mdW5jdGlvbihnKXtyZXR1cm4gZ307YnJlYWs7Y2FzZSJzdHJpbmciOmI9 ZnVuY3Rpb24oZyl7cmV0dXJuKGc9PT11bmRlZmluZWR8fGc9PT1udWxsKT8iIjpTdHJpbmcoZyl9 O2JyZWFrO2Nhc2UiaW50IjpiPWZ1bmN0aW9uKGcpe3JldHVybiBnIT09dW5kZWZpbmVkJiZnIT09 bnVsbCYmZyE9PSIiP3BhcnNlSW50KFN0cmluZyhnKS5yZXBsYWNlKGUsIiIpLDEwKToiIn07YnJl YWs7Y2FzZSJmbG9hdCI6Yj1mdW5jdGlvbihnKXtyZXR1cm4gZyE9PXVuZGVmaW5lZCYmZyE9PW51 bGwmJmchPT0iIj9wYXJzZUZsb2F0KFN0cmluZyhnKS5yZXBsYWNlKGUsIiIpLDEwKToiIn07YnJl YWs7Y2FzZSJib29sIjpjYXNlImJvb2xlYW4iOmI9ZnVuY3Rpb24oZyl7cmV0dXJuIGc9PT10cnVl fHxnPT09InRydWUifHxnPT0xfTticmVhaztjYXNlImRhdGUiOmI9ZnVuY3Rpb24oaCl7aWYoIWgp e3JldHVybiIifWlmKEV4dC5pc0RhdGUoaCkpe3JldHVybiBofWlmKGEpe2lmKGE9PSJ0aW1lc3Rh bXAiKXtyZXR1cm4gbmV3IERhdGUoaCoxMDAwKX1pZihhPT0idGltZSIpe3JldHVybiBuZXcgRGF0 ZShwYXJzZUludChoLDEwKSl9cmV0dXJuIERhdGUucGFyc2VEYXRlKGgsYSl9dmFyIGc9RGF0ZS5w YXJzZShoKTtyZXR1cm4gZz9uZXcgRGF0ZShnKTpudWxsfTticmVha310aGlzLmNvbnZlcnQ9Yn19 O0V4dC5kYXRhLkZpZWxkLnByb3RvdHlwZT17ZGF0ZUZvcm1hdDpudWxsLGRlZmF1bHRWYWx1ZToi IixtYXBwaW5nOm51bGwsc29ydFR5cGU6bnVsbCxzb3J0RGlyOiJBU0MiLGFsbG93Qmxhbms6dHJ1 ZX07RXh0LmRhdGEuRGF0YVJlYWRlcj1mdW5jdGlvbihhLGIpe3RoaXMubWV0YT1hO3RoaXMucmVj b3JkVHlwZT1FeHQuaXNBcnJheShiKT9FeHQuZGF0YS5SZWNvcmQuY3JlYXRlKGIpOmJ9O0V4dC5k YXRhLkRhdGFSZWFkZXIucHJvdG90eXBlPXtidWlsZEV4dHJhY3RvcnM6RXh0LmVtcHR5Rm4scmVh bGl6ZTpmdW5jdGlvbihiLGQpe2lmKEV4dC5pc0FycmF5KGIpKXtmb3IodmFyIGM9Yi5sZW5ndGgt MTtjPj0wO2MtLSl7aWYoRXh0LmlzQXJyYXkoZCkpe3RoaXMucmVhbGl6ZShiLnNwbGljZShjLDEp LnNoaWZ0KCksZC5zcGxpY2UoYywxKS5zaGlmdCgpKX1lbHNle3RoaXMucmVhbGl6ZShiLnNwbGlj ZShjLDEpLnNoaWZ0KCksZCl9fX1lbHNle2lmKEV4dC5pc0FycmF5KGQpJiZkLmxlbmd0aD09MSl7 ZD1kLnNoaWZ0KCl9aWYoIXRoaXMuaXNEYXRhKGQpKXt0aHJvdyBuZXcgRXh0LmRhdGEuRGF0YVJl YWRlci5FcnJvcigicmVhbGl6ZSIsYil9dGhpcy5idWlsZEV4dHJhY3RvcnMoKTt2YXIgYT10aGlz LmV4dHJhY3RWYWx1ZXMoZCxiLmZpZWxkcy5pdGVtcyxiLmZpZWxkcy5pdGVtcy5sZW5ndGgpO2Iu cGhhbnRvbT1mYWxzZTtiLl9waGlkPWIuaWQ7Yi5pZD1kW3RoaXMubWV0YS5pZFByb3BlcnR5XTti LmRhdGE9YTtiLmNvbW1pdCgpfX0sdXBkYXRlOmZ1bmN0aW9uKGEsYyl7aWYoRXh0LmlzQXJyYXko YSkpe2Zvcih2YXIgYj1hLmxlbmd0aC0xO2I+PTA7Yi0tKXtpZihFeHQuaXNBcnJheShjKSl7dGhp cy51cGRhdGUoYS5zcGxpY2UoYiwxKS5zaGlmdCgpLGMuc3BsaWNlKGIsMSkuc2hpZnQoKSl9ZWxz ZXt0aGlzLnVwZGF0ZShhLnNwbGljZShiLDEpLnNoaWZ0KCksYyl9fX1lbHNle2lmKEV4dC5pc0Fy cmF5KGMpJiZjLmxlbmd0aD09MSl7Yz1jLnNoaWZ0KCl9aWYoIXRoaXMuaXNEYXRhKGMpKXthLmNv bW1pdCgpO3Rocm93IG5ldyBFeHQuZGF0YS5EYXRhUmVhZGVyLkVycm9yKCJ1cGRhdGUiLGEpfXRo aXMuYnVpbGRFeHRyYWN0b3JzKCk7YS5kYXRhPXRoaXMuZXh0cmFjdFZhbHVlcyhFeHQuYXBwbHko YS5kYXRhLGMpLGEuZmllbGRzLml0ZW1zLGEuZmllbGRzLml0ZW1zLmxlbmd0aCk7YS5jb21taXQo KX19LGlzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4oYSYmRXh0LmlzT2JqZWN0KGEpJiYhRXh0Lmlz RW1wdHkoYVt0aGlzLm1ldGEuaWRQcm9wZXJ0eV0pKT90cnVlOmZhbHNlfX07RXh0LmRhdGEuRGF0 YVJlYWRlci5FcnJvcj1FeHQuZXh0ZW5kKEV4dC5FcnJvcix7Y29uc3RydWN0b3I6ZnVuY3Rpb24o YixhKXt0aGlzLmFyZz1hO0V4dC5FcnJvci5jYWxsKHRoaXMsYil9LG5hbWU6IkV4dC5kYXRhLkRh dGFSZWFkZXIifSk7RXh0LmFwcGx5KEV4dC5kYXRhLkRhdGFSZWFkZXIuRXJyb3IucHJvdG90eXBl LHtsYW5nOnt1cGRhdGU6IiN1cGRhdGUgcmVjZWl2ZWQgaW52YWxpZCBkYXRhIGZyb20gc2VydmVy LiAgUGxlYXNlIHNlZSBkb2NzIGZvciBEYXRhUmVhZGVyI3VwZGF0ZSBhbmQgcmV2aWV3IHlvdXIg RGF0YVJlYWRlciBjb25maWd1cmF0aW9uLiIscmVhbGl6ZToiI3JlYWxpemUgd2FzIGNhbGxlZCB3 aXRoIGludmFsaWQgcmVtb3RlLWRhdGEuICBQbGVhc2Ugc2VlIHRoZSBkb2NzIGZvciBEYXRhUmVh ZGVyI3JlYWxpemUgYW5kIHJldmlldyB5b3VyIERhdGFSZWFkZXIgY29uZmlndXJhdGlvbi4iLCJp bnZhbGlkLXJlc3BvbnNlIjoiI3JlYWRSZXNwb25zZSByZWNlaXZlZCBhbiBpbnZhbGlkIHJlc3Bv bnNlIGZyb20gdGhlIHNlcnZlci4ifX0pO0V4dC5kYXRhLkRhdGFXcml0ZXI9ZnVuY3Rpb24oYSl7 RXh0LmFwcGx5KHRoaXMsYSl9O0V4dC5kYXRhLkRhdGFXcml0ZXIucHJvdG90eXBlPXt3cml0ZUFs bEZpZWxkczpmYWxzZSxsaXN0ZnVsOmZhbHNlLHdyaXRlOmZ1bmN0aW9uKGIsYyxhKXt0aGlzLnJl bmRlcihiLGEsYyx0aGlzW2JdKGEpKX0scmVuZGVyOkV4dC5lbXB0eUZuLHVwZGF0ZTpmdW5jdGlv bihhKXt2YXIgZD17fTtpZihFeHQuaXNBcnJheShhKSl7dmFyIGM9W10sYj1bXTtFeHQuZWFjaChh LGZ1bmN0aW9uKGUpe2IucHVzaChlLmlkKTtjLnB1c2godGhpcy51cGRhdGVSZWNvcmQoZSkpfSx0 aGlzKTtkW3RoaXMubWV0YS5pZFByb3BlcnR5XT1iO2RbdGhpcy5tZXRhLnJvb3RdPWN9ZWxzZXtp ZihhIGluc3RhbmNlb2YgRXh0LmRhdGEuUmVjb3JkKXtkW3RoaXMubWV0YS5pZFByb3BlcnR5XT1h LmlkO2RbdGhpcy5tZXRhLnJvb3RdPXRoaXMudXBkYXRlUmVjb3JkKGEpfX1yZXR1cm4gZH0sdXBk YXRlUmVjb3JkOkV4dC5lbXB0eUZuLGNyZWF0ZTpmdW5jdGlvbihhKXt2YXIgYz17fTtpZihFeHQu aXNBcnJheShhKSl7dmFyIGI9W107RXh0LmVhY2goYSxmdW5jdGlvbihkKXtiLnB1c2godGhpcy5j cmVhdGVSZWNvcmQoZCkpfSx0aGlzKTtjW3RoaXMubWV0YS5yb290XT1ifWVsc2V7aWYoYSBpbnN0 YW5jZW9mIEV4dC5kYXRhLlJlY29yZCl7Y1t0aGlzLm1ldGEucm9vdF09dGhpcy5jcmVhdGVSZWNv cmQoYSl9fXJldHVybiBjfSxjcmVhdGVSZWNvcmQ6RXh0LmVtcHR5Rm4sZGVzdHJveTpmdW5jdGlv bihhKXt2YXIgZD17fTtpZihFeHQuaXNBcnJheShhKSl7dmFyIGM9W10sYj1bXTtFeHQuZWFjaChh LGZ1bmN0aW9uKGUpe2MucHVzaCh0aGlzLmRlc3Ryb3lSZWNvcmQoZSkpfSx0aGlzKTtkW3RoaXMu bWV0YS5yb290XT1jfWVsc2V7aWYoYSBpbnN0YW5jZW9mIEV4dC5kYXRhLlJlY29yZCl7ZFt0aGlz Lm1ldGEucm9vdF09dGhpcy5kZXN0cm95UmVjb3JkKGEpfX1yZXR1cm4gZH0sZGVzdHJveVJlY29y ZDpFeHQuZW1wdHlGbix0b0hhc2g6ZnVuY3Rpb24oZSl7dmFyIGQ9ZS5maWVsZHMubWFwLGM9e30s Yj0odGhpcy53cml0ZUFsbEZpZWxkcz09PWZhbHNlJiZlLnBoYW50b209PT1mYWxzZSk/ZS5nZXRD aGFuZ2VzKCk6ZS5kYXRhLGE7RXh0Lml0ZXJhdGUoYixmdW5jdGlvbihoLGcpe2lmKChhPWRbaF0p KXtjW2EubWFwcGluZz9hLm1hcHBpbmc6YS5uYW1lXT1nfX0pO2NbdGhpcy5tZXRhLmlkUHJvcGVy dHldPWUuaWQ7cmV0dXJuIGN9fTtFeHQuZGF0YS5EYXRhUHJveHk9ZnVuY3Rpb24oYSl7YT1hfHx7 fTt0aGlzLmFwaT1hLmFwaTt0aGlzLnVybD1hLnVybDt0aGlzLnJlc3RmdWw9YS5yZXN0ZnVsO3Ro aXMubGlzdGVuZXJzPWEubGlzdGVuZXJzO3RoaXMucHJldHR5VXJscz1hLnByZXR0eVVybHM7dHJ5 e0V4dC5kYXRhLkFwaS5wcmVwYXJlKHRoaXMpfWNhdGNoKGIpe2lmKGIgaW5zdGFuY2VvZiBFeHQu ZGF0YS5BcGkuRXJyb3Ipe2IudG9Db25zb2xlKCl9fXRoaXMuYWRkRXZlbnRzKCJleGNlcHRpb24i LCJiZWZvcmVsb2FkIiwibG9hZCIsImxvYWRleGNlcHRpb24iLCJiZWZvcmV3cml0ZSIsIndyaXRl Iik7RXh0LmRhdGEuRGF0YVByb3h5LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKX07 RXh0LmV4dGVuZChFeHQuZGF0YS5EYXRhUHJveHksRXh0LnV0aWwuT2JzZXJ2YWJsZSx7cmVzdGZ1 bDpmYWxzZSxzZXRBcGk6ZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT0xKXt2YXIgYT1F eHQuZGF0YS5BcGkuaXNWYWxpZChhcmd1bWVudHNbMF0pO2lmKGE9PT10cnVlKXt0aGlzLmFwaT1h cmd1bWVudHNbMF19ZWxzZXt0aHJvdyBuZXcgRXh0LmRhdGEuQXBpLkVycm9yKCJpbnZhbGlkIixh KX19ZWxzZXtpZihhcmd1bWVudHMubGVuZ3RoPT0yKXtpZighRXh0LmRhdGEuQXBpLmlzQWN0aW9u KGFyZ3VtZW50c1swXSkpe3Rocm93IG5ldyBFeHQuZGF0YS5BcGkuRXJyb3IoImludmFsaWQiLGFy Z3VtZW50c1swXSl9dGhpcy5hcGlbYXJndW1lbnRzWzBdXT1hcmd1bWVudHNbMV19fUV4dC5kYXRh LkFwaS5wcmVwYXJlKHRoaXMpfSxpc0FwaUFjdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4odGhpcy5h cGlbYV0pP3RydWU6ZmFsc2V9LHJlcXVlc3Q6ZnVuY3Rpb24oZSxiLGcsYSxoLGQsYyl7aWYoIXRo aXMuYXBpW2VdJiYhdGhpcy5sb2FkKXt0aHJvdyBuZXcgRXh0LmRhdGEuRGF0YVByb3h5LkVycm9y KCJhY3Rpb24tdW5kZWZpbmVkIixlKX1nPWd8fHt9O2lmKChlPT09RXh0LmRhdGEuQXBpLmFjdGlv bnMucmVhZCk/dGhpcy5maXJlRXZlbnQoImJlZm9yZWxvYWQiLHRoaXMsZyk6dGhpcy5maXJlRXZl bnQoImJlZm9yZXdyaXRlIix0aGlzLGUsYixnKSE9PWZhbHNlKXt0aGlzLmRvUmVxdWVzdC5hcHBs eSh0aGlzLGFyZ3VtZW50cyl9ZWxzZXtoLmNhbGwoZHx8dGhpcyxudWxsLGMsZmFsc2UpfX0sbG9h ZDpudWxsLGRvUmVxdWVzdDpmdW5jdGlvbihlLGIsZyxhLGgsZCxjKXt0aGlzLmxvYWQoZyxhLGgs ZCxjKX0sYnVpbGRVcmw6ZnVuY3Rpb24oZCxiKXtiPWJ8fG51bGw7dmFyIGM9KHRoaXMuYXBpW2Rd KT90aGlzLmFwaVtkXS51cmw6dGhpcy51cmw7aWYoIWMpe3Rocm93IG5ldyBFeHQuZGF0YS5BcGku RXJyb3IoImludmFsaWQtdXJsIixkKX12YXIgZT1udWxsO3ZhciBhPWMubWF0Y2goLyguKikoXC5c dyspJC8pO2lmKGEpe2U9YVsyXTtjPWFbMV19aWYoKHRoaXMucHJldHR5VXJscz09PXRydWV8fHRo aXMucmVzdGZ1bD09PXRydWUpJiZiIGluc3RhbmNlb2YgRXh0LmRhdGEuUmVjb3JkJiYhYi5waGFu dG9tKXtjKz0iLyIrYi5pZH1pZihlKXtjKz1lfXJldHVybiBjfSxkZXN0cm95OmZ1bmN0aW9uKCl7 dGhpcy5wdXJnZUxpc3RlbmVycygpfX0pO0V4dC5kYXRhLkRhdGFQcm94eS5FcnJvcj1FeHQuZXh0 ZW5kKEV4dC5FcnJvcix7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYixhKXt0aGlzLmFyZz1hO0V4dC5F cnJvci5jYWxsKHRoaXMsYil9LG5hbWU6IkV4dC5kYXRhLkRhdGFQcm94eSJ9KTtFeHQuYXBwbHko RXh0LmRhdGEuRGF0YVByb3h5LkVycm9yLnByb3RvdHlwZSx7bGFuZzp7ImFjdGlvbi11bmRlZmlu ZWQiOiJEYXRhUHJveHkgYXR0ZW1wdGVkIHRvIGV4ZWN1dGUgYW4gQVBJLWFjdGlvbiBidXQgZm91 bmQgYW4gdW5kZWZpbmVkIHVybCAvIGZ1bmN0aW9uLiAgUGxlYXNlIHJldmlldyB5b3VyIFByb3h5 IHVybC9hcGktY29uZmlndXJhdGlvbi4iLCJhcGktaW52YWxpZCI6IlJlY2lldmVkIGFuIGludmFs aWQgQVBJLWNvbmZpZ3VyYXRpb24uICBQbGVhc2UgZW5zdXJlIHlvdXIgcHJveHkgQVBJLWNvbmZp Z3VyYXRpb24gY29udGFpbnMgb25seSB0aGUgYWN0aW9ucyBmcm9tIEV4dC5kYXRhLkFwaS5hY3Rp b25zLiJ9fSk7RXh0LmRhdGEuU2NyaXB0VGFnUHJveHk9ZnVuY3Rpb24oYSl7RXh0LmFwcGx5KHRo aXMsYSk7RXh0LmRhdGEuU2NyaXB0VGFnUHJveHkuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxs KHRoaXMsYSk7dGhpcy5oZWFkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilb MF19O0V4dC5kYXRhLlNjcmlwdFRhZ1Byb3h5LlRSQU5TX0lEPTEwMDA7RXh0LmV4dGVuZChFeHQu ZGF0YS5TY3JpcHRUYWdQcm94eSxFeHQuZGF0YS5EYXRhUHJveHkse3RpbWVvdXQ6MzAwMDAsY2Fs bGJhY2tQYXJhbToiY2FsbGJhY2siLG5vY2FjaGU6dHJ1ZSxkb1JlcXVlc3Q6ZnVuY3Rpb24oZSxn LGQsaCxqLGssbCl7dmFyIGM9RXh0LnVybEVuY29kZShFeHQuYXBwbHkoZCx0aGlzLmV4dHJhUGFy YW1zKSk7dmFyIGI9dGhpcy5idWlsZFVybChlLGcpO2lmKCFiKXt0aHJvdyBuZXcgRXh0LmRhdGEu QXBpLkVycm9yKCJpbnZhbGlkLXVybCIsYil9Yj1FeHQudXJsQXBwZW5kKGIsYyk7aWYodGhpcy5u b2NhY2hlKXtiPUV4dC51cmxBcHBlbmQoYiwiX2RjPSIrKG5ldyBEYXRlKCkuZ2V0VGltZSgpKSl9 dmFyIGE9KytFeHQuZGF0YS5TY3JpcHRUYWdQcm94eS5UUkFOU19JRDt2YXIgbT17aWQ6YSxhY3Rp b246ZSxjYjoic3RjQ2FsbGJhY2siK2Esc2NyaXB0SWQ6InN0Y1NjcmlwdCIrYSxwYXJhbXM6ZCxh cmc6bCx1cmw6YixjYWxsYmFjazpqLHNjb3BlOmsscmVhZGVyOmh9O3dpbmRvd1ttLmNiXT10aGlz LmNyZWF0ZUNhbGxiYWNrKGUsZyxtKTtiKz1TdHJpbmcuZm9ybWF0KCImezB9PXsxfSIsdGhpcy5j YWxsYmFja1BhcmFtLG0uY2IpO2lmKHRoaXMuYXV0b0Fib3J0IT09ZmFsc2Upe3RoaXMuYWJvcnQo KX1tLnRpbWVvdXRJZD10aGlzLmhhbmRsZUZhaWx1cmUuZGVmZXIodGhpcy50aW1lb3V0LHRoaXMs W21dKTt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtpLnNldEF0dHJpYnV0 ZSgic3JjIixiKTtpLnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvamF2YXNjcmlwdCIpO2kuc2V0 QXR0cmlidXRlKCJpZCIsbS5zY3JpcHRJZCk7dGhpcy5oZWFkLmFwcGVuZENoaWxkKGkpO3RoaXMu dHJhbnM9bX0sY3JlYXRlQ2FsbGJhY2s6ZnVuY3Rpb24oZCxiLGMpe3ZhciBhPXRoaXM7cmV0dXJu IGZ1bmN0aW9uKGUpe2EudHJhbnM9ZmFsc2U7YS5kZXN0cm95VHJhbnMoYyx0cnVlKTtpZihkPT09 RXh0LmRhdGEuQXBpLmFjdGlvbnMucmVhZCl7YS5vblJlYWQuY2FsbChhLGQsYyxlKX1lbHNle2Eu b25Xcml0ZS5jYWxsKGEsZCxjLGUsYil9fX0sb25SZWFkOmZ1bmN0aW9uKGQsYyxiKXt2YXIgYTt0 cnl7YT1jLnJlYWRlci5yZWFkUmVjb3JkcyhiKX1jYXRjaChnKXt0aGlzLmZpcmVFdmVudCgibG9h ZGV4Y2VwdGlvbiIsdGhpcyxjLGIsZyk7dGhpcy5maXJlRXZlbnQoImV4Y2VwdGlvbiIsdGhpcywi cmVzcG9uc2UiLGQsYyxiLGcpO2MuY2FsbGJhY2suY2FsbChjLnNjb3BlfHx3aW5kb3csbnVsbCxj LmFyZyxmYWxzZSk7cmV0dXJufWlmKGEuc3VjY2Vzcz09PWZhbHNlKXt0aGlzLmZpcmVFdmVudCgi bG9hZGV4Y2VwdGlvbiIsdGhpcyxjLGIpO3RoaXMuZmlyZUV2ZW50KCJleGNlcHRpb24iLHRoaXMs InJlbW90ZSIsZCxjLGIsbnVsbCl9ZWxzZXt0aGlzLmZpcmVFdmVudCgibG9hZCIsdGhpcyxiLGMu YXJnKX1jLmNhbGxiYWNrLmNhbGwoYy5zY29wZXx8d2luZG93LGEsYy5hcmcsYS5zdWNjZXNzKX0s b25Xcml0ZTpmdW5jdGlvbihnLGQsYyxiKXt2YXIgYT1kLnJlYWRlcjt0cnl7YS5yZWFkUmVzcG9u c2UoZyxjKX1jYXRjaChoKXt0aGlzLmZpcmVFdmVudCgiZXhjZXB0aW9uIix0aGlzLCJyZXNwb25z ZSIsZyxkLGMsaCk7ZC5jYWxsYmFjay5jYWxsKGQuc2NvcGV8fHdpbmRvdyxudWxsLGMsZmFsc2Up O3JldHVybn1pZighY1thLm1ldGEuc3VjY2Vzc1Byb3BlcnR5XT09PXRydWUpe3RoaXMuZmlyZUV2 ZW50KCJleGNlcHRpb24iLHRoaXMsInJlbW90ZSIsZyxkLGMsYik7ZC5jYWxsYmFjay5jYWxsKGQu c2NvcGV8fHdpbmRvdyxudWxsLGMsZmFsc2UpO3JldHVybn10aGlzLmZpcmVFdmVudCgid3JpdGUi LHRoaXMsZyxjW2EubWV0YS5yb290XSxjLGIsZC5hcmcpO2QuY2FsbGJhY2suY2FsbChkLnNjb3Bl fHx3aW5kb3csY1thLm1ldGEucm9vdF0sYyx0cnVlKX0saXNMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0 dXJuIHRoaXMudHJhbnM/dHJ1ZTpmYWxzZX0sYWJvcnQ6ZnVuY3Rpb24oKXtpZih0aGlzLmlzTG9h ZGluZygpKXt0aGlzLmRlc3Ryb3lUcmFucyh0aGlzLnRyYW5zKX19LGRlc3Ryb3lUcmFuczpmdW5j dGlvbihiLGEpe3RoaXMuaGVhZC5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChi LnNjcmlwdElkKSk7Y2xlYXJUaW1lb3V0KGIudGltZW91dElkKTtpZihhKXt3aW5kb3dbYi5jYl09 dW5kZWZpbmVkO3RyeXtkZWxldGUgd2luZG93W2IuY2JdfWNhdGNoKGMpe319ZWxzZXt3aW5kb3db Yi5jYl09ZnVuY3Rpb24oKXt3aW5kb3dbYi5jYl09dW5kZWZpbmVkO3RyeXtkZWxldGUgd2luZG93 W2IuY2JdfWNhdGNoKGQpe319fX0saGFuZGxlRmFpbHVyZTpmdW5jdGlvbihhKXt0aGlzLnRyYW5z PWZhbHNlO3RoaXMuZGVzdHJveVRyYW5zKGEsZmFsc2UpO2lmKGEuYWN0aW9uPT09RXh0LmRhdGEu QXBpLmFjdGlvbnMucmVhZCl7dGhpcy5maXJlRXZlbnQoImxvYWRleGNlcHRpb24iLHRoaXMsbnVs bCxhLmFyZyl9dGhpcy5maXJlRXZlbnQoImV4Y2VwdGlvbiIsdGhpcywicmVzcG9uc2UiLGEuYWN0 aW9uLHtyZXNwb25zZTpudWxsLG9wdGlvbnM6YS5hcmd9KTthLmNhbGxiYWNrLmNhbGwoYS5zY29w ZXx8d2luZG93LG51bGwsYS5hcmcsZmFsc2UpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5hYm9y dCgpO0V4dC5kYXRhLlNjcmlwdFRhZ1Byb3h5LnN1cGVyY2xhc3MuZGVzdHJveS5jYWxsKHRoaXMp fX0pO0V4dC5kYXRhLkh0dHBQcm94eT1mdW5jdGlvbihhKXtFeHQuZGF0YS5IdHRwUHJveHkuc3Vw ZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5jb25uPWE7dGhpcy5jb25uLnVy bD1udWxsO3RoaXMudXNlQWpheD0hYXx8IWEuZXZlbnRzO3ZhciBjPUV4dC5kYXRhLkFwaS5hY3Rp b25zO3RoaXMuYWN0aXZlUmVxdWVzdD17fTtmb3IodmFyIGIgaW4gYyl7dGhpcy5hY3RpdmVSZXF1 ZXN0W2NbYl1dPXVuZGVmaW5lZH19O0V4dC5leHRlbmQoRXh0LmRhdGEuSHR0cFByb3h5LEV4dC5k YXRhLkRhdGFQcm94eSx7Z2V0Q29ubmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVzZUFq YXg/RXh0LkFqYXg6dGhpcy5jb25ufSxzZXRVcmw6ZnVuY3Rpb24oYSxiKXt0aGlzLmNvbm4udXJs PWE7aWYoYj09PXRydWUpe3RoaXMudXJsPWE7RXh0LmRhdGEuQXBpLnByZXBhcmUodGhpcyl9fSxk b1JlcXVlc3Q6ZnVuY3Rpb24oZyxkLGksYyxiLGUsYSl7dmFyIGg9e21ldGhvZDoodGhpcy5hcGlb Z10pP3RoaXMuYXBpW2ddWyJtZXRob2QiXTp1bmRlZmluZWQscmVxdWVzdDp7Y2FsbGJhY2s6Yixz Y29wZTplLGFyZzphfSxyZWFkZXI6YyxjYWxsYmFjazp0aGlzLmNyZWF0ZUNhbGxiYWNrKGcsZCks c2NvcGU6dGhpc307aWYodHlwZW9mKGlbYy5tZXRhLnJvb3RdKT09PSJvYmplY3QiKXtoLmpzb25E YXRhPWl9ZWxzZXtoLnBhcmFtcz1pfHx7fX1pZih0aGlzLmNvbm4udXJsPT09bnVsbCl7dGhpcy5j b25uLnVybD10aGlzLmJ1aWxkVXJsKGcsZCl9ZWxzZXtpZih0aGlzLnJlc3RmdWw9PT10cnVlJiZk IGluc3RhbmNlb2YgRXh0LmRhdGEuUmVjb3JkJiYhZC5waGFudG9tKXt0aGlzLmNvbm4udXJsKz0i LyIrZC5pZH19aWYodGhpcy51c2VBamF4KXtFeHQuYXBwbHlJZihoLHRoaXMuY29ubik7aWYodGhp cy5hY3RpdmVSZXF1ZXN0W2ddKXt9dGhpcy5hY3RpdmVSZXF1ZXN0W2ddPUV4dC5BamF4LnJlcXVl c3QoaCl9ZWxzZXt0aGlzLmNvbm4ucmVxdWVzdChoKX10aGlzLmNvbm4udXJsPW51bGx9LGNyZWF0 ZUNhbGxiYWNrOmZ1bmN0aW9uKGIsYSl7cmV0dXJuIGZ1bmN0aW9uKGUsZCxjKXt0aGlzLmFjdGl2 ZVJlcXVlc3RbYl09dW5kZWZpbmVkO2lmKCFkKXtpZihiPT09RXh0LmRhdGEuQXBpLmFjdGlvbnMu cmVhZCl7dGhpcy5maXJlRXZlbnQoImxvYWRleGNlcHRpb24iLHRoaXMsZSxjKX10aGlzLmZpcmVF dmVudCgiZXhjZXB0aW9uIix0aGlzLCJyZXNwb25zZSIsYixlLGMpO2UucmVxdWVzdC5jYWxsYmFj ay5jYWxsKGUucmVxdWVzdC5zY29wZSxudWxsLGUucmVxdWVzdC5hcmcsZmFsc2UpO3JldHVybn1p ZihiPT09RXh0LmRhdGEuQXBpLmFjdGlvbnMucmVhZCl7dGhpcy5vblJlYWQoYixlLGMpfWVsc2V7 dGhpcy5vbldyaXRlKGIsZSxjLGEpfX19LG9uUmVhZDpmdW5jdGlvbihkLGgsYil7dmFyIGE7dHJ5 e2E9aC5yZWFkZXIucmVhZChiKX1jYXRjaChnKXt0aGlzLmZpcmVFdmVudCgibG9hZGV4Y2VwdGlv biIsdGhpcyxoLGIsZyk7dGhpcy5maXJlRXZlbnQoImV4Y2VwdGlvbiIsdGhpcywicmVzcG9uc2Ui LGQsaCxiLGcpO2gucmVxdWVzdC5jYWxsYmFjay5jYWxsKGgucmVxdWVzdC5zY29wZSxudWxsLGgu cmVxdWVzdC5hcmcsZmFsc2UpO3JldHVybn1pZihhLnN1Y2Nlc3M9PT1mYWxzZSl7dGhpcy5maXJl RXZlbnQoImxvYWRleGNlcHRpb24iLHRoaXMsaCxiKTt2YXIgYz1oLnJlYWRlci5yZWFkUmVzcG9u c2UoZCxiKTt0aGlzLmZpcmVFdmVudCgiZXhjZXB0aW9uIix0aGlzLCJyZW1vdGUiLGQsaCxjLG51 bGwpfWVsc2V7dGhpcy5maXJlRXZlbnQoImxvYWQiLHRoaXMsaCxoLnJlcXVlc3QuYXJnKX1oLnJl cXVlc3QuY2FsbGJhY2suY2FsbChoLnJlcXVlc3Quc2NvcGUsYSxoLnJlcXVlc3QuYXJnLGEuc3Vj Y2Vzcyl9LG9uV3JpdGU6ZnVuY3Rpb24oZyxpLGMsYil7dmFyIGE9aS5yZWFkZXI7dmFyIGQ7dHJ5 e2Q9YS5yZWFkUmVzcG9uc2UoZyxjKX1jYXRjaChoKXt0aGlzLmZpcmVFdmVudCgiZXhjZXB0aW9u Iix0aGlzLCJyZXNwb25zZSIsZyxpLGMsaCk7aS5yZXF1ZXN0LmNhbGxiYWNrLmNhbGwoaS5yZXF1 ZXN0LnNjb3BlLG51bGwsaS5yZXF1ZXN0LmFyZyxmYWxzZSk7cmV0dXJufWlmKGRbYS5tZXRhLnN1 Y2Nlc3NQcm9wZXJ0eV09PT1mYWxzZSl7dGhpcy5maXJlRXZlbnQoImV4Y2VwdGlvbiIsdGhpcywi cmVtb3RlIixnLGksZCxiKX1lbHNle3RoaXMuZmlyZUV2ZW50KCJ3cml0ZSIsdGhpcyxnLGRbYS5t ZXRhLnJvb3RdLGQsYixpLnJlcXVlc3QuYXJnKX1pLnJlcXVlc3QuY2FsbGJhY2suY2FsbChpLnJl cXVlc3Quc2NvcGUsZFthLm1ldGEucm9vdF0sZCxkW2EubWV0YS5zdWNjZXNzUHJvcGVydHldKX0s ZGVzdHJveTpmdW5jdGlvbigpe2lmKCF0aGlzLnVzZUFqYXgpe3RoaXMuY29ubi5hYm9ydCgpfWVs c2V7aWYodGhpcy5hY3RpdmVSZXF1ZXN0KXt2YXIgYj1FeHQuZGF0YS5BcGkuYWN0aW9ucztmb3Io dmFyIGEgaW4gYil7aWYodGhpcy5hY3RpdmVSZXF1ZXN0W2JbYV1dKXtFeHQuQWpheC5hYm9ydCh0 aGlzLmFjdGl2ZVJlcXVlc3RbYlthXV0pfX19fUV4dC5kYXRhLkh0dHBQcm94eS5zdXBlcmNsYXNz LmRlc3Ryb3kuY2FsbCh0aGlzKX19KTtFeHQuZGF0YS5NZW1vcnlQcm94eT1mdW5jdGlvbihiKXt2 YXIgYT17fTthW0V4dC5kYXRhLkFwaS5hY3Rpb25zLnJlYWRdPXRydWU7RXh0LmRhdGEuTWVtb3J5 UHJveHkuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMse2FwaTphfSk7dGhpcy5kYXRh PWJ9O0V4dC5leHRlbmQoRXh0LmRhdGEuTWVtb3J5UHJveHksRXh0LmRhdGEuRGF0YVByb3h5LHtk b1JlcXVlc3Q6ZnVuY3Rpb24oYixjLGEsZCxoLGksail7YT1hfHx7fTt2YXIgazt0cnl7az1kLnJl YWRSZWNvcmRzKHRoaXMuZGF0YSl9Y2F0Y2goZyl7dGhpcy5maXJlRXZlbnQoImxvYWRleGNlcHRp b24iLHRoaXMsbnVsbCxqLGcpO3RoaXMuZmlyZUV2ZW50KCJleGNlcHRpb24iLHRoaXMsInJlc3Bv bnNlIixiLGosbnVsbCxnKTtoLmNhbGwoaSxudWxsLGosZmFsc2UpO3JldHVybn1oLmNhbGwoaSxr LGosdHJ1ZSl9fSk7RXh0LmRhdGEuSnNvbldyaXRlcj1mdW5jdGlvbihhKXtFeHQuZGF0YS5Kc29u V3JpdGVyLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO2lmKHRoaXMucmV0dXJu SnNvbiE9dW5kZWZpbmVkKXt0aGlzLmVuY29kZT10aGlzLnJldHVybkpzb259fTtFeHQuZXh0ZW5k KEV4dC5kYXRhLkpzb25Xcml0ZXIsRXh0LmRhdGEuRGF0YVdyaXRlcix7cmV0dXJuSnNvbjp1bmRl ZmluZWQsZW5jb2RlOnRydWUscmVuZGVyOmZ1bmN0aW9uKGMsYSxkLGIpe0V4dC5hcHBseShkLGIp O2lmKHRoaXMuZW5jb2RlPT09dHJ1ZSl7aWYoRXh0LmlzQXJyYXkoYSkmJmJbdGhpcy5tZXRhLmlk UHJvcGVydHldKXtkW3RoaXMubWV0YS5pZFByb3BlcnR5XT1FeHQuZW5jb2RlKGRbdGhpcy5tZXRh LmlkUHJvcGVydHldKX1kW3RoaXMubWV0YS5yb290XT1FeHQuZW5jb2RlKGRbdGhpcy5tZXRhLnJv b3RdKX19LGNyZWF0ZVJlY29yZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy50b0hhc2goYSl9LHVw ZGF0ZVJlY29yZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy50b0hhc2goYSl9LGRlc3Ryb3lSZWNv cmQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaWR9fSk7RXh0LmRhdGEuSnNvblJlYWRlcj1mdW5jdGlv bihhLGIpe2E9YXx8e307RXh0LmFwcGx5SWYoYSx7aWRQcm9wZXJ0eToiaWQiLHN1Y2Nlc3NQcm9w ZXJ0eToic3VjY2VzcyIsdG90YWxQcm9wZXJ0eToidG90YWwifSk7RXh0LmRhdGEuSnNvblJlYWRl ci5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhLGJ8fGEuZmllbGRzKX07RXh0LmV4 dGVuZChFeHQuZGF0YS5Kc29uUmVhZGVyLEV4dC5kYXRhLkRhdGFSZWFkZXIse3JlYWQ6ZnVuY3Rp b24oYSl7dmFyIGI9YS5yZXNwb25zZVRleHQ7dmFyIGM9RXh0LmRlY29kZShiKTtpZighYyl7dGhy b3cge21lc3NhZ2U6Ikpzb25SZWFkZXIucmVhZDogSnNvbiBvYmplY3Qgbm90IGZvdW5kIn19cmV0 dXJuIHRoaXMucmVhZFJlY29yZHMoYyl9LG9uTWV0YUNoYW5nZTpmdW5jdGlvbihhLGMsYil7fSxz aW1wbGVBY2Nlc3M6ZnVuY3Rpb24oYixhKXtyZXR1cm4gYlthXX0sZ2V0SnNvbkFjY2Vzc29yOmZ1 bmN0aW9uKCl7dmFyIGE9L1tcW1wuXS87cmV0dXJuIGZ1bmN0aW9uKGMpe3RyeXtyZXR1cm4oYS50 ZXN0KGMpKT9uZXcgRnVuY3Rpb24oIm9iaiIsInJldHVybiBvYmouIitjKTpmdW5jdGlvbihkKXty ZXR1cm4gZFtjXX19Y2F0Y2goYil7fXJldHVybiBFeHQuZW1wdHlGbn19KCkscmVhZFJlY29yZHM6 ZnVuY3Rpb24oYSl7dGhpcy5qc29uRGF0YT1hO2lmKGEubWV0YURhdGEpe2RlbGV0ZSB0aGlzLmVm O3RoaXMubWV0YT1hLm1ldGFEYXRhO3RoaXMucmVjb3JkVHlwZT1FeHQuZGF0YS5SZWNvcmQuY3Jl YXRlKGEubWV0YURhdGEuZmllbGRzKTt0aGlzLm9uTWV0YUNoYW5nZSh0aGlzLm1ldGEsdGhpcy5y ZWNvcmRUeXBlLGEpfXZhciB1PXRoaXMubWV0YSxtPXRoaXMucmVjb3JkVHlwZSxoPW0ucHJvdG90 eXBlLmZpZWxkcyx0PWguaXRlbXMscD1oLmxlbmd0aCxxO3RoaXMuYnVpbGRFeHRyYWN0b3JzKCk7 dmFyIGw9dGhpcy5nZXRSb290KGEpLGs9bC5sZW5ndGgsaj1rLHI9dHJ1ZTtpZih1LnRvdGFsUHJv cGVydHkpe3E9cGFyc2VJbnQodGhpcy5nZXRUb3RhbChhKSwxMCk7aWYoIWlzTmFOKHEpKXtqPXF9 fWlmKHUuc3VjY2Vzc1Byb3BlcnR5KXtxPXRoaXMuZ2V0U3VjY2VzcyhhKTtpZihxPT09ZmFsc2V8 fHE9PT0iZmFsc2UiKXtyPWZhbHNlfX12YXIgZD1bXTtmb3IodmFyIGU9MDtlPGs7ZSsrKXt2YXIg Yj1sW2VdO3ZhciBnPW5ldyBtKHRoaXMuZXh0cmFjdFZhbHVlcyhiLHQscCksdGhpcy5nZXRJZChi KSk7Zy5qc29uPWI7ZFtlXT1nfXJldHVybntzdWNjZXNzOnIscmVjb3JkczpkLHRvdGFsUmVjb3Jk czpqfX0sYnVpbGRFeHRyYWN0b3JzOmZ1bmN0aW9uKCl7aWYodGhpcy5lZil7cmV0dXJufXZhciBs PXRoaXMubWV0YSxoPXRoaXMucmVjb3JkVHlwZSxlPWgucHJvdG90eXBlLmZpZWxkcyxrPWUuaXRl bXMsaj1lLmxlbmd0aDtpZihsLnRvdGFsUHJvcGVydHkpe3RoaXMuZ2V0VG90YWw9dGhpcy5nZXRK c29uQWNjZXNzb3IobC50b3RhbFByb3BlcnR5KX1pZihsLnN1Y2Nlc3NQcm9wZXJ0eSl7dGhpcy5n ZXRTdWNjZXNzPXRoaXMuZ2V0SnNvbkFjY2Vzc29yKGwuc3VjY2Vzc1Byb3BlcnR5KX10aGlzLmdl dFJvb3Q9bC5yb290P3RoaXMuZ2V0SnNvbkFjY2Vzc29yKGwucm9vdCk6ZnVuY3Rpb24oZyl7cmV0 dXJuIGd9O2lmKGwuaWR8fGwuaWRQcm9wZXJ0eSl7dmFyIGQ9dGhpcy5nZXRKc29uQWNjZXNzb3Io bC5pZHx8bC5pZFByb3BlcnR5KTt0aGlzLmdldElkPWZ1bmN0aW9uKGkpe3ZhciBnPWQoaSk7cmV0 dXJuKGc9PT11bmRlZmluZWR8fGc9PT0iIik/bnVsbDpnfX1lbHNle3RoaXMuZ2V0SWQ9ZnVuY3Rp b24oKXtyZXR1cm4gbnVsbH19dmFyIGM9W107Zm9yKHZhciBiPTA7YjxqO2IrKyl7ZT1rW2JdO3Zh ciBhPShlLm1hcHBpbmchPT11bmRlZmluZWQmJmUubWFwcGluZyE9PW51bGwpP2UubWFwcGluZzpl Lm5hbWU7Yy5wdXNoKHRoaXMuZ2V0SnNvbkFjY2Vzc29yKGEpKX10aGlzLmVmPWN9LGV4dHJhY3RW YWx1ZXM6ZnVuY3Rpb24oaCxkLGEpe3ZhciBnLGM9e307Zm9yKHZhciBlPTA7ZTxhO2UrKyl7Zz1k W2VdO3ZhciBiPXRoaXMuZWZbZV0oaCk7Y1tnLm5hbWVdPWcuY29udmVydCgoYiE9PXVuZGVmaW5l ZCk/YjpnLmRlZmF1bHRWYWx1ZSxoKX1yZXR1cm4gY30scmVhZFJlc3BvbnNlOmZ1bmN0aW9uKGIs YSl7dmFyIGM9KGEucmVzcG9uc2VUZXh0IT09dW5kZWZpbmVkKT9FeHQuZGVjb2RlKGEucmVzcG9u c2VUZXh0KTphO2lmKCFjKXt0aHJvdyBuZXcgRXh0LmRhdGEuSnNvblJlYWRlci5FcnJvcigicmVz cG9uc2UiKX1pZihFeHQuaXNFbXB0eShjW3RoaXMubWV0YS5zdWNjZXNzUHJvcGVydHldKSl7dGhy b3cgbmV3IEV4dC5kYXRhLkpzb25SZWFkZXIuRXJyb3IoInN1Y2Nlc3NQcm9wZXJ0eS1yZXNwb25z ZSIsdGhpcy5tZXRhLnN1Y2Nlc3NQcm9wZXJ0eSl9aWYoKGI9PT1FeHQuZGF0YS5BcGkuYWN0aW9u cy5jcmVhdGV8fGI9PT1FeHQuZGF0YS5BcGkuYWN0aW9ucy51cGRhdGUpKXtpZihFeHQuaXNFbXB0 eShjW3RoaXMubWV0YS5yb290XSkpe3Rocm93IG5ldyBFeHQuZGF0YS5Kc29uUmVhZGVyLkVycm9y KCJyb290LWVtdHB5Iix0aGlzLm1ldGEucm9vdCl9ZWxzZXtpZihjW3RoaXMubWV0YS5yb290XT09 PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEV4dC5kYXRhLkpzb25SZWFkZXIuRXJyb3IoInJvb3QtdW5k ZWZpbmVkLXJlc3BvbnNlIix0aGlzLm1ldGEucm9vdCl9fX10aGlzLmVmPXRoaXMuYnVpbGRFeHRy YWN0b3JzKCk7cmV0dXJuIGN9fSk7RXh0LmRhdGEuSnNvblJlYWRlci5FcnJvcj1FeHQuZXh0ZW5k KEV4dC5FcnJvcix7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYixhKXt0aGlzLmFyZz1hO0V4dC5FcnJv ci5jYWxsKHRoaXMsYil9LG5hbWU6IkV4dC5kYXRhLkpzb25SZWFkZXIifSk7RXh0LmFwcGx5KEV4 dC5kYXRhLkpzb25SZWFkZXIuRXJyb3IucHJvdG90eXBlLHtsYW5nOntyZXNwb25zZToiQW4gZXJy b3Igb2NjdXJyZWQgd2hpbGUganNvbi1kZWNvZGluZyB5b3VyIHNlcnZlciByZXNwb25zZSIsInN1 Y2Nlc3NQcm9wZXJ0eS1yZXNwb25zZSI6J0NvdWxkIG5vdCBsb2NhdGUgeW91ciAic3VjY2Vzc1By b3BlcnR5IiBpbiB5b3VyIHNlcnZlciByZXNwb25zZS4gIFBsZWFzZSByZXZpZXcgeW91ciBKc29u UmVhZGVyIGNvbmZpZyB0byBlbnN1cmUgdGhlIGNvbmZpZy1wcm9wZXJ0eSAic3VjY2Vzc1Byb3Bl cnR5IiBtYXRjaGVzIHRoZSBwcm9wZXJ0eSBpbiB5b3VyIHNlcnZlci1yZXNwb25zZS4gIFNlZSB0 aGUgSnNvblJlYWRlciBkb2NzLicsInJvb3QtdW5kZWZpbmVkLXJlc3BvbnNlIjonQ291bGQgbm90 IGxvY2F0ZSB5b3VyICJyb290IiBwcm9wZXJ0eSBpbiB5b3VyIHNlcnZlciByZXNwb25zZS4gIFBs ZWFzZSByZXZpZXcgeW91ciBKc29uUmVhZGVyIGNvbmZpZyB0byBlbnN1cmUgdGhlIGNvbmZpZy1w cm9wZXJ0eSAicm9vdCIgbWF0Y2hlcyB0aGUgcHJvcGVydHkgeW91ciBzZXJ2ZXItcmVzcG9uc2Uu ICBTZWUgdGhlIEpzb25SZWFkZXIgZG9jcy4nLCJyb290LXVuZGVmaW5lZC1jb25maWciOidZb3Vy IEpzb25SZWFkZXIgd2FzIGNvbmZpZ3VyZWQgd2l0aG91dCBhICJyb290IiBwcm9wZXJ0eS4gIFBs ZWFzZSByZXZpZXcgeW91ciBKc29uUmVhZGVyIGNvbmZpZyBhbmQgbWFrZSBzdXJlIHRvIGRlZmlu ZSB0aGUgcm9vdCBwcm9wZXJ0eS4gIFNlZSB0aGUgSnNvblJlYWRlciBkb2NzLicsImlkUHJvcGVy dHktdW5kZWZpbmVkIjonWW91ciBKc29uUmVhZGVyIHdhcyBjb25maWd1cmVkIHdpdGhvdXQgYW4g ImlkUHJvcGVydHkiICBQbGVhc2UgcmV2aWV3IHlvdXIgSnNvblJlYWRlciBjb25maWd1cmF0aW9u IGFuZCBlbnN1cmUgdGhlICJpZFByb3BlcnR5IiBpcyBzZXQgKGUuZy46ICJpZCIpLiAgU2VlIHRo ZSBKc29uUmVhZGVyIGRvY3MuJywicm9vdC1lbXRweSI6J0RhdGEgd2FzIGV4cGVjdGVkIHRvIGJl IHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIgaW4gdGhlICJyb290IiBwcm9wZXJ0eSBvZiB0aGUgcmVz cG9uc2UuICBQbGVhc2UgcmV2aWV3IHlvdXIgSnNvblJlYWRlciBjb25maWd1cmF0aW9uIHRvIGVu c3VyZSB0aGUgInJvb3QiIHByb3BlcnR5IG1hdGNoZXMgdGhhdCByZXR1cm5lZCBpbiB0aGUgc2Vy dmVyLXJlc3BvbnNlLiAgU2VlIEpzb25SZWFkZXIgZG9jcy4nfX0pO0V4dC5kYXRhLkFycmF5UmVh ZGVyPUV4dC5leHRlbmQoRXh0LmRhdGEuSnNvblJlYWRlcix7cmVhZFJlY29yZHM6ZnVuY3Rpb24o cSl7dGhpcy5hcnJheURhdGE9cTt2YXIgaD10aGlzLm1ldGEsZD1oP0V4dC5udW0oaC5pZEluZGV4 LGguaWQpOm51bGwsYj10aGlzLnJlY29yZFR5cGUscD1iLnByb3RvdHlwZS5maWVsZHMseT1bXSxl O2lmKCF0aGlzLmdldFJvb3Qpe3RoaXMuZ2V0Um9vdD1oLnJvb3Q/dGhpcy5nZXRKc29uQWNjZXNz b3IoaC5yb290KTpmdW5jdGlvbihpKXtyZXR1cm4gaX07aWYoaC50b3RhbFByb3BlcnR5KXt0aGlz LmdldFRvdGFsPXRoaXMuZ2V0SnNvbkFjY2Vzc29yKGgudG90YWxQcm9wZXJ0eSl9fXZhciB0PXRo aXMuZ2V0Um9vdChxKTtmb3IodmFyIHg9MDt4PHQubGVuZ3RoO3grKyl7dmFyIHI9dFt4XTt2YXIg YT17fTt2YXIgbT0oKGR8fGQ9PT0wKSYmcltkXSE9PXVuZGVmaW5lZCYmcltkXSE9PSIiP3JbZF06 bnVsbCk7Zm9yKHZhciB3PTAsbD1wLmxlbmd0aDt3PGw7dysrKXt2YXIgej1wLml0ZW1zW3ddO3Zh ciB1PXoubWFwcGluZyE9PXVuZGVmaW5lZCYmei5tYXBwaW5nIT09bnVsbD96Lm1hcHBpbmc6dztl PXJbdV0hPT11bmRlZmluZWQ/clt1XTp6LmRlZmF1bHRWYWx1ZTtlPXouY29udmVydChlLHIpO2Fb ei5uYW1lXT1lfXZhciBjPW5ldyBiKGEsbSk7Yy5qc29uPXI7eVt5Lmxlbmd0aF09Y312YXIgZz15 Lmxlbmd0aDtpZihoLnRvdGFsUHJvcGVydHkpe2U9cGFyc2VJbnQodGhpcy5nZXRUb3RhbChxKSwx MCk7aWYoIWlzTmFOKGUpKXtnPWV9fXJldHVybntyZWNvcmRzOnksdG90YWxSZWNvcmRzOmd9fX0p O0V4dC5kYXRhLkFycmF5U3RvcmU9RXh0LmV4dGVuZChFeHQuZGF0YS5TdG9yZSx7Y29uc3RydWN0 b3I6ZnVuY3Rpb24oYSl7RXh0LmRhdGEuQXJyYXlTdG9yZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9y LmNhbGwodGhpcyxFeHQuYXBwbHkoYSx7cmVhZGVyOm5ldyBFeHQuZGF0YS5BcnJheVJlYWRlcihh KX0pKX0sbG9hZERhdGE6ZnVuY3Rpb24oZSxiKXtpZih0aGlzLmV4cGFuZERhdGE9PT10cnVlKXt2 YXIgZD1bXTtmb3IodmFyIGM9MCxhPWUubGVuZ3RoO2M8YTtjKyspe2RbZC5sZW5ndGhdPVtlW2Nd XX1lPWR9RXh0LmRhdGEuQXJyYXlTdG9yZS5zdXBlcmNsYXNzLmxvYWREYXRhLmNhbGwodGhpcyxl LGIpfX0pO0V4dC5yZWcoImFycmF5c3RvcmUiLEV4dC5kYXRhLkFycmF5U3RvcmUpO0V4dC5kYXRh LlNpbXBsZVN0b3JlPUV4dC5kYXRhLkFycmF5U3RvcmU7RXh0LnJlZygic2ltcGxlc3RvcmUiLEV4 dC5kYXRhLlNpbXBsZVN0b3JlKTtFeHQuZGF0YS5Kc29uU3RvcmU9RXh0LmV4dGVuZChFeHQuZGF0 YS5TdG9yZSx7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYSl7RXh0LmRhdGEuSnNvblN0b3JlLnN1cGVy Y2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLEV4dC5hcHBseShhLHtyZWFkZXI6bmV3IEV4dC5k YXRhLkpzb25SZWFkZXIoYSl9KSl9fSk7RXh0LnJlZygianNvbnN0b3JlIixFeHQuZGF0YS5Kc29u U3RvcmUpO0V4dC5kYXRhLlhtbFdyaXRlcj1FeHQuZXh0ZW5kKEV4dC5kYXRhLkRhdGFXcml0ZXIs e3JlbmRlcjpmdW5jdGlvbihjLGEsZCxiKXt9LGNyZWF0ZVJlY29yZDpmdW5jdGlvbihhKXt9LHVw ZGF0ZVJlY29yZDpmdW5jdGlvbihhKXt9LGRlc3Ryb3lSZWNvcmQ6ZnVuY3Rpb24oYSl7fX0pO0V4 dC5kYXRhLlhtbFJlYWRlcj1mdW5jdGlvbihhLGIpe2E9YXx8e307RXh0LmRhdGEuWG1sUmVhZGVy LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEsYnx8YS5maWVsZHMpfTtFeHQuZXh0 ZW5kKEV4dC5kYXRhLlhtbFJlYWRlcixFeHQuZGF0YS5EYXRhUmVhZGVyLHtyZWFkOmZ1bmN0aW9u KGEpe3ZhciBiPWEucmVzcG9uc2VYTUw7aWYoIWIpe3Rocm93IHttZXNzYWdlOiJYbWxSZWFkZXIu cmVhZDogWE1MIERvY3VtZW50IG5vdCBhdmFpbGFibGUifX1yZXR1cm4gdGhpcy5yZWFkUmVjb3Jk cyhiKX0scmVhZFJlY29yZHM6ZnVuY3Rpb24oeil7dGhpcy54bWxEYXRhPXo7dmFyIHM9ei5kb2N1 bWVudEVsZW1lbnR8fHo7dmFyIGw9RXh0LkRvbVF1ZXJ5O3ZhciBiPXRoaXMucmVjb3JkVHlwZSxw PWIucHJvdG90eXBlLmZpZWxkczt2YXIgZD10aGlzLm1ldGEuaWRQYXRofHx0aGlzLm1ldGEuaWQ7 dmFyIGg9MCxlPXRydWU7aWYodGhpcy5tZXRhLnRvdGFsUmVjb3Jkcyl7aD1sLnNlbGVjdE51bWJl cih0aGlzLm1ldGEudG90YWxSZWNvcmRzLHMsMCl9aWYodGhpcy5tZXRhLnN1Y2Nlc3Mpe3ZhciBv PWwuc2VsZWN0VmFsdWUodGhpcy5tZXRhLnN1Y2Nlc3Mscyx0cnVlKTtlPW8hPT1mYWxzZSYmbyE9 PSJmYWxzZSJ9dmFyIHc9W107dmFyIEE9bC5zZWxlY3QodGhpcy5tZXRhLnJlY29yZCxzKTtmb3Io dmFyIHU9MCx4PUEubGVuZ3RoO3U8eDt1Kyspe3ZhciByPUFbdV07dmFyIGE9e307dmFyIG09ZD9s LnNlbGVjdFZhbHVlKGQscik6dW5kZWZpbmVkO2Zvcih2YXIgdD0wLGs9cC5sZW5ndGg7dDxrO3Qr Kyl7dmFyIHk9cC5pdGVtc1t0XTt2YXIgZz1sLnNlbGVjdFZhbHVlKEV4dC52YWx1ZSh5Lm1hcHBp bmcseS5uYW1lLHRydWUpLHIseS5kZWZhdWx0VmFsdWUpO2c9eS5jb252ZXJ0KGcscik7YVt5Lm5h bWVdPWd9dmFyIGM9bmV3IGIoYSxtKTtjLm5vZGU9cjt3W3cubGVuZ3RoXT1jfXJldHVybntzdWNj ZXNzOmUscmVjb3Jkczp3LHRvdGFsUmVjb3JkczpofHx3Lmxlbmd0aH19LHJlYWRSZXNwb25zZTpF eHQuZW1wdHlGbn0pO0V4dC5kYXRhLlhtbFN0b3JlPUV4dC5leHRlbmQoRXh0LmRhdGEuU3RvcmUs e2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGEpe0V4dC5kYXRhLlhtbFN0b3JlLnN1cGVyY2xhc3MuY29u c3RydWN0b3IuY2FsbCh0aGlzLEV4dC5hcHBseShhLHtyZWFkZXI6bmV3IEV4dC5kYXRhLlhtbFJl YWRlcihhKX0pKX19KTtFeHQucmVnKCJ4bWxzdG9yZSIsRXh0LmRhdGEuWG1sU3RvcmUpO0V4dC5k YXRhLkdyb3VwaW5nU3RvcmU9RXh0LmV4dGVuZChFeHQuZGF0YS5TdG9yZSx7Y29uc3RydWN0b3I6 ZnVuY3Rpb24oYSl7RXh0LmRhdGEuR3JvdXBpbmdTdG9yZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9y LmNhbGwodGhpcyxhKTt0aGlzLmFwcGx5R3JvdXBGaWVsZCgpfSxyZW1vdGVHcm91cDpmYWxzZSxn cm91cE9uU29ydDpmYWxzZSxncm91cERpcjoiQVNDIixjbGVhckdyb3VwaW5nOmZ1bmN0aW9uKCl7 dGhpcy5ncm91cEZpZWxkPWZhbHNlO2lmKHRoaXMucmVtb3RlR3JvdXApe2lmKHRoaXMuYmFzZVBh cmFtcyl7ZGVsZXRlIHRoaXMuYmFzZVBhcmFtcy5ncm91cEJ5fXZhciBhPXRoaXMubGFzdE9wdGlv bnM7aWYoYSYmYS5wYXJhbXMpe2RlbGV0ZSBhLnBhcmFtcy5ncm91cEJ5fXRoaXMucmVsb2FkKCl9 ZWxzZXt0aGlzLmFwcGx5U29ydCgpO3RoaXMuZmlyZUV2ZW50KCJkYXRhY2hhbmdlZCIsdGhpcyl9 fSxncm91cEJ5OmZ1bmN0aW9uKGQsYixjKXtjPWM/KFN0cmluZyhjKS50b1VwcGVyQ2FzZSgpPT0i REVTQyI/IkRFU0MiOiJBU0MiKTp0aGlzLmdyb3VwRGlyO2lmKHRoaXMuZ3JvdXBGaWVsZD09ZCYm dGhpcy5ncm91cERpcj09YyYmIWIpe3JldHVybn10aGlzLmdyb3VwRmllbGQ9ZDt0aGlzLmdyb3Vw RGlyPWM7dGhpcy5hcHBseUdyb3VwRmllbGQoKTtpZih0aGlzLmdyb3VwT25Tb3J0KXt0aGlzLnNv cnQoZCxjKTtyZXR1cm59aWYodGhpcy5yZW1vdGVHcm91cCl7dGhpcy5yZWxvYWQoKX1lbHNle3Zh ciBhPXRoaXMuc29ydEluZm98fHt9O2lmKGEuZmllbGQhPWR8fGEuZGlyZWN0aW9uIT1jKXt0aGlz LmFwcGx5U29ydCgpfWVsc2V7dGhpcy5zb3J0RGF0YShkLGMpfXRoaXMuZmlyZUV2ZW50KCJkYXRh Y2hhbmdlZCIsdGhpcyl9fSxhcHBseUdyb3VwRmllbGQ6ZnVuY3Rpb24oKXtpZih0aGlzLnJlbW90 ZUdyb3VwKXtpZighdGhpcy5iYXNlUGFyYW1zKXt0aGlzLmJhc2VQYXJhbXM9e319dGhpcy5iYXNl UGFyYW1zLmdyb3VwQnk9dGhpcy5ncm91cEZpZWxkO3RoaXMuYmFzZVBhcmFtcy5ncm91cERpcj10 aGlzLmdyb3VwRGlyfX0sYXBwbHlTb3J0OmZ1bmN0aW9uKCl7RXh0LmRhdGEuR3JvdXBpbmdTdG9y ZS5zdXBlcmNsYXNzLmFwcGx5U29ydC5jYWxsKHRoaXMpO2lmKCF0aGlzLmdyb3VwT25Tb3J0JiYh dGhpcy5yZW1vdGVHcm91cCl7dmFyIGE9dGhpcy5nZXRHcm91cFN0YXRlKCk7aWYoYSYmKGEhPXRo aXMuc29ydEluZm8uZmllbGR8fHRoaXMuZ3JvdXBEaXIhPXRoaXMuc29ydEluZm8uZGlyZWN0aW9u KSl7dGhpcy5zb3J0RGF0YSh0aGlzLmdyb3VwRmllbGQsdGhpcy5ncm91cERpcil9fX0sYXBwbHlH cm91cGluZzpmdW5jdGlvbihhKXtpZih0aGlzLmdyb3VwRmllbGQhPT1mYWxzZSl7dGhpcy5ncm91 cEJ5KHRoaXMuZ3JvdXBGaWVsZCx0cnVlLHRoaXMuZ3JvdXBEaXIpO3JldHVybiB0cnVlfWVsc2V7 aWYoYT09PXRydWUpe3RoaXMuZmlyZUV2ZW50KCJkYXRhY2hhbmdlZCIsdGhpcyl9cmV0dXJuIGZh bHNlfX0sZ2V0R3JvdXBTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwT25Tb3J0JiZ0 aGlzLmdyb3VwRmllbGQhPT1mYWxzZT8odGhpcy5zb3J0SW5mbz90aGlzLnNvcnRJbmZvLmZpZWxk OnVuZGVmaW5lZCk6dGhpcy5ncm91cEZpZWxkfX0pO0V4dC5yZWcoImdyb3VwaW5nc3RvcmUiLEV4 dC5kYXRhLkdyb3VwaW5nU3RvcmUpO0V4dC5kYXRhLkRpcmVjdFByb3h5PWZ1bmN0aW9uKGEpe0V4 dC5hcHBseSh0aGlzLGEpO2lmKHR5cGVvZiB0aGlzLnBhcmFtT3JkZXI9PSJzdHJpbmciKXt0aGlz LnBhcmFtT3JkZXI9dGhpcy5wYXJhbU9yZGVyLnNwbGl0KC9bXHMsfF0vKX1FeHQuZGF0YS5EaXJl Y3RQcm94eS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKX07RXh0LmV4dGVuZChF eHQuZGF0YS5EaXJlY3RQcm94eSxFeHQuZGF0YS5EYXRhUHJveHkse3BhcmFtT3JkZXI6dW5kZWZp bmVkLHBhcmFtc0FzSGFzaDp0cnVlLGRpcmVjdEZuOnVuZGVmaW5lZCxkb1JlcXVlc3Q6ZnVuY3Rp b24oYixjLGEsZSxrLGwsbil7dmFyIGo9W107dmFyIGg9dGhpcy5hcGlbYl18fHRoaXMuZGlyZWN0 Rm47c3dpdGNoKGIpe2Nhc2UgRXh0LmRhdGEuQXBpLmFjdGlvbnMuY3JlYXRlOmoucHVzaChhW2Uu bWV0YS5yb290XSk7YnJlYWs7Y2FzZSBFeHQuZGF0YS5BcGkuYWN0aW9ucy5yZWFkOmlmKHRoaXMu cGFyYW1PcmRlcil7Zm9yKHZhciBkPTAsZz10aGlzLnBhcmFtT3JkZXIubGVuZ3RoO2Q8ZztkKysp e2oucHVzaChhW3RoaXMucGFyYW1PcmRlcltkXV0pfX1lbHNle2lmKHRoaXMucGFyYW1zQXNIYXNo KXtqLnB1c2goYSl9fWJyZWFrO2Nhc2UgRXh0LmRhdGEuQXBpLmFjdGlvbnMudXBkYXRlOmoucHVz aChhW2UubWV0YS5pZFByb3BlcnR5XSk7ai5wdXNoKGFbZS5tZXRhLnJvb3RdKTticmVhaztjYXNl IEV4dC5kYXRhLkFwaS5hY3Rpb25zLmRlc3Ryb3k6ai5wdXNoKGFbZS5tZXRhLnJvb3RdKTticmVh a312YXIgbT17cGFyYW1zOmF8fHt9LGNhbGxiYWNrOmssc2NvcGU6bCxhcmc6bixyZWFkZXI6ZX07 ai5wdXNoKHRoaXMuY3JlYXRlQ2FsbGJhY2soYixjLG0pLHRoaXMpO2guYXBwbHkod2luZG93LGop fSxjcmVhdGVDYWxsYmFjazpmdW5jdGlvbihjLGEsYil7cmV0dXJuIGZ1bmN0aW9uKGQsZSl7aWYo IWUuc3RhdHVzKXtpZihjPT09RXh0LmRhdGEuQXBpLmFjdGlvbnMucmVhZCl7dGhpcy5maXJlRXZl bnQoImxvYWRleGNlcHRpb24iLHRoaXMsYixlLG51bGwpfXRoaXMuZmlyZUV2ZW50KCJleGNlcHRp b24iLHRoaXMsInJlbW90ZSIsYyxiLGUsbnVsbCk7Yi5jYWxsYmFjay5jYWxsKGIuc2NvcGUsbnVs bCxiLmFyZyxmYWxzZSk7cmV0dXJufWlmKGM9PT1FeHQuZGF0YS5BcGkuYWN0aW9ucy5yZWFkKXt0 aGlzLm9uUmVhZChjLGIsZCxlKX1lbHNle3RoaXMub25Xcml0ZShjLGIsZCxlLGEpfX19LG9uUmVh ZDpmdW5jdGlvbihnLGUsYSxkKXt2YXIgYjt0cnl7Yj1lLnJlYWRlci5yZWFkUmVjb3JkcyhhKX1j YXRjaChjKXt0aGlzLmZpcmVFdmVudCgibG9hZGV4Y2VwdGlvbiIsdGhpcyxlLGQsYyk7dGhpcy5m aXJlRXZlbnQoImV4Y2VwdGlvbiIsdGhpcywicmVzcG9uc2UiLGcsZSxkLGMpO2UuY2FsbGJhY2su Y2FsbChlLnNjb3BlLG51bGwsZS5hcmcsZmFsc2UpO3JldHVybn10aGlzLmZpcmVFdmVudCgibG9h ZCIsdGhpcyxkLGUuYXJnKTtlLmNhbGxiYWNrLmNhbGwoZS5zY29wZSxiLGUuYXJnLHRydWUpfSxv bldyaXRlOmZ1bmN0aW9uKGUsZCxhLGMsYil7dGhpcy5maXJlRXZlbnQoIndyaXRlIix0aGlzLGUs YSxjLGIsZC5hcmcpO2QuY2FsbGJhY2suY2FsbChkLnNjb3BlLGEsYyx0cnVlKX19KTtFeHQuZGF0 YS5EaXJlY3RTdG9yZT1mdW5jdGlvbihhKXthLmJhdGNoVHJhbnNhY3Rpb25zPWZhbHNlO0V4dC5k YXRhLkRpcmVjdFN0b3JlLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLEV4dC5hcHBs eShhLHtwcm94eToodHlwZW9mKGEucHJveHkpPT0idW5kZWZpbmVkIik/bmV3IEV4dC5kYXRhLkRp cmVjdFByb3h5KEV4dC5jb3B5VG8oe30sYSwicGFyYW1PcmRlcixwYXJhbXNBc0hhc2gsZGlyZWN0 Rm4sYXBpIikpOmEucHJveHkscmVhZGVyOih0eXBlb2YoYS5yZWFkZXIpPT0idW5kZWZpbmVkIiYm dHlwZW9mKGEuZmllbGRzKT09Im9iamVjdCIpP25ldyBFeHQuZGF0YS5Kc29uUmVhZGVyKEV4dC5j b3B5VG8oe30sYSwidG90YWxQcm9wZXJ0eSxyb290LGlkUHJvcGVydHkiKSxhLmZpZWxkcyk6YS5y ZWFkZXJ9KSl9O0V4dC5leHRlbmQoRXh0LmRhdGEuRGlyZWN0U3RvcmUsRXh0LmRhdGEuU3RvcmUs e30pO0V4dC5yZWcoImRpcmVjdHN0b3JlIixFeHQuZGF0YS5EaXJlY3RTdG9yZSk7RXh0LkRpcmVj dD1FeHQuZXh0ZW5kKEV4dC51dGlsLk9ic2VydmFibGUse2V4Y2VwdGlvbnM6e1RSQU5TUE9SVDoi eGhyIixQQVJTRToicGFyc2UiLExPR0lOOiJsb2dpbiIsU0VSVkVSOiJleGNlcHRpb24ifSxjb25z dHJ1Y3RvcjpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRzKCJldmVudCIsImV4Y2VwdGlvbiIpO3Ro aXMudHJhbnNhY3Rpb25zPXt9O3RoaXMucHJvdmlkZXJzPXt9fSxhZGRQcm92aWRlcjpmdW5jdGlv bihlKXt2YXIgYz1hcmd1bWVudHM7aWYoYy5sZW5ndGg+MSl7Zm9yKHZhciBkPTAsYj1jLmxlbmd0 aDtkPGI7ZCsrKXt0aGlzLmFkZFByb3ZpZGVyKGNbZF0pfXJldHVybn1pZighZS5ldmVudHMpe2U9 bmV3IEV4dC5EaXJlY3QuUFJPVklERVJTW2UudHlwZV0oZSl9ZS5pZD1lLmlkfHxFeHQuaWQoKTt0 aGlzLnByb3ZpZGVyc1tlLmlkXT1lO2Uub24oImRhdGEiLHRoaXMub25Qcm92aWRlckRhdGEsdGhp cyk7ZS5vbigiZXhjZXB0aW9uIix0aGlzLm9uUHJvdmlkZXJFeGNlcHRpb24sdGhpcyk7aWYoIWUu aXNDb25uZWN0ZWQoKSl7ZS5jb25uZWN0KCl9cmV0dXJuIGV9LGdldFByb3ZpZGVyOmZ1bmN0aW9u KGEpe3JldHVybiB0aGlzLnByb3ZpZGVyc1thXX0scmVtb3ZlUHJvdmlkZXI6ZnVuY3Rpb24oYil7 dmFyIGE9Yi5pZD9iOnRoaXMucHJvdmlkZXJzW2IuaWRdO2EudW4oImRhdGEiLHRoaXMub25Qcm92 aWRlckRhdGEsdGhpcyk7YS51bigiZXhjZXB0aW9uIix0aGlzLm9uUHJvdmlkZXJFeGNlcHRpb24s dGhpcyk7ZGVsZXRlIHRoaXMucHJvdmlkZXJzW2EuaWRdO3JldHVybiBhfSxhZGRUcmFuc2FjdGlv bjpmdW5jdGlvbihhKXt0aGlzLnRyYW5zYWN0aW9uc1thLnRpZF09YTtyZXR1cm4gYX0scmVtb3Zl VHJhbnNhY3Rpb246ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMudHJhbnNhY3Rpb25zW2EudGlkfHxh XTtyZXR1cm4gYX0sZ2V0VHJhbnNhY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMudHJhbnNh Y3Rpb25zW2EudGlkfHxhXX0sb25Qcm92aWRlckRhdGE6ZnVuY3Rpb24oZCxjKXtpZihFeHQuaXNB cnJheShjKSl7Zm9yKHZhciBiPTAsYT1jLmxlbmd0aDtiPGE7YisrKXt0aGlzLm9uUHJvdmlkZXJE YXRhKGQsY1tiXSl9cmV0dXJufWlmKGMubmFtZSYmYy5uYW1lIT0iZXZlbnQiJiZjLm5hbWUhPSJl eGNlcHRpb24iKXt0aGlzLmZpcmVFdmVudChjLm5hbWUsYyl9ZWxzZXtpZihjLnR5cGU9PSJleGNl cHRpb24iKXt0aGlzLmZpcmVFdmVudCgiZXhjZXB0aW9uIixjKX19dGhpcy5maXJlRXZlbnQoImV2 ZW50IixjLGQpfSxjcmVhdGVFdmVudDpmdW5jdGlvbihhLGIpe3JldHVybiBuZXcgRXh0LkRpcmVj dC5ldmVudFR5cGVzW2EudHlwZV0oRXh0LmFwcGx5KGEsYikpfX0pO0V4dC5EaXJlY3Q9bmV3IEV4 dC5EaXJlY3QoKTtFeHQuRGlyZWN0LlRJRD0xO0V4dC5EaXJlY3QuUFJPVklERVJTPXt9O0V4dC5E aXJlY3QuVHJhbnNhY3Rpb249ZnVuY3Rpb24oYSl7RXh0LmFwcGx5KHRoaXMsYSk7dGhpcy50aWQ9 KytFeHQuRGlyZWN0LlRJRDt0aGlzLnJldHJ5Q291bnQ9MH07RXh0LkRpcmVjdC5UcmFuc2FjdGlv bi5wcm90b3R5cGU9e3NlbmQ6ZnVuY3Rpb24oKXt0aGlzLnByb3ZpZGVyLnF1ZXVlVHJhbnNhY3Rp b24odGhpcyl9LHJldHJ5OmZ1bmN0aW9uKCl7dGhpcy5yZXRyeUNvdW50Kys7dGhpcy5zZW5kKCl9 LGdldFByb3ZpZGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvdmlkZXJ9fTtFeHQuRGlyZWN0 LkV2ZW50PWZ1bmN0aW9uKGEpe0V4dC5hcHBseSh0aGlzLGEpfTtFeHQuRGlyZWN0LkV2ZW50LnBy b3RvdHlwZT17c3RhdHVzOnRydWUsZ2V0RGF0YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9 fTtFeHQuRGlyZWN0LlJlbW90aW5nRXZlbnQ9RXh0LmV4dGVuZChFeHQuRGlyZWN0LkV2ZW50LHt0 eXBlOiJycGMiLGdldFRyYW5zYWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNhY3Rp b258fEV4dC5EaXJlY3QuZ2V0VHJhbnNhY3Rpb24odGhpcy50aWQpfX0pO0V4dC5EaXJlY3QuRXhj ZXB0aW9uRXZlbnQ9RXh0LmV4dGVuZChFeHQuRGlyZWN0LlJlbW90aW5nRXZlbnQse3N0YXR1czpm YWxzZSx0eXBlOiJleGNlcHRpb24ifSk7RXh0LkRpcmVjdC5ldmVudFR5cGVzPXtycGM6RXh0LkRp cmVjdC5SZW1vdGluZ0V2ZW50LGV2ZW50OkV4dC5EaXJlY3QuRXZlbnQsZXhjZXB0aW9uOkV4dC5E aXJlY3QuRXhjZXB0aW9uRXZlbnR9O0V4dC5kaXJlY3QuUHJvdmlkZXI9RXh0LmV4dGVuZChFeHQu dXRpbC5PYnNlcnZhYmxlLHtwcmlvcml0eToxLGNvbnN0cnVjdG9yOmZ1bmN0aW9uKGEpe0V4dC5h cHBseSh0aGlzLGEpO3RoaXMuYWRkRXZlbnRzKCJjb25uZWN0IiwiZGlzY29ubmVjdCIsImRhdGEi LCJleGNlcHRpb24iKTtFeHQuZGlyZWN0LlByb3ZpZGVyLnN1cGVyY2xhc3MuY29uc3RydWN0b3Iu Y2FsbCh0aGlzLGEpfSxpc0Nvbm5lY3RlZDpmdW5jdGlvbigpe3JldHVybiBmYWxzZX0sY29ubmVj dDpFeHQuZW1wdHlGbixkaXNjb25uZWN0OkV4dC5lbXB0eUZufSk7RXh0LmRpcmVjdC5Kc29uUHJv dmlkZXI9RXh0LmV4dGVuZChFeHQuZGlyZWN0LlByb3ZpZGVyLHtwYXJzZVJlc3BvbnNlOmZ1bmN0 aW9uKGEpe2lmKCFFeHQuaXNFbXB0eShhLnJlc3BvbnNlVGV4dCkpe2lmKHR5cGVvZiBhLnJlc3Bv bnNlVGV4dD09Im9iamVjdCIpe3JldHVybiBhLnJlc3BvbnNlVGV4dH1yZXR1cm4gRXh0LmRlY29k ZShhLnJlc3BvbnNlVGV4dCl9cmV0dXJuIG51bGx9LGdldEV2ZW50czpmdW5jdGlvbihqKXt2YXIg Zz1udWxsO3RyeXtnPXRoaXMucGFyc2VSZXNwb25zZShqKX1jYXRjaChoKXt2YXIgZD1uZXcgRXh0 LkRpcmVjdC5FeGNlcHRpb25FdmVudCh7ZGF0YTpoLHhocjpqLGNvZGU6RXh0LkRpcmVjdC5leGNl cHRpb25zLlBBUlNFLG1lc3NhZ2U6IkVycm9yIHBhcnNpbmcganNvbiByZXNwb25zZTogXG5cbiAi K2d9KTtyZXR1cm5bZF19dmFyIGM9W107aWYoRXh0LmlzQXJyYXkoZykpe2Zvcih2YXIgYj0wLGE9 Zy5sZW5ndGg7YjxhO2IrKyl7Yy5wdXNoKEV4dC5EaXJlY3QuY3JlYXRlRXZlbnQoZ1tiXSkpfX1l bHNle2MucHVzaChFeHQuRGlyZWN0LmNyZWF0ZUV2ZW50KGcpKX1yZXR1cm4gY319KTtFeHQuZGly ZWN0LlBvbGxpbmdQcm92aWRlcj1FeHQuZXh0ZW5kKEV4dC5kaXJlY3QuSnNvblByb3ZpZGVyLHtw cmlvcml0eTozLGludGVydmFsOjMwMDAsY29uc3RydWN0b3I6ZnVuY3Rpb24oYSl7RXh0LmRpcmVj dC5Qb2xsaW5nUHJvdmlkZXIuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhp cy5hZGRFdmVudHMoImJlZm9yZXBvbGwiLCJwb2xsIil9LGlzQ29ubmVjdGVkOmZ1bmN0aW9uKCl7 cmV0dXJuICEhdGhpcy5wb2xsVGFza30sY29ubmVjdDpmdW5jdGlvbigpe2lmKHRoaXMudXJsJiYh dGhpcy5wb2xsVGFzayl7dGhpcy5wb2xsVGFzaz1FeHQuVGFza01nci5zdGFydCh7cnVuOmZ1bmN0 aW9uKCl7aWYodGhpcy5maXJlRXZlbnQoImJlZm9yZXBvbGwiLHRoaXMpIT09ZmFsc2Upe2lmKHR5 cGVvZiB0aGlzLnVybD09ImZ1bmN0aW9uIil7dGhpcy51cmwodGhpcy5iYXNlUGFyYW1zKX1lbHNl e0V4dC5BamF4LnJlcXVlc3Qoe3VybDp0aGlzLnVybCxjYWxsYmFjazp0aGlzLm9uRGF0YSxzY29w ZTp0aGlzLHBhcmFtczp0aGlzLmJhc2VQYXJhbXN9KX19fSxpbnRlcnZhbDp0aGlzLmludGVydmFs LHNjb3BlOnRoaXN9KTt0aGlzLmZpcmVFdmVudCgiY29ubmVjdCIsdGhpcyl9ZWxzZXtpZighdGhp cy51cmwpe3Rocm93IkVycm9yIGluaXRpYWxpemluZyBQb2xsaW5nUHJvdmlkZXIsIG5vIHVybCBj b25maWd1cmVkLiJ9fX0sZGlzY29ubmVjdDpmdW5jdGlvbigpe2lmKHRoaXMucG9sbFRhc2spe0V4 dC5UYXNrTWdyLnN0b3AodGhpcy5wb2xsVGFzayk7ZGVsZXRlIHRoaXMucG9sbFRhc2s7dGhpcy5m aXJlRXZlbnQoImRpc2Nvbm5lY3QiLHRoaXMpfX0sb25EYXRhOmZ1bmN0aW9uKGQsaixoKXtpZihq KXt2YXIgYz10aGlzLmdldEV2ZW50cyhoKTtmb3IodmFyIGI9MCxhPWMubGVuZ3RoO2I8YTtiKysp e3ZhciBnPWNbYl07dGhpcy5maXJlRXZlbnQoImRhdGEiLHRoaXMsZyl9fWVsc2V7dmFyIGc9bmV3 IEV4dC5EaXJlY3QuRXhjZXB0aW9uRXZlbnQoe2RhdGE6Zyxjb2RlOkV4dC5EaXJlY3QuZXhjZXB0 aW9ucy5UUkFOU1BPUlQsbWVzc2FnZToiVW5hYmxlIHRvIGNvbm5lY3QgdG8gdGhlIHNlcnZlci4i LHhocjpofSk7dGhpcy5maXJlRXZlbnQoImRhdGEiLHRoaXMsZyl9fX0pO0V4dC5EaXJlY3QuUFJP VklERVJTLnBvbGxpbmc9RXh0LmRpcmVjdC5Qb2xsaW5nUHJvdmlkZXI7RXh0LmRpcmVjdC5SZW1v dGluZ1Byb3ZpZGVyPUV4dC5leHRlbmQoRXh0LmRpcmVjdC5Kc29uUHJvdmlkZXIse2VuYWJsZUJ1 ZmZlcjoxMCxtYXhSZXRyaWVzOjEsY29uc3RydWN0b3I6ZnVuY3Rpb24oYSl7RXh0LmRpcmVjdC5S ZW1vdGluZ1Byb3ZpZGVyLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMu YWRkRXZlbnRzKCJiZWZvcmVjYWxsIiwiY2FsbCIpO3RoaXMubmFtZXNwYWNlPSh0eXBlb2YgdGhp cy5uYW1lc3BhY2U9PT0ic3RyaW5nIik/RXh0Lm5zKHRoaXMubmFtZXNwYWNlKTp0aGlzLm5hbWVz cGFjZXx8d2luZG93O3RoaXMudHJhbnNhY3Rpb25zPXt9O3RoaXMuY2FsbEJ1ZmZlcj1bXX0saW5p dEFQSTpmdW5jdGlvbigpe3ZhciBoPXRoaXMuYWN0aW9ucztmb3IodmFyIGogaW4gaCl7dmFyIGQ9 dGhpcy5uYW1lc3BhY2Vbal18fCh0aGlzLm5hbWVzcGFjZVtqXT17fSk7dmFyIGU9aFtqXTtmb3Io dmFyIGc9MCxiPWUubGVuZ3RoO2c8YjtnKyspe3ZhciBhPWVbZ107ZFthLm5hbWVdPXRoaXMuY3Jl YXRlTWV0aG9kKGosYSl9fX0saXNDb25uZWN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gISF0aGlzLmNv bm5lY3RlZH0sY29ubmVjdDpmdW5jdGlvbigpe2lmKHRoaXMudXJsKXt0aGlzLmluaXRBUEkoKTt0 aGlzLmNvbm5lY3RlZD10cnVlO3RoaXMuZmlyZUV2ZW50KCJjb25uZWN0Iix0aGlzKX1lbHNle2lm KCF0aGlzLnVybCl7dGhyb3ciRXJyb3IgaW5pdGlhbGl6aW5nIFJlbW90aW5nUHJvdmlkZXIsIG5v IHVybCBjb25maWd1cmVkLiJ9fX0sZGlzY29ubmVjdDpmdW5jdGlvbigpe2lmKHRoaXMuY29ubmVj dGVkKXt0aGlzLmNvbm5lY3RlZD1mYWxzZTt0aGlzLmZpcmVFdmVudCgiZGlzY29ubmVjdCIsdGhp cyl9fSxvbkRhdGE6ZnVuY3Rpb24oYSxoLGope2lmKGgpe3ZhciBrPXRoaXMuZ2V0RXZlbnRzKGop O2Zvcih2YXIgYj0wLGM9ay5sZW5ndGg7YjxjO2IrKyl7dmFyIGQ9a1tiXTt2YXIgbD10aGlzLmdl dFRyYW5zYWN0aW9uKGQpO3RoaXMuZmlyZUV2ZW50KCJkYXRhIix0aGlzLGQpO2lmKGwpe3RoaXMu ZG9DYWxsYmFjayhsLGQsdHJ1ZSk7RXh0LkRpcmVjdC5yZW1vdmVUcmFuc2FjdGlvbihsKX19fWVs c2V7dmFyIGc9W10uY29uY2F0KGEudHMpO2Zvcih2YXIgYj0wLGM9Zy5sZW5ndGg7YjxjO2IrKyl7 dmFyIGw9dGhpcy5nZXRUcmFuc2FjdGlvbihnW2JdKTtpZihsJiZsLnJldHJ5Q291bnQ8dGhpcy5t YXhSZXRyaWVzKXtsLnJldHJ5KCl9ZWxzZXt2YXIgZD1uZXcgRXh0LkRpcmVjdC5FeGNlcHRpb25F dmVudCh7ZGF0YTpkLHRyYW5zYWN0aW9uOmwsY29kZTpFeHQuRGlyZWN0LmV4Y2VwdGlvbnMuVFJB TlNQT1JULG1lc3NhZ2U6IlVuYWJsZSB0byBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIuIix4aHI6an0p O3RoaXMuZmlyZUV2ZW50KCJkYXRhIix0aGlzLGQpO2lmKGwpe3RoaXMuZG9DYWxsYmFjayhsLGQs ZmFsc2UpO0V4dC5EaXJlY3QucmVtb3ZlVHJhbnNhY3Rpb24obCl9fX19fSxnZXRDYWxsRGF0YTpm dW5jdGlvbihhKXtyZXR1cm57YWN0aW9uOmEuYWN0aW9uLG1ldGhvZDphLm1ldGhvZCxkYXRhOmEu ZGF0YSx0eXBlOiJycGMiLHRpZDphLnRpZH19LGRvU2VuZDpmdW5jdGlvbihkKXt2YXIgZz17dXJs OnRoaXMudXJsLGNhbGxiYWNrOnRoaXMub25EYXRhLHNjb3BlOnRoaXMsdHM6ZH07dmFyIGI7aWYo RXh0LmlzQXJyYXkoZCkpe2I9W107Zm9yKHZhciBjPTAsYT1kLmxlbmd0aDtjPGE7YysrKXtiLnB1 c2godGhpcy5nZXRDYWxsRGF0YShkW2NdKSl9fWVsc2V7Yj10aGlzLmdldENhbGxEYXRhKGQpfWlm KHRoaXMuZW5hYmxlVXJsRW5jb2RlKXt2YXIgZT17fTtlW3R5cGVvZiB0aGlzLmVuYWJsZVVybEVu Y29kZT09InN0cmluZyI/dGhpcy5lbmFibGVVcmxFbmNvZGU6ImRhdGEiXT1FeHQuZW5jb2RlKGIp O2cucGFyYW1zPWV9ZWxzZXtnLmpzb25EYXRhPWJ9RXh0LkFqYXgucmVxdWVzdChnKX0sY29tYmlu ZUFuZFNlbmQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNhbGxCdWZmZXIubGVuZ3RoO2lmKGE+MCl7 dGhpcy5kb1NlbmQoYT09MT90aGlzLmNhbGxCdWZmZXJbMF06dGhpcy5jYWxsQnVmZmVyKTt0aGlz LmNhbGxCdWZmZXI9W119fSxxdWV1ZVRyYW5zYWN0aW9uOmZ1bmN0aW9uKGEpe2lmKGEuZm9ybSl7 dGhpcy5wcm9jZXNzRm9ybShhKTtyZXR1cm59dGhpcy5jYWxsQnVmZmVyLnB1c2goYSk7aWYodGhp cy5lbmFibGVCdWZmZXIpe2lmKCF0aGlzLmNhbGxUYXNrKXt0aGlzLmNhbGxUYXNrPW5ldyBFeHQu dXRpbC5EZWxheWVkVGFzayh0aGlzLmNvbWJpbmVBbmRTZW5kLHRoaXMpfXRoaXMuY2FsbFRhc2su ZGVsYXkodHlwZW9mIHRoaXMuZW5hYmxlQnVmZmVyPT0ibnVtYmVyIj90aGlzLmVuYWJsZUJ1ZmZl cjoxMCl9ZWxzZXt0aGlzLmNvbWJpbmVBbmRTZW5kKCl9fSxkb0NhbGw6ZnVuY3Rpb24oaSxhLGIp e3ZhciBoPW51bGwsZT1iW2EubGVuXSxnPWJbYS5sZW4rMV07aWYoYS5sZW4hPT0wKXtoPWIuc2xp Y2UoMCxhLmxlbil9dmFyIGQ9bmV3IEV4dC5EaXJlY3QuVHJhbnNhY3Rpb24oe3Byb3ZpZGVyOnRo aXMsYXJnczpiLGFjdGlvbjppLG1ldGhvZDphLm5hbWUsZGF0YTpoLGNiOmcmJkV4dC5pc0Z1bmN0 aW9uKGUpP2UuY3JlYXRlRGVsZWdhdGUoZyk6ZX0pO2lmKHRoaXMuZmlyZUV2ZW50KCJiZWZvcmVj YWxsIix0aGlzLGQpIT09ZmFsc2Upe0V4dC5EaXJlY3QuYWRkVHJhbnNhY3Rpb24oZCk7dGhpcy5x dWV1ZVRyYW5zYWN0aW9uKGQpO3RoaXMuZmlyZUV2ZW50KCJjYWxsIix0aGlzLGQpfX0sZG9Gb3Jt OmZ1bmN0aW9uKGosYixnLGksZSl7dmFyIGQ9bmV3IEV4dC5EaXJlY3QuVHJhbnNhY3Rpb24oe3By b3ZpZGVyOnRoaXMsYWN0aW9uOmosbWV0aG9kOmIubmFtZSxhcmdzOltnLGksZV0sY2I6ZSYmRXh0 LmlzRnVuY3Rpb24oaSk/aS5jcmVhdGVEZWxlZ2F0ZShlKTppLGlzRm9ybTp0cnVlfSk7aWYodGhp cy5maXJlRXZlbnQoImJlZm9yZWNhbGwiLHRoaXMsZCkhPT1mYWxzZSl7RXh0LkRpcmVjdC5hZGRU cmFuc2FjdGlvbihkKTt2YXIgYT1TdHJpbmcoZy5nZXRBdHRyaWJ1dGUoImVuY3R5cGUiKSkudG9M b3dlckNhc2UoKT09Im11bHRpcGFydC9mb3JtLWRhdGEiLGg9e2V4dFRJRDpkLnRpZCxleHRBY3Rp b246aixleHRNZXRob2Q6Yi5uYW1lLGV4dFR5cGU6InJwYyIsZXh0VXBsb2FkOlN0cmluZyhhKX07 RXh0LmFwcGx5KGQse2Zvcm06RXh0LmdldERvbShnKSxpc1VwbG9hZDphLHBhcmFtczppJiZFeHQu aXNPYmplY3QoaS5wYXJhbXMpP0V4dC5hcHBseShoLGkucGFyYW1zKTpofSk7dGhpcy5maXJlRXZl bnQoImNhbGwiLHRoaXMsZCk7dGhpcy5wcm9jZXNzRm9ybShkKX19LHByb2Nlc3NGb3JtOmZ1bmN0 aW9uKGEpe0V4dC5BamF4LnJlcXVlc3Qoe3VybDp0aGlzLnVybCxwYXJhbXM6YS5wYXJhbXMsY2Fs bGJhY2s6dGhpcy5vbkRhdGEsc2NvcGU6dGhpcyxmb3JtOmEuZm9ybSxpc1VwbG9hZDphLmlzVXBs b2FkLHRzOmF9KX0sY3JlYXRlTWV0aG9kOmZ1bmN0aW9uKGQsYSl7dmFyIGI7aWYoIWEuZm9ybUhh bmRsZXIpe2I9ZnVuY3Rpb24oKXt0aGlzLmRvQ2FsbChkLGEsQXJyYXkucHJvdG90eXBlLnNsaWNl LmNhbGwoYXJndW1lbnRzLDApKX0uY3JlYXRlRGVsZWdhdGUodGhpcyl9ZWxzZXtiPWZ1bmN0aW9u KGUsZyxjKXt0aGlzLmRvRm9ybShkLGEsZSxnLGMpfS5jcmVhdGVEZWxlZ2F0ZSh0aGlzKX1iLmRp cmVjdENmZz17YWN0aW9uOmQsbWV0aG9kOmF9O3JldHVybiBifSxnZXRUcmFuc2FjdGlvbjpmdW5j dGlvbihhKXtyZXR1cm4gYSYmYS50aWQ/RXh0LkRpcmVjdC5nZXRUcmFuc2FjdGlvbihhLnRpZCk6 bnVsbH0sZG9DYWxsYmFjazpmdW5jdGlvbihjLGcpe3ZhciBkPWcuc3RhdHVzPyJzdWNjZXNzIjoi ZmFpbHVyZSI7aWYoYyYmYy5jYil7dmFyIGI9Yy5jYjt2YXIgYT1nLnJlc3VsdHx8Zy5kYXRhO2lm KEV4dC5pc0Z1bmN0aW9uKGIpKXtiKGEsZyl9ZWxzZXtFeHQuY2FsbGJhY2soYltkXSxiLnNjb3Bl LFthLGddKTtFeHQuY2FsbGJhY2soYi5jYWxsYmFjayxiLnNjb3BlLFthLGddKX19fX0pO0V4dC5E aXJlY3QuUFJPVklERVJTLnJlbW90aW5nPUV4dC5kaXJlY3QuUmVtb3RpbmdQcm92aWRlcjtFeHQu UmVzaXphYmxlPWZ1bmN0aW9uKGQsZSl7dGhpcy5lbD1FeHQuZ2V0KGQpO2lmKGUmJmUud3JhcCl7 ZS5yZXNpemVDaGlsZD10aGlzLmVsO3RoaXMuZWw9dGhpcy5lbC53cmFwKHR5cGVvZiBlLndyYXA9 PSJvYmplY3QiP2Uud3JhcDp7Y2xzOiJ4cmVzaXphYmxlLXdyYXAifSk7dGhpcy5lbC5pZD10aGlz LmVsLmRvbS5pZD1lLnJlc2l6ZUNoaWxkLmlkKyItcnp3cmFwIjt0aGlzLmVsLnNldFN0eWxlKCJv dmVyZmxvdyIsImhpZGRlbiIpO3RoaXMuZWwuc2V0UG9zaXRpb25pbmcoZS5yZXNpemVDaGlsZC5n ZXRQb3NpdGlvbmluZygpKTtlLnJlc2l6ZUNoaWxkLmNsZWFyUG9zaXRpb25pbmcoKTtpZighZS53 aWR0aHx8IWUuaGVpZ2h0KXt2YXIgZz1lLnJlc2l6ZUNoaWxkLmdldFNpemUoKTt0aGlzLmVsLnNl dFNpemUoZy53aWR0aCxnLmhlaWdodCl9aWYoZS5waW5uZWQmJiFlLmFkanVzdG1lbnRzKXtlLmFk anVzdG1lbnRzPSJhdXRvIn19dGhpcy5wcm94eT10aGlzLmVsLmNyZWF0ZVByb3h5KHt0YWc6ImRp diIsY2xzOiJ4LXJlc2l6YWJsZS1wcm94eSIsaWQ6dGhpcy5lbC5pZCsiLXJ6cHJveHkifSxFeHQu Z2V0Qm9keSgpKTt0aGlzLnByb3h5LnVuc2VsZWN0YWJsZSgpO3RoaXMucHJveHkuZW5hYmxlRGlz cGxheU1vZGUoImJsb2NrIik7RXh0LmFwcGx5KHRoaXMsZSk7aWYodGhpcy5waW5uZWQpe3RoaXMu ZGlzYWJsZVRyYWNrT3Zlcj10cnVlO3RoaXMuZWwuYWRkQ2xhc3MoIngtcmVzaXphYmxlLXBpbm5l ZCIpfXZhciBrPXRoaXMuZWwuZ2V0U3R5bGUoInBvc2l0aW9uIik7aWYoayE9ImFic29sdXRlIiYm ayE9ImZpeGVkIil7dGhpcy5lbC5zZXRTdHlsZSgicG9zaXRpb24iLCJyZWxhdGl2ZSIpfWlmKCF0 aGlzLmhhbmRsZXMpe3RoaXMuaGFuZGxlcz0icyxlLHNlIjtpZih0aGlzLm11bHRpRGlyZWN0aW9u YWwpe3RoaXMuaGFuZGxlcys9IixuLHcifX1pZih0aGlzLmhhbmRsZXM9PSJhbGwiKXt0aGlzLmhh bmRsZXM9Im4gcyBlIHcgbmUgbncgc2Ugc3cifXZhciBvPXRoaXMuaGFuZGxlcy5zcGxpdCgvXHMq P1ssO11ccyo/fCAvKTt2YXIgYz1FeHQuUmVzaXphYmxlLnBvc2l0aW9ucztmb3IodmFyIGo9MCxs PW8ubGVuZ3RoO2o8bDtqKyspe2lmKG9bal0mJmNbb1tqXV0pe3ZhciBuPWNbb1tqXV07dGhpc1tu XT1uZXcgRXh0LlJlc2l6YWJsZS5IYW5kbGUodGhpcyxuLHRoaXMuZGlzYWJsZVRyYWNrT3Zlcix0 aGlzLnRyYW5zcGFyZW50KX19dGhpcy5jb3JuZXI9dGhpcy5zb3V0aGVhc3Q7aWYodGhpcy5oYW5k bGVzLmluZGV4T2YoIm4iKSE9LTF8fHRoaXMuaGFuZGxlcy5pbmRleE9mKCJ3IikhPS0xKXt0aGlz LnVwZGF0ZUJveD10cnVlfXRoaXMuYWN0aXZlSGFuZGxlPW51bGw7aWYodGhpcy5yZXNpemVDaGls ZCl7aWYodHlwZW9mIHRoaXMucmVzaXplQ2hpbGQ9PSJib29sZWFuIil7dGhpcy5yZXNpemVDaGls ZD1FeHQuZ2V0KHRoaXMuZWwuZG9tLmZpcnN0Q2hpbGQsdHJ1ZSl9ZWxzZXt0aGlzLnJlc2l6ZUNo aWxkPUV4dC5nZXQodGhpcy5yZXNpemVDaGlsZCx0cnVlKX19aWYodGhpcy5hZGp1c3RtZW50cz09 ImF1dG8iKXt2YXIgYj10aGlzLnJlc2l6ZUNoaWxkO3ZhciBtPXRoaXMud2VzdCxoPXRoaXMuZWFz dCxhPXRoaXMubm9ydGgsbz10aGlzLnNvdXRoO2lmKGImJihtfHxhKSl7Yi5wb3NpdGlvbigicmVs YXRpdmUiKTtiLnNldExlZnQobT9tLmVsLmdldFdpZHRoKCk6MCk7Yi5zZXRUb3AoYT9hLmVsLmdl dEhlaWdodCgpOjApfXRoaXMuYWRqdXN0bWVudHM9WyhoPy1oLmVsLmdldFdpZHRoKCk6MCkrKG0/ LW0uZWwuZ2V0V2lkdGgoKTowKSwoYT8tYS5lbC5nZXRIZWlnaHQoKTowKSsobz8tby5lbC5nZXRI ZWlnaHQoKTowKS0xXX1pZih0aGlzLmRyYWdnYWJsZSl7dGhpcy5kZD10aGlzLmR5bmFtaWM/dGhp cy5lbC5pbml0REQobnVsbCk6dGhpcy5lbC5pbml0RERQcm94eShudWxsLHtkcmFnRWxJZDp0aGlz LnByb3h5LmlkfSk7dGhpcy5kZC5zZXRIYW5kbGVFbElkKHRoaXMucmVzaXplQ2hpbGQ/dGhpcy5y ZXNpemVDaGlsZC5pZDp0aGlzLmVsLmlkKX10aGlzLmFkZEV2ZW50cygiYmVmb3JlcmVzaXplIiwi cmVzaXplIik7aWYodGhpcy53aWR0aCE9PW51bGwmJnRoaXMuaGVpZ2h0IT09bnVsbCl7dGhpcy5y ZXNpemVUbyh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX1lbHNle3RoaXMudXBkYXRlQ2hpbGRTaXpl KCl9aWYoRXh0LmlzSUUpe3RoaXMuZWwuZG9tLnN0eWxlLnpvb209MX1FeHQuUmVzaXphYmxlLnN1 cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKX07RXh0LmV4dGVuZChFeHQuUmVzaXphYmxl LEV4dC51dGlsLk9ic2VydmFibGUse2FkanVzdG1lbnRzOlswLDBdLGFuaW1hdGU6ZmFsc2UsZGlz YWJsZVRyYWNrT3ZlcjpmYWxzZSxkcmFnZ2FibGU6ZmFsc2UsZHVyYXRpb246MC4zNSxkeW5hbWlj OmZhbHNlLGVhc2luZzoiZWFzZU91dFN0cm9uZyIsZW5hYmxlZDp0cnVlLGhhbmRsZXM6ZmFsc2Us bXVsdGlEaXJlY3Rpb25hbDpmYWxzZSxoZWlnaHQ6bnVsbCx3aWR0aDpudWxsLGhlaWdodEluY3Jl bWVudDowLHdpZHRoSW5jcmVtZW50OjAsbWluSGVpZ2h0OjUsbWluV2lkdGg6NSxtYXhIZWlnaHQ6 MTAwMDAsbWF4V2lkdGg6MTAwMDAsbWluWDowLG1pblk6MCxwaW5uZWQ6ZmFsc2UscHJlc2VydmVS YXRpbzpmYWxzZSxyZXNpemVDaGlsZDpmYWxzZSx0cmFuc3BhcmVudDpmYWxzZSxyZXNpemVUbzpm dW5jdGlvbihiLGEpe3RoaXMuZWwuc2V0U2l6ZShiLGEpO3RoaXMudXBkYXRlQ2hpbGRTaXplKCk7 dGhpcy5maXJlRXZlbnQoInJlc2l6ZSIsdGhpcyxiLGEsbnVsbCl9LHN0YXJ0U2l6aW5nOmZ1bmN0 aW9uKGMsYil7dGhpcy5maXJlRXZlbnQoImJlZm9yZXJlc2l6ZSIsdGhpcyxjKTtpZih0aGlzLmVu YWJsZWQpe2lmKCF0aGlzLm92ZXJsYXkpe3RoaXMub3ZlcmxheT10aGlzLmVsLmNyZWF0ZVByb3h5 KHt0YWc6ImRpdiIsY2xzOiJ4LXJlc2l6YWJsZS1vdmVybGF5IixodG1sOiImIzE2MDsifSxFeHQu Z2V0Qm9keSgpKTt0aGlzLm92ZXJsYXkudW5zZWxlY3RhYmxlKCk7dGhpcy5vdmVybGF5LmVuYWJs ZURpc3BsYXlNb2RlKCJibG9jayIpO3RoaXMub3ZlcmxheS5vbih7c2NvcGU6dGhpcyxtb3VzZW1v dmU6dGhpcy5vbk1vdXNlTW92ZSxtb3VzZXVwOnRoaXMub25Nb3VzZVVwfSl9dGhpcy5vdmVybGF5 LnNldFN0eWxlKCJjdXJzb3IiLGIuZWwuZ2V0U3R5bGUoImN1cnNvciIpKTt0aGlzLnJlc2l6aW5n PXRydWU7dGhpcy5zdGFydEJveD10aGlzLmVsLmdldEJveCgpO3RoaXMuc3RhcnRQb2ludD1jLmdl dFhZKCk7dGhpcy5vZmZzZXRzPVsodGhpcy5zdGFydEJveC54K3RoaXMuc3RhcnRCb3gud2lkdGgp LXRoaXMuc3RhcnRQb2ludFswXSwodGhpcy5zdGFydEJveC55K3RoaXMuc3RhcnRCb3guaGVpZ2h0 KS10aGlzLnN0YXJ0UG9pbnRbMV1dO3RoaXMub3ZlcmxheS5zZXRTaXplKEV4dC5saWIuRG9tLmdl dFZpZXdXaWR0aCh0cnVlKSxFeHQubGliLkRvbS5nZXRWaWV3SGVpZ2h0KHRydWUpKTt0aGlzLm92 ZXJsYXkuc2hvdygpO2lmKHRoaXMuY29uc3RyYWluVG8pe3ZhciBhPUV4dC5nZXQodGhpcy5jb25z dHJhaW5Ubyk7dGhpcy5yZXNpemVSZWdpb249YS5nZXRSZWdpb24oKS5hZGp1c3QoYS5nZXRGcmFt ZVdpZHRoKCJ0IiksYS5nZXRGcmFtZVdpZHRoKCJsIiksLWEuZ2V0RnJhbWVXaWR0aCgiYiIpLC1h LmdldEZyYW1lV2lkdGgoInIiKSl9dGhpcy5wcm94eS5zZXRTdHlsZSgidmlzaWJpbGl0eSIsImhp ZGRlbiIpO3RoaXMucHJveHkuc2hvdygpO3RoaXMucHJveHkuc2V0Qm94KHRoaXMuc3RhcnRCb3gp O2lmKCF0aGlzLmR5bmFtaWMpe3RoaXMucHJveHkuc2V0U3R5bGUoInZpc2liaWxpdHkiLCJ2aXNp YmxlIil9fX0sb25Nb3VzZURvd246ZnVuY3Rpb24oYSxiKXtpZih0aGlzLmVuYWJsZWQpe2Iuc3Rv cEV2ZW50KCk7dGhpcy5hY3RpdmVIYW5kbGU9YTt0aGlzLnN0YXJ0U2l6aW5nKGIsYSl9fSxvbk1v dXNlVXA6ZnVuY3Rpb24oYil7dGhpcy5hY3RpdmVIYW5kbGU9bnVsbDt2YXIgYT10aGlzLnJlc2l6 ZUVsZW1lbnQoKTt0aGlzLnJlc2l6aW5nPWZhbHNlO3RoaXMuaGFuZGxlT3V0KCk7dGhpcy5vdmVy bGF5LmhpZGUoKTt0aGlzLnByb3h5LmhpZGUoKTt0aGlzLmZpcmVFdmVudCgicmVzaXplIix0aGlz LGEud2lkdGgsYS5oZWlnaHQsYil9LHVwZGF0ZUNoaWxkU2l6ZTpmdW5jdGlvbigpe2lmKHRoaXMu cmVzaXplQ2hpbGQpe3ZhciBkPXRoaXMuZWw7dmFyIGU9dGhpcy5yZXNpemVDaGlsZDt2YXIgYz10 aGlzLmFkanVzdG1lbnRzO2lmKGQuZG9tLm9mZnNldFdpZHRoKXt2YXIgYT1kLmdldFNpemUodHJ1 ZSk7ZS5zZXRTaXplKGEud2lkdGgrY1swXSxhLmhlaWdodCtjWzFdKX1pZihFeHQuaXNJRSl7c2V0 VGltZW91dChmdW5jdGlvbigpe2lmKGQuZG9tLm9mZnNldFdpZHRoKXt2YXIgZz1kLmdldFNpemUo dHJ1ZSk7ZS5zZXRTaXplKGcud2lkdGgrY1swXSxnLmhlaWdodCtjWzFdKX19LDEwKX19fSxzbmFw OmZ1bmN0aW9uKGMsZSxiKXtpZighZXx8IWMpe3JldHVybiBjfXZhciBkPWM7dmFyIGE9YyVlO2lm KGE+MCl7aWYoYT4oZS8yKSl7ZD1jKyhlLWEpfWVsc2V7ZD1jLWF9fXJldHVybiBNYXRoLm1heChi LGQpfSxyZXNpemVFbGVtZW50OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wcm94eS5nZXRCb3goKTtp Zih0aGlzLnVwZGF0ZUJveCl7dGhpcy5lbC5zZXRCb3goYSxmYWxzZSx0aGlzLmFuaW1hdGUsdGhp cy5kdXJhdGlvbixudWxsLHRoaXMuZWFzaW5nKX1lbHNle3RoaXMuZWwuc2V0U2l6ZShhLndpZHRo LGEuaGVpZ2h0LHRoaXMuYW5pbWF0ZSx0aGlzLmR1cmF0aW9uLG51bGwsdGhpcy5lYXNpbmcpfXRo aXMudXBkYXRlQ2hpbGRTaXplKCk7aWYoIXRoaXMuZHluYW1pYyl7dGhpcy5wcm94eS5oaWRlKCl9 cmV0dXJuIGF9LGNvbnN0cmFpbjpmdW5jdGlvbihiLGMsYSxkKXtpZihiLWM8YSl7Yz1iLWF9ZWxz ZXtpZihiLWM+ZCl7Yz1iLWR9fXJldHVybiBjfSxvbk1vdXNlTW92ZTpmdW5jdGlvbih6KXtpZih0 aGlzLmVuYWJsZWQmJnRoaXMuYWN0aXZlSGFuZGxlKXt0cnl7aWYodGhpcy5yZXNpemVSZWdpb24m JiF0aGlzLnJlc2l6ZVJlZ2lvbi5jb250YWlucyh6LmdldFBvaW50KCkpKXtyZXR1cm59dmFyIHQ9 dGhpcy5jdXJTaXplfHx0aGlzLnN0YXJ0Qm94LGw9dGhpcy5zdGFydEJveC54LGs9dGhpcy5zdGFy dEJveC55LGM9bCxiPWssbT10LndpZHRoLHU9dC5oZWlnaHQsZD1tLG89dSxuPXRoaXMubWluV2lk dGgsQT10aGlzLm1pbkhlaWdodCxzPXRoaXMubWF4V2lkdGgsRD10aGlzLm1heEhlaWdodCxpPXRo aXMud2lkdGhJbmNyZW1lbnQsYT10aGlzLmhlaWdodEluY3JlbWVudCxCPXouZ2V0WFkoKSxyPS0o dGhpcy5zdGFydFBvaW50WzBdLU1hdGgubWF4KHRoaXMubWluWCxCWzBdKSkscD0tKHRoaXMuc3Rh cnRQb2ludFsxXS1NYXRoLm1heCh0aGlzLm1pblksQlsxXSkpLGo9dGhpcy5hY3RpdmVIYW5kbGUu cG9zaXRpb24sRSxnO3N3aXRjaChqKXtjYXNlImVhc3QiOm0rPXI7bT1NYXRoLm1pbihNYXRoLm1h eChuLG0pLHMpO2JyZWFrO2Nhc2Uic291dGgiOnUrPXA7dT1NYXRoLm1pbihNYXRoLm1heChBLHUp LEQpO2JyZWFrO2Nhc2Uic291dGhlYXN0IjptKz1yO3UrPXA7bT1NYXRoLm1pbihNYXRoLm1heChu LG0pLHMpO3U9TWF0aC5taW4oTWF0aC5tYXgoQSx1KSxEKTticmVhaztjYXNlIm5vcnRoIjpwPXRo aXMuY29uc3RyYWluKHUscCxBLEQpO2srPXA7dS09cDticmVhaztjYXNlIndlc3QiOnI9dGhpcy5j b25zdHJhaW4obSxyLG4scyk7bCs9cjttLT1yO2JyZWFrO2Nhc2Uibm9ydGhlYXN0IjptKz1yO209 TWF0aC5taW4oTWF0aC5tYXgobixtKSxzKTtwPXRoaXMuY29uc3RyYWluKHUscCxBLEQpO2srPXA7 dS09cDticmVhaztjYXNlIm5vcnRod2VzdCI6cj10aGlzLmNvbnN0cmFpbihtLHIsbixzKTtwPXRo aXMuY29uc3RyYWluKHUscCxBLEQpO2srPXA7dS09cDtsKz1yO20tPXI7YnJlYWs7Y2FzZSJzb3V0 aHdlc3QiOnI9dGhpcy5jb25zdHJhaW4obSxyLG4scyk7dSs9cDt1PU1hdGgubWluKE1hdGgubWF4 KEEsdSksRCk7bCs9cjttLT1yO2JyZWFrfXZhciBxPXRoaXMuc25hcChtLGksbik7dmFyIEM9dGhp cy5zbmFwKHUsYSxBKTtpZihxIT1tfHxDIT11KXtzd2l0Y2goail7Y2FzZSJub3J0aGVhc3QiOmst PUMtdTticmVhaztjYXNlIm5vcnRoIjprLT1DLXU7YnJlYWs7Y2FzZSJzb3V0aHdlc3QiOmwtPXEt bTticmVhaztjYXNlIndlc3QiOmwtPXEtbTticmVhaztjYXNlIm5vcnRod2VzdCI6bC09cS1tO2st PUMtdTticmVha31tPXE7dT1DfWlmKHRoaXMucHJlc2VydmVSYXRpbyl7c3dpdGNoKGope2Nhc2Ui c291dGhlYXN0IjpjYXNlImVhc3QiOnU9byoobS9kKTt1PU1hdGgubWluKE1hdGgubWF4KEEsdSks RCk7bT1kKih1L28pO2JyZWFrO2Nhc2Uic291dGgiOm09ZCoodS9vKTttPU1hdGgubWluKE1hdGgu bWF4KG4sbSkscyk7dT1vKihtL2QpO2JyZWFrO2Nhc2Uibm9ydGhlYXN0IjptPWQqKHUvbyk7bT1N YXRoLm1pbihNYXRoLm1heChuLG0pLHMpO3U9byoobS9kKTticmVhaztjYXNlIm5vcnRoIjpFPW07 bT1kKih1L28pO209TWF0aC5taW4oTWF0aC5tYXgobixtKSxzKTt1PW8qKG0vZCk7bCs9KEUtbSkv MjticmVhaztjYXNlInNvdXRod2VzdCI6dT1vKihtL2QpO3U9TWF0aC5taW4oTWF0aC5tYXgoQSx1 KSxEKTtFPW07bT1kKih1L28pO2wrPUUtbTticmVhaztjYXNlIndlc3QiOmc9dTt1PW8qKG0vZCk7 dT1NYXRoLm1pbihNYXRoLm1heChBLHUpLEQpO2srPShnLXUpLzI7RT1tO209ZCoodS9vKTtsKz1F LW07YnJlYWs7Y2FzZSJub3J0aHdlc3QiOkU9bTtnPXU7dT1vKihtL2QpO3U9TWF0aC5taW4oTWF0 aC5tYXgoQSx1KSxEKTttPWQqKHUvbyk7ays9Zy11O2wrPUUtbTticmVha319dGhpcy5wcm94eS5z ZXRCb3VuZHMobCxrLG0sdSk7aWYodGhpcy5keW5hbWljKXt0aGlzLnJlc2l6ZUVsZW1lbnQoKX19 Y2F0Y2godil7fX19LGhhbmRsZU92ZXI6ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWQpe3RoaXMu ZWwuYWRkQ2xhc3MoIngtcmVzaXphYmxlLW92ZXIiKX19LGhhbmRsZU91dDpmdW5jdGlvbigpe2lm KCF0aGlzLnJlc2l6aW5nKXt0aGlzLmVsLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZS1vdmVyIil9 fSxnZXRFbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsfSxnZXRSZXNpemVDaGlsZDpmdW5jdGlv bigpe3JldHVybiB0aGlzLnJlc2l6ZUNoaWxkfSxkZXN0cm95OmZ1bmN0aW9uKGIpe0V4dC5kZXN0 cm95KHRoaXMuZGQsdGhpcy5vdmVybGF5LHRoaXMucHJveHkpO3RoaXMub3ZlcmxheT1udWxsO3Ro aXMucHJveHk9bnVsbDt2YXIgYz1FeHQuUmVzaXphYmxlLnBvc2l0aW9ucztmb3IodmFyIGEgaW4g Yyl7aWYodHlwZW9mIGNbYV0hPSJmdW5jdGlvbiImJnRoaXNbY1thXV0pe3RoaXNbY1thXV0uZGVz dHJveSgpfX1pZihiKXt0aGlzLmVsLnVwZGF0ZSgiIik7RXh0LmRlc3Ryb3kodGhpcy5lbCk7dGhp cy5lbD1udWxsfXRoaXMucHVyZ2VMaXN0ZW5lcnMoKX0sc3luY0hhbmRsZUhlaWdodDpmdW5jdGlv bigpe3ZhciBhPXRoaXMuZWwuZ2V0SGVpZ2h0KHRydWUpO2lmKHRoaXMud2VzdCl7dGhpcy53ZXN0 LmVsLnNldEhlaWdodChhKX1pZih0aGlzLmVhc3Qpe3RoaXMuZWFzdC5lbC5zZXRIZWlnaHQoYSl9 fX0pO0V4dC5SZXNpemFibGUucG9zaXRpb25zPXtuOiJub3J0aCIsczoic291dGgiLGU6ImVhc3Qi LHc6Indlc3QiLHNlOiJzb3V0aGVhc3QiLHN3OiJzb3V0aHdlc3QiLG53OiJub3J0aHdlc3QiLG5l OiJub3J0aGVhc3QifTtFeHQuUmVzaXphYmxlLkhhbmRsZT1mdW5jdGlvbihjLGUsYixkKXtpZigh dGhpcy50cGwpe3ZhciBhPUV4dC5Eb21IZWxwZXIuY3JlYXRlVGVtcGxhdGUoe3RhZzoiZGl2Iixj bHM6IngtcmVzaXphYmxlLWhhbmRsZSB4LXJlc2l6YWJsZS1oYW5kbGUtezB9In0pO2EuY29tcGls ZSgpO0V4dC5SZXNpemFibGUuSGFuZGxlLnByb3RvdHlwZS50cGw9YX10aGlzLnBvc2l0aW9uPWU7 dGhpcy5yej1jO3RoaXMuZWw9dGhpcy50cGwuYXBwZW5kKGMuZWwuZG9tLFt0aGlzLnBvc2l0aW9u XSx0cnVlKTt0aGlzLmVsLnVuc2VsZWN0YWJsZSgpO2lmKGQpe3RoaXMuZWwuc2V0T3BhY2l0eSgw KX10aGlzLmVsLm9uKCJtb3VzZWRvd24iLHRoaXMub25Nb3VzZURvd24sdGhpcyk7aWYoIWIpe3Ro aXMuZWwub24oe3Njb3BlOnRoaXMsbW91c2VvdmVyOnRoaXMub25Nb3VzZU92ZXIsbW91c2VvdXQ6 dGhpcy5vbk1vdXNlT3V0fSl9fTtFeHQuUmVzaXphYmxlLkhhbmRsZS5wcm90b3R5cGU9e2FmdGVy UmVzaXplOmZ1bmN0aW9uKGEpe30sb25Nb3VzZURvd246ZnVuY3Rpb24oYSl7dGhpcy5yei5vbk1v dXNlRG93bih0aGlzLGEpfSxvbk1vdXNlT3ZlcjpmdW5jdGlvbihhKXt0aGlzLnJ6LmhhbmRsZU92 ZXIodGhpcyxhKX0sb25Nb3VzZU91dDpmdW5jdGlvbihhKXt0aGlzLnJ6LmhhbmRsZU91dCh0aGlz LGEpfSxkZXN0cm95OmZ1bmN0aW9uKCl7RXh0LmRlc3Ryb3kodGhpcy5lbCk7dGhpcy5lbD1udWxs fX07RXh0LldpbmRvdz1FeHQuZXh0ZW5kKEV4dC5QYW5lbCx7YmFzZUNsczoieC13aW5kb3ciLHJl c2l6YWJsZTp0cnVlLGRyYWdnYWJsZTp0cnVlLGNsb3NhYmxlOnRydWUsY2xvc2VBY3Rpb246ImNs b3NlIixjb25zdHJhaW46ZmFsc2UsY29uc3RyYWluSGVhZGVyOmZhbHNlLHBsYWluOmZhbHNlLG1p bmltaXphYmxlOmZhbHNlLG1heGltaXphYmxlOmZhbHNlLG1pbkhlaWdodDoxMDAsbWluV2lkdGg6 MjAwLGV4cGFuZE9uU2hvdzp0cnVlLGNvbGxhcHNpYmxlOmZhbHNlLGluaXRIaWRkZW46dHJ1ZSxt b25pdG9yUmVzaXplOnRydWUsZWxlbWVudHM6ImhlYWRlcixib2R5IixmcmFtZTp0cnVlLGZsb2F0 aW5nOnRydWUsaW5pdENvbXBvbmVudDpmdW5jdGlvbigpe0V4dC5XaW5kb3cuc3VwZXJjbGFzcy5p bml0Q29tcG9uZW50LmNhbGwodGhpcyk7dGhpcy5hZGRFdmVudHMoInJlc2l6ZSIsIm1heGltaXpl IiwibWluaW1pemUiLCJyZXN0b3JlIik7aWYodGhpcy5pbml0SGlkZGVuPT09ZmFsc2Upe3RoaXMu c2hvdygpfWVsc2V7dGhpcy5oaWRkZW49dHJ1ZX19LGdldFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJu IEV4dC5hcHBseShFeHQuV2luZG93LnN1cGVyY2xhc3MuZ2V0U3RhdGUuY2FsbCh0aGlzKXx8e30s dGhpcy5nZXRCb3godHJ1ZSkpfSxvblJlbmRlcjpmdW5jdGlvbihiLGEpe0V4dC5XaW5kb3cuc3Vw ZXJjbGFzcy5vblJlbmRlci5jYWxsKHRoaXMsYixhKTtpZih0aGlzLnBsYWluKXt0aGlzLmVsLmFk ZENsYXNzKCJ4LXdpbmRvdy1wbGFpbiIpfXRoaXMuZm9jdXNFbD10aGlzLmVsLmNyZWF0ZUNoaWxk KHt0YWc6ImEiLGhyZWY6IiMiLGNsczoieC1kbGctZm9jdXMiLHRhYkluZGV4OiItMSIsaHRtbDoi JiMxNjA7In0pO3RoaXMuZm9jdXNFbC5zd2FsbG93RXZlbnQoImNsaWNrIix0cnVlKTt0aGlzLnBy b3h5PXRoaXMuZWwuY3JlYXRlUHJveHkoIngtd2luZG93LXByb3h5Iik7dGhpcy5wcm94eS5lbmFi bGVEaXNwbGF5TW9kZSgiYmxvY2siKTtpZih0aGlzLm1vZGFsKXt0aGlzLm1hc2s9dGhpcy5jb250 YWluZXIuY3JlYXRlQ2hpbGQoe2NsczoiZXh0LWVsLW1hc2sifSx0aGlzLmVsLmRvbSk7dGhpcy5t YXNrLmVuYWJsZURpc3BsYXlNb2RlKCJibG9jayIpO3RoaXMubWFzay5oaWRlKCk7dGhpcy5tb24o dGhpcy5tYXNrLCJjbGljayIsdGhpcy5mb2N1cyx0aGlzKX10aGlzLmluaXRUb29scygpfSxpbml0 RXZlbnRzOmZ1bmN0aW9uKCl7RXh0LldpbmRvdy5zdXBlcmNsYXNzLmluaXRFdmVudHMuY2FsbCh0 aGlzKTtpZih0aGlzLmFuaW1hdGVUYXJnZXQpe3RoaXMuc2V0QW5pbWF0ZVRhcmdldCh0aGlzLmFu aW1hdGVUYXJnZXQpfWlmKHRoaXMucmVzaXphYmxlKXt0aGlzLnJlc2l6ZXI9bmV3IEV4dC5SZXNp emFibGUodGhpcy5lbCx7bWluV2lkdGg6dGhpcy5taW5XaWR0aCxtaW5IZWlnaHQ6dGhpcy5taW5I ZWlnaHQsaGFuZGxlczp0aGlzLnJlc2l6ZUhhbmRsZXN8fCJhbGwiLHBpbm5lZDp0cnVlLHJlc2l6 ZUVsZW1lbnQ6dGhpcy5yZXNpemVyQWN0aW9ufSk7dGhpcy5yZXNpemVyLndpbmRvdz10aGlzO3Ro aXMubW9uKHRoaXMucmVzaXplciwiYmVmb3JlcmVzaXplIix0aGlzLmJlZm9yZVJlc2l6ZSx0aGlz KX1pZih0aGlzLmRyYWdnYWJsZSl7dGhpcy5oZWFkZXIuYWRkQ2xhc3MoIngtd2luZG93LWRyYWdn YWJsZSIpfXRoaXMubW9uKHRoaXMuZWwsIm1vdXNlZG93biIsdGhpcy50b0Zyb250LHRoaXMpO3Ro aXMubWFuYWdlcj10aGlzLm1hbmFnZXJ8fEV4dC5XaW5kb3dNZ3I7dGhpcy5tYW5hZ2VyLnJlZ2lz dGVyKHRoaXMpO2lmKHRoaXMubWF4aW1pemVkKXt0aGlzLm1heGltaXplZD1mYWxzZTt0aGlzLm1h eGltaXplKCl9aWYodGhpcy5jbG9zYWJsZSl7dmFyIGE9dGhpcy5nZXRLZXlNYXAoKTthLm9uKDI3 LHRoaXMub25Fc2MsdGhpcyk7YS5kaXNhYmxlKCl9fSxpbml0RHJhZ2dhYmxlOmZ1bmN0aW9uKCl7 dGhpcy5kZD1uZXcgRXh0LldpbmRvdy5ERCh0aGlzKX0sb25Fc2M6ZnVuY3Rpb24oKXt0aGlzW3Ro aXMuY2xvc2VBY3Rpb25dKCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtpZih0aGlzLnJlbmRl cmVkKXt0aGlzLmhpZGUoKTtpZih0aGlzLmRvQW5jaG9yKXtFeHQuRXZlbnRNYW5hZ2VyLnJlbW92 ZVJlc2l6ZUxpc3RlbmVyKHRoaXMuZG9BbmNob3IsdGhpcyk7RXh0LkV2ZW50TWFuYWdlci51bih3 aW5kb3csInNjcm9sbCIsdGhpcy5kb0FuY2hvcix0aGlzKX1FeHQuZGVzdHJveSh0aGlzLmZvY3Vz RWwsdGhpcy5yZXNpemVyLHRoaXMuZGQsdGhpcy5wcm94eSx0aGlzLm1hc2spfUV4dC5XaW5kb3cu c3VwZXJjbGFzcy5iZWZvcmVEZXN0cm95LmNhbGwodGhpcyl9LG9uRGVzdHJveTpmdW5jdGlvbigp e2lmKHRoaXMubWFuYWdlcil7dGhpcy5tYW5hZ2VyLnVucmVnaXN0ZXIodGhpcyl9RXh0LldpbmRv dy5zdXBlcmNsYXNzLm9uRGVzdHJveS5jYWxsKHRoaXMpfSxpbml0VG9vbHM6ZnVuY3Rpb24oKXtp Zih0aGlzLm1pbmltaXphYmxlKXt0aGlzLmFkZFRvb2woe2lkOiJtaW5pbWl6ZSIsaGFuZGxlcjp0 aGlzLm1pbmltaXplLmNyZWF0ZURlbGVnYXRlKHRoaXMsW10pfSl9aWYodGhpcy5tYXhpbWl6YWJs ZSl7dGhpcy5hZGRUb29sKHtpZDoibWF4aW1pemUiLGhhbmRsZXI6dGhpcy5tYXhpbWl6ZS5jcmVh dGVEZWxlZ2F0ZSh0aGlzLFtdKX0pO3RoaXMuYWRkVG9vbCh7aWQ6InJlc3RvcmUiLGhhbmRsZXI6 dGhpcy5yZXN0b3JlLmNyZWF0ZURlbGVnYXRlKHRoaXMsW10pLGhpZGRlbjp0cnVlfSk7dGhpcy5t b24odGhpcy5oZWFkZXIsImRibGNsaWNrIix0aGlzLnRvZ2dsZU1heGltaXplLHRoaXMpfWlmKHRo aXMuY2xvc2FibGUpe3RoaXMuYWRkVG9vbCh7aWQ6ImNsb3NlIixoYW5kbGVyOnRoaXNbdGhpcy5j bG9zZUFjdGlvbl0uY3JlYXRlRGVsZWdhdGUodGhpcyxbXSl9KX19LHJlc2l6ZXJBY3Rpb246ZnVu Y3Rpb24oKXt2YXIgYT10aGlzLnByb3h5LmdldEJveCgpO3RoaXMucHJveHkuaGlkZSgpO3RoaXMu d2luZG93LmhhbmRsZVJlc2l6ZShhKTtyZXR1cm4gYX0sYmVmb3JlUmVzaXplOmZ1bmN0aW9uKCl7 dGhpcy5yZXNpemVyLm1pbkhlaWdodD1NYXRoLm1heCh0aGlzLm1pbkhlaWdodCx0aGlzLmdldEZy YW1lSGVpZ2h0KCkrNDApO3RoaXMucmVzaXplci5taW5XaWR0aD1NYXRoLm1heCh0aGlzLm1pbldp ZHRoLHRoaXMuZ2V0RnJhbWVXaWR0aCgpKzQwKTt0aGlzLnJlc2l6ZUJveD10aGlzLmVsLmdldEJv eCgpfSx1cGRhdGVIYW5kbGVzOmZ1bmN0aW9uKCl7aWYoRXh0LmlzSUUmJnRoaXMucmVzaXplcil7 dGhpcy5yZXNpemVyLnN5bmNIYW5kbGVIZWlnaHQoKTt0aGlzLmVsLnJlcGFpbnQoKX19LGhhbmRs ZVJlc2l6ZTpmdW5jdGlvbihiKXt2YXIgYT10aGlzLnJlc2l6ZUJveDtpZihhLnghPWIueHx8YS55 IT1iLnkpe3RoaXMudXBkYXRlQm94KGIpfWVsc2V7dGhpcy5zZXRTaXplKGIpfXRoaXMuZm9jdXMo KTt0aGlzLnVwZGF0ZUhhbmRsZXMoKTt0aGlzLnNhdmVTdGF0ZSgpO3RoaXMuZG9MYXlvdXQoKTt0 aGlzLmZpcmVFdmVudCgicmVzaXplIix0aGlzLGIud2lkdGgsYi5oZWlnaHQpfSxmb2N1czpmdW5j dGlvbigpe3ZhciBjPXRoaXMuZm9jdXNFbCxhPXRoaXMuZGVmYXVsdEJ1dHRvbixiPXR5cGVvZiBh O2lmKGIhPSJ1bmRlZmluZWQiKXtpZihiPT0ibnVtYmVyIiYmdGhpcy5mYmFyKXtjPXRoaXMuZmJh ci5pdGVtcy5nZXQoYSl9ZWxzZXtpZihiPT0ic3RyaW5nIil7Yz1FeHQuZ2V0Q21wKGEpfWVsc2V7 Yz1hfX19Yz1jfHx0aGlzLmZvY3VzRWw7Yy5mb2N1cy5kZWZlcigxMCxjKX0sc2V0QW5pbWF0ZVRh cmdldDpmdW5jdGlvbihhKXthPUV4dC5nZXQoYSk7dGhpcy5hbmltYXRlVGFyZ2V0PWF9LGJlZm9y ZVNob3c6ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5lbC5sYXN0WFk7ZGVsZXRlIHRoaXMuZWwubGFz dExUO2lmKHRoaXMueD09PXVuZGVmaW5lZHx8dGhpcy55PT09dW5kZWZpbmVkKXt2YXIgYT10aGlz LmVsLmdldEFsaWduVG9YWSh0aGlzLmNvbnRhaW5lciwiYy1jIik7dmFyIGI9dGhpcy5lbC50cmFu c2xhdGVQb2ludHMoYVswXSxhWzFdKTt0aGlzLng9dGhpcy54PT09dW5kZWZpbmVkP2IubGVmdDp0 aGlzLng7dGhpcy55PXRoaXMueT09PXVuZGVmaW5lZD9iLnRvcDp0aGlzLnl9dGhpcy5lbC5zZXRM ZWZ0VG9wKHRoaXMueCx0aGlzLnkpO2lmKHRoaXMuZXhwYW5kT25TaG93KXt0aGlzLmV4cGFuZChm YWxzZSl9aWYodGhpcy5tb2RhbCl7RXh0LmdldEJvZHkoKS5hZGRDbGFzcygieC1ib2R5LW1hc2tl ZCIpO3RoaXMubWFzay5zZXRTaXplKEV4dC5saWIuRG9tLmdldFZpZXdXaWR0aCh0cnVlKSxFeHQu bGliLkRvbS5nZXRWaWV3SGVpZ2h0KHRydWUpKTt0aGlzLm1hc2suc2hvdygpfX0sc2hvdzpmdW5j dGlvbihjLGEsYil7aWYoIXRoaXMucmVuZGVyZWQpe3RoaXMucmVuZGVyKEV4dC5nZXRCb2R5KCkp fWlmKHRoaXMuaGlkZGVuPT09ZmFsc2Upe3RoaXMudG9Gcm9udCgpO3JldHVybiB0aGlzfWlmKHRo aXMuZmlyZUV2ZW50KCJiZWZvcmVzaG93Iix0aGlzKT09PWZhbHNlKXtyZXR1cm4gdGhpc31pZihh KXt0aGlzLm9uKCJzaG93IixhLGIse3NpbmdsZTp0cnVlfSl9dGhpcy5oaWRkZW49ZmFsc2U7aWYo YyE9PXVuZGVmaW5lZCl7dGhpcy5zZXRBbmltYXRlVGFyZ2V0KGMpfXRoaXMuYmVmb3JlU2hvdygp O2lmKHRoaXMuYW5pbWF0ZVRhcmdldCl7dGhpcy5hbmltU2hvdygpfWVsc2V7dGhpcy5hZnRlclNo b3coKX1yZXR1cm4gdGhpc30sYWZ0ZXJTaG93OmZ1bmN0aW9uKGIpe3RoaXMucHJveHkuaGlkZSgp O3RoaXMuZWwuc2V0U3R5bGUoImRpc3BsYXkiLCJibG9jayIpO3RoaXMuZWwuc2hvdygpO2lmKHRo aXMubWF4aW1pemVkKXt0aGlzLmZpdENvbnRhaW5lcigpfWlmKEV4dC5pc01hYyYmRXh0LmlzR2Vj a28pe3RoaXMuY2FzY2FkZSh0aGlzLnNldEF1dG9TY3JvbGwpfWlmKHRoaXMubW9uaXRvclJlc2l6 ZXx8dGhpcy5tb2RhbHx8dGhpcy5jb25zdHJhaW58fHRoaXMuY29uc3RyYWluSGVhZGVyKXtFeHQu RXZlbnRNYW5hZ2VyLm9uV2luZG93UmVzaXplKHRoaXMub25XaW5kb3dSZXNpemUsdGhpcyl9dGhp cy5kb0NvbnN0cmFpbigpO3RoaXMuZG9MYXlvdXQoKTtpZih0aGlzLmtleU1hcCl7dGhpcy5rZXlN YXAuZW5hYmxlKCl9dGhpcy50b0Zyb250KCk7dGhpcy51cGRhdGVIYW5kbGVzKCk7aWYoYiYmKEV4 dC5pc0lFfHxFeHQuaXNXZWJLaXQpKXt2YXIgYT10aGlzLmdldFNpemUoKTt0aGlzLm9uUmVzaXpl KGEud2lkdGgsYS5oZWlnaHQpfXRoaXMuZmlyZUV2ZW50KCJzaG93Iix0aGlzKX0sYW5pbVNob3c6 ZnVuY3Rpb24oKXt0aGlzLnByb3h5LnNob3coKTt0aGlzLnByb3h5LnNldEJveCh0aGlzLmFuaW1h dGVUYXJnZXQuZ2V0Qm94KCkpO3RoaXMucHJveHkuc2V0T3BhY2l0eSgwKTt2YXIgYT10aGlzLmdl dEJveChmYWxzZSk7YS5jYWxsYmFjaz10aGlzLmFmdGVyU2hvdy5jcmVhdGVEZWxlZ2F0ZSh0aGlz LFt0cnVlXSxmYWxzZSk7YS5zY29wZT10aGlzO2EuZHVyYXRpb249MC4yNTthLmVhc2luZz0iZWFz ZU5vbmUiO2Eub3BhY2l0eT0wLjU7YS5ibG9jaz10cnVlO3RoaXMuZWwuc2V0U3R5bGUoImRpc3Bs YXkiLCJub25lIik7dGhpcy5wcm94eS5zaGlmdChhKX0saGlkZTpmdW5jdGlvbihjLGEsYil7aWYo dGhpcy5oaWRkZW58fHRoaXMuZmlyZUV2ZW50KCJiZWZvcmVoaWRlIix0aGlzKT09PWZhbHNlKXty ZXR1cm4gdGhpc31pZihhKXt0aGlzLm9uKCJoaWRlIixhLGIse3NpbmdsZTp0cnVlfSl9dGhpcy5o aWRkZW49dHJ1ZTtpZihjIT09dW5kZWZpbmVkKXt0aGlzLnNldEFuaW1hdGVUYXJnZXQoYyl9aWYo dGhpcy5tb2RhbCl7dGhpcy5tYXNrLmhpZGUoKTtFeHQuZ2V0Qm9keSgpLnJlbW92ZUNsYXNzKCJ4 LWJvZHktbWFza2VkIil9aWYodGhpcy5hbmltYXRlVGFyZ2V0KXt0aGlzLmFuaW1IaWRlKCl9ZWxz ZXt0aGlzLmVsLmhpZGUoKTt0aGlzLmFmdGVySGlkZSgpfXJldHVybiB0aGlzfSxhZnRlckhpZGU6 ZnVuY3Rpb24oKXt0aGlzLnByb3h5LmhpZGUoKTtpZih0aGlzLm1vbml0b3JSZXNpemV8fHRoaXMu bW9kYWx8fHRoaXMuY29uc3RyYWlufHx0aGlzLmNvbnN0cmFpbkhlYWRlcil7RXh0LkV2ZW50TWFu YWdlci5yZW1vdmVSZXNpemVMaXN0ZW5lcih0aGlzLm9uV2luZG93UmVzaXplLHRoaXMpfWlmKHRo aXMua2V5TWFwKXt0aGlzLmtleU1hcC5kaXNhYmxlKCl9dGhpcy5maXJlRXZlbnQoImhpZGUiLHRo aXMpfSxhbmltSGlkZTpmdW5jdGlvbigpe3RoaXMucHJveHkuc2V0T3BhY2l0eSgwLjUpO3RoaXMu cHJveHkuc2hvdygpO3ZhciBjPXRoaXMuZ2V0Qm94KGZhbHNlKTt0aGlzLnByb3h5LnNldEJveChj KTt0aGlzLmVsLmhpZGUoKTt2YXIgYT10aGlzLmFuaW1hdGVUYXJnZXQuZ2V0Qm94KCk7YS5jYWxs YmFjaz10aGlzLmFmdGVySGlkZTthLnNjb3BlPXRoaXM7YS5kdXJhdGlvbj0wLjI1O2EuZWFzaW5n PSJlYXNlTm9uZSI7YS5ibG9jaz10cnVlO2Eub3BhY2l0eT0wO3RoaXMucHJveHkuc2hpZnQoYSl9 LG9uV2luZG93UmVzaXplOmZ1bmN0aW9uKCl7aWYodGhpcy5tYXhpbWl6ZWQpe3RoaXMuZml0Q29u dGFpbmVyKCl9aWYodGhpcy5tb2RhbCl7dGhpcy5tYXNrLnNldFNpemUoIjEwMCUiLCIxMDAlIik7 dmFyIGE9dGhpcy5tYXNrLmRvbS5vZmZzZXRIZWlnaHQ7dGhpcy5tYXNrLnNldFNpemUoRXh0Lmxp Yi5Eb20uZ2V0Vmlld1dpZHRoKHRydWUpLEV4dC5saWIuRG9tLmdldFZpZXdIZWlnaHQodHJ1ZSkp fXRoaXMuZG9Db25zdHJhaW4oKX0sZG9Db25zdHJhaW46ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnN0 cmFpbnx8dGhpcy5jb25zdHJhaW5IZWFkZXIpe3ZhciBiO2lmKHRoaXMuY29uc3RyYWluKXtiPXty aWdodDp0aGlzLmVsLnNoYWRvd09mZnNldCxsZWZ0OnRoaXMuZWwuc2hhZG93T2Zmc2V0LGJvdHRv bTp0aGlzLmVsLnNoYWRvd09mZnNldH19ZWxzZXt2YXIgYT10aGlzLmdldFNpemUoKTtiPXtyaWdo dDotKGEud2lkdGgtMTAwKSxib3R0b206LShhLmhlaWdodC0yNSl9fXZhciBjPXRoaXMuZWwuZ2V0 Q29uc3RyYWluVG9YWSh0aGlzLmNvbnRhaW5lcix0cnVlLGIpO2lmKGMpe3RoaXMuc2V0UG9zaXRp b24oY1swXSxjWzFdKX19fSxnaG9zdDpmdW5jdGlvbihhKXt2YXIgYz10aGlzLmNyZWF0ZUdob3N0 KGEpO3ZhciBiPXRoaXMuZ2V0Qm94KHRydWUpO2Muc2V0TGVmdFRvcChiLngsYi55KTtjLnNldFdp ZHRoKGIud2lkdGgpO3RoaXMuZWwuaGlkZSgpO3RoaXMuYWN0aXZlR2hvc3Q9YztyZXR1cm4gY30s dW5naG9zdDpmdW5jdGlvbihiLGEpe2lmKCF0aGlzLmFjdGl2ZUdob3N0KXtyZXR1cm59aWYoYiE9 PWZhbHNlKXt0aGlzLmVsLnNob3coKTt0aGlzLmZvY3VzKCk7aWYoRXh0LmlzTWFjJiZFeHQuaXNH ZWNrbyl7dGhpcy5jYXNjYWRlKHRoaXMuc2V0QXV0b1Njcm9sbCl9fWlmKGEhPT1mYWxzZSl7dGhp cy5zZXRQb3NpdGlvbih0aGlzLmFjdGl2ZUdob3N0LmdldExlZnQodHJ1ZSksdGhpcy5hY3RpdmVH aG9zdC5nZXRUb3AodHJ1ZSkpfXRoaXMuYWN0aXZlR2hvc3QuaGlkZSgpO3RoaXMuYWN0aXZlR2hv c3QucmVtb3ZlKCk7ZGVsZXRlIHRoaXMuYWN0aXZlR2hvc3R9LG1pbmltaXplOmZ1bmN0aW9uKCl7 dGhpcy5maXJlRXZlbnQoIm1pbmltaXplIix0aGlzKTtyZXR1cm4gdGhpc30sY2xvc2U6ZnVuY3Rp b24oKXtpZih0aGlzLmZpcmVFdmVudCgiYmVmb3JlY2xvc2UiLHRoaXMpIT09ZmFsc2Upe3RoaXMu aGlkZShudWxsLGZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoImNsb3NlIix0aGlzKTt0aGlzLmRl c3Ryb3koKX0sdGhpcyl9fSxtYXhpbWl6ZTpmdW5jdGlvbigpe2lmKCF0aGlzLm1heGltaXplZCl7 dGhpcy5leHBhbmQoZmFsc2UpO3RoaXMucmVzdG9yZVNpemU9dGhpcy5nZXRTaXplKCk7dGhpcy5y ZXN0b3JlUG9zPXRoaXMuZ2V0UG9zaXRpb24odHJ1ZSk7aWYodGhpcy5tYXhpbWl6YWJsZSl7dGhp cy50b29scy5tYXhpbWl6ZS5oaWRlKCk7dGhpcy50b29scy5yZXN0b3JlLnNob3coKX10aGlzLm1h eGltaXplZD10cnVlO3RoaXMuZWwuZGlzYWJsZVNoYWRvdygpO2lmKHRoaXMuZGQpe3RoaXMuZGQu bG9jaygpfWlmKHRoaXMuY29sbGFwc2libGUpe3RoaXMudG9vbHMudG9nZ2xlLmhpZGUoKX10aGlz LmVsLmFkZENsYXNzKCJ4LXdpbmRvdy1tYXhpbWl6ZWQiKTt0aGlzLmNvbnRhaW5lci5hZGRDbGFz cygieC13aW5kb3ctbWF4aW1pemVkLWN0Iik7dGhpcy5zZXRQb3NpdGlvbigwLDApO3RoaXMuZml0 Q29udGFpbmVyKCk7dGhpcy5maXJlRXZlbnQoIm1heGltaXplIix0aGlzKX1yZXR1cm4gdGhpc30s cmVzdG9yZTpmdW5jdGlvbigpe2lmKHRoaXMubWF4aW1pemVkKXt0aGlzLmVsLnJlbW92ZUNsYXNz KCJ4LXdpbmRvdy1tYXhpbWl6ZWQiKTt0aGlzLnRvb2xzLnJlc3RvcmUuaGlkZSgpO3RoaXMudG9v bHMubWF4aW1pemUuc2hvdygpO3RoaXMuc2V0UG9zaXRpb24odGhpcy5yZXN0b3JlUG9zWzBdLHRo aXMucmVzdG9yZVBvc1sxXSk7dGhpcy5zZXRTaXplKHRoaXMucmVzdG9yZVNpemUud2lkdGgsdGhp cy5yZXN0b3JlU2l6ZS5oZWlnaHQpO2RlbGV0ZSB0aGlzLnJlc3RvcmVQb3M7ZGVsZXRlIHRoaXMu cmVzdG9yZVNpemU7dGhpcy5tYXhpbWl6ZWQ9ZmFsc2U7dGhpcy5lbC5lbmFibGVTaGFkb3codHJ1 ZSk7aWYodGhpcy5kZCl7dGhpcy5kZC51bmxvY2soKX1pZih0aGlzLmNvbGxhcHNpYmxlKXt0aGlz LnRvb2xzLnRvZ2dsZS5zaG93KCl9dGhpcy5jb250YWluZXIucmVtb3ZlQ2xhc3MoIngtd2luZG93 LW1heGltaXplZC1jdCIpO3RoaXMuZG9Db25zdHJhaW4oKTt0aGlzLmZpcmVFdmVudCgicmVzdG9y ZSIsdGhpcyl9cmV0dXJuIHRoaXN9LHRvZ2dsZU1heGltaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRo aXNbdGhpcy5tYXhpbWl6ZWQ/InJlc3RvcmUiOiJtYXhpbWl6ZSJdKCl9LGZpdENvbnRhaW5lcjpm dW5jdGlvbigpe3ZhciBhPXRoaXMuY29udGFpbmVyLmdldFZpZXdTaXplKCk7dGhpcy5zZXRTaXpl KGEud2lkdGgsYS5oZWlnaHQpfSxzZXRaSW5kZXg6ZnVuY3Rpb24oYSl7aWYodGhpcy5tb2RhbCl7 dGhpcy5tYXNrLnNldFN0eWxlKCJ6LWluZGV4IixhKX10aGlzLmVsLnNldFpJbmRleCgrK2EpO2Er PTU7aWYodGhpcy5yZXNpemVyKXt0aGlzLnJlc2l6ZXIucHJveHkuc2V0U3R5bGUoInotaW5kZXgi LCsrYSl9dGhpcy5sYXN0WkluZGV4PWF9LGFsaWduVG86ZnVuY3Rpb24oYixhLGMpe3ZhciBkPXRo aXMuZWwuZ2V0QWxpZ25Ub1hZKGIsYSxjKTt0aGlzLnNldFBhZ2VQb3NpdGlvbihkWzBdLGRbMV0p O3JldHVybiB0aGlzfSxhbmNob3JUbzpmdW5jdGlvbihjLGUsZCxiKXtpZih0aGlzLmRvQW5jaG9y KXtFeHQuRXZlbnRNYW5hZ2VyLnJlbW92ZVJlc2l6ZUxpc3RlbmVyKHRoaXMuZG9BbmNob3IsdGhp cyk7RXh0LkV2ZW50TWFuYWdlci51bih3aW5kb3csInNjcm9sbCIsdGhpcy5kb0FuY2hvcix0aGlz KX10aGlzLmRvQW5jaG9yPWZ1bmN0aW9uKCl7dGhpcy5hbGlnblRvKGMsZSxkKX07RXh0LkV2ZW50 TWFuYWdlci5vbldpbmRvd1Jlc2l6ZSh0aGlzLmRvQW5jaG9yLHRoaXMpO3ZhciBhPXR5cGVvZiBi O2lmKGEhPSJ1bmRlZmluZWQiKXtFeHQuRXZlbnRNYW5hZ2VyLm9uKHdpbmRvdywic2Nyb2xsIix0 aGlzLmRvQW5jaG9yLHRoaXMse2J1ZmZlcjphPT0ibnVtYmVyIj9iOjUwfSl9dGhpcy5kb0FuY2hv cigpO3JldHVybiB0aGlzfSx0b0Zyb250OmZ1bmN0aW9uKGEpe2lmKHRoaXMubWFuYWdlci5icmlu Z1RvRnJvbnQodGhpcykpe2lmKCFhfHwhYS5nZXRUYXJnZXQoKS5mb2N1cyl7dGhpcy5mb2N1cygp fX1yZXR1cm4gdGhpc30sc2V0QWN0aXZlOmZ1bmN0aW9uKGEpe2lmKGEpe2lmKCF0aGlzLm1heGlt aXplZCl7dGhpcy5lbC5lbmFibGVTaGFkb3codHJ1ZSl9dGhpcy5maXJlRXZlbnQoImFjdGl2YXRl Iix0aGlzKX1lbHNle3RoaXMuZWwuZGlzYWJsZVNoYWRvdygpO3RoaXMuZmlyZUV2ZW50KCJkZWFj dGl2YXRlIix0aGlzKX19LHRvQmFjazpmdW5jdGlvbigpe3RoaXMubWFuYWdlci5zZW5kVG9CYWNr KHRoaXMpO3JldHVybiB0aGlzfSxjZW50ZXI6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmVsLmdldEFs aWduVG9YWSh0aGlzLmNvbnRhaW5lciwiYy1jIik7dGhpcy5zZXRQYWdlUG9zaXRpb24oYVswXSxh WzFdKTtyZXR1cm4gdGhpc319KTtFeHQucmVnKCJ3aW5kb3ciLEV4dC5XaW5kb3cpO0V4dC5XaW5k b3cuREQ9ZnVuY3Rpb24oYSl7dGhpcy53aW49YTtFeHQuV2luZG93LkRELnN1cGVyY2xhc3MuY29u c3RydWN0b3IuY2FsbCh0aGlzLGEuZWwuaWQsIldpbmRvd0RELSIrYS5pZCk7dGhpcy5zZXRIYW5k bGVFbElkKGEuaGVhZGVyLmlkKTt0aGlzLnNjcm9sbD1mYWxzZX07RXh0LmV4dGVuZChFeHQuV2lu ZG93LkRELEV4dC5kZC5ERCx7bW92ZU9ubHk6dHJ1ZSxoZWFkZXJPZmZzZXRzOlsxMDAsMjVdLHN0 YXJ0RHJhZzpmdW5jdGlvbigpe3ZhciBhPXRoaXMud2luO3RoaXMucHJveHk9YS5naG9zdCgpO2lm KGEuY29uc3RyYWluIT09ZmFsc2Upe3ZhciBjPWEuZWwuc2hhZG93T2Zmc2V0O3RoaXMuY29uc3Ry YWluVG8oYS5jb250YWluZXIse3JpZ2h0OmMsbGVmdDpjLGJvdHRvbTpjfSl9ZWxzZXtpZihhLmNv bnN0cmFpbkhlYWRlciE9PWZhbHNlKXt2YXIgYj10aGlzLnByb3h5LmdldFNpemUoKTt0aGlzLmNv bnN0cmFpblRvKGEuY29udGFpbmVyLHtyaWdodDotKGIud2lkdGgtdGhpcy5oZWFkZXJPZmZzZXRz WzBdKSxib3R0b206LShiLmhlaWdodC10aGlzLmhlYWRlck9mZnNldHNbMV0pfSl9fX0sYjREcmFn OkV4dC5lbXB0eUZuLG9uRHJhZzpmdW5jdGlvbihhKXt0aGlzLmFsaWduRWxXaXRoTW91c2UodGhp cy5wcm94eSxhLmdldFBhZ2VYKCksYS5nZXRQYWdlWSgpKX0sZW5kRHJhZzpmdW5jdGlvbihhKXt0 aGlzLndpbi51bmdob3N0KCk7dGhpcy53aW4uc2F2ZVN0YXRlKCl9fSk7RXh0LldpbmRvd0dyb3Vw PWZ1bmN0aW9uKCl7dmFyIGc9e307dmFyIGQ9W107dmFyIGU9bnVsbDt2YXIgYz1mdW5jdGlvbihq LGkpe3JldHVybighai5fbGFzdEFjY2Vzc3x8ai5fbGFzdEFjY2VzczxpLl9sYXN0QWNjZXNzKT8t MToxfTt2YXIgaD1mdW5jdGlvbigpe3ZhciBsPWQsaj1sLmxlbmd0aDtpZihqPjApe2wuc29ydChj KTt2YXIgaz1sWzBdLm1hbmFnZXIuenNlZWQ7Zm9yKHZhciBtPTA7bTxqO20rKyl7dmFyIG49bFtt XTtpZihuJiYhbi5oaWRkZW4pe24uc2V0WkluZGV4KGsrKG0qMTApKX19fWEoKX07dmFyIGI9ZnVu Y3Rpb24oaSl7aWYoaSE9ZSl7aWYoZSl7ZS5zZXRBY3RpdmUoZmFsc2UpfWU9aTtpZihpKXtpLnNl dEFjdGl2ZSh0cnVlKX19fTt2YXIgYT1mdW5jdGlvbigpe2Zvcih2YXIgaj1kLmxlbmd0aC0xO2o+ PTA7LS1qKXtpZighZFtqXS5oaWRkZW4pe2IoZFtqXSk7cmV0dXJufX1iKG51bGwpfTtyZXR1cm57 enNlZWQ6OTAwMCxyZWdpc3RlcjpmdW5jdGlvbihpKXtnW2kuaWRdPWk7ZC5wdXNoKGkpO2kub24o ImhpZGUiLGEpfSx1bnJlZ2lzdGVyOmZ1bmN0aW9uKGkpe2RlbGV0ZSBnW2kuaWRdO2kudW4oImhp ZGUiLGEpO2QucmVtb3ZlKGkpfSxnZXQ6ZnVuY3Rpb24oaSl7cmV0dXJuIHR5cGVvZiBpPT0ib2Jq ZWN0Ij9pOmdbaV19LGJyaW5nVG9Gcm9udDpmdW5jdGlvbihpKXtpPXRoaXMuZ2V0KGkpO2lmKGkh PWUpe2kuX2xhc3RBY2Nlc3M9bmV3IERhdGUoKS5nZXRUaW1lKCk7aCgpO3JldHVybiB0cnVlfXJl dHVybiBmYWxzZX0sc2VuZFRvQmFjazpmdW5jdGlvbihpKXtpPXRoaXMuZ2V0KGkpO2kuX2xhc3RB Y2Nlc3M9LShuZXcgRGF0ZSgpLmdldFRpbWUoKSk7aCgpO3JldHVybiBpfSxoaWRlQWxsOmZ1bmN0 aW9uKCl7Zm9yKHZhciBpIGluIGcpe2lmKGdbaV0mJnR5cGVvZiBnW2ldIT0iZnVuY3Rpb24iJiZn W2ldLmlzVmlzaWJsZSgpKXtnW2ldLmhpZGUoKX19fSxnZXRBY3RpdmU6ZnVuY3Rpb24oKXtyZXR1 cm4gZX0sZ2V0Qnk6ZnVuY3Rpb24obCxrKXt2YXIgbT1bXTtmb3IodmFyIGo9ZC5sZW5ndGgtMTtq Pj0wOy0tail7dmFyIG49ZFtqXTtpZihsLmNhbGwoa3x8bixuKSE9PWZhbHNlKXttLnB1c2gobil9 fXJldHVybiBtfSxlYWNoOmZ1bmN0aW9uKGosaSl7Zm9yKHZhciBrIGluIGcpe2lmKGdba10mJnR5 cGVvZiBnW2tdIT0iZnVuY3Rpb24iKXtpZihqLmNhbGwoaXx8Z1trXSxnW2tdKT09PWZhbHNlKXty ZXR1cm59fX19fX07RXh0LldpbmRvd01ncj1uZXcgRXh0LldpbmRvd0dyb3VwKCk7RXh0Lk1lc3Nh Z2VCb3g9ZnVuY3Rpb24oKXt2YXIgcyxiLG8scjt2YXIgaCxrLHEsYSxsLG4saSxnO3ZhciBwLHQs bSxjPSIiO3ZhciBkPWZ1bmN0aW9uKHYpe2lmKHMuaXNWaXNpYmxlKCkpe3MuaGlkZSgpO3UoKTtF eHQuY2FsbGJhY2soYi5mbixiLnNjb3BlfHx3aW5kb3csW3YsdC5kb20udmFsdWUsYl0sMSl9fTt2 YXIgdT1mdW5jdGlvbigpe2lmKGImJmIuY2xzKXtzLmVsLnJlbW92ZUNsYXNzKGIuY2xzKX1sLnJl c2V0KCl9O3ZhciBlPWZ1bmN0aW9uKHgsdix3KXtpZihiJiZiLmNsb3NhYmxlIT09ZmFsc2Upe3Mu aGlkZSgpO3UoKX1pZih3KXt3LnN0b3BFdmVudCgpfX07dmFyIGo9ZnVuY3Rpb24odil7dmFyIHg9 MDtpZighdil7cC5vay5oaWRlKCk7cC5jYW5jZWwuaGlkZSgpO3AueWVzLmhpZGUoKTtwLm5vLmhp ZGUoKTtyZXR1cm4geH1zLmZvb3Rlci5kb20uc3R5bGUuZGlzcGxheT0iIjtmb3IodmFyIHcgaW4g cCl7aWYodHlwZW9mIHBbd10hPSJmdW5jdGlvbiIpe2lmKHZbd10pe3Bbd10uc2hvdygpO3Bbd10u c2V0VGV4dCh0eXBlb2Ygdlt3XT09InN0cmluZyI/dlt3XTpFeHQuTWVzc2FnZUJveC5idXR0b25U ZXh0W3ddKTt4Kz1wW3ddLmVsLmdldFdpZHRoKCkrMTV9ZWxzZXtwW3ddLmhpZGUoKX19fXJldHVy biB4fTtyZXR1cm57Z2V0RGlhbG9nOmZ1bmN0aW9uKHYpe2lmKCFzKXtzPW5ldyBFeHQuV2luZG93 KHthdXRvQ3JlYXRlOnRydWUsdGl0bGU6dixyZXNpemFibGU6ZmFsc2UsY29uc3RyYWluOnRydWUs Y29uc3RyYWluSGVhZGVyOnRydWUsbWluaW1pemFibGU6ZmFsc2UsbWF4aW1pemFibGU6ZmFsc2Us c3RhdGVmdWw6ZmFsc2UsbW9kYWw6dHJ1ZSxzaGltOnRydWUsYnV0dG9uQWxpZ246ImNlbnRlciIs d2lkdGg6NDAwLGhlaWdodDoxMDAsbWluSGVpZ2h0OjgwLHBsYWluOnRydWUsZm9vdGVyOnRydWUs Y2xvc2FibGU6dHJ1ZSxjbG9zZTpmdW5jdGlvbigpe2lmKGImJmIuYnV0dG9ucyYmYi5idXR0b25z Lm5vJiYhYi5idXR0b25zLmNhbmNlbCl7ZCgibm8iKX1lbHNle2QoImNhbmNlbCIpfX19KTtwPXt9 O3ZhciB3PXRoaXMuYnV0dG9uVGV4dDtwLm9rPXMuYWRkQnV0dG9uKHcub2ssZC5jcmVhdGVDYWxs YmFjaygib2siKSk7cC55ZXM9cy5hZGRCdXR0b24ody55ZXMsZC5jcmVhdGVDYWxsYmFjaygieWVz IikpO3Aubm89cy5hZGRCdXR0b24ody5ubyxkLmNyZWF0ZUNhbGxiYWNrKCJubyIpKTtwLmNhbmNl bD1zLmFkZEJ1dHRvbih3LmNhbmNlbCxkLmNyZWF0ZUNhbGxiYWNrKCJjYW5jZWwiKSk7cC5vay5o aWRlTW9kZT1wLnllcy5oaWRlTW9kZT1wLm5vLmhpZGVNb2RlPXAuY2FuY2VsLmhpZGVNb2RlPSJv ZmZzZXRzIjtzLnJlbmRlcihkb2N1bWVudC5ib2R5KTtzLmdldEVsKCkuYWRkQ2xhc3MoIngtd2lu ZG93LWRsZyIpO289cy5tYXNrO2g9cy5ib2R5LmNyZWF0ZUNoaWxkKHtodG1sOic8ZGl2IGNsYXNz PSJleHQtbWItaWNvbiI+PC9kaXY+PGRpdiBjbGFzcz0iZXh0LW1iLWNvbnRlbnQiPjxzcGFuIGNs YXNzPSJleHQtbWItdGV4dCI+PC9zcGFuPjxiciAvPjxkaXYgY2xhc3M9ImV4dC1tYi1maXgtY3Vy c29yIj48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImV4dC1tYi1pbnB1dCIgLz48dGV4dGFyZWEg Y2xhc3M9ImV4dC1tYi10ZXh0YXJlYSI+PC90ZXh0YXJlYT48L2Rpdj48L2Rpdj4nfSk7aT1FeHQu Z2V0KGguZG9tLmZpcnN0Q2hpbGQpO3ZhciB4PWguZG9tLmNoaWxkTm9kZXNbMV07az1FeHQuZ2V0 KHguZmlyc3RDaGlsZCk7cT1FeHQuZ2V0KHguY2hpbGROb2Rlc1syXS5maXJzdENoaWxkKTtxLmVu YWJsZURpc3BsYXlNb2RlKCk7cS5hZGRLZXlMaXN0ZW5lcihbMTAsMTNdLGZ1bmN0aW9uKCl7aWYo cy5pc1Zpc2libGUoKSYmYiYmYi5idXR0b25zKXtpZihiLmJ1dHRvbnMub2spe2QoIm9rIil9ZWxz ZXtpZihiLmJ1dHRvbnMueWVzKXtkKCJ5ZXMiKX19fX0pO2E9RXh0LmdldCh4LmNoaWxkTm9kZXNb Ml0uY2hpbGROb2Rlc1sxXSk7YS5lbmFibGVEaXNwbGF5TW9kZSgpO2w9bmV3IEV4dC5Qcm9ncmVz c0Jhcih7cmVuZGVyVG86aH0pO2guY3JlYXRlQ2hpbGQoe2NsczoieC1jbGVhciJ9KX1yZXR1cm4g c30sdXBkYXRlVGV4dDpmdW5jdGlvbih6KXtpZighcy5pc1Zpc2libGUoKSYmIWIud2lkdGgpe3Mu c2V0U2l6ZSh0aGlzLm1heFdpZHRoLDEwMCl9ay51cGRhdGUoenx8IiYjMTYwOyIpO3ZhciB4PWMh PSIiPyhpLmdldFdpZHRoKCkraS5nZXRNYXJnaW5zKCJsciIpKTowO3ZhciBCPWsuZ2V0V2lkdGgo KStrLmdldE1hcmdpbnMoImxyIik7dmFyIHk9cy5nZXRGcmFtZVdpZHRoKCJsciIpO3ZhciBBPXMu Ym9keS5nZXRGcmFtZVdpZHRoKCJsciIpO2lmKEV4dC5pc0lFJiZ4PjApe3grPTN9dmFyIHY9TWF0 aC5tYXgoTWF0aC5taW4oYi53aWR0aHx8eCtCK3krQSx0aGlzLm1heFdpZHRoKSxNYXRoLm1heChi Lm1pbldpZHRofHx0aGlzLm1pbldpZHRoLG18fDApKTtpZihiLnByb21wdD09PXRydWUpe3Quc2V0 V2lkdGgodi14LXktQSl9aWYoYi5wcm9ncmVzcz09PXRydWV8fGIud2FpdD09PXRydWUpe2wuc2V0 U2l6ZSh2LXgteS1BKX1pZihFeHQuaXNJRSYmdj09bSl7dis9NH1zLnNldFNpemUodiwiYXV0byIp LmNlbnRlcigpO3JldHVybiB0aGlzfSx1cGRhdGVQcm9ncmVzczpmdW5jdGlvbih3LHYseCl7bC51 cGRhdGVQcm9ncmVzcyh3LHYpO2lmKHgpe3RoaXMudXBkYXRlVGV4dCh4KX1yZXR1cm4gdGhpc30s aXNWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHMmJnMuaXNWaXNpYmxlKCl9LGhpZGU6ZnVuY3Rp b24oKXt2YXIgdj1zP3MuYWN0aXZlR2hvc3Q6bnVsbDtpZih0aGlzLmlzVmlzaWJsZSgpfHx2KXtz LmhpZGUoKTt1KCk7aWYodil7cy51bmdob3N0KGZhbHNlLGZhbHNlKX19cmV0dXJuIHRoaXN9LHNo b3c6ZnVuY3Rpb24oeSl7aWYodGhpcy5pc1Zpc2libGUoKSl7dGhpcy5oaWRlKCl9Yj15O3ZhciB6 PXRoaXMuZ2V0RGlhbG9nKGIudGl0bGV8fCImIzE2MDsiKTt6LnNldFRpdGxlKGIudGl0bGV8fCIm IzE2MDsiKTt2YXIgdj0oYi5jbG9zYWJsZSE9PWZhbHNlJiZiLnByb2dyZXNzIT09dHJ1ZSYmYi53 YWl0IT09dHJ1ZSk7ei50b29scy5jbG9zZS5zZXREaXNwbGF5ZWQodik7dD1xO2IucHJvbXB0PWIu cHJvbXB0fHwoYi5tdWx0aWxpbmU/dHJ1ZTpmYWxzZSk7aWYoYi5wcm9tcHQpe2lmKGIubXVsdGls aW5lKXtxLmhpZGUoKTthLnNob3coKTthLnNldEhlaWdodCh0eXBlb2YgYi5tdWx0aWxpbmU9PSJu dW1iZXIiP2IubXVsdGlsaW5lOnRoaXMuZGVmYXVsdFRleHRIZWlnaHQpO3Q9YX1lbHNle3Euc2hv dygpO2EuaGlkZSgpfX1lbHNle3EuaGlkZSgpO2EuaGlkZSgpfXQuZG9tLnZhbHVlPWIudmFsdWV8 fCIiO2lmKGIucHJvbXB0KXt6LmZvY3VzRWw9dH1lbHNle3ZhciB4PWIuYnV0dG9uczt2YXIgdz1u dWxsO2lmKHgmJngub2spe3c9cC5va31lbHNle2lmKHgmJngueWVzKXt3PXAueWVzfX1pZih3KXt6 LmZvY3VzRWw9d319aWYoYi5pY29uQ2xzKXt6LnNldEljb25DbGFzcyhiLmljb25DbHMpfXRoaXMu c2V0SWNvbihiLmljb24pO2lmKGIuY2xzKXt6LmVsLmFkZENsYXNzKGIuY2xzKX16LnByb3h5RHJh Zz1iLnByb3h5RHJhZz09PXRydWU7ei5tb2RhbD1iLm1vZGFsIT09ZmFsc2U7ei5tYXNrPWIubW9k YWwhPT1mYWxzZT9vOmZhbHNlO3oub24oInNob3ciLGZ1bmN0aW9uKCl7ei5rZXlNYXAuc2V0RGlz YWJsZWQodiE9PXRydWUpO3ouZG9MYXlvdXQoKTt0aGlzLnNldEljb24oYi5pY29uKTttPWooYi5i dXR0b25zKTtsLnNldFZpc2libGUoYi5wcm9ncmVzcz09PXRydWV8fGIud2FpdD09PXRydWUpO3Ro aXMudXBkYXRlUHJvZ3Jlc3MoMCxiLnByb2dyZXNzVGV4dCk7dGhpcy51cGRhdGVUZXh0KGIubXNn KTtpZihiLndhaXQ9PT10cnVlKXtsLndhaXQoYi53YWl0Q29uZmlnKX19LHRoaXMse3NpbmdsZTp0 cnVlfSk7aWYoIXouaXNWaXNpYmxlKCkpe2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocy5lbC5k b20pO3ouc2V0QW5pbWF0ZVRhcmdldChiLmFuaW1FbCk7ei5zaG93KGIuYW5pbUVsKX1yZXR1cm4g dGhpc30sc2V0SWNvbjpmdW5jdGlvbih2KXtpZih2JiZ2IT0iIil7aS5yZW1vdmVDbGFzcygieC1o aWRkZW4iKTtpLnJlcGxhY2VDbGFzcyhjLHYpO2guYWRkQ2xhc3MoIngtZGxnLWljb24iKTtjPXZ9 ZWxzZXtpLnJlcGxhY2VDbGFzcyhjLCJ4LWhpZGRlbiIpO2gucmVtb3ZlQ2xhc3MoIngtZGxnLWlj b24iKTtjPSIifXJldHVybiB0aGlzfSxwcm9ncmVzczpmdW5jdGlvbih4LHcsdil7dGhpcy5zaG93 KHt0aXRsZTp4LG1zZzp3LGJ1dHRvbnM6ZmFsc2UscHJvZ3Jlc3M6dHJ1ZSxjbG9zYWJsZTpmYWxz ZSxtaW5XaWR0aDp0aGlzLm1pblByb2dyZXNzV2lkdGgscHJvZ3Jlc3NUZXh0OnZ9KTtyZXR1cm4g dGhpc30sd2FpdDpmdW5jdGlvbih4LHcsdil7dGhpcy5zaG93KHt0aXRsZTp3LG1zZzp4LGJ1dHRv bnM6ZmFsc2UsY2xvc2FibGU6ZmFsc2Usd2FpdDp0cnVlLG1vZGFsOnRydWUsbWluV2lkdGg6dGhp cy5taW5Qcm9ncmVzc1dpZHRoLHdhaXRDb25maWc6dn0pO3JldHVybiB0aGlzfSxhbGVydDpmdW5j dGlvbih5LHgsdyx2KXt0aGlzLnNob3coe3RpdGxlOnksbXNnOngsYnV0dG9uczp0aGlzLk9LLGZu Oncsc2NvcGU6dn0pO3JldHVybiB0aGlzfSxjb25maXJtOmZ1bmN0aW9uKHkseCx3LHYpe3RoaXMu c2hvdyh7dGl0bGU6eSxtc2c6eCxidXR0b25zOnRoaXMuWUVTTk8sZm46dyxzY29wZTp2LGljb246 dGhpcy5RVUVTVElPTn0pO3JldHVybiB0aGlzfSxwcm9tcHQ6ZnVuY3Rpb24oQSx6LHgsdyx2LHkp e3RoaXMuc2hvdyh7dGl0bGU6QSxtc2c6eixidXR0b25zOnRoaXMuT0tDQU5DRUwsZm46eCxtaW5X aWR0aDoyNTAsc2NvcGU6dyxwcm9tcHQ6dHJ1ZSxtdWx0aWxpbmU6dix2YWx1ZTp5fSk7cmV0dXJu IHRoaXN9LE9LOntvazp0cnVlfSxDQU5DRUw6e2NhbmNlbDp0cnVlfSxPS0NBTkNFTDp7b2s6dHJ1 ZSxjYW5jZWw6dHJ1ZX0sWUVTTk86e3llczp0cnVlLG5vOnRydWV9LFlFU05PQ0FOQ0VMOnt5ZXM6 dHJ1ZSxubzp0cnVlLGNhbmNlbDp0cnVlfSxJTkZPOiJleHQtbWItaW5mbyIsV0FSTklORzoiZXh0 LW1iLXdhcm5pbmciLFFVRVNUSU9OOiJleHQtbWItcXVlc3Rpb24iLEVSUk9SOiJleHQtbWItZXJy b3IiLGRlZmF1bHRUZXh0SGVpZ2h0Ojc1LG1heFdpZHRoOjYwMCxtaW5XaWR0aDoxMTAsbWluUHJv Z3Jlc3NXaWR0aDoyNTAsYnV0dG9uVGV4dDp7b2s6Ik9LIixjYW5jZWw6IkNhbmNlbCIseWVzOiJZ ZXMiLG5vOiJObyJ9fX0oKTtFeHQuTXNnPUV4dC5NZXNzYWdlQm94O0V4dC5kZC5QYW5lbFByb3h5 PWZ1bmN0aW9uKGEsYil7dGhpcy5wYW5lbD1hO3RoaXMuaWQ9dGhpcy5wYW5lbC5pZCsiLWRkcHJv eHkiO0V4dC5hcHBseSh0aGlzLGIpfTtFeHQuZGQuUGFuZWxQcm94eS5wcm90b3R5cGU9e2luc2Vy dFByb3h5OnRydWUsc2V0U3RhdHVzOkV4dC5lbXB0eUZuLHJlc2V0OkV4dC5lbXB0eUZuLHVwZGF0 ZTpFeHQuZW1wdHlGbixzdG9wOkV4dC5lbXB0eUZuLHN5bmM6RXh0LmVtcHR5Rm4sZ2V0RWw6ZnVu Y3Rpb24oKXtyZXR1cm4gdGhpcy5naG9zdH0sZ2V0R2hvc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp cy5naG9zdH0sZ2V0UHJveHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm94eX0saGlkZTpmdW5j dGlvbigpe2lmKHRoaXMuZ2hvc3Qpe2lmKHRoaXMucHJveHkpe3RoaXMucHJveHkucmVtb3ZlKCk7 ZGVsZXRlIHRoaXMucHJveHl9dGhpcy5wYW5lbC5lbC5kb20uc3R5bGUuZGlzcGxheT0iIjt0aGlz Lmdob3N0LnJlbW92ZSgpO2RlbGV0ZSB0aGlzLmdob3N0fX0sc2hvdzpmdW5jdGlvbigpe2lmKCF0 aGlzLmdob3N0KXt0aGlzLmdob3N0PXRoaXMucGFuZWwuY3JlYXRlR2hvc3QodW5kZWZpbmVkLHVu ZGVmaW5lZCxFeHQuZ2V0Qm9keSgpKTt0aGlzLmdob3N0LnNldFhZKHRoaXMucGFuZWwuZWwuZ2V0 WFkoKSk7aWYodGhpcy5pbnNlcnRQcm94eSl7dGhpcy5wcm94eT10aGlzLnBhbmVsLmVsLmluc2Vy dFNpYmxpbmcoe2NsczoieC1wYW5lbC1kZC1zcGFjZXIifSk7dGhpcy5wcm94eS5zZXRTaXplKHRo aXMucGFuZWwuZ2V0U2l6ZSgpKX10aGlzLnBhbmVsLmVsLmRvbS5zdHlsZS5kaXNwbGF5PSJub25l In19LHJlcGFpcjpmdW5jdGlvbihiLGMsYSl7dGhpcy5oaWRlKCk7aWYodHlwZW9mIGM9PSJmdW5j dGlvbiIpe2MuY2FsbChhfHx0aGlzKX19LG1vdmVQcm94eTpmdW5jdGlvbihhLGIpe2lmKHRoaXMu cHJveHkpe2EuaW5zZXJ0QmVmb3JlKHRoaXMucHJveHkuZG9tLGIpfX19O0V4dC5QYW5lbC5ERD1m dW5jdGlvbihiLGEpe3RoaXMucGFuZWw9Yjt0aGlzLmRyYWdEYXRhPXtwYW5lbDpifTt0aGlzLnBy b3h5PW5ldyBFeHQuZGQuUGFuZWxQcm94eShiLGEpO0V4dC5QYW5lbC5ERC5zdXBlcmNsYXNzLmNv bnN0cnVjdG9yLmNhbGwodGhpcyxiLmVsLGEpO3ZhciBjPWIuaGVhZGVyO2lmKGMpe3RoaXMuc2V0 SGFuZGxlRWxJZChjLmlkKX0oYz9jOnRoaXMucGFuZWwuYm9keSkuc2V0U3R5bGUoImN1cnNvciIs Im1vdmUiKTt0aGlzLnNjcm9sbD1mYWxzZX07RXh0LmV4dGVuZChFeHQuUGFuZWwuREQsRXh0LmRk LkRyYWdTb3VyY2Use3Nob3dGcmFtZTpFeHQuZW1wdHlGbixzdGFydERyYWc6RXh0LmVtcHR5Rm4s YjRTdGFydERyYWc6ZnVuY3Rpb24oYSxiKXt0aGlzLnByb3h5LnNob3coKX0sYjRNb3VzZURvd246 ZnVuY3Rpb24oYil7dmFyIGE9Yi5nZXRQYWdlWCgpO3ZhciBjPWIuZ2V0UGFnZVkoKTt0aGlzLmF1 dG9PZmZzZXQoYSxjKX0sb25Jbml0RHJhZzpmdW5jdGlvbihhLGIpe3RoaXMub25TdGFydERyYWco YSxiKTtyZXR1cm4gdHJ1ZX0sY3JlYXRlRnJhbWU6RXh0LmVtcHR5Rm4sZ2V0RHJhZ0VsOmZ1bmN0 aW9uKGEpe3JldHVybiB0aGlzLnByb3h5Lmdob3N0LmRvbX0sZW5kRHJhZzpmdW5jdGlvbihhKXt0 aGlzLnByb3h5LmhpZGUoKTt0aGlzLnBhbmVsLnNhdmVTdGF0ZSgpfSxhdXRvT2Zmc2V0OmZ1bmN0 aW9uKGEsYil7YS09dGhpcy5zdGFydFBhZ2VYO2ItPXRoaXMuc3RhcnRQYWdlWTt0aGlzLnNldERl bHRhKGEsYil9fSk7RXh0LnN0YXRlLlByb3ZpZGVyPWZ1bmN0aW9uKCl7dGhpcy5hZGRFdmVudHMo InN0YXRlY2hhbmdlIik7dGhpcy5zdGF0ZT17fTtFeHQuc3RhdGUuUHJvdmlkZXIuc3VwZXJjbGFz cy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpfTtFeHQuZXh0ZW5kKEV4dC5zdGF0ZS5Qcm92aWRlcixF eHQudXRpbC5PYnNlcnZhYmxlLHtnZXQ6ZnVuY3Rpb24oYixhKXtyZXR1cm4gdHlwZW9mIHRoaXMu c3RhdGVbYl09PSJ1bmRlZmluZWQiP2E6dGhpcy5zdGF0ZVtiXX0sY2xlYXI6ZnVuY3Rpb24oYSl7 ZGVsZXRlIHRoaXMuc3RhdGVbYV07dGhpcy5maXJlRXZlbnQoInN0YXRlY2hhbmdlIix0aGlzLGEs bnVsbCl9LHNldDpmdW5jdGlvbihhLGIpe3RoaXMuc3RhdGVbYV09Yjt0aGlzLmZpcmVFdmVudCgi c3RhdGVjaGFuZ2UiLHRoaXMsYSxiKX0sZGVjb2RlVmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGw9L14o YXxufGR8YnxzfG8pXDooLiopJC87dmFyIGM9bC5leGVjKHVuZXNjYXBlKGEpKTtpZighY3x8IWNb MV0pe3JldHVybn12YXIgZz1jWzFdO3ZhciBqPWNbMl07c3dpdGNoKGcpe2Nhc2UibiI6cmV0dXJu IHBhcnNlRmxvYXQoaik7Y2FzZSJkIjpyZXR1cm4gbmV3IERhdGUoRGF0ZS5wYXJzZShqKSk7Y2Fz ZSJiIjpyZXR1cm4oaj09IjEiKTtjYXNlImEiOnZhciBoPVtdO3ZhciBrPWouc3BsaXQoIl4iKTtm b3IodmFyIGI9MCxkPWsubGVuZ3RoO2I8ZDtiKyspe2gucHVzaCh0aGlzLmRlY29kZVZhbHVlKGtb Yl0pKX1yZXR1cm4gaDtjYXNlIm8iOnZhciBoPXt9O3ZhciBrPWouc3BsaXQoIl4iKTtmb3IodmFy IGI9MCxkPWsubGVuZ3RoO2I8ZDtiKyspe3ZhciBlPWtbYl0uc3BsaXQoIj0iKTtoW2VbMF1dPXRo aXMuZGVjb2RlVmFsdWUoZVsxXSl9cmV0dXJuIGg7ZGVmYXVsdDpyZXR1cm4gan19LGVuY29kZVZh bHVlOmZ1bmN0aW9uKGMpe3ZhciBiO2lmKHR5cGVvZiBjPT0ibnVtYmVyIil7Yj0ibjoiK2N9ZWxz ZXtpZih0eXBlb2YgYz09ImJvb2xlYW4iKXtiPSJiOiIrKGM/IjEiOiIwIil9ZWxzZXtpZihFeHQu aXNEYXRlKGMpKXtiPSJkOiIrYy50b0dNVFN0cmluZygpfWVsc2V7aWYoRXh0LmlzQXJyYXkoYykp e3ZhciBnPSIiO2Zvcih2YXIgZT0wLGE9Yy5sZW5ndGg7ZTxhO2UrKyl7Zys9dGhpcy5lbmNvZGVW YWx1ZShjW2VdKTtpZihlIT1hLTEpe2crPSJeIn19Yj0iYToiK2d9ZWxzZXtpZih0eXBlb2YgYz09 Im9iamVjdCIpe3ZhciBnPSIiO2Zvcih2YXIgZCBpbiBjKXtpZih0eXBlb2YgY1tkXSE9ImZ1bmN0 aW9uIiYmY1tkXSE9PXVuZGVmaW5lZCl7Zys9ZCsiPSIrdGhpcy5lbmNvZGVWYWx1ZShjW2RdKSsi XiJ9fWI9Im86IitnLnN1YnN0cmluZygwLGcubGVuZ3RoLTEpfWVsc2V7Yj0iczoiK2N9fX19fXJl dHVybiBlc2NhcGUoYil9fSk7RXh0LnN0YXRlLk1hbmFnZXI9ZnVuY3Rpb24oKXt2YXIgYT1uZXcg RXh0LnN0YXRlLlByb3ZpZGVyKCk7cmV0dXJue3NldFByb3ZpZGVyOmZ1bmN0aW9uKGIpe2E9Yn0s Z2V0OmZ1bmN0aW9uKGMsYil7cmV0dXJuIGEuZ2V0KGMsYil9LHNldDpmdW5jdGlvbihiLGMpe2Eu c2V0KGIsYyl9LGNsZWFyOmZ1bmN0aW9uKGIpe2EuY2xlYXIoYil9LGdldFByb3ZpZGVyOmZ1bmN0 aW9uKCl7cmV0dXJuIGF9fX0oKTtFeHQuc3RhdGUuQ29va2llUHJvdmlkZXI9ZnVuY3Rpb24oYSl7 RXh0LnN0YXRlLkNvb2tpZVByb3ZpZGVyLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlz KTt0aGlzLnBhdGg9Ii8iO3RoaXMuZXhwaXJlcz1uZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUo KSsoMTAwMCo2MCo2MCoyNCo3KSk7dGhpcy5kb21haW49bnVsbDt0aGlzLnNlY3VyZT1mYWxzZTtF eHQuYXBwbHkodGhpcyxhKTt0aGlzLnN0YXRlPXRoaXMucmVhZENvb2tpZXMoKX07RXh0LmV4dGVu ZChFeHQuc3RhdGUuQ29va2llUHJvdmlkZXIsRXh0LnN0YXRlLlByb3ZpZGVyLHtzZXQ6ZnVuY3Rp b24oYSxiKXtpZih0eXBlb2YgYj09InVuZGVmaW5lZCJ8fGI9PT1udWxsKXt0aGlzLmNsZWFyKGEp O3JldHVybn10aGlzLnNldENvb2tpZShhLGIpO0V4dC5zdGF0ZS5Db29raWVQcm92aWRlci5zdXBl cmNsYXNzLnNldC5jYWxsKHRoaXMsYSxiKX0sY2xlYXI6ZnVuY3Rpb24oYSl7dGhpcy5jbGVhckNv b2tpZShhKTtFeHQuc3RhdGUuQ29va2llUHJvdmlkZXIuc3VwZXJjbGFzcy5jbGVhci5jYWxsKHRo aXMsYSl9LHJlYWRDb29raWVzOmZ1bmN0aW9uKCl7dmFyIGQ9e307dmFyIGg9ZG9jdW1lbnQuY29v a2llKyI7Ijt2YXIgYj0vXHM/KC4qPyk9KC4qPyk7L2c7dmFyIGc7d2hpbGUoKGc9Yi5leGVjKGgp KSE9bnVsbCl7dmFyIGE9Z1sxXTt2YXIgZT1nWzJdO2lmKGEmJmEuc3Vic3RyaW5nKDAsMyk9PSJ5 cy0iKXtkW2Euc3Vic3RyKDMpXT10aGlzLmRlY29kZVZhbHVlKGUpfX1yZXR1cm4gZH0sc2V0Q29v a2llOmZ1bmN0aW9uKGEsYil7ZG9jdW1lbnQuY29va2llPSJ5cy0iK2ErIj0iK3RoaXMuZW5jb2Rl VmFsdWUoYikrKCh0aGlzLmV4cGlyZXM9PW51bGwpPyIiOigiOyBleHBpcmVzPSIrdGhpcy5leHBp cmVzLnRvR01UU3RyaW5nKCkpKSsoKHRoaXMucGF0aD09bnVsbCk/IiI6KCI7IHBhdGg9Iit0aGlz LnBhdGgpKSsoKHRoaXMuZG9tYWluPT1udWxsKT8iIjooIjsgZG9tYWluPSIrdGhpcy5kb21haW4p KSsoKHRoaXMuc2VjdXJlPT10cnVlKT8iOyBzZWN1cmUiOiIiKX0sY2xlYXJDb29raWU6ZnVuY3Rp b24oYSl7ZG9jdW1lbnQuY29va2llPSJ5cy0iK2ErIj1udWxsOyBleHBpcmVzPVRodSwgMDEtSmFu LTcwIDAwOjAwOjAxIEdNVCIrKCh0aGlzLnBhdGg9PW51bGwpPyIiOigiOyBwYXRoPSIrdGhpcy5w YXRoKSkrKCh0aGlzLmRvbWFpbj09bnVsbCk/IiI6KCI7IGRvbWFpbj0iK3RoaXMuZG9tYWluKSkr KCh0aGlzLnNlY3VyZT09dHJ1ZSk/Ijsgc2VjdXJlIjoiIil9fSk7RXh0LkRhdGFWaWV3PUV4dC5l eHRlbmQoRXh0LkJveENvbXBvbmVudCx7c2VsZWN0ZWRDbGFzczoieC12aWV3LXNlbGVjdGVkIixl bXB0eVRleHQ6IiIsZGVmZXJFbXB0eVRleHQ6dHJ1ZSx0cmFja092ZXI6ZmFsc2UsbGFzdDpmYWxz ZSxpbml0Q29tcG9uZW50OmZ1bmN0aW9uKCl7RXh0LkRhdGFWaWV3LnN1cGVyY2xhc3MuaW5pdENv bXBvbmVudC5jYWxsKHRoaXMpO2lmKEV4dC5pc1N0cmluZyh0aGlzLnRwbCl8fEV4dC5pc0FycmF5 KHRoaXMudHBsKSl7dGhpcy50cGw9bmV3IEV4dC5YVGVtcGxhdGUodGhpcy50cGwpfXRoaXMuYWRk RXZlbnRzKCJiZWZvcmVjbGljayIsImNsaWNrIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJj b250YWluZXJjbGljayIsImRibGNsaWNrIiwiY29udGV4dG1lbnUiLCJjb250YWluZXJjb250ZXh0 bWVudSIsInNlbGVjdGlvbmNoYW5nZSIsImJlZm9yZXNlbGVjdCIpO3RoaXMuc3RvcmU9RXh0LlN0 b3JlTWdyLmxvb2t1cCh0aGlzLnN0b3JlKTt0aGlzLmFsbD1uZXcgRXh0LkNvbXBvc2l0ZUVsZW1l bnRMaXRlKCk7dGhpcy5zZWxlY3RlZD1uZXcgRXh0LkNvbXBvc2l0ZUVsZW1lbnRMaXRlKCl9LGFm dGVyUmVuZGVyOmZ1bmN0aW9uKCl7RXh0LkRhdGFWaWV3LnN1cGVyY2xhc3MuYWZ0ZXJSZW5kZXIu Y2FsbCh0aGlzKTt0aGlzLm1vbih0aGlzLmdldFRlbXBsYXRlVGFyZ2V0KCkse2NsaWNrOnRoaXMu b25DbGljayxkYmxjbGljazp0aGlzLm9uRGJsQ2xpY2ssY29udGV4dG1lbnU6dGhpcy5vbkNvbnRl eHRNZW51LHNjb3BlOnRoaXN9KTtpZih0aGlzLm92ZXJDbGFzc3x8dGhpcy50cmFja092ZXIpe3Ro aXMubW9uKHRoaXMuZ2V0VGVtcGxhdGVUYXJnZXQoKSx7bW91c2VvdmVyOnRoaXMub25Nb3VzZU92 ZXIsbW91c2VvdXQ6dGhpcy5vbk1vdXNlT3V0LHNjb3BlOnRoaXN9KX1pZih0aGlzLnN0b3JlKXt0 aGlzLmJpbmRTdG9yZSh0aGlzLnN0b3JlLHRydWUpfX0scmVmcmVzaDpmdW5jdGlvbigpe3RoaXMu Y2xlYXJTZWxlY3Rpb25zKGZhbHNlLHRydWUpO3ZhciBiPXRoaXMuZ2V0VGVtcGxhdGVUYXJnZXQo KTtiLnVwZGF0ZSgiIik7dmFyIGE9dGhpcy5zdG9yZS5nZXRSYW5nZSgpO2lmKGEubGVuZ3RoPDEp e2lmKCF0aGlzLmRlZmVyRW1wdHlUZXh0fHx0aGlzLmhhc1NraXBwZWRFbXB0eVRleHQpe2IudXBk YXRlKHRoaXMuZW1wdHlUZXh0KX10aGlzLmFsbC5jbGVhcigpfWVsc2V7dGhpcy50cGwub3Zlcndy aXRlKGIsdGhpcy5jb2xsZWN0RGF0YShhLDApKTt0aGlzLmFsbC5maWxsKEV4dC5xdWVyeSh0aGlz Lml0ZW1TZWxlY3RvcixiLmRvbSkpO3RoaXMudXBkYXRlSW5kZXhlcygwKX10aGlzLmhhc1NraXBw ZWRFbXB0eVRleHQ9dHJ1ZX0sZ2V0VGVtcGxhdGVUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp cy5lbH0scHJlcGFyZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LGNvbGxlY3REYXRhOmZ1bmN0 aW9uKGIsZSl7dmFyIGQ9W107Zm9yKHZhciBjPTAsYT1iLmxlbmd0aDtjPGE7YysrKXtkW2QubGVu Z3RoXT10aGlzLnByZXBhcmVEYXRhKGJbY10uZGF0YSxlK2MsYltjXSl9cmV0dXJuIGR9LGJ1ZmZl clJlbmRlcjpmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0 aGlzLnRwbC5vdmVyd3JpdGUoYix0aGlzLmNvbGxlY3REYXRhKGEpKTtyZXR1cm4gRXh0LnF1ZXJ5 KHRoaXMuaXRlbVNlbGVjdG9yLGIpfSxvblVwZGF0ZTpmdW5jdGlvbihnLGEpe3ZhciBiPXRoaXMu c3RvcmUuaW5kZXhPZihhKTt2YXIgZT10aGlzLmlzU2VsZWN0ZWQoYik7dmFyIGM9dGhpcy5hbGwu ZWxlbWVudHNbYl07dmFyIGQ9dGhpcy5idWZmZXJSZW5kZXIoW2FdLGIpWzBdO3RoaXMuYWxsLnJl cGxhY2VFbGVtZW50KGIsZCx0cnVlKTtpZihlKXt0aGlzLnNlbGVjdGVkLnJlcGxhY2VFbGVtZW50 KGMsZCk7dGhpcy5hbGwuaXRlbShiKS5hZGRDbGFzcyh0aGlzLnNlbGVjdGVkQ2xhc3MpfXRoaXMu dXBkYXRlSW5kZXhlcyhiLGIpfSxvbkFkZDpmdW5jdGlvbihnLGQsZSl7aWYodGhpcy5hbGwuZ2V0 Q291bnQoKT09PTApe3RoaXMucmVmcmVzaCgpO3JldHVybn12YXIgYz10aGlzLmJ1ZmZlclJlbmRl cihkLGUpLGgsYj10aGlzLmFsbC5lbGVtZW50cztpZihlPHRoaXMuYWxsLmdldENvdW50KCkpe2g9 dGhpcy5hbGwuaXRlbShlKS5pbnNlcnRTaWJsaW5nKGMsImJlZm9yZSIsdHJ1ZSk7Yi5zcGxpY2Uu YXBwbHkoYixbZSwwXS5jb25jYXQoYykpfWVsc2V7aD10aGlzLmFsbC5sYXN0KCkuaW5zZXJ0U2li bGluZyhjLCJhZnRlciIsdHJ1ZSk7Yi5wdXNoLmFwcGx5KGIsYyl9dGhpcy51cGRhdGVJbmRleGVz KGUpfSxvblJlbW92ZTpmdW5jdGlvbihjLGEsYil7dGhpcy5kZXNlbGVjdChiKTt0aGlzLmFsbC5y ZW1vdmVFbGVtZW50KGIsdHJ1ZSk7dGhpcy51cGRhdGVJbmRleGVzKGIpO2lmKHRoaXMuc3RvcmUu Z2V0Q291bnQoKT09PTApe3RoaXMucmVmcmVzaCgpfX0scmVmcmVzaE5vZGU6ZnVuY3Rpb24oYSl7 dGhpcy5vblVwZGF0ZSh0aGlzLnN0b3JlLHRoaXMuc3RvcmUuZ2V0QXQoYSkpfSx1cGRhdGVJbmRl eGVzOmZ1bmN0aW9uKGQsYyl7dmFyIGI9dGhpcy5hbGwuZWxlbWVudHM7ZD1kfHwwO2M9Y3x8KChj PT09MCk/MDooYi5sZW5ndGgtMSkpO2Zvcih2YXIgYT1kO2E8PWM7YSsrKXtiW2FdLnZpZXdJbmRl eD1hfX0sZ2V0U3RvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9yZX0sYmluZFN0b3JlOmZ1 bmN0aW9uKGEsYil7aWYoIWImJnRoaXMuc3RvcmUpe3RoaXMuc3RvcmUudW4oImJlZm9yZWxvYWQi LHRoaXMub25CZWZvcmVMb2FkLHRoaXMpO3RoaXMuc3RvcmUudW4oImRhdGFjaGFuZ2VkIix0aGlz LnJlZnJlc2gsdGhpcyk7dGhpcy5zdG9yZS51bigiYWRkIix0aGlzLm9uQWRkLHRoaXMpO3RoaXMu c3RvcmUudW4oInJlbW92ZSIsdGhpcy5vblJlbW92ZSx0aGlzKTt0aGlzLnN0b3JlLnVuKCJ1cGRh dGUiLHRoaXMub25VcGRhdGUsdGhpcyk7dGhpcy5zdG9yZS51bigiY2xlYXIiLHRoaXMucmVmcmVz aCx0aGlzKTtpZihhIT09dGhpcy5zdG9yZSYmdGhpcy5zdG9yZS5hdXRvRGVzdHJveSl7dGhpcy5z dG9yZS5kZXN0cm95KCl9fWlmKGEpe2E9RXh0LlN0b3JlTWdyLmxvb2t1cChhKTthLm9uKHtzY29w ZTp0aGlzLGJlZm9yZWxvYWQ6dGhpcy5vbkJlZm9yZUxvYWQsZGF0YWNoYW5nZWQ6dGhpcy5yZWZy ZXNoLGFkZDp0aGlzLm9uQWRkLHJlbW92ZTp0aGlzLm9uUmVtb3ZlLHVwZGF0ZTp0aGlzLm9uVXBk YXRlLGNsZWFyOnRoaXMucmVmcmVzaH0pfXRoaXMuc3RvcmU9YTtpZihhKXt0aGlzLnJlZnJlc2go KX19LGZpbmRJdGVtRnJvbUNoaWxkOmZ1bmN0aW9uKGEpe3JldHVybiBFeHQuZmx5KGEpLmZpbmRQ YXJlbnQodGhpcy5pdGVtU2VsZWN0b3IsdGhpcy5nZXRUZW1wbGF0ZVRhcmdldCgpKX0sb25DbGlj azpmdW5jdGlvbihjKXt2YXIgYj1jLmdldFRhcmdldCh0aGlzLml0ZW1TZWxlY3Rvcix0aGlzLmdl dFRlbXBsYXRlVGFyZ2V0KCkpO2lmKGIpe3ZhciBhPXRoaXMuaW5kZXhPZihiKTtpZih0aGlzLm9u SXRlbUNsaWNrKGIsYSxjKSE9PWZhbHNlKXt0aGlzLmZpcmVFdmVudCgiY2xpY2siLHRoaXMsYSxi LGMpfX1lbHNle2lmKHRoaXMuZmlyZUV2ZW50KCJjb250YWluZXJjbGljayIsdGhpcyxjKSE9PWZh bHNlKXt0aGlzLm9uQ29udGFpbmVyQ2xpY2soYyl9fX0sb25Db250YWluZXJDbGljazpmdW5jdGlv bihhKXt0aGlzLmNsZWFyU2VsZWN0aW9ucygpfSxvbkNvbnRleHRNZW51OmZ1bmN0aW9uKGIpe3Zh ciBhPWIuZ2V0VGFyZ2V0KHRoaXMuaXRlbVNlbGVjdG9yLHRoaXMuZ2V0VGVtcGxhdGVUYXJnZXQo KSk7aWYoYSl7dGhpcy5maXJlRXZlbnQoImNvbnRleHRtZW51Iix0aGlzLHRoaXMuaW5kZXhPZihh KSxhLGIpfWVsc2V7dGhpcy5maXJlRXZlbnQoImNvbnRhaW5lcmNvbnRleHRtZW51Iix0aGlzLGIp fX0sb25EYmxDbGljazpmdW5jdGlvbihiKXt2YXIgYT1iLmdldFRhcmdldCh0aGlzLml0ZW1TZWxl Y3Rvcix0aGlzLmdldFRlbXBsYXRlVGFyZ2V0KCkpO2lmKGEpe3RoaXMuZmlyZUV2ZW50KCJkYmxj bGljayIsdGhpcyx0aGlzLmluZGV4T2YoYSksYSxiKX19LG9uTW91c2VPdmVyOmZ1bmN0aW9uKGIp e3ZhciBhPWIuZ2V0VGFyZ2V0KHRoaXMuaXRlbVNlbGVjdG9yLHRoaXMuZ2V0VGVtcGxhdGVUYXJn ZXQoKSk7aWYoYSYmYSE9PXRoaXMubGFzdEl0ZW0pe3RoaXMubGFzdEl0ZW09YTtFeHQuZmx5KGEp LmFkZENsYXNzKHRoaXMub3ZlckNsYXNzKTt0aGlzLmZpcmVFdmVudCgibW91c2VlbnRlciIsdGhp cyx0aGlzLmluZGV4T2YoYSksYSxiKX19LG9uTW91c2VPdXQ6ZnVuY3Rpb24oYSl7aWYodGhpcy5s YXN0SXRlbSl7aWYoIWEud2l0aGluKHRoaXMubGFzdEl0ZW0sdHJ1ZSx0cnVlKSl7RXh0LmZseSh0 aGlzLmxhc3RJdGVtKS5yZW1vdmVDbGFzcyh0aGlzLm92ZXJDbGFzcyk7dGhpcy5maXJlRXZlbnQo Im1vdXNlbGVhdmUiLHRoaXMsdGhpcy5pbmRleE9mKHRoaXMubGFzdEl0ZW0pLHRoaXMubGFzdEl0 ZW0sYSk7ZGVsZXRlIHRoaXMubGFzdEl0ZW19fX0sb25JdGVtQ2xpY2s6ZnVuY3Rpb24oYixhLGMp e2lmKHRoaXMuZmlyZUV2ZW50KCJiZWZvcmVjbGljayIsdGhpcyxhLGIsYyk9PT1mYWxzZSl7cmV0 dXJuIGZhbHNlfWlmKHRoaXMubXVsdGlTZWxlY3Qpe3RoaXMuZG9NdWx0aVNlbGVjdGlvbihiLGEs Yyk7Yy5wcmV2ZW50RGVmYXVsdCgpfWVsc2V7aWYodGhpcy5zaW5nbGVTZWxlY3Qpe3RoaXMuZG9T aW5nbGVTZWxlY3Rpb24oYixhLGMpO2MucHJldmVudERlZmF1bHQoKX19cmV0dXJuIHRydWV9LGRv U2luZ2xlU2VsZWN0aW9uOmZ1bmN0aW9uKGIsYSxjKXtpZihjLmN0cmxLZXkmJnRoaXMuaXNTZWxl Y3RlZChhKSl7dGhpcy5kZXNlbGVjdChhKX1lbHNle3RoaXMuc2VsZWN0KGEsZmFsc2UpfX0sZG9N dWx0aVNlbGVjdGlvbjpmdW5jdGlvbihjLGEsZCl7aWYoZC5zaGlmdEtleSYmdGhpcy5sYXN0IT09 ZmFsc2Upe3ZhciBiPXRoaXMubGFzdDt0aGlzLnNlbGVjdFJhbmdlKGIsYSxkLmN0cmxLZXkpO3Ro aXMubGFzdD1ifWVsc2V7aWYoKGQuY3RybEtleXx8dGhpcy5zaW1wbGVTZWxlY3QpJiZ0aGlzLmlz U2VsZWN0ZWQoYSkpe3RoaXMuZGVzZWxlY3QoYSl9ZWxzZXt0aGlzLnNlbGVjdChhLGQuY3RybEtl eXx8ZC5zaGlmdEtleXx8dGhpcy5zaW1wbGVTZWxlY3QpfX19LGdldFNlbGVjdGlvbkNvdW50OmZ1 bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWQuZ2V0Q291bnQoKX0sZ2V0U2VsZWN0ZWROb2Rl czpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkLmVsZW1lbnRzfSxnZXRTZWxlY3RlZElu ZGV4ZXM6ZnVuY3Rpb24oKXt2YXIgYj1bXSxkPXRoaXMuc2VsZWN0ZWQuZWxlbWVudHM7Zm9yKHZh ciBjPTAsYT1kLmxlbmd0aDtjPGE7YysrKXtiLnB1c2goZFtjXS52aWV3SW5kZXgpfXJldHVybiBi fSxnZXRTZWxlY3RlZFJlY29yZHM6ZnVuY3Rpb24oKXt2YXIgZD1bXSxjPXRoaXMuc2VsZWN0ZWQu ZWxlbWVudHM7Zm9yKHZhciBiPTAsYT1jLmxlbmd0aDtiPGE7YisrKXtkW2QubGVuZ3RoXT10aGlz LnN0b3JlLmdldEF0KGNbYl0udmlld0luZGV4KX1yZXR1cm4gZH0sZ2V0UmVjb3JkczpmdW5jdGlv bihiKXt2YXIgZT1bXSxkPWI7Zm9yKHZhciBjPTAsYT1kLmxlbmd0aDtjPGE7YysrKXtlW2UubGVu Z3RoXT10aGlzLnN0b3JlLmdldEF0KGRbY10udmlld0luZGV4KX1yZXR1cm4gZX0sZ2V0UmVjb3Jk OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnN0b3JlLmdldEF0KGEudmlld0luZGV4KX0sY2xlYXJT ZWxlY3Rpb25zOmZ1bmN0aW9uKGEsYil7aWYoKHRoaXMubXVsdGlTZWxlY3R8fHRoaXMuc2luZ2xl U2VsZWN0KSYmdGhpcy5zZWxlY3RlZC5nZXRDb3VudCgpPjApe2lmKCFiKXt0aGlzLnNlbGVjdGVk LnJlbW92ZUNsYXNzKHRoaXMuc2VsZWN0ZWRDbGFzcyl9dGhpcy5zZWxlY3RlZC5jbGVhcigpO3Ro aXMubGFzdD1mYWxzZTtpZighYSl7dGhpcy5maXJlRXZlbnQoInNlbGVjdGlvbmNoYW5nZSIsdGhp cyx0aGlzLnNlbGVjdGVkLmVsZW1lbnRzKX19fSxpc1NlbGVjdGVkOmZ1bmN0aW9uKGEpe3JldHVy biB0aGlzLnNlbGVjdGVkLmNvbnRhaW5zKHRoaXMuZ2V0Tm9kZShhKSl9LGRlc2VsZWN0OmZ1bmN0 aW9uKGEpe2lmKHRoaXMuaXNTZWxlY3RlZChhKSl7YT10aGlzLmdldE5vZGUoYSk7dGhpcy5zZWxl Y3RlZC5yZW1vdmVFbGVtZW50KGEpO2lmKHRoaXMubGFzdD09YS52aWV3SW5kZXgpe3RoaXMubGFz dD1mYWxzZX1FeHQuZmx5KGEpLnJlbW92ZUNsYXNzKHRoaXMuc2VsZWN0ZWRDbGFzcyk7dGhpcy5m aXJlRXZlbnQoInNlbGVjdGlvbmNoYW5nZSIsdGhpcyx0aGlzLnNlbGVjdGVkLmVsZW1lbnRzKX19 LHNlbGVjdDpmdW5jdGlvbihkLGcsYil7aWYoRXh0LmlzQXJyYXkoZCkpe2lmKCFnKXt0aGlzLmNs ZWFyU2VsZWN0aW9ucyh0cnVlKX1mb3IodmFyIGM9MCxhPWQubGVuZ3RoO2M8YTtjKyspe3RoaXMu c2VsZWN0KGRbY10sdHJ1ZSx0cnVlKX1pZighYil7dGhpcy5maXJlRXZlbnQoInNlbGVjdGlvbmNo YW5nZSIsdGhpcyx0aGlzLnNlbGVjdGVkLmVsZW1lbnRzKX19ZWxzZXt2YXIgZT10aGlzLmdldE5v ZGUoZCk7aWYoIWcpe3RoaXMuY2xlYXJTZWxlY3Rpb25zKHRydWUpfWlmKGUmJiF0aGlzLmlzU2Vs ZWN0ZWQoZSkpe2lmKHRoaXMuZmlyZUV2ZW50KCJiZWZvcmVzZWxlY3QiLHRoaXMsZSx0aGlzLnNl bGVjdGVkLmVsZW1lbnRzKSE9PWZhbHNlKXtFeHQuZmx5KGUpLmFkZENsYXNzKHRoaXMuc2VsZWN0 ZWRDbGFzcyk7dGhpcy5zZWxlY3RlZC5hZGQoZSk7dGhpcy5sYXN0PWUudmlld0luZGV4O2lmKCFi KXt0aGlzLmZpcmVFdmVudCgic2VsZWN0aW9uY2hhbmdlIix0aGlzLHRoaXMuc2VsZWN0ZWQuZWxl bWVudHMpfX19fX0sc2VsZWN0UmFuZ2U6ZnVuY3Rpb24oYyxhLGIpe2lmKCFiKXt0aGlzLmNsZWFy U2VsZWN0aW9ucyh0cnVlKX10aGlzLnNlbGVjdCh0aGlzLmdldE5vZGVzKGMsYSksdHJ1ZSl9LGdl dE5vZGU6ZnVuY3Rpb24oYSl7aWYoRXh0LmlzU3RyaW5nKGEpKXtyZXR1cm4gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoYSl9ZWxzZXtpZihFeHQuaXNOdW1iZXIoYSkpe3JldHVybiB0aGlzLmFsbC5l bGVtZW50c1thXX19cmV0dXJuIGF9LGdldE5vZGVzOmZ1bmN0aW9uKGUsYSl7dmFyIGQ9dGhpcy5h bGwuZWxlbWVudHM7ZT1lfHwwO2E9IUV4dC5pc0RlZmluZWQoYSk/TWF0aC5tYXgoZC5sZW5ndGgt MSwwKTphO3ZhciBiPVtdLGM7aWYoZTw9YSl7Zm9yKGM9ZTtjPD1hJiZkW2NdO2MrKyl7Yi5wdXNo KGRbY10pfX1lbHNle2ZvcihjPWU7Yz49YSYmZFtjXTtjLS0pe2IucHVzaChkW2NdKX19cmV0dXJu IGJ9LGluZGV4T2Y6ZnVuY3Rpb24oYSl7YT10aGlzLmdldE5vZGUoYSk7aWYoRXh0LmlzTnVtYmVy KGEudmlld0luZGV4KSl7cmV0dXJuIGEudmlld0luZGV4fXJldHVybiB0aGlzLmFsbC5pbmRleE9m KGEpfSxvbkJlZm9yZUxvYWQ6ZnVuY3Rpb24oKXtpZih0aGlzLmxvYWRpbmdUZXh0KXt0aGlzLmNs ZWFyU2VsZWN0aW9ucyhmYWxzZSx0cnVlKTt0aGlzLmdldFRlbXBsYXRlVGFyZ2V0KCkudXBkYXRl KCc8ZGl2IGNsYXNzPSJsb2FkaW5nLWluZGljYXRvciI+Jyt0aGlzLmxvYWRpbmdUZXh0KyI8L2Rp dj4iKTt0aGlzLmFsbC5jbGVhcigpfX0sb25EZXN0cm95OmZ1bmN0aW9uKCl7RXh0LkRhdGFWaWV3 LnN1cGVyY2xhc3Mub25EZXN0cm95LmNhbGwodGhpcyk7dGhpcy5iaW5kU3RvcmUobnVsbCl9fSk7 RXh0LkRhdGFWaWV3LnByb3RvdHlwZS5zZXRTdG9yZT1FeHQuRGF0YVZpZXcucHJvdG90eXBlLmJp bmRTdG9yZTtFeHQucmVnKCJkYXRhdmlldyIsRXh0LkRhdGFWaWV3KTtFeHQuTGlzdFZpZXc9RXh0 LmV4dGVuZChFeHQuRGF0YVZpZXcse2l0ZW1TZWxlY3RvcjoiZGwiLHNlbGVjdGVkQ2xhc3M6Ingt bGlzdC1zZWxlY3RlZCIsb3ZlckNsYXNzOiJ4LWxpc3Qtb3ZlciIsc2Nyb2xsT2Zmc2V0OjE5LGNv bHVtblJlc2l6ZTp0cnVlLGNvbHVtblNvcnQ6dHJ1ZSxpbml0Q29tcG9uZW50OmZ1bmN0aW9uKCl7 aWYodGhpcy5jb2x1bW5SZXNpemUpe3RoaXMuY29sUmVzaXplcj1uZXcgRXh0Lkxpc3RWaWV3LkNv bHVtblJlc2l6ZXIodGhpcy5jb2xSZXNpemVyKTt0aGlzLmNvbFJlc2l6ZXIuaW5pdCh0aGlzKX1p Zih0aGlzLmNvbHVtblNvcnQpe3RoaXMuY29sU29ydGVyPW5ldyBFeHQuTGlzdFZpZXcuU29ydGVy KHRoaXMuY29sdW1uU29ydCk7dGhpcy5jb2xTb3J0ZXIuaW5pdCh0aGlzKX1pZighdGhpcy5pbnRl cm5hbFRwbCl7dGhpcy5pbnRlcm5hbFRwbD1uZXcgRXh0LlhUZW1wbGF0ZSgnPGRpdiBjbGFzcz0i eC1saXN0LWhlYWRlciI+PGRpdiBjbGFzcz0ieC1saXN0LWhlYWRlci1pbm5lciI+JywnPHRwbCBm b3I9ImNvbHVtbnMiPicsJzxkaXYgc3R5bGU9IndpZHRoOnt3aWR0aH0lO3RleHQtYWxpZ246e2Fs aWdufTsiPjxlbSB1bnNlbGVjdGFibGU9Im9uIiBpZD0iJyx0aGlzLmlkLCcteGxoZC17I30iPics IntoZWFkZXJ9IiwiPC9lbT48L2Rpdj4iLCI8L3RwbD4iLCc8ZGl2IGNsYXNzPSJ4LWNsZWFyIj48 L2Rpdj4nLCI8L2Rpdj48L2Rpdj4iLCc8ZGl2IGNsYXNzPSJ4LWxpc3QtYm9keSI+PGRpdiBjbGFz cz0ieC1saXN0LWJvZHktaW5uZXIiPicsIjwvZGl2PjwvZGl2PiIpfWlmKCF0aGlzLnRwbCl7dGhp cy50cGw9bmV3IEV4dC5YVGVtcGxhdGUoJzx0cGwgZm9yPSJyb3dzIj4nLCI8ZGw+IiwnPHRwbCBm b3I9InBhcmVudC5jb2x1bW5zIj4nLCc8ZHQgc3R5bGU9IndpZHRoOnt3aWR0aH0lO3RleHQtYWxp Z246e2FsaWdufTsiPjxlbSB1bnNlbGVjdGFibGU9Im9uIj4nLCJ7W3ZhbHVlcy50cGwuYXBwbHko cGFyZW50KV19IiwiPC9lbT48L2R0PiIsIjwvdHBsPiIsJzxkaXYgY2xhc3M9IngtY2xlYXIiPjwv ZGl2PicsIjwvZGw+IiwiPC90cGw+Iil9dmFyIGs9dGhpcy5jb2x1bW5zLGc9MCxoPTAsbD1rLmxl bmd0aDtmb3IodmFyIGU9MDtlPGw7ZSsrKXt2YXIgbT1rW2VdO2lmKCFtLnRwbCl7bS50cGw9bmV3 IEV4dC5YVGVtcGxhdGUoInsiK20uZGF0YUluZGV4KyJ9Iil9ZWxzZXtpZihFeHQuaXNTdHJpbmco bS50cGwpKXttLnRwbD1uZXcgRXh0LlhUZW1wbGF0ZShtLnRwbCl9fW0uYWxpZ249bS5hbGlnbnx8 ImxlZnQiO2lmKEV4dC5pc051bWJlcihtLndpZHRoKSl7bS53aWR0aCo9MTAwO2crPW0ud2lkdGg7 aCsrfX1pZihoPGwpe3ZhciBiPWwtaDtpZihnPDEwMCl7dmFyIGE9KCgxMDAtZykvYik7Zm9yKHZh ciBkPTA7ZDxsO2QrKyl7dmFyIG09a1tkXTtpZighRXh0LmlzTnVtYmVyKG0ud2lkdGgpKXttLndp ZHRoPWF9fX19RXh0Lkxpc3RWaWV3LnN1cGVyY2xhc3MuaW5pdENvbXBvbmVudC5jYWxsKHRoaXMp fSxvblJlbmRlcjpmdW5jdGlvbigpe0V4dC5MaXN0Vmlldy5zdXBlcmNsYXNzLm9uUmVuZGVyLmFw cGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmludGVybmFsVHBsLm92ZXJ3cml0ZSh0aGlzLmVsLHtj b2x1bW5zOnRoaXMuY29sdW1uc30pO3RoaXMuaW5uZXJCb2R5PUV4dC5nZXQodGhpcy5lbC5kb20u Y2hpbGROb2Rlc1sxXS5maXJzdENoaWxkKTt0aGlzLmlubmVySGQ9RXh0LmdldCh0aGlzLmVsLmRv bS5maXJzdENoaWxkLmZpcnN0Q2hpbGQpO2lmKHRoaXMuaGlkZUhlYWRlcnMpe3RoaXMuZWwuZG9t LmZpcnN0Q2hpbGQuc3R5bGUuZGlzcGxheT0ibm9uZSJ9fSxnZXRUZW1wbGF0ZVRhcmdldDpmdW5j dGlvbigpe3JldHVybiB0aGlzLmlubmVyQm9keX0sY29sbGVjdERhdGE6ZnVuY3Rpb24oKXt2YXIg YT1FeHQuTGlzdFZpZXcuc3VwZXJjbGFzcy5jb2xsZWN0RGF0YS5hcHBseSh0aGlzLGFyZ3VtZW50 cyk7cmV0dXJue2NvbHVtbnM6dGhpcy5jb2x1bW5zLHJvd3M6YX19LHZlcmlmeUludGVybmFsU2l6 ZTpmdW5jdGlvbigpe2lmKHRoaXMubGFzdFNpemUpe3RoaXMub25SZXNpemUodGhpcy5sYXN0U2l6 ZS53aWR0aCx0aGlzLmxhc3RTaXplLmhlaWdodCl9fSxvblJlc2l6ZTpmdW5jdGlvbihiLGQpe3Zh ciBlPXRoaXMuaW5uZXJCb2R5LmRvbTt2YXIgZz10aGlzLmlubmVySGQuZG9tO2lmKCFlKXtyZXR1 cm59dmFyIGM9ZS5wYXJlbnROb2RlO2lmKEV4dC5pc051bWJlcihiKSl7dmFyIGE9Yi10aGlzLnNj cm9sbE9mZnNldDtpZih0aGlzLnJlc2VydmVTY3JvbGxPZmZzZXR8fCgoYy5vZmZzZXRXaWR0aC1j LmNsaWVudFdpZHRoKT4xMCkpe2Uuc3R5bGUud2lkdGg9YSsicHgiO2cuc3R5bGUud2lkdGg9YSsi cHgifWVsc2V7ZS5zdHlsZS53aWR0aD1iKyJweCI7Zy5zdHlsZS53aWR0aD1iKyJweCI7c2V0VGlt ZW91dChmdW5jdGlvbigpe2lmKChjLm9mZnNldFdpZHRoLWMuY2xpZW50V2lkdGgpPjEwKXtlLnN0 eWxlLndpZHRoPWErInB4IjtnLnN0eWxlLndpZHRoPWErInB4In19LDEwKX19aWYoRXh0LmlzTnVt YmVyKGQ9PSJudW1iZXIiKSl7Yy5zdHlsZS5oZWlnaHQ9KGQtZy5wYXJlbnROb2RlLm9mZnNldEhl aWdodCkrInB4In19LHVwZGF0ZUluZGV4ZXM6ZnVuY3Rpb24oKXtFeHQuTGlzdFZpZXcuc3VwZXJj bGFzcy51cGRhdGVJbmRleGVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnZlcmlmeUludGVy bmFsU2l6ZSgpfSxmaW5kSGVhZGVySW5kZXg6ZnVuY3Rpb24oZSl7ZT1lLmRvbXx8ZTt2YXIgYT1l LnBhcmVudE5vZGUsZD1hLnBhcmVudE5vZGUuY2hpbGROb2Rlcztmb3IodmFyIGI9MCxnO2c9ZFti XTtiKyspe2lmKGc9PWEpe3JldHVybiBifX1yZXR1cm4gLTF9LHNldEhkV2lkdGhzOmZ1bmN0aW9u KCl7dmFyIGM9dGhpcy5pbm5lckhkLmRvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2Iik7Zm9y KHZhciBiPTAsZD10aGlzLmNvbHVtbnMsYT1kLmxlbmd0aDtiPGE7YisrKXtjW2JdLnN0eWxlLndp ZHRoPWRbYl0ud2lkdGgrIiUifX19KTtFeHQucmVnKCJsaXN0dmlldyIsRXh0Lkxpc3RWaWV3KTtF eHQuTGlzdFZpZXcuQ29sdW1uUmVzaXplcj1FeHQuZXh0ZW5kKEV4dC51dGlsLk9ic2VydmFibGUs e21pblBjdDowLjA1LGNvbnN0cnVjdG9yOmZ1bmN0aW9uKGEpe0V4dC5hcHBseSh0aGlzLGEpO0V4 dC5MaXN0Vmlldy5Db2x1bW5SZXNpemVyLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlz KX0saW5pdDpmdW5jdGlvbihhKXt0aGlzLnZpZXc9YTthLm9uKCJyZW5kZXIiLHRoaXMuaW5pdEV2 ZW50cyx0aGlzKX0saW5pdEV2ZW50czpmdW5jdGlvbihhKXthLm1vbihhLmlubmVySGQsIm1vdXNl bW92ZSIsdGhpcy5oYW5kbGVIZE1vdmUsdGhpcyk7dGhpcy50cmFja2VyPW5ldyBFeHQuZGQuRHJh Z1RyYWNrZXIoe29uQmVmb3JlU3RhcnQ6dGhpcy5vbkJlZm9yZVN0YXJ0LmNyZWF0ZURlbGVnYXRl KHRoaXMpLG9uU3RhcnQ6dGhpcy5vblN0YXJ0LmNyZWF0ZURlbGVnYXRlKHRoaXMpLG9uRHJhZzp0 aGlzLm9uRHJhZy5jcmVhdGVEZWxlZ2F0ZSh0aGlzKSxvbkVuZDp0aGlzLm9uRW5kLmNyZWF0ZURl bGVnYXRlKHRoaXMpLHRvbGVyYW5jZTozLGF1dG9TdGFydDozMDB9KTt0aGlzLnRyYWNrZXIuaW5p dEVsKGEuaW5uZXJIZCk7YS5vbigiYmVmb3JlZGVzdHJveSIsdGhpcy50cmFja2VyLmRlc3Ryb3ks dGhpcy50cmFja2VyKX0saGFuZGxlSGRNb3ZlOmZ1bmN0aW9uKGosZyl7dmFyIGI9NTt2YXIgYT1q LmdldFBhZ2VYKCk7dmFyIGk9ai5nZXRUYXJnZXQoImVtIiwzLHRydWUpO2lmKGkpe3ZhciBoPWku Z2V0UmVnaW9uKCk7dmFyIGQ9aS5kb20uc3R5bGU7dmFyIGM9aS5kb20ucGFyZW50Tm9kZTtpZihh LWgubGVmdDw9YiYmYyE9Yy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpe3RoaXMuYWN0aXZlSGQ9RXh0 LmdldChjLnByZXZpb3VzU2libGluZy5maXJzdENoaWxkKTtkLmN1cnNvcj1FeHQuaXNXZWJLaXQ/ ImUtcmVzaXplIjoiY29sLXJlc2l6ZSJ9ZWxzZXtpZihoLnJpZ2h0LWE8PWImJmMhPWMucGFyZW50 Tm9kZS5sYXN0Q2hpbGQucHJldmlvdXNTaWJsaW5nKXt0aGlzLmFjdGl2ZUhkPWk7ZC5jdXJzb3I9 RXh0LmlzV2ViS2l0PyJ3LXJlc2l6ZSI6ImNvbC1yZXNpemUifWVsc2V7ZGVsZXRlIHRoaXMuYWN0 aXZlSGQ7ZC5jdXJzb3I9IiJ9fX19LG9uQmVmb3JlU3RhcnQ6ZnVuY3Rpb24oYSl7dGhpcy5kcmFn SGQ9dGhpcy5hY3RpdmVIZDtyZXR1cm4gISF0aGlzLmRyYWdIZH0sb25TdGFydDpmdW5jdGlvbihj KXt0aGlzLnZpZXcuZGlzYWJsZUhlYWRlcnM9dHJ1ZTt0aGlzLnByb3h5PXRoaXMudmlldy5lbC5j cmVhdGVDaGlsZCh7Y2xzOiJ4LWxpc3QtcmVzaXplciJ9KTt0aGlzLnByb3h5LnNldEhlaWdodCh0 aGlzLnZpZXcuZWwuZ2V0SGVpZ2h0KCkpO3ZhciBhPXRoaXMudHJhY2tlci5nZXRYWSgpWzBdO3Zh ciBiPXRoaXMudmlldy5pbm5lckhkLmdldFdpZHRoKCk7dGhpcy5oZFg9dGhpcy5kcmFnSGQuZ2V0 WCgpO3RoaXMuaGRJbmRleD10aGlzLnZpZXcuZmluZEhlYWRlckluZGV4KHRoaXMuZHJhZ0hkKTt0 aGlzLnByb3h5LnNldFgodGhpcy5oZFgpO3RoaXMucHJveHkuc2V0V2lkdGgoYS10aGlzLmhkWCk7 dGhpcy5taW5XaWR0aD1iKnRoaXMubWluUGN0O3RoaXMubWF4V2lkdGg9Yi0odGhpcy5taW5XaWR0 aCoodGhpcy52aWV3LmNvbHVtbnMubGVuZ3RoLTEtdGhpcy5oZEluZGV4KSl9LG9uRHJhZzpmdW5j dGlvbihiKXt2YXIgYT10aGlzLnRyYWNrZXIuZ2V0WFkoKVswXTt0aGlzLnByb3h5LnNldFdpZHRo KChhLXRoaXMuaGRYKS5jb25zdHJhaW4odGhpcy5taW5XaWR0aCx0aGlzLm1heFdpZHRoKSl9LG9u RW5kOmZ1bmN0aW9uKGwpe3ZhciBqPXRoaXMucHJveHkuZ2V0V2lkdGgoKTt0aGlzLnByb3h5LnJl bW92ZSgpO3ZhciBoPXRoaXMuaGRJbmRleDt2YXIgbz10aGlzLnZpZXcsZz1vLmNvbHVtbnMsaz1n Lmxlbmd0aDt2YXIgcT10aGlzLnZpZXcuaW5uZXJIZC5nZXRXaWR0aCgpLGQ9dGhpcy5taW5QY3Qq MTAwO3ZhciByPU1hdGguY2VpbCgoaioxMDApL3EpO3ZhciBwPWdbaF0ud2lkdGgtcjt2YXIgbj1N YXRoLmZsb29yKHAvKGstMS1oKSk7dmFyIG09cC0obiooay0xLWgpKTtmb3IodmFyIGM9aCsxO2M8 aztjKyspe3ZhciBiPWdbY10ud2lkdGgrbjt2YXIgYT1NYXRoLm1heChkLGIpO2lmKGIhPWEpe20r PWItYX1nW2NdLndpZHRoPWF9Z1toXS53aWR0aD1yO2dbaCsxXS53aWR0aCs9bTtkZWxldGUgdGhp cy5kcmFnSGQ7dGhpcy52aWV3LnNldEhkV2lkdGhzKCk7dGhpcy52aWV3LnJlZnJlc2goKTtzZXRU aW1lb3V0KGZ1bmN0aW9uKCl7by5kaXNhYmxlSGVhZGVycz1mYWxzZX0sMTAwKX19KTtFeHQuTGlz dFZpZXcuU29ydGVyPUV4dC5leHRlbmQoRXh0LnV0aWwuT2JzZXJ2YWJsZSx7c29ydENsYXNzZXM6 WyJzb3J0LWFzYyIsInNvcnQtZGVzYyJdLGNvbnN0cnVjdG9yOmZ1bmN0aW9uKGEpe0V4dC5hcHBs eSh0aGlzLGEpO0V4dC5MaXN0Vmlldy5Tb3J0ZXIuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxs KHRoaXMpfSxpbml0OmZ1bmN0aW9uKGEpe3RoaXMudmlldz1hO2Eub24oInJlbmRlciIsdGhpcy5p bml0RXZlbnRzLHRoaXMpfSxpbml0RXZlbnRzOmZ1bmN0aW9uKGEpe2EubW9uKGEuaW5uZXJIZCwi Y2xpY2siLHRoaXMub25IZENsaWNrLHRoaXMpO2EuaW5uZXJIZC5zZXRTdHlsZSgiY3Vyc29yIiwi cG9pbnRlciIpO2EubW9uKGEuc3RvcmUsImRhdGFjaGFuZ2VkIix0aGlzLnVwZGF0ZVNvcnRTdGF0 ZSx0aGlzKTt0aGlzLnVwZGF0ZVNvcnRTdGF0ZS5kZWZlcigxMCx0aGlzLFthLnN0b3JlXSl9LHVw ZGF0ZVNvcnRTdGF0ZTpmdW5jdGlvbihjKXt2YXIgZz1jLmdldFNvcnRTdGF0ZSgpO2lmKCFnKXty ZXR1cm59dGhpcy5zb3J0U3RhdGU9Zzt2YXIgZT10aGlzLnZpZXcuY29sdW1ucyxoPS0xO2Zvcih2 YXIgZD0wLGE9ZS5sZW5ndGg7ZDxhO2QrKyl7aWYoZVtkXS5kYXRhSW5kZXg9PWcuZmllbGQpe2g9 ZDticmVha319aWYoaCE9LTEpe3ZhciBiPWcuZGlyZWN0aW9uO3RoaXMudXBkYXRlU29ydEljb24o aCxiKX19LHVwZGF0ZVNvcnRJY29uOmZ1bmN0aW9uKGIsYSl7dmFyIGQ9dGhpcy5zb3J0Q2xhc3Nl czt2YXIgYz10aGlzLnZpZXcuaW5uZXJIZC5zZWxlY3QoImVtIikucmVtb3ZlQ2xhc3MoZCk7Yy5p dGVtKGIpLmFkZENsYXNzKGRbYT09IkRFU0MiPzE6MF0pfSxvbkhkQ2xpY2s6ZnVuY3Rpb24oYyl7 dmFyIGI9Yy5nZXRUYXJnZXQoImVtIiwzKTtpZihiJiYhdGhpcy52aWV3LmRpc2FibGVIZWFkZXJz KXt2YXIgYT10aGlzLnZpZXcuZmluZEhlYWRlckluZGV4KGIpO3RoaXMudmlldy5zdG9yZS5zb3J0 KHRoaXMudmlldy5jb2x1bW5zW2FdLmRhdGFJbmRleCl9fX0pO0V4dC5UYWJQYW5lbD1FeHQuZXh0 ZW5kKEV4dC5QYW5lbCx7bW9uaXRvclJlc2l6ZTp0cnVlLGRlZmVycmVkUmVuZGVyOnRydWUsdGFi V2lkdGg6MTIwLG1pblRhYldpZHRoOjMwLHJlc2l6ZVRhYnM6ZmFsc2UsZW5hYmxlVGFiU2Nyb2xs OmZhbHNlLHNjcm9sbEluY3JlbWVudDowLHNjcm9sbFJlcGVhdEludGVydmFsOjQwMCxzY3JvbGxE dXJhdGlvbjowLjM1LGFuaW1TY3JvbGw6dHJ1ZSx0YWJQb3NpdGlvbjoidG9wIixiYXNlQ2xzOiJ4 LXRhYi1wYW5lbCIsYXV0b1RhYnM6ZmFsc2UsYXV0b1RhYlNlbGVjdG9yOiJkaXYueC10YWIiLGFj dGl2ZVRhYjpudWxsLHRhYk1hcmdpbjoyLHBsYWluOmZhbHNlLHdoZWVsSW5jcmVtZW50OjIwLGlk RGVsaW1pdGVyOiJfXyIsaXRlbUNsczoieC10YWItaXRlbSIsZWxlbWVudHM6ImJvZHkiLGhlYWRl ckFzVGV4dDpmYWxzZSxmcmFtZTpmYWxzZSxoaWRlQm9yZGVyczp0cnVlLGluaXRDb21wb25lbnQ6 ZnVuY3Rpb24oKXt0aGlzLmZyYW1lPWZhbHNlO0V4dC5UYWJQYW5lbC5zdXBlcmNsYXNzLmluaXRD b21wb25lbnQuY2FsbCh0aGlzKTt0aGlzLmFkZEV2ZW50cygiYmVmb3JldGFiY2hhbmdlIiwidGFi Y2hhbmdlIiwiY29udGV4dG1lbnUiKTt0aGlzLnNldExheW91dChuZXcgRXh0LmxheW91dC5DYXJk TGF5b3V0KEV4dC5hcHBseSh7bGF5b3V0T25DYXJkQ2hhbmdlOnRoaXMubGF5b3V0T25UYWJDaGFu Z2UsZGVmZXJyZWRSZW5kZXI6dGhpcy5kZWZlcnJlZFJlbmRlcn0sdGhpcy5sYXlvdXRDb25maWcp KSk7aWYodGhpcy50YWJQb3NpdGlvbj09InRvcCIpe3RoaXMuZWxlbWVudHMrPSIsaGVhZGVyIjt0 aGlzLnN0cmlwVGFyZ2V0PSJoZWFkZXIifWVsc2V7dGhpcy5lbGVtZW50cys9Iixmb290ZXIiO3Ro aXMuc3RyaXBUYXJnZXQ9ImZvb3RlciJ9aWYoIXRoaXMuc3RhY2spe3RoaXMuc3RhY2s9RXh0LlRh YlBhbmVsLkFjY2Vzc1N0YWNrKCl9dGhpcy5pbml0SXRlbXMoKX0sb25SZW5kZXI6ZnVuY3Rpb24o YyxhKXtFeHQuVGFiUGFuZWwuc3VwZXJjbGFzcy5vblJlbmRlci5jYWxsKHRoaXMsYyxhKTtpZih0 aGlzLnBsYWluKXt2YXIgZz10aGlzLnRhYlBvc2l0aW9uPT0idG9wIj8iaGVhZGVyIjoiZm9vdGVy Ijt0aGlzW2ddLmFkZENsYXNzKCJ4LXRhYi1wYW5lbC0iK2crIi1wbGFpbiIpfXZhciBiPXRoaXNb dGhpcy5zdHJpcFRhcmdldF07dGhpcy5zdHJpcFdyYXA9Yi5jcmVhdGVDaGlsZCh7Y2xzOiJ4LXRh Yi1zdHJpcC13cmFwIixjbjp7dGFnOiJ1bCIsY2xzOiJ4LXRhYi1zdHJpcCB4LXRhYi1zdHJpcC0i K3RoaXMudGFiUG9zaXRpb259fSk7dmFyIGU9KHRoaXMudGFiUG9zaXRpb249PSJib3R0b20iP3Ro aXMuc3RyaXBXcmFwOm51bGwpO3RoaXMuc3RyaXBTcGFjZXI9Yi5jcmVhdGVDaGlsZCh7Y2xzOiJ4 LXRhYi1zdHJpcC1zcGFjZXIifSxlKTt0aGlzLnN0cmlwPW5ldyBFeHQuRWxlbWVudCh0aGlzLnN0 cmlwV3JhcC5kb20uZmlyc3RDaGlsZCk7dGhpcy5lZGdlPXRoaXMuc3RyaXAuY3JlYXRlQ2hpbGQo e3RhZzoibGkiLGNsczoieC10YWItZWRnZSJ9KTt0aGlzLnN0cmlwLmNyZWF0ZUNoaWxkKHtjbHM6 IngtY2xlYXIifSk7dGhpcy5ib2R5LmFkZENsYXNzKCJ4LXRhYi1wYW5lbC1ib2R5LSIrdGhpcy50 YWJQb3NpdGlvbik7aWYoIXRoaXMuaXRlbVRwbCl7dmFyIGQ9bmV3IEV4dC5UZW1wbGF0ZSgnPGxp IGNsYXNzPSJ7Y2xzfSIgaWQ9IntpZH0iPjxhIGNsYXNzPSJ4LXRhYi1zdHJpcC1jbG9zZSIgb25j bGljaz0icmV0dXJuIGZhbHNlOyI+PC9hPicsJzxhIGNsYXNzPSJ4LXRhYi1yaWdodCIgaHJlZj0i IyIgb25jbGljaz0icmV0dXJuIGZhbHNlOyI+PGVtIGNsYXNzPSJ4LXRhYi1sZWZ0Ij4nLCc8c3Bh biBjbGFzcz0ieC10YWItc3RyaXAtaW5uZXIiPjxzcGFuIGNsYXNzPSJ4LXRhYi1zdHJpcC10ZXh0 IHtpY29uQ2xzfSI+e3RleHR9PC9zcGFuPjwvc3Bhbj4nLCI8L2VtPjwvYT48L2xpPiIpO2QuZGlz YWJsZUZvcm1hdHM9dHJ1ZTtkLmNvbXBpbGUoKTtFeHQuVGFiUGFuZWwucHJvdG90eXBlLml0ZW1U cGw9ZH10aGlzLml0ZW1zLmVhY2godGhpcy5pbml0VGFiLHRoaXMpfSxhZnRlclJlbmRlcjpmdW5j dGlvbigpe0V4dC5UYWJQYW5lbC5zdXBlcmNsYXNzLmFmdGVyUmVuZGVyLmNhbGwodGhpcyk7aWYo dGhpcy5hdXRvVGFicyl7dGhpcy5yZWFkVGFicyhmYWxzZSl9aWYodGhpcy5hY3RpdmVUYWIhPT11 bmRlZmluZWQpe3ZhciBhPUV4dC5pc09iamVjdCh0aGlzLmFjdGl2ZVRhYik/dGhpcy5hY3RpdmVU YWI6dGhpcy5pdGVtcy5nZXQodGhpcy5hY3RpdmVUYWIpO2RlbGV0ZSB0aGlzLmFjdGl2ZVRhYjt0 aGlzLnNldEFjdGl2ZVRhYihhKX19LGluaXRFdmVudHM6ZnVuY3Rpb24oKXtFeHQuVGFiUGFuZWwu c3VwZXJjbGFzcy5pbml0RXZlbnRzLmNhbGwodGhpcyk7dGhpcy5vbigiYWRkIix0aGlzLm9uQWRk LHRoaXMse3RhcmdldDp0aGlzfSk7dGhpcy5vbigicmVtb3ZlIix0aGlzLm9uUmVtb3ZlLHRoaXMs e3RhcmdldDp0aGlzfSk7dGhpcy5tb24odGhpcy5zdHJpcCwibW91c2Vkb3duIix0aGlzLm9uU3Ry aXBNb3VzZURvd24sdGhpcyk7dGhpcy5tb24odGhpcy5zdHJpcCwiY29udGV4dG1lbnUiLHRoaXMu b25TdHJpcENvbnRleHRNZW51LHRoaXMpO2lmKHRoaXMuZW5hYmxlVGFiU2Nyb2xsKXt0aGlzLm1v bih0aGlzLnN0cmlwLCJtb3VzZXdoZWVsIix0aGlzLm9uV2hlZWwsdGhpcyl9fSxmaW5kVGFyZ2V0 czpmdW5jdGlvbihjKXt2YXIgYj1udWxsO3ZhciBhPWMuZ2V0VGFyZ2V0KCJsaSIsdGhpcy5zdHJp cCk7aWYoYSl7Yj10aGlzLmdldENvbXBvbmVudChhLmlkLnNwbGl0KHRoaXMuaWREZWxpbWl0ZXIp WzFdKTtpZihiLmRpc2FibGVkKXtyZXR1cm57Y2xvc2U6bnVsbCxpdGVtOm51bGwsZWw6bnVsbH19 fXJldHVybntjbG9zZTpjLmdldFRhcmdldCgiLngtdGFiLXN0cmlwLWNsb3NlIix0aGlzLnN0cmlw KSxpdGVtOmIsZWw6YX19LG9uU3RyaXBNb3VzZURvd246ZnVuY3Rpb24oYil7aWYoYi5idXR0b24h PT0wKXtyZXR1cm59Yi5wcmV2ZW50RGVmYXVsdCgpO3ZhciBhPXRoaXMuZmluZFRhcmdldHMoYik7 aWYoYS5jbG9zZSl7aWYoYS5pdGVtLmZpcmVFdmVudCgiYmVmb3JlY2xvc2UiLGEuaXRlbSkhPT1m YWxzZSl7YS5pdGVtLmZpcmVFdmVudCgiY2xvc2UiLGEuaXRlbSk7dGhpcy5yZW1vdmUoYS5pdGVt KX1yZXR1cm59aWYoYS5pdGVtJiZhLml0ZW0hPXRoaXMuYWN0aXZlVGFiKXt0aGlzLnNldEFjdGl2 ZVRhYihhLml0ZW0pfX0sb25TdHJpcENvbnRleHRNZW51OmZ1bmN0aW9uKGIpe2IucHJldmVudERl ZmF1bHQoKTt2YXIgYT10aGlzLmZpbmRUYXJnZXRzKGIpO2lmKGEuaXRlbSl7dGhpcy5maXJlRXZl bnQoImNvbnRleHRtZW51Iix0aGlzLGEuaXRlbSxiKX19LHJlYWRUYWJzOmZ1bmN0aW9uKGQpe2lm KGQ9PT10cnVlKXt0aGlzLml0ZW1zLmVhY2goZnVuY3Rpb24oaCl7dGhpcy5yZW1vdmUoaCl9LHRo aXMpfXZhciBjPXRoaXMuZWwucXVlcnkodGhpcy5hdXRvVGFiU2VsZWN0b3IpO2Zvcih2YXIgYj0w LGE9Yy5sZW5ndGg7YjxhO2IrKyl7dmFyIGU9Y1tiXTt2YXIgZz1lLmdldEF0dHJpYnV0ZSgidGl0 bGUiKTtlLnJlbW92ZUF0dHJpYnV0ZSgidGl0bGUiKTt0aGlzLmFkZCh7dGl0bGU6Zyxjb250ZW50 RWw6ZX0pfX0saW5pdFRhYjpmdW5jdGlvbihjLGEpe3ZhciBkPXRoaXMuc3RyaXAuZG9tLmNoaWxk Tm9kZXNbYV07dmFyIGU9dGhpcy5nZXRUZW1wbGF0ZUFyZ3MoYyk7dmFyIGI9ZD90aGlzLml0ZW1U cGwuaW5zZXJ0QmVmb3JlKGQsZSk6dGhpcy5pdGVtVHBsLmFwcGVuZCh0aGlzLnN0cmlwLGUpO0V4 dC5mbHkoYikuYWRkQ2xhc3NPbk92ZXIoIngtdGFiLXN0cmlwLW92ZXIiKTtpZihjLnRhYlRpcCl7 RXh0LmZseShiKS5jaGlsZCgic3Bhbi54LXRhYi1zdHJpcC10ZXh0Iix0cnVlKS5xdGlwPWMudGFi VGlwfWMudGFiRWw9YjtjLm9uKCJkaXNhYmxlIix0aGlzLm9uSXRlbURpc2FibGVkLHRoaXMpO2Mu b24oImVuYWJsZSIsdGhpcy5vbkl0ZW1FbmFibGVkLHRoaXMpO2Mub24oInRpdGxlY2hhbmdlIix0 aGlzLm9uSXRlbVRpdGxlQ2hhbmdlZCx0aGlzKTtjLm9uKCJpY29uY2hhbmdlIix0aGlzLm9uSXRl bUljb25DaGFuZ2VkLHRoaXMpO2Mub24oImJlZm9yZXNob3ciLHRoaXMub25CZWZvcmVTaG93SXRl bSx0aGlzKX0sZ2V0VGVtcGxhdGVBcmdzOmZ1bmN0aW9uKGIpe3ZhciBhPWIuY2xvc2FibGU/Ingt dGFiLXN0cmlwLWNsb3NhYmxlIjoiIjtpZihiLmRpc2FibGVkKXthKz0iIHgtaXRlbS1kaXNhYmxl ZCJ9aWYoYi5pY29uQ2xzKXthKz0iIHgtdGFiLXdpdGgtaWNvbiJ9aWYoYi50YWJDbHMpe2ErPSIg IitiLnRhYkNsc31yZXR1cm57aWQ6dGhpcy5pZCt0aGlzLmlkRGVsaW1pdGVyK2IuZ2V0SXRlbUlk KCksdGV4dDpiLnRpdGxlLGNsczphLGljb25DbHM6Yi5pY29uQ2xzfHwiIn19LG9uQWRkOmZ1bmN0 aW9uKGMsYixhKXt0aGlzLmluaXRUYWIoYixhKTtpZih0aGlzLml0ZW1zLmdldENvdW50KCk9PTEp e3RoaXMuc3luY1NpemUoKX10aGlzLmRlbGVnYXRlVXBkYXRlcygpfSxvbkJlZm9yZUFkZDpmdW5j dGlvbihiKXt2YXIgYT1iLmV2ZW50cz8odGhpcy5pdGVtcy5jb250YWluc0tleShiLmdldEl0ZW1J ZCgpKT9iOm51bGwpOnRoaXMuaXRlbXMuZ2V0KGIpO2lmKGEpe3RoaXMuc2V0QWN0aXZlVGFiKGIp O3JldHVybiBmYWxzZX1FeHQuVGFiUGFuZWwuc3VwZXJjbGFzcy5vbkJlZm9yZUFkZC5hcHBseSh0 aGlzLGFyZ3VtZW50cyk7dmFyIGM9Yi5lbGVtZW50cztiLmVsZW1lbnRzPWM/Yy5yZXBsYWNlKCIs aGVhZGVyIiwiIik6YztiLmJvcmRlcj0oYi5ib3JkZXI9PT10cnVlKX0sb25SZW1vdmU6ZnVuY3Rp b24oYyxiKXtFeHQuZGVzdHJveShFeHQuZ2V0KHRoaXMuZ2V0VGFiRWwoYikpKTt0aGlzLnN0YWNr LnJlbW92ZShiKTtiLnVuKCJkaXNhYmxlIix0aGlzLm9uSXRlbURpc2FibGVkLHRoaXMpO2IudW4o ImVuYWJsZSIsdGhpcy5vbkl0ZW1FbmFibGVkLHRoaXMpO2IudW4oInRpdGxlY2hhbmdlIix0aGlz Lm9uSXRlbVRpdGxlQ2hhbmdlZCx0aGlzKTtiLnVuKCJpY29uY2hhbmdlIix0aGlzLm9uSXRlbUlj b25DaGFuZ2VkLHRoaXMpO2IudW4oImJlZm9yZXNob3ciLHRoaXMub25CZWZvcmVTaG93SXRlbSx0 aGlzKTtpZihiPT10aGlzLmFjdGl2ZVRhYil7dmFyIGE9dGhpcy5zdGFjay5uZXh0KCk7aWYoYSl7 dGhpcy5zZXRBY3RpdmVUYWIoYSl9ZWxzZXtpZih0aGlzLml0ZW1zLmdldENvdW50KCk+MCl7dGhp cy5zZXRBY3RpdmVUYWIoMCl9ZWxzZXt0aGlzLmFjdGl2ZVRhYj1udWxsfX19dGhpcy5kZWxlZ2F0 ZVVwZGF0ZXMoKX0sb25CZWZvcmVTaG93SXRlbTpmdW5jdGlvbihhKXtpZihhIT10aGlzLmFjdGl2 ZVRhYil7dGhpcy5zZXRBY3RpdmVUYWIoYSk7cmV0dXJuIGZhbHNlfX0sb25JdGVtRGlzYWJsZWQ6 ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5nZXRUYWJFbChiKTtpZihhKXtFeHQuZmx5KGEpLmFkZENs YXNzKCJ4LWl0ZW0tZGlzYWJsZWQiKX10aGlzLnN0YWNrLnJlbW92ZShiKX0sb25JdGVtRW5hYmxl ZDpmdW5jdGlvbihiKXt2YXIgYT10aGlzLmdldFRhYkVsKGIpO2lmKGEpe0V4dC5mbHkoYSkucmVt b3ZlQ2xhc3MoIngtaXRlbS1kaXNhYmxlZCIpfX0sb25JdGVtVGl0bGVDaGFuZ2VkOmZ1bmN0aW9u KGIpe3ZhciBhPXRoaXMuZ2V0VGFiRWwoYik7aWYoYSl7RXh0LmZseShhKS5jaGlsZCgic3Bhbi54 LXRhYi1zdHJpcC10ZXh0Iix0cnVlKS5pbm5lckhUTUw9Yi50aXRsZX19LG9uSXRlbUljb25DaGFu Z2VkOmZ1bmN0aW9uKGQsYSxjKXt2YXIgYj10aGlzLmdldFRhYkVsKGQpO2lmKGIpe0V4dC5mbHko YikuY2hpbGQoInNwYW4ueC10YWItc3RyaXAtdGV4dCIpLnJlcGxhY2VDbGFzcyhjLGEpfX0sZ2V0 VGFiRWw6ZnVuY3Rpb24oYSl7cmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaWQr dGhpcy5pZERlbGltaXRlcit0aGlzLmdldENvbXBvbmVudChhKS5nZXRJdGVtSWQoKSl9LG9uUmVz aXplOmZ1bmN0aW9uKCl7RXh0LlRhYlBhbmVsLnN1cGVyY2xhc3Mub25SZXNpemUuYXBwbHkodGhp cyxhcmd1bWVudHMpO3RoaXMuZGVsZWdhdGVVcGRhdGVzKCl9LGJlZ2luVXBkYXRlOmZ1bmN0aW9u KCl7dGhpcy5zdXNwZW5kVXBkYXRlcz10cnVlfSxlbmRVcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLnN1 c3BlbmRVcGRhdGVzPWZhbHNlO3RoaXMuZGVsZWdhdGVVcGRhdGVzKCl9LGhpZGVUYWJTdHJpcEl0 ZW06ZnVuY3Rpb24oYil7Yj10aGlzLmdldENvbXBvbmVudChiKTt2YXIgYT10aGlzLmdldFRhYkVs KGIpO2lmKGEpe2Euc3R5bGUuZGlzcGxheT0ibm9uZSI7dGhpcy5kZWxlZ2F0ZVVwZGF0ZXMoKX10 aGlzLnN0YWNrLnJlbW92ZShiKX0sdW5oaWRlVGFiU3RyaXBJdGVtOmZ1bmN0aW9uKGIpe2I9dGhp cy5nZXRDb21wb25lbnQoYik7dmFyIGE9dGhpcy5nZXRUYWJFbChiKTtpZihhKXthLnN0eWxlLmRp c3BsYXk9IiI7dGhpcy5kZWxlZ2F0ZVVwZGF0ZXMoKX19LGRlbGVnYXRlVXBkYXRlczpmdW5jdGlv bigpe2lmKHRoaXMuc3VzcGVuZFVwZGF0ZXMpe3JldHVybn1pZih0aGlzLnJlc2l6ZVRhYnMmJnRo aXMucmVuZGVyZWQpe3RoaXMuYXV0b1NpemVUYWJzKCl9aWYodGhpcy5lbmFibGVUYWJTY3JvbGwm JnRoaXMucmVuZGVyZWQpe3RoaXMuYXV0b1Njcm9sbFRhYnMoKX19LGF1dG9TaXplVGFiczpmdW5j dGlvbigpe3ZhciBoPXRoaXMuaXRlbXMubGVuZ3RoO3ZhciBiPXRoaXMudGFiUG9zaXRpb24hPSJi b3R0b20iPyJoZWFkZXIiOiJmb290ZXIiO3ZhciBjPXRoaXNbYl0uZG9tLm9mZnNldFdpZHRoO3Zh ciBhPXRoaXNbYl0uZG9tLmNsaWVudFdpZHRoO2lmKCF0aGlzLnJlc2l6ZVRhYnN8fGg8MXx8IWEp e3JldHVybn12YXIgaz1NYXRoLm1heChNYXRoLm1pbihNYXRoLmZsb29yKChhLTQpL2gpLXRoaXMu dGFiTWFyZ2luLHRoaXMudGFiV2lkdGgpLHRoaXMubWluVGFiV2lkdGgpO3RoaXMubGFzdFRhYldp ZHRoPWs7dmFyIG09dGhpcy5zdHJpcC5xdWVyeSgibGk6bm90KFtjbGFzc05hbWVePXgtdGFiLWVk Z2VdKSIpO2Zvcih2YXIgZT0wLGo9bS5sZW5ndGg7ZTxqO2UrKyl7dmFyIGw9bVtlXTt2YXIgbj1F eHQuZmx5KGwpLmNoaWxkKCIueC10YWItc3RyaXAtaW5uZXIiLHRydWUpO3ZhciBnPWwub2Zmc2V0 V2lkdGg7dmFyIGQ9bi5vZmZzZXRXaWR0aDtuLnN0eWxlLndpZHRoPShrLShnLWQpKSsicHgifX0s YWRqdXN0Qm9keVdpZHRoOmZ1bmN0aW9uKGEpe2lmKHRoaXMuaGVhZGVyKXt0aGlzLmhlYWRlci5z ZXRXaWR0aChhKX1pZih0aGlzLmZvb3Rlcil7dGhpcy5mb290ZXIuc2V0V2lkdGgoYSl9cmV0dXJu IGF9LHNldEFjdGl2ZVRhYjpmdW5jdGlvbihjKXtjPXRoaXMuZ2V0Q29tcG9uZW50KGMpO2lmKCFj fHx0aGlzLmZpcmVFdmVudCgiYmVmb3JldGFiY2hhbmdlIix0aGlzLGMsdGhpcy5hY3RpdmVUYWIp PT09ZmFsc2Upe3JldHVybn1pZighdGhpcy5yZW5kZXJlZCl7dGhpcy5hY3RpdmVUYWI9YztyZXR1 cm59aWYodGhpcy5hY3RpdmVUYWIhPWMpe2lmKHRoaXMuYWN0aXZlVGFiKXt2YXIgYT10aGlzLmdl dFRhYkVsKHRoaXMuYWN0aXZlVGFiKTtpZihhKXtFeHQuZmx5KGEpLnJlbW92ZUNsYXNzKCJ4LXRh Yi1zdHJpcC1hY3RpdmUiKX10aGlzLmFjdGl2ZVRhYi5maXJlRXZlbnQoImRlYWN0aXZhdGUiLHRo aXMuYWN0aXZlVGFiKX12YXIgYj10aGlzLmdldFRhYkVsKGMpO0V4dC5mbHkoYikuYWRkQ2xhc3Mo IngtdGFiLXN0cmlwLWFjdGl2ZSIpO3RoaXMuYWN0aXZlVGFiPWM7dGhpcy5zdGFjay5hZGQoYyk7 dGhpcy5sYXlvdXQuc2V0QWN0aXZlSXRlbShjKTtpZih0aGlzLnNjcm9sbGluZyl7dGhpcy5zY3Jv bGxUb1RhYihjLHRoaXMuYW5pbVNjcm9sbCl9Yy5maXJlRXZlbnQoImFjdGl2YXRlIixjKTt0aGlz LmZpcmVFdmVudCgidGFiY2hhbmdlIix0aGlzLGMpfX0sZ2V0QWN0aXZlVGFiOmZ1bmN0aW9uKCl7 cmV0dXJuIHRoaXMuYWN0aXZlVGFifHxudWxsfSxnZXRJdGVtOmZ1bmN0aW9uKGEpe3JldHVybiB0 aGlzLmdldENvbXBvbmVudChhKX0sYXV0b1Njcm9sbFRhYnM6ZnVuY3Rpb24oKXt0aGlzLnBvcz10 aGlzLnRhYlBvc2l0aW9uPT0iYm90dG9tIj90aGlzLmZvb3Rlcjp0aGlzLmhlYWRlcjt2YXIgaD10 aGlzLml0ZW1zLmxlbmd0aDt2YXIgZD10aGlzLnBvcy5kb20ub2Zmc2V0V2lkdGg7dmFyIGM9dGhp cy5wb3MuZG9tLmNsaWVudFdpZHRoO3ZhciBnPXRoaXMuc3RyaXBXcmFwO3ZhciBlPWcuZG9tO3Zh ciBiPWUub2Zmc2V0V2lkdGg7dmFyIGk9dGhpcy5nZXRTY3JvbGxQb3MoKTt2YXIgYT10aGlzLmVk Z2UuZ2V0T2Zmc2V0c1RvKHRoaXMuc3RyaXBXcmFwKVswXStpO2lmKCF0aGlzLmVuYWJsZVRhYlNj cm9sbHx8aDwxfHxiPDIwKXtyZXR1cm59aWYoYTw9Yyl7ZS5zY3JvbGxMZWZ0PTA7Zy5zZXRXaWR0 aChjKTtpZih0aGlzLnNjcm9sbGluZyl7dGhpcy5zY3JvbGxpbmc9ZmFsc2U7dGhpcy5wb3MucmVt b3ZlQ2xhc3MoIngtdGFiLXNjcm9sbGluZyIpO3RoaXMuc2Nyb2xsTGVmdC5oaWRlKCk7dGhpcy5z Y3JvbGxSaWdodC5oaWRlKCk7aWYoRXh0LmlzQWlyfHxFeHQuaXNXZWJLaXQpe2Uuc3R5bGUubWFy Z2luTGVmdD0iIjtlLnN0eWxlLm1hcmdpblJpZ2h0PSIifX19ZWxzZXtpZighdGhpcy5zY3JvbGxp bmcpe3RoaXMucG9zLmFkZENsYXNzKCJ4LXRhYi1zY3JvbGxpbmciKTtpZihFeHQuaXNBaXJ8fEV4 dC5pc1dlYktpdCl7ZS5zdHlsZS5tYXJnaW5MZWZ0PSIxOHB4IjtlLnN0eWxlLm1hcmdpblJpZ2h0 PSIxOHB4In19Yy09Zy5nZXRNYXJnaW5zKCJsciIpO2cuc2V0V2lkdGgoYz4yMD9jOjIwKTtpZigh dGhpcy5zY3JvbGxpbmcpe2lmKCF0aGlzLnNjcm9sbExlZnQpe3RoaXMuY3JlYXRlU2Nyb2xsZXJz KCl9ZWxzZXt0aGlzLnNjcm9sbExlZnQuc2hvdygpO3RoaXMuc2Nyb2xsUmlnaHQuc2hvdygpfX10 aGlzLnNjcm9sbGluZz10cnVlO2lmKGk+KGEtYykpe2Uuc2Nyb2xsTGVmdD1hLWN9ZWxzZXt0aGlz LnNjcm9sbFRvVGFiKHRoaXMuYWN0aXZlVGFiLGZhbHNlKX10aGlzLnVwZGF0ZVNjcm9sbEJ1dHRv bnMoKX19LGNyZWF0ZVNjcm9sbGVyczpmdW5jdGlvbigpe3RoaXMucG9zLmFkZENsYXNzKCJ4LXRh Yi1zY3JvbGxpbmctIit0aGlzLnRhYlBvc2l0aW9uKTt2YXIgYz10aGlzLnN0cmlwV3JhcC5kb20u b2Zmc2V0SGVpZ2h0O3ZhciBhPXRoaXMucG9zLmluc2VydEZpcnN0KHtjbHM6IngtdGFiLXNjcm9s bGVyLWxlZnQifSk7YS5zZXRIZWlnaHQoYyk7YS5hZGRDbGFzc09uT3ZlcigieC10YWItc2Nyb2xs ZXItbGVmdC1vdmVyIik7dGhpcy5sZWZ0UmVwZWF0ZXI9bmV3IEV4dC51dGlsLkNsaWNrUmVwZWF0 ZXIoYSx7aW50ZXJ2YWw6dGhpcy5zY3JvbGxSZXBlYXRJbnRlcnZhbCxoYW5kbGVyOnRoaXMub25T Y3JvbGxMZWZ0LHNjb3BlOnRoaXN9KTt0aGlzLnNjcm9sbExlZnQ9YTt2YXIgYj10aGlzLnBvcy5p bnNlcnRGaXJzdCh7Y2xzOiJ4LXRhYi1zY3JvbGxlci1yaWdodCJ9KTtiLnNldEhlaWdodChjKTti LmFkZENsYXNzT25PdmVyKCJ4LXRhYi1zY3JvbGxlci1yaWdodC1vdmVyIik7dGhpcy5yaWdodFJl cGVhdGVyPW5ldyBFeHQudXRpbC5DbGlja1JlcGVhdGVyKGIse2ludGVydmFsOnRoaXMuc2Nyb2xs UmVwZWF0SW50ZXJ2YWwsaGFuZGxlcjp0aGlzLm9uU2Nyb2xsUmlnaHQsc2NvcGU6dGhpc30pO3Ro aXMuc2Nyb2xsUmlnaHQ9Yn0sZ2V0U2Nyb2xsV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5l ZGdlLmdldE9mZnNldHNUbyh0aGlzLnN0cmlwV3JhcClbMF0rdGhpcy5nZXRTY3JvbGxQb3MoKX0s Z2V0U2Nyb2xsUG9zOmZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlSW50KHRoaXMuc3RyaXBXcmFwLmRv bS5zY3JvbGxMZWZ0LDEwKXx8MH0sZ2V0U2Nyb2xsQXJlYTpmdW5jdGlvbigpe3JldHVybiBwYXJz ZUludCh0aGlzLnN0cmlwV3JhcC5kb20uY2xpZW50V2lkdGgsMTApfHwwfSxnZXRTY3JvbGxBbmlt OmZ1bmN0aW9uKCl7cmV0dXJue2R1cmF0aW9uOnRoaXMuc2Nyb2xsRHVyYXRpb24sY2FsbGJhY2s6 dGhpcy51cGRhdGVTY3JvbGxCdXR0b25zLHNjb3BlOnRoaXN9fSxnZXRTY3JvbGxJbmNyZW1lbnQ6 ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY3JvbGxJbmNyZW1lbnR8fCh0aGlzLnJlc2l6ZVRhYnM/ dGhpcy5sYXN0VGFiV2lkdGgrMjoxMDApfSxzY3JvbGxUb1RhYjpmdW5jdGlvbihlLGEpe2lmKCFl KXtyZXR1cm59dmFyIGM9dGhpcy5nZXRUYWJFbChlKTt2YXIgaD10aGlzLmdldFNjcm9sbFBvcygp LGQ9dGhpcy5nZXRTY3JvbGxBcmVhKCk7dmFyIGc9RXh0LmZseShjKS5nZXRPZmZzZXRzVG8odGhp cy5zdHJpcFdyYXApWzBdK2g7dmFyIGI9ZytjLm9mZnNldFdpZHRoO2lmKGc8aCl7dGhpcy5zY3Jv bGxUbyhnLGEpfWVsc2V7aWYoYj4oaCtkKSl7dGhpcy5zY3JvbGxUbyhiLWQsYSl9fX0sc2Nyb2xs VG86ZnVuY3Rpb24oYixhKXt0aGlzLnN0cmlwV3JhcC5zY3JvbGxUbygibGVmdCIsYixhP3RoaXMu Z2V0U2Nyb2xsQW5pbSgpOmZhbHNlKTtpZighYSl7dGhpcy51cGRhdGVTY3JvbGxCdXR0b25zKCl9 fSxvbldoZWVsOmZ1bmN0aW9uKGcpe3ZhciBoPWcuZ2V0V2hlZWxEZWx0YSgpKnRoaXMud2hlZWxJ bmNyZW1lbnQqLTE7Zy5zdG9wRXZlbnQoKTt2YXIgaT10aGlzLmdldFNjcm9sbFBvcygpO3ZhciBj PWkraDt2YXIgYT10aGlzLmdldFNjcm9sbFdpZHRoKCktdGhpcy5nZXRTY3JvbGxBcmVhKCk7dmFy IGI9TWF0aC5tYXgoMCxNYXRoLm1pbihhLGMpKTtpZihiIT1pKXt0aGlzLnNjcm9sbFRvKGIsZmFs c2UpfX0sb25TY3JvbGxSaWdodDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0U2Nyb2xsV2lkdGgo KS10aGlzLmdldFNjcm9sbEFyZWEoKTt2YXIgYz10aGlzLmdldFNjcm9sbFBvcygpO3ZhciBiPU1h dGgubWluKGEsYyt0aGlzLmdldFNjcm9sbEluY3JlbWVudCgpKTtpZihiIT1jKXt0aGlzLnNjcm9s bFRvKGIsdGhpcy5hbmltU2Nyb2xsKX19LG9uU2Nyb2xsTGVmdDpmdW5jdGlvbigpe3ZhciBiPXRo aXMuZ2V0U2Nyb2xsUG9zKCk7dmFyIGE9TWF0aC5tYXgoMCxiLXRoaXMuZ2V0U2Nyb2xsSW5jcmVt ZW50KCkpO2lmKGEhPWIpe3RoaXMuc2Nyb2xsVG8oYSx0aGlzLmFuaW1TY3JvbGwpfX0sdXBkYXRl U2Nyb2xsQnV0dG9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0U2Nyb2xsUG9zKCk7dGhpcy5z Y3JvbGxMZWZ0W2E9PT0wPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oIngtdGFiLXNjcm9sbGVy LWxlZnQtZGlzYWJsZWQiKTt0aGlzLnNjcm9sbFJpZ2h0W2E+PSh0aGlzLmdldFNjcm9sbFdpZHRo KCktdGhpcy5nZXRTY3JvbGxBcmVhKCkpPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oIngtdGFi LXNjcm9sbGVyLXJpZ2h0LWRpc2FibGVkIil9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtpZih0 aGlzLml0ZW1zKXt0aGlzLml0ZW1zLmVhY2goZnVuY3Rpb24oYSl7aWYoYSYmYS50YWJFbCl7RXh0 LmdldChhLnRhYkVsKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTthLnRhYkVsPW51bGx9fSx0aGlzKX1p Zih0aGlzLnN0cmlwKXt0aGlzLnN0cmlwLnJlbW92ZUFsbExpc3RlbmVycygpfUV4dC5UYWJQYW5l bC5zdXBlcmNsYXNzLmJlZm9yZURlc3Ryb3kuYXBwbHkodGhpcyl9fSk7RXh0LnJlZygidGFicGFu ZWwiLEV4dC5UYWJQYW5lbCk7RXh0LlRhYlBhbmVsLnByb3RvdHlwZS5hY3RpdmF0ZT1FeHQuVGFi UGFuZWwucHJvdG90eXBlLnNldEFjdGl2ZVRhYjtFeHQuVGFiUGFuZWwuQWNjZXNzU3RhY2s9ZnVu Y3Rpb24oKXt2YXIgYT1bXTtyZXR1cm57YWRkOmZ1bmN0aW9uKGIpe2EucHVzaChiKTtpZihhLmxl bmd0aD4xMCl7YS5zaGlmdCgpfX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciBkPVtdO2Zvcih2YXIg Yz0wLGI9YS5sZW5ndGg7YzxiO2MrKyl7aWYoYVtjXSE9ZSl7ZC5wdXNoKGFbY10pfX1hPWR9LG5l eHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5wb3AoKX19fTtFeHQuQnV0dG9uPUV4dC5leHRlbmQoRXh0 LkJveENvbXBvbmVudCx7aGlkZGVuOmZhbHNlLGRpc2FibGVkOmZhbHNlLHByZXNzZWQ6ZmFsc2Us ZW5hYmxlVG9nZ2xlOmZhbHNlLG1lbnVBbGlnbjoidGwtYmw/Iix0eXBlOiJidXR0b24iLG1lbnVD bGFzc1RhcmdldDoidHI6bnRoKDIpIixjbGlja0V2ZW50OiJjbGljayIsaGFuZGxlTW91c2VFdmVu dHM6dHJ1ZSx0b29sdGlwVHlwZToicXRpcCIsYnV0dG9uU2VsZWN0b3I6ImJ1dHRvbjpmaXJzdC1j aGlsZCIsc2NhbGU6InNtYWxsIixpY29uQWxpZ246ImxlZnQiLGFycm93QWxpZ246InJpZ2h0Iixp bml0Q29tcG9uZW50OmZ1bmN0aW9uKCl7RXh0LkJ1dHRvbi5zdXBlcmNsYXNzLmluaXRDb21wb25l bnQuY2FsbCh0aGlzKTt0aGlzLmFkZEV2ZW50cygiY2xpY2siLCJ0b2dnbGUiLCJtb3VzZW92ZXIi LCJtb3VzZW91dCIsIm1lbnVzaG93IiwibWVudWhpZGUiLCJtZW51dHJpZ2dlcm92ZXIiLCJtZW51 dHJpZ2dlcm91dCIpO2lmKHRoaXMubWVudSl7dGhpcy5tZW51PUV4dC5tZW51Lk1lbnVNZ3IuZ2V0 KHRoaXMubWVudSl9aWYoRXh0LmlzU3RyaW5nKHRoaXMudG9nZ2xlR3JvdXApKXt0aGlzLmVuYWJs ZVRvZ2dsZT10cnVlfX0sZ2V0VGVtcGxhdGVBcmdzOmZ1bmN0aW9uKCl7dmFyIGE9KHRoaXMuY2xz fHwiIik7YSs9KHRoaXMuaWNvbkNsc3x8dGhpcy5pY29uKT8odGhpcy50ZXh0PyIgeC1idG4tdGV4 dC1pY29uIjoiIHgtYnRuLWljb24iKToiIHgtYnRuLW5vaWNvbiI7aWYodGhpcy5wcmVzc2VkKXth Kz0iIHgtYnRuLXByZXNzZWQifXJldHVyblt0aGlzLnRleHR8fCImIzE2MDsiLHRoaXMudHlwZSx0 aGlzLmljb25DbHN8fCIiLGEsIngtYnRuLSIrdGhpcy5zY2FsZSsiIHgtYnRuLWljb24tIit0aGlz LnNjYWxlKyItIit0aGlzLmljb25BbGlnbix0aGlzLmdldE1lbnVDbGFzcygpXX0sZ2V0TWVudUNs YXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVudT8odGhpcy5hcnJvd0FsaWduIT0iYm90dG9t Ij8ieC1idG4tYXJyb3ciOiJ4LWJ0bi1hcnJvdy1ib3R0b20iKToiIn0sb25SZW5kZXI6ZnVuY3Rp b24oYyxhKXtpZighdGhpcy50ZW1wbGF0ZSl7aWYoIUV4dC5CdXR0b24uYnV0dG9uVGVtcGxhdGUp e0V4dC5CdXR0b24uYnV0dG9uVGVtcGxhdGU9bmV3IEV4dC5UZW1wbGF0ZSgnPHRhYmxlIGNlbGxz cGFjaW5nPSIwIiBjbGFzcz0ieC1idG4gezN9Ij48dGJvZHkgY2xhc3M9Ins0fSI+JywnPHRyPjx0 ZCBjbGFzcz0ieC1idG4tdGwiPjxpPiYjMTYwOzwvaT48L3RkPjx0ZCBjbGFzcz0ieC1idG4tdGMi PjwvdGQ+PHRkIGNsYXNzPSJ4LWJ0bi10ciI+PGk+JiMxNjA7PC9pPjwvdGQ+PC90cj4nLCc8dHI+ PHRkIGNsYXNzPSJ4LWJ0bi1tbCI+PGk+JiMxNjA7PC9pPjwvdGQ+PHRkIGNsYXNzPSJ4LWJ0bi1t YyI+PGVtIGNsYXNzPSJ7NX0iIHVuc2VsZWN0YWJsZT0ib24iPjxidXR0b24gY2xhc3M9IngtYnRu LXRleHQgezJ9IiB0eXBlPSJ7MX0iPnswfTwvYnV0dG9uPjwvZW0+PC90ZD48dGQgY2xhc3M9Ingt YnRuLW1yIj48aT4mIzE2MDs8L2k+PC90ZD48L3RyPicsJzx0cj48dGQgY2xhc3M9IngtYnRuLWJs Ij48aT4mIzE2MDs8L2k+PC90ZD48dGQgY2xhc3M9IngtYnRuLWJjIj48L3RkPjx0ZCBjbGFzcz0i eC1idG4tYnIiPjxpPiYjMTYwOzwvaT48L3RkPjwvdHI+JywiPC90Ym9keT48L3RhYmxlPiIpO0V4 dC5CdXR0b24uYnV0dG9uVGVtcGxhdGUuY29tcGlsZSgpfXRoaXMudGVtcGxhdGU9RXh0LkJ1dHRv bi5idXR0b25UZW1wbGF0ZX12YXIgYixkPXRoaXMuZ2V0VGVtcGxhdGVBcmdzKCk7aWYoYSl7Yj10 aGlzLnRlbXBsYXRlLmluc2VydEJlZm9yZShhLGQsdHJ1ZSl9ZWxzZXtiPXRoaXMudGVtcGxhdGUu YXBwZW5kKGMsZCx0cnVlKX10aGlzLmJ0bkVsPWIuY2hpbGQodGhpcy5idXR0b25TZWxlY3Rvcik7 dGhpcy5tb24odGhpcy5idG5FbCx7c2NvcGU6dGhpcyxmb2N1czp0aGlzLm9uRm9jdXMsYmx1cjp0 aGlzLm9uQmx1cn0pO3RoaXMuaW5pdEJ1dHRvbkVsKGIsdGhpcy5idG5FbCk7RXh0LkJ1dHRvblRv Z2dsZU1nci5yZWdpc3Rlcih0aGlzKX0saW5pdEJ1dHRvbkVsOmZ1bmN0aW9uKGIsYyl7dGhpcy5l bD1iO2lmKHRoaXMuaWQpe3RoaXMuZWwuZG9tLmlkPXRoaXMuZWwuaWQ9dGhpcy5pZH1pZih0aGlz Lmljb24pe2Muc2V0U3R5bGUoImJhY2tncm91bmQtaW1hZ2UiLCJ1cmwoIit0aGlzLmljb24rIiki KX1pZih0aGlzLnRhYkluZGV4IT09dW5kZWZpbmVkKXtjLmRvbS50YWJJbmRleD10aGlzLnRhYklu ZGV4fWlmKHRoaXMudG9vbHRpcCl7dGhpcy5zZXRUb29sdGlwKHRoaXMudG9vbHRpcCx0cnVlKX1p Zih0aGlzLmhhbmRsZU1vdXNlRXZlbnRzKXt0aGlzLm1vbihiLHtzY29wZTp0aGlzLG1vdXNlb3Zl cjp0aGlzLm9uTW91c2VPdmVyLG1vdXNlZG93bjp0aGlzLm9uTW91c2VEb3dufSl9aWYodGhpcy5t ZW51KXt0aGlzLm1vbih0aGlzLm1lbnUse3Njb3BlOnRoaXMsc2hvdzp0aGlzLm9uTWVudVNob3cs aGlkZTp0aGlzLm9uTWVudUhpZGV9KX1pZih0aGlzLnJlcGVhdCl7dmFyIGE9bmV3IEV4dC51dGls LkNsaWNrUmVwZWF0ZXIoYixFeHQuaXNPYmplY3QodGhpcy5yZXBlYXQpP3RoaXMucmVwZWF0Ont9 KTt0aGlzLm1vbihhLCJjbGljayIsdGhpcy5vbkNsaWNrLHRoaXMpfXRoaXMubW9uKGIsdGhpcy5j bGlja0V2ZW50LHRoaXMub25DbGljayx0aGlzKX0sYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXtFeHQu QnV0dG9uLnN1cGVyY2xhc3MuYWZ0ZXJSZW5kZXIuY2FsbCh0aGlzKTt0aGlzLmRvQXV0b1dpZHRo KCl9LHNldEljb25DbGFzczpmdW5jdGlvbihhKXtpZih0aGlzLmVsKXt0aGlzLmJ0bkVsLnJlcGxh Y2VDbGFzcyh0aGlzLmljb25DbHMsYSl9dGhpcy5pY29uQ2xzPWE7cmV0dXJuIHRoaXN9LHNldFRv b2x0aXA6ZnVuY3Rpb24oYixhKXtpZih0aGlzLnJlbmRlcmVkKXtpZighYSl7dGhpcy5jbGVhclRp cCgpfWlmKEV4dC5pc09iamVjdChiKSl7RXh0LlF1aWNrVGlwcy5yZWdpc3RlcihFeHQuYXBwbHko e3RhcmdldDp0aGlzLmJ0bkVsLmlkfSxiKSk7dGhpcy50b29sdGlwPWJ9ZWxzZXt0aGlzLmJ0bkVs LmRvbVt0aGlzLnRvb2x0aXBUeXBlXT1ifX1lbHNle3RoaXMudG9vbHRpcD1ifXJldHVybiB0aGlz fSxjbGVhclRpcDpmdW5jdGlvbigpe2lmKEV4dC5pc09iamVjdCh0aGlzLnRvb2x0aXApKXtFeHQu UXVpY2tUaXBzLnVucmVnaXN0ZXIodGhpcy5idG5FbCl9fSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9u KCl7aWYodGhpcy5yZW5kZXJlZCl7dGhpcy5jbGVhclRpcCgpfUV4dC5kZXN0cm95KHRoaXMubWVu dSx0aGlzLnJlcGVhdGVyKX0sb25EZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGE9RXh0LmdldERvYygp O2EudW4oIm1vdXNlb3ZlciIsdGhpcy5tb25pdG9yTW91c2VPdmVyLHRoaXMpO2EudW4oIm1vdXNl dXAiLHRoaXMub25Nb3VzZVVwLHRoaXMpO2lmKHRoaXMucmVuZGVyZWQpe0V4dC5CdXR0b25Ub2dn bGVNZ3IudW5yZWdpc3Rlcih0aGlzKX19LGRvQXV0b1dpZHRoOmZ1bmN0aW9uKCl7aWYodGhpcy5l bCYmdGhpcy50ZXh0JiZ0aGlzLndpZHRoPT09dW5kZWZpbmVkKXt0aGlzLmVsLnNldFdpZHRoKCJh dXRvIik7aWYoRXh0LmlzSUU3JiZFeHQuaXNTdHJpY3Qpe3ZhciBhPXRoaXMuYnRuRWw7aWYoYSYm YS5nZXRXaWR0aCgpPjIwKXthLmNsaXAoKTthLnNldFdpZHRoKEV4dC51dGlsLlRleHRNZXRyaWNz Lm1lYXN1cmUoYSx0aGlzLnRleHQpLndpZHRoK2EuZ2V0RnJhbWVXaWR0aCgibHIiKSl9fWlmKHRo aXMubWluV2lkdGgpe2lmKHRoaXMuZWwuZ2V0V2lkdGgoKTx0aGlzLm1pbldpZHRoKXt0aGlzLmVs LnNldFdpZHRoKHRoaXMubWluV2lkdGgpfX19fSxzZXRIYW5kbGVyOmZ1bmN0aW9uKGIsYSl7dGhp cy5oYW5kbGVyPWI7dGhpcy5zY29wZT1hO3JldHVybiB0aGlzfSxzZXRUZXh0OmZ1bmN0aW9uKGEp e3RoaXMudGV4dD1hO2lmKHRoaXMuZWwpe3RoaXMuZWwuY2hpbGQoInRkLngtYnRuLW1jICIrdGhp cy5idXR0b25TZWxlY3RvcikudXBkYXRlKGEpfXRoaXMuZG9BdXRvV2lkdGgoKTtyZXR1cm4gdGhp c30sZ2V0VGV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHR9LHRvZ2dsZTpmdW5jdGlvbihi LGEpe2I9Yj09PXVuZGVmaW5lZD8hdGhpcy5wcmVzc2VkOiEhYjtpZihiIT10aGlzLnByZXNzZWQp e3RoaXMuZWxbYj8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKCJ4LWJ0bi1wcmVzc2VkIik7dGhp cy5wcmVzc2VkPWI7aWYoIWEpe3RoaXMuZmlyZUV2ZW50KCJ0b2dnbGUiLHRoaXMsYik7aWYodGhp cy50b2dnbGVIYW5kbGVyKXt0aGlzLnRvZ2dsZUhhbmRsZXIuY2FsbCh0aGlzLnNjb3BlfHx0aGlz LHRoaXMsYil9fX1yZXR1cm4gdGhpc30sZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLmJ0bkVsLmZvY3Vz KCl9LG9uRGlzYWJsZTpmdW5jdGlvbigpe3RoaXMub25EaXNhYmxlQ2hhbmdlKHRydWUpfSxvbkVu YWJsZTpmdW5jdGlvbigpe3RoaXMub25EaXNhYmxlQ2hhbmdlKGZhbHNlKX0sb25EaXNhYmxlQ2hh bmdlOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWwpe2lmKCFFeHQuaXNJRTZ8fCF0aGlzLnRleHQpe3Ro aXMuZWxbYT8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKHRoaXMuZGlzYWJsZWRDbGFzcyl9dGhp cy5lbC5kb20uZGlzYWJsZWQ9YX10aGlzLmRpc2FibGVkPWF9LHNob3dNZW51OmZ1bmN0aW9uKCl7 aWYodGhpcy5yZW5kZXJlZCYmdGhpcy5tZW51KXtpZih0aGlzLnRvb2x0aXApe0V4dC5RdWlja1Rp cHMuZ2V0UXVpY2tUaXAoKS5jYW5jZWxTaG93KHRoaXMuYnRuRWwpfXRoaXMubWVudS5zaG93KHRo aXMuZWwsdGhpcy5tZW51QWxpZ24pfXJldHVybiB0aGlzfSxoaWRlTWVudTpmdW5jdGlvbigpe2lm KHRoaXMubWVudSl7dGhpcy5tZW51LmhpZGUoKX1yZXR1cm4gdGhpc30saGFzVmlzaWJsZU1lbnU6 ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51JiZ0aGlzLm1lbnUuaXNWaXNpYmxlKCl9LG9uQ2xp Y2s6ZnVuY3Rpb24oYSl7aWYoYSl7YS5wcmV2ZW50RGVmYXVsdCgpfWlmKGEuYnV0dG9uIT09MCl7 cmV0dXJufWlmKCF0aGlzLmRpc2FibGVkKXtpZih0aGlzLmVuYWJsZVRvZ2dsZSYmKHRoaXMuYWxs b3dEZXByZXNzIT09ZmFsc2V8fCF0aGlzLnByZXNzZWQpKXt0aGlzLnRvZ2dsZSgpfWlmKHRoaXMu bWVudSYmIXRoaXMubWVudS5pc1Zpc2libGUoKSYmIXRoaXMuaWdub3JlTmV4dENsaWNrKXt0aGlz LnNob3dNZW51KCl9dGhpcy5maXJlRXZlbnQoImNsaWNrIix0aGlzLGEpO2lmKHRoaXMuaGFuZGxl cil7dGhpcy5oYW5kbGVyLmNhbGwodGhpcy5zY29wZXx8dGhpcyx0aGlzLGEpfX19LGlzTWVudVRy aWdnZXJPdmVyOmZ1bmN0aW9uKGIsYSl7cmV0dXJuIHRoaXMubWVudSYmIWF9LGlzTWVudVRyaWdn ZXJPdXQ6ZnVuY3Rpb24oYixhKXtyZXR1cm4gdGhpcy5tZW51JiYhYX0sb25Nb3VzZU92ZXI6ZnVu Y3Rpb24oYil7aWYoIXRoaXMuZGlzYWJsZWQpe3ZhciBhPWIud2l0aGluKHRoaXMuZWwsdHJ1ZSk7 aWYoIWEpe3RoaXMuZWwuYWRkQ2xhc3MoIngtYnRuLW92ZXIiKTtpZighdGhpcy5tb25pdG9yaW5n TW91c2VPdmVyKXtFeHQuZ2V0RG9jKCkub24oIm1vdXNlb3ZlciIsdGhpcy5tb25pdG9yTW91c2VP dmVyLHRoaXMpO3RoaXMubW9uaXRvcmluZ01vdXNlT3Zlcj10cnVlfXRoaXMuZmlyZUV2ZW50KCJt b3VzZW92ZXIiLHRoaXMsYil9aWYodGhpcy5pc01lbnVUcmlnZ2VyT3ZlcihiLGEpKXt0aGlzLmZp cmVFdmVudCgibWVudXRyaWdnZXJvdmVyIix0aGlzLHRoaXMubWVudSxiKX19fSxtb25pdG9yTW91 c2VPdmVyOmZ1bmN0aW9uKGEpe2lmKGEudGFyZ2V0IT10aGlzLmVsLmRvbSYmIWEud2l0aGluKHRo aXMuZWwpKXtpZih0aGlzLm1vbml0b3JpbmdNb3VzZU92ZXIpe0V4dC5nZXREb2MoKS51bigibW91 c2VvdmVyIix0aGlzLm1vbml0b3JNb3VzZU92ZXIsdGhpcyk7dGhpcy5tb25pdG9yaW5nTW91c2VP dmVyPWZhbHNlfXRoaXMub25Nb3VzZU91dChhKX19LG9uTW91c2VPdXQ6ZnVuY3Rpb24oYil7dmFy IGE9Yi53aXRoaW4odGhpcy5lbCkmJmIudGFyZ2V0IT10aGlzLmVsLmRvbTt0aGlzLmVsLnJlbW92 ZUNsYXNzKCJ4LWJ0bi1vdmVyIik7dGhpcy5maXJlRXZlbnQoIm1vdXNlb3V0Iix0aGlzLGIpO2lm KHRoaXMuaXNNZW51VHJpZ2dlck91dChiLGEpKXt0aGlzLmZpcmVFdmVudCgibWVudXRyaWdnZXJv dXQiLHRoaXMsdGhpcy5tZW51LGIpfX0sb25Gb2N1czpmdW5jdGlvbihhKXtpZighdGhpcy5kaXNh YmxlZCl7dGhpcy5lbC5hZGRDbGFzcygieC1idG4tZm9jdXMiKX19LG9uQmx1cjpmdW5jdGlvbihh KXt0aGlzLmVsLnJlbW92ZUNsYXNzKCJ4LWJ0bi1mb2N1cyIpfSxnZXRDbGlja0VsOmZ1bmN0aW9u KGIsYSl7cmV0dXJuIHRoaXMuZWx9LG9uTW91c2VEb3duOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmRp c2FibGVkJiZhLmJ1dHRvbj09PTApe3RoaXMuZ2V0Q2xpY2tFbChhKS5hZGRDbGFzcygieC1idG4t Y2xpY2siKTtFeHQuZ2V0RG9jKCkub24oIm1vdXNldXAiLHRoaXMub25Nb3VzZVVwLHRoaXMpfX0s b25Nb3VzZVVwOmZ1bmN0aW9uKGEpe2lmKGEuYnV0dG9uPT09MCl7dGhpcy5nZXRDbGlja0VsKGEs dHJ1ZSkucmVtb3ZlQ2xhc3MoIngtYnRuLWNsaWNrIik7RXh0LmdldERvYygpLnVuKCJtb3VzZXVw Iix0aGlzLm9uTW91c2VVcCx0aGlzKX19LG9uTWVudVNob3c6ZnVuY3Rpb24oYSl7dGhpcy5pZ25v cmVOZXh0Q2xpY2s9MDt0aGlzLmVsLmFkZENsYXNzKCJ4LWJ0bi1tZW51LWFjdGl2ZSIpO3RoaXMu ZmlyZUV2ZW50KCJtZW51c2hvdyIsdGhpcyx0aGlzLm1lbnUpfSxvbk1lbnVIaWRlOmZ1bmN0aW9u KGEpe3RoaXMuZWwucmVtb3ZlQ2xhc3MoIngtYnRuLW1lbnUtYWN0aXZlIik7dGhpcy5pZ25vcmVO ZXh0Q2xpY2s9dGhpcy5yZXN0b3JlQ2xpY2suZGVmZXIoMjUwLHRoaXMpO3RoaXMuZmlyZUV2ZW50 KCJtZW51aGlkZSIsdGhpcyx0aGlzLm1lbnUpfSxyZXN0b3JlQ2xpY2s6ZnVuY3Rpb24oKXt0aGlz Lmlnbm9yZU5leHRDbGljaz0wfX0pO0V4dC5yZWcoImJ1dHRvbiIsRXh0LkJ1dHRvbik7RXh0LkJ1 dHRvblRvZ2dsZU1ncj1mdW5jdGlvbigpe3ZhciBhPXt9O2Z1bmN0aW9uIGIoZSxqKXtpZihqKXt2 YXIgaD1hW2UudG9nZ2xlR3JvdXBdO2Zvcih2YXIgZD0wLGM9aC5sZW5ndGg7ZDxjO2QrKyl7aWYo aFtkXSE9ZSl7aFtkXS50b2dnbGUoZmFsc2UpfX19fXJldHVybntyZWdpc3RlcjpmdW5jdGlvbihj KXtpZighYy50b2dnbGVHcm91cCl7cmV0dXJufXZhciBkPWFbYy50b2dnbGVHcm91cF07aWYoIWQp e2Q9YVtjLnRvZ2dsZUdyb3VwXT1bXX1kLnB1c2goYyk7Yy5vbigidG9nZ2xlIixiKX0sdW5yZWdp c3RlcjpmdW5jdGlvbihjKXtpZighYy50b2dnbGVHcm91cCl7cmV0dXJufXZhciBkPWFbYy50b2dn bGVHcm91cF07aWYoZCl7ZC5yZW1vdmUoYyk7Yy51bigidG9nZ2xlIixiKX19LGdldFByZXNzZWQ6 ZnVuY3Rpb24oaCl7dmFyIGU9YVtoXTtpZihlKXtmb3IodmFyIGQ9MCxjPWUubGVuZ3RoO2Q8Yztk Kyspe2lmKGVbZF0ucHJlc3NlZD09PXRydWUpe3JldHVybiBlW2RdfX19cmV0dXJuIG51bGx9fX0o KTtFeHQuU3BsaXRCdXR0b249RXh0LmV4dGVuZChFeHQuQnV0dG9uLHthcnJvd1NlbGVjdG9yOiJl bSIsc3BsaXQ6dHJ1ZSxpbml0Q29tcG9uZW50OmZ1bmN0aW9uKCl7RXh0LlNwbGl0QnV0dG9uLnN1 cGVyY2xhc3MuaW5pdENvbXBvbmVudC5jYWxsKHRoaXMpO3RoaXMuYWRkRXZlbnRzKCJhcnJvd2Ns aWNrIil9LG9uUmVuZGVyOmZ1bmN0aW9uKCl7RXh0LlNwbGl0QnV0dG9uLnN1cGVyY2xhc3Mub25S ZW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHRoaXMuYXJyb3dUb29sdGlwKXt0aGlzLmVs LmNoaWxkKHRoaXMuYXJyb3dTZWxlY3RvcikuZG9tW3RoaXMudG9vbHRpcFR5cGVdPXRoaXMuYXJy b3dUb29sdGlwfX0sc2V0QXJyb3dIYW5kbGVyOmZ1bmN0aW9uKGIsYSl7dGhpcy5hcnJvd0hhbmRs ZXI9Yjt0aGlzLnNjb3BlPWF9LGdldE1lbnVDbGFzczpmdW5jdGlvbigpe3JldHVybiJ4LWJ0bi1z cGxpdCIrKHRoaXMuYXJyb3dBbGlnbj09ImJvdHRvbSI/Ii1ib3R0b20iOiIiKX0saXNDbGlja09u QXJyb3c6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYXJyb3dBbGlnbiE9ImJvdHRvbSI/YS5nZXRQ YWdlWCgpPnRoaXMuZWwuY2hpbGQodGhpcy5idXR0b25TZWxlY3RvcikuZ2V0UmVnaW9uKCkucmln aHQ6YS5nZXRQYWdlWSgpPnRoaXMuZWwuY2hpbGQodGhpcy5idXR0b25TZWxlY3RvcikuZ2V0UmVn aW9uKCkuYm90dG9tfSxvbkNsaWNrOmZ1bmN0aW9uKGIsYSl7Yi5wcmV2ZW50RGVmYXVsdCgpO2lm KCF0aGlzLmRpc2FibGVkKXtpZih0aGlzLmlzQ2xpY2tPbkFycm93KGIpKXtpZih0aGlzLm1lbnUm JiF0aGlzLm1lbnUuaXNWaXNpYmxlKCkmJiF0aGlzLmlnbm9yZU5leHRDbGljayl7dGhpcy5zaG93 TWVudSgpfXRoaXMuZmlyZUV2ZW50KCJhcnJvd2NsaWNrIix0aGlzLGIpO2lmKHRoaXMuYXJyb3dI YW5kbGVyKXt0aGlzLmFycm93SGFuZGxlci5jYWxsKHRoaXMuc2NvcGV8fHRoaXMsdGhpcyxiKX19 ZWxzZXtpZih0aGlzLmVuYWJsZVRvZ2dsZSl7dGhpcy50b2dnbGUoKX10aGlzLmZpcmVFdmVudCgi Y2xpY2siLHRoaXMsYik7aWYodGhpcy5oYW5kbGVyKXt0aGlzLmhhbmRsZXIuY2FsbCh0aGlzLnNj b3BlfHx0aGlzLHRoaXMsYil9fX19LGlzTWVudVRyaWdnZXJPdmVyOmZ1bmN0aW9uKGEpe3JldHVy biB0aGlzLm1lbnUmJmEudGFyZ2V0LnRhZ05hbWU9PSJlbSJ9LGlzTWVudVRyaWdnZXJPdXQ6ZnVu Y3Rpb24oYixhKXtyZXR1cm4gdGhpcy5tZW51JiZiLnRhcmdldC50YWdOYW1lIT0iZW0ifX0pO0V4 dC5yZWcoInNwbGl0YnV0dG9uIixFeHQuU3BsaXRCdXR0b24pO0V4dC5DeWNsZUJ1dHRvbj1FeHQu ZXh0ZW5kKEV4dC5TcGxpdEJ1dHRvbix7Z2V0SXRlbVRleHQ6ZnVuY3Rpb24oYSl7aWYoYSYmdGhp cy5zaG93VGV4dD09PXRydWUpe3ZhciBiPSIiO2lmKHRoaXMucHJlcGVuZFRleHQpe2IrPXRoaXMu cHJlcGVuZFRleHR9Yis9YS50ZXh0O3JldHVybiBifXJldHVybiB1bmRlZmluZWR9LHNldEFjdGl2 ZUl0ZW06ZnVuY3Rpb24oYyxhKXtpZih0eXBlb2YgYyE9Im9iamVjdCIpe2M9dGhpcy5tZW51Lml0 ZW1zLmdldChjKX1pZihjKXtpZighdGhpcy5yZW5kZXJlZCl7dGhpcy50ZXh0PXRoaXMuZ2V0SXRl bVRleHQoYyk7dGhpcy5pY29uQ2xzPWMuaWNvbkNsc31lbHNle3ZhciBiPXRoaXMuZ2V0SXRlbVRl eHQoYyk7aWYoYil7dGhpcy5zZXRUZXh0KGIpfXRoaXMuc2V0SWNvbkNsYXNzKGMuaWNvbkNscyl9 dGhpcy5hY3RpdmVJdGVtPWM7aWYoIWMuY2hlY2tlZCl7Yy5zZXRDaGVja2VkKHRydWUsdHJ1ZSl9 aWYodGhpcy5mb3JjZUljb24pe3RoaXMuc2V0SWNvbkNsYXNzKHRoaXMuZm9yY2VJY29uKX1pZigh YSl7dGhpcy5maXJlRXZlbnQoImNoYW5nZSIsdGhpcyxjKX19fSxnZXRBY3RpdmVJdGVtOmZ1bmN0 aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlSXRlbX0saW5pdENvbXBvbmVudDpmdW5jdGlvbigpe3Ro aXMuYWRkRXZlbnRzKCJjaGFuZ2UiKTtpZih0aGlzLmNoYW5nZUhhbmRsZXIpe3RoaXMub24oImNo YW5nZSIsdGhpcy5jaGFuZ2VIYW5kbGVyLHRoaXMuc2NvcGV8fHRoaXMpO2RlbGV0ZSB0aGlzLmNo YW5nZUhhbmRsZXJ9dGhpcy5pdGVtQ291bnQ9dGhpcy5pdGVtcy5sZW5ndGg7dGhpcy5tZW51PXtj bHM6IngtY3ljbGUtbWVudSIsaXRlbXM6W119O3ZhciBkO2Zvcih2YXIgYj0wLGE9dGhpcy5pdGVt Q291bnQ7YjxhO2IrKyl7dmFyIGM9dGhpcy5pdGVtc1tiXTtjLmdyb3VwPWMuZ3JvdXB8fHRoaXMu aWQ7Yy5pdGVtSW5kZXg9YjtjLmNoZWNrSGFuZGxlcj10aGlzLmNoZWNrSGFuZGxlcjtjLnNjb3Bl PXRoaXM7Yy5jaGVja2VkPWMuY2hlY2tlZHx8ZmFsc2U7dGhpcy5tZW51Lml0ZW1zLnB1c2goYyk7 aWYoYy5jaGVja2VkKXtkPWN9fXRoaXMuc2V0QWN0aXZlSXRlbShkLHRydWUpO0V4dC5DeWNsZUJ1 dHRvbi5zdXBlcmNsYXNzLmluaXRDb21wb25lbnQuY2FsbCh0aGlzKTt0aGlzLm9uKCJjbGljayIs dGhpcy50b2dnbGVTZWxlY3RlZCx0aGlzKX0sY2hlY2tIYW5kbGVyOmZ1bmN0aW9uKGEsYil7aWYo Yil7dGhpcy5zZXRBY3RpdmVJdGVtKGEpfX0sdG9nZ2xlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlz Lm1lbnUucmVuZGVyKCk7dmFyIGMsYTtmb3IodmFyIGI9MTtiPHRoaXMuaXRlbUNvdW50O2IrKyl7 Yz0odGhpcy5hY3RpdmVJdGVtLml0ZW1JbmRleCtiKSV0aGlzLml0ZW1Db3VudDthPXRoaXMubWVu dS5pdGVtcy5pdGVtQXQoYyk7aWYoIWEuZGlzYWJsZWQpe2Euc2V0Q2hlY2tlZCh0cnVlKTticmVh a319fX0pO0V4dC5yZWcoImN5Y2xlIixFeHQuQ3ljbGVCdXR0b24pO0V4dC5sYXlvdXQuVG9vbGJh ckxheW91dD1FeHQuZXh0ZW5kKEV4dC5sYXlvdXQuQ29udGFpbmVyTGF5b3V0LHttb25pdG9yUmVz aXplOnRydWUsdHJpZ2dlcldpZHRoOjE4LGxhc3RPdmVyZmxvdzpmYWxzZSxub0l0ZW1zTWVudVRl eHQ6JzxkaXYgY2xhc3M9IngtdG9vbGJhci1uby1pdGVtcyI+KE5vbmUpPC9kaXY+JyxvbkxheW91 dDpmdW5jdGlvbihkLGcpe2lmKCF0aGlzLmxlZnRUcil7Zy5hZGRDbGFzcygieC10b29sYmFyLWxh eW91dC1jdCIpO2cuaW5zZXJ0SHRtbCgiYmVmb3JlRW5kIiwnPHRhYmxlIGNlbGxzcGFjaW5nPSIw IiBjbGFzcz0ieC10b29sYmFyLWN0Ij48dGJvZHk+PHRyPjx0ZCBjbGFzcz0ieC10b29sYmFyLWxl ZnQiIGFsaWduPSJsZWZ0Ij48dGFibGUgY2VsbHNwYWNpbmc9IjAiPjx0Ym9keT48dHIgY2xhc3M9 IngtdG9vbGJhci1sZWZ0LXJvdyI+PC90cj48L3Rib2R5PjwvdGFibGU+PC90ZD48dGQgY2xhc3M9 IngtdG9vbGJhci1yaWdodCIgYWxpZ249InJpZ2h0Ij48dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNs YXNzPSJ4LXRvb2xiYXItcmlnaHQtY3QiPjx0Ym9keT48dHI+PHRkPjx0YWJsZSBjZWxsc3BhY2lu Zz0iMCI+PHRib2R5Pjx0ciBjbGFzcz0ieC10b29sYmFyLXJpZ2h0LXJvdyI+PC90cj48L3Rib2R5 PjwvdGFibGU+PC90ZD48dGQ+PHRhYmxlIGNlbGxzcGFjaW5nPSIwIj48dGJvZHk+PHRyIGNsYXNz PSJ4LXRvb2xiYXItZXh0cmFzLXJvdyI+PC90cj48L3Rib2R5PjwvdGFibGU+PC90ZD48L3RyPjwv dGJvZHk+PC90YWJsZT48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPicpO3RoaXMubGVmdFRyPWcu Y2hpbGQoInRyLngtdG9vbGJhci1sZWZ0LXJvdyIsdHJ1ZSk7dGhpcy5yaWdodFRyPWcuY2hpbGQo InRyLngtdG9vbGJhci1yaWdodC1yb3ciLHRydWUpO3RoaXMuZXh0cmFzVHI9Zy5jaGlsZCgidHIu eC10b29sYmFyLWV4dHJhcy1yb3ciLHRydWUpfXZhciBoPXRoaXMubGVmdFRyO3ZhciBsPTA7dmFy IGo9ZC5pdGVtcy5pdGVtcztmb3IodmFyIGI9MCxlPWoubGVuZ3RoLGs7YjxlO2IrKyxsKyspe2s9 altiXTtpZihrLmlzRmlsbCl7aD10aGlzLnJpZ2h0VHI7bD0tMX1lbHNle2lmKCFrLnJlbmRlcmVk KXtrLnJlbmRlcih0aGlzLmluc2VydENlbGwoayxoLGwpKX1lbHNle2lmKCFrLnh0YkhpZGRlbiYm IXRoaXMuaXNWYWxpZFBhcmVudChrLGguY2hpbGROb2Rlc1tsXSkpe3ZhciBhPXRoaXMuaW5zZXJ0 Q2VsbChrLGgsbCk7YS5hcHBlbmRDaGlsZChrLmdldERvbVBvc2l0aW9uRWwoKS5kb20pO2suY29u dGFpbmVyPUV4dC5nZXQoYSl9fX19dGhpcy5jbGVhbnVwKHRoaXMubGVmdFRyKTt0aGlzLmNsZWFu dXAodGhpcy5yaWdodFRyKTt0aGlzLmNsZWFudXAodGhpcy5leHRyYXNUcik7dGhpcy5maXRUb1Np emUoZyl9LGNsZWFudXA6ZnVuY3Rpb24oYil7dmFyIGU9Yi5jaGlsZE5vZGVzO2Zvcih2YXIgYT1l Lmxlbmd0aC0xLGQ7YT49MCYmKGQ9ZVthXSk7YS0tKXtpZighZC5maXJzdENoaWxkKXtiLnJlbW92 ZUNoaWxkKGQpfX19LGluc2VydENlbGw6ZnVuY3Rpb24oZSxhLGQpe3ZhciBiPWRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoInRkIik7Yi5jbGFzc05hbWU9IngtdG9vbGJhci1jZWxsIjthLmluc2VydEJl Zm9yZShiLGEuY2hpbGROb2Rlc1tkXXx8bnVsbCk7cmV0dXJuIGJ9LGhpZGVJdGVtOmZ1bmN0aW9u KGIpe3ZhciBhPSh0aGlzLmhpZGRlbnM9dGhpcy5oaWRkZW5zfHxbXSk7YS5wdXNoKGIpO2IueHRi SGlkZGVuPXRydWU7Yi54dGJXaWR0aD1iLmdldERvbVBvc2l0aW9uRWwoKS5kb20ucGFyZW50Tm9k ZS5vZmZzZXRXaWR0aDtiLmhpZGUoKX0sdW5oaWRlSXRlbTpmdW5jdGlvbihhKXthLnNob3coKTth Lnh0YkhpZGRlbj1mYWxzZTt0aGlzLmhpZGRlbnMucmVtb3ZlKGEpO2lmKHRoaXMuaGlkZGVucy5s ZW5ndGg8MSl7ZGVsZXRlIHRoaXMuaGlkZGVuc319LGdldEl0ZW1XaWR0aDpmdW5jdGlvbihhKXty ZXR1cm4gYS5oaWRkZW4/KGEueHRiV2lkdGh8fDApOmEuZ2V0RG9tUG9zaXRpb25FbCgpLmRvbS5w YXJlbnROb2RlLm9mZnNldFdpZHRofSxmaXRUb1NpemU6ZnVuY3Rpb24obil7aWYodGhpcy5jb250 YWluZXIuZW5hYmxlT3ZlcmZsb3c9PT1mYWxzZSl7cmV0dXJufXZhciBtPW4uZG9tLmNsaWVudFdp ZHRoO3ZhciBiPXRoaXMubGFzdFdpZHRofHwwO3RoaXMubGFzdFdpZHRoPW07dmFyIGQ9bi5kb20u Zmlyc3RDaGlsZC5vZmZzZXRXaWR0aDt2YXIgbD1tLXRoaXMudHJpZ2dlcldpZHRoO3ZhciBrPS0x O2lmKGQ+bXx8KHRoaXMuaGlkZGVucyYmbT49Yikpe3ZhciBlLGg9dGhpcy5jb250YWluZXIuaXRl bXMuaXRlbXMsZz1oLmxlbmd0aCxqO3ZhciBhPTA7Zm9yKGU9MDtlPGc7ZSsrKXtqPWhbZV07aWYo IWouaXNGaWxsKXthKz10aGlzLmdldEl0ZW1XaWR0aChqKTtpZihhPmwpe2lmKCFqLnh0YkhpZGRl bil7dGhpcy5oaWRlSXRlbShqKX19ZWxzZXtpZihqLnh0YkhpZGRlbil7dGhpcy51bmhpZGVJdGVt KGopfX19fX1pZih0aGlzLmhpZGRlbnMpe3RoaXMuaW5pdE1vcmUoKTtpZighdGhpcy5sYXN0T3Zl cmZsb3cpe3RoaXMuY29udGFpbmVyLmZpcmVFdmVudCgib3ZlcmZsb3djaGFuZ2UiLHRoaXMuY29u dGFpbmVyLHRydWUpO3RoaXMubGFzdE92ZXJmbG93PXRydWV9fWVsc2V7aWYodGhpcy5tb3JlKXt0 aGlzLmNsZWFyTWVudSgpO3RoaXMubW9yZS5kZXN0cm95KCk7ZGVsZXRlIHRoaXMubW9yZTtpZih0 aGlzLmxhc3RPdmVyZmxvdyl7dGhpcy5jb250YWluZXIuZmlyZUV2ZW50KCJvdmVyZmxvd2NoYW5n ZSIsdGhpcy5jb250YWluZXIsZmFsc2UpO3RoaXMubGFzdE92ZXJmbG93PWZhbHNlfX19fSxjcmVh dGVNZW51Q29uZmlnOmZ1bmN0aW9uKGUsYil7dmFyIGE9RXh0LmFwcGx5KHt9LGUuaW5pdGlhbENv bmZpZyksZD1lLnRvZ2dsZUdyb3VwO0V4dC5hcHBseShhLHt0ZXh0OmUub3ZlcmZsb3dUZXh0fHxl LnRleHQsaWNvbkNsczplLmljb25DbHMsaWNvbjplLmljb24saXRlbUlkOmUuaXRlbUlkLGRpc2Fi bGVkOmUuZGlzYWJsZWQsaGFuZGxlcjplLmhhbmRsZXIsc2NvcGU6ZS5zY29wZSxtZW51OmUubWVu dSxoaWRlT25DbGljazpifSk7aWYoZHx8ZS5lbmFibGVUb2dnbGUpe0V4dC5hcHBseShhLHtncm91 cDpkLGNoZWNrZWQ6ZS5wcmVzc2VkLGxpc3RlbmVyczp7Y2hlY2tjaGFuZ2U6ZnVuY3Rpb24oZyxj KXtlLnRvZ2dsZShjKX19fSl9ZGVsZXRlIGEueHR5cGU7ZGVsZXRlIGEuaWQ7cmV0dXJuIGF9LGFk ZENvbXBvbmVudFRvTWVudTpmdW5jdGlvbihhLGIpe2lmKGIgaW5zdGFuY2VvZiBFeHQuVG9vbGJh ci5TZXBhcmF0b3Ipe2EuYWRkKCItIil9ZWxzZXtpZihFeHQuaXNGdW5jdGlvbihiLmlzWFR5cGUp KXtpZihiLmlzWFR5cGUoInNwbGl0YnV0dG9uIikpe2EuYWRkKHRoaXMuY3JlYXRlTWVudUNvbmZp ZyhiLHRydWUpKX1lbHNle2lmKGIuaXNYVHlwZSgiYnV0dG9uIikpe2EuYWRkKHRoaXMuY3JlYXRl TWVudUNvbmZpZyhiLCFiLm1lbnUpKX1lbHNle2lmKGIuaXNYVHlwZSgiYnV0dG9uZ3JvdXAiKSl7 Yi5pdGVtcy5lYWNoKGZ1bmN0aW9uKGMpe3RoaXMuYWRkQ29tcG9uZW50VG9NZW51KGEsYyl9LHRo aXMpfX19fX19LGNsZWFyTWVudTpmdW5jdGlvbigpe3ZhciBhPXRoaXMubW9yZU1lbnU7aWYoYSYm YS5pdGVtcyl7dGhpcy5tb3JlTWVudS5pdGVtcy5lYWNoKGZ1bmN0aW9uKGIpe2RlbGV0ZSBiLm1l bnV9KX19LGJlZm9yZU1vcmVTaG93OmZ1bmN0aW9uKGIpe3ZhciBnPXRoaXMuY29udGFpbmVyLml0 ZW1zLml0ZW1zLGE9Zy5sZW5ndGgsayxqLGQ9ZnVuY3Rpb24oaCxjKXtyZXR1cm4gaC5pc1hUeXBl KCJidXR0b25ncm91cCIpJiYhKGMgaW5zdGFuY2VvZiBFeHQuVG9vbGJhci5TZXBhcmF0b3IpfTt0 aGlzLmNsZWFyTWVudSgpO2IucmVtb3ZlQWxsKCk7Zm9yKHZhciBlPTA7ZTxhO2UrKyl7az1nW2Vd O2lmKGsueHRiSGlkZGVuKXtpZihqJiYoZChrLGopfHxkKGosaykpKXtiLmFkZCgiLSIpfXRoaXMu YWRkQ29tcG9uZW50VG9NZW51KGIsayk7aj1rfX1pZihiLml0ZW1zLmxlbmd0aDwxKXtiLmFkZCh0 aGlzLm5vSXRlbXNNZW51VGV4dCl9fSxpbml0TW9yZTpmdW5jdGlvbigpe2lmKCF0aGlzLm1vcmUp e3RoaXMubW9yZU1lbnU9bmV3IEV4dC5tZW51Lk1lbnUoe2xpc3RlbmVyczp7YmVmb3Jlc2hvdzp0 aGlzLmJlZm9yZU1vcmVTaG93LHNjb3BlOnRoaXN9fSk7dGhpcy5tb3JlPW5ldyBFeHQuQnV0dG9u KHtpY29uQ2xzOiJ4LXRvb2xiYXItbW9yZS1pY29uIixjbHM6IngtdG9vbGJhci1tb3JlIixtZW51 OnRoaXMubW9yZU1lbnV9KTt2YXIgYT10aGlzLmluc2VydENlbGwodGhpcy5tb3JlLHRoaXMuZXh0 cmFzVHIsMTAwKTt0aGlzLm1vcmUucmVuZGVyKGEpfX0sZGVzdHJveTpmdW5jdGlvbigpe0V4dC5k ZXN0cm95KHRoaXMubW9yZSx0aGlzLm1vcmVNZW51KTtFeHQubGF5b3V0LlRvb2xiYXJMYXlvdXQu c3VwZXJjbGFzcy5kZXN0cm95LmNhbGwodGhpcyl9fSk7RXh0LkNvbnRhaW5lci5MQVlPVVRTLnRv b2xiYXI9RXh0LmxheW91dC5Ub29sYmFyTGF5b3V0O0V4dC5Ub29sYmFyPWZ1bmN0aW9uKGEpe2lm KEV4dC5pc0FycmF5KGEpKXthPXtpdGVtczphLGxheW91dDoidG9vbGJhciJ9fWVsc2V7YT1FeHQu YXBwbHkoe2xheW91dDoidG9vbGJhciJ9LGEpO2lmKGEuYnV0dG9ucyl7YS5pdGVtcz1hLmJ1dHRv bnN9fUV4dC5Ub29sYmFyLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpfTsoZnVu Y3Rpb24oKXt2YXIgYT1FeHQuVG9vbGJhcjtFeHQuZXh0ZW5kKGEsRXh0LkNvbnRhaW5lcix7ZGVm YXVsdFR5cGU6ImJ1dHRvbiIsdHJhY2tNZW51czp0cnVlLGludGVybmFsRGVmYXVsdHM6e3JlbW92 ZU1vZGU6ImNvbnRhaW5lciIsaGlkZVBhcmVudDp0cnVlfSx0b29sYmFyQ2xzOiJ4LXRvb2xiYXIi LGluaXRDb21wb25lbnQ6ZnVuY3Rpb24oKXthLnN1cGVyY2xhc3MuaW5pdENvbXBvbmVudC5jYWxs KHRoaXMpO3RoaXMuYWRkRXZlbnRzKCJvdmVyZmxvd2NoYW5nZSIpfSxvblJlbmRlcjpmdW5jdGlv bihjLGIpe2lmKCF0aGlzLmVsKXtpZighdGhpcy5hdXRvQ3JlYXRlKXt0aGlzLmF1dG9DcmVhdGU9 e2Nsczp0aGlzLnRvb2xiYXJDbHMrIiB4LXNtYWxsLWVkaXRvciJ9fXRoaXMuZWw9Yy5jcmVhdGVD aGlsZChFeHQuYXBwbHkoe2lkOnRoaXMuaWR9LHRoaXMuYXV0b0NyZWF0ZSksYil9fSxsb29rdXBD b21wb25lbnQ6ZnVuY3Rpb24oYil7aWYoRXh0LmlzU3RyaW5nKGIpKXtpZihiPT0iLSIpe2I9bmV3 IGEuU2VwYXJhdG9yKCl9ZWxzZXtpZihiPT0iICIpe2I9bmV3IGEuU3BhY2VyKCl9ZWxzZXtpZihi PT0iLT4iKXtiPW5ldyBhLkZpbGwoKX1lbHNle2I9bmV3IGEuVGV4dEl0ZW0oYil9fX10aGlzLmFw cGx5RGVmYXVsdHMoYil9ZWxzZXtpZihiLmlzRm9ybUZpZWxkfHxiLnJlbmRlcil7Yj10aGlzLmNv bnN0cnVjdEl0ZW0oYil9ZWxzZXtpZihiLnRhZyl7Yj1uZXcgYS5JdGVtKHthdXRvRWw6Yn0pfWVs c2V7aWYoYi50YWdOYW1lKXtiPW5ldyBhLkl0ZW0oe2VsOmJ9KX1lbHNle2lmKEV4dC5pc09iamVj dChiKSl7Yj1iLnh0eXBlP3RoaXMuY29uc3RydWN0SXRlbShiKTp0aGlzLmNvbnN0cnVjdEJ1dHRv bihiKX19fX19cmV0dXJuIGJ9LGFwcGx5RGVmYXVsdHM6ZnVuY3Rpb24oZSl7aWYoIUV4dC5pc1N0 cmluZyhlKSl7ZT1FeHQuVG9vbGJhci5zdXBlcmNsYXNzLmFwcGx5RGVmYXVsdHMuY2FsbCh0aGlz LGUpO3ZhciBiPXRoaXMuaW50ZXJuYWxEZWZhdWx0cztpZihlLmV2ZW50cyl7RXh0LmFwcGx5SWYo ZS5pbml0aWFsQ29uZmlnLGIpO0V4dC5hcHBseShlLGIpfWVsc2V7RXh0LmFwcGx5SWYoZSxiKX19 cmV0dXJuIGV9LGNvbnN0cnVjdEl0ZW06ZnVuY3Rpb24oYyxiKXtyZXR1cm4gRXh0LmNyZWF0ZShj LGJ8fHRoaXMuZGVmYXVsdFR5cGUpfSxhZGRTZXBhcmF0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp cy5hZGQobmV3IGEuU2VwYXJhdG9yKCkpfSxhZGRTcGFjZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp cy5hZGQobmV3IGEuU3BhY2VyKCkpfSxhZGRGaWxsOmZ1bmN0aW9uKCl7dGhpcy5hZGQobmV3IGEu RmlsbCgpKX0sYWRkRWxlbWVudDpmdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5hZGRJdGVtKG5ldyBh Lkl0ZW0oe2VsOmJ9KSl9LGFkZEl0ZW06ZnVuY3Rpb24oYil7cmV0dXJuIEV4dC5Ub29sYmFyLnN1 cGVyY2xhc3MuYWRkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYWRkQnV0dG9uOmZ1bmN0aW9uKGMp e2lmKEV4dC5pc0FycmF5KGMpKXt2YXIgZT1bXTtmb3IodmFyIGQ9MCxiPWMubGVuZ3RoO2Q8Yjtk Kyspe2UucHVzaCh0aGlzLmFkZEJ1dHRvbihjW2RdKSl9cmV0dXJuIGV9cmV0dXJuIHRoaXMuYWRk KHRoaXMuY29uc3RydWN0QnV0dG9uKGMpKX0sYWRkVGV4dDpmdW5jdGlvbihiKXtyZXR1cm4gdGhp cy5hZGRJdGVtKG5ldyBhLlRleHRJdGVtKGIpKX0sYWRkRG9tOmZ1bmN0aW9uKGIpe3JldHVybiB0 aGlzLmFkZChuZXcgYS5JdGVtKHthdXRvRWw6Yn0pKX0sYWRkRmllbGQ6ZnVuY3Rpb24oYil7cmV0 dXJuIHRoaXMuYWRkKGIpfSxpbnNlcnRCdXR0b246ZnVuY3Rpb24oYyxnKXtpZihFeHQuaXNBcnJh eShnKSl7dmFyIGU9W107Zm9yKHZhciBkPTAsYj1nLmxlbmd0aDtkPGI7ZCsrKXtlLnB1c2godGhp cy5pbnNlcnRCdXR0b24oYytkLGdbZF0pKX1yZXR1cm4gZX1yZXR1cm4gRXh0LlRvb2xiYXIuc3Vw ZXJjbGFzcy5pbnNlcnQuY2FsbCh0aGlzLGMsZyl9LGluaXRNZW51VHJhY2tpbmc6ZnVuY3Rpb24o Yil7aWYodGhpcy50cmFja01lbnVzJiZiLm1lbnUpe3RoaXMubW9uKGIse21lbnV0cmlnZ2Vyb3Zl cjp0aGlzLm9uQnV0dG9uVHJpZ2dlck92ZXIsbWVudXNob3c6dGhpcy5vbkJ1dHRvbk1lbnVTaG93 LG1lbnVoaWRlOnRoaXMub25CdXR0b25NZW51SGlkZSxzY29wZTp0aGlzfSl9fSxjb25zdHJ1Y3RC dXR0b246ZnVuY3Rpb24oZCl7dmFyIGM9ZC5ldmVudHM/ZDp0aGlzLmNvbnN0cnVjdEl0ZW0oZCxk LnNwbGl0PyJzcGxpdGJ1dHRvbiI6dGhpcy5kZWZhdWx0VHlwZSk7dGhpcy5pbml0TWVudVRyYWNr aW5nKGMpO3JldHVybiBjfSxvbkRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLml0ZW1zLmVhY2goZnVu Y3Rpb24oYil7aWYoYi5kaXNhYmxlKXtiLmRpc2FibGUoKX19KX0sb25FbmFibGU6ZnVuY3Rpb24o KXt0aGlzLml0ZW1zLmVhY2goZnVuY3Rpb24oYil7aWYoYi5lbmFibGUpe2IuZW5hYmxlKCl9fSl9 LG9uQnV0dG9uVHJpZ2dlck92ZXI6ZnVuY3Rpb24oYil7aWYodGhpcy5hY3RpdmVNZW51QnRuJiZ0 aGlzLmFjdGl2ZU1lbnVCdG4hPWIpe3RoaXMuYWN0aXZlTWVudUJ0bi5oaWRlTWVudSgpO2Iuc2hv d01lbnUoKTt0aGlzLmFjdGl2ZU1lbnVCdG49Yn19LG9uQnV0dG9uTWVudVNob3c6ZnVuY3Rpb24o Yil7dGhpcy5hY3RpdmVNZW51QnRuPWJ9LG9uQnV0dG9uTWVudUhpZGU6ZnVuY3Rpb24oYil7ZGVs ZXRlIHRoaXMuYWN0aXZlTWVudUJ0bn19KTtFeHQucmVnKCJ0b29sYmFyIixFeHQuVG9vbGJhcik7 YS5JdGVtPUV4dC5leHRlbmQoRXh0LkJveENvbXBvbmVudCx7aGlkZVBhcmVudDp0cnVlLGVuYWJs ZTpFeHQuZW1wdHlGbixkaXNhYmxlOkV4dC5lbXB0eUZuLGZvY3VzOkV4dC5lbXB0eUZufSk7RXh0 LnJlZygidGJpdGVtIixhLkl0ZW0pO2EuU2VwYXJhdG9yPUV4dC5leHRlbmQoYS5JdGVtLHtvblJl bmRlcjpmdW5jdGlvbihjLGIpe3RoaXMuZWw9Yy5jcmVhdGVDaGlsZCh7dGFnOiJzcGFuIixjbHM6 Inh0Yi1zZXAifSxiKX19KTtFeHQucmVnKCJ0YnNlcGFyYXRvciIsYS5TZXBhcmF0b3IpO2EuU3Bh Y2VyPUV4dC5leHRlbmQoYS5JdGVtLHtvblJlbmRlcjpmdW5jdGlvbihjLGIpe3RoaXMuZWw9Yy5j cmVhdGVDaGlsZCh7dGFnOiJkaXYiLGNsczoieHRiLXNwYWNlciIsc3R5bGU6dGhpcy53aWR0aD8i d2lkdGg6Iit0aGlzLndpZHRoKyJweCI6IiJ9LGIpfX0pO0V4dC5yZWcoInRic3BhY2VyIixhLlNw YWNlcik7YS5GaWxsPUV4dC5leHRlbmQoYS5JdGVtLHtyZW5kZXI6RXh0LmVtcHR5Rm4saXNGaWxs OnRydWV9KTtFeHQucmVnKCJ0YmZpbGwiLGEuRmlsbCk7YS5UZXh0SXRlbT1FeHQuZXh0ZW5kKGEu SXRlbSx7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYil7aWYoRXh0LmlzU3RyaW5nKGIpKXtiPXthdXRv RWw6e2NsczoieHRiLXRleHQiLGh0bWw6Yn19fWVsc2V7Yi5hdXRvRWw9e2NsczoieHRiLXRleHQi LGh0bWw6Yi50ZXh0fHwiIn19YS5UZXh0SXRlbS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwo dGhpcyxiKX0sc2V0VGV4dDpmdW5jdGlvbihiKXtpZih0aGlzLnJlbmRlcmVkKXt0aGlzLmVsLmRv bS5pbm5lckhUTUw9Yn1lbHNle3RoaXMuYXV0b0VsLmh0bWw9Yn19fSk7RXh0LnJlZygidGJ0ZXh0 IixhLlRleHRJdGVtKTthLkJ1dHRvbj1FeHQuZXh0ZW5kKEV4dC5CdXR0b24se30pO2EuU3BsaXRC dXR0b249RXh0LmV4dGVuZChFeHQuU3BsaXRCdXR0b24se30pO0V4dC5yZWcoInRiYnV0dG9uIixh LkJ1dHRvbik7RXh0LnJlZygidGJzcGxpdCIsYS5TcGxpdEJ1dHRvbil9KSgpO0V4dC5CdXR0b25H cm91cD1FeHQuZXh0ZW5kKEV4dC5QYW5lbCx7YmFzZUNsczoieC1idG4tZ3JvdXAiLGxheW91dDoi dGFibGUiLGRlZmF1bHRUeXBlOiJidXR0b24iLGZyYW1lOnRydWUsaW50ZXJuYWxEZWZhdWx0czp7 cmVtb3ZlTW9kZToiY29udGFpbmVyIixoaWRlUGFyZW50OnRydWV9LGluaXRDb21wb25lbnQ6ZnVu Y3Rpb24oKXt0aGlzLmxheW91dENvbmZpZz10aGlzLmxheW91dENvbmZpZ3x8e307RXh0LmFwcGx5 SWYodGhpcy5sYXlvdXRDb25maWcse2NvbHVtbnM6dGhpcy5jb2x1bW5zfSk7aWYoIXRoaXMudGl0 bGUpe3RoaXMuYWRkQ2xhc3MoIngtYnRuLWdyb3VwLW5vdGl0bGUiKX10aGlzLm9uKCJhZnRlcmxh eW91dCIsdGhpcy5vbkFmdGVyTGF5b3V0LHRoaXMpO0V4dC5CdXR0b25Hcm91cC5zdXBlcmNsYXNz LmluaXRDb21wb25lbnQuY2FsbCh0aGlzKX0sYXBwbHlEZWZhdWx0czpmdW5jdGlvbihiKXtiPUV4 dC5CdXR0b25Hcm91cC5zdXBlcmNsYXNzLmFwcGx5RGVmYXVsdHMuY2FsbCh0aGlzLGIpO3ZhciBh PXRoaXMuaW50ZXJuYWxEZWZhdWx0cztpZihiLmV2ZW50cyl7RXh0LmFwcGx5SWYoYi5pbml0aWFs Q29uZmlnLGEpO0V4dC5hcHBseShiLGEpfWVsc2V7RXh0LmFwcGx5SWYoYixhKX1yZXR1cm4gYn0s b25BZnRlckxheW91dDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuYm9keS5nZXRGcmFtZVdpZHRoKCJs ciIpK3RoaXMuYm9keS5kb20uZmlyc3RDaGlsZC5vZmZzZXRXaWR0aDt0aGlzLmJvZHkuc2V0V2lk dGgoYSk7dGhpcy5lbC5zZXRXaWR0aChhK3RoaXMuZ2V0RnJhbWVXaWR0aCgpKX19KTtFeHQucmVn KCJidXR0b25ncm91cCIsRXh0LkJ1dHRvbkdyb3VwKTsoZnVuY3Rpb24oKXt2YXIgYT1FeHQuVG9v bGJhcjtFeHQuUGFnaW5nVG9vbGJhcj1FeHQuZXh0ZW5kKEV4dC5Ub29sYmFyLHtwYWdlU2l6ZToy MCxkaXNwbGF5TXNnOiJEaXNwbGF5aW5nIHswfSAtIHsxfSBvZiB7Mn0iLGVtcHR5TXNnOiJObyBk YXRhIHRvIGRpc3BsYXkiLGJlZm9yZVBhZ2VUZXh0OiJQYWdlIixhZnRlclBhZ2VUZXh0OiJvZiB7 MH0iLGZpcnN0VGV4dDoiRmlyc3QgUGFnZSIscHJldlRleHQ6IlByZXZpb3VzIFBhZ2UiLG5leHRU ZXh0OiJOZXh0IFBhZ2UiLGxhc3RUZXh0OiJMYXN0IFBhZ2UiLHJlZnJlc2hUZXh0OiJSZWZyZXNo Iixpbml0Q29tcG9uZW50OmZ1bmN0aW9uKCl7dmFyIGM9W3RoaXMuZmlyc3Q9bmV3IGEuQnV0dG9u KHt0b29sdGlwOnRoaXMuZmlyc3RUZXh0LG92ZXJmbG93VGV4dDp0aGlzLmZpcnN0VGV4dCxpY29u Q2xzOiJ4LXRiYXItcGFnZS1maXJzdCIsZGlzYWJsZWQ6dHJ1ZSxoYW5kbGVyOnRoaXMubW92ZUZp cnN0LHNjb3BlOnRoaXN9KSx0aGlzLnByZXY9bmV3IGEuQnV0dG9uKHt0b29sdGlwOnRoaXMucHJl dlRleHQsb3ZlcmZsb3dUZXh0OnRoaXMucHJldlRleHQsaWNvbkNsczoieC10YmFyLXBhZ2UtcHJl diIsZGlzYWJsZWQ6dHJ1ZSxoYW5kbGVyOnRoaXMubW92ZVByZXZpb3VzLHNjb3BlOnRoaXN9KSwi LSIsdGhpcy5iZWZvcmVQYWdlVGV4dCx0aGlzLmlucHV0SXRlbT1uZXcgRXh0LmZvcm0uTnVtYmVy RmllbGQoe2NsczoieC10YmFyLXBhZ2UtbnVtYmVyIixhbGxvd0RlY2ltYWxzOmZhbHNlLGFsbG93 TmVnYXRpdmU6ZmFsc2UsZW5hYmxlS2V5RXZlbnRzOnRydWUsc2VsZWN0T25Gb2N1czp0cnVlLGxp c3RlbmVyczp7c2NvcGU6dGhpcyxrZXlkb3duOnRoaXMub25QYWdpbmdLZXlEb3duLGJsdXI6dGhp cy5vblBhZ2luZ0JsdXJ9fSksdGhpcy5hZnRlclRleHRJdGVtPW5ldyBhLlRleHRJdGVtKHt0ZXh0 OlN0cmluZy5mb3JtYXQodGhpcy5hZnRlclBhZ2VUZXh0LDEpfSksIi0iLHRoaXMubmV4dD1uZXcg YS5CdXR0b24oe3Rvb2x0aXA6dGhpcy5uZXh0VGV4dCxvdmVyZmxvd1RleHQ6dGhpcy5uZXh0VGV4 dCxpY29uQ2xzOiJ4LXRiYXItcGFnZS1uZXh0IixkaXNhYmxlZDp0cnVlLGhhbmRsZXI6dGhpcy5t b3ZlTmV4dCxzY29wZTp0aGlzfSksdGhpcy5sYXN0PW5ldyBhLkJ1dHRvbih7dG9vbHRpcDp0aGlz Lmxhc3RUZXh0LG92ZXJmbG93VGV4dDp0aGlzLmxhc3RUZXh0LGljb25DbHM6IngtdGJhci1wYWdl LWxhc3QiLGRpc2FibGVkOnRydWUsaGFuZGxlcjp0aGlzLm1vdmVMYXN0LHNjb3BlOnRoaXN9KSwi LSIsdGhpcy5yZWZyZXNoPW5ldyBhLkJ1dHRvbih7dG9vbHRpcDp0aGlzLnJlZnJlc2hUZXh0LG92 ZXJmbG93VGV4dDp0aGlzLnJlZnJlc2hUZXh0LGljb25DbHM6IngtdGJhci1sb2FkaW5nIixoYW5k bGVyOnRoaXMucmVmcmVzaCxzY29wZTp0aGlzfSldO3ZhciBiPXRoaXMuaXRlbXN8fHRoaXMuYnV0 dG9uc3x8W107aWYodGhpcy5wcmVwZW5kQnV0dG9ucyl7dGhpcy5pdGVtcz1iLmNvbmNhdChjKX1l bHNle3RoaXMuaXRlbXM9Yy5jb25jYXQoYil9ZGVsZXRlIHRoaXMuYnV0dG9ucztpZih0aGlzLmRp c3BsYXlJbmZvKXt0aGlzLml0ZW1zLnB1c2goIi0+Iik7dGhpcy5pdGVtcy5wdXNoKHRoaXMuZGlz cGxheUl0ZW09bmV3IGEuVGV4dEl0ZW0oe30pKX1FeHQuUGFnaW5nVG9vbGJhci5zdXBlcmNsYXNz LmluaXRDb21wb25lbnQuY2FsbCh0aGlzKTt0aGlzLmFkZEV2ZW50cygiY2hhbmdlIiwiYmVmb3Jl Y2hhbmdlIik7dGhpcy5vbigiYWZ0ZXJsYXlvdXQiLHRoaXMub25GaXJzdExheW91dCx0aGlzLHtz aW5nbGU6dHJ1ZX0pO3RoaXMuY3Vyc29yPTA7dGhpcy5iaW5kU3RvcmUodGhpcy5zdG9yZSl9LG9u Rmlyc3RMYXlvdXQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRzTG9hZGVkKXt0aGlzLm9uTG9hZC5hcHBs eSh0aGlzLHRoaXMuZHNMb2FkZWQpfX0sdXBkYXRlSW5mbzpmdW5jdGlvbigpe2lmKHRoaXMuZGlz cGxheUl0ZW0pe3ZhciBiPXRoaXMuc3RvcmUuZ2V0Q291bnQoKTt2YXIgYz1iPT0wP3RoaXMuZW1w dHlNc2c6U3RyaW5nLmZvcm1hdCh0aGlzLmRpc3BsYXlNc2csdGhpcy5jdXJzb3IrMSx0aGlzLmN1 cnNvcitiLHRoaXMuc3RvcmUuZ2V0VG90YWxDb3VudCgpKTt0aGlzLmRpc3BsYXlJdGVtLnNldFRl eHQoYyl9fSxvbkxvYWQ6ZnVuY3Rpb24oYixlLGope2lmKCF0aGlzLnJlbmRlcmVkKXt0aGlzLmRz TG9hZGVkPVtiLGUsal07cmV0dXJufXZhciBnPXRoaXMuZ2V0UGFyYW1zKCk7dGhpcy5jdXJzb3I9 KGoucGFyYW1zJiZqLnBhcmFtc1tnLnN0YXJ0XSk/ai5wYXJhbXNbZy5zdGFydF06MDt2YXIgaT10 aGlzLmdldFBhZ2VEYXRhKCksYz1pLmFjdGl2ZVBhZ2UsaD1pLnBhZ2VzO3RoaXMuYWZ0ZXJUZXh0 SXRlbS5zZXRUZXh0KFN0cmluZy5mb3JtYXQodGhpcy5hZnRlclBhZ2VUZXh0LGkucGFnZXMpKTt0 aGlzLmlucHV0SXRlbS5zZXRWYWx1ZShjKTt0aGlzLmZpcnN0LnNldERpc2FibGVkKGM9PTEpO3Ro aXMucHJldi5zZXREaXNhYmxlZChjPT0xKTt0aGlzLm5leHQuc2V0RGlzYWJsZWQoYz09aCk7dGhp cy5sYXN0LnNldERpc2FibGVkKGM9PWgpO3RoaXMucmVmcmVzaC5lbmFibGUoKTt0aGlzLnVwZGF0 ZUluZm8oKTt0aGlzLmZpcmVFdmVudCgiY2hhbmdlIix0aGlzLGkpfSxnZXRQYWdlRGF0YTpmdW5j dGlvbigpe3ZhciBiPXRoaXMuc3RvcmUuZ2V0VG90YWxDb3VudCgpO3JldHVybnt0b3RhbDpiLGFj dGl2ZVBhZ2U6TWF0aC5jZWlsKCh0aGlzLmN1cnNvcit0aGlzLnBhZ2VTaXplKS90aGlzLnBhZ2VT aXplKSxwYWdlczpiPHRoaXMucGFnZVNpemU/MTpNYXRoLmNlaWwoYi90aGlzLnBhZ2VTaXplKX19 LGNoYW5nZVBhZ2U6ZnVuY3Rpb24oYil7dGhpcy5kb0xvYWQoKChiLTEpKnRoaXMucGFnZVNpemUp LmNvbnN0cmFpbigwLHRoaXMuc3RvcmUuZ2V0VG90YWxDb3VudCgpKSl9LG9uTG9hZEVycm9yOmZ1 bmN0aW9uKCl7aWYoIXRoaXMucmVuZGVyZWQpe3JldHVybn10aGlzLnJlZnJlc2guZW5hYmxlKCl9 LHJlYWRQYWdlOmZ1bmN0aW9uKGUpe3ZhciBiPXRoaXMuaW5wdXRJdGVtLmdldFZhbHVlKCksYztp ZighYnx8aXNOYU4oYz1wYXJzZUludChiLDEwKSkpe3RoaXMuaW5wdXRJdGVtLnNldFZhbHVlKGUu YWN0aXZlUGFnZSk7cmV0dXJuIGZhbHNlfXJldHVybiBjfSxvblBhZ2luZ0ZvY3VzOmZ1bmN0aW9u KCl7dGhpcy5pbnB1dEl0ZW0uc2VsZWN0KCl9LG9uUGFnaW5nQmx1cjpmdW5jdGlvbihiKXt0aGlz LmlucHV0SXRlbS5zZXRWYWx1ZSh0aGlzLmdldFBhZ2VEYXRhKCkuYWN0aXZlUGFnZSl9LG9uUGFn aW5nS2V5RG93bjpmdW5jdGlvbihpLGgpe3ZhciBjPWguZ2V0S2V5KCksaj10aGlzLmdldFBhZ2VE YXRhKCksZztpZihjPT1oLlJFVFVSTil7aC5zdG9wRXZlbnQoKTtnPXRoaXMucmVhZFBhZ2Uoaik7 aWYoZyE9PWZhbHNlKXtnPU1hdGgubWluKE1hdGgubWF4KDEsZyksai5wYWdlcyktMTt0aGlzLmRv TG9hZChnKnRoaXMucGFnZVNpemUpfX1lbHNle2lmKGM9PWguSE9NRXx8Yz09aC5FTkQpe2guc3Rv cEV2ZW50KCk7Zz1jPT1oLkhPTUU/MTpqLnBhZ2VzO2kuc2V0VmFsdWUoZyl9ZWxzZXtpZihjPT1o LlVQfHxjPT1oLlBBR0VVUHx8Yz09aC5ET1dOfHxjPT1oLlBBR0VET1dOKXtoLnN0b3BFdmVudCgp O2lmKChnPXRoaXMucmVhZFBhZ2UoaikpKXt2YXIgYj1oLnNoaWZ0S2V5PzEwOjE7aWYoYz09aC5E T1dOfHxjPT1oLlBBR0VET1dOKXtiKj0tMX1nKz1iO2lmKGc+PTEmZzw9ai5wYWdlcyl7aS5zZXRW YWx1ZShnKX19fX19fSxnZXRQYXJhbXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJhbU5hbWVz fHx0aGlzLnN0b3JlLnBhcmFtTmFtZXN9LGJlZm9yZUxvYWQ6ZnVuY3Rpb24oKXtpZih0aGlzLnJl bmRlcmVkJiZ0aGlzLnJlZnJlc2gpe3RoaXMucmVmcmVzaC5kaXNhYmxlKCl9fSxkb0xvYWQ6ZnVu Y3Rpb24oZCl7dmFyIGM9e30sYj10aGlzLmdldFBhcmFtcygpO2NbYi5zdGFydF09ZDtjW2IubGlt aXRdPXRoaXMucGFnZVNpemU7aWYodGhpcy5maXJlRXZlbnQoImJlZm9yZWNoYW5nZSIsdGhpcyxj KSE9PWZhbHNlKXt0aGlzLnN0b3JlLmxvYWQoe3BhcmFtczpjfSl9fSxtb3ZlRmlyc3Q6ZnVuY3Rp b24oKXt0aGlzLmRvTG9hZCgwKX0sbW92ZVByZXZpb3VzOmZ1bmN0aW9uKCl7dGhpcy5kb0xvYWQo TWF0aC5tYXgoMCx0aGlzLmN1cnNvci10aGlzLnBhZ2VTaXplKSl9LG1vdmVOZXh0OmZ1bmN0aW9u KCl7dGhpcy5kb0xvYWQodGhpcy5jdXJzb3IrdGhpcy5wYWdlU2l6ZSl9LG1vdmVMYXN0OmZ1bmN0 aW9uKCl7dmFyIGM9dGhpcy5zdG9yZS5nZXRUb3RhbENvdW50KCksYj1jJXRoaXMucGFnZVNpemU7 dGhpcy5kb0xvYWQoYj8oYy1iKTpjLXRoaXMucGFnZVNpemUpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7 dGhpcy5kb0xvYWQodGhpcy5jdXJzb3IpfSxiaW5kU3RvcmU6ZnVuY3Rpb24oYyxkKXt2YXIgYjtp ZighZCYmdGhpcy5zdG9yZSl7dGhpcy5zdG9yZS51bigiYmVmb3JlbG9hZCIsdGhpcy5iZWZvcmVM b2FkLHRoaXMpO3RoaXMuc3RvcmUudW4oImxvYWQiLHRoaXMub25Mb2FkLHRoaXMpO3RoaXMuc3Rv cmUudW4oImV4Y2VwdGlvbiIsdGhpcy5vbkxvYWRFcnJvcix0aGlzKTtpZihjIT09dGhpcy5zdG9y ZSYmdGhpcy5zdG9yZS5hdXRvRGVzdHJveSl7dGhpcy5zdG9yZS5kZXN0cm95KCl9fWlmKGMpe2M9 RXh0LlN0b3JlTWdyLmxvb2t1cChjKTtjLm9uKHtzY29wZTp0aGlzLGJlZm9yZWxvYWQ6dGhpcy5i ZWZvcmVMb2FkLGxvYWQ6dGhpcy5vbkxvYWQsZXhjZXB0aW9uOnRoaXMub25Mb2FkRXJyb3J9KTti PWMuZ2V0Q291bnQoKT4wfXRoaXMuc3RvcmU9YztpZihiKXt0aGlzLm9uTG9hZChjLG51bGwse30p fX0sdW5iaW5kOmZ1bmN0aW9uKGIpe3RoaXMuYmluZFN0b3JlKG51bGwpfSxiaW5kOmZ1bmN0aW9u KGIpe3RoaXMuYmluZFN0b3JlKGIpfSxvbkRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmJpbmRTdG9y ZShudWxsKTtFeHQuUGFnaW5nVG9vbGJhci5zdXBlcmNsYXNzLm9uRGVzdHJveS5jYWxsKHRoaXMp fX0pfSkoKTtFeHQucmVnKCJwYWdpbmciLEV4dC5QYWdpbmdUb29sYmFyKTtFeHQuSGlzdG9yeT0o ZnVuY3Rpb24oKXt2YXIgZSxjO3ZhciBrPWZhbHNlO3ZhciBkO2Z1bmN0aW9uIGcoKXt2YXIgbD10 b3AubG9jYXRpb24uaHJlZixtPWwuaW5kZXhPZigiIyIpO3JldHVybiBtPj0wP2wuc3Vic3RyKG0r MSk6bnVsbH1mdW5jdGlvbiBhKCl7Yy52YWx1ZT1kfWZ1bmN0aW9uIGgobCl7ZD1sO0V4dC5IaXN0 b3J5LmZpcmVFdmVudCgiY2hhbmdlIixsKX1mdW5jdGlvbiBpKG0pe3ZhciBsPVsnPGh0bWw+PGJv ZHk+PGRpdiBpZD0ic3RhdGUiPicsbSwiPC9kaXY+PC9ib2R5PjwvaHRtbD4iXS5qb2luKCIiKTt0 cnl7dmFyIG89ZS5jb250ZW50V2luZG93LmRvY3VtZW50O28ub3BlbigpO28ud3JpdGUobCk7by5j bG9zZSgpO3JldHVybiB0cnVlfWNhdGNoKG4pe3JldHVybiBmYWxzZX19ZnVuY3Rpb24gYigpe2lm KCFlLmNvbnRlbnRXaW5kb3d8fCFlLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpe3NldFRpbWVvdXQo YiwxMCk7cmV0dXJufXZhciBvPWUuY29udGVudFdpbmRvdy5kb2N1bWVudDt2YXIgbT1vLmdldEVs ZW1lbnRCeUlkKCJzdGF0ZSIpO3ZhciBsPW0/bS5pbm5lclRleHQ6bnVsbDt2YXIgbj1nKCk7c2V0 SW50ZXJ2YWwoZnVuY3Rpb24oKXtvPWUuY29udGVudFdpbmRvdy5kb2N1bWVudDttPW8uZ2V0RWxl bWVudEJ5SWQoInN0YXRlIik7dmFyIHE9bT9tLmlubmVyVGV4dDpudWxsO3ZhciBwPWcoKTtpZihx IT09bCl7bD1xO2gobCk7dG9wLmxvY2F0aW9uLmhhc2g9bDtuPWw7YSgpfWVsc2V7aWYocCE9PW4p e249cDtpKHApfX19LDUwKTtrPXRydWU7RXh0Lkhpc3RvcnkuZmlyZUV2ZW50KCJyZWFkeSIsRXh0 Lkhpc3RvcnkpfWZ1bmN0aW9uIGooKXtkPWMudmFsdWU/Yy52YWx1ZTpnKCk7aWYoRXh0LmlzSUUp e2IoKX1lbHNle3ZhciBsPWcoKTtzZXRJbnRlcnZhbChmdW5jdGlvbigpe3ZhciBtPWcoKTtpZiht IT09bCl7bD1tO2gobCk7YSgpfX0sNTApO2s9dHJ1ZTtFeHQuSGlzdG9yeS5maXJlRXZlbnQoInJl YWR5IixFeHQuSGlzdG9yeSl9fXJldHVybntmaWVsZElkOiJ4LWhpc3RvcnktZmllbGQiLGlmcmFt ZUlkOiJ4LWhpc3RvcnktZnJhbWUiLGV2ZW50czp7fSxpbml0OmZ1bmN0aW9uKG0sbCl7aWYoayl7 RXh0LmNhbGxiYWNrKG0sbCxbdGhpc10pO3JldHVybn1pZighRXh0LmlzUmVhZHkpe0V4dC5vblJl YWR5KGZ1bmN0aW9uKCl7RXh0Lkhpc3RvcnkuaW5pdChtLGwpfSk7cmV0dXJufWM9RXh0LmdldERv bShFeHQuSGlzdG9yeS5maWVsZElkKTtpZihFeHQuaXNJRSl7ZT1FeHQuZ2V0RG9tKEV4dC5IaXN0 b3J5LmlmcmFtZUlkKX10aGlzLmFkZEV2ZW50cygicmVhZHkiLCJjaGFuZ2UiKTtpZihtKXt0aGlz Lm9uKCJyZWFkeSIsbSxsLHtzaW5nbGU6dHJ1ZX0pfWooKX0sYWRkOmZ1bmN0aW9uKGwsbSl7aWYo bSE9PWZhbHNlKXtpZih0aGlzLmdldFRva2VuKCk9PWwpe3JldHVybiB0cnVlfX1pZihFeHQuaXNJ RSl7cmV0dXJuIGkobCl9ZWxzZXt0b3AubG9jYXRpb24uaGFzaD1sO3JldHVybiB0cnVlfX0sYmFj azpmdW5jdGlvbigpe2hpc3RvcnkuZ28oLTEpfSxmb3J3YXJkOmZ1bmN0aW9uKCl7aGlzdG9yeS5n bygxKX0sZ2V0VG9rZW46ZnVuY3Rpb24oKXtyZXR1cm4gaz9kOmcoKX19fSkoKTtFeHQuYXBwbHko RXh0Lkhpc3RvcnksbmV3IEV4dC51dGlsLk9ic2VydmFibGUoKSk7RXh0LlRpcD1FeHQuZXh0ZW5k KEV4dC5QYW5lbCx7bWluV2lkdGg6NDAsbWF4V2lkdGg6MzAwLHNoYWRvdzoic2lkZXMiLGRlZmF1 bHRBbGlnbjoidGwtYmw/IixhdXRvUmVuZGVyOnRydWUscXVpY2tTaG93SW50ZXJ2YWw6MjUwLGZy YW1lOnRydWUsaGlkZGVuOnRydWUsYmFzZUNsczoieC10aXAiLGZsb2F0aW5nOntzaGFkb3c6dHJ1 ZSxzaGltOnRydWUsdXNlRGlzcGxheTp0cnVlLGNvbnN0cmFpbjpmYWxzZX0sYXV0b0hlaWdodDp0 cnVlLGNsb3NlQWN0aW9uOiJoaWRlIixpbml0Q29tcG9uZW50OmZ1bmN0aW9uKCl7RXh0LlRpcC5z dXBlcmNsYXNzLmluaXRDb21wb25lbnQuY2FsbCh0aGlzKTtpZih0aGlzLmNsb3NhYmxlJiYhdGhp cy50aXRsZSl7dGhpcy5lbGVtZW50cys9IixoZWFkZXIifX0sYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24o KXtFeHQuVGlwLnN1cGVyY2xhc3MuYWZ0ZXJSZW5kZXIuY2FsbCh0aGlzKTtpZih0aGlzLmNsb3Nh YmxlKXt0aGlzLmFkZFRvb2woe2lkOiJjbG9zZSIsaGFuZGxlcjp0aGlzW3RoaXMuY2xvc2VBY3Rp b25dLHNjb3BlOnRoaXN9KX19LHNob3dBdDpmdW5jdGlvbihhKXtFeHQuVGlwLnN1cGVyY2xhc3Mu c2hvdy5jYWxsKHRoaXMpO2lmKHRoaXMubWVhc3VyZVdpZHRoIT09ZmFsc2UmJighdGhpcy5pbml0 aWFsQ29uZmlnfHx0eXBlb2YgdGhpcy5pbml0aWFsQ29uZmlnLndpZHRoIT0ibnVtYmVyIikpe3Ro aXMuZG9BdXRvV2lkdGgoKX1pZih0aGlzLmNvbnN0cmFpblBvc2l0aW9uKXthPXRoaXMuZWwuYWRq dXN0Rm9yQ29uc3RyYWludHMoYSl9dGhpcy5zZXRQYWdlUG9zaXRpb24oYVswXSxhWzFdKX0sZG9B dXRvV2lkdGg6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJvZHkuZ2V0VGV4dFdpZHRoKCk7aWYodGhp cy50aXRsZSl7YT1NYXRoLm1heChhLHRoaXMuaGVhZGVyLmNoaWxkKCJzcGFuIikuZ2V0VGV4dFdp ZHRoKHRoaXMudGl0bGUpKX1hKz10aGlzLmdldEZyYW1lV2lkdGgoKSsodGhpcy5jbG9zYWJsZT8y MDowKSt0aGlzLmJvZHkuZ2V0UGFkZGluZygibHIiKTt0aGlzLnNldFdpZHRoKGEuY29uc3RyYWlu KHRoaXMubWluV2lkdGgsdGhpcy5tYXhXaWR0aCkpO2lmKEV4dC5pc0lFNyYmIXRoaXMucmVwYWlu dGVkKXt0aGlzLmVsLnJlcGFpbnQoKTt0aGlzLnJlcGFpbnRlZD10cnVlfX0sc2hvd0J5OmZ1bmN0 aW9uKGEsYil7aWYoIXRoaXMucmVuZGVyZWQpe3RoaXMucmVuZGVyKEV4dC5nZXRCb2R5KCkpfXRo aXMuc2hvd0F0KHRoaXMuZWwuZ2V0QWxpZ25Ub1hZKGEsYnx8dGhpcy5kZWZhdWx0QWxpZ24pKX0s aW5pdERyYWdnYWJsZTpmdW5jdGlvbigpe3RoaXMuZGQ9bmV3IEV4dC5UaXAuREQodGhpcyx0eXBl b2YgdGhpcy5kcmFnZ2FibGU9PSJib29sZWFuIj9udWxsOnRoaXMuZHJhZ2dhYmxlKTt0aGlzLmhl YWRlci5hZGRDbGFzcygieC10aXAtZHJhZ2dhYmxlIil9fSk7RXh0LlRpcC5ERD1mdW5jdGlvbihi LGEpe0V4dC5hcHBseSh0aGlzLGEpO3RoaXMudGlwPWI7RXh0LlRpcC5ERC5zdXBlcmNsYXNzLmNv bnN0cnVjdG9yLmNhbGwodGhpcyxiLmVsLmlkLCJXaW5kb3dERC0iK2IuaWQpO3RoaXMuc2V0SGFu ZGxlRWxJZChiLmhlYWRlci5pZCk7dGhpcy5zY3JvbGw9ZmFsc2V9O0V4dC5leHRlbmQoRXh0LlRp cC5ERCxFeHQuZGQuREQse21vdmVPbmx5OnRydWUsc2Nyb2xsOmZhbHNlLGhlYWRlck9mZnNldHM6 WzEwMCwyNV0sc3RhcnREcmFnOmZ1bmN0aW9uKCl7dGhpcy50aXAuZWwuZGlzYWJsZVNoYWRvdygp fSxlbmREcmFnOmZ1bmN0aW9uKGEpe3RoaXMudGlwLmVsLmVuYWJsZVNoYWRvdyh0cnVlKX19KTtF eHQuVG9vbFRpcD1FeHQuZXh0ZW5kKEV4dC5UaXAse3Nob3dEZWxheTo1MDAsaGlkZURlbGF5OjIw MCxkaXNtaXNzRGVsYXk6NTAwMCx0cmFja01vdXNlOmZhbHNlLGFuY2hvclRvVGFyZ2V0OnRydWUs YW5jaG9yT2Zmc2V0OjAsdGFyZ2V0Q291bnRlcjowLGNvbnN0cmFpblBvc2l0aW9uOmZhbHNlLGlu aXRDb21wb25lbnQ6ZnVuY3Rpb24oKXtFeHQuVG9vbFRpcC5zdXBlcmNsYXNzLmluaXRDb21wb25l bnQuY2FsbCh0aGlzKTt0aGlzLmxhc3RBY3RpdmU9bmV3IERhdGUoKTt0aGlzLmluaXRUYXJnZXQo dGhpcy50YXJnZXQpO3RoaXMub3JpZ0FuY2hvcj10aGlzLmFuY2hvcn0sb25SZW5kZXI6ZnVuY3Rp b24oYixhKXtFeHQuVG9vbFRpcC5zdXBlcmNsYXNzLm9uUmVuZGVyLmNhbGwodGhpcyxiLGEpO3Ro aXMuYW5jaG9yQ2xzPSJ4LXRpcC1hbmNob3ItIit0aGlzLmdldEFuY2hvclBvc2l0aW9uKCk7dGhp cy5hbmNob3JFbD10aGlzLmVsLmNyZWF0ZUNoaWxkKHtjbHM6IngtdGlwLWFuY2hvciAiK3RoaXMu YW5jaG9yQ2xzfSl9LGFmdGVyUmVuZGVyOmZ1bmN0aW9uKCl7RXh0LlRvb2xUaXAuc3VwZXJjbGFz cy5hZnRlclJlbmRlci5jYWxsKHRoaXMpO3RoaXMuYW5jaG9yRWwuc2V0U3R5bGUoInotaW5kZXgi LHRoaXMuZWwuZ2V0WkluZGV4KCkrMSl9LGluaXRUYXJnZXQ6ZnVuY3Rpb24oYil7dmFyIGE7aWYo KGE9RXh0LmdldChiKSkpe2lmKHRoaXMudGFyZ2V0KXt0aGlzLnRhcmdldD1FeHQuZ2V0KHRoaXMu dGFyZ2V0KTt0aGlzLnRhcmdldC51bigibW91c2VvdmVyIix0aGlzLm9uVGFyZ2V0T3Zlcix0aGlz KTt0aGlzLnRhcmdldC51bigibW91c2VvdXQiLHRoaXMub25UYXJnZXRPdXQsdGhpcyk7dGhpcy50 YXJnZXQudW4oIm1vdXNlbW92ZSIsdGhpcy5vbk1vdXNlTW92ZSx0aGlzKX10aGlzLm1vbihhLHtt b3VzZW92ZXI6dGhpcy5vblRhcmdldE92ZXIsbW91c2VvdXQ6dGhpcy5vblRhcmdldE91dCxtb3Vz ZW1vdmU6dGhpcy5vbk1vdXNlTW92ZSxzY29wZTp0aGlzfSk7dGhpcy50YXJnZXQ9YX1pZih0aGlz LmFuY2hvcil7dGhpcy5hbmNob3JUYXJnZXQ9dGhpcy50YXJnZXR9fSxvbk1vdXNlTW92ZTpmdW5j dGlvbihiKXt2YXIgYT10aGlzLmRlbGVnYXRlP2IuZ2V0VGFyZ2V0KHRoaXMuZGVsZWdhdGUpOnRo aXMudHJpZ2dlckVsZW1lbnQ9dHJ1ZTtpZihhKXt0aGlzLnRhcmdldFhZPWIuZ2V0WFkoKTtpZihh PT09dGhpcy50cmlnZ2VyRWxlbWVudCl7aWYoIXRoaXMuaGlkZGVuJiZ0aGlzLnRyYWNrTW91c2Up e3RoaXMuc2V0UGFnZVBvc2l0aW9uKHRoaXMuZ2V0VGFyZ2V0WFkoKSl9fWVsc2V7dGhpcy5oaWRl KCk7dGhpcy5sYXN0QWN0aXZlPW5ldyBEYXRlKDApO3RoaXMub25UYXJnZXRPdmVyKGIpfX1lbHNl e2lmKCF0aGlzLmNsb3NhYmxlJiZ0aGlzLmlzVmlzaWJsZSgpKXt0aGlzLmhpZGUoKX19fSxnZXRU YXJnZXRYWTpmdW5jdGlvbigpe2lmKHRoaXMuYW5jaG9yKXt0aGlzLnRhcmdldENvdW50ZXIrKzt2 YXIgYz10aGlzLmdldE9mZnNldHMoKTt2YXIgaj0odGhpcy5hbmNob3JUb1RhcmdldCYmIXRoaXMu dHJhY2tNb3VzZSk/dGhpcy5lbC5nZXRBbGlnblRvWFkodGhpcy5hbmNob3JUYXJnZXQsdGhpcy5n ZXRBbmNob3JBbGlnbigpKTp0aGlzLnRhcmdldFhZO3ZhciBhPUV4dC5saWIuRG9tLmdldFZpZXdX aWR0aCgpLTU7dmFyIGc9RXh0LmxpYi5Eb20uZ2V0Vmlld0hlaWdodCgpLTU7dmFyIGk9KGRvY3Vt ZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnR8 fDApKzU7dmFyIGg9KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fGRvY3VtZW50 LmJvZHkuc2Nyb2xsVG9wfHwwKSs1O3ZhciBiPVtqWzBdK2NbMF0salsxXStjWzFdXTt2YXIgZT10 aGlzLmdldFNpemUoKTt0aGlzLmFuY2hvckVsLnJlbW92ZUNsYXNzKHRoaXMuYW5jaG9yQ2xzKTtp Zih0aGlzLnRhcmdldENvdW50ZXI8Mil7aWYoYlswXTxpKXtpZih0aGlzLmFuY2hvclRvVGFyZ2V0 KXt0aGlzLmRlZmF1bHRBbGlnbj0ibC1yIjtpZih0aGlzLm1vdXNlT2Zmc2V0KXt0aGlzLm1vdXNl T2Zmc2V0WzBdKj0tMX19dGhpcy5hbmNob3I9ImxlZnQiO3JldHVybiB0aGlzLmdldFRhcmdldFhZ KCl9aWYoYlswXStlLndpZHRoPmEpe2lmKHRoaXMuYW5jaG9yVG9UYXJnZXQpe3RoaXMuZGVmYXVs dEFsaWduPSJyLWwiO2lmKHRoaXMubW91c2VPZmZzZXQpe3RoaXMubW91c2VPZmZzZXRbMF0qPS0x fX10aGlzLmFuY2hvcj0icmlnaHQiO3JldHVybiB0aGlzLmdldFRhcmdldFhZKCl9aWYoYlsxXTxo KXtpZih0aGlzLmFuY2hvclRvVGFyZ2V0KXt0aGlzLmRlZmF1bHRBbGlnbj0idC1iIjtpZih0aGlz Lm1vdXNlT2Zmc2V0KXt0aGlzLm1vdXNlT2Zmc2V0WzFdKj0tMX19dGhpcy5hbmNob3I9InRvcCI7 cmV0dXJuIHRoaXMuZ2V0VGFyZ2V0WFkoKX1pZihiWzFdK2UuaGVpZ2h0Pmcpe2lmKHRoaXMuYW5j aG9yVG9UYXJnZXQpe3RoaXMuZGVmYXVsdEFsaWduPSJiLXQiO2lmKHRoaXMubW91c2VPZmZzZXQp e3RoaXMubW91c2VPZmZzZXRbMV0qPS0xfX10aGlzLmFuY2hvcj0iYm90dG9tIjtyZXR1cm4gdGhp cy5nZXRUYXJnZXRYWSgpfX10aGlzLmFuY2hvckNscz0ieC10aXAtYW5jaG9yLSIrdGhpcy5nZXRB bmNob3JQb3NpdGlvbigpO3RoaXMuYW5jaG9yRWwuYWRkQ2xhc3ModGhpcy5hbmNob3JDbHMpO3Ro aXMudGFyZ2V0Q291bnRlcj0wO3JldHVybiBifWVsc2V7dmFyIGQ9dGhpcy5nZXRNb3VzZU9mZnNl dCgpO3JldHVyblt0aGlzLnRhcmdldFhZWzBdK2RbMF0sdGhpcy50YXJnZXRYWVsxXStkWzFdXX19 LGdldE1vdXNlT2Zmc2V0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5hbmNob3I/WzAsMF06WzE1LDE4 XTtpZih0aGlzLm1vdXNlT2Zmc2V0KXthWzBdKz10aGlzLm1vdXNlT2Zmc2V0WzBdO2FbMV0rPXRo aXMubW91c2VPZmZzZXRbMV19cmV0dXJuIGF9LGdldEFuY2hvclBvc2l0aW9uOmZ1bmN0aW9uKCl7 aWYodGhpcy5hbmNob3Ipe3RoaXMudGlwQW5jaG9yPXRoaXMuYW5jaG9yLmNoYXJBdCgwKX1lbHNl e3ZhciBhPXRoaXMuZGVmYXVsdEFsaWduLm1hdGNoKC9eKFthLXpdKyktKFthLXpdKykoXD8pPyQv KTtpZighYSl7dGhyb3ciQW5jaG9yVGlwLmRlZmF1bHRBbGlnbiBpcyBpbnZhbGlkIn10aGlzLnRp cEFuY2hvcj1hWzFdLmNoYXJBdCgwKX1zd2l0Y2godGhpcy50aXBBbmNob3Ipe2Nhc2UidCI6cmV0 dXJuInRvcCI7Y2FzZSJiIjpyZXR1cm4iYm90dG9tIjtjYXNlInIiOnJldHVybiJyaWdodCJ9cmV0 dXJuImxlZnQifSxnZXRBbmNob3JBbGlnbjpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmFuY2hvcil7 Y2FzZSJ0b3AiOnJldHVybiJ0bC1ibCI7Y2FzZSJsZWZ0IjpyZXR1cm4idGwtdHIiO2Nhc2Uicmln aHQiOnJldHVybiJ0ci10bCI7ZGVmYXVsdDpyZXR1cm4iYmwtdGwifX0sZ2V0T2Zmc2V0czpmdW5j dGlvbigpe3ZhciBiLGE9dGhpcy5nZXRBbmNob3JQb3NpdGlvbigpLmNoYXJBdCgwKTtpZih0aGlz LmFuY2hvclRvVGFyZ2V0JiYhdGhpcy50cmFja01vdXNlKXtzd2l0Y2goYSl7Y2FzZSJ0IjpiPVsw LDldO2JyZWFrO2Nhc2UiYiI6Yj1bMCwtMTNdO2JyZWFrO2Nhc2UiciI6Yj1bLTEzLDBdO2JyZWFr O2RlZmF1bHQ6Yj1bOSwwXTticmVha319ZWxzZXtzd2l0Y2goYSl7Y2FzZSJ0IjpiPVstMTUtdGhp cy5hbmNob3JPZmZzZXQsMzBdO2JyZWFrO2Nhc2UiYiI6Yj1bLTE5LXRoaXMuYW5jaG9yT2Zmc2V0 LC0xMy10aGlzLmVsLmRvbS5vZmZzZXRIZWlnaHRdO2JyZWFrO2Nhc2UiciI6Yj1bLTE1LXRoaXMu ZWwuZG9tLm9mZnNldFdpZHRoLC0xMy10aGlzLmFuY2hvck9mZnNldF07YnJlYWs7ZGVmYXVsdDpi PVsyNSwtMTMtdGhpcy5hbmNob3JPZmZzZXRdO2JyZWFrfX12YXIgYz10aGlzLmdldE1vdXNlT2Zm c2V0KCk7YlswXSs9Y1swXTtiWzFdKz1jWzFdO3JldHVybiBifSxvblRhcmdldE92ZXI6ZnVuY3Rp b24oYil7aWYodGhpcy5kaXNhYmxlZHx8Yi53aXRoaW4odGhpcy50YXJnZXQuZG9tLHRydWUpKXty ZXR1cm59dmFyIGE9Yi5nZXRUYXJnZXQodGhpcy5kZWxlZ2F0ZSk7aWYoYSl7dGhpcy50cmlnZ2Vy RWxlbWVudD1hO3RoaXMuY2xlYXJUaW1lcigiaGlkZSIpO3RoaXMudGFyZ2V0WFk9Yi5nZXRYWSgp O3RoaXMuZGVsYXlTaG93KCl9fSxkZWxheVNob3c6ZnVuY3Rpb24oKXtpZih0aGlzLmhpZGRlbiYm IXRoaXMuc2hvd1RpbWVyKXtpZih0aGlzLmxhc3RBY3RpdmUuZ2V0RWxhcHNlZCgpPHRoaXMucXVp Y2tTaG93SW50ZXJ2YWwpe3RoaXMuc2hvdygpfWVsc2V7dGhpcy5zaG93VGltZXI9dGhpcy5zaG93 LmRlZmVyKHRoaXMuc2hvd0RlbGF5LHRoaXMpfX1lbHNle2lmKCF0aGlzLmhpZGRlbiYmdGhpcy5h dXRvSGlkZSE9PWZhbHNlKXt0aGlzLnNob3coKX19fSxvblRhcmdldE91dDpmdW5jdGlvbihhKXtp Zih0aGlzLmRpc2FibGVkfHxhLndpdGhpbih0aGlzLnRhcmdldC5kb20sdHJ1ZSkpe3JldHVybn10 aGlzLmNsZWFyVGltZXIoInNob3ciKTtpZih0aGlzLmF1dG9IaWRlIT09ZmFsc2Upe3RoaXMuZGVs YXlIaWRlKCl9fSxkZWxheUhpZGU6ZnVuY3Rpb24oKXtpZighdGhpcy5oaWRkZW4mJiF0aGlzLmhp ZGVUaW1lcil7dGhpcy5oaWRlVGltZXI9dGhpcy5oaWRlLmRlZmVyKHRoaXMuaGlkZURlbGF5LHRo aXMpfX0saGlkZTpmdW5jdGlvbigpe3RoaXMuY2xlYXJUaW1lcigiZGlzbWlzcyIpO3RoaXMubGFz dEFjdGl2ZT1uZXcgRGF0ZSgpO2lmKHRoaXMuYW5jaG9yRWwpe3RoaXMuYW5jaG9yRWwuaGlkZSgp fUV4dC5Ub29sVGlwLnN1cGVyY2xhc3MuaGlkZS5jYWxsKHRoaXMpO2RlbGV0ZSB0aGlzLnRyaWdn ZXJFbGVtZW50fSxzaG93OmZ1bmN0aW9uKCl7aWYodGhpcy5hbmNob3Ipe3RoaXMuc2hvd0F0KFst MTAwMCwtMTAwMF0pO3RoaXMub3JpZ0NvbnN0cmFpblBvc2l0aW9uPXRoaXMuY29uc3RyYWluUG9z aXRpb247dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj1mYWxzZTt0aGlzLmFuY2hvcj10aGlzLm9yaWdB bmNob3J9dGhpcy5zaG93QXQodGhpcy5nZXRUYXJnZXRYWSgpKTtpZih0aGlzLmFuY2hvcil7dGhp cy5zeW5jQW5jaG9yKCk7dGhpcy5hbmNob3JFbC5zaG93KCk7dGhpcy5jb25zdHJhaW5Qb3NpdGlv bj10aGlzLm9yaWdDb25zdHJhaW5Qb3NpdGlvbn1lbHNle3RoaXMuYW5jaG9yRWwuaGlkZSgpfX0s c2hvd0F0OmZ1bmN0aW9uKGEpe3RoaXMubGFzdEFjdGl2ZT1uZXcgRGF0ZSgpO3RoaXMuY2xlYXJU aW1lcnMoKTtFeHQuVG9vbFRpcC5zdXBlcmNsYXNzLnNob3dBdC5jYWxsKHRoaXMsYSk7aWYodGhp cy5kaXNtaXNzRGVsYXkmJnRoaXMuYXV0b0hpZGUhPT1mYWxzZSl7dGhpcy5kaXNtaXNzVGltZXI9 dGhpcy5oaWRlLmRlZmVyKHRoaXMuZGlzbWlzc0RlbGF5LHRoaXMpfX0sc3luY0FuY2hvcjpmdW5j dGlvbigpe3ZhciBhLGIsYztzd2l0Y2godGhpcy50aXBBbmNob3IuY2hhckF0KDApKXtjYXNlInQi OmE9ImIiO2I9InRsIjtjPVsyMCt0aGlzLmFuY2hvck9mZnNldCwyXTticmVhaztjYXNlInIiOmE9 ImwiO2I9InRyIjtjPVstMiwxMSt0aGlzLmFuY2hvck9mZnNldF07YnJlYWs7Y2FzZSJiIjphPSJ0 IjtiPSJibCI7Yz1bMjArdGhpcy5hbmNob3JPZmZzZXQsLTJdO2JyZWFrO2RlZmF1bHQ6YT0iciI7 Yj0idGwiO2M9WzIsMTErdGhpcy5hbmNob3JPZmZzZXRdO2JyZWFrfXRoaXMuYW5jaG9yRWwuYWxp Z25Ubyh0aGlzLmVsLGErIi0iK2IsYyl9LHNldFBhZ2VQb3NpdGlvbjpmdW5jdGlvbihhLGIpe0V4 dC5Ub29sVGlwLnN1cGVyY2xhc3Muc2V0UGFnZVBvc2l0aW9uLmNhbGwodGhpcyxhLGIpO2lmKHRo aXMuYW5jaG9yKXt0aGlzLnN5bmNBbmNob3IoKX19LGNsZWFyVGltZXI6ZnVuY3Rpb24oYSl7YT1h KyJUaW1lciI7Y2xlYXJUaW1lb3V0KHRoaXNbYV0pO2RlbGV0ZSB0aGlzW2FdfSxjbGVhclRpbWVy czpmdW5jdGlvbigpe3RoaXMuY2xlYXJUaW1lcigic2hvdyIpO3RoaXMuY2xlYXJUaW1lcigiZGlz bWlzcyIpO3RoaXMuY2xlYXJUaW1lcigiaGlkZSIpfSxvblNob3c6ZnVuY3Rpb24oKXtFeHQuVG9v bFRpcC5zdXBlcmNsYXNzLm9uU2hvdy5jYWxsKHRoaXMpO0V4dC5nZXREb2MoKS5vbigibW91c2Vk b3duIix0aGlzLm9uRG9jTW91c2VEb3duLHRoaXMpfSxvbkhpZGU6ZnVuY3Rpb24oKXtFeHQuVG9v bFRpcC5zdXBlcmNsYXNzLm9uSGlkZS5jYWxsKHRoaXMpO0V4dC5nZXREb2MoKS51bigibW91c2Vk b3duIix0aGlzLm9uRG9jTW91c2VEb3duLHRoaXMpfSxvbkRvY01vdXNlRG93bjpmdW5jdGlvbihh KXtpZih0aGlzLmF1dG9IaWRlIT09dHJ1ZSYmIXRoaXMuY2xvc2FibGUmJiFhLndpdGhpbih0aGlz LmVsLmRvbSkpe3RoaXMuZGlzYWJsZSgpO3RoaXMuZW5hYmxlLmRlZmVyKDEwMCx0aGlzKX19LG9u RGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuY2xlYXJUaW1lcnMoKTt0aGlzLmhpZGUoKX0sYWRqdXN0 UG9zaXRpb246ZnVuY3Rpb24oYSxkKXtpZih0aGlzLmNvbnRzdHJhaW5Qb3NpdGlvbil7dmFyIGM9 dGhpcy50YXJnZXRYWVsxXSxiPXRoaXMuZ2V0U2l6ZSgpLmhlaWdodDtpZihkPD1jJiYoZCtiKT49 Yyl7ZD1jLWItNX19cmV0dXJue3g6YSx5OmR9fSxvbkRlc3Ryb3k6ZnVuY3Rpb24oKXtFeHQuZ2V0 RG9jKCkudW4oIm1vdXNlZG93biIsdGhpcy5vbkRvY01vdXNlRG93bix0aGlzKTtFeHQuVG9vbFRp cC5zdXBlcmNsYXNzLm9uRGVzdHJveS5jYWxsKHRoaXMpfX0pO0V4dC5RdWlja1RpcD1FeHQuZXh0 ZW5kKEV4dC5Ub29sVGlwLHtpbnRlcmNlcHRUaXRsZXM6ZmFsc2UsdGFnQ29uZmlnOntuYW1lc3Bh Y2U6ImV4dCIsYXR0cmlidXRlOiJxdGlwIix3aWR0aDoicXdpZHRoIix0YXJnZXQ6InRhcmdldCIs dGl0bGU6InF0aXRsZSIsaGlkZToiaGlkZSIsY2xzOiJxY2xhc3MiLGFsaWduOiJxYWxpZ24iLGFu Y2hvcjoiYW5jaG9yIn0saW5pdENvbXBvbmVudDpmdW5jdGlvbigpe3RoaXMudGFyZ2V0PXRoaXMu dGFyZ2V0fHxFeHQuZ2V0RG9jKCk7dGhpcy50YXJnZXRzPXRoaXMudGFyZ2V0c3x8e307RXh0LlF1 aWNrVGlwLnN1cGVyY2xhc3MuaW5pdENvbXBvbmVudC5jYWxsKHRoaXMpfSxyZWdpc3RlcjpmdW5j dGlvbihlKXt2YXIgaD1FeHQuaXNBcnJheShlKT9lOmFyZ3VtZW50cztmb3IodmFyIGc9MCxhPWgu bGVuZ3RoO2c8YTtnKyspe3ZhciBsPWhbZ107dmFyIGs9bC50YXJnZXQ7aWYoayl7aWYoRXh0Lmlz QXJyYXkoaykpe2Zvcih2YXIgZD0wLGI9ay5sZW5ndGg7ZDxiO2QrKyl7dGhpcy50YXJnZXRzW0V4 dC5pZChrW2RdKV09bH19ZWxzZXt0aGlzLnRhcmdldHNbRXh0LmlkKGspXT1sfX19fSx1bnJlZ2lz dGVyOmZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLnRhcmdldHNbRXh0LmlkKGEpXX0sY2FuY2VsU2hv dzpmdW5jdGlvbihiKXt2YXIgYT10aGlzLmFjdGl2ZVRhcmdldDtiPUV4dC5nZXQoYikuZG9tO2lm KHRoaXMuaXNWaXNpYmxlKCkpe2lmKGEmJmEuZWw9PWIpe3RoaXMuaGlkZSgpfX1lbHNle2lmKGEm JmEuZWw9PWIpe3RoaXMuY2xlYXJUaW1lcigic2hvdyIpfX19LG9uVGFyZ2V0T3ZlcjpmdW5jdGlv bihpKXtpZih0aGlzLmRpc2FibGVkKXtyZXR1cm59dGhpcy50YXJnZXRYWT1pLmdldFhZKCk7dmFy IGM9aS5nZXRUYXJnZXQoKTtpZighY3x8Yy5ub2RlVHlwZSE9PTF8fGM9PWRvY3VtZW50fHxjPT1k b2N1bWVudC5ib2R5KXtyZXR1cm59aWYodGhpcy5hY3RpdmVUYXJnZXQmJmM9PXRoaXMuYWN0aXZl VGFyZ2V0LmVsKXt0aGlzLmNsZWFyVGltZXIoImhpZGUiKTt0aGlzLnNob3coKTtyZXR1cm59aWYo YyYmdGhpcy50YXJnZXRzW2MuaWRdKXt0aGlzLmFjdGl2ZVRhcmdldD10aGlzLnRhcmdldHNbYy5p ZF07dGhpcy5hY3RpdmVUYXJnZXQuZWw9Yzt0aGlzLmFuY2hvcj10aGlzLmFjdGl2ZVRhcmdldC5h bmNob3I7aWYodGhpcy5hbmNob3Ipe3RoaXMuYW5jaG9yVGFyZ2V0PWN9dGhpcy5kZWxheVNob3co KTtyZXR1cm59dmFyIGcsaD1FeHQuZmx5KGMpLGI9dGhpcy50YWdDb25maWc7dmFyIGQ9Yi5uYW1l c3BhY2U7aWYodGhpcy5pbnRlcmNlcHRUaXRsZXMmJmMudGl0bGUpe2c9Yy50aXRsZTtjLnF0aXA9 ZztjLnJlbW92ZUF0dHJpYnV0ZSgidGl0bGUiKTtpLnByZXZlbnREZWZhdWx0KCl9ZWxzZXtnPWMu cXRpcHx8aC5nZXRBdHRyaWJ1dGUoYi5hdHRyaWJ1dGUsZCl9aWYoZyl7dmFyIGE9aC5nZXRBdHRy aWJ1dGUoYi5oaWRlLGQpO3RoaXMuYWN0aXZlVGFyZ2V0PXtlbDpjLHRleHQ6Zyx3aWR0aDpoLmdl dEF0dHJpYnV0ZShiLndpZHRoLGQpLGF1dG9IaWRlOmEhPSJ1c2VyIiYmYSE9PSJmYWxzZSIsdGl0 bGU6aC5nZXRBdHRyaWJ1dGUoYi50aXRsZSxkKSxjbHM6aC5nZXRBdHRyaWJ1dGUoYi5jbHMsZCks YWxpZ246aC5nZXRBdHRyaWJ1dGUoYi5hbGlnbixkKX07dGhpcy5hbmNob3I9aC5nZXRBdHRyaWJ1 dGUoYi5hbmNob3IsZCk7aWYodGhpcy5hbmNob3Ipe3RoaXMuYW5jaG9yVGFyZ2V0PWN9dGhpcy5k ZWxheVNob3coKX19LG9uVGFyZ2V0T3V0OmZ1bmN0aW9uKGEpe3RoaXMuY2xlYXJUaW1lcigic2hv dyIpO2lmKHRoaXMuYXV0b0hpZGUhPT1mYWxzZSl7dGhpcy5kZWxheUhpZGUoKX19LHNob3dBdDpm dW5jdGlvbihiKXt2YXIgYT10aGlzLmFjdGl2ZVRhcmdldDtpZihhKXtpZighdGhpcy5yZW5kZXJl ZCl7dGhpcy5yZW5kZXIoRXh0LmdldEJvZHkoKSk7dGhpcy5hY3RpdmVUYXJnZXQ9YX1pZihhLndp ZHRoKXt0aGlzLnNldFdpZHRoKGEud2lkdGgpO3RoaXMuYm9keS5zZXRXaWR0aCh0aGlzLmFkanVz dEJvZHlXaWR0aChhLndpZHRoLXRoaXMuZ2V0RnJhbWVXaWR0aCgpKSk7dGhpcy5tZWFzdXJlV2lk dGg9ZmFsc2V9ZWxzZXt0aGlzLm1lYXN1cmVXaWR0aD10cnVlfXRoaXMuc2V0VGl0bGUoYS50aXRs ZXx8IiIpO3RoaXMuYm9keS51cGRhdGUoYS50ZXh0KTt0aGlzLmF1dG9IaWRlPWEuYXV0b0hpZGU7 dGhpcy5kaXNtaXNzRGVsYXk9YS5kaXNtaXNzRGVsYXl8fHRoaXMuZGlzbWlzc0RlbGF5O2lmKHRo aXMubGFzdENscyl7dGhpcy5lbC5yZW1vdmVDbGFzcyh0aGlzLmxhc3RDbHMpO2RlbGV0ZSB0aGlz Lmxhc3RDbHN9aWYoYS5jbHMpe3RoaXMuZWwuYWRkQ2xhc3MoYS5jbHMpO3RoaXMubGFzdENscz1h LmNsc31pZih0aGlzLmFuY2hvcil7dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj1mYWxzZX1lbHNle2lm KGEuYWxpZ24pe2I9dGhpcy5lbC5nZXRBbGlnblRvWFkoYS5lbCxhLmFsaWduKTt0aGlzLmNvbnN0 cmFpblBvc2l0aW9uPWZhbHNlfWVsc2V7dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj10cnVlfX19RXh0 LlF1aWNrVGlwLnN1cGVyY2xhc3Muc2hvd0F0LmNhbGwodGhpcyxiKX0saGlkZTpmdW5jdGlvbigp e2RlbGV0ZSB0aGlzLmFjdGl2ZVRhcmdldDtFeHQuUXVpY2tUaXAuc3VwZXJjbGFzcy5oaWRlLmNh bGwodGhpcyl9fSk7RXh0LlF1aWNrVGlwcz1mdW5jdGlvbigpe3ZhciBiLGE9W107cmV0dXJue2lu aXQ6ZnVuY3Rpb24oYyl7aWYoIWIpe2lmKCFFeHQuaXNSZWFkeSl7RXh0Lm9uUmVhZHkoZnVuY3Rp b24oKXtFeHQuUXVpY2tUaXBzLmluaXQoYyl9KTtyZXR1cm59Yj1uZXcgRXh0LlF1aWNrVGlwKHtl bGVtZW50czoiaGVhZGVyLGJvZHkifSk7aWYoYyE9PWZhbHNlKXtiLnJlbmRlcihFeHQuZ2V0Qm9k eSgpKX19fSxlbmFibGU6ZnVuY3Rpb24oKXtpZihiKXthLnBvcCgpO2lmKGEubGVuZ3RoPDEpe2Iu ZW5hYmxlKCl9fX0sZGlzYWJsZTpmdW5jdGlvbigpe2lmKGIpe2IuZGlzYWJsZSgpfWEucHVzaCgx KX0saXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGIhPT11bmRlZmluZWQmJiFiLmRpc2FibGVk fSxnZXRRdWlja1RpcDpmdW5jdGlvbigpe3JldHVybiBifSxyZWdpc3RlcjpmdW5jdGlvbigpe2Iu cmVnaXN0ZXIuYXBwbHkoYixhcmd1bWVudHMpfSx1bnJlZ2lzdGVyOmZ1bmN0aW9uKCl7Yi51bnJl Z2lzdGVyLmFwcGx5KGIsYXJndW1lbnRzKX0sdGlwczpmdW5jdGlvbigpe2IucmVnaXN0ZXIuYXBw bHkoYixhcmd1bWVudHMpfX19KCk7RXh0LnRyZWUuVHJlZVBhbmVsPUV4dC5leHRlbmQoRXh0LlBh bmVsLHtyb290VmlzaWJsZTp0cnVlLGFuaW1hdGU6RXh0LmVuYWJsZUZ4LGxpbmVzOnRydWUsZW5h YmxlREQ6ZmFsc2UsaGxEcm9wOkV4dC5lbmFibGVGeCxwYXRoU2VwYXJhdG9yOiIvIixpbml0Q29t cG9uZW50OmZ1bmN0aW9uKCl7RXh0LnRyZWUuVHJlZVBhbmVsLnN1cGVyY2xhc3MuaW5pdENvbXBv bmVudC5jYWxsKHRoaXMpO2lmKCF0aGlzLmV2ZW50TW9kZWwpe3RoaXMuZXZlbnRNb2RlbD1uZXcg RXh0LnRyZWUuVHJlZUV2ZW50TW9kZWwodGhpcyl9dmFyIGE9dGhpcy5sb2FkZXI7aWYoIWEpe2E9 bmV3IEV4dC50cmVlLlRyZWVMb2FkZXIoe2RhdGFVcmw6dGhpcy5kYXRhVXJsLHJlcXVlc3RNZXRo b2Q6dGhpcy5yZXF1ZXN0TWV0aG9kfSl9ZWxzZXtpZih0eXBlb2YgYT09Im9iamVjdCImJiFhLmxv YWQpe2E9bmV3IEV4dC50cmVlLlRyZWVMb2FkZXIoYSl9fXRoaXMubG9hZGVyPWE7dGhpcy5ub2Rl SGFzaD17fTtpZih0aGlzLnJvb3Qpe3ZhciBiPXRoaXMucm9vdDtkZWxldGUgdGhpcy5yb290O3Ro aXMuc2V0Um9vdE5vZGUoYil9dGhpcy5hZGRFdmVudHMoImFwcGVuZCIsInJlbW92ZSIsIm1vdmVu b2RlIiwiaW5zZXJ0IiwiYmVmb3JlYXBwZW5kIiwiYmVmb3JlcmVtb3ZlIiwiYmVmb3JlbW92ZW5v ZGUiLCJiZWZvcmVpbnNlcnQiLCJiZWZvcmVsb2FkIiwibG9hZCIsInRleHRjaGFuZ2UiLCJiZWZv cmVleHBhbmRub2RlIiwiYmVmb3JlY29sbGFwc2Vub2RlIiwiZXhwYW5kbm9kZSIsImRpc2FibGVk Y2hhbmdlIiwiY29sbGFwc2Vub2RlIiwiYmVmb3JlY2xpY2siLCJjbGljayIsImNoZWNrY2hhbmdl IiwiZGJsY2xpY2siLCJjb250ZXh0bWVudSIsImJlZm9yZWNoaWxkcmVucmVuZGVyZWQiLCJzdGFy dGRyYWciLCJlbmRkcmFnIiwiZHJhZ2Ryb3AiLCJiZWZvcmVub2RlZHJvcCIsIm5vZGVkcm9wIiwi bm9kZWRyYWdvdmVyIik7aWYodGhpcy5zaW5nbGVFeHBhbmQpe3RoaXMub24oImJlZm9yZWV4cGFu ZG5vZGUiLHRoaXMucmVzdHJpY3RFeHBhbmQsdGhpcyl9fSxwcm94eU5vZGVFdmVudDpmdW5jdGlv bihjLGIsYSxoLGcsZSxkKXtpZihjPT0iY29sbGFwc2UifHxjPT0iZXhwYW5kInx8Yz09ImJlZm9y ZWNvbGxhcHNlInx8Yz09ImJlZm9yZWV4cGFuZCJ8fGM9PSJtb3ZlInx8Yz09ImJlZm9yZW1vdmUi KXtjPWMrIm5vZGUifXJldHVybiB0aGlzLmZpcmVFdmVudChjLGIsYSxoLGcsZSxkKX0sZ2V0Um9v dE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290fSxzZXRSb290Tm9kZTpmdW5jdGlvbihi KXtFeHQuZGVzdHJveSh0aGlzLnJvb3QpO2lmKCFiLnJlbmRlcil7Yj10aGlzLmxvYWRlci5jcmVh dGVOb2RlKGIpfXRoaXMucm9vdD1iO2Iub3duZXJUcmVlPXRoaXM7Yi5pc1Jvb3Q9dHJ1ZTt0aGlz LnJlZ2lzdGVyTm9kZShiKTtpZighdGhpcy5yb290VmlzaWJsZSl7dmFyIGE9Yi5hdHRyaWJ1dGVz LnVpUHJvdmlkZXI7Yi51aT1hP25ldyBhKGIpOm5ldyBFeHQudHJlZS5Sb290VHJlZU5vZGVVSShi KX1pZih0aGlzLmlubmVyQ3Qpe3RoaXMuaW5uZXJDdC51cGRhdGUoIiIpO3RoaXMuYWZ0ZXJSZW5k ZXIoKX1yZXR1cm4gYn0sZ2V0Tm9kZUJ5SWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZUhh c2hbYV19LHJlZ2lzdGVyTm9kZTpmdW5jdGlvbihhKXt0aGlzLm5vZGVIYXNoW2EuaWRdPWF9LHVu cmVnaXN0ZXJOb2RlOmZ1bmN0aW9uKGEpe2RlbGV0ZSB0aGlzLm5vZGVIYXNoW2EuaWRdfSx0b1N0 cmluZzpmdW5jdGlvbigpe3JldHVybiJbVHJlZSIrKHRoaXMuaWQ/IiAiK3RoaXMuaWQ6IiIpKyJd In0scmVzdHJpY3RFeHBhbmQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO2lmKGIpe2lm KGIuZXhwYW5kZWRDaGlsZCYmYi5leHBhbmRlZENoaWxkLnBhcmVudE5vZGU9PWIpe2IuZXhwYW5k ZWRDaGlsZC5jb2xsYXBzZSgpfWIuZXhwYW5kZWRDaGlsZD1hfX0sZ2V0Q2hlY2tlZDpmdW5jdGlv bihiLGMpe2M9Y3x8dGhpcy5yb290O3ZhciBkPVtdO3ZhciBlPWZ1bmN0aW9uKCl7aWYodGhpcy5h dHRyaWJ1dGVzLmNoZWNrZWQpe2QucHVzaCghYj90aGlzOihiPT0iaWQiP3RoaXMuaWQ6dGhpcy5h dHRyaWJ1dGVzW2JdKSl9fTtjLmNhc2NhZGUoZSk7cmV0dXJuIGR9LGdldEVsOmZ1bmN0aW9uKCl7 cmV0dXJuIHRoaXMuZWx9LGdldExvYWRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvYWRlcn0s ZXhwYW5kQWxsOmZ1bmN0aW9uKCl7dGhpcy5yb290LmV4cGFuZCh0cnVlKX0sY29sbGFwc2VBbGw6 ZnVuY3Rpb24oKXt0aGlzLnJvb3QuY29sbGFwc2UodHJ1ZSl9LGdldFNlbGVjdGlvbk1vZGVsOmZ1 bmN0aW9uKCl7aWYoIXRoaXMuc2VsTW9kZWwpe3RoaXMuc2VsTW9kZWw9bmV3IEV4dC50cmVlLkRl ZmF1bHRTZWxlY3Rpb25Nb2RlbCgpfXJldHVybiB0aGlzLnNlbE1vZGVsfSxleHBhbmRQYXRoOmZ1 bmN0aW9uKGcsYSxoKXthPWF8fCJpZCI7dmFyIGQ9Zy5zcGxpdCh0aGlzLnBhdGhTZXBhcmF0b3Ip O3ZhciBjPXRoaXMucm9vdDtpZihjLmF0dHJpYnV0ZXNbYV0hPWRbMV0pe2lmKGgpe2goZmFsc2Us bnVsbCl9cmV0dXJufXZhciBiPTE7dmFyIGU9ZnVuY3Rpb24oKXtpZigrK2I9PWQubGVuZ3RoKXtp ZihoKXtoKHRydWUsYyl9cmV0dXJufXZhciBpPWMuZmluZENoaWxkKGEsZFtiXSk7aWYoIWkpe2lm KGgpe2goZmFsc2UsYyl9cmV0dXJufWM9aTtpLmV4cGFuZChmYWxzZSxmYWxzZSxlKX07Yy5leHBh bmQoZmFsc2UsZmFsc2UsZSl9LHNlbGVjdFBhdGg6ZnVuY3Rpb24oZSxhLGcpe2E9YXx8ImlkIjt2 YXIgYz1lLnNwbGl0KHRoaXMucGF0aFNlcGFyYXRvcik7dmFyIGI9Yy5wb3AoKTtpZihjLmxlbmd0 aD4wKXt2YXIgZD1mdW5jdGlvbihpLGgpe2lmKGkmJmgpe3ZhciBqPWguZmluZENoaWxkKGEsYik7 aWYoail7ai5zZWxlY3QoKTtpZihnKXtnKHRydWUsail9fWVsc2V7aWYoZyl7ZyhmYWxzZSxqKX19 fWVsc2V7aWYoZyl7ZyhmYWxzZSxqKX19fTt0aGlzLmV4cGFuZFBhdGgoYy5qb2luKHRoaXMucGF0 aFNlcGFyYXRvciksYSxkKX1lbHNle3RoaXMucm9vdC5zZWxlY3QoKTtpZihnKXtnKHRydWUsdGhp cy5yb290KX19fSxnZXRUcmVlRWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ib2R5fSxvblJlbmRl cjpmdW5jdGlvbihiLGEpe0V4dC50cmVlLlRyZWVQYW5lbC5zdXBlcmNsYXNzLm9uUmVuZGVyLmNh bGwodGhpcyxiLGEpO3RoaXMuZWwuYWRkQ2xhc3MoIngtdHJlZSIpO3RoaXMuaW5uZXJDdD10aGlz LmJvZHkuY3JlYXRlQ2hpbGQoe3RhZzoidWwiLGNsczoieC10cmVlLXJvb3QtY3QgIisodGhpcy51 c2VBcnJvd3M/IngtdHJlZS1hcnJvd3MiOnRoaXMubGluZXM/IngtdHJlZS1saW5lcyI6IngtdHJl ZS1uby1saW5lcyIpfSl9LGluaXRFdmVudHM6ZnVuY3Rpb24oKXtFeHQudHJlZS5UcmVlUGFuZWwu c3VwZXJjbGFzcy5pbml0RXZlbnRzLmNhbGwodGhpcyk7aWYodGhpcy5jb250YWluZXJTY3JvbGwp e0V4dC5kZC5TY3JvbGxNYW5hZ2VyLnJlZ2lzdGVyKHRoaXMuYm9keSl9aWYoKHRoaXMuZW5hYmxl RER8fHRoaXMuZW5hYmxlRHJvcCkmJiF0aGlzLmRyb3Bab25lKXt0aGlzLmRyb3Bab25lPW5ldyBF eHQudHJlZS5UcmVlRHJvcFpvbmUodGhpcyx0aGlzLmRyb3BDb25maWd8fHtkZEdyb3VwOnRoaXMu ZGRHcm91cHx8IlRyZWVERCIsYXBwZW5kT25seTp0aGlzLmRkQXBwZW5kT25seT09PXRydWV9KX1p ZigodGhpcy5lbmFibGVERHx8dGhpcy5lbmFibGVEcmFnKSYmIXRoaXMuZHJhZ1pvbmUpe3RoaXMu ZHJhZ1pvbmU9bmV3IEV4dC50cmVlLlRyZWVEcmFnWm9uZSh0aGlzLHRoaXMuZHJhZ0NvbmZpZ3x8 e2RkR3JvdXA6dGhpcy5kZEdyb3VwfHwiVHJlZUREIixzY3JvbGw6dGhpcy5kZFNjcm9sbH0pfXRo aXMuZ2V0U2VsZWN0aW9uTW9kZWwoKS5pbml0KHRoaXMpfSxhZnRlclJlbmRlcjpmdW5jdGlvbigp e0V4dC50cmVlLlRyZWVQYW5lbC5zdXBlcmNsYXNzLmFmdGVyUmVuZGVyLmNhbGwodGhpcyk7dGhp cy5yb290LnJlbmRlcigpO2lmKCF0aGlzLnJvb3RWaXNpYmxlKXt0aGlzLnJvb3QucmVuZGVyQ2hp bGRyZW4oKX19LG9uRGVzdHJveTpmdW5jdGlvbigpe2lmKHRoaXMucmVuZGVyZWQpe3RoaXMuYm9k eS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtFeHQuZGQuU2Nyb2xsTWFuYWdlci51bnJlZ2lzdGVyKHRo aXMuYm9keSk7aWYodGhpcy5kcm9wWm9uZSl7dGhpcy5kcm9wWm9uZS51bnJlZygpfWlmKHRoaXMu ZHJhZ1pvbmUpe3RoaXMuZHJhZ1pvbmUudW5yZWcoKX19dGhpcy5yb290LmRlc3Ryb3koKTt0aGlz Lm5vZGVIYXNoPW51bGw7RXh0LnRyZWUuVHJlZVBhbmVsLnN1cGVyY2xhc3Mub25EZXN0cm95LmNh bGwodGhpcyl9fSk7RXh0LnRyZWUuVHJlZVBhbmVsLm5vZGVUeXBlcz17fTtFeHQucmVnKCJ0cmVl cGFuZWwiLEV4dC50cmVlLlRyZWVQYW5lbCk7RXh0LnRyZWUuVHJlZUV2ZW50TW9kZWw9ZnVuY3Rp b24oYSl7dGhpcy50cmVlPWE7dGhpcy50cmVlLm9uKCJyZW5kZXIiLHRoaXMuaW5pdEV2ZW50cyx0 aGlzKX07RXh0LnRyZWUuVHJlZUV2ZW50TW9kZWwucHJvdG90eXBlPXtpbml0RXZlbnRzOmZ1bmN0 aW9uKCl7dmFyIGE9dGhpcy50cmVlLmdldFRyZWVFbCgpO2Eub24oImNsaWNrIix0aGlzLmRlbGVn YXRlQ2xpY2ssdGhpcyk7aWYodGhpcy50cmVlLnRyYWNrTW91c2VPdmVyIT09ZmFsc2Upe3RoaXMu dHJlZS5pbm5lckN0Lm9uKCJtb3VzZW92ZXIiLHRoaXMuZGVsZWdhdGVPdmVyLHRoaXMpO3RoaXMu dHJlZS5pbm5lckN0Lm9uKCJtb3VzZW91dCIsdGhpcy5kZWxlZ2F0ZU91dCx0aGlzKX1hLm9uKCJk YmxjbGljayIsdGhpcy5kZWxlZ2F0ZURibENsaWNrLHRoaXMpO2Eub24oImNvbnRleHRtZW51Iix0 aGlzLmRlbGVnYXRlQ29udGV4dE1lbnUsdGhpcyl9LGdldE5vZGU6ZnVuY3Rpb24oYil7dmFyIGE7 aWYoYT1iLmdldFRhcmdldCgiLngtdHJlZS1ub2RlLWVsIiwxMCkpe3ZhciBjPUV4dC5mbHkoYSwi X3RyZWVFdmVudHMiKS5nZXRBdHRyaWJ1dGUoInRyZWUtbm9kZS1pZCIsImV4dCIpO2lmKGMpe3Jl dHVybiB0aGlzLnRyZWUuZ2V0Tm9kZUJ5SWQoYyl9fXJldHVybiBudWxsfSxnZXROb2RlVGFyZ2V0 OmZ1bmN0aW9uKGIpe3ZhciBhPWIuZ2V0VGFyZ2V0KCIueC10cmVlLW5vZGUtaWNvbiIsMSk7aWYo IWEpe2E9Yi5nZXRUYXJnZXQoIi54LXRyZWUtbm9kZS1lbCIsNil9cmV0dXJuIGF9LGRlbGVnYXRl T3V0OmZ1bmN0aW9uKGIsYSl7aWYoIXRoaXMuYmVmb3JlRXZlbnQoYikpe3JldHVybn1pZihiLmdl dFRhcmdldCgiLngtdHJlZS1lYy1pY29uIiwxKSl7dmFyIGM9dGhpcy5nZXROb2RlKGIpO3RoaXMu b25JY29uT3V0KGIsYyk7aWYoYz09dGhpcy5sYXN0RWNPdmVyKXtkZWxldGUgdGhpcy5sYXN0RWNP dmVyfX1pZigoYT10aGlzLmdldE5vZGVUYXJnZXQoYikpJiYhYi53aXRoaW4oYSx0cnVlKSl7dGhp cy5vbk5vZGVPdXQoYix0aGlzLmdldE5vZGUoYikpfX0sZGVsZWdhdGVPdmVyOmZ1bmN0aW9uKGIs YSl7aWYoIXRoaXMuYmVmb3JlRXZlbnQoYikpe3JldHVybn1pZihFeHQuaXNHZWNrbyYmIXRoaXMu dHJhY2tpbmdEb2Mpe0V4dC5nZXRCb2R5KCkub24oIm1vdXNlb3ZlciIsdGhpcy50cmFja0V4aXQs dGhpcyk7dGhpcy50cmFja2luZ0RvYz10cnVlfWlmKHRoaXMubGFzdEVjT3Zlcil7dGhpcy5vbklj b25PdXQoYix0aGlzLmxhc3RFY092ZXIpO2RlbGV0ZSB0aGlzLmxhc3RFY092ZXJ9aWYoYi5nZXRU YXJnZXQoIi54LXRyZWUtZWMtaWNvbiIsMSkpe3RoaXMubGFzdEVjT3Zlcj10aGlzLmdldE5vZGUo Yik7dGhpcy5vbkljb25PdmVyKGIsdGhpcy5sYXN0RWNPdmVyKX1pZihhPXRoaXMuZ2V0Tm9kZVRh cmdldChiKSl7dGhpcy5vbk5vZGVPdmVyKGIsdGhpcy5nZXROb2RlKGIpKX19LHRyYWNrRXhpdDpm dW5jdGlvbihhKXtpZih0aGlzLmxhc3RPdmVyTm9kZSYmIWEud2l0aGluKHRoaXMubGFzdE92ZXJO b2RlLnVpLmdldEVsKCkpKXt0aGlzLm9uTm9kZU91dChhLHRoaXMubGFzdE92ZXJOb2RlKTtkZWxl dGUgdGhpcy5sYXN0T3Zlck5vZGU7RXh0LmdldEJvZHkoKS51bigibW91c2VvdmVyIix0aGlzLnRy YWNrRXhpdCx0aGlzKTt0aGlzLnRyYWNraW5nRG9jPWZhbHNlfX0sZGVsZWdhdGVDbGljazpmdW5j dGlvbihiLGEpe2lmKCF0aGlzLmJlZm9yZUV2ZW50KGIpKXtyZXR1cm59aWYoYi5nZXRUYXJnZXQo ImlucHV0W3R5cGU9Y2hlY2tib3hdIiwxKSl7dGhpcy5vbkNoZWNrYm94Q2xpY2soYix0aGlzLmdl dE5vZGUoYikpfWVsc2V7aWYoYi5nZXRUYXJnZXQoIi54LXRyZWUtZWMtaWNvbiIsMSkpe3RoaXMu b25JY29uQ2xpY2soYix0aGlzLmdldE5vZGUoYikpfWVsc2V7aWYodGhpcy5nZXROb2RlVGFyZ2V0 KGIpKXt0aGlzLm9uTm9kZUNsaWNrKGIsdGhpcy5nZXROb2RlKGIpKX19fX0sZGVsZWdhdGVEYmxD bGljazpmdW5jdGlvbihiLGEpe2lmKHRoaXMuYmVmb3JlRXZlbnQoYikmJnRoaXMuZ2V0Tm9kZVRh cmdldChiKSl7dGhpcy5vbk5vZGVEYmxDbGljayhiLHRoaXMuZ2V0Tm9kZShiKSl9fSxkZWxlZ2F0 ZUNvbnRleHRNZW51OmZ1bmN0aW9uKGIsYSl7aWYodGhpcy5iZWZvcmVFdmVudChiKSYmdGhpcy5n ZXROb2RlVGFyZ2V0KGIpKXt0aGlzLm9uTm9kZUNvbnRleHRNZW51KGIsdGhpcy5nZXROb2RlKGIp KX19LG9uTm9kZUNsaWNrOmZ1bmN0aW9uKGIsYSl7YS51aS5vbkNsaWNrKGIpfSxvbk5vZGVPdmVy OmZ1bmN0aW9uKGIsYSl7dGhpcy5sYXN0T3Zlck5vZGU9YTthLnVpLm9uT3ZlcihiKX0sb25Ob2Rl T3V0OmZ1bmN0aW9uKGIsYSl7YS51aS5vbk91dChiKX0sb25JY29uT3ZlcjpmdW5jdGlvbihiLGEp e2EudWkuYWRkQ2xhc3MoIngtdHJlZS1lYy1vdmVyIil9LG9uSWNvbk91dDpmdW5jdGlvbihiLGEp e2EudWkucmVtb3ZlQ2xhc3MoIngtdHJlZS1lYy1vdmVyIil9LG9uSWNvbkNsaWNrOmZ1bmN0aW9u KGIsYSl7YS51aS5lY0NsaWNrKGIpfSxvbkNoZWNrYm94Q2xpY2s6ZnVuY3Rpb24oYixhKXthLnVp Lm9uQ2hlY2tDaGFuZ2UoYil9LG9uTm9kZURibENsaWNrOmZ1bmN0aW9uKGIsYSl7YS51aS5vbkRi bENsaWNrKGIpfSxvbk5vZGVDb250ZXh0TWVudTpmdW5jdGlvbihiLGEpe2EudWkub25Db250ZXh0 TWVudShiKX0sYmVmb3JlRXZlbnQ6ZnVuY3Rpb24oYSl7aWYodGhpcy5kaXNhYmxlZCl7YS5zdG9w RXZlbnQoKTtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlz LmRpc2FibGVkPXRydWV9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ZmFsc2V9fTtF eHQudHJlZS5EZWZhdWx0U2VsZWN0aW9uTW9kZWw9ZnVuY3Rpb24oYSl7dGhpcy5zZWxOb2RlPW51 bGw7dGhpcy5hZGRFdmVudHMoInNlbGVjdGlvbmNoYW5nZSIsImJlZm9yZXNlbGVjdCIpO0V4dC5h cHBseSh0aGlzLGEpO0V4dC50cmVlLkRlZmF1bHRTZWxlY3Rpb25Nb2RlbC5zdXBlcmNsYXNzLmNv bnN0cnVjdG9yLmNhbGwodGhpcyl9O0V4dC5leHRlbmQoRXh0LnRyZWUuRGVmYXVsdFNlbGVjdGlv bk1vZGVsLEV4dC51dGlsLk9ic2VydmFibGUse2luaXQ6ZnVuY3Rpb24oYSl7dGhpcy50cmVlPWE7 YS5nZXRUcmVlRWwoKS5vbigia2V5ZG93biIsdGhpcy5vbktleURvd24sdGhpcyk7YS5vbigiY2xp Y2siLHRoaXMub25Ob2RlQ2xpY2ssdGhpcyl9LG9uTm9kZUNsaWNrOmZ1bmN0aW9uKGEsYil7dGhp cy5zZWxlY3QoYSl9LHNlbGVjdDpmdW5jdGlvbihiKXt2YXIgYT10aGlzLnNlbE5vZGU7aWYoYj09 YSl7Yi51aS5vblNlbGVjdGVkQ2hhbmdlKHRydWUpfWVsc2V7aWYodGhpcy5maXJlRXZlbnQoImJl Zm9yZXNlbGVjdCIsdGhpcyxiLGEpIT09ZmFsc2Upe2lmKGEpe2EudWkub25TZWxlY3RlZENoYW5n ZShmYWxzZSl9dGhpcy5zZWxOb2RlPWI7Yi51aS5vblNlbGVjdGVkQ2hhbmdlKHRydWUpO3RoaXMu ZmlyZUV2ZW50KCJzZWxlY3Rpb25jaGFuZ2UiLHRoaXMsYixhKX19cmV0dXJuIGJ9LHVuc2VsZWN0 OmZ1bmN0aW9uKGEpe2lmKHRoaXMuc2VsTm9kZT09YSl7dGhpcy5jbGVhclNlbGVjdGlvbnMoKX19 LGNsZWFyU2VsZWN0aW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuc2VsTm9kZTtpZihhKXthLnVp Lm9uU2VsZWN0ZWRDaGFuZ2UoZmFsc2UpO3RoaXMuc2VsTm9kZT1udWxsO3RoaXMuZmlyZUV2ZW50 KCJzZWxlY3Rpb25jaGFuZ2UiLHRoaXMsbnVsbCl9cmV0dXJuIGF9LGdldFNlbGVjdGVkTm9kZTpm dW5jdGlvbigpe3JldHVybiB0aGlzLnNlbE5vZGV9LGlzU2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0 dXJuIHRoaXMuc2VsTm9kZT09YX0sc2VsZWN0UHJldmlvdXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlz LnNlbE5vZGV8fHRoaXMubGFzdFNlbE5vZGU7aWYoIWEpe3JldHVybiBudWxsfXZhciBjPWEucHJl dmlvdXNTaWJsaW5nO2lmKGMpe2lmKCFjLmlzRXhwYW5kZWQoKXx8Yy5jaGlsZE5vZGVzLmxlbmd0 aDwxKXtyZXR1cm4gdGhpcy5zZWxlY3QoYyl9ZWxzZXt2YXIgYj1jLmxhc3RDaGlsZDt3aGlsZShi JiZiLmlzRXhwYW5kZWQoKSYmYi5jaGlsZE5vZGVzLmxlbmd0aD4wKXtiPWIubGFzdENoaWxkfXJl dHVybiB0aGlzLnNlbGVjdChiKX19ZWxzZXtpZihhLnBhcmVudE5vZGUmJih0aGlzLnRyZWUucm9v dFZpc2libGV8fCFhLnBhcmVudE5vZGUuaXNSb290KSl7cmV0dXJuIHRoaXMuc2VsZWN0KGEucGFy ZW50Tm9kZSl9fXJldHVybiBudWxsfSxzZWxlY3ROZXh0OmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5z ZWxOb2RlfHx0aGlzLmxhc3RTZWxOb2RlO2lmKCFiKXtyZXR1cm4gbnVsbH1pZihiLmZpcnN0Q2hp bGQmJmIuaXNFeHBhbmRlZCgpKXtyZXR1cm4gdGhpcy5zZWxlY3QoYi5maXJzdENoaWxkKX1lbHNl e2lmKGIubmV4dFNpYmxpbmcpe3JldHVybiB0aGlzLnNlbGVjdChiLm5leHRTaWJsaW5nKX1lbHNl e2lmKGIucGFyZW50Tm9kZSl7dmFyIGE9bnVsbDtiLnBhcmVudE5vZGUuYnViYmxlKGZ1bmN0aW9u KCl7aWYodGhpcy5uZXh0U2libGluZyl7YT10aGlzLmdldE93bmVyVHJlZSgpLnNlbE1vZGVsLnNl bGVjdCh0aGlzLm5leHRTaWJsaW5nKTtyZXR1cm4gZmFsc2V9fSk7cmV0dXJuIGF9fX1yZXR1cm4g bnVsbH0sb25LZXlEb3duOmZ1bmN0aW9uKGMpe3ZhciBiPXRoaXMuc2VsTm9kZXx8dGhpcy5sYXN0 U2VsTm9kZTt2YXIgZD10aGlzO2lmKCFiKXtyZXR1cm59dmFyIGE9Yy5nZXRLZXkoKTtzd2l0Y2go YSl7Y2FzZSBjLkRPV046Yy5zdG9wRXZlbnQoKTt0aGlzLnNlbGVjdE5leHQoKTticmVhaztjYXNl IGMuVVA6Yy5zdG9wRXZlbnQoKTt0aGlzLnNlbGVjdFByZXZpb3VzKCk7YnJlYWs7Y2FzZSBjLlJJ R0hUOmMucHJldmVudERlZmF1bHQoKTtpZihiLmhhc0NoaWxkTm9kZXMoKSl7aWYoIWIuaXNFeHBh bmRlZCgpKXtiLmV4cGFuZCgpfWVsc2V7aWYoYi5maXJzdENoaWxkKXt0aGlzLnNlbGVjdChiLmZp cnN0Q2hpbGQsYyl9fX1icmVhaztjYXNlIGMuTEVGVDpjLnByZXZlbnREZWZhdWx0KCk7aWYoYi5o YXNDaGlsZE5vZGVzKCkmJmIuaXNFeHBhbmRlZCgpKXtiLmNvbGxhcHNlKCl9ZWxzZXtpZihiLnBh cmVudE5vZGUmJih0aGlzLnRyZWUucm9vdFZpc2libGV8fGIucGFyZW50Tm9kZSE9dGhpcy50cmVl LmdldFJvb3ROb2RlKCkpKXt0aGlzLnNlbGVjdChiLnBhcmVudE5vZGUsYyl9fWJyZWFrfX19KTtF eHQudHJlZS5NdWx0aVNlbGVjdGlvbk1vZGVsPWZ1bmN0aW9uKGEpe3RoaXMuc2VsTm9kZXM9W107 dGhpcy5zZWxNYXA9e307dGhpcy5hZGRFdmVudHMoInNlbGVjdGlvbmNoYW5nZSIpO0V4dC5hcHBs eSh0aGlzLGEpO0V4dC50cmVlLk11bHRpU2VsZWN0aW9uTW9kZWwuc3VwZXJjbGFzcy5jb25zdHJ1 Y3Rvci5jYWxsKHRoaXMpfTtFeHQuZXh0ZW5kKEV4dC50cmVlLk11bHRpU2VsZWN0aW9uTW9kZWws RXh0LnV0aWwuT2JzZXJ2YWJsZSx7aW5pdDpmdW5jdGlvbihhKXt0aGlzLnRyZWU9YTthLmdldFRy ZWVFbCgpLm9uKCJrZXlkb3duIix0aGlzLm9uS2V5RG93bix0aGlzKTthLm9uKCJjbGljayIsdGhp cy5vbk5vZGVDbGljayx0aGlzKX0sb25Ob2RlQ2xpY2s6ZnVuY3Rpb24oYSxiKXtpZihiLmN0cmxL ZXkmJnRoaXMuaXNTZWxlY3RlZChhKSl7dGhpcy51bnNlbGVjdChhKX1lbHNle3RoaXMuc2VsZWN0 KGEsYixiLmN0cmxLZXkpfX0sc2VsZWN0OmZ1bmN0aW9uKGEsYyxiKXtpZihiIT09dHJ1ZSl7dGhp cy5jbGVhclNlbGVjdGlvbnModHJ1ZSl9aWYodGhpcy5pc1NlbGVjdGVkKGEpKXt0aGlzLmxhc3RT ZWxOb2RlPWE7cmV0dXJuIGF9dGhpcy5zZWxOb2Rlcy5wdXNoKGEpO3RoaXMuc2VsTWFwW2EuaWRd PWE7dGhpcy5sYXN0U2VsTm9kZT1hO2EudWkub25TZWxlY3RlZENoYW5nZSh0cnVlKTt0aGlzLmZp cmVFdmVudCgic2VsZWN0aW9uY2hhbmdlIix0aGlzLHRoaXMuc2VsTm9kZXMpO3JldHVybiBhfSx1 bnNlbGVjdDpmdW5jdGlvbihiKXtpZih0aGlzLnNlbE1hcFtiLmlkXSl7Yi51aS5vblNlbGVjdGVk Q2hhbmdlKGZhbHNlKTt2YXIgYz10aGlzLnNlbE5vZGVzO3ZhciBhPWMuaW5kZXhPZihiKTtpZihh IT0tMSl7dGhpcy5zZWxOb2Rlcy5zcGxpY2UoYSwxKX1kZWxldGUgdGhpcy5zZWxNYXBbYi5pZF07 dGhpcy5maXJlRXZlbnQoInNlbGVjdGlvbmNoYW5nZSIsdGhpcyx0aGlzLnNlbE5vZGVzKX19LGNs ZWFyU2VsZWN0aW9uczpmdW5jdGlvbihiKXt2YXIgZD10aGlzLnNlbE5vZGVzO2lmKGQubGVuZ3Ro PjApe2Zvcih2YXIgYz0wLGE9ZC5sZW5ndGg7YzxhO2MrKyl7ZFtjXS51aS5vblNlbGVjdGVkQ2hh bmdlKGZhbHNlKX10aGlzLnNlbE5vZGVzPVtdO3RoaXMuc2VsTWFwPXt9O2lmKGIhPT10cnVlKXt0 aGlzLmZpcmVFdmVudCgic2VsZWN0aW9uY2hhbmdlIix0aGlzLHRoaXMuc2VsTm9kZXMpfX19LGlz U2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc2VsTWFwW2EuaWRdP3RydWU6ZmFsc2V9 LGdldFNlbGVjdGVkTm9kZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxOb2Rlc30sb25LZXlE b3duOkV4dC50cmVlLkRlZmF1bHRTZWxlY3Rpb25Nb2RlbC5wcm90b3R5cGUub25LZXlEb3duLHNl bGVjdE5leHQ6RXh0LnRyZWUuRGVmYXVsdFNlbGVjdGlvbk1vZGVsLnByb3RvdHlwZS5zZWxlY3RO ZXh0LHNlbGVjdFByZXZpb3VzOkV4dC50cmVlLkRlZmF1bHRTZWxlY3Rpb25Nb2RlbC5wcm90b3R5 cGUuc2VsZWN0UHJldmlvdXN9KTtFeHQuZGF0YS5UcmVlPWZ1bmN0aW9uKGEpe3RoaXMubm9kZUhh c2g9e307dGhpcy5yb290PW51bGw7aWYoYSl7dGhpcy5zZXRSb290Tm9kZShhKX10aGlzLmFkZEV2 ZW50cygiYXBwZW5kIiwicmVtb3ZlIiwibW92ZSIsImluc2VydCIsImJlZm9yZWFwcGVuZCIsImJl Zm9yZXJlbW92ZSIsImJlZm9yZW1vdmUiLCJiZWZvcmVpbnNlcnQiKTtFeHQuZGF0YS5UcmVlLnN1 cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKX07RXh0LmV4dGVuZChFeHQuZGF0YS5UcmVl LEV4dC51dGlsLk9ic2VydmFibGUse3BhdGhTZXBhcmF0b3I6Ii8iLHByb3h5Tm9kZUV2ZW50OmZ1 bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlyZUV2ZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZ2V0 Um9vdE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290fSxzZXRSb290Tm9kZTpmdW5jdGlv bihhKXt0aGlzLnJvb3Q9YTthLm93bmVyVHJlZT10aGlzO2EuaXNSb290PXRydWU7dGhpcy5yZWdp c3Rlck5vZGUoYSk7cmV0dXJuIGF9LGdldE5vZGVCeUlkOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlz Lm5vZGVIYXNoW2FdfSxyZWdpc3Rlck5vZGU6ZnVuY3Rpb24oYSl7dGhpcy5ub2RlSGFzaFthLmlk XT1hfSx1bnJlZ2lzdGVyTm9kZTpmdW5jdGlvbihhKXtkZWxldGUgdGhpcy5ub2RlSGFzaFthLmlk XX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW1RyZWUiKyh0aGlzLmlkPyIgIit0aGlzLmlk OiIiKSsiXSJ9fSk7RXh0LmRhdGEuTm9kZT1mdW5jdGlvbihhKXt0aGlzLmF0dHJpYnV0ZXM9YXx8 e307dGhpcy5sZWFmPXRoaXMuYXR0cmlidXRlcy5sZWFmO3RoaXMuaWQ9dGhpcy5hdHRyaWJ1dGVz LmlkO2lmKCF0aGlzLmlkKXt0aGlzLmlkPUV4dC5pZChudWxsLCJ4bm9kZS0iKTt0aGlzLmF0dHJp YnV0ZXMuaWQ9dGhpcy5pZH10aGlzLmNoaWxkTm9kZXM9W107aWYoIXRoaXMuY2hpbGROb2Rlcy5p bmRleE9mKXt0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZj1mdW5jdGlvbihkKXtmb3IodmFyIGM9MCxi PXRoaXMubGVuZ3RoO2M8YjtjKyspe2lmKHRoaXNbY109PWQpe3JldHVybiBjfX1yZXR1cm4gLTF9 fXRoaXMucGFyZW50Tm9kZT1udWxsO3RoaXMuZmlyc3RDaGlsZD1udWxsO3RoaXMubGFzdENoaWxk PW51bGw7dGhpcy5wcmV2aW91c1NpYmxpbmc9bnVsbDt0aGlzLm5leHRTaWJsaW5nPW51bGw7dGhp cy5hZGRFdmVudHMoe2FwcGVuZDp0cnVlLHJlbW92ZTp0cnVlLG1vdmU6dHJ1ZSxpbnNlcnQ6dHJ1 ZSxiZWZvcmVhcHBlbmQ6dHJ1ZSxiZWZvcmVyZW1vdmU6dHJ1ZSxiZWZvcmVtb3ZlOnRydWUsYmVm b3JlaW5zZXJ0OnRydWV9KTt0aGlzLmxpc3RlbmVycz10aGlzLmF0dHJpYnV0ZXMubGlzdGVuZXJz O0V4dC5kYXRhLk5vZGUuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpfTtFeHQuZXh0 ZW5kKEV4dC5kYXRhLk5vZGUsRXh0LnV0aWwuT2JzZXJ2YWJsZSx7ZmlyZUV2ZW50OmZ1bmN0aW9u KGIpe2lmKEV4dC5kYXRhLk5vZGUuc3VwZXJjbGFzcy5maXJlRXZlbnQuYXBwbHkodGhpcyxhcmd1 bWVudHMpPT09ZmFsc2Upe3JldHVybiBmYWxzZX12YXIgYT10aGlzLmdldE93bmVyVHJlZSgpO2lm KGEpe2lmKGEucHJveHlOb2RlRXZlbnQuYXBwbHkoYSxhcmd1bWVudHMpPT09ZmFsc2Upe3JldHVy biBmYWxzZX19cmV0dXJuIHRydWV9LGlzTGVhZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlYWY9 PT10cnVlfSxzZXRGaXJzdENoaWxkOmZ1bmN0aW9uKGEpe3RoaXMuZmlyc3RDaGlsZD1hfSxzZXRM YXN0Q2hpbGQ6ZnVuY3Rpb24oYSl7dGhpcy5sYXN0Q2hpbGQ9YX0saXNMYXN0OmZ1bmN0aW9uKCl7 cmV0dXJuKCF0aGlzLnBhcmVudE5vZGU/dHJ1ZTp0aGlzLnBhcmVudE5vZGUubGFzdENoaWxkPT10 aGlzKX0saXNGaXJzdDpmdW5jdGlvbigpe3JldHVybighdGhpcy5wYXJlbnROb2RlP3RydWU6dGhp cy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQ9PXRoaXMpfSxoYXNDaGlsZE5vZGVzOmZ1bmN0aW9uKCl7 cmV0dXJuICF0aGlzLmlzTGVhZigpJiZ0aGlzLmNoaWxkTm9kZXMubGVuZ3RoPjB9LGlzRXhwYW5k YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXMuZXhwYW5kYWJsZXx8dGhpcy5o YXNDaGlsZE5vZGVzKCl9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUpe3ZhciBnPWZhbHNlO2lmKEV4 dC5pc0FycmF5KGUpKXtnPWV9ZWxzZXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2c9YXJndW1lbnRz fX1pZihnKXtmb3IodmFyIGQ9MCxhPWcubGVuZ3RoO2Q8YTtkKyspe3RoaXMuYXBwZW5kQ2hpbGQo Z1tkXSl9fWVsc2V7aWYodGhpcy5maXJlRXZlbnQoImJlZm9yZWFwcGVuZCIsdGhpcy5vd25lclRy ZWUsdGhpcyxlKT09PWZhbHNlKXtyZXR1cm4gZmFsc2V9dmFyIGI9dGhpcy5jaGlsZE5vZGVzLmxl bmd0aDt2YXIgYz1lLnBhcmVudE5vZGU7aWYoYyl7aWYoZS5maXJlRXZlbnQoImJlZm9yZW1vdmUi LGUuZ2V0T3duZXJUcmVlKCksZSxjLHRoaXMsYik9PT1mYWxzZSl7cmV0dXJuIGZhbHNlfWMucmVt b3ZlQ2hpbGQoZSl9Yj10aGlzLmNoaWxkTm9kZXMubGVuZ3RoO2lmKGI9PT0wKXt0aGlzLnNldEZp cnN0Q2hpbGQoZSl9dGhpcy5jaGlsZE5vZGVzLnB1c2goZSk7ZS5wYXJlbnROb2RlPXRoaXM7dmFy IGg9dGhpcy5jaGlsZE5vZGVzW2ItMV07aWYoaCl7ZS5wcmV2aW91c1NpYmxpbmc9aDtoLm5leHRT aWJsaW5nPWV9ZWxzZXtlLnByZXZpb3VzU2libGluZz1udWxsfWUubmV4dFNpYmxpbmc9bnVsbDt0 aGlzLnNldExhc3RDaGlsZChlKTtlLnNldE93bmVyVHJlZSh0aGlzLmdldE93bmVyVHJlZSgpKTt0 aGlzLmZpcmVFdmVudCgiYXBwZW5kIix0aGlzLm93bmVyVHJlZSx0aGlzLGUsYik7aWYoYyl7ZS5m aXJlRXZlbnQoIm1vdmUiLHRoaXMub3duZXJUcmVlLGUsYyx0aGlzLGIpfXJldHVybiBlfX0scmVt b3ZlQ2hpbGQ6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoYik7aWYo YT09LTEpe3JldHVybiBmYWxzZX1pZih0aGlzLmZpcmVFdmVudCgiYmVmb3JlcmVtb3ZlIix0aGlz Lm93bmVyVHJlZSx0aGlzLGIpPT09ZmFsc2Upe3JldHVybiBmYWxzZX10aGlzLmNoaWxkTm9kZXMu c3BsaWNlKGEsMSk7aWYoYi5wcmV2aW91c1NpYmxpbmcpe2IucHJldmlvdXNTaWJsaW5nLm5leHRT aWJsaW5nPWIubmV4dFNpYmxpbmd9aWYoYi5uZXh0U2libGluZyl7Yi5uZXh0U2libGluZy5wcmV2 aW91c1NpYmxpbmc9Yi5wcmV2aW91c1NpYmxpbmd9aWYodGhpcy5maXJzdENoaWxkPT1iKXt0aGlz LnNldEZpcnN0Q2hpbGQoYi5uZXh0U2libGluZyl9aWYodGhpcy5sYXN0Q2hpbGQ9PWIpe3RoaXMu c2V0TGFzdENoaWxkKGIucHJldmlvdXNTaWJsaW5nKX1iLnNldE93bmVyVHJlZShudWxsKTtiLnBh cmVudE5vZGU9bnVsbDtiLnByZXZpb3VzU2libGluZz1udWxsO2IubmV4dFNpYmxpbmc9bnVsbDt0 aGlzLmZpcmVFdmVudCgicmVtb3ZlIix0aGlzLm93bmVyVHJlZSx0aGlzLGIpO3JldHVybiBifSxp bnNlcnRCZWZvcmU6ZnVuY3Rpb24oZCxhKXtpZighYSl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQo ZCl9aWYoZD09YSl7cmV0dXJuIGZhbHNlfWlmKHRoaXMuZmlyZUV2ZW50KCJiZWZvcmVpbnNlcnQi LHRoaXMub3duZXJUcmVlLHRoaXMsZCxhKT09PWZhbHNlKXtyZXR1cm4gZmFsc2V9dmFyIGI9dGhp cy5jaGlsZE5vZGVzLmluZGV4T2YoYSk7dmFyIGM9ZC5wYXJlbnROb2RlO3ZhciBlPWI7aWYoYz09 dGhpcyYmdGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoZCk8Yil7ZS0tfWlmKGMpe2lmKGQuZmlyZUV2 ZW50KCJiZWZvcmVtb3ZlIixkLmdldE93bmVyVHJlZSgpLGQsYyx0aGlzLGIsYSk9PT1mYWxzZSl7 cmV0dXJuIGZhbHNlfWMucmVtb3ZlQ2hpbGQoZCl9aWYoZT09PTApe3RoaXMuc2V0Rmlyc3RDaGls ZChkKX10aGlzLmNoaWxkTm9kZXMuc3BsaWNlKGUsMCxkKTtkLnBhcmVudE5vZGU9dGhpczt2YXIg Zz10aGlzLmNoaWxkTm9kZXNbZS0xXTtpZihnKXtkLnByZXZpb3VzU2libGluZz1nO2cubmV4dFNp Ymxpbmc9ZH1lbHNle2QucHJldmlvdXNTaWJsaW5nPW51bGx9ZC5uZXh0U2libGluZz1hO2EucHJl dmlvdXNTaWJsaW5nPWQ7ZC5zZXRPd25lclRyZWUodGhpcy5nZXRPd25lclRyZWUoKSk7dGhpcy5m aXJlRXZlbnQoImluc2VydCIsdGhpcy5vd25lclRyZWUsdGhpcyxkLGEpO2lmKGMpe2QuZmlyZUV2 ZW50KCJtb3ZlIix0aGlzLm93bmVyVHJlZSxkLGMsdGhpcyxlLGEpfXJldHVybiBkfSxyZW1vdmU6 ZnVuY3Rpb24oKXt0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyk7cmV0dXJuIHRoaXN9 LGl0ZW06ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlc1thXX0scmVwbGFjZUNoaWxk OmZ1bmN0aW9uKGEsYyl7dmFyIGI9Yz9jLm5leHRTaWJsaW5nOm51bGw7dGhpcy5yZW1vdmVDaGls ZChjKTt0aGlzLmluc2VydEJlZm9yZShhLGIpO3JldHVybiBjfSxpbmRleE9mOmZ1bmN0aW9uKGEp e3JldHVybiB0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihhKX0sZ2V0T3duZXJUcmVlOmZ1bmN0aW9u KCl7aWYoIXRoaXMub3duZXJUcmVlKXt2YXIgYT10aGlzO3doaWxlKGEpe2lmKGEub3duZXJUcmVl KXt0aGlzLm93bmVyVHJlZT1hLm93bmVyVHJlZTticmVha31hPWEucGFyZW50Tm9kZX19cmV0dXJu IHRoaXMub3duZXJUcmVlfSxnZXREZXB0aDpmdW5jdGlvbigpe3ZhciBiPTA7dmFyIGE9dGhpczt3 aGlsZShhLnBhcmVudE5vZGUpeysrYjthPWEucGFyZW50Tm9kZX1yZXR1cm4gYn0sc2V0T3duZXJU cmVlOmZ1bmN0aW9uKGIpe2lmKGIhPXRoaXMub3duZXJUcmVlKXtpZih0aGlzLm93bmVyVHJlZSl7 dGhpcy5vd25lclRyZWUudW5yZWdpc3Rlck5vZGUodGhpcyl9dGhpcy5vd25lclRyZWU9Yjt2YXIg ZD10aGlzLmNoaWxkTm9kZXM7Zm9yKHZhciBjPTAsYT1kLmxlbmd0aDtjPGE7YysrKXtkW2NdLnNl dE93bmVyVHJlZShiKX1pZihiKXtiLnJlZ2lzdGVyTm9kZSh0aGlzKX19fSxzZXRJZDpmdW5jdGlv bihiKXtpZihiIT09dGhpcy5pZCl7dmFyIGE9dGhpcy5vd25lclRyZWU7aWYoYSl7YS51bnJlZ2lz dGVyTm9kZSh0aGlzKX10aGlzLmlkPWI7aWYoYSl7YS5yZWdpc3Rlck5vZGUodGhpcyl9dGhpcy5v bklkQ2hhbmdlKGIpfX0sb25JZENoYW5nZTpFeHQuZW1wdHlGbixnZXRQYXRoOmZ1bmN0aW9uKGMp e2M9Y3x8ImlkIjt2YXIgZT10aGlzLnBhcmVudE5vZGU7dmFyIGE9W3RoaXMuYXR0cmlidXRlc1tj XV07d2hpbGUoZSl7YS51bnNoaWZ0KGUuYXR0cmlidXRlc1tjXSk7ZT1lLnBhcmVudE5vZGV9dmFy IGQ9dGhpcy5nZXRPd25lclRyZWUoKS5wYXRoU2VwYXJhdG9yO3JldHVybiBkK2Euam9pbihkKX0s YnViYmxlOmZ1bmN0aW9uKGMsYixhKXt2YXIgZD10aGlzO3doaWxlKGQpe2lmKGMuYXBwbHkoYnx8 ZCxhfHxbZF0pPT09ZmFsc2Upe2JyZWFrfWQ9ZC5wYXJlbnROb2RlfX0sY2FzY2FkZTpmdW5jdGlv bihnLGUsYil7aWYoZy5hcHBseShlfHx0aGlzLGJ8fFt0aGlzXSkhPT1mYWxzZSl7dmFyIGQ9dGhp cy5jaGlsZE5vZGVzO2Zvcih2YXIgYz0wLGE9ZC5sZW5ndGg7YzxhO2MrKyl7ZFtjXS5jYXNjYWRl KGcsZSxiKX19fSxlYWNoQ2hpbGQ6ZnVuY3Rpb24oZyxlLGIpe3ZhciBkPXRoaXMuY2hpbGROb2Rl cztmb3IodmFyIGM9MCxhPWQubGVuZ3RoO2M8YTtjKyspe2lmKGcuYXBwbHkoZXx8dGhpcyxifHxb ZFtjXV0pPT09ZmFsc2Upe2JyZWFrfX19LGZpbmRDaGlsZDpmdW5jdGlvbihkLGUpe3ZhciBjPXRo aXMuY2hpbGROb2Rlcztmb3IodmFyIGI9MCxhPWMubGVuZ3RoO2I8YTtiKyspe2lmKGNbYl0uYXR0 cmlidXRlc1tkXT09ZSl7cmV0dXJuIGNbYl19fXJldHVybiBudWxsfSxmaW5kQ2hpbGRCeTpmdW5j dGlvbihlLGQpe3ZhciBjPXRoaXMuY2hpbGROb2Rlcztmb3IodmFyIGI9MCxhPWMubGVuZ3RoO2I8 YTtiKyspe2lmKGUuY2FsbChkfHxjW2JdLGNbYl0pPT09dHJ1ZSl7cmV0dXJuIGNbYl19fXJldHVy biBudWxsfSxzb3J0OmZ1bmN0aW9uKGUsZCl7dmFyIGM9dGhpcy5jaGlsZE5vZGVzO3ZhciBhPWMu bGVuZ3RoO2lmKGE+MCl7dmFyIGc9ZD9mdW5jdGlvbigpe2UuYXBwbHkoZCxhcmd1bWVudHMpfTpl O2Muc29ydChnKTtmb3IodmFyIGI9MDtiPGE7YisrKXt2YXIgaD1jW2JdO2gucHJldmlvdXNTaWJs aW5nPWNbYi0xXTtoLm5leHRTaWJsaW5nPWNbYisxXTtpZihiPT09MCl7dGhpcy5zZXRGaXJzdENo aWxkKGgpfWlmKGI9PWEtMSl7dGhpcy5zZXRMYXN0Q2hpbGQoaCl9fX19LGNvbnRhaW5zOmZ1bmN0 aW9uKGEpe3JldHVybiBhLmlzQW5jZXN0b3IodGhpcyl9LGlzQW5jZXN0b3I6ZnVuY3Rpb24oYSl7 dmFyIGI9dGhpcy5wYXJlbnROb2RlO3doaWxlKGIpe2lmKGI9PWEpe3JldHVybiB0cnVlfWI9Yi5w YXJlbnROb2RlfXJldHVybiBmYWxzZX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW05vZGUi Kyh0aGlzLmlkPyIgIit0aGlzLmlkOiIiKSsiXSJ9fSk7RXh0LnRyZWUuVHJlZU5vZGU9ZnVuY3Rp b24oYSl7YT1hfHx7fTtpZih0eXBlb2YgYT09InN0cmluZyIpe2E9e3RleHQ6YX19dGhpcy5jaGls ZHJlblJlbmRlcmVkPWZhbHNlO3RoaXMucmVuZGVyZWQ9ZmFsc2U7RXh0LnRyZWUuVHJlZU5vZGUu c3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5leHBhbmRlZD1hLmV4cGFu ZGVkPT09dHJ1ZTt0aGlzLmlzVGFyZ2V0PWEuaXNUYXJnZXQhPT1mYWxzZTt0aGlzLmRyYWdnYWJs ZT1hLmRyYWdnYWJsZSE9PWZhbHNlJiZhLmFsbG93RHJhZyE9PWZhbHNlO3RoaXMuYWxsb3dDaGls ZHJlbj1hLmFsbG93Q2hpbGRyZW4hPT1mYWxzZSYmYS5hbGxvd0Ryb3AhPT1mYWxzZTt0aGlzLnRl eHQ9YS50ZXh0O3RoaXMuZGlzYWJsZWQ9YS5kaXNhYmxlZD09PXRydWU7dGhpcy5oaWRkZW49YS5o aWRkZW49PT10cnVlO3RoaXMuYWRkRXZlbnRzKCJ0ZXh0Y2hhbmdlIiwiYmVmb3JlZXhwYW5kIiwi YmVmb3JlY29sbGFwc2UiLCJleHBhbmQiLCJkaXNhYmxlZGNoYW5nZSIsImNvbGxhcHNlIiwiYmVm b3JlY2xpY2siLCJjbGljayIsImNoZWNrY2hhbmdlIiwiZGJsY2xpY2siLCJjb250ZXh0bWVudSIs ImJlZm9yZWNoaWxkcmVucmVuZGVyZWQiKTt2YXIgYj10aGlzLmF0dHJpYnV0ZXMudWlQcm92aWRl cnx8dGhpcy5kZWZhdWx0VUl8fEV4dC50cmVlLlRyZWVOb2RlVUk7dGhpcy51aT1uZXcgYih0aGlz KX07RXh0LmV4dGVuZChFeHQudHJlZS5UcmVlTm9kZSxFeHQuZGF0YS5Ob2RlLHtwcmV2ZW50SFNj cm9sbDp0cnVlLGlzRXhwYW5kZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZH0sZ2V0 VUk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aX0sZ2V0TG9hZGVyOmZ1bmN0aW9uKCl7dmFyIGE7 cmV0dXJuIHRoaXMubG9hZGVyfHwoKGE9dGhpcy5nZXRPd25lclRyZWUoKSkmJmEubG9hZGVyP2Eu bG9hZGVyOm5ldyBFeHQudHJlZS5UcmVlTG9hZGVyKCkpfSxzZXRGaXJzdENoaWxkOmZ1bmN0aW9u KGEpe3ZhciBiPXRoaXMuZmlyc3RDaGlsZDtFeHQudHJlZS5UcmVlTm9kZS5zdXBlcmNsYXNzLnNl dEZpcnN0Q2hpbGQuY2FsbCh0aGlzLGEpO2lmKHRoaXMuY2hpbGRyZW5SZW5kZXJlZCYmYiYmYSE9 Yil7Yi5yZW5kZXJJbmRlbnQodHJ1ZSx0cnVlKX1pZih0aGlzLnJlbmRlcmVkKXt0aGlzLnJlbmRl ckluZGVudCh0cnVlLHRydWUpfX0sc2V0TGFzdENoaWxkOmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMu bGFzdENoaWxkO0V4dC50cmVlLlRyZWVOb2RlLnN1cGVyY2xhc3Muc2V0TGFzdENoaWxkLmNhbGwo dGhpcyxiKTtpZih0aGlzLmNoaWxkcmVuUmVuZGVyZWQmJmEmJmIhPWEpe2EucmVuZGVySW5kZW50 KHRydWUsdHJ1ZSl9aWYodGhpcy5yZW5kZXJlZCl7dGhpcy5yZW5kZXJJbmRlbnQodHJ1ZSx0cnVl KX19LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGIpe2lmKCFiLnJlbmRlciYmIUV4dC5pc0FycmF5KGIp KXtiPXRoaXMuZ2V0TG9hZGVyKCkuY3JlYXRlTm9kZShiKX12YXIgYT1FeHQudHJlZS5UcmVlTm9k ZS5zdXBlcmNsYXNzLmFwcGVuZENoaWxkLmNhbGwodGhpcyxiKTtpZihhJiZ0aGlzLmNoaWxkcmVu UmVuZGVyZWQpe2EucmVuZGVyKCl9dGhpcy51aS51cGRhdGVFeHBhbmRJY29uKCk7cmV0dXJuIGF9 LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKGEpe3RoaXMub3duZXJUcmVlLmdldFNlbGVjdGlvbk1vZGVs KCkudW5zZWxlY3QoYSk7RXh0LnRyZWUuVHJlZU5vZGUuc3VwZXJjbGFzcy5yZW1vdmVDaGlsZC5h cHBseSh0aGlzLGFyZ3VtZW50cyk7aWYodGhpcy5jaGlsZHJlblJlbmRlcmVkKXthLnVpLnJlbW92 ZSgpfWlmKHRoaXMuY2hpbGROb2Rlcy5sZW5ndGg8MSl7dGhpcy5jb2xsYXBzZShmYWxzZSxmYWxz ZSl9ZWxzZXt0aGlzLnVpLnVwZGF0ZUV4cGFuZEljb24oKX1pZighdGhpcy5maXJzdENoaWxkJiYh dGhpcy5pc0hpZGRlblJvb3QoKSl7dGhpcy5jaGlsZHJlblJlbmRlcmVkPWZhbHNlfXJldHVybiBh fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYyxhKXtpZighYy5yZW5kZXIpe2M9dGhpcy5nZXRMb2Fk ZXIoKS5jcmVhdGVOb2RlKGMpfXZhciBiPUV4dC50cmVlLlRyZWVOb2RlLnN1cGVyY2xhc3MuaW5z ZXJ0QmVmb3JlLmNhbGwodGhpcyxjLGEpO2lmKGImJmEmJnRoaXMuY2hpbGRyZW5SZW5kZXJlZCl7 Yy5yZW5kZXIoKX10aGlzLnVpLnVwZGF0ZUV4cGFuZEljb24oKTtyZXR1cm4gYn0sc2V0VGV4dDpm dW5jdGlvbihiKXt2YXIgYT10aGlzLnRleHQ7dGhpcy50ZXh0PWI7dGhpcy5hdHRyaWJ1dGVzLnRl eHQ9YjtpZih0aGlzLnJlbmRlcmVkKXt0aGlzLnVpLm9uVGV4dENoYW5nZSh0aGlzLGIsYSl9dGhp cy5maXJlRXZlbnQoInRleHRjaGFuZ2UiLHRoaXMsYixhKX0sc2VsZWN0OmZ1bmN0aW9uKCl7dGhp cy5nZXRPd25lclRyZWUoKS5nZXRTZWxlY3Rpb25Nb2RlbCgpLnNlbGVjdCh0aGlzKX0sdW5zZWxl Y3Q6ZnVuY3Rpb24oKXt0aGlzLmdldE93bmVyVHJlZSgpLmdldFNlbGVjdGlvbk1vZGVsKCkudW5z ZWxlY3QodGhpcyl9LGlzU2VsZWN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRPd25lclRy ZWUoKS5nZXRTZWxlY3Rpb25Nb2RlbCgpLmlzU2VsZWN0ZWQodGhpcyl9LGV4cGFuZDpmdW5jdGlv bihhLGMsZCxiKXtpZighdGhpcy5leHBhbmRlZCl7aWYodGhpcy5maXJlRXZlbnQoImJlZm9yZWV4 cGFuZCIsdGhpcyxhLGMpPT09ZmFsc2Upe3JldHVybn1pZighdGhpcy5jaGlsZHJlblJlbmRlcmVk KXt0aGlzLnJlbmRlckNoaWxkcmVuKCl9dGhpcy5leHBhbmRlZD10cnVlO2lmKCF0aGlzLmlzSGlk ZGVuUm9vdCgpJiYodGhpcy5nZXRPd25lclRyZWUoKS5hbmltYXRlJiZjIT09ZmFsc2UpfHxjKXt0 aGlzLnVpLmFuaW1FeHBhbmQoZnVuY3Rpb24oKXt0aGlzLmZpcmVFdmVudCgiZXhwYW5kIix0aGlz KTt0aGlzLnJ1bkNhbGxiYWNrKGQsYnx8dGhpcyxbdGhpc10pO2lmKGE9PT10cnVlKXt0aGlzLmV4 cGFuZENoaWxkTm9kZXModHJ1ZSl9fS5jcmVhdGVEZWxlZ2F0ZSh0aGlzKSk7cmV0dXJufWVsc2V7 dGhpcy51aS5leHBhbmQoKTt0aGlzLmZpcmVFdmVudCgiZXhwYW5kIix0aGlzKTt0aGlzLnJ1bkNh bGxiYWNrKGQsYnx8dGhpcyxbdGhpc10pfX1lbHNle3RoaXMucnVuQ2FsbGJhY2soZCxifHx0aGlz LFt0aGlzXSl9aWYoYT09PXRydWUpe3RoaXMuZXhwYW5kQ2hpbGROb2Rlcyh0cnVlKX19LHJ1bkNh bGxiYWNrOmZ1bmN0aW9uKGEsYyxiKXtpZihFeHQuaXNGdW5jdGlvbihhKSl7YS5hcHBseShjLGIp fX0saXNIaWRkZW5Sb290OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNSb290JiYhdGhpcy5nZXRP d25lclRyZWUoKS5yb290VmlzaWJsZX0sY29sbGFwc2U6ZnVuY3Rpb24oYixnLGgsZSl7aWYodGhp cy5leHBhbmRlZCYmIXRoaXMuaXNIaWRkZW5Sb290KCkpe2lmKHRoaXMuZmlyZUV2ZW50KCJiZWZv cmVjb2xsYXBzZSIsdGhpcyxiLGcpPT09ZmFsc2Upe3JldHVybn10aGlzLmV4cGFuZGVkPWZhbHNl O2lmKCh0aGlzLmdldE93bmVyVHJlZSgpLmFuaW1hdGUmJmchPT1mYWxzZSl8fGcpe3RoaXMudWku YW5pbUNvbGxhcHNlKGZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoImNvbGxhcHNlIix0aGlzKTt0 aGlzLnJ1bkNhbGxiYWNrKGgsZXx8dGhpcyxbdGhpc10pO2lmKGI9PT10cnVlKXt0aGlzLmNvbGxh cHNlQ2hpbGROb2Rlcyh0cnVlKX19LmNyZWF0ZURlbGVnYXRlKHRoaXMpKTtyZXR1cm59ZWxzZXt0 aGlzLnVpLmNvbGxhcHNlKCk7dGhpcy5maXJlRXZlbnQoImNvbGxhcHNlIix0aGlzKTt0aGlzLnJ1 bkNhbGxiYWNrKGgsZXx8dGhpcyxbdGhpc10pfX1lbHNle2lmKCF0aGlzLmV4cGFuZGVkKXt0aGlz LnJ1bkNhbGxiYWNrKGgsZXx8dGhpcyxbdGhpc10pfX1pZihiPT09dHJ1ZSl7dmFyIGQ9dGhpcy5j aGlsZE5vZGVzO2Zvcih2YXIgYz0wLGE9ZC5sZW5ndGg7YzxhO2MrKyl7ZFtjXS5jb2xsYXBzZSh0 cnVlLGZhbHNlKX19fSxkZWxheWVkRXhwYW5kOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmV4cGFuZFBy b2NJZCl7dGhpcy5leHBhbmRQcm9jSWQ9dGhpcy5leHBhbmQuZGVmZXIoYSx0aGlzKX19LGNhbmNl bEV4cGFuZDpmdW5jdGlvbigpe2lmKHRoaXMuZXhwYW5kUHJvY0lkKXtjbGVhclRpbWVvdXQodGhp cy5leHBhbmRQcm9jSWQpfXRoaXMuZXhwYW5kUHJvY0lkPWZhbHNlfSx0b2dnbGU6ZnVuY3Rpb24o KXtpZih0aGlzLmV4cGFuZGVkKXt0aGlzLmNvbGxhcHNlKCl9ZWxzZXt0aGlzLmV4cGFuZCgpfX0s ZW5zdXJlVmlzaWJsZTpmdW5jdGlvbihjLGIpe3ZhciBhPXRoaXMuZ2V0T3duZXJUcmVlKCk7YS5l eHBhbmRQYXRoKHRoaXMucGFyZW50Tm9kZT90aGlzLnBhcmVudE5vZGUuZ2V0UGF0aCgpOnRoaXMu Z2V0UGF0aCgpLGZhbHNlLGZ1bmN0aW9uKCl7dmFyIGQ9YS5nZXROb2RlQnlJZCh0aGlzLmlkKTth LmdldFRyZWVFbCgpLnNjcm9sbENoaWxkSW50b1ZpZXcoZC51aS5hbmNob3IpO3RoaXMucnVuQ2Fs bGJhY2soYyxifHx0aGlzLFt0aGlzXSl9LmNyZWF0ZURlbGVnYXRlKHRoaXMpKX0sZXhwYW5kQ2hp bGROb2RlczpmdW5jdGlvbihiKXt2YXIgZD10aGlzLmNoaWxkTm9kZXM7Zm9yKHZhciBjPTAsYT1k Lmxlbmd0aDtjPGE7YysrKXtkW2NdLmV4cGFuZChiKX19LGNvbGxhcHNlQ2hpbGROb2RlczpmdW5j dGlvbihiKXt2YXIgZD10aGlzLmNoaWxkTm9kZXM7Zm9yKHZhciBjPTAsYT1kLmxlbmd0aDtjPGE7 YysrKXtkW2NdLmNvbGxhcHNlKGIpfX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9 dHJ1ZTt0aGlzLnVuc2VsZWN0KCk7aWYodGhpcy5yZW5kZXJlZCYmdGhpcy51aS5vbkRpc2FibGVD aGFuZ2Upe3RoaXMudWkub25EaXNhYmxlQ2hhbmdlKHRoaXMsdHJ1ZSl9dGhpcy5maXJlRXZlbnQo ImRpc2FibGVkY2hhbmdlIix0aGlzLHRydWUpfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmRpc2Fi bGVkPWZhbHNlO2lmKHRoaXMucmVuZGVyZWQmJnRoaXMudWkub25EaXNhYmxlQ2hhbmdlKXt0aGlz LnVpLm9uRGlzYWJsZUNoYW5nZSh0aGlzLGZhbHNlKX10aGlzLmZpcmVFdmVudCgiZGlzYWJsZWRj aGFuZ2UiLHRoaXMsZmFsc2UpfSxyZW5kZXJDaGlsZHJlbjpmdW5jdGlvbihiKXtpZihiIT09ZmFs c2Upe3RoaXMuZmlyZUV2ZW50KCJiZWZvcmVjaGlsZHJlbnJlbmRlcmVkIix0aGlzKX12YXIgZD10 aGlzLmNoaWxkTm9kZXM7Zm9yKHZhciBjPTAsYT1kLmxlbmd0aDtjPGE7YysrKXtkW2NdLnJlbmRl cih0cnVlKX10aGlzLmNoaWxkcmVuUmVuZGVyZWQ9dHJ1ZX0sc29ydDpmdW5jdGlvbihlLGQpe0V4 dC50cmVlLlRyZWVOb2RlLnN1cGVyY2xhc3Muc29ydC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYo dGhpcy5jaGlsZHJlblJlbmRlcmVkKXt2YXIgYz10aGlzLmNoaWxkTm9kZXM7Zm9yKHZhciBiPTAs YT1jLmxlbmd0aDtiPGE7YisrKXtjW2JdLnJlbmRlcih0cnVlKX19fSxyZW5kZXI6ZnVuY3Rpb24o YSl7dGhpcy51aS5yZW5kZXIoYSk7aWYoIXRoaXMucmVuZGVyZWQpe3RoaXMuZ2V0T3duZXJUcmVl KCkucmVnaXN0ZXJOb2RlKHRoaXMpO3RoaXMucmVuZGVyZWQ9dHJ1ZTtpZih0aGlzLmV4cGFuZGVk KXt0aGlzLmV4cGFuZGVkPWZhbHNlO3RoaXMuZXhwYW5kKGZhbHNlLGZhbHNlKX19fSxyZW5kZXJJ bmRlbnQ6ZnVuY3Rpb24oYixlKXtpZihlKXt0aGlzLnVpLmNoaWxkSW5kZW50PW51bGx9dGhpcy51 aS5yZW5kZXJJbmRlbnQoKTtpZihiPT09dHJ1ZSYmdGhpcy5jaGlsZHJlblJlbmRlcmVkKXt2YXIg ZD10aGlzLmNoaWxkTm9kZXM7Zm9yKHZhciBjPTAsYT1kLmxlbmd0aDtjPGE7YysrKXtkW2NdLnJl bmRlckluZGVudCh0cnVlLGUpfX19LGJlZ2luVXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5jaGlsZHJl blJlbmRlcmVkPWZhbHNlfSxlbmRVcGRhdGU6ZnVuY3Rpb24oKXtpZih0aGlzLmV4cGFuZGVkJiZ0 aGlzLnJlbmRlcmVkKXt0aGlzLnJlbmRlckNoaWxkcmVuKCl9fSxkZXN0cm95OmZ1bmN0aW9uKCl7 aWYodGhpcy5jaGlsZE5vZGVzKXtmb3IodmFyIGI9MCxhPXRoaXMuY2hpbGROb2Rlcy5sZW5ndGg7 YjxhO2IrKyl7dGhpcy5jaGlsZE5vZGVzW2JdLmRlc3Ryb3koKX10aGlzLmNoaWxkTm9kZXM9bnVs bH1pZih0aGlzLnVpLmRlc3Ryb3kpe3RoaXMudWkuZGVzdHJveSgpfX0sb25JZENoYW5nZTpmdW5j dGlvbihhKXt0aGlzLnVpLm9uSWRDaGFuZ2UoYSl9fSk7RXh0LnRyZWUuVHJlZVBhbmVsLm5vZGVU eXBlcy5ub2RlPUV4dC50cmVlLlRyZWVOb2RlO0V4dC50cmVlLkFzeW5jVHJlZU5vZGU9ZnVuY3Rp b24oYSl7dGhpcy5sb2FkZWQ9YSYmYS5sb2FkZWQ9PT10cnVlO3RoaXMubG9hZGluZz1mYWxzZTtF eHQudHJlZS5Bc3luY1RyZWVOb2RlLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuYXBwbHkodGhpcyxh cmd1bWVudHMpO3RoaXMuYWRkRXZlbnRzKCJiZWZvcmVsb2FkIiwibG9hZCIpfTtFeHQuZXh0ZW5k KEV4dC50cmVlLkFzeW5jVHJlZU5vZGUsRXh0LnRyZWUuVHJlZU5vZGUse2V4cGFuZDpmdW5jdGlv bihiLGUsaCxjKXtpZih0aGlzLmxvYWRpbmcpe3ZhciBnO3ZhciBkPWZ1bmN0aW9uKCl7aWYoIXRo aXMubG9hZGluZyl7Y2xlYXJJbnRlcnZhbChnKTt0aGlzLmV4cGFuZChiLGUsaCxjKX19LmNyZWF0 ZURlbGVnYXRlKHRoaXMpO2c9c2V0SW50ZXJ2YWwoZCwyMDApO3JldHVybn1pZighdGhpcy5sb2Fk ZWQpe2lmKHRoaXMuZmlyZUV2ZW50KCJiZWZvcmVsb2FkIix0aGlzKT09PWZhbHNlKXtyZXR1cm59 dGhpcy5sb2FkaW5nPXRydWU7dGhpcy51aS5iZWZvcmVMb2FkKHRoaXMpO3ZhciBhPXRoaXMubG9h ZGVyfHx0aGlzLmF0dHJpYnV0ZXMubG9hZGVyfHx0aGlzLmdldE93bmVyVHJlZSgpLmdldExvYWRl cigpO2lmKGEpe2EubG9hZCh0aGlzLHRoaXMubG9hZENvbXBsZXRlLmNyZWF0ZURlbGVnYXRlKHRo aXMsW2IsZSxoLGNdKSx0aGlzKTtyZXR1cm59fUV4dC50cmVlLkFzeW5jVHJlZU5vZGUuc3VwZXJj bGFzcy5leHBhbmQuY2FsbCh0aGlzLGIsZSxoLGMpfSxpc0xvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1 cm4gdGhpcy5sb2FkaW5nfSxsb2FkQ29tcGxldGU6ZnVuY3Rpb24oYSxjLGQsYil7dGhpcy5sb2Fk aW5nPWZhbHNlO3RoaXMubG9hZGVkPXRydWU7dGhpcy51aS5hZnRlckxvYWQodGhpcyk7dGhpcy5m aXJlRXZlbnQoImxvYWQiLHRoaXMpO3RoaXMuZXhwYW5kKGEsYyxkLGIpfSxpc0xvYWRlZDpmdW5j dGlvbigpe3JldHVybiB0aGlzLmxvYWRlZH0saGFzQ2hpbGROb2RlczpmdW5jdGlvbigpe2lmKCF0 aGlzLmlzTGVhZigpJiYhdGhpcy5sb2FkZWQpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIEV4dC50 cmVlLkFzeW5jVHJlZU5vZGUuc3VwZXJjbGFzcy5oYXNDaGlsZE5vZGVzLmNhbGwodGhpcyl9fSxy ZWxvYWQ6ZnVuY3Rpb24oYixhKXt0aGlzLmNvbGxhcHNlKGZhbHNlLGZhbHNlKTt3aGlsZSh0aGlz LmZpcnN0Q2hpbGQpe3RoaXMucmVtb3ZlQ2hpbGQodGhpcy5maXJzdENoaWxkKS5kZXN0cm95KCl9 dGhpcy5jaGlsZHJlblJlbmRlcmVkPWZhbHNlO3RoaXMubG9hZGVkPWZhbHNlO2lmKHRoaXMuaXNI aWRkZW5Sb290KCkpe3RoaXMuZXhwYW5kZWQ9ZmFsc2V9dGhpcy5leHBhbmQoZmFsc2UsZmFsc2Us YixhKX19KTtFeHQudHJlZS5UcmVlUGFuZWwubm9kZVR5cGVzLmFzeW5jPUV4dC50cmVlLkFzeW5j VHJlZU5vZGU7RXh0LnRyZWUuVHJlZU5vZGVVST1mdW5jdGlvbihhKXt0aGlzLm5vZGU9YTt0aGlz LnJlbmRlcmVkPWZhbHNlO3RoaXMuYW5pbWF0aW5nPWZhbHNlO3RoaXMud2FzTGVhZj10cnVlO3Ro aXMuZWNjPSJ4LXRyZWUtZWMtaWNvbiB4LXRyZWUtZWxib3ciO3RoaXMuZW1wdHlJY29uPUV4dC5C TEFOS19JTUFHRV9VUkx9O0V4dC50cmVlLlRyZWVOb2RlVUkucHJvdG90eXBlPXtyZW1vdmVDaGls ZDpmdW5jdGlvbihhKXtpZih0aGlzLnJlbmRlcmVkKXt0aGlzLmN0Tm9kZS5yZW1vdmVDaGlsZChh LnVpLmdldEVsKCkpfX0sYmVmb3JlTG9hZDpmdW5jdGlvbigpe3RoaXMuYWRkQ2xhc3MoIngtdHJl ZS1ub2RlLWxvYWRpbmciKX0sYWZ0ZXJMb2FkOmZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVDbGFzcygi eC10cmVlLW5vZGUtbG9hZGluZyIpfSxvblRleHRDaGFuZ2U6ZnVuY3Rpb24oYixjLGEpe2lmKHRo aXMucmVuZGVyZWQpe3RoaXMudGV4dE5vZGUuaW5uZXJIVE1MPWN9fSxvbkRpc2FibGVDaGFuZ2U6 ZnVuY3Rpb24oYSxiKXt0aGlzLmRpc2FibGVkPWI7aWYodGhpcy5jaGVja2JveCl7dGhpcy5jaGVj a2JveC5kaXNhYmxlZD1ifWlmKGIpe3RoaXMuYWRkQ2xhc3MoIngtdHJlZS1ub2RlLWRpc2FibGVk Iil9ZWxzZXt0aGlzLnJlbW92ZUNsYXNzKCJ4LXRyZWUtbm9kZS1kaXNhYmxlZCIpfX0sb25TZWxl Y3RlZENoYW5nZTpmdW5jdGlvbihhKXtpZihhKXt0aGlzLmZvY3VzKCk7dGhpcy5hZGRDbGFzcygi eC10cmVlLXNlbGVjdGVkIil9ZWxzZXt0aGlzLnJlbW92ZUNsYXNzKCJ4LXRyZWUtc2VsZWN0ZWQi KX19LG9uTW92ZTpmdW5jdGlvbihhLGgsZSxnLGQsYil7dGhpcy5jaGlsZEluZGVudD1udWxsO2lm KHRoaXMucmVuZGVyZWQpe3ZhciBpPWcudWkuZ2V0Q29udGFpbmVyKCk7aWYoIWkpe3RoaXMuaG9s ZGVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMuaG9sZGVyLmFwcGVuZENoaWxk KHRoaXMud3JhcCk7cmV0dXJufXZhciBjPWI/Yi51aS5nZXRFbCgpOm51bGw7aWYoYyl7aS5pbnNl cnRCZWZvcmUodGhpcy53cmFwLGMpfWVsc2V7aS5hcHBlbmRDaGlsZCh0aGlzLndyYXApfXRoaXMu bm9kZS5yZW5kZXJJbmRlbnQodHJ1ZSxlIT1nKX19LGFkZENsYXNzOmZ1bmN0aW9uKGEpe2lmKHRo aXMuZWxOb2RlKXtFeHQuZmx5KHRoaXMuZWxOb2RlKS5hZGRDbGFzcyhhKX19LHJlbW92ZUNsYXNz OmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWxOb2RlKXtFeHQuZmx5KHRoaXMuZWxOb2RlKS5yZW1vdmVD bGFzcyhhKX19LHJlbW92ZTpmdW5jdGlvbigpe2lmKHRoaXMucmVuZGVyZWQpe3RoaXMuaG9sZGVy PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RoaXMuaG9sZGVyLmFwcGVuZENoaWxkKHRo aXMud3JhcCl9fSxmaXJlRXZlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLmZpcmVFdmVu dC5hcHBseSh0aGlzLm5vZGUsYXJndW1lbnRzKX0saW5pdEV2ZW50czpmdW5jdGlvbigpe3RoaXMu bm9kZS5vbigibW92ZSIsdGhpcy5vbk1vdmUsdGhpcyk7aWYodGhpcy5ub2RlLmRpc2FibGVkKXt0 aGlzLmFkZENsYXNzKCJ4LXRyZWUtbm9kZS1kaXNhYmxlZCIpO2lmKHRoaXMuY2hlY2tib3gpe3Ro aXMuY2hlY2tib3guZGlzYWJsZWQ9dHJ1ZX19aWYodGhpcy5ub2RlLmhpZGRlbil7dGhpcy5oaWRl KCl9dmFyIGI9dGhpcy5ub2RlLmdldE93bmVyVHJlZSgpO3ZhciBhPWIuZW5hYmxlRER8fGIuZW5h YmxlRHJhZ3x8Yi5lbmFibGVEcm9wO2lmKGEmJighdGhpcy5ub2RlLmlzUm9vdHx8Yi5yb290Vmlz aWJsZSkpe0V4dC5kZC5SZWdpc3RyeS5yZWdpc3Rlcih0aGlzLmVsTm9kZSx7bm9kZTp0aGlzLm5v ZGUsaGFuZGxlczp0aGlzLmdldERESGFuZGxlcygpLGlzSGFuZGxlOmZhbHNlfSl9fSxnZXREREhh bmRsZXM6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5pY29uTm9kZSx0aGlzLnRleHROb2RlLHRoaXMu ZWxOb2RlXX0saGlkZTpmdW5jdGlvbigpe3RoaXMubm9kZS5oaWRkZW49dHJ1ZTtpZih0aGlzLndy YXApe3RoaXMud3JhcC5zdHlsZS5kaXNwbGF5PSJub25lIn19LHNob3c6ZnVuY3Rpb24oKXt0aGlz Lm5vZGUuaGlkZGVuPWZhbHNlO2lmKHRoaXMud3JhcCl7dGhpcy53cmFwLnN0eWxlLmRpc3BsYXk9 IiJ9fSxvbkNvbnRleHRNZW51OmZ1bmN0aW9uKGEpe2lmKHRoaXMubm9kZS5oYXNMaXN0ZW5lcigi Y29udGV4dG1lbnUiKXx8dGhpcy5ub2RlLmdldE93bmVyVHJlZSgpLmhhc0xpc3RlbmVyKCJjb250 ZXh0bWVudSIpKXthLnByZXZlbnREZWZhdWx0KCk7dGhpcy5mb2N1cygpO3RoaXMuZmlyZUV2ZW50 KCJjb250ZXh0bWVudSIsdGhpcy5ub2RlLGEpfX0sb25DbGljazpmdW5jdGlvbihjKXtpZih0aGlz LmRyb3BwaW5nKXtjLnN0b3BFdmVudCgpO3JldHVybn1pZih0aGlzLmZpcmVFdmVudCgiYmVmb3Jl Y2xpY2siLHRoaXMubm9kZSxjKSE9PWZhbHNlKXt2YXIgYj1jLmdldFRhcmdldCgiYSIpO2lmKCF0 aGlzLmRpc2FibGVkJiZ0aGlzLm5vZGUuYXR0cmlidXRlcy5ocmVmJiZiKXt0aGlzLmZpcmVFdmVu dCgiY2xpY2siLHRoaXMubm9kZSxjKTtyZXR1cm59ZWxzZXtpZihiJiZjLmN0cmxLZXkpe2Muc3Rv cEV2ZW50KCl9fWMucHJldmVudERlZmF1bHQoKTtpZih0aGlzLmRpc2FibGVkKXtyZXR1cm59aWYo dGhpcy5ub2RlLmF0dHJpYnV0ZXMuc2luZ2xlQ2xpY2tFeHBhbmQmJiF0aGlzLmFuaW1hdGluZyYm dGhpcy5ub2RlLmlzRXhwYW5kYWJsZSgpKXt0aGlzLm5vZGUudG9nZ2xlKCl9dGhpcy5maXJlRXZl bnQoImNsaWNrIix0aGlzLm5vZGUsYyl9ZWxzZXtjLnN0b3BFdmVudCgpfX0sb25EYmxDbGljazpm dW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCk7aWYodGhpcy5kaXNhYmxlZCl7cmV0dXJufWlm KHRoaXMuY2hlY2tib3gpe3RoaXMudG9nZ2xlQ2hlY2soKX1pZighdGhpcy5hbmltYXRpbmcmJnRo aXMubm9kZS5pc0V4cGFuZGFibGUoKSl7dGhpcy5ub2RlLnRvZ2dsZSgpfXRoaXMuZmlyZUV2ZW50 KCJkYmxjbGljayIsdGhpcy5ub2RlLGEpfSxvbk92ZXI6ZnVuY3Rpb24oYSl7dGhpcy5hZGRDbGFz cygieC10cmVlLW5vZGUtb3ZlciIpfSxvbk91dDpmdW5jdGlvbihhKXt0aGlzLnJlbW92ZUNsYXNz KCJ4LXRyZWUtbm9kZS1vdmVyIil9LG9uQ2hlY2tDaGFuZ2U6ZnVuY3Rpb24oKXt2YXIgYT10aGlz LmNoZWNrYm94LmNoZWNrZWQ7dGhpcy5jaGVja2JveC5kZWZhdWx0Q2hlY2tlZD1hO3RoaXMubm9k ZS5hdHRyaWJ1dGVzLmNoZWNrZWQ9YTt0aGlzLmZpcmVFdmVudCgiY2hlY2tjaGFuZ2UiLHRoaXMu bm9kZSxhKX0sZWNDbGljazpmdW5jdGlvbihhKXtpZighdGhpcy5hbmltYXRpbmcmJnRoaXMubm9k ZS5pc0V4cGFuZGFibGUoKSl7dGhpcy5ub2RlLnRvZ2dsZSgpfX0sc3RhcnREcm9wOmZ1bmN0aW9u KCl7dGhpcy5kcm9wcGluZz10cnVlfSxlbmREcm9wOmZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5j dGlvbigpe3RoaXMuZHJvcHBpbmc9ZmFsc2V9LmNyZWF0ZURlbGVnYXRlKHRoaXMpLDUwKX0sZXhw YW5kOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGVFeHBhbmRJY29uKCk7dGhpcy5jdE5vZGUuc3R5bGUu ZGlzcGxheT0iIn0sZm9jdXM6ZnVuY3Rpb24oKXtpZighdGhpcy5ub2RlLnByZXZlbnRIU2Nyb2xs KXt0cnl7dGhpcy5hbmNob3IuZm9jdXMoKX1jYXRjaChjKXt9fWVsc2V7dHJ5e3ZhciBiPXRoaXMu bm9kZS5nZXRPd25lclRyZWUoKS5nZXRUcmVlRWwoKS5kb207dmFyIGE9Yi5zY3JvbGxMZWZ0O3Ro aXMuYW5jaG9yLmZvY3VzKCk7Yi5zY3JvbGxMZWZ0PWF9Y2F0Y2goYyl7fX19LHRvZ2dsZUNoZWNr OmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMuY2hlY2tib3g7aWYoYSl7YS5jaGVja2VkPShiPT09dW5k ZWZpbmVkPyFhLmNoZWNrZWQ6Yik7dGhpcy5vbkNoZWNrQ2hhbmdlKCl9fSxibHVyOmZ1bmN0aW9u KCl7dHJ5e3RoaXMuYW5jaG9yLmJsdXIoKX1jYXRjaChhKXt9fSxhbmltRXhwYW5kOmZ1bmN0aW9u KGIpe3ZhciBhPUV4dC5nZXQodGhpcy5jdE5vZGUpO2Euc3RvcEZ4KCk7aWYoIXRoaXMubm9kZS5p c0V4cGFuZGFibGUoKSl7dGhpcy51cGRhdGVFeHBhbmRJY29uKCk7dGhpcy5jdE5vZGUuc3R5bGUu ZGlzcGxheT0iIjtFeHQuY2FsbGJhY2soYik7cmV0dXJufXRoaXMuYW5pbWF0aW5nPXRydWU7dGhp cy51cGRhdGVFeHBhbmRJY29uKCk7YS5zbGlkZUluKCJ0Iix7Y2FsbGJhY2s6ZnVuY3Rpb24oKXt0 aGlzLmFuaW1hdGluZz1mYWxzZTtFeHQuY2FsbGJhY2soYil9LHNjb3BlOnRoaXMsZHVyYXRpb246 dGhpcy5ub2RlLm93bmVyVHJlZS5kdXJhdGlvbnx8MC4yNX0pfSxoaWdobGlnaHQ6ZnVuY3Rpb24o KXt2YXIgYT10aGlzLm5vZGUuZ2V0T3duZXJUcmVlKCk7RXh0LmZseSh0aGlzLndyYXApLmhpZ2hs aWdodChhLmhsQ29sb3J8fCJDM0RBRjkiLHtlbmRDb2xvcjphLmhsQmFzZUNvbG9yfSl9LGNvbGxh cHNlOmZ1bmN0aW9uKCl7dGhpcy51cGRhdGVFeHBhbmRJY29uKCk7dGhpcy5jdE5vZGUuc3R5bGUu ZGlzcGxheT0ibm9uZSJ9LGFuaW1Db2xsYXBzZTpmdW5jdGlvbihiKXt2YXIgYT1FeHQuZ2V0KHRo aXMuY3ROb2RlKTthLmVuYWJsZURpc3BsYXlNb2RlKCJibG9jayIpO2Euc3RvcEZ4KCk7dGhpcy5h bmltYXRpbmc9dHJ1ZTt0aGlzLnVwZGF0ZUV4cGFuZEljb24oKTthLnNsaWRlT3V0KCJ0Iix7Y2Fs bGJhY2s6ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGluZz1mYWxzZTtFeHQuY2FsbGJhY2soYil9LHNj b3BlOnRoaXMsZHVyYXRpb246dGhpcy5ub2RlLm93bmVyVHJlZS5kdXJhdGlvbnx8MC4yNX0pfSxn ZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdE5vZGV9LGdldEVsOmZ1bmN0aW9u KCl7cmV0dXJuIHRoaXMud3JhcH0sYXBwZW5kRERHaG9zdDpmdW5jdGlvbihhKXthLmFwcGVuZENo aWxkKHRoaXMuZWxOb2RlLmNsb25lTm9kZSh0cnVlKSl9LGdldEREUmVwYWlyWFk6ZnVuY3Rpb24o KXtyZXR1cm4gRXh0LmxpYi5Eb20uZ2V0WFkodGhpcy5pY29uTm9kZSl9LG9uUmVuZGVyOmZ1bmN0 aW9uKCl7dGhpcy5yZW5kZXIoKX0scmVuZGVyOmZ1bmN0aW9uKGMpe3ZhciBlPXRoaXMubm9kZSxi PWUuYXR0cmlidXRlczt2YXIgZD1lLnBhcmVudE5vZGU/ZS5wYXJlbnROb2RlLnVpLmdldENvbnRh aW5lcigpOmUub3duZXJUcmVlLmlubmVyQ3QuZG9tO2lmKCF0aGlzLnJlbmRlcmVkKXt0aGlzLnJl bmRlcmVkPXRydWU7dGhpcy5yZW5kZXJFbGVtZW50cyhlLGIsZCxjKTtpZihiLnF0aXApe2lmKHRo aXMudGV4dE5vZGUuc2V0QXR0cmlidXRlTlMpe3RoaXMudGV4dE5vZGUuc2V0QXR0cmlidXRlTlMo ImV4dCIsInF0aXAiLGIucXRpcCk7aWYoYi5xdGlwVGl0bGUpe3RoaXMudGV4dE5vZGUuc2V0QXR0 cmlidXRlTlMoImV4dCIsInF0aXRsZSIsYi5xdGlwVGl0bGUpfX1lbHNle3RoaXMudGV4dE5vZGUu c2V0QXR0cmlidXRlKCJleHQ6cXRpcCIsYi5xdGlwKTtpZihiLnF0aXBUaXRsZSl7dGhpcy50ZXh0 Tm9kZS5zZXRBdHRyaWJ1dGUoImV4dDpxdGl0bGUiLGIucXRpcFRpdGxlKX19fWVsc2V7aWYoYi5x dGlwQ2ZnKXtiLnF0aXBDZmcudGFyZ2V0PUV4dC5pZCh0aGlzLnRleHROb2RlKTtFeHQuUXVpY2tU aXBzLnJlZ2lzdGVyKGIucXRpcENmZyl9fXRoaXMuaW5pdEV2ZW50cygpO2lmKCF0aGlzLm5vZGUu ZXhwYW5kZWQpe3RoaXMudXBkYXRlRXhwYW5kSWNvbih0cnVlKX19ZWxzZXtpZihjPT09dHJ1ZSl7 ZC5hcHBlbmRDaGlsZCh0aGlzLndyYXApfX19LHJlbmRlckVsZW1lbnRzOmZ1bmN0aW9uKGUsayxq LGwpe3RoaXMuaW5kZW50TWFya3VwPWUucGFyZW50Tm9kZT9lLnBhcmVudE5vZGUudWkuZ2V0Q2hp bGRJbmRlbnQoKToiIjt2YXIgZz10eXBlb2Ygay5jaGVja2VkPT0iYm9vbGVhbiI7dmFyIGM9ay5o cmVmP2suaHJlZjpFeHQuaXNHZWNrbz8iIjoiIyI7dmFyIGQ9Wyc8bGkgY2xhc3M9IngtdHJlZS1u b2RlIj48ZGl2IGV4dDp0cmVlLW5vZGUtaWQ9IicsZS5pZCwnIiBjbGFzcz0ieC10cmVlLW5vZGUt ZWwgeC10cmVlLW5vZGUtbGVhZiB4LXVuc2VsZWN0YWJsZSAnLGsuY2xzLCciIHVuc2VsZWN0YWJs ZT0ib24iPicsJzxzcGFuIGNsYXNzPSJ4LXRyZWUtbm9kZS1pbmRlbnQiPicsdGhpcy5pbmRlbnRN YXJrdXAsIjwvc3Bhbj4iLCc8aW1nIHNyYz0iJyx0aGlzLmVtcHR5SWNvbiwnIiBjbGFzcz0ieC10 cmVlLWVjLWljb24geC10cmVlLWVsYm93IiAvPicsJzxpbWcgc3JjPSInLGsuaWNvbnx8dGhpcy5l bXB0eUljb24sJyIgY2xhc3M9IngtdHJlZS1ub2RlLWljb24nLChrLmljb24/IiB4LXRyZWUtbm9k ZS1pbmxpbmUtaWNvbiI6IiIpLChrLmljb25DbHM/IiAiK2suaWNvbkNsczoiIiksJyIgdW5zZWxl Y3RhYmxlPSJvbiIgLz4nLGc/KCc8aW5wdXQgY2xhc3M9IngtdHJlZS1ub2RlLWNiIiB0eXBlPSJj aGVja2JveCIgJysoay5jaGVja2VkPydjaGVja2VkPSJjaGVja2VkIiAvPic6Ii8+IikpOiIiLCc8 YSBoaWRlZm9jdXM9Im9uIiBjbGFzcz0ieC10cmVlLW5vZGUtYW5jaG9yIiBocmVmPSInLGMsJyIg dGFiSW5kZXg9IjEiICcsay5ocmVmVGFyZ2V0PycgdGFyZ2V0PSInK2suaHJlZlRhcmdldCsnIic6 IiIsJz48c3BhbiB1bnNlbGVjdGFibGU9Im9uIj4nLGUudGV4dCwiPC9zcGFuPjwvYT48L2Rpdj4i LCc8dWwgY2xhc3M9IngtdHJlZS1ub2RlLWN0IiBzdHlsZT0iZGlzcGxheTpub25lOyI+PC91bD4n LCI8L2xpPiJdLmpvaW4oIiIpO3ZhciBiO2lmKGwhPT10cnVlJiZlLm5leHRTaWJsaW5nJiYoYj1l Lm5leHRTaWJsaW5nLnVpLmdldEVsKCkpKXt0aGlzLndyYXA9RXh0LkRvbUhlbHBlci5pbnNlcnRI dG1sKCJiZWZvcmVCZWdpbiIsYixkKX1lbHNle3RoaXMud3JhcD1FeHQuRG9tSGVscGVyLmluc2Vy dEh0bWwoImJlZm9yZUVuZCIsaixkKX10aGlzLmVsTm9kZT10aGlzLndyYXAuY2hpbGROb2Rlc1sw XTt0aGlzLmN0Tm9kZT10aGlzLndyYXAuY2hpbGROb2Rlc1sxXTt2YXIgaT10aGlzLmVsTm9kZS5j aGlsZE5vZGVzO3RoaXMuaW5kZW50Tm9kZT1pWzBdO3RoaXMuZWNOb2RlPWlbMV07dGhpcy5pY29u Tm9kZT1pWzJdO3ZhciBoPTM7aWYoZyl7dGhpcy5jaGVja2JveD1pWzNdO3RoaXMuY2hlY2tib3gu ZGVmYXVsdENoZWNrZWQ9dGhpcy5jaGVja2JveC5jaGVja2VkO2grK310aGlzLmFuY2hvcj1pW2hd O3RoaXMudGV4dE5vZGU9aVtoXS5maXJzdENoaWxkfSxnZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1 cm4gdGhpcy5hbmNob3J9LGdldFRleHRFbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHROb2Rl fSxnZXRJY29uRWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29uTm9kZX0saXNDaGVja2VkOmZ1 bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hlY2tib3g/dGhpcy5jaGVja2JveC5jaGVja2VkOmZhbHNl fSx1cGRhdGVFeHBhbmRJY29uOmZ1bmN0aW9uKCl7aWYodGhpcy5yZW5kZXJlZCl7dmFyIGc9dGhp cy5ub2RlLGQsYzt2YXIgYT1nLmlzTGFzdCgpPyJ4LXRyZWUtZWxib3ctZW5kIjoieC10cmVlLWVs Ym93Ijt2YXIgZT1nLmhhc0NoaWxkTm9kZXMoKTtpZihlfHxnLmF0dHJpYnV0ZXMuZXhwYW5kYWJs ZSl7aWYoZy5leHBhbmRlZCl7YSs9Ii1taW51cyI7ZD0ieC10cmVlLW5vZGUtY29sbGFwc2VkIjtj PSJ4LXRyZWUtbm9kZS1leHBhbmRlZCJ9ZWxzZXthKz0iLXBsdXMiO2Q9IngtdHJlZS1ub2RlLWV4 cGFuZGVkIjtjPSJ4LXRyZWUtbm9kZS1jb2xsYXBzZWQifWlmKHRoaXMud2FzTGVhZil7dGhpcy5y ZW1vdmVDbGFzcygieC10cmVlLW5vZGUtbGVhZiIpO3RoaXMud2FzTGVhZj1mYWxzZX1pZih0aGlz LmMxIT1kfHx0aGlzLmMyIT1jKXtFeHQuZmx5KHRoaXMuZWxOb2RlKS5yZXBsYWNlQ2xhc3MoZCxj KTt0aGlzLmMxPWQ7dGhpcy5jMj1jfX1lbHNle2lmKCF0aGlzLndhc0xlYWYpe0V4dC5mbHkodGhp cy5lbE5vZGUpLnJlcGxhY2VDbGFzcygieC10cmVlLW5vZGUtZXhwYW5kZWQiLCJ4LXRyZWUtbm9k ZS1sZWFmIik7ZGVsZXRlIHRoaXMuYzE7ZGVsZXRlIHRoaXMuYzI7dGhpcy53YXNMZWFmPXRydWV9 fXZhciBiPSJ4LXRyZWUtZWMtaWNvbiAiK2E7aWYodGhpcy5lY2MhPWIpe3RoaXMuZWNOb2RlLmNs YXNzTmFtZT1iO3RoaXMuZWNjPWJ9fX0sb25JZENoYW5nZTpmdW5jdGlvbihhKXtpZih0aGlzLnJl bmRlcmVkKXt0aGlzLmVsTm9kZS5zZXRBdHRyaWJ1dGUoImV4dDp0cmVlLW5vZGUtaWQiLGEpfX0s Z2V0Q2hpbGRJbmRlbnQ6ZnVuY3Rpb24oKXtpZighdGhpcy5jaGlsZEluZGVudCl7dmFyIGE9W107 dmFyIGI9dGhpcy5ub2RlO3doaWxlKGIpe2lmKCFiLmlzUm9vdHx8KGIuaXNSb290JiZiLm93bmVy VHJlZS5yb290VmlzaWJsZSkpe2lmKCFiLmlzTGFzdCgpKXthLnVuc2hpZnQoJzxpbWcgc3JjPSIn K3RoaXMuZW1wdHlJY29uKyciIGNsYXNzPSJ4LXRyZWUtZWxib3ctbGluZSIgLz4nKX1lbHNle2Eu dW5zaGlmdCgnPGltZyBzcmM9IicrdGhpcy5lbXB0eUljb24rJyIgY2xhc3M9IngtdHJlZS1pY29u IiAvPicpfX1iPWIucGFyZW50Tm9kZX10aGlzLmNoaWxkSW5kZW50PWEuam9pbigiIil9cmV0dXJu IHRoaXMuY2hpbGRJbmRlbnR9LHJlbmRlckluZGVudDpmdW5jdGlvbigpe2lmKHRoaXMucmVuZGVy ZWQpe3ZhciBhPSIiO3ZhciBiPXRoaXMubm9kZS5wYXJlbnROb2RlO2lmKGIpe2E9Yi51aS5nZXRD aGlsZEluZGVudCgpfWlmKHRoaXMuaW5kZW50TWFya3VwIT1hKXt0aGlzLmluZGVudE5vZGUuaW5u ZXJIVE1MPWE7dGhpcy5pbmRlbnRNYXJrdXA9YX10aGlzLnVwZGF0ZUV4cGFuZEljb24oKX19LGRl c3Ryb3k6ZnVuY3Rpb24oKXtpZih0aGlzLmVsTm9kZSl7RXh0LmRkLlJlZ2lzdHJ5LnVucmVnaXN0 ZXIodGhpcy5lbE5vZGUuaWQpfWRlbGV0ZSB0aGlzLmVsTm9kZTtkZWxldGUgdGhpcy5jdE5vZGU7 ZGVsZXRlIHRoaXMuaW5kZW50Tm9kZTtkZWxldGUgdGhpcy5lY05vZGU7ZGVsZXRlIHRoaXMuaWNv bk5vZGU7ZGVsZXRlIHRoaXMuY2hlY2tib3g7ZGVsZXRlIHRoaXMuYW5jaG9yO2RlbGV0ZSB0aGlz LnRleHROb2RlO2lmKHRoaXMuaG9sZGVyKXtkZWxldGUgdGhpcy53cmFwO0V4dC5yZW1vdmVOb2Rl KHRoaXMuaG9sZGVyKTtkZWxldGUgdGhpcy5ob2xkZXJ9ZWxzZXtFeHQucmVtb3ZlTm9kZSh0aGlz LndyYXApO2RlbGV0ZSB0aGlzLndyYXB9fX07RXh0LnRyZWUuUm9vdFRyZWVOb2RlVUk9RXh0LmV4 dGVuZChFeHQudHJlZS5UcmVlTm9kZVVJLHtyZW5kZXI6ZnVuY3Rpb24oKXtpZighdGhpcy5yZW5k ZXJlZCl7dmFyIGE9dGhpcy5ub2RlLm93bmVyVHJlZS5pbm5lckN0LmRvbTt0aGlzLm5vZGUuZXhw YW5kZWQ9dHJ1ZTthLmlubmVySFRNTD0nPGRpdiBjbGFzcz0ieC10cmVlLXJvb3Qtbm9kZSI+PC9k aXY+Jzt0aGlzLndyYXA9dGhpcy5jdE5vZGU9YS5maXJzdENoaWxkfX0sY29sbGFwc2U6RXh0LmVt cHR5Rm4sZXhwYW5kOkV4dC5lbXB0eUZufSk7RXh0LnRyZWUuVHJlZUxvYWRlcj1mdW5jdGlvbihh KXt0aGlzLmJhc2VQYXJhbXM9e307RXh0LmFwcGx5KHRoaXMsYSk7dGhpcy5hZGRFdmVudHMoImJl Zm9yZWxvYWQiLCJsb2FkIiwibG9hZGV4Y2VwdGlvbiIpO0V4dC50cmVlLlRyZWVMb2FkZXIuc3Vw ZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO2lmKHR5cGVvZiB0aGlzLnBhcmFtT3JkZXI9 PSJzdHJpbmciKXt0aGlzLnBhcmFtT3JkZXI9dGhpcy5wYXJhbU9yZGVyLnNwbGl0KC9bXHMsfF0v KX19O0V4dC5leHRlbmQoRXh0LnRyZWUuVHJlZUxvYWRlcixFeHQudXRpbC5PYnNlcnZhYmxlLHt1 aVByb3ZpZGVyczp7fSxjbGVhck9uTG9hZDp0cnVlLHBhcmFtT3JkZXI6dW5kZWZpbmVkLHBhcmFt c0FzSGFzaDpmYWxzZSxkaXJlY3RGbjp1bmRlZmluZWQsbG9hZDpmdW5jdGlvbihiLGMsYSl7aWYo dGhpcy5jbGVhck9uTG9hZCl7d2hpbGUoYi5maXJzdENoaWxkKXtiLnJlbW92ZUNoaWxkKGIuZmly c3RDaGlsZCl9fWlmKHRoaXMuZG9QcmVsb2FkKGIpKXt0aGlzLnJ1bkNhbGxiYWNrKGMsYXx8Yixb XSl9ZWxzZXtpZih0aGlzLmRpcmVjdEZufHx0aGlzLmRhdGFVcmx8fHRoaXMudXJsKXt0aGlzLnJl cXVlc3REYXRhKGIsYyxhfHxiKX19fSxkb1ByZWxvYWQ6ZnVuY3Rpb24oZCl7aWYoZC5hdHRyaWJ1 dGVzLmNoaWxkcmVuKXtpZihkLmNoaWxkTm9kZXMubGVuZ3RoPDEpe3ZhciBjPWQuYXR0cmlidXRl cy5jaGlsZHJlbjtkLmJlZ2luVXBkYXRlKCk7Zm9yKHZhciBiPTAsYT1jLmxlbmd0aDtiPGE7Yisr KXt2YXIgZT1kLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlTm9kZShjW2JdKSk7aWYodGhpcy5wcmVs b2FkQ2hpbGRyZW4pe3RoaXMuZG9QcmVsb2FkKGUpfX1kLmVuZFVwZGF0ZSgpfXJldHVybiB0cnVl fXJldHVybiBmYWxzZX0sZ2V0UGFyYW1zOmZ1bmN0aW9uKGcpe3ZhciBiPVtdLGU9dGhpcy5iYXNl UGFyYW1zO2lmKHRoaXMuZGlyZWN0Rm4pe2IucHVzaChnLmlkKTtpZihlKXtpZih0aGlzLnBhcmFt T3JkZXIpe2Zvcih2YXIgZD0wLGE9dGhpcy5wYXJhbU9yZGVyLmxlbmd0aDtkPGE7ZCsrKXtiLnB1 c2goZVt0aGlzLnBhcmFtT3JkZXJbZF1dKX19ZWxzZXtpZih0aGlzLnBhcmFtc0FzSGFzaCl7Yi5w dXNoKGUpfX19cmV0dXJuIGJ9ZWxzZXtmb3IodmFyIGMgaW4gZSl7aWYoIUV4dC5pc0Z1bmN0aW9u KGVbY10pKXtiLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KGMpLCI9IixlbmNvZGVVUklDb21wb25l bnQoZVtjXSksIiYiKX19Yi5wdXNoKCJub2RlPSIsZW5jb2RlVVJJQ29tcG9uZW50KGcuaWQpKTty ZXR1cm4gYi5qb2luKCIiKX19LHJlcXVlc3REYXRhOmZ1bmN0aW9uKGMsZCxiKXtpZih0aGlzLmZp cmVFdmVudCgiYmVmb3JlbG9hZCIsdGhpcyxjLGQpIT09ZmFsc2Upe2lmKHRoaXMuZGlyZWN0Rm4p e3ZhciBhPXRoaXMuZ2V0UGFyYW1zKGMpO2EucHVzaCh0aGlzLnByb2Nlc3NEaXJlY3RSZXNwb25z ZS5jcmVhdGVEZWxlZ2F0ZSh0aGlzLFt7Y2FsbGJhY2s6ZCxub2RlOmMsc2NvcGU6Yn1dLHRydWUp KTt0aGlzLmRpcmVjdEZuLmFwcGx5KHdpbmRvdyxhKX1lbHNle3RoaXMudHJhbnNJZD1FeHQuQWph eC5yZXF1ZXN0KHttZXRob2Q6dGhpcy5yZXF1ZXN0TWV0aG9kLHVybDp0aGlzLmRhdGFVcmx8fHRo aXMudXJsLHN1Y2Nlc3M6dGhpcy5oYW5kbGVSZXNwb25zZSxmYWlsdXJlOnRoaXMuaGFuZGxlRmFp bHVyZSxzY29wZTp0aGlzLGFyZ3VtZW50OntjYWxsYmFjazpkLG5vZGU6YyxzY29wZTpifSxwYXJh bXM6dGhpcy5nZXRQYXJhbXMoYyl9KX19ZWxzZXt0aGlzLnJ1bkNhbGxiYWNrKGQsYnx8YyxbXSl9 fSxwcm9jZXNzRGlyZWN0UmVzcG9uc2U6ZnVuY3Rpb24oYSxiLGMpe2lmKGIuc3RhdHVzKXt0aGlz LmhhbmRsZVJlc3BvbnNlKHtyZXNwb25zZURhdGE6RXh0LmlzQXJyYXkoYSk/YTpudWxsLHJlc3Bv bnNlVGV4dDphLGFyZ3VtZW50OmN9KX1lbHNle3RoaXMuaGFuZGxlRmFpbHVyZSh7YXJndW1lbnQ6 Y30pfX0scnVuQ2FsbGJhY2s6ZnVuY3Rpb24oYSxjLGIpe2lmKEV4dC5pc0Z1bmN0aW9uKGEpKXth LmFwcGx5KGMsYil9fSxpc0xvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gISF0aGlzLnRyYW5zSWR9 LGFib3J0OmZ1bmN0aW9uKCl7aWYodGhpcy5pc0xvYWRpbmcoKSl7RXh0LkFqYXguYWJvcnQodGhp cy50cmFuc0lkKX19LGNyZWF0ZU5vZGU6ZnVuY3Rpb24oYXR0cil7aWYodGhpcy5iYXNlQXR0cnMp e0V4dC5hcHBseUlmKGF0dHIsdGhpcy5iYXNlQXR0cnMpfWlmKHRoaXMuYXBwbHlMb2FkZXIhPT1m YWxzZSl7YXR0ci5sb2FkZXI9dGhpc31pZih0eXBlb2YgYXR0ci51aVByb3ZpZGVyPT0ic3RyaW5n Iil7YXR0ci51aVByb3ZpZGVyPXRoaXMudWlQcm92aWRlcnNbYXR0ci51aVByb3ZpZGVyXXx8ZXZh bChhdHRyLnVpUHJvdmlkZXIpfWlmKGF0dHIubm9kZVR5cGUpe3JldHVybiBuZXcgRXh0LnRyZWUu VHJlZVBhbmVsLm5vZGVUeXBlc1thdHRyLm5vZGVUeXBlXShhdHRyKX1lbHNle3JldHVybiBhdHRy LmxlYWY/bmV3IEV4dC50cmVlLlRyZWVOb2RlKGF0dHIpOm5ldyBFeHQudHJlZS5Bc3luY1RyZWVO b2RlKGF0dHIpfX0scHJvY2Vzc1Jlc3BvbnNlOmZ1bmN0aW9uKGQsYyxrLGwpe3ZhciBtPWQucmVz cG9uc2VUZXh0O3RyeXt2YXIgYT1kLnJlc3BvbnNlRGF0YXx8RXh0LmRlY29kZShtKTtjLmJlZ2lu VXBkYXRlKCk7Zm9yKHZhciBnPTAsaD1hLmxlbmd0aDtnPGg7ZysrKXt2YXIgYj10aGlzLmNyZWF0 ZU5vZGUoYVtnXSk7aWYoYil7Yy5hcHBlbmRDaGlsZChiKX19Yy5lbmRVcGRhdGUoKTt0aGlzLnJ1 bkNhbGxiYWNrKGssbHx8YyxbY10pfWNhdGNoKGope3RoaXMuaGFuZGxlRmFpbHVyZShkKX19LGhh bmRsZVJlc3BvbnNlOmZ1bmN0aW9uKGMpe3RoaXMudHJhbnNJZD1mYWxzZTt2YXIgYj1jLmFyZ3Vt ZW50O3RoaXMucHJvY2Vzc1Jlc3BvbnNlKGMsYi5ub2RlLGIuY2FsbGJhY2ssYi5zY29wZSk7dGhp cy5maXJlRXZlbnQoImxvYWQiLHRoaXMsYi5ub2RlLGMpfSxoYW5kbGVGYWlsdXJlOmZ1bmN0aW9u KGMpe3RoaXMudHJhbnNJZD1mYWxzZTt2YXIgYj1jLmFyZ3VtZW50O3RoaXMuZmlyZUV2ZW50KCJs b2FkZXhjZXB0aW9uIix0aGlzLGIubm9kZSxjKTt0aGlzLnJ1bkNhbGxiYWNrKGIuY2FsbGJhY2ss Yi5zY29wZXx8Yi5ub2RlLFtiLm5vZGVdKX19KTtFeHQudHJlZS5UcmVlRmlsdGVyPWZ1bmN0aW9u KGEsYil7dGhpcy50cmVlPWE7dGhpcy5maWx0ZXJlZD17fTtFeHQuYXBwbHkodGhpcyxiKX07RXh0 LnRyZWUuVHJlZUZpbHRlci5wcm90b3R5cGU9e2NsZWFyQmxhbms6ZmFsc2UscmV2ZXJzZTpmYWxz ZSxhdXRvQ2xlYXI6ZmFsc2UscmVtb3ZlOmZhbHNlLGZpbHRlcjpmdW5jdGlvbihkLGEsYil7YT1h fHwidGV4dCI7dmFyIGM7aWYodHlwZW9mIGQ9PSJzdHJpbmciKXt2YXIgZT1kLmxlbmd0aDtpZihl PT0wJiZ0aGlzLmNsZWFyQmxhbmspe3RoaXMuY2xlYXIoKTtyZXR1cm59ZD1kLnRvTG93ZXJDYXNl KCk7Yz1mdW5jdGlvbihnKXtyZXR1cm4gZy5hdHRyaWJ1dGVzW2FdLnN1YnN0cigwLGUpLnRvTG93 ZXJDYXNlKCk9PWR9fWVsc2V7aWYoZC5leGVjKXtjPWZ1bmN0aW9uKGcpe3JldHVybiBkLnRlc3Qo Zy5hdHRyaWJ1dGVzW2FdKX19ZWxzZXt0aHJvdyJJbGxlZ2FsIGZpbHRlciB0eXBlLCBtdXN0IGJl IHN0cmluZyBvciByZWdleCJ9fXRoaXMuZmlsdGVyQnkoYyxudWxsLGIpfSxmaWx0ZXJCeTpmdW5j dGlvbihkLGMsYil7Yj1ifHx0aGlzLnRyZWUucm9vdDtpZih0aGlzLmF1dG9DbGVhcil7dGhpcy5j bGVhcigpfXZhciBhPXRoaXMuZmlsdGVyZWQsaT10aGlzLnJldmVyc2U7dmFyIGU9ZnVuY3Rpb24o ayl7aWYoaz09Yil7cmV0dXJuIHRydWV9aWYoYVtrLmlkXSl7cmV0dXJuIGZhbHNlfXZhciBqPWQu Y2FsbChjfHxrLGspO2lmKCFqfHxpKXthW2suaWRdPWs7ay51aS5oaWRlKCk7cmV0dXJuIGZhbHNl fXJldHVybiB0cnVlfTtiLmNhc2NhZGUoZSk7aWYodGhpcy5yZW1vdmUpe2Zvcih2YXIgaCBpbiBh KXtpZih0eXBlb2YgaCE9ImZ1bmN0aW9uIil7dmFyIGc9YVtoXTtpZihnJiZnLnBhcmVudE5vZGUp e2cucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChnKX19fX19LGNsZWFyOmZ1bmN0aW9uKCl7dmFyIGI9 dGhpcy50cmVlO3ZhciBhPXRoaXMuZmlsdGVyZWQ7Zm9yKHZhciBkIGluIGEpe2lmKHR5cGVvZiBk IT0iZnVuY3Rpb24iKXt2YXIgYz1hW2RdO2lmKGMpe2MudWkuc2hvdygpfX19dGhpcy5maWx0ZXJl ZD17fX19O0V4dC50cmVlLlRyZWVTb3J0ZXI9ZnVuY3Rpb24oYixjKXtFeHQuYXBwbHkodGhpcyxj KTtiLm9uKCJiZWZvcmVjaGlsZHJlbnJlbmRlcmVkIix0aGlzLmRvU29ydCx0aGlzKTtiLm9uKCJh cHBlbmQiLHRoaXMudXBkYXRlU29ydCx0aGlzKTtiLm9uKCJpbnNlcnQiLHRoaXMudXBkYXRlU29y dCx0aGlzKTtiLm9uKCJ0ZXh0Y2hhbmdlIix0aGlzLnVwZGF0ZVNvcnRQYXJlbnQsdGhpcyk7dmFy IGU9dGhpcy5kaXImJnRoaXMuZGlyLnRvTG93ZXJDYXNlKCk9PSJkZXNjIjt2YXIgZz10aGlzLnBy b3BlcnR5fHwidGV4dCI7dmFyIGg9dGhpcy5zb3J0VHlwZTt2YXIgYT10aGlzLmZvbGRlclNvcnQ7 dmFyIGQ9dGhpcy5jYXNlU2Vuc2l0aXZlPT09dHJ1ZTt2YXIgaT10aGlzLmxlYWZBdHRyfHwibGVh ZiI7dGhpcy5zb3J0Rm49ZnVuY3Rpb24oayxqKXtpZihhKXtpZihrLmF0dHJpYnV0ZXNbaV0mJiFq LmF0dHJpYnV0ZXNbaV0pe3JldHVybiAxfWlmKCFrLmF0dHJpYnV0ZXNbaV0mJmouYXR0cmlidXRl c1tpXSl7cmV0dXJuIC0xfX12YXIgbT1oP2goayk6KGQ/ay5hdHRyaWJ1dGVzW2ddOmsuYXR0cmli dXRlc1tnXS50b1VwcGVyQ2FzZSgpKTt2YXIgbD1oP2goaik6KGQ/ai5hdHRyaWJ1dGVzW2ddOmou YXR0cmlidXRlc1tnXS50b1VwcGVyQ2FzZSgpKTtpZihtPGwpe3JldHVybiBlPysxOi0xfWVsc2V7 aWYobT5sKXtyZXR1cm4gZT8tMTorMX1lbHNle3JldHVybiAwfX19fTtFeHQudHJlZS5UcmVlU29y dGVyLnByb3RvdHlwZT17ZG9Tb3J0OmZ1bmN0aW9uKGEpe2Euc29ydCh0aGlzLnNvcnRGbil9LGNv bXBhcmVOb2RlczpmdW5jdGlvbihiLGEpe3JldHVybihiLnRleHQudG9VcHBlckNhc2UoKT5hLnRl eHQudG9VcHBlckNhc2UoKT8xOi0xKX0sdXBkYXRlU29ydDpmdW5jdGlvbihhLGIpe2lmKGIuY2hp bGRyZW5SZW5kZXJlZCl7dGhpcy5kb1NvcnQuZGVmZXIoMSx0aGlzLFtiXSl9fSx1cGRhdGVTb3J0 UGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtpZihiJiZiLmNoaWxkcmVuUmVu ZGVyZWQpe3RoaXMuZG9Tb3J0LmRlZmVyKDEsdGhpcyxbYl0pfX19O2lmKEV4dC5kZC5Ecm9wWm9u ZSl7RXh0LnRyZWUuVHJlZURyb3Bab25lPWZ1bmN0aW9uKGEsYil7dGhpcy5hbGxvd1BhcmVudElu c2VydD1iLmFsbG93UGFyZW50SW5zZXJ0fHxmYWxzZTt0aGlzLmFsbG93Q29udGFpbmVyRHJvcD1i LmFsbG93Q29udGFpbmVyRHJvcHx8ZmFsc2U7dGhpcy5hcHBlbmRPbmx5PWIuYXBwZW5kT25seXx8 ZmFsc2U7RXh0LnRyZWUuVHJlZURyb3Bab25lLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0 aGlzLGEuZ2V0VHJlZUVsKCksYik7dGhpcy50cmVlPWE7dGhpcy5kcmFnT3ZlckRhdGE9e307dGhp cy5sYXN0SW5zZXJ0Q2xhc3M9IngtdHJlZS1uby1zdGF0dXMifTtFeHQuZXh0ZW5kKEV4dC50cmVl LlRyZWVEcm9wWm9uZSxFeHQuZGQuRHJvcFpvbmUse2RkR3JvdXA6IlRyZWVERCIsZXhwYW5kRGVs YXk6MTAwMCxleHBhbmROb2RlOmZ1bmN0aW9uKGEpe2lmKGEuaGFzQ2hpbGROb2RlcygpJiYhYS5p c0V4cGFuZGVkKCkpe2EuZXhwYW5kKGZhbHNlLG51bGwsdGhpcy50cmlnZ2VyQ2FjaGVSZWZyZXNo LmNyZWF0ZURlbGVnYXRlKHRoaXMpKX19LHF1ZXVlRXhwYW5kOmZ1bmN0aW9uKGEpe3RoaXMuZXhw YW5kUHJvY0lkPXRoaXMuZXhwYW5kTm9kZS5kZWZlcih0aGlzLmV4cGFuZERlbGF5LHRoaXMsW2Fd KX0sY2FuY2VsRXhwYW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5leHBhbmRQcm9jSWQpe2NsZWFyVGlt ZW91dCh0aGlzLmV4cGFuZFByb2NJZCk7dGhpcy5leHBhbmRQcm9jSWQ9ZmFsc2V9fSxpc1ZhbGlk RHJvcFBvaW50OmZ1bmN0aW9uKGEsayxpLGQsYyl7aWYoIWF8fCFjKXtyZXR1cm4gZmFsc2V9dmFy IGc9YS5ub2RlO3ZhciBoPWMubm9kZTtpZighKGcmJmcuaXNUYXJnZXQmJmspKXtyZXR1cm4gZmFs c2V9aWYoaz09ImFwcGVuZCImJmcuYWxsb3dDaGlsZHJlbj09PWZhbHNlKXtyZXR1cm4gZmFsc2V9 aWYoKGs9PSJhYm92ZSJ8fGs9PSJiZWxvdyIpJiYoZy5wYXJlbnROb2RlJiZnLnBhcmVudE5vZGUu YWxsb3dDaGlsZHJlbj09PWZhbHNlKSl7cmV0dXJuIGZhbHNlfWlmKGgmJihnPT1ofHxoLmNvbnRh aW5zKGcpKSl7cmV0dXJuIGZhbHNlfXZhciBiPXRoaXMuZHJhZ092ZXJEYXRhO2IudHJlZT10aGlz LnRyZWU7Yi50YXJnZXQ9ZztiLmRhdGE9YztiLnBvaW50PWs7Yi5zb3VyY2U9aTtiLnJhd0V2ZW50 PWQ7Yi5kcm9wTm9kZT1oO2IuY2FuY2VsPWZhbHNlO3ZhciBqPXRoaXMudHJlZS5maXJlRXZlbnQo Im5vZGVkcmFnb3ZlciIsYik7cmV0dXJuIGIuY2FuY2VsPT09ZmFsc2UmJmohPT1mYWxzZX0sZ2V0 RHJvcFBvaW50OmZ1bmN0aW9uKGgsZyxsKXt2YXIgbT1nLm5vZGU7aWYobS5pc1Jvb3Qpe3JldHVy biBtLmFsbG93Q2hpbGRyZW4hPT1mYWxzZT8iYXBwZW5kIjpmYWxzZX12YXIgYz1nLmRkZWw7dmFy IG89RXh0LmxpYi5Eb20uZ2V0WShjKSxqPW8rYy5vZmZzZXRIZWlnaHQ7dmFyIGk9RXh0LmxpYi5F dmVudC5nZXRQYWdlWShoKTt2YXIgaz1tLmFsbG93Q2hpbGRyZW49PT1mYWxzZXx8bS5pc0xlYWYo KTtpZih0aGlzLmFwcGVuZE9ubHl8fG0ucGFyZW50Tm9kZS5hbGxvd0NoaWxkcmVuPT09ZmFsc2Up e3JldHVybiBrP2ZhbHNlOiJhcHBlbmQifXZhciBkPWZhbHNlO2lmKCF0aGlzLmFsbG93UGFyZW50 SW5zZXJ0KXtkPW0uaGFzQ2hpbGROb2RlcygpJiZtLmlzRXhwYW5kZWQoKX12YXIgYT0oai1vKS8o az8yOjMpO2lmKGk+PW8mJmk8KG8rYSkpe3JldHVybiJhYm92ZSJ9ZWxzZXtpZighZCYmKGt8fGk+ PWotYSYmaTw9aikpe3JldHVybiJiZWxvdyJ9ZWxzZXtyZXR1cm4iYXBwZW5kIn19fSxvbk5vZGVF bnRlcjpmdW5jdGlvbihkLGEsYyxiKXt0aGlzLmNhbmNlbEV4cGFuZCgpfSxvbkNvbnRhaW5lck92 ZXI6ZnVuY3Rpb24oYSxjLGIpe2lmKHRoaXMuYWxsb3dDb250YWluZXJEcm9wJiZ0aGlzLmlzVmFs aWREcm9wUG9pbnQoe2RkZWw6dGhpcy50cmVlLmdldFJvb3ROb2RlKCkudWkuZWxOb2RlLG5vZGU6 dGhpcy50cmVlLmdldFJvb3ROb2RlKCl9LCJhcHBlbmQiLGEsYyxiKSl7cmV0dXJuIHRoaXMuZHJv cEFsbG93ZWR9cmV0dXJuIHRoaXMuZHJvcE5vdEFsbG93ZWR9LG9uTm9kZU92ZXI6ZnVuY3Rpb24o YixpLGgsZyl7dmFyIGs9dGhpcy5nZXREcm9wUG9pbnQoaCxiLGkpO3ZhciBjPWIubm9kZTtpZigh dGhpcy5leHBhbmRQcm9jSWQmJms9PSJhcHBlbmQiJiZjLmhhc0NoaWxkTm9kZXMoKSYmIWIubm9k ZS5pc0V4cGFuZGVkKCkpe3RoaXMucXVldWVFeHBhbmQoYyl9ZWxzZXtpZihrIT0iYXBwZW5kIil7 dGhpcy5jYW5jZWxFeHBhbmQoKX19dmFyIGQ9dGhpcy5kcm9wTm90QWxsb3dlZDtpZih0aGlzLmlz VmFsaWREcm9wUG9pbnQoYixrLGksaCxnKSl7aWYoayl7dmFyIGE9Yi5kZGVsO3ZhciBqO2lmKGs9 PSJhYm92ZSIpe2Q9Yi5ub2RlLmlzRmlyc3QoKT8ieC10cmVlLWRyb3Atb2stYWJvdmUiOiJ4LXRy ZWUtZHJvcC1vay1iZXR3ZWVuIjtqPSJ4LXRyZWUtZHJhZy1pbnNlcnQtYWJvdmUifWVsc2V7aWYo az09ImJlbG93Iil7ZD1iLm5vZGUuaXNMYXN0KCk/IngtdHJlZS1kcm9wLW9rLWJlbG93IjoieC10 cmVlLWRyb3Atb2stYmV0d2VlbiI7aj0ieC10cmVlLWRyYWctaW5zZXJ0LWJlbG93In1lbHNle2Q9 IngtdHJlZS1kcm9wLW9rLWFwcGVuZCI7aj0ieC10cmVlLWRyYWctYXBwZW5kIn19aWYodGhpcy5s YXN0SW5zZXJ0Q2xhc3MhPWope0V4dC5mbHkoYSkucmVwbGFjZUNsYXNzKHRoaXMubGFzdEluc2Vy dENsYXNzLGopO3RoaXMubGFzdEluc2VydENsYXNzPWp9fX1yZXR1cm4gZH0sb25Ob2RlT3V0OmZ1 bmN0aW9uKGQsYSxjLGIpe3RoaXMuY2FuY2VsRXhwYW5kKCk7dGhpcy5yZW1vdmVEcm9wSW5kaWNh dG9ycyhkKX0sb25Ob2RlRHJvcDpmdW5jdGlvbihpLGIsaCxkKXt2YXIgYT10aGlzLmdldERyb3BQ b2ludChoLGksYik7dmFyIGc9aS5ub2RlO2cudWkuc3RhcnREcm9wKCk7aWYoIXRoaXMuaXNWYWxp ZERyb3BQb2ludChpLGEsYixoLGQpKXtnLnVpLmVuZERyb3AoKTtyZXR1cm4gZmFsc2V9dmFyIGM9 ZC5ub2RlfHwoYi5nZXRUcmVlTm9kZT9iLmdldFRyZWVOb2RlKGQsZyxhLGgpOm51bGwpO3JldHVy biB0aGlzLnByb2Nlc3NEcm9wKGcsZCxhLGIsaCxjKX0sb25Db250YWluZXJEcm9wOmZ1bmN0aW9u KGEsZyxjKXtpZih0aGlzLmFsbG93Q29udGFpbmVyRHJvcCYmdGhpcy5pc1ZhbGlkRHJvcFBvaW50 KHtkZGVsOnRoaXMudHJlZS5nZXRSb290Tm9kZSgpLnVpLmVsTm9kZSxub2RlOnRoaXMudHJlZS5n ZXRSb290Tm9kZSgpfSwiYXBwZW5kIixhLGcsYykpe3ZhciBkPXRoaXMudHJlZS5nZXRSb290Tm9k ZSgpO2QudWkuc3RhcnREcm9wKCk7dmFyIGI9Yy5ub2RlfHwoYS5nZXRUcmVlTm9kZT9hLmdldFRy ZWVOb2RlKGMsZCwiYXBwZW5kIixnKTpudWxsKTtyZXR1cm4gdGhpcy5wcm9jZXNzRHJvcChkLGMs ImFwcGVuZCIsYSxnLGIpfXJldHVybiBmYWxzZX0scHJvY2Vzc0Ryb3A6ZnVuY3Rpb24oaixoLGIs YSxpLGQpe3ZhciBnPXt0cmVlOnRoaXMudHJlZSx0YXJnZXQ6aixkYXRhOmgscG9pbnQ6Yixzb3Vy Y2U6YSxyYXdFdmVudDppLGRyb3BOb2RlOmQsY2FuY2VsOiFkLGRyb3BTdGF0dXM6ZmFsc2V9O3Zh ciBjPXRoaXMudHJlZS5maXJlRXZlbnQoImJlZm9yZW5vZGVkcm9wIixnKTtpZihjPT09ZmFsc2V8 fGcuY2FuY2VsPT09dHJ1ZXx8IWcuZHJvcE5vZGUpe2oudWkuZW5kRHJvcCgpO3JldHVybiBnLmRy b3BTdGF0dXN9aj1nLnRhcmdldDtpZihiPT0iYXBwZW5kIiYmIWouaXNFeHBhbmRlZCgpKXtqLmV4 cGFuZChmYWxzZSxudWxsLGZ1bmN0aW9uKCl7dGhpcy5jb21wbGV0ZURyb3AoZyl9LmNyZWF0ZURl bGVnYXRlKHRoaXMpKX1lbHNle3RoaXMuY29tcGxldGVEcm9wKGcpfXJldHVybiB0cnVlfSxjb21w bGV0ZURyb3A6ZnVuY3Rpb24oaCl7dmFyIGQ9aC5kcm9wTm9kZSxlPWgucG9pbnQsYz1oLnRhcmdl dDtpZighRXh0LmlzQXJyYXkoZCkpe2Q9W2RdfXZhciBnO2Zvcih2YXIgYj0wLGE9ZC5sZW5ndGg7 YjxhO2IrKyl7Zz1kW2JdO2lmKGU9PSJhYm92ZSIpe2MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUo ZyxjKX1lbHNle2lmKGU9PSJiZWxvdyIpe2MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxjLm5l eHRTaWJsaW5nKX1lbHNle2MuYXBwZW5kQ2hpbGQoZyl9fX1nLnVpLmZvY3VzKCk7aWYoRXh0LmVu YWJsZUZ4JiZ0aGlzLnRyZWUuaGxEcm9wKXtnLnVpLmhpZ2hsaWdodCgpfWMudWkuZW5kRHJvcCgp O3RoaXMudHJlZS5maXJlRXZlbnQoIm5vZGVkcm9wIixoKX0sYWZ0ZXJOb2RlTW92ZWQ6ZnVuY3Rp b24oYSxjLGcsZCxiKXtpZihFeHQuZW5hYmxlRngmJnRoaXMudHJlZS5obERyb3Ape2IudWkuZm9j dXMoKTtiLnVpLmhpZ2hsaWdodCgpfXRoaXMudHJlZS5maXJlRXZlbnQoIm5vZGVkcm9wIix0aGlz LnRyZWUsZCxjLGEsZyl9LGdldFRyZWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmVlfSxyZW1v dmVEcm9wSW5kaWNhdG9yczpmdW5jdGlvbihiKXtpZihiJiZiLmRkZWwpe3ZhciBhPWIuZGRlbDtF eHQuZmx5KGEpLnJlbW92ZUNsYXNzKFsieC10cmVlLWRyYWctaW5zZXJ0LWFib3ZlIiwieC10cmVl LWRyYWctaW5zZXJ0LWJlbG93IiwieC10cmVlLWRyYWctYXBwZW5kIl0pO3RoaXMubGFzdEluc2Vy dENsYXNzPSJfbm9jbGFzcyJ9fSxiZWZvcmVEcmFnRHJvcDpmdW5jdGlvbihiLGEsYyl7dGhpcy5j YW5jZWxFeHBhbmQoKTtyZXR1cm4gdHJ1ZX0sYWZ0ZXJSZXBhaXI6ZnVuY3Rpb24oYSl7aWYoYSYm RXh0LmVuYWJsZUZ4KXthLm5vZGUudWkuaGlnaGxpZ2h0KCl9dGhpcy5oaWRlUHJveHkoKX19KX1p ZihFeHQuZGQuRHJhZ1pvbmUpe0V4dC50cmVlLlRyZWVEcmFnWm9uZT1mdW5jdGlvbihhLGIpe0V4 dC50cmVlLlRyZWVEcmFnWm9uZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhLmlu bmVyQ3QsYik7dGhpcy50cmVlPWF9O0V4dC5leHRlbmQoRXh0LnRyZWUuVHJlZURyYWdab25lLEV4 dC5kZC5EcmFnWm9uZSx7ZGRHcm91cDoiVHJlZUREIixvbkJlZm9yZURyYWc6ZnVuY3Rpb24oYSxi KXt2YXIgYz1hLm5vZGU7cmV0dXJuIGMmJmMuZHJhZ2dhYmxlJiYhYy5kaXNhYmxlZH0sb25Jbml0 RHJhZzpmdW5jdGlvbihiKXt2YXIgYT10aGlzLmRyYWdEYXRhO3RoaXMudHJlZS5nZXRTZWxlY3Rp b25Nb2RlbCgpLnNlbGVjdChhLm5vZGUpO3RoaXMudHJlZS5ldmVudE1vZGVsLmRpc2FibGUoKTt0 aGlzLnByb3h5LnVwZGF0ZSgiIik7YS5ub2RlLnVpLmFwcGVuZERER2hvc3QodGhpcy5wcm94eS5n aG9zdC5kb20pO3RoaXMudHJlZS5maXJlRXZlbnQoInN0YXJ0ZHJhZyIsdGhpcy50cmVlLGEubm9k ZSxiKX0sZ2V0UmVwYWlyWFk6ZnVuY3Rpb24oYixhKXtyZXR1cm4gYS5ub2RlLnVpLmdldEREUmVw YWlyWFkoKX0sb25FbmREcmFnOmZ1bmN0aW9uKGEsYil7dGhpcy50cmVlLmV2ZW50TW9kZWwuZW5h YmxlLmRlZmVyKDEwMCx0aGlzLnRyZWUuZXZlbnRNb2RlbCk7dGhpcy50cmVlLmZpcmVFdmVudCgi ZW5kZHJhZyIsdGhpcy50cmVlLGEubm9kZSxiKX0sb25WYWxpZERyb3A6ZnVuY3Rpb24oYSxiLGMp e3RoaXMudHJlZS5maXJlRXZlbnQoImRyYWdkcm9wIix0aGlzLnRyZWUsdGhpcy5kcmFnRGF0YS5u b2RlLGEsYik7dGhpcy5oaWRlUHJveHkoKX0sYmVmb3JlSW52YWxpZERyb3A6ZnVuY3Rpb24oYSxj KXt2YXIgYj10aGlzLnRyZWUuZ2V0U2VsZWN0aW9uTW9kZWwoKTtiLmNsZWFyU2VsZWN0aW9ucygp O2Iuc2VsZWN0KHRoaXMuZHJhZ0RhdGEubm9kZSl9LGFmdGVyUmVwYWlyOmZ1bmN0aW9uKCl7aWYo RXh0LmVuYWJsZUZ4JiZ0aGlzLnRyZWUuaGxEcm9wKXtFeHQuRWxlbWVudC5mbHkodGhpcy5kcmFn RGF0YS5kZGVsKS5oaWdobGlnaHQodGhpcy5obENvbG9yfHwiYzNkYWY5Iil9dGhpcy5kcmFnZ2lu Zz1mYWxzZX19KX1FeHQudHJlZS5UcmVlRWRpdG9yPWZ1bmN0aW9uKGEsYyxiKXtjPWN8fHt9O3Zh ciBkPWMuZXZlbnRzP2M6bmV3IEV4dC5mb3JtLlRleHRGaWVsZChjKTtFeHQudHJlZS5UcmVlRWRp dG9yLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGQsYik7dGhpcy50cmVlPWE7aWYo IWEucmVuZGVyZWQpe2Eub24oInJlbmRlciIsdGhpcy5pbml0RWRpdG9yLHRoaXMpfWVsc2V7dGhp cy5pbml0RWRpdG9yKGEpfX07RXh0LmV4dGVuZChFeHQudHJlZS5UcmVlRWRpdG9yLEV4dC5FZGl0 b3Ise2FsaWdubWVudDoibC1sIixhdXRvU2l6ZTpmYWxzZSxoaWRlRWw6ZmFsc2UsY2xzOiJ4LXNt YWxsLWVkaXRvciB4LXRyZWUtZWRpdG9yIixzaGltOmZhbHNlLHNoYWRvdzoiZnJhbWUiLG1heFdp ZHRoOjI1MCxlZGl0RGVsYXk6MzUwLGluaXRFZGl0b3I6ZnVuY3Rpb24oYSl7YS5vbigiYmVmb3Jl Y2xpY2siLHRoaXMuYmVmb3JlTm9kZUNsaWNrLHRoaXMpO2Eub24oImRibGNsaWNrIix0aGlzLm9u Tm9kZURibENsaWNrLHRoaXMpO3RoaXMub24oImNvbXBsZXRlIix0aGlzLnVwZGF0ZU5vZGUsdGhp cyk7dGhpcy5vbigiYmVmb3Jlc3RhcnRlZGl0Iix0aGlzLmZpdFRvVHJlZSx0aGlzKTt0aGlzLm9u KCJzdGFydGVkaXQiLHRoaXMuYmluZFNjcm9sbCx0aGlzLHtkZWxheToxMH0pO3RoaXMub24oInNw ZWNpYWxrZXkiLHRoaXMub25TcGVjaWFsS2V5LHRoaXMpfSxmaXRUb1RyZWU6ZnVuY3Rpb24oYixj KXt2YXIgZT10aGlzLnRyZWUuZ2V0VHJlZUVsKCkuZG9tLGQ9Yy5kb207aWYoZS5zY3JvbGxMZWZ0 PmQub2Zmc2V0TGVmdCl7ZS5zY3JvbGxMZWZ0PWQub2Zmc2V0TGVmdH12YXIgYT1NYXRoLm1pbih0 aGlzLm1heFdpZHRoLChlLmNsaWVudFdpZHRoPjIwP2UuY2xpZW50V2lkdGg6ZS5vZmZzZXRXaWR0 aCktTWF0aC5tYXgoMCxkLm9mZnNldExlZnQtZS5zY3JvbGxMZWZ0KS01KTt0aGlzLnNldFNpemUo YSwiIil9LHRyaWdnZXJFZGl0OmZ1bmN0aW9uKGEsYyl7dGhpcy5jb21wbGV0ZUVkaXQoKTtpZihh LmF0dHJpYnV0ZXMuZWRpdGFibGUhPT1mYWxzZSl7dGhpcy5lZGl0Tm9kZT1hO2lmKHRoaXMudHJl ZS5hdXRvU2Nyb2xsKXtFeHQuZmx5KGEudWkuZ2V0RWwoKSkuc2Nyb2xsSW50b1ZpZXcodGhpcy50 cmVlLmJvZHkpfXZhciBiPWEudGV4dHx8IiI7aWYoIUV4dC5pc0dlY2tvJiZFeHQuaXNFbXB0eShh LnRleHQpKXthLnNldFRleHQoIiYjMTYwOyIpfXRoaXMuYXV0b0VkaXRUaW1lcj10aGlzLnN0YXJ0 RWRpdC5kZWZlcih0aGlzLmVkaXREZWxheSx0aGlzLFthLnVpLnRleHROb2RlLGJdKTtyZXR1cm4g ZmFsc2V9fSxiaW5kU2Nyb2xsOmZ1bmN0aW9uKCl7dGhpcy50cmVlLmdldFRyZWVFbCgpLm9uKCJz Y3JvbGwiLHRoaXMuY2FuY2VsRWRpdCx0aGlzKX0sYmVmb3JlTm9kZUNsaWNrOmZ1bmN0aW9uKGEs Yil7Y2xlYXJUaW1lb3V0KHRoaXMuYXV0b0VkaXRUaW1lcik7aWYodGhpcy50cmVlLmdldFNlbGVj dGlvbk1vZGVsKCkuaXNTZWxlY3RlZChhKSl7Yi5zdG9wRXZlbnQoKTtyZXR1cm4gdGhpcy50cmln Z2VyRWRpdChhKX19LG9uTm9kZURibENsaWNrOmZ1bmN0aW9uKGEsYil7Y2xlYXJUaW1lb3V0KHRo aXMuYXV0b0VkaXRUaW1lcil9LHVwZGF0ZU5vZGU6ZnVuY3Rpb24oYSxiKXt0aGlzLnRyZWUuZ2V0 VHJlZUVsKCkudW4oInNjcm9sbCIsdGhpcy5jYW5jZWxFZGl0LHRoaXMpO3RoaXMuZWRpdE5vZGUu c2V0VGV4dChiKX0sb25IaWRlOmZ1bmN0aW9uKCl7RXh0LnRyZWUuVHJlZUVkaXRvci5zdXBlcmNs YXNzLm9uSGlkZS5jYWxsKHRoaXMpO2lmKHRoaXMuZWRpdE5vZGUpe3RoaXMuZWRpdE5vZGUudWku Zm9jdXMuZGVmZXIoNTAsdGhpcy5lZGl0Tm9kZS51aSl9fSxvblNwZWNpYWxLZXk6ZnVuY3Rpb24o YyxiKXt2YXIgYT1iLmdldEtleSgpO2lmKGE9PWIuRVNDKXtiLnN0b3BFdmVudCgpO3RoaXMuY2Fu Y2VsRWRpdCgpfWVsc2V7aWYoYT09Yi5FTlRFUiYmIWIuaGFzTW9kaWZpZXIoKSl7Yi5zdG9wRXZl bnQoKTt0aGlzLmNvbXBsZXRlRWRpdCgpfX19fSk7Ci8qIFNXRk9iamVjdCB2Mi4yIDxodHRwOi8v Y29kZS5nb29nbGUuY29tL3Avc3dmb2JqZWN0Lz4gCiAgICBpcyByZWxlYXNlZCB1bmRlciB0aGUg TUlUIExpY2Vuc2UgPGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vu c2UucGhwPiAKKi8KdmFyIHN3Zm9iamVjdD1mdW5jdGlvbigpe3ZhciBFPSJ1bmRlZmluZWQiLHM9 Im9iamVjdCIsVD0iU2hvY2t3YXZlIEZsYXNoIixYPSJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVG bGFzaCIscj0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giLFM9IlNXRk9iamVjdEV4cHJJ bnN0Iix5PSJvbnJlYWR5c3RhdGVjaGFuZ2UiLFA9d2luZG93LGs9ZG9jdW1lbnQsdT1uYXZpZ2F0 b3IsVT1mYWxzZSxWPVtpXSxwPVtdLE89W10sSj1bXSxtLFIsRixDLEs9ZmFsc2UsYT1mYWxzZSxv LEgsbj10cnVlLE49ZnVuY3Rpb24oKXt2YXIgYWI9dHlwZW9mIGsuZ2V0RWxlbWVudEJ5SWQhPUUm JnR5cGVvZiBrLmdldEVsZW1lbnRzQnlUYWdOYW1lIT1FJiZ0eXBlb2Ygay5jcmVhdGVFbGVtZW50 IT1FLGFpPXUudXNlckFnZW50LnRvTG93ZXJDYXNlKCksWj11LnBsYXRmb3JtLnRvTG93ZXJDYXNl KCksYWY9Wj8vd2luLy50ZXN0KFopOi93aW4vLnRlc3QoYWkpLGFkPVo/L21hYy8udGVzdChaKTov bWFjLy50ZXN0KGFpKSxhZz0vd2Via2l0Ly50ZXN0KGFpKT9wYXJzZUZsb2F0KGFpLnJlcGxhY2Uo L14uKndlYmtpdFwvKFxkKyhcLlxkKyk/KS4qJC8sIiQxIikpOmZhbHNlLFk9ISsiXHYxIixhaD1b MCwwLDBdLGFjPW51bGw7aWYodHlwZW9mIHUucGx1Z2lucyE9RSYmdHlwZW9mIHUucGx1Z2luc1tU XT09cyl7YWM9dS5wbHVnaW5zW1RdLmRlc2NyaXB0aW9uO2lmKGFjJiYhKHR5cGVvZiB1Lm1pbWVU eXBlcyE9RSYmdS5taW1lVHlwZXNbcl0mJiF1Lm1pbWVUeXBlc1tyXS5lbmFibGVkUGx1Z2luKSl7 VT10cnVlO1k9ZmFsc2U7YWM9YWMucmVwbGFjZSgvXi4qXHMrKFxTK1xzK1xTKyQpLywiJDEiKTth aFswXT1wYXJzZUludChhYy5yZXBsYWNlKC9eKC4qKVwuLiokLywiJDEiKSwxMCk7YWhbMV09cGFy c2VJbnQoYWMucmVwbGFjZSgvXi4qXC4oLiopXHMuKiQvLCIkMSIpLDEwKTthaFsyXT0vW2EtekEt Wl0vLnRlc3QoYWMpP3BhcnNlSW50KGFjLnJlcGxhY2UoL14uKlthLXpBLVpdKyguKikkLywiJDEi KSwxMCk6MH19ZWxzZXtpZih0eXBlb2YgUC5BY3RpdmVYT2JqZWN0IT1FKXt0cnl7dmFyIGFlPW5l dyBBY3RpdmVYT2JqZWN0KFgpO2lmKGFlKXthYz1hZS5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKTtp ZihhYyl7WT10cnVlO2FjPWFjLnNwbGl0KCIgIilbMV0uc3BsaXQoIiwiKTthaD1bcGFyc2VJbnQo YWNbMF0sMTApLHBhcnNlSW50KGFjWzFdLDEwKSxwYXJzZUludChhY1syXSwxMCldfX19Y2F0Y2go YWEpe319fXJldHVybnt3MzphYixwdjphaCx3azphZyxpZTpZLHdpbjphZixtYWM6YWR9fSgpLGw9 ZnVuY3Rpb24oKXtpZighTi53Myl7cmV0dXJufWlmKCh0eXBlb2Ygay5yZWFkeVN0YXRlIT1FJiZr LnJlYWR5U3RhdGU9PSJjb21wbGV0ZSIpfHwodHlwZW9mIGsucmVhZHlTdGF0ZT09RSYmKGsuZ2V0 RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXXx8ay5ib2R5KSkpe2coKX1pZighSyl7aWYodHlw ZW9mIGsuYWRkRXZlbnRMaXN0ZW5lciE9RSl7ay5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50 TG9hZGVkIixnLGZhbHNlKX1pZihOLmllJiZOLndpbil7ay5hdHRhY2hFdmVudCh5LGZ1bmN0aW9u KCl7aWYoay5yZWFkeVN0YXRlPT0iY29tcGxldGUiKXtrLmRldGFjaEV2ZW50KHksYXJndW1lbnRz LmNhbGxlZSk7ZygpfX0pO2lmKFA9PXRvcCl7KGZ1bmN0aW9uKCl7aWYoSyl7cmV0dXJufXRyeXtr LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKFkpe3NldFRpbWVvdXQoYXJn dW1lbnRzLmNhbGxlZSwwKTtyZXR1cm59ZygpfSkoKX19aWYoTi53ayl7KGZ1bmN0aW9uKCl7aWYo Syl7cmV0dXJufWlmKCEvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KGsucmVhZHlTdGF0ZSkpe3NldFRp bWVvdXQoYXJndW1lbnRzLmNhbGxlZSwwKTtyZXR1cm59ZygpfSkoKX10KGcpfX0oKTtmdW5jdGlv biBnKCl7aWYoSyl7cmV0dXJufXRyeXt2YXIgYWE9ay5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9k eSIpWzBdLmFwcGVuZENoaWxkKEQoInNwYW4iKSk7YWEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChh YSl9Y2F0Y2goYWIpe3JldHVybn1LPXRydWU7dmFyIFk9Vi5sZW5ndGg7Zm9yKHZhciBaPTA7WjxZ O1orKyl7VltaXSgpfX1mdW5jdGlvbiBMKFkpe2lmKEspe1koKX1lbHNle1ZbVi5sZW5ndGhdPVl9 fWZ1bmN0aW9uIHQoWil7aWYodHlwZW9mIFAuYWRkRXZlbnRMaXN0ZW5lciE9RSl7UC5hZGRFdmVu dExpc3RlbmVyKCJsb2FkIixaLGZhbHNlKX1lbHNle2lmKHR5cGVvZiBrLmFkZEV2ZW50TGlzdGVu ZXIhPUUpe2suYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsWixmYWxzZSl9ZWxzZXtpZih0eXBlb2Yg UC5hdHRhY2hFdmVudCE9RSl7aihQLCJvbmxvYWQiLFopfWVsc2V7aWYodHlwZW9mIFAub25sb2Fk PT0iZnVuY3Rpb24iKXt2YXIgWT1QLm9ubG9hZDtQLm9ubG9hZD1mdW5jdGlvbigpe1koKTtaKCl9 fWVsc2V7UC5vbmxvYWQ9Wn19fX19ZnVuY3Rpb24gaSgpe2lmKFUpe1coKX1lbHNle0koKX19ZnVu Y3Rpb24gVygpe3ZhciBZPWsuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTt2YXIgYWI9 RChzKTthYi5zZXRBdHRyaWJ1dGUoInR5cGUiLHIpO3ZhciBhYT1ZLmFwcGVuZENoaWxkKGFiKTtp ZihhYSl7dmFyIFo9MDsoZnVuY3Rpb24oKXtpZih0eXBlb2YgYWEuR2V0VmFyaWFibGUhPUUpe3Zh ciBhYz1hYS5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKTtpZihhYyl7YWM9YWMuc3BsaXQoIiAiKVsx XS5zcGxpdCgiLCIpO04ucHY9W3BhcnNlSW50KGFjWzBdLDEwKSxwYXJzZUludChhY1sxXSwxMCks cGFyc2VJbnQoYWNbMl0sMTApXX19ZWxzZXtpZihaPDEwKXtaKys7c2V0VGltZW91dChhcmd1bWVu dHMuY2FsbGVlLDEwKTtyZXR1cm59fVkucmVtb3ZlQ2hpbGQoYWIpO2FhPW51bGw7SSgpfSkoKX1l bHNle0koKX19ZnVuY3Rpb24gSSgpe3ZhciBhaD1wLmxlbmd0aDtpZihhaD4wKXtmb3IodmFyIGFn PTA7YWc8YWg7YWcrKyl7dmFyIFo9cFthZ10uaWQ7dmFyIGFjPXBbYWddLmNhbGxiYWNrRm47dmFy IGFiPXtzdWNjZXNzOmZhbHNlLGlkOlp9O2lmKE4ucHZbMF0+MCl7dmFyIGFmPWMoWik7aWYoYWYp e2lmKEcocFthZ10uc3dmVmVyc2lvbikmJiEoTi53ayYmTi53azwzMTIpKXt4KFosdHJ1ZSk7aWYo YWMpe2FiLnN1Y2Nlc3M9dHJ1ZTthYi5yZWY9QShaKTthYyhhYil9fWVsc2V7aWYocFthZ10uZXhw cmVzc0luc3RhbGwmJkIoKSl7dmFyIGFqPXt9O2FqLmRhdGE9cFthZ10uZXhwcmVzc0luc3RhbGw7 YWoud2lkdGg9YWYuZ2V0QXR0cmlidXRlKCJ3aWR0aCIpfHwiMCI7YWouaGVpZ2h0PWFmLmdldEF0 dHJpYnV0ZSgiaGVpZ2h0Iil8fCIwIjtpZihhZi5nZXRBdHRyaWJ1dGUoImNsYXNzIikpe2FqLnN0 eWxlY2xhc3M9YWYuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfWlmKGFmLmdldEF0dHJpYnV0ZSgiYWxp Z24iKSl7YWouYWxpZ249YWYuZ2V0QXR0cmlidXRlKCJhbGlnbiIpfXZhciBhaT17fTt2YXIgWT1h Zi5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyYW0iKTt2YXIgYWQ9WS5sZW5ndGg7Zm9yKHZhciBh ZT0wO2FlPGFkO2FlKyspe2lmKFlbYWVdLmdldEF0dHJpYnV0ZSgibmFtZSIpLnRvTG93ZXJDYXNl KCkhPSJtb3ZpZSIpe2FpW1lbYWVdLmdldEF0dHJpYnV0ZSgibmFtZSIpXT1ZW2FlXS5nZXRBdHRy aWJ1dGUoInZhbHVlIil9fVEoYWosYWksWixhYyl9ZWxzZXtxKGFmKTtpZihhYyl7YWMoYWIpfX19 fX1lbHNle3goWix0cnVlKTtpZihhYyl7dmFyIGFhPUEoWik7aWYoYWEmJnR5cGVvZiBhYS5TZXRW YXJpYWJsZSE9RSl7YWIuc3VjY2Vzcz10cnVlO2FiLnJlZj1hYX1hYyhhYil9fX19fWZ1bmN0aW9u IEEoYWIpe3ZhciBZPW51bGw7dmFyIFo9YyhhYik7aWYoWiYmWi5ub2RlTmFtZT09Ik9CSkVDVCIp e2lmKHR5cGVvZiBaLlNldFZhcmlhYmxlIT1FKXtZPVp9ZWxzZXt2YXIgYWE9Wi5nZXRFbGVtZW50 c0J5VGFnTmFtZShzKVswXTtpZihhYSl7WT1hYX19fXJldHVybiBZfWZ1bmN0aW9uIEIoKXtyZXR1 cm4gIWEmJkcoIjYuMC42NSIpJiYoTi53aW58fE4ubWFjKSYmIShOLndrJiZOLndrPDMxMil9ZnVu Y3Rpb24gUShhYixhYyxZLGFhKXthPXRydWU7Rj1hYXx8bnVsbDtDPXtzdWNjZXNzOmZhbHNlLGlk Oll9O3ZhciBhZj1jKFkpO2lmKGFmKXtpZihhZi5ub2RlTmFtZT09Ik9CSkVDVCIpe209aChhZik7 Uj1udWxsfWVsc2V7bT1hZjtSPVl9YWIuaWQ9UztpZih0eXBlb2YgYWIud2lkdGg9PUV8fCghLyUk Ly50ZXN0KGFiLndpZHRoKSYmcGFyc2VJbnQoYWIud2lkdGgsMTApPDMxMCkpe2FiLndpZHRoPSIz MTAifWlmKHR5cGVvZiBhYi5oZWlnaHQ9PUV8fCghLyUkLy50ZXN0KGFiLmhlaWdodCkmJnBhcnNl SW50KGFiLmhlaWdodCwxMCk8MTM3KSl7YWIuaGVpZ2h0PSIxMzcifWsudGl0bGU9ay50aXRsZS5z bGljZSgwLDQ3KSsiIC0gRmxhc2ggUGxheWVyIEluc3RhbGxhdGlvbiI7dmFyIGFlPU4uaWUmJk4u d2luPyJBY3RpdmVYIjoiUGx1Z0luIixhZD0iTU1yZWRpcmVjdFVSTD0iK1AubG9jYXRpb24udG9T dHJpbmcoKS5yZXBsYWNlKC8mL2csIiUyNiIpKyImTU1wbGF5ZXJUeXBlPSIrYWUrIiZNTWRvY3Rp dGxlPSIray50aXRsZTtpZih0eXBlb2YgYWMuZmxhc2h2YXJzIT1FKXthYy5mbGFzaHZhcnMrPSIm IithZH1lbHNle2FjLmZsYXNodmFycz1hZH1pZihOLmllJiZOLndpbiYmYWYucmVhZHlTdGF0ZSE9 NCl7dmFyIFo9RCgiZGl2Iik7WSs9IlNXRk9iamVjdE5ldyI7Wi5zZXRBdHRyaWJ1dGUoImlkIixZ KTthZi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShaLGFmKTthZi5zdHlsZS5kaXNwbGF5PSJub25l IjsoZnVuY3Rpb24oKXtpZihhZi5yZWFkeVN0YXRlPT00KXthZi5wYXJlbnROb2RlLnJlbW92ZUNo aWxkKGFmKX1lbHNle3NldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwxMCl9fSkoKX12KGFiLGFj LFkpfX1mdW5jdGlvbiBxKFope2lmKE4uaWUmJk4ud2luJiZaLnJlYWR5U3RhdGUhPTQpe3ZhciBZ PUQoImRpdiIpO1oucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoWSxaKTtZLnBhcmVudE5vZGUucmVw bGFjZUNoaWxkKGgoWiksWSk7Wi5zdHlsZS5kaXNwbGF5PSJub25lIjsoZnVuY3Rpb24oKXtpZiha LnJlYWR5U3RhdGU9PTQpe1oucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChaKX1lbHNle3NldFRpbWVv dXQoYXJndW1lbnRzLmNhbGxlZSwxMCl9fSkoKX1lbHNle1oucGFyZW50Tm9kZS5yZXBsYWNlQ2hp bGQoaChaKSxaKX19ZnVuY3Rpb24gaChhZCl7dmFyIGFiPUQoImRpdiIpO2lmKE4ud2luJiZOLmll KXthYi5pbm5lckhUTUw9YWQuaW5uZXJIVE1MfWVsc2V7dmFyIFo9YWQuZ2V0RWxlbWVudHNCeVRh Z05hbWUocylbMF07aWYoWil7dmFyIGFlPVouY2hpbGROb2RlcztpZihhZSl7dmFyIFk9YWUubGVu Z3RoO2Zvcih2YXIgYWE9MDthYTxZO2FhKyspe2lmKCEoYWVbYWFdLm5vZGVUeXBlPT0xJiZhZVth YV0ubm9kZU5hbWU9PSJQQVJBTSIpJiYhKGFlW2FhXS5ub2RlVHlwZT09OCkpe2FiLmFwcGVuZENo aWxkKGFlW2FhXS5jbG9uZU5vZGUodHJ1ZSkpfX19fX1yZXR1cm4gYWJ9ZnVuY3Rpb24gdihhaixh aCxaKXt2YXIgWSxhYj1jKFopO2lmKE4ud2smJk4ud2s8MzEyKXtyZXR1cm4gWX1pZihhYil7aWYo dHlwZW9mIGFqLmlkPT1FKXthai5pZD1afWlmKE4uaWUmJk4ud2luKXt2YXIgYWk9IiI7Zm9yKHZh ciBhZiBpbiBhail7aWYoYWpbYWZdIT1PYmplY3QucHJvdG90eXBlW2FmXSl7aWYoYWYudG9Mb3dl ckNhc2UoKT09ImRhdGEiKXthaC5tb3ZpZT1halthZl19ZWxzZXtpZihhZi50b0xvd2VyQ2FzZSgp PT0ic3R5bGVjbGFzcyIpe2FpKz0nIGNsYXNzPSInK2FqW2FmXSsnIid9ZWxzZXtpZihhZi50b0xv d2VyQ2FzZSgpIT0iY2xhc3NpZCIpe2FpKz0iICIrYWYrJz0iJythalthZl0rJyInfX19fX12YXIg YWc9IiI7Zm9yKHZhciBhZSBpbiBhaCl7aWYoYWhbYWVdIT1PYmplY3QucHJvdG90eXBlW2FlXSl7 YWcrPSc8cGFyYW0gbmFtZT0iJythZSsnIiB2YWx1ZT0iJythaFthZV0rJyIgLz4nfX1hYi5vdXRl ckhUTUw9JzxvYmplY3QgY2xhc3NpZD0iY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0 NTUzNTQwMDAwIicrYWkrIj4iK2FnKyI8L29iamVjdD4iO09bTy5sZW5ndGhdPWFqLmlkO1k9Yyhh ai5pZCl9ZWxzZXt2YXIgYWE9RChzKTthYS5zZXRBdHRyaWJ1dGUoInR5cGUiLHIpO2Zvcih2YXIg YWQgaW4gYWope2lmKGFqW2FkXSE9T2JqZWN0LnByb3RvdHlwZVthZF0pe2lmKGFkLnRvTG93ZXJD YXNlKCk9PSJzdHlsZWNsYXNzIil7YWEuc2V0QXR0cmlidXRlKCJjbGFzcyIsYWpbYWRdKX1lbHNl e2lmKGFkLnRvTG93ZXJDYXNlKCkhPSJjbGFzc2lkIil7YWEuc2V0QXR0cmlidXRlKGFkLGFqW2Fk XSl9fX19Zm9yKHZhciBhYyBpbiBhaCl7aWYoYWhbYWNdIT1PYmplY3QucHJvdG90eXBlW2FjXSYm YWMudG9Mb3dlckNhc2UoKSE9Im1vdmllIil7ZShhYSxhYyxhaFthY10pfX1hYi5wYXJlbnROb2Rl LnJlcGxhY2VDaGlsZChhYSxhYik7WT1hYX19cmV0dXJuIFl9ZnVuY3Rpb24gZShhYSxZLFope3Zh ciBhYj1EKCJwYXJhbSIpO2FiLnNldEF0dHJpYnV0ZSgibmFtZSIsWSk7YWIuc2V0QXR0cmlidXRl KCJ2YWx1ZSIsWik7YWEuYXBwZW5kQ2hpbGQoYWIpfWZ1bmN0aW9uIHooWil7dmFyIFk9YyhaKTtp ZihZJiZZLm5vZGVOYW1lPT0iT0JKRUNUIil7aWYoTi5pZSYmTi53aW4pe1kuc3R5bGUuZGlzcGxh eT0ibm9uZSI7KGZ1bmN0aW9uKCl7aWYoWS5yZWFkeVN0YXRlPT00KXtiKFopfWVsc2V7c2V0VGlt ZW91dChhcmd1bWVudHMuY2FsbGVlLDEwKX19KSgpfWVsc2V7WS5wYXJlbnROb2RlLnJlbW92ZUNo aWxkKFkpfX19ZnVuY3Rpb24gYihhYSl7dmFyIFo9YyhhYSk7aWYoWil7Zm9yKHZhciBZIGluIFop e2lmKHR5cGVvZiBaW1ldPT0iZnVuY3Rpb24iKXtaW1ldPW51bGx9fVoucGFyZW50Tm9kZS5yZW1v dmVDaGlsZChaKX19ZnVuY3Rpb24gYyhhYSl7dmFyIFk9bnVsbDt0cnl7WT1rLmdldEVsZW1lbnRC eUlkKGFhKX1jYXRjaChaKXt9cmV0dXJuIFl9ZnVuY3Rpb24gRChZKXtyZXR1cm4gay5jcmVhdGVF bGVtZW50KFkpfWZ1bmN0aW9uIGooYWEsWSxaKXthYS5hdHRhY2hFdmVudChZLFopO0pbSi5sZW5n dGhdPVthYSxZLFpdfWZ1bmN0aW9uIEcoYWEpe3ZhciBaPU4ucHYsWT1hYS5zcGxpdCgiLiIpO1lb MF09cGFyc2VJbnQoWVswXSwxMCk7WVsxXT1wYXJzZUludChZWzFdLDEwKXx8MDtZWzJdPXBhcnNl SW50KFlbMl0sMTApfHwwO3JldHVybihaWzBdPllbMF18fChaWzBdPT1ZWzBdJiZaWzFdPllbMV0p fHwoWlswXT09WVswXSYmWlsxXT09WVsxXSYmWlsyXT49WVsyXSkpP3RydWU6ZmFsc2V9ZnVuY3Rp b24gdyhhZCxaLGFlLGFjKXtpZihOLmllJiZOLm1hYyl7cmV0dXJufXZhciBhYj1rLmdldEVsZW1l bnRzQnlUYWdOYW1lKCJoZWFkIilbMF07aWYoIWFiKXtyZXR1cm59dmFyIFk9KGFlJiZ0eXBlb2Yg YWU9PSJzdHJpbmciKT9hZToic2NyZWVuIjtpZihhYyl7bz1udWxsO0g9bnVsbH1pZighb3x8SCE9 WSl7dmFyIGFhPUQoInN0eWxlIik7YWEuc2V0QXR0cmlidXRlKCJ0eXBlIiwidGV4dC9jc3MiKTth YS5zZXRBdHRyaWJ1dGUoIm1lZGlhIixZKTtvPWFiLmFwcGVuZENoaWxkKGFhKTtpZihOLmllJiZO LndpbiYmdHlwZW9mIGsuc3R5bGVTaGVldHMhPUUmJmsuc3R5bGVTaGVldHMubGVuZ3RoPjApe289 ay5zdHlsZVNoZWV0c1trLnN0eWxlU2hlZXRzLmxlbmd0aC0xXX1IPVl9aWYoTi5pZSYmTi53aW4p e2lmKG8mJnR5cGVvZiBvLmFkZFJ1bGU9PXMpe28uYWRkUnVsZShhZCxaKX19ZWxzZXtpZihvJiZ0 eXBlb2Ygay5jcmVhdGVUZXh0Tm9kZSE9RSl7by5hcHBlbmRDaGlsZChrLmNyZWF0ZVRleHROb2Rl KGFkKyIgeyIrWisifSIpKX19fWZ1bmN0aW9uIHgoYWEsWSl7aWYoIW4pe3JldHVybn12YXIgWj1Z PyJ2aXNpYmxlIjoiaGlkZGVuIjtpZihLJiZjKGFhKSl7YyhhYSkuc3R5bGUudmlzaWJpbGl0eT1a fWVsc2V7dygiIyIrYWEsInZpc2liaWxpdHk6IitaKX19ZnVuY3Rpb24gTShaKXt2YXIgYWE9L1tc XFwiPD5cLjtdLzt2YXIgWT1hYS5leGVjKFopIT1udWxsO3JldHVybiBZJiZ0eXBlb2YgZW5jb2Rl VVJJQ29tcG9uZW50IT1FP2VuY29kZVVSSUNvbXBvbmVudChaKTpafXZhciBkPWZ1bmN0aW9uKCl7 aWYoTi5pZSYmTi53aW4pe3dpbmRvdy5hdHRhY2hFdmVudCgib251bmxvYWQiLGZ1bmN0aW9uKCl7 dmFyIGFkPUoubGVuZ3RoO2Zvcih2YXIgYWM9MDthYzxhZDthYysrKXtKW2FjXVswXS5kZXRhY2hF dmVudChKW2FjXVsxXSxKW2FjXVsyXSl9dmFyIGFhPU8ubGVuZ3RoO2Zvcih2YXIgYWI9MDthYjxh YTthYisrKXt6KE9bYWJdKX1mb3IodmFyIFogaW4gTil7TltaXT1udWxsfU49bnVsbDtmb3IodmFy IFkgaW4gc3dmb2JqZWN0KXtzd2ZvYmplY3RbWV09bnVsbH1zd2ZvYmplY3Q9bnVsbH0pfX0oKTty ZXR1cm57cmVnaXN0ZXJPYmplY3Q6ZnVuY3Rpb24oYWMsWSxhYixhYSl7aWYoTi53MyYmYWMmJlkp e3ZhciBaPXt9O1ouaWQ9YWM7Wi5zd2ZWZXJzaW9uPVk7Wi5leHByZXNzSW5zdGFsbD1hYjtaLmNh bGxiYWNrRm49YWE7cFtwLmxlbmd0aF09Wjt4KGFjLGZhbHNlKX1lbHNle2lmKGFhKXthYSh7c3Vj Y2VzczpmYWxzZSxpZDphY30pfX19LGdldE9iamVjdEJ5SWQ6ZnVuY3Rpb24oWSl7aWYoTi53Myl7 cmV0dXJuIEEoWSl9fSxlbWJlZFNXRjpmdW5jdGlvbihhYyxhaSxhZixhaCxaLGFiLGFhLGFlLGFn LGFkKXt2YXIgWT17c3VjY2VzczpmYWxzZSxpZDphaX07aWYoTi53MyYmIShOLndrJiZOLndrPDMx MikmJmFjJiZhaSYmYWYmJmFoJiZaKXt4KGFpLGZhbHNlKTtMKGZ1bmN0aW9uKCl7YWYrPSIiO2Fo Kz0iIjt2YXIgYWs9e307aWYoYWcmJnR5cGVvZiBhZz09PXMpe2Zvcih2YXIgYW0gaW4gYWcpe2Fr W2FtXT1hZ1thbV19fWFrLmRhdGE9YWM7YWsud2lkdGg9YWY7YWsuaGVpZ2h0PWFoO3ZhciBhbj17 fTtpZihhZSYmdHlwZW9mIGFlPT09cyl7Zm9yKHZhciBhbCBpbiBhZSl7YW5bYWxdPWFlW2FsXX19 aWYoYWEmJnR5cGVvZiBhYT09PXMpe2Zvcih2YXIgYWogaW4gYWEpe2lmKHR5cGVvZiBhbi5mbGFz aHZhcnMhPUUpe2FuLmZsYXNodmFycys9IiYiK2FqKyI9IithYVthal19ZWxzZXthbi5mbGFzaHZh cnM9YWorIj0iK2FhW2FqXX19fWlmKEcoWikpe3ZhciBhbz12KGFrLGFuLGFpKTtpZihhay5pZD09 YWkpe3goYWksdHJ1ZSl9WS5zdWNjZXNzPXRydWU7WS5yZWY9YW99ZWxzZXtpZihhYiYmQigpKXth ay5kYXRhPWFiO1EoYWssYW4sYWksYWQpO3JldHVybn1lbHNle3goYWksdHJ1ZSl9fWlmKGFkKXth ZChZKX19KX1lbHNle2lmKGFkKXthZChZKX19fSxzd2l0Y2hPZmZBdXRvSGlkZVNob3c6ZnVuY3Rp b24oKXtuPWZhbHNlfSx1YTpOLGdldEZsYXNoUGxheWVyVmVyc2lvbjpmdW5jdGlvbigpe3JldHVy bnttYWpvcjpOLnB2WzBdLG1pbm9yOk4ucHZbMV0scmVsZWFzZTpOLnB2WzJdfX0saGFzRmxhc2hQ bGF5ZXJWZXJzaW9uOkcsY3JlYXRlU1dGOmZ1bmN0aW9uKGFhLFosWSl7aWYoTi53Myl7cmV0dXJu IHYoYWEsWixZKX1lbHNle3JldHVybiB1bmRlZmluZWR9fSxzaG93RXhwcmVzc0luc3RhbGw6ZnVu Y3Rpb24oYWEsYWIsWSxaKXtpZihOLnczJiZCKCkpe1EoYWEsYWIsWSxaKX19LHJlbW92ZVNXRjpm dW5jdGlvbihZKXtpZihOLnczKXt6KFkpfX0sY3JlYXRlQ1NTOmZ1bmN0aW9uKGFiLGFhLFosWSl7 aWYoTi53Myl7dyhhYixhYSxaLFkpfX0sYWRkRG9tTG9hZEV2ZW50OkwsYWRkTG9hZEV2ZW50OnQs Z2V0UXVlcnlQYXJhbVZhbHVlOmZ1bmN0aW9uKGFiKXt2YXIgYWE9ay5sb2NhdGlvbi5zZWFyY2h8 fGsubG9jYXRpb24uaGFzaDtpZihhYSl7aWYoL1w/Ly50ZXN0KGFhKSl7YWE9YWEuc3BsaXQoIj8i KVsxXX1pZihhYj09bnVsbCl7cmV0dXJuIE0oYWEpfXZhciBaPWFhLnNwbGl0KCImIik7Zm9yKHZh ciBZPTA7WTxaLmxlbmd0aDtZKyspe2lmKFpbWV0uc3Vic3RyaW5nKDAsWltZXS5pbmRleE9mKCI9 IikpPT1hYil7cmV0dXJuIE0oWltZXS5zdWJzdHJpbmcoKFpbWV0uaW5kZXhPZigiPSIpKzEpKSl9 fX1yZXR1cm4iIn0sZXhwcmVzc0luc3RhbGxDYWxsYmFjazpmdW5jdGlvbigpe2lmKGEpe3ZhciBZ PWMoUyk7aWYoWSYmbSl7WS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChtLFkpO2lmKFIpe3goUix0 cnVlKTtpZihOLmllJiZOLndpbil7bS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9fWlmKEYpe0YoQyl9 fWE9ZmFsc2V9fX19KCk7RXh0LkZsYXNoQ29tcG9uZW50PUV4dC5leHRlbmQoRXh0LkJveENvbXBv bmVudCx7Zmxhc2hWZXJzaW9uOiI5LjAuNDUiLGJhY2tncm91bmRDb2xvcjoiI2ZmZmZmZiIsd21v ZGU6Im9wYXF1ZSIsdXJsOnVuZGVmaW5lZCxzd2ZJZDp1bmRlZmluZWQsc3dmV2lkdGg6IjEwMCUi LHN3ZkhlaWdodDoiMTAwJSIsZXhwcmVzc0luc3RhbGw6ZmFsc2UsaW5pdENvbXBvbmVudDpmdW5j dGlvbigpe0V4dC5GbGFzaENvbXBvbmVudC5zdXBlcmNsYXNzLmluaXRDb21wb25lbnQuY2FsbCh0 aGlzKTt0aGlzLmFkZEV2ZW50cygiaW5pdGlhbGl6ZSIpfSxvblJlbmRlcjpmdW5jdGlvbigpe0V4 dC5GbGFzaENvbXBvbmVudC5zdXBlcmNsYXNzLm9uUmVuZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRz KTt2YXIgYj17YWxsb3dTY3JpcHRBY2Nlc3M6ImFsd2F5cyIsYmdjb2xvcjp0aGlzLmJhY2tncm91 bmRDb2xvcix3bW9kZTp0aGlzLndtb2RlfSxhPXthbGxvd2VkRG9tYWluOmRvY3VtZW50LmxvY2F0 aW9uLmhvc3RuYW1lLGVsZW1lbnRJRDp0aGlzLmdldElkKCksZXZlbnRIYW5kbGVyOiJFeHQuRmxh c2hFdmVudFByb3h5Lm9uRXZlbnQifTtuZXcgc3dmb2JqZWN0LmVtYmVkU1dGKHRoaXMudXJsLHRo aXMuaWQsdGhpcy5zd2ZXaWR0aCx0aGlzLnN3ZkhlaWdodCx0aGlzLmZsYXNoVmVyc2lvbix0aGlz LmV4cHJlc3NJbnN0YWxsP0V4dC5GbGFzaENvbXBvbmVudC5FWFBSRVNTX0lOU1RBTExfVVJMOnVu ZGVmaW5lZCxhLGIpO3RoaXMuc3dmPUV4dC5nZXREb20odGhpcy5pZCk7dGhpcy5lbD1FeHQuZ2V0 KHRoaXMuc3dmKX0sZ2V0U3dmSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zd2ZJZHx8KHRoaXMu c3dmSWQ9ImV4dHN3ZiIrKCsrRXh0LkNvbXBvbmVudC5BVVRPX0lEKSl9LGdldElkOmZ1bmN0aW9u KCl7cmV0dXJuIHRoaXMuaWR8fCh0aGlzLmlkPSJleHRmbGFzaGNtcCIrKCsrRXh0LkNvbXBvbmVu dC5BVVRPX0lEKSl9LG9uRmxhc2hFdmVudDpmdW5jdGlvbihhKXtzd2l0Y2goYS50eXBlKXtjYXNl InN3ZlJlYWR5Ijp0aGlzLmluaXRTd2YoKTtyZXR1cm47Y2FzZSJsb2ciOnJldHVybn1hLmNvbXBv bmVudD10aGlzO3RoaXMuZmlyZUV2ZW50KGEudHlwZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL2V2 ZW50JC8sIiIpLGEpfSxpbml0U3dmOmZ1bmN0aW9uKCl7dGhpcy5vblN3ZlJlYWR5KCEhdGhpcy5p c0luaXRpYWxpemVkKTt0aGlzLmlzSW5pdGlhbGl6ZWQ9dHJ1ZTt0aGlzLmZpcmVFdmVudCgiaW5p dGlhbGl6ZSIsdGhpcyl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtpZih0aGlzLnJlbmRlcmVk KXtzd2ZvYmplY3QucmVtb3ZlU1dGKHRoaXMuc3dmLmlkKX1FeHQuRmxhc2hDb21wb25lbnQuc3Vw ZXJjbGFzcy5iZWZvcmVEZXN0cm95LmNhbGwodGhpcyl9LG9uU3dmUmVhZHk6RXh0LmVtcHR5Rm59 KTtFeHQuRmxhc2hDb21wb25lbnQuRVhQUkVTU19JTlNUQUxMX1VSTD0iaHR0cDovL3N3Zm9iamVj dC5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1bmsvc3dmb2JqZWN0L2V4cHJlc3NJbnN0YWxsLnN3ZiI7 RXh0LnJlZygiZmxhc2giLEV4dC5GbGFzaENvbXBvbmVudCk7RXh0LkZsYXNoRXZlbnRQcm94eT17 b25FdmVudDpmdW5jdGlvbihjLGIpe3ZhciBhPUV4dC5nZXRDbXAoYyk7aWYoYSl7YS5vbkZsYXNo RXZlbnQoYil9ZWxzZXthcmd1bWVudHMuY2FsbGVlLmRlZmVyKDEwLHRoaXMsW2MsYl0pfX19O0V4 dC5jaGFydC5DaGFydD1FeHQuZXh0ZW5kKEV4dC5GbGFzaENvbXBvbmVudCx7cmVmcmVzaEJ1ZmZl cjoxMDAsY2hhcnRTdHlsZTp7cGFkZGluZzoxMCxhbmltYXRpb25FbmFibGVkOnRydWUsZm9udDp7 bmFtZToiVGFob21hIixjb2xvcjo0NDczOTI0LHNpemU6MTF9LGRhdGFUaXA6e3BhZGRpbmc6NSxi b3JkZXI6e2NvbG9yOjEwMDc1MTEyLHNpemU6MX0sYmFja2dyb3VuZDp7Y29sb3I6MTQzNDYyMzAs YWxwaGE6MC45fSxmb250OntuYW1lOiJUYWhvbWEiLGNvbG9yOjEzOTMyOTEsc2l6ZToxMCxib2xk OnRydWV9fX0sZXh0cmFTdHlsZTpudWxsLGRpc2FibGVDYWNoaW5nOkV4dC5pc0lFfHxFeHQuaXNP cGVyYSxkaXNhYmxlQ2FjaGVQYXJhbToiX2RjIixpbml0Q29tcG9uZW50OmZ1bmN0aW9uKCl7RXh0 LmNoYXJ0LkNoYXJ0LnN1cGVyY2xhc3MuaW5pdENvbXBvbmVudC5jYWxsKHRoaXMpO2lmKCF0aGlz LnVybCl7dGhpcy51cmw9RXh0LmNoYXJ0LkNoYXJ0LkNIQVJUX1VSTH1pZih0aGlzLmRpc2FibGVD YWNoaW5nKXt0aGlzLnVybD1FeHQudXJsQXBwZW5kKHRoaXMudXJsLFN0cmluZy5mb3JtYXQoInsw fT17MX0iLHRoaXMuZGlzYWJsZUNhY2hlUGFyYW0sbmV3IERhdGUoKS5nZXRUaW1lKCkpKX10aGlz LmFkZEV2ZW50cygiaXRlbW1vdXNlb3ZlciIsIml0ZW1tb3VzZW91dCIsIml0ZW1jbGljayIsIml0 ZW1kb3VibGVjbGljayIsIml0ZW1kcmFnc3RhcnQiLCJpdGVtZHJhZyIsIml0ZW1kcmFnZW5kIik7 dGhpcy5zdG9yZT1FeHQuU3RvcmVNZ3IubG9va3VwKHRoaXMuc3RvcmUpfSxzZXRTdHlsZTpmdW5j dGlvbihhLGIpe3RoaXMuc3dmLnNldFN0eWxlKGEsRXh0LmVuY29kZShiKSl9LHNldFN0eWxlczpm dW5jdGlvbihhKXt0aGlzLnN3Zi5zZXRTdHlsZXMoRXh0LmVuY29kZShhKSl9LHNldFNlcmllc1N0 eWxlczpmdW5jdGlvbihiKXt2YXIgYT1bXTtFeHQuZWFjaChiLGZ1bmN0aW9uKGMpe2EucHVzaChF eHQuZW5jb2RlKGMpKX0pO3RoaXMuc3dmLnNldFNlcmllc1N0eWxlcyhhKX0sc2V0Q2F0ZWdvcnlO YW1lczpmdW5jdGlvbihhKXt0aGlzLnN3Zi5zZXRDYXRlZ29yeU5hbWVzKGEpfSxzZXRUaXBSZW5k ZXJlcjpmdW5jdGlvbihiKXt2YXIgYT10aGlzO3RoaXMudGlwRm5OYW1lPXRoaXMuY3JlYXRlRm5Q cm94eShmdW5jdGlvbihnLGQsZSl7dmFyIGM9YS5zdG9yZS5nZXRBdChkKTtyZXR1cm4gYihhLGMs ZCxlKX0sdGhpcy50aXBGbk5hbWUpO3RoaXMuc3dmLnNldERhdGFUaXBGdW5jdGlvbih0aGlzLnRp cEZuTmFtZSl9LHNldFNlcmllczpmdW5jdGlvbihhKXt0aGlzLnNlcmllcz1hO3RoaXMucmVmcmVz aCgpfSxiaW5kU3RvcmU6ZnVuY3Rpb24oYSxiKXtpZighYiYmdGhpcy5zdG9yZSl7dGhpcy5zdG9y ZS51bigiZGF0YWNoYW5nZWQiLHRoaXMucmVmcmVzaCx0aGlzKTt0aGlzLnN0b3JlLnVuKCJhZGQi LHRoaXMuZGVsYXlSZWZyZXNoLHRoaXMpO3RoaXMuc3RvcmUudW4oInJlbW92ZSIsdGhpcy5kZWxh eVJlZnJlc2gsdGhpcyk7dGhpcy5zdG9yZS51bigidXBkYXRlIix0aGlzLmRlbGF5UmVmcmVzaCx0 aGlzKTt0aGlzLnN0b3JlLnVuKCJjbGVhciIsdGhpcy5yZWZyZXNoLHRoaXMpO2lmKGEhPT10aGlz LnN0b3JlJiZ0aGlzLnN0b3JlLmF1dG9EZXN0cm95KXt0aGlzLnN0b3JlLmRlc3Ryb3koKX19aWYo YSl7YT1FeHQuU3RvcmVNZ3IubG9va3VwKGEpO2Eub24oe3Njb3BlOnRoaXMsZGF0YWNoYW5nZWQ6 dGhpcy5yZWZyZXNoLGFkZDp0aGlzLmRlbGF5UmVmcmVzaCxyZW1vdmU6dGhpcy5kZWxheVJlZnJl c2gsdXBkYXRlOnRoaXMuZGVsYXlSZWZyZXNoLGNsZWFyOnRoaXMucmVmcmVzaH0pfXRoaXMuc3Rv cmU9YTtpZihhJiYhYil7dGhpcy5yZWZyZXNoKCl9fSxvblN3ZlJlYWR5OmZ1bmN0aW9uKGEpe0V4 dC5jaGFydC5DaGFydC5zdXBlcmNsYXNzLm9uU3dmUmVhZHkuY2FsbCh0aGlzLGEpO3RoaXMuc3dm LnNldFR5cGUodGhpcy50eXBlKTtpZih0aGlzLmNoYXJ0U3R5bGUpe3RoaXMuc2V0U3R5bGVzKEV4 dC5hcHBseSh0aGlzLmV4dHJhU3R5bGV8fHt9LHRoaXMuY2hhcnRTdHlsZSkpfWlmKHRoaXMuY2F0 ZWdvcnlOYW1lcyl7dGhpcy5zZXRDYXRlZ29yeU5hbWVzKHRoaXMuY2F0ZWdvcnlOYW1lcyl9aWYo dGhpcy50aXBSZW5kZXJlcil7dGhpcy5zZXRUaXBSZW5kZXJlcih0aGlzLnRpcFJlbmRlcmVyKX1p ZighYSl7dGhpcy5iaW5kU3RvcmUodGhpcy5zdG9yZSx0cnVlKX10aGlzLnJlZnJlc2guZGVmZXIo MTAsdGhpcyl9LGRlbGF5UmVmcmVzaDpmdW5jdGlvbigpe2lmKCF0aGlzLnJlZnJlc2hUYXNrKXt0 aGlzLnJlZnJlc2hUYXNrPW5ldyBFeHQudXRpbC5EZWxheWVkVGFzayh0aGlzLnJlZnJlc2gsdGhp cyl9dGhpcy5yZWZyZXNoVGFzay5kZWxheSh0aGlzLnJlZnJlc2hCdWZmZXIpfSxyZWZyZXNoOmZ1 bmN0aW9uKCl7dmFyIG09ZmFsc2U7dmFyIGs9W10sYz10aGlzLnN0b3JlLmRhdGEuaXRlbXM7Zm9y KHZhciBnPTAsbD1jLmxlbmd0aDtnPGw7ZysrKXtrW2ddPWNbZ10uZGF0YX12YXIgZT1bXTt2YXIg ZD0wO3ZhciBuPW51bGw7dmFyIGg9MDtpZih0aGlzLnNlcmllcyl7ZD10aGlzLnNlcmllcy5sZW5n dGg7Zm9yKGg9MDtoPGQ7aCsrKXtuPXRoaXMuc2VyaWVzW2hdO3ZhciBiPXt9O2Zvcih2YXIgYSBp biBuKXtpZihhPT0ic3R5bGUiJiZuLnN0eWxlIT09bnVsbCl7Yi5zdHlsZT1FeHQuZW5jb2RlKG4u c3R5bGUpO209dHJ1ZX1lbHNle2JbYV09blthXX19ZS5wdXNoKGIpfX1pZihkPjApe2ZvcihoPTA7 aDxkO2grKyl7bj1lW2hdO2lmKCFuLnR5cGUpe24udHlwZT10aGlzLnR5cGV9bi5kYXRhUHJvdmlk ZXI9a319ZWxzZXtlLnB1c2goe3R5cGU6dGhpcy50eXBlLGRhdGFQcm92aWRlcjprfSl9dGhpcy5z d2Yuc2V0RGF0YVByb3ZpZGVyKGUpfSxjcmVhdGVGblByb3h5OmZ1bmN0aW9uKGIsYSl7aWYoYSl7 ZGVsZXRlIHdpbmRvd1thXX12YXIgYz0iZXh0Rm5Qcm94eSIrKCsrRXh0LmNoYXJ0LkNoYXJ0LlBS T1hZX0ZOX0lEKTt3aW5kb3dbY109YjtyZXR1cm4gY30sb25EZXN0cm95OmZ1bmN0aW9uKCl7RXh0 LmNoYXJ0LkNoYXJ0LnN1cGVyY2xhc3Mub25EZXN0cm95LmNhbGwodGhpcyk7ZGVsZXRlIHdpbmRv d1t0aGlzLnRpcEZuTmFtZV19fSk7RXh0LnJlZygiY2hhcnQiLEV4dC5jaGFydC5DaGFydCk7RXh0 LmNoYXJ0LkNoYXJ0LlBST1hZX0ZOX0lEPTA7RXh0LmNoYXJ0LkNoYXJ0LkNIQVJUX1VSTD0iaHR0 cDovL3l1aS55YWhvb2FwaXMuY29tLzIuNy4wL2J1aWxkL2NoYXJ0cy9hc3NldHMvY2hhcnRzLnN3 ZiI7RXh0LmNoYXJ0LlBpZUNoYXJ0PUV4dC5leHRlbmQoRXh0LmNoYXJ0LkNoYXJ0LHt0eXBlOiJw aWUiLG9uU3dmUmVhZHk6ZnVuY3Rpb24oYSl7RXh0LmNoYXJ0LlBpZUNoYXJ0LnN1cGVyY2xhc3Mu b25Td2ZSZWFkeS5jYWxsKHRoaXMsYSk7dGhpcy5zZXREYXRhRmllbGQodGhpcy5kYXRhRmllbGQp O3RoaXMuc2V0Q2F0ZWdvcnlGaWVsZCh0aGlzLmNhdGVnb3J5RmllbGQpfSxzZXREYXRhRmllbGQ6 ZnVuY3Rpb24oYSl7dGhpcy5kYXRhRmllbGQ9YTt0aGlzLnN3Zi5zZXREYXRhRmllbGQoYSl9LHNl dENhdGVnb3J5RmllbGQ6ZnVuY3Rpb24oYSl7dGhpcy5jYXRlZ29yeUZpZWxkPWE7dGhpcy5zd2Yu c2V0Q2F0ZWdvcnlGaWVsZChhKX19KTtFeHQucmVnKCJwaWVjaGFydCIsRXh0LmNoYXJ0LlBpZUNo YXJ0KTtFeHQuY2hhcnQuQ2FydGVzaWFuQ2hhcnQ9RXh0LmV4dGVuZChFeHQuY2hhcnQuQ2hhcnQs e29uU3dmUmVhZHk6ZnVuY3Rpb24oYSl7RXh0LmNoYXJ0LkNhcnRlc2lhbkNoYXJ0LnN1cGVyY2xh c3Mub25Td2ZSZWFkeS5jYWxsKHRoaXMsYSk7aWYodGhpcy54RmllbGQpe3RoaXMuc2V0WEZpZWxk KHRoaXMueEZpZWxkKX1pZih0aGlzLnlGaWVsZCl7dGhpcy5zZXRZRmllbGQodGhpcy55RmllbGQp fWlmKHRoaXMueEF4aXMpe3RoaXMuc2V0WEF4aXModGhpcy54QXhpcyl9aWYodGhpcy55QXhpcyl7 dGhpcy5zZXRZQXhpcyh0aGlzLnlBeGlzKX19LHNldFhGaWVsZDpmdW5jdGlvbihhKXt0aGlzLnhG aWVsZD1hO3RoaXMuc3dmLnNldEhvcml6b250YWxGaWVsZChhKX0sc2V0WUZpZWxkOmZ1bmN0aW9u KGEpe3RoaXMueUZpZWxkPWE7dGhpcy5zd2Yuc2V0VmVydGljYWxGaWVsZChhKX0sc2V0WEF4aXM6 ZnVuY3Rpb24oYSl7dGhpcy54QXhpcz10aGlzLmNyZWF0ZUF4aXMoInhBeGlzIixhKTt0aGlzLnN3 Zi5zZXRIb3Jpem9udGFsQXhpcyh0aGlzLnhBeGlzKX0sc2V0WUF4aXM6ZnVuY3Rpb24oYSl7dGhp cy55QXhpcz10aGlzLmNyZWF0ZUF4aXMoInlBeGlzIixhKTt0aGlzLnN3Zi5zZXRWZXJ0aWNhbEF4 aXModGhpcy55QXhpcyl9LGNyZWF0ZUF4aXM6ZnVuY3Rpb24oYyxkKXt2YXIgZT1FeHQuYXBwbHko e30sZCksYT1udWxsO2lmKHRoaXNbY10pe2E9dGhpc1tjXS5sYWJlbEZ1bmN0aW9ufWlmKGUubGFi ZWxSZW5kZXJlcil7dmFyIGI9ZS5sYWJlbFJlbmRlcmVyO2UubGFiZWxGdW5jdGlvbj10aGlzLmNy ZWF0ZUZuUHJveHkoZnVuY3Rpb24oZyl7cmV0dXJuIGIoZyl9LGEpO2RlbGV0ZSBlLmxhYmVsUmVu ZGVyZXJ9cmV0dXJuIGV9fSk7RXh0LnJlZygiY2FydGVzaWFuY2hhcnQiLEV4dC5jaGFydC5DYXJ0 ZXNpYW5DaGFydCk7RXh0LmNoYXJ0LkxpbmVDaGFydD1FeHQuZXh0ZW5kKEV4dC5jaGFydC5DYXJ0 ZXNpYW5DaGFydCx7dHlwZToibGluZSJ9KTtFeHQucmVnKCJsaW5lY2hhcnQiLEV4dC5jaGFydC5M aW5lQ2hhcnQpO0V4dC5jaGFydC5Db2x1bW5DaGFydD1FeHQuZXh0ZW5kKEV4dC5jaGFydC5DYXJ0 ZXNpYW5DaGFydCx7dHlwZToiY29sdW1uIn0pO0V4dC5yZWcoImNvbHVtbmNoYXJ0IixFeHQuY2hh cnQuQ29sdW1uQ2hhcnQpO0V4dC5jaGFydC5TdGFja2VkQ29sdW1uQ2hhcnQ9RXh0LmV4dGVuZChF eHQuY2hhcnQuQ2FydGVzaWFuQ2hhcnQse3R5cGU6InN0YWNrY29sdW1uIn0pO0V4dC5yZWcoInN0 YWNrZWRjb2x1bW5jaGFydCIsRXh0LmNoYXJ0LlN0YWNrZWRDb2x1bW5DaGFydCk7RXh0LmNoYXJ0 LkJhckNoYXJ0PUV4dC5leHRlbmQoRXh0LmNoYXJ0LkNhcnRlc2lhbkNoYXJ0LHt0eXBlOiJiYXIi fSk7RXh0LnJlZygiYmFyY2hhcnQiLEV4dC5jaGFydC5CYXJDaGFydCk7RXh0LmNoYXJ0LlN0YWNr ZWRCYXJDaGFydD1FeHQuZXh0ZW5kKEV4dC5jaGFydC5DYXJ0ZXNpYW5DaGFydCx7dHlwZToic3Rh Y2tiYXIifSk7RXh0LnJlZygic3RhY2tlZGJhcmNoYXJ0IixFeHQuY2hhcnQuU3RhY2tlZEJhckNo YXJ0KTtFeHQuY2hhcnQuQXhpcz1mdW5jdGlvbihhKXtFeHQuYXBwbHkodGhpcyxhKX07RXh0LmNo YXJ0LkF4aXMucHJvdG90eXBlPXt0eXBlOm51bGwsb3JpZW50YXRpb246Imhvcml6b250YWwiLHJl dmVyc2U6ZmFsc2UsbGFiZWxGdW5jdGlvbjpudWxsLGhpZGVPdmVybGFwcGluZ0xhYmVsczp0cnVl fTtFeHQuY2hhcnQuTnVtZXJpY0F4aXM9RXh0LmV4dGVuZChFeHQuY2hhcnQuQXhpcyx7dHlwZToi bnVtZXJpYyIsbWluaW11bTpOYU4sbWF4aW11bTpOYU4sbWFqb3JVbml0Ok5hTixtaW5vclVuaXQ6 TmFOLHNuYXBUb1VuaXRzOnRydWUsYWx3YXlzU2hvd1plcm86dHJ1ZSxzY2FsZToibGluZWFyIn0p O0V4dC5jaGFydC5UaW1lQXhpcz1FeHQuZXh0ZW5kKEV4dC5jaGFydC5BeGlzLHt0eXBlOiJ0aW1l IixtaW5pbXVtOm51bGwsbWF4aW11bTpudWxsLG1ham9yVW5pdDpOYU4sbWFqb3JUaW1lVW5pdDpu dWxsLG1pbm9yVW5pdDpOYU4sbWlub3JUaW1lVW5pdDpudWxsLHNuYXBUb1VuaXRzOnRydWV9KTtF eHQuY2hhcnQuQ2F0ZWdvcnlBeGlzPUV4dC5leHRlbmQoRXh0LmNoYXJ0LkF4aXMse3R5cGU6ImNh dGVnb3J5IixjYXRlZ29yeU5hbWVzOm51bGx9KTtFeHQuY2hhcnQuU2VyaWVzPWZ1bmN0aW9uKGEp e0V4dC5hcHBseSh0aGlzLGEpfTtFeHQuY2hhcnQuU2VyaWVzLnByb3RvdHlwZT17dHlwZTpudWxs LGRpc3BsYXlOYW1lOm51bGx9O0V4dC5jaGFydC5DYXJ0ZXNpYW5TZXJpZXM9RXh0LmV4dGVuZChF eHQuY2hhcnQuU2VyaWVzLHt4RmllbGQ6bnVsbCx5RmllbGQ6bnVsbH0pO0V4dC5jaGFydC5Db2x1 bW5TZXJpZXM9RXh0LmV4dGVuZChFeHQuY2hhcnQuQ2FydGVzaWFuU2VyaWVzLHt0eXBlOiJjb2x1 bW4ifSk7RXh0LmNoYXJ0LkxpbmVTZXJpZXM9RXh0LmV4dGVuZChFeHQuY2hhcnQuQ2FydGVzaWFu U2VyaWVzLHt0eXBlOiJsaW5lIn0pO0V4dC5jaGFydC5CYXJTZXJpZXM9RXh0LmV4dGVuZChFeHQu Y2hhcnQuQ2FydGVzaWFuU2VyaWVzLHt0eXBlOiJiYXIifSk7RXh0LmNoYXJ0LlBpZVNlcmllcz1F eHQuZXh0ZW5kKEV4dC5jaGFydC5TZXJpZXMse3R5cGU6InBpZSIsZGF0YUZpZWxkOm51bGwsY2F0 ZWdvcnlGaWVsZDpudWxsfSk7RXh0LmxheW91dC5NZW51TGF5b3V0PUV4dC5leHRlbmQoRXh0Lmxh eW91dC5Db250YWluZXJMYXlvdXQse21vbml0b3JSZXNpemU6dHJ1ZSxzZXRDb250YWluZXI6ZnVu Y3Rpb24oYSl7dGhpcy5tb25pdG9yUmVzaXplPSFhLmZsb2F0aW5nO0V4dC5sYXlvdXQuTWVudUxh eW91dC5zdXBlcmNsYXNzLnNldENvbnRhaW5lci5jYWxsKHRoaXMsYSl9LHJlbmRlckl0ZW06ZnVu Y3Rpb24oZyxiLGUpe2lmKCF0aGlzLml0ZW1UcGwpe3RoaXMuaXRlbVRwbD1FeHQubGF5b3V0Lk1l bnVMYXlvdXQucHJvdG90eXBlLml0ZW1UcGw9bmV3IEV4dC5YVGVtcGxhdGUoJzxsaSBpZD0ie2l0 ZW1JZH0iIGNsYXNzPSJ7aXRlbUNsc30iPicsJzx0cGwgaWY9Im5lZWRzSWNvbiI+JywnPGltZyBz cmM9IntpY29ufSIgY2xhc3M9IntpY29uQ2xzfSIvPicsIjwvdHBsPiIsIjwvbGk+Iil9aWYoZyYm IWcucmVuZGVyZWQpe2lmKEV4dC5pc051bWJlcihiKSl7Yj1lLmRvbS5jaGlsZE5vZGVzW2JdfXZh ciBkPXRoaXMuZ2V0SXRlbUFyZ3MoZyk7Zy5yZW5kZXIoZy5wb3NpdGlvbkVsPWI/dGhpcy5pdGVt VHBsLmluc2VydEJlZm9yZShiLGQsdHJ1ZSk6dGhpcy5pdGVtVHBsLmFwcGVuZChlLGQsdHJ1ZSkp O2cucG9zaXRpb25FbC5tZW51SXRlbUlkPWcuaXRlbUlkfHxnLmlkO2lmKCFkLmlzTWVudUl0ZW0m JmQubmVlZHNJY29uKXtnLnBvc2l0aW9uRWwuYWRkQ2xhc3MoIngtbWVudS1saXN0LWl0ZW0taW5k ZW50Iil9fWVsc2V7aWYoZyYmIXRoaXMuaXNWYWxpZFBhcmVudChnLGUpKXtpZihFeHQuaXNOdW1i ZXIoYikpe2I9ZS5kb20uY2hpbGROb2Rlc1tiXX1lLmRvbS5pbnNlcnRCZWZvcmUoZy5nZXRBY3Rp b25FbCgpLmRvbSxifHxudWxsKX19fSxnZXRJdGVtQXJnczpmdW5jdGlvbihiKXt2YXIgYT1iIGlu c3RhbmNlb2YgRXh0Lm1lbnUuSXRlbTtyZXR1cm57aXNNZW51SXRlbTphLG5lZWRzSWNvbjohYSYm KGIuaWNvbnx8Yi5pY29uQ2xzKSxpY29uOmIuaWNvbnx8RXh0LkJMQU5LX0lNQUdFX1VSTCxpY29u Q2xzOiJ4LW1lbnUtaXRlbS1pY29uICIrKGIuaWNvbkNsc3x8IiIpLGl0ZW1JZDoieC1tZW51LWVs LSIrYi5pZCxpdGVtQ2xzOiJ4LW1lbnUtbGlzdC1pdGVtICIrKHRoaXMuZXh0cmFDbHN8fCIiKX19 LGlzVmFsaWRQYXJlbnQ6ZnVuY3Rpb24oYixhKXtyZXR1cm4gYi5lbC51cCgibGkueC1tZW51LWxp c3QtaXRlbSIsNSkuZG9tLnBhcmVudE5vZGU9PT0oYS5kb218fGEpfSxvbkxheW91dDpmdW5jdGlv bihhLGIpe3RoaXMucmVuZGVyQWxsKGEsYik7dGhpcy5kb0F1dG9TaXplKCl9LGRvQXV0b1NpemU6 ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmNvbnRhaW5lcixhPWMud2lkdGg7aWYoYy5mbG9hdGluZyl7 aWYoYSl7Yy5zZXRXaWR0aChhKX1lbHNle2lmKEV4dC5pc0lFKXtjLnNldFdpZHRoKEV4dC5pc1N0 cmljdCYmKEV4dC5pc0lFN3x8RXh0LmlzSUU4KT8iYXV0byI6Yy5taW5XaWR0aCk7dmFyIGQ9Yy5n ZXRFbCgpLGI9ZC5kb20ub2Zmc2V0V2lkdGg7Yy5zZXRXaWR0aChjLmdldExheW91dFRhcmdldCgp LmdldFdpZHRoKCkrZC5nZXRGcmFtZVdpZHRoKCJsciIpKX19fX19KTtFeHQuQ29udGFpbmVyLkxB WU9VVFMubWVudT1FeHQubGF5b3V0Lk1lbnVMYXlvdXQ7RXh0Lm1lbnUuTWVudT1FeHQuZXh0ZW5k KEV4dC5Db250YWluZXIse21pbldpZHRoOjEyMCxzaGFkb3c6InNpZGVzIixzdWJNZW51QWxpZ246 InRsLXRyPyIsZGVmYXVsdEFsaWduOiJ0bC1ibD8iLGFsbG93T3RoZXJNZW51czpmYWxzZSxpZ25v cmVQYXJlbnRDbGlja3M6ZmFsc2UsZW5hYmxlU2Nyb2xsaW5nOnRydWUsbWF4SGVpZ2h0Om51bGws c2Nyb2xsSW5jcmVtZW50OjI0LHNob3dTZXBhcmF0b3I6dHJ1ZSxkZWZhdWx0T2Zmc2V0czpbMCww XSxmbG9hdGluZzp0cnVlLGhpZGRlbjp0cnVlLGxheW91dDoibWVudSIsaGlkZU1vZGU6Im9mZnNl dHMiLHNjcm9sbGVySGVpZ2h0OjgsYXV0b0xheW91dDp0cnVlLGRlZmF1bHRUeXBlOiJtZW51aXRl bSIsaW5pdENvbXBvbmVudDpmdW5jdGlvbigpe2lmKEV4dC5pc0FycmF5KHRoaXMuaW5pdGlhbENv bmZpZykpe0V4dC5hcHBseSh0aGlzLHtpdGVtczp0aGlzLmluaXRpYWxDb25maWd9KX10aGlzLmFk ZEV2ZW50cygiY2xpY2siLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsIml0ZW1jbGljayIpO0V4dC5t ZW51Lk1lbnVNZ3IucmVnaXN0ZXIodGhpcyk7aWYodGhpcy5mbG9hdGluZyl7RXh0LkV2ZW50TWFu YWdlci5vbldpbmRvd1Jlc2l6ZSh0aGlzLmhpZGUsdGhpcyl9ZWxzZXtpZih0aGlzLmluaXRpYWxD b25maWcuaGlkZGVuIT09ZmFsc2Upe3RoaXMuaGlkZGVuPWZhbHNlfXRoaXMuaW50ZXJuYWxEZWZh dWx0cz17aGlkZU9uQ2xpY2s6ZmFsc2V9fUV4dC5tZW51Lk1lbnUuc3VwZXJjbGFzcy5pbml0Q29t cG9uZW50LmNhbGwodGhpcyk7aWYodGhpcy5hdXRvTGF5b3V0KXt0aGlzLm9uKHthZGQ6dGhpcy5k b0xheW91dCxyZW1vdmU6dGhpcy5kb0xheW91dCxzY29wZTp0aGlzfSl9fSxnZXRMYXlvdXRUYXJn ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bH0sb25SZW5kZXI6ZnVuY3Rpb24oYixhKXtpZigh Yil7Yj1FeHQuZ2V0Qm9keSgpfXZhciBjPXtpZDp0aGlzLmdldElkKCksY2xzOiJ4LW1lbnUgIiso KHRoaXMuZmxvYXRpbmcpPyJ4LW1lbnUtZmxvYXRpbmcgeC1sYXllciAiOiIiKSsodGhpcy5jbHN8 fCIiKSsodGhpcy5wbGFpbj8iIHgtbWVudS1wbGFpbiI6IiIpKyh0aGlzLnNob3dTZXBhcmF0b3I/ IiI6IiB4LW1lbnUtbm9zZXAiKSxzdHlsZTp0aGlzLnN0eWxlLGNuOlt7dGFnOiJhIixjbHM6Ingt bWVudS1mb2N1cyIsaHJlZjoiIyIsb25jbGljazoicmV0dXJuIGZhbHNlOyIsdGFiSW5kZXg6Ii0x In0se3RhZzoidWwiLGNsczoieC1tZW51LWxpc3QifV19O2lmKHRoaXMuZmxvYXRpbmcpe3RoaXMu ZWw9bmV3IEV4dC5MYXllcih7c2hhZG93OnRoaXMuc2hhZG93LGRoOmMsY29uc3RyYWluOmZhbHNl LHBhcmVudEVsOmIsemluZGV4OjE1MDAwfSl9ZWxzZXt0aGlzLmVsPWIuY3JlYXRlQ2hpbGQoYyl9 RXh0Lm1lbnUuTWVudS5zdXBlcmNsYXNzLm9uUmVuZGVyLmNhbGwodGhpcyxiLGEpO2lmKCF0aGlz LmtleU5hdil7dGhpcy5rZXlOYXY9bmV3IEV4dC5tZW51Lk1lbnVOYXYodGhpcyl9dGhpcy5mb2N1 c0VsPXRoaXMuZWwuY2hpbGQoImEueC1tZW51LWZvY3VzIik7dGhpcy51bD10aGlzLmVsLmNoaWxk KCJ1bC54LW1lbnUtbGlzdCIpO3RoaXMubW9uKHRoaXMudWwse3Njb3BlOnRoaXMsY2xpY2s6dGhp cy5vbkNsaWNrLG1vdXNlb3Zlcjp0aGlzLm9uTW91c2VPdmVyLG1vdXNlb3V0OnRoaXMub25Nb3Vz ZU91dH0pO2lmKHRoaXMuZW5hYmxlU2Nyb2xsaW5nKXt0aGlzLm1vbih0aGlzLmVsLHtzY29wZTp0 aGlzLGRlbGVnYXRlOiIueC1tZW51LXNjcm9sbGVyIixjbGljazp0aGlzLm9uU2Nyb2xsLG1vdXNl b3Zlcjp0aGlzLmRlYWN0aXZhdGVBY3RpdmV9KX19LGZpbmRUYXJnZXRJdGVtOmZ1bmN0aW9uKGIp e3ZhciBhPWIuZ2V0VGFyZ2V0KCIueC1tZW51LWxpc3QtaXRlbSIsdGhpcy51bCx0cnVlKTtpZihh JiZhLm1lbnVJdGVtSWQpe3JldHVybiB0aGlzLml0ZW1zLmdldChhLm1lbnVJdGVtSWQpfX0sb25D bGljazpmdW5jdGlvbihiKXt2YXIgYT10aGlzLmZpbmRUYXJnZXRJdGVtKGIpO2lmKGEpe2lmKGEu aXNGb3JtRmllbGQpe3RoaXMuc2V0QWN0aXZlSXRlbShhKX1lbHNle2lmKGEubWVudSYmdGhpcy5p Z25vcmVQYXJlbnRDbGlja3Mpe2EuZXhwYW5kTWVudSgpO2IucHJldmVudERlZmF1bHQoKX1lbHNl e2lmKGEub25DbGljayl7YS5vbkNsaWNrKGIpO3RoaXMuZmlyZUV2ZW50KCJjbGljayIsdGhpcyxh LGIpfX19fX0sc2V0QWN0aXZlSXRlbTpmdW5jdGlvbihhLGIpe2lmKGEhPXRoaXMuYWN0aXZlSXRl bSl7dGhpcy5kZWFjdGl2YXRlQWN0aXZlKCk7aWYoKHRoaXMuYWN0aXZlSXRlbT1hKS5pc0Zvcm1G aWVsZCl7YS5mb2N1cygpfWVsc2V7YS5hY3RpdmF0ZShiKX19ZWxzZXtpZihiKXthLmV4cGFuZE1l bnUoKX19fSxkZWFjdGl2YXRlQWN0aXZlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5hY3RpdmVJdGVt O2lmKGIpe2lmKGIuaXNGb3JtRmllbGQpe2lmKGIuY29sbGFwc2Upe2IuY29sbGFwc2UoKX19ZWxz ZXtiLmRlYWN0aXZhdGUoKX1kZWxldGUgdGhpcy5hY3RpdmVJdGVtfX0sdHJ5QWN0aXZhdGU6ZnVu Y3Rpb24oZyxlKXt2YXIgYj10aGlzLml0ZW1zO2Zvcih2YXIgYz1nLGE9Yi5sZW5ndGg7Yz49MCYm YzxhO2MrPWUpe3ZhciBkPWIuZ2V0KGMpO2lmKCFkLmRpc2FibGVkJiYoZC5jYW5BY3RpdmF0ZXx8 ZC5pc0Zvcm1GaWVsZCkpe3RoaXMuc2V0QWN0aXZlSXRlbShkLGZhbHNlKTtyZXR1cm4gZH19cmV0 dXJuIGZhbHNlfSxvbk1vdXNlT3ZlcjpmdW5jdGlvbihiKXt2YXIgYT10aGlzLmZpbmRUYXJnZXRJ dGVtKGIpO2lmKGEpe2lmKGEuY2FuQWN0aXZhdGUmJiFhLmRpc2FibGVkKXt0aGlzLnNldEFjdGl2 ZUl0ZW0oYSx0cnVlKX19dGhpcy5vdmVyPXRydWU7dGhpcy5maXJlRXZlbnQoIm1vdXNlb3ZlciIs dGhpcyxiLGEpfSxvbk1vdXNlT3V0OmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMuZmluZFRhcmdldEl0 ZW0oYik7aWYoYSl7aWYoYT09dGhpcy5hY3RpdmVJdGVtJiZhLnNob3VsZERlYWN0aXZhdGUmJmEu c2hvdWxkRGVhY3RpdmF0ZShiKSl7dGhpcy5hY3RpdmVJdGVtLmRlYWN0aXZhdGUoKTtkZWxldGUg dGhpcy5hY3RpdmVJdGVtfX10aGlzLm92ZXI9ZmFsc2U7dGhpcy5maXJlRXZlbnQoIm1vdXNlb3V0 Iix0aGlzLGIsYSl9LG9uU2Nyb2xsOmZ1bmN0aW9uKGQsYil7aWYoZCl7ZC5zdG9wRXZlbnQoKX12 YXIgYT10aGlzLnVsLmRvbSxjPUV4dC5mbHkoYikuaXMoIi54LW1lbnUtc2Nyb2xsZXItdG9wIik7 YS5zY3JvbGxUb3ArPXRoaXMuc2Nyb2xsSW5jcmVtZW50KihjPy0xOjEpO2lmKGM/YS5zY3JvbGxU b3A8PTA6YS5zY3JvbGxUb3ArdGhpcy5hY3RpdmVNYXg+PWEuc2Nyb2xsSGVpZ2h0KXt0aGlzLm9u U2Nyb2xsZXJPdXQobnVsbCxiKX19LG9uU2Nyb2xsZXJJbjpmdW5jdGlvbihkLGIpe3ZhciBhPXRo aXMudWwuZG9tLGM9RXh0LmZseShiKS5pcygiLngtbWVudS1zY3JvbGxlci10b3AiKTtpZihjP2Eu c2Nyb2xsVG9wPjA6YS5zY3JvbGxUb3ArdGhpcy5hY3RpdmVNYXg8YS5zY3JvbGxIZWlnaHQpe0V4 dC5mbHkoYikuYWRkQ2xhc3MoWyJ4LW1lbnUtaXRlbS1hY3RpdmUiLCJ4LW1lbnUtc2Nyb2xsZXIt YWN0aXZlIl0pfX0sb25TY3JvbGxlck91dDpmdW5jdGlvbihiLGEpe0V4dC5mbHkoYSkucmVtb3Zl Q2xhc3MoWyJ4LW1lbnUtaXRlbS1hY3RpdmUiLCJ4LW1lbnUtc2Nyb2xsZXItYWN0aXZlIl0pfSxz aG93OmZ1bmN0aW9uKGIsYyxhKXtpZih0aGlzLmZsb2F0aW5nKXt0aGlzLnBhcmVudE1lbnU9YTtp ZighdGhpcy5lbCl7dGhpcy5yZW5kZXIoKTt0aGlzLmRvTGF5b3V0KGZhbHNlLHRydWUpfWlmKHRo aXMuZmlyZUV2ZW50KCJiZWZvcmVzaG93Iix0aGlzKSE9PWZhbHNlKXt0aGlzLnNob3dBdCh0aGlz LmVsLmdldEFsaWduVG9YWShiLGN8fHRoaXMuZGVmYXVsdEFsaWduLHRoaXMuZGVmYXVsdE9mZnNl dHMpLGEsZmFsc2UpfX1lbHNle0V4dC5tZW51Lk1lbnUuc3VwZXJjbGFzcy5zaG93LmNhbGwodGhp cyl9fSxzaG93QXQ6ZnVuY3Rpb24oYyxiLGEpe3RoaXMucGFyZW50TWVudT1iO2lmKCF0aGlzLmVs KXt0aGlzLnJlbmRlcigpfXRoaXMuZWwuc2V0WFkoYyk7aWYodGhpcy5lbmFibGVTY3JvbGxpbmcp e3RoaXMuY29uc3RyYWluU2Nyb2xsKGNbMV0pfXRoaXMuZWwuc2hvdygpO0V4dC5tZW51Lk1lbnUu c3VwZXJjbGFzcy5vblNob3cuY2FsbCh0aGlzKTtpZihFeHQuaXNJRSl7dGhpcy5sYXlvdXQuZG9B dXRvU2l6ZSgpO2lmKCFFeHQuaXNJRTgpe3RoaXMuZWwucmVwYWludCgpfX10aGlzLmhpZGRlbj1m YWxzZTt0aGlzLmZvY3VzKCk7dGhpcy5maXJlRXZlbnQoInNob3ciLHRoaXMpfSxjb25zdHJhaW5T Y3JvbGw6ZnVuY3Rpb24oYyl7dmFyIGEsYj10aGlzLnVsLnNldEhlaWdodCgiYXV0byIpLmdldEhl aWdodCgpO2lmKHRoaXMuZmxvYXRpbmcpe2E9dGhpcy5tYXhIZWlnaHQ/dGhpcy5tYXhIZWlnaHQ6 RXh0LmZseSh0aGlzLmVsLmRvbS5wYXJlbnROb2RlKS5nZXRWaWV3U2l6ZSgpLmhlaWdodC1jfWVs c2V7YT10aGlzLmdldEhlaWdodCgpfWlmKGI+YSYmYT4wKXt0aGlzLmFjdGl2ZU1heD1hLXRoaXMu c2Nyb2xsZXJIZWlnaHQqMi10aGlzLmVsLmdldEZyYW1lV2lkdGgoInRiIiktRXh0Lm51bSh0aGlz LmVsLnNoYWRvd09mZnNldCwwKTt0aGlzLnVsLnNldEhlaWdodCh0aGlzLmFjdGl2ZU1heCk7dGhp cy5jcmVhdGVTY3JvbGxlcnMoKTt0aGlzLmVsLnNlbGVjdCgiLngtbWVudS1zY3JvbGxlciIpLnNl dERpc3BsYXllZCgiIil9ZWxzZXt0aGlzLnVsLnNldEhlaWdodChiKTt0aGlzLmVsLnNlbGVjdCgi LngtbWVudS1zY3JvbGxlciIpLnNldERpc3BsYXllZCgibm9uZSIpfXRoaXMudWwuZG9tLnNjcm9s bFRvcD0wfSxjcmVhdGVTY3JvbGxlcnM6ZnVuY3Rpb24oKXtpZighdGhpcy5zY3JvbGxlcil7dGhp cy5zY3JvbGxlcj17cG9zOjAsdG9wOnRoaXMuZWwuaW5zZXJ0Rmlyc3Qoe3RhZzoiZGl2IixjbHM6 IngtbWVudS1zY3JvbGxlciB4LW1lbnUtc2Nyb2xsZXItdG9wIixodG1sOiImIzE2MDsifSksYm90 dG9tOnRoaXMuZWwuY3JlYXRlQ2hpbGQoe3RhZzoiZGl2IixjbHM6IngtbWVudS1zY3JvbGxlciB4 LW1lbnUtc2Nyb2xsZXItYm90dG9tIixodG1sOiImIzE2MDsifSl9O3RoaXMuc2Nyb2xsZXIudG9w LmhvdmVyKHRoaXMub25TY3JvbGxlckluLHRoaXMub25TY3JvbGxlck91dCx0aGlzKTt0aGlzLnNj cm9sbGVyLnRvcFJlcGVhdGVyPW5ldyBFeHQudXRpbC5DbGlja1JlcGVhdGVyKHRoaXMuc2Nyb2xs ZXIudG9wLHtsaXN0ZW5lcnM6e2NsaWNrOnRoaXMub25TY3JvbGwuY3JlYXRlRGVsZWdhdGUodGhp cyxbbnVsbCx0aGlzLnNjcm9sbGVyLnRvcF0sZmFsc2UpfX0pO3RoaXMuc2Nyb2xsZXIuYm90dG9t LmhvdmVyKHRoaXMub25TY3JvbGxlckluLHRoaXMub25TY3JvbGxlck91dCx0aGlzKTt0aGlzLnNj cm9sbGVyLmJvdHRvbVJlcGVhdGVyPW5ldyBFeHQudXRpbC5DbGlja1JlcGVhdGVyKHRoaXMuc2Ny b2xsZXIuYm90dG9tLHtsaXN0ZW5lcnM6e2NsaWNrOnRoaXMub25TY3JvbGwuY3JlYXRlRGVsZWdh dGUodGhpcyxbbnVsbCx0aGlzLnNjcm9sbGVyLmJvdHRvbV0sZmFsc2UpfX0pfX0sb25MYXlvdXQ6 ZnVuY3Rpb24oKXtpZih0aGlzLmlzVmlzaWJsZSgpKXtpZih0aGlzLmVuYWJsZVNjcm9sbGluZyl7 dGhpcy5jb25zdHJhaW5TY3JvbGwodGhpcy5lbC5nZXRUb3AoKSl9aWYodGhpcy5mbG9hdGluZyl7 dGhpcy5lbC5zeW5jKCl9fX0sZm9jdXM6ZnVuY3Rpb24oKXtpZighdGhpcy5oaWRkZW4pe3RoaXMu ZG9Gb2N1cy5kZWZlcig1MCx0aGlzKX19LGRvRm9jdXM6ZnVuY3Rpb24oKXtpZighdGhpcy5oaWRk ZW4pe3RoaXMuZm9jdXNFbC5mb2N1cygpfX0saGlkZTpmdW5jdGlvbihhKXt0aGlzLmRlZXBIaWRl PWE7RXh0Lm1lbnUuTWVudS5zdXBlcmNsYXNzLmhpZGUuY2FsbCh0aGlzKTtkZWxldGUgdGhpcy5k ZWVwSGlkZX0sb25IaWRlOmZ1bmN0aW9uKCl7RXh0Lm1lbnUuTWVudS5zdXBlcmNsYXNzLm9uSGlk ZS5jYWxsKHRoaXMpO3RoaXMuZGVhY3RpdmF0ZUFjdGl2ZSgpO2lmKHRoaXMuZWwmJnRoaXMuZmxv YXRpbmcpe3RoaXMuZWwuaGlkZSgpfWlmKHRoaXMuZGVlcEhpZGU9PT10cnVlJiZ0aGlzLnBhcmVu dE1lbnUpe3RoaXMucGFyZW50TWVudS5oaWRlKHRydWUpfX0sbG9va3VwQ29tcG9uZW50OmZ1bmN0 aW9uKGEpe2lmKEV4dC5pc1N0cmluZyhhKSl7YT0oYT09InNlcGFyYXRvciJ8fGE9PSItIik/bmV3 IEV4dC5tZW51LlNlcGFyYXRvcigpOm5ldyBFeHQubWVudS5UZXh0SXRlbShhKTt0aGlzLmFwcGx5 RGVmYXVsdHMoYSl9ZWxzZXtpZihFeHQuaXNPYmplY3QoYSkpe2E9dGhpcy5nZXRNZW51SXRlbShh KX1lbHNle2lmKGEudGFnTmFtZXx8YS5lbCl7YT1uZXcgRXh0LkJveENvbXBvbmVudCh7ZWw6YX0p fX19cmV0dXJuIGF9LGFwcGx5RGVmYXVsdHM6ZnVuY3Rpb24oYil7aWYoIUV4dC5pc1N0cmluZyhi KSl7Yj1FeHQubWVudS5NZW51LnN1cGVyY2xhc3MuYXBwbHlEZWZhdWx0cy5jYWxsKHRoaXMsYik7 dmFyIGE9dGhpcy5pbnRlcm5hbERlZmF1bHRzO2lmKGEpe2lmKGIuZXZlbnRzKXtFeHQuYXBwbHlJ ZihiLmluaXRpYWxDb25maWcsYSk7RXh0LmFwcGx5KGIsYSl9ZWxzZXtFeHQuYXBwbHlJZihiLGEp fX19cmV0dXJuIGJ9LGdldE1lbnVJdGVtOmZ1bmN0aW9uKGEpe2lmKCFhLmlzWFR5cGUpe2lmKCFh Lnh0eXBlJiZFeHQuaXNCb29sZWFuKGEuY2hlY2tlZCkpe3JldHVybiBuZXcgRXh0Lm1lbnUuQ2hl Y2tJdGVtKGEpfXJldHVybiBFeHQuY3JlYXRlKGEsdGhpcy5kZWZhdWx0VHlwZSl9cmV0dXJuIGF9 LGFkZFNlcGFyYXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZChuZXcgRXh0Lm1lbnUuU2Vw YXJhdG9yKCkpfSxhZGRFbGVtZW50OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFkZChuZXcgRXh0 Lm1lbnUuQmFzZUl0ZW0oYSkpfSxhZGRJdGVtOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFkZChh KX0sYWRkTWVudUl0ZW06ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYWRkKHRoaXMuZ2V0TWVudUl0 ZW0oYSkpfSxhZGRUZXh0OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFkZChuZXcgRXh0Lm1lbnUu VGV4dEl0ZW0oYSkpfSxvbkRlc3Ryb3k6ZnVuY3Rpb24oKXtFeHQubWVudS5NZW51LnN1cGVyY2xh c3Mub25EZXN0cm95LmNhbGwodGhpcyk7RXh0Lm1lbnUuTWVudU1nci51bnJlZ2lzdGVyKHRoaXMp O0V4dC5FdmVudE1hbmFnZXIucmVtb3ZlUmVzaXplTGlzdGVuZXIodGhpcy5oaWRlLHRoaXMpO2lm KHRoaXMua2V5TmF2KXt0aGlzLmtleU5hdi5kaXNhYmxlKCl9dmFyIGE9dGhpcy5zY3JvbGxlcjtp ZihhKXtFeHQuZGVzdHJveShhLnRvcFJlcGVhdGVyLGEuYm90dG9tUmVwZWF0ZXIsYS50b3AsYS5i b3R0b20pfX19KTtFeHQucmVnKCJtZW51IixFeHQubWVudS5NZW51KTtFeHQubWVudS5NZW51TmF2 PUV4dC5leHRlbmQoRXh0LktleU5hdixmdW5jdGlvbigpe2Z1bmN0aW9uIGEoZCxjKXtpZighYy50 cnlBY3RpdmF0ZShjLml0ZW1zLmluZGV4T2YoYy5hY3RpdmVJdGVtKS0xLC0xKSl7Yy50cnlBY3Rp dmF0ZShjLml0ZW1zLmxlbmd0aC0xLC0xKX19ZnVuY3Rpb24gYihkLGMpe2lmKCFjLnRyeUFjdGl2 YXRlKGMuaXRlbXMuaW5kZXhPZihjLmFjdGl2ZUl0ZW0pKzEsMSkpe2MudHJ5QWN0aXZhdGUoMCwx KX19cmV0dXJue2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGMpe0V4dC5tZW51Lk1lbnVOYXYuc3VwZXJj bGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYy5lbCk7dGhpcy5zY29wZT10aGlzLm1lbnU9Y30s ZG9SZWxheTpmdW5jdGlvbihnLGQpe3ZhciBjPWcuZ2V0S2V5KCk7aWYodGhpcy5tZW51LmFjdGl2 ZUl0ZW0mJnRoaXMubWVudS5hY3RpdmVJdGVtLmlzRm9ybUZpZWxkJiZjIT1nLlRBQil7cmV0dXJu IGZhbHNlfWlmKCF0aGlzLm1lbnUuYWN0aXZlSXRlbSYmZy5pc05hdktleVByZXNzKCkmJmMhPWcu U1BBQ0UmJmMhPWcuUkVUVVJOKXt0aGlzLm1lbnUudHJ5QWN0aXZhdGUoMCwxKTtyZXR1cm4gZmFs c2V9cmV0dXJuIGQuY2FsbCh0aGlzLnNjb3BlfHx0aGlzLGcsdGhpcy5tZW51KX0sdGFiOmZ1bmN0 aW9uKGQsYyl7ZC5zdG9wRXZlbnQoKTtpZihkLnNoaWZ0S2V5KXthKGQsYyl9ZWxzZXtiKGQsYyl9 fSx1cDphLGRvd246YixyaWdodDpmdW5jdGlvbihkLGMpe2lmKGMuYWN0aXZlSXRlbSl7Yy5hY3Rp dmVJdGVtLmV4cGFuZE1lbnUodHJ1ZSl9fSxsZWZ0OmZ1bmN0aW9uKGQsYyl7Yy5oaWRlKCk7aWYo Yy5wYXJlbnRNZW51JiZjLnBhcmVudE1lbnUuYWN0aXZlSXRlbSl7Yy5wYXJlbnRNZW51LmFjdGl2 ZUl0ZW0uYWN0aXZhdGUoKX19LGVudGVyOmZ1bmN0aW9uKGQsYyl7aWYoYy5hY3RpdmVJdGVtKXtk LnN0b3BQcm9wYWdhdGlvbigpO2MuYWN0aXZlSXRlbS5vbkNsaWNrKGQpO2MuZmlyZUV2ZW50KCJj bGljayIsdGhpcyxjLmFjdGl2ZUl0ZW0pO3JldHVybiB0cnVlfX19fSgpKTtFeHQubWVudS5NZW51 TWdyPWZ1bmN0aW9uKCl7dmFyIGcsZCxjPXt9LGE9ZmFsc2UsbD1uZXcgRGF0ZSgpO2Z1bmN0aW9u IG4oKXtnPXt9O2Q9bmV3IEV4dC51dGlsLk1peGVkQ29sbGVjdGlvbigpO0V4dC5nZXREb2MoKS5h ZGRLZXlMaXN0ZW5lcigyNyxmdW5jdGlvbigpe2lmKGQubGVuZ3RoPjApe2koKX19KX1mdW5jdGlv biBpKCl7aWYoZCYmZC5sZW5ndGg+MCl7dmFyIG89ZC5jbG9uZSgpO28uZWFjaChmdW5jdGlvbihw KXtwLmhpZGUoKX0pfX1mdW5jdGlvbiBlKG8pe2QucmVtb3ZlKG8pO2lmKGQubGVuZ3RoPDEpe0V4 dC5nZXREb2MoKS51bigibW91c2Vkb3duIixtKTthPWZhbHNlfX1mdW5jdGlvbiBrKG8pe3ZhciBw PWQubGFzdCgpO2w9bmV3IERhdGUoKTtkLmFkZChvKTtpZighYSl7RXh0LmdldERvYygpLm9uKCJt b3VzZWRvd24iLG0pO2E9dHJ1ZX1pZihvLnBhcmVudE1lbnUpe28uZ2V0RWwoKS5zZXRaSW5kZXgo cGFyc2VJbnQoby5wYXJlbnRNZW51LmdldEVsKCkuZ2V0U3R5bGUoInotaW5kZXgiKSwxMCkrMyk7 by5wYXJlbnRNZW51LmFjdGl2ZUNoaWxkPW99ZWxzZXtpZihwJiZwLmlzVmlzaWJsZSgpKXtvLmdl dEVsKCkuc2V0WkluZGV4KHBhcnNlSW50KHAuZ2V0RWwoKS5nZXRTdHlsZSgiei1pbmRleCIpLDEw KSszKX19fWZ1bmN0aW9uIGIobyl7aWYoby5hY3RpdmVDaGlsZCl7by5hY3RpdmVDaGlsZC5oaWRl KCl9aWYoby5hdXRvSGlkZVRpbWVyKXtjbGVhclRpbWVvdXQoby5hdXRvSGlkZVRpbWVyKTtkZWxl dGUgby5hdXRvSGlkZVRpbWVyfX1mdW5jdGlvbiBoKG8pe3ZhciBwPW8ucGFyZW50TWVudTtpZigh cCYmIW8uYWxsb3dPdGhlck1lbnVzKXtpKCl9ZWxzZXtpZihwJiZwLmFjdGl2ZUNoaWxkKXtwLmFj dGl2ZUNoaWxkLmhpZGUoKX19fWZ1bmN0aW9uIG0obyl7aWYobC5nZXRFbGFwc2VkKCk+NTAmJmQu bGVuZ3RoPjAmJiFvLmdldFRhcmdldCgiLngtbWVudSIpKXtpKCl9fWZ1bmN0aW9uIGoocCxzKXtp ZihzKXt2YXIgcj1jW3AuZ3JvdXBdO2Zvcih2YXIgcT0wLG89ci5sZW5ndGg7cTxvO3ErKyl7aWYo cltxXSE9cCl7cltxXS5zZXRDaGVja2VkKGZhbHNlKX19fX1yZXR1cm57aGlkZUFsbDpmdW5jdGlv bigpe2koKX0scmVnaXN0ZXI6ZnVuY3Rpb24ocCl7aWYoIWcpe24oKX1nW3AuaWRdPXA7cC5vbigi YmVmb3JlaGlkZSIsYik7cC5vbigiaGlkZSIsZSk7cC5vbigiYmVmb3Jlc2hvdyIsaCk7cC5vbigi c2hvdyIsayk7dmFyIG89cC5ncm91cDtpZihvJiZwLmV2ZW50cy5jaGVja2NoYW5nZSl7aWYoIWNb b10pe2Nbb109W119Y1tvXS5wdXNoKHApO3Aub24oImNoZWNrY2hhbmdlIixvbkNoZWNrKX19LGdl dDpmdW5jdGlvbihvKXtpZih0eXBlb2Ygbz09InN0cmluZyIpe2lmKCFnKXtyZXR1cm4gbnVsbH1y ZXR1cm4gZ1tvXX1lbHNle2lmKG8uZXZlbnRzKXtyZXR1cm4gb31lbHNle2lmKHR5cGVvZiBvLmxl bmd0aD09Im51bWJlciIpe3JldHVybiBuZXcgRXh0Lm1lbnUuTWVudSh7aXRlbXM6b30pfWVsc2V7 cmV0dXJuIEV4dC5jcmVhdGUobywibWVudSIpfX19fSx1bnJlZ2lzdGVyOmZ1bmN0aW9uKHApe2Rl bGV0ZSBnW3AuaWRdO3AudW4oImJlZm9yZWhpZGUiLGIpO3AudW4oImhpZGUiLGUpO3AudW4oImJl Zm9yZXNob3ciLGgpO3AudW4oInNob3ciLGspO3ZhciBvPXAuZ3JvdXA7aWYobyYmcC5ldmVudHMu Y2hlY2tjaGFuZ2Upe2Nbb10ucmVtb3ZlKHApO3AudW4oImNoZWNrY2hhbmdlIixvbkNoZWNrKX19 LHJlZ2lzdGVyQ2hlY2thYmxlOmZ1bmN0aW9uKG8pe3ZhciBwPW8uZ3JvdXA7aWYocCl7aWYoIWNb cF0pe2NbcF09W119Y1twXS5wdXNoKG8pO28ub24oImJlZm9yZWNoZWNrY2hhbmdlIixqKX19LHVu cmVnaXN0ZXJDaGVja2FibGU6ZnVuY3Rpb24obyl7dmFyIHA9by5ncm91cDtpZihwKXtjW3BdLnJl bW92ZShvKTtvLnVuKCJiZWZvcmVjaGVja2NoYW5nZSIsail9fSxnZXRDaGVja2VkSXRlbTpmdW5j dGlvbihxKXt2YXIgcj1jW3FdO2lmKHIpe2Zvcih2YXIgcD0wLG89ci5sZW5ndGg7cDxvO3ArKyl7 aWYocltwXS5jaGVja2VkKXtyZXR1cm4gcltwXX19fXJldHVybiBudWxsfSxzZXRDaGVja2VkSXRl bTpmdW5jdGlvbihxLHMpe3ZhciByPWNbcV07aWYocil7Zm9yKHZhciBwPTAsbz1yLmxlbmd0aDtw PG87cCsrKXtpZihyW3BdLmlkPT1zKXtyW3BdLnNldENoZWNrZWQodHJ1ZSl9fX1yZXR1cm4gbnVs bH19fSgpO0V4dC5tZW51LkJhc2VJdGVtPWZ1bmN0aW9uKGEpe0V4dC5tZW51LkJhc2VJdGVtLnN1 cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuYWRkRXZlbnRzKCJjbGljayIs ImFjdGl2YXRlIiwiZGVhY3RpdmF0ZSIpO2lmKHRoaXMuaGFuZGxlcil7dGhpcy5vbigiY2xpY2si LHRoaXMuaGFuZGxlcix0aGlzLnNjb3BlKX19O0V4dC5leHRlbmQoRXh0Lm1lbnUuQmFzZUl0ZW0s RXh0LkNvbXBvbmVudCx7Y2FuQWN0aXZhdGU6ZmFsc2UsYWN0aXZlQ2xhc3M6IngtbWVudS1pdGVt LWFjdGl2ZSIsaGlkZU9uQ2xpY2s6dHJ1ZSxjbGlja0hpZGVEZWxheToxLGN0eXBlOiJFeHQubWVu dS5CYXNlSXRlbSIsYWN0aW9uTW9kZToiY29udGFpbmVyIixvblJlbmRlcjpmdW5jdGlvbihiLGEp e0V4dC5tZW51LkJhc2VJdGVtLnN1cGVyY2xhc3Mub25SZW5kZXIuYXBwbHkodGhpcyxhcmd1bWVu dHMpO2lmKHRoaXMub3duZXJDdCYmdGhpcy5vd25lckN0IGluc3RhbmNlb2YgRXh0Lm1lbnUuTWVu dSl7dGhpcy5wYXJlbnRNZW51PXRoaXMub3duZXJDdH1lbHNle3RoaXMuY29udGFpbmVyLmFkZENs YXNzKCJ4LW1lbnUtbGlzdC1pdGVtIik7dGhpcy5tb24odGhpcy5lbCwiY2xpY2siLHRoaXMub25D bGljayx0aGlzKTt0aGlzLm1vbih0aGlzLmVsLCJtb3VzZWVudGVyIix0aGlzLmFjdGl2YXRlLHRo aXMpO3RoaXMubW9uKHRoaXMuZWwsIm1vdXNlbGVhdmUiLHRoaXMuZGVhY3RpdmF0ZSx0aGlzKX19 LHNldEhhbmRsZXI6ZnVuY3Rpb24oYixhKXtpZih0aGlzLmhhbmRsZXIpe3RoaXMudW4oImNsaWNr Iix0aGlzLmhhbmRsZXIsdGhpcy5zY29wZSl9dGhpcy5vbigiY2xpY2siLHRoaXMuaGFuZGxlcj1i LHRoaXMuc2NvcGU9YSl9LG9uQ2xpY2s6ZnVuY3Rpb24oYSl7aWYoIXRoaXMuZGlzYWJsZWQmJnRo aXMuZmlyZUV2ZW50KCJjbGljayIsdGhpcyxhKSE9PWZhbHNlJiYodGhpcy5wYXJlbnRNZW51JiZ0 aGlzLnBhcmVudE1lbnUuZmlyZUV2ZW50KCJpdGVtY2xpY2siLHRoaXMsYSkhPT1mYWxzZSkpe3Ro aXMuaGFuZGxlQ2xpY2soYSl9ZWxzZXthLnN0b3BFdmVudCgpfX0sYWN0aXZhdGU6ZnVuY3Rpb24o KXtpZih0aGlzLmRpc2FibGVkKXtyZXR1cm4gZmFsc2V9dmFyIGE9dGhpcy5jb250YWluZXI7YS5h ZGRDbGFzcyh0aGlzLmFjdGl2ZUNsYXNzKTt0aGlzLnJlZ2lvbj1hLmdldFJlZ2lvbigpLmFkanVz dCgyLDIsLTIsLTIpO3RoaXMuZmlyZUV2ZW50KCJhY3RpdmF0ZSIsdGhpcyk7cmV0dXJuIHRydWV9 LGRlYWN0aXZhdGU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5yZW1vdmVDbGFzcyh0aGlzLmFj dGl2ZUNsYXNzKTt0aGlzLmZpcmVFdmVudCgiZGVhY3RpdmF0ZSIsdGhpcyl9LHNob3VsZERlYWN0 aXZhdGU6ZnVuY3Rpb24oYSl7cmV0dXJuICF0aGlzLnJlZ2lvbnx8IXRoaXMucmVnaW9uLmNvbnRh aW5zKGEuZ2V0UG9pbnQoKSl9LGhhbmRsZUNsaWNrOmZ1bmN0aW9uKGEpe2lmKHRoaXMuaGlkZU9u Q2xpY2spe3RoaXMucGFyZW50TWVudS5oaWRlLmRlZmVyKHRoaXMuY2xpY2tIaWRlRGVsYXksdGhp cy5wYXJlbnRNZW51LFt0cnVlXSl9fSxleHBhbmRNZW51OkV4dC5lbXB0eUZuLGhpZGVNZW51OkV4 dC5lbXB0eUZufSk7RXh0LnJlZygibWVudWJhc2VpdGVtIixFeHQubWVudS5CYXNlSXRlbSk7RXh0 Lm1lbnUuVGV4dEl0ZW09ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXthPXt0ZXh0 OmF9fUV4dC5tZW51LlRleHRJdGVtLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEp fTtFeHQuZXh0ZW5kKEV4dC5tZW51LlRleHRJdGVtLEV4dC5tZW51LkJhc2VJdGVtLHtoaWRlT25D bGljazpmYWxzZSxpdGVtQ2xzOiJ4LW1lbnUtdGV4dCIsb25SZW5kZXI6ZnVuY3Rpb24oKXt2YXIg YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7YS5jbGFzc05hbWU9dGhpcy5pdGVtQ2xz O2EuaW5uZXJIVE1MPXRoaXMudGV4dDt0aGlzLmVsPWE7RXh0Lm1lbnUuVGV4dEl0ZW0uc3VwZXJj bGFzcy5vblJlbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7RXh0LnJlZygibWVudXRleHRp dGVtIixFeHQubWVudS5UZXh0SXRlbSk7RXh0Lm1lbnUuU2VwYXJhdG9yPWZ1bmN0aW9uKGEpe0V4 dC5tZW51LlNlcGFyYXRvci5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKX07RXh0 LmV4dGVuZChFeHQubWVudS5TZXBhcmF0b3IsRXh0Lm1lbnUuQmFzZUl0ZW0se2l0ZW1DbHM6Ingt bWVudS1zZXAiLGhpZGVPbkNsaWNrOmZhbHNlLGFjdGl2ZUNsYXNzOiIiLG9uUmVuZGVyOmZ1bmN0 aW9uKGEpe3ZhciBiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtiLmNsYXNzTmFtZT10 aGlzLml0ZW1DbHM7Yi5pbm5lckhUTUw9IiYjMTYwOyI7dGhpcy5lbD1iO2EuYWRkQ2xhc3MoIngt bWVudS1zZXAtbGkiKTtFeHQubWVudS5TZXBhcmF0b3Iuc3VwZXJjbGFzcy5vblJlbmRlci5hcHBs eSh0aGlzLGFyZ3VtZW50cyl9fSk7RXh0LnJlZygibWVudXNlcGFyYXRvciIsRXh0Lm1lbnUuU2Vw YXJhdG9yKTtFeHQubWVudS5JdGVtPWZ1bmN0aW9uKGEpe0V4dC5tZW51Lkl0ZW0uc3VwZXJjbGFz cy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7aWYodGhpcy5tZW51KXt0aGlzLm1lbnU9RXh0Lm1l bnUuTWVudU1nci5nZXQodGhpcy5tZW51KX19O0V4dC5leHRlbmQoRXh0Lm1lbnUuSXRlbSxFeHQu bWVudS5CYXNlSXRlbSx7aXRlbUNsczoieC1tZW51LWl0ZW0iLGNhbkFjdGl2YXRlOnRydWUsc2hv d0RlbGF5OjIwMCxoaWRlRGVsYXk6MjAwLGN0eXBlOiJFeHQubWVudS5JdGVtIixvblJlbmRlcjpm dW5jdGlvbihkLGIpe2lmKCF0aGlzLml0ZW1UcGwpe3RoaXMuaXRlbVRwbD1FeHQubWVudS5JdGVt LnByb3RvdHlwZS5pdGVtVHBsPW5ldyBFeHQuWFRlbXBsYXRlKCc8YSBpZD0ie2lkfSIgY2xhc3M9 IntjbHN9IiBoaWRlZm9jdXM9InRydWUiIHVuc2VsZWN0YWJsZT0ib24iIGhyZWY9IntocmVmfSIn LCc8dHBsIGlmPSJocmVmVGFyZ2V0Ij4nLCcgdGFyZ2V0PSJ7aHJlZlRhcmdldH0iJywiPC90cGw+ IiwiPiIsJzxpbWcgc3JjPSJ7aWNvbn0iIGNsYXNzPSJ4LW1lbnUtaXRlbS1pY29uIHtpY29uQ2xz fSIvPicsJzxzcGFuIGNsYXNzPSJ4LW1lbnUtaXRlbS10ZXh0Ij57dGV4dH08L3NwYW4+JywiPC9h PiIpfXZhciBjPXRoaXMuZ2V0VGVtcGxhdGVBcmdzKCk7dGhpcy5lbD1iP3RoaXMuaXRlbVRwbC5p bnNlcnRCZWZvcmUoYixjLHRydWUpOnRoaXMuaXRlbVRwbC5hcHBlbmQoZCxjLHRydWUpO3RoaXMu aWNvbkVsPXRoaXMuZWwuY2hpbGQoImltZy54LW1lbnUtaXRlbS1pY29uIik7dGhpcy50ZXh0RWw9 dGhpcy5lbC5jaGlsZCgiLngtbWVudS1pdGVtLXRleHQiKTtFeHQubWVudS5JdGVtLnN1cGVyY2xh c3Mub25SZW5kZXIuY2FsbCh0aGlzLGQsYil9LGdldFRlbXBsYXRlQXJnczpmdW5jdGlvbigpe3Jl dHVybntpZDp0aGlzLmlkLGNsczp0aGlzLml0ZW1DbHMrKHRoaXMubWVudT8iIHgtbWVudS1pdGVt LWFycm93IjoiIikrKHRoaXMuY2xzPyIgIit0aGlzLmNsczoiIiksaHJlZjp0aGlzLmhyZWZ8fCIj IixocmVmVGFyZ2V0OnRoaXMuaHJlZlRhcmdldCxpY29uOnRoaXMuaWNvbnx8RXh0LkJMQU5LX0lN QUdFX1VSTCxpY29uQ2xzOnRoaXMuaWNvbkNsc3x8IiIsdGV4dDp0aGlzLml0ZW1UZXh0fHx0aGlz LnRleHR8fCImIzE2MDsifX0sc2V0VGV4dDpmdW5jdGlvbihhKXt0aGlzLnRleHQ9YXx8IiYjMTYw OyI7aWYodGhpcy5yZW5kZXJlZCl7dGhpcy50ZXh0RWwudXBkYXRlKHRoaXMudGV4dCk7dGhpcy5w YXJlbnRNZW51LmxheW91dC5kb0F1dG9TaXplKCl9fSxzZXRJY29uQ2xhc3M6ZnVuY3Rpb24oYSl7 dmFyIGI9dGhpcy5pY29uQ2xzO3RoaXMuaWNvbkNscz1hO2lmKHRoaXMucmVuZGVyZWQpe3RoaXMu aWNvbkVsLnJlcGxhY2VDbGFzcyhiLHRoaXMuaWNvbkNscyl9fSxiZWZvcmVEZXN0cm95OmZ1bmN0 aW9uKCl7aWYodGhpcy5tZW51KXt0aGlzLm1lbnUuZGVzdHJveSgpfUV4dC5tZW51Lkl0ZW0uc3Vw ZXJjbGFzcy5iZWZvcmVEZXN0cm95LmNhbGwodGhpcyl9LGhhbmRsZUNsaWNrOmZ1bmN0aW9uKGEp e2lmKCF0aGlzLmhyZWYpe2Euc3RvcEV2ZW50KCl9RXh0Lm1lbnUuSXRlbS5zdXBlcmNsYXNzLmhh bmRsZUNsaWNrLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sYWN0aXZhdGU6ZnVuY3Rpb24oYSl7aWYo RXh0Lm1lbnUuSXRlbS5zdXBlcmNsYXNzLmFjdGl2YXRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7 dGhpcy5mb2N1cygpO2lmKGEpe3RoaXMuZXhwYW5kTWVudSgpfX1yZXR1cm4gdHJ1ZX0sc2hvdWxk RGVhY3RpdmF0ZTpmdW5jdGlvbihhKXtpZihFeHQubWVudS5JdGVtLnN1cGVyY2xhc3Muc2hvdWxk RGVhY3RpdmF0ZS5jYWxsKHRoaXMsYSkpe2lmKHRoaXMubWVudSYmdGhpcy5tZW51LmlzVmlzaWJs ZSgpKXtyZXR1cm4gIXRoaXMubWVudS5nZXRFbCgpLmdldFJlZ2lvbigpLmNvbnRhaW5zKGEuZ2V0 UG9pbnQoKSl9cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfSxkZWFjdGl2YXRlOmZ1bmN0aW9uKCl7 RXh0Lm1lbnUuSXRlbS5zdXBlcmNsYXNzLmRlYWN0aXZhdGUuYXBwbHkodGhpcyxhcmd1bWVudHMp O3RoaXMuaGlkZU1lbnUoKX0sZXhwYW5kTWVudTpmdW5jdGlvbihhKXtpZighdGhpcy5kaXNhYmxl ZCYmdGhpcy5tZW51KXtjbGVhclRpbWVvdXQodGhpcy5oaWRlVGltZXIpO2RlbGV0ZSB0aGlzLmhp ZGVUaW1lcjtpZighdGhpcy5tZW51LmlzVmlzaWJsZSgpJiYhdGhpcy5zaG93VGltZXIpe3RoaXMu c2hvd1RpbWVyPXRoaXMuZGVmZXJFeHBhbmQuZGVmZXIodGhpcy5zaG93RGVsYXksdGhpcyxbYV0p fWVsc2V7aWYodGhpcy5tZW51LmlzVmlzaWJsZSgpJiZhKXt0aGlzLm1lbnUudHJ5QWN0aXZhdGUo MCwxKX19fX0sZGVmZXJFeHBhbmQ6ZnVuY3Rpb24oYSl7ZGVsZXRlIHRoaXMuc2hvd1RpbWVyO3Ro aXMubWVudS5zaG93KHRoaXMuY29udGFpbmVyLHRoaXMucGFyZW50TWVudS5zdWJNZW51QWxpZ258 fCJ0bC10cj8iLHRoaXMucGFyZW50TWVudSk7aWYoYSl7dGhpcy5tZW51LnRyeUFjdGl2YXRlKDAs MSl9fSxoaWRlTWVudTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnNob3dUaW1lcik7ZGVs ZXRlIHRoaXMuc2hvd1RpbWVyO2lmKCF0aGlzLmhpZGVUaW1lciYmdGhpcy5tZW51JiZ0aGlzLm1l bnUuaXNWaXNpYmxlKCkpe3RoaXMuaGlkZVRpbWVyPXRoaXMuZGVmZXJIaWRlLmRlZmVyKHRoaXMu aGlkZURlbGF5LHRoaXMpfX0sZGVmZXJIaWRlOmZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuaGlkZVRp bWVyO2lmKHRoaXMubWVudS5vdmVyKXt0aGlzLnBhcmVudE1lbnUuc2V0QWN0aXZlSXRlbSh0aGlz LGZhbHNlKX1lbHNle3RoaXMubWVudS5oaWRlKCl9fX0pO0V4dC5yZWcoIm1lbnVpdGVtIixFeHQu bWVudS5JdGVtKTtFeHQubWVudS5DaGVja0l0ZW09ZnVuY3Rpb24oYSl7RXh0Lm1lbnUuQ2hlY2tJ dGVtLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuYWRkRXZlbnRzKCJi ZWZvcmVjaGVja2NoYW5nZSIsImNoZWNrY2hhbmdlIik7aWYodGhpcy5jaGVja0hhbmRsZXIpe3Ro aXMub24oImNoZWNrY2hhbmdlIix0aGlzLmNoZWNrSGFuZGxlcix0aGlzLnNjb3BlKX1FeHQubWVu dS5NZW51TWdyLnJlZ2lzdGVyQ2hlY2thYmxlKHRoaXMpfTtFeHQuZXh0ZW5kKEV4dC5tZW51LkNo ZWNrSXRlbSxFeHQubWVudS5JdGVtLHtpdGVtQ2xzOiJ4LW1lbnUtaXRlbSB4LW1lbnUtY2hlY2st aXRlbSIsZ3JvdXBDbGFzczoieC1tZW51LWdyb3VwLWl0ZW0iLGNoZWNrZWQ6ZmFsc2UsY3R5cGU6 IkV4dC5tZW51LkNoZWNrSXRlbSIsb25SZW5kZXI6ZnVuY3Rpb24oYSl7RXh0Lm1lbnUuQ2hlY2tJ dGVtLnN1cGVyY2xhc3Mub25SZW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHRoaXMuZ3Jv dXApe3RoaXMuZWwuYWRkQ2xhc3ModGhpcy5ncm91cENsYXNzKX1pZih0aGlzLmNoZWNrZWQpe3Ro aXMuY2hlY2tlZD1mYWxzZTt0aGlzLnNldENoZWNrZWQodHJ1ZSx0cnVlKX19LGRlc3Ryb3k6ZnVu Y3Rpb24oKXtFeHQubWVudS5NZW51TWdyLnVucmVnaXN0ZXJDaGVja2FibGUodGhpcyk7RXh0Lm1l bnUuQ2hlY2tJdGVtLnN1cGVyY2xhc3MuZGVzdHJveS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHNl dENoZWNrZWQ6ZnVuY3Rpb24oYixhKXtpZih0aGlzLmNoZWNrZWQhPWImJnRoaXMuZmlyZUV2ZW50 KCJiZWZvcmVjaGVja2NoYW5nZSIsdGhpcyxiKSE9PWZhbHNlKXtpZih0aGlzLmNvbnRhaW5lcil7 dGhpcy5jb250YWluZXJbYj8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKCJ4LW1lbnUtaXRlbS1j aGVja2VkIil9dGhpcy5jaGVja2VkPWI7aWYoYSE9PXRydWUpe3RoaXMuZmlyZUV2ZW50KCJjaGVj a2NoYW5nZSIsdGhpcyxiKX19fSxoYW5kbGVDbGljazpmdW5jdGlvbihhKXtpZighdGhpcy5kaXNh YmxlZCYmISh0aGlzLmNoZWNrZWQmJnRoaXMuZ3JvdXApKXt0aGlzLnNldENoZWNrZWQoIXRoaXMu Y2hlY2tlZCl9RXh0Lm1lbnUuQ2hlY2tJdGVtLnN1cGVyY2xhc3MuaGFuZGxlQ2xpY2suYXBwbHko dGhpcyxhcmd1bWVudHMpfX0pO0V4dC5yZWcoIm1lbnVjaGVja2l0ZW0iLEV4dC5tZW51LkNoZWNr SXRlbSk7RXh0Lm1lbnUuRGF0ZU1lbnU9RXh0LmV4dGVuZChFeHQubWVudS5NZW51LHtlbmFibGVT Y3JvbGxpbmc6ZmFsc2UsaGlkZU9uQ2xpY2s6dHJ1ZSxjbHM6IngtZGF0ZS1tZW51Iixpbml0Q29t cG9uZW50OmZ1bmN0aW9uKCl7dGhpcy5vbigiYmVmb3Jlc2hvdyIsdGhpcy5vbkJlZm9yZVNob3cs dGhpcyk7aWYodGhpcy5zdHJpY3Q9KEV4dC5pc0lFNyYmRXh0LmlzU3RyaWN0KSl7dGhpcy5vbigi c2hvdyIsdGhpcy5vblNob3csdGhpcyx7c2luZ2xlOnRydWUsZGVsYXk6MjB9KX1FeHQuYXBwbHko dGhpcyx7cGxhaW46dHJ1ZSxzaG93U2VwYXJhdG9yOmZhbHNlLGl0ZW1zOnRoaXMucGlja2VyPW5l dyBFeHQuRGF0ZVBpY2tlcihFeHQuYXBwbHkoe2ludGVybmFsUmVuZGVyOnRoaXMuc3RyaWN0fHwh RXh0LmlzSUUsY3RDbHM6IngtbWVudS1kYXRlLWl0ZW0ifSx0aGlzLmluaXRpYWxDb25maWcpKX0p O3RoaXMucGlja2VyLnB1cmdlTGlzdGVuZXJzKCk7RXh0Lm1lbnUuRGF0ZU1lbnUuc3VwZXJjbGFz cy5pbml0Q29tcG9uZW50LmNhbGwodGhpcyk7dGhpcy5yZWxheUV2ZW50cyh0aGlzLnBpY2tlcixb InNlbGVjdCJdKTt0aGlzLm9uKCJzZWxlY3QiLHRoaXMubWVudUhpZGUsdGhpcyk7aWYodGhpcy5o YW5kbGVyKXt0aGlzLm9uKCJzZWxlY3QiLHRoaXMuaGFuZGxlcix0aGlzLnNjb3BlfHx0aGlzKX19 LG1lbnVIaWRlOmZ1bmN0aW9uKCl7aWYodGhpcy5oaWRlT25DbGljayl7dGhpcy5oaWRlKHRydWUp fX0sb25CZWZvcmVTaG93OmZ1bmN0aW9uKCl7aWYodGhpcy5waWNrZXIpe3RoaXMucGlja2VyLmhp ZGVNb250aFBpY2tlcih0cnVlKX19LG9uU2hvdzpmdW5jdGlvbigpe3ZhciBhPXRoaXMucGlja2Vy LmdldEVsKCk7YS5zZXRXaWR0aChhLmdldFdpZHRoKCkpfX0pO0V4dC5yZWcoImRhdGVtZW51IixF eHQubWVudS5EYXRlTWVudSk7RXh0Lm1lbnUuQ29sb3JNZW51PUV4dC5leHRlbmQoRXh0Lm1lbnUu TWVudSx7ZW5hYmxlU2Nyb2xsaW5nOmZhbHNlLGhpZGVPbkNsaWNrOnRydWUsaW5pdENvbXBvbmVu dDpmdW5jdGlvbigpe0V4dC5hcHBseSh0aGlzLHtwbGFpbjp0cnVlLHNob3dTZXBhcmF0b3I6ZmFs c2UsaXRlbXM6dGhpcy5wYWxldHRlPW5ldyBFeHQuQ29sb3JQYWxldHRlKHRoaXMuaW5pdGlhbENv bmZpZyl9KTt0aGlzLnBhbGV0dGUucHVyZ2VMaXN0ZW5lcnMoKTtFeHQubWVudS5Db2xvck1lbnUu c3VwZXJjbGFzcy5pbml0Q29tcG9uZW50LmNhbGwodGhpcyk7dGhpcy5yZWxheUV2ZW50cyh0aGlz LnBhbGV0dGUsWyJzZWxlY3QiXSk7dGhpcy5vbigic2VsZWN0Iix0aGlzLm1lbnVIaWRlLHRoaXMp O2lmKHRoaXMuaGFuZGxlcil7dGhpcy5vbigic2VsZWN0Iix0aGlzLmhhbmRsZXIsdGhpcy5zY29w ZXx8dGhpcyl9fSxtZW51SGlkZTpmdW5jdGlvbigpe2lmKHRoaXMuaGlkZU9uQ2xpY2spe3RoaXMu aGlkZSh0cnVlKX19fSk7RXh0LnJlZygiY29sb3JtZW51IixFeHQubWVudS5Db2xvck1lbnUpO0V4 dC5mb3JtLkZpZWxkPUV4dC5leHRlbmQoRXh0LkJveENvbXBvbmVudCx7aW52YWxpZENsYXNzOiJ4 LWZvcm0taW52YWxpZCIsaW52YWxpZFRleHQ6IlRoZSB2YWx1ZSBpbiB0aGlzIGZpZWxkIGlzIGlu dmFsaWQiLGZvY3VzQ2xhc3M6IngtZm9ybS1mb2N1cyIsdmFsaWRhdGlvbkV2ZW50OiJrZXl1cCIs dmFsaWRhdGVPbkJsdXI6dHJ1ZSx2YWxpZGF0aW9uRGVsYXk6MjUwLGRlZmF1bHRBdXRvQ3JlYXRl Ont0YWc6ImlucHV0Iix0eXBlOiJ0ZXh0IixzaXplOiIyMCIsYXV0b2NvbXBsZXRlOiJvZmYifSxm aWVsZENsYXNzOiJ4LWZvcm0tZmllbGQiLG1zZ1RhcmdldDoicXRpcCIsbXNnRng6Im5vcm1hbCIs cmVhZE9ubHk6ZmFsc2UsZGlzYWJsZWQ6ZmFsc2UsaXNGb3JtRmllbGQ6dHJ1ZSxoYXNGb2N1czpm YWxzZSxpbml0Q29tcG9uZW50OmZ1bmN0aW9uKCl7RXh0LmZvcm0uRmllbGQuc3VwZXJjbGFzcy5p bml0Q29tcG9uZW50LmNhbGwodGhpcyk7dGhpcy5hZGRFdmVudHMoImZvY3VzIiwiYmx1ciIsInNw ZWNpYWxrZXkiLCJjaGFuZ2UiLCJpbnZhbGlkIiwidmFsaWQiKX0sZ2V0TmFtZTpmdW5jdGlvbigp e3JldHVybiB0aGlzLnJlbmRlcmVkJiZ0aGlzLmVsLmRvbS5uYW1lP3RoaXMuZWwuZG9tLm5hbWU6 dGhpcy5uYW1lfHx0aGlzLmlkfHwiIn0sb25SZW5kZXI6ZnVuY3Rpb24oYyxhKXtpZighdGhpcy5l bCl7dmFyIGI9dGhpcy5nZXRBdXRvQ3JlYXRlKCk7aWYoIWIubmFtZSl7Yi5uYW1lPXRoaXMubmFt ZXx8dGhpcy5pZH1pZih0aGlzLmlucHV0VHlwZSl7Yi50eXBlPXRoaXMuaW5wdXRUeXBlfXRoaXMu YXV0b0VsPWJ9RXh0LmZvcm0uRmllbGQuc3VwZXJjbGFzcy5vblJlbmRlci5jYWxsKHRoaXMsYyxh KTt2YXIgZD10aGlzLmVsLmRvbS50eXBlO2lmKGQpe2lmKGQ9PSJwYXNzd29yZCIpe2Q9InRleHQi fXRoaXMuZWwuYWRkQ2xhc3MoIngtZm9ybS0iK2QpfWlmKHRoaXMucmVhZE9ubHkpe3RoaXMuZWwu ZG9tLnJlYWRPbmx5PXRydWV9aWYodGhpcy50YWJJbmRleCE9PXVuZGVmaW5lZCl7dGhpcy5lbC5k b20uc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsdGhpcy50YWJJbmRleCl9dGhpcy5lbC5hZGRDbGFz cyhbdGhpcy5maWVsZENsYXNzLHRoaXMuY2xzXSl9LGdldEl0ZW1DdDpmdW5jdGlvbigpe3JldHVy biB0aGlzLmVsLnVwKCIueC1mb3JtLWl0ZW0iLDQpfSxpbml0VmFsdWU6ZnVuY3Rpb24oKXtpZih0 aGlzLnZhbHVlIT09dW5kZWZpbmVkKXt0aGlzLnNldFZhbHVlKHRoaXMudmFsdWUpfWVsc2V7aWYo IUV4dC5pc0VtcHR5KHRoaXMuZWwuZG9tLnZhbHVlKSYmdGhpcy5lbC5kb20udmFsdWUhPXRoaXMu ZW1wdHlUZXh0KXt0aGlzLnNldFZhbHVlKHRoaXMuZWwuZG9tLnZhbHVlKX19dGhpcy5vcmlnaW5h bFZhbHVlPXRoaXMuZ2V0VmFsdWUoKX0saXNEaXJ0eTpmdW5jdGlvbigpe2lmKHRoaXMuZGlzYWJs ZWR8fCF0aGlzLnJlbmRlcmVkKXtyZXR1cm4gZmFsc2V9cmV0dXJuIFN0cmluZyh0aGlzLmdldFZh bHVlKCkpIT09U3RyaW5nKHRoaXMub3JpZ2luYWxWYWx1ZSl9LGFmdGVyUmVuZGVyOmZ1bmN0aW9u KCl7RXh0LmZvcm0uRmllbGQuc3VwZXJjbGFzcy5hZnRlclJlbmRlci5jYWxsKHRoaXMpO3RoaXMu aW5pdEV2ZW50cygpO3RoaXMuaW5pdFZhbHVlKCl9LGZpcmVLZXk6ZnVuY3Rpb24oYSl7aWYoYS5p c1NwZWNpYWxLZXkoKSl7dGhpcy5maXJlRXZlbnQoInNwZWNpYWxrZXkiLHRoaXMsYSl9fSxyZXNl dDpmdW5jdGlvbigpe3RoaXMuc2V0VmFsdWUodGhpcy5vcmlnaW5hbFZhbHVlKTt0aGlzLmNsZWFy SW52YWxpZCgpfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy5tb24odGhpcy5lbCxFeHQuRXZl bnRNYW5hZ2VyLnVzZUtleWRvd24/ImtleWRvd24iOiJrZXlwcmVzcyIsdGhpcy5maXJlS2V5LHRo aXMpO3RoaXMubW9uKHRoaXMuZWwsImZvY3VzIix0aGlzLm9uRm9jdXMsdGhpcyk7dmFyIGE9dGhp cy5pbkVkaXRvciYmRXh0LmlzV2luZG93cyYmRXh0LmlzR2Vja28/e2J1ZmZlcjoxMH06bnVsbDt0 aGlzLm1vbih0aGlzLmVsLCJibHVyIix0aGlzLm9uQmx1cix0aGlzLGEpfSxvbkZvY3VzOmZ1bmN0 aW9uKCl7aWYodGhpcy5mb2N1c0NsYXNzKXt0aGlzLmVsLmFkZENsYXNzKHRoaXMuZm9jdXNDbGFz cyl9aWYoIXRoaXMuaGFzRm9jdXMpe3RoaXMuaGFzRm9jdXM9dHJ1ZTt0aGlzLnN0YXJ0VmFsdWU9 dGhpcy5nZXRWYWx1ZSgpO3RoaXMuZmlyZUV2ZW50KCJmb2N1cyIsdGhpcyl9fSxiZWZvcmVCbHVy OkV4dC5lbXB0eUZuLG9uQmx1cjpmdW5jdGlvbigpe3RoaXMuYmVmb3JlQmx1cigpO2lmKHRoaXMu Zm9jdXNDbGFzcyl7dGhpcy5lbC5yZW1vdmVDbGFzcyh0aGlzLmZvY3VzQ2xhc3MpfXRoaXMuaGFz Rm9jdXM9ZmFsc2U7aWYodGhpcy52YWxpZGF0aW9uRXZlbnQhPT1mYWxzZSYmdGhpcy52YWxpZGF0 ZU9uQmx1ciYmdGhpcy52YWxpZGF0aW9uRXZlbnQhPSJibHVyIil7dGhpcy52YWxpZGF0ZSgpfXZh ciBhPXRoaXMuZ2V0VmFsdWUoKTtpZihTdHJpbmcoYSkhPT1TdHJpbmcodGhpcy5zdGFydFZhbHVl KSl7dGhpcy5maXJlRXZlbnQoImNoYW5nZSIsdGhpcyxhLHRoaXMuc3RhcnRWYWx1ZSl9dGhpcy5m aXJlRXZlbnQoImJsdXIiLHRoaXMpfSxpc1ZhbGlkOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZGlzYWJs ZWQpe3JldHVybiB0cnVlfXZhciBjPXRoaXMucHJldmVudE1hcms7dGhpcy5wcmV2ZW50TWFyaz1h PT09dHJ1ZTt2YXIgYj10aGlzLnZhbGlkYXRlVmFsdWUodGhpcy5wcm9jZXNzVmFsdWUodGhpcy5n ZXRSYXdWYWx1ZSgpKSk7dGhpcy5wcmV2ZW50TWFyaz1jO3JldHVybiBifSx2YWxpZGF0ZTpmdW5j dGlvbigpe2lmKHRoaXMuZGlzYWJsZWR8fHRoaXMudmFsaWRhdGVWYWx1ZSh0aGlzLnByb2Nlc3NW YWx1ZSh0aGlzLmdldFJhd1ZhbHVlKCkpKSl7dGhpcy5jbGVhckludmFsaWQoKTtyZXR1cm4gdHJ1 ZX1yZXR1cm4gZmFsc2V9LHByb2Nlc3NWYWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gYX0sdmFsaWRh dGVWYWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdHJ1ZX0sbWFya0ludmFsaWQ6ZnVuY3Rpb24oYyl7 aWYoIXRoaXMucmVuZGVyZWR8fHRoaXMucHJldmVudE1hcmspe3JldHVybn1jPWN8fHRoaXMuaW52 YWxpZFRleHQ7dmFyIGE9dGhpcy5nZXRNZXNzYWdlSGFuZGxlcigpO2lmKGEpe2EubWFyayh0aGlz LGMpfWVsc2V7aWYodGhpcy5tc2dUYXJnZXQpe3RoaXMuZWwuYWRkQ2xhc3ModGhpcy5pbnZhbGlk Q2xhc3MpO3ZhciBiPUV4dC5nZXREb20odGhpcy5tc2dUYXJnZXQpO2lmKGIpe2IuaW5uZXJIVE1M PWM7Yi5zdHlsZS5kaXNwbGF5PXRoaXMubXNnRGlzcGxheX19fXRoaXMuZmlyZUV2ZW50KCJpbnZh bGlkIix0aGlzLGMpfSxjbGVhckludmFsaWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5yZW5kZXJlZHx8 dGhpcy5wcmV2ZW50TWFyayl7cmV0dXJufXRoaXMuZWwucmVtb3ZlQ2xhc3ModGhpcy5pbnZhbGlk Q2xhc3MpO3ZhciBhPXRoaXMuZ2V0TWVzc2FnZUhhbmRsZXIoKTtpZihhKXthLmNsZWFyKHRoaXMp fWVsc2V7aWYodGhpcy5tc2dUYXJnZXQpe3RoaXMuZWwucmVtb3ZlQ2xhc3ModGhpcy5pbnZhbGlk Q2xhc3MpO3ZhciBiPUV4dC5nZXREb20odGhpcy5tc2dUYXJnZXQpO2lmKGIpe2IuaW5uZXJIVE1M PSIiO2Iuc3R5bGUuZGlzcGxheT0ibm9uZSJ9fX10aGlzLmZpcmVFdmVudCgidmFsaWQiLHRoaXMp fSxnZXRNZXNzYWdlSGFuZGxlcjpmdW5jdGlvbigpe3JldHVybiBFeHQuZm9ybS5NZXNzYWdlVGFy Z2V0c1t0aGlzLm1zZ1RhcmdldF19LGdldEVycm9yQ3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5l bC5maW5kUGFyZW50KCIueC1mb3JtLWVsZW1lbnQiLDUsdHJ1ZSl8fHRoaXMuZWwuZmluZFBhcmVu dCgiLngtZm9ybS1maWVsZC13cmFwIiw1LHRydWUpfSxhbGlnbkVycm9ySWNvbjpmdW5jdGlvbigp e3RoaXMuZXJyb3JJY29uLmFsaWduVG8odGhpcy5lbCwidGwtdHIiLFsyLDBdKX0sZ2V0UmF3VmFs dWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlbmRlcmVkP3RoaXMuZWwuZ2V0VmFsdWUoKTpFeHQu dmFsdWUodGhpcy52YWx1ZSwiIik7aWYoYT09PXRoaXMuZW1wdHlUZXh0KXthPSIifXJldHVybiBh fSxnZXRWYWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnJlbmRlcmVkKXtyZXR1cm4gdGhpcy52YWx1 ZX12YXIgYT10aGlzLmVsLmdldFZhbHVlKCk7aWYoYT09PXRoaXMuZW1wdHlUZXh0fHxhPT09dW5k ZWZpbmVkKXthPSIifXJldHVybiBhfSxzZXRSYXdWYWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4odGhp cy5lbC5kb20udmFsdWU9KEV4dC5pc0VtcHR5KGEpPyIiOmEpKX0sc2V0VmFsdWU6ZnVuY3Rpb24o YSl7dGhpcy52YWx1ZT1hO2lmKHRoaXMucmVuZGVyZWQpe3RoaXMuZWwuZG9tLnZhbHVlPShFeHQu aXNFbXB0eShhKT8iIjphKTt0aGlzLnZhbGlkYXRlKCl9cmV0dXJuIHRoaXN9LGFwcGVuZDpmdW5j dGlvbihhKXt0aGlzLnNldFZhbHVlKFt0aGlzLmdldFZhbHVlKCksYV0uam9pbigiIikpfSxhZGp1 c3RTaXplOmZ1bmN0aW9uKGEsZCl7dmFyIGM9RXh0LmZvcm0uRmllbGQuc3VwZXJjbGFzcy5hZGp1 c3RTaXplLmNhbGwodGhpcyxhLGQpO2Mud2lkdGg9dGhpcy5hZGp1c3RXaWR0aCh0aGlzLmVsLmRv bS50YWdOYW1lLGMud2lkdGgpO2lmKHRoaXMub2Zmc2V0Q3Qpe3ZhciBiPXRoaXMuZ2V0SXRlbUN0 KCk7Yy53aWR0aC09Yi5nZXRGcmFtZVdpZHRoKCJsciIpO2MuaGVpZ2h0LT1iLmdldEZyYW1lV2lk dGgoInRiIil9cmV0dXJuIGN9LGFkanVzdFdpZHRoOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGI9 PSJudW1iZXIiJiYoRXh0LmlzSUUmJihFeHQuaXNJRTZ8fCFFeHQuaXNTdHJpY3QpKSYmL2lucHV0 fHRleHRhcmVhL2kudGVzdChhKSYmIXRoaXMuaW5FZGl0b3Ipe3JldHVybiBiLTN9cmV0dXJuIGJ9 fSk7RXh0LmZvcm0uTWVzc2FnZVRhcmdldHM9e3F0aXA6e21hcms6ZnVuY3Rpb24oYSxiKXthLmVs LmFkZENsYXNzKGEuaW52YWxpZENsYXNzKTthLmVsLmRvbS5xdGlwPWI7YS5lbC5kb20ucWNsYXNz PSJ4LWZvcm0taW52YWxpZC10aXAiO2lmKEV4dC5RdWlja1RpcHMpe0V4dC5RdWlja1RpcHMuZW5h YmxlKCl9fSxjbGVhcjpmdW5jdGlvbihhKXthLmVsLnJlbW92ZUNsYXNzKGEuaW52YWxpZENsYXNz KTthLmVsLmRvbS5xdGlwPSIifX0sdGl0bGU6e21hcms6ZnVuY3Rpb24oYSxiKXthLmVsLmFkZENs YXNzKGEuaW52YWxpZENsYXNzKTthLmVsLmRvbS50aXRsZT1ifSxjbGVhcjpmdW5jdGlvbihhKXth LmVsLmRvbS50aXRsZT0iIn19LHVuZGVyOnttYXJrOmZ1bmN0aW9uKGIsYyl7Yi5lbC5hZGRDbGFz cyhiLmludmFsaWRDbGFzcyk7aWYoIWIuZXJyb3JFbCl7dmFyIGE9Yi5nZXRFcnJvckN0KCk7aWYo IWEpe2IuZWwuZG9tLnRpdGxlPWM7cmV0dXJufWIuZXJyb3JFbD1hLmNyZWF0ZUNoaWxkKHtjbHM6 IngtZm9ybS1pbnZhbGlkLW1zZyJ9KTtiLmVycm9yRWwuc2V0V2lkdGgoYS5nZXRXaWR0aCh0cnVl KS0yMCl9Yi5lcnJvckVsLnVwZGF0ZShjKTtFeHQuZm9ybS5GaWVsZC5tc2dGeFtiLm1zZ0Z4XS5z aG93KGIuZXJyb3JFbCxiKX0sY2xlYXI6ZnVuY3Rpb24oYSl7YS5lbC5yZW1vdmVDbGFzcyhhLmlu dmFsaWRDbGFzcyk7aWYoYS5lcnJvckVsKXtFeHQuZm9ybS5GaWVsZC5tc2dGeFthLm1zZ0Z4XS5o aWRlKGEuZXJyb3JFbCxhKX1lbHNle2EuZWwuZG9tLnRpdGxlPSIifX19LHNpZGU6e21hcms6ZnVu Y3Rpb24oYixjKXtiLmVsLmFkZENsYXNzKGIuaW52YWxpZENsYXNzKTtpZighYi5lcnJvckljb24p e3ZhciBhPWIuZ2V0RXJyb3JDdCgpO2lmKCFhKXtiLmVsLmRvbS50aXRsZT1jO3JldHVybn1iLmVy cm9ySWNvbj1hLmNyZWF0ZUNoaWxkKHtjbHM6IngtZm9ybS1pbnZhbGlkLWljb24ifSl9Yi5hbGln bkVycm9ySWNvbigpO2IuZXJyb3JJY29uLmRvbS5xdGlwPWM7Yi5lcnJvckljb24uZG9tLnFjbGFz cz0ieC1mb3JtLWludmFsaWQtdGlwIjtiLmVycm9ySWNvbi5zaG93KCk7Yi5vbigicmVzaXplIixi LmFsaWduRXJyb3JJY29uLGIpfSxjbGVhcjpmdW5jdGlvbihhKXthLmVsLnJlbW92ZUNsYXNzKGEu aW52YWxpZENsYXNzKTtpZihhLmVycm9ySWNvbil7YS5lcnJvckljb24uZG9tLnF0aXA9IiI7YS5l cnJvckljb24uaGlkZSgpO2EudW4oInJlc2l6ZSIsYS5hbGlnbkVycm9ySWNvbixhKX1lbHNle2Eu ZWwuZG9tLnRpdGxlPSIifX19fTtFeHQuZm9ybS5GaWVsZC5tc2dGeD17bm9ybWFsOntzaG93OmZ1 bmN0aW9uKGEsYil7YS5zZXREaXNwbGF5ZWQoImJsb2NrIil9LGhpZGU6ZnVuY3Rpb24oYSxiKXth LnNldERpc3BsYXllZChmYWxzZSkudXBkYXRlKCIiKX19LHNsaWRlOntzaG93OmZ1bmN0aW9uKGEs Yil7YS5zbGlkZUluKCJ0Iix7c3RvcEZ4OnRydWV9KX0saGlkZTpmdW5jdGlvbihhLGIpe2Euc2xp ZGVPdXQoInQiLHtzdG9wRng6dHJ1ZSx1c2VEaXNwbGF5OnRydWV9KX19LHNsaWRlUmlnaHQ6e3No b3c6ZnVuY3Rpb24oYSxiKXthLmZpeERpc3BsYXkoKTthLmFsaWduVG8oYi5lbCwidGwtdHIiKTth LnNsaWRlSW4oImwiLHtzdG9wRng6dHJ1ZX0pfSxoaWRlOmZ1bmN0aW9uKGEsYil7YS5zbGlkZU91 dCgibCIse3N0b3BGeDp0cnVlLHVzZURpc3BsYXk6dHJ1ZX0pfX19O0V4dC5yZWcoImZpZWxkIixF eHQuZm9ybS5GaWVsZCk7RXh0LmZvcm0uVGV4dEZpZWxkPUV4dC5leHRlbmQoRXh0LmZvcm0uRmll bGQse2dyb3c6ZmFsc2UsZ3Jvd01pbjozMCxncm93TWF4OjgwMCx2dHlwZTpudWxsLG1hc2tSZTpu dWxsLGRpc2FibGVLZXlGaWx0ZXI6ZmFsc2UsYWxsb3dCbGFuazp0cnVlLG1pbkxlbmd0aDowLG1h eExlbmd0aDpOdW1iZXIuTUFYX1ZBTFVFLG1pbkxlbmd0aFRleHQ6IlRoZSBtaW5pbXVtIGxlbmd0 aCBmb3IgdGhpcyBmaWVsZCBpcyB7MH0iLG1heExlbmd0aFRleHQ6IlRoZSBtYXhpbXVtIGxlbmd0 aCBmb3IgdGhpcyBmaWVsZCBpcyB7MH0iLHNlbGVjdE9uRm9jdXM6ZmFsc2UsYmxhbmtUZXh0OiJU aGlzIGZpZWxkIGlzIHJlcXVpcmVkIix2YWxpZGF0b3I6bnVsbCxyZWdleDpudWxsLHJlZ2V4VGV4 dDoiIixlbXB0eVRleHQ6bnVsbCxlbXB0eUNsYXNzOiJ4LWZvcm0tZW1wdHktZmllbGQiLGluaXRD b21wb25lbnQ6ZnVuY3Rpb24oKXtFeHQuZm9ybS5UZXh0RmllbGQuc3VwZXJjbGFzcy5pbml0Q29t cG9uZW50LmNhbGwodGhpcyk7dGhpcy5hZGRFdmVudHMoImF1dG9zaXplIiwia2V5ZG93biIsImtl eXVwIiwia2V5cHJlc3MiKX0saW5pdEV2ZW50czpmdW5jdGlvbigpe0V4dC5mb3JtLlRleHRGaWVs ZC5zdXBlcmNsYXNzLmluaXRFdmVudHMuY2FsbCh0aGlzKTtpZih0aGlzLnZhbGlkYXRpb25FdmVu dD09ImtleXVwIil7dGhpcy52YWxpZGF0aW9uVGFzaz1uZXcgRXh0LnV0aWwuRGVsYXllZFRhc2so dGhpcy52YWxpZGF0ZSx0aGlzKTt0aGlzLm1vbih0aGlzLmVsLCJrZXl1cCIsdGhpcy5maWx0ZXJW YWxpZGF0aW9uLHRoaXMpfWVsc2V7aWYodGhpcy52YWxpZGF0aW9uRXZlbnQhPT1mYWxzZSl7dGhp cy5tb24odGhpcy5lbCx0aGlzLnZhbGlkYXRpb25FdmVudCx0aGlzLnZhbGlkYXRlLHRoaXMse2J1 ZmZlcjp0aGlzLnZhbGlkYXRpb25EZWxheX0pfX1pZih0aGlzLnNlbGVjdE9uRm9jdXN8fHRoaXMu ZW1wdHlUZXh0KXt0aGlzLm9uKCJmb2N1cyIsdGhpcy5wcmVGb2N1cyx0aGlzKTt0aGlzLm1vbih0 aGlzLmVsLCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7aWYoIXRoaXMuaGFzRm9jdXMpe3RoaXMuZWwu b24oIm1vdXNldXAiLGZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKX0sdGhpcyx7c2luZ2xl OnRydWV9KX19LHRoaXMpO2lmKHRoaXMuZW1wdHlUZXh0KXt0aGlzLm9uKCJibHVyIix0aGlzLnBv c3RCbHVyLHRoaXMpO3RoaXMuYXBwbHlFbXB0eVRleHQoKX19aWYodGhpcy5tYXNrUmV8fCh0aGlz LnZ0eXBlJiZ0aGlzLmRpc2FibGVLZXlGaWx0ZXIhPT10cnVlJiYodGhpcy5tYXNrUmU9RXh0LmZv cm0uVlR5cGVzW3RoaXMudnR5cGUrIk1hc2siXSkpKXt0aGlzLm1vbih0aGlzLmVsLCJrZXlwcmVz cyIsdGhpcy5maWx0ZXJLZXlzLHRoaXMpfWlmKHRoaXMuZ3Jvdyl7dGhpcy5tb24odGhpcy5lbCwi a2V5dXAiLHRoaXMub25LZXlVcEJ1ZmZlcmVkLHRoaXMse2J1ZmZlcjo1MH0pO3RoaXMubW9uKHRo aXMuZWwsImNsaWNrIix0aGlzLmF1dG9TaXplLHRoaXMpfWlmKHRoaXMuZW5hYmxlS2V5RXZlbnRz KXt0aGlzLm1vbih0aGlzLmVsLCJrZXl1cCIsdGhpcy5vbktleVVwLHRoaXMpO3RoaXMubW9uKHRo aXMuZWwsImtleWRvd24iLHRoaXMub25LZXlEb3duLHRoaXMpO3RoaXMubW9uKHRoaXMuZWwsImtl eXByZXNzIix0aGlzLm9uS2V5UHJlc3MsdGhpcyl9fSxwcm9jZXNzVmFsdWU6ZnVuY3Rpb24oYSl7 aWYodGhpcy5zdHJpcENoYXJzUmUpe3ZhciBiPWEucmVwbGFjZSh0aGlzLnN0cmlwQ2hhcnNSZSwi Iik7aWYoYiE9PWEpe3RoaXMuc2V0UmF3VmFsdWUoYik7cmV0dXJuIGJ9fXJldHVybiBhfSxmaWx0 ZXJWYWxpZGF0aW9uOmZ1bmN0aW9uKGEpe2lmKCFhLmlzTmF2S2V5UHJlc3MoKSl7dGhpcy52YWxp ZGF0aW9uVGFzay5kZWxheSh0aGlzLnZhbGlkYXRpb25EZWxheSl9fSxvbkRpc2FibGU6ZnVuY3Rp b24oKXtFeHQuZm9ybS5UZXh0RmllbGQuc3VwZXJjbGFzcy5vbkRpc2FibGUuY2FsbCh0aGlzKTtp ZihFeHQuaXNJRSl7dGhpcy5lbC5kb20udW5zZWxlY3RhYmxlPSJvbiJ9fSxvbkVuYWJsZTpmdW5j dGlvbigpe0V4dC5mb3JtLlRleHRGaWVsZC5zdXBlcmNsYXNzLm9uRW5hYmxlLmNhbGwodGhpcyk7 aWYoRXh0LmlzSUUpe3RoaXMuZWwuZG9tLnVuc2VsZWN0YWJsZT0iIn19LG9uS2V5VXBCdWZmZXJl ZDpmdW5jdGlvbihhKXtpZighYS5pc05hdktleVByZXNzKCkpe3RoaXMuYXV0b1NpemUoKX19LG9u S2V5VXA6ZnVuY3Rpb24oYSl7dGhpcy5maXJlRXZlbnQoImtleXVwIix0aGlzLGEpfSxvbktleURv d246ZnVuY3Rpb24oYSl7dGhpcy5maXJlRXZlbnQoImtleWRvd24iLHRoaXMsYSl9LG9uS2V5UHJl c3M6ZnVuY3Rpb24oYSl7dGhpcy5maXJlRXZlbnQoImtleXByZXNzIix0aGlzLGEpfSxyZXNldDpm dW5jdGlvbigpe0V4dC5mb3JtLlRleHRGaWVsZC5zdXBlcmNsYXNzLnJlc2V0LmNhbGwodGhpcyk7 dGhpcy5hcHBseUVtcHR5VGV4dCgpfSxhcHBseUVtcHR5VGV4dDpmdW5jdGlvbigpe2lmKHRoaXMu cmVuZGVyZWQmJnRoaXMuZW1wdHlUZXh0JiZ0aGlzLmdldFJhd1ZhbHVlKCkubGVuZ3RoPDEmJiF0 aGlzLmhhc0ZvY3VzKXt0aGlzLnNldFJhd1ZhbHVlKHRoaXMuZW1wdHlUZXh0KTt0aGlzLmVsLmFk ZENsYXNzKHRoaXMuZW1wdHlDbGFzcyl9fSxwcmVGb2N1czpmdW5jdGlvbigpe3ZhciBhPXRoaXMu ZWw7aWYodGhpcy5lbXB0eVRleHQpe2lmKGEuZG9tLnZhbHVlPT10aGlzLmVtcHR5VGV4dCl7dGhp cy5zZXRSYXdWYWx1ZSgiIil9YS5yZW1vdmVDbGFzcyh0aGlzLmVtcHR5Q2xhc3MpfWlmKHRoaXMu c2VsZWN0T25Gb2N1cyl7KGZ1bmN0aW9uKCl7YS5kb20uc2VsZWN0KCl9KS5kZWZlcih0aGlzLmlu RWRpdG9yJiZFeHQuaXNJRT81MDowKX19LHBvc3RCbHVyOmZ1bmN0aW9uKCl7dGhpcy5hcHBseUVt cHR5VGV4dCgpfSxmaWx0ZXJLZXlzOmZ1bmN0aW9uKGEpe2lmKGEuY3RybEtleXx8YS5pc1NwZWNp YWxLZXkoKSl7cmV0dXJufWlmKCF0aGlzLm1hc2tSZS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUo YS5nZXRDaGFyQ29kZSgpKSkpe2Euc3RvcEV2ZW50KCl9fSxzZXRWYWx1ZTpmdW5jdGlvbihhKXtp Zih0aGlzLmVtcHR5VGV4dCYmdGhpcy5lbCYmIUV4dC5pc0VtcHR5KGEpKXt0aGlzLmVsLnJlbW92 ZUNsYXNzKHRoaXMuZW1wdHlDbGFzcyl9RXh0LmZvcm0uVGV4dEZpZWxkLnN1cGVyY2xhc3Muc2V0 VmFsdWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuYXBwbHlFbXB0eVRleHQoKTt0aGlzLmF1 dG9TaXplKCk7cmV0dXJuIHRoaXN9LHZhbGlkYXRlVmFsdWU6ZnVuY3Rpb24oYSl7aWYoRXh0Lmlz RnVuY3Rpb24odGhpcy52YWxpZGF0b3IpKXt2YXIgYz10aGlzLnZhbGlkYXRvcihhKTtpZihjIT09 dHJ1ZSl7dGhpcy5tYXJrSW52YWxpZChjKTtyZXR1cm4gZmFsc2V9fWlmKGEubGVuZ3RoPDF8fGE9 PT10aGlzLmVtcHR5VGV4dCl7aWYodGhpcy5hbGxvd0JsYW5rKXt0aGlzLmNsZWFySW52YWxpZCgp O3JldHVybiB0cnVlfWVsc2V7dGhpcy5tYXJrSW52YWxpZCh0aGlzLmJsYW5rVGV4dCk7cmV0dXJu IGZhbHNlfX1pZihhLmxlbmd0aDx0aGlzLm1pbkxlbmd0aCl7dGhpcy5tYXJrSW52YWxpZChTdHJp bmcuZm9ybWF0KHRoaXMubWluTGVuZ3RoVGV4dCx0aGlzLm1pbkxlbmd0aCkpO3JldHVybiBmYWxz ZX1pZihhLmxlbmd0aD50aGlzLm1heExlbmd0aCl7dGhpcy5tYXJrSW52YWxpZChTdHJpbmcuZm9y bWF0KHRoaXMubWF4TGVuZ3RoVGV4dCx0aGlzLm1heExlbmd0aCkpO3JldHVybiBmYWxzZX1pZih0 aGlzLnZ0eXBlKXt2YXIgYj1FeHQuZm9ybS5WVHlwZXM7aWYoIWJbdGhpcy52dHlwZV0oYSx0aGlz KSl7dGhpcy5tYXJrSW52YWxpZCh0aGlzLnZ0eXBlVGV4dHx8Ylt0aGlzLnZ0eXBlKyJUZXh0Il0p O3JldHVybiBmYWxzZX19aWYodGhpcy5yZWdleCYmIXRoaXMucmVnZXgudGVzdChhKSl7dGhpcy5t YXJrSW52YWxpZCh0aGlzLnJlZ2V4VGV4dCk7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfSxzZWxl Y3RUZXh0OmZ1bmN0aW9uKGgsYSl7dmFyIGM9dGhpcy5nZXRSYXdWYWx1ZSgpO3ZhciBlPWZhbHNl O2lmKGMubGVuZ3RoPjApe2g9aD09PXVuZGVmaW5lZD8wOmg7YT1hPT09dW5kZWZpbmVkP2MubGVu Z3RoOmE7dmFyIGc9dGhpcy5lbC5kb207aWYoZy5zZXRTZWxlY3Rpb25SYW5nZSl7Zy5zZXRTZWxl Y3Rpb25SYW5nZShoLGEpfWVsc2V7aWYoZy5jcmVhdGVUZXh0UmFuZ2Upe3ZhciBiPWcuY3JlYXRl VGV4dFJhbmdlKCk7Yi5tb3ZlU3RhcnQoImNoYXJhY3RlciIsaCk7Yi5tb3ZlRW5kKCJjaGFyYWN0 ZXIiLGEtYy5sZW5ndGgpO2Iuc2VsZWN0KCl9fWU9RXh0LmlzR2Vja298fEV4dC5pc09wZXJhfWVs c2V7ZT10cnVlfWlmKGUpe3RoaXMuZm9jdXMoKX19LGF1dG9TaXplOmZ1bmN0aW9uKCl7aWYoIXRo aXMuZ3Jvd3x8IXRoaXMucmVuZGVyZWQpe3JldHVybn1pZighdGhpcy5tZXRyaWNzKXt0aGlzLm1l dHJpY3M9RXh0LnV0aWwuVGV4dE1ldHJpY3MuY3JlYXRlSW5zdGFuY2UodGhpcy5lbCl9dmFyIGM9 dGhpcy5lbDt2YXIgYj1jLmRvbS52YWx1ZTt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk aXYiKTtlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGIpKTtiPWUuaW5uZXJI VE1MO2U9bnVsbDtFeHQucmVtb3ZlTm9kZShlKTtiKz0iJiMxNjA7Ijt2YXIgYT1NYXRoLm1pbih0 aGlzLmdyb3dNYXgsTWF0aC5tYXgodGhpcy5tZXRyaWNzLmdldFdpZHRoKGIpKzEwLHRoaXMuZ3Jv d01pbikpO3RoaXMuZWwuc2V0V2lkdGgoYSk7dGhpcy5maXJlRXZlbnQoImF1dG9zaXplIix0aGlz LGEpfSxvbkRlc3Ryb3k6ZnVuY3Rpb24oKXtpZih0aGlzLnZhbGlkYXRpb25UYXNrKXt0aGlzLnZh bGlkYXRpb25UYXNrLmNhbmNlbCgpO3RoaXMudmFsaWRhdGlvblRhc2s9bnVsbH1FeHQuZm9ybS5U ZXh0RmllbGQuc3VwZXJjbGFzcy5vbkRlc3Ryb3kuY2FsbCh0aGlzKX19KTtFeHQucmVnKCJ0ZXh0 ZmllbGQiLEV4dC5mb3JtLlRleHRGaWVsZCk7RXh0LmZvcm0uVHJpZ2dlckZpZWxkPUV4dC5leHRl bmQoRXh0LmZvcm0uVGV4dEZpZWxkLHtkZWZhdWx0QXV0b0NyZWF0ZTp7dGFnOiJpbnB1dCIsdHlw ZToidGV4dCIsc2l6ZToiMTYiLGF1dG9jb21wbGV0ZToib2ZmIn0saGlkZVRyaWdnZXI6ZmFsc2Us ZWRpdGFibGU6dHJ1ZSx3cmFwRm9jdXNDbGFzczoieC10cmlnZ2VyLXdyYXAtZm9jdXMiLGF1dG9T aXplOkV4dC5lbXB0eUZuLG1vbml0b3JUYWI6dHJ1ZSxkZWZlckhlaWdodDp0cnVlLG1pbWljaW5n OmZhbHNlLGFjdGlvbk1vZGU6IndyYXAiLG9uUmVzaXplOmZ1bmN0aW9uKGEsYil7RXh0LmZvcm0u VHJpZ2dlckZpZWxkLnN1cGVyY2xhc3Mub25SZXNpemUuY2FsbCh0aGlzLGEsYik7aWYodHlwZW9m IGE9PSJudW1iZXIiKXt0aGlzLmVsLnNldFdpZHRoKHRoaXMuYWRqdXN0V2lkdGgoImlucHV0Iixh LXRoaXMudHJpZ2dlci5nZXRXaWR0aCgpKSl9dGhpcy53cmFwLnNldFdpZHRoKHRoaXMuZWwuZ2V0 V2lkdGgoKSt0aGlzLnRyaWdnZXIuZ2V0V2lkdGgoKSl9LGFkanVzdFNpemU6RXh0LkJveENvbXBv bmVudC5wcm90b3R5cGUuYWRqdXN0U2l6ZSxnZXRSZXNpemVFbDpmdW5jdGlvbigpe3JldHVybiB0 aGlzLndyYXB9LGdldFBvc2l0aW9uRWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53cmFwfSxhbGln bkVycm9ySWNvbjpmdW5jdGlvbigpe2lmKHRoaXMud3JhcCl7dGhpcy5lcnJvckljb24uYWxpZ25U byh0aGlzLndyYXAsInRsLXRyIixbMiwwXSl9fSxvblJlbmRlcjpmdW5jdGlvbihiLGEpe0V4dC5m b3JtLlRyaWdnZXJGaWVsZC5zdXBlcmNsYXNzLm9uUmVuZGVyLmNhbGwodGhpcyxiLGEpO3RoaXMu d3JhcD10aGlzLmVsLndyYXAoe2NsczoieC1mb3JtLWZpZWxkLXdyYXAgeC1mb3JtLWZpZWxkLXRy aWdnZXItd3JhcCJ9KTt0aGlzLnRyaWdnZXI9dGhpcy53cmFwLmNyZWF0ZUNoaWxkKHRoaXMudHJp Z2dlckNvbmZpZ3x8e3RhZzoiaW1nIixzcmM6RXh0LkJMQU5LX0lNQUdFX1VSTCxjbHM6IngtZm9y bS10cmlnZ2VyICIrdGhpcy50cmlnZ2VyQ2xhc3N9KTtpZih0aGlzLmhpZGVUcmlnZ2VyKXt0aGlz LnRyaWdnZXIuc2V0RGlzcGxheWVkKGZhbHNlKX10aGlzLmluaXRUcmlnZ2VyKCk7aWYoIXRoaXMu d2lkdGgpe3RoaXMud3JhcC5zZXRXaWR0aCh0aGlzLmVsLmdldFdpZHRoKCkrdGhpcy50cmlnZ2Vy LmdldFdpZHRoKCkpfWlmKCF0aGlzLmVkaXRhYmxlKXt0aGlzLmVkaXRhYmxlPXRydWU7dGhpcy5z ZXRFZGl0YWJsZShmYWxzZSl9fSxhZnRlclJlbmRlcjpmdW5jdGlvbigpe0V4dC5mb3JtLlRyaWdn ZXJGaWVsZC5zdXBlcmNsYXNzLmFmdGVyUmVuZGVyLmNhbGwodGhpcyl9LGluaXRUcmlnZ2VyOmZ1 bmN0aW9uKCl7dGhpcy5tb24odGhpcy50cmlnZ2VyLCJjbGljayIsdGhpcy5vblRyaWdnZXJDbGlj ayx0aGlzLHtwcmV2ZW50RGVmYXVsdDp0cnVlfSk7dGhpcy50cmlnZ2VyLmFkZENsYXNzT25PdmVy KCJ4LWZvcm0tdHJpZ2dlci1vdmVyIik7dGhpcy50cmlnZ2VyLmFkZENsYXNzT25DbGljaygieC1m b3JtLXRyaWdnZXItY2xpY2siKX0sb25EZXN0cm95OmZ1bmN0aW9uKCl7RXh0LmRlc3Ryb3kodGhp cy50cmlnZ2VyLHRoaXMud3JhcCk7aWYodGhpcy5taW1pY2luZyl7RXh0LmdldChFeHQuaXNJRT9k b2N1bWVudC5ib2R5OmRvY3VtZW50KS51bigibW91c2Vkb3duIix0aGlzLm1pbWljQmx1cix0aGlz KX1FeHQuZm9ybS5UcmlnZ2VyRmllbGQuc3VwZXJjbGFzcy5vbkRlc3Ryb3kuY2FsbCh0aGlzKX0s b25Gb2N1czpmdW5jdGlvbigpe0V4dC5mb3JtLlRyaWdnZXJGaWVsZC5zdXBlcmNsYXNzLm9uRm9j dXMuY2FsbCh0aGlzKTtpZighdGhpcy5taW1pY2luZyl7dGhpcy53cmFwLmFkZENsYXNzKHRoaXMu d3JhcEZvY3VzQ2xhc3MpO3RoaXMubWltaWNpbmc9dHJ1ZTtFeHQuZ2V0KEV4dC5pc0lFP2RvY3Vt ZW50LmJvZHk6ZG9jdW1lbnQpLm9uKCJtb3VzZWRvd24iLHRoaXMubWltaWNCbHVyLHRoaXMse2Rl bGF5OjEwfSk7aWYodGhpcy5tb25pdG9yVGFiKXt0aGlzLmVsLm9uKCJrZXlkb3duIix0aGlzLmNo ZWNrVGFiLHRoaXMpfX19LGNoZWNrVGFiOmZ1bmN0aW9uKGEpe2lmKGEuZ2V0S2V5KCk9PWEuVEFC KXt0aGlzLnRyaWdnZXJCbHVyKCl9fSxvbkJsdXI6ZnVuY3Rpb24oKXt9LG1pbWljQmx1cjpmdW5j dGlvbihhKXtpZighdGhpcy53cmFwLmNvbnRhaW5zKGEudGFyZ2V0KSYmdGhpcy52YWxpZGF0ZUJs dXIoYSkpe3RoaXMudHJpZ2dlckJsdXIoKX19LHRyaWdnZXJCbHVyOmZ1bmN0aW9uKCl7dGhpcy5t aW1pY2luZz1mYWxzZTtFeHQuZ2V0KEV4dC5pc0lFP2RvY3VtZW50LmJvZHk6ZG9jdW1lbnQpLnVu KCJtb3VzZWRvd24iLHRoaXMubWltaWNCbHVyLHRoaXMpO2lmKHRoaXMubW9uaXRvclRhYiYmdGhp cy5lbCl7dGhpcy5lbC51bigia2V5ZG93biIsdGhpcy5jaGVja1RhYix0aGlzKX1FeHQuZm9ybS5U cmlnZ2VyRmllbGQuc3VwZXJjbGFzcy5vbkJsdXIuY2FsbCh0aGlzKTtpZih0aGlzLndyYXApe3Ro aXMud3JhcC5yZW1vdmVDbGFzcyh0aGlzLndyYXBGb2N1c0NsYXNzKX19LGJlZm9yZUJsdXI6RXh0 LmVtcHR5Rm4sc2V0RWRpdGFibGU6ZnVuY3Rpb24oYSl7aWYoYT09dGhpcy5lZGl0YWJsZSl7cmV0 dXJufXRoaXMuZWRpdGFibGU9YTtpZighYSl7dGhpcy5lbC5hZGRDbGFzcygieC10cmlnZ2VyLW5v ZWRpdCIpLm9uKCJjbGljayIsdGhpcy5vblRyaWdnZXJDbGljayx0aGlzKS5kb20uc2V0QXR0cmli dXRlKCJyZWFkT25seSIsdHJ1ZSl9ZWxzZXt0aGlzLmVsLnJlbW92ZUNsYXNzKCJ4LXRyaWdnZXIt bm9lZGl0IikudW4oImNsaWNrIix0aGlzLm9uVHJpZ2dlckNsaWNrLHRoaXMpLmRvbS5yZW1vdmVB dHRyaWJ1dGUoInJlYWRPbmx5Iil9fSx2YWxpZGF0ZUJsdXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRy dWV9LG9uVHJpZ2dlckNsaWNrOkV4dC5lbXB0eUZufSk7RXh0LmZvcm0uVHdpblRyaWdnZXJGaWVs ZD1FeHQuZXh0ZW5kKEV4dC5mb3JtLlRyaWdnZXJGaWVsZCx7aW5pdENvbXBvbmVudDpmdW5jdGlv bigpe0V4dC5mb3JtLlR3aW5UcmlnZ2VyRmllbGQuc3VwZXJjbGFzcy5pbml0Q29tcG9uZW50LmNh bGwodGhpcyk7dGhpcy50cmlnZ2VyQ29uZmlnPXt0YWc6InNwYW4iLGNsczoieC1mb3JtLXR3aW4t dHJpZ2dlcnMiLGNuOlt7dGFnOiJpbWciLHNyYzpFeHQuQkxBTktfSU1BR0VfVVJMLGNsczoieC1m b3JtLXRyaWdnZXIgIit0aGlzLnRyaWdnZXIxQ2xhc3N9LHt0YWc6ImltZyIsc3JjOkV4dC5CTEFO S19JTUFHRV9VUkwsY2xzOiJ4LWZvcm0tdHJpZ2dlciAiK3RoaXMudHJpZ2dlcjJDbGFzc31dfX0s Z2V0VHJpZ2dlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy50cmlnZ2Vyc1thXX0saW5pdFRyaWdn ZXI6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnRyaWdnZXIuc2VsZWN0KCIueC1mb3JtLXRyaWdnZXIi LHRydWUpO3RoaXMud3JhcC5zZXRTdHlsZSgib3ZlcmZsb3ciLCJoaWRkZW4iKTt2YXIgYj10aGlz O2EuZWFjaChmdW5jdGlvbihkLGcsYyl7ZC5oaWRlPWZ1bmN0aW9uKCl7dmFyIGg9Yi53cmFwLmdl dFdpZHRoKCk7dGhpcy5kb20uc3R5bGUuZGlzcGxheT0ibm9uZSI7Yi5lbC5zZXRXaWR0aChoLWIu dHJpZ2dlci5nZXRXaWR0aCgpKX07ZC5zaG93PWZ1bmN0aW9uKCl7dmFyIGg9Yi53cmFwLmdldFdp ZHRoKCk7dGhpcy5kb20uc3R5bGUuZGlzcGxheT0iIjtiLmVsLnNldFdpZHRoKGgtYi50cmlnZ2Vy LmdldFdpZHRoKCkpfTt2YXIgZT0iVHJpZ2dlciIrKGMrMSk7aWYodGhpc1siaGlkZSIrZV0pe2Qu ZG9tLnN0eWxlLmRpc3BsYXk9Im5vbmUifXRoaXMubW9uKGQsImNsaWNrIix0aGlzWyJvbiIrZSsi Q2xpY2siXSx0aGlzLHtwcmV2ZW50RGVmYXVsdDp0cnVlfSk7ZC5hZGRDbGFzc09uT3ZlcigieC1m b3JtLXRyaWdnZXItb3ZlciIpO2QuYWRkQ2xhc3NPbkNsaWNrKCJ4LWZvcm0tdHJpZ2dlci1jbGlj ayIpfSx0aGlzKTt0aGlzLnRyaWdnZXJzPWEuZWxlbWVudHN9LG9uVHJpZ2dlcjFDbGljazpFeHQu ZW1wdHlGbixvblRyaWdnZXIyQ2xpY2s6RXh0LmVtcHR5Rm59KTtFeHQucmVnKCJ0cmlnZ2VyIixF eHQuZm9ybS5UcmlnZ2VyRmllbGQpO0V4dC5mb3JtLlRleHRBcmVhPUV4dC5leHRlbmQoRXh0LmZv cm0uVGV4dEZpZWxkLHtncm93TWluOjYwLGdyb3dNYXg6MTAwMCxncm93QXBwZW5kOiImIzE2MDtc biYjMTYwOyIsZ3Jvd1BhZDpFeHQuaXNXZWJLaXQ/LTY6MCxlbnRlcklzU3BlY2lhbDpmYWxzZSxw cmV2ZW50U2Nyb2xsYmFyczpmYWxzZSxvblJlbmRlcjpmdW5jdGlvbihiLGEpe2lmKCF0aGlzLmVs KXt0aGlzLmRlZmF1bHRBdXRvQ3JlYXRlPXt0YWc6InRleHRhcmVhIixzdHlsZToid2lkdGg6MTAw cHg7aGVpZ2h0OjYwcHg7IixhdXRvY29tcGxldGU6Im9mZiJ9fUV4dC5mb3JtLlRleHRBcmVhLnN1 cGVyY2xhc3Mub25SZW5kZXIuY2FsbCh0aGlzLGIsYSk7aWYodGhpcy5ncm93KXt0aGlzLnRleHRT aXplRWw9RXh0LkRvbUhlbHBlci5hcHBlbmQoZG9jdW1lbnQuYm9keSx7dGFnOiJwcmUiLGNsczoi eC1mb3JtLWdyb3ctc2l6ZXIifSk7aWYodGhpcy5wcmV2ZW50U2Nyb2xsYmFycyl7dGhpcy5lbC5z ZXRTdHlsZSgib3ZlcmZsb3ciLCJoaWRkZW4iKX10aGlzLmVsLnNldEhlaWdodCh0aGlzLmdyb3dN aW4pfX0sb25EZXN0cm95OmZ1bmN0aW9uKCl7RXh0LmRlc3Ryb3kodGhpcy50ZXh0U2l6ZUVsKTtF eHQuZm9ybS5UZXh0QXJlYS5zdXBlcmNsYXNzLm9uRGVzdHJveS5jYWxsKHRoaXMpfSxmaXJlS2V5 OmZ1bmN0aW9uKGEpe2lmKGEuaXNTcGVjaWFsS2V5KCkmJih0aGlzLmVudGVySXNTcGVjaWFsfHwo YS5nZXRLZXkoKSE9YS5FTlRFUnx8YS5oYXNNb2RpZmllcigpKSkpe3RoaXMuZmlyZUV2ZW50KCJz cGVjaWFsa2V5Iix0aGlzLGEpfX0sb25LZXlVcDpmdW5jdGlvbihhKXtpZighYS5pc05hdktleVBy ZXNzKCl8fGEuZ2V0S2V5KCk9PWEuRU5URVIpe3RoaXMuYXV0b1NpemUoKX1FeHQuZm9ybS5UZXh0 QXJlYS5zdXBlcmNsYXNzLm9uS2V5VXAuY2FsbCh0aGlzLGEpfSxhdXRvU2l6ZTpmdW5jdGlvbigp e2lmKCF0aGlzLmdyb3d8fCF0aGlzLnRleHRTaXplRWwpe3JldHVybn12YXIgYz10aGlzLmVsO3Zh ciBhPWMuZG9tLnZhbHVlO3ZhciBkPXRoaXMudGV4dFNpemVFbDtkLmlubmVySFRNTD0iIjtkLmFw cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGEpKTthPWQuaW5uZXJIVE1MO0V4dC5m bHkoZCkuc2V0V2lkdGgodGhpcy5lbC5nZXRXaWR0aCgpKTtpZihhLmxlbmd0aDwxKXthPSImIzE2 MDsmIzE2MDsifWVsc2V7YSs9dGhpcy5ncm93QXBwZW5kO2lmKEV4dC5pc0lFKXthPWEucmVwbGFj ZSgvXG4vZywiPGJyIC8+Iil9fWQuaW5uZXJIVE1MPWE7dmFyIGI9TWF0aC5taW4odGhpcy5ncm93 TWF4LE1hdGgubWF4KGQub2Zmc2V0SGVpZ2h0LHRoaXMuZ3Jvd01pbikrdGhpcy5ncm93UGFkKTtp ZihiIT10aGlzLmxhc3RIZWlnaHQpe3RoaXMubGFzdEhlaWdodD1iO3RoaXMuZWwuc2V0SGVpZ2h0 KGIpO3RoaXMuZmlyZUV2ZW50KCJhdXRvc2l6ZSIsdGhpcyxiKX19fSk7RXh0LnJlZygidGV4dGFy ZWEiLEV4dC5mb3JtLlRleHRBcmVhKTtFeHQuZm9ybS5OdW1iZXJGaWVsZD1FeHQuZXh0ZW5kKEV4 dC5mb3JtLlRleHRGaWVsZCx7ZmllbGRDbGFzczoieC1mb3JtLWZpZWxkIHgtZm9ybS1udW0tZmll bGQiLGFsbG93RGVjaW1hbHM6dHJ1ZSxkZWNpbWFsU2VwYXJhdG9yOiIuIixkZWNpbWFsUHJlY2lz aW9uOjIsYWxsb3dOZWdhdGl2ZTp0cnVlLG1pblZhbHVlOk51bWJlci5ORUdBVElWRV9JTkZJTklU WSxtYXhWYWx1ZTpOdW1iZXIuTUFYX1ZBTFVFLG1pblRleHQ6IlRoZSBtaW5pbXVtIHZhbHVlIGZv ciB0aGlzIGZpZWxkIGlzIHswfSIsbWF4VGV4dDoiVGhlIG1heGltdW0gdmFsdWUgZm9yIHRoaXMg ZmllbGQgaXMgezB9IixuYW5UZXh0OiJ7MH0gaXMgbm90IGEgdmFsaWQgbnVtYmVyIixiYXNlQ2hh cnM6IjAxMjM0NTY3ODkiLGluaXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmJhc2VDaGFy cysiIjtpZih0aGlzLmFsbG93RGVjaW1hbHMpe2ErPXRoaXMuZGVjaW1hbFNlcGFyYXRvcn1pZih0 aGlzLmFsbG93TmVnYXRpdmUpe2ErPSItIn10aGlzLm1hc2tSZT1uZXcgUmVnRXhwKCJbIitFeHQu ZXNjYXBlUmUoYSkrIl0iKTtFeHQuZm9ybS5OdW1iZXJGaWVsZC5zdXBlcmNsYXNzLmluaXRFdmVu dHMuY2FsbCh0aGlzKX0sdmFsaWRhdGVWYWx1ZTpmdW5jdGlvbihiKXtpZighRXh0LmZvcm0uTnVt YmVyRmllbGQuc3VwZXJjbGFzcy52YWxpZGF0ZVZhbHVlLmNhbGwodGhpcyxiKSl7cmV0dXJuIGZh bHNlfWlmKGIubGVuZ3RoPDEpe3JldHVybiB0cnVlfWI9U3RyaW5nKGIpLnJlcGxhY2UodGhpcy5k ZWNpbWFsU2VwYXJhdG9yLCIuIik7aWYoaXNOYU4oYikpe3RoaXMubWFya0ludmFsaWQoU3RyaW5n LmZvcm1hdCh0aGlzLm5hblRleHQsYikpO3JldHVybiBmYWxzZX12YXIgYT10aGlzLnBhcnNlVmFs dWUoYik7aWYoYTx0aGlzLm1pblZhbHVlKXt0aGlzLm1hcmtJbnZhbGlkKFN0cmluZy5mb3JtYXQo dGhpcy5taW5UZXh0LHRoaXMubWluVmFsdWUpKTtyZXR1cm4gZmFsc2V9aWYoYT50aGlzLm1heFZh bHVlKXt0aGlzLm1hcmtJbnZhbGlkKFN0cmluZy5mb3JtYXQodGhpcy5tYXhUZXh0LHRoaXMubWF4 VmFsdWUpKTtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9LGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0 dXJuIHRoaXMuZml4UHJlY2lzaW9uKHRoaXMucGFyc2VWYWx1ZShFeHQuZm9ybS5OdW1iZXJGaWVs ZC5zdXBlcmNsYXNzLmdldFZhbHVlLmNhbGwodGhpcykpKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYSl7 YT10eXBlb2YgYT09Im51bWJlciI/YTpwYXJzZUZsb2F0KFN0cmluZyhhKS5yZXBsYWNlKHRoaXMu ZGVjaW1hbFNlcGFyYXRvciwiLiIpKTthPWlzTmFOKGEpPyIiOlN0cmluZyhhKS5yZXBsYWNlKCIu Iix0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO3JldHVybiBFeHQuZm9ybS5OdW1iZXJGaWVsZC5zdXBl cmNsYXNzLnNldFZhbHVlLmNhbGwodGhpcyxhKX0scGFyc2VWYWx1ZTpmdW5jdGlvbihhKXthPXBh cnNlRmxvYXQoU3RyaW5nKGEpLnJlcGxhY2UodGhpcy5kZWNpbWFsU2VwYXJhdG9yLCIuIikpO3Jl dHVybiBpc05hTihhKT8iIjphfSxmaXhQcmVjaXNpb246ZnVuY3Rpb24oYil7dmFyIGE9aXNOYU4o Yik7aWYoIXRoaXMuYWxsb3dEZWNpbWFsc3x8dGhpcy5kZWNpbWFsUHJlY2lzaW9uPT0tMXx8YXx8 IWIpe3JldHVybiBhPyIiOmJ9cmV0dXJuIHBhcnNlRmxvYXQocGFyc2VGbG9hdChiKS50b0ZpeGVk KHRoaXMuZGVjaW1hbFByZWNpc2lvbikpfSxiZWZvcmVCbHVyOmZ1bmN0aW9uKCl7dmFyIGE9dGhp cy5wYXJzZVZhbHVlKHRoaXMuZ2V0UmF3VmFsdWUoKSk7aWYoIUV4dC5pc0VtcHR5KGEpKXt0aGlz LnNldFZhbHVlKHRoaXMuZml4UHJlY2lzaW9uKGEpKX19fSk7RXh0LnJlZygibnVtYmVyZmllbGQi LEV4dC5mb3JtLk51bWJlckZpZWxkKTtFeHQuZm9ybS5EYXRlRmllbGQ9RXh0LmV4dGVuZChFeHQu Zm9ybS5UcmlnZ2VyRmllbGQse2Zvcm1hdDoibS9kL1kiLGFsdEZvcm1hdHM6Im0vZC9ZfG4vai9Z fG4vai95fG0vai95fG4vZC95fG0vai9ZfG4vZC9ZfG0tZC15fG0tZC1ZfG0vZHxtLWR8bWR8bWR5 fG1kWXxkfFktbS1kIixkaXNhYmxlZERheXNUZXh0OiJEaXNhYmxlZCIsZGlzYWJsZWREYXRlc1Rl eHQ6IkRpc2FibGVkIixtaW5UZXh0OiJUaGUgZGF0ZSBpbiB0aGlzIGZpZWxkIG11c3QgYmUgZXF1 YWwgdG8gb3IgYWZ0ZXIgezB9IixtYXhUZXh0OiJUaGUgZGF0ZSBpbiB0aGlzIGZpZWxkIG11c3Qg YmUgZXF1YWwgdG8gb3IgYmVmb3JlIHswfSIsaW52YWxpZFRleHQ6InswfSBpcyBub3QgYSB2YWxp ZCBkYXRlIC0gaXQgbXVzdCBiZSBpbiB0aGUgZm9ybWF0IHsxfSIsdHJpZ2dlckNsYXNzOiJ4LWZv cm0tZGF0ZS10cmlnZ2VyIixzaG93VG9kYXk6dHJ1ZSxkZWZhdWx0QXV0b0NyZWF0ZTp7dGFnOiJp bnB1dCIsdHlwZToidGV4dCIsc2l6ZToiMTAiLGF1dG9jb21wbGV0ZToib2ZmIn0saW5pdENvbXBv bmVudDpmdW5jdGlvbigpe0V4dC5mb3JtLkRhdGVGaWVsZC5zdXBlcmNsYXNzLmluaXRDb21wb25l bnQuY2FsbCh0aGlzKTt0aGlzLmFkZEV2ZW50cygic2VsZWN0Iik7aWYoRXh0LmlzU3RyaW5nKHRo aXMubWluVmFsdWUpKXt0aGlzLm1pblZhbHVlPXRoaXMucGFyc2VEYXRlKHRoaXMubWluVmFsdWUp fWlmKEV4dC5pc1N0cmluZyh0aGlzLm1heFZhbHVlKSl7dGhpcy5tYXhWYWx1ZT10aGlzLnBhcnNl RGF0ZSh0aGlzLm1heFZhbHVlKX10aGlzLmRpc2FibGVkRGF0ZXNSRT1udWxsO3RoaXMuaW5pdERp c2FibGVkRGF5cygpfSxpbml0RGlzYWJsZWREYXlzOmZ1bmN0aW9uKCl7aWYodGhpcy5kaXNhYmxl ZERhdGVzKXt2YXIgYj10aGlzLmRpc2FibGVkRGF0ZXMsYT1iLmxlbmd0aC0xLGM9Iig/OiI7RXh0 LmVhY2goYixmdW5jdGlvbihnLGUpe2MrPUV4dC5pc0RhdGUoZyk/Il4iK0V4dC5lc2NhcGVSZShn LmRhdGVGb3JtYXQodGhpcy5mb3JtYXQpKSsiJCI6YltlXTtpZihlIT1hKXtjKz0ifCJ9fSx0aGlz KTt0aGlzLmRpc2FibGVkRGF0ZXNSRT1uZXcgUmVnRXhwKGMrIikiKX19LHNldERpc2FibGVkRGF0 ZXM6ZnVuY3Rpb24oYSl7dGhpcy5kaXNhYmxlZERhdGVzPWE7dGhpcy5pbml0RGlzYWJsZWREYXlz KCk7aWYodGhpcy5tZW51KXt0aGlzLm1lbnUucGlja2VyLnNldERpc2FibGVkRGF0ZXModGhpcy5k aXNhYmxlZERhdGVzUkUpfX0sc2V0RGlzYWJsZWREYXlzOmZ1bmN0aW9uKGEpe3RoaXMuZGlzYWJs ZWREYXlzPWE7aWYodGhpcy5tZW51KXt0aGlzLm1lbnUucGlja2VyLnNldERpc2FibGVkRGF5cyhh KX19LHNldE1pblZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMubWluVmFsdWU9KEV4dC5pc1N0cmluZyhh KT90aGlzLnBhcnNlRGF0ZShhKTphKTtpZih0aGlzLm1lbnUpe3RoaXMubWVudS5waWNrZXIuc2V0 TWluRGF0ZSh0aGlzLm1pblZhbHVlKX19LHNldE1heFZhbHVlOmZ1bmN0aW9uKGEpe3RoaXMubWF4 VmFsdWU9KEV4dC5pc1N0cmluZyhhKT90aGlzLnBhcnNlRGF0ZShhKTphKTtpZih0aGlzLm1lbnUp e3RoaXMubWVudS5waWNrZXIuc2V0TWF4RGF0ZSh0aGlzLm1heFZhbHVlKX19LHZhbGlkYXRlVmFs dWU6ZnVuY3Rpb24oZSl7ZT10aGlzLmZvcm1hdERhdGUoZSk7aWYoIUV4dC5mb3JtLkRhdGVGaWVs ZC5zdXBlcmNsYXNzLnZhbGlkYXRlVmFsdWUuY2FsbCh0aGlzLGUpKXtyZXR1cm4gZmFsc2V9aWYo ZS5sZW5ndGg8MSl7cmV0dXJuIHRydWV9dmFyIGM9ZTtlPXRoaXMucGFyc2VEYXRlKGUpO2lmKCFl KXt0aGlzLm1hcmtJbnZhbGlkKFN0cmluZy5mb3JtYXQodGhpcy5pbnZhbGlkVGV4dCxjLHRoaXMu Zm9ybWF0KSk7cmV0dXJuIGZhbHNlfXZhciBnPWUuZ2V0VGltZSgpO2lmKHRoaXMubWluVmFsdWUm Jmc8dGhpcy5taW5WYWx1ZS5nZXRUaW1lKCkpe3RoaXMubWFya0ludmFsaWQoU3RyaW5nLmZvcm1h dCh0aGlzLm1pblRleHQsdGhpcy5mb3JtYXREYXRlKHRoaXMubWluVmFsdWUpKSk7cmV0dXJuIGZh bHNlfWlmKHRoaXMubWF4VmFsdWUmJmc+dGhpcy5tYXhWYWx1ZS5nZXRUaW1lKCkpe3RoaXMubWFy a0ludmFsaWQoU3RyaW5nLmZvcm1hdCh0aGlzLm1heFRleHQsdGhpcy5mb3JtYXREYXRlKHRoaXMu bWF4VmFsdWUpKSk7cmV0dXJuIGZhbHNlfWlmKHRoaXMuZGlzYWJsZWREYXlzKXt2YXIgYT1lLmdl dERheSgpO2Zvcih2YXIgYj0wO2I8dGhpcy5kaXNhYmxlZERheXMubGVuZ3RoO2IrKyl7aWYoYT09 PXRoaXMuZGlzYWJsZWREYXlzW2JdKXt0aGlzLm1hcmtJbnZhbGlkKHRoaXMuZGlzYWJsZWREYXlz VGV4dCk7cmV0dXJuIGZhbHNlfX19dmFyIGQ9dGhpcy5mb3JtYXREYXRlKGUpO2lmKHRoaXMuZGlz YWJsZWREYXRlc1JFJiZ0aGlzLmRpc2FibGVkRGF0ZXNSRS50ZXN0KGQpKXt0aGlzLm1hcmtJbnZh bGlkKFN0cmluZy5mb3JtYXQodGhpcy5kaXNhYmxlZERhdGVzVGV4dCxkKSk7cmV0dXJuIGZhbHNl fXJldHVybiB0cnVlfSx2YWxpZGF0ZUJsdXI6ZnVuY3Rpb24oKXtyZXR1cm4gIXRoaXMubWVudXx8 IXRoaXMubWVudS5pc1Zpc2libGUoKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5w YXJzZURhdGUoRXh0LmZvcm0uRGF0ZUZpZWxkLnN1cGVyY2xhc3MuZ2V0VmFsdWUuY2FsbCh0aGlz KSl8fCIifSxzZXRWYWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gRXh0LmZvcm0uRGF0ZUZpZWxkLnN1 cGVyY2xhc3Muc2V0VmFsdWUuY2FsbCh0aGlzLHRoaXMuZm9ybWF0RGF0ZSh0aGlzLnBhcnNlRGF0 ZShhKSkpfSxwYXJzZURhdGU6ZnVuY3Rpb24oZCl7aWYoIWR8fEV4dC5pc0RhdGUoZCkpe3JldHVy biBkfXZhciBiPURhdGUucGFyc2VEYXRlKGQsdGhpcy5mb3JtYXQpO2lmKCFiJiZ0aGlzLmFsdEZv cm1hdHMpe2lmKCF0aGlzLmFsdEZvcm1hdHNBcnJheSl7dGhpcy5hbHRGb3JtYXRzQXJyYXk9dGhp cy5hbHRGb3JtYXRzLnNwbGl0KCJ8Iil9Zm9yKHZhciBjPTAsYT10aGlzLmFsdEZvcm1hdHNBcnJh eS5sZW5ndGg7YzxhJiYhYjtjKyspe2I9RGF0ZS5wYXJzZURhdGUoZCx0aGlzLmFsdEZvcm1hdHNB cnJheVtjXSl9fXJldHVybiBifSxvbkRlc3Ryb3k6ZnVuY3Rpb24oKXtFeHQuZGVzdHJveSh0aGlz Lm1lbnUpO0V4dC5mb3JtLkRhdGVGaWVsZC5zdXBlcmNsYXNzLm9uRGVzdHJveS5jYWxsKHRoaXMp fSxmb3JtYXREYXRlOmZ1bmN0aW9uKGEpe3JldHVybiBFeHQuaXNEYXRlKGEpP2EuZGF0ZUZvcm1h dCh0aGlzLmZvcm1hdCk6YX0sb25UcmlnZ2VyQ2xpY2s6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2Fi bGVkKXtyZXR1cm59aWYodGhpcy5tZW51PT1udWxsKXt0aGlzLm1lbnU9bmV3IEV4dC5tZW51LkRh dGVNZW51KHtoaWRlT25DbGljazpmYWxzZX0pfXRoaXMub25Gb2N1cygpO0V4dC5hcHBseSh0aGlz Lm1lbnUucGlja2VyLHttaW5EYXRlOnRoaXMubWluVmFsdWUsbWF4RGF0ZTp0aGlzLm1heFZhbHVl LGRpc2FibGVkRGF0ZXNSRTp0aGlzLmRpc2FibGVkRGF0ZXNSRSxkaXNhYmxlZERhdGVzVGV4dDp0 aGlzLmRpc2FibGVkRGF0ZXNUZXh0LGRpc2FibGVkRGF5czp0aGlzLmRpc2FibGVkRGF5cyxkaXNh YmxlZERheXNUZXh0OnRoaXMuZGlzYWJsZWREYXlzVGV4dCxmb3JtYXQ6dGhpcy5mb3JtYXQsc2hv d1RvZGF5OnRoaXMuc2hvd1RvZGF5LG1pblRleHQ6U3RyaW5nLmZvcm1hdCh0aGlzLm1pblRleHQs dGhpcy5mb3JtYXREYXRlKHRoaXMubWluVmFsdWUpKSxtYXhUZXh0OlN0cmluZy5mb3JtYXQodGhp cy5tYXhUZXh0LHRoaXMuZm9ybWF0RGF0ZSh0aGlzLm1heFZhbHVlKSl9KTt0aGlzLm1lbnUucGlj a2VyLnNldFZhbHVlKHRoaXMuZ2V0VmFsdWUoKXx8bmV3IERhdGUoKSk7dGhpcy5tZW51LnNob3co dGhpcy5lbCwidGwtYmw/Iik7dGhpcy5tZW51RXZlbnRzKCJvbiIpfSxtZW51RXZlbnRzOmZ1bmN0 aW9uKGEpe3RoaXMubWVudVthXSgic2VsZWN0Iix0aGlzLm9uU2VsZWN0LHRoaXMpO3RoaXMubWVu dVthXSgiaGlkZSIsdGhpcy5vbk1lbnVIaWRlLHRoaXMpO3RoaXMubWVudVthXSgic2hvdyIsdGhp cy5vbkZvY3VzLHRoaXMpfSxvblNlbGVjdDpmdW5jdGlvbihhLGIpe3RoaXMuc2V0VmFsdWUoYik7 dGhpcy5maXJlRXZlbnQoInNlbGVjdCIsdGhpcyxiKTt0aGlzLm1lbnUuaGlkZSgpfSxvbk1lbnVI aWRlOmZ1bmN0aW9uKCl7dGhpcy5mb2N1cyhmYWxzZSw2MCk7dGhpcy5tZW51RXZlbnRzKCJ1biIp fSxiZWZvcmVCbHVyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5wYXJzZURhdGUodGhpcy5nZXRSYXdW YWx1ZSgpKTtpZihhKXt0aGlzLnNldFZhbHVlKGEpfX19KTtFeHQucmVnKCJkYXRlZmllbGQiLEV4 dC5mb3JtLkRhdGVGaWVsZCk7RXh0LmZvcm0uRGlzcGxheUZpZWxkPUV4dC5leHRlbmQoRXh0LmZv cm0uRmllbGQse3ZhbGlkYXRpb25FdmVudDpmYWxzZSx2YWxpZGF0ZU9uQmx1cjpmYWxzZSxkZWZh dWx0QXV0b0NyZWF0ZTp7dGFnOiJkaXYifSxmaWVsZENsYXNzOiJ4LWZvcm0tZGlzcGxheS1maWVs ZCIsaHRtbEVuY29kZTpmYWxzZSxpbml0RXZlbnRzOkV4dC5lbXB0eUZuLGlzVmFsaWQ6ZnVuY3Rp b24oKXtyZXR1cm4gdHJ1ZX0sdmFsaWRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZX0sZ2V0UmF3 VmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlbmRlcmVkP3RoaXMuZWwuZG9tLmlubmVySFRN TDpFeHQudmFsdWUodGhpcy52YWx1ZSwiIik7aWYoYT09PXRoaXMuZW1wdHlUZXh0KXthPSIifWlm KHRoaXMuaHRtbEVuY29kZSl7YT1FeHQudXRpbC5Gb3JtYXQuaHRtbERlY29kZShhKX1yZXR1cm4g YX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSYXdWYWx1ZSgpfSxnZXROYW1l OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZX0sc2V0UmF3VmFsdWU6ZnVuY3Rpb24oYSl7aWYo dGhpcy5odG1sRW5jb2RlKXthPUV4dC51dGlsLkZvcm1hdC5odG1sRW5jb2RlKGEpfXJldHVybiB0 aGlzLnJlbmRlcmVkPyh0aGlzLmVsLmRvbS5pbm5lckhUTUw9KEV4dC5pc0VtcHR5KGEpPyIiOmEp KToodGhpcy52YWx1ZT1hKX0sc2V0VmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5zZXRSYXdWYWx1ZShh KTtyZXR1cm4gdGhpc319KTtFeHQucmVnKCJkaXNwbGF5ZmllbGQiLEV4dC5mb3JtLkRpc3BsYXlG aWVsZCk7RXh0LmZvcm0uQ29tYm9Cb3g9RXh0LmV4dGVuZChFeHQuZm9ybS5UcmlnZ2VyRmllbGQs e2RlZmF1bHRBdXRvQ3JlYXRlOnt0YWc6ImlucHV0Iix0eXBlOiJ0ZXh0IixzaXplOiIyNCIsYXV0 b2NvbXBsZXRlOiJvZmYifSxsaXN0Q2xhc3M6IiIsc2VsZWN0ZWRDbGFzczoieC1jb21iby1zZWxl Y3RlZCIsbGlzdEVtcHR5VGV4dDoiIix0cmlnZ2VyQ2xhc3M6IngtZm9ybS1hcnJvdy10cmlnZ2Vy IixzaGFkb3c6InNpZGVzIixsaXN0QWxpZ246InRsLWJsPyIsbWF4SGVpZ2h0OjMwMCxtaW5IZWln aHQ6OTAsdHJpZ2dlckFjdGlvbjoicXVlcnkiLG1pbkNoYXJzOjQsdHlwZUFoZWFkOmZhbHNlLHF1 ZXJ5RGVsYXk6NTAwLHBhZ2VTaXplOjAsc2VsZWN0T25Gb2N1czpmYWxzZSxxdWVyeVBhcmFtOiJx dWVyeSIsbG9hZGluZ1RleHQ6IkxvYWRpbmcuLi4iLHJlc2l6YWJsZTpmYWxzZSxoYW5kbGVIZWln aHQ6OCxhbGxRdWVyeToiIixtb2RlOiJyZW1vdGUiLG1pbkxpc3RXaWR0aDo3MCxmb3JjZVNlbGVj dGlvbjpmYWxzZSx0eXBlQWhlYWREZWxheToyNTAsbGF6eUluaXQ6dHJ1ZSxpbml0Q29tcG9uZW50 OmZ1bmN0aW9uKCl7RXh0LmZvcm0uQ29tYm9Cb3guc3VwZXJjbGFzcy5pbml0Q29tcG9uZW50LmNh bGwodGhpcyk7dGhpcy5hZGRFdmVudHMoImV4cGFuZCIsImNvbGxhcHNlIiwiYmVmb3Jlc2VsZWN0 Iiwic2VsZWN0IiwiYmVmb3JlcXVlcnkiKTtpZih0aGlzLnRyYW5zZm9ybSl7dmFyIGM9RXh0Lmdl dERvbSh0aGlzLnRyYW5zZm9ybSk7aWYoIXRoaXMuaGlkZGVuTmFtZSl7dGhpcy5oaWRkZW5OYW1l PWMubmFtZX1pZighdGhpcy5zdG9yZSl7dGhpcy5tb2RlPSJsb2NhbCI7dmFyIGo9W10sZT1jLm9w dGlvbnM7Zm9yKHZhciBiPTAsYT1lLmxlbmd0aDtiPGE7YisrKXt2YXIgaD1lW2JdLGc9KGguaGFz QXR0cmlidXRlP2guaGFzQXR0cmlidXRlKCJ2YWx1ZSIpOmguZ2V0QXR0cmlidXRlTm9kZSgidmFs dWUiKS5zcGVjaWZpZWQpP2gudmFsdWU6aC50ZXh0O2lmKGguc2VsZWN0ZWQmJkV4dC5pc0VtcHR5 KHRoaXMudmFsdWUsdHJ1ZSkpe3RoaXMudmFsdWU9Z31qLnB1c2goW2csaC50ZXh0XSl9dGhpcy5z dG9yZT1uZXcgRXh0LmRhdGEuQXJyYXlTdG9yZSh7aWQ6MCxmaWVsZHM6WyJ2YWx1ZSIsInRleHQi XSxkYXRhOmosYXV0b0Rlc3Ryb3k6dHJ1ZX0pO3RoaXMudmFsdWVGaWVsZD0idmFsdWUiO3RoaXMu ZGlzcGxheUZpZWxkPSJ0ZXh0In1jLm5hbWU9RXh0LmlkKCk7aWYoIXRoaXMubGF6eVJlbmRlcil7 dGhpcy50YXJnZXQ9dHJ1ZTt0aGlzLmVsPUV4dC5Eb21IZWxwZXIuaW5zZXJ0QmVmb3JlKGMsdGhp cy5hdXRvQ3JlYXRlfHx0aGlzLmRlZmF1bHRBdXRvQ3JlYXRlKTt0aGlzLnJlbmRlcih0aGlzLmVs LnBhcmVudE5vZGUsYyk7RXh0LnJlbW92ZU5vZGUoYyl9ZWxzZXtFeHQucmVtb3ZlTm9kZShjKX19 ZWxzZXtpZih0aGlzLnN0b3JlKXt0aGlzLnN0b3JlPUV4dC5TdG9yZU1nci5sb29rdXAodGhpcy5z dG9yZSk7aWYodGhpcy5zdG9yZS5hdXRvQ3JlYXRlZCl7dGhpcy5kaXNwbGF5RmllbGQ9dGhpcy52 YWx1ZUZpZWxkPSJmaWVsZDEiO2lmKCF0aGlzLnN0b3JlLmV4cGFuZERhdGEpe3RoaXMuZGlzcGxh eUZpZWxkPSJmaWVsZDIifXRoaXMubW9kZT0ibG9jYWwifX19dGhpcy5zZWxlY3RlZEluZGV4PS0x O2lmKHRoaXMubW9kZT09ImxvY2FsIil7aWYoIUV4dC5pc0RlZmluZWQodGhpcy5pbml0aWFsQ29u ZmlnLnF1ZXJ5RGVsYXkpKXt0aGlzLnF1ZXJ5RGVsYXk9MTB9aWYoIUV4dC5pc0RlZmluZWQodGhp cy5pbml0aWFsQ29uZmlnLm1pbkNoYXJzKSl7dGhpcy5taW5DaGFycz0wfX19LG9uUmVuZGVyOmZ1 bmN0aW9uKGIsYSl7RXh0LmZvcm0uQ29tYm9Cb3guc3VwZXJjbGFzcy5vblJlbmRlci5jYWxsKHRo aXMsYixhKTtpZih0aGlzLmhpZGRlbk5hbWUpe3RoaXMuaGlkZGVuRmllbGQ9dGhpcy5lbC5pbnNl cnRTaWJsaW5nKHt0YWc6ImlucHV0Iix0eXBlOiJoaWRkZW4iLG5hbWU6dGhpcy5oaWRkZW5OYW1l LGlkOih0aGlzLmhpZGRlbklkfHx0aGlzLmhpZGRlbk5hbWUpfSwiYmVmb3JlIix0cnVlKTt0aGlz LmVsLmRvbS5yZW1vdmVBdHRyaWJ1dGUoIm5hbWUiKX1pZihFeHQuaXNHZWNrbyl7dGhpcy5lbC5k b20uc2V0QXR0cmlidXRlKCJhdXRvY29tcGxldGUiLCJvZmYiKX1pZighdGhpcy5sYXp5SW5pdCl7 dGhpcy5pbml0TGlzdCgpfWVsc2V7dGhpcy5vbigiZm9jdXMiLHRoaXMuaW5pdExpc3QsdGhpcyx7 c2luZ2xlOnRydWV9KX19LGluaXRWYWx1ZTpmdW5jdGlvbigpe0V4dC5mb3JtLkNvbWJvQm94LnN1 cGVyY2xhc3MuaW5pdFZhbHVlLmNhbGwodGhpcyk7aWYodGhpcy5oaWRkZW5GaWVsZCl7dGhpcy5o aWRkZW5GaWVsZC52YWx1ZT1FeHQuaXNEZWZpbmVkKHRoaXMuaGlkZGVuVmFsdWUpP3RoaXMuaGlk ZGVuVmFsdWU6RXh0LmlzRGVmaW5lZCh0aGlzLnZhbHVlKT90aGlzLnZhbHVlOiIifX0saW5pdExp c3Q6ZnVuY3Rpb24oKXtpZighdGhpcy5saXN0KXt2YXIgYT0ieC1jb21iby1saXN0Ijt0aGlzLmxp c3Q9bmV3IEV4dC5MYXllcih7cGFyZW50RWw6dGhpcy5nZXRMaXN0UGFyZW50KCksc2hhZG93OnRo aXMuc2hhZG93LGNsczpbYSx0aGlzLmxpc3RDbGFzc10uam9pbigiICIpLGNvbnN0cmFpbjpmYWxz ZX0pO3ZhciBiPXRoaXMubGlzdFdpZHRofHxNYXRoLm1heCh0aGlzLndyYXAuZ2V0V2lkdGgoKSx0 aGlzLm1pbkxpc3RXaWR0aCk7dGhpcy5saXN0LnNldFNpemUoYiwwKTt0aGlzLmxpc3Quc3dhbGxv d0V2ZW50KCJtb3VzZXdoZWVsIik7dGhpcy5hc3NldEhlaWdodD0wO2lmKHRoaXMuc3luY0ZvbnQh PT1mYWxzZSl7dGhpcy5saXN0LnNldFN0eWxlKCJmb250LXNpemUiLHRoaXMuZWwuZ2V0U3R5bGUo ImZvbnQtc2l6ZSIpKX1pZih0aGlzLnRpdGxlKXt0aGlzLmhlYWRlcj10aGlzLmxpc3QuY3JlYXRl Q2hpbGQoe2NsczphKyItaGQiLGh0bWw6dGhpcy50aXRsZX0pO3RoaXMuYXNzZXRIZWlnaHQrPXRo aXMuaGVhZGVyLmdldEhlaWdodCgpfXRoaXMuaW5uZXJMaXN0PXRoaXMubGlzdC5jcmVhdGVDaGls ZCh7Y2xzOmErIi1pbm5lciJ9KTt0aGlzLm1vbih0aGlzLmlubmVyTGlzdCwibW91c2VvdmVyIix0 aGlzLm9uVmlld092ZXIsdGhpcyk7dGhpcy5tb24odGhpcy5pbm5lckxpc3QsIm1vdXNlbW92ZSIs dGhpcy5vblZpZXdNb3ZlLHRoaXMpO3RoaXMuaW5uZXJMaXN0LnNldFdpZHRoKGItdGhpcy5saXN0 LmdldEZyYW1lV2lkdGgoImxyIikpO2lmKHRoaXMucGFnZVNpemUpe3RoaXMuZm9vdGVyPXRoaXMu bGlzdC5jcmVhdGVDaGlsZCh7Y2xzOmErIi1mdCJ9KTt0aGlzLnBhZ2VUYj1uZXcgRXh0LlBhZ2lu Z1Rvb2xiYXIoe3N0b3JlOnRoaXMuc3RvcmUscGFnZVNpemU6dGhpcy5wYWdlU2l6ZSxyZW5kZXJU bzp0aGlzLmZvb3Rlcn0pO3RoaXMuYXNzZXRIZWlnaHQrPXRoaXMuZm9vdGVyLmdldEhlaWdodCgp fWlmKCF0aGlzLnRwbCl7dGhpcy50cGw9Jzx0cGwgZm9yPSIuIj48ZGl2IGNsYXNzPSInK2ErJy1p dGVtIj57Jyt0aGlzLmRpc3BsYXlGaWVsZCsifTwvZGl2PjwvdHBsPiJ9dGhpcy52aWV3PW5ldyBF eHQuRGF0YVZpZXcoe2FwcGx5VG86dGhpcy5pbm5lckxpc3QsdHBsOnRoaXMudHBsLHNpbmdsZVNl bGVjdDp0cnVlLHNlbGVjdGVkQ2xhc3M6dGhpcy5zZWxlY3RlZENsYXNzLGl0ZW1TZWxlY3Rvcjp0 aGlzLml0ZW1TZWxlY3Rvcnx8Ii4iK2ErIi1pdGVtIixlbXB0eVRleHQ6dGhpcy5saXN0RW1wdHlU ZXh0fSk7dGhpcy5tb24odGhpcy52aWV3LCJjbGljayIsdGhpcy5vblZpZXdDbGljayx0aGlzKTt0 aGlzLmJpbmRTdG9yZSh0aGlzLnN0b3JlLHRydWUpO2lmKHRoaXMucmVzaXphYmxlKXt0aGlzLnJl c2l6ZXI9bmV3IEV4dC5SZXNpemFibGUodGhpcy5saXN0LHtwaW5uZWQ6dHJ1ZSxoYW5kbGVzOiJz ZSJ9KTt0aGlzLm1vbih0aGlzLnJlc2l6ZXIsInJlc2l6ZSIsZnVuY3Rpb24oZSxjLGQpe3RoaXMu bWF4SGVpZ2h0PWQtdGhpcy5oYW5kbGVIZWlnaHQtdGhpcy5saXN0LmdldEZyYW1lV2lkdGgoInRi IiktdGhpcy5hc3NldEhlaWdodDt0aGlzLmxpc3RXaWR0aD1jO3RoaXMuaW5uZXJMaXN0LnNldFdp ZHRoKGMtdGhpcy5saXN0LmdldEZyYW1lV2lkdGgoImxyIikpO3RoaXMucmVzdHJpY3RIZWlnaHQo KX0sdGhpcyk7dGhpc1t0aGlzLnBhZ2VTaXplPyJmb290ZXIiOiJpbm5lckxpc3QiXS5zZXRTdHls ZSgibWFyZ2luLWJvdHRvbSIsdGhpcy5oYW5kbGVIZWlnaHQrInB4Iil9fX0sZ2V0TGlzdFBhcmVu dDpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5ib2R5fSxnZXRTdG9yZTpmdW5jdGlvbigpe3Jl dHVybiB0aGlzLnN0b3JlfSxiaW5kU3RvcmU6ZnVuY3Rpb24oYSxiKXtpZih0aGlzLnN0b3JlJiYh Yil7dGhpcy5zdG9yZS51bigiYmVmb3JlbG9hZCIsdGhpcy5vbkJlZm9yZUxvYWQsdGhpcyk7dGhp cy5zdG9yZS51bigibG9hZCIsdGhpcy5vbkxvYWQsdGhpcyk7dGhpcy5zdG9yZS51bigiZXhjZXB0 aW9uIix0aGlzLmNvbGxhcHNlLHRoaXMpO2lmKHRoaXMuc3RvcmUhPT1hJiZ0aGlzLnN0b3JlLmF1 dG9EZXN0cm95KXt0aGlzLnN0b3JlLmRlc3Ryb3koKX1pZighYSl7dGhpcy5zdG9yZT1udWxsO2lm KHRoaXMudmlldyl7dGhpcy52aWV3LmJpbmRTdG9yZShudWxsKX19fWlmKGEpe2lmKCFiKXt0aGlz Lmxhc3RRdWVyeT1udWxsO2lmKHRoaXMucGFnZVRiKXt0aGlzLnBhZ2VUYi5iaW5kU3RvcmUoYSl9 fXRoaXMuc3RvcmU9RXh0LlN0b3JlTWdyLmxvb2t1cChhKTt0aGlzLnN0b3JlLm9uKHtzY29wZTp0 aGlzLGJlZm9yZWxvYWQ6dGhpcy5vbkJlZm9yZUxvYWQsbG9hZDp0aGlzLm9uTG9hZCxleGNlcHRp b246dGhpcy5jb2xsYXBzZX0pO2lmKHRoaXMudmlldyl7dGhpcy52aWV3LmJpbmRTdG9yZShhKX19 fSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7RXh0LmZvcm0uQ29tYm9Cb3guc3VwZXJjbGFzcy5pbml0 RXZlbnRzLmNhbGwodGhpcyk7dGhpcy5rZXlOYXY9bmV3IEV4dC5LZXlOYXYodGhpcy5lbCx7dXA6 ZnVuY3Rpb24oYSl7dGhpcy5pbktleU1vZGU9dHJ1ZTt0aGlzLnNlbGVjdFByZXYoKX0sZG93bjpm dW5jdGlvbihhKXtpZighdGhpcy5pc0V4cGFuZGVkKCkpe3RoaXMub25UcmlnZ2VyQ2xpY2soKX1l bHNle3RoaXMuaW5LZXlNb2RlPXRydWU7dGhpcy5zZWxlY3ROZXh0KCl9fSxlbnRlcjpmdW5jdGlv bihhKXt0aGlzLm9uVmlld0NsaWNrKCk7dGhpcy5kZWxheWVkQ2hlY2s9dHJ1ZTt0aGlzLnVuc2V0 RGVsYXlDaGVjay5kZWZlcigxMCx0aGlzKX0sZXNjOmZ1bmN0aW9uKGEpe3RoaXMuY29sbGFwc2Uo KX0sdGFiOmZ1bmN0aW9uKGEpe3RoaXMub25WaWV3Q2xpY2soZmFsc2UpO3JldHVybiB0cnVlfSxz Y29wZTp0aGlzLGRvUmVsYXk6ZnVuY3Rpb24oYyxiLGEpe2lmKGE9PSJkb3duInx8dGhpcy5zY29w ZS5pc0V4cGFuZGVkKCkpe3JldHVybiBFeHQuS2V5TmF2LnByb3RvdHlwZS5kb1JlbGF5LmFwcGx5 KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdHJ1ZX0sZm9yY2VLZXlEb3duOnRydWV9KTt0aGlzLnF1 ZXJ5RGVsYXk9TWF0aC5tYXgodGhpcy5xdWVyeURlbGF5fHwxMCx0aGlzLm1vZGU9PSJsb2NhbCI/ MTA6MjUwKTt0aGlzLmRxVGFzaz1uZXcgRXh0LnV0aWwuRGVsYXllZFRhc2sodGhpcy5pbml0UXVl cnksdGhpcyk7aWYodGhpcy50eXBlQWhlYWQpe3RoaXMudGFUYXNrPW5ldyBFeHQudXRpbC5EZWxh eWVkVGFzayh0aGlzLm9uVHlwZUFoZWFkLHRoaXMpfWlmKHRoaXMuZWRpdGFibGUhPT1mYWxzZSYm IXRoaXMuZW5hYmxlS2V5RXZlbnRzKXt0aGlzLm1vbih0aGlzLmVsLCJrZXl1cCIsdGhpcy5vbktl eVVwLHRoaXMpfX0sb25EZXN0cm95OmZ1bmN0aW9uKCl7aWYodGhpcy5kcVRhc2spe3RoaXMuZHFU YXNrLmNhbmNlbCgpO3RoaXMuZHFUYXNrPW51bGx9dGhpcy5iaW5kU3RvcmUobnVsbCk7RXh0LmRl c3Ryb3kodGhpcy5yZXNpemVyLHRoaXMudmlldyx0aGlzLnBhZ2VUYix0aGlzLmxpc3QpO0V4dC5m b3JtLkNvbWJvQm94LnN1cGVyY2xhc3Mub25EZXN0cm95LmNhbGwodGhpcyl9LHVuc2V0RGVsYXlD aGVjazpmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmRlbGF5ZWRDaGVja30sZmlyZUtleTpmdW5jdGlv bihiKXt2YXIgYT1mdW5jdGlvbihjKXtpZihjLmlzTmF2S2V5UHJlc3MoKSYmIXRoaXMuaXNFeHBh bmRlZCgpJiYhdGhpcy5kZWxheWVkQ2hlY2spe3RoaXMuZmlyZUV2ZW50KCJzcGVjaWFsa2V5Iix0 aGlzLGMpfX07aWYodGhpcy5pbkVkaXRvciYmRXh0LmlzV2ViS2l0JiZiLmdldEtleSgpPT1iLlRB Qil7YS5kZWZlcigxMCx0aGlzLFtuZXcgRXh0LkV2ZW50T2JqZWN0SW1wbChiKV0pfWVsc2V7YS5j YWxsKHRoaXMsYil9fSxvblJlc2l6ZTpmdW5jdGlvbihhLGIpe0V4dC5mb3JtLkNvbWJvQm94LnN1 cGVyY2xhc3Mub25SZXNpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHRoaXMubGlzdCYmIUV4 dC5pc0RlZmluZWQodGhpcy5saXN0V2lkdGgpKXt2YXIgYz1NYXRoLm1heChhLHRoaXMubWluTGlz dFdpZHRoKTt0aGlzLmxpc3Quc2V0V2lkdGgoYyk7dGhpcy5pbm5lckxpc3Quc2V0V2lkdGgoYy10 aGlzLmxpc3QuZ2V0RnJhbWVXaWR0aCgibHIiKSl9fSxvbkVuYWJsZTpmdW5jdGlvbigpe0V4dC5m b3JtLkNvbWJvQm94LnN1cGVyY2xhc3Mub25FbmFibGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lm KHRoaXMuaGlkZGVuRmllbGQpe3RoaXMuaGlkZGVuRmllbGQuZGlzYWJsZWQ9ZmFsc2V9fSxvbkRp c2FibGU6ZnVuY3Rpb24oKXtFeHQuZm9ybS5Db21ib0JveC5zdXBlcmNsYXNzLm9uRGlzYWJsZS5h cHBseSh0aGlzLGFyZ3VtZW50cyk7aWYodGhpcy5oaWRkZW5GaWVsZCl7dGhpcy5oaWRkZW5GaWVs ZC5kaXNhYmxlZD10cnVlfX0sb25CZWZvcmVMb2FkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaGFzRm9j dXMpe3JldHVybn10aGlzLmlubmVyTGlzdC51cGRhdGUodGhpcy5sb2FkaW5nVGV4dD8nPGRpdiBj bGFzcz0ibG9hZGluZy1pbmRpY2F0b3IiPicrdGhpcy5sb2FkaW5nVGV4dCsiPC9kaXY+IjoiIik7 dGhpcy5yZXN0cmljdEhlaWdodCgpO3RoaXMuc2VsZWN0ZWRJbmRleD0tMX0sb25Mb2FkOmZ1bmN0 aW9uKCl7aWYoIXRoaXMuaGFzRm9jdXMpe3JldHVybn1pZih0aGlzLnN0b3JlLmdldENvdW50KCk+ MCl7dGhpcy5leHBhbmQoKTt0aGlzLnJlc3RyaWN0SGVpZ2h0KCk7aWYodGhpcy5sYXN0UXVlcnk9 PXRoaXMuYWxsUXVlcnkpe2lmKHRoaXMuZWRpdGFibGUpe3RoaXMuZWwuZG9tLnNlbGVjdCgpfWlm KCF0aGlzLnNlbGVjdEJ5VmFsdWUodGhpcy52YWx1ZSx0cnVlKSl7dGhpcy5zZWxlY3QoMCx0cnVl KX19ZWxzZXt0aGlzLnNlbGVjdE5leHQoKTtpZih0aGlzLnR5cGVBaGVhZCYmdGhpcy5sYXN0S2V5 IT1FeHQuRXZlbnRPYmplY3QuQkFDS1NQQUNFJiZ0aGlzLmxhc3RLZXkhPUV4dC5FdmVudE9iamVj dC5ERUxFVEUpe3RoaXMudGFUYXNrLmRlbGF5KHRoaXMudHlwZUFoZWFkRGVsYXkpfX19ZWxzZXt0 aGlzLm9uRW1wdHlSZXN1bHRzKCl9fSxvblR5cGVBaGVhZDpmdW5jdGlvbigpe2lmKHRoaXMuc3Rv cmUuZ2V0Q291bnQoKT4wKXt2YXIgYj10aGlzLnN0b3JlLmdldEF0KDApO3ZhciBjPWIuZGF0YVt0 aGlzLmRpc3BsYXlGaWVsZF07dmFyIGE9Yy5sZW5ndGg7dmFyIGQ9dGhpcy5nZXRSYXdWYWx1ZSgp Lmxlbmd0aDtpZihkIT1hKXt0aGlzLnNldFJhd1ZhbHVlKGMpO3RoaXMuc2VsZWN0VGV4dChkLGMu bGVuZ3RoKX19fSxvblNlbGVjdDpmdW5jdGlvbihhLGIpe2lmKHRoaXMuZmlyZUV2ZW50KCJiZWZv cmVzZWxlY3QiLHRoaXMsYSxiKSE9PWZhbHNlKXt0aGlzLnNldFZhbHVlKGEuZGF0YVt0aGlzLnZh bHVlRmllbGR8fHRoaXMuZGlzcGxheUZpZWxkXSk7dGhpcy5jb2xsYXBzZSgpO3RoaXMuZmlyZUV2 ZW50KCJzZWxlY3QiLHRoaXMsYSxiKX19LGdldE5hbWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmhp ZGRlbkZpZWxkO3JldHVybiBhJiZhLm5hbWU/YS5uYW1lOnRoaXMuaGlkZGVuTmFtZXx8RXh0LmZv cm0uQ29tYm9Cb3guc3VwZXJjbGFzcy5nZXROYW1lLmNhbGwodGhpcyl9LGdldFZhbHVlOmZ1bmN0 aW9uKCl7aWYodGhpcy52YWx1ZUZpZWxkKXtyZXR1cm4gRXh0LmlzRGVmaW5lZCh0aGlzLnZhbHVl KT90aGlzLnZhbHVlOiIifWVsc2V7cmV0dXJuIEV4dC5mb3JtLkNvbWJvQm94LnN1cGVyY2xhc3Mu Z2V0VmFsdWUuY2FsbCh0aGlzKX19LGNsZWFyVmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmhpZGRl bkZpZWxkKXt0aGlzLmhpZGRlbkZpZWxkLnZhbHVlPSIifXRoaXMuc2V0UmF3VmFsdWUoIiIpO3Ro aXMubGFzdFNlbGVjdGlvblRleHQ9IiI7dGhpcy5hcHBseUVtcHR5VGV4dCgpO3RoaXMudmFsdWU9 IiJ9LHNldFZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBjPWE7aWYodGhpcy52YWx1ZUZpZWxkKXt2YXIg Yj10aGlzLmZpbmRSZWNvcmQodGhpcy52YWx1ZUZpZWxkLGEpO2lmKGIpe2M9Yi5kYXRhW3RoaXMu ZGlzcGxheUZpZWxkXX1lbHNle2lmKEV4dC5pc0RlZmluZWQodGhpcy52YWx1ZU5vdEZvdW5kVGV4 dCkpe2M9dGhpcy52YWx1ZU5vdEZvdW5kVGV4dH19fXRoaXMubGFzdFNlbGVjdGlvblRleHQ9Yztp Zih0aGlzLmhpZGRlbkZpZWxkKXt0aGlzLmhpZGRlbkZpZWxkLnZhbHVlPWF9RXh0LmZvcm0uQ29t Ym9Cb3guc3VwZXJjbGFzcy5zZXRWYWx1ZS5jYWxsKHRoaXMsYyk7dGhpcy52YWx1ZT1hO3JldHVy biB0aGlzfSxmaW5kUmVjb3JkOmZ1bmN0aW9uKGMsYil7dmFyIGE7aWYodGhpcy5zdG9yZS5nZXRD b3VudCgpPjApe3RoaXMuc3RvcmUuZWFjaChmdW5jdGlvbihkKXtpZihkLmRhdGFbY109PWIpe2E9 ZDtyZXR1cm4gZmFsc2V9fSl9cmV0dXJuIGF9LG9uVmlld01vdmU6ZnVuY3Rpb24oYixhKXt0aGlz LmluS2V5TW9kZT1mYWxzZX0sb25WaWV3T3ZlcjpmdW5jdGlvbihkLGIpe2lmKHRoaXMuaW5LZXlN b2RlKXtyZXR1cm59dmFyIGM9dGhpcy52aWV3LmZpbmRJdGVtRnJvbUNoaWxkKGIpO2lmKGMpe3Zh ciBhPXRoaXMudmlldy5pbmRleE9mKGMpO3RoaXMuc2VsZWN0KGEsZmFsc2UpfX0sb25WaWV3Q2xp Y2s6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy52aWV3LmdldFNlbGVjdGVkSW5kZXhlcygpWzBdO3Zh ciBjPXRoaXMuc3RvcmUuZ2V0QXQoYSk7aWYoYyl7dGhpcy5vblNlbGVjdChjLGEpfWlmKGIhPT1m YWxzZSl7dGhpcy5lbC5mb2N1cygpfX0scmVzdHJpY3RIZWlnaHQ6ZnVuY3Rpb24oKXt0aGlzLmlu bmVyTGlzdC5kb20uc3R5bGUuaGVpZ2h0PSIiO3ZhciBiPXRoaXMuaW5uZXJMaXN0LmRvbTt2YXIg ZT10aGlzLmxpc3QuZ2V0RnJhbWVXaWR0aCgidGIiKSsodGhpcy5yZXNpemFibGU/dGhpcy5oYW5k bGVIZWlnaHQ6MCkrdGhpcy5hc3NldEhlaWdodDt2YXIgYz1NYXRoLm1heChiLmNsaWVudEhlaWdo dCxiLm9mZnNldEhlaWdodCxiLnNjcm9sbEhlaWdodCk7dmFyIGE9dGhpcy5nZXRQb3NpdGlvbigp WzFdLUV4dC5nZXRCb2R5KCkuZ2V0U2Nyb2xsKCkudG9wO3ZhciBnPUV4dC5saWIuRG9tLmdldFZp ZXdIZWlnaHQoKS1hLXRoaXMuZ2V0U2l6ZSgpLmhlaWdodDt2YXIgZD1NYXRoLm1heChhLGcsdGhp cy5taW5IZWlnaHR8fDApLXRoaXMubGlzdC5zaGFkb3dPZmZzZXQtZS01O2M9TWF0aC5taW4oYyxk LHRoaXMubWF4SGVpZ2h0KTt0aGlzLmlubmVyTGlzdC5zZXRIZWlnaHQoYyk7dGhpcy5saXN0LmJl Z2luVXBkYXRlKCk7dGhpcy5saXN0LnNldEhlaWdodChjK2UpO3RoaXMubGlzdC5hbGlnblRvKHRo aXMud3JhcCx0aGlzLmxpc3RBbGlnbik7dGhpcy5saXN0LmVuZFVwZGF0ZSgpfSxvbkVtcHR5UmVz dWx0czpmdW5jdGlvbigpe3RoaXMuY29sbGFwc2UoKX0saXNFeHBhbmRlZDpmdW5jdGlvbigpe3Jl dHVybiB0aGlzLmxpc3QmJnRoaXMubGlzdC5pc1Zpc2libGUoKX0sc2VsZWN0QnlWYWx1ZTpmdW5j dGlvbihhLGMpe2lmKCFFeHQuaXNFbXB0eShhLHRydWUpKXt2YXIgYj10aGlzLmZpbmRSZWNvcmQo dGhpcy52YWx1ZUZpZWxkfHx0aGlzLmRpc3BsYXlGaWVsZCxhKTtpZihiKXt0aGlzLnNlbGVjdCh0 aGlzLnN0b3JlLmluZGV4T2YoYiksYyk7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX0sc2VsZWN0 OmZ1bmN0aW9uKGEsYyl7dGhpcy5zZWxlY3RlZEluZGV4PWE7dGhpcy52aWV3LnNlbGVjdChhKTtp ZihjIT09ZmFsc2Upe3ZhciBiPXRoaXMudmlldy5nZXROb2RlKGEpO2lmKGIpe3RoaXMuaW5uZXJM aXN0LnNjcm9sbENoaWxkSW50b1ZpZXcoYixmYWxzZSl9fX0sc2VsZWN0TmV4dDpmdW5jdGlvbigp e3ZhciBhPXRoaXMuc3RvcmUuZ2V0Q291bnQoKTtpZihhPjApe2lmKHRoaXMuc2VsZWN0ZWRJbmRl eD09LTEpe3RoaXMuc2VsZWN0KDApfWVsc2V7aWYodGhpcy5zZWxlY3RlZEluZGV4PGEtMSl7dGhp cy5zZWxlY3QodGhpcy5zZWxlY3RlZEluZGV4KzEpfX19fSxzZWxlY3RQcmV2OmZ1bmN0aW9uKCl7 dmFyIGE9dGhpcy5zdG9yZS5nZXRDb3VudCgpO2lmKGE+MCl7aWYodGhpcy5zZWxlY3RlZEluZGV4 PT0tMSl7dGhpcy5zZWxlY3QoMCl9ZWxzZXtpZih0aGlzLnNlbGVjdGVkSW5kZXghPT0wKXt0aGlz LnNlbGVjdCh0aGlzLnNlbGVjdGVkSW5kZXgtMSl9fX19LG9uS2V5VXA6ZnVuY3Rpb24oYil7dmFy IGE9Yi5nZXRLZXkoKTtpZih0aGlzLmVkaXRhYmxlIT09ZmFsc2UmJihhPT1iLkJBQ0tTUEFDRXx8 IWIuaXNTcGVjaWFsS2V5KCkpKXt0aGlzLmxhc3RLZXk9YTt0aGlzLmRxVGFzay5kZWxheSh0aGlz LnF1ZXJ5RGVsYXkpfUV4dC5mb3JtLkNvbWJvQm94LnN1cGVyY2xhc3Mub25LZXlVcC5jYWxsKHRo aXMsYil9LHZhbGlkYXRlQmx1cjpmdW5jdGlvbigpe3JldHVybiAhdGhpcy5saXN0fHwhdGhpcy5s aXN0LmlzVmlzaWJsZSgpfSxpbml0UXVlcnk6ZnVuY3Rpb24oKXt0aGlzLmRvUXVlcnkodGhpcy5n ZXRSYXdWYWx1ZSgpKX0sYmVmb3JlQmx1cjpmdW5jdGlvbigpe3ZhciBiPXRoaXMuZ2V0UmF3VmFs dWUoKTtpZih0aGlzLmZvcmNlU2VsZWN0aW9uKXtpZihiLmxlbmd0aD4wJiZiIT10aGlzLmVtcHR5 VGV4dCl7dGhpcy5lbC5kb20udmFsdWU9RXh0LmlzRGVmaW5lZCh0aGlzLmxhc3RTZWxlY3Rpb25U ZXh0KT90aGlzLmxhc3RTZWxlY3Rpb25UZXh0OiIiO3RoaXMuYXBwbHlFbXB0eVRleHQoKX1lbHNl e3RoaXMuY2xlYXJWYWx1ZSgpfX1lbHNle3ZhciBhPXRoaXMuZmluZFJlY29yZCh0aGlzLmRpc3Bs YXlGaWVsZCxiKTtpZihhKXtiPWEuZ2V0KHRoaXMudmFsdWVGaWVsZHx8dGhpcy5kaXNwbGF5Rmll bGQpfXRoaXMuc2V0VmFsdWUoYil9fSxkb1F1ZXJ5OmZ1bmN0aW9uKGMsYil7Yz1FeHQuaXNFbXB0 eShjKT8iIjpjO3ZhciBhPXtxdWVyeTpjLGZvcmNlQWxsOmIsY29tYm86dGhpcyxjYW5jZWw6ZmFs c2V9O2lmKHRoaXMuZmlyZUV2ZW50KCJiZWZvcmVxdWVyeSIsYSk9PT1mYWxzZXx8YS5jYW5jZWwp e3JldHVybiBmYWxzZX1jPWEucXVlcnk7Yj1hLmZvcmNlQWxsO2lmKGI9PT10cnVlfHwoYy5sZW5n dGg+PXRoaXMubWluQ2hhcnMpKXtpZih0aGlzLmxhc3RRdWVyeSE9PWMpe3RoaXMubGFzdFF1ZXJ5 PWM7aWYodGhpcy5tb2RlPT0ibG9jYWwiKXt0aGlzLnNlbGVjdGVkSW5kZXg9LTE7aWYoYil7dGhp cy5zdG9yZS5jbGVhckZpbHRlcigpfWVsc2V7dGhpcy5zdG9yZS5maWx0ZXIodGhpcy5kaXNwbGF5 RmllbGQsYyl9dGhpcy5vbkxvYWQoKX1lbHNle3RoaXMuc3RvcmUuYmFzZVBhcmFtc1t0aGlzLnF1 ZXJ5UGFyYW1dPWM7dGhpcy5zdG9yZS5sb2FkKHtwYXJhbXM6dGhpcy5nZXRQYXJhbXMoYyl9KTt0 aGlzLmV4cGFuZCgpfX1lbHNle3RoaXMuc2VsZWN0ZWRJbmRleD0tMTt0aGlzLm9uTG9hZCgpfX19 LGdldFBhcmFtczpmdW5jdGlvbihhKXt2YXIgYj17fTtpZih0aGlzLnBhZ2VTaXplKXtiLnN0YXJ0 PTA7Yi5saW1pdD10aGlzLnBhZ2VTaXplfXJldHVybiBifSxjb2xsYXBzZTpmdW5jdGlvbigpe2lm KCF0aGlzLmlzRXhwYW5kZWQoKSl7cmV0dXJufXRoaXMubGlzdC5oaWRlKCk7RXh0LmdldERvYygp LnVuKCJtb3VzZXdoZWVsIix0aGlzLmNvbGxhcHNlSWYsdGhpcyk7RXh0LmdldERvYygpLnVuKCJt b3VzZWRvd24iLHRoaXMuY29sbGFwc2VJZix0aGlzKTt0aGlzLmZpcmVFdmVudCgiY29sbGFwc2Ui LHRoaXMpfSxjb2xsYXBzZUlmOmZ1bmN0aW9uKGEpe2lmKCFhLndpdGhpbih0aGlzLndyYXApJiYh YS53aXRoaW4odGhpcy5saXN0KSl7dGhpcy5jb2xsYXBzZSgpfX0sZXhwYW5kOmZ1bmN0aW9uKCl7 aWYodGhpcy5pc0V4cGFuZGVkKCl8fCF0aGlzLmhhc0ZvY3VzKXtyZXR1cm59dGhpcy5saXN0LmFs aWduVG8odGhpcy53cmFwLHRoaXMubGlzdEFsaWduKTt0aGlzLmxpc3Quc2hvdygpO2lmKEV4dC5p c0dlY2tvMil7dGhpcy5pbm5lckxpc3Quc2V0T3ZlcmZsb3coImF1dG8iKX1FeHQuZ2V0RG9jKCku b24oe3Njb3BlOnRoaXMsbW91c2V3aGVlbDp0aGlzLmNvbGxhcHNlSWYsbW91c2Vkb3duOnRoaXMu Y29sbGFwc2VJZn0pO3RoaXMuZmlyZUV2ZW50KCJleHBhbmQiLHRoaXMpfSxvblRyaWdnZXJDbGlj azpmdW5jdGlvbigpe2lmKHRoaXMuZGlzYWJsZWQpe3JldHVybn1pZih0aGlzLmlzRXhwYW5kZWQo KSl7dGhpcy5jb2xsYXBzZSgpO3RoaXMuZWwuZm9jdXMoKX1lbHNle3RoaXMub25Gb2N1cyh7fSk7 aWYodGhpcy50cmlnZ2VyQWN0aW9uPT0iYWxsIil7dGhpcy5kb1F1ZXJ5KHRoaXMuYWxsUXVlcnks dHJ1ZSl9ZWxzZXt0aGlzLmRvUXVlcnkodGhpcy5nZXRSYXdWYWx1ZSgpKX10aGlzLmVsLmZvY3Vz KCl9fX0pO0V4dC5yZWcoImNvbWJvIixFeHQuZm9ybS5Db21ib0JveCk7RXh0LmZvcm0uQ2hlY2ti b3g9RXh0LmV4dGVuZChFeHQuZm9ybS5GaWVsZCx7Zm9jdXNDbGFzczp1bmRlZmluZWQsZmllbGRD bGFzczoieC1mb3JtLWZpZWxkIixjaGVja2VkOmZhbHNlLGRlZmF1bHRBdXRvQ3JlYXRlOnt0YWc6 ImlucHV0Iix0eXBlOiJjaGVja2JveCIsYXV0b2NvbXBsZXRlOiJvZmYifSxhY3Rpb25Nb2RlOiJ3 cmFwIixpbml0Q29tcG9uZW50OmZ1bmN0aW9uKCl7RXh0LmZvcm0uQ2hlY2tib3guc3VwZXJjbGFz cy5pbml0Q29tcG9uZW50LmNhbGwodGhpcyk7dGhpcy5hZGRFdmVudHMoImNoZWNrIil9LG9uUmVz aXplOmZ1bmN0aW9uKCl7RXh0LmZvcm0uQ2hlY2tib3guc3VwZXJjbGFzcy5vblJlc2l6ZS5hcHBs eSh0aGlzLGFyZ3VtZW50cyk7aWYoIXRoaXMuYm94TGFiZWwmJiF0aGlzLmZpZWxkTGFiZWwpe3Ro aXMuZWwuYWxpZ25Ubyh0aGlzLndyYXAsImMtYyIpfX0saW5pdEV2ZW50czpmdW5jdGlvbigpe0V4 dC5mb3JtLkNoZWNrYm94LnN1cGVyY2xhc3MuaW5pdEV2ZW50cy5jYWxsKHRoaXMpO3RoaXMubW9u KHRoaXMuZWwsImNsaWNrIix0aGlzLm9uQ2xpY2ssdGhpcyk7dGhpcy5tb24odGhpcy5lbCwiY2hh bmdlIix0aGlzLm9uQ2xpY2ssdGhpcyl9LGdldFJlc2l6ZUVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRo aXMud3JhcH0sZ2V0UG9zaXRpb25FbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLndyYXB9LG1hcmtJ bnZhbGlkOkV4dC5lbXB0eUZuLGNsZWFySW52YWxpZDpFeHQuZW1wdHlGbixvblJlbmRlcjpmdW5j dGlvbihiLGEpe0V4dC5mb3JtLkNoZWNrYm94LnN1cGVyY2xhc3Mub25SZW5kZXIuY2FsbCh0aGlz LGIsYSk7aWYodGhpcy5pbnB1dFZhbHVlIT09dW5kZWZpbmVkKXt0aGlzLmVsLmRvbS52YWx1ZT10 aGlzLmlucHV0VmFsdWV9dGhpcy53cmFwPXRoaXMuZWwud3JhcCh7Y2xzOiJ4LWZvcm0tY2hlY2st d3JhcCJ9KTtpZih0aGlzLmJveExhYmVsKXt0aGlzLndyYXAuY3JlYXRlQ2hpbGQoe3RhZzoibGFi ZWwiLGh0bWxGb3I6dGhpcy5lbC5pZCxjbHM6IngtZm9ybS1jYi1sYWJlbCIsaHRtbDp0aGlzLmJv eExhYmVsfSl9aWYodGhpcy5jaGVja2VkKXt0aGlzLnNldFZhbHVlKHRydWUpfWVsc2V7dGhpcy5j aGVja2VkPXRoaXMuZWwuZG9tLmNoZWNrZWR9fSxvbkRlc3Ryb3k6ZnVuY3Rpb24oKXtFeHQuZGVz dHJveSh0aGlzLndyYXApO0V4dC5mb3JtLkNoZWNrYm94LnN1cGVyY2xhc3Mub25EZXN0cm95LmNh bGwodGhpcyl9LGluaXRWYWx1ZTpmdW5jdGlvbigpe3RoaXMub3JpZ2luYWxWYWx1ZT10aGlzLmdl dFZhbHVlKCl9LGdldFZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5yZW5kZXJlZCl7cmV0dXJuIHRo aXMuZWwuZG9tLmNoZWNrZWR9cmV0dXJuIGZhbHNlfSxvbkNsaWNrOmZ1bmN0aW9uKCl7aWYodGhp cy5lbC5kb20uY2hlY2tlZCE9dGhpcy5jaGVja2VkKXt0aGlzLnNldFZhbHVlKHRoaXMuZWwuZG9t LmNoZWNrZWQpfX0sc2V0VmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jaGVja2VkO3RoaXMu Y2hlY2tlZD0oYT09PXRydWV8fGE9PT0idHJ1ZSJ8fGE9PSIxInx8U3RyaW5nKGEpLnRvTG93ZXJD YXNlKCk9PSJvbiIpO2lmKHRoaXMucmVuZGVyZWQpe3RoaXMuZWwuZG9tLmNoZWNrZWQ9dGhpcy5j aGVja2VkO3RoaXMuZWwuZG9tLmRlZmF1bHRDaGVja2VkPXRoaXMuY2hlY2tlZH1pZihiIT10aGlz LmNoZWNrZWQpe3RoaXMuZmlyZUV2ZW50KCJjaGVjayIsdGhpcyx0aGlzLmNoZWNrZWQpO2lmKHRo aXMuaGFuZGxlcil7dGhpcy5oYW5kbGVyLmNhbGwodGhpcy5zY29wZXx8dGhpcyx0aGlzLHRoaXMu Y2hlY2tlZCl9fXJldHVybiB0aGlzfX0pO0V4dC5yZWcoImNoZWNrYm94IixFeHQuZm9ybS5DaGVj a2JveCk7RXh0LmZvcm0uQ2hlY2tib3hHcm91cD1FeHQuZXh0ZW5kKEV4dC5mb3JtLkZpZWxkLHtj b2x1bW5zOiJhdXRvIix2ZXJ0aWNhbDpmYWxzZSxhbGxvd0JsYW5rOnRydWUsYmxhbmtUZXh0OiJZ b3UgbXVzdCBzZWxlY3QgYXQgbGVhc3Qgb25lIGl0ZW0gaW4gdGhpcyBncm91cCIsZGVmYXVsdFR5 cGU6ImNoZWNrYm94Iixncm91cENsczoieC1mb3JtLWNoZWNrLWdyb3VwIixpbml0Q29tcG9uZW50 OmZ1bmN0aW9uKCl7dGhpcy5hZGRFdmVudHMoImNoYW5nZSIpO0V4dC5mb3JtLkNoZWNrYm94R3Jv dXAuc3VwZXJjbGFzcy5pbml0Q29tcG9uZW50LmNhbGwodGhpcyl9LG9uUmVuZGVyOmZ1bmN0aW9u KGosZyl7aWYoIXRoaXMuZWwpe3ZhciBwPXtjbHM6dGhpcy5ncm91cENscyxsYXlvdXQ6ImNvbHVt biIsYm9yZGVyOmZhbHNlLHJlbmRlclRvOmp9O3ZhciBhPXtkZWZhdWx0VHlwZTp0aGlzLmRlZmF1 bHRUeXBlLGxheW91dDoiZm9ybSIsYm9yZGVyOmZhbHNlLGRlZmF1bHRzOntoaWRlTGFiZWw6dHJ1 ZSxhbmNob3I6IjEwMCUifX07aWYodGhpcy5pdGVtc1swXS5pdGVtcyl7RXh0LmFwcGx5KHAse2xh eW91dENvbmZpZzp7Y29sdW1uczp0aGlzLml0ZW1zLmxlbmd0aH0sZGVmYXVsdHM6dGhpcy5kZWZh dWx0cyxpdGVtczp0aGlzLml0ZW1zfSk7Zm9yKHZhciBlPTAsbT10aGlzLml0ZW1zLmxlbmd0aDtl PG07ZSsrKXtFeHQuYXBwbHlJZih0aGlzLml0ZW1zW2VdLGEpfX1lbHNle3ZhciBkLG49W107aWYo dHlwZW9mIHRoaXMuY29sdW1ucz09InN0cmluZyIpe3RoaXMuY29sdW1ucz10aGlzLml0ZW1zLmxl bmd0aH1pZighRXh0LmlzQXJyYXkodGhpcy5jb2x1bW5zKSl7dmFyIGs9W107Zm9yKHZhciBlPTA7 ZTx0aGlzLmNvbHVtbnM7ZSsrKXtrLnB1c2goKDEwMC90aGlzLmNvbHVtbnMpKjAuMDEpfXRoaXMu Y29sdW1ucz1rfWQ9dGhpcy5jb2x1bW5zLmxlbmd0aDtmb3IodmFyIGU9MDtlPGQ7ZSsrKXt2YXIg Yj1FeHQuYXBwbHkoe2l0ZW1zOltdfSxhKTtiW3RoaXMuY29sdW1uc1tlXTw9MT8iY29sdW1uV2lk dGgiOiJ3aWR0aCJdPXRoaXMuY29sdW1uc1tlXTtpZih0aGlzLmRlZmF1bHRzKXtiLmRlZmF1bHRz PUV4dC5hcHBseShiLmRlZmF1bHRzfHx7fSx0aGlzLmRlZmF1bHRzKX1uLnB1c2goYil9aWYodGhp cy52ZXJ0aWNhbCl7dmFyIHI9TWF0aC5jZWlsKHRoaXMuaXRlbXMubGVuZ3RoL2QpLG89MDtmb3Io dmFyIGU9MCxtPXRoaXMuaXRlbXMubGVuZ3RoO2U8bTtlKyspe2lmKGU+MCYmZSVyPT0wKXtvKyt9 aWYodGhpcy5pdGVtc1tlXS5maWVsZExhYmVsKXt0aGlzLml0ZW1zW2VdLmhpZGVMYWJlbD1mYWxz ZX1uW29dLml0ZW1zLnB1c2godGhpcy5pdGVtc1tlXSl9fWVsc2V7Zm9yKHZhciBlPTAsbT10aGlz Lml0ZW1zLmxlbmd0aDtlPG07ZSsrKXt2YXIgcT1lJWQ7aWYodGhpcy5pdGVtc1tlXS5maWVsZExh YmVsKXt0aGlzLml0ZW1zW2VdLmhpZGVMYWJlbD1mYWxzZX1uW3FdLml0ZW1zLnB1c2godGhpcy5p dGVtc1tlXSl9fUV4dC5hcHBseShwLHtsYXlvdXRDb25maWc6e2NvbHVtbnM6ZH0saXRlbXM6bn0p fXRoaXMucGFuZWw9bmV3IEV4dC5QYW5lbChwKTt0aGlzLnBhbmVsLm93bmVyQ3Q9dGhpczt0aGlz LmVsPXRoaXMucGFuZWwuZ2V0RWwoKTtpZih0aGlzLmZvcklkJiZ0aGlzLml0ZW1DbHMpe3ZhciBj PXRoaXMuZWwudXAodGhpcy5pdGVtQ2xzKS5jaGlsZCgibGFiZWwiLHRydWUpO2lmKGMpe2Muc2V0 QXR0cmlidXRlKCJodG1sRm9yIix0aGlzLmZvcklkKX19dmFyIGg9dGhpcy5wYW5lbC5maW5kQnko ZnVuY3Rpb24oaSl7cmV0dXJuIGkuaXNGb3JtRmllbGR9LHRoaXMpO3RoaXMuaXRlbXM9bmV3IEV4 dC51dGlsLk1peGVkQ29sbGVjdGlvbigpO3RoaXMuaXRlbXMuYWRkQWxsKGgpfUV4dC5mb3JtLkNo ZWNrYm94R3JvdXAuc3VwZXJjbGFzcy5vblJlbmRlci5jYWxsKHRoaXMsaixnKX0sYWZ0ZXJSZW5k ZXI6ZnVuY3Rpb24oKXtFeHQuZm9ybS5DaGVja2JveEdyb3VwLnN1cGVyY2xhc3MuYWZ0ZXJSZW5k ZXIuY2FsbCh0aGlzKTtpZih0aGlzLnZhbHVlcyl7dGhpcy5zZXRWYWx1ZS5hcHBseSh0aGlzLHRo aXMudmFsdWVzKTtkZWxldGUgdGhpcy52YWx1ZXN9dGhpcy5lYWNoSXRlbShmdW5jdGlvbihhKXth Lm9uKCJjaGVjayIsdGhpcy5maXJlQ2hlY2tlZCx0aGlzKTthLmluR3JvdXA9dHJ1ZX0pfSxkb0xh eW91dDpmdW5jdGlvbigpe2lmKHRoaXMucmVuZGVyZWQpe3RoaXMucGFuZWwuZm9yY2VMYXlvdXQ9 dGhpcy5vd25lckN0LmZvcmNlTGF5b3V0O3RoaXMucGFuZWwuZG9MYXlvdXQoKX19LGZpcmVDaGVj a2VkOmZ1bmN0aW9uKCl7dmFyIGE9W107dGhpcy5lYWNoSXRlbShmdW5jdGlvbihiKXtpZihiLmNo ZWNrZWQpe2EucHVzaChiKX19KTt0aGlzLmZpcmVFdmVudCgiY2hhbmdlIix0aGlzLGEpfSx2YWxp ZGF0ZVZhbHVlOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmFsbG93Qmxhbmspe3ZhciBiPXRydWU7dGhp cy5lYWNoSXRlbShmdW5jdGlvbihjKXtpZihjLmNoZWNrZWQpe3JldHVybihiPWZhbHNlKX19KTtp ZihiKXt0aGlzLm1hcmtJbnZhbGlkKHRoaXMuYmxhbmtUZXh0KTtyZXR1cm4gZmFsc2V9fXJldHVy biB0cnVlfSxvbkRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLmVhY2hJdGVtKGZ1bmN0aW9uKGEpe2Eu ZGlzYWJsZSgpfSl9LG9uRW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5lYWNoSXRlbShmdW5jdGlvbihh KXthLmVuYWJsZSgpfSl9LGRvTGF5b3V0OmZ1bmN0aW9uKCl7aWYodGhpcy5yZW5kZXJlZCl7dGhp cy5wYW5lbC5mb3JjZUxheW91dD10aGlzLm93bmVyQ3QuZm9yY2VMYXlvdXQ7dGhpcy5wYW5lbC5k b0xheW91dCgpfX0sb25SZXNpemU6ZnVuY3Rpb24oYSxiKXt0aGlzLnBhbmVsLnNldFNpemUoYSxi KTt0aGlzLnBhbmVsLmRvTGF5b3V0KCl9LHJlc2V0OmZ1bmN0aW9uKCl7RXh0LmZvcm0uQ2hlY2ti b3hHcm91cC5zdXBlcmNsYXNzLnJlc2V0LmNhbGwodGhpcyk7dGhpcy5lYWNoSXRlbShmdW5jdGlv bihhKXtpZihhLnJlc2V0KXthLnJlc2V0KCl9fSl9LHNldFZhbHVlOmZ1bmN0aW9uKGQsYyl7aWYo dGhpcy5yZW5kZXJlZCl7aWYoYXJndW1lbnRzLmxlbmd0aD09MSl7aWYoRXh0LmlzQXJyYXkoZCkp e0V4dC5lYWNoKGQsZnVuY3Rpb24oaCxlKXt2YXIgZz10aGlzLml0ZW1zLml0ZW1BdChlKTtpZihn KXtnLnNldFZhbHVlKGgpfX0sdGhpcyl9ZWxzZXtpZihFeHQuaXNPYmplY3QoZCkpe2Zvcih2YXIg YSBpbiBkKXt2YXIgYj10aGlzLmdldEJveChhKTtpZihiKXtiLnNldFZhbHVlKGRbYV0pfX19ZWxz ZXt0aGlzLnNldFZhbHVlRm9ySXRlbShkKX19fWVsc2V7dmFyIGI9dGhpcy5nZXRCb3goZCk7aWYo Yil7Yi5zZXRWYWx1ZShjKX19fWVsc2V7dGhpcy52YWx1ZXM9YXJndW1lbnRzfXJldHVybiB0aGlz fSxvbkRlc3Ryb3k6ZnVuY3Rpb24oKXtFeHQuZGVzdHJveSh0aGlzLnBhbmVsKTtFeHQuZm9ybS5D aGVja2JveEdyb3VwLnN1cGVyY2xhc3Mub25EZXN0cm95LmNhbGwodGhpcyl9LHNldFZhbHVlRm9y SXRlbTpmdW5jdGlvbihhKXthPVN0cmluZyhhKS5zcGxpdCgiLCIpO3RoaXMuZWFjaEl0ZW0oZnVu Y3Rpb24oYil7aWYoYS5pbmRleE9mKGIuaW5wdXRWYWx1ZSk+LTEpe2Iuc2V0VmFsdWUodHJ1ZSl9 fSl9LGdldEJveDpmdW5jdGlvbihiKXt2YXIgYT1udWxsO3RoaXMuZWFjaEl0ZW0oZnVuY3Rpb24o Yyl7aWYoYj09Y3x8Yy5kYXRhSW5kZXg9PWJ8fGMuaWQ9PWJ8fGMuZ2V0TmFtZSgpPT1iKXthPWM7 cmV0dXJuIGZhbHNlfX0pO3JldHVybiBhfSxnZXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBhPVtdO3Ro aXMuZWFjaEl0ZW0oZnVuY3Rpb24oYil7aWYoYi5jaGVja2VkKXthLnB1c2goYil9fSk7cmV0dXJu IGF9LGVhY2hJdGVtOmZ1bmN0aW9uKGEpe2lmKHRoaXMuaXRlbXMmJnRoaXMuaXRlbXMuZWFjaCl7 dGhpcy5pdGVtcy5lYWNoKGEsdGhpcyl9fSxpbml0VmFsdWU6RXh0LmVtcHR5Rm4sZ2V0VmFsdWU6 RXh0LmVtcHR5Rm4sZ2V0UmF3VmFsdWU6RXh0LmVtcHR5Rm4sc2V0UmF3VmFsdWU6RXh0LmVtcHR5 Rm59KTtFeHQucmVnKCJjaGVja2JveGdyb3VwIixFeHQuZm9ybS5DaGVja2JveEdyb3VwKTtFeHQu Zm9ybS5SYWRpbz1FeHQuZXh0ZW5kKEV4dC5mb3JtLkNoZWNrYm94LHtpbnB1dFR5cGU6InJhZGlv IixtYXJrSW52YWxpZDpFeHQuZW1wdHlGbixjbGVhckludmFsaWQ6RXh0LmVtcHR5Rm4sZ2V0R3Jv dXBWYWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWwudXAoImZvcm0iKXx8RXh0LmdldEJvZHko KTt2YXIgYj1hLmNoaWxkKCJpbnB1dFtuYW1lPSIrdGhpcy5lbC5kb20ubmFtZSsiXTpjaGVja2Vk Iix0cnVlKTtyZXR1cm4gYj9iLnZhbHVlOm51bGx9LG9uQ2xpY2s6ZnVuY3Rpb24oKXtpZih0aGlz LmVsLmRvbS5jaGVja2VkIT10aGlzLmNoZWNrZWQpe3ZhciBhPXRoaXMuZ2V0Q2hlY2tFbCgpLnNl bGVjdCgiaW5wdXRbbmFtZT0iK3RoaXMuZWwuZG9tLm5hbWUrIl0iKTthLmVhY2goZnVuY3Rpb24o Yil7aWYoYi5kb20uaWQ9PXRoaXMuaWQpe3RoaXMuc2V0VmFsdWUodHJ1ZSl9ZWxzZXtFeHQuZ2V0 Q21wKGIuZG9tLmlkKS5zZXRWYWx1ZShmYWxzZSl9fSx0aGlzKX19LHNldFZhbHVlOmZ1bmN0aW9u KGEpe2lmKHR5cGVvZiBhPT0iYm9vbGVhbiIpe0V4dC5mb3JtLlJhZGlvLnN1cGVyY2xhc3Muc2V0 VmFsdWUuY2FsbCh0aGlzLGEpfWVsc2V7dmFyIGI9dGhpcy5nZXRDaGVja0VsKCkuY2hpbGQoImlu cHV0W25hbWU9Iit0aGlzLmVsLmRvbS5uYW1lKyJdW3ZhbHVlPSIrYSsiXSIsdHJ1ZSk7aWYoYil7 RXh0LmdldENtcChiLmlkKS5zZXRWYWx1ZSh0cnVlKX19cmV0dXJuIHRoaXN9LGdldENoZWNrRWw6 ZnVuY3Rpb24oKXtpZih0aGlzLmluR3JvdXApe3JldHVybiB0aGlzLmVsLnVwKCIueC1mb3JtLXJh ZGlvLWdyb3VwIil9cmV0dXJuIHRoaXMuZWwudXAoImZvcm0iKXx8RXh0LmdldEJvZHkoKX19KTtF eHQucmVnKCJyYWRpbyIsRXh0LmZvcm0uUmFkaW8pO0V4dC5mb3JtLlJhZGlvR3JvdXA9RXh0LmV4 dGVuZChFeHQuZm9ybS5DaGVja2JveEdyb3VwLHthbGxvd0JsYW5rOnRydWUsYmxhbmtUZXh0OiJZ b3UgbXVzdCBzZWxlY3Qgb25lIGl0ZW0gaW4gdGhpcyBncm91cCIsZGVmYXVsdFR5cGU6InJhZGlv Iixncm91cENsczoieC1mb3JtLXJhZGlvLWdyb3VwIixnZXRWYWx1ZTpmdW5jdGlvbigpe3ZhciBh PW51bGw7dGhpcy5lYWNoSXRlbShmdW5jdGlvbihiKXtpZihiLmNoZWNrZWQpe2E9YjtyZXR1cm4g ZmFsc2V9fSk7cmV0dXJuIGF9LHNldFZhbHVlOmZ1bmN0aW9uKGMsYil7aWYodGhpcy5yZW5kZXJl ZCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXt2YXIgYT10aGlzLmdldEJveChjKTtpZihhKXthLnNl dFZhbHVlKGIpO2lmKGEuY2hlY2tlZCl7dGhpcy5lYWNoSXRlbShmdW5jdGlvbihkKXtpZihkIT09 YSl7ZC5zZXRWYWx1ZShmYWxzZSl9fSl9fX1lbHNle3RoaXMuc2V0VmFsdWVGb3JJdGVtKGMpfX1l bHNle3RoaXMudmFsdWVzPWFyZ3VtZW50c31yZXR1cm4gdGhpc30sZmlyZUNoZWNrZWQ6ZnVuY3Rp b24oKXtpZighdGhpcy5jaGVja1Rhc2spe3RoaXMuY2hlY2tUYXNrPW5ldyBFeHQudXRpbC5EZWxh eWVkVGFzayh0aGlzLmJ1ZmZlckNoZWNrZWQsdGhpcyl9dGhpcy5jaGVja1Rhc2suZGVsYXkoMTAp fSxidWZmZXJDaGVja2VkOmZ1bmN0aW9uKCl7dmFyIGE9bnVsbDt0aGlzLmVhY2hJdGVtKGZ1bmN0 aW9uKGIpe2lmKGIuY2hlY2tlZCl7YT1iO3JldHVybiBmYWxzZX19KTt0aGlzLmZpcmVFdmVudCgi Y2hhbmdlIix0aGlzLGEpfSxvbkRlc3Ryb3k6ZnVuY3Rpb24oKXtpZih0aGlzLmNoZWNrVGFzayl7 dGhpcy5jaGVja1Rhc2suY2FuY2VsKCk7dGhpcy5jaGVja1Rhc2s9bnVsbH1FeHQuZm9ybS5SYWRp b0dyb3VwLnN1cGVyY2xhc3Mub25EZXN0cm95LmNhbGwodGhpcyl9fSk7RXh0LnJlZygicmFkaW9n cm91cCIsRXh0LmZvcm0uUmFkaW9Hcm91cCk7RXh0LmZvcm0uSGlkZGVuPUV4dC5leHRlbmQoRXh0 LmZvcm0uRmllbGQse2lucHV0VHlwZToiaGlkZGVuIixvblJlbmRlcjpmdW5jdGlvbigpe0V4dC5m b3JtLkhpZGRlbi5zdXBlcmNsYXNzLm9uUmVuZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saW5p dEV2ZW50czpmdW5jdGlvbigpe3RoaXMub3JpZ2luYWxWYWx1ZT10aGlzLmdldFZhbHVlKCl9LHNl dFNpemU6RXh0LmVtcHR5Rm4sc2V0V2lkdGg6RXh0LmVtcHR5Rm4sc2V0SGVpZ2h0OkV4dC5lbXB0 eUZuLHNldFBvc2l0aW9uOkV4dC5lbXB0eUZuLHNldFBhZ2VQb3NpdGlvbjpFeHQuZW1wdHlGbixt YXJrSW52YWxpZDpFeHQuZW1wdHlGbixjbGVhckludmFsaWQ6RXh0LmVtcHR5Rm59KTtFeHQucmVn KCJoaWRkZW4iLEV4dC5mb3JtLkhpZGRlbik7RXh0LmZvcm0uQmFzaWNGb3JtPWZ1bmN0aW9uKGIs YSl7RXh0LmFwcGx5KHRoaXMsYSk7aWYoRXh0LmlzU3RyaW5nKHRoaXMucGFyYW1PcmRlcikpe3Ro aXMucGFyYW1PcmRlcj10aGlzLnBhcmFtT3JkZXIuc3BsaXQoL1tccyx8XS8pfXRoaXMuaXRlbXM9 bmV3IEV4dC51dGlsLk1peGVkQ29sbGVjdGlvbihmYWxzZSxmdW5jdGlvbihjKXtyZXR1cm4gYy5p dGVtSWR8fGMuaWR8fChjLmlkPUV4dC5pZCgpKX0pO3RoaXMuYWRkRXZlbnRzKCJiZWZvcmVhY3Rp b24iLCJhY3Rpb25mYWlsZWQiLCJhY3Rpb25jb21wbGV0ZSIpO2lmKGIpe3RoaXMuaW5pdEVsKGIp fUV4dC5mb3JtLkJhc2ljRm9ybS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9O0V4 dC5leHRlbmQoRXh0LmZvcm0uQmFzaWNGb3JtLEV4dC51dGlsLk9ic2VydmFibGUse3RpbWVvdXQ6 MzAscGFyYW1PcmRlcjp1bmRlZmluZWQscGFyYW1zQXNIYXNoOmZhbHNlLGFjdGl2ZUFjdGlvbjpu dWxsLHRyYWNrUmVzZXRPbkxvYWQ6ZmFsc2UsaW5pdEVsOmZ1bmN0aW9uKGEpe3RoaXMuZWw9RXh0 LmdldChhKTt0aGlzLmlkPXRoaXMuZWwuaWR8fEV4dC5pZCgpO2lmKCF0aGlzLnN0YW5kYXJkU3Vi bWl0KXt0aGlzLmVsLm9uKCJzdWJtaXQiLHRoaXMub25TdWJtaXQsdGhpcyl9dGhpcy5lbC5hZGRD bGFzcygieC1mb3JtIil9LGdldEVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWx9LG9uU3VibWl0 OmZ1bmN0aW9uKGEpe2Euc3RvcEV2ZW50KCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLml0ZW1z LmVhY2goZnVuY3Rpb24oYSl7RXh0LmRlc3Ryb3koYSl9KTtpZih0aGlzLmVsKXt0aGlzLmVsLnJl bW92ZUFsbExpc3RlbmVycygpO3RoaXMuZWwucmVtb3ZlKCl9dGhpcy5wdXJnZUxpc3RlbmVycygp fSxpc1ZhbGlkOmZ1bmN0aW9uKCl7dmFyIGE9dHJ1ZTt0aGlzLml0ZW1zLmVhY2goZnVuY3Rpb24o Yil7aWYoIWIudmFsaWRhdGUoKSl7YT1mYWxzZX19KTtyZXR1cm4gYX0saXNEaXJ0eTpmdW5jdGlv bigpe3ZhciBhPWZhbHNlO3RoaXMuaXRlbXMuZWFjaChmdW5jdGlvbihiKXtpZihiLmlzRGlydHko KSl7YT10cnVlO3JldHVybiBmYWxzZX19KTtyZXR1cm4gYX0sZG9BY3Rpb246ZnVuY3Rpb24oYixh KXtpZihFeHQuaXNTdHJpbmcoYikpe2I9bmV3IEV4dC5mb3JtLkFjdGlvbi5BQ1RJT05fVFlQRVNb Yl0odGhpcyxhKX1pZih0aGlzLmZpcmVFdmVudCgiYmVmb3JlYWN0aW9uIix0aGlzLGIpIT09ZmFs c2Upe3RoaXMuYmVmb3JlQWN0aW9uKGIpO2IucnVuLmRlZmVyKDEwMCxiKX1yZXR1cm4gdGhpc30s c3VibWl0OmZ1bmN0aW9uKGIpe2lmKHRoaXMuc3RhbmRhcmRTdWJtaXQpe3ZhciBhPXRoaXMuaXNW YWxpZCgpO2lmKGEpe3RoaXMuZWwuZG9tLnN1Ym1pdCgpfXJldHVybiBhfXZhciBjPVN0cmluZy5m b3JtYXQoInswfXN1Ym1pdCIsdGhpcy5hcGk/ImRpcmVjdCI6IiIpO3RoaXMuZG9BY3Rpb24oYyxi KTtyZXR1cm4gdGhpc30sbG9hZDpmdW5jdGlvbihhKXt2YXIgYj1TdHJpbmcuZm9ybWF0KCJ7MH1s b2FkIix0aGlzLmFwaT8iZGlyZWN0IjoiIik7dGhpcy5kb0FjdGlvbihiLGEpO3JldHVybiB0aGlz fSx1cGRhdGVSZWNvcmQ6ZnVuY3Rpb24oYil7Yi5iZWdpbkVkaXQoKTt2YXIgYT1iLmZpZWxkczth LmVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy5maW5kRmllbGQoYy5uYW1lKTtpZihkKXtiLnNl dChjLm5hbWUsZC5nZXRWYWx1ZSgpKX19LHRoaXMpO2IuZW5kRWRpdCgpO3JldHVybiB0aGlzfSxs b2FkUmVjb3JkOmZ1bmN0aW9uKGEpe3RoaXMuc2V0VmFsdWVzKGEuZGF0YSk7cmV0dXJuIHRoaXN9 LGJlZm9yZUFjdGlvbjpmdW5jdGlvbihhKXt2YXIgYj1hLm9wdGlvbnM7aWYoYi53YWl0TXNnKXtp Zih0aGlzLndhaXRNc2dUYXJnZXQ9PT10cnVlKXt0aGlzLmVsLm1hc2soYi53YWl0TXNnLCJ4LW1h c2stbG9hZGluZyIpfWVsc2V7aWYodGhpcy53YWl0TXNnVGFyZ2V0KXt0aGlzLndhaXRNc2dUYXJn ZXQ9RXh0LmdldCh0aGlzLndhaXRNc2dUYXJnZXQpO3RoaXMud2FpdE1zZ1RhcmdldC5tYXNrKGIu d2FpdE1zZywieC1tYXNrLWxvYWRpbmciKX1lbHNle0V4dC5NZXNzYWdlQm94LndhaXQoYi53YWl0 TXNnLGIud2FpdFRpdGxlfHx0aGlzLndhaXRUaXRsZXx8IlBsZWFzZSBXYWl0Li4uIil9fX19LGFm dGVyQWN0aW9uOmZ1bmN0aW9uKGEsYyl7dGhpcy5hY3RpdmVBY3Rpb249bnVsbDt2YXIgYj1hLm9w dGlvbnM7aWYoYi53YWl0TXNnKXtpZih0aGlzLndhaXRNc2dUYXJnZXQ9PT10cnVlKXt0aGlzLmVs LnVubWFzaygpfWVsc2V7aWYodGhpcy53YWl0TXNnVGFyZ2V0KXt0aGlzLndhaXRNc2dUYXJnZXQu dW5tYXNrKCl9ZWxzZXtFeHQuTWVzc2FnZUJveC51cGRhdGVQcm9ncmVzcygxKTtFeHQuTWVzc2Fn ZUJveC5oaWRlKCl9fX1pZihjKXtpZihiLnJlc2V0KXt0aGlzLnJlc2V0KCl9RXh0LmNhbGxiYWNr KGIuc3VjY2VzcyxiLnNjb3BlLFt0aGlzLGFdKTt0aGlzLmZpcmVFdmVudCgiYWN0aW9uY29tcGxl dGUiLHRoaXMsYSl9ZWxzZXtFeHQuY2FsbGJhY2soYi5mYWlsdXJlLGIuc2NvcGUsW3RoaXMsYV0p O3RoaXMuZmlyZUV2ZW50KCJhY3Rpb25mYWlsZWQiLHRoaXMsYSl9fSxmaW5kRmllbGQ6ZnVuY3Rp b24oYil7dmFyIGE9dGhpcy5pdGVtcy5nZXQoYik7aWYoIUV4dC5pc09iamVjdChhKSl7dGhpcy5p dGVtcy5lYWNoKGZ1bmN0aW9uKGMpe2lmKGMuaXNGb3JtRmllbGQmJihjLmRhdGFJbmRleD09Ynx8 Yy5pZD09Ynx8Yy5nZXROYW1lKCk9PWIpKXthPWM7cmV0dXJuIGZhbHNlfX0pfXJldHVybiBhfHxu dWxsfSxtYXJrSW52YWxpZDpmdW5jdGlvbihoKXtpZihFeHQuaXNBcnJheShoKSl7Zm9yKHZhciBj PTAsYT1oLmxlbmd0aDtjPGE7YysrKXt2YXIgYj1oW2NdO3ZhciBkPXRoaXMuZmluZEZpZWxkKGIu aWQpO2lmKGQpe2QubWFya0ludmFsaWQoYi5tc2cpfX19ZWxzZXt2YXIgZSxnO2ZvcihnIGluIGgp e2lmKCFFeHQuaXNGdW5jdGlvbihoW2ddKSYmKGU9dGhpcy5maW5kRmllbGQoZykpKXtlLm1hcmtJ bnZhbGlkKGhbZ10pfX19cmV0dXJuIHRoaXN9LHNldFZhbHVlczpmdW5jdGlvbihjKXtpZihFeHQu aXNBcnJheShjKSl7Zm9yKHZhciBkPTAsYT1jLmxlbmd0aDtkPGE7ZCsrKXt2YXIgYj1jW2RdO3Zh ciBlPXRoaXMuZmluZEZpZWxkKGIuaWQpO2lmKGUpe2Uuc2V0VmFsdWUoYi52YWx1ZSk7aWYodGhp cy50cmFja1Jlc2V0T25Mb2FkKXtlLm9yaWdpbmFsVmFsdWU9ZS5nZXRWYWx1ZSgpfX19fWVsc2V7 dmFyIGcsaDtmb3IoaCBpbiBjKXtpZighRXh0LmlzRnVuY3Rpb24oY1toXSkmJihnPXRoaXMuZmlu ZEZpZWxkKGgpKSl7Zy5zZXRWYWx1ZShjW2hdKTtpZih0aGlzLnRyYWNrUmVzZXRPbkxvYWQpe2cu b3JpZ2luYWxWYWx1ZT1nLmdldFZhbHVlKCl9fX19cmV0dXJuIHRoaXN9LGdldFZhbHVlczpmdW5j dGlvbihiKXt2YXIgYT1FeHQubGliLkFqYXguc2VyaWFsaXplRm9ybSh0aGlzLmVsLmRvbSk7aWYo Yj09PXRydWUpe3JldHVybiBhfXJldHVybiBFeHQudXJsRGVjb2RlKGEpfSxnZXRGaWVsZFZhbHVl czpmdW5jdGlvbigpe3ZhciBhPXt9O3RoaXMuaXRlbXMuZWFjaChmdW5jdGlvbihiKXthW2IuZ2V0 TmFtZSgpXT1iLmdldFZhbHVlKCl9KTtyZXR1cm4gYX0sY2xlYXJJbnZhbGlkOmZ1bmN0aW9uKCl7 dGhpcy5pdGVtcy5lYWNoKGZ1bmN0aW9uKGEpe2EuY2xlYXJJbnZhbGlkKCl9KTtyZXR1cm4gdGhp c30scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLml0ZW1zLmVhY2goZnVuY3Rpb24oYSl7YS5yZXNldCgp fSk7cmV0dXJuIHRoaXN9LGFkZDpmdW5jdGlvbigpe3RoaXMuaXRlbXMuYWRkQWxsKEFycmF5LnBy b3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSk7cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5j dGlvbihhKXt0aGlzLml0ZW1zLnJlbW92ZShhKTtyZXR1cm4gdGhpc30scmVuZGVyOmZ1bmN0aW9u KCl7dGhpcy5pdGVtcy5lYWNoKGZ1bmN0aW9uKGEpe2lmKGEuaXNGb3JtRmllbGQmJiFhLnJlbmRl cmVkJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhLmlkKSl7YS5hcHBseVRvTWFya3VwKGEuaWQp fX0pO3JldHVybiB0aGlzfSxhcHBseVRvRmllbGRzOmZ1bmN0aW9uKGEpe3RoaXMuaXRlbXMuZWFj aChmdW5jdGlvbihiKXtFeHQuYXBwbHkoYixhKX0pO3JldHVybiB0aGlzfSxhcHBseUlmVG9GaWVs ZHM6ZnVuY3Rpb24oYSl7dGhpcy5pdGVtcy5lYWNoKGZ1bmN0aW9uKGIpe0V4dC5hcHBseUlmKGIs YSl9KTtyZXR1cm4gdGhpc30sY2FsbEZpZWxkTWV0aG9kOmZ1bmN0aW9uKGIsYSl7YT1hfHxbXTt0 aGlzLml0ZW1zLmVhY2goZnVuY3Rpb24oYyl7aWYoRXh0LmlzRnVuY3Rpb24oY1tiXSkpe2NbYl0u YXBwbHkoYyxhKX19KTtyZXR1cm4gdGhpc319KTtFeHQuQmFzaWNGb3JtPUV4dC5mb3JtLkJhc2lj Rm9ybTtFeHQuRm9ybVBhbmVsPUV4dC5leHRlbmQoRXh0LlBhbmVsLHttaW5CdXR0b25XaWR0aDo3 NSxsYWJlbEFsaWduOiJsZWZ0Iixtb25pdG9yVmFsaWQ6ZmFsc2UsbW9uaXRvclBvbGw6MjAwLGxh eW91dDoiZm9ybSIsaW5pdENvbXBvbmVudDpmdW5jdGlvbigpe3RoaXMuZm9ybT10aGlzLmNyZWF0 ZUZvcm0oKTtFeHQuRm9ybVBhbmVsLnN1cGVyY2xhc3MuaW5pdENvbXBvbmVudC5jYWxsKHRoaXMp O3RoaXMuYm9keUNmZz17dGFnOiJmb3JtIixjbHM6dGhpcy5iYXNlQ2xzKyItYm9keSIsbWV0aG9k OnRoaXMubWV0aG9kfHwiUE9TVCIsaWQ6dGhpcy5mb3JtSWR8fEV4dC5pZCgpfTtpZih0aGlzLmZp bGVVcGxvYWQpe3RoaXMuYm9keUNmZy5lbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIn10aGlz LmluaXRJdGVtcygpO3RoaXMuYWRkRXZlbnRzKCJjbGllbnR2YWxpZGF0aW9uIik7dGhpcy5yZWxh eUV2ZW50cyh0aGlzLmZvcm0sWyJiZWZvcmVhY3Rpb24iLCJhY3Rpb25mYWlsZWQiLCJhY3Rpb25j b21wbGV0ZSJdKX0sY3JlYXRlRm9ybTpmdW5jdGlvbigpe3ZhciBhPUV4dC5hcHBseUlmKHtsaXN0 ZW5lcnM6e319LHRoaXMuaW5pdGlhbENvbmZpZyk7cmV0dXJuIG5ldyBFeHQuZm9ybS5CYXNpY0Zv cm0obnVsbCxhKX0saW5pdEZpZWxkczpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZm9ybTt2YXIgYT10 aGlzO3ZhciBiPWZ1bmN0aW9uKGQpe2lmKGEuaXNGaWVsZChkKSl7Yy5hZGQoZCl9aWYoZC5pc0Zp ZWxkV3JhcCl7RXh0LmFwcGx5SWYoZCx7bGFiZWxBbGlnbjpkLm93bmVyQ3QubGFiZWxBbGlnbixs YWJlbFdpZHRoOmQub3duZXJDdC5sYWJlbFdpZHRoLGl0ZW1DbHM6ZC5vd25lckN0Lml0ZW1DbHN9 KTtjLmFkZChkLmZpZWxkKX1lbHNle2lmKGQuZG9MYXlvdXQmJmQhPWEpe0V4dC5hcHBseUlmKGQs e2xhYmVsQWxpZ246ZC5vd25lckN0LmxhYmVsQWxpZ24sbGFiZWxXaWR0aDpkLm93bmVyQ3QubGFi ZWxXaWR0aCxpdGVtQ2xzOmQub3duZXJDdC5pdGVtQ2xzfSk7aWYoZC5pdGVtcyYmZC5pdGVtcy5l YWNoKXtkLml0ZW1zLmVhY2goYix0aGlzKX19fX07dGhpcy5pdGVtcy5lYWNoKGIsdGhpcyl9LGdl dExheW91dFRhcmdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZvcm0uZWx9LGdldEZvcm06ZnVu Y3Rpb24oKXtyZXR1cm4gdGhpcy5mb3JtfSxvblJlbmRlcjpmdW5jdGlvbihiLGEpe3RoaXMuaW5p dEZpZWxkcygpO0V4dC5Gb3JtUGFuZWwuc3VwZXJjbGFzcy5vblJlbmRlci5jYWxsKHRoaXMsYixh KTt0aGlzLmZvcm0uaW5pdEVsKHRoaXMuYm9keSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0 aGlzLnN0b3BNb25pdG9yaW5nKCk7RXh0LkZvcm1QYW5lbC5zdXBlcmNsYXNzLmJlZm9yZURlc3Ry b3kuY2FsbCh0aGlzKTt0aGlzLmZvcm0uaXRlbXMuY2xlYXIoKTtFeHQuZGVzdHJveSh0aGlzLmZv cm0pfSxpc0ZpZWxkOmZ1bmN0aW9uKGEpe3JldHVybiAhIWEuc2V0VmFsdWUmJiEhYS5nZXRWYWx1 ZSYmISFhLm1hcmtJbnZhbGlkJiYhIWEuY2xlYXJJbnZhbGlkfSxpbml0RXZlbnRzOmZ1bmN0aW9u KCl7RXh0LkZvcm1QYW5lbC5zdXBlcmNsYXNzLmluaXRFdmVudHMuY2FsbCh0aGlzKTt0aGlzLm9u KCJyZW1vdmUiLHRoaXMub25SZW1vdmUsdGhpcyk7dGhpcy5vbigiYWRkIix0aGlzLm9uQWRkLHRo aXMpO2lmKHRoaXMubW9uaXRvclZhbGlkKXt0aGlzLnN0YXJ0TW9uaXRvcmluZygpfX0sb25BZGQ6 ZnVuY3Rpb24oYSxiKXtpZih0aGlzLmlzRmllbGQoYikpe3RoaXMuZm9ybS5hZGQoYil9ZWxzZXtp ZihiLmZpbmRCeSl7RXh0LmFwcGx5SWYoYix7bGFiZWxBbGlnbjpiLm93bmVyQ3QubGFiZWxBbGln bixsYWJlbFdpZHRoOmIub3duZXJDdC5sYWJlbFdpZHRoLGl0ZW1DbHM6Yi5vd25lckN0Lml0ZW1D bHN9KTt0aGlzLmZvcm0uYWRkLmFwcGx5KHRoaXMuZm9ybSxiLmZpbmRCeSh0aGlzLmlzRmllbGQp KX19fSxvblJlbW92ZTpmdW5jdGlvbihhLGIpe2lmKHRoaXMuaXNGaWVsZChiKSl7RXh0LmRlc3Ry b3koYi5jb250YWluZXIudXAoIi54LWZvcm0taXRlbSIpKTt0aGlzLmZvcm0ucmVtb3ZlKGIpfWVs c2V7aWYoYi5maW5kQnlUeXBlKXtFeHQuZWFjaChiLmZpbmRCeSh0aGlzLmlzRmllbGQpLHRoaXMu Zm9ybS5yZW1vdmUsdGhpcy5mb3JtKX19fSxzdGFydE1vbml0b3Jpbmc6ZnVuY3Rpb24oKXtpZigh dGhpcy52YWxpZFRhc2spe3RoaXMudmFsaWRUYXNrPW5ldyBFeHQudXRpbC5UYXNrUnVubmVyKCk7 dGhpcy52YWxpZFRhc2suc3RhcnQoe3J1bjp0aGlzLmJpbmRIYW5kbGVyLGludGVydmFsOnRoaXMu bW9uaXRvclBvbGx8fDIwMCxzY29wZTp0aGlzfSl9fSxzdG9wTW9uaXRvcmluZzpmdW5jdGlvbigp e2lmKHRoaXMudmFsaWRUYXNrKXt0aGlzLnZhbGlkVGFzay5zdG9wQWxsKCk7dGhpcy52YWxpZFRh c2s9bnVsbH19LGxvYWQ6ZnVuY3Rpb24oKXt0aGlzLmZvcm0ubG9hZC5hcHBseSh0aGlzLmZvcm0s YXJndW1lbnRzKX0sb25EaXNhYmxlOmZ1bmN0aW9uKCl7RXh0LkZvcm1QYW5lbC5zdXBlcmNsYXNz Lm9uRGlzYWJsZS5jYWxsKHRoaXMpO2lmKHRoaXMuZm9ybSl7dGhpcy5mb3JtLml0ZW1zLmVhY2go ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGUoKX0pfX0sb25FbmFibGU6ZnVuY3Rpb24oKXtFeHQuRm9y bVBhbmVsLnN1cGVyY2xhc3Mub25FbmFibGUuY2FsbCh0aGlzKTtpZih0aGlzLmZvcm0pe3RoaXMu Zm9ybS5pdGVtcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5lbmFibGUoKX0pfX0sYmluZEhhbmRsZXI6 ZnVuY3Rpb24oKXt2YXIgZT10cnVlO3RoaXMuZm9ybS5pdGVtcy5lYWNoKGZ1bmN0aW9uKGcpe2lm KCFnLmlzVmFsaWQodHJ1ZSkpe2U9ZmFsc2U7cmV0dXJuIGZhbHNlfX0pO2lmKHRoaXMuZmJhcil7 dmFyIGI9dGhpcy5mYmFyLml0ZW1zLml0ZW1zO2Zvcih2YXIgZD0wLGE9Yi5sZW5ndGg7ZDxhO2Qr Kyl7dmFyIGM9YltkXTtpZihjLmZvcm1CaW5kPT09dHJ1ZSYmYy5kaXNhYmxlZD09PWUpe2Muc2V0 RGlzYWJsZWQoIWUpfX19dGhpcy5maXJlRXZlbnQoImNsaWVudHZhbGlkYXRpb24iLHRoaXMsZSl9 fSk7RXh0LnJlZygiZm9ybSIsRXh0LkZvcm1QYW5lbCk7RXh0LmZvcm0uRm9ybVBhbmVsPUV4dC5G b3JtUGFuZWw7RXh0LmZvcm0uRmllbGRTZXQ9RXh0LmV4dGVuZChFeHQuUGFuZWwse2Jhc2VDbHM6 IngtZmllbGRzZXQiLGxheW91dDoiZm9ybSIsYW5pbUNvbGxhcHNlOmZhbHNlLG9uUmVuZGVyOmZ1 bmN0aW9uKGIsYSl7aWYoIXRoaXMuZWwpe3RoaXMuZWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi ZmllbGRzZXQiKTt0aGlzLmVsLmlkPXRoaXMuaWQ7aWYodGhpcy50aXRsZXx8dGhpcy5oZWFkZXJ8 fHRoaXMuY2hlY2tib3hUb2dnbGUpe3RoaXMuZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl RWxlbWVudCgibGVnZW5kIikpLmNsYXNzTmFtZT0ieC1maWVsZHNldC1oZWFkZXIifX1FeHQuZm9y bS5GaWVsZFNldC5zdXBlcmNsYXNzLm9uUmVuZGVyLmNhbGwodGhpcyxiLGEpO2lmKHRoaXMuY2hl Y2tib3hUb2dnbGUpe3ZhciBjPXR5cGVvZiB0aGlzLmNoZWNrYm94VG9nZ2xlPT0ib2JqZWN0Ij90 aGlzLmNoZWNrYm94VG9nZ2xlOnt0YWc6ImlucHV0Iix0eXBlOiJjaGVja2JveCIsbmFtZTp0aGlz LmNoZWNrYm94TmFtZXx8dGhpcy5pZCsiLWNoZWNrYm94In07dGhpcy5jaGVja2JveD10aGlzLmhl YWRlci5pbnNlcnRGaXJzdChjKTt0aGlzLmNoZWNrYm94LmRvbS5jaGVja2VkPSF0aGlzLmNvbGxh cHNlZDt0aGlzLm1vbih0aGlzLmNoZWNrYm94LCJjbGljayIsdGhpcy5vbkNoZWNrQ2xpY2ssdGhp cyl9fSxvbkNvbGxhcHNlOmZ1bmN0aW9uKGEsYil7aWYodGhpcy5jaGVja2JveCl7dGhpcy5jaGVj a2JveC5kb20uY2hlY2tlZD1mYWxzZX1FeHQuZm9ybS5GaWVsZFNldC5zdXBlcmNsYXNzLm9uQ29s bGFwc2UuY2FsbCh0aGlzLGEsYil9LG9uRXhwYW5kOmZ1bmN0aW9uKGEsYil7aWYodGhpcy5jaGVj a2JveCl7dGhpcy5jaGVja2JveC5kb20uY2hlY2tlZD10cnVlfUV4dC5mb3JtLkZpZWxkU2V0LnN1 cGVyY2xhc3Mub25FeHBhbmQuY2FsbCh0aGlzLGEsYil9LG9uQ2hlY2tDbGljazpmdW5jdGlvbigp e3RoaXNbdGhpcy5jaGVja2JveC5kb20uY2hlY2tlZD8iZXhwYW5kIjoiY29sbGFwc2UiXSgpfX0p O0V4dC5yZWcoImZpZWxkc2V0IixFeHQuZm9ybS5GaWVsZFNldCk7RXh0LmZvcm0uSHRtbEVkaXRv cj1FeHQuZXh0ZW5kKEV4dC5mb3JtLkZpZWxkLHtlbmFibGVGb3JtYXQ6dHJ1ZSxlbmFibGVGb250 U2l6ZTp0cnVlLGVuYWJsZUNvbG9yczp0cnVlLGVuYWJsZUFsaWdubWVudHM6dHJ1ZSxlbmFibGVM aXN0czp0cnVlLGVuYWJsZVNvdXJjZUVkaXQ6dHJ1ZSxlbmFibGVMaW5rczp0cnVlLGVuYWJsZUZv bnQ6dHJ1ZSxjcmVhdGVMaW5rVGV4dDoiUGxlYXNlIGVudGVyIHRoZSBVUkwgZm9yIHRoZSBsaW5r OiIsZGVmYXVsdExpbmtWYWx1ZToiaHR0cDovLyIsZm9udEZhbWlsaWVzOlsiQXJpYWwiLCJDb3Vy aWVyIE5ldyIsIlRhaG9tYSIsIlRpbWVzIE5ldyBSb21hbiIsIlZlcmRhbmEiXSxkZWZhdWx0Rm9u dDoidGFob21hIixkZWZhdWx0VmFsdWU6KEV4dC5pc09wZXJhfHxFeHQuaXNJRTYpPyImbmJzcDsi OiImIzgyMDM7IixhY3Rpb25Nb2RlOiJ3cmFwIix2YWxpZGF0aW9uRXZlbnQ6ZmFsc2UsZGVmZXJI ZWlnaHQ6dHJ1ZSxpbml0aWFsaXplZDpmYWxzZSxhY3RpdmF0ZWQ6ZmFsc2Usc291cmNlRWRpdE1v ZGU6ZmFsc2Usb25Gb2N1czpFeHQuZW1wdHlGbixpZnJhbWVQYWQ6MyxoaWRlTW9kZToib2Zmc2V0 cyIsZGVmYXVsdEF1dG9DcmVhdGU6e3RhZzoidGV4dGFyZWEiLHN0eWxlOiJ3aWR0aDo1MDBweDto ZWlnaHQ6MzAwcHg7IixhdXRvY29tcGxldGU6Im9mZiJ9LGluaXRDb21wb25lbnQ6ZnVuY3Rpb24o KXt0aGlzLmFkZEV2ZW50cygiaW5pdGlhbGl6ZSIsImFjdGl2YXRlIiwiYmVmb3Jlc3luYyIsImJl Zm9yZXB1c2giLCJzeW5jIiwicHVzaCIsImVkaXRtb2RlY2hhbmdlIil9LGNyZWF0ZUZvbnRPcHRp b25zOmZ1bmN0aW9uKCl7dmFyIGQ9W10sYj10aGlzLmZvbnRGYW1pbGllcyxjLGc7Zm9yKHZhciBl PTAsYT1iLmxlbmd0aDtlPGE7ZSsrKXtjPWJbZV07Zz1jLnRvTG93ZXJDYXNlKCk7ZC5wdXNoKCc8 b3B0aW9uIHZhbHVlPSInLGcsJyIgc3R5bGU9ImZvbnQtZmFtaWx5OicsYywnOyInLCh0aGlzLmRl ZmF1bHRGb250PT1nPycgc2VsZWN0ZWQ9InRydWUiPic6Ij4iKSxjLCI8L29wdGlvbj4iKX1yZXR1 cm4gZC5qb2luKCIiKX0sY3JlYXRlVG9vbGJhcjpmdW5jdGlvbihkKXt2YXIgYT1FeHQuUXVpY2tU aXBzJiZFeHQuUXVpY2tUaXBzLmlzRW5hYmxlZCgpO2Z1bmN0aW9uIGMoaCxlLGcpe3JldHVybntp dGVtSWQ6aCxjbHM6IngtYnRuLWljb24iLGljb25DbHM6IngtZWRpdC0iK2gsZW5hYmxlVG9nZ2xl OmUhPT1mYWxzZSxzY29wZTpkLGhhbmRsZXI6Z3x8ZC5yZWxheUJ0bkNtZCxjbGlja0V2ZW50OiJt b3VzZWRvd24iLHRvb2x0aXA6YT9kLmJ1dHRvblRpcHNbaF18fHVuZGVmaW5lZDp1bmRlZmluZWQs b3ZlcmZsb3dUZXh0OmQuYnV0dG9uVGlwc1toXS50aXRsZXx8dW5kZWZpbmVkLHRhYkluZGV4Oi0x fX12YXIgYj1uZXcgRXh0LlRvb2xiYXIoe3JlbmRlclRvOnRoaXMud3JhcC5kb20uZmlyc3RDaGls ZH0pO3RoaXMubW9uKGIuZWwsImNsaWNrIixmdW5jdGlvbihnKXtnLnByZXZlbnREZWZhdWx0KCl9 KTtpZih0aGlzLmVuYWJsZUZvbnQmJiFFeHQuaXNTYWZhcmkyKXt0aGlzLmZvbnRTZWxlY3Q9Yi5l bC5jcmVhdGVDaGlsZCh7dGFnOiJzZWxlY3QiLGNsczoieC1mb250LXNlbGVjdCIsaHRtbDp0aGlz LmNyZWF0ZUZvbnRPcHRpb25zKCl9KTt0aGlzLm1vbih0aGlzLmZvbnRTZWxlY3QsImNoYW5nZSIs ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZvbnRTZWxlY3QuZG9tLnZhbHVlO3RoaXMucmVsYXlDbWQo ImZvbnRuYW1lIixlKTt0aGlzLmRlZmVyRm9jdXMoKX0sdGhpcyk7Yi5hZGQodGhpcy5mb250U2Vs ZWN0LmRvbSwiLSIpfWlmKHRoaXMuZW5hYmxlRm9ybWF0KXtiLmFkZChjKCJib2xkIiksYygiaXRh bGljIiksYygidW5kZXJsaW5lIikpfWlmKHRoaXMuZW5hYmxlRm9udFNpemUpe2IuYWRkKCItIixj KCJpbmNyZWFzZWZvbnRzaXplIixmYWxzZSx0aGlzLmFkanVzdEZvbnQpLGMoImRlY3JlYXNlZm9u dHNpemUiLGZhbHNlLHRoaXMuYWRqdXN0Rm9udCkpfWlmKHRoaXMuZW5hYmxlQ29sb3JzKXtiLmFk ZCgiLSIse2l0ZW1JZDoiZm9yZWNvbG9yIixjbHM6IngtYnRuLWljb24iLGljb25DbHM6IngtZWRp dC1mb3JlY29sb3IiLGNsaWNrRXZlbnQ6Im1vdXNlZG93biIsdG9vbHRpcDphP2QuYnV0dG9uVGlw cy5mb3JlY29sb3J8fHVuZGVmaW5lZDp1bmRlZmluZWQsdGFiSW5kZXg6LTEsbWVudTpuZXcgRXh0 Lm1lbnUuQ29sb3JNZW51KHthbGxvd1Jlc2VsZWN0OnRydWUsZm9jdXM6RXh0LmVtcHR5Rm4sdmFs dWU6IjAwMDAwMCIscGxhaW46dHJ1ZSxsaXN0ZW5lcnM6e3Njb3BlOnRoaXMsc2VsZWN0OmZ1bmN0 aW9uKGcsZSl7dGhpcy5leGVjQ21kKCJmb3JlY29sb3IiLEV4dC5pc1dlYktpdHx8RXh0LmlzSUU/ IiMiK2U6ZSk7dGhpcy5kZWZlckZvY3VzKCl9fSxjbGlja0V2ZW50OiJtb3VzZWRvd24ifSl9LHtp dGVtSWQ6ImJhY2tjb2xvciIsY2xzOiJ4LWJ0bi1pY29uIixpY29uQ2xzOiJ4LWVkaXQtYmFja2Nv bG9yIixjbGlja0V2ZW50OiJtb3VzZWRvd24iLHRvb2x0aXA6YT9kLmJ1dHRvblRpcHMuYmFja2Nv bG9yfHx1bmRlZmluZWQ6dW5kZWZpbmVkLHRhYkluZGV4Oi0xLG1lbnU6bmV3IEV4dC5tZW51LkNv bG9yTWVudSh7Zm9jdXM6RXh0LmVtcHR5Rm4sdmFsdWU6IkZGRkZGRiIscGxhaW46dHJ1ZSxhbGxv d1Jlc2VsZWN0OnRydWUsbGlzdGVuZXJzOntzY29wZTp0aGlzLHNlbGVjdDpmdW5jdGlvbihnLGUp e2lmKEV4dC5pc0dlY2tvKXt0aGlzLmV4ZWNDbWQoInVzZUNTUyIsZmFsc2UpO3RoaXMuZXhlY0Nt ZCgiaGlsaXRlY29sb3IiLGUpO3RoaXMuZXhlY0NtZCgidXNlQ1NTIix0cnVlKTt0aGlzLmRlZmVy Rm9jdXMoKX1lbHNle3RoaXMuZXhlY0NtZChFeHQuaXNPcGVyYT8iaGlsaXRlY29sb3IiOiJiYWNr Y29sb3IiLEV4dC5pc1dlYktpdHx8RXh0LmlzSUU/IiMiK2U6ZSk7dGhpcy5kZWZlckZvY3VzKCl9 fX0sY2xpY2tFdmVudDoibW91c2Vkb3duIn0pfSl9aWYodGhpcy5lbmFibGVBbGlnbm1lbnRzKXti LmFkZCgiLSIsYygianVzdGlmeWxlZnQiKSxjKCJqdXN0aWZ5Y2VudGVyIiksYygianVzdGlmeXJp Z2h0IikpfWlmKCFFeHQuaXNTYWZhcmkyKXtpZih0aGlzLmVuYWJsZUxpbmtzKXtiLmFkZCgiLSIs YygiY3JlYXRlbGluayIsZmFsc2UsdGhpcy5jcmVhdGVMaW5rKSl9aWYodGhpcy5lbmFibGVMaXN0 cyl7Yi5hZGQoIi0iLGMoImluc2VydG9yZGVyZWRsaXN0IiksYygiaW5zZXJ0dW5vcmRlcmVkbGlz dCIpKX1pZih0aGlzLmVuYWJsZVNvdXJjZUVkaXQpe2IuYWRkKCItIixjKCJzb3VyY2VlZGl0Iix0 cnVlLGZ1bmN0aW9uKGUpe3RoaXMudG9nZ2xlU291cmNlRWRpdCghdGhpcy5zb3VyY2VFZGl0TW9k ZSl9KSl9fXRoaXMudGI9Yn0sZ2V0RG9jTWFya3VwOmZ1bmN0aW9uKCl7cmV0dXJuJzxodG1sPjxo ZWFkPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ym9keXtib3JkZXI6MDttYXJnaW46MDtwYWRkaW5n OjNweDtoZWlnaHQ6OTglO2N1cnNvcjp0ZXh0O308L3N0eWxlPjwvaGVhZD48Ym9keT48L2JvZHk+ PC9odG1sPid9LGdldEVkaXRvckJvZHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb2MuYm9keXx8 dGhpcy5kb2MuZG9jdW1lbnRFbGVtZW50fSxnZXREb2M6ZnVuY3Rpb24oKXtyZXR1cm4gRXh0Lmlz SUU/dGhpcy5nZXRXaW4oKS5kb2N1bWVudDoodGhpcy5pZnJhbWUuY29udGVudERvY3VtZW50fHx0 aGlzLmdldFdpbigpLmRvY3VtZW50KX0sZ2V0V2luOmZ1bmN0aW9uKCl7cmV0dXJuIEV4dC5pc0lF P3RoaXMuaWZyYW1lLmNvbnRlbnRXaW5kb3c6d2luZG93LmZyYW1lc1t0aGlzLmlmcmFtZS5uYW1l XX0sb25SZW5kZXI6ZnVuY3Rpb24oYixhKXtFeHQuZm9ybS5IdG1sRWRpdG9yLnN1cGVyY2xhc3Mu b25SZW5kZXIuY2FsbCh0aGlzLGIsYSk7dGhpcy5lbC5kb20uc3R5bGUuYm9yZGVyPSIwIG5vbmUi O3RoaXMuZWwuZG9tLnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLC0xKTt0aGlzLmVsLmFkZENsYXNz KCJ4LWhpZGRlbiIpO2lmKEV4dC5pc0lFKXt0aGlzLmVsLmFwcGx5U3R5bGVzKCJtYXJnaW4tdG9w Oi0xcHg7bWFyZ2luLWJvdHRvbTotMXB4OyIpfXRoaXMud3JhcD10aGlzLmVsLndyYXAoe2Nsczoi eC1odG1sLWVkaXRvci13cmFwIixjbjp7Y2xzOiJ4LWh0bWwtZWRpdG9yLXRiIn19KTt0aGlzLmNy ZWF0ZVRvb2xiYXIodGhpcyk7dGhpcy5kaXNhYmxlSXRlbXModHJ1ZSk7dGhpcy5jcmVhdGVJRnJh bWUoKTtpZighdGhpcy53aWR0aCl7dmFyIGM9dGhpcy5lbC5nZXRTaXplKCk7dGhpcy5zZXRTaXpl KGMud2lkdGgsdGhpcy5oZWlnaHR8fGMuaGVpZ2h0KX19LGNyZWF0ZUlGcmFtZTpmdW5jdGlvbigp e3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpO2EubmFtZT1FeHQuaWQoKTth LmZyYW1lQm9yZGVyPSIwIjthLnNyYz1FeHQuaXNJRT9FeHQuU1NMX1NFQ1VSRV9VUkw6ImphdmFz Y3JpcHQ6OyI7dGhpcy53cmFwLmRvbS5hcHBlbmRDaGlsZChhKTt0aGlzLmlmcmFtZT1hO3RoaXMu bW9uaXRvclRhc2s9RXh0LlRhc2tNZ3Iuc3RhcnQoe3J1bjp0aGlzLmNoZWNrRGVzaWduTW9kZSxz Y29wZTp0aGlzLGludGVydmFsOjEwMH0pfSxpbml0RnJhbWU6ZnVuY3Rpb24oKXtFeHQuVGFza01n ci5zdG9wKHRoaXMubW9uaXRvclRhc2spO3RoaXMuZG9jPXRoaXMuZ2V0RG9jKCk7dGhpcy53aW49 dGhpcy5nZXRXaW4oKTt0aGlzLmRvYy5vcGVuKCk7dGhpcy5kb2Mud3JpdGUodGhpcy5nZXREb2NN YXJrdXAoKSk7dGhpcy5kb2MuY2xvc2UoKTt2YXIgYT17cnVuOmZ1bmN0aW9uKCl7aWYodGhpcy5k b2MuYm9keXx8dGhpcy5kb2MucmVhZHlTdGF0ZT09ImNvbXBsZXRlIil7RXh0LlRhc2tNZ3Iuc3Rv cChhKTt0aGlzLmRvYy5kZXNpZ25Nb2RlPSJvbiI7dGhpcy5pbml0RWRpdG9yLmRlZmVyKDEwLHRo aXMpfX0saW50ZXJ2YWw6MTAsZHVyYXRpb246MTAwMDAsc2NvcGU6dGhpc307RXh0LlRhc2tNZ3Iu c3RhcnQoYSl9LGNoZWNrRGVzaWduTW9kZTpmdW5jdGlvbigpe2lmKHRoaXMud3JhcCYmdGhpcy53 cmFwLmRvbS5vZmZzZXRXaWR0aCl7dmFyIGE9dGhpcy5nZXREb2MoKTtpZighYSl7cmV0dXJufWlm KCFhLmVkaXRvckluaXRpYWxpemVkfHxTdHJpbmcoYS5kZXNpZ25Nb2RlKS50b0xvd2VyQ2FzZSgp IT0ib24iKXt0aGlzLmluaXRGcmFtZSgpfX19LGRpc2FibGVJdGVtczpmdW5jdGlvbihhKXtpZih0 aGlzLmZvbnRTZWxlY3Qpe3RoaXMuZm9udFNlbGVjdC5kb20uZGlzYWJsZWQ9YX10aGlzLnRiLml0 ZW1zLmVhY2goZnVuY3Rpb24oYil7aWYoYi5pdGVtSWQhPSJzb3VyY2VlZGl0Iil7Yi5zZXREaXNh YmxlZChhKX19KX0sb25SZXNpemU6ZnVuY3Rpb24oYixjKXtFeHQuZm9ybS5IdG1sRWRpdG9yLnN1 cGVyY2xhc3Mub25SZXNpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKHRoaXMuZWwmJnRoaXMu aWZyYW1lKXtpZih0eXBlb2YgYj09Im51bWJlciIpe3ZhciBkPWItdGhpcy53cmFwLmdldEZyYW1l V2lkdGgoImxyIik7dGhpcy5lbC5zZXRXaWR0aCh0aGlzLmFkanVzdFdpZHRoKCJ0ZXh0YXJlYSIs ZCkpO3RoaXMudGIuc2V0V2lkdGgoZCk7dGhpcy5pZnJhbWUuc3R5bGUud2lkdGg9TWF0aC5tYXgo ZCwwKSsicHgifWlmKHR5cGVvZiBjPT0ibnVtYmVyIil7dmFyIGE9Yy10aGlzLndyYXAuZ2V0RnJh bWVXaWR0aCgidGIiKS10aGlzLnRiLmVsLmdldEhlaWdodCgpO3RoaXMuZWwuc2V0SGVpZ2h0KHRo aXMuYWRqdXN0V2lkdGgoInRleHRhcmVhIixhKSk7dGhpcy5pZnJhbWUuc3R5bGUuaGVpZ2h0PU1h dGgubWF4KGEsMCkrInB4IjtpZih0aGlzLmRvYyl7dGhpcy5nZXRFZGl0b3JCb2R5KCkuc3R5bGUu aGVpZ2h0PU1hdGgubWF4KChhLSh0aGlzLmlmcmFtZVBhZCoyKSksMCkrInB4In19fX0sdG9nZ2xl U291cmNlRWRpdDpmdW5jdGlvbihhKXtpZihhPT09dW5kZWZpbmVkKXthPSF0aGlzLnNvdXJjZUVk aXRNb2RlfXRoaXMuc291cmNlRWRpdE1vZGU9YT09PXRydWU7dmFyIGM9dGhpcy50Yi5pdGVtcy5n ZXQoInNvdXJjZWVkaXQiKTtpZihjLnByZXNzZWQhPT10aGlzLnNvdXJjZUVkaXRNb2RlKXtjLnRv Z2dsZSh0aGlzLnNvdXJjZUVkaXRNb2RlKTtpZighYy54dGJIaWRkZW4pe3JldHVybn19aWYodGhp cy5zb3VyY2VFZGl0TW9kZSl7dGhpcy5kaXNhYmxlSXRlbXModHJ1ZSk7dGhpcy5zeW5jVmFsdWUo KTt0aGlzLmlmcmFtZS5jbGFzc05hbWU9IngtaGlkZGVuIjt0aGlzLmVsLnJlbW92ZUNsYXNzKCJ4 LWhpZGRlbiIpO3RoaXMuZWwuZG9tLnJlbW92ZUF0dHJpYnV0ZSgidGFiSW5kZXgiKTt0aGlzLmVs LmZvY3VzKCl9ZWxzZXtpZih0aGlzLmluaXRpYWxpemVkKXt0aGlzLmRpc2FibGVJdGVtcyhmYWxz ZSl9dGhpcy5wdXNoVmFsdWUoKTt0aGlzLmlmcmFtZS5jbGFzc05hbWU9IiI7dGhpcy5lbC5hZGRD bGFzcygieC1oaWRkZW4iKTt0aGlzLmVsLmRvbS5zZXRBdHRyaWJ1dGUoInRhYkluZGV4IiwtMSk7 dGhpcy5kZWZlckZvY3VzKCl9dmFyIGI9dGhpcy5sYXN0U2l6ZTtpZihiKXtkZWxldGUgdGhpcy5s YXN0U2l6ZTt0aGlzLnNldFNpemUoYil9dGhpcy5maXJlRXZlbnQoImVkaXRtb2RlY2hhbmdlIix0 aGlzLHRoaXMuc291cmNlRWRpdE1vZGUpfSxjcmVhdGVMaW5rOmZ1bmN0aW9uKCl7dmFyIGE9cHJv bXB0KHRoaXMuY3JlYXRlTGlua1RleHQsdGhpcy5kZWZhdWx0TGlua1ZhbHVlKTtpZihhJiZhIT0i aHR0cDovLyIpe3RoaXMucmVsYXlDbWQoImNyZWF0ZWxpbmsiLGEpfX0sYWRqdXN0U2l6ZTpFeHQu Qm94Q29tcG9uZW50LnByb3RvdHlwZS5hZGp1c3RTaXplLGdldFJlc2l6ZUVsOmZ1bmN0aW9uKCl7 cmV0dXJuIHRoaXMud3JhcH0sZ2V0UG9zaXRpb25FbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLndy YXB9LGluaXRFdmVudHM6ZnVuY3Rpb24oKXt0aGlzLm9yaWdpbmFsVmFsdWU9dGhpcy5nZXRWYWx1 ZSgpfSxtYXJrSW52YWxpZDpFeHQuZW1wdHlGbixjbGVhckludmFsaWQ6RXh0LmVtcHR5Rm4sc2V0 VmFsdWU6ZnVuY3Rpb24oYSl7RXh0LmZvcm0uSHRtbEVkaXRvci5zdXBlcmNsYXNzLnNldFZhbHVl LmNhbGwodGhpcyxhKTt0aGlzLnB1c2hWYWx1ZSgpO3JldHVybiB0aGlzfSxjbGVhbkh0bWw6ZnVu Y3Rpb24oYSl7YT1TdHJpbmcoYSk7aWYoYS5sZW5ndGg+NSl7aWYoRXh0LmlzV2ViS2l0KXthPWEu cmVwbGFjZSgvXHNjbGFzcz0iKD86QXBwbGUtc3R5bGUtc3BhbnxraHRtbC1ibG9jay1wbGFjZWhv bGRlcikiL2dpLCIiKX19aWYoYT09dGhpcy5kZWZhdWx0VmFsdWUpe2E9IiJ9cmV0dXJuIGF9LHN5 bmNWYWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuaW5pdGlhbGl6ZWQpe3ZhciBkPXRoaXMuZ2V0RWRp dG9yQm9keSgpO3ZhciBjPWQuaW5uZXJIVE1MO2lmKEV4dC5pc1dlYktpdCl7dmFyIGI9ZC5nZXRB dHRyaWJ1dGUoInN0eWxlIik7dmFyIGE9Yi5tYXRjaCgvdGV4dC1hbGlnbjooLio/KTsvaSk7aWYo YSYmYVsxXSl7Yz0nPGRpdiBzdHlsZT0iJythWzBdKyciPicrYysiPC9kaXY+In19Yz10aGlzLmNs ZWFuSHRtbChjKTtpZih0aGlzLmZpcmVFdmVudCgiYmVmb3Jlc3luYyIsdGhpcyxjKSE9PWZhbHNl KXt0aGlzLmVsLmRvbS52YWx1ZT1jO3RoaXMuZmlyZUV2ZW50KCJzeW5jIix0aGlzLGMpfX19LGdl dFZhbHVlOmZ1bmN0aW9uKCl7dGhpc1t0aGlzLnNvdXJjZUVkaXRNb2RlPyJwdXNoVmFsdWUiOiJz eW5jVmFsdWUiXSgpO3JldHVybiBFeHQuZm9ybS5IdG1sRWRpdG9yLnN1cGVyY2xhc3MuZ2V0VmFs dWUuY2FsbCh0aGlzKX0scHVzaFZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5pbml0aWFsaXplZCl7 dmFyIGE9dGhpcy5lbC5kb20udmFsdWU7aWYoIXRoaXMuYWN0aXZhdGVkJiZhLmxlbmd0aDwxKXth PXRoaXMuZGVmYXVsdFZhbHVlfWlmKHRoaXMuZmlyZUV2ZW50KCJiZWZvcmVwdXNoIix0aGlzLGEp IT09ZmFsc2Upe3RoaXMuZ2V0RWRpdG9yQm9keSgpLmlubmVySFRNTD1hO2lmKEV4dC5pc0dlY2tv KXt2YXIgYz10aGlzLmRvYyxiPWMuZGVzaWduTW9kZS50b0xvd2VyQ2FzZSgpO2MuZGVzaWduTW9k ZT1iLnRvZ2dsZSgib24iLCJvZmYiKTtjLmRlc2lnbk1vZGU9Yn10aGlzLmZpcmVFdmVudCgicHVz aCIsdGhpcyxhKX19fSxkZWZlckZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5mb2N1cy5kZWZlcigxMCx0 aGlzKX0sZm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLndpbiYmIXRoaXMuc291cmNlRWRpdE1vZGUp e3RoaXMud2luLmZvY3VzKCl9ZWxzZXt0aGlzLmVsLmZvY3VzKCl9fSxpbml0RWRpdG9yOmZ1bmN0 aW9uKCl7dHJ5e3ZhciBiPXRoaXMuZ2V0RWRpdG9yQm9keSgpO3ZhciBhPXRoaXMuZWwuZ2V0U3R5 bGVzKCJmb250LXNpemUiLCJmb250LWZhbWlseSIsImJhY2tncm91bmQtaW1hZ2UiLCJiYWNrZ3Jv dW5kLXJlcGVhdCIpO2FbImJhY2tncm91bmQtYXR0YWNobWVudCJdPSJmaXhlZCI7Yi5iZ1Byb3Bl cnRpZXM9ImZpeGVkIjtFeHQuRG9tSGVscGVyLmFwcGx5U3R5bGVzKGIsYSk7aWYodGhpcy5kb2Mp e3RyeXtFeHQuRXZlbnRNYW5hZ2VyLnJlbW92ZUFsbCh0aGlzLmRvYyl9Y2F0Y2goYyl7fX10aGlz LmRvYz10aGlzLmdldERvYygpO0V4dC5FdmVudE1hbmFnZXIub24odGhpcy5kb2Mse21vdXNlZG93 bjp0aGlzLm9uRWRpdG9yRXZlbnQsZGJsY2xpY2s6dGhpcy5vbkVkaXRvckV2ZW50LGNsaWNrOnRo aXMub25FZGl0b3JFdmVudCxrZXl1cDp0aGlzLm9uRWRpdG9yRXZlbnQsYnVmZmVyOjEwMCxzY29w ZTp0aGlzfSk7aWYoRXh0LmlzR2Vja28pe0V4dC5FdmVudE1hbmFnZXIub24odGhpcy5kb2MsImtl eXByZXNzIix0aGlzLmFwcGx5Q29tbWFuZCx0aGlzKX1pZihFeHQuaXNJRXx8RXh0LmlzV2ViS2l0 fHxFeHQuaXNPcGVyYSl7RXh0LkV2ZW50TWFuYWdlci5vbih0aGlzLmRvYywia2V5ZG93biIsdGhp cy5maXhLZXlzLHRoaXMpfXRoaXMuaW5pdGlhbGl6ZWQ9dHJ1ZTt0aGlzLmZpcmVFdmVudCgiaW5p dGlhbGl6ZSIsdGhpcyk7dGhpcy5kb2MuZWRpdG9ySW5pdGlhbGl6ZWQ9dHJ1ZTt0aGlzLnB1c2hW YWx1ZSgpfWNhdGNoKGMpe319LG9uRGVzdHJveTpmdW5jdGlvbigpe2lmKHRoaXMubW9uaXRvclRh c2spe0V4dC5UYXNrTWdyLnN0b3AodGhpcy5tb25pdG9yVGFzayl9aWYodGhpcy5yZW5kZXJlZCl7 RXh0LmRlc3Ryb3kodGhpcy50Yik7aWYodGhpcy53cmFwKXt0aGlzLndyYXAuZG9tLmlubmVySFRN TD0iIjt0aGlzLndyYXAucmVtb3ZlKCl9fWlmKHRoaXMuZWwpe3RoaXMuZWwucmVtb3ZlQWxsTGlz dGVuZXJzKCk7dGhpcy5lbC5yZW1vdmUoKX1pZih0aGlzLmRvYyl7dHJ5e0V4dC5FdmVudE1hbmFn ZXIucmVtb3ZlQWxsKHRoaXMuZG9jKTtmb3IodmFyIGIgaW4gdGhpcy5kb2Mpe2RlbGV0ZSB0aGlz LmRvY1tiXX19Y2F0Y2goYSl7fX10aGlzLnB1cmdlTGlzdGVuZXJzKCl9LG9uRmlyc3RGb2N1czpm dW5jdGlvbigpe3RoaXMuYWN0aXZhdGVkPXRydWU7dGhpcy5kaXNhYmxlSXRlbXMoZmFsc2UpO2lm KEV4dC5pc0dlY2tvKXt0aGlzLndpbi5mb2N1cygpO3ZhciBhPXRoaXMud2luLmdldFNlbGVjdGlv bigpO2lmKCFhLmZvY3VzTm9kZXx8YS5mb2N1c05vZGUubm9kZVR5cGUhPTMpe3ZhciBiPWEuZ2V0 UmFuZ2VBdCgwKTtiLnNlbGVjdE5vZGVDb250ZW50cyh0aGlzLmdldEVkaXRvckJvZHkoKSk7Yi5j b2xsYXBzZSh0cnVlKTt0aGlzLmRlZmVyRm9jdXMoKX10cnl7dGhpcy5leGVjQ21kKCJ1c2VDU1Mi LHRydWUpO3RoaXMuZXhlY0NtZCgic3R5bGVXaXRoQ1NTIixmYWxzZSl9Y2F0Y2goYyl7fX10aGlz LmZpcmVFdmVudCgiYWN0aXZhdGUiLHRoaXMpfSxhZGp1c3RGb250OmZ1bmN0aW9uKGIpe3ZhciBj PWIuaXRlbUlkPT0iaW5jcmVhc2Vmb250c2l6ZSI/MTotMTt2YXIgYT1wYXJzZUludCh0aGlzLmRv Yy5xdWVyeUNvbW1hbmRWYWx1ZSgiRm9udFNpemUiKXx8MiwxMCk7aWYoKEV4dC5pc1NhZmFyaSYm IUV4dC5pc1NhZmFyaTIpfHxFeHQuaXNDaHJvbWV8fEV4dC5pc0Fpcil7aWYoYTw9MTApe2E9MStj fWVsc2V7aWYoYTw9MTMpe2E9MitjfWVsc2V7aWYoYTw9MTYpe2E9MytjfWVsc2V7aWYoYTw9MTgp e2E9NCtjfWVsc2V7aWYoYTw9MjQpe2E9NStjfWVsc2V7YT02K2N9fX19fWE9YS5jb25zdHJhaW4o MSw2KX1lbHNle2lmKEV4dC5pc1NhZmFyaSl7Yyo9Mn1hPU1hdGgubWF4KDEsYStjKSsoRXh0Lmlz U2FmYXJpPyJweCI6MCl9dGhpcy5leGVjQ21kKCJGb250U2l6ZSIsYSl9LG9uRWRpdG9yRXZlbnQ6 ZnVuY3Rpb24oYSl7dGhpcy51cGRhdGVUb29sYmFyKCl9LHVwZGF0ZVRvb2xiYXI6ZnVuY3Rpb24o KXtpZighdGhpcy5hY3RpdmF0ZWQpe3RoaXMub25GaXJzdEZvY3VzKCk7cmV0dXJufXZhciBiPXRo aXMudGIuaXRlbXMubWFwLGM9dGhpcy5kb2M7aWYodGhpcy5lbmFibGVGb250JiYhRXh0LmlzU2Fm YXJpMil7dmFyIGE9KHRoaXMuZG9jLnF1ZXJ5Q29tbWFuZFZhbHVlKCJGb250TmFtZSIpfHx0aGlz LmRlZmF1bHRGb250KS50b0xvd2VyQ2FzZSgpO2lmKGEhPXRoaXMuZm9udFNlbGVjdC5kb20udmFs dWUpe3RoaXMuZm9udFNlbGVjdC5kb20udmFsdWU9YX19aWYodGhpcy5lbmFibGVGb3JtYXQpe2Iu Ym9sZC50b2dnbGUoYy5xdWVyeUNvbW1hbmRTdGF0ZSgiYm9sZCIpKTtiLml0YWxpYy50b2dnbGUo Yy5xdWVyeUNvbW1hbmRTdGF0ZSgiaXRhbGljIikpO2IudW5kZXJsaW5lLnRvZ2dsZShjLnF1ZXJ5 Q29tbWFuZFN0YXRlKCJ1bmRlcmxpbmUiKSl9aWYodGhpcy5lbmFibGVBbGlnbm1lbnRzKXtiLmp1 c3RpZnlsZWZ0LnRvZ2dsZShjLnF1ZXJ5Q29tbWFuZFN0YXRlKCJqdXN0aWZ5bGVmdCIpKTtiLmp1 c3RpZnljZW50ZXIudG9nZ2xlKGMucXVlcnlDb21tYW5kU3RhdGUoImp1c3RpZnljZW50ZXIiKSk7 Yi5qdXN0aWZ5cmlnaHQudG9nZ2xlKGMucXVlcnlDb21tYW5kU3RhdGUoImp1c3RpZnlyaWdodCIp KX1pZighRXh0LmlzU2FmYXJpMiYmdGhpcy5lbmFibGVMaXN0cyl7Yi5pbnNlcnRvcmRlcmVkbGlz dC50b2dnbGUoYy5xdWVyeUNvbW1hbmRTdGF0ZSgiaW5zZXJ0b3JkZXJlZGxpc3QiKSk7Yi5pbnNl cnR1bm9yZGVyZWRsaXN0LnRvZ2dsZShjLnF1ZXJ5Q29tbWFuZFN0YXRlKCJpbnNlcnR1bm9yZGVy ZWRsaXN0IikpfUV4dC5tZW51Lk1lbnVNZ3IuaGlkZUFsbCgpO3RoaXMuc3luY1ZhbHVlKCl9LHJl bGF5QnRuQ21kOmZ1bmN0aW9uKGEpe3RoaXMucmVsYXlDbWQoYS5pdGVtSWQpfSxyZWxheUNtZDpm dW5jdGlvbihiLGEpeyhmdW5jdGlvbigpe3RoaXMuZm9jdXMoKTt0aGlzLmV4ZWNDbWQoYixhKTt0 aGlzLnVwZGF0ZVRvb2xiYXIoKX0pLmRlZmVyKDEwLHRoaXMpfSxleGVjQ21kOmZ1bmN0aW9uKGIs YSl7dGhpcy5kb2MuZXhlY0NvbW1hbmQoYixmYWxzZSxhPT09dW5kZWZpbmVkP251bGw6YSk7dGhp cy5zeW5jVmFsdWUoKX0sYXBwbHlDb21tYW5kOmZ1bmN0aW9uKGIpe2lmKGIuY3RybEtleSl7dmFy IGQ9Yi5nZXRDaGFyQ29kZSgpLGE7aWYoZD4wKXtkPVN0cmluZy5mcm9tQ2hhckNvZGUoZCk7c3dp dGNoKGQpe2Nhc2UiYiI6YT0iYm9sZCI7YnJlYWs7Y2FzZSJpIjphPSJpdGFsaWMiO2JyZWFrO2Nh c2UidSI6YT0idW5kZXJsaW5lIjticmVha31pZihhKXt0aGlzLndpbi5mb2N1cygpO3RoaXMuZXhl Y0NtZChhKTt0aGlzLmRlZmVyRm9jdXMoKTtiLnByZXZlbnREZWZhdWx0KCl9fX19LGluc2VydEF0 Q3Vyc29yOmZ1bmN0aW9uKGIpe2lmKCF0aGlzLmFjdGl2YXRlZCl7cmV0dXJufWlmKEV4dC5pc0lF KXt0aGlzLndpbi5mb2N1cygpO3ZhciBhPXRoaXMuZG9jLnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgp O2lmKGEpe2EuY29sbGFwc2UodHJ1ZSk7YS5wYXN0ZUhUTUwoYik7dGhpcy5zeW5jVmFsdWUoKTt0 aGlzLmRlZmVyRm9jdXMoKX19ZWxzZXtpZihFeHQuaXNHZWNrb3x8RXh0LmlzT3BlcmEpe3RoaXMu d2luLmZvY3VzKCk7dGhpcy5leGVjQ21kKCJJbnNlcnRIVE1MIixiKTt0aGlzLmRlZmVyRm9jdXMo KX1lbHNle2lmKEV4dC5pc1dlYktpdCl7dGhpcy5leGVjQ21kKCJJbnNlcnRUZXh0IixiKTt0aGlz LmRlZmVyRm9jdXMoKX19fX0sZml4S2V5czpmdW5jdGlvbigpe2lmKEV4dC5pc0lFKXtyZXR1cm4g ZnVuY3Rpb24oZCl7dmFyIGE9ZC5nZXRLZXkoKSxiO2lmKGE9PWQuVEFCKXtkLnN0b3BFdmVudCgp O2I9dGhpcy5kb2Muc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7aWYoYil7Yi5jb2xsYXBzZSh0cnVl KTtiLnBhc3RlSFRNTCgiJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Iik7dGhpcy5kZWZlckZvY3Vz KCl9fWVsc2V7aWYoYT09ZC5FTlRFUil7Yj10aGlzLmRvYy5zZWxlY3Rpb24uY3JlYXRlUmFuZ2Uo KTtpZihiKXt2YXIgYz1iLnBhcmVudEVsZW1lbnQoKTtpZighY3x8Yy50YWdOYW1lLnRvTG93ZXJD YXNlKCkhPSJsaSIpe2Quc3RvcEV2ZW50KCk7Yi5wYXN0ZUhUTUwoIjxiciAvPiIpO2IuY29sbGFw c2UoZmFsc2UpO2Iuc2VsZWN0KCl9fX19fX1lbHNle2lmKEV4dC5pc09wZXJhKXtyZXR1cm4gZnVu Y3Rpb24oYil7dmFyIGE9Yi5nZXRLZXkoKTtpZihhPT1iLlRBQil7Yi5zdG9wRXZlbnQoKTt0aGlz Lndpbi5mb2N1cygpO3RoaXMuZXhlY0NtZCgiSW5zZXJ0SFRNTCIsIiZuYnNwOyZuYnNwOyZuYnNw OyZuYnNwOyIpO3RoaXMuZGVmZXJGb2N1cygpfX19ZWxzZXtpZihFeHQuaXNXZWJLaXQpe3JldHVy biBmdW5jdGlvbihiKXt2YXIgYT1iLmdldEtleSgpO2lmKGE9PWIuVEFCKXtiLnN0b3BFdmVudCgp O3RoaXMuZXhlY0NtZCgiSW5zZXJ0VGV4dCIsIlx0Iik7dGhpcy5kZWZlckZvY3VzKCl9fX19fX0o KSxnZXRUb29sYmFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGJ9LGJ1dHRvblRpcHM6e2JvbGQ6 e3RpdGxlOiJCb2xkIChDdHJsK0IpIix0ZXh0OiJNYWtlIHRoZSBzZWxlY3RlZCB0ZXh0IGJvbGQu IixjbHM6IngtaHRtbC1lZGl0b3ItdGlwIn0saXRhbGljOnt0aXRsZToiSXRhbGljIChDdHJsK0kp Iix0ZXh0OiJNYWtlIHRoZSBzZWxlY3RlZCB0ZXh0IGl0YWxpYy4iLGNsczoieC1odG1sLWVkaXRv ci10aXAifSx1bmRlcmxpbmU6e3RpdGxlOiJVbmRlcmxpbmUgKEN0cmwrVSkiLHRleHQ6IlVuZGVy bGluZSB0aGUgc2VsZWN0ZWQgdGV4dC4iLGNsczoieC1odG1sLWVkaXRvci10aXAifSxpbmNyZWFz ZWZvbnRzaXplOnt0aXRsZToiR3JvdyBUZXh0Iix0ZXh0OiJJbmNyZWFzZSB0aGUgZm9udCBzaXpl LiIsY2xzOiJ4LWh0bWwtZWRpdG9yLXRpcCJ9LGRlY3JlYXNlZm9udHNpemU6e3RpdGxlOiJTaHJp bmsgVGV4dCIsdGV4dDoiRGVjcmVhc2UgdGhlIGZvbnQgc2l6ZS4iLGNsczoieC1odG1sLWVkaXRv ci10aXAifSxiYWNrY29sb3I6e3RpdGxlOiJUZXh0IEhpZ2hsaWdodCBDb2xvciIsdGV4dDoiQ2hh bmdlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBzZWxlY3RlZCB0ZXh0LiIsY2xzOiJ4LWh0 bWwtZWRpdG9yLXRpcCJ9LGZvcmVjb2xvcjp7dGl0bGU6IkZvbnQgQ29sb3IiLHRleHQ6IkNoYW5n ZSB0aGUgY29sb3Igb2YgdGhlIHNlbGVjdGVkIHRleHQuIixjbHM6IngtaHRtbC1lZGl0b3ItdGlw In0sanVzdGlmeWxlZnQ6e3RpdGxlOiJBbGlnbiBUZXh0IExlZnQiLHRleHQ6IkFsaWduIHRleHQg dG8gdGhlIGxlZnQuIixjbHM6IngtaHRtbC1lZGl0b3ItdGlwIn0sanVzdGlmeWNlbnRlcjp7dGl0 bGU6IkNlbnRlciBUZXh0Iix0ZXh0OiJDZW50ZXIgdGV4dCBpbiB0aGUgZWRpdG9yLiIsY2xzOiJ4 LWh0bWwtZWRpdG9yLXRpcCJ9LGp1c3RpZnlyaWdodDp7dGl0bGU6IkFsaWduIFRleHQgUmlnaHQi LHRleHQ6IkFsaWduIHRleHQgdG8gdGhlIHJpZ2h0LiIsY2xzOiJ4LWh0bWwtZWRpdG9yLXRpcCJ9 LGluc2VydHVub3JkZXJlZGxpc3Q6e3RpdGxlOiJCdWxsZXQgTGlzdCIsdGV4dDoiU3RhcnQgYSBi dWxsZXRlZCBsaXN0LiIsY2xzOiJ4LWh0bWwtZWRpdG9yLXRpcCJ9LGluc2VydG9yZGVyZWRsaXN0 Ont0aXRsZToiTnVtYmVyZWQgTGlzdCIsdGV4dDoiU3RhcnQgYSBudW1iZXJlZCBsaXN0LiIsY2xz OiJ4LWh0bWwtZWRpdG9yLXRpcCJ9LGNyZWF0ZWxpbms6e3RpdGxlOiJIeXBlcmxpbmsiLHRleHQ6 Ik1ha2UgdGhlIHNlbGVjdGVkIHRleHQgYSBoeXBlcmxpbmsuIixjbHM6IngtaHRtbC1lZGl0b3It dGlwIn0sc291cmNlZWRpdDp7dGl0bGU6IlNvdXJjZSBFZGl0Iix0ZXh0OiJTd2l0Y2ggdG8gc291 cmNlIGVkaXRpbmcgbW9kZS4iLGNsczoieC1odG1sLWVkaXRvci10aXAifX19KTtFeHQucmVnKCJo dG1sZWRpdG9yIixFeHQuZm9ybS5IdG1sRWRpdG9yKTtFeHQuZm9ybS5UaW1lRmllbGQ9RXh0LmV4 dGVuZChFeHQuZm9ybS5Db21ib0JveCx7bWluVmFsdWU6bnVsbCxtYXhWYWx1ZTpudWxsLG1pblRl eHQ6IlRoZSB0aW1lIGluIHRoaXMgZmllbGQgbXVzdCBiZSBlcXVhbCB0byBvciBhZnRlciB7MH0i LG1heFRleHQ6IlRoZSB0aW1lIGluIHRoaXMgZmllbGQgbXVzdCBiZSBlcXVhbCB0byBvciBiZWZv cmUgezB9IixpbnZhbGlkVGV4dDoiezB9IGlzIG5vdCBhIHZhbGlkIHRpbWUiLGZvcm1hdDoiZzpp IEEiLGFsdEZvcm1hdHM6Imc6aWF8ZzppQXxnOmkgYXxnOmkgQXxoOml8ZzppfEg6aXxnYXxoYXxn QXxoIGF8ZyBhfGcgQXxnaXxoaXxnaWF8aGlhfGd8SCIsaW5jcmVtZW50OjE1LG1vZGU6ImxvY2Fs Iix0cmlnZ2VyQWN0aW9uOiJhbGwiLHR5cGVBaGVhZDpmYWxzZSxpbml0RGF0ZToiMS8xLzIwMDgi LGluaXRDb21wb25lbnQ6ZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5taW5WYWx1ZT09InN0cmlu ZyIpe3RoaXMubWluVmFsdWU9dGhpcy5wYXJzZURhdGUodGhpcy5taW5WYWx1ZSl9aWYodHlwZW9m IHRoaXMubWF4VmFsdWU9PSJzdHJpbmciKXt0aGlzLm1heFZhbHVlPXRoaXMucGFyc2VEYXRlKHRo aXMubWF4VmFsdWUpfWlmKCF0aGlzLnN0b3JlKXt2YXIgYj10aGlzLnBhcnNlRGF0ZSh0aGlzLm1p blZhbHVlKXx8bmV3IERhdGUodGhpcy5pbml0RGF0ZSkuY2xlYXJUaW1lKCk7dmFyIGE9dGhpcy5w YXJzZURhdGUodGhpcy5tYXhWYWx1ZSl8fG5ldyBEYXRlKHRoaXMuaW5pdERhdGUpLmNsZWFyVGlt ZSgpLmFkZCgibWkiLCgyNCo2MCktMSk7dmFyIGM9W107d2hpbGUoYjw9YSl7Yy5wdXNoKGIuZGF0 ZUZvcm1hdCh0aGlzLmZvcm1hdCkpO2I9Yi5hZGQoIm1pIix0aGlzLmluY3JlbWVudCl9dGhpcy5z dG9yZT1jfUV4dC5mb3JtLlRpbWVGaWVsZC5zdXBlcmNsYXNzLmluaXRDb21wb25lbnQuY2FsbCh0 aGlzKX0sZ2V0VmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT1FeHQuZm9ybS5UaW1lRmllbGQuc3VwZXJj bGFzcy5nZXRWYWx1ZS5jYWxsKHRoaXMpO3JldHVybiB0aGlzLmZvcm1hdERhdGUodGhpcy5wYXJz ZURhdGUoYSkpfHwiIn0sc2V0VmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuIEV4dC5mb3JtLlRpbWVG aWVsZC5zdXBlcmNsYXNzLnNldFZhbHVlLmNhbGwodGhpcyx0aGlzLmZvcm1hdERhdGUodGhpcy5w YXJzZURhdGUoYSkpKX0sdmFsaWRhdGVWYWx1ZTpFeHQuZm9ybS5EYXRlRmllbGQucHJvdG90eXBl LnZhbGlkYXRlVmFsdWUscGFyc2VEYXRlOkV4dC5mb3JtLkRhdGVGaWVsZC5wcm90b3R5cGUucGFy c2VEYXRlLGZvcm1hdERhdGU6RXh0LmZvcm0uRGF0ZUZpZWxkLnByb3RvdHlwZS5mb3JtYXREYXRl LGJlZm9yZUJsdXI6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcnNlRGF0ZSh0aGlzLmdldFJhd1Zh bHVlKCkpO2lmKGEpe3RoaXMuc2V0VmFsdWUoYS5kYXRlRm9ybWF0KHRoaXMuZm9ybWF0KSl9RXh0 LmZvcm0uVGltZUZpZWxkLnN1cGVyY2xhc3MuYmVmb3JlQmx1ci5jYWxsKHRoaXMpfX0pO0V4dC5y ZWcoInRpbWVmaWVsZCIsRXh0LmZvcm0uVGltZUZpZWxkKTtFeHQuZm9ybS5MYWJlbD1FeHQuZXh0 ZW5kKEV4dC5Cb3hDb21wb25lbnQse29uUmVuZGVyOmZ1bmN0aW9uKGIsYSl7aWYoIXRoaXMuZWwp e3RoaXMuZWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTt0aGlzLmVsLmlkPXRoaXMu Z2V0SWQoKTt0aGlzLmVsLmlubmVySFRNTD10aGlzLnRleHQ/RXh0LnV0aWwuRm9ybWF0Lmh0bWxF bmNvZGUodGhpcy50ZXh0KToodGhpcy5odG1sfHwiIik7aWYodGhpcy5mb3JJZCl7dGhpcy5lbC5z ZXRBdHRyaWJ1dGUoImZvciIsdGhpcy5mb3JJZCl9fUV4dC5mb3JtLkxhYmVsLnN1cGVyY2xhc3Mu b25SZW5kZXIuY2FsbCh0aGlzLGIsYSl9LHNldFRleHQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iPT09 ZmFsc2U7dGhpc1shYz8idGV4dCI6Imh0bWwiXT1hO2RlbGV0ZSB0aGlzW2M/InRleHQiOiJodG1s Il07aWYodGhpcy5yZW5kZXJlZCl7dGhpcy5lbC5kb20uaW5uZXJIVE1MPWIhPT1mYWxzZT9FeHQu dXRpbC5Gb3JtYXQuaHRtbEVuY29kZShhKTphfXJldHVybiB0aGlzfX0pO0V4dC5yZWcoImxhYmVs IixFeHQuZm9ybS5MYWJlbCk7RXh0LmZvcm0uQWN0aW9uPWZ1bmN0aW9uKGIsYSl7dGhpcy5mb3Jt PWI7dGhpcy5vcHRpb25zPWF8fHt9fTtFeHQuZm9ybS5BY3Rpb24uQ0xJRU5UX0lOVkFMSUQ9ImNs aWVudCI7RXh0LmZvcm0uQWN0aW9uLlNFUlZFUl9JTlZBTElEPSJzZXJ2ZXIiO0V4dC5mb3JtLkFj dGlvbi5DT05ORUNUX0ZBSUxVUkU9ImNvbm5lY3QiO0V4dC5mb3JtLkFjdGlvbi5MT0FEX0ZBSUxV UkU9ImxvYWQiO0V4dC5mb3JtLkFjdGlvbi5wcm90b3R5cGU9e3R5cGU6ImRlZmF1bHQiLHJ1bjpm dW5jdGlvbihhKXt9LHN1Y2Nlc3M6ZnVuY3Rpb24oYSl7fSxoYW5kbGVSZXNwb25zZTpmdW5jdGlv bihhKXt9LGZhaWx1cmU6ZnVuY3Rpb24oYSl7dGhpcy5yZXNwb25zZT1hO3RoaXMuZmFpbHVyZVR5 cGU9RXh0LmZvcm0uQWN0aW9uLkNPTk5FQ1RfRkFJTFVSRTt0aGlzLmZvcm0uYWZ0ZXJBY3Rpb24o dGhpcyxmYWxzZSl9LHByb2Nlc3NSZXNwb25zZTpmdW5jdGlvbihhKXt0aGlzLnJlc3BvbnNlPWE7 aWYoIWEucmVzcG9uc2VUZXh0JiYhYS5yZXNwb25zZVhNTCl7cmV0dXJuIHRydWV9dGhpcy5yZXN1 bHQ9dGhpcy5oYW5kbGVSZXNwb25zZShhKTtyZXR1cm4gdGhpcy5yZXN1bHR9LGdldFVybDpmdW5j dGlvbihjKXt2YXIgYT10aGlzLm9wdGlvbnMudXJsfHx0aGlzLmZvcm0udXJsfHx0aGlzLmZvcm0u ZWwuZG9tLmFjdGlvbjtpZihjKXt2YXIgYj10aGlzLmdldFBhcmFtcygpO2lmKGIpe2E9RXh0LnVy bEFwcGVuZChhLGIpfX1yZXR1cm4gYX0sZ2V0TWV0aG9kOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMu b3B0aW9ucy5tZXRob2R8fHRoaXMuZm9ybS5tZXRob2R8fHRoaXMuZm9ybS5lbC5kb20ubWV0aG9k fHwiUE9TVCIpLnRvVXBwZXJDYXNlKCl9LGdldFBhcmFtczpmdW5jdGlvbigpe3ZhciBhPXRoaXMu Zm9ybS5iYXNlUGFyYW1zO3ZhciBiPXRoaXMub3B0aW9ucy5wYXJhbXM7aWYoYil7aWYodHlwZW9m IGI9PSJvYmplY3QiKXtiPUV4dC51cmxFbmNvZGUoRXh0LmFwcGx5SWYoYixhKSl9ZWxzZXtpZih0 eXBlb2YgYj09InN0cmluZyImJmEpe2IrPSImIitFeHQudXJsRW5jb2RlKGEpfX19ZWxzZXtpZihh KXtiPUV4dC51cmxFbmNvZGUoYSl9fXJldHVybiBifSxjcmVhdGVDYWxsYmFjazpmdW5jdGlvbihh KXt2YXIgYT1hfHx7fTtyZXR1cm57c3VjY2Vzczp0aGlzLnN1Y2Nlc3MsZmFpbHVyZTp0aGlzLmZh aWx1cmUsc2NvcGU6dGhpcyx0aW1lb3V0OihhLnRpbWVvdXQqMTAwMCl8fCh0aGlzLmZvcm0udGlt ZW91dCoxMDAwKSx1cGxvYWQ6dGhpcy5mb3JtLmZpbGVVcGxvYWQ/dGhpcy5zdWNjZXNzOnVuZGVm aW5lZH19fTtFeHQuZm9ybS5BY3Rpb24uU3VibWl0PWZ1bmN0aW9uKGIsYSl7RXh0LmZvcm0uQWN0 aW9uLlN1Ym1pdC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxiLGEpfTtFeHQuZXh0 ZW5kKEV4dC5mb3JtLkFjdGlvbi5TdWJtaXQsRXh0LmZvcm0uQWN0aW9uLHt0eXBlOiJzdWJtaXQi LHJ1bjpmdW5jdGlvbigpe3ZhciBiPXRoaXMub3B0aW9uczt2YXIgYz10aGlzLmdldE1ldGhvZCgp O3ZhciBhPWM9PSJHRVQiO2lmKGIuY2xpZW50VmFsaWRhdGlvbj09PWZhbHNlfHx0aGlzLmZvcm0u aXNWYWxpZCgpKXtFeHQuQWpheC5yZXF1ZXN0KEV4dC5hcHBseSh0aGlzLmNyZWF0ZUNhbGxiYWNr KGIpLHtmb3JtOnRoaXMuZm9ybS5lbC5kb20sdXJsOnRoaXMuZ2V0VXJsKGEpLG1ldGhvZDpjLGhl YWRlcnM6Yi5oZWFkZXJzLHBhcmFtczohYT90aGlzLmdldFBhcmFtcygpOm51bGwsaXNVcGxvYWQ6 dGhpcy5mb3JtLmZpbGVVcGxvYWR9KSl9ZWxzZXtpZihiLmNsaWVudFZhbGlkYXRpb24hPT1mYWxz ZSl7dGhpcy5mYWlsdXJlVHlwZT1FeHQuZm9ybS5BY3Rpb24uQ0xJRU5UX0lOVkFMSUQ7dGhpcy5m b3JtLmFmdGVyQWN0aW9uKHRoaXMsZmFsc2UpfX19LHN1Y2Nlc3M6ZnVuY3Rpb24oYil7dmFyIGE9 dGhpcy5wcm9jZXNzUmVzcG9uc2UoYik7aWYoYT09PXRydWV8fGEuc3VjY2Vzcyl7dGhpcy5mb3Jt LmFmdGVyQWN0aW9uKHRoaXMsdHJ1ZSk7cmV0dXJufWlmKGEuZXJyb3JzKXt0aGlzLmZvcm0ubWFy a0ludmFsaWQoYS5lcnJvcnMpO3RoaXMuZmFpbHVyZVR5cGU9RXh0LmZvcm0uQWN0aW9uLlNFUlZF Ul9JTlZBTElEfXRoaXMuZm9ybS5hZnRlckFjdGlvbih0aGlzLGZhbHNlKX0saGFuZGxlUmVzcG9u c2U6ZnVuY3Rpb24oYyl7aWYodGhpcy5mb3JtLmVycm9yUmVhZGVyKXt2YXIgYj10aGlzLmZvcm0u ZXJyb3JSZWFkZXIucmVhZChjKTt2YXIgZz1bXTtpZihiLnJlY29yZHMpe2Zvcih2YXIgZD0wLGE9 Yi5yZWNvcmRzLmxlbmd0aDtkPGE7ZCsrKXt2YXIgZT1iLnJlY29yZHNbZF07Z1tkXT1lLmRhdGF9 fWlmKGcubGVuZ3RoPDEpe2c9bnVsbH1yZXR1cm57c3VjY2VzczpiLnN1Y2Nlc3MsZXJyb3JzOmd9 fXJldHVybiBFeHQuZGVjb2RlKGMucmVzcG9uc2VUZXh0KX19KTtFeHQuZm9ybS5BY3Rpb24uTG9h ZD1mdW5jdGlvbihiLGEpe0V4dC5mb3JtLkFjdGlvbi5Mb2FkLnN1cGVyY2xhc3MuY29uc3RydWN0 b3IuY2FsbCh0aGlzLGIsYSk7dGhpcy5yZWFkZXI9dGhpcy5mb3JtLnJlYWRlcn07RXh0LmV4dGVu ZChFeHQuZm9ybS5BY3Rpb24uTG9hZCxFeHQuZm9ybS5BY3Rpb24se3R5cGU6ImxvYWQiLHJ1bjpm dW5jdGlvbigpe0V4dC5BamF4LnJlcXVlc3QoRXh0LmFwcGx5KHRoaXMuY3JlYXRlQ2FsbGJhY2so dGhpcy5vcHRpb25zKSx7bWV0aG9kOnRoaXMuZ2V0TWV0aG9kKCksdXJsOnRoaXMuZ2V0VXJsKGZh bHNlKSxoZWFkZXJzOnRoaXMub3B0aW9ucy5oZWFkZXJzLHBhcmFtczp0aGlzLmdldFBhcmFtcygp fSkpfSxzdWNjZXNzOmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMucHJvY2Vzc1Jlc3BvbnNlKGIpO2lm KGE9PT10cnVlfHwhYS5zdWNjZXNzfHwhYS5kYXRhKXt0aGlzLmZhaWx1cmVUeXBlPUV4dC5mb3Jt LkFjdGlvbi5MT0FEX0ZBSUxVUkU7dGhpcy5mb3JtLmFmdGVyQWN0aW9uKHRoaXMsZmFsc2UpO3Jl dHVybn10aGlzLmZvcm0uY2xlYXJJbnZhbGlkKCk7dGhpcy5mb3JtLnNldFZhbHVlcyhhLmRhdGEp O3RoaXMuZm9ybS5hZnRlckFjdGlvbih0aGlzLHRydWUpfSxoYW5kbGVSZXNwb25zZTpmdW5jdGlv bihiKXtpZih0aGlzLmZvcm0ucmVhZGVyKXt2YXIgYT10aGlzLmZvcm0ucmVhZGVyLnJlYWQoYik7 dmFyIGM9YS5yZWNvcmRzJiZhLnJlY29yZHNbMF0/YS5yZWNvcmRzWzBdLmRhdGE6bnVsbDtyZXR1 cm57c3VjY2VzczphLnN1Y2Nlc3MsZGF0YTpjfX1yZXR1cm4gRXh0LmRlY29kZShiLnJlc3BvbnNl VGV4dCl9fSk7RXh0LmZvcm0uQWN0aW9uLkRpcmVjdExvYWQ9RXh0LmV4dGVuZChFeHQuZm9ybS5B Y3Rpb24uTG9hZCx7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYixhKXtFeHQuZm9ybS5BY3Rpb24uRGly ZWN0TG9hZC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxiLGEpfSx0eXBlOiJkaXJl Y3Rsb2FkIixydW46ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldFBhcmFtcygpO2EucHVzaCh0aGlz LnN1Y2Nlc3MsdGhpcyk7dGhpcy5mb3JtLmFwaS5sb2FkLmFwcGx5KHdpbmRvdyxhKX0sZ2V0UGFy YW1zOmZ1bmN0aW9uKCl7dmFyIGM9W10saD17fTt2YXIgZT10aGlzLmZvcm0uYmFzZVBhcmFtczt2 YXIgZz10aGlzLm9wdGlvbnMucGFyYW1zO0V4dC5hcHBseShoLGcsZSk7dmFyIGI9dGhpcy5mb3Jt LnBhcmFtT3JkZXI7aWYoYil7Zm9yKHZhciBkPTAsYT1iLmxlbmd0aDtkPGE7ZCsrKXtjLnB1c2go aFtiW2RdXSl9fWVsc2V7aWYodGhpcy5mb3JtLnBhcmFtc0FzSGFzaCl7Yy5wdXNoKGgpfX1yZXR1 cm4gY30scHJvY2Vzc1Jlc3BvbnNlOmZ1bmN0aW9uKGEpe3RoaXMucmVzdWx0PWE7cmV0dXJuIGF9 fSk7RXh0LmZvcm0uQWN0aW9uLkRpcmVjdFN1Ym1pdD1FeHQuZXh0ZW5kKEV4dC5mb3JtLkFjdGlv bi5TdWJtaXQse2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGIsYSl7RXh0LmZvcm0uQWN0aW9uLkRpcmVj dFN1Ym1pdC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxiLGEpfSx0eXBlOiJkaXJl Y3RzdWJtaXQiLHJ1bjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucztpZihhLmNsaWVudFZh bGlkYXRpb249PT1mYWxzZXx8dGhpcy5mb3JtLmlzVmFsaWQoKSl7dGhpcy5zdWNjZXNzLnBhcmFt cz10aGlzLmdldFBhcmFtcygpO3RoaXMuZm9ybS5hcGkuc3VibWl0KHRoaXMuZm9ybS5lbC5kb20s dGhpcy5zdWNjZXNzLHRoaXMpfWVsc2V7aWYoYS5jbGllbnRWYWxpZGF0aW9uIT09ZmFsc2Upe3Ro aXMuZmFpbHVyZVR5cGU9RXh0LmZvcm0uQWN0aW9uLkNMSUVOVF9JTlZBTElEO3RoaXMuZm9ybS5h ZnRlckFjdGlvbih0aGlzLGZhbHNlKX19fSxnZXRQYXJhbXM6ZnVuY3Rpb24oKXt2YXIgYz17fTt2 YXIgYT10aGlzLmZvcm0uYmFzZVBhcmFtczt2YXIgYj10aGlzLm9wdGlvbnMucGFyYW1zO0V4dC5h cHBseShjLGIsYSk7cmV0dXJuIGN9LHByb2Nlc3NSZXNwb25zZTpmdW5jdGlvbihhKXt0aGlzLnJl c3VsdD1hO3JldHVybiBhfX0pO0V4dC5mb3JtLkFjdGlvbi5BQ1RJT05fVFlQRVM9e2xvYWQ6RXh0 LmZvcm0uQWN0aW9uLkxvYWQsc3VibWl0OkV4dC5mb3JtLkFjdGlvbi5TdWJtaXQsZGlyZWN0bG9h ZDpFeHQuZm9ybS5BY3Rpb24uRGlyZWN0TG9hZCxkaXJlY3RzdWJtaXQ6RXh0LmZvcm0uQWN0aW9u LkRpcmVjdFN1Ym1pdH07RXh0LmZvcm0uVlR5cGVzPWZ1bmN0aW9uKCl7dmFyIGM9L15bYS16QS1a X10rJC87dmFyIGQ9L15bYS16QS1aMC05X10rJC87dmFyIGI9L14oXHcrKShbLSsuXVtcd10rKSpA KFx3Wy1cd10qXC4pezEsNX0oW0EtWmEtel0pezIsNH0kLzt2YXIgYT0vKCgoaHR0cHM/KXwoZnRw KSk6XC9cLyhbXC1cd10rXC4pK1x3ezIsM30oXC9bJVwtXHddKyhcLlx3ezIsfSk/KSooKFtcd1wt XC5cP1xcXC8rQCYjO2B+PSUhXSopKFwuXHd7Mix9KT8pKlwvPykvaTtyZXR1cm57ZW1haWw6ZnVu Y3Rpb24oZSl7cmV0dXJuIGIudGVzdChlKX0sZW1haWxUZXh0OidUaGlzIGZpZWxkIHNob3VsZCBi ZSBhbiBlLW1haWwgYWRkcmVzcyBpbiB0aGUgZm9ybWF0ICJ1c2VyQGV4YW1wbGUuY29tIicsZW1h aWxNYXNrOi9bYS16MC05X1wuXC1AXS9pLHVybDpmdW5jdGlvbihlKXtyZXR1cm4gYS50ZXN0KGUp fSx1cmxUZXh0OidUaGlzIGZpZWxkIHNob3VsZCBiZSBhIFVSTCBpbiB0aGUgZm9ybWF0ICJodHRw Oi8vd3d3LmV4YW1wbGUuY29tIicsYWxwaGE6ZnVuY3Rpb24oZSl7cmV0dXJuIGMudGVzdChlKX0s YWxwaGFUZXh0OiJUaGlzIGZpZWxkIHNob3VsZCBvbmx5IGNvbnRhaW4gbGV0dGVycyBhbmQgXyIs YWxwaGFNYXNrOi9bYS16X10vaSxhbHBoYW51bTpmdW5jdGlvbihlKXtyZXR1cm4gZC50ZXN0KGUp fSxhbHBoYW51bVRleHQ6IlRoaXMgZmllbGQgc2hvdWxkIG9ubHkgY29udGFpbiBsZXR0ZXJzLCBu dW1iZXJzIGFuZCBfIixhbHBoYW51bU1hc2s6L1thLXowLTlfXS9pfX0oKTtFeHQuZ3JpZC5Hcmlk UGFuZWw9RXh0LmV4dGVuZChFeHQuUGFuZWwse2F1dG9FeHBhbmRDb2x1bW46ZmFsc2UsYXV0b0V4 cGFuZE1heDoxMDAwLGF1dG9FeHBhbmRNaW46NTAsY29sdW1uTGluZXM6ZmFsc2UsZGRUZXh0OiJ7 MH0gc2VsZWN0ZWQgcm93ezF9IixkZWZlclJvd1JlbmRlcjp0cnVlLGVuYWJsZUNvbHVtbkhpZGU6 dHJ1ZSxlbmFibGVDb2x1bW5Nb3ZlOnRydWUsZW5hYmxlRHJhZ0Ryb3A6ZmFsc2UsZW5hYmxlSGRN ZW51OnRydWUsbG9hZE1hc2s6ZmFsc2UsbWluQ29sdW1uV2lkdGg6MjUsc3RyaXBlUm93czpmYWxz ZSx0cmFja01vdXNlT3Zlcjp0cnVlLHN0YXRlRXZlbnRzOlsiY29sdW1ubW92ZSIsImNvbHVtbnJl c2l6ZSIsInNvcnRjaGFuZ2UiXSx2aWV3Om51bGwscmVuZGVyZWQ6ZmFsc2Usdmlld1JlYWR5OmZh bHNlLGluaXRDb21wb25lbnQ6ZnVuY3Rpb24oKXtFeHQuZ3JpZC5HcmlkUGFuZWwuc3VwZXJjbGFz cy5pbml0Q29tcG9uZW50LmNhbGwodGhpcyk7aWYodGhpcy5jb2x1bW5MaW5lcyl7dGhpcy5jbHM9 KHRoaXMuY2xzfHwiIikrIiB4LWdyaWQtd2l0aC1jb2wtbGluZXMifXRoaXMuYXV0b1Njcm9sbD1m YWxzZTt0aGlzLmF1dG9XaWR0aD1mYWxzZTtpZihFeHQuaXNBcnJheSh0aGlzLmNvbHVtbnMpKXt0 aGlzLmNvbE1vZGVsPW5ldyBFeHQuZ3JpZC5Db2x1bW5Nb2RlbCh0aGlzLmNvbHVtbnMpO2RlbGV0 ZSB0aGlzLmNvbHVtbnN9aWYodGhpcy5kcyl7dGhpcy5zdG9yZT10aGlzLmRzO2RlbGV0ZSB0aGlz LmRzfWlmKHRoaXMuY20pe3RoaXMuY29sTW9kZWw9dGhpcy5jbTtkZWxldGUgdGhpcy5jbX1pZih0 aGlzLnNtKXt0aGlzLnNlbE1vZGVsPXRoaXMuc207ZGVsZXRlIHRoaXMuc219dGhpcy5zdG9yZT1F eHQuU3RvcmVNZ3IubG9va3VwKHRoaXMuc3RvcmUpO3RoaXMuYWRkRXZlbnRzKCJjbGljayIsImRi bGNsaWNrIiwiY29udGV4dG1lbnUiLCJtb3VzZWRvd24iLCJtb3VzZXVwIiwibW91c2VvdmVyIiwi bW91c2VvdXQiLCJrZXlwcmVzcyIsImtleWRvd24iLCJjZWxsbW91c2Vkb3duIiwicm93bW91c2Vk b3duIiwiaGVhZGVybW91c2Vkb3duIiwiY2VsbGNsaWNrIiwiY2VsbGRibGNsaWNrIiwicm93Y2xp Y2siLCJyb3dkYmxjbGljayIsImhlYWRlcmNsaWNrIiwiaGVhZGVyZGJsY2xpY2siLCJyb3djb250 ZXh0bWVudSIsImNlbGxjb250ZXh0bWVudSIsImhlYWRlcmNvbnRleHRtZW51IiwiYm9keXNjcm9s bCIsImNvbHVtbnJlc2l6ZSIsImNvbHVtbm1vdmUiLCJzb3J0Y2hhbmdlIiwicmVjb25maWd1cmUi KX0sb25SZW5kZXI6ZnVuY3Rpb24oZCxhKXtFeHQuZ3JpZC5HcmlkUGFuZWwuc3VwZXJjbGFzcy5v blJlbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGU9dGhpcy5ib2R5O3RoaXMuZWwuYWRk Q2xhc3MoIngtZ3JpZC1wYW5lbCIpO3ZhciBiPXRoaXMuZ2V0VmlldygpO2IuaW5pdCh0aGlzKTt0 aGlzLm1vbihlLHttb3VzZWRvd246dGhpcy5vbk1vdXNlRG93bixjbGljazp0aGlzLm9uQ2xpY2ss ZGJsY2xpY2s6dGhpcy5vbkRibENsaWNrLGNvbnRleHRtZW51OnRoaXMub25Db250ZXh0TWVudSxr ZXlkb3duOnRoaXMub25LZXlEb3duLHNjb3BlOnRoaXN9KTt0aGlzLnJlbGF5RXZlbnRzKGUsWyJt b3VzZWRvd24iLCJtb3VzZXVwIiwibW91c2VvdmVyIiwibW91c2VvdXQiLCJrZXlwcmVzcyJdKTt0 aGlzLmdldFNlbGVjdGlvbk1vZGVsKCkuaW5pdCh0aGlzKTt0aGlzLnZpZXcucmVuZGVyKCl9LGlu aXRFdmVudHM6ZnVuY3Rpb24oKXtFeHQuZ3JpZC5HcmlkUGFuZWwuc3VwZXJjbGFzcy5pbml0RXZl bnRzLmNhbGwodGhpcyk7aWYodGhpcy5sb2FkTWFzayl7dGhpcy5sb2FkTWFzaz1uZXcgRXh0Lkxv YWRNYXNrKHRoaXMuYndyYXAsRXh0LmFwcGx5KHtzdG9yZTp0aGlzLnN0b3JlfSx0aGlzLmxvYWRN YXNrKSl9fSxpbml0U3RhdGVFdmVudHM6ZnVuY3Rpb24oKXtFeHQuZ3JpZC5HcmlkUGFuZWwuc3Vw ZXJjbGFzcy5pbml0U3RhdGVFdmVudHMuY2FsbCh0aGlzKTt0aGlzLm1vbih0aGlzLmNvbE1vZGVs LCJoaWRkZW5jaGFuZ2UiLHRoaXMuc2F2ZVN0YXRlLHRoaXMse2RlbGF5OjEwMH0pfSxhcHBseVN0 YXRlOmZ1bmN0aW9uKGgpe3ZhciBiPXRoaXMuY29sTW9kZWw7dmFyIGc9aC5jb2x1bW5zO2lmKGcp e2Zvcih2YXIgZD0wLGE9Zy5sZW5ndGg7ZDxhO2QrKyl7dmFyIGU9Z1tkXTt2YXIgaz1iLmdldENv bHVtbkJ5SWQoZS5pZCk7aWYoayl7ay5oaWRkZW49ZS5oaWRkZW47ay53aWR0aD1lLndpZHRoO3Zh ciBqPWIuZ2V0SW5kZXhCeUlkKGUuaWQpO2lmKGohPWQpe2IubW92ZUNvbHVtbihqLGQpfX19fWlm KGguc29ydCYmdGhpcy5zdG9yZSl7dGhpcy5zdG9yZVt0aGlzLnN0b3JlLnJlbW90ZVNvcnQ/InNl dERlZmF1bHRTb3J0Ijoic29ydCJdKGguc29ydC5maWVsZCxoLnNvcnQuZGlyZWN0aW9uKX1kZWxl dGUgaC5jb2x1bW5zO2RlbGV0ZSBoLnNvcnQ7RXh0LmdyaWQuR3JpZFBhbmVsLnN1cGVyY2xhc3Mu YXBwbHlTdGF0ZS5jYWxsKHRoaXMsaCl9LGdldFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGQ9e2NvbHVt bnM6W119O2Zvcih2YXIgYj0wLGU7KGU9dGhpcy5jb2xNb2RlbC5jb25maWdbYl0pO2IrKyl7ZC5j b2x1bW5zW2JdPXtpZDplLmlkLHdpZHRoOmUud2lkdGh9O2lmKGUuaGlkZGVuKXtkLmNvbHVtbnNb Yl0uaGlkZGVuPXRydWV9fWlmKHRoaXMuc3RvcmUpe3ZhciBhPXRoaXMuc3RvcmUuZ2V0U29ydFN0 YXRlKCk7aWYoYSl7ZC5zb3J0PWF9fXJldHVybiBkfSxhZnRlclJlbmRlcjpmdW5jdGlvbigpe0V4 dC5ncmlkLkdyaWRQYW5lbC5zdXBlcmNsYXNzLmFmdGVyUmVuZGVyLmNhbGwodGhpcyk7dGhpcy52 aWV3LmxheW91dCgpO2lmKHRoaXMuZGVmZXJSb3dSZW5kZXIpe3RoaXMudmlldy5hZnRlclJlbmRl ci5kZWZlcigxMCx0aGlzLnZpZXcpfWVsc2V7dGhpcy52aWV3LmFmdGVyUmVuZGVyKCl9dGhpcy52 aWV3UmVhZHk9dHJ1ZX0scmVjb25maWd1cmU6ZnVuY3Rpb24oYSxiKXtpZih0aGlzLmxvYWRNYXNr KXt0aGlzLmxvYWRNYXNrLmRlc3Ryb3koKTt0aGlzLmxvYWRNYXNrPW5ldyBFeHQuTG9hZE1hc2so dGhpcy5id3JhcCxFeHQuYXBwbHkoe30se3N0b3JlOmF9LHRoaXMuaW5pdGlhbENvbmZpZy5sb2Fk TWFzaykpfXRoaXMudmlldy5pbml0RGF0YShhLGIpO3RoaXMuc3RvcmU9YTt0aGlzLmNvbE1vZGVs PWI7aWYodGhpcy5yZW5kZXJlZCl7dGhpcy52aWV3LnJlZnJlc2godHJ1ZSl9dGhpcy5maXJlRXZl bnQoInJlY29uZmlndXJlIix0aGlzLGEsYil9LG9uS2V5RG93bjpmdW5jdGlvbihhKXt0aGlzLmZp cmVFdmVudCgia2V5ZG93biIsYSl9LG9uRGVzdHJveTpmdW5jdGlvbigpe2lmKHRoaXMucmVuZGVy ZWQpe3ZhciBhPXRoaXMuYm9keTthLnJlbW92ZUFsbExpc3RlbmVycygpO2EudXBkYXRlKCIiKTtF eHQuZGVzdHJveSh0aGlzLnZpZXcsdGhpcy5sb2FkTWFzayl9ZWxzZXtpZih0aGlzLnN0b3JlJiZ0 aGlzLnN0b3JlLmF1dG9EZXN0cm95KXt0aGlzLnN0b3JlLmRlc3Ryb3koKX19RXh0LmRlc3Ryb3ko dGhpcy5jb2xNb2RlbCx0aGlzLnNlbE1vZGVsKTt0aGlzLnN0b3JlPXRoaXMuc2VsTW9kZWw9dGhp cy5jb2xNb2RlbD10aGlzLnZpZXc9dGhpcy5sb2FkTWFzaz1udWxsO0V4dC5ncmlkLkdyaWRQYW5l bC5zdXBlcmNsYXNzLm9uRGVzdHJveS5jYWxsKHRoaXMpfSxwcm9jZXNzRXZlbnQ6ZnVuY3Rpb24o YyxnKXt0aGlzLmZpcmVFdmVudChjLGcpO3ZhciBkPWcuZ2V0VGFyZ2V0KCk7dmFyIGI9dGhpcy52 aWV3O3ZhciBpPWIuZmluZEhlYWRlckluZGV4KGQpO2lmKGkhPT1mYWxzZSl7dGhpcy5maXJlRXZl bnQoImhlYWRlciIrYyx0aGlzLGksZyl9ZWxzZXt2YXIgaD1iLmZpbmRSb3dJbmRleChkKTt2YXIg YT1iLmZpbmRDZWxsSW5kZXgoZCk7aWYoaCE9PWZhbHNlKXt0aGlzLmZpcmVFdmVudCgicm93Iitj LHRoaXMsaCxnKTtpZihhIT09ZmFsc2Upe3RoaXMuZmlyZUV2ZW50KCJjZWxsIitjLHRoaXMsaCxh LGcpfX19fSxvbkNsaWNrOmZ1bmN0aW9uKGEpe3RoaXMucHJvY2Vzc0V2ZW50KCJjbGljayIsYSl9 LG9uTW91c2VEb3duOmZ1bmN0aW9uKGEpe3RoaXMucHJvY2Vzc0V2ZW50KCJtb3VzZWRvd24iLGEp fSxvbkNvbnRleHRNZW51OmZ1bmN0aW9uKGIsYSl7dGhpcy5wcm9jZXNzRXZlbnQoImNvbnRleHRt ZW51IixiKX0sb25EYmxDbGljazpmdW5jdGlvbihhKXt0aGlzLnByb2Nlc3NFdmVudCgiZGJsY2xp Y2siLGEpfSx3YWxrQ2VsbHM6ZnVuY3Rpb24oayxjLGIsZSxqKXt2YXIgaT10aGlzLmNvbE1vZGVs LGc9aS5nZXRDb2x1bW5Db3VudCgpO3ZhciBhPXRoaXMuc3RvcmUsaD1hLmdldENvdW50KCksZD10 cnVlO2lmKGI8MCl7aWYoYzwwKXtrLS07ZD1mYWxzZX13aGlsZShrPj0wKXtpZighZCl7Yz1nLTF9 ZD1mYWxzZTt3aGlsZShjPj0wKXtpZihlLmNhbGwoanx8dGhpcyxrLGMsaSk9PT10cnVlKXtyZXR1 cm5bayxjXX1jLS19ay0tfX1lbHNle2lmKGM+PWcpe2srKztkPWZhbHNlfXdoaWxlKGs8aCl7aWYo IWQpe2M9MH1kPWZhbHNlO3doaWxlKGM8Zyl7aWYoZS5jYWxsKGp8fHRoaXMsayxjLGkpPT09dHJ1 ZSl7cmV0dXJuW2ssY119YysrfWsrK319cmV0dXJuIG51bGx9LG9uUmVzaXplOmZ1bmN0aW9uKCl7 RXh0LmdyaWQuR3JpZFBhbmVsLnN1cGVyY2xhc3Mub25SZXNpemUuYXBwbHkodGhpcyxhcmd1bWVu dHMpO2lmKHRoaXMudmlld1JlYWR5KXt0aGlzLnZpZXcubGF5b3V0KCl9fSxnZXRHcmlkRWw6ZnVu Y3Rpb24oKXtyZXR1cm4gdGhpcy5ib2R5fSxzdG9wRWRpdGluZzpFeHQuZW1wdHlGbixnZXRTZWxl Y3Rpb25Nb2RlbDpmdW5jdGlvbigpe2lmKCF0aGlzLnNlbE1vZGVsKXt0aGlzLnNlbE1vZGVsPW5l dyBFeHQuZ3JpZC5Sb3dTZWxlY3Rpb25Nb2RlbCh0aGlzLmRpc2FibGVTZWxlY3Rpb24/e3NlbGVj dFJvdzpFeHQuZW1wdHlGbn06bnVsbCl9cmV0dXJuIHRoaXMuc2VsTW9kZWx9LGdldFN0b3JlOmZ1 bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcmV9LGdldENvbHVtbk1vZGVsOmZ1bmN0aW9uKCl7cmV0 dXJuIHRoaXMuY29sTW9kZWx9LGdldFZpZXc6ZnVuY3Rpb24oKXtpZighdGhpcy52aWV3KXt0aGlz LnZpZXc9bmV3IEV4dC5ncmlkLkdyaWRWaWV3KHRoaXMudmlld0NvbmZpZyl9cmV0dXJuIHRoaXMu dmlld30sZ2V0RHJhZ0Ryb3BUZXh0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZWxNb2RlbC5nZXRD b3VudCgpO3JldHVybiBTdHJpbmcuZm9ybWF0KHRoaXMuZGRUZXh0LGEsYT09MT8iIjoicyIpfX0p O0V4dC5yZWcoImdyaWQiLEV4dC5ncmlkLkdyaWRQYW5lbCk7RXh0LmdyaWQuR3JpZFZpZXc9ZnVu Y3Rpb24oYSl7RXh0LmFwcGx5KHRoaXMsYSk7dGhpcy5hZGRFdmVudHMoImJlZm9yZXJvd3JlbW92 ZWQiLCJiZWZvcmVyb3dzaW5zZXJ0ZWQiLCJiZWZvcmVyZWZyZXNoIiwicm93cmVtb3ZlZCIsInJv d3NpbnNlcnRlZCIsInJvd3VwZGF0ZWQiLCJyZWZyZXNoIik7RXh0LmdyaWQuR3JpZFZpZXcuc3Vw ZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpfTtFeHQuZXh0ZW5kKEV4dC5ncmlkLkdyaWRW aWV3LEV4dC51dGlsLk9ic2VydmFibGUse2RlZmVyRW1wdHlUZXh0OnRydWUsc2Nyb2xsT2Zmc2V0 OjE5LGF1dG9GaWxsOmZhbHNlLGZvcmNlRml0OmZhbHNlLHNvcnRDbGFzc2VzOlsic29ydC1hc2Mi LCJzb3J0LWRlc2MiXSxzb3J0QXNjVGV4dDoiU29ydCBBc2NlbmRpbmciLHNvcnREZXNjVGV4dDoi U29ydCBEZXNjZW5kaW5nIixjb2x1bW5zVGV4dDoiQ29sdW1ucyIsc2VsZWN0ZWRSb3dDbGFzczoi eC1ncmlkMy1yb3ctc2VsZWN0ZWQiLGJvcmRlcldpZHRoOjIsdGRDbGFzczoieC1ncmlkMy1jZWxs IixoZENsczoieC1ncmlkMy1oZCIsbWFya0RpcnR5OnRydWUsY2VsbFNlbGVjdG9yRGVwdGg6NCxy b3dTZWxlY3RvckRlcHRoOjEwLGNlbGxTZWxlY3RvcjoidGQueC1ncmlkMy1jZWxsIixyb3dTZWxl Y3RvcjoiZGl2LngtZ3JpZDMtcm93IixmaXJzdFJvd0NsczoieC1ncmlkMy1yb3ctZmlyc3QiLGxh c3RSb3dDbHM6IngtZ3JpZDMtcm93LWxhc3QiLHJvd0Nsc1JlOi8oPzpefFxzKyl4LWdyaWQzLXJv dy0oZmlyc3R8bGFzdHxhbHQpKD86XHMrfCQpL2csaW5pdFRlbXBsYXRlczpmdW5jdGlvbigpe3Zh ciBjPXRoaXMudGVtcGxhdGVzfHx7fTtpZighYy5tYXN0ZXIpe2MubWFzdGVyPW5ldyBFeHQuVGVt cGxhdGUoJzxkaXYgY2xhc3M9IngtZ3JpZDMiIGhpZGVmb2N1cz0idHJ1ZSI+JywnPGRpdiBjbGFz cz0ieC1ncmlkMy12aWV3cG9ydCI+JywnPGRpdiBjbGFzcz0ieC1ncmlkMy1oZWFkZXIiPjxkaXYg Y2xhc3M9IngtZ3JpZDMtaGVhZGVyLWlubmVyIj48ZGl2IGNsYXNzPSJ4LWdyaWQzLWhlYWRlci1v ZmZzZXQiIHN0eWxlPSJ7b3N0eWxlfSI+e2hlYWRlcn08L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJ4 LWNsZWFyIj48L2Rpdj48L2Rpdj4nLCc8ZGl2IGNsYXNzPSJ4LWdyaWQzLXNjcm9sbGVyIj48ZGl2 IGNsYXNzPSJ4LWdyaWQzLWJvZHkiIHN0eWxlPSJ7YnN0eWxlfSI+e2JvZHl9PC9kaXY+PGEgaHJl Zj0iIyIgY2xhc3M9IngtZ3JpZDMtZm9jdXMiIHRhYkluZGV4PSItMSI+PC9hPjwvZGl2PicsIjwv ZGl2PiIsJzxkaXYgY2xhc3M9IngtZ3JpZDMtcmVzaXplLW1hcmtlciI+JiMxNjA7PC9kaXY+Jywn PGRpdiBjbGFzcz0ieC1ncmlkMy1yZXNpemUtcHJveHkiPiYjMTYwOzwvZGl2PicsIjwvZGl2PiIp fWlmKCFjLmhlYWRlcil7Yy5oZWFkZXI9bmV3IEV4dC5UZW1wbGF0ZSgnPHRhYmxlIGJvcmRlcj0i MCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBzdHlsZT0ie3RzdHlsZX0iPicsJzx0 aGVhZD48dHIgY2xhc3M9IngtZ3JpZDMtaGQtcm93Ij57Y2VsbHN9PC90cj48L3RoZWFkPicsIjwv dGFibGU+Iil9aWYoIWMuaGNlbGwpe2MuaGNlbGw9bmV3IEV4dC5UZW1wbGF0ZSgnPHRkIGNsYXNz PSJ4LWdyaWQzLWhkIHgtZ3JpZDMtY2VsbCB4LWdyaWQzLXRkLXtpZH0ge2Nzc30iIHN0eWxlPSJ7 c3R5bGV9Ij48ZGl2IHt0b29sdGlwfSB7YXR0cn0gY2xhc3M9IngtZ3JpZDMtaGQtaW5uZXIgeC1n cmlkMy1oZC17aWR9IiB1bnNlbGVjdGFibGU9Im9uIiBzdHlsZT0ie2lzdHlsZX0iPicsdGhpcy5n cmlkLmVuYWJsZUhkTWVudT8nPGEgY2xhc3M9IngtZ3JpZDMtaGQtYnRuIiBocmVmPSIjIj48L2E+ JzoiIiwne3ZhbHVlfTxpbWcgY2xhc3M9IngtZ3JpZDMtc29ydC1pY29uIiBzcmM9IicsRXh0LkJM QU5LX0lNQUdFX1VSTCwnIiAvPicsIjwvZGl2PjwvdGQ+Iil9aWYoIWMuYm9keSl7Yy5ib2R5PW5l dyBFeHQuVGVtcGxhdGUoIntyb3dzfSIpfWlmKCFjLnJvdyl7Yy5yb3c9bmV3IEV4dC5UZW1wbGF0 ZSgnPGRpdiBjbGFzcz0ieC1ncmlkMy1yb3cge2FsdH0iIHN0eWxlPSJ7dHN0eWxlfSI+PHRhYmxl IGNsYXNzPSJ4LWdyaWQzLXJvdy10YWJsZSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2Vs bHBhZGRpbmc9IjAiIHN0eWxlPSJ7dHN0eWxlfSI+JywiPHRib2R5Pjx0cj57Y2VsbHN9PC90cj4i LCh0aGlzLmVuYWJsZVJvd0JvZHk/Jzx0ciBjbGFzcz0ieC1ncmlkMy1yb3ctYm9keS10ciIgc3R5 bGU9Intib2R5U3R5bGV9Ij48dGQgY29sc3Bhbj0ie2NvbHN9IiBjbGFzcz0ieC1ncmlkMy1ib2R5 LWNlbGwiIHRhYkluZGV4PSIwIiBoaWRlZm9jdXM9Im9uIj48ZGl2IGNsYXNzPSJ4LWdyaWQzLXJv dy1ib2R5Ij57Ym9keX08L2Rpdj48L3RkPjwvdHI+JzoiIiksIjwvdGJvZHk+PC90YWJsZT48L2Rp dj4iKX1pZighYy5jZWxsKXtjLmNlbGw9bmV3IEV4dC5UZW1wbGF0ZSgnPHRkIGNsYXNzPSJ4LWdy aWQzLWNvbCB4LWdyaWQzLWNlbGwgeC1ncmlkMy10ZC17aWR9IHtjc3N9IiBzdHlsZT0ie3N0eWxl fSIgdGFiSW5kZXg9IjAiIHtjZWxsQXR0cn0+JywnPGRpdiBjbGFzcz0ieC1ncmlkMy1jZWxsLWlu bmVyIHgtZ3JpZDMtY29sLXtpZH0iIHVuc2VsZWN0YWJsZT0ib24iIHthdHRyfT57dmFsdWV9PC9k aXY+JywiPC90ZD4iKX1mb3IodmFyIGEgaW4gYyl7dmFyIGI9Y1thXTtpZihiJiZ0eXBlb2YgYi5j b21waWxlPT0iZnVuY3Rpb24iJiYhYi5jb21waWxlZCl7Yi5kaXNhYmxlRm9ybWF0cz10cnVlO2Iu Y29tcGlsZSgpfX10aGlzLnRlbXBsYXRlcz1jO3RoaXMuY29sUmU9bmV3IFJlZ0V4cCgieC1ncmlk My10ZC0oW15cXHNdKykiLCIiKX0sZmx5OmZ1bmN0aW9uKGEpe2lmKCF0aGlzLl9mbHl3ZWlnaHQp e3RoaXMuX2ZseXdlaWdodD1uZXcgRXh0LkVsZW1lbnQuRmx5d2VpZ2h0KGRvY3VtZW50LmJvZHkp fXRoaXMuX2ZseXdlaWdodC5kb209YTtyZXR1cm4gdGhpcy5fZmx5d2VpZ2h0fSxnZXRFZGl0b3JQ YXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY3JvbGxlci5kb219LGluaXRFbGVtZW50czpm dW5jdGlvbigpe3ZhciBjPUV4dC5FbGVtZW50O3ZhciBiPXRoaXMuZ3JpZC5nZXRHcmlkRWwoKS5k b20uZmlyc3RDaGlsZDt2YXIgYT1iLmNoaWxkTm9kZXM7dGhpcy5lbD1uZXcgYyhiKTt0aGlzLm1h aW5XcmFwPW5ldyBjKGFbMF0pO3RoaXMubWFpbkhkPW5ldyBjKHRoaXMubWFpbldyYXAuZG9tLmZp cnN0Q2hpbGQpO2lmKHRoaXMuZ3JpZC5oaWRlSGVhZGVycyl7dGhpcy5tYWluSGQuc2V0RGlzcGxh eWVkKGZhbHNlKX10aGlzLmlubmVySGQ9dGhpcy5tYWluSGQuZG9tLmZpcnN0Q2hpbGQ7dGhpcy5z Y3JvbGxlcj1uZXcgYyh0aGlzLm1haW5XcmFwLmRvbS5jaGlsZE5vZGVzWzFdKTtpZih0aGlzLmZv cmNlRml0KXt0aGlzLnNjcm9sbGVyLnNldFN0eWxlKCJvdmVyZmxvdy14IiwiaGlkZGVuIil9dGhp cy5tYWluQm9keT1uZXcgYyh0aGlzLnNjcm9sbGVyLmRvbS5maXJzdENoaWxkKTt0aGlzLmZvY3Vz RWw9bmV3IGModGhpcy5zY3JvbGxlci5kb20uY2hpbGROb2Rlc1sxXSk7dGhpcy5mb2N1c0VsLnN3 YWxsb3dFdmVudCgiY2xpY2siLHRydWUpO3RoaXMucmVzaXplTWFya2VyPW5ldyBjKGFbMV0pO3Ro aXMucmVzaXplUHJveHk9bmV3IGMoYVsyXSl9LGdldFJvd3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp cy5oYXNSb3dzKCk/dGhpcy5tYWluQm9keS5kb20uY2hpbGROb2RlczpbXX0sZmluZENlbGw6ZnVu Y3Rpb24oYSl7aWYoIWEpe3JldHVybiBmYWxzZX1yZXR1cm4gdGhpcy5mbHkoYSkuZmluZFBhcmVu dCh0aGlzLmNlbGxTZWxlY3Rvcix0aGlzLmNlbGxTZWxlY3RvckRlcHRoKX0sZmluZENlbGxJbmRl eDpmdW5jdGlvbihjLGIpe3ZhciBhPXRoaXMuZmluZENlbGwoYyk7aWYoYSYmKCFifHx0aGlzLmZs eShhKS5oYXNDbGFzcyhiKSkpe3JldHVybiB0aGlzLmdldENlbGxJbmRleChhKX1yZXR1cm4gZmFs c2V9LGdldENlbGxJbmRleDpmdW5jdGlvbihiKXtpZihiKXt2YXIgYT1iLmNsYXNzTmFtZS5tYXRj aCh0aGlzLmNvbFJlKTtpZihhJiZhWzFdKXtyZXR1cm4gdGhpcy5jbS5nZXRJbmRleEJ5SWQoYVsx XSl9fXJldHVybiBmYWxzZX0sZmluZEhlYWRlckNlbGw6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5m aW5kQ2VsbChiKTtyZXR1cm4gYSYmdGhpcy5mbHkoYSkuaGFzQ2xhc3ModGhpcy5oZENscyk/YTpu dWxsfSxmaW5kSGVhZGVySW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZmluZENlbGxJbmRl eChhLHRoaXMuaGRDbHMpfSxmaW5kUm93OmZ1bmN0aW9uKGEpe2lmKCFhKXtyZXR1cm4gZmFsc2V9 cmV0dXJuIHRoaXMuZmx5KGEpLmZpbmRQYXJlbnQodGhpcy5yb3dTZWxlY3Rvcix0aGlzLnJvd1Nl bGVjdG9yRGVwdGgpfSxmaW5kUm93SW5kZXg6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5maW5kUm93 KGEpO3JldHVybiBiP2Iucm93SW5kZXg6ZmFsc2V9LGdldFJvdzpmdW5jdGlvbihhKXtyZXR1cm4g dGhpcy5nZXRSb3dzKClbYV19LGdldENlbGw6ZnVuY3Rpb24oYixhKXtyZXR1cm4gdGhpcy5nZXRS b3coYikuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIilbYV19LGdldEhlYWRlckNlbGw6ZnVuY3Rp b24oYSl7cmV0dXJuIHRoaXMubWFpbkhkLmRvbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKVth XX0sYWRkUm93Q2xhc3M6ZnVuY3Rpb24oYyxhKXt2YXIgYj10aGlzLmdldFJvdyhjKTtpZihiKXt0 aGlzLmZseShiKS5hZGRDbGFzcyhhKX19LHJlbW92ZVJvd0NsYXNzOmZ1bmN0aW9uKGMsYSl7dmFy IGI9dGhpcy5nZXRSb3coYyk7aWYoYil7dGhpcy5mbHkoYikucmVtb3ZlQ2xhc3MoYSl9fSxyZW1v dmVSb3c6ZnVuY3Rpb24oYSl7RXh0LnJlbW92ZU5vZGUodGhpcy5nZXRSb3coYSkpO3RoaXMuc3lu Y0ZvY3VzRWwoYSl9LHJlbW92ZVJvd3M6ZnVuY3Rpb24oYyxhKXt2YXIgYj10aGlzLm1haW5Cb2R5 LmRvbTtmb3IodmFyIGQ9YztkPD1hO2QrKyl7RXh0LnJlbW92ZU5vZGUoYi5jaGlsZE5vZGVzW2Nd KX10aGlzLnN5bmNGb2N1c0VsKGMpfSxnZXRTY3JvbGxTdGF0ZTpmdW5jdGlvbigpe3ZhciBhPXRo aXMuc2Nyb2xsZXIuZG9tO3JldHVybntsZWZ0OmEuc2Nyb2xsTGVmdCx0b3A6YS5zY3JvbGxUb3B9 fSxyZXN0b3JlU2Nyb2xsOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuc2Nyb2xsZXIuZG9tO2Iuc2Ny b2xsTGVmdD1hLmxlZnQ7Yi5zY3JvbGxUb3A9YS50b3B9LHNjcm9sbFRvVG9wOmZ1bmN0aW9uKCl7 dGhpcy5zY3JvbGxlci5kb20uc2Nyb2xsVG9wPTA7dGhpcy5zY3JvbGxlci5kb20uc2Nyb2xsTGVm dD0wfSxzeW5jU2Nyb2xsOmZ1bmN0aW9uKCl7dGhpcy5zeW5jSGVhZGVyU2Nyb2xsKCk7dmFyIGE9 dGhpcy5zY3JvbGxlci5kb207dGhpcy5ncmlkLmZpcmVFdmVudCgiYm9keXNjcm9sbCIsYS5zY3Jv bGxMZWZ0LGEuc2Nyb2xsVG9wKX0sc3luY0hlYWRlclNjcm9sbDpmdW5jdGlvbigpe3ZhciBhPXRo aXMuc2Nyb2xsZXIuZG9tO3RoaXMuaW5uZXJIZC5zY3JvbGxMZWZ0PWEuc2Nyb2xsTGVmdDt0aGlz LmlubmVySGQuc2Nyb2xsTGVmdD1hLnNjcm9sbExlZnR9LHVwZGF0ZVNvcnRJY29uOmZ1bmN0aW9u KGIsYSl7dmFyIGQ9dGhpcy5zb3J0Q2xhc3Nlczt2YXIgYz10aGlzLm1haW5IZC5zZWxlY3QoInRk IikucmVtb3ZlQ2xhc3MoZCk7Yy5pdGVtKGIpLmFkZENsYXNzKGRbYT09IkRFU0MiPzE6MF0pfSx1 cGRhdGVBbGxDb2x1bW5XaWR0aHM6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmdldFRvdGFsV2lkdGgo KSxsPXRoaXMuY20uZ2V0Q29sdW1uQ291bnQoKSxnPVtdLGUsYjtmb3IoYj0wO2I8bDtiKyspe2db Yl09dGhpcy5nZXRDb2x1bW5XaWR0aChiKX10aGlzLmlubmVySGQuZmlyc3RDaGlsZC5zdHlsZS53 aWR0aD10aGlzLmdldE9mZnNldFdpZHRoKCk7dGhpcy5pbm5lckhkLmZpcnN0Q2hpbGQuZmlyc3RD aGlsZC5zdHlsZS53aWR0aD1kO3RoaXMubWFpbkJvZHkuZG9tLnN0eWxlLndpZHRoPWQ7Zm9yKGI9 MDtiPGw7YisrKXt2YXIgYz10aGlzLmdldEhlYWRlckNlbGwoYik7Yy5zdHlsZS53aWR0aD1nW2Jd fXZhciBrPXRoaXMuZ2V0Um93cygpLG0saDtmb3IoYj0wLGU9ay5sZW5ndGg7YjxlO2IrKyl7bT1r W2JdO20uc3R5bGUud2lkdGg9ZDtpZihtLmZpcnN0Q2hpbGQpe20uZmlyc3RDaGlsZC5zdHlsZS53 aWR0aD1kO2g9bS5maXJzdENoaWxkLnJvd3NbMF07Zm9yKHZhciBhPTA7YTxsO2ErKyl7aC5jaGls ZE5vZGVzW2FdLnN0eWxlLndpZHRoPWdbYV19fX10aGlzLm9uQWxsQ29sdW1uV2lkdGhzVXBkYXRl ZChnLGQpfSx1cGRhdGVDb2x1bW5XaWR0aDpmdW5jdGlvbihiLGEpe3ZhciBqPXRoaXMuZ2V0Q29s dW1uV2lkdGgoYik7dmFyIGU9dGhpcy5nZXRUb3RhbFdpZHRoKCk7dGhpcy5pbm5lckhkLmZpcnN0 Q2hpbGQuc3R5bGUud2lkdGg9dGhpcy5nZXRPZmZzZXRXaWR0aCgpO3RoaXMuaW5uZXJIZC5maXJz dENoaWxkLmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9ZTt0aGlzLm1haW5Cb2R5LmRvbS5zdHlsZS53 aWR0aD1lO3ZhciBkPXRoaXMuZ2V0SGVhZGVyQ2VsbChiKTtkLnN0eWxlLndpZHRoPWo7dmFyIGg9 dGhpcy5nZXRSb3dzKCksaztmb3IodmFyIGM9MCxnPWgubGVuZ3RoO2M8ZztjKyspe2s9aFtjXTtr LnN0eWxlLndpZHRoPWU7aWYoay5maXJzdENoaWxkKXtrLmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9 ZTtrLmZpcnN0Q2hpbGQucm93c1swXS5jaGlsZE5vZGVzW2JdLnN0eWxlLndpZHRoPWp9fXRoaXMu b25Db2x1bW5XaWR0aFVwZGF0ZWQoYixqLGUpfSx1cGRhdGVDb2x1bW5IaWRkZW46ZnVuY3Rpb24o YSxlKXt2YXIgZD10aGlzLmdldFRvdGFsV2lkdGgoKTt0aGlzLmlubmVySGQuZmlyc3RDaGlsZC5z dHlsZS53aWR0aD10aGlzLmdldE9mZnNldFdpZHRoKCk7dGhpcy5pbm5lckhkLmZpcnN0Q2hpbGQu Zmlyc3RDaGlsZC5zdHlsZS53aWR0aD1kO3RoaXMubWFpbkJvZHkuZG9tLnN0eWxlLndpZHRoPWQ7 dmFyIGg9ZT8ibm9uZSI6IiI7dmFyIGM9dGhpcy5nZXRIZWFkZXJDZWxsKGEpO2Muc3R5bGUuZGlz cGxheT1oO3ZhciBqPXRoaXMuZ2V0Um93cygpLGs7Zm9yKHZhciBiPTAsZz1qLmxlbmd0aDtiPGc7 YisrKXtrPWpbYl07ay5zdHlsZS53aWR0aD1kO2lmKGsuZmlyc3RDaGlsZCl7ay5maXJzdENoaWxk LnN0eWxlLndpZHRoPWQ7ay5maXJzdENoaWxkLnJvd3NbMF0uY2hpbGROb2Rlc1thXS5zdHlsZS5k aXNwbGF5PWh9fXRoaXMub25Db2x1bW5IaWRkZW5VcGRhdGVkKGEsZSxkKTtkZWxldGUgdGhpcy5s YXN0Vmlld1dpZHRoO3RoaXMubGF5b3V0KCl9LGRvUmVuZGVyOmZ1bmN0aW9uKGcsayxzLGEscSx3 KXt2YXIgYj10aGlzLnRlbXBsYXRlcyxlPWIuY2VsbCxoPWIucm93LGw9cS0xO3ZhciBkPSJ3aWR0 aDoiK3RoaXMuZ2V0VG90YWxXaWR0aCgpKyI7Ijt2YXIgej1bXSx0LEEsdT17fSxtPXt0c3R5bGU6 ZH0sbztmb3IodmFyIHY9MCx5PWsubGVuZ3RoO3Y8eTt2Kyspe289a1t2XTt0PVtdO3ZhciBuPSh2 K2EpO2Zvcih2YXIgeD0wO3g8cTt4Kyspe0E9Z1t4XTt1LmlkPUEuaWQ7dS5jc3M9eD09PTA/Ingt Z3JpZDMtY2VsbC1maXJzdCAiOih4PT1sPyJ4LWdyaWQzLWNlbGwtbGFzdCAiOiIiKTt1LmF0dHI9 dS5jZWxsQXR0cj0iIjt1LnZhbHVlPUEucmVuZGVyZXIoby5kYXRhW0EubmFtZV0sdSxvLG4seCxz KTt1LnN0eWxlPUEuc3R5bGU7aWYoRXh0LmlzRW1wdHkodS52YWx1ZSkpe3UudmFsdWU9IiYjMTYw OyJ9aWYodGhpcy5tYXJrRGlydHkmJm8uZGlydHkmJnR5cGVvZiBvLm1vZGlmaWVkW0EubmFtZV0h PT0idW5kZWZpbmVkIil7dS5jc3MrPSIgeC1ncmlkMy1kaXJ0eS1jZWxsIn10W3QubGVuZ3RoXT1l LmFwcGx5KHUpfXZhciBCPVtdO2lmKHcmJigobisxKSUyPT09MCkpe0JbMF09IngtZ3JpZDMtcm93 LWFsdCJ9aWYoby5kaXJ0eSl7QlsxXT0iIHgtZ3JpZDMtZGlydHktcm93In1tLmNvbHM9cTtpZih0 aGlzLmdldFJvd0NsYXNzKXtCWzJdPXRoaXMuZ2V0Um93Q2xhc3MobyxuLG0scyl9bS5hbHQ9Qi5q b2luKCIgIik7bS5jZWxscz10LmpvaW4oIiIpO3pbei5sZW5ndGhdPWguYXBwbHkobSl9cmV0dXJu IHouam9pbigiIil9LHByb2Nlc3NSb3dzOmZ1bmN0aW9uKGEsYyl7aWYoIXRoaXMuZHN8fHRoaXMu ZHMuZ2V0Q291bnQoKTwxKXtyZXR1cm59dmFyIGI9dGhpcy5nZXRSb3dzKCk7Yz1jfHwhdGhpcy5n cmlkLnN0cmlwZVJvd3M7YT1hfHwwO0V4dC5lYWNoKGIsZnVuY3Rpb24oZSxkKXtlLnJvd0luZGV4 PWQ7ZS5jbGFzc05hbWU9ZS5jbGFzc05hbWUucmVwbGFjZSh0aGlzLnJvd0Nsc1JlLCIgIik7aWYo IWMmJihkKzEpJTI9PT0wKXtlLmNsYXNzTmFtZSs9IiB4LWdyaWQzLXJvdy1hbHQifX0pO2lmKGE9 PT0wKXtFeHQuZmx5KGJbMF0pLmFkZENsYXNzKHRoaXMuZmlyc3RSb3dDbHMpfUV4dC5mbHkoYlti Lmxlbmd0aC0xXSkuYWRkQ2xhc3ModGhpcy5sYXN0Um93Q2xzKX0sYWZ0ZXJSZW5kZXI6ZnVuY3Rp b24oKXtpZighdGhpcy5kc3x8IXRoaXMuY20pe3JldHVybn10aGlzLm1haW5Cb2R5LmRvbS5pbm5l ckhUTUw9dGhpcy5yZW5kZXJSb3dzKCl8fCImIzE2MDsiO3RoaXMucHJvY2Vzc1Jvd3MoMCx0cnVl KTtpZih0aGlzLmRlZmVyRW1wdHlUZXh0IT09dHJ1ZSl7dGhpcy5hcHBseUVtcHR5VGV4dCgpfX0s cmVuZGVyVUk6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLnJlbmRlckhlYWRlcnMoKTt2YXIgYT10aGlz LnRlbXBsYXRlcy5ib2R5LmFwcGx5KHtyb3dzOiImIzE2MDsifSk7dmFyIGI9dGhpcy50ZW1wbGF0 ZXMubWFzdGVyLmFwcGx5KHtib2R5OmEsaGVhZGVyOmQsb3N0eWxlOiJ3aWR0aDoiK3RoaXMuZ2V0 T2Zmc2V0V2lkdGgoKSsiOyIsYnN0eWxlOiJ3aWR0aDoiK3RoaXMuZ2V0VG90YWxXaWR0aCgpKyI7 In0pO3ZhciBjPXRoaXMuZ3JpZDtjLmdldEdyaWRFbCgpLmRvbS5pbm5lckhUTUw9Yjt0aGlzLmlu aXRFbGVtZW50cygpO0V4dC5mbHkodGhpcy5pbm5lckhkKS5vbigiY2xpY2siLHRoaXMuaGFuZGxl SGREb3duLHRoaXMpO3RoaXMubWFpbkhkLm9uKHtzY29wZTp0aGlzLG1vdXNlb3Zlcjp0aGlzLmhh bmRsZUhkT3Zlcixtb3VzZW91dDp0aGlzLmhhbmRsZUhkT3V0LG1vdXNlbW92ZTp0aGlzLmhhbmRs ZUhkTW92ZX0pO3RoaXMuc2Nyb2xsZXIub24oInNjcm9sbCIsdGhpcy5zeW5jU2Nyb2xsLHRoaXMp O2lmKGMuZW5hYmxlQ29sdW1uUmVzaXplIT09ZmFsc2Upe3RoaXMuc3BsaXRab25lPW5ldyBFeHQu Z3JpZC5HcmlkVmlldy5TcGxpdERyYWdab25lKGMsdGhpcy5tYWluSGQuZG9tKX1pZihjLmVuYWJs ZUNvbHVtbk1vdmUpe3RoaXMuY29sdW1uRHJhZz1uZXcgRXh0LmdyaWQuR3JpZFZpZXcuQ29sdW1u RHJhZ1pvbmUoYyx0aGlzLmlubmVySGQpO3RoaXMuY29sdW1uRHJvcD1uZXcgRXh0LmdyaWQuSGVh ZGVyRHJvcFpvbmUoYyx0aGlzLm1haW5IZC5kb20pfWlmKGMuZW5hYmxlSGRNZW51IT09ZmFsc2Up e3RoaXMuaG1lbnU9bmV3IEV4dC5tZW51Lk1lbnUoe2lkOmMuaWQrIi1oY3R4In0pO3RoaXMuaG1l bnUuYWRkKHtpdGVtSWQ6ImFzYyIsdGV4dDp0aGlzLnNvcnRBc2NUZXh0LGNsczoieGctaG1lbnUt c29ydC1hc2MifSx7aXRlbUlkOiJkZXNjIix0ZXh0OnRoaXMuc29ydERlc2NUZXh0LGNsczoieGct aG1lbnUtc29ydC1kZXNjIn0pO2lmKGMuZW5hYmxlQ29sdW1uSGlkZSE9PWZhbHNlKXt0aGlzLmNv bE1lbnU9bmV3IEV4dC5tZW51Lk1lbnUoe2lkOmMuaWQrIi1oY29scy1tZW51In0pO3RoaXMuY29s TWVudS5vbih7c2NvcGU6dGhpcyxiZWZvcmVzaG93OnRoaXMuYmVmb3JlQ29sTWVudVNob3csaXRl bWNsaWNrOnRoaXMuaGFuZGxlSGRNZW51Q2xpY2t9KTt0aGlzLmhtZW51LmFkZCgiLSIse2l0ZW1J ZDoiY29sdW1ucyIsaGlkZU9uQ2xpY2s6ZmFsc2UsdGV4dDp0aGlzLmNvbHVtbnNUZXh0LG1lbnU6 dGhpcy5jb2xNZW51LGljb25DbHM6IngtY29scy1pY29uIn0pfXRoaXMuaG1lbnUub24oIml0ZW1j bGljayIsdGhpcy5oYW5kbGVIZE1lbnVDbGljayx0aGlzKX1pZihjLnRyYWNrTW91c2VPdmVyKXt0 aGlzLm1haW5Cb2R5Lm9uKHtzY29wZTp0aGlzLG1vdXNlb3Zlcjp0aGlzLm9uUm93T3Zlcixtb3Vz ZW91dDp0aGlzLm9uUm93T3V0fSl9aWYoYy5lbmFibGVEcmFnRHJvcHx8Yy5lbmFibGVEcmFnKXt0 aGlzLmRyYWdab25lPW5ldyBFeHQuZ3JpZC5HcmlkRHJhZ1pvbmUoYyx7ZGRHcm91cDpjLmRkR3Jv dXB8fCJHcmlkREQifSl9dGhpcy51cGRhdGVIZWFkZXJTb3J0U3RhdGUoKX0sbGF5b3V0OmZ1bmN0 aW9uKCl7aWYoIXRoaXMubWFpbkJvZHkpe3JldHVybn12YXIgZD10aGlzLmdyaWQ7dmFyIGk9ZC5n ZXRHcmlkRWwoKTt2YXIgYT1pLmdldFNpemUodHJ1ZSk7dmFyIGI9YS53aWR0aDtpZighZC5oaWRl SGVhZGVycyYmKGI8MjB8fGEuaGVpZ2h0PDIwKSl7cmV0dXJufWlmKGQuYXV0b0hlaWdodCl7dGhp cy5zY3JvbGxlci5kb20uc3R5bGUub3ZlcmZsb3c9InZpc2libGUiO2lmKEV4dC5pc1dlYktpdCl7 dGhpcy5zY3JvbGxlci5kb20uc3R5bGUucG9zaXRpb249InN0YXRpYyJ9fWVsc2V7dGhpcy5lbC5z ZXRTaXplKGEud2lkdGgsYS5oZWlnaHQpO3ZhciBoPXRoaXMubWFpbkhkLmdldEhlaWdodCgpO3Zh ciBlPWEuaGVpZ2h0LShoKTt0aGlzLnNjcm9sbGVyLnNldFNpemUoYixlKTtpZih0aGlzLmlubmVy SGQpe3RoaXMuaW5uZXJIZC5zdHlsZS53aWR0aD0oYikrInB4In19aWYodGhpcy5mb3JjZUZpdCl7 aWYodGhpcy5sYXN0Vmlld1dpZHRoIT1iKXt0aGlzLmZpdENvbHVtbnMoZmFsc2UsZmFsc2UpO3Ro aXMubGFzdFZpZXdXaWR0aD1ifX1lbHNle3RoaXMuYXV0b0V4cGFuZCgpO3RoaXMuc3luY0hlYWRl clNjcm9sbCgpfXRoaXMub25MYXlvdXQoYixlKX0sb25MYXlvdXQ6ZnVuY3Rpb24oYSxiKXt9LG9u Q29sdW1uV2lkdGhVcGRhdGVkOmZ1bmN0aW9uKGMsYSxiKXt9LG9uQWxsQ29sdW1uV2lkdGhzVXBk YXRlZDpmdW5jdGlvbihhLGIpe30sb25Db2x1bW5IaWRkZW5VcGRhdGVkOmZ1bmN0aW9uKGIsYyxh KXt9LHVwZGF0ZUNvbHVtblRleHQ6ZnVuY3Rpb24oYSxiKXt9LGFmdGVyTW92ZTpmdW5jdGlvbihh KXt9LGluaXQ6ZnVuY3Rpb24oYSl7dGhpcy5ncmlkPWE7dGhpcy5pbml0VGVtcGxhdGVzKCk7dGhp cy5pbml0RGF0YShhLnN0b3JlLGEuY29sTW9kZWwpO3RoaXMuaW5pdFVJKGEpfSxnZXRDb2x1bW5J ZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jbS5nZXRDb2x1bW5JZChhKX0sZ2V0T2Zmc2V0V2lk dGg6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5jbS5nZXRUb3RhbFdpZHRoKCkrdGhpcy5zY3JvbGxP ZmZzZXQpKyJweCJ9LHJlbmRlckhlYWRlcnM6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmNtLGg9dGhp cy50ZW1wbGF0ZXMsZT1oLmhjZWxsLGI9W10saj17fSxhPWMuZ2V0Q29sdW1uQ291bnQoKSxnPWEt MTtmb3IodmFyIGQ9MDtkPGE7ZCsrKXtqLmlkPWMuZ2V0Q29sdW1uSWQoZCk7ai52YWx1ZT1jLmdl dENvbHVtbkhlYWRlcihkKXx8IiI7ai5zdHlsZT10aGlzLmdldENvbHVtblN0eWxlKGQsdHJ1ZSk7 ai50b29sdGlwPXRoaXMuZ2V0Q29sdW1uVG9vbHRpcChkKTtqLmNzcz1kPT09MD8ieC1ncmlkMy1j ZWxsLWZpcnN0ICI6KGQ9PWc/IngtZ3JpZDMtY2VsbC1sYXN0ICI6IiIpO2lmKGMuY29uZmlnW2Rd LmFsaWduPT0icmlnaHQiKXtqLmlzdHlsZT0icGFkZGluZy1yaWdodDoxNnB4In1lbHNle2RlbGV0 ZSBqLmlzdHlsZX1iW2IubGVuZ3RoXT1lLmFwcGx5KGopfXJldHVybiBoLmhlYWRlci5hcHBseSh7 Y2VsbHM6Yi5qb2luKCIiKSx0c3R5bGU6IndpZHRoOiIrdGhpcy5nZXRUb3RhbFdpZHRoKCkrIjsi fSl9LGdldENvbHVtblRvb2x0aXA6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5jbS5nZXRDb2x1bW5U b29sdGlwKGEpO2lmKGIpe2lmKEV4dC5RdWlja1RpcHMuaXNFbmFibGVkKCkpe3JldHVybidleHQ6 cXRpcD0iJytiKyciJ31lbHNle3JldHVybid0aXRsZT0iJytiKyciJ319cmV0dXJuIiJ9LGJlZm9y ZVVwZGF0ZTpmdW5jdGlvbigpe3RoaXMuZ3JpZC5zdG9wRWRpdGluZyh0cnVlKX0sdXBkYXRlSGVh ZGVyczpmdW5jdGlvbigpe3RoaXMuaW5uZXJIZC5maXJzdENoaWxkLmlubmVySFRNTD10aGlzLnJl bmRlckhlYWRlcnMoKTt0aGlzLmlubmVySGQuZmlyc3RDaGlsZC5zdHlsZS53aWR0aD10aGlzLmdl dE9mZnNldFdpZHRoKCk7dGhpcy5pbm5lckhkLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5zdHlsZS53 aWR0aD10aGlzLmdldFRvdGFsV2lkdGgoKX0sZm9jdXNSb3c6ZnVuY3Rpb24oYSl7dGhpcy5mb2N1 c0NlbGwoYSwwLGZhbHNlKX0sZm9jdXNDZWxsOmZ1bmN0aW9uKGMsYSxiKXt0aGlzLnN5bmNGb2N1 c0VsKHRoaXMuZW5zdXJlVmlzaWJsZShjLGEsYikpO2lmKEV4dC5pc0dlY2tvKXt0aGlzLmZvY3Vz RWwuZm9jdXMoKX1lbHNle3RoaXMuZm9jdXNFbC5mb2N1cy5kZWZlcigxLHRoaXMuZm9jdXNFbCl9 fSxyZXNvbHZlQ2VsbDpmdW5jdGlvbihoLGQsZyl7aWYodHlwZW9mIGghPSJudW1iZXIiKXtoPWgu cm93SW5kZXh9aWYoIXRoaXMuZHMpe3JldHVybiBudWxsfWlmKGg8MHx8aD49dGhpcy5kcy5nZXRD b3VudCgpKXtyZXR1cm4gbnVsbH1kPShkIT09dW5kZWZpbmVkP2Q6MCk7dmFyIGM9dGhpcy5nZXRS b3coaCksYT10aGlzLmNtLGU9YS5nZXRDb2x1bW5Db3VudCgpLGI7aWYoIShnPT09ZmFsc2UmJmQ9 PT0wKSl7d2hpbGUoZDxlJiZhLmlzSGlkZGVuKGQpKXtkKyt9Yj10aGlzLmdldENlbGwoaCxkKX1y ZXR1cm57cm93OmMsY2VsbDpifX0sZ2V0UmVzb2x2ZWRYWTpmdW5jdGlvbihhKXtpZighYSl7cmV0 dXJuIG51bGx9dmFyIGI9dGhpcy5zY3JvbGxlci5kb20sZT1hLmNlbGwsZD1hLnJvdztyZXR1cm4g ZT9FeHQuZmx5KGUpLmdldFhZKCk6W3RoaXMuZWwuZ2V0WCgpLEV4dC5mbHkoZCkuZ2V0WSgpXX0s c3luY0ZvY3VzRWw6ZnVuY3Rpb24oZCxhLGMpe3ZhciBiPWQ7aWYoIUV4dC5pc0FycmF5KGIpKXtk PU1hdGgubWluKGQsTWF0aC5tYXgoMCx0aGlzLmdldFJvd3MoKS5sZW5ndGgtMSkpO2I9dGhpcy5n ZXRSZXNvbHZlZFhZKHRoaXMucmVzb2x2ZUNlbGwoZCxhLGMpKX10aGlzLmZvY3VzRWwuc2V0WFko Ynx8dGhpcy5zY3JvbGxlci5nZXRYWSgpKX0sZW5zdXJlVmlzaWJsZTpmdW5jdGlvbih0LGcsZSl7 dmFyIHI9dGhpcy5yZXNvbHZlQ2VsbCh0LGcsZSk7aWYoIXJ8fCFyLnJvdyl7cmV0dXJufXZhciBr PXIucm93LGg9ci5jZWxsLG49dGhpcy5zY3JvbGxlci5kb20scz0wLGQ9ayxvPXRoaXMuZWwuZG9t O3doaWxlKGQmJmQhPW8pe3MrPWQub2Zmc2V0VG9wO2Q9ZC5vZmZzZXRQYXJlbnR9cy09dGhpcy5t YWluSGQuZG9tLm9mZnNldEhlaWdodDt2YXIgcT1zK2sub2Zmc2V0SGVpZ2h0LGE9bi5jbGllbnRI ZWlnaHQsbT1vK2E7bz1wYXJzZUludChuLnNjcm9sbFRvcCwxMCk7aWYoczxvKXtuLnNjcm9sbFRv cD1zfWVsc2V7aWYocT5tKXtuLnNjcm9sbFRvcD1xLWF9fWlmKGUhPT1mYWxzZSl7dmFyIGw9cGFy c2VJbnQoaC5vZmZzZXRMZWZ0LDEwKTt2YXIgaj1sK2gub2Zmc2V0V2lkdGg7dmFyIGk9cGFyc2VJ bnQobi5zY3JvbGxMZWZ0LDEwKTt2YXIgYj1pK24uY2xpZW50V2lkdGg7aWYobDxpKXtuLnNjcm9s bExlZnQ9bH1lbHNle2lmKGo+Yil7bi5zY3JvbGxMZWZ0PWotbi5jbGllbnRXaWR0aH19fXJldHVy biB0aGlzLmdldFJlc29sdmVkWFkocil9LGluc2VydFJvd3M6ZnVuY3Rpb24oYSxpLGUsaCl7dmFy IGQ9YS5nZXRDb3VudCgpLTE7aWYoIWgmJmk9PT0wJiZlPj1kKXt0aGlzLnJlZnJlc2goKX1lbHNl e2lmKCFoKXt0aGlzLmZpcmVFdmVudCgiYmVmb3Jlcm93c2luc2VydGVkIix0aGlzLGksZSl9dmFy IGI9dGhpcy5yZW5kZXJSb3dzKGksZSksZz10aGlzLmdldFJvdyhpKTtpZihnKXtpZihpPT09MCl7 RXh0LmZseSh0aGlzLmdldFJvdygwKSkucmVtb3ZlQ2xhc3ModGhpcy5maXJzdFJvd0Nscyl9RXh0 LkRvbUhlbHBlci5pbnNlcnRIdG1sKCJiZWZvcmVCZWdpbiIsZyxiKX1lbHNle3ZhciBjPXRoaXMu Z2V0Um93KGQtMSk7aWYoYyl7RXh0LmZseShjKS5yZW1vdmVDbGFzcyh0aGlzLmxhc3RSb3dDbHMp fUV4dC5Eb21IZWxwZXIuaW5zZXJ0SHRtbCgiYmVmb3JlRW5kIix0aGlzLm1haW5Cb2R5LmRvbSxi KX1pZighaCl7dGhpcy5maXJlRXZlbnQoInJvd3NpbnNlcnRlZCIsdGhpcyxpLGUpO3RoaXMucHJv Y2Vzc1Jvd3MoaSl9ZWxzZXtpZihpPT09MHx8aT49ZCl7RXh0LmZseSh0aGlzLmdldFJvdyhpKSku YWRkQ2xhc3MoaT09PTA/dGhpcy5maXJzdFJvd0Nsczp0aGlzLmxhc3RSb3dDbHMpfX19dGhpcy5z eW5jRm9jdXNFbChpKX0sZGVsZXRlUm93czpmdW5jdGlvbihhLGMsYil7aWYoYS5nZXRSb3dDb3Vu dCgpPDEpe3RoaXMucmVmcmVzaCgpfWVsc2V7dGhpcy5maXJlRXZlbnQoImJlZm9yZXJvd3NkZWxl dGVkIix0aGlzLGMsYik7dGhpcy5yZW1vdmVSb3dzKGMsYik7dGhpcy5wcm9jZXNzUm93cyhjKTt0 aGlzLmZpcmVFdmVudCgicm93c2RlbGV0ZWQiLHRoaXMsYyxiKX19LGdldENvbHVtblN0eWxlOmZ1 bmN0aW9uKGEsYyl7dmFyIGI9IWM/KHRoaXMuY20uY29uZmlnW2FdLmNzc3x8IiIpOiIiO2IrPSJ3 aWR0aDoiK3RoaXMuZ2V0Q29sdW1uV2lkdGgoYSkrIjsiO2lmKHRoaXMuY20uaXNIaWRkZW4oYSkp e2IrPSJkaXNwbGF5Om5vbmU7In12YXIgZD10aGlzLmNtLmNvbmZpZ1thXS5hbGlnbjtpZihkKXti Kz0idGV4dC1hbGlnbjoiK2QrIjsifXJldHVybiBifSxnZXRDb2x1bW5XaWR0aDpmdW5jdGlvbihi KXt2YXIgYT10aGlzLmNtLmdldENvbHVtbldpZHRoKGIpO2lmKHR5cGVvZiBhPT0ibnVtYmVyIil7 cmV0dXJuKEV4dC5pc0JvcmRlckJveD9hOihhLXRoaXMuYm9yZGVyV2lkdGg+MD9hLXRoaXMuYm9y ZGVyV2lkdGg6MCkpKyJweCJ9cmV0dXJuIGF9LGdldFRvdGFsV2lkdGg6ZnVuY3Rpb24oKXtyZXR1 cm4gdGhpcy5jbS5nZXRUb3RhbFdpZHRoKCkrInB4In0sZml0Q29sdW1uczpmdW5jdGlvbihkLGgs ail7dmFyIHE9dGhpcy5jbSxrO3ZhciBsPXEuZ2V0VG90YWxXaWR0aChmYWxzZSk7dmFyIGE9dGhp cy5ncmlkLmdldEdyaWRFbCgpLmdldFdpZHRoKHRydWUpLXRoaXMuc2Nyb2xsT2Zmc2V0O2lmKGE8 MjApe3JldHVybn12YXIgZT1hLWw7aWYoZT09PTApe3JldHVybiBmYWxzZX12YXIgbT1xLmdldENv bHVtbkNvdW50KHRydWUpO3ZhciBzPW0tKHR5cGVvZiBqPT0ibnVtYmVyIj8xOjApO2lmKHM9PT0w KXtzPTE7aj11bmRlZmluZWR9dmFyIHI9cS5nZXRDb2x1bW5Db3VudCgpO3ZhciBvPVtdO3ZhciBu PTA7dmFyIGM9MDt2YXIgcDtmb3Ioaz0wO2s8cjtrKyspe2lmKCFxLmlzSGlkZGVuKGspJiYhcS5p c0ZpeGVkKGspJiZrIT09ail7cD1xLmdldENvbHVtbldpZHRoKGspO28ucHVzaChrKTtuPWs7by5w dXNoKHApO2MrPXB9fXZhciBiPShhLXEuZ2V0VG90YWxXaWR0aCgpKS9jO3doaWxlKG8ubGVuZ3Ro KXtwPW8ucG9wKCk7az1vLnBvcCgpO3Euc2V0Q29sdW1uV2lkdGgoayxNYXRoLm1heCh0aGlzLmdy aWQubWluQ29sdW1uV2lkdGgsTWF0aC5mbG9vcihwK3AqYikpLHRydWUpfWlmKChsPXEuZ2V0VG90 YWxXaWR0aChmYWxzZSkpPmEpe3ZhciBnPXMhPW0/ajpuO3Euc2V0Q29sdW1uV2lkdGgoZyxNYXRo Lm1heCgxLHEuZ2V0Q29sdW1uV2lkdGgoZyktKGwtYSkpLHRydWUpfWlmKGQhPT10cnVlKXt0aGlz LnVwZGF0ZUFsbENvbHVtbldpZHRocygpfXJldHVybiB0cnVlfSxhdXRvRXhwYW5kOmZ1bmN0aW9u KGIpe3ZhciBpPXRoaXMuZ3JpZCxhPXRoaXMuY207aWYoIXRoaXMudXNlclJlc2l6ZWQmJmkuYXV0 b0V4cGFuZENvbHVtbil7dmFyIGQ9YS5nZXRUb3RhbFdpZHRoKGZhbHNlKTt2YXIgaj10aGlzLmdy aWQuZ2V0R3JpZEVsKCkuZ2V0V2lkdGgodHJ1ZSktdGhpcy5zY3JvbGxPZmZzZXQ7aWYoZCE9ail7 dmFyIGg9YS5nZXRJbmRleEJ5SWQoaS5hdXRvRXhwYW5kQ29sdW1uKTt2YXIgZT1hLmdldENvbHVt bldpZHRoKGgpO3ZhciBjPU1hdGgubWluKE1hdGgubWF4KCgoai1kKStlKSxpLmF1dG9FeHBhbmRN aW4pLGkuYXV0b0V4cGFuZE1heCk7aWYoYyE9ZSl7YS5zZXRDb2x1bW5XaWR0aChoLGMsdHJ1ZSk7 aWYoYiE9PXRydWUpe3RoaXMudXBkYXRlQ29sdW1uV2lkdGgoaCxjKX19fX19LGdldENvbHVtbkRh dGE6ZnVuY3Rpb24oKXt2YXIgZD1bXSxhPXRoaXMuY20sZT1hLmdldENvbHVtbkNvdW50KCk7Zm9y KHZhciBjPTA7YzxlO2MrKyl7dmFyIGI9YS5nZXREYXRhSW5kZXgoYyk7ZFtjXT17bmFtZToodHlw ZW9mIGI9PSJ1bmRlZmluZWQiP3RoaXMuZHMuZmllbGRzLmdldChjKS5uYW1lOmIpLHJlbmRlcmVy OmEuZ2V0UmVuZGVyZXIoYyksaWQ6YS5nZXRDb2x1bW5JZChjKSxzdHlsZTp0aGlzLmdldENvbHVt blN0eWxlKGMpfX1yZXR1cm4gZH0scmVuZGVyUm93czpmdW5jdGlvbihqLGMpe3ZhciBkPXRoaXMu Z3JpZCxoPWQuY29sTW9kZWwsYT1kLnN0b3JlLGs9ZC5zdHJpcGVSb3dzO3ZhciBpPWguZ2V0Q29s dW1uQ291bnQoKTtpZihhLmdldENvdW50KCk8MSl7cmV0dXJuIiJ9dmFyIGU9dGhpcy5nZXRDb2x1 bW5EYXRhKCk7aj1qfHwwO2M9dHlwZW9mIGM9PSJ1bmRlZmluZWQiP2EuZ2V0Q291bnQoKS0xOmM7 dmFyIGI9YS5nZXRSYW5nZShqLGMpO3JldHVybiB0aGlzLmRvUmVuZGVyKGUsYixhLGosaSxrKX0s cmVuZGVyQm9keTpmdW5jdGlvbigpe3ZhciBhPXRoaXMucmVuZGVyUm93cygpfHwiJiMxNjA7Ijty ZXR1cm4gdGhpcy50ZW1wbGF0ZXMuYm9keS5hcHBseSh7cm93czphfSl9LHJlZnJlc2hSb3c6ZnVu Y3Rpb24oYSl7dmFyIGM9dGhpcy5kcyxiO2lmKHR5cGVvZiBhPT0ibnVtYmVyIil7Yj1hO2E9Yy5n ZXRBdChiKTtpZighYSl7cmV0dXJufX1lbHNle2I9Yy5pbmRleE9mKGEpO2lmKGI8MCl7cmV0dXJu fX10aGlzLmluc2VydFJvd3MoYyxiLGIsdHJ1ZSk7dGhpcy5nZXRSb3coYikucm93SW5kZXg9Yjt0 aGlzLm9uUmVtb3ZlKGMsYSxiKzEsdHJ1ZSk7dGhpcy5maXJlRXZlbnQoInJvd3VwZGF0ZWQiLHRo aXMsYixhKX0scmVmcmVzaDpmdW5jdGlvbihiKXt0aGlzLmZpcmVFdmVudCgiYmVmb3JlcmVmcmVz aCIsdGhpcyk7dGhpcy5ncmlkLnN0b3BFZGl0aW5nKHRydWUpO3ZhciBhPXRoaXMucmVuZGVyQm9k eSgpO3RoaXMubWFpbkJvZHkudXBkYXRlKGEpLnNldFdpZHRoKHRoaXMuZ2V0VG90YWxXaWR0aCgp KTtpZihiPT09dHJ1ZSl7dGhpcy51cGRhdGVIZWFkZXJzKCk7dGhpcy51cGRhdGVIZWFkZXJTb3J0 U3RhdGUoKX10aGlzLnByb2Nlc3NSb3dzKDAsdHJ1ZSk7dGhpcy5sYXlvdXQoKTt0aGlzLmFwcGx5 RW1wdHlUZXh0KCk7dGhpcy5maXJlRXZlbnQoInJlZnJlc2giLHRoaXMpfSxhcHBseUVtcHR5VGV4 dDpmdW5jdGlvbigpe2lmKHRoaXMuZW1wdHlUZXh0JiYhdGhpcy5oYXNSb3dzKCkpe3RoaXMubWFp bkJvZHkudXBkYXRlKCc8ZGl2IGNsYXNzPSJ4LWdyaWQtZW1wdHkiPicrdGhpcy5lbXB0eVRleHQr IjwvZGl2PiIpfX0sdXBkYXRlSGVhZGVyU29ydFN0YXRlOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5k cy5nZXRTb3J0U3RhdGUoKTtpZighYil7cmV0dXJufWlmKCF0aGlzLnNvcnRTdGF0ZXx8KHRoaXMu c29ydFN0YXRlLmZpZWxkIT1iLmZpZWxkfHx0aGlzLnNvcnRTdGF0ZS5kaXJlY3Rpb24hPWIuZGly ZWN0aW9uKSl7dGhpcy5ncmlkLmZpcmVFdmVudCgic29ydGNoYW5nZSIsdGhpcy5ncmlkLGIpfXRo aXMuc29ydFN0YXRlPWI7dmFyIGM9dGhpcy5jbS5maW5kQ29sdW1uSW5kZXgoYi5maWVsZCk7aWYo YyE9LTEpe3ZhciBhPWIuZGlyZWN0aW9uO3RoaXMudXBkYXRlU29ydEljb24oYyxhKX19LGRlc3Ry b3k6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbE1lbnUpe0V4dC5tZW51Lk1lbnVNZ3IudW5yZWdpc3Rl cih0aGlzLmNvbE1lbnUpO3RoaXMuY29sTWVudS5kZXN0cm95KCk7ZGVsZXRlIHRoaXMuY29sTWVu dX1pZih0aGlzLmhtZW51KXtFeHQubWVudS5NZW51TWdyLnVucmVnaXN0ZXIodGhpcy5obWVudSk7 dGhpcy5obWVudS5kZXN0cm95KCk7ZGVsZXRlIHRoaXMuaG1lbnV9aWYodGhpcy5ncmlkLmVuYWJs ZUNvbHVtbk1vdmUpe3ZhciBjPUV4dC5kZC5ERE0uaWRzWyJncmlkSGVhZGVyIit0aGlzLmdyaWQu Z2V0R3JpZEVsKCkuaWRdO2lmKGMpe2Zvcih2YXIgYSBpbiBjKXtpZighY1thXS5jb25maWcuaXNU YXJnZXQmJmNbYV0uZHJhZ0VsSWQpe3ZhciBiPWNbYV0uZHJhZ0VsSWQ7Y1thXS51bnJlZygpO0V4 dC5nZXQoYikucmVtb3ZlKCl9ZWxzZXtpZihjW2FdLmNvbmZpZy5pc1RhcmdldCl7Y1thXS5wcm94 eVRvcC5yZW1vdmUoKTtjW2FdLnByb3h5Qm90dG9tLnJlbW92ZSgpO2NbYV0udW5yZWcoKX19aWYo RXh0LmRkLkRETS5sb2NhdGlvbkNhY2hlW2FdKXtkZWxldGUgRXh0LmRkLkRETS5sb2NhdGlvbkNh Y2hlW2FdfX1kZWxldGUgRXh0LmRkLkRETS5pZHNbImdyaWRIZWFkZXIiK3RoaXMuZ3JpZC5nZXRH cmlkRWwoKS5pZF19fWlmKHRoaXMuZHJhZ1pvbmUpe3RoaXMuZHJhZ1pvbmUudW5yZWcoKX1FeHQu Zmx5KHRoaXMuaW5uZXJIZCkucmVtb3ZlQWxsTGlzdGVuZXJzKCk7RXh0LnJlbW92ZU5vZGUodGhp cy5pbm5lckhkKTtFeHQuZGVzdHJveSh0aGlzLnJlc2l6ZU1hcmtlcix0aGlzLnJlc2l6ZVByb3h5 LHRoaXMuZm9jdXNFbCx0aGlzLm1haW5Cb2R5LHRoaXMuc2Nyb2xsZXIsdGhpcy5tYWluSGQsdGhp cy5tYWluV3JhcCx0aGlzLmRyYWdab25lLHRoaXMuc3BsaXRab25lLHRoaXMuY29sdW1uRHJhZyx0 aGlzLmNvbHVtbkRyb3ApO3RoaXMuaW5pdERhdGEobnVsbCxudWxsKTtFeHQuRXZlbnRNYW5hZ2Vy LnJlbW92ZVJlc2l6ZUxpc3RlbmVyKHRoaXMub25XaW5kb3dSZXNpemUsdGhpcyk7dGhpcy5wdXJn ZUxpc3RlbmVycygpfSxvbkRlbnlDb2x1bW5IaWRlOmZ1bmN0aW9uKCl7fSxyZW5kZXI6ZnVuY3Rp b24oKXtpZih0aGlzLmF1dG9GaWxsKXt2YXIgYT10aGlzLmdyaWQub3duZXJDdDtpZihhJiZhLmdl dExheW91dCgpKXthLm9uKCJhZnRlcmxheW91dCIsZnVuY3Rpb24oKXt0aGlzLmZpdENvbHVtbnMo dHJ1ZSx0cnVlKTt0aGlzLnVwZGF0ZUhlYWRlcnMoKX0sdGhpcyx7c2luZ2xlOnRydWV9KX1lbHNl e3RoaXMuZml0Q29sdW1ucyh0cnVlLHRydWUpfX1lbHNle2lmKHRoaXMuZm9yY2VGaXQpe3RoaXMu Zml0Q29sdW1ucyh0cnVlLGZhbHNlKX1lbHNle2lmKHRoaXMuZ3JpZC5hdXRvRXhwYW5kQ29sdW1u KXt0aGlzLmF1dG9FeHBhbmQodHJ1ZSl9fX10aGlzLnJlbmRlclVJKCl9LGluaXREYXRhOmZ1bmN0 aW9uKGIsYSl7aWYodGhpcy5kcyl7dGhpcy5kcy51bigibG9hZCIsdGhpcy5vbkxvYWQsdGhpcyk7 dGhpcy5kcy51bigiZGF0YWNoYW5nZWQiLHRoaXMub25EYXRhQ2hhbmdlLHRoaXMpO3RoaXMuZHMu dW4oImFkZCIsdGhpcy5vbkFkZCx0aGlzKTt0aGlzLmRzLnVuKCJyZW1vdmUiLHRoaXMub25SZW1v dmUsdGhpcyk7dGhpcy5kcy51bigidXBkYXRlIix0aGlzLm9uVXBkYXRlLHRoaXMpO3RoaXMuZHMu dW4oImNsZWFyIix0aGlzLm9uQ2xlYXIsdGhpcyk7aWYodGhpcy5kcyE9PWImJnRoaXMuZHMuYXV0 b0Rlc3Ryb3kpe3RoaXMuZHMuZGVzdHJveSgpfX1pZihiKXtiLm9uKHtzY29wZTp0aGlzLGxvYWQ6 dGhpcy5vbkxvYWQsZGF0YWNoYW5nZWQ6dGhpcy5vbkRhdGFDaGFuZ2UsYWRkOnRoaXMub25BZGQs cmVtb3ZlOnRoaXMub25SZW1vdmUsdXBkYXRlOnRoaXMub25VcGRhdGUsY2xlYXI6dGhpcy5vbkNs ZWFyfSl9dGhpcy5kcz1iO2lmKHRoaXMuY20pe3RoaXMuY20udW4oImNvbmZpZ2NoYW5nZSIsdGhp cy5vbkNvbENvbmZpZ0NoYW5nZSx0aGlzKTt0aGlzLmNtLnVuKCJ3aWR0aGNoYW5nZSIsdGhpcy5v bkNvbFdpZHRoQ2hhbmdlLHRoaXMpO3RoaXMuY20udW4oImhlYWRlcmNoYW5nZSIsdGhpcy5vbkhl YWRlckNoYW5nZSx0aGlzKTt0aGlzLmNtLnVuKCJoaWRkZW5jaGFuZ2UiLHRoaXMub25IaWRkZW5D aGFuZ2UsdGhpcyk7dGhpcy5jbS51bigiY29sdW1ubW92ZWQiLHRoaXMub25Db2x1bW5Nb3ZlLHRo aXMpfWlmKGEpe2RlbGV0ZSB0aGlzLmxhc3RWaWV3V2lkdGg7YS5vbih7c2NvcGU6dGhpcyxjb25m aWdjaGFuZ2U6dGhpcy5vbkNvbENvbmZpZ0NoYW5nZSx3aWR0aGNoYW5nZTp0aGlzLm9uQ29sV2lk dGhDaGFuZ2UsaGVhZGVyY2hhbmdlOnRoaXMub25IZWFkZXJDaGFuZ2UsaGlkZGVuY2hhbmdlOnRo aXMub25IaWRkZW5DaGFuZ2UsY29sdW1ubW92ZWQ6dGhpcy5vbkNvbHVtbk1vdmV9KX10aGlzLmNt PWF9LG9uRGF0YUNoYW5nZTpmdW5jdGlvbigpe3RoaXMucmVmcmVzaCgpO3RoaXMudXBkYXRlSGVh ZGVyU29ydFN0YXRlKCk7dGhpcy5zeW5jRm9jdXNFbCgwKX0sb25DbGVhcjpmdW5jdGlvbigpe3Ro aXMucmVmcmVzaCgpO3RoaXMuc3luY0ZvY3VzRWwoMCl9LG9uVXBkYXRlOmZ1bmN0aW9uKGIsYSl7 dGhpcy5yZWZyZXNoUm93KGEpfSxvbkFkZDpmdW5jdGlvbihjLGEsYil7dGhpcy5pbnNlcnRSb3dz KGMsYixiKyhhLmxlbmd0aC0xKSl9LG9uUmVtb3ZlOmZ1bmN0aW9uKGQsYSxiLGMpe2lmKGMhPT10 cnVlKXt0aGlzLmZpcmVFdmVudCgiYmVmb3Jlcm93cmVtb3ZlZCIsdGhpcyxiLGEpfXRoaXMucmVt b3ZlUm93KGIpO2lmKGMhPT10cnVlKXt0aGlzLnByb2Nlc3NSb3dzKGIpO3RoaXMuYXBwbHlFbXB0 eVRleHQoKTt0aGlzLmZpcmVFdmVudCgicm93cmVtb3ZlZCIsdGhpcyxiLGEpfX0sb25Mb2FkOmZ1 bmN0aW9uKCl7dGhpcy5zY3JvbGxUb1RvcCgpfSxvbkNvbFdpZHRoQ2hhbmdlOmZ1bmN0aW9uKGEs YixjKXt0aGlzLnVwZGF0ZUNvbHVtbldpZHRoKGIsYyl9LG9uSGVhZGVyQ2hhbmdlOmZ1bmN0aW9u KGEsYixjKXt0aGlzLnVwZGF0ZUhlYWRlcnMoKX0sb25IaWRkZW5DaGFuZ2U6ZnVuY3Rpb24oYSxi LGMpe3RoaXMudXBkYXRlQ29sdW1uSGlkZGVuKGIsYyl9LG9uQ29sdW1uTW92ZTpmdW5jdGlvbihh LGQsYil7dGhpcy5pbmRleE1hcD1udWxsO3ZhciBjPXRoaXMuZ2V0U2Nyb2xsU3RhdGUoKTt0aGlz LnJlZnJlc2godHJ1ZSk7dGhpcy5yZXN0b3JlU2Nyb2xsKGMpO3RoaXMuYWZ0ZXJNb3ZlKGIpO3Ro aXMuZ3JpZC5maXJlRXZlbnQoImNvbHVtbm1vdmUiLGQsYil9LG9uQ29sQ29uZmlnQ2hhbmdlOmZ1 bmN0aW9uKCl7ZGVsZXRlIHRoaXMubGFzdFZpZXdXaWR0aDt0aGlzLmluZGV4TWFwPW51bGw7dGhp cy5yZWZyZXNoKHRydWUpfSxpbml0VUk6ZnVuY3Rpb24oYSl7YS5vbigiaGVhZGVyY2xpY2siLHRo aXMub25IZWFkZXJDbGljayx0aGlzKX0saW5pdEV2ZW50czpmdW5jdGlvbigpe30sb25IZWFkZXJD bGljazpmdW5jdGlvbihiLGEpe2lmKHRoaXMuaGVhZGVyc0Rpc2FibGVkfHwhdGhpcy5jbS5pc1Nv cnRhYmxlKGEpKXtyZXR1cm59Yi5zdG9wRWRpdGluZyh0cnVlKTtiLnN0b3JlLnNvcnQodGhpcy5j bS5nZXREYXRhSW5kZXgoYSkpfSxvblJvd092ZXI6ZnVuY3Rpb24oYixhKXt2YXIgYztpZigoYz10 aGlzLmZpbmRSb3dJbmRleChhKSkhPT1mYWxzZSl7dGhpcy5hZGRSb3dDbGFzcyhjLCJ4LWdyaWQz LXJvdy1vdmVyIil9fSxvblJvd091dDpmdW5jdGlvbihiLGEpe3ZhciBjO2lmKChjPXRoaXMuZmlu ZFJvd0luZGV4KGEpKSE9PWZhbHNlJiYhYi53aXRoaW4odGhpcy5nZXRSb3coYyksdHJ1ZSkpe3Ro aXMucmVtb3ZlUm93Q2xhc3MoYywieC1ncmlkMy1yb3ctb3ZlciIpfX0saGFuZGxlV2hlZWw6ZnVu Y3Rpb24oYSl7YS5zdG9wUHJvcGFnYXRpb24oKX0sb25Sb3dTZWxlY3Q6ZnVuY3Rpb24oYSl7dGhp cy5hZGRSb3dDbGFzcyhhLHRoaXMuc2VsZWN0ZWRSb3dDbGFzcyl9LG9uUm93RGVzZWxlY3Q6ZnVu Y3Rpb24oYSl7dGhpcy5yZW1vdmVSb3dDbGFzcyhhLHRoaXMuc2VsZWN0ZWRSb3dDbGFzcyl9LG9u Q2VsbFNlbGVjdDpmdW5jdGlvbihjLGIpe3ZhciBhPXRoaXMuZ2V0Q2VsbChjLGIpO2lmKGEpe3Ro aXMuZmx5KGEpLmFkZENsYXNzKCJ4LWdyaWQzLWNlbGwtc2VsZWN0ZWQiKX19LG9uQ2VsbERlc2Vs ZWN0OmZ1bmN0aW9uKGMsYil7dmFyIGE9dGhpcy5nZXRDZWxsKGMsYik7aWYoYSl7dGhpcy5mbHko YSkucmVtb3ZlQ2xhc3MoIngtZ3JpZDMtY2VsbC1zZWxlY3RlZCIpfX0sb25Db2x1bW5TcGxpdHRl ck1vdmVkOmZ1bmN0aW9uKGMsYil7dGhpcy51c2VyUmVzaXplZD10cnVlO3ZhciBhPXRoaXMuZ3Jp ZC5jb2xNb2RlbDthLnNldENvbHVtbldpZHRoKGMsYix0cnVlKTtpZih0aGlzLmZvcmNlRml0KXt0 aGlzLmZpdENvbHVtbnModHJ1ZSxmYWxzZSxjKTt0aGlzLnVwZGF0ZUFsbENvbHVtbldpZHRocygp fWVsc2V7dGhpcy51cGRhdGVDb2x1bW5XaWR0aChjLGIpO3RoaXMuc3luY0hlYWRlclNjcm9sbCgp fXRoaXMuZ3JpZC5maXJlRXZlbnQoImNvbHVtbnJlc2l6ZSIsYyxiKX0saGFuZGxlSGRNZW51Q2xp Y2s6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcy5oZEN0eEluZGV4O3ZhciBhPXRoaXMuY20sZD10aGlz LmRzO3N3aXRjaChjLml0ZW1JZCl7Y2FzZSJhc2MiOmQuc29ydChhLmdldERhdGFJbmRleChiKSwi QVNDIik7YnJlYWs7Y2FzZSJkZXNjIjpkLnNvcnQoYS5nZXREYXRhSW5kZXgoYiksIkRFU0MiKTti cmVhaztkZWZhdWx0OmI9YS5nZXRJbmRleEJ5SWQoYy5pdGVtSWQuc3Vic3RyKDQpKTtpZihiIT0t MSl7aWYoYy5jaGVja2VkJiZhLmdldENvbHVtbnNCeSh0aGlzLmlzSGlkZWFibGVDb2x1bW4sdGhp cykubGVuZ3RoPD0xKXt0aGlzLm9uRGVueUNvbHVtbkhpZGUoKTtyZXR1cm4gZmFsc2V9YS5zZXRI aWRkZW4oYixjLmNoZWNrZWQpfX1yZXR1cm4gdHJ1ZX0saXNIaWRlYWJsZUNvbHVtbjpmdW5jdGlv bihhKXtyZXR1cm4gIWEuaGlkZGVuJiYhYS5maXhlZH0sYmVmb3JlQ29sTWVudVNob3c6ZnVuY3Rp b24oKXt2YXIgYT10aGlzLmNtLGM9YS5nZXRDb2x1bW5Db3VudCgpO3RoaXMuY29sTWVudS5yZW1v dmVBbGwoKTtmb3IodmFyIGI9MDtiPGM7YisrKXtpZihhLmNvbmZpZ1tiXS5maXhlZCE9PXRydWUm JmEuY29uZmlnW2JdLmhpZGVhYmxlIT09ZmFsc2Upe3RoaXMuY29sTWVudS5hZGQobmV3IEV4dC5t ZW51LkNoZWNrSXRlbSh7aXRlbUlkOiJjb2wtIithLmdldENvbHVtbklkKGIpLHRleHQ6YS5nZXRD b2x1bW5IZWFkZXIoYiksY2hlY2tlZDohYS5pc0hpZGRlbihiKSxoaWRlT25DbGljazpmYWxzZSxk aXNhYmxlZDphLmNvbmZpZ1tiXS5oaWRlYWJsZT09PWZhbHNlfSkpfX19LGhhbmRsZUhkRG93bjpm dW5jdGlvbihoLGQpe2lmKEV4dC5mbHkoZCkuaGFzQ2xhc3MoIngtZ3JpZDMtaGQtYnRuIikpe2gu c3RvcEV2ZW50KCk7dmFyIGc9dGhpcy5maW5kSGVhZGVyQ2VsbChkKTtFeHQuZmx5KGcpLmFkZENs YXNzKCJ4LWdyaWQzLWhkLW1lbnUtb3BlbiIpO3ZhciBjPXRoaXMuZ2V0Q2VsbEluZGV4KGcpO3Ro aXMuaGRDdHhJbmRleD1jO3ZhciBiPXRoaXMuaG1lbnUuaXRlbXMsYT10aGlzLmNtO2IuZ2V0KCJh c2MiKS5zZXREaXNhYmxlZCghYS5pc1NvcnRhYmxlKGMpKTtiLmdldCgiZGVzYyIpLnNldERpc2Fi bGVkKCFhLmlzU29ydGFibGUoYykpO3RoaXMuaG1lbnUub24oImhpZGUiLGZ1bmN0aW9uKCl7RXh0 LmZseShnKS5yZW1vdmVDbGFzcygieC1ncmlkMy1oZC1tZW51LW9wZW4iKX0sdGhpcyx7c2luZ2xl OnRydWV9KTt0aGlzLmhtZW51LnNob3coZCwidGwtYmw/Iil9fSxoYW5kbGVIZE92ZXI6ZnVuY3Rp b24oZCxhKXt2YXIgYz10aGlzLmZpbmRIZWFkZXJDZWxsKGEpO2lmKGMmJiF0aGlzLmhlYWRlcnNE aXNhYmxlZCl7dGhpcy5hY3RpdmVIZD1jO3RoaXMuYWN0aXZlSGRJbmRleD10aGlzLmdldENlbGxJ bmRleChjKTt2YXIgYj10aGlzLmZseShjKTt0aGlzLmFjdGl2ZUhkUmVnaW9uPWIuZ2V0UmVnaW9u KCk7aWYoIXRoaXMuY20uaXNNZW51RGlzYWJsZWQodGhpcy5hY3RpdmVIZEluZGV4KSl7Yi5hZGRD bGFzcygieC1ncmlkMy1oZC1vdmVyIik7dGhpcy5hY3RpdmVIZEJ0bj1iLmNoaWxkKCIueC1ncmlk My1oZC1idG4iKTtpZih0aGlzLmFjdGl2ZUhkQnRuKXt0aGlzLmFjdGl2ZUhkQnRuLmRvbS5zdHls ZS5oZWlnaHQ9KGMuZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQtMSkrInB4In19fX0saGFuZGxlSGRN b3ZlOmZ1bmN0aW9uKGgsZCl7aWYodGhpcy5hY3RpdmVIZCYmIXRoaXMuaGVhZGVyc0Rpc2FibGVk KXt2YXIgYj10aGlzLnNwbGl0SGFuZGxlV2lkdGh8fDU7dmFyIGc9dGhpcy5hY3RpdmVIZFJlZ2lv bjt2YXIgYT1oLmdldFBhZ2VYKCk7dmFyIGM9dGhpcy5hY3RpdmVIZC5zdHlsZTtpZihhLWcubGVm dDw9YiYmdGhpcy5jbS5pc1Jlc2l6YWJsZSh0aGlzLmFjdGl2ZUhkSW5kZXgtMSkpe2MuY3Vyc29y PUV4dC5pc0Fpcj8ibW92ZSI6RXh0LmlzV2ViS2l0PyJlLXJlc2l6ZSI6ImNvbC1yZXNpemUifWVs c2V7aWYoZy5yaWdodC1hPD0oIXRoaXMuYWN0aXZlSGRCdG4/YjoyKSYmdGhpcy5jbS5pc1Jlc2l6 YWJsZSh0aGlzLmFjdGl2ZUhkSW5kZXgpKXtjLmN1cnNvcj1FeHQuaXNBaXI/Im1vdmUiOkV4dC5p c1dlYktpdD8idy1yZXNpemUiOiJjb2wtcmVzaXplIn1lbHNle2MuY3Vyc29yPSIifX19fSxoYW5k bGVIZE91dDpmdW5jdGlvbihjLGEpe3ZhciBiPXRoaXMuZmluZEhlYWRlckNlbGwoYSk7aWYoYiYm KCFFeHQuaXNJRXx8IWMud2l0aGluKGIsdHJ1ZSkpKXt0aGlzLmFjdGl2ZUhkPW51bGw7dGhpcy5m bHkoYikucmVtb3ZlQ2xhc3MoIngtZ3JpZDMtaGQtb3ZlciIpO2Iuc3R5bGUuY3Vyc29yPSIifX0s aGFzUm93czpmdW5jdGlvbigpe3ZhciBhPXRoaXMubWFpbkJvZHkuZG9tLmZpcnN0Q2hpbGQ7cmV0 dXJuIGEmJmEubm9kZVR5cGU9PTEmJmEuY2xhc3NOYW1lIT0ieC1ncmlkLWVtcHR5In0sYmluZDpm dW5jdGlvbihhLGIpe3RoaXMuaW5pdERhdGEoYSxiKX19KTtFeHQuZ3JpZC5HcmlkVmlldy5TcGxp dERyYWdab25lPWZ1bmN0aW9uKGEsYil7dGhpcy5ncmlkPWE7dGhpcy52aWV3PWEuZ2V0Vmlldygp O3RoaXMubWFya2VyPXRoaXMudmlldy5yZXNpemVNYXJrZXI7dGhpcy5wcm94eT10aGlzLnZpZXcu cmVzaXplUHJveHk7RXh0LmdyaWQuR3JpZFZpZXcuU3BsaXREcmFnWm9uZS5zdXBlcmNsYXNzLmNv bnN0cnVjdG9yLmNhbGwodGhpcyxiLCJncmlkU3BsaXR0ZXJzIit0aGlzLmdyaWQuZ2V0R3JpZEVs KCkuaWQse2RyYWdFbElkOkV4dC5pZCh0aGlzLnByb3h5LmRvbSkscmVzaXplRnJhbWU6ZmFsc2V9 KTt0aGlzLnNjcm9sbD1mYWxzZTt0aGlzLmh3PXRoaXMudmlldy5zcGxpdEhhbmRsZVdpZHRofHw1 fTtFeHQuZXh0ZW5kKEV4dC5ncmlkLkdyaWRWaWV3LlNwbGl0RHJhZ1pvbmUsRXh0LmRkLkREUHJv eHkse2I0U3RhcnREcmFnOmZ1bmN0aW9uKGEsZSl7dGhpcy52aWV3LmhlYWRlcnNEaXNhYmxlZD10 cnVlO3ZhciBkPXRoaXMudmlldy5tYWluV3JhcC5nZXRIZWlnaHQoKTt0aGlzLm1hcmtlci5zZXRI ZWlnaHQoZCk7dGhpcy5tYXJrZXIuc2hvdygpO3RoaXMubWFya2VyLmFsaWduVG8odGhpcy52aWV3 LmdldEhlYWRlckNlbGwodGhpcy5jZWxsSW5kZXgpLCJ0bC10bCIsWy0yLDBdKTt0aGlzLnByb3h5 LnNldEhlaWdodChkKTt2YXIgYj10aGlzLmNtLmdldENvbHVtbldpZHRoKHRoaXMuY2VsbEluZGV4 KTt2YXIgYz1NYXRoLm1heChiLXRoaXMuZ3JpZC5taW5Db2x1bW5XaWR0aCwwKTt0aGlzLnJlc2V0 Q29uc3RyYWludHMoKTt0aGlzLnNldFhDb25zdHJhaW50KGMsMTAwMCk7dGhpcy5zZXRZQ29uc3Ry YWludCgwLDApO3RoaXMubWluWD1hLWM7dGhpcy5tYXhYPWErMTAwMDt0aGlzLnN0YXJ0UG9zPWE7 RXh0LmRkLkREUHJveHkucHJvdG90eXBlLmI0U3RhcnREcmFnLmNhbGwodGhpcyxhLGUpfSxoYW5k bGVNb3VzZURvd246ZnVuY3Rpb24oYSl7dmFyIGk9dGhpcy52aWV3LmZpbmRIZWFkZXJDZWxsKGEu Z2V0VGFyZ2V0KCkpO2lmKGkpe3ZhciBsPXRoaXMudmlldy5mbHkoaSkuZ2V0WFkoKSxkPWxbMF0s Yz1sWzFdO3ZhciBqPWEuZ2V0WFkoKSxiPWpbMF07dmFyIGg9aS5vZmZzZXRXaWR0aCxnPWZhbHNl O2lmKChiLWQpPD10aGlzLmh3KXtnPS0xfWVsc2V7aWYoKGQraCktYjw9dGhpcy5odyl7Zz0wfX1p ZihnIT09ZmFsc2Upe3RoaXMuY209dGhpcy5ncmlkLmNvbE1vZGVsO3ZhciBrPXRoaXMudmlldy5n ZXRDZWxsSW5kZXgoaSk7aWYoZz09LTEpe2lmKGsrZzwwKXtyZXR1cm59d2hpbGUodGhpcy5jbS5p c0hpZGRlbihrK2cpKXstLWc7aWYoaytnPDApe3JldHVybn19fXRoaXMuY2VsbEluZGV4PWsrZzt0 aGlzLnNwbGl0PWkuZG9tO2lmKHRoaXMuY20uaXNSZXNpemFibGUodGhpcy5jZWxsSW5kZXgpJiYh dGhpcy5jbS5pc0ZpeGVkKHRoaXMuY2VsbEluZGV4KSl7RXh0LmdyaWQuR3JpZFZpZXcuU3BsaXRE cmFnWm9uZS5zdXBlcmNsYXNzLmhhbmRsZU1vdXNlRG93bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9 fWVsc2V7aWYodGhpcy52aWV3LmNvbHVtbkRyYWcpe3RoaXMudmlldy5jb2x1bW5EcmFnLmNhbGxI YW5kbGVNb3VzZURvd24oYSl9fX19LGVuZERyYWc6ZnVuY3Rpb24oZCl7dGhpcy5tYXJrZXIuaGlk ZSgpO3ZhciBhPXRoaXMudmlldzt2YXIgYj1NYXRoLm1heCh0aGlzLm1pblgsZC5nZXRQYWdlWCgp KTt2YXIgYz1iLXRoaXMuc3RhcnRQb3M7YS5vbkNvbHVtblNwbGl0dGVyTW92ZWQodGhpcy5jZWxs SW5kZXgsdGhpcy5jbS5nZXRDb2x1bW5XaWR0aCh0aGlzLmNlbGxJbmRleCkrYyk7c2V0VGltZW91 dChmdW5jdGlvbigpe2EuaGVhZGVyc0Rpc2FibGVkPWZhbHNlfSw1MCl9LGF1dG9PZmZzZXQ6ZnVu Y3Rpb24oKXt0aGlzLnNldERlbHRhKDAsMCl9fSk7RXh0LmdyaWQuSGVhZGVyRHJhZ1pvbmU9ZnVu Y3Rpb24oYSxjLGIpe3RoaXMuZ3JpZD1hO3RoaXMudmlldz1hLmdldFZpZXcoKTt0aGlzLmRkR3Jv dXA9ImdyaWRIZWFkZXIiK3RoaXMuZ3JpZC5nZXRHcmlkRWwoKS5pZDtFeHQuZ3JpZC5IZWFkZXJE cmFnWm9uZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxjKTtpZihiKXt0aGlzLnNl dEhhbmRsZUVsSWQoRXh0LmlkKGMpKTt0aGlzLnNldE91dGVySGFuZGxlRWxJZChFeHQuaWQoYikp fXRoaXMuc2Nyb2xsPWZhbHNlfTtFeHQuZXh0ZW5kKEV4dC5ncmlkLkhlYWRlckRyYWdab25lLEV4 dC5kZC5EcmFnWm9uZSx7bWF4RHJhZ1dpZHRoOjEyMCxnZXREcmFnRGF0YTpmdW5jdGlvbihjKXt2 YXIgYT1FeHQubGliLkV2ZW50LmdldFRhcmdldChjKTt2YXIgYj10aGlzLnZpZXcuZmluZEhlYWRl ckNlbGwoYSk7aWYoYil7cmV0dXJue2RkZWw6Yi5maXJzdENoaWxkLGhlYWRlcjpifX1yZXR1cm4g ZmFsc2V9LG9uSW5pdERyYWc6ZnVuY3Rpb24oYSl7dGhpcy52aWV3LmhlYWRlcnNEaXNhYmxlZD10 cnVlO3ZhciBiPXRoaXMuZHJhZ0RhdGEuZGRlbC5jbG9uZU5vZGUodHJ1ZSk7Yi5pZD1FeHQuaWQo KTtiLnN0eWxlLndpZHRoPU1hdGgubWluKHRoaXMuZHJhZ0RhdGEuaGVhZGVyLm9mZnNldFdpZHRo LHRoaXMubWF4RHJhZ1dpZHRoKSsicHgiO3RoaXMucHJveHkudXBkYXRlKGIpO3JldHVybiB0cnVl fSxhZnRlclZhbGlkRHJvcDpmdW5jdGlvbigpe3ZhciBhPXRoaXMudmlldztzZXRUaW1lb3V0KGZ1 bmN0aW9uKCl7YS5oZWFkZXJzRGlzYWJsZWQ9ZmFsc2V9LDUwKX0sYWZ0ZXJJbnZhbGlkRHJvcDpm dW5jdGlvbigpe3ZhciBhPXRoaXMudmlldztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5oZWFkZXJz RGlzYWJsZWQ9ZmFsc2V9LDUwKX19KTtFeHQuZ3JpZC5IZWFkZXJEcm9wWm9uZT1mdW5jdGlvbihh LGMsYil7dGhpcy5ncmlkPWE7dGhpcy52aWV3PWEuZ2V0VmlldygpO3RoaXMucHJveHlUb3A9RXh0 LkRvbUhlbHBlci5hcHBlbmQoZG9jdW1lbnQuYm9keSx7Y2xzOiJjb2wtbW92ZS10b3AiLGh0bWw6 IiYjMTYwOyJ9LHRydWUpO3RoaXMucHJveHlCb3R0b209RXh0LkRvbUhlbHBlci5hcHBlbmQoZG9j dW1lbnQuYm9keSx7Y2xzOiJjb2wtbW92ZS1ib3R0b20iLGh0bWw6IiYjMTYwOyJ9LHRydWUpO3Ro aXMucHJveHlUb3AuaGlkZT10aGlzLnByb3h5Qm90dG9tLmhpZGU9ZnVuY3Rpb24oKXt0aGlzLnNl dExlZnRUb3AoLTEwMCwtMTAwKTt0aGlzLnNldFN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9 O3RoaXMuZGRHcm91cD0iZ3JpZEhlYWRlciIrdGhpcy5ncmlkLmdldEdyaWRFbCgpLmlkO0V4dC5n cmlkLkhlYWRlckRyb3Bab25lLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEuZ2V0 R3JpZEVsKCkuZG9tKX07RXh0LmV4dGVuZChFeHQuZ3JpZC5IZWFkZXJEcm9wWm9uZSxFeHQuZGQu RHJvcFpvbmUse3Byb3h5T2Zmc2V0czpbLTQsLTldLGZseTpFeHQuRWxlbWVudC5mbHksZ2V0VGFy Z2V0RnJvbUV2ZW50OmZ1bmN0aW9uKGMpe3ZhciBhPUV4dC5saWIuRXZlbnQuZ2V0VGFyZ2V0KGMp O3ZhciBiPXRoaXMudmlldy5maW5kQ2VsbEluZGV4KGEpO2lmKGIhPT1mYWxzZSl7cmV0dXJuIHRo aXMudmlldy5nZXRIZWFkZXJDZWxsKGIpfX0sbmV4dFZpc2libGU6ZnVuY3Rpb24oYyl7dmFyIGI9 dGhpcy52aWV3LGE9dGhpcy5ncmlkLmNvbE1vZGVsO2M9Yy5uZXh0U2libGluZzt3aGlsZShjKXtp ZighYS5pc0hpZGRlbihiLmdldENlbGxJbmRleChjKSkpe3JldHVybiBjfWM9Yy5uZXh0U2libGlu Z31yZXR1cm4gbnVsbH0scHJldlZpc2libGU6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcy52aWV3LGE9 dGhpcy5ncmlkLmNvbE1vZGVsO2M9Yy5wcmV2U2libGluZzt3aGlsZShjKXtpZighYS5pc0hpZGRl bihiLmdldENlbGxJbmRleChjKSkpe3JldHVybiBjfWM9Yy5wcmV2U2libGluZ31yZXR1cm4gbnVs bH0scG9zaXRpb25JbmRpY2F0b3I6ZnVuY3Rpb24oZCxrLGope3ZhciBhPUV4dC5saWIuRXZlbnQu Z2V0UGFnZVgoaik7dmFyIGc9RXh0LmxpYi5Eb20uZ2V0UmVnaW9uKGsuZmlyc3RDaGlsZCk7dmFy IGMsaSxiPWcudG9wK3RoaXMucHJveHlPZmZzZXRzWzFdO2lmKChnLnJpZ2h0LWEpPD0oZy5yaWdo dC1nLmxlZnQpLzIpe2M9Zy5yaWdodCt0aGlzLnZpZXcuYm9yZGVyV2lkdGg7aT0iYWZ0ZXIifWVs c2V7Yz1nLmxlZnQ7aT0iYmVmb3JlIn1pZih0aGlzLmdyaWQuY29sTW9kZWwuaXNGaXhlZCh0aGlz LnZpZXcuZ2V0Q2VsbEluZGV4KGspKSl7cmV0dXJuIGZhbHNlfWMrPXRoaXMucHJveHlPZmZzZXRz WzBdO3RoaXMucHJveHlUb3Auc2V0TGVmdFRvcChjLGIpO3RoaXMucHJveHlUb3Auc2hvdygpO2lm KCF0aGlzLmJvdHRvbU9mZnNldCl7dGhpcy5ib3R0b21PZmZzZXQ9dGhpcy52aWV3Lm1haW5IZC5n ZXRIZWlnaHQoKX10aGlzLnByb3h5Qm90dG9tLnNldExlZnRUb3AoYyxiK3RoaXMucHJveHlUb3Au ZG9tLm9mZnNldEhlaWdodCt0aGlzLmJvdHRvbU9mZnNldCk7dGhpcy5wcm94eUJvdHRvbS5zaG93 KCk7cmV0dXJuIGl9LG9uTm9kZUVudGVyOmZ1bmN0aW9uKGQsYSxjLGIpe2lmKGIuaGVhZGVyIT1k KXt0aGlzLnBvc2l0aW9uSW5kaWNhdG9yKGIuaGVhZGVyLGQsYyl9fSxvbk5vZGVPdmVyOmZ1bmN0 aW9uKGcsYixkLGMpe3ZhciBhPWZhbHNlO2lmKGMuaGVhZGVyIT1nKXthPXRoaXMucG9zaXRpb25J bmRpY2F0b3IoYy5oZWFkZXIsZyxkKX1pZighYSl7dGhpcy5wcm94eVRvcC5oaWRlKCk7dGhpcy5w cm94eUJvdHRvbS5oaWRlKCl9cmV0dXJuIGE/dGhpcy5kcm9wQWxsb3dlZDp0aGlzLmRyb3BOb3RB bGxvd2VkfSxvbk5vZGVPdXQ6ZnVuY3Rpb24oZCxhLGMsYil7dGhpcy5wcm94eVRvcC5oaWRlKCk7 dGhpcy5wcm94eUJvdHRvbS5oaWRlKCl9LG9uTm9kZURyb3A6ZnVuY3Rpb24oYixtLGcsYyl7dmFy IGQ9Yy5oZWFkZXI7aWYoZCE9Yil7dmFyIGs9dGhpcy5ncmlkLmNvbE1vZGVsO3ZhciBqPUV4dC5s aWIuRXZlbnQuZ2V0UGFnZVgoZyk7dmFyIGE9RXh0LmxpYi5Eb20uZ2V0UmVnaW9uKGIuZmlyc3RD aGlsZCk7dmFyIG89KGEucmlnaHQtaik8PSgoYS5yaWdodC1hLmxlZnQpLzIpPyJhZnRlciI6ImJl Zm9yZSI7dmFyIGk9dGhpcy52aWV3LmdldENlbGxJbmRleChkKTt2YXIgbD10aGlzLnZpZXcuZ2V0 Q2VsbEluZGV4KGIpO2lmKG89PSJhZnRlciIpe2wrK31pZihpPGwpe2wtLX1rLm1vdmVDb2x1bW4o aSxsKTt0aGlzLmdyaWQuZmlyZUV2ZW50KCJjb2x1bW5tb3ZlIixpLGwpO3JldHVybiB0cnVlfXJl dHVybiBmYWxzZX19KTtFeHQuZ3JpZC5HcmlkVmlldy5Db2x1bW5EcmFnWm9uZT1mdW5jdGlvbihh LGIpe0V4dC5ncmlkLkdyaWRWaWV3LkNvbHVtbkRyYWdab25lLnN1cGVyY2xhc3MuY29uc3RydWN0 b3IuY2FsbCh0aGlzLGEsYixudWxsKTt0aGlzLnByb3h5LmVsLmFkZENsYXNzKCJ4LWdyaWQzLWNv bC1kZCIpfTtFeHQuZXh0ZW5kKEV4dC5ncmlkLkdyaWRWaWV3LkNvbHVtbkRyYWdab25lLEV4dC5n cmlkLkhlYWRlckRyYWdab25lLHtoYW5kbGVNb3VzZURvd246ZnVuY3Rpb24oYSl7fSxjYWxsSGFu ZGxlTW91c2VEb3duOmZ1bmN0aW9uKGEpe0V4dC5ncmlkLkdyaWRWaWV3LkNvbHVtbkRyYWdab25l LnN1cGVyY2xhc3MuaGFuZGxlTW91c2VEb3duLmNhbGwodGhpcyxhKX19KTtFeHQuZ3JpZC5TcGxp dERyYWdab25lPWZ1bmN0aW9uKGEsYyxiKXt0aGlzLmdyaWQ9YTt0aGlzLnZpZXc9YS5nZXRWaWV3 KCk7dGhpcy5wcm94eT10aGlzLnZpZXcucmVzaXplUHJveHk7RXh0LmdyaWQuU3BsaXREcmFnWm9u ZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxjLCJncmlkU3BsaXR0ZXJzIit0aGlz LmdyaWQuZ2V0R3JpZEVsKCkuaWQse2RyYWdFbElkOkV4dC5pZCh0aGlzLnByb3h5LmRvbSkscmVz aXplRnJhbWU6ZmFsc2V9KTt0aGlzLnNldEhhbmRsZUVsSWQoRXh0LmlkKGMpKTt0aGlzLnNldE91 dGVySGFuZGxlRWxJZChFeHQuaWQoYikpO3RoaXMuc2Nyb2xsPWZhbHNlfTtFeHQuZXh0ZW5kKEV4 dC5ncmlkLlNwbGl0RHJhZ1pvbmUsRXh0LmRkLkREUHJveHkse2ZseTpFeHQuRWxlbWVudC5mbHks YjRTdGFydERyYWc6ZnVuY3Rpb24oYSxkKXt0aGlzLnZpZXcuaGVhZGVyc0Rpc2FibGVkPXRydWU7 dGhpcy5wcm94eS5zZXRIZWlnaHQodGhpcy52aWV3Lm1haW5XcmFwLmdldEhlaWdodCgpKTt2YXIg Yj10aGlzLmNtLmdldENvbHVtbldpZHRoKHRoaXMuY2VsbEluZGV4KTt2YXIgYz1NYXRoLm1heChi LXRoaXMuZ3JpZC5taW5Db2x1bW5XaWR0aCwwKTt0aGlzLnJlc2V0Q29uc3RyYWludHMoKTt0aGlz LnNldFhDb25zdHJhaW50KGMsMTAwMCk7dGhpcy5zZXRZQ29uc3RyYWludCgwLDApO3RoaXMubWlu WD1hLWM7dGhpcy5tYXhYPWErMTAwMDt0aGlzLnN0YXJ0UG9zPWE7RXh0LmRkLkREUHJveHkucHJv dG90eXBlLmI0U3RhcnREcmFnLmNhbGwodGhpcyxhLGQpfSxoYW5kbGVNb3VzZURvd246ZnVuY3Rp b24oYyl7dmFyIGI9RXh0LkV2ZW50T2JqZWN0LnNldEV2ZW50KGMpO3ZhciBhPXRoaXMuZmx5KGIu Z2V0VGFyZ2V0KCkpO2lmKGEuaGFzQ2xhc3MoIngtZ3JpZC1zcGxpdCIpKXt0aGlzLmNlbGxJbmRl eD10aGlzLnZpZXcuZ2V0Q2VsbEluZGV4KGEuZG9tKTt0aGlzLnNwbGl0PWEuZG9tO3RoaXMuY209 dGhpcy5ncmlkLmNvbE1vZGVsO2lmKHRoaXMuY20uaXNSZXNpemFibGUodGhpcy5jZWxsSW5kZXgp JiYhdGhpcy5jbS5pc0ZpeGVkKHRoaXMuY2VsbEluZGV4KSl7RXh0LmdyaWQuU3BsaXREcmFnWm9u ZS5zdXBlcmNsYXNzLmhhbmRsZU1vdXNlRG93bi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sZW5k RHJhZzpmdW5jdGlvbihjKXt0aGlzLnZpZXcuaGVhZGVyc0Rpc2FibGVkPWZhbHNlO3ZhciBhPU1h dGgubWF4KHRoaXMubWluWCxFeHQubGliLkV2ZW50LmdldFBhZ2VYKGMpKTt2YXIgYj1hLXRoaXMu c3RhcnRQb3M7dGhpcy52aWV3Lm9uQ29sdW1uU3BsaXR0ZXJNb3ZlZCh0aGlzLmNlbGxJbmRleCx0 aGlzLmNtLmdldENvbHVtbldpZHRoKHRoaXMuY2VsbEluZGV4KStiKX0sYXV0b09mZnNldDpmdW5j dGlvbigpe3RoaXMuc2V0RGVsdGEoMCwwKX19KTtFeHQuZ3JpZC5HcmlkRHJhZ1pvbmU9ZnVuY3Rp b24oYixhKXt0aGlzLnZpZXc9Yi5nZXRWaWV3KCk7RXh0LmdyaWQuR3JpZERyYWdab25lLnN1cGVy Y2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLHRoaXMudmlldy5tYWluQm9keS5kb20sYSk7dGhp cy5zY3JvbGw9ZmFsc2U7dGhpcy5ncmlkPWI7dGhpcy5kZGVsPWRvY3VtZW50LmNyZWF0ZUVsZW1l bnQoImRpdiIpO3RoaXMuZGRlbC5jbGFzc05hbWU9IngtZ3JpZC1kZC13cmFwIn07RXh0LmV4dGVu ZChFeHQuZ3JpZC5HcmlkRHJhZ1pvbmUsRXh0LmRkLkRyYWdab25lLHtkZEdyb3VwOiJHcmlkREQi LGdldERyYWdEYXRhOmZ1bmN0aW9uKGIpe3ZhciBhPUV4dC5saWIuRXZlbnQuZ2V0VGFyZ2V0KGIp O3ZhciBkPXRoaXMudmlldy5maW5kUm93SW5kZXgoYSk7aWYoZCE9PWZhbHNlKXt2YXIgYz10aGlz LmdyaWQuc2VsTW9kZWw7aWYoIWMuaXNTZWxlY3RlZChkKXx8Yi5oYXNNb2RpZmllcigpKXtjLmhh bmRsZU1vdXNlRG93bih0aGlzLmdyaWQsZCxiKX1yZXR1cm57Z3JpZDp0aGlzLmdyaWQsZGRlbDp0 aGlzLmRkZWwscm93SW5kZXg6ZCxzZWxlY3Rpb25zOmMuZ2V0U2VsZWN0aW9ucygpfX1yZXR1cm4g ZmFsc2V9LG9uSW5pdERyYWc6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5kcmFnRGF0YTt0aGlzLmRk ZWwuaW5uZXJIVE1MPXRoaXMuZ3JpZC5nZXREcmFnRHJvcFRleHQoKTt0aGlzLnByb3h5LnVwZGF0 ZSh0aGlzLmRkZWwpfSxhZnRlclJlcGFpcjpmdW5jdGlvbigpe3RoaXMuZHJhZ2dpbmc9ZmFsc2V9 LGdldFJlcGFpclhZOmZ1bmN0aW9uKGIsYSl7cmV0dXJuIGZhbHNlfSxvbkVuZERyYWc6ZnVuY3Rp b24oYSxiKXt9LG9uVmFsaWREcm9wOmZ1bmN0aW9uKGEsYixjKXt0aGlzLmhpZGVQcm94eSgpfSxi ZWZvcmVJbnZhbGlkRHJvcDpmdW5jdGlvbihhLGIpe319KTtFeHQuZ3JpZC5Db2x1bW5Nb2RlbD1m dW5jdGlvbihhKXtpZihhLmNvbHVtbnMpe0V4dC5hcHBseSh0aGlzLGEpO3RoaXMuc2V0Q29uZmln KGEuY29sdW1ucyx0cnVlKX1lbHNle3RoaXMuc2V0Q29uZmlnKGEsdHJ1ZSl9dGhpcy5hZGRFdmVu dHMoIndpZHRoY2hhbmdlIiwiaGVhZGVyY2hhbmdlIiwiaGlkZGVuY2hhbmdlIiwiY29sdW1ubW92 ZWQiLCJjb25maWdjaGFuZ2UiKTtFeHQuZ3JpZC5Db2x1bW5Nb2RlbC5zdXBlcmNsYXNzLmNvbnN0 cnVjdG9yLmNhbGwodGhpcyl9O0V4dC5leHRlbmQoRXh0LmdyaWQuQ29sdW1uTW9kZWwsRXh0LnV0 aWwuT2JzZXJ2YWJsZSx7ZGVmYXVsdFdpZHRoOjEwMCxkZWZhdWx0U29ydGFibGU6ZmFsc2UsZ2V0 Q29sdW1uSWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY29uZmlnW2FdLmlkfSxnZXRDb2x1bW5B dDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jb25maWdbYV19LHNldENvbmZpZzpmdW5jdGlvbihl LGQpe3ZhciBnLGgsYTtpZighZCl7ZGVsZXRlIHRoaXMudG90YWxXaWR0aDtmb3IoZz0wLGE9dGhp cy5jb25maWcubGVuZ3RoO2c8YTtnKyspe2g9dGhpcy5jb25maWdbZ107aWYoaC5lZGl0b3Ipe2gu ZWRpdG9yLmRlc3Ryb3koKX19fXRoaXMuZGVmYXVsdHM9RXh0LmFwcGx5KHt3aWR0aDp0aGlzLmRl ZmF1bHRXaWR0aCxzb3J0YWJsZTp0aGlzLmRlZmF1bHRTb3J0YWJsZX0sdGhpcy5kZWZhdWx0cyk7 dGhpcy5jb25maWc9ZTt0aGlzLmxvb2t1cD17fTtmb3IoZz0wLGE9ZS5sZW5ndGg7ZzxhO2crKyl7 aD1FeHQuYXBwbHlJZihlW2ddLHRoaXMuZGVmYXVsdHMpO2lmKCFoLmlzQ29sdW1uKXt2YXIgYj1F eHQuZ3JpZC5Db2x1bW4udHlwZXNbaC54dHlwZXx8ImdyaWRjb2x1bW4iXTtoPW5ldyBiKGgpO2Vb Z109aH10aGlzLmxvb2t1cFtoLmlkXT1ofWlmKCFkKXt0aGlzLmZpcmVFdmVudCgiY29uZmlnY2hh bmdlIix0aGlzKX19LGdldENvbHVtbkJ5SWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubG9va3Vw W2FdfSxnZXRJbmRleEJ5SWQ6ZnVuY3Rpb24oYyl7Zm9yKHZhciBiPTAsYT10aGlzLmNvbmZpZy5s ZW5ndGg7YjxhO2IrKyl7aWYodGhpcy5jb25maWdbYl0uaWQ9PWMpe3JldHVybiBifX1yZXR1cm4g LTF9LG1vdmVDb2x1bW46ZnVuY3Rpb24oZCxhKXt2YXIgYj10aGlzLmNvbmZpZ1tkXTt0aGlzLmNv bmZpZy5zcGxpY2UoZCwxKTt0aGlzLmNvbmZpZy5zcGxpY2UoYSwwLGIpO3RoaXMuZGF0YU1hcD1u dWxsO3RoaXMuZmlyZUV2ZW50KCJjb2x1bW5tb3ZlZCIsdGhpcyxkLGEpfSxnZXRDb2x1bW5Db3Vu dDpmdW5jdGlvbihkKXtpZihkPT09dHJ1ZSl7dmFyIGU9MDtmb3IodmFyIGI9MCxhPXRoaXMuY29u ZmlnLmxlbmd0aDtiPGE7YisrKXtpZighdGhpcy5pc0hpZGRlbihiKSl7ZSsrfX1yZXR1cm4gZX1y ZXR1cm4gdGhpcy5jb25maWcubGVuZ3RofSxnZXRDb2x1bW5zQnk6ZnVuY3Rpb24oZSxkKXt2YXIg Zz1bXTtmb3IodmFyIGI9MCxhPXRoaXMuY29uZmlnLmxlbmd0aDtiPGE7YisrKXt2YXIgaD10aGlz LmNvbmZpZ1tiXTtpZihlLmNhbGwoZHx8dGhpcyxoLGIpPT09dHJ1ZSl7Z1tnLmxlbmd0aF09aH19 cmV0dXJuIGd9LGlzU29ydGFibGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY29uZmlnW2FdLnNv cnRhYmxlfSxpc01lbnVEaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gISF0aGlzLmNvbmZpZ1th XS5tZW51RGlzYWJsZWR9LGdldFJlbmRlcmVyOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmNvbmZpZ1th XS5yZW5kZXJlcil7cmV0dXJuIEV4dC5ncmlkLkNvbHVtbk1vZGVsLmRlZmF1bHRSZW5kZXJlcn1y ZXR1cm4gdGhpcy5jb25maWdbYV0ucmVuZGVyZXJ9LHNldFJlbmRlcmVyOmZ1bmN0aW9uKGEsYil7 dGhpcy5jb25maWdbYV0ucmVuZGVyZXI9Yn0sZ2V0Q29sdW1uV2lkdGg6ZnVuY3Rpb24oYSl7cmV0 dXJuIHRoaXMuY29uZmlnW2FdLndpZHRofSxzZXRDb2x1bW5XaWR0aDpmdW5jdGlvbihiLGMsYSl7 dGhpcy5jb25maWdbYl0ud2lkdGg9Yzt0aGlzLnRvdGFsV2lkdGg9bnVsbDtpZighYSl7dGhpcy5m aXJlRXZlbnQoIndpZHRoY2hhbmdlIix0aGlzLGIsYyl9fSxnZXRUb3RhbFdpZHRoOmZ1bmN0aW9u KGIpe2lmKCF0aGlzLnRvdGFsV2lkdGgpe3RoaXMudG90YWxXaWR0aD0wO2Zvcih2YXIgYz0wLGE9 dGhpcy5jb25maWcubGVuZ3RoO2M8YTtjKyspe2lmKGJ8fCF0aGlzLmlzSGlkZGVuKGMpKXt0aGlz LnRvdGFsV2lkdGgrPXRoaXMuZ2V0Q29sdW1uV2lkdGgoYyl9fX1yZXR1cm4gdGhpcy50b3RhbFdp ZHRofSxnZXRDb2x1bW5IZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY29uZmlnW2FdLmhl YWRlcn0sc2V0Q29sdW1uSGVhZGVyOmZ1bmN0aW9uKGEsYil7dGhpcy5jb25maWdbYV0uaGVhZGVy PWI7dGhpcy5maXJlRXZlbnQoImhlYWRlcmNoYW5nZSIsdGhpcyxhLGIpfSxnZXRDb2x1bW5Ub29s dGlwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmNvbmZpZ1thXS50b29sdGlwfSxzZXRDb2x1bW5U b29sdGlwOmZ1bmN0aW9uKGEsYil7dGhpcy5jb25maWdbYV0udG9vbHRpcD1ifSxnZXREYXRhSW5k ZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuY29uZmlnW2FdLmRhdGFJbmRleH0sc2V0RGF0YUlu ZGV4OmZ1bmN0aW9uKGEsYil7dGhpcy5jb25maWdbYV0uZGF0YUluZGV4PWJ9LGZpbmRDb2x1bW5J bmRleDpmdW5jdGlvbihkKXt2YXIgZT10aGlzLmNvbmZpZztmb3IodmFyIGI9MCxhPWUubGVuZ3Ro O2I8YTtiKyspe2lmKGVbYl0uZGF0YUluZGV4PT1kKXtyZXR1cm4gYn19cmV0dXJuIC0xfSxpc0Nl bGxFZGl0YWJsZTpmdW5jdGlvbihhLGIpe3JldHVybih0aGlzLmNvbmZpZ1thXS5lZGl0YWJsZXx8 KHR5cGVvZiB0aGlzLmNvbmZpZ1thXS5lZGl0YWJsZT09InVuZGVmaW5lZCImJnRoaXMuY29uZmln W2FdLmVkaXRvcikpP3RydWU6ZmFsc2V9LGdldENlbGxFZGl0b3I6ZnVuY3Rpb24oYSxiKXtyZXR1 cm4gdGhpcy5jb25maWdbYV0uZ2V0Q2VsbEVkaXRvcihiKX0sc2V0RWRpdGFibGU6ZnVuY3Rpb24o YSxiKXt0aGlzLmNvbmZpZ1thXS5lZGl0YWJsZT1ifSxpc0hpZGRlbjpmdW5jdGlvbihhKXtyZXR1 cm4gdGhpcy5jb25maWdbYV0uaGlkZGVufSxpc0ZpeGVkOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlz LmNvbmZpZ1thXS5maXhlZH0saXNSZXNpemFibGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE+PTAmJnRo aXMuY29uZmlnW2FdLnJlc2l6YWJsZSE9PWZhbHNlJiZ0aGlzLmNvbmZpZ1thXS5maXhlZCE9PXRy dWV9LHNldEhpZGRlbjpmdW5jdGlvbihhLGIpe3ZhciBkPXRoaXMuY29uZmlnW2FdO2lmKGQuaGlk ZGVuIT09Yil7ZC5oaWRkZW49Yjt0aGlzLnRvdGFsV2lkdGg9bnVsbDt0aGlzLmZpcmVFdmVudCgi aGlkZGVuY2hhbmdlIix0aGlzLGEsYil9fSxzZXRFZGl0b3I6ZnVuY3Rpb24oYSxiKXtFeHQuZGVz dHJveSh0aGlzLmNvbmZpZ1thXS5lZGl0b3IpO3RoaXMuY29uZmlnW2FdLmVkaXRvcj1ifSxkZXN0 cm95OmZ1bmN0aW9uKCl7Zm9yKHZhciBiPTAsZD10aGlzLmNvbmZpZyxhPWQubGVuZ3RoO2I8YTti Kyspe0V4dC5kZXN0cm95KGRbYl0uZWRpdG9yKX10aGlzLnB1cmdlTGlzdGVuZXJzKCl9fSk7RXh0 LmdyaWQuQ29sdW1uTW9kZWwuZGVmYXVsdFJlbmRlcmVyPWZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBh PT0ic3RyaW5nIiYmYS5sZW5ndGg8MSl7cmV0dXJuIiYjMTYwOyJ9cmV0dXJuIGF9O0V4dC5ncmlk LkFic3RyYWN0U2VsZWN0aW9uTW9kZWw9ZnVuY3Rpb24oKXt0aGlzLmxvY2tlZD1mYWxzZTtFeHQu Z3JpZC5BYnN0cmFjdFNlbGVjdGlvbk1vZGVsLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0 aGlzKX07RXh0LmV4dGVuZChFeHQuZ3JpZC5BYnN0cmFjdFNlbGVjdGlvbk1vZGVsLEV4dC51dGls Lk9ic2VydmFibGUse2luaXQ6ZnVuY3Rpb24oYSl7dGhpcy5ncmlkPWE7dGhpcy5pbml0RXZlbnRz KCl9LGxvY2s6ZnVuY3Rpb24oKXt0aGlzLmxvY2tlZD10cnVlfSx1bmxvY2s6ZnVuY3Rpb24oKXt0 aGlzLmxvY2tlZD1mYWxzZX0saXNMb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NrZWR9 LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnB1cmdlTGlzdGVuZXJzKCl9fSk7RXh0LmdyaWQuUm93 U2VsZWN0aW9uTW9kZWw9ZnVuY3Rpb24oYSl7RXh0LmFwcGx5KHRoaXMsYSk7dGhpcy5zZWxlY3Rp b25zPW5ldyBFeHQudXRpbC5NaXhlZENvbGxlY3Rpb24oZmFsc2UsZnVuY3Rpb24oYil7cmV0dXJu IGIuaWR9KTt0aGlzLmxhc3Q9ZmFsc2U7dGhpcy5sYXN0QWN0aXZlPWZhbHNlO3RoaXMuYWRkRXZl bnRzKCJzZWxlY3Rpb25jaGFuZ2UiLCJiZWZvcmVyb3dzZWxlY3QiLCJyb3dzZWxlY3QiLCJyb3dk ZXNlbGVjdCIpO0V4dC5ncmlkLlJvd1NlbGVjdGlvbk1vZGVsLnN1cGVyY2xhc3MuY29uc3RydWN0 b3IuY2FsbCh0aGlzKX07RXh0LmV4dGVuZChFeHQuZ3JpZC5Sb3dTZWxlY3Rpb25Nb2RlbCxFeHQu Z3JpZC5BYnN0cmFjdFNlbGVjdGlvbk1vZGVsLHtzaW5nbGVTZWxlY3Q6ZmFsc2UsaW5pdEV2ZW50 czpmdW5jdGlvbigpe2lmKCF0aGlzLmdyaWQuZW5hYmxlRHJhZ0Ryb3AmJiF0aGlzLmdyaWQuZW5h YmxlRHJhZyl7dGhpcy5ncmlkLm9uKCJyb3dtb3VzZWRvd24iLHRoaXMuaGFuZGxlTW91c2VEb3du LHRoaXMpfWVsc2V7dGhpcy5ncmlkLm9uKCJyb3djbGljayIsZnVuY3Rpb24oYixkLGMpe2lmKGMu YnV0dG9uPT09MCYmIWMuc2hpZnRLZXkmJiFjLmN0cmxLZXkpe3RoaXMuc2VsZWN0Um93KGQsZmFs c2UpO2Iudmlldy5mb2N1c1JvdyhkKX19LHRoaXMpfXRoaXMucm93TmF2PW5ldyBFeHQuS2V5TmF2 KHRoaXMuZ3JpZC5nZXRHcmlkRWwoKSx7dXA6ZnVuY3Rpb24oYyl7aWYoIWMuc2hpZnRLZXl8fHRo aXMuc2luZ2xlU2VsZWN0KXt0aGlzLnNlbGVjdFByZXZpb3VzKGZhbHNlKX1lbHNle2lmKHRoaXMu bGFzdCE9PWZhbHNlJiZ0aGlzLmxhc3RBY3RpdmUhPT1mYWxzZSl7dmFyIGI9dGhpcy5sYXN0O3Ro aXMuc2VsZWN0UmFuZ2UodGhpcy5sYXN0LHRoaXMubGFzdEFjdGl2ZS0xKTt0aGlzLmdyaWQuZ2V0 VmlldygpLmZvY3VzUm93KHRoaXMubGFzdEFjdGl2ZSk7aWYoYiE9PWZhbHNlKXt0aGlzLmxhc3Q9 Yn19ZWxzZXt0aGlzLnNlbGVjdEZpcnN0Um93KCl9fX0sZG93bjpmdW5jdGlvbihjKXtpZighYy5z aGlmdEtleXx8dGhpcy5zaW5nbGVTZWxlY3Qpe3RoaXMuc2VsZWN0TmV4dChmYWxzZSl9ZWxzZXtp Zih0aGlzLmxhc3QhPT1mYWxzZSYmdGhpcy5sYXN0QWN0aXZlIT09ZmFsc2Upe3ZhciBiPXRoaXMu bGFzdDt0aGlzLnNlbGVjdFJhbmdlKHRoaXMubGFzdCx0aGlzLmxhc3RBY3RpdmUrMSk7dGhpcy5n cmlkLmdldFZpZXcoKS5mb2N1c1Jvdyh0aGlzLmxhc3RBY3RpdmUpO2lmKGIhPT1mYWxzZSl7dGhp cy5sYXN0PWJ9fWVsc2V7dGhpcy5zZWxlY3RGaXJzdFJvdygpfX19LHNjb3BlOnRoaXN9KTt2YXIg YT10aGlzLmdyaWQudmlldzthLm9uKCJyZWZyZXNoIix0aGlzLm9uUmVmcmVzaCx0aGlzKTthLm9u KCJyb3d1cGRhdGVkIix0aGlzLm9uUm93VXBkYXRlZCx0aGlzKTthLm9uKCJyb3dyZW1vdmVkIix0 aGlzLm9uUmVtb3ZlLHRoaXMpfSxvblJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgZz10aGlzLmdyaWQu c3RvcmUsYjt2YXIgZD10aGlzLmdldFNlbGVjdGlvbnMoKTt0aGlzLmNsZWFyU2VsZWN0aW9ucyh0 cnVlKTtmb3IodmFyIGM9MCxhPWQubGVuZ3RoO2M8YTtjKyspe3ZhciBlPWRbY107aWYoKGI9Zy5p bmRleE9mSWQoZS5pZCkpIT0tMSl7dGhpcy5zZWxlY3RSb3coYix0cnVlKX19aWYoZC5sZW5ndGgh PXRoaXMuc2VsZWN0aW9ucy5nZXRDb3VudCgpKXt0aGlzLmZpcmVFdmVudCgic2VsZWN0aW9uY2hh bmdlIix0aGlzKX19LG9uUmVtb3ZlOmZ1bmN0aW9uKGEsYixjKXtpZih0aGlzLnNlbGVjdGlvbnMu cmVtb3ZlKGMpIT09ZmFsc2Upe3RoaXMuZmlyZUV2ZW50KCJzZWxlY3Rpb25jaGFuZ2UiLHRoaXMp fX0sb25Sb3dVcGRhdGVkOmZ1bmN0aW9uKGEsYixjKXtpZih0aGlzLmlzU2VsZWN0ZWQoYykpe2Eu b25Sb3dTZWxlY3QoYil9fSxzZWxlY3RSZWNvcmRzOmZ1bmN0aW9uKGIsZSl7aWYoIWUpe3RoaXMu Y2xlYXJTZWxlY3Rpb25zKCl9dmFyIGQ9dGhpcy5ncmlkLnN0b3JlO2Zvcih2YXIgYz0wLGE9Yi5s ZW5ndGg7YzxhO2MrKyl7dGhpcy5zZWxlY3RSb3coZC5pbmRleE9mKGJbY10pLHRydWUpfX0sZ2V0 Q291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25zLmxlbmd0aH0sc2VsZWN0Rmly c3RSb3c6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdFJvdygwKX0sc2VsZWN0TGFzdFJvdzpmdW5jdGlv bihhKXt0aGlzLnNlbGVjdFJvdyh0aGlzLmdyaWQuc3RvcmUuZ2V0Q291bnQoKS0xLGEpfSxzZWxl Y3ROZXh0OmZ1bmN0aW9uKGEpe2lmKHRoaXMuaGFzTmV4dCgpKXt0aGlzLnNlbGVjdFJvdyh0aGlz Lmxhc3QrMSxhKTt0aGlzLmdyaWQuZ2V0VmlldygpLmZvY3VzUm93KHRoaXMubGFzdCk7cmV0dXJu IHRydWV9cmV0dXJuIGZhbHNlfSxzZWxlY3RQcmV2aW91czpmdW5jdGlvbihhKXtpZih0aGlzLmhh c1ByZXZpb3VzKCkpe3RoaXMuc2VsZWN0Um93KHRoaXMubGFzdC0xLGEpO3RoaXMuZ3JpZC5nZXRW aWV3KCkuZm9jdXNSb3codGhpcy5sYXN0KTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9LGhhc05l eHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXN0IT09ZmFsc2UmJih0aGlzLmxhc3QrMSk8dGhp cy5ncmlkLnN0b3JlLmdldENvdW50KCl9LGhhc1ByZXZpb3VzOmZ1bmN0aW9uKCl7cmV0dXJuICEh dGhpcy5sYXN0fSxnZXRTZWxlY3Rpb25zOmZ1bmN0aW9uKCl7cmV0dXJuW10uY29uY2F0KHRoaXMu c2VsZWN0aW9ucy5pdGVtcyl9LGdldFNlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2Vs ZWN0aW9ucy5pdGVtQXQoMCl9LGVhY2g6ZnVuY3Rpb24oZSxkKXt2YXIgYz10aGlzLmdldFNlbGVj dGlvbnMoKTtmb3IodmFyIGI9MCxhPWMubGVuZ3RoO2I8YTtiKyspe2lmKGUuY2FsbChkfHx0aGlz LGNbYl0sYik9PT1mYWxzZSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX0sY2xlYXJTZWxlY3Rp b25zOmZ1bmN0aW9uKGEpe2lmKHRoaXMuaXNMb2NrZWQoKSl7cmV0dXJufWlmKGEhPT10cnVlKXt2 YXIgYz10aGlzLmdyaWQuc3RvcmU7dmFyIGI9dGhpcy5zZWxlY3Rpb25zO2IuZWFjaChmdW5jdGlv bihkKXt0aGlzLmRlc2VsZWN0Um93KGMuaW5kZXhPZklkKGQuaWQpKX0sdGhpcyk7Yi5jbGVhcigp fWVsc2V7dGhpcy5zZWxlY3Rpb25zLmNsZWFyKCl9dGhpcy5sYXN0PWZhbHNlfSxzZWxlY3RBbGw6 ZnVuY3Rpb24oKXtpZih0aGlzLmlzTG9ja2VkKCkpe3JldHVybn10aGlzLnNlbGVjdGlvbnMuY2xl YXIoKTtmb3IodmFyIGI9MCxhPXRoaXMuZ3JpZC5zdG9yZS5nZXRDb3VudCgpO2I8YTtiKyspe3Ro aXMuc2VsZWN0Um93KGIsdHJ1ZSl9fSxoYXNTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhp cy5zZWxlY3Rpb25zLmxlbmd0aD4wfSxpc1NlbGVjdGVkOmZ1bmN0aW9uKGEpe3ZhciBiPXR5cGVv ZiBhPT0ibnVtYmVyIj90aGlzLmdyaWQuc3RvcmUuZ2V0QXQoYSk6YTtyZXR1cm4oYiYmdGhpcy5z ZWxlY3Rpb25zLmtleShiLmlkKT90cnVlOmZhbHNlKX0saXNJZFNlbGVjdGVkOmZ1bmN0aW9uKGEp e3JldHVybih0aGlzLnNlbGVjdGlvbnMua2V5KGEpP3RydWU6ZmFsc2UpfSxoYW5kbGVNb3VzZURv d246ZnVuY3Rpb24oZCxpLGgpe2lmKGguYnV0dG9uIT09MHx8dGhpcy5pc0xvY2tlZCgpKXtyZXR1 cm59dmFyIGE9dGhpcy5ncmlkLmdldFZpZXcoKTtpZihoLnNoaWZ0S2V5JiYhdGhpcy5zaW5nbGVT ZWxlY3QmJnRoaXMubGFzdCE9PWZhbHNlKXt2YXIgYz10aGlzLmxhc3Q7dGhpcy5zZWxlY3RSYW5n ZShjLGksaC5jdHJsS2V5KTt0aGlzLmxhc3Q9YzthLmZvY3VzUm93KGkpfWVsc2V7dmFyIGI9dGhp cy5pc1NlbGVjdGVkKGkpO2lmKGguY3RybEtleSYmYil7dGhpcy5kZXNlbGVjdFJvdyhpKX1lbHNl e2lmKCFifHx0aGlzLmdldENvdW50KCk+MSl7dGhpcy5zZWxlY3RSb3coaSxoLmN0cmxLZXl8fGgu c2hpZnRLZXkpO2EuZm9jdXNSb3coaSl9fX19LHNlbGVjdFJvd3M6ZnVuY3Rpb24oYyxkKXtpZigh ZCl7dGhpcy5jbGVhclNlbGVjdGlvbnMoKX1mb3IodmFyIGI9MCxhPWMubGVuZ3RoO2I8YTtiKysp e3RoaXMuc2VsZWN0Um93KGNbYl0sdHJ1ZSl9fSxzZWxlY3RSYW5nZTpmdW5jdGlvbihiLGEsZCl7 dmFyIGM7aWYodGhpcy5pc0xvY2tlZCgpKXtyZXR1cm59aWYoIWQpe3RoaXMuY2xlYXJTZWxlY3Rp b25zKCl9aWYoYjw9YSl7Zm9yKGM9YjtjPD1hO2MrKyl7dGhpcy5zZWxlY3RSb3coYyx0cnVlKX19 ZWxzZXtmb3IoYz1iO2M+PWE7Yy0tKXt0aGlzLnNlbGVjdFJvdyhjLHRydWUpfX19LGRlc2VsZWN0 UmFuZ2U6ZnVuY3Rpb24oYyxiLGEpe2lmKHRoaXMuaXNMb2NrZWQoKSl7cmV0dXJufWZvcih2YXIg ZD1jO2Q8PWI7ZCsrKXt0aGlzLmRlc2VsZWN0Um93KGQsYSl9fSxzZWxlY3RSb3c6ZnVuY3Rpb24o YixkLGEpe2lmKHRoaXMuaXNMb2NrZWQoKXx8KGI8MHx8Yj49dGhpcy5ncmlkLnN0b3JlLmdldENv dW50KCkpfHwoZCYmdGhpcy5pc1NlbGVjdGVkKGIpKSl7cmV0dXJufXZhciBjPXRoaXMuZ3JpZC5z dG9yZS5nZXRBdChiKTtpZihjJiZ0aGlzLmZpcmVFdmVudCgiYmVmb3Jlcm93c2VsZWN0Iix0aGlz LGIsZCxjKSE9PWZhbHNlKXtpZighZHx8dGhpcy5zaW5nbGVTZWxlY3Qpe3RoaXMuY2xlYXJTZWxl Y3Rpb25zKCl9dGhpcy5zZWxlY3Rpb25zLmFkZChjKTt0aGlzLmxhc3Q9dGhpcy5sYXN0QWN0aXZl PWI7aWYoIWEpe3RoaXMuZ3JpZC5nZXRWaWV3KCkub25Sb3dTZWxlY3QoYil9dGhpcy5maXJlRXZl bnQoInJvd3NlbGVjdCIsdGhpcyxiLGMpO3RoaXMuZmlyZUV2ZW50KCJzZWxlY3Rpb25jaGFuZ2Ui LHRoaXMpfX0sZGVzZWxlY3RSb3c6ZnVuY3Rpb24oYixhKXtpZih0aGlzLmlzTG9ja2VkKCkpe3Jl dHVybn1pZih0aGlzLmxhc3Q9PWIpe3RoaXMubGFzdD1mYWxzZX1pZih0aGlzLmxhc3RBY3RpdmU9 PWIpe3RoaXMubGFzdEFjdGl2ZT1mYWxzZX12YXIgYz10aGlzLmdyaWQuc3RvcmUuZ2V0QXQoYik7 aWYoYyl7dGhpcy5zZWxlY3Rpb25zLnJlbW92ZShjKTtpZighYSl7dGhpcy5ncmlkLmdldFZpZXco KS5vblJvd0Rlc2VsZWN0KGIpfXRoaXMuZmlyZUV2ZW50KCJyb3dkZXNlbGVjdCIsdGhpcyxiLGMp O3RoaXMuZmlyZUV2ZW50KCJzZWxlY3Rpb25jaGFuZ2UiLHRoaXMpfX0scmVzdG9yZUxhc3Q6ZnVu Y3Rpb24oKXtpZih0aGlzLl9sYXN0KXt0aGlzLmxhc3Q9dGhpcy5fbGFzdH19LGFjY2VwdHNOYXY6 ZnVuY3Rpb24oYyxiLGEpe3JldHVybiAhYS5pc0hpZGRlbihiKSYmYS5pc0NlbGxFZGl0YWJsZShi LGMpfSxvbkVkaXRvcktleTpmdW5jdGlvbihpLGgpe3ZhciBjPWguZ2V0S2V5KCksaixkPXRoaXMu Z3JpZCxiPWQuYWN0aXZlRWRpdG9yO3ZhciBhPWguc2hpZnRLZXk7aWYoYz09aC5UQUIpe2guc3Rv cEV2ZW50KCk7Yi5jb21wbGV0ZUVkaXQoKTtpZihhKXtqPWQud2Fsa0NlbGxzKGIucm93LGIuY29s LTEsLTEsdGhpcy5hY2NlcHRzTmF2LHRoaXMpfWVsc2V7aj1kLndhbGtDZWxscyhiLnJvdyxiLmNv bCsxLDEsdGhpcy5hY2NlcHRzTmF2LHRoaXMpfX1lbHNle2lmKGM9PWguRU5URVIpe2guc3RvcEV2 ZW50KCk7Yi5jb21wbGV0ZUVkaXQoKTtpZih0aGlzLm1vdmVFZGl0b3JPbkVudGVyIT09ZmFsc2Up e2lmKGEpe2o9ZC53YWxrQ2VsbHMoYi5yb3ctMSxiLmNvbCwtMSx0aGlzLmFjY2VwdHNOYXYsdGhp cyl9ZWxzZXtqPWQud2Fsa0NlbGxzKGIucm93KzEsYi5jb2wsMSx0aGlzLmFjY2VwdHNOYXYsdGhp cyl9fX1lbHNle2lmKGM9PWguRVNDKXtiLmNhbmNlbEVkaXQoKX19fWlmKGope2Quc3RhcnRFZGl0 aW5nKGpbMF0salsxXSl9fSxkZXN0cm95OmZ1bmN0aW9uKCl7aWYodGhpcy5yb3dOYXYpe3RoaXMu cm93TmF2LmRpc2FibGUoKTt0aGlzLnJvd05hdj1udWxsfUV4dC5ncmlkLlJvd1NlbGVjdGlvbk1v ZGVsLnN1cGVyY2xhc3MuZGVzdHJveS5jYWxsKHRoaXMpfX0pO0V4dC5ncmlkLkNvbHVtbj1mdW5j dGlvbihhKXtFeHQuYXBwbHkodGhpcyxhKTtpZih0eXBlb2YgdGhpcy5yZW5kZXJlcj09InN0cmlu ZyIpe3RoaXMucmVuZGVyZXI9RXh0LnV0aWwuRm9ybWF0W3RoaXMucmVuZGVyZXJdfWVsc2V7aWYo RXh0LmlzT2JqZWN0KHRoaXMucmVuZGVyZXIpKXt0aGlzLnNjb3BlPXRoaXMucmVuZGVyZXIuc2Nv cGU7dGhpcy5yZW5kZXJlcj10aGlzLnJlbmRlcmVyLmZufX10aGlzLnJlbmRlcmVyPXRoaXMucmVu ZGVyZXIuY3JlYXRlRGVsZWdhdGUodGhpcy5zY29wZXx8YSk7aWYodGhpcy5pZD09PXVuZGVmaW5l ZCl7dGhpcy5pZD0rK0V4dC5ncmlkLkNvbHVtbi5BVVRPX0lEfWlmKHRoaXMuZWRpdG9yKXt0aGlz LmVkaXRvcj1FeHQuY3JlYXRlKHRoaXMuZWRpdG9yLCJ0ZXh0ZmllbGQiKX19O0V4dC5ncmlkLkNv bHVtbi5BVVRPX0lEPTA7RXh0LmdyaWQuQ29sdW1uLnByb3RvdHlwZT17aXNDb2x1bW46dHJ1ZSxy ZW5kZXJlcjpmdW5jdGlvbihhKXtpZih0eXBlb2YgYT09InN0cmluZyImJmEubGVuZ3RoPDEpe3Jl dHVybiImIzE2MDsifXJldHVybiBhfSxnZXRFZGl0b3I6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu ZWRpdGFibGUhPT1mYWxzZT90aGlzLmVkaXRvcjpudWxsfSxnZXRDZWxsRWRpdG9yOmZ1bmN0aW9u KGIpe3ZhciBhPXRoaXMuZ2V0RWRpdG9yKGIpO2lmKGEpe2lmKCFhLnN0YXJ0RWRpdCl7aWYoIWEu Z3JpZEVkaXRvcil7YS5ncmlkRWRpdG9yPW5ldyBFeHQuZ3JpZC5HcmlkRWRpdG9yKGEpfXJldHVy biBhLmdyaWRFZGl0b3J9ZWxzZXtpZihhLnN0YXJ0RWRpdCl7cmV0dXJuIGF9fX1yZXR1cm4gbnVs bH19O0V4dC5ncmlkLkJvb2xlYW5Db2x1bW49RXh0LmV4dGVuZChFeHQuZ3JpZC5Db2x1bW4se3Ry dWVUZXh0OiJ0cnVlIixmYWxzZVRleHQ6ImZhbHNlIix1bmRlZmluZWRUZXh0OiImIzE2MDsiLGNv bnN0cnVjdG9yOmZ1bmN0aW9uKGEpe0V4dC5ncmlkLkJvb2xlYW5Db2x1bW4uc3VwZXJjbGFzcy5j b25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dmFyIGM9dGhpcy50cnVlVGV4dCxkPXRoaXMuZmFsc2VU ZXh0LGI9dGhpcy51bmRlZmluZWRUZXh0O3RoaXMucmVuZGVyZXI9ZnVuY3Rpb24oZSl7aWYoZT09 PXVuZGVmaW5lZCl7cmV0dXJuIGJ9aWYoIWV8fGU9PT0iZmFsc2UiKXtyZXR1cm4gZH1yZXR1cm4g Y319fSk7RXh0LmdyaWQuTnVtYmVyQ29sdW1uPUV4dC5leHRlbmQoRXh0LmdyaWQuQ29sdW1uLHtm b3JtYXQ6IjAsMDAwLjAwIixjb25zdHJ1Y3RvcjpmdW5jdGlvbihhKXtFeHQuZ3JpZC5OdW1iZXJD b2x1bW4uc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5yZW5kZXJlcj1F eHQudXRpbC5Gb3JtYXQubnVtYmVyUmVuZGVyZXIodGhpcy5mb3JtYXQpfX0pO0V4dC5ncmlkLkRh dGVDb2x1bW49RXh0LmV4dGVuZChFeHQuZ3JpZC5Db2x1bW4se2Zvcm1hdDoibS9kL1kiLGNvbnN0 cnVjdG9yOmZ1bmN0aW9uKGEpe0V4dC5ncmlkLkRhdGVDb2x1bW4uc3VwZXJjbGFzcy5jb25zdHJ1 Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5yZW5kZXJlcj1FeHQudXRpbC5Gb3JtYXQuZGF0ZVJlbmRl cmVyKHRoaXMuZm9ybWF0KX19KTtFeHQuZ3JpZC5UZW1wbGF0ZUNvbHVtbj1FeHQuZXh0ZW5kKEV4 dC5ncmlkLkNvbHVtbix7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYSl7RXh0LmdyaWQuVGVtcGxhdGVD b2x1bW4uc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dmFyIGI9dHlwZW9mIEV4 dC5pc09iamVjdCh0aGlzLnRwbCk/dGhpcy50cGw6bmV3IEV4dC5YVGVtcGxhdGUodGhpcy50cGwp O3RoaXMucmVuZGVyZXI9ZnVuY3Rpb24oZCxlLGMpe3JldHVybiBiLmFwcGx5KGMuZGF0YSl9O3Ro aXMudHBsPWJ9fSk7RXh0LmdyaWQuQ29sdW1uLnR5cGVzPXtncmlkY29sdW1uOkV4dC5ncmlkLkNv bHVtbixib29sZWFuY29sdW1uOkV4dC5ncmlkLkJvb2xlYW5Db2x1bW4sbnVtYmVyY29sdW1uOkV4 dC5ncmlkLk51bWJlckNvbHVtbixkYXRlY29sdW1uOkV4dC5ncmlkLkRhdGVDb2x1bW4sdGVtcGxh dGVjb2x1bW46RXh0LmdyaWQuVGVtcGxhdGVDb2x1bW59O0V4dC5ncmlkLlJvd051bWJlcmVyPWZ1 bmN0aW9uKGEpe0V4dC5hcHBseSh0aGlzLGEpO2lmKHRoaXMucm93c3Bhbil7dGhpcy5yZW5kZXJl cj10aGlzLnJlbmRlcmVyLmNyZWF0ZURlbGVnYXRlKHRoaXMpfX07RXh0LmdyaWQuUm93TnVtYmVy ZXIucHJvdG90eXBlPXtoZWFkZXI6IiIsd2lkdGg6MjMsc29ydGFibGU6ZmFsc2UsZml4ZWQ6dHJ1 ZSxtZW51RGlzYWJsZWQ6dHJ1ZSxkYXRhSW5kZXg6IiIsaWQ6Im51bWJlcmVyIixyb3dzcGFuOnVu ZGVmaW5lZCxyZW5kZXJlcjpmdW5jdGlvbihiLGMsYSxkKXtpZih0aGlzLnJvd3NwYW4pe2MuY2Vs bEF0dHI9J3Jvd3NwYW49IicrdGhpcy5yb3dzcGFuKyciJ31yZXR1cm4gZCsxfX07RXh0LmdyaWQu Q2hlY2tib3hTZWxlY3Rpb25Nb2RlbD1FeHQuZXh0ZW5kKEV4dC5ncmlkLlJvd1NlbGVjdGlvbk1v ZGVsLHtoZWFkZXI6JzxkaXYgY2xhc3M9IngtZ3JpZDMtaGQtY2hlY2tlciI+JiMxNjA7PC9kaXY+ Jyx3aWR0aDoyMCxzb3J0YWJsZTpmYWxzZSxtZW51RGlzYWJsZWQ6dHJ1ZSxmaXhlZDp0cnVlLGRh dGFJbmRleDoiIixpZDoiY2hlY2tlciIsY29uc3RydWN0b3I6ZnVuY3Rpb24oKXtFeHQuZ3JpZC5D aGVja2JveFNlbGVjdGlvbk1vZGVsLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuYXBwbHkodGhpcyxh cmd1bWVudHMpO2lmKHRoaXMuY2hlY2tPbmx5KXt0aGlzLmhhbmRsZU1vdXNlRG93bj1FeHQuZW1w dHlGbn19LGluaXRFdmVudHM6ZnVuY3Rpb24oKXtFeHQuZ3JpZC5DaGVja2JveFNlbGVjdGlvbk1v ZGVsLnN1cGVyY2xhc3MuaW5pdEV2ZW50cy5jYWxsKHRoaXMpO3RoaXMuZ3JpZC5vbigicmVuZGVy IixmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ3JpZC5nZXRWaWV3KCk7YS5tYWluQm9keS5vbigibW91 c2Vkb3duIix0aGlzLm9uTW91c2VEb3duLHRoaXMpO0V4dC5mbHkoYS5pbm5lckhkKS5vbigibW91 c2Vkb3duIix0aGlzLm9uSGRNb3VzZURvd24sdGhpcyl9LHRoaXMpfSxvbk1vdXNlRG93bjpmdW5j dGlvbihjLGIpe2lmKGMuYnV0dG9uPT09MCYmYi5jbGFzc05hbWU9PSJ4LWdyaWQzLXJvdy1jaGVj a2VyIil7Yy5zdG9wRXZlbnQoKTt2YXIgZD1jLmdldFRhcmdldCgiLngtZ3JpZDMtcm93Iik7aWYo ZCl7dmFyIGE9ZC5yb3dJbmRleDtpZih0aGlzLmlzU2VsZWN0ZWQoYSkpe3RoaXMuZGVzZWxlY3RS b3coYSl9ZWxzZXt0aGlzLnNlbGVjdFJvdyhhLHRydWUpfX19fSxvbkhkTW91c2VEb3duOmZ1bmN0 aW9uKGMsYSl7aWYoYS5jbGFzc05hbWU9PSJ4LWdyaWQzLWhkLWNoZWNrZXIiKXtjLnN0b3BFdmVu dCgpO3ZhciBiPUV4dC5mbHkoYS5wYXJlbnROb2RlKTt2YXIgZD1iLmhhc0NsYXNzKCJ4LWdyaWQz LWhkLWNoZWNrZXItb24iKTtpZihkKXtiLnJlbW92ZUNsYXNzKCJ4LWdyaWQzLWhkLWNoZWNrZXIt b24iKTt0aGlzLmNsZWFyU2VsZWN0aW9ucygpfWVsc2V7Yi5hZGRDbGFzcygieC1ncmlkMy1oZC1j aGVja2VyLW9uIik7dGhpcy5zZWxlY3RBbGwoKX19fSxyZW5kZXJlcjpmdW5jdGlvbihiLGMsYSl7 cmV0dXJuJzxkaXYgY2xhc3M9IngtZ3JpZDMtcm93LWNoZWNrZXIiPiYjMTYwOzwvZGl2Pid9fSk7 RXh0LmdyaWQuQ2VsbFNlbGVjdGlvbk1vZGVsPWZ1bmN0aW9uKGEpe0V4dC5hcHBseSh0aGlzLGEp O3RoaXMuc2VsZWN0aW9uPW51bGw7dGhpcy5hZGRFdmVudHMoImJlZm9yZWNlbGxzZWxlY3QiLCJj ZWxsc2VsZWN0Iiwic2VsZWN0aW9uY2hhbmdlIik7RXh0LmdyaWQuQ2VsbFNlbGVjdGlvbk1vZGVs LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKX07RXh0LmV4dGVuZChFeHQuZ3JpZC5D ZWxsU2VsZWN0aW9uTW9kZWwsRXh0LmdyaWQuQWJzdHJhY3RTZWxlY3Rpb25Nb2RlbCx7aW5pdEV2 ZW50czpmdW5jdGlvbigpe3RoaXMuZ3JpZC5vbigiY2VsbG1vdXNlZG93biIsdGhpcy5oYW5kbGVN b3VzZURvd24sdGhpcyk7dGhpcy5ncmlkLmdldEdyaWRFbCgpLm9uKEV4dC5FdmVudE1hbmFnZXIu dXNlS2V5ZG93bj8ia2V5ZG93biI6ImtleXByZXNzIix0aGlzLmhhbmRsZUtleURvd24sdGhpcyk7 dmFyIGE9dGhpcy5ncmlkLnZpZXc7YS5vbigicmVmcmVzaCIsdGhpcy5vblZpZXdDaGFuZ2UsdGhp cyk7YS5vbigicm93dXBkYXRlZCIsdGhpcy5vblJvd1VwZGF0ZWQsdGhpcyk7YS5vbigiYmVmb3Jl cm93cmVtb3ZlZCIsdGhpcy5jbGVhclNlbGVjdGlvbnMsdGhpcyk7YS5vbigiYmVmb3Jlcm93c2lu c2VydGVkIix0aGlzLmNsZWFyU2VsZWN0aW9ucyx0aGlzKTtpZih0aGlzLmdyaWQuaXNFZGl0b3Ip e3RoaXMuZ3JpZC5vbigiYmVmb3JlZWRpdCIsdGhpcy5iZWZvcmVFZGl0LHRoaXMpfX0sYmVmb3Jl RWRpdDpmdW5jdGlvbihhKXt0aGlzLnNlbGVjdChhLnJvdyxhLmNvbHVtbixmYWxzZSx0cnVlLGEu cmVjb3JkKX0sb25Sb3dVcGRhdGVkOmZ1bmN0aW9uKGEsYixjKXtpZih0aGlzLnNlbGVjdGlvbiYm dGhpcy5zZWxlY3Rpb24ucmVjb3JkPT1jKXthLm9uQ2VsbFNlbGVjdChiLHRoaXMuc2VsZWN0aW9u LmNlbGxbMV0pfX0sb25WaWV3Q2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5jbGVhclNlbGVjdGlvbnMo dHJ1ZSl9LGdldFNlbGVjdGVkQ2VsbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbj90 aGlzLnNlbGVjdGlvbi5jZWxsOm51bGx9LGNsZWFyU2VsZWN0aW9uczpmdW5jdGlvbihiKXt2YXIg YT10aGlzLnNlbGVjdGlvbjtpZihhKXtpZihiIT09dHJ1ZSl7dGhpcy5ncmlkLnZpZXcub25DZWxs RGVzZWxlY3QoYS5jZWxsWzBdLGEuY2VsbFsxXSl9dGhpcy5zZWxlY3Rpb249bnVsbDt0aGlzLmZp cmVFdmVudCgic2VsZWN0aW9uY2hhbmdlIix0aGlzLG51bGwpfX0saGFzU2VsZWN0aW9uOmZ1bmN0 aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uP3RydWU6ZmFsc2V9LGhhbmRsZU1vdXNlRG93bjpm dW5jdGlvbihiLGQsYSxjKXtpZihjLmJ1dHRvbiE9PTB8fHRoaXMuaXNMb2NrZWQoKSl7cmV0dXJu fXRoaXMuc2VsZWN0KGQsYSl9LHNlbGVjdDpmdW5jdGlvbihnLGMsYixlLGQpe2lmKHRoaXMuZmly ZUV2ZW50KCJiZWZvcmVjZWxsc2VsZWN0Iix0aGlzLGcsYykhPT1mYWxzZSl7dGhpcy5jbGVhclNl bGVjdGlvbnMoKTtkPWR8fHRoaXMuZ3JpZC5zdG9yZS5nZXRBdChnKTt0aGlzLnNlbGVjdGlvbj17 cmVjb3JkOmQsY2VsbDpbZyxjXX07aWYoIWIpe3ZhciBhPXRoaXMuZ3JpZC5nZXRWaWV3KCk7YS5v bkNlbGxTZWxlY3QoZyxjKTtpZihlIT09dHJ1ZSl7YS5mb2N1c0NlbGwoZyxjKX19dGhpcy5maXJl RXZlbnQoImNlbGxzZWxlY3QiLHRoaXMsZyxjKTt0aGlzLmZpcmVFdmVudCgic2VsZWN0aW9uY2hh bmdlIix0aGlzLHRoaXMuc2VsZWN0aW9uKX19LGlzU2VsZWN0YWJsZTpmdW5jdGlvbihjLGIsYSl7 cmV0dXJuICFhLmlzSGlkZGVuKGIpfSxoYW5kbGVLZXlEb3duOmZ1bmN0aW9uKGope2lmKCFqLmlz TmF2S2V5UHJlc3MoKSl7cmV0dXJufXZhciBpPXRoaXMuZ3JpZCxvPXRoaXMuc2VsZWN0aW9uO2lm KCFvKXtqLnN0b3BFdmVudCgpO3ZhciBuPWkud2Fsa0NlbGxzKDAsMCwxLHRoaXMuaXNTZWxlY3Rh YmxlLHRoaXMpO2lmKG4pe3RoaXMuc2VsZWN0KG5bMF0sblsxXSl9cmV0dXJufXZhciBiPXRoaXM7 dmFyIG09ZnVuY3Rpb24oZyxjLGUpe3JldHVybiBpLndhbGtDZWxscyhnLGMsZSxiLmlzU2VsZWN0 YWJsZSxiKX07dmFyIGQ9ai5nZXRLZXkoKSxhPW8uY2VsbFswXSxsPW8uY2VsbFsxXTt2YXIgaDtz d2l0Y2goZCl7Y2FzZSBqLlRBQjppZihqLnNoaWZ0S2V5KXtoPW0oYSxsLTEsLTEpfWVsc2V7aD1t KGEsbCsxLDEpfWJyZWFrO2Nhc2Ugai5ET1dOOmg9bShhKzEsbCwxKTticmVhaztjYXNlIGouVVA6 aD1tKGEtMSxsLC0xKTticmVhaztjYXNlIGouUklHSFQ6aD1tKGEsbCsxLDEpO2JyZWFrO2Nhc2Ug ai5MRUZUOmg9bShhLGwtMSwtMSk7YnJlYWs7Y2FzZSBqLkVOVEVSOmlmKGkuaXNFZGl0b3ImJiFp LmVkaXRpbmcpe2kuc3RhcnRFZGl0aW5nKGEsbCk7ai5zdG9wRXZlbnQoKTtyZXR1cm59YnJlYWt9 aWYoaCl7dGhpcy5zZWxlY3QoaFswXSxoWzFdKTtqLnN0b3BFdmVudCgpfX0sYWNjZXB0c05hdjpm dW5jdGlvbihjLGIsYSl7cmV0dXJuICFhLmlzSGlkZGVuKGIpJiZhLmlzQ2VsbEVkaXRhYmxlKGIs Yyl9LG9uRWRpdG9yS2V5OmZ1bmN0aW9uKGgsZCl7dmFyIGI9ZC5nZXRLZXkoKSxpLGM9dGhpcy5n cmlkLGE9Yy5hY3RpdmVFZGl0b3I7aWYoYj09ZC5UQUIpe2lmKGQuc2hpZnRLZXkpe2k9Yy53YWxr Q2VsbHMoYS5yb3csYS5jb2wtMSwtMSx0aGlzLmFjY2VwdHNOYXYsdGhpcyl9ZWxzZXtpPWMud2Fs a0NlbGxzKGEucm93LGEuY29sKzEsMSx0aGlzLmFjY2VwdHNOYXYsdGhpcyl9ZC5zdG9wRXZlbnQo KX1lbHNle2lmKGI9PWQuRU5URVIpe2EuY29tcGxldGVFZGl0KCk7ZC5zdG9wRXZlbnQoKX1lbHNl e2lmKGI9PWQuRVNDKXtkLnN0b3BFdmVudCgpO2EuY2FuY2VsRWRpdCgpfX19aWYoaSl7Yy5zdGFy dEVkaXRpbmcoaVswXSxpWzFdKX19fSk7RXh0LmdyaWQuRWRpdG9yR3JpZFBhbmVsPUV4dC5leHRl bmQoRXh0LmdyaWQuR3JpZFBhbmVsLHtjbGlja3NUb0VkaXQ6Mixmb3JjZVZhbGlkYXRpb246ZmFs c2UsaXNFZGl0b3I6dHJ1ZSxkZXRlY3RFZGl0OmZhbHNlLGF1dG9FbmNvZGU6ZmFsc2UsdHJhY2tN b3VzZU92ZXI6ZmFsc2UsaW5pdENvbXBvbmVudDpmdW5jdGlvbigpe0V4dC5ncmlkLkVkaXRvckdy aWRQYW5lbC5zdXBlcmNsYXNzLmluaXRDb21wb25lbnQuY2FsbCh0aGlzKTtpZighdGhpcy5zZWxN b2RlbCl7dGhpcy5zZWxNb2RlbD1uZXcgRXh0LmdyaWQuQ2VsbFNlbGVjdGlvbk1vZGVsKCl9dGhp cy5hY3RpdmVFZGl0b3I9bnVsbDt0aGlzLmFkZEV2ZW50cygiYmVmb3JlZWRpdCIsImFmdGVyZWRp dCIsInZhbGlkYXRlZWRpdCIpfSxpbml0RXZlbnRzOmZ1bmN0aW9uKCl7RXh0LmdyaWQuRWRpdG9y R3JpZFBhbmVsLnN1cGVyY2xhc3MuaW5pdEV2ZW50cy5jYWxsKHRoaXMpO3RoaXMub24oImJvZHlz Y3JvbGwiLHRoaXMuc3RvcEVkaXRpbmcsdGhpcyxbdHJ1ZV0pO3RoaXMub24oImNvbHVtbnJlc2l6 ZSIsdGhpcy5zdG9wRWRpdGluZyx0aGlzLFt0cnVlXSk7aWYodGhpcy5jbGlja3NUb0VkaXQ9PTEp e3RoaXMub24oImNlbGxjbGljayIsdGhpcy5vbkNlbGxEYmxDbGljayx0aGlzKX1lbHNle2lmKHRo aXMuY2xpY2tzVG9FZGl0PT0iYXV0byImJnRoaXMudmlldy5tYWluQm9keSl7dGhpcy52aWV3Lm1h aW5Cb2R5Lm9uKCJtb3VzZWRvd24iLHRoaXMub25BdXRvRWRpdENsaWNrLHRoaXMpfXRoaXMub24o ImNlbGxkYmxjbGljayIsdGhpcy5vbkNlbGxEYmxDbGljayx0aGlzKX19LG9uQ2VsbERibENsaWNr OmZ1bmN0aW9uKGIsYyxhKXt0aGlzLnN0YXJ0RWRpdGluZyhjLGEpfSxvbkF1dG9FZGl0Q2xpY2s6 ZnVuY3Rpb24oYyxiKXtpZihjLmJ1dHRvbiE9PTApe3JldHVybn12YXIgZz10aGlzLnZpZXcuZmlu ZFJvd0luZGV4KGIpO3ZhciBhPXRoaXMudmlldy5maW5kQ2VsbEluZGV4KGIpO2lmKGchPT1mYWxz ZSYmYSE9PWZhbHNlKXt0aGlzLnN0b3BFZGl0aW5nKCk7aWYodGhpcy5zZWxNb2RlbC5nZXRTZWxl Y3RlZENlbGwpe3ZhciBkPXRoaXMuc2VsTW9kZWwuZ2V0U2VsZWN0ZWRDZWxsKCk7aWYoZCYmZFsw XT09PWcmJmRbMV09PT1hKXt0aGlzLnN0YXJ0RWRpdGluZyhnLGEpfX1lbHNle2lmKHRoaXMuc2Vs TW9kZWwuaXNTZWxlY3RlZChnKSl7dGhpcy5zdGFydEVkaXRpbmcoZyxhKX19fX0sb25FZGl0Q29t cGxldGU6ZnVuY3Rpb24oYixkLGEpe3RoaXMuZWRpdGluZz1mYWxzZTt0aGlzLmFjdGl2ZUVkaXRv cj1udWxsO2IudW4oInNwZWNpYWxrZXkiLHRoaXMuc2VsTW9kZWwub25FZGl0b3JLZXksdGhpcy5z ZWxNb2RlbCk7dmFyIGM9Yi5yZWNvcmQ7dmFyIGg9dGhpcy5jb2xNb2RlbC5nZXREYXRhSW5kZXgo Yi5jb2wpO2Q9dGhpcy5wb3N0RWRpdFZhbHVlKGQsYSxjLGgpO2lmKHRoaXMuZm9yY2VWYWxpZGF0 aW9uPT09dHJ1ZXx8U3RyaW5nKGQpIT09U3RyaW5nKGEpKXt2YXIgZz17Z3JpZDp0aGlzLHJlY29y ZDpjLGZpZWxkOmgsb3JpZ2luYWxWYWx1ZTphLHZhbHVlOmQscm93OmIucm93LGNvbHVtbjpiLmNv bCxjYW5jZWw6ZmFsc2V9O2lmKHRoaXMuZmlyZUV2ZW50KCJ2YWxpZGF0ZWVkaXQiLGcpIT09ZmFs c2UmJiFnLmNhbmNlbCYmU3RyaW5nKGQpIT09U3RyaW5nKGEpKXtjLnNldChoLGcudmFsdWUpO2Rl bGV0ZSBnLmNhbmNlbDt0aGlzLmZpcmVFdmVudCgiYWZ0ZXJlZGl0IixnKX19dGhpcy52aWV3LmZv Y3VzQ2VsbChiLnJvdyxiLmNvbCl9LHN0YXJ0RWRpdGluZzpmdW5jdGlvbihoLGIpe3RoaXMuc3Rv cEVkaXRpbmcoKTtpZih0aGlzLmNvbE1vZGVsLmlzQ2VsbEVkaXRhYmxlKGIsaCkpe3RoaXMudmll dy5lbnN1cmVWaXNpYmxlKGgsYix0cnVlKTt2YXIgYz10aGlzLnN0b3JlLmdldEF0KGgpO3ZhciBn PXRoaXMuY29sTW9kZWwuZ2V0RGF0YUluZGV4KGIpO3ZhciBkPXtncmlkOnRoaXMscmVjb3JkOmMs ZmllbGQ6Zyx2YWx1ZTpjLmRhdGFbZ10scm93OmgsY29sdW1uOmIsY2FuY2VsOmZhbHNlfTtpZih0 aGlzLmZpcmVFdmVudCgiYmVmb3JlZWRpdCIsZCkhPT1mYWxzZSYmIWQuY2FuY2VsKXt0aGlzLmVk aXRpbmc9dHJ1ZTt2YXIgYT10aGlzLmNvbE1vZGVsLmdldENlbGxFZGl0b3IoYixoKTtpZighYSl7 cmV0dXJufWlmKCFhLnJlbmRlcmVkKXthLnJlbmRlcih0aGlzLnZpZXcuZ2V0RWRpdG9yUGFyZW50 KGEpKX0oZnVuY3Rpb24oKXthLnJvdz1oO2EuY29sPWI7YS5yZWNvcmQ9YzthLm9uKCJjb21wbGV0 ZSIsdGhpcy5vbkVkaXRDb21wbGV0ZSx0aGlzLHtzaW5nbGU6dHJ1ZX0pO2Eub24oInNwZWNpYWxr ZXkiLHRoaXMuc2VsTW9kZWwub25FZGl0b3JLZXksdGhpcy5zZWxNb2RlbCk7dGhpcy5hY3RpdmVF ZGl0b3I9YTt2YXIgZT10aGlzLnByZUVkaXRWYWx1ZShjLGcpO2Euc3RhcnRFZGl0KHRoaXMudmll dy5nZXRDZWxsKGgsYikuZmlyc3RDaGlsZCxlPT09dW5kZWZpbmVkPyIiOmUpfSkuZGVmZXIoNTAs dGhpcyl9fX0scHJlRWRpdFZhbHVlOmZ1bmN0aW9uKGEsYyl7dmFyIGI9YS5kYXRhW2NdO3JldHVy biB0aGlzLmF1dG9FbmNvZGUmJnR5cGVvZiBiPT0ic3RyaW5nIj9FeHQudXRpbC5Gb3JtYXQuaHRt bERlY29kZShiKTpifSxwb3N0RWRpdFZhbHVlOmZ1bmN0aW9uKGMsYSxiLGQpe3JldHVybiB0aGlz LmF1dG9FbmNvZGUmJnR5cGVvZiBjPT0ic3RyaW5nIj9FeHQudXRpbC5Gb3JtYXQuaHRtbEVuY29k ZShjKTpjfSxzdG9wRWRpdGluZzpmdW5jdGlvbihhKXtpZih0aGlzLmFjdGl2ZUVkaXRvcil7dGhp cy5hY3RpdmVFZGl0b3JbYT09PXRydWU/ImNhbmNlbEVkaXQiOiJjb21wbGV0ZUVkaXQiXSgpfXRo aXMuYWN0aXZlRWRpdG9yPW51bGx9fSk7RXh0LnJlZygiZWRpdG9yZ3JpZCIsRXh0LmdyaWQuRWRp dG9yR3JpZFBhbmVsKTtFeHQuZ3JpZC5HcmlkRWRpdG9yPWZ1bmN0aW9uKGIsYSl7RXh0LmdyaWQu R3JpZEVkaXRvci5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxiLGEpO2IubW9uaXRv clRhYj1mYWxzZX07RXh0LmV4dGVuZChFeHQuZ3JpZC5HcmlkRWRpdG9yLEV4dC5FZGl0b3Ise2Fs aWdubWVudDoidGwtdGwiLGF1dG9TaXplOiJ3aWR0aCIsaGlkZUVsOmZhbHNlLGNsczoieC1zbWFs bC1lZGl0b3IgeC1ncmlkLWVkaXRvciIsc2hpbTpmYWxzZSxzaGFkb3c6ZmFsc2V9KTtFeHQuZ3Jp ZC5Qcm9wZXJ0eVJlY29yZD1FeHQuZGF0YS5SZWNvcmQuY3JlYXRlKFt7bmFtZToibmFtZSIsdHlw ZToic3RyaW5nIn0sInZhbHVlIl0pO0V4dC5ncmlkLlByb3BlcnR5U3RvcmU9ZnVuY3Rpb24oYSxi KXt0aGlzLmdyaWQ9YTt0aGlzLnN0b3JlPW5ldyBFeHQuZGF0YS5TdG9yZSh7cmVjb3JkVHlwZTpF eHQuZ3JpZC5Qcm9wZXJ0eVJlY29yZH0pO3RoaXMuc3RvcmUub24oInVwZGF0ZSIsdGhpcy5vblVw ZGF0ZSx0aGlzKTtpZihiKXt0aGlzLnNldFNvdXJjZShiKX1FeHQuZ3JpZC5Qcm9wZXJ0eVN0b3Jl LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKX07RXh0LmV4dGVuZChFeHQuZ3JpZC5Q cm9wZXJ0eVN0b3JlLEV4dC51dGlsLk9ic2VydmFibGUse3NldFNvdXJjZTpmdW5jdGlvbihjKXt0 aGlzLnNvdXJjZT1jO3RoaXMuc3RvcmUucmVtb3ZlQWxsKCk7dmFyIGI9W107Zm9yKHZhciBhIGlu IGMpe2lmKHRoaXMuaXNFZGl0YWJsZVZhbHVlKGNbYV0pKXtiLnB1c2gobmV3IEV4dC5ncmlkLlBy b3BlcnR5UmVjb3JkKHtuYW1lOmEsdmFsdWU6Y1thXX0sYSkpfX10aGlzLnN0b3JlLmxvYWRSZWNv cmRzKHtyZWNvcmRzOmJ9LHt9LHRydWUpfSxvblVwZGF0ZTpmdW5jdGlvbihlLGEsZCl7aWYoZD09 RXh0LmRhdGEuUmVjb3JkLkVESVQpe3ZhciBiPWEuZGF0YS52YWx1ZTt2YXIgYz1hLm1vZGlmaWVk LnZhbHVlO2lmKHRoaXMuZ3JpZC5maXJlRXZlbnQoImJlZm9yZXByb3BlcnR5Y2hhbmdlIix0aGlz LnNvdXJjZSxhLmlkLGIsYykhPT1mYWxzZSl7dGhpcy5zb3VyY2VbYS5pZF09YjthLmNvbW1pdCgp O3RoaXMuZ3JpZC5maXJlRXZlbnQoInByb3BlcnR5Y2hhbmdlIix0aGlzLnNvdXJjZSxhLmlkLGIs Yyl9ZWxzZXthLnJlamVjdCgpfX19LGdldFByb3BlcnR5OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlz LnN0b3JlLmdldEF0KGEpfSxpc0VkaXRhYmxlVmFsdWU6ZnVuY3Rpb24oYSl7aWYoRXh0LmlzRGF0 ZShhKSl7cmV0dXJuIHRydWV9cmV0dXJuICEoRXh0LmlzT2JqZWN0KGEpfHxFeHQuaXNGdW5jdGlv bihhKSl9LHNldFZhbHVlOmZ1bmN0aW9uKGIsYSl7dGhpcy5zb3VyY2VbYl09YTt0aGlzLnN0b3Jl LmdldEJ5SWQoYikuc2V0KCJ2YWx1ZSIsYSl9LGdldFNvdXJjZTpmdW5jdGlvbigpe3JldHVybiB0 aGlzLnNvdXJjZX19KTtFeHQuZ3JpZC5Qcm9wZXJ0eUNvbHVtbk1vZGVsPWZ1bmN0aW9uKGMsYil7 dmFyIGQ9RXh0LmdyaWQsZT1FeHQuZm9ybTt0aGlzLmdyaWQ9YztkLlByb3BlcnR5Q29sdW1uTW9k ZWwuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsW3toZWFkZXI6dGhpcy5uYW1lVGV4 dCx3aWR0aDo1MCxzb3J0YWJsZTp0cnVlLGRhdGFJbmRleDoibmFtZSIsaWQ6Im5hbWUiLG1lbnVE aXNhYmxlZDp0cnVlfSx7aGVhZGVyOnRoaXMudmFsdWVUZXh0LHdpZHRoOjUwLHJlc2l6YWJsZTpm YWxzZSxkYXRhSW5kZXg6InZhbHVlIixpZDoidmFsdWUiLG1lbnVEaXNhYmxlZDp0cnVlfV0pO3Ro aXMuc3RvcmU9Yjt2YXIgYT1uZXcgZS5GaWVsZCh7YXV0b0NyZWF0ZTp7dGFnOiJzZWxlY3QiLGNo aWxkcmVuOlt7dGFnOiJvcHRpb24iLHZhbHVlOiJ0cnVlIixodG1sOiJ0cnVlIn0se3RhZzoib3B0 aW9uIix2YWx1ZToiZmFsc2UiLGh0bWw6ImZhbHNlIn1dfSxnZXRWYWx1ZTpmdW5jdGlvbigpe3Jl dHVybiB0aGlzLmVsLnZhbHVlPT0idHJ1ZSJ9fSk7dGhpcy5lZGl0b3JzPXtkYXRlOm5ldyBkLkdy aWRFZGl0b3IobmV3IGUuRGF0ZUZpZWxkKHtzZWxlY3RPbkZvY3VzOnRydWV9KSksc3RyaW5nOm5l dyBkLkdyaWRFZGl0b3IobmV3IGUuVGV4dEZpZWxkKHtzZWxlY3RPbkZvY3VzOnRydWV9KSksbnVt YmVyOm5ldyBkLkdyaWRFZGl0b3IobmV3IGUuTnVtYmVyRmllbGQoe3NlbGVjdE9uRm9jdXM6dHJ1 ZSxzdHlsZToidGV4dC1hbGlnbjpsZWZ0OyJ9KSksImJvb2xlYW4iOm5ldyBkLkdyaWRFZGl0b3Io YSl9O3RoaXMucmVuZGVyQ2VsbERlbGVnYXRlPXRoaXMucmVuZGVyQ2VsbC5jcmVhdGVEZWxlZ2F0 ZSh0aGlzKTt0aGlzLnJlbmRlclByb3BEZWxlZ2F0ZT10aGlzLnJlbmRlclByb3AuY3JlYXRlRGVs ZWdhdGUodGhpcyl9O0V4dC5leHRlbmQoRXh0LmdyaWQuUHJvcGVydHlDb2x1bW5Nb2RlbCxFeHQu Z3JpZC5Db2x1bW5Nb2RlbCx7bmFtZVRleHQ6Ik5hbWUiLHZhbHVlVGV4dDoiVmFsdWUiLGRhdGVG b3JtYXQ6Im0vai9ZIixyZW5kZXJEYXRlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRhdGVGb3JtYXQo dGhpcy5kYXRlRm9ybWF0KX0scmVuZGVyQm9vbDpmdW5jdGlvbihhKXtyZXR1cm4gYT8idHJ1ZSI6 ImZhbHNlIn0saXNDZWxsRWRpdGFibGU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09MX0sZ2V0UmVu ZGVyZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PTE/dGhpcy5yZW5kZXJDZWxsRGVsZWdhdGU6dGhp cy5yZW5kZXJQcm9wRGVsZWdhdGV9LHJlbmRlclByb3A6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu Z2V0UHJvcGVydHlOYW1lKGEpfSxyZW5kZXJDZWxsOmZ1bmN0aW9uKGEpe3ZhciBiPWE7aWYoRXh0 LmlzRGF0ZShhKSl7Yj10aGlzLnJlbmRlckRhdGUoYSl9ZWxzZXtpZih0eXBlb2YgYT09ImJvb2xl YW4iKXtiPXRoaXMucmVuZGVyQm9vbChhKX19cmV0dXJuIEV4dC51dGlsLkZvcm1hdC5odG1sRW5j b2RlKGIpfSxnZXRQcm9wZXJ0eU5hbWU6ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5ncmlkLnByb3Bl cnR5TmFtZXM7cmV0dXJuIGEmJmFbYl0/YVtiXTpifSxnZXRDZWxsRWRpdG9yOmZ1bmN0aW9uKGEs ZSl7dmFyIGI9dGhpcy5zdG9yZS5nZXRQcm9wZXJ0eShlKSxkPWIuZGF0YS5uYW1lLGM9Yi5kYXRh LnZhbHVlO2lmKHRoaXMuZ3JpZC5jdXN0b21FZGl0b3JzW2RdKXtyZXR1cm4gdGhpcy5ncmlkLmN1 c3RvbUVkaXRvcnNbZF19aWYoRXh0LmlzRGF0ZShjKSl7cmV0dXJuIHRoaXMuZWRpdG9ycy5kYXRl fWVsc2V7aWYodHlwZW9mIGM9PSJudW1iZXIiKXtyZXR1cm4gdGhpcy5lZGl0b3JzLm51bWJlcn1l bHNle2lmKHR5cGVvZiBjPT0iYm9vbGVhbiIpe3JldHVybiB0aGlzLmVkaXRvcnNbImJvb2xlYW4i XX1lbHNle3JldHVybiB0aGlzLmVkaXRvcnMuc3RyaW5nfX19fSxkZXN0cm95OmZ1bmN0aW9uKCl7 RXh0LmdyaWQuUHJvcGVydHlDb2x1bW5Nb2RlbC5zdXBlcmNsYXNzLmRlc3Ryb3kuY2FsbCh0aGlz KTtmb3IodmFyIGEgaW4gdGhpcy5lZGl0b3JzKXtFeHQuZGVzdHJveShhKX19fSk7RXh0LmdyaWQu UHJvcGVydHlHcmlkPUV4dC5leHRlbmQoRXh0LmdyaWQuRWRpdG9yR3JpZFBhbmVsLHtlbmFibGVD b2x1bW5Nb3ZlOmZhbHNlLHN0cmlwZVJvd3M6ZmFsc2UsdHJhY2tNb3VzZU92ZXI6ZmFsc2UsY2xp Y2tzVG9FZGl0OjEsZW5hYmxlSGRNZW51OmZhbHNlLHZpZXdDb25maWc6e2ZvcmNlRml0OnRydWV9 LGluaXRDb21wb25lbnQ6ZnVuY3Rpb24oKXt0aGlzLmN1c3RvbUVkaXRvcnM9dGhpcy5jdXN0b21F ZGl0b3JzfHx7fTt0aGlzLmxhc3RFZGl0Um93PW51bGw7dmFyIGI9bmV3IEV4dC5ncmlkLlByb3Bl cnR5U3RvcmUodGhpcyk7dGhpcy5wcm9wU3RvcmU9Yjt2YXIgYT1uZXcgRXh0LmdyaWQuUHJvcGVy dHlDb2x1bW5Nb2RlbCh0aGlzLGIpO2Iuc3RvcmUuc29ydCgibmFtZSIsIkFTQyIpO3RoaXMuYWRk RXZlbnRzKCJiZWZvcmVwcm9wZXJ0eWNoYW5nZSIsInByb3BlcnR5Y2hhbmdlIik7dGhpcy5jbT1h O3RoaXMuZHM9Yi5zdG9yZTtFeHQuZ3JpZC5Qcm9wZXJ0eUdyaWQuc3VwZXJjbGFzcy5pbml0Q29t cG9uZW50LmNhbGwodGhpcyk7dGhpcy5tb24odGhpcy5zZWxNb2RlbCwiYmVmb3JlY2VsbHNlbGVj dCIsZnVuY3Rpb24oZSxkLGMpe2lmKGM9PT0wKXt0aGlzLnN0YXJ0RWRpdGluZy5kZWZlcigyMDAs dGhpcyxbZCwxXSk7cmV0dXJuIGZhbHNlfX0sdGhpcyl9LG9uUmVuZGVyOmZ1bmN0aW9uKCl7RXh0 LmdyaWQuUHJvcGVydHlHcmlkLnN1cGVyY2xhc3Mub25SZW5kZXIuYXBwbHkodGhpcyxhcmd1bWVu dHMpO3RoaXMuZ2V0R3JpZEVsKCkuYWRkQ2xhc3MoIngtcHJvcHMtZ3JpZCIpfSxhZnRlclJlbmRl cjpmdW5jdGlvbigpe0V4dC5ncmlkLlByb3BlcnR5R3JpZC5zdXBlcmNsYXNzLmFmdGVyUmVuZGVy LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZih0aGlzLnNvdXJjZSl7dGhpcy5zZXRTb3VyY2UodGhp cy5zb3VyY2UpfX0sc2V0U291cmNlOmZ1bmN0aW9uKGEpe3RoaXMucHJvcFN0b3JlLnNldFNvdXJj ZShhKX0sZ2V0U291cmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvcFN0b3JlLmdldFNvdXJj ZSgpfX0pO0V4dC5yZWcoInByb3BlcnR5Z3JpZCIsRXh0LmdyaWQuUHJvcGVydHlHcmlkKTtFeHQu Z3JpZC5Hcm91cGluZ1ZpZXc9RXh0LmV4dGVuZChFeHQuZ3JpZC5HcmlkVmlldyx7Z3JvdXBCeVRl eHQ6Ikdyb3VwIEJ5IFRoaXMgRmllbGQiLHNob3dHcm91cHNUZXh0OiJTaG93IGluIEdyb3VwcyIs aGlkZUdyb3VwZWRDb2x1bW46ZmFsc2Usc2hvd0dyb3VwTmFtZTp0cnVlLHN0YXJ0Q29sbGFwc2Vk OmZhbHNlLGVuYWJsZUdyb3VwaW5nOnRydWUsZW5hYmxlR3JvdXBpbmdNZW51OnRydWUsZW5hYmxl Tm9Hcm91cHM6dHJ1ZSxlbXB0eUdyb3VwVGV4dDoiKE5vbmUpIixpZ25vcmVBZGQ6ZmFsc2UsZ3Jv dXBUZXh0VHBsOiJ7dGV4dH0iLGdpZFNlZWQ6MTAwMCxpbml0VGVtcGxhdGVzOmZ1bmN0aW9uKCl7 RXh0LmdyaWQuR3JvdXBpbmdWaWV3LnN1cGVyY2xhc3MuaW5pdFRlbXBsYXRlcy5jYWxsKHRoaXMp O3RoaXMuc3RhdGU9e307dmFyIGE9dGhpcy5ncmlkLmdldFNlbGVjdGlvbk1vZGVsKCk7YS5vbihh LnNlbGVjdFJvdz8iYmVmb3Jlcm93c2VsZWN0IjoiYmVmb3JlY2VsbHNlbGVjdCIsdGhpcy5vbkJl Zm9yZVJvd1NlbGVjdCx0aGlzKTtpZighdGhpcy5zdGFydEdyb3VwKXt0aGlzLnN0YXJ0R3JvdXA9 bmV3IEV4dC5YVGVtcGxhdGUoJzxkaXYgaWQ9Intncm91cElkfSIgY2xhc3M9IngtZ3JpZC1ncm91 cCB7Y2xzfSI+JywnPGRpdiBpZD0ie2dyb3VwSWR9LWhkIiBjbGFzcz0ieC1ncmlkLWdyb3VwLWhk IiBzdHlsZT0ie3N0eWxlfSI+PGRpdiBjbGFzcz0ieC1ncmlkLWdyb3VwLXRpdGxlIj4nLHRoaXMu Z3JvdXBUZXh0VHBsLCI8L2Rpdj48L2Rpdj4iLCc8ZGl2IGlkPSJ7Z3JvdXBJZH0tYmQiIGNsYXNz PSJ4LWdyaWQtZ3JvdXAtYm9keSI+Jyl9dGhpcy5zdGFydEdyb3VwLmNvbXBpbGUoKTt0aGlzLmVu ZEdyb3VwPSI8L2Rpdj48L2Rpdj4ifSxmaW5kR3JvdXA6ZnVuY3Rpb24oYSl7cmV0dXJuIEV4dC5m bHkoYSkudXAoIi54LWdyaWQtZ3JvdXAiLHRoaXMubWFpbkJvZHkuZG9tKX0sZ2V0R3JvdXBzOmZ1 bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzUm93cygpP3RoaXMubWFpbkJvZHkuZG9tLmNoaWxkTm9k ZXM6W119LG9uQWRkOmZ1bmN0aW9uKCl7aWYodGhpcy5lbmFibGVHcm91cGluZyYmIXRoaXMuaWdu b3JlQWRkKXt2YXIgYT10aGlzLmdldFNjcm9sbFN0YXRlKCk7dGhpcy5yZWZyZXNoKCk7dGhpcy5y ZXN0b3JlU2Nyb2xsKGEpfWVsc2V7aWYoIXRoaXMuZW5hYmxlR3JvdXBpbmcpe0V4dC5ncmlkLkdy b3VwaW5nVmlldy5zdXBlcmNsYXNzLm9uQWRkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSxvblJl bW92ZTpmdW5jdGlvbihlLGEsYixkKXtFeHQuZ3JpZC5Hcm91cGluZ1ZpZXcuc3VwZXJjbGFzcy5v blJlbW92ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoYS5fZ3JvdXBJZCk7aWYoYyYmYy5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXMubGVuZ3RoPDEp e0V4dC5yZW1vdmVOb2RlKGMpfXRoaXMuYXBwbHlFbXB0eVRleHQoKX0scmVmcmVzaFJvdzpmdW5j dGlvbihhKXtpZih0aGlzLmRzLmdldENvdW50KCk9PTEpe3RoaXMucmVmcmVzaCgpfWVsc2V7dGhp cy5pc1VwZGF0aW5nPXRydWU7RXh0LmdyaWQuR3JvdXBpbmdWaWV3LnN1cGVyY2xhc3MucmVmcmVz aFJvdy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pc1VwZGF0aW5nPWZhbHNlfX0sYmVmb3Jl TWVudVNob3c6ZnVuY3Rpb24oKXt2YXIgYyxhPXRoaXMuaG1lbnUuaXRlbXMsYj10aGlzLmNtLmNv bmZpZ1t0aGlzLmhkQ3R4SW5kZXhdLmdyb3VwYWJsZT09PWZhbHNlO2lmKChjPWEuZ2V0KCJncm91 cEJ5IikpKXtjLnNldERpc2FibGVkKGIpfWlmKChjPWEuZ2V0KCJzaG93R3JvdXBzIikpKXtjLnNl dERpc2FibGVkKGIpO2Muc2V0Q2hlY2tlZCghIXRoaXMuZ2V0R3JvdXBGaWVsZCgpLHRydWUpfX0s cmVuZGVyVUk6ZnVuY3Rpb24oKXtFeHQuZ3JpZC5Hcm91cGluZ1ZpZXcuc3VwZXJjbGFzcy5yZW5k ZXJVSS5jYWxsKHRoaXMpO3RoaXMubWFpbkJvZHkub24oIm1vdXNlZG93biIsdGhpcy5pbnRlcmNl cHRNb3VzZSx0aGlzKTtpZih0aGlzLmVuYWJsZUdyb3VwaW5nTWVudSYmdGhpcy5obWVudSl7dGhp cy5obWVudS5hZGQoIi0iLHtpdGVtSWQ6Imdyb3VwQnkiLHRleHQ6dGhpcy5ncm91cEJ5VGV4dCxo YW5kbGVyOnRoaXMub25Hcm91cEJ5Q2xpY2ssc2NvcGU6dGhpcyxpY29uQ2xzOiJ4LWdyb3VwLWJ5 LWljb24ifSk7aWYodGhpcy5lbmFibGVOb0dyb3Vwcyl7dGhpcy5obWVudS5hZGQoe2l0ZW1JZDoi c2hvd0dyb3VwcyIsdGV4dDp0aGlzLnNob3dHcm91cHNUZXh0LGNoZWNrZWQ6dHJ1ZSxjaGVja0hh bmRsZXI6dGhpcy5vblNob3dHcm91cHNDbGljayxzY29wZTp0aGlzfSl9dGhpcy5obWVudS5vbigi YmVmb3Jlc2hvdyIsdGhpcy5iZWZvcmVNZW51U2hvdyx0aGlzKX19LG9uR3JvdXBCeUNsaWNrOmZ1 bmN0aW9uKCl7dGhpcy5ncmlkLnN0b3JlLmdyb3VwQnkodGhpcy5jbS5nZXREYXRhSW5kZXgodGhp cy5oZEN0eEluZGV4KSk7dGhpcy5iZWZvcmVNZW51U2hvdygpfSxvblNob3dHcm91cHNDbGljazpm dW5jdGlvbihhLGIpe2lmKGIpe3RoaXMub25Hcm91cEJ5Q2xpY2soKX1lbHNle3RoaXMuZ3JpZC5z dG9yZS5jbGVhckdyb3VwaW5nKCl9fSx0b2dnbGVHcm91cDpmdW5jdGlvbihjLGIpe3RoaXMuZ3Jp ZC5zdG9wRWRpdGluZyh0cnVlKTtjPUV4dC5nZXREb20oYyk7dmFyIGE9RXh0LmZseShjKTtiPWIh PT11bmRlZmluZWQ/YjphLmhhc0NsYXNzKCJ4LWdyaWQtZ3JvdXAtY29sbGFwc2VkIik7dGhpcy5z dGF0ZVthLmRvbS5pZF09YjthW2I/InJlbW92ZUNsYXNzIjoiYWRkQ2xhc3MiXSgieC1ncmlkLWdy b3VwLWNvbGxhcHNlZCIpfSx0b2dnbGVBbGxHcm91cHM6ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcy5n ZXRHcm91cHMoKTtmb3IodmFyIGQ9MCxhPWIubGVuZ3RoO2Q8YTtkKyspe3RoaXMudG9nZ2xlR3Jv dXAoYltkXSxjKX19LGV4cGFuZEFsbEdyb3VwczpmdW5jdGlvbigpe3RoaXMudG9nZ2xlQWxsR3Jv dXBzKHRydWUpfSxjb2xsYXBzZUFsbEdyb3VwczpmdW5jdGlvbigpe3RoaXMudG9nZ2xlQWxsR3Jv dXBzKGZhbHNlKX0saW50ZXJjZXB0TW91c2U6ZnVuY3Rpb24oYil7dmFyIGE9Yi5nZXRUYXJnZXQo Ii54LWdyaWQtZ3JvdXAtaGQiLHRoaXMubWFpbkJvZHkpO2lmKGEpe2Iuc3RvcEV2ZW50KCk7dGhp cy50b2dnbGVHcm91cChhLnBhcmVudE5vZGUpfX0sZ2V0R3JvdXA6ZnVuY3Rpb24oYSxkLGgsaSxi LGUpe3ZhciBjPWg/aChhLHt9LGQsaSxiLGUpOlN0cmluZyhhKTtpZihjPT09IiIpe2M9dGhpcy5j bS5jb25maWdbYl0uZW1wdHlHcm91cFRleHR8fHRoaXMuZW1wdHlHcm91cFRleHR9cmV0dXJuIGN9 LGdldEdyb3VwRmllbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncmlkLnN0b3JlLmdldEdyb3Vw U3RhdGUoKX0sYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oKXtFeHQuZ3JpZC5Hcm91cGluZ1ZpZXcuc3Vw ZXJjbGFzcy5hZnRlclJlbmRlci5jYWxsKHRoaXMpO2lmKHRoaXMuZ3JpZC5kZWZlclJvd1JlbmRl cil7dGhpcy51cGRhdGVHcm91cFdpZHRocygpfX0scmVuZGVyUm93czpmdW5jdGlvbigpe3ZhciBh PXRoaXMuZ2V0R3JvdXBGaWVsZCgpO3ZhciBkPSEhYTtpZih0aGlzLmhpZGVHcm91cGVkQ29sdW1u KXt2YXIgYj10aGlzLmNtLmZpbmRDb2x1bW5JbmRleChhKTtpZighZCYmdGhpcy5sYXN0R3JvdXBG aWVsZCE9PXVuZGVmaW5lZCl7dGhpcy5tYWluQm9keS51cGRhdGUoIiIpO3RoaXMuY20uc2V0SGlk ZGVuKHRoaXMuY20uZmluZENvbHVtbkluZGV4KHRoaXMubGFzdEdyb3VwRmllbGQpLGZhbHNlKTtk ZWxldGUgdGhpcy5sYXN0R3JvdXBGaWVsZH1lbHNle2lmKGQmJnRoaXMubGFzdEdyb3VwRmllbGQ9 PT11bmRlZmluZWQpe3RoaXMubGFzdEdyb3VwRmllbGQ9YTt0aGlzLmNtLnNldEhpZGRlbihiLHRy dWUpfWVsc2V7aWYoZCYmdGhpcy5sYXN0R3JvdXBGaWVsZCE9PXVuZGVmaW5lZCYmYSE9PXRoaXMu bGFzdEdyb3VwRmllbGQpe3RoaXMubWFpbkJvZHkudXBkYXRlKCIiKTt2YXIgYz10aGlzLmNtLmZp bmRDb2x1bW5JbmRleCh0aGlzLmxhc3RHcm91cEZpZWxkKTt0aGlzLmNtLnNldEhpZGRlbihjLGZh bHNlKTt0aGlzLmxhc3RHcm91cEZpZWxkPWE7dGhpcy5jbS5zZXRIaWRkZW4oYix0cnVlKX19fX1y ZXR1cm4gRXh0LmdyaWQuR3JvdXBpbmdWaWV3LnN1cGVyY2xhc3MucmVuZGVyUm93cy5hcHBseSh0 aGlzLGFyZ3VtZW50cyl9LGRvUmVuZGVyOmZ1bmN0aW9uKGQsaix0LGEscyx2KXtpZihqLmxlbmd0 aDwxKXtyZXR1cm4iIn12YXIgQz10aGlzLmdldEdyb3VwRmllbGQoKSxxPXRoaXMuY20uZmluZENv bHVtbkluZGV4KEMpLHo7dGhpcy5lbmFibGVHcm91cGluZz0hIUM7aWYoIXRoaXMuZW5hYmxlR3Jv dXBpbmd8fHRoaXMuaXNVcGRhdGluZyl7cmV0dXJuIEV4dC5ncmlkLkdyb3VwaW5nVmlldy5zdXBl cmNsYXNzLmRvUmVuZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgaz0id2lkdGg6Iit0aGlz LmdldFRvdGFsV2lkdGgoKSsiOyI7dmFyIHU9dGhpcy5ncmlkLmdldEdyaWRFbCgpLmlkO3ZhciBo PXRoaXMuY20uY29uZmlnW3FdO3ZhciBiPWguZ3JvdXBSZW5kZXJlcnx8aC5yZW5kZXJlcjt2YXIg dz10aGlzLnNob3dHcm91cE5hbWU/KGguZ3JvdXBOYW1lfHxoLmhlYWRlcikrIjogIjoiIjt2YXIg Qj1bXSxuLHgseSxwO2Zvcih4PTAseT1qLmxlbmd0aDt4PHk7eCsrKXt2YXIgbT1hK3gsbz1qW3hd LGU9by5kYXRhW0NdO3o9dGhpcy5nZXRHcm91cChlLG8sYixtLHEsdCk7aWYoIW58fG4uZ3JvdXAh PXope3A9dSsiLWdwLSIrQysiLSIrRXh0LnV0aWwuRm9ybWF0Lmh0bWxFbmNvZGUoeik7dmFyIGM9 dHlwZW9mIHRoaXMuc3RhdGVbcF0hPT0idW5kZWZpbmVkIj8hdGhpcy5zdGF0ZVtwXTp0aGlzLnN0 YXJ0Q29sbGFwc2VkO3ZhciBsPWM/IngtZ3JpZC1ncm91cC1jb2xsYXBzZWQiOiIiO249e2dyb3Vw OnosZ3ZhbHVlOmUsdGV4dDp3K3osZ3JvdXBJZDpwLHN0YXJ0Um93Om0scnM6W29dLGNsczpsLHN0 eWxlOmt9O0IucHVzaChuKX1lbHNle24ucnMucHVzaChvKX1vLl9ncm91cElkPXB9dmFyIEE9W107 Zm9yKHg9MCx5PUIubGVuZ3RoO3g8eTt4Kyspe3o9Qlt4XTt0aGlzLmRvR3JvdXBTdGFydChBLHos ZCx0LHMpO0FbQS5sZW5ndGhdPUV4dC5ncmlkLkdyb3VwaW5nVmlldy5zdXBlcmNsYXNzLmRvUmVu ZGVyLmNhbGwodGhpcyxkLHoucnMsdCx6LnN0YXJ0Um93LHMsdik7dGhpcy5kb0dyb3VwRW5kKEEs eixkLHQscyl9cmV0dXJuIEEuam9pbigiIil9LGdldEdyb3VwSWQ6ZnVuY3Rpb24oZyl7dmFyIGQ9 dGhpcy5ncmlkLmdldEdyaWRFbCgpLmlkO3ZhciBjPXRoaXMuZ2V0R3JvdXBGaWVsZCgpO3ZhciBl PXRoaXMuY20uZmluZENvbHVtbkluZGV4KGMpO3ZhciBiPXRoaXMuY20uY29uZmlnW2VdO3ZhciBo PWIuZ3JvdXBSZW5kZXJlcnx8Yi5yZW5kZXJlcjt2YXIgYT10aGlzLmdldEdyb3VwKGcse2RhdGE6 e319LGgsMCxlLHRoaXMuZHMpO3JldHVybiBkKyItZ3AtIitjKyItIitFeHQudXRpbC5Gb3JtYXQu aHRtbEVuY29kZShnKX0sZG9Hcm91cFN0YXJ0OmZ1bmN0aW9uKGEsZCxiLGUsYyl7YVthLmxlbmd0 aF09dGhpcy5zdGFydEdyb3VwLmFwcGx5KGQpfSxkb0dyb3VwRW5kOmZ1bmN0aW9uKGEsZCxiLGUs Yyl7YVthLmxlbmd0aF09dGhpcy5lbmRHcm91cH0sZ2V0Um93czpmdW5jdGlvbigpe2lmKCF0aGlz LmVuYWJsZUdyb3VwaW5nKXtyZXR1cm4gRXh0LmdyaWQuR3JvdXBpbmdWaWV3LnN1cGVyY2xhc3Mu Z2V0Um93cy5jYWxsKHRoaXMpfXZhciBrPVtdO3ZhciBoLGM9dGhpcy5nZXRHcm91cHMoKTtmb3Io dmFyIGU9MCxhPWMubGVuZ3RoO2U8YTtlKyspe2g9Y1tlXS5jaGlsZE5vZGVzWzFdLmNoaWxkTm9k ZXM7Zm9yKHZhciBkPTAsYj1oLmxlbmd0aDtkPGI7ZCsrKXtrW2subGVuZ3RoXT1oW2RdfX1yZXR1 cm4ga30sdXBkYXRlR3JvdXBXaWR0aHM6ZnVuY3Rpb24oKXtpZighdGhpcy5lbmFibGVHcm91cGlu Z3x8IXRoaXMuaGFzUm93cygpKXtyZXR1cm59dmFyIGM9TWF0aC5tYXgodGhpcy5jbS5nZXRUb3Rh bFdpZHRoKCksdGhpcy5lbC5kb20ub2Zmc2V0V2lkdGgtdGhpcy5zY3JvbGxPZmZzZXQpKyJweCI7 dmFyIGI9dGhpcy5nZXRHcm91cHMoKTtmb3IodmFyIGQ9MCxhPWIubGVuZ3RoO2Q8YTtkKyspe2Jb ZF0uZmlyc3RDaGlsZC5zdHlsZS53aWR0aD1jfX0sb25Db2x1bW5XaWR0aFVwZGF0ZWQ6ZnVuY3Rp b24oYyxhLGIpe0V4dC5ncmlkLkdyb3VwaW5nVmlldy5zdXBlcmNsYXNzLm9uQ29sdW1uV2lkdGhV cGRhdGVkLmNhbGwodGhpcyxjLGEsYik7dGhpcy51cGRhdGVHcm91cFdpZHRocygpfSxvbkFsbENv bHVtbldpZHRoc1VwZGF0ZWQ6ZnVuY3Rpb24oYSxiKXtFeHQuZ3JpZC5Hcm91cGluZ1ZpZXcuc3Vw ZXJjbGFzcy5vbkFsbENvbHVtbldpZHRoc1VwZGF0ZWQuY2FsbCh0aGlzLGEsYik7dGhpcy51cGRh dGVHcm91cFdpZHRocygpfSxvbkNvbHVtbkhpZGRlblVwZGF0ZWQ6ZnVuY3Rpb24oYixjLGEpe0V4 dC5ncmlkLkdyb3VwaW5nVmlldy5zdXBlcmNsYXNzLm9uQ29sdW1uSGlkZGVuVXBkYXRlZC5jYWxs KHRoaXMsYixjLGEpO3RoaXMudXBkYXRlR3JvdXBXaWR0aHMoKX0sb25MYXlvdXQ6ZnVuY3Rpb24o KXt0aGlzLnVwZGF0ZUdyb3VwV2lkdGhzKCl9LG9uQmVmb3JlUm93U2VsZWN0OmZ1bmN0aW9uKGQs Yyl7aWYoIXRoaXMuZW5hYmxlR3JvdXBpbmcpe3JldHVybn12YXIgYj10aGlzLmdldFJvdyhjKTtp ZihiJiYhYi5vZmZzZXRQYXJlbnQpe3ZhciBhPXRoaXMuZmluZEdyb3VwKGIpO3RoaXMudG9nZ2xl R3JvdXAoYSx0cnVlKX19fSk7RXh0LmdyaWQuR3JvdXBpbmdWaWV3LkdST1VQX0lEPTEwMDA7 ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: application/x-javascript Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/structure.js dmFyIE1hc3RlclRlc3RRdWl6ID0geyJuYW1lIjoiXHUwNDIyXHUwNDM1XHUwNDQxXHUwNDQyIFx1 MDQzNFx1MDQzYlx1MDQ0ZiA5IFx1MDQzYVx1MDQzYlx1MDQzMFx1MDQ0MVx1MDQ0MVx1MDQzMCBc dTA0M2RcdTA0MzAgXHUwNDNmXHUwNDNlXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDM1XHUw NDNkXHUwNDM4XHUwNDM1IFx1MDQzOCBcdTA0MzdcdTA0MzBcdTA0M2FcdTA0NDBcdTA0MzVcdTA0 M2ZcdTA0M2JcdTA0MzVcdTA0M2RcdTA0MzhcdTA0MzUiLCJpdGVtcyI6W3siaWQiOiIxIiwicXVl c3Rpb25JZCI6IjEiLCJpdGVtVHlwZSI6InF1ZXN0aW9uIiwiZGF0YSI6eyJhbnN3ZXJzIjoie1wi MVwiOlwiXHUwNDMyXHUwNDM1XHUwNDQyXHUwNDM1XHUwNDQwLCBcdTA0MzdcdTA0MzBcdTA0MzRc dTA0NDNcdTA0MzJcdTA0MzBcdTA0M2IsIFx1MDQ0OFx1MDQzNVx1MDQzMlx1MDQzNVx1MDQzYlx1 MDQzOFx1MDQzYiwgXHUwNDQxIFx1MDQzY1x1MDQzZVx1MDQ0MFx1MDQ0ZlwiLFwiMlwiOlwiXHUw NDNmXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDQxXHUwNDMyXHUwNDM1 XHUwNDQyXHUwNDNkXHUwNDRiXHUwNDM5LCBcdTA0NDhcdTA0MzVcdTA0MzJcdTA0MzVcdTA0M2Jc dTA0MzhcdTA0M2IsIFx1MDQ0MSBcdTA0M2NcdTA0M2VcdTA0NDBcdTA0NGZcIixcIjNcIjpcIlx1 MDQzMlx1MDQzNVx1MDQ0Mlx1MDQzNVx1MDQ0MCwgXHUwNDQxIFx1MDQzY1x1MDQzZVx1MDQ0MFx1 MDQ0ZiwgXHUwNDNiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDRjXHUwNDRmLCBcdTA0M2RcdTA0MzBc dTA0MzQgXHUwNDMzXHUwNDNlXHUwNDNiXHUwNDNlXHUwNDMyXHUwNDNlXHUwNDM5XCIsXCI0XCI6 XCJcdTA0MzdcdTA0MzBcdTA0MzRcdTA0NDNcdTA0MzJcdTA0MzBcdTA0M2IsIFx1MDQ0OFx1MDQz NVx1MDQzMlx1MDQzNVx1MDQzYlx1MDQzOFx1MDQzYiwgXHUwNDNkXHUwNDMwXHUwNDM0IFx1MDQz M1x1MDQzZVx1MDQzYlx1MDQzZVx1MDQzMlx1MDQzZVx1MDQzOVwiLFwiNVwiOlwiXHUwNDQ4XHUw NDM1XHUwNDMyXHUwNDM1XHUwNDNiXHUwNDM4XHUwNDNiLCBcdTA0M2JcdTA0MzhcdTA0NDFcdTA0 NDJcdTA0NGNcdTA0NGYsIFx1MDQzZFx1MDQzMFx1MDQzNCBcdTA0MzNcdTA0M2VcdTA0M2JcdTA0 M2VcdTA0MzJcdTA0M2VcdTA0MzlcIn0iLCJjb3JyZWN0X2Fuc3dlciI6IltcIjNcIl0iLCJwb3Np dGlvbiI6MSwicmF0ZSI6MSwidGl0bGUiOiJcdTA0MjNcdTA0M2FcdTA0MzBcdTA0MzZcdTA0Mzhc dTA0NDJcdTA0MzUgXHUwNDQwXHUwNDRmXHUwNDM0IFx1MDQzOFx1MDQzY1x1MDQ1MVx1MDQzZCBc dTA0NDFcdTA0NDNcdTA0NDlcdTA0MzVcdTA0NDFcdTA0NDJcdTA0MzJcdTA0MzhcdTA0NDJcdTA0 MzVcdTA0M2JcdTA0NGNcdTA0M2RcdTA0NGJcdTA0NDUgXHUwNDM4XHUwNDM3IFx1MDQzZlx1MDQ0 MFx1MDQzNVx1MDQzNFx1MDQzYlx1MDQzZVx1MDQzNlx1MDQzNVx1MDQzZFx1MDQzOFx1MDQ0Zjog XHUwNDFmXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDQxXHUwNDMyXHUw NDM1XHUwNDQyXHUwNDNkXHUwNDRiXHUwNDM5IFx1MDQzMlx1MDQzNVx1MDQ0Mlx1MDQzNVx1MDQ0 MCBcdTA0MzdcdTA0MzBcdTA0MzRcdTA0NDNcdTA0MzJcdTA0MzBcdTA0M2IgXHUwNDQxIFx1MDQz Y1x1MDQzZVx1MDQ0MFx1MDQ0ZiBcdTA0MzggXHUwNDQ4XHUwNDM1XHUwNDMyXHUwNDM1XHUwNDNi XHUwNDM4XHUwNDNiIFx1MDQzZFx1MDQzMFx1MDQzNCBcdTA0MzNcdTA0M2VcdTA0M2JcdTA0M2Vc dTA0MzJcdTA0M2VcdTA0MzkuIiwidHlwZSI6IlNpbmdsZUFuc3dlciJ9fSx7ImlkIjoiMiIsInF1 ZXN0aW9uSWQiOiIyIiwiaXRlbVR5cGUiOiJxdWVzdGlvbiIsImRhdGEiOnsiYW5zd2VycyI6Intc IjFcIjpcIlx1MDQzOCwgXHUwNDM4XCIsXCIyXCI6XCJcdTA0MzUsIFx1MDQzNVwiLFwiM1wiOlwi XHUwNDM1LCBcdTA0MzVcdTA0MzlcIixcIjRcIjpcIlx1MDQzNSwgXHUwNDNlXHUwNDM5XCIsXCI1 XCI6XCJcdTA0MzgsIFx1MDQzZVx1MDQzOVwifSIsImNvcnJlY3RfYW5zd2VyIjoiW1wiM1wiXSIs InBvc2l0aW9uIjoyLCJyYXRlIjoxLCJ0aXRsZSI6Ilx1MDQxZVx1MDQzZlx1MDQ0MFx1MDQzNVx1 MDQzNFx1MDQzNVx1MDQzYlx1MDQzOFx1MDQ0Mlx1MDQzNSwgXHUwNDNhXHUwNDMwXHUwNDNhXHUw NDM4XHUwNDM1IFx1MDQzZVx1MDQzYVx1MDQzZVx1MDQzZFx1MDQ0N1x1MDQzMFx1MDQzZFx1MDQz OFx1MDQ0ZiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0MzVcdTA0NDIgXHUwNDM0 XHUwNDNlXHUwNDNmXHUwNDM4XHUwNDQxXHUwNDMwXHUwNDQyXHUwNDRjIFx1MDQzMiBcdTA0NDFc dTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0MzVcdTA0M2MgXHUwNDNmXHUw NDQwXHUwNDM1XHUwNDM0XHUwNDNiXHUwNDNlXHUwNDM2XHUwNDM1XHUwNDNkXHUwNDM4XHUwNDM4 OiBcdTA0MWEgXHUwNDEwXHUwNDNkXHUwNDM4XHUwNDQxXHUwNDRjLi4uIFx1MDQzNFx1MDQzNVx1 MDQ0Mlx1MDQzOCBcdTA0M2ZcdTA0M2VcdTA0MzFcdTA0MzVcdTA0MzZcdTA0MzBcdTA0M2JcdTA0 MzgsIFx1MDQ0MyBcdTA0M2RcdTA0MzVcdTA0MzkgXHUwNDNhXHUwNDNiXHUwNDRlXHUwNDQ3XHUw NDM4IFx1MDQzMlx1MDQzN1x1MDQ0Zlx1MDQ0Mlx1MDQ0YyBcdTA0M2VcdTA0NDIgXHUwNDQxXHUw NDM1XHUwNDNkLi4uIiwidHlwZSI6IlNpbmdsZUFuc3dlciJ9fSx7ImlkIjoiMyIsInF1ZXN0aW9u SWQiOiIzIiwiaXRlbVR5cGUiOiJxdWVzdGlvbiIsImRhdGEiOnsiYW5zd2VycyI6IntcIjFcIjpc Ilx1MDQzMVx1MDQzZVx1MDQ0MFx1MDQzNVx1MDQ0NiwgXHUwNDNhXHUwNDMwXHUwNDNmXHUwNDM1 XHUwNDNiXHUwNDRjLCBcdTA0MzBcdTA0NDBcdTA0MzFcdTA0NDNcdTA0MzdcIixcIjJcIjpcIlx1 MDQzY1x1MDQzZVx1MDQzYlx1MDQzZVx1MDQzNFx1MDQzZVx1MDQ0MVx1MDQ0Mlx1MDQ0YywgXHUw NDM3XHUwNDNiXHUwNDNlXHUwNDMxXHUwNDMwLCBcdTA0NDVcdTA0M2VcdTA0M2JcdTA0M2VcdTA0 MzRcIixcIjNcIjpcIlx1MDQzN1x1MDQ0MFx1MDQzNVx1MDQzYlx1MDQzOFx1MDQ0OVx1MDQzNSwg XHUwNDQxXHUwNDNiXHUwNDNlXHUwNDMyXHUwNDNlLCBcdTA0MzJcdTA0NDBcdTA0MzBcdTA0NDJc dTA0MzBcdTA0NDBcdTA0NGNcIixcIjRcIjpcIlx1MDQzNFx1MDQzNVx1MDQzNFx1MDQ0M1x1MDQ0 OFx1MDQzYVx1MDQzMCwgXHUwNDMzXHUwNDNlXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDM4XHUwNDNk XHUwNDNhXHUwNDMwLCBcdTA0NDJcdTA0MzhcdTA0NDhcdTA0MzhcdTA0M2RcdTA0MzBcIixcIjVc IjpcIlx1MDQzYVx1MDQzZVx1MDQzNlx1MDQzMCwgXHUwNDMxXHUwNDM4XHUwNDMxXHUwNDNiXHUw NDM4XHUwNDNlXHUwNDQyXHUwNDM1XHUwNDNhXHUwNDMwXHUwNDQwXHUwNDRjLCBcdTA0M2FcdTA0 MzBcdTA0M2NcdTA0MzVcdTA0M2RcdTA0NGNcIn0iLCJjb3JyZWN0X2Fuc3dlciI6IltcIjNcIl0i LCJwb3NpdGlvbiI6MywicmF0ZSI6MSwidGl0bGUiOiJcdTA0MjNcdTA0M2FcdTA0MzBcdTA0MzZc dTA0MzhcdTA0NDJcdTA0MzUgXHUwNDM4XHUwNDNjXHUwNDM1XHUwNDNkXHUwNDMwIFx1MDQ0MVx1 MDQ0M1x1MDQ0OVx1MDQzNVx1MDQ0MVx1MDQ0Mlx1MDQzMlx1MDQzOFx1MDQ0Mlx1MDQzNVx1MDQz Ylx1MDQ0Y1x1MDQzZFx1MDQ0Ylx1MDQzNSAyIFx1MDQ0MVx1MDQzYVx1MDQzYlx1MDQzZVx1MDQz ZFx1MDQzNVx1MDQzZFx1MDQzOFx1MDQ0ZjoiLCJ0eXBlIjoiU2luZ2xlQW5zd2VyIn19LHsiaWQi OiI0IiwicXVlc3Rpb25JZCI6IjQiLCJpdGVtVHlwZSI6InF1ZXN0aW9uIiwiZGF0YSI6eyJhbnN3 ZXJzIjoie1wiMVwiOlwiXHUwNDM0XHUwNDNlXHUwNDMxXHUwNDQwXHUwNDRiXHUwNDM5XCIsXCIy XCI6XCJcdTA0MzRcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NDhcdTA0M2FcdTA0MzhcdTA0M2RcIixc IjNcIjpcIlx1MDQzY1x1MDQzZVx1MDQ0MVx1MDQzYVx1MDQzZVx1MDQzMlx1MDQ0MVx1MDQzYVx1 MDQzOFx1MDQzOVwiLFwiNFwiOlwiXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDM4XHUwNDRkXHUwNDQy XHUwNDMwXHUwNDM2XHUwNDNkXHUwNDRiXHUwNDM5XCIsXCI1XCI6XCJcdTA0M2NcdTA0M2VcdTA0 MzlcIn0iLCJjb3JyZWN0X2Fuc3dlciI6IltcIjFcIl0iLCJwb3NpdGlvbiI6NCwicmF0ZSI6MSwi dGl0bGUiOiJcdTA0MjNcdTA0M2FcdTA0MzBcdTA0MzZcdTA0MzhcdTA0NDJcdTA0MzUgXHUwNDNh XHUwNDMwXHUwNDQ3XHUwNDM1XHUwNDQxXHUwNDQyXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDNkXHUw NDNlXHUwNDM1IFx1MDQzOFx1MDQzY1x1MDQ0ZiBcdTA0M2ZcdTA0NDBcdTA0MzhcdTA0M2JcdTA0 MzBcdTA0MzNcdTA0MzBcdTA0NDJcdTA0MzVcdTA0M2JcdTA0NGNcdTA0M2RcdTA0M2VcdTA0MzU6 IiwidHlwZSI6IlNpbmdsZUFuc3dlciJ9fSx7ImlkIjoiNSIsInF1ZXN0aW9uSWQiOiI1IiwiaXRl bVR5cGUiOiJxdWVzdGlvbiIsImRhdGEiOnsiYW5zd2VycyI6IntcIjFcIjpcIlx1MDQzYVx1MDQz MFx1MDQ0N1x1MDQzNVx1MDQ0MVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQzZFx1MDQzZFx1MDQzZVx1 MDQzNVwiLFwiMlwiOlwiXHUwNDNlXHUwNDQyXHUwNDNkXHUwNDNlXHUwNDQxXHUwNDM4XHUwNDQy XHUwNDM1XHUwNDNiXHUwNDRjXHUwNDNkXHUwNDNlXHUwNDM1XCIsXCIzXCI6XCJcdTA0M2ZcdTA0 NDBcdTA0MzhcdTA0NDJcdTA0NGZcdTA0MzZcdTA0MzBcdTA0NDJcdTA0MzVcdTA0M2JcdTA0NGNc dTA0M2RcdTA0M2VcdTA0MzVcIixcIjRcIjpcIlx1MDQzMlx1MDQ0MVx1MDQzNSBcdTA0M2VcdTA0 NDJcdTA0MzJcdTA0MzVcdTA0NDJcdTA0NGIgXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDNkXHUwNDRi XCIsXCI1XCI6XCJcdTA0M2RcdTA0MzVcdTA0NDIgXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDNkXHUw NDNlXHUwNDMzXHUwNDNlIFx1MDQzZVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQ0Mlx1MDQzMFwifSIs ImNvcnJlY3RfYW5zd2VyIjoiW1wiMlwiXSIsInBvc2l0aW9uIjo1LCJyYXRlIjoxLCJ0aXRsZSI6 Ilx1MDQxZVx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzOFx1MDQ0Mlx1 MDQzNSBcdTA0NDBcdTA0MzBcdTA0MzdcdTA0NDBcdTA0NGZcdTA0MzQgXHUwNDM4XHUwNDNjXHUw NDM1XHUwNDNkXHUwNDM4IFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYlx1MDQzMFx1MDQzM1x1MDQz MFx1MDQ0Mlx1MDQzNVx1MDQzYlx1MDQ0Y1x1MDQzZFx1MDQzZVx1MDQzM1x1MDQzZSBcdTA0MzIg XHUwNDQxXHUwNDNiXHUwNDNlXHUwNDMyXHUwNDNlXHUwNDQxXHUwNDNlXHUwNDQ3XHUwNDM1XHUw NDQyXHUwNDMwXHUwNDNkXHUwNDM4XHUwNDM4OiBcdTA0M2VcdTA0NDFcdTA0MzVcdTA0M2RcdTA0 M2RcdTA0MzhcdTA0MzkgXHUwNDNmXHUwNDM1XHUwNDM5XHUwNDM3XHUwNDMwXHUwNDM2OiIsInR5 cGUiOiJTaW5nbGVBbnN3ZXIifX0seyJpZCI6IjYiLCJxdWVzdGlvbklkIjoiNiIsIml0ZW1UeXBl IjoicXVlc3Rpb24iLCJkYXRhIjp7ImFuc3dlcnMiOiJ7XCIxXCI6XCJcdTA0MjMgXHUwNDNmXHUw NDNlXHUwNDM0XHUwNDNlXHUwNDQ4XHUwNDMyXHUwNDRiIFx1MDQzMlx1MDQzZVx1MDQzN1x1MDQz Mlx1MDQ0Ylx1MDQ0OFx1MDQzNVx1MDQzZFx1MDQzOFx1MDQ0ZiBcdTA0NDJcdTA0MzVcdTA0M2Nc dTA0M2RcdTA0MzVcdTA0M2JcdTA0MzggXHUwNDMyXHUwNDM0XHUwNDNlXHUwNDNiXHUwNDRjIFx1 MDQzOCBcdTA0M2ZcdTA0M2VcdTA0M2ZcdTA0MzVcdTA0NDBcdTA0NTFcdTA0M2EgXHUwNDQxXHUw NDM1XHUwNDQwXHUwNDM1XHUwNDNkXHUwNDRjXHUwNDNhXHUwNDM4XHUwNDM1IFx1MDQzMVx1MDQ0 MFx1MDQzNVx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0N1x1MDQzMFx1MDQ0Mlx1MDQ0Ylx1MDQzNSBc dTA0MzhcdTA0MzdcdTA0MzFcdTA0NGIuXCIsXCIyXCI6XCJcdTA0MTIgXHUwNDQwXHUwNDMwXHUw NDM3XHUwNDNlXHUwNDQwXHUwNDMyXHUwNDMwXHUwNDNkXHUwNDNkXHUwNDNlXHUwNDNjIFx1MDQz ZVx1MDQ0MVx1MDQzYVx1MDQzZVx1MDQzYlx1MDQzYVx1MDQzMFx1MDQzY1x1MDQzOCBcdTA0M2Zc dTA0M2JcdTA0MzBcdTA0M2RcdTA0NDhcdTA0MzVcdTA0NDJcdTA0MzUgXHUwNDNkXHUwNDMwXHUw NDQ4XHUwNDNiXHUwNDM4IFx1MDQzY1x1MDQ0YiBcdTA0NDJcdTA0M2VcdTA0M2NcdTA0MzhcdTA0 M2EgXHUwNDNmXHUwNDQzXHUwNDQ4XHUwNDNhXHUwNDM4XHUwNDNkXHUwNDQxXHUwNDNhXHUwNDM4 XHUwNDQ1IFx1MDQ0MVx1MDQ0Mlx1MDQzOFx1MDQ0NVx1MDQzZVx1MDQzMi5cIixcIjNcIjpcIlx1 MDQxMiBcdTA0NDFcdTA0MzhcdTA0NDBcdTA0MzVcdTA0M2RcdTA0MzVcdTA0MzJcdTA0NGJcdTA0 NDUgXHUwNDNhXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwXHUwNDQ1LCBcdTA0M2FcdTA0M2VcdTA0 NDJcdTA0M2VcdTA0NDBcdTA0NGJcdTA0MzUgXHUwNDQxXHUwNDMyXHUwNDNlXHUwNDM4XHUwNDNj XHUwNDM4IFx1MDQzZFx1MDQzNVx1MDQzNlx1MDQzZFx1MDQ0Ylx1MDQzY1x1MDQzOCBcdTA0M2Zc dTA0MzBcdTA0NDVcdTA0NDNcdTA0NDdcdTA0MzhcdTA0M2NcdTA0MzggXHUwNDQ2XHUwNDMyXHUw NDM1XHUwNDQyXHUwNDMwXHUwNDNjXHUwNDM4IFx1MDQzYlx1MDQzNVx1MDQzN1x1MDQzYlx1MDQz OCBcdTA0M2ZcdTA0NDBcdTA0NGZcdTA0M2NcdTA0M2UgXHUwNDMyIFx1MDQzYlx1MDQzOFx1MDQ0 Nlx1MDQzZSwgXHUwNDNhXHUwNDNlXHUwNDNmXHUwNDNlXHUwNDQ4XHUwNDM4XHUwNDNiXHUwNDM4 XHUwNDQxXHUwNDRjIFx1MDQzMlx1MDQzZVx1MDQ0MFx1MDQzZVx1MDQzMVx1MDQ0Y1x1MDQzOC5c IixcIjRcIjpcIlx1MDQxY1x1MDQzZVx1MDQzYlx1MDQzZVx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0 Y1x1MDQzYVx1MDQzOFx1MDQ0NSBcdTA0MzRcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzJcdTA0NGNc dTA0MzVcdTA0MzIgXHUwNDNkXHUwNDM1IFx1MDQ0OVx1MDQzMFx1MDQzNFx1MDQ0Zlx1MDQ0Mi5c IixcIjVcIjpcIlx1MDQxZFx1MDQzZSBcdTA0MzdcdTA0MzRcdTA0MzVcdTA0NDFcdTA0NGMgXHUw NDNlXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDRjIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQz Mlx1MDQ0OFx1MDQzNVx1MDQzNSBcdTA0M2NcdTA0MzVcdTA0M2RcdTA0NGYgXHUwNDNlXHUwNDMx XHUwNDRhXHUwNDM1XHUwNDNjXHUwNDNiXHUwNDM1XHUwNDQyIFx1MDQzNlx1MDQzOFx1MDQzMlx1 MDQzZS5cIn0iLCJjb3JyZWN0X2Fuc3dlciI6IltcIjFcIl0iLCJwb3NpdGlvbiI6NiwicmF0ZSI6 MSwidGl0bGUiOiJcdTA0MWRcdTA0MzBcdTA0MzlcdTA0MzRcdTA0MzhcdTA0NDJcdTA0MzUgXHUw NDNmXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDNiXHUwNDNlXHUwNDM2XHUwNDM1XHUwNDNkXHUwNDM4 XHUwNDM1IFx1MDQ0MSBcdTA0MzRcdTA0MzJcdTA0NDNcdTA0M2NcdTA0NGYgXHUwNDM4XHUwNDNj XHUwNDM1XHUwNDNkXHUwNDMwXHUwNDNjXHUwNDM4IFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYlx1 MDQzMFx1MDQzM1x1MDQzMFx1MDQ0Mlx1MDQzNVx1MDQzYlx1MDQ0Y1x1MDQzZFx1MDQ0Ylx1MDQz Y1x1MDQzODoiLCJ0eXBlIjoiU2luZ2xlQW5zd2VyIn19LHsiaWQiOiI3IiwicXVlc3Rpb25JZCI6 IjciLCJpdGVtVHlwZSI6InF1ZXN0aW9uIiwiZGF0YSI6eyJhbnN3ZXJzIjoie1wiMVwiOlwiXHUw NDQyXHUwNDQwXHUwNDM4IFx1MDQzMVx1MDQzZVx1MDQzM1x1MDQzMFx1MDQ0Mlx1MDQ0Ylx1MDQ0 MFx1MDQ0ZlwiLFwiMlwiOlwiXHUwNDQzXHUwNDM0XHUwNDMwXHUwNDNiXHUwNDMwXHUwNDRmIFx1 MDQ0Mlx1MDQ0MFx1MDQzZVx1MDQzOVx1MDQzYVx1MDQzMFwiLFwiM1wiOlwiXHUwNDQzXHUwNDQy XHUwNDQwXHUwNDNlXHUwNDM4XHUwNDQyXHUwNDRjIFx1MDQzNFx1MDQzZVx1MDQ0NVx1MDQzZVx1 MDQzNFwiLFwiNFwiOlwiXHUwNDQyXHUwNDQwXHUwNDM4XHUwNDM2XHUwNDM0XHUwNDRiIFx1MDQ0 MVx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0MVx1MDQzOFx1MDQ0Mlx1MDQ0Y1wiLFwiNVwiOlwiXHUw NDNmXHUwNDNlXHUwNDNiXHUwNDQzXHUwNDQ3XHUwNDM4XHUwNDQyXHUwNDRjIFx1MDQ0Mlx1MDQ0 MFx1MDQzZVx1MDQ0Zlx1MDQzYVwifSIsImNvcnJlY3RfYW5zd2VyIjoiW1wiMVwiXSIsInBvc2l0 aW9uIjo3LCJyYXRlIjoxLCJ0aXRsZSI6Ilx1MDQxZFx1MDQzMFx1MDQzOVx1MDQzNFx1MDQzOFx1 MDQ0Mlx1MDQzNSBcdTA0NDFcdTA0M2JcdTA0M2VcdTA0MzJcdTA0M2VcdTA0NDFcdTA0M2VcdTA0 NDdcdTA0MzVcdTA0NDJcdTA0MzBcdTA0M2RcdTA0MzhcdTA0MzUgXHUwNDQxIFx1MDQzOFx1MDQz Y1x1MDQzNVx1MDQzZFx1MDQzNVx1MDQzYyBcdTA0NDdcdTA0MzhcdTA0NDFcdTA0M2JcdTA0Mzhc dTA0NDJcdTA0MzVcdTA0M2JcdTA0NGNcdTA0M2RcdTA0NGJcdTA0M2M6IiwidHlwZSI6IlNpbmds ZUFuc3dlciJ9fSx7ImlkIjoiOCIsInF1ZXN0aW9uSWQiOiI4IiwiaXRlbVR5cGUiOiJxdWVzdGlv biIsImRhdGEiOnsiYW5zd2VycyI6IntcIjFcIjpcIlx1MDQzZVx1MDQ0Mlx1MDQzZlx1MDQzYlx1 MDQ0Ylx1MDQ0Mlx1MDQzOFx1MDQzNSwgXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQxXHUwNDNiXHUw NDNlXHUwNDM5XHUwNDNhXHUwNDMwLCBcdTA0M2VcdTA0MzFcdTA0M2NcdTA0MzBcdTA0M2RcIixc IjJcIjpcIlx1MDQzNFx1MDQzZVx1MDQzYlx1MDQzNVx1MDQ0Mlx1MDQzNVx1MDQ0Mlx1MDQ0Yywg XHUwNDM3XHUwNDMwXHUwNDQwXHUwNDMwXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwXHUwNDQyXHUw NDRjXHUwNDQxXHUwNDRmLCBcdTA0MzdcdTA0MzJcdTA0M2VcdTA0M2RcdTA0MzhcdTA0NDJcdTA0 NGNcIixcIjNcIjpcIlx1MDQzZlx1MDQzZVx1MDQzM1x1MDQ0M1x1MDQzYlx1MDQ0Zlx1MDQ0Mlx1 MDQ0YywgXHUwNDM3XHUwNDMwXHUwNDNmXHUwNDM4XHUwNDQxXHUwNDRjLCBcdTA0M2VcdTA0MzFc dTA0NGJcdTA0NDFcdTA0M2FcIixcIjRcIjpcIlx1MDQzZlx1MDQzZVx1MDQzY1x1MDQzZVx1MDQ0 OVx1MDQ0YywgXHUwNDNmXHUwNDNlXHUwNDNjXHUwNDNlXHUwNDQ5XHUwNDNkXHUwNDM4XHUwNDNh LCBcdTA0M2ZcdTA0M2VcdTA0M2NcdTA0M2VcdTA0MzNcdTA0MzBcdTA0NDJcdTA0NGNcIixcIjVc IjpcIlx1MDQzMlx1MDQ0Ylx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQzNVx1MDQzYlx1MDQzOFx1MDQz MiwgXHUwNDQxXHUwNDNhXHUwNDMwXHUwNDNhXHUwNDMwXHUwNDQyXHUwNDRjLCBcdTA0MzFcdTA0 MzVcdTA0MzNcIn0iLCJjb3JyZWN0X2Fuc3dlciI6IltcIjJcIl0iLCJwb3NpdGlvbiI6OCwicmF0 ZSI6MSwidGl0bGUiOiJcdTA0MjNcdTA0M2FcdTA0MzBcdTA0MzZcdTA0MzhcdTA0NDJcdTA0MzUg XHUwNDQwXHUwNDRmXHUwNDM0IFx1MDQ0MSBcdTA0MzNcdTA0M2JcdTA0MzBcdTA0MzNcdTA0M2Vc dTA0M2JcdTA0MzBcdTA0M2NcdTA0Mzg6IiwidHlwZSI6IlNpbmdsZUFuc3dlciJ9fSx7ImlkIjoi OSIsInF1ZXN0aW9uSWQiOiI5IiwiaXRlbVR5cGUiOiJxdWVzdGlvbiIsImRhdGEiOnsiYW5zd2Vy cyI6IntcIjFcIjpcIlx1MDQ0MyBcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDJcdTA0MzBcdTA0M2Jc dTA0MzhcdTA0M2RcdTA0M2FcdTA0MzgsIFx1MDQzMiBcdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJc dTA0MzVcIixcIjJcIjpcIlx1MDQzMVx1MDQzNVx1MDQzNlx1MDQzOFx1MDQ0MiwgXHUwNDQxXHUw NDQyXHUwNDQwXHUwNDQzXHUwNDM4XHUwNDQyXHUwNDQxXHUwNDRmXCIsXCIzXCI6XCJcdTA0M2Nc dTA0MzBcdTA0M2JcdTA0MzVcdTA0M2RcdTA0NGNcdTA0M2FcdTA0MzhcdTA0MzksIFx1MDQ0MVx1 MDQzNVx1MDQ0MFx1MDQzNVx1MDQzMVx1MDQ0MFx1MDQ0Zlx1MDQzZFx1MDQ0Ylx1MDQzOVwiLFwi NFwiOlwiXHUwNDMyIFx1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNSwgXHUwNDNjXHUwNDM1 XHUwNDM2XHUwNDM0XHUwNDQzIFx1MDQzYVx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzNVx1MDQzOVwi LFwiNVwiOlwiXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDNlXHUwNDM4XHUwNDQyXHUwNDQxXHUwNDRm LCBcdTA0NDBcdTA0NDNcdTA0NDdcdTA0MzVcdTA0MzlcIn0iLCJjb3JyZWN0X2Fuc3dlciI6Iltc IjJcIl0iLCJwb3NpdGlvbiI6OSwicmF0ZSI6MSwidGl0bGUiOiJcdTA0MjNcdTA0M2FcdTA0MzBc dTA0MzZcdTA0MzhcdTA0NDJcdTA0MzUsIFx1MDQzYVx1MDQzMFx1MDQzYVx1MDQzOFx1MDQzNSBc dTA0NDFcdTA0M2JcdTA0M2VcdTA0MzJcdTA0MzAgXHUwNDNlXHUwNDMxXHUwNDNlXHUwNDM3XHUw NDNkXHUwNDMwXHUwNDQ3XHUwNDMwXHUwNDRlXHUwNDQyIFx1MDQzNFx1MDQzNVx1MDQzOVx1MDQ0 MVx1MDQ0Mlx1MDQzMlx1MDQzOFx1MDQzNSBcdTA0MzIgXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDM0 XHUwNDNiXHUwNDNlXHUwNDM2XHUwNDM1XHUwNDNkXHUwNDM4XHUwNDM4OiBcdTA0MTAgXHUwNDQw XHUwNDRmXHUwNDM0XHUwNDNlXHUwNDNjLCBcdTA0NDMgXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQy XHUwNDMwXHUwNDNiXHUwNDM4XHUwNDNkXHUwNDNhXHUwNDM4LCBcdTA0MzIgXHUwNDQyXHUwNDQw XHUwNDMwXHUwNDMyXHUwNDM1LCBcdTA0M2NcdTA0MzVcdTA0MzZcdTA0MzRcdTA0NDMgXHUwNDNh XHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM1XHUwNDM5LCBcdTA0MzFcdTA0MzVcdTA0MzZcdTA0Mzhc dTA0NDIsIFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQ0M1x1MDQzOFx1MDQ0Mlx1MDQ0MVx1MDQ0ZiBc dTA0M2NcdTA0MzBcdTA0M2JcdTA0MzVcdTA0M2RcdTA0NGNcdTA0M2FcdTA0MzhcdTA0MzkgXHUw NDQxXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDMxXHUwNDQwXHUwNDRmXHUwNDNkXHUwNDRiXHUwNDM5 IFx1MDQ0MFx1MDQ0M1x1MDQ0N1x1MDQzNVx1MDQzOS4iLCJ0eXBlIjoiU2luZ2xlQW5zd2VyIn19 LHsiaWQiOiIxMCIsInF1ZXN0aW9uSWQiOiIxMCIsIml0ZW1UeXBlIjoicXVlc3Rpb24iLCJkYXRh Ijp7ImFuc3dlcnMiOiJ7XCIxXCI6XCJcdTA0M2FcdTA0NDNcdTA0M2ZcdTA0MzhcdTA0NDJcdTA0 NGMgXHUwNDM2XHUwNDQzXHUwNDQwXHUwNDNkXHUwNDMwXHUwNDNiXCIsXCIyXCI6XCJcdTA0MzRc dTA0NGJcdTA0NDhcdTA0MzBcdTA0NDJcdTA0NGMgXHUwNDQxXHUwNDMyXHUwNDNlXHUwNDMxXHUw NDNlXHUwNDM0XHUwNDNkXHUwNDNlXCIsXCIzXCI6XCJcdTA0NDFcdTA0NDJcdTA0M2VcdTA0NDBc dTA0M2VcdTA0MzZcdTA0MzhcdTA0NDJcdTA0NGMgXHUwNDM0XHUwNDNlXHUwNDNjXCIsXCI0XCI6 XCJcdTA0MzNcdTA0M2VcdTA0MzJcdTA0M2VcdTA0NDBcdTA0MzhcdTA0NDJcdTA0NGMgXHUwNDNm XHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM0XHUwNDQzXCIsXCI1XCI6XCJcdTA0NDFcdTA0M2VcdTA0 MzFcdTA0MzhcdTA0NDBcdTA0MzBcdTA0NDJcdTA0NGMgXHUwNDQzXHUwNDQwXHUwNDNlXHUwNDM2 XHUwNDMwXHUwNDM5XCJ9IiwiY29ycmVjdF9hbnN3ZXIiOiJbXCI1XCJdIiwicG9zaXRpb24iOjEw LCJyYXRlIjoxLCJ0aXRsZSI6Ilx1MDQyM1x1MDQzYVx1MDQzMFx1MDQzNlx1MDQzOFx1MDQ0Mlx1 MDQzNSBcdTA0NDFcdTA0M2JcdTA0M2VcdTA0MzJcdTA0M2VcdTA0NDFcdTA0M2VcdTA0NDdcdTA0 MzVcdTA0NDJcdTA0MzBcdTA0M2RcdTA0MzhcdTA0MzUgXHUwNDQxIFx1MDQzM1x1MDQzYlx1MDQz MFx1MDQzM1x1MDQzZVx1MDQzYlx1MDQzZVx1MDQzYyAxIFx1MDQ0MVx1MDQzZlx1MDQ0MFx1MDQ0 Zlx1MDQzNlx1MDQzNVx1MDQzZFx1MDQzOFx1MDQ0ZjogIiwidHlwZSI6IlNpbmdsZUFuc3dlciJ9 fSx7ImlkIjoiMTEiLCJxdWVzdGlvbklkIjoiMTEiLCJpdGVtVHlwZSI6InF1ZXN0aW9uIiwiZGF0 YSI6eyJhbnN3ZXJzIjoie1wiMVwiOlwiXHUwNDQwXHUwNDM1XHUwNDQ4XHUwNDM4XHUwNDMyXHUw NDQ4XHUwNDM4XHUwNDM5IFx1MDQzN1x1MDQzMFx1MDQzNFx1MDQzMFx1MDQ0N1x1MDQ0M1wiLFwi MlwiOlwiXHUwNDQxXHUwNDM0XHUwNDM1XHUwNDNiXHUwNDMwXHUwNDNkXHUwNDNkXHUwNDRiXHUw NDM5IFx1MDQ0MVx1MDQzMFx1MDQzY1x1MDQzZVx1MDQ0MVx1MDQ0Mlx1MDQzZVx1MDQ0Zlx1MDQ0 Mlx1MDQzNVx1MDQzYlx1MDQ0Y1x1MDQzZFx1MDQzZVwiLFwiM1wiOlwiXHUwNDQxXHUwNDM4XHUw NDNkXHUwNDM1XHUwNDRlXHUwNDQ5XHUwNDM4XHUwNDM1IFx1MDQzMlx1MDQzNFx1MDQzMFx1MDQz Ylx1MDQzOFwiLFwiNFwiOlwiXHUwNDQxXHUwNDQ4XHUwNDM4XHUwNDQyXHUwNDNlXHUwNDM1IFx1 MDQzZlx1MDQzYlx1MDQzMFx1MDQ0Mlx1MDQ0Y1x1MDQzNVwiLFwiNVwiOlwiXHUwNDNmXHUwNDQw XHUwNDM4XHUwNDMzXHUwNDNlXHUwNDQyXHUwNDNlXHUwNDMyXHUwNDNiXHUwNDM1XHUwNDNkXHUw NDNkXHUwNDRiXHUwNDM5IFx1MDQzN1x1MDQzMFx1MDQzMlx1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQz YVwifSIsImNvcnJlY3RfYW5zd2VyIjoiW1wiM1wiXSIsInBvc2l0aW9uIjoxMSwicmF0ZSI6MSwi dGl0bGUiOiJcdTA0MWRcdTA0MzBcdTA0MzlcdTA0MzRcdTA0MzhcdTA0NDJcdTA0MzUgXHUwNDQx XHUwNDNiXHUwNDNlXHUwNDMyXHUwNDNlXHUwNDQxXHUwNDNlXHUwNDQ3XHUwNDM1XHUwNDQyXHUw NDMwXHUwNDNkXHUwNDM4XHUwNDM1IFx1MDQ0MSBcdTA0MzRcdTA0MzVcdTA0MzlcdTA0NDFcdTA0 NDJcdTA0MzJcdTA0MzhcdTA0NDJcdTA0MzVcdTA0M2JcdTA0NGNcdTA0M2RcdTA0NGJcdTA0M2Mg XHUwNDNmXHUwNDQwXHUwNDM4XHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDQyXHUwNDM4XHUwNDM1XHUw NDNjIFx1MDQzZFx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQzZVx1MDQ0Zlx1MDQ0OVx1MDQzNVx1MDQz M1x1MDQzZSBcdTA0MzJcdTA0NDBcdTA0MzVcdTA0M2NcdTA0MzVcdTA0M2RcdTA0Mzg6IiwidHlw ZSI6IlNpbmdsZUFuc3dlciJ9fSx7ImlkIjoiMTIiLCJxdWVzdGlvbklkIjoiMTIiLCJpdGVtVHlw ZSI6InF1ZXN0aW9uIiwiZGF0YSI6eyJhbnN3ZXJzIjoie1wiMVwiOlwiXHUwNDI3XHUwNDM1XHUw NDQwXHUwNDUxXHUwNDNjXHUwNDQzXHUwNDQ1XHUwNDMwIFx1MDQzNFx1MDQ0M1x1MDQ0OFx1MDQz OFx1MDQ0MVx1MDQ0Mlx1MDQzMFx1MDQ0ZiwgXHUwNDQwXHUwNDMwXHUwNDM3XHUwNDMyXHUwNDM1 XHUwNDQxXHUwNDM4XHUwNDMyXHUwNDQ4XHUwNDM4XHUwNDQxXHUwNDRjLCBcdTA0NDFcdTA0NDJc dTA0M2VcdTA0MzhcdTA0NDIsIFx1MDQzMCBcdTA0MzdcdTA0MzVcdTA0M2JcdTA0MzVcdTA0M2Rc dTA0NGMgXHUwNDM3XHUwNDNlXHUwNDNiXHUwNDNlXHUwNDQyXHUwNDM4XHUwNDQxXHUwNDQyXHUw NDMwXHUwNDRmIFx1MDQzZFx1MDQzMCBcdTA0NDFcdTA0M2VcdTA0M2JcdTA0M2RcdTA0NGJcdTA0 NDhcdTA0M2FcdTA0MzUgXHUwNDMzXHUwNDNlXHUwNDQwXHUwNDM4XHUwNDQyLlwiLFwiMlwiOlwi XHUwNDE4IFx1MDQzNFx1MDQzZVx1MDQzYlx1MDQzM1x1MDQzZSBcdTA0MzRcdTA0NDBcdTA0M2Vc dTA0MzZcdTA0MzhcdTA0NDIgXHUwNDMyIFx1MDQzM1x1MDQzZVx1MDQ0MFx1MDQ0Zlx1MDQ0N1x1 MDQzNVx1MDQzYyBcdTA0MzJcdTA0M2VcdTA0MzdcdTA0MzRcdTA0NDNcdTA0NDVcdTA0MzUgXHUw NDQxXHUwNDQzXHUwNDQ1XHUwNDNlXHUwNDM5IFx1MDQ0OFx1MDQzZVx1MDQ0MFx1MDQzZVx1MDQ0 NSBcdTA0M2FcdTA0NDBcdTA0MzBcdTA0NDFcdTA0M2RcdTA0NGJcdTA0NDUgXHUwNDNhXHUwNDQw XHUwNDRiXHUwNDNiXHUwNDRiXHUwNDQ4XHUwNDM1XHUwNDNhIFx1MDQzZlx1MDQzNVx1MDQ0MFx1 MDQzNVx1MDQzYlx1MDQzNVx1MDQ0Mlx1MDQzMFx1MDQ0ZVx1MDQ0OVx1MDQzNVx1MDQzM1x1MDQz ZSBcdTA0M2FcdTA0NDNcdTA0MzdcdTA0M2RcdTA0MzVcdTA0NDdcdTA0MzhcdTA0M2FcdTA0MzAu XCIsXCIzXCI6XCJcdTA0MWNcdTA0NDNcdTA0NDhcdTA0M2FcdTA0MzAgXHUwNDMxXHUwNDRiXHUw NDNiXHUwNDMwIFx1MDQzY1x1MDQzMFx1MDQzYlx1MDQzNVx1MDQzZFx1MDQ0Y1x1MDQzYVx1MDQz MFx1MDQ0ZiBcdTA0M2VcdTA0MzFcdTA0M2JcdTA0MzVcdTA0MzdcdTA0M2JcdTA0MzBcdTA0NGYg XHUwNDQxXHUwNDNlXHUwNDMxXHUwNDMwXHUwNDQ3XHUwNDNlXHUwNDNkXHUwNDNhXHUwNDMwXCIs XCI0XCI6XCJcdTA0MjBcdTA0M2VcdTA0MzJcdTA0M2RcdTA0M2UgXHUwNDMyIFx1MDQ0Mlx1MDQ0 MFx1MDQzOCBcdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0NDJcdTA0Mzgg XHUwNDNmXHUwNDM1XHUwNDQwXHUwNDMyXHUwNDNlXHUwNDMzXHUwNDNlIFx1MDQyMVx1MDQzMFx1 MDQzZFx1MDQzOFx1MDQzZCBcdTA0M2VcdTA0MzFcdTA0NGFcdTA0NGZcdTA0MzJcdTA0MzhcdTA0 M2JcdTA0NDFcdTA0NGYgXHUwNDNhIFx1MDQxZlx1MDQzZVx1MDQzYlx1MDQzZVx1MDQzN1x1MDQz ZVx1MDQzMlx1MDQ0My5cIixcIjVcIjpcIlx1MDQxZVx1MDQ0MVx1MDQzNVx1MDQzMlx1MDQ0OFx1 MDQzOFx1MDQzOSBcdTA0NDVcdTA0M2JcdTA0MzVcdTA0MzIuXCJ9IiwiY29ycmVjdF9hbnN3ZXIi OiJbXCIxXCJdIiwicG9zaXRpb24iOjEyLCJyYXRlIjoxLCJ0aXRsZSI6Ilx1MDQxZFx1MDQzMFx1 MDQzOVx1MDQzNFx1MDQzOFx1MDQ0Mlx1MDQzNSBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0MzRcdTA0 M2JcdTA0M2VcdTA0MzZcdTA0MzVcdTA0M2RcdTA0MzhcdTA0MzUgXHUwNDQxIFx1MDQzNFx1MDQz NVx1MDQzNVx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQzOFx1 MDQzNVx1MDQzYzoiLCJ0eXBlIjoiU2luZ2xlQW5zd2VyIn19LHsiaWQiOiIxMyIsInF1ZXN0aW9u SWQiOiIxMyIsIml0ZW1UeXBlIjoicXVlc3Rpb24iLCJkYXRhIjp7ImFuc3dlcnMiOiJ7XCIxXCI6 XCJcdTA0MTJcdTA0NGJcdTA0NDFcdTA0M2VcdTA0M2FcdTA0M2UgXHUwNDNmXHUwNDNlXHUwNDM0 XHUwNDNkXHUwNDM4XHUwNDNjXHUwNDMwXHUwNDNiXHUwNDQxXHUwNDRmIFx1MDQzYlx1MDQzOFx1 MDQzYlx1MDQzZVx1MDQzMlx1MDQ0Ylx1MDQzOSBcdTA0NDFcdTA0NDJcdTA0M2VcdTA0M2JcdTA0 MzEgXHUwNDM0XHUwNDRiXHUwNDNjXHUwNDMwLlwiLFwiMlwiOlwiXHUwNDE4XHUwNDQxXHUwNDNh XHUwNDQwXHUwNDRmXHUwNDQyXHUwNDQxXHUwNDRmIFx1MDQzZlx1MDQ0M1x1MDQ0MVx1MDQ0Mlx1 MDQ0Ylx1MDQzZFx1MDQzZFx1MDQ0Ylx1MDQzNSBcdTA0M2VcdTA0M2FcdTA0NDBcdTA0MzVcdTA0 NDFcdTA0NDJcdTA0M2RcdTA0NGJcdTA0MzUgXHUwNDMxXHUwNDQzXHUwNDMzXHUwNDQwXHUwNDRi LCBcdTA0M2VcdTA0NDFcdTA0NGJcdTA0M2ZcdTA0MzBcdTA0M2RcdTA0M2RcdTA0NGJcdTA0MzUg XHUwNDNiXHUwNDM1XHUwNDMxXHUwNDRmXHUwNDM2XHUwNDRjXHUwNDM4XHUwNDNjIFx1MDQzZlx1 MDQ0M1x1MDQ0NVx1MDQzZVx1MDQzYyBcdTA0M2NcdTA0M2VcdTA0M2JcdTA0M2VcdTA0MzRcdTA0 M2VcdTA0MzNcdTA0M2UgXHUwNDQxXHUwNDNkXHUwNDM1XHUwNDMzXHUwNDMwLlwiLFwiM1wiOlwi XHUwNDFkXHUwNDMwIFx1MDQzNFx1MDQ0MFx1MDQ0M1x1MDQzM1x1MDQzZVx1MDQzOSBcdTA0MzRc dTA0MzVcdTA0M2RcdTA0NGMgXHUwNDFlXHUwNDNiXHUwNDM1XHUwNDNkXHUwNDM4XHUwNDNkIFx1 MDQzMVx1MDQzNVx1MDQzNyBcdTA0NDFcdTA0NDJcdTA0MzBcdTA0NDBcdTA0MzhcdTA0M2FcdTA0 MzAgXHUwNDNmXHUwNDNlXHUwNDQ4XHUwNDUxXHUwNDNiIFx1MDQzZFx1MDQzMCBcdTA0NDJcdTA0 M2UgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDQyXHUwNDNlLCBcdTA0MzNcdTA0MzRcdTA0MzUgXHUw NDNlXHUwNDNkIFx1MDQ0MVx1MDQzZSBcdTA0NDFcdTA0NDJcdTA0MzBcdTA0NDBcdTA0MzhcdTA0 M2FcdTA0M2VcdTA0M2MgXHUwNDQxXHUwNDNmXHUwNDQzXHUwNDMzXHUwNDNkXHUwNDQzXHUwNDNi IFx1MDQzZVx1MDQzYlx1MDQzNVx1MDQzZFx1MDQ0Zi5cIixcIjRcIjpcIlx1MDQxY1x1MDQ0YiBc dTA0NDJcdTA0M2VcdTA0M2JcdTA0M2FcdTA0M2VcdTA0MzJcdTA0MzBcdTA0M2JcdTA0MzggXHUw NDNlIFx1MDQzZlx1MDQzZVx1MDQ0MVx1MDQzNVx1MDQzMlx1MDQzNSwgXHUwNDNlXHUwNDMxIFx1 MDQ0M1x1MDQ0MFx1MDQzZVx1MDQzNlx1MDQzMFx1MDQzNSwgXHUwNDNlIFx1MDQzYVx1MDQ0MFx1 MDQzNVx1MDQ0MVx1MDQ0Mlx1MDQ0Y1x1MDQ0Zlx1MDQzZFx1MDQ0MVx1MDQzYVx1MDQzZVx1MDQz YyBcdTA0MzFcdTA0NGJcdTA0NDJcdTA0MzUuXCIsXCI1XCI6XCJcdTA0MWVcdTA0NDFcdTA0MzVc dTA0MzJcdTA0NDhcdTA0MzhcdTA0MzkgXHUwNDQ1XHUwNDNiXHUwNDM1XHUwNDMyXCJ9IiwiY29y cmVjdF9hbnN3ZXIiOiJbXCIxXCJdIiwicG9zaXRpb24iOjEzLCJyYXRlIjoxLCJ0aXRsZSI6Ilx1 MDQxZFx1MDQzMFx1MDQzOVx1MDQzNFx1MDQzOFx1MDQ0Mlx1MDQzNSBcdTA0M2ZcdTA0NDBcdTA0 MzVcdTA0MzRcdTA0M2JcdTA0M2VcdTA0MzZcdTA0MzVcdTA0M2RcdTA0MzhcdTA0MzUgXHUwNDQx IFx1MDQzZFx1MDQzMFx1MDQ0MFx1MDQzNVx1MDQ0N1x1MDQzOFx1MDQzNVx1MDQzYzoiLCJ0eXBl IjoiU2luZ2xlQW5zd2VyIn19LHsiaWQiOiIxNCIsInF1ZXN0aW9uSWQiOiIxNCIsIml0ZW1UeXBl IjoicXVlc3Rpb24iLCJkYXRhIjp7ImFuc3dlcnMiOiJ7XCIxXCI6XCJcdTA0NDNcdTA0NDFcdTA0 NDJcdTA0NDNcdTA0M2ZcdTA0M2FcdTA0MzhcIixcIjJcIjpcIlx1MDQ0Nlx1MDQzNVx1MDQzYlx1 MDQzOFwiLFwiM1wiOlwiXHUwNDNmXHUwNDQwXHUwNDM4XHUwNDQ3XHUwNDM4XHUwNDNkXHUwNDRi XCIsXCI0XCI6XCJcdTA0NDFcdTA0NDBcdTA0MzBcdTA0MzJcdTA0M2RcdTA0MzVcdTA0M2RcdTA0 MzhcdTA0NGZcIixcIjVcIjpcIlx1MDQzMlx1MDQ0MFx1MDQzNVx1MDQzY1x1MDQzNVx1MDQzZFx1 MDQzOFwifSIsImNvcnJlY3RfYW5zd2VyIjoiW1wiMlwiXSIsInBvc2l0aW9uIjoxNCwicmF0ZSI6 MSwidGl0bGUiOiJcdTA0MWVcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0 MzhcdTA0NDJcdTA0MzUsIFx1MDQzYVx1MDQzMFx1MDQzYVx1MDQzZVx1MDQzNSBcdTA0MzdcdTA0 M2RcdTA0MzBcdTA0NDdcdTA0MzVcdTA0M2RcdTA0MzhcdTA0MzUgXHUwNDM4XHUwNDNjXHUwNDM1 XHUwNDM1XHUwNDQyIFx1MDQ0MVx1MDQzZVx1MDQ0ZVx1MDQzNyBcdTA0MzIgXHUwNDQxXHUwNDNi XHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDM1XHUwNDNjIFx1MDQzZlx1MDQ0MFx1 MDQzNVx1MDQzNFx1MDQzYlx1MDQzZVx1MDQzNlx1MDQzNVx1MDQzZFx1MDQzOFx1MDQzODogXHUw NDI3XHUwNDQyXHUwNDNlXHUwNDMxXHUwNDRiIFx1MDQzZFx1MDQzNSBcdTA0MzdcdTA0MzBcdTA0 MzFcdTA0M2JcdTA0NDNcdTA0MzRcdTA0MzhcdTA0NDJcdTA0NGNcdTA0NDFcdTA0NGYsIFx1MDQ0 ZiBcdTA0NDBcdTA0MzVcdTA0NDhcdTA0MzhcdTA0M2IgXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDNk XHUwNDQzXHUwNDQyXHUwNDRjXHUwNDQxXHUwNDRmIFx1MDQzZFx1MDQzMCBcdTA0NDJcdTA0NDBc dTA0M2VcdTA0M2ZcdTA0MzhcdTA0M2RcdTA0M2FcdTA0NDMuIiwidHlwZSI6IlNpbmdsZUFuc3dl ciJ9fSx7ImlkIjoiMTUiLCJxdWVzdGlvbklkIjoiMTUiLCJpdGVtVHlwZSI6InF1ZXN0aW9uIiwi ZGF0YSI6eyJhbnN3ZXJzIjoie1wiMVwiOlwiXHUwNDM1XHUwNDMzXHUwNDNlIFx1MDQzM1x1MDQz Ylx1MDQzMFx1MDQzN1x1MDQzMFwiLFwiMlwiOlwiXHUwNDM0XHUwNDM1XHUwNDNiXHUwNDMwXHUw NDQyXHUwNDRjIFx1MDQzNFx1MDQzZVx1MDQzMVx1MDQ0MFx1MDQzZVwiLFwiM1wiOlwiXHUwNDM4 XHUwNDNkXHUwNDQyXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM5XHUw NDQ4XHUwNDMwXHUwNDRmIFx1MDQzY1x1MDQ0Ylx1MDQ0MVx1MDQzYlx1MDQ0Y1wiLFwiNFwiOlwi XHUwNDQzXHUwNDMyXHUwNDNiXHUwNDM1XHUwNDNhXHUwNDMwXHUwNDQyXHUwNDM1XHUwNDNiXHUw NDRjXHUwNDNkXHUwNDRiXHUwNDM5IFx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQ0MVx1MDQzYVx1MDQz MFx1MDQzN1wiLFwiNVwiOlwiXHUwNDMzXHUwNDNlXHUwNDMyXHUwNDNlXHUwNDQwXHUwNDM4XHUw NDQyXHUwNDRjIFx1MDQzZlx1MDQzZS1cdTA0NDBcdTA0NDNcdTA0NDFcdTA0NDFcdTA0M2FcdTA0 MzhcIn0iLCJjb3JyZWN0X2Fuc3dlciI6IltcIjVcIl0iLCJwb3NpdGlvbiI6MTUsInJhdGUiOjEs InRpdGxlIjoiXHUwNDFkXHUwNDMwXHUwNDM5XHUwNDM0XHUwNDM4XHUwNDQyXHUwNDM1IFx1MDQ0 MVx1MDQzYlx1MDQzZVx1MDQzMlx1MDQzZVx1MDQ0MVx1MDQzZVx1MDQ0N1x1MDQzNVx1MDQ0Mlx1 MDQzMFx1MDQzZFx1MDQzOFx1MDQzNSwgXHUwNDMyIFx1MDQzYVx1MDQzZVx1MDQ0Mlx1MDQzZVx1 MDQ0MFx1MDQzZVx1MDQzYyBcdTA0MzNcdTA0M2JcdTA0MzBcdTA0MzJcdTA0M2RcdTA0M2VcdTA0 MzUgXHUwNDM4IFx1MDQzN1x1MDQzMFx1MDQzMlx1MDQzOFx1MDQ0MVx1MDQzOFx1MDQzY1x1MDQz ZVx1MDQzNSBcdTA0NDFcdTA0M2JcdTA0M2VcdTA0MzJcdTA0MzAgXHUwNDQxXHUwNDMyXHUwNDRm XHUwNDM3XHUwNDMwXHUwNDNkXHUwNDRiIFx1MDQzZlx1MDQzZSBcdTA0NDFcdTA0M2ZcdTA0M2Vc dTA0NDFcdTA0M2VcdTA0MzFcdTA0NDMgLSBcdTA0M2ZcdTA0NDBcdTA0MzhcdTA0M2NcdTA0NGJc dTA0M2FcdTA0MzBcdTA0M2RcdTA0MzhcdTA0MzUiLCJ0eXBlIjoiU2luZ2xlQW5zd2VyIn19LHsi aWQiOiIxNiIsInF1ZXN0aW9uSWQiOiIxNiIsIml0ZW1UeXBlIjoicXVlc3Rpb24iLCJkYXRhIjp7 ImFuc3dlcnMiOiJ7XCIxXCI6XCJcdTA0MzhcdTA0M2NcdTA0MzVcdTA0M2RcdTA0MzVcdTA0M2Mg XHUwNDNmXHUwNDQwXHUwNDM4XHUwNDNiXHUwNDMwXHUwNDMzXHUwNDMwXHUwNDQyXHUwNDM1XHUw NDNiXHUwNDRjXHUwNDNkXHUwNDRiXHUwNDNjXCIsXCIyXCI6XCJcdTA0M2NcdTA0MzVcdTA0NDFc dTA0NDJcdTA0M2VcdTA0MzhcdTA0M2NcdTA0MzVcdTA0M2RcdTA0MzhcdTA0MzVcdTA0M2NcIixc IjNcIjpcIlx1MDQzM1x1MDQzYlx1MDQzMFx1MDQzM1x1MDQzZVx1MDQzYlx1MDQzZVx1MDQzY1wi LFwiNFwiOlwiXHUwNDM4XHUwNDNjXHUwNDM1XHUwNDNkXHUwNDM1XHUwNDNjIFx1MDQ0MVx1MDQ0 M1x1MDQ0OVx1MDQzNVx1MDQ0MVx1MDQ0Mlx1MDQzMlx1MDQzOFx1MDQ0Mlx1MDQzNVx1MDQzYlx1 MDQ0Y1x1MDQzZFx1MDQ0Ylx1MDQzY1wiLFwiNVwiOlwiXHUwNDM4XHUwNDNjXHUwNDM1XHUwNDNk XHUwNDM1XHUwNDNjIFx1MDQ0N1x1MDQzOFx1MDQ0MVx1MDQzYlx1MDQzOFx1MDQ0Mlx1MDQzNVx1 MDQzYlx1MDQ0Y1x1MDQzZFx1MDQ0Ylx1MDQzY1wifSIsImNvcnJlY3RfYW5zd2VyIjoiW1wiNFwi XSIsInBvc2l0aW9uIjoxNiwicmF0ZSI6MSwidGl0bGUiOiJcdTA0MWVcdTA0M2ZcdTA0NDBcdTA0 MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0MzhcdTA0NDJcdTA0MzUsIFx1MDQzYVx1MDQzMFx1MDQz YVx1MDQzZVx1MDQzOSBcdTA0NDdcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NGNcdTA0NGUgXHUwNDQw XHUwNDM1XHUwNDQ3XHUwNDM4IFx1MDQ0Zlx1MDQzMlx1MDQzYlx1MDQ0Zlx1MDQzNVx1MDQ0Mlx1 MDQ0MVx1MDQ0ZiBcdTA0NDFcdTA0M2FcdTA0MzBcdTA0MzdcdTA0NDNcdTA0MzVcdTA0M2NcdTA0 M2VcdTA0MzUgXHUwNDMyIFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzYlx1MDQzZVx1MDQz Nlx1MDQzNVx1MDQzZFx1MDQzOFx1MDQzODogXHUwNDFmXHUwNDMwXHUwNDNjXHUwNDRmXHUwNDQy XHUwNDRjIFx1MDQzY1x1MDQzZVx1MDQ0ZiAtIFx1MDQ0Mlx1MDQzZVx1MDQ0N1x1MDQzZFx1MDQz ZSBcdTA0M2NcdTA0NDNcdTA0MzdcdTA0MzVcdTA0MzkgXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDNh XHUwNDM4XHUwNDQ1IFx1MDQzZVx1MDQ0Mlx1MDQzYVx1MDQ0MFx1MDQzZVx1MDQzMlx1MDQzNVx1 MDQzZFx1MDQzOFx1MDQzOS4iLCJ0eXBlIjoiU2luZ2xlQW5zd2VyIn19LHsiaWQiOiIxNyIsInF1 ZXN0aW9uSWQiOiIxNyIsIml0ZW1UeXBlIjoicXVlc3Rpb24iLCJkYXRhIjp7ImFuc3dlcnMiOiJ7 XCIxXCI6XCJcdTA0M2ZcdTA0M2VcdTA0MzRcdTA0M2JcdTA0MzVcdTA0MzZcdTA0MzBcdTA0NDlc dTA0MzVcdTA0MzVcIixcIjJcIjpcIlx1MDQ0MVx1MDQzYVx1MDQzMFx1MDQzN1x1MDQ0M1x1MDQz NVx1MDQzY1x1MDQzZVx1MDQzNVwiLFwiM1wiOlwiXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDM1XHUw NDM0XHUwNDM1XHUwNDNiXHUwNDM1XHUwNDNkXHUwNDM4XHUwNDM1XCIsXCI0XCI6XCJcdTA0M2Vc dTA0MzFcdTA0NDFcdTA0NDJcdTA0M2VcdTA0NGZcdTA0NDJcdTA0MzVcdTA0M2JcdTA0NGNcdTA0 NDFcdTA0NDJcdTA0MzJcdTA0M2VcIixcIjVcIjpcIlx1MDQzNFx1MDQzZVx1MDQzZlx1MDQzZVx1 MDQzYlx1MDQzZFx1MDQzNVx1MDQzZFx1MDQzOFx1MDQzNVwifSIsImNvcnJlY3RfYW5zd2VyIjoi W1wiM1wiXSIsInBvc2l0aW9uIjoxNywicmF0ZSI6MSwidGl0bGUiOiJcdTA0MWVcdTA0M2ZcdTA0 NDBcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0MzhcdTA0NDJcdTA0MzUsIFx1MDQzYVx1MDQz MFx1MDQzYVx1MDQzOFx1MDQzYyBcdTA0NDdcdTA0M2JcdTA0MzVcdTA0M2RcdTA0M2VcdTA0M2Mg XHUwNDNmXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDNiXHUwNDNlXHUwNDM2XHUwNDM1XHUwNDNkXHUw NDM4XHUwNDRmIFx1MDQ0Zlx1MDQzMlx1MDQzYlx1MDQ0Zlx1MDQzNVx1MDQ0Mlx1MDQ0MVx1MDQ0 ZiBcdTA0MzJcdTA0NGJcdTA0MzRcdTA0MzVcdTA0M2JcdTA0MzVcdTA0M2RcdTA0M2RcdTA0M2Vc dTA0MzUgXHUwNDQxXHUwNDNiXHUwNDNlXHUwNDMyXHUwNDNlIFx1MDQzMiBcdTA0M2ZcdTA0NDBc dTA0MzVcdTA0MzRcdTA0M2JcdTA0M2VcdTA0MzZcdTA0MzVcdTA0M2RcdTA0MzhcdTA0Mzg6IFx1 MDQyMyBcdTA0M2ZcdTA0M2JcdTA0MzVcdTA0NDJcdTA0M2RcdTA0NGYgXCJcdTA0MzdcdTA0MzBc dTA0NDBcdTA0M2VcdTA0NDFcdTA0NDhcdTA0MzBcdTA0NGZcIiBcdTA0M2FcdTA0NDBcdTA0MzBc dTA0M2ZcdTA0MzhcdTA0MzJcdTA0MzAgXHUwNDNlXHUwNDMxXHUwNDQwXHUwNDRmXHUwNDM0XHUw NDM4XHUwNDNiXHUwNDMwXHUwNDQxXHUwNDRjIFx1MDQ0Zlx1MDQ0MFx1MDQzYVx1MDQzOFx1MDQz YyBcdTA0M2ZcdTA0MzVcdTA0NDBcdTA0M2JcdTA0MzBcdTA0M2NcdTA0NDNcdTA0NDJcdTA0NDBc dTA0M2VcdTA0M2MuIiwidHlwZSI6IlNpbmdsZUFuc3dlciJ9fSx7ImlkIjoiMTgiLCJxdWVzdGlv bklkIjoiMTgiLCJpdGVtVHlwZSI6InF1ZXN0aW9uIiwiZGF0YSI6eyJhbnN3ZXJzIjoie1wiMVwi OlwiLi4uXHUwNDE4IFx1MDQzZFx1MDQzMCBcdTA0M2FcdTA0NDBcdTA0NGJcdTA0M2JcdTA0MzVc dTA0NDdcdTA0M2FcdTA0MzUgXHUwNDNkXHUwNDM1IFx1MDQ0MVx1MDQzOFx1MDQzNFx1MDQzOFx1 MDQ0MiBcdTA0NDNcdTA0MzYgXHUwNDNjXHUwNDMwXHUwNDQyXHUwNDRjLCBcdTA0M2FcdTA0M2Vc dTA0NDBcdTA0M2NcdTA0NGYgXHUwNDQ2XHUwNDRiXHUwNDNmXHUwNDNiXHUwNDRmXHUwNDQyIFx1 MDQzYVx1MDQ0MFx1MDQ0M1x1MDQzZlx1MDQzOFx1MDQ0Mlx1MDQ0N1x1MDQzMFx1MDQ0Mlx1MDQz ZVx1MDQ0ZSBcdTA0M2FcdTA0MzBcdTA0NDhcdTA0MzVcdTA0MzlcIixcIjJcIjpcIlx1MDQxZSwg XHUwNDNmXHUwNDMwXHUwNDQ4XHUwNDNkXHUwNDM4LCBcdTA0M2ZcdTA0MzBcdTA0NDhcdTA0M2Rc dTA0MzgsIFx1MDQzZlx1MDQzMFx1MDQ0OFx1MDQzZFx1MDQzOCwgXHUwNDNhXHUwNDNlXHUwNDNi XHUwNDNlXHUwNDNjXHUwNDM1XHUwNDNkXHUwNDQxXHUwNDNhXHUwNDMwXHUwNDRmIFx1MDQzM1x1 MDQ0MFx1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQ0YywgXHUwNDNkXHUwNDMwIFx1MDQ0MVx1MDQzNVx1 MDQ0MFx1MDQzNFx1MDQ0Nlx1MDQzNSBcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMgXHUwNDMyXHUw NDQ3XHUwNDM1XHUwNDQwXHUwNDMwXHUwNDQ4XHUwNDNkXHUwNDM4XHUwNDM5LCBcdTA0MzAgXHUw NDMyIFx1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzNFx1MDQ0Nlx1MDQzNSBcdTA0NDFcdTA0MzJcdTA0 MzVcdTA0NDJcdTA0MzhcdTA0NDIgXHUwNDIwXHUwNDQzXHUwNDQxXHUwNDRjLlwiLFwiM1wiOlwi XHUwNDFkXHUwNDMwIFx1MDQzZFx1MDQ1MVx1MDQzYyAoXHUwNDI0XHUwNDM1XHUwNDM0XHUwNDM1 KSBcdTA0MzFcdTA0NGJcdTA0M2JcdTA0MzAgXHUwNDNmXHUwNDUxXHUwNDQxXHUwNDQyXHUwNDQw XHUwNDMwXHUwNDRmIFx1MDQ0MVx1MDQzOFx1MDQ0Mlx1MDQ0Nlx1MDQzNVx1MDQzMlx1MDQzMFx1 MDQ0ZiBcdTA0NDBcdTA0NDNcdTA0MzFcdTA0MzBcdTA0NDVcdTA0MzAuXCIsXCI0XCI6XCJcdTA0 MThcdTA0NDFcdTA0NDJcdTA0M2VcdTA0NDdcdTA0M2RcdTA0MzhcdTA0M2FcdTA0MzggXHUwNDM2 XHUwNDM4XHUwNDMyXHUwNDNlXHUwNDMzXHUwNDNlIFx1MDQ0MVx1MDQzYlx1MDQzZVx1MDQzMlx1 MDQzMCBcdTA0M2RcdTA0MzVcdTA0MzhcdTA0NDFcdTA0NDdcdTA0MzVcdTA0NDBcdTA0M2ZcdTA0 MzBcdTA0MzVcdTA0M2NcdTA0NGIuXCIsXCI1XCI6XCJcdTA0MjMgXHUwNDMyXHUwNDNlXHUwNDQw XHUwNDNlXHUwNDQyIFx1MDQzNVx1MDQzM1x1MDQzZSBcdTA0MzNcdTA0M2VcdTA0NDFcdTA0NDJc dTA0MzhcdTA0M2RcdTA0MzhcdTA0NDZcdTA0NGIgXHUwNDQzXHUwNDM2XHUwNDM1IFx1MDQ0MVx1 MDQ0Mlx1MDQzZVx1MDQ0Zlx1MDQzYlx1MDQzMCBcdTA0M2FcdTA0MzBcdTA0NDBcdTA0MzVcdTA0 NDJcdTA0MzAsIFx1MDQzN1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQ0Zlx1MDQzNlx1MDQ1MVx1MDQz ZFx1MDQzZFx1MDQzMFx1MDQ0ZiBcdTA0NDdcdTA0MzVcdTA0NDJcdTA0NGJcdTA0NDBcdTA0NGNc dTA0M2NcdTA0NGYgXHUwNDNiXHUwNDNlXHUwNDQ4XHUwNDMwXHUwNDM0XHUwNDRjXHUwNDNjXHUw NDM4LlwifSIsImNvcnJlY3RfYW5zd2VyIjoiW1wiMlwiXSIsInBvc2l0aW9uIjoxOCwicmF0ZSI6 MSwidGl0bGUiOiJcdTA0MjNcdTA0M2FcdTA0MzBcdTA0MzZcdTA0MzhcdTA0NDJcdTA0MzUgXHUw NDNmXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDNiXHUwNDNlXHUwNDM2XHUwNDM1XHUwNDNkXHUwNDM4 XHUwNDM1IFx1MDQ0MSBcdTA0M2VcdTA0MzFcdTA0NDBcdTA0MzBcdTA0NDlcdTA0MzVcdTA0M2Rc dTA0MzhcdTA0MzVcdTA0M2M6ICIsInR5cGUiOiJTaW5nbGVBbnN3ZXIifX0seyJpZCI6IjE5Iiwi cXVlc3Rpb25JZCI6IjE5IiwiaXRlbVR5cGUiOiJxdWVzdGlvbiIsImRhdGEiOnsiYW5zd2VycyI6 IntcIjFcIjpcIlx1MDQyN1x1MDQ0Mlx1MDQzZVx1MDQzMVx1MDQ0YiBcdTA0NDNcdTA0NDJcdTA0 MzVcdTA0NDhcdTA0MzhcdTA0NDJcdTA0NGMgXHUwNDMxXHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNl XHUwNDMzXHUwNDNlIFx1MDQyMVx1MDQzMFx1MDQzMlx1MDQzNVx1MDQzYlx1MDQ0Y1x1MDQzOFx1 MDQ0N1x1MDQzMCwgXHUwNDRmIFx1MDQzNFx1MDQzMFx1MDQzYiBcdTA0MzVcdTA0M2NcdTA0NDMg XHUwNDQxXHUwNDNiXHUwNDNlXHUwNDMyXHUwNDNlIFx1MDQzMVx1MDQzNVx1MDQzNyBcdTA0MzVc dTA0MzNcdTA0M2UgXHUwNDQxXHUwNDNlXHUwNDMzXHUwNDNiXHUwNDMwXHUwNDQxXHUwNDM4XHUw NDRmIFx1MDQzZFx1MDQzNSBcdTA0NDBcdTA0MzBcdTA0NDFcdTA0M2ZcdTA0M2VcdTA0M2JcdTA0 MzBcdTA0MzNcdTA0MzBcdTA0NDJcdTA0NGMgXHUwNDNkXHUwNDM4IFx1MDQzZVx1MDQzNFx1MDQz ZFx1MDQzZVx1MDQzOSBcdTA0M2FcdTA0M2VcdTA0M2ZcdTA0MzVcdTA0MzlcdTA0M2FcdTA0M2Vc dTA0MzkuXCIsXCIyXCI6XCJcdTA0MTIgXHUwNDMzXHUwNDNiXHUwNDQzXHUwNDMxXHUwNDM4XHUw NDNkXHUwNDM1IFx1MDQzNFx1MDQzMlx1MDQzZVx1MDQ0MFx1MDQzMCBcdTA0M2RcdTA0MzBcdTA0 NDVcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2JcdTA0MzBcdTA0NDFcdTA0NGMgXHUwNDNkXHUwNDM4 XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjXHUwNDNhXHUwNDNlXHUwNDM1LCBcdTA0MzdcdTA0MzBc dTA0M2FcdTA0M2VcdTA0M2ZcdTA0NDdcdTA0NTFcdTA0M2RcdTA0M2RcdTA0M2VcdTA0MzUgXHUw NDM3XHUwNDM0XHUwNDMwXHUwNDNkXHUwNDM4XHUwNDM1IFx1MDQ0MSBcdTA0MzZcdTA0MzVcdTA0 M2JcdTA0MzVcdTA0MzdcdTA0M2RcdTA0M2VcdTA0MzkgXHUwNDNhXHUwNDQwXHUwNDRiXHUwNDQ4 XHUwNDM1XHUwNDM5IFx1MDQzZFx1MDQzMCBcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2QgXHUwNDQx XHUwNDNhXHUwNDMwXHUwNDQyLlwiLFwiM1wiOlwiXHUwNDEyXHUwNDNkXHUwNDM4XHUwNDM3XHUw NDQzIFx1MDQzZFx1MDQzMFx1MDQzNCBcdTA0NDBcdTA0MzVcdTA0M2FcdTA0M2VcdTA0MzkgXHUw NDQyXHUwNDM1XHUwNDNjXHUwNDNkXHUwNDM1XHUwNDNiIFx1MDQzNFx1MDQ0Ylx1MDQzYywgXHUw NDMwIFx1MDQ0MVx1MDQzYVx1MDQzMlx1MDQzZVx1MDQzN1x1MDQ0YyBcdTA0M2RcdTA0MzVcdTA0 MzNcdTA0M2UgXHUwNDMyXHUwNDM4XHUwNDM0XHUwNDM1XHUwNDNkIFx1MDQzMVx1MDQ0Ylx1MDQz YiBcdTA0M2ZcdTA0MzBcdTA0NDBcdTA0M2VcdTA0NDVcdTA0M2VcdTA0MzQuXCIsXCI0XCI6XCJc dTA0MTJcdTA0MzhcdTA0MzRcdTA0MzVcdTA0M2IgXHUwNDMyXHUwNDNlIFx1MDQ0MVx1MDQzZFx1 MDQzNSBcdTA0M2ZcdTA0M2VcdTA0MzVcdTA0MzdcdTA0MzQsIFx1MDQ0N1x1MDQ0Mlx1MDQzZS1c dTA0NDJcdTA0M2UgXHUwNDMyXHUwNDQwXHUwNDNlXHUwNDM0XHUwNDM1IFx1MDQzMVx1MDQzZVx1 MDQzYlx1MDQ0Y1x1MDQ0OFx1MDQzZVx1MDQzOSBcdTA0NDJcdTA0MzVcdTA0M2ZcdTA0M2JcdTA0 NDNcdTA0NDhcdTA0M2FcdTA0MzgsIFx1MDQzMiBcdTA0M2FcdTA0M2VcdTA0NDJcdTA0M2VcdTA0 NDBcdTA0M2VcdTA0MzkgXHUwNDNjXHUwNDRiIFx1MDQ0MSBcdTA0MTJcdTA0MzBcdTA0NDBcdTA0 MzVcdTA0MzkgXHUwNDNhXHUwNDQzXHUwNDM0XHUwNDMwLVx1MDQ0Mlx1MDQzZSBcdTA0MzVcdTA0 MzRcdTA0MzVcdTA0M2MuXCIsXCI1XCI6XCJcdTA0MWFcdTA0MzBcdTA0M2EgXHUwNDMxXHUwNDRi IFx1MDQ0MVx1MDQ0Mlx1MDQzMFx1MDQzYlx1MDQzMCBcdTA0NGYgXHUwNDM4XHUwNDQ1KFx1MDQz OFx1MDQzY1x1MDQzNVx1MDQzZFx1MDQzMCkgXHUwNDMxXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDQ3 XHUwNDRjLCBcdTA0MzVcdTA0NDFcdTA0M2JcdTA0MzggXHUwNDMxIFx1MDQzY1x1MDQzZFx1MDQz NSBcdTA0MzhcdTA0MzctXHUwNDNmXHUwNDNlXHUwNDM0IFx1MDQzYVx1MDQzZVx1MDQ0MFx1MDQz YVx1MDQzOCBcdTA0M2JcdTA0NGNcdTA0MzRcdTA0MzAgXHUwNDNmXHUwNDNlXHUwNDQxXHUwNDQ3 XHUwNDMwXHUwNDQxXHUwNDQyXHUwNDNiXHUwNDM4XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDNlXHUw NDQxXHUwNDRjIFx1MDQzOFx1MDQ0NSBcdTA0MzdcdTA0MzBcdTA0MzJcdTA0M2JcdTA0MzVcdTA0 NDdcdTA0NGMhXCJ9IiwiY29ycmVjdF9hbnN3ZXIiOiJbXCIyXCJdIiwicG9zaXRpb24iOjE5LCJy YXRlIjoxLCJ0aXRsZSI6Ilx1MDQxZFx1MDQzMFx1MDQzOVx1MDQzNFx1MDQzOFx1MDQ0Mlx1MDQz NSBcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDFcdTA0NDJcdTA0M2VcdTA0MzUgXHUwNDNmXHUwNDQw XHUwNDM1XHUwNDM0XHUwNDNiXHUwNDNlXHUwNDM2XHUwNDM1XHUwNDNkXHUwNDM4XHUwNDM1OiIs InR5cGUiOiJTaW5nbGVBbnN3ZXIifX0seyJpZCI6IjIwIiwicXVlc3Rpb25JZCI6IjIwIiwiaXRl bVR5cGUiOiJxdWVzdGlvbiIsImRhdGEiOnsiYW5zd2VycyI6IntcIjFcIjpcIlx1MDQxZlx1MDQz ZVx1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzOCBcdTA0NDFcdTA0MzVcdTA0M2JcdTA0MzAg XHUwNDNkXHUwNDMwXHUwNDQ1XHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNiXHUwNDQxXHUwNDRmIFx1 MDQzZFx1MDQzNVx1MDQzMVx1MDQzZVx1MDQzYlx1MDQ0Y1x1MDQ0OFx1MDQzZVx1MDQzOSBcdTA0 M2ZcdTA0NDBcdTA0NDNcdTA0MzQsIFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzZFx1MDQzZSBcdTA0 M2ZcdTA0M2VcdTA0M2FcdTA0NDBcdTA0NGJcdTA0NDJcdTA0NGJcdTA0MzkgXHUwNDMzXHUwNDQz XHUwNDQxXHUwNDM4XHUwNDNkXHUwNDRiXHUwNDNjIFx1MDQzZlx1MDQ0M1x1MDQ0NVx1MDQzZVx1 MDQzYy5cIixcIjJcIjpcIlx1MDQyM1x1MDQzMlx1MDQzNVx1MDQzNFx1MDQ0MyBcdTA0NDJcdTA0 MzVcdTA0MzFcdTA0NGYgXHUwNDNmXHUwNDNlXHUwNDM0IFx1MDQ0MVx1MDQzYVx1MDQzYlx1MDQz ZVx1MDQzZFx1MDQ0YiBcdTA0MzJcdTA0M2ZcdTA0M2JcdTA0M2VcdTA0NDJcdTA0NGMgXHUwNDM0 XHUwNDNlIFx1MDQzY1x1MDQzMFx1MDQzYVx1MDQzZVx1MDQzMlx1MDQzZVx1MDQzOSBcdTA0Mzdc dTA0MzBcdTA0NDBcdTA0MzguIFwiLFwiM1wiOlwiXHUwNDFmXHUwNDNiXHUwNDNlXHUwNDQyXHUw NDRiIFx1MDQ0MVx1MDQzYVx1MDQzZVx1MDQzYlx1MDQ0Y1x1MDQzN1x1MDQ0Zlx1MDQ0MiBcdTA0 M2ZcdTA0M2UgXHUwNDMyXHUwNDNlXHUwNDM0XHUwNDM1IFx1MDQzMVx1MDQ0Ylx1MDQ0MVx1MDQ0 Mlx1MDQ0MFx1MDQzZSBcdTA0MzggXHUwNDMxXHUwNDM1XHUwNDQxXHUwNDQ4XHUwNDQzXHUwNDNj XHUwNDNkXHUwNDNlLCBcdTA0MzAgXHUwNDNkXHUwNDMwXHUwNDMyXHUwNDQxXHUwNDQyXHUwNDQw XHUwNDM1XHUwNDQ3XHUwNDQzIFx1MDQzOFx1MDQzYyBcdTA0MzhcdTA0MzcgXHUwNDQyXHUwNDRj XHUwNDNjXHUwNDRiIFx1MDQzMlx1MDQ0Ylx1MDQzNFx1MDQzMlx1MDQzOFx1MDQzM1x1MDQzMFx1 MDQzNVx1MDQ0Mlx1MDQ0MVx1MDQ0ZiBcdTA0M2ZcdTA0MzBcdTA0NDBcdTA0M2VcdTA0NDVcdTA0 M2VcdTA0MzQuXCIsXCI0XCI6XCJcdTA0MTIgXHUwNDQyXHUwNDM1XHUwNDQ3XHUwNDM1XHUwNDNk XHUwNDM4XHUwNDM1IFx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzOCBcdTA0NDFc dTA0NDJcdTA0M2VcdTA0NGZcdTA0M2JcdTA0MzAgXHUwNDNlXHUwNDQyXHUwNDQyXHUwNDM1XHUw NDNmXHUwNDM1XHUwNDNiXHUwNDRjLlwiLFwiNVwiOlwiXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQz ZVx1MDQzNFx1MDQzZVx1MDQzYlx1MDQzNlx1MDQzNVx1MDQzZFx1MDQzOFx1MDQzNSBcdTA0NDNc dTA0MzZcdTA0MzhcdTA0M2RcdTA0MzAgXHUwNDEzXHUwNDQwXHUwNDQzXHUwNDQ4XHUwNDNkXHUw NDM4XHUwNDQ2XHUwNDNhXHUwNDM4XHUwNDM5IFx1MDQ0OFx1MDQzNVx1MDQzZlx1MDQ0Mlx1MDQz MFx1MDQzYlx1MDQ0MVx1MDQ0ZiBcdTA0MzggXHUwNDNmXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDNj XHUwNDM4XHUwNDMzXHUwNDM4XHUwNDMyXHUwNDMwXHUwNDNiXHUwNDQxXHUwNDRmIFx1MDQ0MSBc dTA0MzRcdTA0NDBcdTA0MzBcdTA0MzNcdTA0NDNcdTA0M2RcdTA0NDFcdTA0M2FcdTA0MzhcdTA0 M2MgXHUwNDNhXHUwNDMwXHUwNDNmXHUwNDM4XHUwNDQyXHUwNDMwXHUwNDNkXHUwNDNlXHUwNDNj LlwifSIsImNvcnJlY3RfYW5zd2VyIjoiW1wiM1wiXSIsInBvc2l0aW9uIjoyMCwicmF0ZSI6MSwi dGl0bGUiOiJcdTA0MWRcdTA0MzBcdTA0MzlcdTA0MzRcdTA0MzhcdTA0NDJcdTA0MzUgXHUwNDQx XHUwNDNiXHUwNDNlXHUwNDM2XHUwNDNkXHUwNDNlXHUwNDQxXHUwNDNlXHUwNDQ3XHUwNDM4XHUw NDNkXHUwNDUxXHUwNDNkXHUwNDNkXHUwNDNlXHUwNDM1IFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQz NFx1MDQzYlx1MDQzZVx1MDQzNlx1MDQzNVx1MDQzZFx1MDQzOFx1MDQzNSIsInR5cGUiOiJTaW5n bGVBbnN3ZXIifX1dfTs= ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: application/x-javascript Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/all-local-quiz.js RXh0LlVwZGF0ZU1hbmFnZXIuZGVmYXVsdHMuaW5kaWNhdG9yVGV4dD0nPGRpdiBjbGFzcz0ibG9h ZGluZy1pbmRpY2F0b3IiPtCY0LTQtdGCINC30LDQs9GA0YPQt9C60LAuLi48L2Rpdj4nO2lmKEV4 dC5WaWV3KXtFeHQuVmlldy5wcm90b3R5cGUuZW1wdHlUZXh0PSIifWlmKEV4dC5ncmlkLkdyaWRQ YW5lbCl7RXh0LmdyaWQuR3JpZFBhbmVsLnByb3RvdHlwZS5kZFRleHQ9InswfSDQstGL0LHRgNCw 0L3QvdGL0YUg0YHRgtGA0L7QuiJ9aWYoRXh0LlRhYlBhbmVsSXRlbSl7RXh0LlRhYlBhbmVsSXRl bS5wcm90b3R5cGUuY2xvc2VUZXh0PSLQl9Cw0LrRgNGL0YLRjCDRjdGC0YMg0LLQutC70LDQtNC6 0YMifWlmKEV4dC5mb3JtLkZpZWxkKXtFeHQuZm9ybS5GaWVsZC5wcm90b3R5cGUuaW52YWxpZFRl eHQ9ItCX0L3QsNGH0LXQvdC40LUg0LIg0Y3RgtC+0Lwg0L/QvtC70LUg0L3QtdCy0LXRgNC90L7Q tSJ9aWYoRXh0LkxvYWRNYXNrKXtFeHQuTG9hZE1hc2sucHJvdG90eXBlLm1zZz0i0JfQsNCz0YDR g9C30LrQsC4uLiJ9RGF0ZS5tb250aE5hbWVzPVsi0K/QvdCy0LDRgNGMIiwi0KTQtdCy0YDQsNC7 0YwiLCLQnNCw0YDRgiIsItCQ0L/RgNC10LvRjCIsItCc0LDQuSIsItCY0Y7QvdGMIiwi0JjRjtC7 0YwiLCLQkNCy0LPRg9GB0YIiLCLQodC10L3RgtGP0LHRgNGMIiwi0J7QutGC0Y/QsdGA0YwiLCLQ ndC+0Y/QsdGA0YwiLCLQlNC10LrQsNCx0YDRjCJdO0RhdGUuc2hvcnRNb250aE5hbWVzPVsi0K/Q vdCyIiwi0KTQtdCy0YAiLCLQnNCw0YDRgiIsItCQ0L/RgCIsItCc0LDQuSIsItCY0Y7QvdGMIiwi 0JjRjtC70YwiLCLQkNCy0LMiLCLQodC10L3RgiIsItCe0LrRgiIsItCd0L7Rj9CxIiwi0JTQtdC6 Il07RGF0ZS5nZXRTaG9ydE1vbnRoTmFtZT1mdW5jdGlvbihhKXtyZXR1cm4gRGF0ZS5zaG9ydE1v bnRoTmFtZXNbYV19O0RhdGUubW9udGhOdW1iZXJzPXsi0K/QvdCyIjowLCLQpNC10LIiOjEsItCc 0LDRgCI6Miwi0JDQv9GAIjozLCLQnNCw0LkiOjQsItCY0Y7QvSI6NSwi0JjRjtC7Ijo2LCLQkNCy 0LMiOjcsItCh0LXQvSI6OCwi0J7QutGCIjo5LCLQndC+0Y8iOjEwLCLQlNC10LoiOjExfTtEYXRl LmdldE1vbnRoTnVtYmVyPWZ1bmN0aW9uKGEpe3JldHVybiBEYXRlLm1vbnRoTnVtYmVyc1thLnN1 YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkrYS5zdWJzdHJpbmcoMSwzKS50b0xvd2VyQ2FzZSgp XX07RGF0ZS5kYXlOYW1lcz1bItCS0L7RgdC60YDQtdGB0LXQvdGM0LUiLCLQn9C+0L3QtdC00LXQ u9GM0L3QuNC6Iiwi0JLRgtC+0YDQvdC40LoiLCLQodGA0LXQtNCwIiwi0KfQtdGC0LLQtdGA0LMi LCLQn9GP0YLQvdC40YbQsCIsItCh0YPQsdCx0L7RgtCwIl07RGF0ZS5nZXRTaG9ydERheU5hbWU9 ZnVuY3Rpb24oYSl7cmV0dXJuIERhdGUuZGF5TmFtZXNbYV0uc3Vic3RyaW5nKDAsMyl9O2lmKEV4 dC5NZXNzYWdlQm94KXtFeHQuTWVzc2FnZUJveC5idXR0b25UZXh0PXtvazoiT0siLGNhbmNlbDoi 0J7RgtC80LXQvdCwIix5ZXM6ItCU0LAiLG5vOiLQndC10YIifX1pZihFeHQudXRpbC5Gb3JtYXQp e0V4dC51dGlsLkZvcm1hdC5kYXRlPWZ1bmN0aW9uKGEsYil7aWYoIWEpe3JldHVybiIifWlmKCEo YSBpbnN0YW5jZW9mIERhdGUpKXthPW5ldyBEYXRlKERhdGUucGFyc2UoYSkpfXJldHVybiBhLmRh dGVGb3JtYXQoYnx8ImQubS5ZIil9fWlmKEV4dC5EYXRlUGlja2VyKXtFeHQuYXBwbHkoRXh0LkRh dGVQaWNrZXIucHJvdG90eXBlLHt0b2RheVRleHQ6ItCh0LXQs9C+0LTQvdGPIixtaW5UZXh0OiLQ rdGC0LAg0LTQsNGC0LAg0YDQsNC90YzRiNC1INC80LjQvdC40LzQsNC70YzQvdC+0Lkg0LTQsNGC 0YsiLG1heFRleHQ6ItCt0YLQsCDQtNCw0YLQsCDQv9C+0LfQttC1INC80LDQutGB0LjQvNCw0LvR jNC90L7QuSDQtNCw0YLRiyIsZGlzYWJsZWREYXlzVGV4dDoiIixkaXNhYmxlZERhdGVzVGV4dDoi Iixtb250aE5hbWVzOkRhdGUubW9udGhOYW1lcyxkYXlOYW1lczpEYXRlLmRheU5hbWVzLG5leHRU ZXh0OiLQodC70LXQtNGD0Y7RidC40Lkg0LzQtdGB0Y/RhiAoQ29udHJvbCvQktC/0YDQsNCy0L4p IixwcmV2VGV4dDoi0J/RgNC10LTRi9C00YPRidC40Lkg0LzQtdGB0Y/RhiAoQ29udHJvbCvQktC7 0LXQstC+KSIsbW9udGhZZWFyVGV4dDoi0JLRi9Cx0L7RgCDQvNC10YHRj9GG0LAgKENvbnRyb2wr 0JLQstC10YDRhS/QktC90LjQtyDQtNC70Y8g0LLRi9Cx0L7RgNCwINCz0L7QtNCwKSIsdG9kYXlU aXA6InswfSAo0J/RgNC+0LHQtdC7KSIsZm9ybWF0OiJkLm0ueSIsb2tUZXh0OiImIzE2MDtPSyYj MTYwOyIsY2FuY2VsVGV4dDoi0J7RgtC80LXQvdCwIixzdGFydERheToxfSl9aWYoRXh0LlBhZ2lu Z1Rvb2xiYXIpe0V4dC5hcHBseShFeHQuUGFnaW5nVG9vbGJhci5wcm90b3R5cGUse2JlZm9yZVBh Z2VUZXh0OiLQodGC0YDQsNC90LjRhtCwIixhZnRlclBhZ2VUZXh0OiLQuNC3IHswfSIsZmlyc3RU ZXh0OiLQn9C10YDQstCw0Y8g0YHRgtGA0LDQvdC40YbQsCIscHJldlRleHQ6ItCf0YDQtdC00YvQ tNGD0YnQsNGPINGB0YLRgNCw0L3QuNGG0LAiLG5leHRUZXh0OiLQodC70LXQtNGD0Y7RidCw0Y8g 0YHRgtGA0LDQvdC40YbQsCIsbGFzdFRleHQ6ItCf0L7RgdC70LXQtNC90Y/RjyDRgdGC0YDQsNC9 0LjRhtCwIixyZWZyZXNoVGV4dDoi0J7QsdC90L7QstC40YLRjCIsZGlzcGxheU1zZzoi0J7RgtC+ 0LHRgNCw0LbQsNGO0YLRgdGPINC30LDQv9C40YHQuCDRgSB7MH0g0L/QviB7MX0sINCy0YHQtdCz 0L4gezJ9IixlbXB0eU1zZzoi0J3QtdGCINC00LDQvdC90YvRhSDQtNC70Y8g0L7RgtC+0LHRgNCw 0LbQtdC90LjRjyJ9KX1pZihFeHQuZm9ybS5UZXh0RmllbGQpe0V4dC5hcHBseShFeHQuZm9ybS5U ZXh0RmllbGQucHJvdG90eXBlLHttaW5MZW5ndGhUZXh0OiLQnNC40L3QuNC80LDQu9GM0L3QsNGP INC00LvQuNC90LAg0Y3RgtC+0LPQviDQv9C+0LvRjyB7MH0iLG1heExlbmd0aFRleHQ6ItCc0LDQ utGB0LjQvNCw0LvRjNC90LDRjyDQtNC70LjQvdCwINGN0YLQvtCz0L4g0L/QvtC70Y8gezB9Iixi bGFua1RleHQ6ItCt0YLQviDQv9C+0LvQtSDQvtCx0Y/Qt9Cw0YLQtdC70YzQvdC+INC00LvRjyDQ t9Cw0L/QvtC70L3QtdC90LjRjyIscmVnZXhUZXh0OiIiLGVtcHR5VGV4dDpudWxsfSl9aWYoRXh0 LmZvcm0uTnVtYmVyRmllbGQpe0V4dC5hcHBseShFeHQuZm9ybS5OdW1iZXJGaWVsZC5wcm90b3R5 cGUse21pblRleHQ6ItCX0L3QsNGH0LXQvdC40LUg0Y3RgtC+0LPQviDQv9C+0LvRjyDQvdC1INC8 0L7QttC10YIg0LHRi9GC0Ywg0LzQtdC90YzRiNC1IHswfSIsbWF4VGV4dDoi0JfQvdCw0YfQtdC9 0LjQtSDRjdGC0L7Qs9C+INC/0L7Qu9GPINC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDQsdC+0LvR jNGI0LUgezB9IixuYW5UZXh0OiJ7MH0g0L3QtSDRj9Cy0LvRj9C10YLRgdGPINGH0LjRgdC70L7Q vCJ9KX1pZihFeHQuZm9ybS5EYXRlRmllbGQpe0V4dC5hcHBseShFeHQuZm9ybS5EYXRlRmllbGQu cHJvdG90eXBlLHtkaXNhYmxlZERheXNUZXh0OiLQndC1INC00L7RgdGC0YPQv9C90L4iLGRpc2Fi bGVkRGF0ZXNUZXh0OiLQndC1INC00L7RgdGC0YPQv9C90L4iLG1pblRleHQ6ItCU0LDRgtCwINCy INGN0YLQvtC8INC/0L7Qu9C1INC00L7Qu9C20L3QsCDQsdGL0YLRjCDQv9C+0LfQtNC1IHswfSIs bWF4VGV4dDoi0JTQsNGC0LAg0LIg0Y3RgtC+0Lwg0L/QvtC70LUg0LTQvtC70LbQvdCwINCx0YvR gtGMINGA0LDQvdGM0YjQtSB7MH0iLGludmFsaWRUZXh0OiJ7MH0g0L3QtSDRj9Cy0LvRj9C10YLR gdGPINC/0YDQsNCy0LjQu9GM0L3QvtC5INC00LDRgtC+0LkgLSDQtNCw0YLQsCDQtNC+0LvQttC9 0LAg0LHRi9GC0Ywg0YPQutCw0LfQsNC90LAg0LIg0YTQvtGA0LzQsNGC0LUgezF9Iixmb3JtYXQ6 ImQubS55IixhbHRGb3JtYXRzOiJkLm0ueXxkL20vWXxkLW0teXxkLW0tWXxkL218ZC1tfGRtfGRt eXxkbVl8ZHxZLW0tZCJ9KX1pZihFeHQuZm9ybS5Db21ib0JveCl7RXh0LmFwcGx5KEV4dC5mb3Jt LkNvbWJvQm94LnByb3RvdHlwZSx7bG9hZGluZ1RleHQ6ItCX0LDQs9GA0YPQt9C60LAuLi4iLHZh bHVlTm90Rm91bmRUZXh0OnVuZGVmaW5lZH0pfWlmKEV4dC5mb3JtLlZUeXBlcyl7RXh0LmFwcGx5 KEV4dC5mb3JtLlZUeXBlcyx7ZW1haWxUZXh0OifQrdGC0L4g0L/QvtC70LUg0LTQvtC70LbQvdC+ INGB0L7QtNC10YDQttCw0YLRjCDQsNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/Q vtGH0YLRiyDQsiDRhNC+0YDQvNCw0YLQtSAidXNlckBkb21haW4uY29tIicsdXJsVGV4dDon0K3R gtC+INC/0L7Qu9C1INC00L7Qu9C20L3QviDRgdC+0LTQtdGA0LbQsNGC0YwgVVJMINCyINGE0L7R gNC80LDRgtC1ICJodHRwOi8vd3d3LmRvbWFpbi5jb20iJyxhbHBoYVRleHQ6J9Ct0YLQviDQv9C+ 0LvQtSDQtNC+0LvQttC90L4g0YHQvtC00LXRgNC20LDRgtGMINGC0L7Qu9GM0LrQviDQu9Cw0YLQ uNC90YHQutC40LUg0LHRg9C60LLRiyDQuCDRgdC40LzQstC+0Lsg0L/QvtC00YfQtdGA0LrQuNCy 0LDQvdC40Y8gIl8iJyxhbHBoYW51bVRleHQ6J9Ct0YLQviDQv9C+0LvQtSDQtNC+0LvQttC90L4g 0YHQvtC00LXRgNC20LDRgtGMINGC0L7Qu9GM0LrQviDQu9Cw0YLQuNC90YHQutC40LUg0LHRg9C6 0LLRiywg0YbQuNGE0YDRiyDQuCDRgdC40LzQstC+0Lsg0L/QvtC00YfQtdGA0LrQuNCy0LDQvdC4 0Y8gIl8iJ30pfWlmKEV4dC5mb3JtLkh0bWxFZGl0b3Ipe0V4dC5hcHBseShFeHQuZm9ybS5IdG1s RWRpdG9yLnByb3RvdHlwZSx7Y3JlYXRlTGlua1RleHQ6ItCf0L7QttCw0LvRg9C50YHRgtCwINCy 0LLQtdC00LjRgtC1INCw0LTRgNC10YE6IixidXR0b25UaXBzOntib2xkOnt0aXRsZToi0J/QvtC7 0YPQttC40YDQvdGL0LkgKEN0cmwrQikiLHRleHQ6ItCf0YDQuNC80LXQvdC10L3QuNC1INC/0L7Q u9GD0LbQuNGA0L3QvtCz0L4g0L3QsNGH0LXRgNGC0LDQvdC40Y8g0Log0LLRi9C00LXQu9C10L3Q vdC+0LzRgyDRgtC10LrRgdGC0YMuIixjbHM6IngtaHRtbC1lZGl0b3ItdGlwIn0saXRhbGljOnt0 aXRsZToi0JrRg9GA0YHQuNCyIChDdHJsK0kpIix0ZXh0OiLQn9GA0LjQvNC10L3QtdC90LjQtSDQ utGD0YDRgdC40LLQvdC+0LPQviDQvdCw0YfQtdGA0YLQsNC90LjRjyDQuiDQstGL0LTQtdC70LXQ vdC90L7QvNGDINGC0LXQutGB0YLRgy4iLGNsczoieC1odG1sLWVkaXRvci10aXAifSx1bmRlcmxp bmU6e3RpdGxlOiLQn9C+0LTRh9GR0YDQutC90YPRgtGL0LkgKEN0cmwrVSkiLHRleHQ6ItCf0L7Q tNGH0ZHRgNC60LjQstCw0L3QuNC1INCy0YvQtNC10LvQtdC90L3QvtCz0L4g0YLQtdC60YHRgtCw LiIsY2xzOiJ4LWh0bWwtZWRpdG9yLXRpcCJ9LGluY3JlYXNlZm9udHNpemU6e3RpdGxlOiLQo9Cy 0LXQu9C40YfQuNGC0Ywg0YDQsNC30LzQtdGAIix0ZXh0OiLQo9Cy0LXQu9C40YfQtdC90LjQtSDR gNCw0LfQvNC10YDQsCDRiNGA0LjRhNGC0LAuIixjbHM6IngtaHRtbC1lZGl0b3ItdGlwIn0sZGVj cmVhc2Vmb250c2l6ZTp7dGl0bGU6ItCj0LzQtdC90YzRiNC40YLRjCDRgNCw0LfQvNC10YAiLHRl eHQ6ItCj0LzQtdC90YzRiNC10L3QuNC1INGA0LDQt9C80LXRgNCwINGI0YDQuNGE0YLQsC4iLGNs czoieC1odG1sLWVkaXRvci10aXAifSxiYWNrY29sb3I6e3RpdGxlOiLQl9Cw0LvQuNCy0LrQsCIs dGV4dDoi0JjQt9C80LXQvdC10L3QuNC1INGG0LLQtdGC0LAg0YTQvtC90LAg0LTQu9GPINCy0YvQ tNC10LvQtdC90L3QvtCz0L4g0YLQtdC60YHRgtCwINC40LvQuCDQsNCx0LfQsNGG0LAuIixjbHM6 IngtaHRtbC1lZGl0b3ItdGlwIn0sZm9yZWNvbG9yOnt0aXRsZToi0KbQstC10YIg0YLQtdC60YHR gtCwIix0ZXh0OiLQmNC30LzQtdC90LjQtSDRhtCy0LXRgtCwINGC0LXQutGB0YLQsC4iLGNsczoi eC1odG1sLWVkaXRvci10aXAifSxqdXN0aWZ5bGVmdDp7dGl0bGU6ItCS0YvRgNC+0LLQvdGP0YLR jCDRgtC10LrRgdGCINC/0L4g0LvQtdCy0L7QvNGDINC60YDQsNGOIix0ZXh0OiLQktGL0YDQvtCy 0L3QuNCy0LDQvdC40LUg0YLQtdC60YHRgtCwINC/0L4g0LvQtdCy0L7QvNGDINC60YDQsNGOLiIs Y2xzOiJ4LWh0bWwtZWRpdG9yLXRpcCJ9LGp1c3RpZnljZW50ZXI6e3RpdGxlOiLQn9C+INGG0LXQ vdGC0YDRgyIsdGV4dDoi0JLRi9GA0L7QstC90LjQstCw0L3QuNC1INGC0LXQutGB0YLQsCDQv9C+ INGG0LXQvdGC0YDRgy4iLGNsczoieC1odG1sLWVkaXRvci10aXAifSxqdXN0aWZ5cmlnaHQ6e3Rp dGxlOiLQktGL0YDQvtCy0L3Rj9GC0Ywg0YLQtdC60YHRgiDQv9C+INC/0YDQsNCy0L7QvNGDINC6 0YDQsNGOIix0ZXh0OiLQktGL0YDQvtCy0L3QuNCy0LDQvdC40LUg0YLQtdC60YHRgtCwINC/0L4g 0L/RgNCw0LLQvtC80YMg0LrRgNCw0Y4uIixjbHM6IngtaHRtbC1lZGl0b3ItdGlwIn0saW5zZXJ0 dW5vcmRlcmVkbGlzdDp7dGl0bGU6ItCc0LDRgNC60LXRgNGLIix0ZXh0OiLQndCw0YfQsNGC0Ywg 0LzQsNGA0LrQuNGA0L7QstCw0L3QvdGL0Lkg0YHQv9C40YHQvtC6LiIsY2xzOiJ4LWh0bWwtZWRp dG9yLXRpcCJ9LGluc2VydG9yZGVyZWRsaXN0Ont0aXRsZToi0J3Rg9C80LXRgNCw0YbQuNGPIix0 ZXh0OiLQndCw0YfQsNGC0Ywg0L3Rg9C80LXRgNC90L7QstCw0L3QvdGL0Lkg0YHQv9C40YHQvtC6 LiIsY2xzOiJ4LWh0bWwtZWRpdG9yLXRpcCJ9LGNyZWF0ZWxpbms6e3RpdGxlOiLQktGB0YLQsNCy 0LjRgtGMINCz0LjQv9C10YDRgdGB0YvQu9C60YMiLHRleHQ6ItCh0L7Qt9C00LDQvdC40LUg0YHR gdGL0LvQutC4INC40Lcg0LLRi9C00LXQu9C10L3QvdC+0LPQviDRgtC10LrRgdGC0LAuIixjbHM6 IngtaHRtbC1lZGl0b3ItdGlwIn0sc291cmNlZWRpdDp7dGl0bGU6ItCY0YHRhdC+0LTQvdGL0Lkg 0LrQvtC0Iix0ZXh0OiLQn9C10YDQtdC60LvRjtGH0LjRgtGM0YHRjyDQvdCwINC40YHRhdC+0LTQ vdGL0Lkg0LrQvtC0LiIsY2xzOiJ4LWh0bWwtZWRpdG9yLXRpcCJ9fX0pfWlmKEV4dC5mb3JtLkJh c2ljRm9ybSl7RXh0LmZvcm0uQmFzaWNGb3JtLnByb3RvdHlwZS53YWl0VGl0bGU9ItCf0L7QttCw 0LvRg9C50YHRgtCwINC/0L7QtNC+0LbQtNC40YLQtS4uLiJ9aWYoRXh0LmdyaWQuR3JpZFZpZXcp e0V4dC5hcHBseShFeHQuZ3JpZC5HcmlkVmlldy5wcm90b3R5cGUse3NvcnRBc2NUZXh0OiLQodC+ 0YDRgtC40YDQvtCy0LDRgtGMINC/0L4g0LLQvtC30YDQsNGB0YLQsNC90LjRjiIsc29ydERlc2NU ZXh0OiLQodC+0YDRgtC40YDQvtCy0LDRgtGMINC/0L4g0YPQsdGL0LLQsNC90LjRjiIsbG9ja1Rl eHQ6ItCX0LDQutGA0LXQv9C40YLRjCDRgdGC0L7Qu9Cx0LXRhiIsdW5sb2NrVGV4dDoi0KHQvdGP 0YLRjCDQt9Cw0LrRgNC10L/Qu9C10L3QuNC1INGB0YLQvtC70LHRhtCwIixjb2x1bW5zVGV4dDoi 0KHRgtC+0LvQsdGG0YsifSl9aWYoRXh0LmdyaWQuR3JvdXBpbmdWaWV3KXtFeHQuYXBwbHkoRXh0 LmdyaWQuR3JvdXBpbmdWaWV3LnByb3RvdHlwZSx7ZW1wdHlHcm91cFRleHQ6IijQn9GD0YHRgtC+ KSIsZ3JvdXBCeVRleHQ6ItCT0YDRg9C/0L/QuNGA0L7QstCw0YLRjCDQv9C+INGN0YLQvtC80YMg 0L/QvtC70Y4iLHNob3dHcm91cHNUZXh0OiLQntGC0L7QsdGA0LDQttCw0YLRjCDQv9C+INCz0YDR g9C/0L/QsNC8In0pfWlmKEV4dC5ncmlkLlByb3BlcnR5Q29sdW1uTW9kZWwpe0V4dC5hcHBseShF eHQuZ3JpZC5Qcm9wZXJ0eUNvbHVtbk1vZGVsLnByb3RvdHlwZSx7bmFtZVRleHQ6ItCd0LDQt9Cy 0LDQvdC40LUiLHZhbHVlVGV4dDoi0JfQvdCw0YfQtdC90LjQtSIsZGF0ZUZvcm1hdDoiZC5tLlki fSl9aWYoRXh0LlNwbGl0TGF5b3V0UmVnaW9uKXtFeHQuYXBwbHkoRXh0LlNwbGl0TGF5b3V0UmVn aW9uLnByb3RvdHlwZSx7c3BsaXRUaXA6ItCi0Y/QvdC40YLQtSDQtNC70Y8g0LjQt9C80LXQvdC1 0L3QuNGPINGA0LDQt9C80LXRgNCwLiIsY29sbGFwc2libGVTcGxpdFRpcDoi0KLRj9C90LjRgtC1 INC00LvRjyDQuNC30LzQtdC90LXQvdC40Y8g0YDQsNC30LzQtdGA0LAuINCU0LLQvtC50L3QvtC5 INGJ0LXQu9GH0L7QuiDRgdC/0YDRj9GH0LXRgiDQv9Cw0L3QtdC70YwuIn0pfWlmKEV4dC5sYXlv dXQuQm9yZGVyTGF5b3V0JiZFeHQubGF5b3V0LkJvcmRlckxheW91dC5TcGxpdFJlZ2lvbil7RXh0 LmFwcGx5KEV4dC5sYXlvdXQuQm9yZGVyTGF5b3V0LlNwbGl0UmVnaW9uLnByb3RvdHlwZSx7c3Bs aXRUaXA6ItCi0Y/QvdC40YLQtSDQtNC70Y8g0LjQt9C80LXQvdC10L3QuNGPINGA0LDQt9C80LXR gNCwLiIsY29sbGFwc2libGVTcGxpdFRpcDoi0KLRj9C90LjRgtC1INC00LvRjyDQuNC30LzQtdC9 0LXQvdC40Y8g0YDQsNC30LzQtdGA0LAuINCU0LLQvtC50L3QvtC5INGJ0LXQu9GH0L7QuiDRgdC/ 0YDRj9GH0LXRgiDQv9Cw0L3QtdC70YwuIn0pfWZ1bmN0aW9uIG1haW5GbmMoKXtFeHQuQkxBTktf SU1BR0VfVVJMPSIvZXh0anMvcy5naWYiO3ZhciBNYXN0ZXI9e307dmFyIG1vZHVsZTtFeHQuQWph eC5kaXNhYmxlQ2FjaGluZz1mYWxzZTtpZihFeHQuUXVpY2tUaXBzKXtFeHQuUXVpY2tUaXBzLmlu aXQoKX1NYXN0ZXI9e3Rvb2xzOnt9LG1vZHVsZXM6e30sbW9kdWxlQ2xhc3Nlczp7fSxsb2FkZWRN b2R1bGU6bnVsbCxsb2FkZWRUb29sczp7fSxsb2FkZWRDbGFzc2VzOnt9LGxvYWRlZFBhY2thZ2Vz Ont9LGNvcmU6bnVsbCxjdXJyZW50TW9kdWxlOm51bGwsbG9hZGluZ01lc3NhZ2U6ItCX0LDQs9GA 0YPQt9C60LAuLi4iLGV4Y2VwdGlvbjpmdW5jdGlvbihhLGIsYyl7aWYoTWFzdGVyLkVycm9yKXtN YXN0ZXIuRXJyb3IuaGFuZGxlRXhjZXB0aW9uKGEsYixjKX1lbHNle01hc3Rlci50cmFjZSgpO01h c3Rlci5sb2coYSk7TWFzdGVyLmxvZyhiKTtNYXN0ZXIubG9nKGMpfX0sZXJyb3I6ZnVuY3Rpb24o bXNnKXtpZihNYXN0ZXIuRXJyb3Ipe01hc3Rlci5FcnJvci5oYW5kbGVFcnJvcih7bWVzc2FnZTpt c2d9KX1lbHNle01hc3Rlci5sb2cobXNnKTtNYXN0ZXIudHJhY2UoKX19LHN0YXJ0OmZ1bmN0aW9u KCl7TWFzdGVyLmNvcmUuc3RhcnQoKX0sZG9Mb2dpbjpmdW5jdGlvbigpe01hc3Rlci5jb3JlLmRv TG9naW4oKX0sb25SZWFkeTpmdW5jdGlvbigpe01hc3Rlci5jb3JlLm9uUmVhZHkoKX0sc2V0V2lu ZG93OmZ1bmN0aW9uKHdpbil7cmV0dXJuIE1hc3Rlci5jb3JlLnNldFdpbmRvdyh3aW4pfSx1bnNl dFdpbmRvdzpmdW5jdGlvbih3aW4pe3JldHVybiBNYXN0ZXIuY29yZS51bnNldFdpbmRvdyh3aW4p fSxnZXRNb2R1bGU6ZnVuY3Rpb24obW9kdWxlTmFtZSl7aWYoTWFzdGVyLm1vZHVsZXMuaGFzT3du UHJvcGVydHkobW9kdWxlTmFtZSkpe3JldHVybiBNYXN0ZXIubW9kdWxlc1ttb2R1bGVOYW1lXX1l bHNle3JldHVybiBmYWxzZX19LHNldE1vZHVsZTpmdW5jdGlvbihtb2R1bGVOYW1lLG1vZHVsZSl7 TWFzdGVyLm1vZHVsZXNbbW9kdWxlTmFtZV09bW9kdWxlfSxsb2c6ZnVuY3Rpb24obSl7aWYod2lu ZG93LmNvbnNvbGUpe2lmKEV4dC5pc0Z1bmN0aW9uKGNvbnNvbGUubG9nKSl7Y29uc29sZS5sb2co bSl9fX0sdHJhY2U6ZnVuY3Rpb24oKXtpZih3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUu dHJhY2Upe2NvbnNvbGUudHJhY2UoKX19LGxvYWRNb2R1bGU6ZnVuY3Rpb24obW9kdWxlTmFtZSxv cHRpb25zLGNhbGxiYWNrKXtpZihNYXN0ZXIuZ2V0TW9kdWxlKG1vZHVsZU5hbWUpJiYhTWFzdGVy LmRlYnVnKXtjYWxsYmFjayhNYXN0ZXIuZ2V0TW9kdWxlKG1vZHVsZU5hbWUpKX1lbHNle2lmKE1h c3Rlci5tb2R1bGVDbGFzc2VzW21vZHVsZU5hbWVdJiYhTWFzdGVyLmRlYnVnKXtNYXN0ZXIuc2V0 TW9kdWxlKG1vZHVsZU5hbWUsbmV3IE1hc3Rlci5tb2R1bGVDbGFzc2VzW21vZHVsZU5hbWVdKCkp O2NhbGxiYWNrKE1hc3Rlci5nZXRNb2R1bGUobW9kdWxlTmFtZSkpfWVsc2V7dmFyIGZuYz1mdW5j dGlvbigpe3RyeXtpZihNYXN0ZXIuTW9kdWxlW21vZHVsZU5hbWVdKXtNYXN0ZXIubW9kdWxlQ2xh c3Nlc1ttb2R1bGVOYW1lXT1mdW5jdGlvbigpe01hc3Rlci5tb2R1bGVDbGFzc2VzW21vZHVsZU5h bWVdLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCgpfTt2YXIgbW9kPW5ldyBNYXN0ZXIuTW9k dWxlW21vZHVsZU5hbWVdKCk7bW9kLm1vZHVsZU5hbWU9bW9kdWxlTmFtZTtFeHQuZXh0ZW5kKE1h c3Rlci5tb2R1bGVDbGFzc2VzW21vZHVsZU5hbWVdLE1hc3Rlci5Nb2R1bGUuQWJzdHJhY3QsbW9k KTtNYXN0ZXIuc2V0TW9kdWxlKG1vZHVsZU5hbWUsbmV3IE1hc3Rlci5tb2R1bGVDbGFzc2VzW21v ZHVsZU5hbWVdKCkpO2NhbGxiYWNrKE1hc3Rlci5nZXRNb2R1bGUobW9kdWxlTmFtZSkpfWVsc2V7 TWFzdGVyLnNob3dFcnJvcigi0J7RiNC40LHQutCwIiwi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+ 0LTQs9GA0YPQt9C40YLRjCDQvNC+0LTRg9C70YwiKTtjYWxsYmFjayhmYWxzZSl9fWNhdGNoKGVy cil7Y2FsbGJhY2soZmFsc2UpfX07aWYoTWFzdGVyLk1vZHVsZVttb2R1bGVOYW1lXSYmIU1hc3Rl ci5kZWJ1Zyl7Zm5jKCl9ZWxzZXtpZihvcHRpb25zJiZvcHRpb25zLnRvb2xOYW1lKXtpZihvcHRp b25zLnRvb2xOYW1lPT0iZ3JpZCIpe01hc3Rlci5Nb2R1bGVbbW9kdWxlTmFtZV09TWFzdGVyLmNy ZWF0ZUdyaWRNb2R1bGUob3B0aW9ucy5rZXksb3B0aW9ucy5tb2RlfHwiZ3JpZCIpfWVsc2V7aWYo b3B0aW9ucy50b29sTmFtZT09InRyZWUiKXtNYXN0ZXIuTW9kdWxlW21vZHVsZU5hbWVdPU1hc3Rl ci5jcmVhdGVUcmVlTW9kdWxlKG9wdGlvbnMua2V5KX1lbHNle2FsZXJ0KCLQndC1INGD0LTQsNC7 0L7RgdGMINC30LDQv9GD0YHRgtC40YLRjCDQvNC+0LTRg9C70YwuIHRvb2xOYW1lICIrb3B0aW9u cy50b29sTmFtZSsiIGlzIHVuc3VwcG9ydGVkLiIpfX1mbmMoKX1lbHNle01hc3Rlci5sb2FkU3Rh dGljU2NyaXB0KE1hc3Rlci5VcmwuanMoIi9tb2R1bGUvIittb2R1bGVOYW1lLnJlcGxhY2UoL18v ZywiLyIpKSxmbmMpfX19fX0scnVuTW9kdWxlOmZ1bmN0aW9uKG1vZHVsZU5hbWUsb3B0aW9ucyl7 TWFzdGVyLm1hc2soKTt0cnl7dmFyIG1vZHVsZT1NYXN0ZXIuZ2V0TW9kdWxlKG1vZHVsZU5hbWUp O2lmKG1vZHVsZSl7dmFyIHdpbj1tb2R1bGUud2luZG93O2lmKHdpbil7bW9kdWxlLnNldE9wdGlv bnMob3B0aW9ucyxmdW5jdGlvbigpe3dpbi5zaG93KCk7TWFzdGVyLnVubWFzaygpO01hc3Rlci5j dXJyZW50TW9kdWxlPW1vZHVsZX0pfWVsc2V7bW9kdWxlLnJ1bihmdW5jdGlvbigpe01hc3Rlci51 bm1hc2soKTtNYXN0ZXIuY3VycmVudE1vZHVsZT1tb2R1bGV9LG9wdGlvbnMpfX1lbHNle3ZhciBj YWxsYmFjaz1mdW5jdGlvbihtb2R1bGUpe2lmKG1vZHVsZSl7bW9kdWxlLnJ1bihmdW5jdGlvbigp e01hc3Rlci51bm1hc2soKTtNYXN0ZXIuY3VycmVudE1vZHVsZT1tb2R1bGV9LG9wdGlvbnMpfWVs c2V7TWFzdGVyLnVubWFzaygpfX07TWFzdGVyLmxvYWRNb2R1bGUobW9kdWxlTmFtZSxvcHRpb25z LGNhbGxiYWNrKX19Y2F0Y2goZXJyKXtNYXN0ZXIuZXhjZXB0aW9uKGVyciwi0J3QtSDRg9C00LDQ u9C+0YHRjCDQt9Cw0L/Rg9GB0YLQuNGC0Ywg0LzQvtC00YPQu9GMLiBtb2R1bGVOYW1lIDoiK21v ZHVsZU5hbWUpfX0scmVuZGVyTW9kdWxlOmZ1bmN0aW9uKGNvbmZpZyl7cmV0dXJuIE1hc3Rlci5j b3JlLnJlbmRlck1vZHVsZShjb25maWcpfSxjcmVhdGVXaW5kb3c6ZnVuY3Rpb24oY29uZmlnKXty ZXR1cm4gTWFzdGVyLmNvcmUuY3JlYXRlV2luZG93KGNvbmZpZyl9LGlzQ2xhc3NMb2FkZWQ6ZnVu Y3Rpb24oY2xhc3NOYW1lKXtpZih0aGlzLmxvYWRlZENsYXNzZXNbY2xhc3NOYW1lXSl7cmV0dXJu IHRydWV9fSxzZXRMb2FkZWRDbGFzczpmdW5jdGlvbihjbGFzc05hbWUpe3RoaXMubG9hZGVkQ2xh c3Nlc1tjbGFzc05hbWVdPXRydWV9LHVuc2V0TG9hZGVkQ2xhc3M6ZnVuY3Rpb24oY2xhc3NOYW1l KXt0aGlzLmxvYWRlZENsYXNzZXNbY2xhc3NOYW1lXT1mYWxzZX0saXNUb29sTG9hZGVkOmZ1bmN0 aW9uKHRvb2xOYW1lKXtpZih0aGlzLmxvYWRlZFRvb2xzW3Rvb2xOYW1lXSl7cmV0dXJuIHRydWV9 fSx1bnNldExvYWRlZFRvb2w6ZnVuY3Rpb24odG9vbE5hbWUpe2FsZXJ0KHRvb2xOYW1lKTt0aGlz LmxvYWRlZFRvb2xzW3Rvb2xOYW1lXT1mYWxzZX0sc2V0TG9hZGVkVG9vbDpmdW5jdGlvbih0b29s TmFtZSl7dGhpcy5sb2FkZWRUb29sc1t0b29sTmFtZV09dHJ1ZX0sbG9hZENsYXNzZXM6ZnVuY3Rp b24oY2xhc3NlcyxjYWxsYmFjayl7aWYoY2xhc3NlcyYmY2xhc3Nlcy5sZW5ndGghPT0wKXtjYWxs YmFjaz1jYWxsYmFja3x8ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZihjbGFzc2VzKT09PSJvYmplY3Qi KXt2YXIgX2NsYXNzZXM9W107dmFyIGNiPWZ1bmN0aW9uKCl7dmFyIGNsYXNzZXNJdGVtO3RyeXtj bGFzc2VzSXRlbT1fY2xhc3Nlcy5wb3AoKXx8e307dmFyIGZuYz1jbGFzc2VzSXRlbS5jYjtpZihj bGFzc2VzSXRlbS5uYW1lKXtNYXN0ZXIubG9hZENsYXNzZXMoY2xhc3Nlc0l0ZW0ubmFtZSxmbmMp fWVsc2V7aWYoZm5jKXtmbmMoKX19fWNhdGNoKGVycil7TWFzdGVyLmV4Y2VwdGlvbihlcnIsItCd 0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNCz0YDRg9C30LjRgtGMIGNsYXNzLiBjbGFzczoiK2NsYXNz ZXNJdGVtP2NsYXNzZXNJdGVtLm5hbWU6IiIpfX07X2NsYXNzZXMucHVzaCh7Y2I6Y2FsbGJhY2ss bmFtZTpudWxsfSk7Zm9yKHZhciBpPWNsYXNzZXMubGVuZ3RoLTE7aT49MDtpLS0pe2lmKCFNYXN0 ZXIuaXNDbGFzc0xvYWRlZChjbGFzc2VzW2ldKSl7X2NsYXNzZXMucHVzaCh7Y2I6Y2IsbmFtZTpj bGFzc2VzW2ldfSl9fWNiKCl9ZWxzZXtNYXN0ZXIubG9hZFN0YXRpY1NjcmlwdChNYXN0ZXIuVXJs LmpzKCIvY2xhc3Nlcy8iK2NsYXNzZXMucmVwbGFjZSgvXy9nLCIvIikpLGNhbGxiYWNrfHxmdW5j dGlvbigpe30pfX1lbHNle2NhbGxiYWNrKCl9fSxsb2FkUGFja2FnZTpmdW5jdGlvbihuYW1lLGNh bGxiYWNrKXtjYWxsYmFjaz1jYWxsYmFja3x8ZnVuY3Rpb24oKXt9O2lmKHRoaXMubG9hZGVkUGFj a2FnZXNbbmFtZV0pe2NhbGxiYWNrKHRydWUpfWVsc2V7aWYod2luZG93WyJNYXN0ZXJUZXN0UGFj a2FnZV8iK25hbWVdKXt3aW5kb3dbIk1hc3RlclRlc3RQYWNrYWdlXyIrbmFtZV0odGhpcyk7dGhp cy5sb2FkZWRQYWNrYWdlc1tuYW1lXT10cnVlO2NhbGxiYWNrKHRydWUpfWVsc2V7dmFyIGhlYWQ9 ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTt2YXIgc2NyaXB0PWRvY3Vt ZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3NjcmlwdC5zZXRBdHRyaWJ1dGUoInNyYyIsTWFz dGVyLlVybC5qcygiL3BhY2thZ2UvIituYW1lKyItMC4xMDAyMiIpKTtzY3JpcHQuc2V0QXR0cmli dXRlKCJ0eXBlIiwidGV4dC9qYXZhc2NyaXB0Iik7aGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO3Zh ciBjb3VudGVyPTYwMDt2YXIgcmVhZFJlc3BvbnNlPWZ1bmN0aW9uKCl7aWYoY291bnRlcjwwKXtj YWxsYmFjayhmYWxzZSl9ZWxzZXtpZih3aW5kb3dbIk1hc3RlclRlc3RQYWNrYWdlXyIrbmFtZV0p e3dpbmRvd1siTWFzdGVyVGVzdFBhY2thZ2VfIituYW1lXSh0aGlzKTt0aGlzLmxvYWRlZFBhY2th Z2VzW25hbWVdPXRydWU7Y2FsbGJhY2sodHJ1ZSl9ZWxzZXtjb3VudGVyLS07c2V0VGltZW91dChy ZWFkUmVzcG9uc2UsNTApfX19LmNyZWF0ZURlbGVnYXRlKHRoaXMpO3JlYWRSZXNwb25zZSgpfX19 LGxvYWRUb29sczpmdW5jdGlvbih0b29sLGNhbGxiYWNrKXtpZih0b29sJiZ0b29sLmxlbmd0aCE9 PTApe2NhbGxiYWNrPWNhbGxiYWNrfHxmdW5jdGlvbigpe307aWYodHlwZW9mKHRvb2wpPT09Im9i amVjdCIpe3ZhciB0b29scz1bXSx0b29sc0l0ZW0sZm5jO3ZhciBjYj1mdW5jdGlvbigpe3RyeXt0 b29sc0l0ZW09dG9vbHMucG9wKCk7Zm5jPXRvb2xzSXRlbS5jYjtpZih0b29sc0l0ZW0ubmFtZSl7 TWFzdGVyLmxvYWRUb29scyh0b29sc0l0ZW0ubmFtZSxmbmMpfWVsc2V7Zm5jKCl9fWNhdGNoKGVy cil7TWFzdGVyLmV4Y2VwdGlvbihlcnIsItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNCz0YDRg9C3 0LjRgtGMIFRvb2wuIHRvb2w6Iit0b29sc0l0ZW0/dG9vbHNJdGVtLm5hbWU6IiIpfX07dG9vbHMu cHVzaCh7Y2I6Y2FsbGJhY2ssbmFtZTpudWxsfSk7Zm9yKHZhciBpPXRvb2wubGVuZ3RoLTE7aT49 MDtpLS0pe2lmKCFNYXN0ZXIuaXNUb29sTG9hZGVkKHRvb2xbaV0pKXt0b29scy5wdXNoKHtjYjpj YixuYW1lOnRvb2xbaV19KX19Y2IoKX1lbHNle01hc3Rlci5sb2FkU3RhdGljU2NyaXB0KE1hc3Rl ci5VcmwuanMoIi90b29scy8iK3Rvb2wucmVwbGFjZSgvXy9nLCIvIikpLGNhbGxiYWNrfHxmdW5j dGlvbigpe30pfX1lbHNle2NhbGxiYWNrKCl9fSxsb2FkU3RhdGljU2NyaXB0OmZ1bmN0aW9uKHVy bCxjYWxsYmFjayl7Y2FsbGJhY2s9Y2FsbGJhY2t8fGZ1bmN0aW9uKCl7fTtFeHQuQWpheC5yZXF1 ZXN0KE1hc3Rlci5Kc29uLmdldFJlcXVlc3RDb25maWcoe3VybDp1cmwsbWV0aG9kOiJHRVQiLGpz OnRydWUsZGlzYWJsZUNhY2hpbmc6ZmFsc2UsY2FsbGJhY2s6ZnVuY3Rpb24ob3B0aW9uLHN1Y2Nl c3MscmVzcG9uc2Upe2lmKHJlc3BvbnNlKXt0cnl7ZXZhbChyZXNwb25zZS5yZXNwb25zZVRleHQp O2NhbGxiYWNrKCl9Y2F0Y2goZXJyKXtNYXN0ZXIuZXhjZXB0aW9uKGVyciwi0L7RiNC40LHQutCw INC/0YDQuCDQt9Cw0LPRgNGD0LfQutC1INGB0LrRgNC40L/RgtCwINC/0L4gdXJsOiAiK3VybCwi 0J/RgNC4INC30LDQs9GA0YPQt9C60LUg0LLQvtC30L3QuNC60LvQsCDQvtGI0LjQsdC60LAuINCf 0L7QstGC0L7RgNC40YLQtSDQv9C+0L/Ri9GC0LrRgyDQuNC70Lgg0L/QtdGA0LXQt9Cw0LPRgNGD 0LfQuNGC0LUg0L7QutC90L4uIik7Y2FsbGJhY2soKX19fX0pKX0scmVsb2FkTWVudTpmdW5jdGlv bigpe01hc3Rlci5jb3JlLnJlbG9hZE1lbnUoKX0sZXJyb3JzOltdLGVycm9yV2luU3RhdHVzOiJo aWRlIixlcnJvckNvdW50ZXI6MCxhbGVydEVycm9yczpmYWxzZSxzaG93RXJyb3JzOmZ1bmN0aW9u KCl7aWYoTWFzdGVyLmVycm9yV2luU3RhdHVzPT09ImhpZGUifHx0aGlzLmFsZXJ0RXJyb3JzKXtp ZihNYXN0ZXIuZXJyb3JzLmxlbmd0aD09PTApe3JldHVybn12YXIgZXJyPU1hc3Rlci5lcnJvcnMu c2hpZnQoKTtpZihlcnIpe3ZhciB0aXRsZT1lcnIudGl0bGU7dmFyIG1zZz1lcnIubXNnO2lmKHRo aXMuYWxlcnRFcnJvcnMpe2FsZXJ0KHRpdGxlKyI6XG4iK21zZyl9ZWxzZXtNYXN0ZXIuZXJyb3JX aW5TdGF0dXM9Im9wZW5pbmciO0V4dC5Nc2cuc2hvdyh7dGl0bGU6dGl0bGUsbXNnOm1zZyx3aWR0 aDo0MDAsYW5pbUVsOiJ1eC1zdGFydGJ1dHRvbiIsZm46ZnVuY3Rpb24oKXtNYXN0ZXIuZXJyb3JW aXNpYmxlPWZhbHNlOy0tTWFzdGVyLmVycm9yQ291bnQ7TWFzdGVyLnNob3dFcnJvcnMoKX0saWNv bjpFeHQuTWVzc2FnZUJveC5FUlJPUixidXR0b25zOkV4dC5Nc2cuT0t9KX1zZXRUaW1lb3V0KE1h c3Rlci5zaG93RXJyb3JzLDEwMDApfX1lbHNle2lmKE1hc3Rlci5lcnJvcldpblN0YXR1cz09PSJv cGVuaW5nIil7aWYoRXh0Lk1zZy5pc1Zpc2libGUoKSl7TWFzdGVyLmVycm9yV2luU3RhdHVzPSJv cGVuIjt0aGlzLmVycm9yQ291bnRlcj0wfWVsc2V7aWYodGhpcy5lcnJvckNvdW50ZXI+MzApe3Ro aXMuYWxlcnRFcnJvcnM9dHJ1ZX1lbHNleysrdGhpcy5lcnJvckNvdW50ZXJ9fXNldFRpbWVvdXQo TWFzdGVyLnNob3dFcnJvcnMsMTAwMCl9ZWxzZXtpZihNYXN0ZXIuZXJyb3JXaW5TdGF0dXM9PT0i b3BlbiIpe2lmKCFFeHQuTXNnLmlzVmlzaWJsZSgpKXtNYXN0ZXIuZXJyb3JXaW5TdGF0dXM9Imhp ZGUiO3NldFRpbWVvdXQoTWFzdGVyLnNob3dFcnJvcnMsMjAwMCk7cmV0dXJufX1lbHNle01hc3Rl ci5lcnJvcldpblN0YXR1cz0iaGlkZSJ9fX1yZXR1cm59LHNob3dFcnJvcjpmdW5jdGlvbih0aXRs ZSxtc2cpe01hc3Rlci5lcnJvcnMucHVzaCh7dGl0bGU6dGl0bGUsbXNnOm1zZ30pO01hc3Rlci5z aG93RXJyb3JzKCk7TWFzdGVyLnVubWFzaygpfSxjb25maXJtOmZ1bmN0aW9uKHRpdGxlLHRleHQs Y2FsbGJhY2spe2lmKHRoaXMuZXJyb3JDb3VudGVyPDIwKXtFeHQuTWVzc2FnZUJveC5jb25maXJt KHRpdGxlLHRleHQsY2FsbGJhY2spfWVsc2V7dmFyIHI9Y29uZmlybSh0ZXh0KTtpZihyPT09dHJ1 ZSl7Y2FsbGJhY2soInllcyIpfWVsc2V7Y2FsbGJhY2soIm5vIil9fX0sYWxlcnQ6ZnVuY3Rpb24o dGl0bGUsdGV4dCl7aWYodGhpcy5lcnJvckNvdW50ZXI8MjApe0V4dC5NZXNzYWdlQm94LmFsZXJ0 KHRpdGxlLHRleHQpfWVsc2V7YWxlcnQodGl0bGUrIlxuIit0ZXh0KX19LG1hc2tDb3VudGVyOjAs bWFzazpmdW5jdGlvbihtc2csY291bnQpe2lmKGNvdW50KXtNYXN0ZXIubWFza0NvdW50ZXI9Y291 bnR9RXh0LmdldEJvZHkoKS5tYXNrKG1zZ3x8TWFzdGVyLmxvYWRpbmdNZXNzYWdlLCJ4LW1hc2st bG9hZGluZyIpfSx1bm1hc2s6ZnVuY3Rpb24oKXtpZihNYXN0ZXIubWFza0NvdW50ZXI+MCl7TWFz dGVyLm1hc2tDb3VudGVyPU1hc3Rlci5tYXNrQ291bnRlci0xO2lmKE1hc3Rlci5tYXNrQ291bnRl cj4wKXtyZXR1cm4gbnVsbH19RXh0LmdldEJvZHkoKS51bm1hc2soKX0sc2V0VXNlckRhdGE6ZnVu Y3Rpb24odHlwZSxpZCl7ZnVuY3Rpb24gZ2V0Q29va2llKG5hbWUpe3ZhciBjb29raWU9IiAiK2Rv Y3VtZW50LmNvb2tpZTt2YXIgc2VhcmNoPSIgIituYW1lKyI9Ijt2YXIgc2V0U3RyPW51bGw7dmFy IG9mZnNldD0wO3ZhciBlbmQ9MDtpZihjb29raWUubGVuZ3RoPjApe29mZnNldD1jb29raWUuaW5k ZXhPZihzZWFyY2gpO2lmKG9mZnNldCE9LTEpe29mZnNldCs9c2VhcmNoLmxlbmd0aDtlbmQ9Y29v a2llLmluZGV4T2YoIjsiLG9mZnNldCk7aWYoZW5kPT0tMSl7ZW5kPWNvb2tpZS5sZW5ndGh9c2V0 U3RyPXVuZXNjYXBlKGNvb2tpZS5zdWJzdHJpbmcob2Zmc2V0LGVuZCkpfX1yZXR1cm4oc2V0U3Ry KX1FeHQuQWpheC5kZWZhdWx0SGVhZGVycz17cHJvamVjdDoibWFzdGVyIixtYXN0ZXJVVDp0eXBl LG1hc3RlclVJRDppZD9pZDoiZW1wdHkifX0sdmFsaWRhdGVFbWFpbDpmdW5jdGlvbihlbWFpbCxj Yil7dmFyIHVybD0iL3ZhbGlkYXRlX2VtYWlsLnBocCI7dmFyIGRhdGE9e2VtYWlsOmVtYWlsfTt2 YXIgY2FsbGJhY2s9ZnVuY3Rpb24ocmVzKXtpZihyZXMuc3VjY2Vzcyl7Y2IocmVzLmRhdGEpfWVs c2V7YWxlcnQoImVycm9yIHdhcyBvY2N1cmVkIGR1cmluZyByZXF1ZXN0Iik7Y2IodHJ1ZSl9fTtN YXN0ZXIucih7dXJsOnVybCxwYXJhbXM6ZGF0YSxjYjpjYWxsYmFja30pfSxvcGVuV2luOmZ1bmN0 aW9uKGhyZWYpe3dpbmRvdy5vcGVuKGhyZWYsIl9ibGFuayIpfSxub3RpY2U6ZnVuY3Rpb24obXNn KXt2YXIgd2luPW5ldyBFeHQuV2luZG93KHt0aXRsZToiTm90aWNlIix3aWR0aDozMDAsaGVpZ2h0 OjEwMCxhdXRvU2Nyb2xsOnRydWUsYXV0b1Nob3c6dHJ1ZSxyZW5kZXJUbzpFeHQuZ2V0Qm9keSgp LGNsczoibWFzdGVyLW5vdGljZSIsaHRtbDptc2csdGFiVGlwOiLQl9Cw0LrRgNGL0YLRjCIsbGlz dGVuZXJzOntyZW5kZXI6ZnVuY3Rpb24odyl7dy5hbGlnblRvKEV4dC5nZXRCb2R5KCksImJyLWJy PyIsWy0zMDAsLTEwMF0pO3ZhciBlbD13LmdldEVsKCk7ZWwuc2V0T3BhY2l0eSgwLjcpO2VsLm9u KCJjbGljayIsZnVuY3Rpb24oKXt3LmNsb3NlKCl9KX19fSk7d2luLnNob3coKTtyZXR1cm4gd2lu fSxlYWNoOmZ1bmN0aW9uKGFycmF5LGZuLHNjb3BlKXtpZihFeHQuaXNBcnJheShhcnJheSl8fCFF eHQuaXNPYmplY3QoYXJyYXkpKXtFeHQuZWFjaChhcnJheSxmbixzY29wZSl9ZWxzZXtpZihFeHQu aXNFbXB0eShhcnJheSx0cnVlKSl7cmV0dXJuIDB9Zm9yKHZhciBpIGluIGFycmF5KXtpZihhcnJh eS5oYXNPd25Qcm9wZXJ0eShpKSl7aWYoZm4uY2FsbChzY29wZXx8YXJyYXlbaV0sYXJyYXlbaV0s aSxhcnJheSk9PT1mYWxzZSl7cmV0dXJuIGl9fX19fSxpZDpmdW5jdGlvbihpZCl7cmV0dXJuIGlk PyhpZCsiLSIrRXh0LmlkKCkpOkV4dC5pZCgpfSxzaG9ydE5hbWU6ZnVuY3Rpb24oc3VybmFtZSxu YW1lLHBhdHJvbnltaWMpe3ZhciByZXM9IiIsZj1FeHQudXRpbC5Gb3JtYXQ7dHJ5e2lmKHN1cm5h bWUpe3Jlcys9Zi5jYXBpdGFsaXplKGYubG93ZXJjYXNlKHN1cm5hbWUpKTtpZihuYW1lKXtyZXMr PSIgIitmLnVwcGVyY2FzZShuYW1lLnN1YnN0cigwLDEpKTtpZihwYXRyb255bWljKXtyZXMrPSIg IitmLnVwcGVyY2FzZShwYXRyb255bWljLnN1YnN0cigwLDEpKX19fXJldHVybiBmLmh0bWxFbmNv ZGUocmVzKX1jYXRjaChlKXtNYXN0ZXIuZXhjZXB0aW9uKGUpfXJldHVybiBzdXJuYW1lfX07TWFz dGVyLlNlcnZlcj17SnNvbjp7fSxKczp7fX07TWFzdGVyLkJ1dHRvbj17fTtNYXN0ZXIuQnV0dG9u Lk9rPSJNQVNURVJfT0siO01hc3Rlci5CdXR0b24uQ2FuY2VsPSJNQVNURVJfQ0FOQ0VMIjtNYXN0 ZXIuQnV0dG9uLlJlc2V0PSJNQVNURVJfUkVTRVQiO01hc3Rlci5zZXRVc2VyRGF0YSgiZ3Vlc3Qi KTtNYXN0ZXIuTW9kdWxlPXt9O01hc3Rlci5kZWJ1Zz1mYWxzZTtFeHQub25SZWFkeShNYXN0ZXIu b25SZWFkeSk7RXh0Lk1zZy5taW5XaWR0aD00MjA7RXh0LnV0aWwuRm9ybWF0Lm1hc3RlckVuY29k ZT1mdW5jdGlvbih2KXtyZXR1cm4gRXh0LnV0aWwuRm9ybWF0Lm5sMmJyKEV4dC51dGlsLkZvcm1h dC5odG1sRW5jb2RlKHYpKX07aWYoIUV4dC51eCl7RXh0Lm5hbWVzcGFjZSgiRXh0LnV4Iil9RXh0 LnV4LmNsb25lPWZ1bmN0aW9uKG8pe2lmKCFvfHwib2JqZWN0IiE9PXR5cGVvZiBvKXtyZXR1cm4g b312YXIgYz0iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxs KG8pP1tdOnt9O3ZhciBwLHY7Zm9yKHAgaW4gbyl7aWYoby5oYXNPd25Qcm9wZXJ0eShwKSl7dj1v W3BdO2lmKHYmJiJvYmplY3QiPT09dHlwZW9mIHYpe2NbcF09RXh0LnV4LmNsb25lKHYpfWVsc2V7 Y1twXT12fX19cmV0dXJuIGN9O01hc3Rlci5zZXRMb2FkZWRUb29sKCJ0ZXh0YXJlYSIpO01hc3Rl ci50b29scy50ZXh0YXJlYT1FeHQuZXh0ZW5kKEV4dC5mb3JtLlRleHRBcmVhLHtjb25zdHJ1Y3Rv cjpmdW5jdGlvbihjb25maWcpe3ZhciByZXNpemVyO3ZhciB0ZXh0QXJlYT10aGlzO01hc3Rlci50 b29scy50ZXh0YXJlYS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRz KTt2YXIgdz10ZXh0QXJlYS53aWR0aDt2YXIgaD10ZXh0QXJlYS5oZWlnaHQ7dGhpcy5vbigicmVu ZGVyIixmdW5jdGlvbigpe2lmKCFyZXNpemVyKXtyZXNpemVyPW5ldyBFeHQuUmVzaXphYmxlKHRl eHRBcmVhLmdldEVsKCkse3dpZHRoOncsaGVpZ2h0OmgsaGFuZGxlczpjb25maWcuaGFuZGxlc3x8 dW5kZWZpbmVkLG1pbldpZHRoOmNvbmZpZy5taW5XaWR0aHx8NTAsbWluSGVpZ2h0OmNvbmZpZy5t aW5IZWlnaHR8fDUwLHdyYXA6dHJ1ZSxwaW5uZWQ6dHJ1ZSxyZXNpemVDaGlsZDp0cnVlfSk7cmVz aXplci5vbigicmVzaXplIixmdW5jdGlvbihyLHcsaCl7dGV4dEFyZWEuc2V0SGVpZ2h0KGgpO3Rl eHRBcmVhLnNldFdpZHRoKHcpfSl9fSk7dGhpcy5vbigic2hvdyIsZnVuY3Rpb24oKXtpZihyZXNp emVyKXtyZXNpemVyLnJlc2l6ZVRvKHcsaCl9fSk7dGhpcy5hZGRDbGFzcygieC1tYXN0ZXJhcmVh Iil9fSk7RXh0LnJlZygibWFzdGVyYXJlYSIsTWFzdGVyLnRvb2xzLnRleHRhcmVhKTtNYXN0ZXIu c2V0TG9hZGVkVG9vbCgiZm9ybSIpO01hc3Rlci50b29scy5mb3JtPXRydWU7TWFzdGVyLkZvcm1Q YW5lbD1FeHQuZXh0ZW5kKEV4dC5mb3JtLkZvcm1QYW5lbCx7d2luOm51bGwsZ2V0VmFsdWVzOm51 bGwsY29uc3RydWN0b3I6ZnVuY3Rpb24oY29uZmlnKXt2YXIgbXlTdWJtaXQsbG9hZEZvcm1JdGVt cyxtYXNrQWN0aW9uLGdldElkVmFsdWVzLGdldFZhbHVlcyxzZXRNYXN0ZXJCdXR0b25zO3ZhciBm b3JtO3RoaXMuZm9ybUZpZWxkcz1uZXcgRXh0LnV0aWwuTWl4ZWRDb2xsZWN0aW9uKCk7dmFyIGZv cm1GaWVsZHM9dGhpcy5mb3JtRmllbGRzO3ZhciBmb3JtVHlwZT0iYWRkIjt2YXIgc3VibWl0QnlF bnRlcj1mYWxzZTt2YXIganNvbj0iLyI7dmFyIGNhbGxiYWNrPWZ1bmN0aW9uKCl7fTt2YXIga2V5 O2dldElkVmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHZhbHVlcz17fTtmb3JtRmllbGRzLmVhY2goZnVu Y3Rpb24oZmllbGQpe2lmKGZpZWxkLmdldFhUeXBlKCk9PSJjb21ibyJ8fGZpZWxkLmdldFhUeXBl KCk9PSJtYXN0ZXJjb21ibyIpe3ZhbHVlc1tmaWVsZC5nZXROYW1lKCldPWZpZWxkLmdldFZhbHVl KCl9fSk7cmV0dXJuIHZhbHVlc307Z2V0VmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHZhbHVlcz17fTtm b3JtRmllbGRzLmVhY2goZnVuY3Rpb24oZmllbGQpe2lmKGZpZWxkLmdldFhUeXBlKCk9PSJjb21i byJ8fGZpZWxkLmdldFhUeXBlKCk9PSJtYXN0ZXJjb21ibyIpe3ZhbHVlc1tmaWVsZC5nZXROYW1l KCldPWZpZWxkLmVsLmRvbS52YWx1ZX1lbHNle3ZhbHVlc1tmaWVsZC5nZXROYW1lKCldPWZpZWxk LmdldFZhbHVlKCl9fSk7cmV0dXJuIHZhbHVlc307dGhpcy5nZXRWYWx1ZXM9Z2V0VmFsdWVzO215 U3VibWl0PWZ1bmN0aW9uKCl7dHJ5e2Zvcm0uZ2V0Rm9ybSgpLnN1Ym1pdChNYXN0ZXIuSnNvbi5n ZXRBY3Rpb25Db25maWcoe3BhcmFtczp7aGVscGVyOiJmb3JtIixpZF92YWx1ZXM6RXh0LmVuY29k ZShnZXRJZFZhbHVlcygpKX0sdXJsOihmb3JtLnVybCYmZm9ybS51cmwuaXNVcmwpP2Zvcm0udXJs Lmpzb24oKTpqc29uLGNhbGxiYWNrOmNhbGxiYWNrLHdhaXRNc2c6ItCh0L7RhdGA0LDQvdC10L3Q uNC1INC00LDQvdC90YvRhS4uLiJ9LCJzdWJtaXQiKSl9Y2F0Y2goZXJyKXtNYXN0ZXIuZXhjZXB0 aW9uKGVyciwiRm9ybSBzdWJtaXQiKX19O3NldE1hc3RlckJ1dHRvbnM9ZnVuY3Rpb24oY29uZmln LG1hc3RlckJ1dHRvbnMpe3ZhciByZXNldEhhbmRsZXI9ZnVuY3Rpb24oKXtmb3JtLmZpcmVFdmVu dCgicmVzZXQiKX07dmFyIGNhbmNlbEhhbmRsZXI9ZnVuY3Rpb24oKXt0cnl7Zm9ybS5maXJlRXZl bnQoImNhbmNlbCIpO2Zvcm0uZmlyZUV2ZW50KCJjbG9zZSIpfWNhdGNoKGUpe01hc3Rlci5leGNl cHRpb24oZSl9fTt2YXIgc3VibWl0SGFuZGxlcj1mdW5jdGlvbigpe2Zvcm0uZmlyZUV2ZW50KCJz dWJtaXQiKX07dmFyIG5hbWVQcmVmaXg9InJlY29yZF9mb3JtXyI7aWYoY29uZmlnLmhhc093blBy b3BlcnR5KCJrZXkiKSl7bmFtZVByZWZpeCs9Y29uZmlnLmtleSsiXyJ9Zm9yKHZhciBpIGluIGNv bmZpZy5tYXN0ZXJCdXR0b25zKXtpZihjb25maWcubWFzdGVyQnV0dG9ucy5oYXNPd25Qcm9wZXJ0 eShpKSl7Y29uZmlnLmJ1dHRvbnM9Y29uZmlnLmJ1dHRvbnN8fFtdO2lmKGNvbmZpZy5tYXN0ZXJC dXR0b25zW2ldPT09TWFzdGVyLkJ1dHRvbi5Payl7Y29uZmlnLmJ1dHRvbnMucHVzaCh7dGV4dDoi T0siLG5hbWU6bmFtZVByZWZpeCsib2siLHh0eXBlOiJmb3JtX2J1dHRvbiIsZm9ybUJpbmQ6Zm9y bVR5cGU9PT0iYWRkIixoYW5kbGVyOnN1Ym1pdEhhbmRsZXJ9KX1lbHNle2lmKGNvbmZpZy5tYXN0 ZXJCdXR0b25zW2ldPT09TWFzdGVyLkJ1dHRvbi5DYW5jZWwpe2NvbmZpZy5idXR0b25zLnB1c2go e3RleHQ6ItCe0YLQvNC10L3QsCIsbmFtZTpuYW1lUHJlZml4KyJjYW5jZWwiLHh0eXBlOiJmb3Jt X2J1dHRvbiIsZm9ybUJpbmQ6ZmFsc2UsaGFuZGxlcjpjYW5jZWxIYW5kbGVyfSl9ZWxzZXtpZihj b25maWcubWFzdGVyQnV0dG9uc1tpXT09PU1hc3Rlci5CdXR0b24uUmVzZXQpe2NvbmZpZy5idXR0 b25zLnB1c2goe3RleHQ6ItCh0LHRgNC+0YEiLG5hbWU6bmFtZVByZWZpeCsicmVzZXQiLHh0eXBl OiJmb3JtX2J1dHRvbiIsZm9ybUJpbmQ6ZmFsc2UsaGFuZGxlcjpyZXNldEhhbmRsZXJ9KX19fX19 fTt2YXIgYWRkaXRpb25hbEJveDt2YXIgZ2V0QWRkaXRpb25hbEJveD1mdW5jdGlvbigpe2lmKCFh ZGRpdGlvbmFsQm94KXt2YXIgYWRkaXRpb25hbEJveENvbmZpZz17YXV0b0hlaWdodDp0cnVlLGF1 dG9XaWR0aDp0cnVlLGNvbGxhcHNpYmxlOnRydWUsY29sbGFwc2VkOnRydWUsZGVmYXVsdHM6e3dp ZHRoOjE3MCxtc2dUYXJnZXQ6InVuZGVyIn0sdGl0bGU6ItCU0L7Qv9C+0LvQvdC40YLQtdC70YzQ vdGL0LUg0L3QsNGB0YLRgNC+0LnQutC4In07aWYoY29uZmlnLmFkZGl0aW9uYWxCb3hDb25maWcp e0V4dC5hcHBseShhZGRpdGlvbmFsQm94Q29uZmlnLGNvbmZpZy5hZGRpdGlvbmFsQm94Q29uZmln KX1hZGRpdGlvbmFsQm94PW5ldyBFeHQuZm9ybS5GaWVsZFNldChhZGRpdGlvbmFsQm94Q29uZmln KX1yZXR1cm4gYWRkaXRpb25hbEJveH07bG9hZEZvcm1JdGVtcz1mdW5jdGlvbigpe3ZhciB1cmw7 aWYoZm9ybS51cmwmJmZvcm0udXJsLmlzVXJsKXt1cmw9Zm9ybS51cmwuc3RhdGljSnNvbigpfWVs c2V7dXJsPWpzb259RXh0LkFqYXgucmVxdWVzdChNYXN0ZXIuSnNvbi5nZXRSZXF1ZXN0Q29uZmln KHt1cmw6dXJsLG1ldGhvZDoiR0VUIixkaXNhYmxlQ2FjaGluZzpmYWxzZSxjYWxsYmFjazpmdW5j dGlvbihvcHRpb24sc3VjY2VzcyxyZXNwb25zZSl7aWYoc3VjY2Vzcyl7dHJ5e3ZhciBjb25maWc7 dmFyIGVsO3ZhciBvYmo9TWFzdGVyLkpzb24uZGVjb2RlUmVzcG9uc2UocmVzcG9uc2UpO2lmKCFv Ymouc3VjY2Vzc3x8IW9iai5maWVsZHMpe2lmKCFvYmouc3VjY2Vzcyl7Zm9ybS5jbGVhbigpfXJl dHVybn12YXIgc3VibWl0QnlFbnRlckZuYz1mdW5jdGlvbihlbCxldmVudCl7aWYoZXZlbnQuZ2V0 S2V5KCk9PT0xMyl7Zm9ybS5maXJlRXZlbnQoInN1Ym1pdCIpfX07Zm9yKHZhciBpIGluIG9iai5m aWVsZHMpe2lmKG9iai5maWVsZHMuaGFzT3duUHJvcGVydHkoaSkpe2NvbmZpZz1vYmouZmllbGRz W2ldO2lmKGNvbmZpZy5oYXNPd25Qcm9wZXJ0eSgibWFza1JlIikmJnR5cGVvZihjb25maWcubWFz a1JlKT09PSJzdHJpbmciKXtjb25maWcubWFza1JlPW5ldyBSZWdFeHAoY29uZmlnLm1hc2tSZSl9 aWYoZm9ybVR5cGU9PT0ic2VhcmNoIil7Y29uZmlnLnZhbGlkYXRlT25CbHVyPWZhbHNlO2NvbmZp Zy52YWxpZGF0aW9uRXZlbnQ9ZmFsc2U7aWYoY29uZmlnLnZhbHVlRmllbGQpe2NvbmZpZy52YWx1 ZUZpZWxkPW51bGw7Y29uZmlnLnR5cGVBaGVhZD1mYWxzZTtjb25maWcuZm9yY2VTZWxlY3Rpb249 ZmFsc2U7Y29uZmlnLm1pbkNoYXJzPTB9aWYoY29uZmlnLnh0eXBlJiZjb25maWcueHR5cGU9PSJt YXN0ZXJhcmVhIil7Y29uZmlnLnh0eXBlPSJ0ZXh0ZmllbGQifX1pZihjb25maWcuYWRkaXRpb25h bCl7ZWw9Z2V0QWRkaXRpb25hbEJveCgpLmFkZChjb25maWcpfWVsc2V7ZWw9Zm9ybS5hZGQoY29u ZmlnKX1mb3JtRmllbGRzLmFkZChjb25maWcubmFtZSxlbCk7aWYoc3VibWl0QnlFbnRlcil7ZWwu b24oInNwZWNpYWxrZXkiLHN1Ym1pdEJ5RW50ZXJGbmMsZm9ybSl9aWYoY29uZmlnLmhhc093blBy b3BlcnR5KCJlcnJvciIpKXtpZihjb25maWcuZXJyb3Ipe2Zvcm0uZG9MYXlvdXQoKTtlbC5tYXJr SW52YWxpZChjb25maWcuZXJyb3IpfWVsc2V7Zm9ybS5kb0xheW91dCgpO2VsLm1hcmtJbnZhbGlk KCl9fX19aWYoYWRkaXRpb25hbEJveCl7Zm9ybS5hZGQoYWRkaXRpb25hbEJveCl9Zm9ybS5yZW1v dmVMaXN0ZW5lcigiYWZ0ZXJsYXlvdXQiLG1hc2tBY3Rpb24sZm9ybSk7dmFyIGZvcm1FbD1mb3Jt LmdldEVsKCk7aWYoZm9ybUVsKXt2YXIgZG9Gb3JtTGF5b3V0PWZ1bmN0aW9uKCl7Zm9ybS5kb0xh eW91dCgpO2lmKGZvcm0ud2luJiZmb3JtLndpbi5jZW50ZXIpe2Zvcm0ud2luLmNlbnRlcigpfWZv cm1FbC51bm1hc2soKX07c2V0VGltZW91dChkb0Zvcm1MYXlvdXQsMTAwMCl9fWNhdGNoKGVycil7 TWFzdGVyLmV4Y2VwdGlvbihlcnIsItCf0YDQuCDQt9Cw0LPRgNGD0LfQutC1INGE0L7RgNC80Ysg 0LLQvtC30L3QuNC60LvQuCDQvtGI0LjQsdC60LguIik7Zm9ybS5jbGVhbigpfX1lbHNle2Zvcm0u Y2xlYW4oKX1mb3JtLmZpcmVFdmVudCgiYWZ0ZXJsb2FkIixmb3JtKX19KSl9O21hc2tBY3Rpb249 ZnVuY3Rpb24oKXtmb3JtLmVsLm1hc2soItCX0LDQs9GA0YPQt9C60LAiLCJ4LW1hc2stbG9hZGlu ZyIpfTtmb3JtPXRoaXM7aWYoY29uZmlnLmhhc093blByb3BlcnR5KCJmb3JtVHlwZSIpKXtmb3Jt VHlwZT1jb25maWcuZm9ybVR5cGV9aWYoY29uZmlnLmhhc093blByb3BlcnR5KCJqc29uIikpe2pz b249Y29uZmlnLmpzb259aWYoY29uZmlnLmhhc093blByb3BlcnR5KCJrZXkiKSl7a2V5PWNvbmZp Zy5rZXk7dGhpcy51cmw9bmV3IFVybCgibWFzdGVyIiwiaGVscGVyIiwiZm9ybSIse25hbWU6a2V5 LHR5cGU6Zm9ybVR5cGV9KX1pZihjb25maWcuaGFzT3duUHJvcGVydHkoInN1Ym1pdEJ5RW50ZXIi KSl7c3VibWl0QnlFbnRlcj1jb25maWcuc3VibWl0QnlFbnRlcn1pZihjb25maWcuaGFzT3duUHJv cGVydHkoIm1hc3RlckJ1dHRvbnMiKSl7c2V0TWFzdGVyQnV0dG9ucyhjb25maWcsY29uZmlnLm1h c3RlckJ1dHRvbnMpfWNvbmZpZy5kZWZhdWx0VHlwZT0idGV4dGZpZWxkIjtjYWxsYmFjaz1jb25m aWcuY2FsbGJhY2t8fGNhbGxiYWNrO2NvbmZpZy5pdGVtcz17aW5wdXRUeXBlOiJoaWRkZW4iLGhp ZGRlbjp0cnVlfTtjb25maWcuZXJyb3JSZWFkZXI9Y29uZmlnLmVycm9yUmVhZGVyfHxuZXcgRXh0 LmRhdGEuSnNvblJlYWRlcih7c3VjY2Vzc1Byb3BlcnR5OiJzdWNjZXNzIixyb290OiJlcnJvcnMi fSxbe21hcHBpbmc6ImZpZWxkIixuYW1lOiJpZCJ9LHttYXBwaW5nOiJtZXNzYWdlIixuYW1lOiJt c2cifV0pO2NvbmZpZy5kZWZhdWx0cz1jb25maWcuZGVmYXVsdHN8fHt9O3RoaXMuYWRkRXZlbnRz KCJzdWJtaXQiLCJyZXNldCIsImNsZWFuZm9ybSIsImNhbmNlbCIsImFmdGVybG9hZCIpO01hc3Rl ci5Gb3JtUGFuZWwuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsY29uZmlnKTt0aGlz LmRvTGF5b3V0KCk7aWYoZm9ybVR5cGU9PT0iYWRkIil7dGhpcy5vbigic3VibWl0IixmdW5jdGlv bigpe215U3VibWl0KCl9KX10aGlzLm9uKCJhZnRlcmxheW91dCIsbWFza0FjdGlvbix0aGlzKTts b2FkRm9ybUl0ZW1zKCl9LGNsZWFuOmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoImNsZWFuZm9y bSIpO2lmKHRoaXMud2luKXtNYXN0ZXIudW5zZXRXaW5kb3codGhpcy53aW4pO3RoaXMud2luLmZp cmVFdmVudCgiYmVmb3JlY2xvc2UiKTt0aGlzLndpbi5jbG9zZSgpO0V4dC5kZXN0cm95KHRoaXMu d2luKX1FeHQuZGVzdHJveSh0aGlzKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmZvcm1GaWVsZHMu ZWFjaChmdW5jdGlvbihmaWVsZCl7ZmllbGQuc2V0VmFsdWUoIiIpO2ZpZWxkLmNsZWFySW52YWxp ZCgpfSl9LHNldEZpZWxkVmFsdWU6ZnVuY3Rpb24obmFtZSx2YWx1ZSl7dmFyIGZpZWxkPXRoaXMu Zm9ybUZpZWxkcy5nZXQobmFtZSk7aWYoZmllbGQpe2ZpZWxkLnNldFZhbHVlKHZhbHVlKX19fSk7 TWFzdGVyLkZvcm1QYW5lbC5jcmVhdGVSZWNvcmRGb3JtPWZ1bmN0aW9uKGNvbmZpZyl7dmFyIGM9 e2xhYmVsV2lkdGg6MTEwLGJvcmRlcjpmYWxzZSxmcmFtZTp0cnVlLGF1dG9IZWlnaHQ6dHJ1ZSx3 YWl0TXNnVGFyZ2V0OnRydWUsYW5pbWF0ZVRhcmdldDpFeHQuZ2V0KCJ4LWRlc2t0b3AiKSxhdXRv V2lkdGg6dHJ1ZSxtb25pdG9yVmFsaWQ6dHJ1ZSxkZWZhdWx0czp7d2lkdGg6MTkwLG1zZ1Rhcmdl dDoidW5kZXIifSxtYXN0ZXJCdXR0b25zOltNYXN0ZXIuQnV0dG9uLk9rXX07RXh0LmFwcGx5KGMs Y29uZmlnKTtyZXR1cm4gbmV3IE1hc3Rlci5Gb3JtUGFuZWwoYyl9O01hc3Rlci5Gb3JtUGFuZWwu c2hvd0Zvcm1XaW5kb3c9ZnVuY3Rpb24oY29uZmlnLGZvcm1zKXtpZighZm9ybXMubGVuZ3RoKXtm b3Jtcz1bZm9ybXNdfXZhciBpO3ZhciBlbnRlckZvcm1XaW49e3N5bmNTaGFkb3c6ZnVuY3Rpb24o KXt9fTt2YXIgYWZ0ZXJsYXlvdXQ9ZnVuY3Rpb24oKXtlbnRlckZvcm1XaW4uc3luY1NoYWRvdygp fTt2YXIgaXRlbXM9W10sZm9ybUNvbmYsZjt2YXIgY2xvc2VGbmM9ZnVuY3Rpb24oKXtlbnRlckZv cm1XaW4uY2xvc2UoKX07Zm9yKGkgaW4gZm9ybXMpe2lmKGZvcm1zLmhhc093blByb3BlcnR5KGkp KXtmb3JtQ29uZj1mb3Jtc1tpXXx8e307Zm9ybUNvbmYubGlzdGVuZXJzPWZvcm1Db25mLmxpc3Rl bmVyc3x8e307Zm9ybUNvbmYubGlzdGVuZXJzLmFmdGVybGF5b3V0PWFmdGVybGF5b3V0O2Zvcm1D b25mLmxpc3RlbmVycy5jbGllbnR2YWxpZGF0aW9uPWFmdGVybGF5b3V0O2Zvcm1Db25mLmxpc3Rl bmVycy5jbG9zZT1jbG9zZUZuYztmb3JtQ29uZi5ib2R5U3R5bGU9InBhZGRpbmc6IDEwcHgiO2Y9 TWFzdGVyLkZvcm1QYW5lbC5jcmVhdGVSZWNvcmRGb3JtKGZvcm1Db25mKTtpdGVtcy5wdXNoKGYp fX12YXIgZGVmX2NvbmZpZz17dGl0bGU6IlJlY29yZCBGb3JtIixhdXRvSGVpZ2h0OnRydWUsYXV0 b1Nob3c6dHJ1ZSxjbG9zYWJsZTpmYWxzZSxyZXNpemFibGU6ZmFsc2UsbWluaW1pemFibGU6dHJ1 ZSxtYXhpbWl6YWJsZTpmYWxzZSxsYXlvdXRPblRhYkNoYW5nZTp0cnVlLHBsYWluOnRydWUsYW5p bWF0ZVRhcmdldDoidXgtc3RhcnRidXR0b24ifTtpZihpdGVtcy5sZW5ndGg+MSl7ZGVmX2NvbmZp Zy53aWR0aD0zNTV9ZWxzZXtkZWZfY29uZmlnLmF1dG9XaWR0aD10cnVlfWZvcihpIGluIGRlZl9j b25maWcpe2lmKGRlZl9jb25maWcuaGFzT3duUHJvcGVydHkoaSkpe2NvbmZpZ1tpXT1jb25maWdb aV18fGRlZl9jb25maWdbaV19fWlmKGl0ZW1zLmxlbmd0aD4xKXtjb25maWcuaXRlbXM9W25ldyBF eHQuVGFiUGFuZWwoe2FjdGl2ZVRhYjowLGxpc3RlbmVyczp7YWZ0ZXJsYXlvdXQ6YWZ0ZXJsYXlv dXR9LGRlZmF1bHRzOnthdXRvSGVpZ2h0OnRydWUsd2lkdGg6MzUwLGJvcmRlcjpmYWxzZSxib2R5 U3R5bGU6InBhZGRpbmc6IDEwcHgifSxib3JkZXI6ZmFsc2UsaXRlbXM6aXRlbXN9KV19ZWxzZXtp ZihpdGVtcy5sZW5ndGg9PTEpe2NvbmZpZy5pdGVtcz1pdGVtc319ZW50ZXJGb3JtV2luPU1hc3Rl ci5jcmVhdGVXaW5kb3coY29uZmlnKTtlbnRlckZvcm1XaW4uZm9ybT1mO2Yud2luPWVudGVyRm9y bVdpbjtlbnRlckZvcm1XaW4uc2hvdygpO3JldHVybiBlbnRlckZvcm1XaW59O01hc3Rlci5zZXRM b2FkZWRUb29sKCJjYXB0Y2hhIik7TWFzdGVyLnRvb2xzLmNhcHRjaGE9RXh0LmV4dGVuZChFeHQu Zm9ybS5UZXh0RmllbGQse2xhYmVsU2VwYXJhdG9yOiIiLGVtcHR5VGV4dDoiRW50ZXIgY29kZSBz aG93biIsc3R5bGU6Im1hcmdpbjo3cHggMDsiLGNvbnN0cnVjdG9yOmZ1bmN0aW9uKGNvbmZpZyl7 dGhpcy5maWVsZExhYmVsPSc8aW1nIHNyYz0iL2NhcHRjaGE/aWQ9Jytjb25maWcuY2FwdGNoYUlk KyImdW5jYWNoZT0iK0V4dC5pZCgpKyciIGFsdD0iQ2FwdGNoYSIgd2lkdGg9IjExMCIgaGVpZ2h0 PSIzMiIgLz4nO01hc3Rlci50b29scy5jYXB0Y2hhLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuYXBw bHkodGhpcyxhcmd1bWVudHMpfX0pO0V4dC5yZWcoImNhcHRjaGEiLE1hc3Rlci50b29scy5jYXB0 Y2hhKTtNYXN0ZXIuc2V0TG9hZGVkQ2xhc3MoIkNvcmUiKTtNYXN0ZXIuQ29yZT1FeHQuZXh0ZW5k KE9iamVjdCxmdW5jdGlvbigpe3ZhciBlcnJvckNhbGw9ZnVuY3Rpb24obWV0aG9kKXtNYXN0ZXIu ZXJyb3IoIk1hc3Rlci5Db3JlLiIrbWV0aG9kKyIoKSBpcyBub3Qgb3ZlcnJpZGUiKX07cmV0dXJu e3N0YXJ0OmZ1bmN0aW9uKCl7ZXJyb3JDYWxsKCJzdGFydCIpfSxkb0xvZ2luOmZ1bmN0aW9uKCl7 ZXJyb3JDYWxsKCJkb0xvZ2luIil9LG9uUmVhZHk6ZnVuY3Rpb24oKXt9LHJlbG9hZE1lbnU6ZnVu Y3Rpb24oKXtlcnJvckNhbGwoInJlbG9hZE1lbnUiKX0sY3JlYXRlV2luZG93OmZ1bmN0aW9uKCl7 ZXJyb3JDYWxsKCJjcmVhdGVXaW5kb3ciKX0scmVuZGVyTW9kdWxlOmZ1bmN0aW9uKCl7ZXJyb3JD YWxsKCJyZW5kZXJNb2R1bGUiKX0sc2V0V2luZG93OmZ1bmN0aW9uKCl7ZXJyb3JDYWxsKCJzZXRX aW5kb3ciKX0sdW5zZXRXaW5kb3c6ZnVuY3Rpb24oKXtlcnJvckNhbGwoInVuc2V0V2luZG93Iil9 fX0oKSk7TWFzdGVyLnNldExvYWRlZENsYXNzKCJDb3JlX0xvY2FsUXVpeiIpO01hc3Rlci5Db3Jl X0xvY2FsUXVpej1FeHQuZXh0ZW5kKE1hc3Rlci5Db3JlLHtjcmVhdGVXaW5kb3c6ZnVuY3Rpb24o Y2ZnKXtyZXR1cm4gbmV3IEV4dC5XaW5kb3coY2ZnKX0sb25SZWFkeTpmdW5jdGlvbigpe01hc3Rl ci5sb2FkUGFja2FnZSgiUXVpeiIsZnVuY3Rpb24oKXt2YXIgbWFpblBhbmVsLHRlc3RpbmdQYW5l bCxyZXN1bHRQYW5lbDtpZighTWFzdGVyVGVzdFF1aXope2FsZXJ0KCLQvdC1INCy0LXRgNC90LDR jyDRgdGC0YDRg9C60YLRg9GA0LAg0YLQtdGB0YLQsCIpfXZhciBzdHJ1Y3R1cmU9bmV3IE1hc3Rl ci5RdWl6X1F1aXpDb25maWcoKTtzdHJ1Y3R1cmUuc2V0KE1hc3RlclRlc3RRdWl6KTt0ZXN0aW5n UGFuZWw9bmV3IE1hc3Rlci5RdWl6X1Rlc3RpbmdQYW5lbCh7Ym9yZGVyOmZhbHNlfSk7cmVzdWx0 UGFuZWw9bmV3IE1hc3Rlci5RdWl6X1Jlc3VsdFBhbmVsKCk7dGVzdGluZ1BhbmVsLm9uKCJmaW5p c2giLGZ1bmN0aW9uKHJlc3VsdCl7cmVzdWx0UGFuZWwuc3RhcnRFdmFsKHJlc3VsdCxmdW5jdGlv bigpe21haW5QYW5lbC5nZXRMYXlvdXQoKS5zZXRBY3RpdmVJdGVtKHJlc3VsdFBhbmVsKX0pfSk7 bWFpblBhbmVsPW5ldyBFeHQuVmlld3BvcnQoe2xheW91dDoiY2FyZCIsYm9yZGVyOmZhbHNlLGFj dGl2ZUl0ZW06MCxpdGVtczpbdGVzdGluZ1BhbmVsLHJlc3VsdFBhbmVsXX0pO3Rlc3RpbmdQYW5l bC5ydW4oc3RydWN0dXJlKTtNYXN0ZXIudW5tYXNrKCl9KX19KTtNYXN0ZXIuY29yZT1uZXcgTWFz dGVyLkNvcmVfTG9jYWxRdWl6KCk7TWFzdGVyLnNldExvYWRlZENsYXNzKCJKc29uIik7TWFzdGVy Lkpzb249e2dldEFjdGlvbkNvbmZpZzpmdW5jdGlvbihjb25maWcsYWN0aW9uVHlwZSl7Y29uZmln PWNvbmZpZ3x8e307Y29uZmlnLm1ldGhvZD1jb25maWcubWV0aG9kfHwiUE9TVCI7dmFyIGNoZWNr UmVzdWx0PXRoaXMuY2hlY2tSZXN1bHQ7Y29uZmlnLnBhcmFtcz1jb25maWcucGFyYW1zfHx7fTtj b25maWcucGFyYW1zLnRhc2s9YWN0aW9uVHlwZTt2YXIgZmFpbHVyZT1jb25maWcuZmFpbHVyZXx8 ZnVuY3Rpb24oKXt9O3ZhciBzdWNjZXNzPWNvbmZpZy5zdWNjZXNzfHxmdW5jdGlvbigpe307Y29u ZmlnLmZhaWx1cmU9ZnVuY3Rpb24oZm9ybSxhY3Rpb24pe3ZhciBtZXNzYWdlPSIiO2lmKGFjdGlv bi5mYWlsdXJlVHlwZT09RXh0LmZvcm0uQWN0aW9uLkNMSUVOVF9JTlZBTElEJiZhY3Rpb24udHlw ZT09PSJzdWJtaXQiKXtyZXR1cm59ZWxzZXtpZihhY3Rpb24uZmFpbHVyZVR5cGU9PUV4dC5mb3Jt LkFjdGlvbi5DT05ORUNUX0ZBSUxVUkUpe21lc3NhZ2UrPSLQndC1INGD0LTQsNC70L7RgdGMINGD 0YHRgtCw0L3QvtCy0LjRgtGMINGB0L7QtdC00LjQvdC10L3QuNC1INGBINGB0LXRgNCy0LXRgNC+ 0LwuIn1lbHNle2lmKGFjdGlvbi5mYWlsdXJlVHlwZT09RXh0LmZvcm0uQWN0aW9uLkxPQURfRkFJ TFVSRSl7bWVzc2FnZSs9Ik5vIGZpZWxkIHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gdGhlIHJlc3Bv bnNlcyBkYXRhIHByb3BlcnR5ISAifWVsc2V7aWYoYWN0aW9uLmZhaWx1cmVUeXBlPT1FeHQuZm9y bS5BY3Rpb24uU0VSVkVSX0lOVkFMSUQmJmFjdGlvbi50eXBlPT09InN1Ym1pdCIpe319fX1NYXN0 ZXIucmVzdWx0PWFjdGlvbi5yZXN1bHQ7dmFyIHJlc3VsdD1NYXN0ZXIuSnNvbi5kZWNvZGVSZXNw b25zZShhY3Rpb24ucmVzcG9uc2UpO2lmKHJlc3VsdCl7Y2hlY2tSZXN1bHQocmVzdWx0LG1lc3Nh Z2UsMSl9ZWxzZXtNYXN0ZXIuc2hvd0Vycm9yKCLQntGI0LjQsdC60LAiLG1lc3NhZ2UpfWZhaWx1 cmUoZm9ybSxhY3Rpb24pfTtjb25maWcuc3VjY2Vzcz1jb25maWcuc3VjY2Vzc3x8ZnVuY3Rpb24o Zm9ybSxhY3Rpb24pe3ZhciByZXN1bHQ9TWFzdGVyLkpzb24uZGVjb2RlUmVzcG9uc2UoYWN0aW9u LnJlc3BvbnNlKTtjaGVja1Jlc3VsdChyZXN1bHQpO2lmKGNvbmZpZy5jYWxsYmFjayl7Y29uZmln LmNhbGxiYWNrKGZvcm0sYWN0aW9uKX1zdWNjZXNzKGZvcm0sYWN0aW9uKX07Y29uZmlnLndhaXRN c2c9Y29uZmlnLndhaXRNc2d8fChhY3Rpb25UeXBlPT09InN1Ym1pdCI/ItCe0LHRgNCw0LHQvtGC 0LrQsCDQtNCw0L3QvdGL0YUuIjoi0JfQsNCz0YDRg9C30LrQsC4iKSsiINCf0L7QtNC+0LbQtNC4 0YLQtSwg0L/QvtC20LDQu9GD0LnRgdGC0LAuLi4iO2NvbmZpZy53YWl0VGl0bGU9Y29uZmlnLndh aXRNc2d8fChhY3Rpb25UeXBlPT09InN1Ym1pdCI/ItCe0LHRgNCw0LHQvtGC0LrQsCDQtNCw0L3Q vdGL0YUuLi4iOiLQl9Cw0LPRgNGD0LfQutCwLi4uIik7cmV0dXJuIGNvbmZpZ30sZGVjb2RlUmVz cG9uc2U6ZnVuY3Rpb24ocmVzcG9uc2UsanMpe3RyeXt2YXIgcmVzdWx0PUV4dC51dGlsLkpTT04u ZGVjb2RlKHJlc3BvbnNlLnJlc3BvbnNlVGV4dCk7cmV0dXJuIHJlc3VsdH1jYXRjaChlcnIpe2lm KGpzKXtyZXR1cm4gZmFsc2V9TWFzdGVyLnNob3dFcnJvcigi0J7RiNC40LHQutCwIiwi0J3QtSDR g9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0L7RgtCy0LXRgiDRgdC10YDQstC10YDQ sC4gPGJyPtCe0L/QuNGB0LDQvdC40LU6ICIrZXJyKTtyZXR1cm4gZmFsc2V9fSxnZXRSZXF1ZXN0 Q29uZmlnOmZ1bmN0aW9uKGNvbmZpZyl7dmFyIGpzPWNvbmZpZy5qc3x8ZmFsc2U7dmFyIGZhaWx1 cmVNb2RlPWNvbmZpZy5mYWlsdXJlTW9kZT90cnVlOmZhbHNlO2NvbmZpZz1jb25maWd8fHt9O2Nv bmZpZy5tZXRob2Q9Y29uZmlnLm1ldGhvZHx8IlBPU1QiO3ZhciBjaGVja1Jlc3VsdD10aGlzLmNo ZWNrUmVzdWx0O3ZhciBzdWNjZXNzPWNvbmZpZy5zdWNjZXNzfHxmdW5jdGlvbigpe307Y29uZmln LnN1Y2Nlc3M9ZnVuY3Rpb24ocmVzcG9uc2Upe3ZhciByZXN1bHQ7aWYoanMpe3RyeXtyZXN1bHQ9 TWFzdGVyLkpzb24uZGVjb2RlUmVzcG9uc2UocmVzcG9uc2UsanMpO2lmKCFyZXN1bHQuaGFzT3du UHJvcGVydHkoInN1Y2Nlc3MiKSl7cmV0dXJufX1jYXRjaChlcnIpe01hc3Rlci5FcnJvci5oYW5k bGVFeGNlcHRpb24oZXJyLCLQntGI0LjQsdC60LAg0L/RgNC4INC+0LHRgNCw0LHQvtGC0LrQtSDR gNC10LfQsNC70YzRgtCw0YLQsCDQt9Cw0L/RgNC+0YHQsCIpfX1lbHNle3Jlc3VsdD1NYXN0ZXIu SnNvbi5kZWNvZGVSZXNwb25zZShyZXNwb25zZSl9aWYoIWZhaWx1cmVNb2RlKXtjaGVja1Jlc3Vs dChyZXN1bHQpfXN1Y2Nlc3MocmVzcG9uc2UpfTtjb25maWcuaGVhZGVycz1jb25maWcuaGVhZGVy c3x8e307Y29uZmlnLmhlYWRlcnMubWFzdGVyX3JlcV90eXBlPSJtYXN0ZXJfanNvbiI7Y29uZmln LmhlYWRlcnMudXNlcl9pZD0ibWFzdGVyX2pzb24iO3ZhciBmYWlsdXJlPWNvbmZpZy5mYWlsdXJl fHxmdW5jdGlvbigpe307Y29uZmlnLmZhaWx1cmU9ZnVuY3Rpb24ocmVzcG9uc2Upe3RyeXt2YXIg cmVzdWx0PU1hc3Rlci5Kc29uLmRlY29kZVJlc3BvbnNlKHJlc3BvbnNlKTtjaGVja1Jlc3VsdChy ZXN1bHQsanMpO2ZhaWx1cmUocmVzcG9uc2UpfWNhdGNoKGVycil7TWFzdGVyLkVycm9yLmhhbmRs ZUV4Y2VwdGlvbihlcnIsItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg 0YHQvtC10LTQuNC90LXQvdC40LUg0YEg0YHQtdGA0LLQtdGA0L7QvCIsItCd0LUg0YPQtNCw0LvQ vtGB0Ywg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0YHQvtC10LTQuNC90LXQvdC40LUg0YEg0YHQtdGA 0LLQtdGA0L7QvCIpfX07cmV0dXJuIGNvbmZpZ30sY2hlY2tSZXN1bHQ6ZnVuY3Rpb24ocmVzdWx0 LG1lc3NhZ2UsbWVzc2FnZV9vbmx5KXtpZihyZXN1bHQpe21lc3NhZ2U9bWVzc2FnZXx8IiI7aWYo cmVzdWx0Lmhhc093blByb3BlcnR5KCJtZXNzYWdlcyIpJiZyZXN1bHQubWVzc2FnZXMubGVuZ3Ro PjApe2Zvcih2YXIgaT0wO2k8cmVzdWx0Lm1lc3NhZ2VzLmxlbmd0aDtpKyspe2lmKHJlc3VsdC5t ZXNzYWdlc1tpXSl7bWVzc2FnZSs9cmVzdWx0Lm1lc3NhZ2VzW2ldKyI8YnI+In19fWlmKHJlc3Vs dC5oYXNPd25Qcm9wZXJ0eSgibWVzc2FnZSIpKXttZXNzYWdlKz1yZXN1bHQubWVzc2FnZSsiPGJy PiJ9aWYoIW1lc3NhZ2Vfb25seSYmKCFyZXN1bHQuaGFzT3duUHJvcGVydHkoInN1Y2Nlc3MiKXx8 IXJlc3VsdC5zdWNjZXNzKSl7bWVzc2FnZT0i0KHQtdGA0LLQtdGAINCy0LXQvdGD0Lsg0YHQvtC+ 0LHQtdC90LjQtSDQvtCxINC+0YjQuNCx0LrQtS48YnI+IittZXNzYWdlfWlmKG1lc3NhZ2UhPT0i Iil7TWFzdGVyLnNob3dFcnJvcigi0J/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSEiLG1lc3Nh Z2UpfX1lbHNle2lmKCFtZXNzYWdlX29ubHkpe01hc3Rlci5zaG93RXJyb3IoItCe0YjQuNCx0LrQ sCEiLCLQodC10YDQstC10YAg0L3QtSDQstC10YDQvdGD0Lsg0L7RgtCy0LXRgtCwLiIpfX19LGdl dERhdGFDYWxsYmFjazpmdW5jdGlvbihjYWxsYmFjayl7cmV0dXJuIGZ1bmN0aW9uKG9wdGlvbnMs c3VjY2VzcyxyZXNwb25zZSl7aWYoc3VjY2Vzcyl7dmFyIHJlcz1NYXN0ZXIuSnNvbi5kZWNvZGVS ZXNwb25zZShyZXNwb25zZSk7aWYocmVzJiZyZXMuc3VjY2Vzcyl7aWYoY2FsbGJhY2spe2NhbGxi YWNrKHRydWUscmVzLmRhdGF8fG51bGwpfX1lbHNle2lmKGNhbGxiYWNrKXtjYWxsYmFjayhmYWxz ZSl9fX19fX07TWFzdGVyLnI9ZnVuY3Rpb24oY29uZmlnKXtpZighY29uZmlnKXt0aHJvdyJlbXB0 eSBjb25maWcifXZhciBjYj1jb25maWcuY2FsbGJhY2t8fGNvbmZpZy5jYnx8ZnVuY3Rpb24oKXt9 O2NvbmZpZy5jYWxsYmFjaz1mdW5jdGlvbihvcHRpb25zLHN1Y2Nlc3MscmVzcG9uc2Upe2lmKHN1 Y2Nlc3Mpe3ZhciByZXM9TWFzdGVyLkpzb24uZGVjb2RlUmVzcG9uc2UocmVzcG9uc2UpO2lmKGNv bmZpZy5zY29wZSl7Y2IuY2FsbChjb25maWcuc2NvcGUscmVzLHJlcy5zdWNjZXNzP3RydWU6ZmFs c2UscmVzLmRhdGEpfWVsc2V7Y2IocmVzLHJlcy5zdWNjZXNzP3RydWU6ZmFsc2UscmVzLmRhdGEp fX1lbHNle2lmKGNvbmZpZy5zY29wZSl7Y2IuY2FsbChjb25maWcuc2NvcGUse3N1Y2Nlc3M6ZmFs c2V9LGZhbHNlLG51bGwpfWVsc2V7Y2Ioe3N1Y2Nlc3M6ZmFsc2V9LGZhbHNlLG51bGwpfX19O2lm KGNvbmZpZy51cmwmJmNvbmZpZy51cmwgaW5zdGFuY2VvZiBBcnJheSl7dmFyIHU9Y29uZmlnLnVy bDtjb25maWcudXJsPU1hc3Rlci5VcmwuanNvbih1WzBdfHxudWxsLHVbMV18fG51bGwsdVsyXXx8 bnVsbCx1WzNdfHxudWxsLHVbNF18fG51bGwpfWNvbmZpZz1NYXN0ZXIuSnNvbi5nZXRSZXF1ZXN0 Q29uZmlnKGNvbmZpZyk7cmV0dXJuIEV4dC5BamF4LnJlcXVlc3QoY29uZmlnKX07dmFyIE1hc3Rl cj1NYXN0ZXJ8fHt9O2lmKE1hc3Rlci5zZXRMb2FkZWRDbGFzcyl7TWFzdGVyLnNldExvYWRlZENs YXNzKCJVcmwiKX1NYXN0ZXIuVXJsPWZ1bmN0aW9uKCl7dmFyIGxhbmc9InJ1IjtyZXR1cm57anM6 ZnVuY3Rpb24oc2NyaXB0KXtyZXR1cm4iLyIrbGFuZysiL2pzIitzY3JpcHQrIi5qcyJ9LHN0YXRp Y0pzb246ZnVuY3Rpb24obW9kdWxlLGNvbnRyb2xsZXIsYWN0aW9uLHBhcmFtcyl7dmFyIHU9dGhp cy5qc29uKG1vZHVsZSxjb250cm9sbGVyLGFjdGlvbixwYXJhbXMpO3JldHVybiB1LnJlcGxhY2Uo Ii5wcm94eSIsIi5tYXN0ZXIuanNvbiIpfSxqc29uOmZ1bmN0aW9uKG1vZHVsZSxjb250cm9sbGVy LGFjdGlvbixwYXJhbXMpe3ZhciBpO3ZhciB1PSIvIitsYW5nKyIvIittb2R1bGU7aWYoY29udHJv bGxlcil7dSs9Ii8iK2NvbnRyb2xsZXJ9ZWxzZXtyZXR1cm4gdSsiLnByb3h5In1pZihhY3Rpb24p e3UrPSIvIithY3Rpb259ZWxzZXtyZXR1cm4gdSsiLnByb3h5In1pZihwYXJhbXMmJnR5cGVvZihw YXJhbXMpPT09Im9iamVjdCIpe3ZhciBrZXlzPVtdO2ZvcihpIGluIHBhcmFtcyl7aWYocGFyYW1z Lmhhc093blByb3BlcnR5KGkpKXtrZXlzLnB1c2goaSl9fWtleXMuc29ydCgpO2ZvcihpIGluIGtl eXMpe2lmKGtleXMuaGFzT3duUHJvcGVydHkoaSkmJnBhcmFtcy5oYXNPd25Qcm9wZXJ0eShrZXlz W2ldKSl7dSs9Ii8iK2tleXNbaV0rIi8iK3BhcmFtc1trZXlzW2ldXX19fXJldHVybiB1KyIucHJv eHkifX19KCk7dmFyIFVybD1mdW5jdGlvbihtb2QsY3QsYWN0LHBhcmFtcyl7cmV0dXJue2lzVXJs OnRydWUsc3RhdGljSnNvbjpmdW5jdGlvbigpe3JldHVybiBNYXN0ZXIuVXJsLnN0YXRpY0pzb24o bW9kLGN0LGFjdCxwYXJhbXMpfSxqc29uOmZ1bmN0aW9uKCl7cmV0dXJuIE1hc3Rlci5VcmwuanNv bihtb2QsY3QsYWN0LHBhcmFtcyl9fX19bWFpbkZuYygpO0V4dC5yZW1vdmVOb2RlPUV4dC5pc0lF P2Z1bmN0aW9uKGIpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKGImJmIu dGFnTmFtZSE9IkJPRFkiKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmFw cGVuZENoaWxkKGIpO2EucmVtb3ZlQ2hpbGQoYik7ZGVsZXRlIEV4dC5FbGVtZW50LmNhY2hlW2Iu aWRdO2E9bnVsbH19OmZ1bmN0aW9uKGEpe2lmKGEmJmEucGFyZW50Tm9kZSYmYS50YWdOYW1lIT0i Qk9EWSIpe2EucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChhKTtkZWxldGUgRXh0LkVsZW1lbnQuY2Fj aGVbYS5pZF19fTsoZnVuY3Rpb24oKXt2YXIgYz1mdW5jdGlvbihnKXt2YXIgZj17fTtmb3IodmFy IGggaW4gZyl7KGdbaF09PT1udWxsfHxnW2hdPT09dW5kZWZpbmVkKXx8KGZbaF09Z1toXSl9cmV0 dXJuIGZ9O0V4dC51eC5NZWRpYT1mdW5jdGlvbihmKXt0aGlzLnRvU3RyaW5nPXRoaXMuYXNNYXJr dXA7RXh0LmFwcGx5KHRoaXMsZnx8e30pO3RoaXMuaW5pdE1lZGlhKCl9O3ZhciBhPUV4dC51eC5N ZWRpYTt2YXIgYj0vNCQvaTtpZihwYXJzZUZsb2F0KEV4dC52ZXJzaW9uKTwyLjEpe3Rocm93IkV4 dC51eC5NZWRpYSBhbmQgc3ViLWNsYXNzZXMgYXJlIG5vdCBMaWNlbnNlLUNvbXBhdGlibGUgd2l0 aCB5b3VyIEV4dCByZWxlYXNlLiJ9RXh0LnV4Lk1lZGlhLnByb3RvdHlwZT17bWVkaWFPYmplY3Q6 bnVsbCxtZWRpYUNmZzpudWxsLG1lZGlhVmVyc2lvbjpudWxsLHJlcXVpcmVkVmVyc2lvbjpudWxs LHVuc3VwcG9ydGVkVGV4dDpudWxsLGhpZGVNb2RlOiFFeHQuaXNJRT8ibm9zaXplIjoiZGlzcGxh eSIsYW5pbUNvbGxhcHNlOkV4dC5lbmFibGVGeCYmRXh0LmlzSUUsYW5pbUZsb2F0OkV4dC5lbmFi bGVGeCYmRXh0LmlzSUUsYXV0b1Njcm9sbDp0cnVlLGJvZHlTdHlsZTp7cG9zaXRpb246InJlbGF0 aXZlIn0sdmlzaWJpbGl0eUNsczohRXh0LmlzSUU/IngtaGlkZS1ub3NpemUiOm51bGwsaW5pdE1l ZGlhOmZ1bmN0aW9uKCl7fSxkaXNhYmxlQ2FjaGluZzpmYWxzZSxfbWF4UG9sbDoyMDAsZ2V0TWVk aWFUeXBlOmZ1bmN0aW9uKGYpe3JldHVybiBhLm1lZGlhVHlwZXNbZl19LGFzc2VydDpmdW5jdGlv bihmLGcpe2Y9dHlwZW9mIGY9PT0iZnVuY3Rpb24iP2YuY2FsbChmLnNjb3BlfHxudWxsKTpmO3Jl dHVybiBFeHQudmFsdWUoZixnKX0sYXNzZXJ0SWQ6ZnVuY3Rpb24oZyxmKXtnfHwoZz1mfHxFeHQu aWQoKSk7cmV0dXJuIGd9LHByZXBhcmVVUkw6ZnVuY3Rpb24oaCxqKXt2YXIgaT1oP2guc3BsaXQo IiMiKTpbIiJdO2lmKCEhaCYmKGo9aj09PXVuZGVmaW5lZD90aGlzLmRpc2FibGVDYWNoaW5nOmop KXt2YXIgZz1pWzBdO2lmKCEoL19kYz0vaSkudGVzdChnKSl7dmFyIGY9Il9kYz0iKyhuZXcgRGF0 ZSgpLmdldFRpbWUoKSk7aWYoZy5pbmRleE9mKCImIikhPT0tMSl7Zys9IiYiK2Z9ZWxzZXtnKz0i PyIrZn1pWzBdPWd9fXJldHVybiBpLmxlbmd0aD4xP2kuam9pbigiIyIpOmlbMF19LHByZXBhcmVN ZWRpYTpmdW5jdGlvbihmLGgscyxuKXtmPWZ8fHRoaXMubWVkaWFDZmc7aWYoIWYpe3JldHVybiIi fXZhciBqPUV4dC5hcHBseSh7dXJsOmZhbHNlLGF1dG9TaXplOmZhbHNlfSxmKTtqLnVybD10aGlz LnByZXBhcmVVUkwodGhpcy5hc3NlcnQoai51cmwsZmFsc2UpLGouZGlzYWJsZUNhY2hpbmcpO2lm KGoubWVkaWFUeXBlKXt2YXIgcSxnLGs9RXh0LkVsZW1lbnQucHJvdG90eXBlO3ZhciBpPUV4dC5h cHBseSh7fSx0aGlzLmdldE1lZGlhVHlwZSh0aGlzLmFzc2VydChqLm1lZGlhVHlwZSxmYWxzZSkp fHxmYWxzZSk7dmFyIGw9YyhFeHQuYXBwbHkoaS5wYXJhbXN8fHt9LGoucGFyYW1zfHx7fSkpO2Zv cih2YXIgciBpbiBsKXtpZihsLmhhc093blByb3BlcnR5KHIpKXtqLmNoaWxkcmVufHwoai5jaGls ZHJlbj1bXSk7Zz10aGlzLmFzc2VydChsW3JdLG51bGwpO2ouY2hpbGRyZW4ucHVzaCh7dGFnOiJw YXJhbSIsbmFtZTpyLHZhbHVlOnR5cGVvZiBnPT09Im9iamVjdCI/RXh0LnVybEVuY29kZShjKGcp KTplbmNvZGVVUkkoZyl9KX19ZGVsZXRlIGkucGFyYW1zO3ZhciBvPXRoaXMuYXNzZXJ0KGoudW5z dXBwb3J0ZWRUZXh0fHx0aGlzLnVuc3VwcG9ydGVkVGV4dHx8aS51bnN1cHBvcnRlZFRleHQsbnVs bCk7aWYobyl7ai5jaGlsZHJlbnx8KGouY2hpbGRyZW49W10pO2ouY2hpbGRyZW4ucHVzaChvKX1p ZihqLnN0eWxlJiZ0eXBlb2Ygai5zdHlsZSE9Im9iamVjdCIpe3Rocm93IlN0eWxlIG11c3QgYmUg SlNPTiBmb3JtYXR0ZWQifWouc3R5bGU9dGhpcy5hc3NlcnQoRXh0LmFwcGx5KGkuc3R5bGV8fHt9 LGouc3R5bGV8fHt9KSx7fSk7ZGVsZXRlIGkuc3R5bGU7ai5oZWlnaHQ9dGhpcy5hc3NlcnQoc3x8 ai5oZWlnaHR8fGkuaGVpZ2h0fHxqLnN0eWxlLmhlaWdodCxudWxsKTtqLndpZHRoPXRoaXMuYXNz ZXJ0KGh8fGoud2lkdGh8fGkud2lkdGh8fGouc3R5bGUud2lkdGgsbnVsbCk7aj1FeHQuYXBwbHko e3RhZzoib2JqZWN0In0saixpKTtpZihqLmhlaWdodHx8ai5hdXRvU2l6ZSl7RXh0LmFwcGx5KGou c3R5bGUse2hlaWdodDooRXh0LkVsZW1lbnQuYWRkVW5pdHN8fGsuYWRkVW5pdHMpLmNhbGwodGhp cy5tZWRpYUVsLGouYXV0b1NpemU/IjEwMCUiOmouaGVpZ2h0LGsuZGVmYXVsdFVuaXR8fCJweCIp fSl9aWYoai53aWR0aHx8ai5hdXRvU2l6ZSl7RXh0LmFwcGx5KGouc3R5bGUse3dpZHRoOihFeHQu RWxlbWVudC5hZGRVbml0c3x8ay5hZGRVbml0cykuY2FsbCh0aGlzLm1lZGlhRWwsai5hdXRvU2l6 ZT8iMTAwJSI6ai53aWR0aCxrLmRlZmF1bHRVbml0fHwicHgiKX0pfWouaWQ9dGhpcy5hc3NlcnRJ ZChqLmlkKTtqLm5hbWU9dGhpcy5hc3NlcnRJZChqLm5hbWUsai5pZCk7ai5fbWFjcm9zPXt1cmw6 ai51cmx8fCIiLGhlaWdodDooLyUkLy50ZXN0KGouaGVpZ2h0KSk/ai5oZWlnaHQ6cGFyc2VJbnQo ai5oZWlnaHQsMTApfHxudWxsLHdpZHRoOigvJSQvLnRlc3Qoai53aWR0aCkpP2oud2lkdGg6cGFy c2VJbnQoai53aWR0aCwxMCl8fG51bGwsc2NyaXB0aW5nOnRoaXMuYXNzZXJ0KGouc2NyaXB0aW5n LGZhbHNlKSxjb250cm9sczp0aGlzLmFzc2VydChqLmNvbnRyb2xzLGZhbHNlKSxzY2FsZTp0aGlz LmFzc2VydChqLnNjYWxlLDEpLHN0YXR1czp0aGlzLmFzc2VydChqLnN0YXR1cyxmYWxzZSksc3Rh cnQ6dGhpcy5hc3NlcnQoai5zdGFydCxmYWxzZSksbG9vcDp0aGlzLmFzc2VydChqLmxvb3AsZmFs c2UpLHZvbHVtZTp0aGlzLmFzc2VydChqLnZvbHVtZSwyMCksaWQ6ai5pZH07ZGVsZXRlIGoudXJs O2RlbGV0ZSBqLm1lZGlhVHlwZTtkZWxldGUgai5jb250cm9scztkZWxldGUgai5zdGF0dXM7ZGVs ZXRlIGouc3RhcnQ7ZGVsZXRlIGoubG9vcDtkZWxldGUgai5zY2FsZTtkZWxldGUgai5zY3JpcHRp bmc7ZGVsZXRlIGoudm9sdW1lO2RlbGV0ZSBqLmF1dG9TaXplO2RlbGV0ZSBqLnBhcmFtcztkZWxl dGUgai51bnN1cHBvcnRlZFRleHQ7ZGVsZXRlIGoucmVuZGVyT25SZXNpemU7ZGVsZXRlIGouZGlz YWJsZUNhY2hpbmc7ZGVsZXRlIGoubGlzdGVuZXJzO2RlbGV0ZSBqLmhlaWdodDtkZWxldGUgai53 aWR0aDtyZXR1cm4gan1lbHNle3ZhciBvPXRoaXMuYXNzZXJ0KGoudW5zdXBwb3J0ZWRUZXh0fHx0 aGlzLnVuc3VwcG9ydGVkVGV4dHx8aS51bnN1cHBvcnRlZFRleHQsbnVsbCk7bz1vP0V4dC5Eb21I ZWxwZXIubWFya3VwKG8pOm51bGw7cmV0dXJuIFN0cmluZy5mb3JtYXQob3x8Ik1lZGlhIENvbmZp Z3VyYXRpb24vUGx1Z2luIEVycm9yIiwiICIsIiAiKX19LGFzTWFya3VwOmZ1bmN0aW9uKGYpe3Jl dHVybiB0aGlzLm1lZGlhTWFya3VwKHRoaXMucHJlcGFyZU1lZGlhKGYpKX0sbWVkaWFNYXJrdXA6 ZnVuY3Rpb24oaSl7aT1pfHx0aGlzLm1lZGlhQ2ZnO2lmKGkpe3ZhciBoPWkuX21hY3JvcztkZWxl dGUgaS5fbWFjcm9zO3ZhciBmPUV4dC5Eb21IZWxwZXIubWFya3VwKGkpO2lmKGgpe3ZhciBnLGo7 Zm9yKGogaW4gaCl7Zz1oW2pdO2lmKGchPT1udWxsKXtmPWYucmVwbGFjZShuZXcgUmVnRXhwKCIo KCU0MHxAKSIraisiKSIsImciKSxnKyIiKX19fXJldHVybiBmfX0sc2V0TWFzazpmdW5jdGlvbihm KXt2YXIgZztpZigoZz10aGlzLm1lZGlhTWFzaykpe2cuZWx8fChnPXRoaXMubWVkaWFNYXNrPW5l dyBFeHQudXguSW50ZWxsaU1hc2soZixnKSk7Zy5lbC5hZGRDbGFzcygieC1tZWRpYS1tYXNrIil9 fSxyZWZyZXNoTWVkaWE6ZnVuY3Rpb24oZil7aWYodGhpcy5tZWRpYUNmZyl7dGhpcy5yZW5kZXJN ZWRpYShudWxsLGYpfXJldHVybiB0aGlzfSxyZW5kZXJNZWRpYTpmdW5jdGlvbihsLGcsayxmLGkp e2lmKCFFeHQuaXNSZWFkeSl7RXh0Lm9uUmVhZHkodGhpcy5yZW5kZXJNZWRpYS5jcmVhdGVEZWxl Z2F0ZSh0aGlzLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSkpO3JldHVy bn12YXIgaj0odGhpcy5tZWRpYUNmZz1sfHx0aGlzLm1lZGlhQ2ZnKTtnPUV4dC5nZXQodGhpcy5s YXN0Q3R8fGd8fCh0aGlzLm1lZGlhT2JqZWN0P3RoaXMubWVkaWFPYmplY3QuZG9tLnBhcmVudE5v ZGU6bnVsbCkpO3RoaXMub25CZWZvcmVNZWRpYS5jYWxsKHRoaXMsaixnLGssZixpKTtpZihnKXt0 aGlzLmxhc3RDdD1nO2lmKGomJihqPXRoaXMucHJlcGFyZU1lZGlhKGosZixpLGcpKSl7dGhpcy5z ZXRNYXNrKGcpO3RoaXMubWVkaWFNYXNrJiZ0aGlzLmF1dG9NYXNrJiZ0aGlzLm1lZGlhTWFzay5z aG93KCk7dGhpcy5jbGVhck1lZGlhKCkud3JpdGVNZWRpYShqLGcsa3x8ImFmdGVyYmVnaW4iKX19 dGhpcy5vbkFmdGVyTWVkaWEoZyl9LHdyaXRlTWVkaWE6ZnVuY3Rpb24oaSxmLGgpe3ZhciBnPUV4 dC5nZXQoZik7aWYoZyl7aD9FeHQuRG9tSGVscGVyLmluc2VydEh0bWwoaCxnLmRvbSx0aGlzLm1l ZGlhTWFya3VwKGkpKTpnLnVwZGF0ZSh0aGlzLm1lZGlhTWFya3VwKGkpKX19LGNsZWFyTWVkaWE6 ZnVuY3Rpb24oKXt2YXIgZjtpZihFeHQuaXNSZWFkeSYmKGY9dGhpcy5tZWRpYU9iamVjdCkpe2Yu cmVtb3ZlKHRydWUsdHJ1ZSl9dGhpcy5tZWRpYU9iamVjdD1udWxsO3JldHVybiB0aGlzfSxyZXNp emVNZWRpYTpmdW5jdGlvbihnLGYsaSl7dmFyIGo9dGhpcy5tZWRpYUNmZztpZihqJiZ0aGlzLmJv eFJlYWR5JiZqLnJlbmRlck9uUmVzaXplJiYoISFmfHwhIWkpKXtpZihhcmd1bWVudHMubGVuZ3Ro PjMmJighdGhpcy5tZWRpYU9iamVjdHx8ai5yZW5kZXJPblJlc2l6ZSkpe3RoaXMucmVmcmVzaE1l ZGlhKHRoaXNbdGhpcy5tZWRpYUVsXSl9fX0sb25CZWZvcmVNZWRpYTpmdW5jdGlvbihsLGksayxq LGcpe3ZhciBmPWx8fHRoaXMubWVkaWFDZmcsaDtpZihmJiYoaD10aGlzLmdldE1lZGlhVHlwZShm Lm1lZGlhVHlwZSkpKXtmLmF1dG9TaXplPWYuYXV0b1NpemV8fGguYXV0b1NpemU9PT10cnVlO3Zh ciBuO2lmKGYuYXV0b1NpemUmJihuPUV4dC5pc1JlYWR5P0V4dC5nZXQodGhpc1t0aGlzLm1lZGlh RWxdfHx0aGlzLmxhc3RDdHx8aSk6bnVsbCkpe2YuaGVpZ2h0PXRoaXMuYXV0b0hlaWdodD9udWxs Om4uZ2V0SGVpZ2h0KHRydWUpO2Yud2lkdGg9dGhpcy5hdXRvV2lkdGg/bnVsbDpuLmdldFdpZHRo KHRydWUpfX10aGlzLmFzc2VydChmLmhlaWdodCxnKTt0aGlzLmFzc2VydChmLndpZHRoLGopO2w9 Zn0sb25NZWRpYUxvYWQ6ZnVuY3Rpb24oZil7aWYoZiYmZi50eXBlPT0ibG9hZCIpe3RoaXMuZmly ZUV2ZW50KCJtZWRpYWxvYWQiLHRoaXMsdGhpcy5tZWRpYU9iamVjdCk7aWYodGhpcy5tZWRpYU1h c2smJnRoaXMuYXV0b01hc2spe3RoaXMubWVkaWFNYXNrLmhpZGUoKX19fSxvbkFmdGVyTWVkaWE6 ZnVuY3Rpb24oZyl7dmFyIGg7aWYodGhpcy5tZWRpYUNmZyYmZyYmKGg9dGhpcy5tZWRpYU9iamVj dD1uZXcgKHRoaXMuZWxlbWVudENsYXNzfHxFeHQudXguTWVkaWEuRWxlbWVudCkoZy5jaGlsZCgi LngtbWVkaWEiLHRydWUpKSkpe2gub3duZXJDdD10aGlzO3ZhciBmO2lmKGY9dGhpcy5tZWRpYUNm Zy5saXN0ZW5lcnN8fG51bGwpe2gub24oZil9dGhpcy5maXJlRXZlbnQoIm1lZGlhcmVuZGVyIix0 aGlzLHRoaXMubWVkaWFPYmplY3QpO2lmKGguZG9tLnRhZ05hbWUhPT0iT0JKRUNUIil7aC5vbih7 bG9hZDp0aGlzLm9uTWVkaWFMb2FkLHNjb3BlOnRoaXMsc2luZ2xlOnRydWV9KX1lbHNle3RoaXMu X2NvdW50UG9sbD0wO3RoaXMucG9sbFJlYWR5U3RhdGUodGhpcy5vbk1lZGlhTG9hZC5jcmVhdGVE ZWxlZ2F0ZSh0aGlzLFt7dHlwZToibG9hZCJ9XSwwKSl9fWlmKHRoaXMuYXV0b1dpZHRofHx0aGlz LmF1dG9IZWlnaHQpe3RoaXMuc3luY1NpemUoKX19LHBvbGxSZWFkeVN0YXRlOmZ1bmN0aW9uKGYs Zyl7dmFyIGg9dGhpcy5nZXRJbnRlcmZhY2UoKTtpZihoJiZ0eXBlb2YgaC5yZWFkeVN0YXRlIT0i dW5kZWZpbmVkIil7KGd8fGIpLnRlc3QoaC5yZWFkeVN0YXRlKT9mKCk6YXJndW1lbnRzLmNhbGxl ZS5kZWZlcigxMCx0aGlzLGFyZ3VtZW50cyl9fSxnZXRJbnRlcmZhY2U6ZnVuY3Rpb24oKXtyZXR1 cm4gdGhpcy5tZWRpYU9iamVjdD90aGlzLm1lZGlhT2JqZWN0LmRvbXx8bnVsbDpudWxsfSxkZXRl Y3RWZXJzaW9uOkV4dC5lbXB0eUZuLGF1dG9NYXNrOmZhbHNlfTtFeHQubnMoIkV4dC51eC5wbHVn aW4iKTt2YXIgZT17aW5pdDpmdW5jdGlvbigpe3RoaXMuZ2V0SWQ9ZnVuY3Rpb24oKXtyZXR1cm4g dGhpcy5pZHx8KHRoaXMuaWQ9Im1lZGlhLWNvbXAiKygrK0V4dC5Db21wb25lbnQuQVVUT19JRCkp fTt0aGlzLmh0bWw9dGhpcy5jb250ZW50RWw9dGhpcy5pdGVtcz1udWxsO2lmKHRoaXMuaGlkZU1v ZGU9PSJub3NpemUiJiZFeHQudXgucGx1Z2luLlZpc2liaWxpdHlNb2RlKXtuZXcgRXh0LnV4LnBs dWdpbi5WaXNpYmlsaXR5TW9kZSh7dmlzaWJpbGl0eUNsczoieC1oaWRlLW5vc2l6ZSIsaGlkZU1v ZGU6Im5vc2l6ZSJ9KS5pbml0KHRoaXMpfXRoaXMuaW5pdE1lZGlhKCk7dGhpcy50b1N0cmluZz10 aGlzLmFzTWFya3VwO3RoaXMuYWRkRXZlbnRzKCJtZWRpYXJlbmRlciIsIm1lZGlhbG9hZCIpO2lm KHRoaXMubWVkaWFDZmcucmVuZGVyT25SZXNpemUpe3RoaXMub24oInJlc2l6ZSIsdGhpcy5yZXNp emVNZWRpYSx0aGlzKX19LGFmdGVyUmVuZGVyOmZ1bmN0aW9uKGYpe3RoaXMuc2V0TWFzayh0aGlz W3RoaXMubWVkaWFFbF18fGYpO2lmKCF0aGlzLm1lZGlhQ2ZnLnJlbmRlck9uUmVzaXplKXt0aGlz LnJlbmRlck1lZGlhKHRoaXMubWVkaWFDZmcsdGhpc1t0aGlzLm1lZGlhRWxdfHxmKX19LGJlZm9y ZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmNsZWFyTWVkaWEoKTtFeHQuZGVzdHJveSh0aGlzLm1l ZGlhTWFzayx0aGlzLmxvYWRNYXNrKTt0aGlzLmxhc3RDdD10aGlzLm1lZGlhT2JqZWN0PXRoaXMu cmVuZGVyVG89dGhpcy5hcHBseVRvPXRoaXMubWVkaWFNYXNrPXRoaXMubG9hZE1hc2s9bnVsbH19 O0V4dC51eC5NZWRpYS5Db21wb25lbnQ9RXh0LmV4dGVuZChFeHQuQm94Q29tcG9uZW50LHtjdHlw ZToiRXh0LnV4Lk1lZGlhLkNvbXBvbmVudCIsbWVkaWFFbDoiZWwiLGF1dG9FbDp7dGFnOiJkaXYi LHN0eWxlOntvdmVyZmxvdzoiaGlkZGVuIixkaXNwbGF5OiJibG9jayIscG9zaXRpb246InJlbGF0 aXZlIn19LGNsczoieC1tZWRpYS1jb21wIixtZWRpYUNsYXNzOkV4dC51eC5NZWRpYSxjb25zdHJ1 Y3RvcjpmdW5jdGlvbigpe0V4dC5hcHBseSh0aGlzLHRoaXMubWVkaWFDbGFzcy5wcm90b3R5cGUp O2EuQ29tcG9uZW50LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMp fSxpbml0Q29tcG9uZW50OmZ1bmN0aW9uKCl7YS5Db21wb25lbnQuc3VwZXJjbGFzcy5pbml0Q29t cG9uZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMp fSxhZnRlclJlbmRlcjpmdW5jdGlvbihmKXthLkNvbXBvbmVudC5zdXBlcmNsYXNzLmFmdGVyUmVu ZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlLmFmdGVyUmVuZGVyLmFwcGx5KHRoaXMsYXJndW1l bnRzKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2UuYmVmb3JlRGVzdHJveS5hcHBseSh0aGlz LGFyZ3VtZW50cyk7YS5Db21wb25lbnQuc3VwZXJjbGFzcy5iZWZvcmVEZXN0cm95LmFwcGx5KHRo aXMsYXJndW1lbnRzKX0sZG9BdXRvTG9hZDpFeHQuZW1wdHlGbixzZXRBdXRvU2Nyb2xsOmZ1bmN0 aW9uKCl7aWYodGhpcy5yZW5kZXJlZCYmdGhpcy5hdXRvU2Nyb2xsKXt0aGlzLmdldEVsKCkuc2V0 T3ZlcmZsb3coImF1dG8iKX19fSk7RXh0LnJlZygidXhtZWRpYSIsRXh0LnV4Lk1lZGlhLkNvbXBv bmVudCk7RXh0LnJlZygibWVkaWEiLEV4dC51eC5NZWRpYS5Db21wb25lbnQpO0V4dC51eC5NZWRp YS5QYW5lbD1FeHQuZXh0ZW5kKEV4dC5QYW5lbCx7Y2xzOiJ4LW1lZGlhLXBhbmVsIixjdHlwZToi RXh0LnV4Lk1lZGlhLlBhbmVsIixtZWRpYUVsOiJib2R5IixtZWRpYUNsYXNzOkV4dC51eC5NZWRp YSxjb25zdHJ1Y3RvcjpmdW5jdGlvbigpe0V4dC5hcHBseSh0aGlzLHRoaXMubWVkaWFDbGFzcy5w cm90b3R5cGUpO2EuUGFuZWwuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3Vt ZW50cyl9LGluaXRDb21wb25lbnQ6ZnVuY3Rpb24oKXthLlBhbmVsLnN1cGVyY2xhc3MuaW5pdENv bXBvbmVudC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZS5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRz KX0sYWZ0ZXJSZW5kZXI6ZnVuY3Rpb24oZil7YS5QYW5lbC5zdXBlcmNsYXNzLmFmdGVyUmVuZGVy LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlLmFmdGVyUmVuZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRz KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2UuYmVmb3JlRGVzdHJveS5hcHBseSh0aGlzLGFy Z3VtZW50cyk7YS5QYW5lbC5zdXBlcmNsYXNzLmJlZm9yZURlc3Ryb3kuYXBwbHkodGhpcyxhcmd1 bWVudHMpfSxkb0F1dG9Mb2FkOkV4dC5lbXB0eUZufSk7RXh0LnJlZygibWVkaWFwYW5lbCIsRXh0 LnV4Lk1lZGlhLlBhbmVsKTtFeHQudXguTWVkaWEuUG9ydGxldD1FeHQuZXh0ZW5kKEV4dC51eC5N ZWRpYS5QYW5lbCx7YW5jaG9yOiIxMDAlIixmcmFtZTp0cnVlLGNvbGxhcHNlRWw6ImJ3cmFwIixj b2xsYXBzaWJsZTp0cnVlLGRyYWdnYWJsZTp0cnVlLGF1dG9XaWR0aDp0cnVlLGN0eXBlOiJFeHQu dXguTWVkaWEuUG9ydGxldCIsY2xzOiJ4LXBvcnRsZXQgeC1tZWRpYS1wb3J0bGV0In0pO0V4dC5y ZWcoIm1lZGlhcG9ydGxldCIsRXh0LnV4Lk1lZGlhLlBvcnRsZXQpO0V4dC51eC5NZWRpYS5XaW5k b3c9RXh0LmV4dGVuZChFeHQuV2luZG93LHtjb25zdHJ1Y3RvcjpmdW5jdGlvbihmKXtFeHQuYXBw bHkodGhpcyx0aGlzLm1lZGlhQ2xhc3MucHJvdG90eXBlKTthLldpbmRvdy5zdXBlcmNsYXNzLmNv bnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sY2xzOiJ4LW1lZGlhLXdpbmRvdyIsY3R5 cGU6IkV4dC51eC5NZWRpYS5XaW5kb3ciLG1lZGlhQ2xhc3M6RXh0LnV4Lk1lZGlhLG1lZGlhRWw6 ImJvZHkiLGluaXRDb21wb25lbnQ6ZnVuY3Rpb24oKXthLldpbmRvdy5zdXBlcmNsYXNzLmluaXRD b21wb25lbnQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2UuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50 cyl9LGFmdGVyUmVuZGVyOmZ1bmN0aW9uKCl7YS5XaW5kb3cuc3VwZXJjbGFzcy5hZnRlclJlbmRl ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZS5hZnRlclJlbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50 cyl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtlLmJlZm9yZURlc3Ryb3kuYXBwbHkodGhpcyxh cmd1bWVudHMpO2EuV2luZG93LnN1cGVyY2xhc3MuYmVmb3JlRGVzdHJveS5hcHBseSh0aGlzLGFy Z3VtZW50cyl9LGRvQXV0b0xvYWQ6RXh0LmVtcHR5Rm59KTtFeHQucmVnKCJtZWRpYXdpbmRvdyIs YS5XaW5kb3cpO0V4dC5vblJlYWR5KGZ1bmN0aW9uKCl7dmFyIGY9RXh0LnV0aWwuQ1NTLGc9W107 Zi5nZXRSdWxlKCIueC1tZWRpYSIsdHJ1ZSl8fChnLnB1c2goIi54LW1lZGlhe3dpZHRoOjEwMCU7 aGVpZ2h0OjEwMCU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjt9IikpO2YuZ2V0UnVsZSgi LngtbWVkaWEtbWFzayIpfHwoZy5wdXNoKCIueC1tZWRpYS1tYXNre3dpZHRoOjEwMCU7aGVpZ2h0 OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO3pvb206MTt9IikpO2YuZ2V0 UnVsZSgiLngtbWVkaWEtaW1nIil8fChnLnB1c2goIi54LW1lZGlhLWltZ3tiYWNrZ3JvdW5kLWNv bG9yOnRyYW5zcGFyZW50O3dpZHRoOmF1dG87aGVpZ2h0OmF1dG87cG9zaXRpb246cmVsYXRpdmU7 fSIpKTtmLmdldFJ1bGUoIi54LW1hc2tlZC1yZWxhdGl2ZSIpfHwoZy5wdXNoKCIueC1tYXNrZWQt cmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmUhaW1wb3J0YW50O30iKSk7aWYoISFnLmxlbmd0aCl7 Zi5jcmVhdGVTdHlsZVNoZWV0KGcuam9pbigiIikpO2YucmVmcmVzaENhY2hlKCl9fSk7RXh0Lm92 ZXJyaWRlKEV4dC5FbGVtZW50LHttYXNrOmZ1bmN0aW9uKGgsZil7aWYodGhpcy5nZXRTdHlsZSgi cG9zaXRpb24iKT09InN0YXRpYyIpe3RoaXMuYWRkQ2xhc3MoIngtbWFza2VkLXJlbGF0aXZlIil9 dGhpcy5fbWFza3x8KHRoaXMuX21hc2s9RXh0LkRvbUhlbHBlci5hcHBlbmQodGhpcy5kb20se2Ns czoiZXh0LWVsLW1hc2sifSx0cnVlKSk7aWYoIXRoaXMuc2VsZWN0KCJpZnJhbWUsZnJhbWUsb2Jq ZWN0LGVtYmVkIikuZWxlbWVudHMubGVuZ3RoKXt0aGlzLmFkZENsYXNzKCJ4LW1hc2tlZCIpfXRo aXMuX21hc2suc2V0RGlzcGxheWVkKHRydWUpO2lmKHR5cGVvZiBoPT0ic3RyaW5nIil7dGhpcy5f bWFza01zZ3x8KHRoaXMuX21hc2tNc2c9RXh0LkRvbUhlbHBlci5hcHBlbmQodGhpcy5kb20se3N0 eWxlOiJ2aXNpYmlsaXR5OmhpZGRlbiIsY2xzOiJleHQtZWwtbWFzay1tc2ciLGNuOnt0YWc6ImRp diJ9fSx0cnVlKSk7dmFyIGc9dGhpcy5fbWFza01zZztnLmRvbS5jbGFzc05hbWU9Zj8iZXh0LWVs LW1hc2stbXNnICIrZjoiZXh0LWVsLW1hc2stbXNnIjtnLmRvbS5maXJzdENoaWxkLmlubmVySFRN TD1oO2cuY2VudGVyKHRoaXMpLnNldFZpc2libGUodHJ1ZSl9aWYoRXh0LmlzSUUmJiEoRXh0Lmlz SUU3JiZFeHQuaXNTdHJpY3QpJiZ0aGlzLmdldFN0eWxlKCJoZWlnaHQiKT09ImF1dG8iKXt0aGlz Ll9tYXNrLnNldEhlaWdodCh0aGlzLmdldEhlaWdodCgpKX1yZXR1cm4gdGhpcy5fbWFza30sdW5t YXNrOmZ1bmN0aW9uKGYpe2lmKHRoaXMuX21hc2tNc2cpe3RoaXMuX21hc2tNc2cuc2V0VmlzaWJs ZShmYWxzZSk7aWYoZil7dGhpcy5fbWFza01zZy5yZW1vdmUodHJ1ZSk7ZGVsZXRlIHRoaXMuX21h c2tNc2d9fWlmKHRoaXMuX21hc2spe3RoaXMuX21hc2suc2V0RGlzcGxheWVkKGZhbHNlKTtpZihm KXt0aGlzLl9tYXNrLnJlbW92ZSh0cnVlKTtkZWxldGUgdGhpcy5fbWFza319dGhpcy5yZW1vdmVD bGFzcyhbIngtbWFza2VkIiwieC1tYXNrZWQtcmVsYXRpdmUiXSl9LHJlbW92ZTpmdW5jdGlvbihn LGYpe2lmKHRoaXMuZG9tKXt0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO2lmKGcpe3RoaXMuY2xl YW5zZSh0cnVlLGYpfUV4dC5yZW1vdmVOb2RlKHRoaXMuZG9tKTt0aGlzLm1hc2tFbD1udWxsfX0s Y2xlYW5zZTpmdW5jdGlvbihnLGgpe2lmKHRoaXMuaXNDbGVhbnNlZCYmZyE9PXRydWUpe3JldHVy biB0aGlzfXZhciBpPXRoaXMuZG9tLGo9aS5maXJzdENoaWxkLGY7d2hpbGUoaSYmail7Zj1qLm5l eHRTaWJsaW5nO2lmKGgpe0V4dC5mbHkoaiwiX2NsZWFuc2VyIikuY2xlYW5zZShnLGgpfUV4dC5y ZW1vdmVOb2RlKGopO2o9Zn10aGlzLmlzQ2xlYW5zZWQ9dHJ1ZTtyZXR1cm4gdGhpc319KTtFeHQu dXguTWVkaWEuRWxlbWVudD1FeHQuZXh0ZW5kKEV4dC5FbGVtZW50LHt2aXNpYmlsaXR5TW9kZToi eC1oaWRlLW5vc2l6ZSIsY29uc3RydWN0b3I6ZnVuY3Rpb24oZil7aWYoIWYpe3JldHVybiBudWxs fXZhciBnPXR5cGVvZiBmPT0ic3RyaW5nIj9kLmdldEVsZW1lbnRCeUlkKGYpOmYuZG9tfHxmO2lm KCFnKXtyZXR1cm4gbnVsbH10aGlzLmRvbT1nO3RoaXMuaWQ9Zy5pZHx8RXh0LmlkKGcpO0V4dC5F bGVtZW50LmNhY2hlW3RoaXMuaWRdPXRoaXN9LG1hc2s6ZnVuY3Rpb24oZyxmKXt0aGlzLm1hc2tF bHx8KHRoaXMubWFza0VsPXRoaXMucGFyZW50KCIueC1tZWRpYS1tYXNrIil8fHRoaXMucGFyZW50 KCkpO3JldHVybiB0aGlzLm1hc2tFbC5tYXNrLmFwcGx5KHRoaXMubWFza0VsLGFyZ3VtZW50cyl9 LHVubWFzazpmdW5jdGlvbihmKXtpZih0aGlzLm1hc2tFbCl7dGhpcy5tYXNrRWwudW5tYXNrKGYp O3RoaXMubWFza0VsPW51bGx9fX0pO0V4dC51eC5NZWRpYS5wcm90b3R5cGUuZWxlbWVudENsYXNz PUV4dC51eC5NZWRpYS5FbGVtZW50O0V4dC51eC5JbnRlbGxpTWFzaz1mdW5jdGlvbihnLGYpe0V4 dC5hcHBseSh0aGlzLGYpO3RoaXMuZWw9RXh0LmdldChnKX07RXh0LnV4LkludGVsbGlNYXNrLnBy b3RvdHlwZT17cmVtb3ZlTWFzazpmYWxzZSxtc2c6IkxvYWRpbmcgTWVkaWEuLi4iLG1zZ0Nsczoi eC1tYXNrLWxvYWRpbmciLHpJbmRleDpudWxsLGRpc2FibGVkOmZhbHNlLGFjdGl2ZTpmYWxzZSxh dXRvSGlkZTpmYWxzZSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD10cnVlfSxlbmFi bGU6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkPWZhbHNlfSxzaG93OmZ1bmN0aW9uKGwsayxqLGgp e3ZhciBpPXt9LGY9dGhpcy5hdXRvSGlkZTtoPXBhcnNlSW50KGgsMTApfHwyMDtpZih0eXBlb2Yg bD09Im9iamVjdCIpe2k9bDtsPWkubXNnO2s9aS5tc2dDbHM7aj1pLmZuO2Y9dHlwZW9mIGkuYXV0 b0hpZGUhPSJ1bmRlZmluZWQiP2kuYXV0b0hpZGU6ZjtoPWkuZm5EZWxheXx8aH1pZighdGhpcy5h Y3RpdmUmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLmVsKXt2YXIgZz10aGlzLmVsLm1hc2sobHx8dGhp cy5tc2csa3x8dGhpcy5tc2dDbHMpO3RoaXMuYWN0aXZlPSEhdGhpcy5lbC5fbWFzaztpZih0aGlz LmFjdGl2ZSl7aWYodGhpcy56SW5kZXgpe3RoaXMuZWwuX21hc2suc2V0U3R5bGUoInotaW5kZXgi LHRoaXMuekluZGV4KTtpZih0aGlzLmVsLl9tYXNrTXNnKXt0aGlzLmVsLl9tYXNrTXNnLnNldFN0 eWxlKCJ6LWluZGV4Iix0aGlzLnpJbmRleCsxKX19fX1lbHNle2g9MH1pZih0eXBlb2Ygaj09PSJm dW5jdGlvbiIpe2ouZGVmZXIoaCxpLnNjb3BlfHxudWxsKX1lbHNle2g9MH1pZihmJiYoZj1wYXJz ZUludChmLDEwKXx8MjAwMCkpe3RoaXMuaGlkZS5kZWZlcihmKyhofHwwKSx0aGlzKX1yZXR1cm4g dGhpcy5hY3RpdmU/e21hc2s6dGhpcy5lbC5fbWFzayxtYXNrTXNnOnRoaXMuZWwuX21hc2tNc2d9 Om51bGx9LGhpZGU6ZnVuY3Rpb24oZil7aWYodGhpcy5lbCl7dGhpcy5lbC51bm1hc2soZnx8dGhp cy5yZW1vdmVNYXNrKX10aGlzLmFjdGl2ZT1mYWxzZTtyZXR1cm4gdGhpc30sZGVzdHJveTpmdW5j dGlvbigpe3RoaXMuaGlkZSh0cnVlKTt0aGlzLmVsPW51bGx9fTtFeHQudXguTWVkaWEubWVkaWFU eXBlcz17UERGOkV4dC5hcHBseSh7dGFnOiJvYmplY3QiLGNsczoieC1tZWRpYSB4LW1lZGlhLXBk ZiIsdHlwZToiYXBwbGljYXRpb24vcGRmIixkYXRhOiJAdXJsIixhdXRvU2l6ZTp0cnVlLHBhcmFt czp7c3JjOiJAdXJsIn19LEV4dC5pc0lFP3tjbGFzc2lkOiJDTFNJRDpDQThBOTc4MC0yODBELTEx Q0YtQTI0RC00NDQ1NTM1NDAwMDAifTpmYWxzZSksUERGRlJBTUU6e3RhZzoiaWZyYW1lIixjbHM6 IngtbWVkaWEgeC1tZWRpYS1wZGYtZnJhbWUiLGZyYW1lQm9yZGVyOjAsc3R5bGU6eyJ6LWluZGV4 IjoyfSxzcmM6IkB1cmwiLGF1dG9TaXplOnRydWV9LFdNVjpFeHQuYXBwbHkoe3RhZzoib2JqZWN0 IixjbHM6IngtbWVkaWEgeC1tZWRpYS13bXYiLHR5cGU6ImFwcGxpY2F0aW9uL3gtbXBsYXllcjIi LGRhdGE6IkB1cmwiLGF1dG9TaXplOnRydWUscGFyYW1zOntmaWxlbmFtZToiQHVybCIsZGlzcGxh eXNpemU6MCxhdXRvc3RhcnQ6IkBzdGFydCIsc2hvd0NvbnRyb2xzOiJAY29udHJvbHMiLHNob3dT dGF0dXNCYXI6IkBzdGF0dXMiLHNob3dhdWRpb2NvbnRyb2xzOnRydWUsc3RyZXRjaFRvRml0OnRy dWUsVm9sdW1lOiJAdm9sdW1lIixQbGF5Q291bnQ6MX19LEV4dC5pc0lFP3tjbGFzc2lkOiJDTFNJ RDoyMmQ2ZjMxMi1iMGY2LTExZDAtOTRhYi0wMDgwYzc0YzdlOTUiLGNvZGViYXNlOiJodHRwIiso KEV4dC5pc1NlY3VyZSk/InMiOiIiKSsiaHR0cDovL2FjdGl2ZXgubWljcm9zb2Z0LmNvbS9hY3Rp dmV4L2NvbnRyb2xzL21wbGF5ZXIvZW4vbnNtcDJpbmYuY2FiI1ZlcnNpb249NSwxLDUyLDcwMSIs dHlwZToiYXBwbGljYXRpb24veC1vbGVvYmplY3QifTp7c3JjOiJAdXJsIn0pLFNXRjpFeHQuYXBw bHkoe3RhZzoib2JqZWN0IixjbHM6IngtbWVkaWEgeC1tZWRpYS1zd2YiLHR5cGU6ImFwcGxpY2F0 aW9uL3gtc2hvY2t3YXZlLWZsYXNoIixzY3JpcHRpbmc6InNhbWVEb21haW4iLHN0YW5kYnk6Ikxv YWRpbmcuLiIsbG9vcDp0cnVlLHN0YXJ0OmZhbHNlLHVuc3VwcG9ydGVkVGV4dDp7Y246WyJUaGUg QWRvYmUgRmxhc2ggUGxheWVyIGlzIHJlcXVpcmVkLiIse3RhZzoiYnIifSx7dGFnOiJhIixjbjpb e3RhZzoiaW1nIixzcmM6Imh0dHA6Ly93d3cuYWRvYmUuY29tL2ltYWdlcy9zaGFyZWQvZG93bmxv YWRfYnV0dG9ucy9nZXRfZmxhc2hfcGxheWVyLmdpZiJ9XSxocmVmOiJodHRwOi8vd3d3LmFkb2Jl LmNvbS9zaG9ja3dhdmUvZG93bmxvYWQvZG93bmxvYWQuY2dpP1AxX1Byb2RfVmVyc2lvbj1TaG9j a3dhdmVGbGFzaCIsdGFyZ2V0OiJfZmxhc2gifV19LHBhcmFtczp7bW92aWU6IkB1cmwiLG1lbnU6 IkBjb250cm9scyIscGxheToiQHN0YXJ0IixxdWFsaXR5OiJoaWdoIixhbGxvd3NjcmlwdGFjY2Vz czoiQHNjcmlwdGluZyIsYWxsb3duZXR3b3JraW5nOiJhbGwiLGFsbG93ZnVsbFNjcmVlbjpmYWxz ZSxiZ2NvbG9yOiIjRkZGRkZGIix3bW9kZToib3BhcXVlIixsb29wOiJAbG9vcCJ9fSxFeHQuaXNJ RT97Y2xhc3NpZDoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIixj b2RlYmFzZToiaHR0cCIrKChFeHQuaXNTZWN1cmUpPyJzIjoiIikrIjovL2Rvd25sb2FkLm1hY3Jv bWVkaWEuY29tL3B1Yi9zaG9ja3dhdmUvY2Ficy9mbGFzaC9zd2ZsYXNoLmNhYiN2ZXJzaW9uPTYs MCw0MCwwIn06e2RhdGE6IkB1cmwifSksSldQOkV4dC5hcHBseSh7dGFnOiJvYmplY3QiLGNsczoi eC1tZWRpYSB4LW1lZGlhLXN3ZiB4LW1lZGlhLWZsdiIsdHlwZToiYXBwbGljYXRpb24veC1zaG9j a3dhdmUtZmxhc2giLGRhdGE6IkB1cmwiLGxvb3A6ZmFsc2Usc3RhcnQ6ZmFsc2UsYm91bmRFeHRl cm5hbHM6WyJzZW5kRXZlbnQiLCJhZGRNb2RlbExpc3RlbmVyIiwiYWRkQ29udHJvbGxlckxpc3Rl bmVyIiwiYWRkVmlld0xpc3RlbmVyIiwiZ2V0Q29uZmlnIiwiZ2V0UGxheWxpc3QiXSxwYXJhbXM6 e21vdmllOiJAdXJsIixmbGFzaFZhcnM6e2F1dG9zdGFydDoiQHN0YXJ0IixyZXBlYXQ6IkBsb29w IixoZWlnaHQ6IkBoZWlnaHQiLHdpZHRoOiJAd2lkdGgiLGlkOiJAaWQifX19LEV4dC5pc0lFP3tj bGFzc2lkOiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLGNvZGVi YXNlOiJodHRwIisoKEV4dC5pc1NlY3VyZSk/InMiOiIiKSsiOi8vZG93bmxvYWQubWFjcm9tZWRp YS5jb20vcHViL3Nob2Nrd2F2ZS9jYWJzL2ZsYXNoL3N3Zmxhc2guY2FiI3ZlcnNpb249OCwwLDAs MCJ9OmZhbHNlKSxRVDpFeHQuYXBwbHkoe3RhZzoib2JqZWN0IixjbHM6IngtbWVkaWEgeC1tZWRp YS1xdWlja3RpbWUiLHR5cGU6InZpZGVvL3F1aWNrdGltZSIsc3R5bGU6e3Bvc2l0aW9uOiJyZWxh dGl2ZSIsInotaW5kZXgiOjEsYmVoYXZpb3I6InVybCgjcXRfZXZlbnRfc291cmNlKSJ9LHNjYWxl OiJhc3BlY3QiLHVuc3VwcG9ydGVkVGV4dDonPGEgaHJlZj0iaHR0cDovL3d3dy5hcHBsZS5jb20v cXVpY2t0aW1lL2Rvd25sb2FkLyI+R2V0IFF1aWNrVGltZTwvYT4nLHNjcmlwdGluZzp0cnVlLHZv bHVtZToiNTAlIixkYXRhOiJAdXJsIixwYXJhbXM6e3NyYzpFeHQuaXNJRT8iQHVybCI6bnVsbCxo cmVmOiJodHRwOi8vcXVpY2t0aW1lLmNvbSIsdGFyZ2V0OiJfYmxhbmsiLGF1dG9wbGF5OiJAc3Rh cnQiLHRhcmdldGNhY2hlOnRydWUsY2FjaGU6dHJ1ZSx3bW9kZToidHJhbnNwYXJlbnQiLGNvbnRy b2xsZXI6IkBjb250cm9scyIsZW5hYmxlamF2YXNjcmlwdDoiQHNjcmlwdGluZyIsbG9vcDoiQGxv b3AiLHNjYWxlOiJAc2NhbGUiLHZvbHVtZToiQHZvbHVtZSIsUVRTUkM6IkB1cmwifX0sRXh0Lmlz SUU/e2NsYXNzaWQ6ImNsc2lkOjAyQkYyNUQ1LThDMTctNEIyMy1CQzgwLUQzNDg4QUJEREM2QiIs Y29kZWJhc2U6Imh0dHAiKygoRXh0LmlzU2VjdXJlKT8icyI6IiIpKyI6Ly93d3cuYXBwbGUuY29t L3F0YWN0aXZleC9xdHBsdWdpbi5jYWIjdmVyc2lvbj03LDIsMSwwIn06e1BMVUdJTlNQQUdFOiJo dHRwOi8vd3d3LmFwcGxlLmNvbS9xdWlja3RpbWUvZG93bmxvYWQvIn0pLFFURVZFTlRTOnt0YWc6 Im9iamVjdCIsaWQ6InF0X2V2ZW50X3NvdXJjZSIsY2xzOiJ4LW1lZGlhIHgtbWVkaWEtcXRldmVu dHMiLHR5cGU6InZpZGVvL3F1aWNrdGltZSIscGFyYW1zOnt9LGNsYXNzaWQ6ImNsc2lkOkNCOTI3 RDEyLTRGRjctNGE5ZS1BMTY5LTU2RTRCOEE3NTU5OCIsY29kZWJhc2U6Imh0dHAiKygoRXh0Lmlz U2VjdXJlKT8icyI6IiIpKyI6Ly93d3cuYXBwbGUuY29tL3F0YWN0aXZleC9xdHBsdWdpbi5jYWIj dmVyc2lvbj03LDIsMSwwIn0sV1BNUDM6RXh0LmFwcGx5KHt0YWc6Im9iamVjdCIsY2xzOiJ4LW1l ZGlhIHgtbWVkaWEtYXVkaW8geC1tZWRpYS13b3JkcHJlc3MiLHR5cGU6ImFwcGxpY2F0aW9uL3gt c2hvY2t3YXZlLWZsYXNoIixkYXRhOiJAdXJsIixzdGFydDp0cnVlLGxvb3A6ZmFsc2UsYm91bmRF eHRlcm5hbHM6WyJvcGVuIiwiY2xvc2UiLCJzZXRWb2x1bWUiLCJsb2FkIl0scGFyYW1zOnttb3Zp ZToiQHVybCIsd2lkdGg6IkB3aWR0aCIsZmxhc2hWYXJzOnthdXRvc3RhcnQ6IkBzdGFydCIsY29u dHJvbGxlcjoiQGNvbnRyb2xzIixlbmFibGVqYXZhc2NyaXB0OiJAc2NyaXB0aW5nIixsb29wOiJA bG9vcCIsc2NhbGU6IkBzY2FsZSIsaW5pdGlhbHZvbHVtZToiQHZvbHVtZSIsd2lkdGg6IkB3aWR0 aCIsZW5jb2RlOiJubyIsc291bmRGaWxlOiIifX19LEV4dC5pc0lFP3tjbGFzc2lkOiJjbHNpZDpE MjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAifTpmYWxzZSksUkVBTDpFeHQuYXBw bHkoe3RhZzoib2JqZWN0IixjbHM6IngtbWVkaWEgeC1tZWRpYS1yZWFsIix0eXBlOiJhdWRpby94 LXBuLXJlYWxhdWRpbyIsZGF0YToiQHVybCIsY29udHJvbHM6ImltYWdld2luZG93LGFsbCIsc3Rh cnQ6ZmFsc2Usc3RhbmRieToiTG9hZGluZyBSZWFsIE1lZGlhIFBsYXllciBjb21wb25lbnRzLi4u IixwYXJhbXM6e3NyYzoiQHVybCIsYXV0b3N0YXJ0OiJAc3RhcnQiLGNlbnRlcjpmYWxzZSxtYWlu dGFpbmFzcGVjdDp0cnVlLGNvbnRyb2xsZXI6IkBjb250cm9scyIsY29udHJvbHM6IkBjb250cm9s cyIsdm9sdW1lOiJAdm9sdW1lIixsb29wOiJAbG9vcCIsY29uc29sZToiX21hc3RlciIsYmFja2dy b3VuZGNvbG9yOiIjMDAwMDAwIn19LEV4dC5pc0lFP3tjbGFzc2lkOiJjbHNpZDpDRkNEQUEwMy04 QkU0LTExQ0YtQjg0Qi0wMDIwQUZCQkNDRkEifTpmYWxzZSksU1ZHOnt0YWc6Im9iamVjdCIsY2xz OiJ4LW1lZGlhIHgtbWVkaWEtaW1nIHgtbWVkaWEtc3ZnIix0eXBlOiJpbWFnZS9zdmcreG1sIixk YXRhOiJAdXJsIixwYXJhbXM6e3NyYzoiQHVybCJ9fSxHSUY6e3RhZzoiaW1nIixjbHM6IngtbWVk aWEgeC1tZWRpYS1pbWcgeC1tZWRpYS1naWYiLHNyYzoiQHVybCJ9LFRJRkY6e3RhZzoib2JqZWN0 Iix0eXBlOiJpbWFnZS90aWZmIixjbHM6IngtbWVkaWEgeC1tZWRpYS1pbWcgeC1tZWRpYS10aWZm IixkYXRhOiJAdXJsIn0sSlBFRzp7dGFnOiJpbWciLGNsczoieC1tZWRpYSB4LW1lZGlhLWltZyB4 LW1lZGlhLWpwZWciLHNyYzoiQHVybCJ9LEpQMjp7dGFnOiJvYmplY3QiLGNsczoieC1tZWRpYSB4 LW1lZGlhLWltZyB4LW1lZGlhLWpwMiIsdHlwZTpFeHQuaXNJRT8iaW1hZ2UvanBlZzIwMDAtaW1h Z2UiOiJpbWFnZS9qcDIiLGRhdGE6IkB1cmwifSxQTkc6e3RhZzoiaW1nIixjbHM6IngtbWVkaWEg eC1tZWRpYS1pbWcgeC1tZWRpYS1wbmciLHNyYzoiQHVybCJ9LEhUTTp7dGFnOiJpZnJhbWUiLGNs czoieC1tZWRpYSB4LW1lZGlhLWh0bWwiLGZyYW1lQm9yZGVyOjAsYXV0b1NpemU6dHJ1ZSxzdHls ZTp7b3ZlcmZsb3c6ImF1dG8iLCJ6LWluZGV4IjoyfSxzcmM6IkB1cmwifSxUWFQ6e3RhZzoib2Jq ZWN0IixjbHM6IngtbWVkaWEgeC1tZWRpYS10ZXh0Iix0eXBlOiJ0ZXh0L3BsYWluIixzdHlsZTp7 b3ZlcmZsb3c6ImF1dG8iLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxkYXRhOiJAdXJsIn0s UlRGOnt0YWc6Im9iamVjdCIsY2xzOiJ4LW1lZGlhIHgtbWVkaWEtcnRmIix0eXBlOiJhcHBsaWNh dGlvbi9ydGYiLHN0eWxlOntvdmVyZmxvdzoiYXV0byIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAw JSJ9LGRhdGE6IkB1cmwifSxKUzp7dGFnOiJvYmplY3QiLGNsczoieC1tZWRpYSB4LW1lZGlhLWpz Iix0eXBlOiJ0ZXh0L2phdmFzY3JpcHQiLHN0eWxlOntvdmVyZmxvdzoiYXV0byIsd2lkdGg6IjEw MCUiLGhlaWdodDoiMTAwJSJ9LGRhdGE6IkB1cmwifSxDU1M6e3RhZzoib2JqZWN0IixjbHM6Ingt bWVkaWEgeC1tZWRpYS1jc3MiLHR5cGU6InRleHQvY3NzIixzdHlsZTp7b3ZlcmZsb3c6ImF1dG8i LHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSxkYXRhOiJAdXJsIn0sU0lMVkVSTElHSFQ6e3Rh Zzoib2JqZWN0IixjbHM6IngtbWVkaWEgeC1tZWRpYS1zaWx2ZXJsaWdodCIsdHlwZToiYXBwbGlj YXRpb24vYWctcGx1Z2luIixkYXRhOiJAdXJsIixwYXJhbXM6e01pblJ1bnRpbWVWZXJzaW9uOiIx LjAiLHNvdXJjZToiQHVybCJ9fSxTSUxWRVJMSUdIVDI6e3RhZzoib2JqZWN0IixjbHM6IngtbWVk aWEgeC1tZWRpYS1zaWx2ZXJsaWdodCIsdHlwZToiYXBwbGljYXRpb24veC1zaWx2ZXJsaWdodC0y LWIyIixkYXRhOiJkYXRhOmFwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQtMi1iMiwiLHBhcmFtczp7 TWluUnVudGltZVZlcnNpb246IjIuMCJ9LHVuc3VwcG9ydGVkVGV4dDonPGEgaHJlZj0iaHR0cDov L2dvMi5taWNyb3NvZnQuY29tL2Z3bGluay8/TGlua0lEPTExNDU3NiZ2PTIuMCI+PGltZyBzdHls ZT0iYm9yZGVyLXdpZHRoOiAwcHQ7IiBhbHQ9IkdldCBNaWNyb3NvZnQgU2lsdmVybGlnaHQiIHNy Yz0iaHR0cDovL2dvMi5taWNyb3NvZnQuY29tL2Z3bGluay8/TGlua0lEPTEwODE4MSIvPjwvYT4n fSxEQVRBVklFVzp7dGFnOiJvYmplY3QiLGNsczoieC1tZWRpYSB4LW1lZGlhLWRhdGF2aWV3Iixj bGFzc2lkOiJDTFNJRDowRUNEOUI2NC0yM0FBLTExRDAtQjM1MS0wMEEwQzkwNTVEOEUiLHR5cGU6 ImFwcGxpY2F0aW9uL3gtb2xlb2JqZWN0Iix1bnN1cHBvcnRlZFRleHQ6Ik1TIERhdGF2aWV3IENv bnRyb2wgaXMgbm90IGluc3RhbGxlZCJ9LE9XQ1hMUzpFeHQuYXBwbHkoe3RhZzoib2JqZWN0Iixj bHM6IngtbWVkaWEgeC1tZWRpYS14bHMiLHR5cGU6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCIs Y29udHJvbHR5cGU6ImV4Y2VsIixwYXJhbXM6e0RhdGFUeXBlOiJDU1ZVUkwiLENTVlVSTDoiQHVy bCIsRGlzcGxheVRpdGxlQmFyOnRydWUsQXV0b0ZpdDp0cnVlfX0sRXh0LmlzSUU/e2NvZGViYXNl OiJmaWxlOm1zb3djLmNhYiIsY2xhc3NpZDoiQ0xTSUQ6MDAwMkU1MTAtMDAwMC0wMDAwLUMwMDAt MDAwMDAwMDAwMDQ2In06ZmFsc2UpLE9XQ0NIQVJUOkV4dC5hcHBseSh7dGFnOiJvYmplY3QiLGNs czoieC1tZWRpYSB4LW1lZGlhLXhscyIsdHlwZToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsIixk YXRhOiJAdXJsIixwYXJhbXM6e0RhdGFUeXBlOiJDU1ZVUkwifX0sRXh0LmlzSUU/e2NsYXNzaWQ6 IkNMU0lEOjAwMDJFNTAwLTAwMDAtMDAwMC1DMDAwLTAwMDAwMDAwMDA0NiJ9OmZhbHNlKSxPRkZJ Q0U6e3RhZzoib2JqZWN0IixjbHM6IngtbWVkaWEgeC1tZWRpYS1vZmZpY2UiLHR5cGU6ImFwcGxp Y2F0aW9uL3gtbXNvZmZpY2UiLGRhdGE6IkB1cmwifSxQT1dFUlBPSU5UOkV4dC5hcHBseSh7dGFn OiJvYmplY3QiLGNsczoieC1tZWRpYSB4LW1lZGlhLXBwdCIsdHlwZToiYXBwbGljYXRpb24vdm5k Lm1zLXBvd2VycG9pbnQiLGZpbGU6IkB1cmwifSxFeHQuaXNJRT97Y2xhc3NpZDoiQ0xTSUQ6RUZC RDE0RjAtNkJGQi0xMUNGLTkxNzctMDA4MDVGODgxM0ZGIn06ZmFsc2UpLFhNTDp7dGFnOiJpZnJh bWUiLGNsczoieC1tZWRpYSB4LW1lZGlhLXhtbCIsc3R5bGU6e292ZXJmbG93OiJhdXRvIn0sc3Jj OiJAdXJsIn0sVkxDOkV4dC5hcHBseSh7dGFnOiJvYmplY3QiLGNsczoieC1tZWRpYSB4LW1lZGlh LXZsYyIsdHlwZToiYXBwbGljYXRpb24veC12bGMtcGx1Z2luIix2ZXJzaW9uOiJWaWRlb0xBTi5W TENQbHVnaW4uMiIscGx1Z2luc3BhZ2U6Imh0dHA6Ly93d3cudmlkZW9sYW4ub3JnIixldmVudHM6 dHJ1ZSxzdGFydDpmYWxzZSxwYXJhbXM6e1NyYzoiQHVybCIsTVJMOiJAdXJsIixhdXRvcGxheToi QHN0YXJ0IixTaG93RGlzcGxheToiQGNvbnRyb2xzIixWb2x1bWU6IkB2b2x1bWUiLEF1dG9sb29w OiJAbG9vcCJ9fSxFeHQuaXNJRT97Y2xhc3NpZDoiY2xzaWQ6OUJFMzE4MjItRkRBRC00NjFCLUFE NTEtQkUxRDFDMTU5OTIxIixDT0RFQkFTRToiaHR0cDovL2Rvd25sb2Fkcy52aWRlb2xhbi5vcmcv cHViL3ZpZGVvbGFuL3ZsYy9sYXRlc3Qvd2luMzIvYXh2bGMuY2FiIn06ZmFsc2UpLFJEUDpFeHQu YXBwbHkoe3RhZzoib2JqZWN0IixjbHM6IngtbWVkaWEgeC1tZWRpYS1yZHAiLHR5cGU6ImFwcGxp Y2F0aW9uL3JkcyIsdW5zdXBwb3J0ZWRUZXh0OidSZW1vdGUgRGVza3RvcCBXZWIgQ29ubmVjdGlv biBBY3RpdmVYIGNvbnRyb2wgaXMgcmVxdWlyZWQuIDxhIHRhcmdldD0iX21zZCIgaHJlZj0iaHR0 cDovL2dvLm1pY3Jvc29mdC5jb20vZndsaW5rLz9saW5raWQ9NDQzMzMiPkRvd25sb2FkIGl0IGhl cmU8L2E+LicscGFyYW1zOntTZXJ2ZXI6IkB1cmwiLEZ1bGxzY3JlZW46ZmFsc2UsU3RhcnRDb25u ZWN0ZWQ6ZmFsc2UsRGVza3RvcFdpZHRoOiJAd2lkdGgiLERlc2t0b3BIZWlnaHQ6IkBoZWlnaHQi fX0sRXh0LmlzSUU/e2NsYXNzaWQ6IkNMU0lEOjkwNTlmMzBmLTRlYjEtNGJkMi05ZmRjLTM2ZjQz YTIxOGY0YSIsQ09ERUJBU0U6Im1zcmRwLmNhYiN2ZXJzaW9uPTUsMiwzNzkwLDAifTpmYWxzZSl9 O2lmKEV4dC5wcm92aWRlKXtFeHQucHJvdmlkZSgidXhtZWRpYSIpfUV4dC5hcHBseUlmKEFycmF5 LnByb3RvdHlwZSx7bWFwOmZ1bmN0aW9uKGcsayl7dmFyIGY9dGhpcy5sZW5ndGg7aWYodHlwZW9m IGchPSJmdW5jdGlvbiIpe3Rocm93IG5ldyBUeXBlRXJyb3IoKX12YXIgaj1uZXcgQXJyYXkoZik7 Zm9yKHZhciBoPTA7aDxmO2grKyl7aWYoaCBpbiB0aGlzKXtqW2hdPWcuY2FsbChrfHx0aGlzLHRo aXNbaF0saCx0aGlzKX19cmV0dXJuIGp9fSk7RXh0LnV4Lk1lZGlhQ29tcG9uZW50PUV4dC51eC5N ZWRpYS5Db21wb25lbnQ7RXh0LnV4Lk1lZGlhUGFuZWw9RXh0LnV4Lk1lZGlhLlBhbmVsO0V4dC51 eC5NZWRpYVBvcnRsZXQ9RXh0LnV4Lk1lZGlhLlBvcnRsZXQ7RXh0LnV4Lk1lZGlhV2luZG93PUV4 dC51eC5NZWRpYS5XaW5kb3d9KSgpOyhmdW5jdGlvbigpe3ZhciBhPUV4dC51eC5NZWRpYTtFeHQu dXguTWVkaWEuRmxhc2g9RXh0LmV4dGVuZChFeHQudXguTWVkaWEse3ZhcnNOYW1lOiJmbGFzaFZh cnMiLGV4dGVybmFsc05hbWVzcGFjZTpudWxsLG1lZGlhVHlwZTpFeHQuYXBwbHkoe3RhZzoib2Jq ZWN0IixjbHM6IngtbWVkaWEgeC1tZWRpYS1zd2YiLHR5cGU6ImFwcGxpY2F0aW9uL3gtc2hvY2t3 YXZlLWZsYXNoIixsb29wOm51bGwsc2NyaXB0aW5nOiJzYW1lRG9tYWluIixzdGFydDp0cnVlLHVu c3VwcG9ydGVkVGV4dDp7Y246WyJUaGUgQWRvYmUgRmxhc2ggUGxheWVyezB9aXMgcmVxdWlyZWQu Iix7dGFnOiJiciJ9LHt0YWc6ImEiLGNuOlt7dGFnOiJpbWciLHNyYzoiaHR0cDovL3d3dy5hZG9i ZS5jb20vaW1hZ2VzL3NoYXJlZC9kb3dubG9hZF9idXR0b25zL2dldF9mbGFzaF9wbGF5ZXIuZ2lm In1dLGhyZWY6Imh0dHA6Ly93d3cuYWRvYmUuY29tL3Nob2Nrd2F2ZS9kb3dubG9hZC9kb3dubG9h ZC5jZ2k/UDFfUHJvZF9WZXJzaW9uPVNob2Nrd2F2ZUZsYXNoIix0YXJnZXQ6Il9mbGFzaCJ9XX0s cGFyYW1zOnttb3ZpZToiQHVybCIscGxheToiQHN0YXJ0Iixsb29wOiJAbG9vcCIsbWVudToiQGNv bnRyb2xzIixxdWFsaXR5OiJoaWdoIixiZ2NvbG9yOiIjRkZGRkZGIix3bW9kZToib3BhcXVlIixh bGxvd3NjcmlwdGFjY2VzczoiQHNjcmlwdGluZyIsYWxsb3dmdWxsc2NyZWVuOmZhbHNlLGFsbG93 bmV0d29ya2luZzoiYWxsIn19LEV4dC5pc0lFP3tjbGFzc2lkOiJjbHNpZDpEMjdDREI2RS1BRTZE LTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLGNvZGViYXNlOiJodHRwIisoKEV4dC5pc1NlY3VyZSk/ InMiOiIiKSsiOi8vZG93bmxvYWQubWFjcm9tZWRpYS5jb20vcHViL3Nob2Nrd2F2ZS9jYWJzL2Zs YXNoL3N3Zmxhc2guY2FiI3ZlcnNpb249NiwwLDQwLDAifTp7ZGF0YToiQHVybCJ9KSxnZXRNZWRp YVR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZWRpYVR5cGV9LGFzc2VydElkOmZ1bmN0aW9u KGYsZSl7Znx8KGY9ZXx8RXh0LmlkKCkpO3JldHVybiBmLnJlcGxhY2UoL1wrfC18XFx8XC98XCov ZywiIil9LGluaXRNZWRpYTpmdW5jdGlvbigpe2EuRmxhc2guc3VwZXJjbGFzcy5pbml0TWVkaWEu Y2FsbCh0aGlzKTt2YXIgbD1FeHQuYXBwbHkoe30sdGhpcy5tZWRpYUNmZ3x8e30pO3ZhciBqPSh0 aGlzLnJlcXVpcmVkVmVyc2lvbj1sLnJlcXVpcmVkVmVyc2lvbnx8dGhpcy5yZXF1aXJlZFZlcnNp b258fGZhbHNlKTt2YXIgZT0hISh0aGlzLnBsYXllclZlcnNpb249dGhpcy5kZXRlY3RGbGFzaFZl cnNpb24oKSk7dmFyIGg9ZSYmKGo/dGhpcy5hc3NlcnRWZXJzaW9uKGopOnRydWUpO3ZhciBnPXRo aXMuYXNzZXJ0KGwudW5zdXBwb3J0ZWRUZXh0fHx0aGlzLnVuc3VwcG9ydGVkVGV4dHx8KHRoaXMu Z2V0TWVkaWFUeXBlKCl8fHt9KS51bnN1cHBvcnRlZFRleHQsbnVsbCk7aWYoZyl7Zz1FeHQuRG9t SGVscGVyLm1hcmt1cChnKTtnPWwudW5zdXBwb3J0ZWRUZXh0PVN0cmluZy5mb3JtYXQoZywoaj8i ICIraisiICI6IiAiKSwodGhpcy5wbGF5ZXJWZXJzaW9uPyIgIit0aGlzLnBsYXllclZlcnNpb24r IiAiOiIgTm90IGluc3RhbGxlZC4iKSl9bC5tZWRpYVR5cGU9IlNXRiI7aWYoIWgpe3RoaXMuYXV0 b01hc2s9ZmFsc2U7dmFyIGY9ZSYmdGhpcy5hc3NlcnRWZXJzaW9uKCI2LjAuNjUiKTtpZihmJiZs Lmluc3RhbGxVcmwpe2w9bC5pbnN0YWxsRGVzY3JpcHRvcnx8e21lZGlhVHlwZToiU1dGIix0YWc6 Im9iamVjdCIsY2xzOiJ4LW1lZGlhIHgtbWVkaWEtc3dmIHgtbWVkaWEtc3dmaW5zdGFsbGVyIixp ZDoiU1dGSW5zdGFsbGVyIix0eXBlOiJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIsZGF0 YToiQHVybCIsdXJsOnRoaXMucHJlcGFyZVVSTChsLmluc3RhbGxVcmwpLHdpZHRoOigvJSQvLnRl c3QobC53aWR0aCkpP2wud2lkdGg6KChwYXJzZUludChsLndpZHRoLDEwKXx8MCk8MzEwPzMxMDps LndpZHRoKSxoZWlnaHQ6KC8lJC8udGVzdChsLmhlaWdodCkpP2wuaGVpZ2h0OigocGFyc2VJbnQo bC5oZWlnaHQsMTApfHwwKTwxMzg/MTM4OmwuaGVpZ2h0KSxsb29wOmZhbHNlLHN0YXJ0OnRydWUs dW5zdXBwb3J0ZWRUZXh0OmcscGFyYW1zOntxdWFsaXR5OiJoaWdoIixtb3ZpZToiQHVybCIsYWxs b3dzY3JpcHRhY2VzczoiYWx3YXlzIix3bW9kZToib3BhcXVlIixhbGlnbjoibWlkZGxlIixiZ2Nv bG9yOiIjM0E2RUE1IixwbHVnaW5zcGFnZTpsLnBsdWdpbnNQYWdlfHx0aGlzLnBsdWdpbnNQYWdl fHwiaHR0cDovL3d3dy5hZG9iZS5jb20vZ28vZ2V0Zmxhc2hwbGF5ZXIifX07bC5wYXJhbXNbdGhp cy52YXJzTmFtZV09Ik1NcmVkaXJlY3RVUkw9IisobC5pbnN0YWxsUmVkaXJlY3R8fHdpbmRvdy5s b2NhdGlvbikrIiZNTXBsYXllclR5cGU9IisoRXh0LmlzSUU/IkFjdGl2ZVgiOiJQbHVnaW4iKSsi Jk1NZG9jdGl0bGU9IisoZG9jdW1lbnQudGl0bGU9ZG9jdW1lbnQudGl0bGUuc2xpY2UoMCw0Nykr IiAtIEZsYXNoIFBsYXllciBJbnN0YWxsYXRpb24iKX1lbHNle2wubWVkaWFUeXBlPW51bGx9fWlm KGwuZXZlbnRTeW5jaCl7bC5wYXJhbXN8fChsLnBhcmFtcz17fSk7dmFyIGs9bC5wYXJhbXNbdGhp cy52YXJzTmFtZV18fChsLnBhcmFtc1t0aGlzLnZhcnNOYW1lXT17fSk7aWYodHlwZW9mIGs9PT0i c3RyaW5nIil7az1FeHQudXJsRGVjb2RlKGssdHJ1ZSl9dmFyIGk9KGwuZXZlbnRTeW5jaD09PXRy dWU/e2FsbG93ZWREb21haW46ay5hbGxvd2VkRG9tYWlufHxkb2N1bWVudC5sb2NhdGlvbi5ob3N0 bmFtZSxlbGVtZW50SUQ6bC5pZHx8KGwuaWQ9RXh0LmlkKCkpLGV2ZW50SGFuZGxlcjoiRXh0LnV4 Lk1lZGlhLkZsYXNoLmV2ZW50U3luY2gifTpsLmV2ZW50U3luY2gpO0V4dC5hcHBseShsLnBhcmFt cyx7YWxsb3dzY3JpcHRhY2Nlc3M6ImFsd2F5cyJ9KVt0aGlzLnZhcnNOYW1lXT1FeHQuYXBwbHlJ ZihrLGkpfXRoaXMuYmluZEV4dGVybmFscyhsLmJvdW5kRXh0ZXJuYWxzKTtkZWxldGUgbC5yZXF1 aXJlZFZlcnNpb247ZGVsZXRlIGwuaW5zdGFsbFVybDtkZWxldGUgbC5pbnN0YWxsUmVkaXJlY3Q7 ZGVsZXRlIGwuaW5zdGFsbERlc2NyaXB0b3I7ZGVsZXRlIGwuZXZlbnRTeW5jaDtkZWxldGUgbC5i b3VuZEV4dGVybmFsczt0aGlzLm1lZGlhQ2ZnPWx9LGFzc2VydFZlcnNpb246ZnVuY3Rpb24oZyl7 dmFyIGY7Z3x8KGc9W10pO2lmKEV4dC5pc0FycmF5KGcpKXtmPWd9ZWxzZXtmPVN0cmluZyhnKS5z cGxpdCgiLiIpfWY9KGYuY29uY2F0KFswLDAsMCwwXSkpLnNsaWNlKDAsMyk7dmFyIGU7aWYoIShl PXRoaXMucGxheWVyVmVyc2lvbnx8KHRoaXMucGxheWVyVmVyc2lvbj10aGlzLmRldGVjdEZsYXNo VmVyc2lvbigpKSkpe3JldHVybiBmYWxzZX1pZihlLm1ham9yPnBhcnNlRmxvYXQoZlswXSkpe3Jl dHVybiB0cnVlfWVsc2V7aWYoZS5tYWpvcj09cGFyc2VGbG9hdChmWzBdKSl7aWYoZS5taW5vcj5w YXJzZUZsb2F0KGZbMV0pKXtyZXR1cm4gdHJ1ZX1lbHNle2lmKGUubWlub3I9PXBhcnNlRmxvYXQo ZlsxXSkpe2lmKGUucmV2Pj1wYXJzZUZsb2F0KGZbMl0pKXtyZXR1cm4gdHJ1ZX19fX19cmV0dXJu IGZhbHNlfSxkZXRlY3RGbGFzaFZlcnNpb246ZnVuY3Rpb24oKXtpZihhLkZsYXNoLnByb3RvdHlw ZS5mbGFzaFZlcnNpb24pe3JldHVybiB0aGlzLnBsYXllclZlcnNpb249YS5GbGFzaC5wcm90b3R5 cGUuZmxhc2hWZXJzaW9ufXZhciBmPWZhbHNlO3ZhciBnPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYh IWUubGVuZ3RoP3ttYWpvcjplWzBdIT09bnVsbD9wYXJzZUludChlWzBdLDEwKTowLG1pbm9yOmVb MV0hPT1udWxsP3BhcnNlSW50KGVbMV0sMTApOjAscmV2OmVbMl0hPT1udWxsP3BhcnNlSW50KGVb Ml0sMTApOjAsdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYWpvcisiLiIrdGhpcy5t aW5vcisiLiIrdGhpcy5yZXZ9fTpmYWxzZX07dmFyIGo9bnVsbDtpZihFeHQuaXNJRSl7dHJ5e2o9 bmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoLjciKX1jYXRj aChrKXt0cnl7aj1uZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxh c2guNiIpO2Y9WzYsMCwyMV07ai5hbGxvd3NjcmlwdGFjY2Vzcz0iYWx3YXlzIn1jYXRjaChoKXtp ZihmJiZmWzBdPT09Nil7cmV0dXJuIGcoZil9fXRyeXtqPW5ldyBBY3RpdmVYT2JqZWN0KCJTaG9j a3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaCIpfWNhdGNoKGkpe319aWYoail7Zj1qLkdldFZhcmlh YmxlKCIkdmVyc2lvbiIpLnNwbGl0KCIgIilbMV0uc3BsaXQoIiwiKX19ZWxzZXtpZihuYXZpZ2F0 b3IucGx1Z2lucyYmbmF2aWdhdG9yLm1pbWVUeXBlcy5sZW5ndGgpe2o9bmF2aWdhdG9yLnBsdWdp bnNbIlNob2Nrd2F2ZSBGbGFzaCJdO2lmKGomJmouZGVzY3JpcHRpb24pe2Y9ai5kZXNjcmlwdGlv bi5yZXBsYWNlKC8oW2EtekEtWl18XHMpKy8sIiIpLnJlcGxhY2UoLyhccytyfFxzK2JbMC05XSsp LywiLiIpLnNwbGl0KCIuIil9fX1yZXR1cm4odGhpcy5wbGF5ZXJWZXJzaW9uPWEuRmxhc2gucHJv dG90eXBlLmZsYXNoVmVyc2lvbj1nKGYpKX0sb25BZnRlck1lZGlhOmZ1bmN0aW9uKGUpe2EuRmxh c2guc3VwZXJjbGFzcy5vbkFmdGVyTWVkaWEuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBmO2lm KGY9dGhpcy5tZWRpYU9iamVjdCl7dmFyIGc9Zi5pZDtpZihFeHQuaXNJRSl7aWYoIShFeHQucXVl cnkoInNjcmlwdFtmb3I9IitnKyJdIikubGVuZ3RoKSl7YygndmFyIGM7aWYoYz1FeHQuZ2V0Q21w KCInK3RoaXMuaWQrJyIpKXtjLm9uZnNDb21tYW5kLmFwcGx5KGMsYXJndW1lbnRzKTt9Jyx7ZXZl bnQ6IkZTQ29tbWFuZCIsaHRtbEZvcjpnfSl9fWVsc2V7d2luZG93W2crIl9Eb0ZTQ29tbWFuZCJd fHwod2luZG93W2crIl9Eb0ZTQ29tbWFuZCJdPXRoaXMub25mc0NvbW1hbmQuY3JlYXRlRGVsZWdh dGUodGhpcykpfX19LGNsZWFyTWVkaWE6ZnVuY3Rpb24oKXtpZih0aGlzLm1lZGlhT2JqZWN0KXt2 YXIgZT10aGlzLm1lZGlhT2JqZWN0LmlkO2lmKEV4dC5pc0lFKXtFeHQuc2VsZWN0KCJzY3JpcHRb Zm9yPSIrZSsiXSIsdHJ1ZSkucmVtb3ZlKCl9ZWxzZXt3aW5kb3dbZSsiX0RvRlNDb21tYW5kIl09 bnVsbDtkZWxldGUgd2luZG93W2UrIl9Eb0ZTQ29tbWFuZCJdfX1yZXR1cm4gYS5GbGFzaC5zdXBl cmNsYXNzLmNsZWFyTWVkaWEuY2FsbCh0aGlzKXx8dGhpc30sZ2V0U1dGT2JqZWN0OmZ1bmN0aW9u KCl7cmV0dXJuIHRoaXMuZ2V0SW50ZXJmYWNlKCl9LG9uZnNDb21tYW5kOmZ1bmN0aW9uKGYsZSl7 aWYodGhpcy5ldmVudHMpe3RoaXMuZmlyZUV2ZW50KCJmc2NvbW1hbmQiLHRoaXMsZixlKX19LHNl dFZhcmlhYmxlOmZ1bmN0aW9uKGcsZil7dmFyIGU9dGhpcy5nZXRJbnRlcmZhY2UoKTtpZihlJiYi U2V0VmFyaWFibGUiIGluIGUpe2UuU2V0VmFyaWFibGUoZyxmKTtyZXR1cm4gdHJ1ZX1lPW51bGw7 cmV0dXJuIGZhbHNlfSxnZXRWYXJpYWJsZTpmdW5jdGlvbihmKXt2YXIgZT10aGlzLmdldEludGVy ZmFjZSgpO2lmKGUmJiJHZXRWYXJpYWJsZSIgaW4gZSl7cmV0dXJuIGUuR2V0VmFyaWFibGUoZil9 ZT1udWxsO3JldHVybiB1bmRlZmluZWR9LGJpbmRFeHRlcm5hbHM6ZnVuY3Rpb24oZil7aWYoZiYm dGhpcy5wbGF5ZXJWZXJzaW9uLm1ham9yPj04KXtmPW5ldyBBcnJheSgpLmNvbmNhdChmKX1lbHNl e3JldHVybn12YXIgZT0odHlwZW9mIHRoaXMuZXh0ZXJuYWxzTmFtZXNwYWNlPT0ic3RyaW5nIj90 aGlzW3RoaXMuZXh0ZXJuYWxzTmFtZXNwYWNlXXx8KHRoaXNbdGhpcy5leHRlcm5hbHNOYW1lc3Bh Y2VdPXt9KTp0aGlzKTtFeHQuZWFjaChmLGZ1bmN0aW9uKGkpe3ZhciBnPWkubmFtZXx8aTt2YXIg aD1pLnJldHVyblR5cGV8fCJqYXZhc2NyaXB0IjtlW2ddfHwoZVtnXT1mdW5jdGlvbigpe3JldHVy biB0aGlzLmludm9rZS5hcHBseSh0aGlzLFtnLGhdLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xp Y2UuY2FsbChhcmd1bWVudHMsMCkpKX0uY3JlYXRlRGVsZWdhdGUodGhpcykpfSx0aGlzKX0saW52 b2tlOmZ1bmN0aW9uKGksZSl7dmFyIGcsZjtpZihpJiYoZz10aGlzLmdldEludGVyZmFjZSgpKSYm IkNhbGxGdW5jdGlvbiIgaW4gZyl7dmFyIGg9W1N0cmluZy5mb3JtYXQoJzxpbnZva2UgbmFtZT0i ezB9IiByZXR1cm50eXBlPSJ7MX0iPicsaSxlKSwiPGFyZ3VtZW50cz4iLChBcnJheS5wcm90b3R5 cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMikpLm1hcCh0aGlzLl90b1hNTCx0aGlzKS5qb2luKCIi KSwiPC9hcmd1bWVudHM+IiwiPC9pbnZva2U+Il0uam9pbigiIik7Zj1nLkNhbGxGdW5jdGlvbiho KTt0eXBlb2YgZj09PSJzdHJpbmciJiZlPT09ImphdmFzY3JpcHQiJiYoZj1FeHQuZGVjb2RlKGYp KX1yZXR1cm4gZn0sb25GbGFzaEluaXQ6ZnVuY3Rpb24oKXtpZih0aGlzLm1lZGlhTWFzayYmdGhp cy5hdXRvTWFzayl7dGhpcy5tZWRpYU1hc2suaGlkZSgpfXRoaXMuZmlyZUV2ZW50LmRlZmVyKDMw MCx0aGlzLFsiZmxhc2hpbml0Iix0aGlzLHRoaXMuZ2V0SW50ZXJmYWNlKCldKX0scG9sbFJlYWR5 U3RhdGU6ZnVuY3Rpb24oZSxnKXt2YXIgaDtpZihoPXRoaXMuZ2V0SW50ZXJmYWNlKCkpe2lmKHR5 cGVvZiBoLlBlcmNlbnRMb2FkZWQhPSJ1bmRlZmluZWQiKXt2YXIgZj1oLlBlcmNlbnRMb2FkZWQo KTt0aGlzLmZpcmVFdmVudCgicHJvZ3Jlc3MiLHRoaXMsdGhpcy5nZXRJbnRlcmZhY2UoKSxmKTtp ZihmPTEwMCl7ZSgpO3JldHVybn19dGhpcy5fY291bnRQb2xsKys+dGhpcy5fbWF4UG9sbHx8YXJn dW1lbnRzLmNhbGxlZS5kZWZlcigxMCx0aGlzLGFyZ3VtZW50cyl9fSxfaGFuZGxlU1dGRXZlbnQ6 ZnVuY3Rpb24oZil7dmFyIGU9Zi50eXBlfHxmfHxmYWxzZTtpZihlKXtpZih0aGlzLmV2ZW50cyYm IXRoaXMuZXZlbnRzW1N0cmluZyhlKV0pe3RoaXMuYWRkRXZlbnRzKFN0cmluZyhlKSl9cmV0dXJu IHRoaXMuZmlyZUV2ZW50LmFwcGx5KHRoaXMsW1N0cmluZyhlKSx0aGlzXS5jb25jYXQoQXJyYXku cHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKSl9fSxfdG9YTUw6ZnVuY3Rpb24oZil7 dmFyIGc9RXh0LnV0aWwuRm9ybWF0O3ZhciBlPXR5cGVvZiBmO2lmKGU9PSJzdHJpbmciKXtyZXR1 cm4iPHN0cmluZz4iK2cueG1sRW5jb2RlKGYpKyI8L3N0cmluZz4ifWVsc2V7aWYoZT09InVuZGVm aW5lZCIpe3JldHVybiI8dW5kZWZpbmVkLz4ifWVsc2V7aWYoZT09Im51bWJlciIpe3JldHVybiI8 bnVtYmVyPiIrZisiPC9udW1iZXI+In1lbHNle2lmKGY9PW51bGwpe3JldHVybiI8bnVsbC8+In1l bHNle2lmKGU9PSJib29sZWFuIil7cmV0dXJuIGY/Ijx0cnVlLz4iOiI8ZmFsc2UvPiJ9ZWxzZXtp ZihmIGluc3RhbmNlb2YgRGF0ZSl7cmV0dXJuIjxkYXRlPiIrZi5nZXRUaW1lKCkrIjwvZGF0ZT4i fWVsc2V7aWYoRXh0LmlzQXJyYXkoZikpe3JldHVybiB0aGlzLl9hcnJheVRvWE1MKGYpfWVsc2V7 aWYoZT09Im9iamVjdCIpe3JldHVybiB0aGlzLl9vYmplY3RUb1hNTChmKX1lbHNle3JldHVybiI8 bnVsbC8+In19fX19fX19fSxfYXJyYXlUb1hNTDpmdW5jdGlvbihoKXt2YXIgZz0iPGFycmF5PiI7 Zm9yKHZhciBmPTAsZT1oLmxlbmd0aDtmPGU7ZisrKXtnKz0nPHByb3BlcnR5IGlkPSInK2YrJyI+ Jyt0aGlzLl90b1hNTChoW2ZdKSsiPC9wcm9wZXJ0eT4ifXJldHVybiBnKyI8L2FycmF5PiJ9LF9v YmplY3RUb1hNTDpmdW5jdGlvbihmKXt2YXIgZT0iPG9iamVjdD4iO2Zvcih2YXIgZyBpbiBmKXtp ZihmLmhhc093blByb3BlcnR5KGcpKXtlKz0nPHByb3BlcnR5IGlkPSInK2crJyI+Jyt0aGlzLl90 b1hNTChmW2ddKSsiPC9wcm9wZXJ0eT4ifX1yZXR1cm4gZSsiPC9vYmplY3Q+In19KTtFeHQudXgu TWVkaWEuRmxhc2guZXZlbnRTeW5jaD1mdW5jdGlvbihlLGcpe3ZhciBmPUV4dC5nZXQoZSksaDtp ZihmJiYoaD1mLm93bmVyQ3QpKXtyZXR1cm4gaC5faGFuZGxlU1dGRXZlbnQuYXBwbHkoaCxBcnJh eS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpfX07dmFyIGI9e2luaXQ6ZnVuY3Rp b24oKXt0aGlzLmhpZGVNb2RlPSJub3NpemUiO3RoaXMudmlzaWJpbGl0eUNscz0ieC1oaWRlLW5v c2l6ZSI7dGhpcy5nZXRJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfHwodGhpcy5pZD0iZmxh c2gtY29tcCIrKCsrRXh0LkNvbXBvbmVudC5BVVRPX0lEKSl9O3RoaXMuYWRkRXZlbnRzKCJmbGFz aGluaXQiLCJmc2NvbW1hbmQiLCJwcm9ncmVzcyIpfX07RXh0LnV4Lk1lZGlhLkZsYXNoLkNvbXBv bmVudD1FeHQuZXh0ZW5kKEV4dC51eC5NZWRpYS5Db21wb25lbnQse2N0eXBlOiJFeHQudXguTWVk aWEuRmxhc2guQ29tcG9uZW50IixjbHM6IngtbWVkaWEtZmxhc2gtY29tcCIsYXV0b0VsOnt0YWc6 ImRpdiIsc3R5bGU6e292ZXJmbG93OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn19LG1lZGlhQ2xh c3M6RXh0LnV4Lk1lZGlhLkZsYXNoLGluaXRDb21wb25lbnQ6ZnVuY3Rpb24oKXtiLmluaXQuYXBw bHkodGhpcyxhcmd1bWVudHMpO0V4dC51eC5NZWRpYS5GbGFzaC5Db21wb25lbnQuc3VwZXJjbGFz cy5pbml0Q29tcG9uZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KTtFeHQucmVnKCJ1eGZsYXNo IixFeHQudXguTWVkaWEuRmxhc2guQ29tcG9uZW50KTthLkZsYXNoLnByb3RvdHlwZS5kZXRlY3RG bGFzaFZlcnNpb24oKTtFeHQudXguTWVkaWEuRmxhc2guUGFuZWw9RXh0LmV4dGVuZChFeHQudXgu TWVkaWEuUGFuZWwse2N0eXBlOiJFeHQudXguTWVkaWEuRmxhc2guUGFuZWwiLG1lZGlhQ2xhc3M6 RXh0LnV4Lk1lZGlhLkZsYXNoLGF1dG9TY3JvbGw6ZmFsc2Usc2hhZG93OmZhbHNlLGluaXRDb21w b25lbnQ6ZnVuY3Rpb24oKXtiLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO0V4dC51eC5NZWRp YS5GbGFzaC5QYW5lbC5zdXBlcmNsYXNzLmluaXRDb21wb25lbnQuYXBwbHkodGhpcyxhcmd1bWVu dHMpfX0pO0V4dC5yZWcoImZsYXNocGFuZWwiLGEuRmxhc2guUGFuZWwpO0V4dC5yZWcoInV4Zmxh c2hwYW5lbCIsYS5GbGFzaC5QYW5lbCk7RXh0LnV4Lk1lZGlhLkZsYXNoLlBvcnRsZXQ9RXh0LmV4 dGVuZChFeHQudXguTWVkaWEuUG9ydGxldCx7Y3R5cGU6IkV4dC51eC5NZWRpYS5GbGFzaC5Qb3J0 bGV0IixhbmNob3I6IjEwMCUiLGZyYW1lOnRydWUsY29sbGFwc2VFbDoiYndyYXAiLGNvbGxhcHNp YmxlOnRydWUsZHJhZ2dhYmxlOnRydWUsYXV0b1Njcm9sbDpmYWxzZSxhdXRvV2lkdGg6dHJ1ZSxj bHM6IngtcG9ydGxldCB4LWZsYXNoLXBvcnRsZXQiLG1lZGlhQ2xhc3M6RXh0LnV4Lk1lZGlhLkZs YXNoLGluaXRDb21wb25lbnQ6ZnVuY3Rpb24oKXtiLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMp O0V4dC51eC5NZWRpYS5GbGFzaC5QYW5lbC5zdXBlcmNsYXNzLmluaXRDb21wb25lbnQuYXBwbHko dGhpcyxhcmd1bWVudHMpfX0pO0V4dC5yZWcoImZsYXNocG9ydGxldCIsYS5GbGFzaC5Qb3J0bGV0 KTtFeHQucmVnKCJ1eGZsYXNocG9ydGxldCIsYS5GbGFzaC5Qb3J0bGV0KTtFeHQudXguTWVkaWEu Rmxhc2guV2luZG93PUV4dC5leHRlbmQoRXh0LnV4Lk1lZGlhLldpbmRvdyx7Y3R5cGU6IkV4dC51 eC5NZWRpYS5GbGFzaC5XaW5kb3ciLG1lZGlhQ2xhc3M6RXh0LnV4Lk1lZGlhLkZsYXNoLGF1dG9T Y3JvbGw6ZmFsc2Usc2hhZG93OmZhbHNlLGluaXRDb21wb25lbnQ6ZnVuY3Rpb24oKXtiLmluaXQu YXBwbHkodGhpcyxhcmd1bWVudHMpO0V4dC51eC5NZWRpYS5GbGFzaC5XaW5kb3cuc3VwZXJjbGFz cy5pbml0Q29tcG9uZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KTtFeHQucmVnKCJmbGFzaHdp bmRvdyIsYS5GbGFzaC5XaW5kb3cpO0V4dC51eC5NZWRpYS5GbGFzaC5FbGVtZW50PUV4dC5leHRl bmQoRXh0LnV4Lk1lZGlhLkVsZW1lbnQse3JlbW92ZTpmdW5jdGlvbigpe3ZhciBmO2lmKEV4dC5p c0lFJiZFeHQuaXNXaW5kb3dzJiYoZj10aGlzLmRvbSkpe3RoaXMucmVtb3ZlQWxsTGlzdGVuZXJz KCk7Zi5zdHlsZS5kaXNwbGF5PSJub25lIjtpZihmLnJlYWR5U3RhdGU9PTQpe2Zvcih2YXIgZSBp biBmKXtpZihlLnRvTG93ZXJDYXNlKCkhPSJmbGFzaHZhcnMiJiZ0eXBlb2YgZltlXT09ImZ1bmN0 aW9uIil7ZltlXT1udWxsfX19fUV4dC51eC5NZWRpYS5GbGFzaC5FbGVtZW50LnN1cGVyY2xhc3Mu cmVtb3ZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KTtFeHQudXguTWVkaWEuRmxhc2gucHJvdG90 eXBlLmVsZW1lbnRDbGFzcz1FeHQudXguTWVkaWEuRmxhc2guRWxlbWVudDt2YXIgYz1mdW5jdGlv bihrLGYpe2Y9RXh0LmFwcGx5KHt9LGZ8fHt9LHt0eXBlOiJ0ZXh0L2phdmFzY3JpcHQiLHRleHQ6 a30pO3RyeXt2YXIgaCxlLGo9ZG9jdW1lbnQ7aWYoaiYmai5nZXRFbGVtZW50c0J5VGFnTmFtZSl7 aWYoIShoPWouZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSkpe2g9ai5jcmVhdGVFbGVt ZW50KCJoZWFkIik7ai5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdLmFwcGVuZENoaWxk KGgpfWlmKGgmJihlPWouY3JlYXRlRWxlbWVudCgic2NyaXB0IikpKXtmb3IodmFyIGkgaW4gZil7 aWYoZi5oYXNPd25Qcm9wZXJ0eShpKSYmaSBpbiBlKXtlW2ldPWZbaV19fXJldHVybiAhIWguYXBw ZW5kQ2hpbGQoZSl9fX1jYXRjaChnKXt9cmV0dXJuIGZhbHNlfTtpZihFeHQuaXNJRSYmRXh0Lmlz V2luZG93cyYmYS5GbGFzaC5wcm90b3R5cGUuZmxhc2hWZXJzaW9uLm1ham9yPT05KXt3aW5kb3cu YXR0YWNoRXZlbnQoIm9uYmVmb3JldW5sb2FkIixmdW5jdGlvbigpe19fZmxhc2hfdW5sb2FkSGFu ZGxlcj1fX2ZsYXNoX3NhdmVkVW5sb2FkSGFuZGxlcj1mdW5jdGlvbigpe319KTt3aW5kb3cuYXR0 YWNoRXZlbnQoIm9udW5sb2FkIixmdW5jdGlvbigpe0V4dC5lYWNoKEV4dC5xdWVyeSgiLngtbWVk aWEtc3dmIiksZnVuY3Rpb24oZyxmKXtnLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2Zvcih2YXIgZSBp biBnKXtpZihlLnRvTG93ZXJDYXNlKCkhPSJmbGFzaHZhcnMiJiZ0eXBlb2YgZ1tlXT09ImZ1bmN0 aW9uIil7Z1tlXT1udWxsfX19KX0pfUV4dC5hcHBseShFeHQudXRpbC5Gb3JtYXQse3htbEVuY29k ZTpmdW5jdGlvbihlKXtyZXR1cm4gIWU/ZTpTdHJpbmcoZSkucmVwbGFjZSgvJi9nLCImYW1wOyIp LnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLyIvZywi JnF1b3Q7IikucmVwbGFjZSgvJy9nLCImYXBvczsiKX0seG1sRGVjb2RlOmZ1bmN0aW9uKGUpe3Jl dHVybiAhZT9lOlN0cmluZyhlKS5yZXBsYWNlKC8mZ3Q7L2csIj4iKS5yZXBsYWNlKC8mbHQ7L2cs IjwiKS5yZXBsYWNlKC8mcXVvdDsvZywnIicpLnJlcGxhY2UoLyZhbXA7L2csIiYiKS5yZXBsYWNl KC8mYXBvczsvZywiJyIpfX0pO0V4dC51eC5GbGFzaENvbXBvbmVudD1FeHQudXguTWVkaWEuRmxh c2guQ29tcG9uZW50O0V4dC51eC5GbGFzaFBhbmVsPUV4dC51eC5NZWRpYS5GbGFzaC5QYW5lbDtF eHQudXguRmxhc2hQb3J0bGV0PUV4dC51eC5NZWRpYS5GbGFzaC5Qb3J0bGV0O0V4dC51eC5GbGFz aFdpbmRvdz1FeHQudXguTWVkaWEuRmxhc2guV2luZG93fSkoKTtFeHQubmFtZXNwYWNlKCJFeHQu dXguWW91dHViZVBsYXllciIpO0V4dC51eC5Zb3V0dWJlUGxheWVyPUV4dC5leHRlbmQoRXh0LkZs YXNoQ29tcG9uZW50LHtwbGF5ZXI6bnVsbCx2aWRlb0lkOm51bGwsaW5pdENvbXBvbmVudDpmdW5j dGlvbigpe3RoaXMuYWRkRXZlbnRzKCJyZWFkeSIsInN0YXRlQ2hhbmdlIiwiZXJyb3IiKTtFeHQu YXBwbHkodGhpcyx7cmF0aW9Nb2RlOnRoaXMucmF0aW9Nb2RlfHwibm9ybWFsIixzd2ZJZDp0aGlz LnBsYXllcklkLHN0eWxlOnRoaXMucmF0aW9Nb2RlPT0ic3RyaWN0Ij8icG9zaXRpb246cmVsYXRp dmUiOiJwb3NpdGlvbjpub3JtYWwifSk7RXh0LmFwcGx5SWYodGhpcyx7dXJsOiJodHRwOi8vZ2Rh dGEueW91dHViZS5jb20vYXBpcGxheWVyP2tleT0iK3RoaXMuZGV2ZWxvcGVyS2V5KyImZW5hYmxl anNhcGk9MSZwbGF5ZXJhcGlpZD0iK3RoaXMucGxheWVySWQsc3RhcnQ6ZmFsc2UsY29udHJvbHM6 ZmFsc2UsY2xzOiJleHQtdXgteW91dHViZXBsYXllciAiK3RoaXMucmF0aW9Nb2RlLHNjcmlwdGlu ZzoiYWx3YXlzIixwYXJhbXM6e3dtb2RlOiJvcGFxdWUiLGJnY29sb3I6dGhpcy5iZ0NvbG9yfHwi I2NjY2NjYyJ9fSk7aWYoIUV4dC51eC5Zb3V0dWJlUGxheWVyLlBsYXllcnMpe0V4dC51eC5Zb3V0 dWJlUGxheWVyLlBsYXllcnM9W119RXh0LnV4LllvdXR1YmVQbGF5ZXIuUGxheWVyc1t0aGlzLnBs YXllcklkXT10aGlzLmlkfSxfc2V0UGxheWVyOmZ1bmN0aW9uKGEpe3RoaXMucGxheWVyPWF9LF9k ZWxlZ2F0ZVN0YXRlRXZlbnQ6ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgLTE6YT0idW5zdGFy dGVkIjticmVhaztjYXNlIDA6YT0iZW5kZWQiO2JyZWFrO2Nhc2UgMTphPSJwbGF5aW5nIjticmVh aztjYXNlIDI6YT0icGF1c2VkIjticmVhaztjYXNlIDM6YT0iYnVmZmVyaW5nIjticmVhaztjYXNl IDU6YT0idmlkZW9fY3VlZCI7YnJlYWs7ZGVmYXVsdDphPSJ1bmtub3duIjticmVha310aGlzLmZp cmVFdmVudCgic3RhdGVDaGFuZ2UiLGEsdGhpcyx0aGlzLnBsYXllcil9LF9kZWxlZ2F0ZUVycm9y RXZlbnQ6ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMTAwOmE9InZpZGVvX25vdF9mb3VuZCI7 YnJlYWs7ZGVmYXVsdDphPSJ1bmtub3duIjticmVha310aGlzLmZpcmVFdmVudCgiZXJyb3IiLGEs dGhpcyx0aGlzLnBsYXllcil9LG9uUmVzaXplOmZ1bmN0aW9uKGIsZSxhLGMpe2lmKHRoaXMucGxh eWVyQXZhaWxhYmxlKCkpe3RoaXMuYWRqdXN0UmF0aW8odGhpcy5nZXRXaWR0aCgpLHRoaXMuZ2V0 SGVpZ2h0KCkpfX0sYWRqdXN0UmF0aW86ZnVuY3Rpb24oZSxiKXt2YXIgYT10aGlzLnBsYXllci5z dHlsZTtzd2l0Y2godGhpcy5yYXRpb01vZGUpe2Nhc2Uic3RyaWN0IjppZihlPDQwMHx8YjwzMjAp e3ZhciBjPU1hdGguZmxvb3IoZSowLjgpO2lmKGM+Yil7ZT1NYXRoLmZsb29yKGIvMC44KX1lbHNl e2I9Y319ZWxzZXtpZihiPjMyMCl7Yj0zMjA7ZT00MDB9fWEubWFyZ2luVG9wPS1NYXRoLmZsb29y KGIvMikrInB4IjthLm1hcmdpbkxlZnQ9LU1hdGguZmxvb3IoZS8yKSsicHgiO2EuaGVpZ2h0PWIr InB4IjthLndpZHRoPWUrInB4IjthLnRvcD0iNTAlIjthLmxlZnQ9IjUwJSI7dGhpcy5zZXRQbGF5 ZXJTaXplKGUsYik7YnJlYWs7Y2FzZSJzdHJldGNoIjphLm1hcmdpbj0iYXV0byI7YS5oZWlnaHQ9 YisicHgiO2Eud2lkdGg9ZSsicHgiO3RoaXMuc2V0UGxheWVyU2l6ZShlLGIpO2JyZWFrfX0scGxh eWVyQXZhaWxhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucGxheWVyJiZ0aGlzLnBsYXllci5n ZXRQbGF5ZXJTdGF0ZSk/dHJ1ZTpmYWxzZX0sbG9hZFZpZGVvQnlJZDpmdW5jdGlvbihhLGIpe3Ro aXMucGxheWVyLmxvYWRWaWRlb0J5SWQoYSxiKTt0aGlzLnZpZGVvSWQ9YX0sY3VlVmlkZW9CeUlk OmZ1bmN0aW9uKGEsYil7dGhpcy5wbGF5ZXIuY3VlVmlkZW9CeUlkKGEsYik7dGhpcy52aWRlb0lk PWF9LHNldFBsYXllclNpemU6ZnVuY3Rpb24oYixhKXtpZighdGhpcy5wbGF5ZXJBdmFpbGFibGUo KSl7cmV0dXJufXRoaXMucGxheWVyLnNldFNpemUoYixhKX0scGxheVZpZGVvOmZ1bmN0aW9uKCl7 aWYoIXRoaXMucGxheWVyQXZhaWxhYmxlKCkpe3JldHVybn10aGlzLnBsYXllci5wbGF5VmlkZW8o KX0scGF1c2VWaWRlbzpmdW5jdGlvbigpe2lmKCF0aGlzLnBsYXllckF2YWlsYWJsZSgpKXtyZXR1 cm59dGhpcy5wbGF5ZXIucGF1c2VWaWRlbygpfSxzdG9wVmlkZW86ZnVuY3Rpb24oKXtpZighdGhp cy5wbGF5ZXJBdmFpbGFibGUoKSl7cmV0dXJufXRoaXMucGxheWVyLnN0b3BWaWRlbygpfSxjbGVh clZpZGVvOmZ1bmN0aW9uKCl7aWYoIXRoaXMucGxheWVyQXZhaWxhYmxlKCkpe3JldHVybn10aGlz LnZpZGVvSWQ9bnVsbDt0aGlzLnBsYXllci5jbGVhclZpZGVvKCl9LGdldFZpZGVvQnl0ZXNMb2Fk ZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5wbGF5ZXJBdmFpbGFibGUoKSl7cmV0dXJuIDB9cmV0dXJu IHRoaXMucGxheWVyLmdldFZpZGVvQnl0ZXNMb2FkZWQoKX0sZ2V0VmlkZW9CeXRlc1RvdGFsOmZ1 bmN0aW9uKCl7aWYoIXRoaXMucGxheWVyQXZhaWxhYmxlKCkpe3JldHVybiAwfXJldHVybiB0aGlz LnBsYXllci5nZXRWaWRlb0J5dGVzVG90YWwoKX0sZ2V0VmlkZW9TdGFydEJ5dGVzOmZ1bmN0aW9u KCl7aWYoIXRoaXMucGxheWVyQXZhaWxhYmxlKCkpe3JldHVybiAwfXJldHVybiB0aGlzLnBsYXll ci5nZXRWaWRlb1N0YXJ0Qnl0ZXMoKX0sbXV0ZTpmdW5jdGlvbihhKXtpZighdGhpcy5wbGF5ZXJB dmFpbGFibGUoKSl7cmV0dXJufWlmKGE9PT1mYWxzZSl7dGhpcy5wbGF5ZXIudW5NdXRlKCk7dGhp cy5zZXRWb2x1bWUodGhpcy5nZXRWb2x1bWUoKSl9ZWxzZXt0aGlzLnBsYXllci5tdXRlKCl9fSxp c011dGVkOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLnBsYXllckF2YWlsYWJsZSgpKXtyZXR1cm4gdHJ1 ZX1yZXR1cm4gdGhpcy5wbGF5ZXIuaXNNdXRlZCgpfSxzZXRWb2x1bWU6ZnVuY3Rpb24oYSl7aWYo IXRoaXMucGxheWVyQXZhaWxhYmxlKCkpe3JldHVybn10aGlzLnBsYXllci5zZXRWb2x1bWUoYSl9 LGdldFZvbHVtZTpmdW5jdGlvbigpe2lmKCF0aGlzLnBsYXllckF2YWlsYWJsZSgpKXtyZXR1cm4g MH1yZXR1cm4gdGhpcy5wbGF5ZXIuZ2V0Vm9sdW1lKCl9LHNlZWtUbzpmdW5jdGlvbihiLGEpe2lm KCF0aGlzLnBsYXllckF2YWlsYWJsZSgpKXtyZXR1cm59dGhpcy5wbGF5ZXIuc2Vla1RvKGIsYSl9 LGdldFBsYXllclN0YXRlOmZ1bmN0aW9uKCl7dmFyIGE9LTk5OTk7aWYoIXRoaXMucGxheWVyQXZh aWxhYmxlKCkpe3JldHVybn1lbHNle2E9dGhpcy5wbGF5ZXIuZ2V0UGxheWVyU3RhdGUoKX1zd2l0 Y2goYSl7Y2FzZSAtMTphPSJ1bnN0YXJ0ZWQiO2JyZWFrO2Nhc2UgMDphPSJlbmRlZCI7YnJlYWs7 Y2FzZSAxOmE9InBsYXlpbmciO2JyZWFrO2Nhc2UgMjphPSJwYXVzZWQiO2JyZWFrO2Nhc2UgMzph PSJidWZmZXJpbmciO2JyZWFrO2Nhc2UgNTphPSJ2aWRlb19jdWVkIjticmVhaztkZWZhdWx0OmE9 InVua25vd24iO2JyZWFrfXJldHVybiBhfSxnZXRDdXJyZW50VGltZTpmdW5jdGlvbigpe2lmKCF0 aGlzLnBsYXllckF2YWlsYWJsZSgpKXtyZXR1cm4gMH1yZXR1cm4gdGhpcy5wbGF5ZXIuZ2V0Q3Vy cmVudFRpbWUoKX0sZ2V0RHVyYXRpb246ZnVuY3Rpb24oKXtpZighdGhpcy5wbGF5ZXJBdmFpbGFi bGUoKSl7cmV0dXJuIDB9cmV0dXJuIHRoaXMucGxheWVyLmdldER1cmF0aW9uKCl9LGdldFZpZGVv VXJsOmZ1bmN0aW9uKCl7aWYoIXRoaXMucGxheWVyQXZhaWxhYmxlKCkpe3JldHVybiIifXJldHVy biB0aGlzLnBsYXllci5nZXRWaWRlb1VybCgpfSxnZXRWaWRlb0VtYmVkQ29kZTpmdW5jdGlvbigp e2lmKCF0aGlzLnBsYXllckF2YWlsYWJsZSgpKXtyZXR1cm4iIn1yZXR1cm4gdGhpcy5wbGF5ZXIu Z2V0VmlkZW9FbWJlZENvZGUoKX19KTt2YXIgX29uWW91VHViZVBsYXllclJlYWR5PWZ1bmN0aW9u KGIpe3ZhciBlPUV4dC51eC5Zb3V0dWJlUGxheWVyLlBsYXllcnNbYl07aWYoZSl7dmFyIGE9RXh0 LmdldENtcChlKTt2YXIgYz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChiKTthLl9zZXRQbGF5ZXIo Yyk7Yy5hZGRFdmVudExpc3RlbmVyKCJvblN0YXRlQ2hhbmdlIiwiRXh0LmdldENtcCgnIithLmlk KyInKS5fZGVsZWdhdGVTdGF0ZUV2ZW50Iik7Yy5hZGRFdmVudExpc3RlbmVyKCJvbkVycm9yIiwi RXh0LmdldENtcCgnIithLmlkKyInKS5fZGVsZWdhdGVFcnJvckV2ZW50Iik7YS5hZGp1c3RSYXRp byhhLmdldFdpZHRoKCksYS5nZXRIZWlnaHQoKSk7YS5maXJlRXZlbnQoInJlYWR5IixhLGMpfX07 aWYoIXdpbmRvdy5vbllvdVR1YmVQbGF5ZXJSZWFkeSl7d2luZG93Lm9uWW91VHViZVBsYXllclJl YWR5PV9vbllvdVR1YmVQbGF5ZXJSZWFkeX1lbHNle3Rocm93ICgnIm9uWW91VHViZVBsYXllclJl YWR5IiBpcyBhbHJlYWR5IGRlZmluZWQuIENhbm5vdCB1c2UgRXh0LnV4LlhvdXR1YmVQbGF5ZXIu Jyl9RXh0Lm5hbWVzcGFjZSgiRXh0LnV4LllvdXR1YmVQbGF5ZXIiKTtFeHQudXguWW91dHViZVBs YXllci5Db250cm9sPUV4dC5leHRlbmQoRXh0LlRvb2xiYXIse3Rhc2s6bnVsbCxlbFJ1bnRpbWU6 bnVsbCxlamVjdEJ1dHRvbjpudWxsLHBsYXlCdXR0b246bnVsbCxzdG9wQnV0dG9uOm51bGwscHJl dmlvdXNCdXR0b246bnVsbCxuZXh0QnV0dG9uOm51bGwsbXV0ZUJ1dHRvbjpudWxsLHZvbHVtZVNs aWRlcjpudWxsLHNsaWRlckZpZWxkOm51bGwsaXNBZGp1c3Rpbmc6ZmFsc2UsX29uRWplY3Q6ZnVu Y3Rpb24oKXt2YXIgYT10aGlzO0V4dC5Nc2cucHJvbXB0KCJMb2FkIHZpZGVvIiwiUGxlYXNlIGVu dGVyIHRoZSB2aWRlbyBpZCBvciB1cmw6IixmdW5jdGlvbihiLGMpe2lmKGI9PSJvayIpe3ZhciBl PWEuX3BhcnNlVmlkZW9JZChjKTthLnBsYXllci5zdG9wVmlkZW8oKTthLnBsYXllci5jbGVhclZp ZGVvKCk7YS5wbGF5ZXIuY3VlVmlkZW9CeUlkKGUpfX0pfSxfcGFyc2VWaWRlb0lkOmZ1bmN0aW9u KGMpe3ZhciBhPWMuaW5kZXhPZigidj0iKTtpZihhIT09LTEpe3ZhciBjPWMuc3Vic3RyaW5nKGEr Mik7dmFyIGI9Yy5pbmRleE9mKCImIik7aWYoYiE9PS0xKXtjPWMuc3Vic3RyaW5nKGMsYil9fXJl dHVybiBjfSxfb25FcnJvcjpmdW5jdGlvbihjLGEsYil7YS5zdG9wVmlkZW8oKTtFeHQuTXNnLmFs ZXJ0KCJFcnJvciIsIlRoZSB2aWRlbyB5b3UgcmVxdWVzdGVkIGNvdWxkIG5vdCBiZSBwbGF5ZWQu IEVycm9yIGNvZGUgIitjKX0sX29uU2Vla1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5wbGF5ZXIu c2Vla1RvKHRoaXMuc2xpZGVyRmllbGQuZ2V0VmFsdWUoKSl9LF9vblNldFZvbHVtZTpmdW5jdGlv bigpe3RoaXMubXV0ZUJ1dHRvbi50b2dnbGUoZmFsc2UpO3RoaXMucGxheWVyLnNldFZvbHVtZSh0 aGlzLnZvbHVtZVNsaWRlci5nZXRWYWx1ZSgpKX0sX29uTXV0ZVRvZ2dsZTpmdW5jdGlvbihhKXt2 YXIgYz10aGlzLm11dGVCdXR0b24ucHJlc3NlZDt2YXIgYj1mYWxzZTtpZihhIGluc3RhbmNlb2Yg RXh0Lm1lbnUuSXRlbSl7Yj10cnVlO2M9IWN9aWYoYyl7YS5zZXRJY29uQ2xhc3MoImV4dC11eC15 b3V0dWJlcGxheWVyLWNvbnRyb2wtbXV0ZUljb24iKTtpZihiKXt0aGlzLm11dGVCdXR0b24udG9n Z2xlKHRydWUpO3JldHVybn10aGlzLnBsYXllci5tdXRlKHRydWUpfWVsc2V7YS5zZXRJY29uQ2xh c3MoImV4dC11eC15b3V0dWJlcGxheWVyLWNvbnRyb2wtdm9sdW1lSWNvbiIpO2lmKGIpe3RoaXMu bXV0ZUJ1dHRvbi50b2dnbGUoZmFsc2UpO3JldHVybn10aGlzLnBsYXllci5tdXRlKGZhbHNlKX19 LF9vblBsYXk6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wbGF5ZXIuZ2V0UGxheWVyU3RhdGUoKTtp ZihiPT0icGxheWluZyIpe3RoaXMucGxheWVyLnBhdXNlVmlkZW8oKX1lbHNle2lmKGI9PSJwYXVz ZWQifHxiPT0idmlkZW9fY3VlZCIpe3RoaXMucGxheWVyLnBsYXlWaWRlbygpfX19LF9vblN0b3A6 ZnVuY3Rpb24oYSl7dGhpcy5wbGF5ZXIucGF1c2VWaWRlbygpO3RoaXMucGxheWVyLnNlZWtUbygw KTt0aGlzLnN0b3BCdXR0b24uc2V0RGlzYWJsZWQodHJ1ZSk7dGhpcy5fdXBkYXRlVmlkZW9JbmZv LmRlZmVyKDEwMCx0aGlzLFt0cnVlXSl9LGluaXRDb21wb25lbnQ6ZnVuY3Rpb24oKXt2YXIgYT1F eHQuVG9vbGJhci5CdXR0b247dGhpcy5lamVjdEJ1dHRvbj1uZXcgYSh7aWNvbkNsczoiZWplY3Qi LGRpc2FibGVkOnRydWV9KTt0aGlzLnBsYXlCdXR0b249bmV3IGEoe2ljb25DbHM6InBsYXkiLGRp c2FibGVkOnRydWV9KTt0aGlzLnN0b3BCdXR0b249bmV3IGEoe2ljb25DbHM6InN0b3AiLGRpc2Fi bGVkOnRydWV9KTt0aGlzLnByZXZpb3VzQnV0dG9uPW5ldyBhKHtpY29uQ2xzOiJzdGFydCIsZGlz YWJsZWQ6dHJ1ZX0pO3RoaXMubmV4dEJ1dHRvbj1uZXcgYSh7aWNvbkNsczoiZW5kIixkaXNhYmxl ZDp0cnVlfSk7dGhpcy52b2x1bWVTbGlkZXI9bmV3IEV4dC5TbGlkZXIoe21pblZhbHVlOjAsbWF4 VmFsdWU6MTAwLHdpZHRoOjExMCxkaXNhYmxlZDp0cnVlfSk7dGhpcy5zbGlkZXJGaWVsZD1uZXcg RXh0LnV4LllvdXR1YmVQbGF5ZXIuQ29udHJvbC5TbGlkZXIoe21pblZhbHVlOjAsbWF4VmFsdWU6 MCxkaXNhYmxlZDp0cnVlLGxpc3RlbmVyczp7cmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5lbC5kb20u cGFyZW50Tm9kZS5zdHlsZS53aWR0aD0iMTAwJSJ9fX0pO3RoaXMubXV0ZUJ1dHRvbj1uZXcgRXh0 LlRvb2xiYXIuU3BsaXRCdXR0b24oe2ljb25DbHM6ImV4dC11eC15b3V0dWJlcGxheWVyLWNvbnRy b2wtdm9sdW1lSWNvbiIsZW5hYmxlVG9nZ2xlOnRydWUsd2lkdGg6MzYsbWVudTpuZXcgRXh0Lm1l bnUuTWVudSh7ZW5hYmxlU2Nyb2xsaW5nOmZhbHNlLHBsYWluOnRydWUsc2hvd1NlcGFyYXRvcjpm YWxzZSxpdGVtczpbdGhpcy52b2x1bWVTbGlkZXJdfSksaGFuZGxlcjp0aGlzLl9vbk11dGVUb2dn bGUsc2NvcGU6dGhpc30pO3RoaXMuZWxSdW50aW1lPW5ldyBFeHQuVG9vbGJhci5UZXh0SXRlbSh7 dGV4dDoiMDA6MDAifSk7RXh0LmFwcGx5KHRoaXMse2NsczoiZXh0LXV4LXlvdXR1YmVwbGF5ZXIt Y29udHJvbCIsaXRlbXM6W3RoaXMuZWplY3RCdXR0b24sdGhpcy5wbGF5QnV0dG9uLHRoaXMuc3Rv cEJ1dHRvbix0aGlzLnByZXZpb3VzQnV0dG9uLHRoaXMubmV4dEJ1dHRvbiwiICIsdGhpcy5zbGlk ZXJGaWVsZCwiICIsdGhpcy5lbFJ1bnRpbWUsbmV3IEV4dC5Ub29sYmFyLlNwYWNlcigpLHRoaXMu bXV0ZUJ1dHRvbl19KTtFeHQudXguWW91dHViZVBsYXllci5Db250cm9sLnN1cGVyY2xhc3MuaW5p dENvbXBvbmVudC5jYWxsKHRoaXMpO3RoaXMub24oImJlZm9yZXJlbmRlciIsdGhpcy5faW5pdExp c3RlbmVycyx0aGlzKTt0aGlzLnBsYXllci5vbigicmVhZHkiLGZ1bmN0aW9uKCl7dGhpcy5lamVj dEJ1dHRvbi5zZXREaXNhYmxlZChmYWxzZSl9LHRoaXMpfSxfaW5pdExpc3RlbmVyczpmdW5jdGlv bigpe3RoaXMub24oImFmdGVybGF5b3V0IixmdW5jdGlvbigpe3RoaXMuZ2V0TGF5b3V0KCkub25M YXlvdXQ9dGhpcy5nZXRMYXlvdXQoKS5vbkxheW91dC5jcmVhdGVJbnRlcmNlcHRvcihmdW5jdGlv bigpe3RoaXMuY29udGFpbmVyLnNsaWRlckZpZWxkLmVsLmRvbS5wYXJlbnROb2RlLnN0eWxlLndp ZHRoPSIxcHgifSk7dGhpcy5nZXRMYXlvdXQoKS5vbkxheW91dD10aGlzLmdldExheW91dCgpLm9u TGF5b3V0LmNyZWF0ZVNlcXVlbmNlKGZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuc2xpZGVyRmll bGQuZWwuZG9tLnBhcmVudE5vZGUuc3R5bGUud2lkdGg9IjEwMCUifSl9LHRoaXMse3NpbmdsZTp0 cnVlfSk7dGhpcy5tdXRlQnV0dG9uLm1lbnUub24oImJlZm9yZXNob3ciLGZ1bmN0aW9uKCl7dmFy IGI9dGhpcy5wbGF5ZXIuZ2V0U3RhdGUoKTtpZihiIT0iZW5kZWQiJiZiIT0idW5zdGFydGVkIil7 dGhpcy52b2x1bWVTbGlkZXIuc2V0RGlzYWJsZWQoZmFsc2UpO3RoaXMudm9sdW1lU2xpZGVyLnNl dFZhbHVlKHRoaXMucGxheWVyLmdldFZvbHVtZSgpLGZhbHNlKX19LHRoaXMpO3RoaXMucGxheUJ1 dHRvbi5vbigiY2xpY2siLHRoaXMuX29uUGxheSx0aGlzKTt0aGlzLnN0b3BCdXR0b24ub24oImNs aWNrIix0aGlzLl9vblN0b3AsdGhpcyk7dGhpcy5tdXRlQnV0dG9uLm9uKCJ0b2dnbGUiLHRoaXMu X29uTXV0ZVRvZ2dsZSx0aGlzKTt0aGlzLm9uKCJoaWRlIix0aGlzLl9vbkhpZGUsdGhpcyk7dGhp cy5vbigiZGVzdHJveSIsdGhpcy5fb25EZXN0cm95LHRoaXMpO3ZhciBhPXRoaXM7dGhpcy5wbGF5 ZXIub24oInN0YXRlQ2hhbmdlIixmdW5jdGlvbihlLGIsYyl7YS5fcHJvY2Vzc1BsYXllckV2ZW50 cy5kZWZlcigxLGEsW2UsYixjXSl9LHRoaXMpO3RoaXMuc2xpZGVyRmllbGQub24oImRyYWdzdGFy dCIsZnVuY3Rpb24oKXt0aGlzLmlzQWRqdXN0aW5nPXRydWV9LHRoaXMpO3RoaXMuc2xpZGVyRmll bGQub24oImRyYWciLHRoaXMuX29uU2Vla1Bvc2l0aW9uLHRoaXMpO3RoaXMuc2xpZGVyRmllbGQu b24oImRyYWdlbmQiLGZ1bmN0aW9uKCl7dGhpcy5pc0FkanVzdGluZz1mYWxzZX0sdGhpcyk7dGhp cy52b2x1bWVTbGlkZXIub24oImRyYWciLHRoaXMuX29uU2V0Vm9sdW1lLHRoaXMpO3RoaXMucGxh eWVyLm9uKCJlcnJvciIsdGhpcy5fb25FcnJvcix0aGlzKTt0aGlzLmVqZWN0QnV0dG9uLm9uKCJj bGljayIsdGhpcy5fb25FamVjdCx0aGlzKX0sX29uRGVzdHJveTpmdW5jdGlvbigpe2lmKHRoaXMu dGFzayl7RXh0LlRhc2tNZ3Iuc3RvcCh0aGlzLnRhc2spfX0sX3VwZGF0ZVZpZGVvSW5mbzpmdW5j dGlvbihnKXtpZighdGhpcy5wbGF5ZXIucGxheWVyQXZhaWxhYmxlKCkpe3RoaXMuX3Byb2Nlc3NQ bGF5ZXJFdmVudHMoImVuZGVkIix0aGlzLnBsYXllcixudWxsKTtyZXR1cm59dmFyIGk9dGhpcy5w bGF5ZXI7dmFyIGI9dGhpcy5zbGlkZXJGaWVsZDt2YXIgZj1pLmdldFZpZGVvQnl0ZXNMb2FkZWQo KTtpZihmIT0tMSl7Yi51cGRhdGVTbGlkZXJCZyhNYXRoLmZsb29yKChiLmdldFdpZHRoKCkvMTAw KSpNYXRoLmZsb29yKCgoZi9pLmdldFZpZGVvQnl0ZXNUb3RhbCgpKSoxMDApKSkpfWlmKGchPT10 cnVlJiZpLmdldFBsYXllclN0YXRlKCk9PSJwYXVzZWQiKXtyZXR1cm59dmFyIGM9TWF0aC5tYXgo MCxpLmdldEN1cnJlbnRUaW1lKCkpO3ZhciBhPU1hdGgubWF4KDAsaS5nZXREdXJhdGlvbigpKTtp ZihhIT0wKXt2YXIgaj1NYXRoLmZsb29yKGEtYyk7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLmZsb29y KGovNjApKTt2YXIgaD1NYXRoLm1heCgwLChqJTYwKSk7dGhpcy5lbFJ1bnRpbWUuc2V0VGV4dCgo ZTwxMD8iMCIrZTplKSsiOiIrKGg8MTA/IjAiK2g6aCkpO3RoaXMuc2xpZGVyRmllbGQubWF4VmFs dWU9YTtpZighdGhpcy5pc0FkanVzdGluZyl7dGhpcy5zbGlkZXJGaWVsZC5zZXRWYWx1ZShjLGZh bHNlKX19fSxfcHJvY2Vzc1BsYXllckV2ZW50czpmdW5jdGlvbihlLGEsYil7c3dpdGNoKGUpe2Nh c2UidW5zdGFydGVkIjp0aGlzLl91bj10cnVlO2JyZWFrO2Nhc2UiZW5kZWQiOmlmKHRoaXMudGFz ayl7RXh0LlRhc2tNZ3Iuc3RvcCh0aGlzLnRhc2spO3RoaXMudGFzaz1udWxsfXRoaXMucGxheUJ1 dHRvbi5zZXRJY29uQ2xhc3MoInBsYXkiKTt0aGlzLnNsaWRlckZpZWxkLnNldFZhbHVlKDApO3Ro aXMuc2xpZGVyRmllbGQuc2V0RGlzYWJsZWQodHJ1ZSk7dGhpcy5zbGlkZXJGaWVsZC51cGRhdGVT bGlkZXJCZygwKTt0aGlzLmVsUnVudGltZS5zZXRUZXh0KCIwMDowMCIpO2lmKHRoaXMudm9sdW1l RmllbGQpe3RoaXMudm9sdW1lRmllbGQuc2V0RGlzYWJsZWQodHJ1ZSl9dGhpcy5wbGF5QnV0dG9u LnNldERpc2FibGVkKHRydWUpO3RoaXMuc3RvcEJ1dHRvbi5zZXREaXNhYmxlZCh0cnVlKTt0aGlz Lm11dGVCdXR0b24uc2V0RGlzYWJsZWQodHJ1ZSk7aWYoYS52aWRlb0lkJiYhdGhpcy5fdW4pe3Ro aXMuX3VuPXRydWU7YS5jdWVWaWRlb0J5SWQoYS52aWRlb0lkLDApfWJyZWFrO2Nhc2UicGxheWlu ZyI6aWYoIXRoaXMudGFzayl7dmFyIGY9dGhpczt0aGlzLnRhc2s9e3J1bjpmdW5jdGlvbigpe2Yu X3VwZGF0ZVZpZGVvSW5mbygpfSxpbnRlcnZhbDo1MDB9O0V4dC5UYXNrTWdyLnN0YXJ0KHRoaXMu dGFzayl9dGhpcy5fdW49ZmFsc2U7dGhpcy5zbGlkZXJGaWVsZC5zZXREaXNhYmxlZChmYWxzZSk7 aWYodGhpcy52b2x1bWVGaWVsZCl7dGhpcy52b2x1bWVGaWVsZC5zZXREaXNhYmxlZChmYWxzZSl9 dGhpcy5wbGF5QnV0dG9uLnNldEljb25DbGFzcygicGF1c2UiKTt0aGlzLnBsYXlCdXR0b24uc2V0 RGlzYWJsZWQoZmFsc2UpO3RoaXMuc3RvcEJ1dHRvbi5zZXREaXNhYmxlZChmYWxzZSk7dGhpcy5t dXRlQnV0dG9uLnNldERpc2FibGVkKGZhbHNlKTticmVhaztjYXNlInBhdXNlZCI6dGhpcy5wbGF5 QnV0dG9uLnNldEljb25DbGFzcygicGxheSIpO2JyZWFrO2Nhc2UiYnVmZmVyaW5nIjpicmVhaztj YXNlInZpZGVvX2N1ZWQiOnRoaXMucGxheUJ1dHRvbi5zZXREaXNhYmxlZChmYWxzZSk7YnJlYWs7 Y2FzZSJ1bmtub3duIjpicmVha319fSk7RXh0LnV4LllvdXR1YmVQbGF5ZXIuQ29udHJvbC5TbGlk ZXI9RXh0LmV4dGVuZChFeHQuU2xpZGVyLHtjbHM6ImV4dC11eC15b3V0dWJlcGxheWVyLWNvbnRy b2wtc2xpZGVyIixvblJlbmRlcjpmdW5jdGlvbigpe0V4dC51eC5Zb3V0dWJlUGxheWVyLkNvbnRy b2wuU2xpZGVyLnN1cGVyY2xhc3Mub25SZW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMu cHJvZ3Jlc3M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dGhpcy5wcm9ncmVzcy5jbGFz c05hbWU9ImhiYXIiO3RoaXMuZWwuZG9tLmFwcGVuZENoaWxkKHRoaXMucHJvZ3Jlc3MpfSx1cGRh dGVTbGlkZXJCZzpmdW5jdGlvbihhKXt0aGlzLnByb2dyZXNzLnN0eWxlLmJhY2tncm91bmRQb3Np dGlvbj0iLSIrKDEyODAtYSkrInB4IDAifX0pOw== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: application/x-javascript Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/js/package/Quiz.js dmFyIE1hc3RlclRlc3RQYWNrYWdlX1F1aXo9ZnVuY3Rpb24oYil7dmFyIGE9YjthLlF1aXpfQnV0 dG9uPUV4dC5leHRlbmQoRXh0LkJ1dHRvbix7Y29uc3RydWN0b3I6ZnVuY3Rpb24oYyl7Yz1jfHx7 fTtjLmxpc3RlbmVycz1jLmxpc3RlbmVyc3x8e307Yy5saXN0ZW5lcnMuYWZ0ZXJyZW5kZXI9ZnVu Y3Rpb24oZCl7aWYoZC5uYW1lKXt0cnl7ZC5idG5FbC5zZXQoe25hbWU6ZC5uYW1lfSl9Y2F0Y2go Zil7YS5leGNlcHRpb24oZil9fX07YS5RdWl6X0J1dHRvbi5zdXBlcmNsYXNzLmNvbnN0cnVjdG9y LmNhbGwodGhpcyxjKX19KTtFeHQucmVnKCJxdWl6YnV0dG9uIixhLlF1aXpfQnV0dG9uKTthLlF1 aXpfUXVlc3Rpb25zQ29udGFpbmVyPUV4dC5leHRlbmQoRXh0LlBhbmVsLHtib3JkZXI6ZmFsc2Us YXV0b0hlaWdodDp0cnVlLGlzR3JvdXA6ZmFsc2UsZGVmYXVsdHM6e3N0eWxlOiJtYXJnaW4tcmln aHQ6IDIwcHgifSxjbHM6Im1hc3Rlci1xdWl6LXBhbmVsIixkaXNhYmxlREQ6ZmFsc2V9KTthLlF1 aXpfVHJlZT1FeHQuZXh0ZW5kKEV4dC50cmVlLlRyZWVQYW5lbCx7cXVpelJlbmRlcmVkOmZhbHNl LHNlbGVjdGVkUXVlc3Rpb246ZmFsc2UsY29uc3RydWN0b3I6ZnVuY3Rpb24oYyl7dGhpcy5xdWVz dGlvbl9jb3VudGVyPTA7aWYoIWN8fCFjLnF1aXpDb25maWcpe3Rocm93InF1aXpDb25maWcgaXMg cmVxdWlyZWQifXRoaXMucXVpekNvbmZpZz1jLnF1aXpDb25maWc7Yz1FeHQuYXBwbHkoY3x8e30s e2FuaW1hdGU6dHJ1ZSxhdXRvU2Nyb2xsOnRydWUsYm9yZGVyOmZhbHNlLHJvb3Q6bmV3IEV4dC50 cmVlLlRyZWVOb2RlKHt0ZXh0OiLQotC10YHRgiIsaWNvbkNsczoiaWNvbi1xdWl6In0pfSk7YS5R dWl6X1RyZWUuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYyk7dGhpcy5vbigiYWZ0 ZXJyZW5kZXIiLGZ1bmN0aW9uKCl7dGhpcy5xdWl6Q29uZmlnLm9uKCJxdWVzdGlvbmFkZCIsZnVu Y3Rpb24oZCl7aWYodGhpcy5xdWl6UmVuZGVyZWQpe3RoaXMuYWRkUXVlc3Rpb24oZCl9fSx0aGlz KX0sdGhpcyl9LGFkZFF1ZXN0aW9uOmZ1bmN0aW9uKGUpeysrdGhpcy5xdWVzdGlvbl9jb3VudGVy O3ZhciBnLGY7Zz1lLmdldFRpdGxlKCk7Zj10aGlzLnJvb3QuYXBwZW5kQ2hpbGQobmV3IEV4dC50 cmVlLlRyZWVOb2RlKHt0ZXh0OnRoaXMuY3V0TG9uZ1RleHQoZz9nOiLQktC+0L/RgNC+0YEgIit0 aGlzLnF1ZXN0aW9uX2NvdW50ZXIsMTkpLGxlYWY6dHJ1ZSxocmVmOiIjcXVpel9pdGVtXyIrZS5n ZXRJZCgpLGljb25DbHM6Imljb24taGVscCIscXRpcDpnfSkpO2YuaXRlbUNvbmZpZz1lO3ZhciBj PWZ1bmN0aW9uKCl7dHJ5ey0tdGhpcy5xdWVzdGlvbl9jb3VudGVyO3RoaXMucm9vdC5yZW1vdmVD aGlsZChmKTtFeHQuZGVzdHJveShmKX1jYXRjaChoKXthLmV4Y2VwdGlvbihoKX19O3ZhciBkPWZ1 bmN0aW9uKGkpe3RyeXtmLnNldFRleHQodGhpcy5jdXRMb25nVGV4dChpLDE5KSl9Y2F0Y2goaCl7 YS5leGNlcHRpb24oaCl9fTtlLm9uKCJkZWxldGUiLGMsdGhpcyk7ZS5vbigidGl0bGVjaGFuZ2Ui LGQsdGhpcyk7dGhpcy5yb290Lm9uKCJyZW1vdmUiLGZ1bmN0aW9uKGgsaSxqKXtpZihqPT09Zil7 YS5sb2coIm5vZGVEZXN0cm95Iik7ZS51bigiZGVsZXRlIixjLHRoaXMpO2UudW4oInRpdGxlY2hh bmdlIixkLHRoaXMpfX0sdGhpcyl9LGRvUXVpekxheW91dDpmdW5jdGlvbigpe2EubG9nKCJ0cmVl IGRvUXVpekxheW91dCIpO3RoaXMucXVlc3Rpb25fY291bnRlcj0wO3ZhciBkLGMsZTt3aGlsZSh0 aGlzLnJvb3QuZmlyc3RDaGlsZCl7ZD10aGlzLnJvb3QuZmlyc3RDaGlsZDt0aGlzLnJvb3QucmVt b3ZlQ2hpbGQoZCk7RXh0LmRlc3Ryb3koZCl9Yz10aGlzLnF1aXpDb25maWcuZ2V0UXVlc3Rpb25z KCk7Zm9yKGUgaW4gYyl7aWYoYy5oYXNPd25Qcm9wZXJ0eShlKSl7dGhpcy5hZGRRdWVzdGlvbihj W2VdKX19dGhpcy5xdWl6UmVuZGVyZWQ9dHJ1ZTtpZih0aGlzLnJlbmRlcmVkKXt0aGlzLnJvb3Qu ZXhwYW5kKGZhbHNlLGZhbHNlKX1lbHNle3RoaXMub24oImFmdGVycmVuZGVyIix0aGlzLnJvb3Qu ZXhwYW5kLHRoaXMucm9vdCl9fSxzZWxlY3RRdWVzdGlvbjpmdW5jdGlvbihjKXt0aGlzLnNlbGVj dGVkUXVlc3Rpb249YztpZih0aGlzLnJlbmRlcmVkKXtpZihjPT09MCl7dGhpcy5zZWxNb2RlbC5z ZWxlY3QodGhpcy5yb290KX1lbHNle3RoaXMucm9vdC5lYWNoQ2hpbGQoZnVuY3Rpb24oZCl7aWYo ZC5pdGVtQ29uZmlnLmdldElkKCk9PWMpe3RoaXMuc2VsTW9kZWwuc2VsZWN0KGQpO3JldHVybiBm YWxzZX19LHRoaXMpfX1lbHNle3RoaXMub24oImFmdGVycmVuZGVyIixmdW5jdGlvbigpe3RoaXMu c2VsZWN0UXVlc3Rpb24odGhpcy5zZWxlY3RlZFF1ZXN0aW9uKX0sdGhpcyl9fSxzZXRJY29uczpm dW5jdGlvbihjKXt0aGlzLnJvb3QuZWFjaENoaWxkKGZ1bmN0aW9uKGQpe3ZhciBlPWQuaXRlbUNv bmZpZy5nZXRJZCgpO2lmKGNbZV0pe3RoaXMuc2V0Tm9kZUljb24oZCxjW2VdKX19LHRoaXMpfSxz ZXRRdWVzdGlvbkljb246ZnVuY3Rpb24oZCxjKXt0aGlzLnJvb3QuZWFjaENoaWxkKGZ1bmN0aW9u KGUpe2lmKGUuaXRlbUNvbmZpZy5nZXRJZCgpPT1kKXt0aGlzLnNldE5vZGVJY29uKGUsYyk7cmV0 dXJuIGZhbHNlfX0sdGhpcyl9LHNldE5vZGVJY29uOmZ1bmN0aW9uKGYsZSl7dmFyIGMsZDtjPWYu Z2V0VUkoKS5nZXRJY29uRWwoKTtpZihjKXtjPUV4dC5nZXQoYyk7ZD1mLmF0dHJpYnV0ZXMuaWNv bkNscztpZihkKXtjLnJlbW92ZUNsYXNzKGQpfWMuYWRkQ2xhc3MoZSk7Zi5hdHRyaWJ1dGVzLmlj b25DbHM9ZX1lbHNle2YuYXR0cmlidXRlcy5pY29uQ2xzPWV9fSxjdXRMb25nVGV4dDpmdW5jdGlv bihmLGMpe2Y9IiIrZjtpZihmLmxlbmd0aD5jKXt2YXIgZSxkO2U9Zi5zdWJzdHIoMCxjLTMpO2lm KGUuc3Vic3RyKGMtMTApLnNlYXJjaCgiICIpIT09LTEmJmYuY2hhckF0KGMtMykhPT0iICIpe2Q9 ZS5zdWJzdHIoYy0xMCk7ZG97ZD1kLnN1YnN0cihkLnNlYXJjaCgiICIpKzEpfXdoaWxlKChkLnNl YXJjaCgiICIpIT09LTEpKTtlPWUuc3Vic3RyKDAsZS5sZW5ndGgtZC5sZW5ndGgtMSl9Zj1lKyIu Li4ifXJldHVybiBmfSxzb3J0UXVpekl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5yb290LnNvcnQoZnVu Y3Rpb24oZCxjKXtyZXR1cm4gZC5pdGVtQ29uZmlnLmdldEF0dHIoInBvc2l0aW9uIik8Yy5pdGVt Q29uZmlnLmdldEF0dHIoInBvc2l0aW9uIik/LTE6MX0pfX0pO2EuUXVpel9UaW1lcj1FeHQuZXh0 ZW5kKEV4dC5QYW5lbCx7d2lkdGg6NTAsaGVpZ2h0OjIwLHRpbWU6MCxoaWRkZW46dHJ1ZSx1cGRh dGVJbnRlcnZhbDoxMDAwLGxvYWRJbnRlcnZhbDo2MDAwMCxjb25zdHJ1Y3RvcjpmdW5jdGlvbihn KXt0aGlzLmlkPWEuaWQoInF1aXotdGltZXIiKTt0aGlzLmFkZEV2ZW50cygic3RhcnQiLCJzdG9w Iik7dmFyIGg9ZmFsc2U7dmFyIGU9ZmFsc2U7dmFyIGksayxjPXRoaXMsbixkO2c9Z3x8e307aWYo Zy50aW1lKXtpZihFeHQuaXNGdW5jdGlvbihnLnRpbWUpKXtnLmdldFRpbWVGdW5jdGlvbj1nLnRp bWU7Zy50aW1lPTB9ZWxzZXtpZigoIiIrZy50aW1lKS5zZWFyY2goIjoiKSE9LTEpe249Zy50aW1l LnNwbGl0KCI6Iik7ZD1NYXRoLnJvdW5kKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkvMTAwMCk7Zy50 aW1lPWQrNjAqNjAqKG5bMF0/blswXTowKSs2MCooblsxXT9uWzFdOjApKzEqKG5bMl0/blsyXTow KX19fWZ1bmN0aW9uIGwoZil7Zj0iIitmO2lmKGYubGVuZ3RoPT09MCl7cmV0dXJuIjAwIn1pZihm Lmxlbmd0aD09PTEpe3JldHVybiIwIitmfXJldHVybiBmfWZ1bmN0aW9uIGooZil7Zj1FeHQuaXNG dW5jdGlvbihmKT9mOmZ1bmN0aW9uKCl7fTtpZihjLmdldFRpbWVGdW5jdGlvbil7dHJ5e2MuZ2V0 VGltZUZ1bmN0aW9uKGZ1bmN0aW9uKHEpe2lmKHEpe2U9cT49ODY0MDA7dmFyIHA9bmV3IERhdGUo KTtjLnRpbWU9TWF0aC5yb3VuZChwLmdldFRpbWUoKS8xMDAwKStxO2YoKX19LmNyZWF0ZURlbGVn YXRlKHRoaXMpKX1jYXRjaChvKXtmKCk7YS5leGNlcHRpb24obyl9az1zZXRUaW1lb3V0KGosYy5s b2FkSW50ZXJ2YWwpfWVsc2V7ZigpfX1mdW5jdGlvbiBtKCl7dmFyIHAsbyx1LHIsZixxLHQ7cD1N YXRoLnJvdW5kKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkvMTAwMCk7bz1jLnRpbWU7dT1vLXA7aWYo dTwwKXtjLnN0b3AoKTtyZXR1cm59ZWxzZXtpZighZSl7cj11JTYwO2Y9KCh1LXIpLzYwKSU2MDtx PSh1LWYqNjAtcikvMzYwMDt0PWwocSkrIjoiK2woZikrIjoiK2wocik7Yy5ib2R5LnVwZGF0ZSh0 KTtpZihjLmhpZGRlbil7Yy5zaG93KCl9aWYodTwzMCl7aWYoIWgpe2MuYm9keS5hZGRDbGFzcygi cmVkLXRpbWVyIik7aD10cnVlfX1lbHNle2lmKGgpe2MuYm9keS5yZW1vdmVDbGFzcygicmVkLXRp bWVyIik7aD1mYWxzZX19fWVsc2V7aWYoIWMuaGlkZGVuKXtjLmhpZGUoKX19fWk9c2V0VGltZW91 dChtLGMudXBkYXRlSW50ZXJ2YWwpfWEuUXVpel9UaW1lci5zdXBlcmNsYXNzLmNvbnN0cnVjdG9y LmNhbGwodGhpcyxnKTtpZihnLmF1dG9TdGFydCl7dGhpcy5vbigicmVuZGVyIixmdW5jdGlvbigp e2Muc3RhcnQoKX0pfXRoaXMuc3RhcnQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlbmRlcmVkKXtjbGVh clRpbWVvdXQoaSk7Y2xlYXJUaW1lb3V0KGspO2ooZnVuY3Rpb24oKXttKCl9KTt0aGlzLmZpcmVF dmVudCgic3RhcnQiLHRoaXMpfWVsc2V7dGhpcy5vbigicmVuZGVyIix0aGlzLnN0YXJ0LHRoaXMp fX07dGhpcy5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGkpO2NsZWFyVGltZW91dChrKTtj LmhpZGUoKTt0aGlzLmZpcmVFdmVudCgic3RvcCIsdGhpcyl9fX0pO2EuUXVpel9NZWRpYT17eW91 dHViZVdpbjpudWxsLHR5cGVzOntpbWFnZToi0JjQt9C+0LHRgNCw0LbQtdC90LjQtSIsYXVkaW86 ItCQ0YPQtNC40L4iLHlvdXR1YmU6IllvdVR1YmUg0JLQuNC00LXQviJ9LGNyZWF0ZTpmdW5jdGlv bihjKXt2YXIgZz1jLm1lZGlhVHlwZSxlPWMubWVkaWFVcmwsZCxmLGg7aD1FeHQuYXBwbHkoe2Jv cmRlcjpmYWxzZSxhdXRvSGVpZ2h0OnRydWV9LGMpO2Q9RXh0LnV0aWwuRm9ybWF0Lmh0bWxFbmNv ZGUoYy5tZWRpYUNhcHRpb24pO3N3aXRjaChnKXtjYXNlImltYWdlIjpmPSc8ZGl2IHN0eWxlPSJ0 ZXh0LWFsaWduOmNlbnRlcjsgd2lkdGg6MTAwJTsgb3ZlcmZsb3c6IGF1dG87Ij48YSBocmVmPSJ7 dXJsfSIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3R5bGU9Im1heC13aWR0aDogMzAwcHg7IG1heC1o ZWlnaHQ6IDE2MHB4OyIgc3JjPSJ7dXJsfSIgdGl0bGU9IntjYXB0aW9ufSIgYWx0PSJJbWFnZSBp cyBub3QgZXhpc3RzIi8+PC9hPjwvZGl2PjxkaXYgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj57 Y2FwdGlvbn08L2Rpdj4nO2Y9Zi5yZXBsYWNlKC9ce3VybFx9L2csZSk7Zj1mLnJlcGxhY2UoL1x7 Y2FwdGlvblx9L2csZCk7aC5odG1sPWY7YnJlYWs7Y2FzZSJhdWRpbyI6Zj0nPGRpdiBzdHlsZT0i dGV4dC1hbGlnbjogY2VudGVyOyI+PG9iamVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjMwIiBjb2Rl YmFzZT0iaHR0cDovL3d3dy5hcHBsZS5jb20vcXRhY3RpdmV4L3F0cGx1Z2luLmNhYiN2ZXJzaW9u PTYsMCwyLDAiIGNsYXNzaWQ9ImNsc2lkOjAyYmYyNWQ1LThjMTctNGIyMy1iYzgwLWQzNDg4YWJk ZGM2YiI+PHBhcmFtIHZhbHVlPSJodHRwOi8vY29tbW9uLmxvY2FsL2V4dGpzL2V4dGVuc2lvbnMv bWVkaWEvZGVtb3MvZGVtby5tcDMiIG5hbWU9InNyYyIvPjxwYXJhbSB2YWx1ZT0iX2JsYW5rIiBu YW1lPSJ0YXJnZXQiLz48cGFyYW0gdmFsdWU9ImZhbHNlIiBuYW1lPSJhdXRvcGxheSIvPjxwYXJh bSB2YWx1ZT0idHJ1ZSIgbmFtZT0idGFyZ2V0Y2FjaGUiLz48cGFyYW0gdmFsdWU9InRydWUiIG5h bWU9ImNhY2hlIi8+PHBhcmFtIHZhbHVlPSJ0cnVlIiBuYW1lPSJjb250cm9sbGVyIi8+PHBhcmFt IHZhbHVlPSJmYWxzZSIgbmFtZT0ibG9vcCIvPjxwYXJhbSB2YWx1ZT0iYXNwZWN0IiBuYW1lPSJz Y2FsZSIvPjxwYXJhbSB2YWx1ZT0iNTAlIiBuYW1lPSJ2b2x1bWUiLz48ZW1iZWQgd2lkdGg9IjIw MCIgaGVpZ2h0PSIzMCIgc3JjPSJ7dXJsfSIgdm9sdW1lPSI1MCUiIHNjYWxlPSJhc3BlY3QiIGxv b3A9ImZhbHNlIiBjb250cm9sbGVyPSJ0cnVlIiBhdXRvcGxheT0iZmFsc2UiIHR5cGU9InZpZGVv L3F1aWNrdGltZSIvPjwvb2JqZWN0PjxkaXY+e2NhcHRpb259PC9kaXY+PC9kaXY+JztmPWYucmVw bGFjZSgvXHt1cmxcfS9nLGUpO2Y9Zi5yZXBsYWNlKC9ce2NhcHRpb25cfS9nLGQpO2guaHRtbD1m O2JyZWFrO2Nhc2UieW91dHViZSI6aC5pdGVtcz1be3h0eXBlOiJidXR0b24iLHN0eWxlOiJtYXJn aW46IGF1dG8iLHRleHQ6ItCh0LzQvtGC0YDQtdGC0Ywg0LLQuNC00LXQviIsaGFuZGxlcjpmdW5j dGlvbigpe2EuUXVpel9NZWRpYS53YXRjaFlvdVR1YmUoZSl9fSx7eHR5cGU6InBhbmVsIixib3Jk ZXI6ZmFsc2Usc3R5bGU6InRleHQtYWxpZ246IGNlbnRlciIsaHRtbDpkfV07YnJlYWs7ZGVmYXVs dDp0aHJvdyJ1bnN1cHBvcnRlZCB0eXBlIn1yZXR1cm4gbmV3IEV4dC5QYW5lbChoKX0sd2F0Y2hZ b3VUdWJlOmZ1bmN0aW9uKGQpe2lmKCF0aGlzLnlvdXR1YmVXaW4pe3ZhciBlLGMsZjtlPSJBSTM5 c2k2YnN3SG5QNXM1VS00UUpxbUtEbkVfT2VHYXR1RkJNV2k3ZzdZTGJ2WmluckVxbnBscUJhSWQw eTdUdUI1NHhQUk50eEF4YXQ0UXFTNDZibnZYb19uQmV4Qmg3dyI7Yz1uZXcgRXh0LnV4LllvdXR1 YmVQbGF5ZXIoe2RldmVsb3BlcktleTplLHBsYXllcklkOiJteXBsYXllciIsYm9yZGVyOmZhbHNl LHJhdGlvTW9kZToic3RyaWN0IixoaWRlTW9kZToidmlzaWJpbGl0eSIsYmdDb2xvcjoiIzAwMDAw MCIsYm9keVN0eWxlOiJiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA7In0pO2Mub24oInJlYWR5Iixm dW5jdGlvbigpe3RoaXMueW91dHViZVdpbi5yZWFkeT10cnVlfSx0aGlzKTt0aGlzLnlvdXR1YmVX aW49dGhpcy5jcmVhdGVXaW5kb3coe3RpdGxlOiJFeHQudXguWW91dHViZVBsYXllciIsbGF5b3V0 OiJmaXQiLG1heGltaXphYmxlOmZhbHNlLGFuaW1Db2xsYXBzZTpmYWxzZSxjb2xsYXBzaWJsZTp0 cnVlLHJlc2l6YWJsZTp0cnVlLGl0ZW1zOltjXSxiYmFyOmY9bmV3IEV4dC51eC5Zb3V0dWJlUGxh eWVyLkNvbnRyb2woe3BsYXllcjpjLGJvcmRlcjpmYWxzZSxpZDoiY29udHJvbCIsc3R5bGU6ImJv cmRlcjpub25lOyJ9KSxoZWlnaHQ6NDAwLHdpZHRoOjUwMCxsaXN0ZW5lcnM6e3Jlc2l6ZTpmdW5j dGlvbigpe3RoaXMuYm90dG9tVG9vbGJhci5maXJlRXZlbnQoInJlc2l6ZSIpfSxiZWZvcmVjbG9z ZTpmdW5jdGlvbihnKXtnLmNvbnRyb2xsLnN0b3BCdXR0b24uZmlyZUV2ZW50KCJjbGljayIpO2cu aGlkZSgpO3JldHVybiBmYWxzZX19fSk7dGhpcy55b3V0dWJlV2luLmNvbnRyb2xsPWY7dGhpcy55 b3V0dWJlV2luLnBsYXllclBhbmVsPWM7Zi5uZXh0QnV0dG9uLmhpZGUoKTtmLnByZXZpb3VzQnV0 dG9uLmhpZGUoKTtmLmVqZWN0QnV0dG9uLmhpZGUoKX1pZih0aGlzLnlvdXR1YmVXaW4ucmVhZHkp e3RoaXMueW91dHViZVdpbi5wbGF5ZXJQYW5lbC5jdWVWaWRlb0J5SWQodGhpcy5fcGFyc2VWaWRl b0lkKGQpLDApfWVsc2V7dGhpcy55b3V0dWJlV2luLnBsYXllclBhbmVsLm9uKCJyZWFkeSIsZnVu Y3Rpb24oKXt0aGlzLnlvdXR1YmVXaW4ucGxheWVyUGFuZWwuY3VlVmlkZW9CeUlkKHRoaXMuX3Bh cnNlVmlkZW9JZChkKSwwKX0sdGhpcyl9dGhpcy55b3V0dWJlV2luLnNob3coKX0sY3JlYXRlV2lu ZG93OmZ1bmN0aW9uKGMpe3JldHVybiBuZXcgRXh0LldpbmRvdyhjKX0sX3BhcnNlVmlkZW9JZDpm dW5jdGlvbihlKXt2YXIgZCxjO2M9ZS5pbmRleE9mKCJ2PSIpO2lmKGMhPT0tMSl7ZT1lLnN1YnN0 cmluZyhjKzIpO2Q9ZS5pbmRleE9mKCImIik7aWYoZCE9PS0xKXtlPWUuc3Vic3RyaW5nKGUsZCl9 fXJldHVybiBlfX07YS5RdWl6X01lZGlhTWdyPUV4dC5leHRlbmQoRXh0LlBhbmVsLHtpbml0Q29t cG9uZW50OmZ1bmN0aW9uKCl7dGhpcy5vcGVuTWVkaWFXaW5kb3c9ZnVuY3Rpb24oKXtpZighdGhp cy53aW4pe3ZhciBmLGUsZCxqLGksYyxnLGg7Zj1bXTtlPWEuUXVpel9NZWRpYTtmb3IoaCBpbiBl LnR5cGVzKXtpZihlLnR5cGVzLmhhc093blByb3BlcnR5KGgpKXtmLnB1c2goW2gsZS50eXBlc1to XV0pfX1kPW5ldyBFeHQuZm9ybS5Db21ib0JveCh7dHlwZUFoZWFkOnRydWUsdHJpZ2dlckFjdGlv bjoiYWxsIix3aWR0aDoxNTAsbGlzdFdpZHRoOjE1MCxmaWVsZExhYmVsOiLQotC40L8g0L3QvtGB 0LjRgtC10LvRjyIsbGF6eVJlbmRlcjp0cnVlLG1vZGU6ImxvY2FsIixzdG9yZTpuZXcgRXh0LmRh dGEuQXJyYXlTdG9yZSh7aWQ6MCxmaWVsZHM6WyJpZCIsIm5hbWUiXSxkYXRhOmZ9KSx2YWx1ZUZp ZWxkOiJpZCIsZGlzcGxheUZpZWxkOiJuYW1lIix2YWx1ZToiaW1hZ2UifSk7aj1uZXcgRXh0LmZv cm0uVGV4dEZpZWxkKHthbmNob3I6IjEwMCUiLGZpZWxkTGFiZWw6ItCk0LDQudC7IC8gVVJMIn0p O2k9bmV3IEV4dC5mb3JtLlRleHRGaWVsZCh7YW5jaG9yOiIxMDAlIixmaWVsZExhYmVsOiLQl9Cw 0LPQvtC70L7QstC+0LoifSk7Zz1mdW5jdGlvbigpe3ZhciBrPXttZWRpYVR5cGU6ZC5nZXRWYWx1 ZSgpLG1lZGlhVXJsOmouZ2V0VmFsdWUoKSxtZWRpYUNhcHRpb246aS5nZXRWYWx1ZSgpfTtjLnJl bW92ZUFsbCgpO2lmKGsubWVkaWFVcmwpe2MuYWRkKGEuUXVpel9NZWRpYS5jcmVhdGUoRXh0LmFw cGx5KHtib3JkZXI6ZmFsc2UsYW5jaG9yOiIxMDAlIn0saykpKX1pZihjLnJlbmRlcmVkKXtjLmRv TGF5b3V0KCl9fTtjPW5ldyBFeHQuZm9ybS5GaWVsZFNldCh7dGl0bGU6ItCf0YDQvtGB0LzQvtGC 0YDQtdGC0YwiLHRvb2xzOlt7aWQ6InJlZnJlc2giLGhhbmRsZXI6ZyxxdGlwOiLQntCx0L3QvtCy 0LjRgtGMIn1dLGJvZHlTdHlsZToiYmFja2dyb3VuZDogd2hpdGUiLGFuY2hvcjoiMTAwJSAtODAi fSk7ZC5vbigic2VsZWN0IixnKTtqLm9uKCJjaGFuZ2UiLGcpO2kub24oImNoYW5nZSIsZyk7dGhp cy53aW49dGhpcy5jcmVhdGVXaW5kb3coe3RpdGxlOiLQlNC+0LHQsNCy0LjRgtGMINC80LXQtNC4 0LAg0YHQvtC00LXRgNC20LDQvdC40LUiLHdpZHRoOjQwMCxoZWlnaHQ6NDAwLGxheW91dDoiZm9y bSIsYm9keVN0eWxlOiJwYWRkaW5nOiAxMHB4IixpdGVtczpbZCxqLGksY10sYnV0dG9uczpbe3Rl eHQ6ItCU0L7QsdCw0LLQuNGC0YwiLHNjb3BlOnRoaXMsaGFuZGxlcjpmdW5jdGlvbigpe3ZhciBt PWQuZ2V0VmFsdWUoKSxsPWouZ2V0VmFsdWUoKSxrPWkuZ2V0VmFsdWUoKTtpZihsKXt0aGlzLmFk ZE1lZGlhKHttZWRpYVR5cGU6bSxtZWRpYVVybDpsLG1lZGlhQ2FwdGlvbjprfSk7dGhpcy53aW4u aGlkZSgpfWVsc2V7YWxlcnQoItCX0LDQv9C+0LvQvdC40YLQtSDQv9C+0LvQtSBVUkwiKX19fSx7 dGV4dDoiQ2FuY2VsIixzY29wZTp0aGlzLGhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLndpbi5oaWRl KCl9fV0sbGlzdGVuZXJzOntiZWZvcmVjbG9zZTp7c2NvcGU6dGhpcyxmbjpmdW5jdGlvbigpe3Ro aXMud2luLmhpZGUoKTtyZXR1cm4gZmFsc2V9fX19KX10aGlzLndpbi5zaG93KCl9O3RoaXMuYWRk TWVkaWE9ZnVuY3Rpb24oYyxnLGQpe3ZhciBmPXt9LGU7aWYoZyl7ZT1nfWVsc2V7ZG97ZT1FeHQu aWQoKX13aGlsZSh0aGlzLm1lZGlhSXRlbXNbZV0pfXRoaXMudmFsdWU9dGhpcy52YWx1ZXx8e307 dGhpcy52YWx1ZVtlXT1FeHQuYXBwbHkoe30sYyk7Zi5wYW5lbD10aGlzLm1lZGlhQ29udGFpbmVy LmFkZChhLlF1aXpfTWVkaWEuY3JlYXRlKEV4dC5hcHBseSh7Ym9yZGVyOmZhbHNlLGFuY2hvcjoi MTAwJSJ9LGMpKSk7Zi5idXR0b249dGhpcy5tZWRpYUNvbnRhaW5lci5hZGQoe3h0eXBlOiJidXR0 b24iLHRleHQ6ItCj0LTQsNC70LjRgtGMIixoYW5kbGVyOmZ1bmN0aW9uKCl7Zi5idXR0b24uZGVz dHJveSgpO2YucGFuZWwuZGVzdHJveSgpO3RoaXMubWVkaWFJdGVtc1tlXT1udWxsO3RoaXMudmFs dWVbZV09bnVsbDt0aGlzLmZpcmVFdmVudCgiY2hhbmdlIix0aGlzKX0sc2NvcGU6dGhpc30pO3Ro aXMubWVkaWFJdGVtc1tlXT1mO2lmKCFkKXt0aGlzLmZpcmVFdmVudCgiY2hhbmdlIix0aGlzKX10 aGlzLmRvTGF5b3V0KCl9O3RoaXMubWVkaWFJdGVtcz17fTt0aGlzLmFkZEV2ZW50cygiY2hhbmdl Iik7YS5RdWl6X01lZGlhTWdyLnN1cGVyY2xhc3MuaW5pdENvbXBvbmVudC5jYWxsKHRoaXMpO3Ro aXMubWVkaWFDb250YWluZXI9dGhpcy5hZGQoe3h0eXBlOiJwYW5lbCIsbGF5b3V0OiJhdXRvIixk ZWZhdWx0czp7c3R5bGU6Im1hcmdpbjoycHgifSxib3JkZXI6ZmFsc2V9KTt0aGlzLmFkZCh7eHR5 cGU6ImJ1dHRvbiIsdGV4dDoi0JTQvtCx0LDQstC40YLRjCDQnNC10LTQuNCwIixoYW5kbGVyOnRo aXMub3Blbk1lZGlhV2luZG93LHNjb3BlOnRoaXN9KTtpZih0aGlzLnZhbHVlKXt0aGlzLnNldFZh bHVlKHRoaXMudmFsdWUpfWVsc2V7dGhpcy52YWx1ZT17fX19LGNyZWF0ZVdpbmRvdzpmdW5jdGlv bihjKXtyZXR1cm4gbmV3IEV4dC5XaW5kb3coYyl9LGdldFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9 RXh0LmVuY29kZSh0aGlzLnZhbHVlKTtpZihjPT0ie30iKXtyZXR1cm4gbnVsbH1yZXR1cm4gY30s c2V0VmFsdWU6ZnVuY3Rpb24oYyl7dHJ5e2lmKHRoaXMud2luKXt0aGlzLndpbi5oaWRlKCl9aWYo Yyl7dGhpcy52YWx1ZT1FeHQuZGVjb2RlKGMpfWVsc2V7dGhpcy52YWx1ZT17fX10aGlzLm1lZGlh Q29udGFpbmVyLnJlbW92ZUFsbCgpO2Zvcih2YXIgZiBpbiB0aGlzLnZhbHVlKXtpZih0aGlzLnZh bHVlLmhhc093blByb3BlcnR5KGYpKXt0aGlzLmFkZE1lZGlhKHRoaXMudmFsdWVbZl0sZix0cnVl KX19fWNhdGNoKGQpe2EuZXhjZXB0aW9uKGQpfX19KTthLlF1aXpfUXVpekNvbmZpZz1FeHQuZXh0 ZW5kKEV4dC51dGlsLk9ic2VydmFibGUse3RpdGxlOm51bGwsbmFtZTpudWxsLG9wdGlvbnM6bnVs bCxpdGVtczpudWxsLGlkOm51bGwsc29ydEFjdHVhbDpmYWxzZSxyZXN1bHRDb25maWc6bnVsbCxj b25zdHJ1Y3RvcjpmdW5jdGlvbihjKXt0aGlzLm9yZGVyPVtdO3RoaXMub3B0aW9ucz17fTt0aGlz LmFkZEV2ZW50cygicXVlc3Rpb25hZGQiLCJxdWVzdGlvbmRlbGV0ZSIsIml0ZW1hZGQiLCJyZW9y ZGVyIiwicmVzdWx0Y2hhbmdlIiwidGl0bGVjaGFuZ2UiLCJuYW1lY2hhbmdlIiwiY2hhbmdlIiwi aXRlbWRlbGV0ZSIpO3RoaXMuaXRlbXM9bmV3IEV4dC51dGlsLk1peGVkQ29sbGVjdGlvbigpO2Eu UXVpel9RdWl6Q29uZmlnLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGMpfSxnZXRJ ZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlkfSxzZXRJZDpmdW5jdGlvbihjKXt0aGlzLmlkPWN9 LGNvdW50UXVlc3Rpb25zOmZ1bmN0aW9uKCl7dmFyIGM9MDt0aGlzLml0ZW1zLmVhY2goZnVuY3Rp b24oZCl7aWYoZC5pc1F1ZXN0aW9uKCkpe2MrK319KTtyZXR1cm4gY30sZ2V0UmVzdWx0Q29uZmln OmZ1bmN0aW9uKCl7aWYoIXRoaXMucmVzdWx0Q29uZmlnKXt0aGlzLnJlc3VsdENvbmZpZz1uZXcg YS5RdWl6X1Jlc3VsdENvbmZpZygpO3RoaXMucmVzdWx0Q29uZmlnLm9uKCJjaGFuZ2UiLGZ1bmN0 aW9uKCl7dGhpcy5maXJlRXZlbnQoInJlc3VsdGNoYW5nZSIpO3RoaXMuZmlyZUV2ZW50KCJjaGFu Z2UiKX0sdGhpcyl9cmV0dXJuIHRoaXMucmVzdWx0Q29uZmlnfSxnZXRUb3RhbFJhdGU6ZnVuY3Rp b24oKXt2YXIgYz0wO3RoaXMuaXRlbXMuZWFjaChmdW5jdGlvbihkKXtpZihkLmlzUXVlc3Rpb24o KSYmIWQuZ3JvdXApe2MrPWQuZ2V0QXR0cigicmF0ZSIpfX0pO3JldHVybiBjfSxkZWxldGVJdGVt OmZ1bmN0aW9uKGMpe2lmKHRoaXMuaXRlbXMuY29udGFpbnMoYykpe2MuZGVsZXRlSXRlbSgpfX0s YWRkSXRlbTpmdW5jdGlvbihjKXt0aGlzLnNvcnRBY3R1YWw9ZmFsc2U7aWYoIShjIGluc3RhbmNl b2YgYS5RdWl6X1F1aXpJdGVtQ29uZmlnKSl7dGhyb3ciaXRlbUNvbmZpZyBpcyBub3QgaW5zdGFu Y2Ugb2YgTWFzdGVyLlF1aXpfUXVpekl0ZW1Db25maWcifWlmKGMuaXNRdWVzdGlvbigpJiZjLmdl dEF0dHIoInBvc2l0aW9uIik9PT1udWxsKXtjLnNldEF0dHIoInBvc2l0aW9uIix0aGlzLmNvdW50 UXVlc3Rpb25zKCkrMSl9dGhpcy5pdGVtcy5hZGQoYyk7Yy5vbigiZGVsZXRlIixmdW5jdGlvbigp e3RoaXMuc29ydEFjdHVhbD1mYWxzZTt0aGlzLml0ZW1zLnJlbW92ZShjKTt0aGlzLmZpcmVFdmVu dCgiaXRlbWRlbGV0ZSIsYyk7aWYoYy5pc1F1ZXN0aW9uKCkpe3RoaXMuZmlyZUV2ZW50KCJxdWVz dGlvbmRlbGV0ZSIsYyl9dGhpcy5maXJlRXZlbnQoImNoYW5nZSIpfSx0aGlzKTtjLm9uKCJjaGFu Z2UiLGZ1bmN0aW9uKGQpe3RoaXMuZmlyZUV2ZW50KCJjaGFuZ2UiKX0sdGhpcyk7Yy5vbigiZ3Jv dXBjaGFuZ2UiLGZ1bmN0aW9uKGQpe3RoaXMuc29ydEFjdHVhbD1mYWxzZX0sdGhpcyk7Yy5vbigi cG9zaXRpb25jaGFuZ2UiLGZ1bmN0aW9uKGQpe3RoaXMuc29ydEFjdHVhbD1mYWxzZTt0aGlzLnNl dFF1ZXN0aW9uUG9zaXRpb24oYyxkKX0sdGhpcyk7dGhpcy5maXJlRXZlbnQoIml0ZW1hZGQiLGMp O2lmKGMuaXNRdWVzdGlvbigpKXt0aGlzLmZpcmVFdmVudCgicXVlc3Rpb25hZGQiLGMpO3RoaXMu ZmlyZUV2ZW50KCJjaGFuZ2UiKX10aGlzLmZpcmVFdmVudCgiY2hhbmdlIil9LHNvcnQ6ZnVuY3Rp b24oKXt0aGlzLml0ZW1zLnNvcnQoIkFTQyIsZnVuY3Rpb24oZCxjKXtpZighZC5pc1F1ZXN0aW9u KCkmJiFjLmlzUXVlc3Rpb24oKSl7cmV0dXJuIDB9ZWxzZXtpZighZC5pc1F1ZXN0aW9uKCkpe3Jl dHVybiAtMX1lbHNle2lmKCFjLmlzUXVlc3Rpb24oKSl7cmV0dXJuIDF9ZWxzZXtpZihkLmdldEF0 dHIoImdyb3VwIikpe2lmKGQuZ2V0QXR0cigiZ3JvdXAiKSE9PWMuZ2V0QXR0cigiZ3JvdXAiKSl7 cmV0dXJuIDF9fWVsc2V7aWYoYy5nZXRBdHRyKCJncm91cCIpKXtpZihkLmdldEF0dHIoImdyb3Vw IikhPT1jLmdldEF0dHIoImdyb3VwIikpe3JldHVybiAtMX19fX19fWQ9ZC5nZXRBdHRyKCJwb3Np dGlvbiIpO2M9Yy5nZXRBdHRyKCJwb3NpdGlvbiIpO3JldHVybiBkPGM/LTE6MX0sdGhpcyl9LGdl dE5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lfSxzZXROYW1lOmZ1bmN0aW9uKGMpe2lm KHRoaXMubmFtZSE9Yyl7dGhpcy5uYW1lPWM7dGhpcy5maXJlRXZlbnQoIm5hbWVjaGFuZ2UiKTt0 aGlzLmZpcmVFdmVudCgiY2hhbmdlIil9fSxnZXRPcmRlcjpmdW5jdGlvbigpe3RoaXMuc29ydCgp O3ZhciBjPVtdO3RoaXMuaXRlbXMuZWFjaChmdW5jdGlvbihkKXtpZihkLmlzUXVlc3Rpb24oKSl7 Yy5wdXNoKGQuZ2V0SWQoKSl9fSk7cmV0dXJuIGN9LHNldE9yZGVyOmZ1bmN0aW9uKGMpe3ZhciBl PXRoaXMuZ2V0UXVlc3Rpb25zKCksZCxmO2ZvcihkIGluIGMpe2lmKGMuaGFzT3duUHJvcGVydHko ZCkpe2Y9Y1tkXTtlW2ZdLnNldEF0dHIoInBvc2l0aW9uIixkKzEpfX19LGdldEl0ZW1zOmZ1bmN0 aW9uKCl7dGhpcy5zb3J0KCk7cmV0dXJuIHRoaXMuaXRlbXN9LGdldFF1ZXN0aW9uczpmdW5jdGlv bihkKXt2YXIgYz17fTt0aGlzLnNvcnQoKTt0aGlzLml0ZW1zLmVhY2goZnVuY3Rpb24oZSl7aWYo ZS5pc1F1ZXN0aW9uKCkpe2lmKCFkfHwhZS5ncm91cCl7Y1tlLmdldElkKCldPWV9fX0pO3JldHVy biBjfSxpc1F1ZXN0aW9uRXhpc3Q6ZnVuY3Rpb24oZCl7dmFyIGM9ZmFsc2U7dGhpcy5pdGVtcy5l YWNoKGZ1bmN0aW9uKGUpe2lmKGUuaXNRdWVzdGlvbigpJiZlPT1kKXtjPXRydWV9fSk7cmV0dXJu IGN9LHNldFF1ZXN0aW9uUG9zaXRpb246ZnVuY3Rpb24oayxlKXtpZih0aGlzLnNldFF1ZXN0aW9u UG9zaXRpb25TdGFydGVkKXtyZXR1cm59aWYoIXRoaXMuaXNRdWVzdGlvbkV4aXN0KGspKXt0aHJv dyJnaXZlbiBxdWVzdGlvbkNvbmZpZyBpcyBub3QgZm91bmQgaW4gcXVpekNvbmZpZ2BzIGl0ZW1z In10aGlzLnNldFF1ZXN0aW9uUG9zaXRpb25TdGFydGVkPXRydWU7ay5zZXRBdHRyKCJwb3NpdGlv biIsZSk7dmFyIGY9dGhpcy5nZXRPcmRlcigpLGc9ay5nZXRJZCgpLGQ9dGhpcy5nZXRRdWVzdGlv bnMoKSxqPTAsaCxjO2ZvcihjPTA7YzxmLmxlbmd0aDtjKyspeysrajtoPWZbY107aWYoZyE9aCl7 aWYoaj09ZSl7KytqfWRbaF0uc2V0QXR0cigicG9zaXRpb24iLGopfX10aGlzLmZpcmVFdmVudCgi cmVvcmRlciIsayxlKTt0aGlzLnNldFF1ZXN0aW9uUG9zaXRpb25TdGFydGVkPWZhbHNlfSxzZXRD b3JyZWN0QW5zd2VyczpmdW5jdGlvbihjKXthLmVhY2godGhpcy5nZXRRdWVzdGlvbnMoKSxmdW5j dGlvbihkLGUpe2lmKGMuaGFzT3duUHJvcGVydHkoZSkpe2Quc2V0QXR0cigiY29ycmVjdF9hbnN3 ZXIiLGNbZV0pfX0pfSxnZXREYXRhOmZ1bmN0aW9uKCl7dmFyIGM9W107dGhpcy5pdGVtcy5lYWNo KGZ1bmN0aW9uKGQpe3ZhciBlPXtpdGVtVHlwZTpkLml0ZW1UeXBlLGRhdGE6ZC5nZXREYXRhKCl9 O2lmKGQuaXNRdWVzdGlvbigpKXtlLnF1ZXN0aW9uSWQ9ZC5nZXRJZCgpfWUuaWQ9ZC5nZXRJZCgp O2MucHVzaChlKX0pO3JldHVybntyZXN1bHQ6dGhpcy5nZXRSZXN1bHRDb25maWcoKS5nZXREYXRh KCksb3B0aW9uczp0aGlzLm9wdGlvbnMsbmFtZTp0aGlzLmdldE5hbWUoKSx0aXRsZTp0aGlzLmdl dFRpdGxlQ29uZmlnKCkuZ2V0VGl0bGUoKSxpdGVtczpjfX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXty ZXR1cm4gRXh0LmVuY29kZSh0aGlzLmdldERhdGEoKSl9LHNldDpmdW5jdGlvbihoKXtpZihFeHQu aXNQcmltaXRpdmUoaCkpe2g9RXh0LmRlY29kZShoKX1oPWh8fHt9O3ZhciBlLGcsZCxmLGM9dGhp cy5pdGVtcy5jbG9uZSgpO2lmKGguaXRlbXMpe2U9aC5pdGVtczthLmVhY2goZSxmdW5jdGlvbihr LGope2Y9dGhpcy5pdGVtcy5maW5kSW5kZXgoImlkIixrLmlkKTtpZihmIT0tMSl7ZD10aGlzLml0 ZW1zLml0ZW1BdChmKTtkLnNldChrLmRhdGEpO2MucmVtb3ZlQXQoYy5maW5kSW5kZXgoImlkIixr LmlkKSl9ZWxzZXt0cnl7Zz10aGlzLmdldEl0ZW1Db25maWdDbGFzc0J5VHlwZShrLml0ZW1UeXBl KTtkPW5ldyBnKGspO3RoaXMuYWRkSXRlbShkKX1jYXRjaChsKXthLmV4Y2VwdGlvbihsKX19fSx0 aGlzKX1jLmVhY2goZnVuY3Rpb24oaSl7dGhpcy5kZWxldGVJdGVtKGkpfSx0aGlzKTt0aGlzLmdl dFJlc3VsdENvbmZpZygpLnNldERhdGEoaC5yZXN1bHQpO3RoaXMuZ2V0VGl0bGVDb25maWcoKS5z ZXRUaXRsZShoLnRpdGxlKTt0aGlzLnNldE5hbWUoaC5uYW1lP2gubmFtZTpudWxsKTt0aGlzLl9z ZXRPcHRpb25zKGgub3B0aW9ucyl9LGdldEl0ZW1Db25maWdDbGFzc0J5VHlwZTpmdW5jdGlvbihj KXtzd2l0Y2goYyl7Y2FzZSJxdWVzdGlvbiI6cmV0dXJuIGEuUXVpel9JdGVtX1F1ZXN0aW9uQ29u ZmlnO2Nhc2UiZ3JvdXAiOnJldHVybiBhLlF1aXpfSXRlbV9Hcm91cENvbmZpZztkZWZhdWx0OnRo cm93InVuc3VwcG9ydGVkIGJ5IGZ1bmN0aW9uIGdldEl0ZW1Db25maWdDbGFzc0J5VHlwZSB0eXBl ICIrY319LGdldE9wdGlvbjpmdW5jdGlvbihjKXtpZihjPT0ib25lX3Blcl9wYWdlIil7cmV0dXJu IHRydWV9cmV0dXJuIHRoaXMub3B0aW9uc1tjXT90aGlzLm9wdGlvbnNbY106bnVsbH0sX3NldE9w dGlvbnM6ZnVuY3Rpb24oYyl7Yz1jfHx7fTtpZihjJiZFeHQuZW5jb2RlKHRoaXMub3B0aW9ucykh PUV4dC5lbmNvZGUoYykpe3RoaXMub3B0aW9ucz1jO3RoaXMuZmlyZUV2ZW50KCJvcHRpb25zY2hh bmdlIix0aGlzKTt0aGlzLmZpcmVFdmVudCgiY2hhbmdlIil9fSxzZXRPcHRpb246ZnVuY3Rpb24o YyxkKXtpZih0aGlzLm9wdGlvbnNbY10hPWQpe3RoaXMub3B0aW9uc1tjXT1kO3RoaXMuZmlyZUV2 ZW50KCJvcHRpb25zY2hhbmdlIix0aGlzKTt0aGlzLmZpcmVFdmVudCgiY2hhbmdlIil9fSxnZXRU aXRsZUNvbmZpZzpmdW5jdGlvbigpe2lmKCF0aGlzLnRpdGxlQ29uZmlnKXt0aGlzLnRpdGxlQ29u ZmlnPW5ldyBhLlF1aXpfSXRlbV9UaXRsZUNvbmZpZygpO3RoaXMudGl0bGVDb25maWcub24oImNo YW5nZSIsZnVuY3Rpb24oKXt0aGlzLmZpcmVFdmVudCgidGl0bGVjaGFuZ2UiKTt0aGlzLmZpcmVF dmVudCgiY2hhbmdlIil9LHRoaXMpfXJldHVybiB0aGlzLnRpdGxlQ29uZmlnfX0pO2EuUXVpel9S ZXN1bHRDb25maWc9RXh0LmV4dGVuZChFeHQudXRpbC5PYnNlcnZhYmxlLHtyYXRpbmc6bnVsbCxv cHRpb25zOm51bGwsdGV4dDoiIixjb25zdHJ1Y3RvcjpmdW5jdGlvbihjKXt0aGlzLmFkZEV2ZW50 cygicmF0aW5nY2hhbmdlIiwidGV4dGNoYW5nZSIsIm9wdGlvbnNjaGFuZ2UiLCJjaGFuZ2UiKTth LlF1aXpfUmVzdWx0Q29uZmlnLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGMpfSxz ZXREYXRhOmZ1bmN0aW9uKGMpe2M9Y3x8e307dGhpcy5yYXRpbmc9Yy5yYXRpbmd8fFtdO3RoaXMu b3B0aW9ucz1jLm9wdGlvbnN8fHt9O3RoaXMudGV4dD1jLnRleHQ/Yy50ZXh0OiIifSxnZXREYXRh OmZ1bmN0aW9uKCl7cmV0dXJue3JhdGluZzp0aGlzLmdldFJhdGluZygpLG9wdGlvbnM6dGhpcy5n ZXRPcHRpb25zKCksdGV4dDp0aGlzLnRleHR9fSxnZXRSYXRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4g dGhpcy5yYXRpbmc/dGhpcy5yYXRpbmc6W119LHNldFJhdGluZzpmdW5jdGlvbihjKXtpZihFeHQu ZW5jb2RlKHRoaXMucmF0aW5nKSE9RXh0LmVuY29kZShjKSl7dGhpcy5yYXRpbmc9Yzt0aGlzLmZp cmVFdmVudCgicmF0aW5nY2hhbmdlIik7dGhpcy5maXJlRXZlbnQoImNoYW5nZSIpfX0sZ2V0T3B0 aW9uczpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5vcHRpb25zP3RoaXMub3B0aW9uczp7fX0sc2V0 T3B0aW9uczpmdW5jdGlvbihjKXtpZihFeHQuZW5jb2RlKHRoaXMub3B0aW9ucykhPUV4dC5lbmNv ZGUoYykpe3RoaXMuZmlyZUV2ZW50KCJvcHRpb25zY2hhbmdlIik7dGhpcy5maXJlRXZlbnQoImNo YW5nZSIpfX0sc2V0T3B0aW9uOmZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpcy5nZXRPcHRpb25zKCk7 aWYoZVtjXSE9ZCl7ZVtjXT1kO3RoaXMuZmlyZUV2ZW50KCJvcHRpb25zY2hhbmdlIik7dGhpcy5m aXJlRXZlbnQoImNoYW5nZSIpO3RoaXMuc2V0T3B0aW9ucyhlKX19LHNldENvbW1vblRleHQ6ZnVu Y3Rpb24oYyl7aWYodGhpcy50ZXh0IT1jKXt0aGlzLnRleHQ9Yzt0aGlzLmZpcmVFdmVudCgidGV4 dGNoYW5nZSIpO3RoaXMuZmlyZUV2ZW50KCJjaGFuZ2UiKX19LGdldENvbW1vblRleHQ6ZnVuY3Rp b24oKXtyZXR1cm4gdGhpcy50ZXh0fX0pO2EuUXVpel9RdWl6SXRlbUNvbmZpZz1FeHQuZXh0ZW5k KEV4dC51dGlsLk9ic2VydmFibGUse3h0eXBlOm51bGwsaXRlbVR5cGU6bnVsbCxjb25zdHJ1Y3Rv cjpmdW5jdGlvbihjKXtjPWN8fHt9O3RoaXMuYWRkRXZlbnRzKCJkZWxldGUiLCJjaGFuZ2UiKTth LlF1aXpfUXVpekl0ZW1Db25maWcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYyk7 aWYoYy5kYXRhKXt0aGlzLnNldChjLmRhdGEpfX0sZ2V0SWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5p ZCl7YS5leGNlcHRpb24oIlF1aXogSXRlbSBDb25maWcgZG9lcyBub3QgaGF2ZSBhbiBJRCIpfXJl dHVybiB0aGlzLmlkfSxnZXRYVHlwZTpmdW5jdGlvbigpe2lmKCF0aGlzLnh0eXBlKXt0aHJvdyJ4 dHlwZSBpcyBub3QgaW1wbGVtZW50ZWQifXJldHVybiB0aGlzLnh0eXBlfSxnZXRFZGl0b3JYVHlw ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFhUeXBlKCkrIl9lZGl0b3IifSxpc1F1ZXN0aW9u OmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfSxkZWxldGVJdGVtOmZ1bmN0aW9uKCl7dGhpcy5maXJl RXZlbnQoImRlbGV0ZSIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiIifSxzZXQ6ZnVuY3Rp b24oYyl7fX0pO2EuUXVpel9RdWl6SXRlbUNvbnRhaW5lclBhbmVsPUV4dC5leHRlbmQoRXh0LlBh bmVsLHtib3JkZXI6ZmFsc2UsYXV0b0hlaWdodDp0cnVlLGF1dG9XaWR0aDp0cnVlLGl0ZW1Db25m aWc6bnVsbCxpdGVtUGFuZWw6bnVsbCxjb25zdHJ1Y3RvcjpmdW5jdGlvbihjKXtjPWN8fHt9O3Ro aXMuYWRkQ2xhc3MoInF1aXotaXRlbS1jb250YWluZXItcGFuZWwiKTt0aGlzLmFkZEV2ZW50cygi cXVpel9pdGVtX2xheW91dCIpO2lmKGMuaXRlbUNvbmZpZyl7dGhpcy5zZXRJdGVtQ29uZmlnKGMu aXRlbUNvbmZpZyl9ZWxzZXt0aGlzLnNldEl0ZW1Db25maWcobmV3IGEuUXVpel9RdWl6SXRlbUNv bmZpZygpKX1hLlF1aXpfUXVpekl0ZW1Db250YWluZXJQYW5lbC5zdXBlcmNsYXNzLmNvbnN0cnVj dG9yLmNhbGwodGhpcyxjKTt0aGlzLm9uKCJhZnRlcnJlbmRlciIsZnVuY3Rpb24oKXt0aGlzLmRv UXVpekl0ZW1MYXlvdXQoKX0sdGhpcyl9LGRvUXVpekl0ZW1MYXlvdXQ6ZnVuY3Rpb24oKXthLmxv ZygiZG9RdWl6SXRlbUxheW91dCIpO2lmKCF0aGlzLml0ZW1QYW5lbCl7dGhpcy5yZW1vdmVBbGwo KTt2YXIgYz10aGlzLml0ZW1Db25maWcuZ2V0WFR5cGUoKTt0aGlzLml0ZW1QYW5lbD10aGlzLmFk ZCh7eHR5cGU6YyxpdGVtQ29udGFpbmVyOnRoaXMsbW9kZTp0aGlzLm1vZGUsaXRlbUNvbmZpZzp0 aGlzLml0ZW1Db25maWd9KX10aGlzLmRvTGF5b3V0KCk7dGhpcy5maXJlRXZlbnQoInF1aXpfaXRl bV9sYXlvdXQiLHRoaXMuaXRlbVBhbmVsKX0sZ2V0SXRlbVBhbmVsOmZ1bmN0aW9uKCl7aWYoIXRo aXMuaXRlbVBhbmVsKXthLmxvZygiZ2V0SXRlbVBhbmVsIGNhbGxlZCBhbmQgaXQgcmVxdWlyZXMg cmVuZGVyaW5nIik7dGhpcy5kb1F1aXpJdGVtTGF5b3V0KCl9cmV0dXJuIHRoaXMuaXRlbVBhbmVs fSxzZXRJdGVtQ29uZmlnOmZ1bmN0aW9uKGMpe2lmKGMgaW5zdGFuY2VvZiBhLlF1aXpfUXVpekl0 ZW1Db25maWcpe3RoaXMuaXRlbUNvbmZpZz1jfWVsc2V7dGhyb3ciaXRlbUNvbmZpZyBpcyBub3Qg aW5zdGFuY2Ugb2YgTWFzdGVyLlF1aXpfUXVpekl0ZW1Db25maWcifXRoaXMudXBkYXRlUXVpekl0 ZW0oKX0sZ2V0SXRlbUNvbmZpZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZW1Db25maWd9LHVw ZGF0ZVF1aXpJdGVtOmZ1bmN0aW9uKCl7fX0pO2EuUXVpel9RdWl6UGFuZWw9RXh0LmV4dGVuZChF eHQuUGFuZWwse3F1aXpDb25maWc6bnVsbCxtYWluUGFuZWw6bnVsbCxtb2RlOm51bGwsZGVmYXVs dE1vZGU6InRlc3RpbmciLGxheW91dDoiYm9yZGVyIixib3JkZXI6ZmFsc2UsdmFsaWRNb2Rlczpb InRlc3RpbmciLCJlZGl0IiwicmVzdWx0Il0scXVlc3Rpb25zOm51bGwsdHJlZTpudWxsLG1pbldp ZHRoOjYwMCxjdXJyZW50SXRlbTpudWxsLHF1aXpSZW5kZXJlZDpmYWxzZSx1c2VUaXRsZTp0cnVl LHRpdGxlUGFuZWw6dHJ1ZSxtb2RlUGx1Z2luOm51bGwsY29uc3RydWN0b3I6ZnVuY3Rpb24oZCl7 dGhpcy5hZGRFdmVudHMoInF1aXpfbGF5b3V0Iik7ZD1kfHx7fTtkLnBsdWdpbnM9ZC5wbHVnaW5z fHxbXTt0aGlzLm1vZGU9KGQubW9kZSYmdGhpcy52YWxpZE1vZGUoZC5tb2RlKSk/ZC5tb2RlOnRo aXMuZGVmYXVsdE1vZGU7dmFyIGM9ZC5tb2RlQ29uZmlnfHx7fTtjLnF1aXpQYW5lbD10aGlzO3N3 aXRjaCh0aGlzLm1vZGUpe2Nhc2UiZWRpdCI6dGhpcy5tb2RlUGx1Z2luPW5ldyBhLlF1aXpfUXVp elBhbmVsX0VkaXRvclBsdWdpbihjKTticmVhaztjYXNlInRlc3RpbmciOnRoaXMubW9kZVBsdWdp bj1uZXcgYS5RdWl6X1F1aXpQYW5lbF9UZXN0aW5nUGx1Z2luKGMpO2JyZWFrO2Nhc2UicmVzdWx0 Ijp0aGlzLm1vZGVQbHVnaW49bmV3IGEuUXVpel9RdWl6UGFuZWxfUmVzdWx0UGx1Z2luKGMpO2Jy ZWFrO2RlZmF1bHQ6dGhyb3ciVW5kZWZpbmVkIG1vZGUgIit0aGlzLm1vZGV9aWYoZC5xdWl6Q29u ZmlnKXt0aGlzLmluaXRRdWl6Q29uZmlnKGQucXVpekNvbmZpZyl9ZWxzZXt0aGlzLmluaXRRdWl6 Q29uZmlnKG5ldyBhLlF1aXpfUXVpekNvbmZpZygpKX1kLnBsdWdpbnMucHVzaCh0aGlzLm1vZGVQ bHVnaW4pO2QuYmJhcj1uZXcgRXh0LlRvb2xiYXIoe2hpZGRlbjp0cnVlfSk7dGhpcy50aXRsZT10 aGlzLm1vZGVQbHVnaW4uZ2V0VGl0bGUoKTt0aGlzLmFkZENsYXNzKCJxdWl6LXBhbmVsLW1vZGUt Iit0aGlzLm1vZGUpO2EuUXVpel9RdWl6UGFuZWwuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxs KHRoaXMsZCl9LGluaXRDb21wb25lbnQ6ZnVuY3Rpb24oKXthLlF1aXpfUXVpelBhbmVsLnN1cGVy Y2xhc3MuaW5pdENvbXBvbmVudC5jYWxsKHRoaXMpO3ZhciBjPXRoaXMuZ2V0UXVpekNvbmZpZygp O3RoaXMudHJlZT1uZXcgYS5RdWl6X1RyZWUoe2VuYWJsZUREOnRoaXMubW9kZT09ImVkaXQiLHJl Z2lvbjoiY2VudGVyIixxdWl6Q29uZmlnOmMsbGlzdGVuZXJzOntjbGljazpmdW5jdGlvbihkKXt0 cnl7aWYoZD09PXRoaXMudHJlZS5yb290KXt0aGlzLnNob3dJdGVtUGFuZWwoMCl9ZWxzZXt0aGlz LnNob3dJdGVtUGFuZWwoZC5pdGVtQ29uZmlnLmdldElkKCkpfX1jYXRjaChmKXthLmV4Y2VwdGlv bihmKX19LG1vdmVub2RlOmZ1bmN0aW9uKGUsaCxmLGcsZCl7YS5sb2coIm1vdmVub2RlIik7dGhp cy5nZXRRdWl6Q29uZmlnKCkuc2V0UXVlc3Rpb25Qb3NpdGlvbihoLml0ZW1Db25maWcsZCsxKX0s c2NvcGU6dGhpc319KTt0aGlzLmxlZnRQYW5lbD10aGlzLmFkZCh7cmVnaW9uOiJ3ZXN0IixzcGxp dDp0cnVlLGxheW91dDoiYm9yZGVyIixib3JkZXI6ZmFsc2Usd2lkdGg6MTkwLGl0ZW1zOlt0aGlz LnRyZWVdfSk7dGhpcy50aXRsZVBhbmVsPXRoaXMuY3JlYXRlSXRlbVBhbmVsKHtpZDphLmlkKCJx dWl6LXRpdGxlIiksY29uZmlybURlbGV0ZU1lc3NhZ2U6ItCS0Ysg0LTQtdC50YHRgtCy0LjRgtC1 0LvRjNC90L4g0YXQvtGC0LjRgtC1INC+0YfQuNGB0YLQuNGC0Ywg0YLQuNGC0YPQu9GM0L3Rg9GO INGH0LDRgdGC0Ywg0YLQtdGB0YLQsD8iLGl0ZW1Db25maWc6Yy5nZXRUaXRsZUNvbmZpZygpLG9u ZVBlclBhZ2VNb2RlOjAsc3R5bGU6Im1hcmdpbjogMTBweCAzMHB4IDEwcHggMTBweDsgcGFkZGlu ZzogMHB4Iixib2R5U3R5bGU6InBhZGRpbmc6IDBweCIsYm9yZGVyOnRoaXMubW9kZT09ImVkaXQi LG1vZGU6dGhpcy5tb2RlfSk7dGhpcy5jZW50ZXJQYW5lbD10aGlzLmFkZCh7cmVnaW9uOiJjZW50 ZXIiLGJvcmRlcjpmYWxzZSxhdXRvU2Nyb2xsOnRydWUsYmJhcjpuZXcgRXh0LlRvb2xiYXIoe2hp ZGRlbjp0cnVlLGhlaWdodDozNn0pLGl0ZW1zOlt0aGlzLnRpdGxlUGFuZWxdfSk7dGhpcy5jZW50 ZXJQYW5lbC5vbigicmVuZGVyIixmdW5jdGlvbihkKXt9LHRoaXMpO3RoaXMucmVzZXRNYWluUGFu ZWwoKTt0aGlzLm9uKCJyZW5kZXIiLHRoaXMuZG9RdWl6TGF5b3V0LHRoaXMpfSxlZGl0VGl0bGU6 ZnVuY3Rpb24oKXt0aGlzLnNob3dJdGVtUGFuZWwoMCk7dGhpcy50aXRsZVBhbmVsLmVkaXQoKX0s dmFsaWRNb2RlOmZ1bmN0aW9uKGQpe2Zvcih2YXIgYyBpbiB0aGlzLnZhbGlkTW9kZXMpe2lmKGQ9 PXRoaXMudmFsaWRNb2Rlc1tjXSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX0sc2hvd05leHRJ dGVtOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5nZXRRdWl6Q29uZmlnKCkuZ2V0T3B0aW9uKCJvbmVf cGVyX3BhZ2UiKSxlLGQ9MDtpZihjKXtpZih0aGlzLm5leHRCdXR0b24mJiF0aGlzLm5leHRCdXR0 b24uZGlzYWJsZWQmJiF0aGlzLm5leHRCdXR0b24uaGlkZGVuKXtkPXRoaXMubmV4dEJ1dHRvbi5x dWl6SXRlbUlkfWVsc2V7ZT10aGlzLmdldExhc3RRdWVzdGlvbigpO2lmKGUpe2Q9ZS5nZXRJZCgp fX19dGhpcy5zaG93SXRlbVBhbmVsKGQpfSxnZXRBbnN3ZXJzOmZ1bmN0aW9uKCl7dmFyIGM9e307 aWYodGhpcy5xdWVzdGlvbnMpe2EuZWFjaCh0aGlzLnF1ZXN0aW9ucyxmdW5jdGlvbihkLGcpe3Zh ciBlLGY7Zj1kLmdldEl0ZW1QYW5lbCgpO2U9Zi5nZXRJdGVtQ29uZmlnKCk7Y1tlLmdldElkKCld PWYuZ2V0QW5zd2VyKCl9KX1yZXR1cm4gY30sc2V0QW5zd2VyczpmdW5jdGlvbihoKXt0aGlzLl9h bnN3ZXJzPWg7aWYodGhpcy5xdWl6UmVuZGVyZWQpe3ZhciBmPXRoaXMucXVlc3Rpb25zLGksZCxj LGcsZT17fTtmb3IoaSBpbiBmKXtpZihmLmhhc093blByb3BlcnR5KGkpKXtjPWZbaV07Zz1jLmdl dEl0ZW1QYW5lbCgpO2Q9Zy5nZXRJdGVtQ29uZmlnKCk7aWYoIWQuZ3JvdXApe2cuc2V0QW5zd2Vy KGguaGFzT3duUHJvcGVydHkoaSk/aFtpXTpudWxsKTtpZih0aGlzLm1vZGU9PSJyZXN1bHQiKXtl W2QuaWRdPWcuaXNDb3JyZWN0KCk/Imljb24tYWNjZXB0IjoiaWNvbi1jYW5jZWwifWlmKHRoaXMu bW9kZT09InRlc3RpbmciKXt0aGlzLnBvaW50UXVlc3Rpb25TY29yZShnKX19fX1pZih0aGlzLm1v ZGU9PSJyZXN1bHQiKXt0aGlzLnRyZWUuc2V0SWNvbnMoZSl9dGhpcy5fYW5zd2Vycz1udWxsfX0s cG9pbnRRdWVzdGlvblNjb3JlOmZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMuZ2V0VHJlZSgpO2lmKGMp e2Muc2V0UXVlc3Rpb25JY29uKGQuZ2V0SXRlbUNvbmZpZygpLmdldElkKCksZC52YWxpZGF0ZSgp PyJpY29uLWFjY2VwdCI6Imljb24taGVscCIpfX0sYWRkUXVpekl0ZW06ZnVuY3Rpb24oZCxmKXtp ZighdGhpcy5yZW5kZXJlZCl7cmV0dXJufXZhciBjLGU7Yz10aGlzLmdldFF1aXpDb25maWcoKS5n ZXRPcHRpb24oIm9uZV9wZXJfcGFnZSIpO2U9dGhpcy5jcmVhdGVJdGVtUGFuZWwoe2l0ZW1Db25m aWc6ZCxpZDphLmlkKCJxdWl6LWl0ZW0tIitkLmdldElkKCkpLHRvb2xiYXI6KGMmJnRoaXMubW9k ZT09ImVkaXQiKT90aGlzLmNlbnRlclBhbmVsLmdldEJvdHRvbVRvb2xiYXIoKTpudWxsLG1vZGU6 dGhpcy5tb2RlfSk7dGhpcy5xdWVzdGlvbnM9dGhpcy5xdWVzdGlvbnN8fHt9O3RoaXMucXVlc3Rp b25zW2QuZ2V0SWQoKV09ZTt0aGlzLnF1aXpJdGVtUGFuZWxzPXRoaXMucXVpekl0ZW1QYW5lbHN8 fHt9O3RoaXMucXVpekl0ZW1QYW5lbHNbZC5nZXRJZCgpXT1lO3RyeXtpZihmfHxmPT09MCl7dGhp cy5tYWluUGFuZWwuaW5zZXJ0KGYsZSl9ZWxzZXt0aGlzLm1haW5QYW5lbC5hZGQoZSl9fWNhdGNo KGcpe2EuZXhjZXB0aW9uKGcpfX0sZ2V0SXRlbVBhbmVsQnlJZDpmdW5jdGlvbihjKXtyZXR1cm4g dGhpcy5xdWl6SXRlbVBhbmVsc1tjXX0sZ2V0TWFzazpmdW5jdGlvbigpe2lmKCF0aGlzLm0pe3Ro aXMubT1uZXcgRXh0LkxvYWRNYXNrKHRoaXMuZ2V0RWwoKSx7bXNnOmEubG9hZGluZ01lc3NhZ2V9 KX1yZXR1cm4gdGhpcy5tfSxjcmVhdGVJdGVtUGFuZWw6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMu bW9kZVBsdWdpbi5jcmVhdGVJdGVtUGFuZWwoYyl9LGluaXRRdWVzdGlvbk5hdmlnOmZ1bmN0aW9u KCl7aWYoIXRoaXMubmV4dEJ1dHRvbil7dmFyIGM9ZnVuY3Rpb24oZCl7ZC5kaXNhYmxlKCk7dGhp cy5zaG93SXRlbVBhbmVsKGQucXVpekl0ZW1JZCl9O3RoaXMubmV4dEJ1dHRvbj1uZXcgRXh0LkJ1 dHRvbih7dGV4dDoi0JTQsNC70LXQtSIsc2NvcGU6dGhpcyxkaXNhYmxlZDp0cnVlLGhlaWdodDoz MCxpY29uQ2xzOiJpY29uLWFycm93X3JpZ2h0IixpY29uQWxpZ246InJpZ2h0IixoYW5kbGVyOmN9 KTt0aGlzLnByZXZpb3VzQnV0dG9uPW5ldyBFeHQuQnV0dG9uKHt0ZXh0OiLQn9GA0LXQtNGL0LTR g9GJ0LXQtSIsZGlzYWJsZWQ6dHJ1ZSxzY29wZTp0aGlzLGhlaWdodDozMCxpY29uQ2xzOiJpY29u LWFycm93X2xlZnQiLGljb25BbGlnbjoibGVmdCIsaGFuZGxlcjpjfSk7dGhpcy5jZW50ZXJQYW5l bC5nZXRCb3R0b21Ub29sYmFyKCkuYWRkKHRoaXMucHJldmlvdXNCdXR0b24sIi0iLHRoaXMubmV4 dEJ1dHRvbiwiLT4iKX19LHVwZGF0ZU5hdmlnOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRRdWl6 Q29uZmlnKCkuZ2V0T3B0aW9uKCJvbmVfcGVyX3BhZ2UiKSxmLGMsZSxoLGc7aWYodGhpcy5uZXh0 QnV0dG9uJiZ0aGlzLnByZXZpb3VzQnV0dG9uJiZ0aGlzLnF1aXpSZW5kZXJlZCYmZCl7Yz1udWxs O2U9bnVsbDtoPW51bGw7Zz1mYWxzZTtmPXRoaXMuY3VycmVudEl0ZW0/dGhpcy5jdXJyZW50SXRl bTowO2EuZWFjaCh0aGlzLmdldFF1aXpDb25maWcoKS5nZXRRdWVzdGlvbnModHJ1ZSksZnVuY3Rp b24oaSxqKXtpZihmPT09MCl7aWYodGhpcy51c2VUaXRsZSl7Yz1qO2c9ZmFsc2U7cmV0dXJuIGZh bHNlfWVsc2V7Zj1qfX1pZihnKXtjPWo7Zz1mYWxzZX1pZihmPT1qKXtlPWg7Zz10cnVlfWg9an0s dGhpcyk7aWYoZSl7dGhpcy5wcmV2aW91c0J1dHRvbi5lbmFibGUoKTt0aGlzLnByZXZpb3VzQnV0 dG9uLnF1aXpJdGVtSWQ9ZX1lbHNle2lmKHRoaXMudXNlVGl0bGUmJmYhPT0wKXt0aGlzLnByZXZp b3VzQnV0dG9uLmVuYWJsZSgpO3RoaXMucHJldmlvdXNCdXR0b24ucXVpekl0ZW1JZD0wfWVsc2V7 dGhpcy5wcmV2aW91c0J1dHRvbi5kaXNhYmxlKCl9fWlmKGMpe3RoaXMubmV4dEJ1dHRvbi5lbmFi bGUoKTt0aGlzLm5leHRCdXR0b24ucXVpekl0ZW1JZD1jfWVsc2V7dGhpcy5uZXh0QnV0dG9uLmRp c2FibGUoKX19fSxyZXNldE1haW5QYW5lbDpmdW5jdGlvbigpe3ZhciBkLGUsYz10aGlzLmdldFF1 aXpDb25maWcoKS5nZXRPcHRpb24oIm9uZV9wZXJfcGFnZSIpO2lmKHRoaXMubW9kZT09ImVkaXQi JiZ0aGlzLnRpdGxlUGFuZWwub25lUGVyUGFnZU1vZGUhPWMpe3RoaXMudGl0bGVQYW5lbC5zZXRC dXR0b25zVG9vbGJhcigoYyYmdGhpcy5tb2RlPT0iZWRpdCIpP3RoaXMuY2VudGVyUGFuZWwuZ2V0 Qm90dG9tVG9vbGJhcigpOm51bGwpfWlmKGMpe2U9ImNhcmQifWVsc2V7ZT0iYXV0byJ9aWYodGhp cy5tYWluUGFuZWwmJnRoaXMubWFpblBhbmVsLmluaXRpYWxDb25maWcubGF5b3V0IT1lKXt0aGlz LmNlbnRlclBhbmVsLnJlbW92ZSh0aGlzLm1haW5QYW5lbCk7dGhpcy5tYWluUGFuZWw9bnVsbH1p ZighdGhpcy5tYWluUGFuZWwpe2Q9e21vZGU6dGhpcy5tb2RlLGxheW91dDplfTtpZihlPT0iY2Fy ZCIpe0V4dC5hcHBseShkLHtsYXlvdXRPbkNhcmRDaGFuZ2U6dHJ1ZSxsYXlvdXRDb25maWc6e2Rl ZmVycmVkUmVuZGVyOnRydWV9fSk7dGhpcy5pbml0UXVlc3Rpb25OYXZpZygpO3RoaXMuY2VudGVy UGFuZWwuZ2V0Qm90dG9tVG9vbGJhcigpLnNob3coKX1lbHNle3RoaXMuY2VudGVyUGFuZWwuZ2V0 Qm90dG9tVG9vbGJhcigpLmhpZGUoKTt0aGlzLnRpdGxlUGFuZWwuc2hvdygpfXRoaXMubWFpblBh bmVsPW5ldyBhLlF1aXpfUXVlc3Rpb25zQ29udGFpbmVyKGQpO3RoaXMuY2VudGVyUGFuZWwuYWRk KHRoaXMubWFpblBhbmVsKTtpZih0aGlzLmNlbnRlclBhbmVsLnJlbmRlcmVkJiZ0aGlzLmNlbnRl clBhbmVsLmxheW91dC5sYXlvdXQpe3RoaXMuY2VudGVyUGFuZWwuZG9MYXlvdXQoKX19ZWxzZXt0 aGlzLm1haW5QYW5lbC5yZW1vdmVBbGwoKX19LGRvUXVpekxheW91dDpmdW5jdGlvbigpe2lmKHRo aXMucmVuZGVyZWQpe2EubG9nKCJkb1F1aXpMYXlvdXQgc3RhcnRlZCIpO3RyeXt0aGlzLmdldE1h c2soKS5zaG93KCk7dGhpcy5yZXNldE1haW5QYW5lbCgpO3RoaXMucXVlc3Rpb25zPXt9O3ZhciBj PXRoaXMucXVpekNvbmZpZy5nZXRJdGVtcygpO2MuZWFjaChmdW5jdGlvbihlKXt0aGlzLmFkZFF1 aXpJdGVtKGUpfSx0aGlzKTt0aGlzLm1haW5QYW5lbC5kb0xheW91dCgpO3RoaXMucXVpelJlbmRl cmVkPXRydWU7dHJ5e3RoaXMudHJlZS5kb1F1aXpMYXlvdXQoKX1jYXRjaChmKXthLmV4Y2VwdGlv bihmKX1pZih0aGlzLl9hbnN3ZXJzKXt0aGlzLnNldEFuc3dlcnModGhpcy5fYW5zd2Vycyl9dGhp cy5zaG93SXRlbVBhbmVsKDApO3RoaXMuZ2V0TWFzaygpLmhpZGUoKTt0aGlzLmZpcmVFdmVudCgi cXVpel9sYXlvdXQiKX1jYXRjaChkKXthLmV4Y2VwdGlvbihkKX1hLmxvZygiZG9RdWl6TGF5b3V0 IGVuZGVkIil9ZWxzZXt0aGlzLm9uKCJhZnRlcnJlbmRlciIsZnVuY3Rpb24oKXtpZighdGhpcy5x dWl6UmVuZGVyZWQpe3RoaXMuZG9RdWl6TGF5b3V0KCl9fSx0aGlzKX19LGluaXRRdWl6Q29uZmln OmZ1bmN0aW9uKGMpe2lmKGMgaW5zdGFuY2VvZiBhLlF1aXpfUXVpekNvbmZpZyl7dGhpcy5xdWl6 UmVuZGVyZWQ9ZmFsc2U7dGhpcy5xdWl6Q29uZmlnPWM7dGhpcy5tb2RlUGx1Z2luLmluaXRRdWl6 Q29uZmlnKGMpfWVsc2V7dGhyb3ciY29uZmlnIGlzIG5vdCBpbnN0YW5jZSBvZiBNYXN0ZXIuUXVp el9RdWl6Q29uZmlnIn19LGdldFF1aXpDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWl6 Q29uZmlnfSxnZXRMYXN0UXVlc3Rpb246ZnVuY3Rpb24oKXt2YXIgYz1udWxsLGQsZTtpZih0aGlz LnF1ZXN0aW9ucyl7ZD10aGlzLnF1ZXN0aW9ucztmb3IoZSBpbiBkKXtpZihkLmhhc093blByb3Bl cnR5KGUpKXtjPWRbZV19fX1yZXR1cm4gY30sc2hvd0l0ZW1QYW5lbDpmdW5jdGlvbihpLGgpe2lm KHRoaXMucXVpekl0ZW1QYW5lbHMmJihpPT09MHx8dGhpcy5xdWl6SXRlbVBhbmVsc1tpXSkmJmkh PT10aGlzLmN1cnJlbnRJdGVtKXt0cnl7dmFyIGQ9dGhpcy5jdXJyZW50SXRlbSxjPXRoaXMuZ2V0 UXVpekNvbmZpZygpLmdldE9wdGlvbigib25lX3Blcl9wYWdlIiksZj10aGlzLnRpdGxlUGFuZWw7 dGhpcy5jdXJyZW50SXRlbT1pO2lmKGk9PT0wKXtpZihjKXt0aGlzLm1haW5QYW5lbC5oaWRlKCk7 Zi5zaG93KCl9aWYoZi5yZW5kZXJlZCl7Zi5nZXRFbCgpLnNjcm9sbEludG9WaWV3KHRoaXMuY2Vu dGVyUGFuZWwuYm9keSl9ZWxzZXtmLm9uKCJyZW5kZXIiLGZ1bmN0aW9uKGUpe2UuZ2V0RWwoKS5z Y3JvbGxJbnRvVmlldyh0aGlzLmNlbnRlclBhbmVsLmJvZHkpfSx0aGlzKX19ZWxzZXtpZihjKXtm LmhpZGUoKX1pZih0aGlzLm1haW5QYW5lbC5yZW5kZXJlZCl7aWYoYyl7dGhpcy5tYWluUGFuZWwu Z2V0TGF5b3V0KCkuc2V0QWN0aXZlSXRlbSh0aGlzLnF1aXpJdGVtUGFuZWxzW2ldKX10aGlzLm1h aW5QYW5lbC5zaG93KCk7dGhpcy5xdWl6SXRlbVBhbmVsc1tpXS5nZXRFbCgpLnNjcm9sbEludG9W aWV3KHRoaXMuY2VudGVyUGFuZWwuYm9keSk7dGhpcy5xdWl6SXRlbVBhbmVsc1tpXS5ib2R5Lmhp Z2hsaWdodCgpfWVsc2V7dGhpcy5tYWluUGFuZWwuYWN0aXZlSXRlbT10aGlzLm1haW5QYW5lbC5p dGVtcy5pbmRleE9mKHRoaXMucXVpekl0ZW1QYW5lbHNbaV0pO3RoaXMubWFpblBhbmVsLnNob3co KX19dGhpcy50cmVlLnNlbGVjdFF1ZXN0aW9uKGkpO2lmKHRoaXMubW9kZT09ImVkaXQiKXthLmVh Y2godGhpcy5xdWl6SXRlbVBhbmVscyxmdW5jdGlvbihlLGope2lmKGo9PWkpe2lmKGQ9PT0wKXtm LmhpZGVFZGl0b3JCdXR0b25zKCl9ZS5zaG93RWRpdG9yQnV0dG9ucygpfWVsc2V7aWYoZD09ail7 ZS5oaWRlRWRpdG9yQnV0dG9ucygpfX19KTtpZihpPT09MCl7Zi5zaG93RWRpdG9yQnV0dG9ucygp fX10aGlzLnVwZGF0ZU5hdmlnKCl9Y2F0Y2goZyl7YS5leGNlcHRpb24oZyl9fX0sc2V0T25lUGVy UGFnZTpmdW5jdGlvbihjKXtpZih0aGlzLnF1aXpSZW5kZXJlZCl7dGhpcy5kb1F1aXpMYXlvdXQo KX19LGdldFRyZWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmVlfX0pO0V4dC5yZWcoInF1aXpw YW5lbCIsYS5RdWl6X1F1aXpQYW5lbCk7YS5RdWl6X1F1aXpQYW5lbF9QbHVnaW5BYnN0cmFjdD1F eHQuZXh0ZW5kKE9iamVjdCx7cXVpelBhbmVsOm51bGwscmVxdWlyZWRNZXRob2RzOlsiZ2V0VGl0 bGUiLCJjcmVhdGVJdGVtUGFuZWwiXSxjb25zdHJ1Y3RvcjpmdW5jdGlvbihjKXt0aGlzLnF1aXpQ YW5lbD1jLnF1aXpQYW5lbDt2YXIgZD10aGlzO0V4dC5lYWNoKHRoaXMucmVxdWlyZWRNZXRob2Rz LGZ1bmN0aW9uKGUpe2lmKCFkW2VdKXt0aHJvdyJhYnN0cmFjdCBtZXRob2QgIitlKyIgbXVzdCBi ZSBpbXBsZW1lbnRlZCJ9fSx0aGlzKTtFeHQuYXBwbHkodGhpcyxjKX0sZ2V0UXVpekNvbmZpZzpm dW5jdGlvbigpe3JldHVybiB0aGlzLnF1aXpQYW5lbC5nZXRRdWl6Q29uZmlnKCl9LGluaXRRdWl6 Q29uZmlnOmZ1bmN0aW9uKGMpe319KTthLlF1aXpfUXVpelBhbmVsX1Rlc3RpbmdQbHVnaW49RXh0 LmV4dGVuZChhLlF1aXpfUXVpelBhbmVsX1BsdWdpbkFic3RyYWN0LHtpbml0OmZ1bmN0aW9uKGMp e2MuYWRkRXZlbnRzKCJhbnN3ZXJjaGFuZ2UiKTt2YXIgZD1jLmNlbnRlclBhbmVsLmdldEJvdHRv bVRvb2xiYXIoKTtpZih0aGlzLnRpbWVyKXtkLmFkZCgiLT4iKTtkLmFkZCh0aGlzLnRpbWVyKTtk LmFkZCgiLSIpfXRoaXMuZmluaXNoQnV0dG9uLnNldEhlaWdodCgzMCk7ZC5hZGQodGhpcy5maW5p c2hCdXR0b24pO2Quc2hvdygpfSxnZXRUaXRsZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuZ2V0UXVp ekNvbmZpZygpLmdldE5hbWUoKTtyZXR1cm4i0KLQtdGB0YLQuNGA0L7QstCw0L3QuNC1IisoYz8o IiAtICIrYyk6IiIpfSxjcmVhdGVJdGVtUGFuZWw6ZnVuY3Rpb24oZCl7dmFyIGM9bmV3IGEuUXVp el9RdWl6SXRlbUNvbnRhaW5lclBhbmVsKGQpO2lmKGQuaXRlbUNvbmZpZy5pc1F1ZXN0aW9uKCkp e2Mub24oInF1aXpfaXRlbV9sYXlvdXQiLGZ1bmN0aW9uKGUpe2Uub24oImFuc3dlcmNoYW5nZSIs ZnVuY3Rpb24oKXt2YXIgZj1lLmdldEl0ZW1Db25maWcoKS5nZXRJZCgpO3RoaXMucXVpelBhbmVs LnBvaW50UXVlc3Rpb25TY29yZShlKTt0aGlzLnF1aXpQYW5lbC5maXJlRXZlbnQoImFuc3dlcmNo YW5nZSIsZixlLmdldEFuc3dlcigpKX0sdGhpcyl9LHRoaXMpfXJldHVybiBjfX0pO2EuUXVpel9R dWl6UGFuZWxfUmVzdWx0UGx1Z2luPUV4dC5leHRlbmQoYS5RdWl6X1F1aXpQYW5lbF9QbHVnaW5B YnN0cmFjdCx7aW5pdDpmdW5jdGlvbihjKXthLmxvZyhjKX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXt2 YXIgYz10aGlzLmdldFF1aXpDb25maWcoKS5nZXROYW1lKCk7cmV0dXJuItCg0LXQt9GD0LvRjNGC 0LDRgiDQotC10YHRgtC40YDQvtCy0LDQvdC40Y8iKyhjPygiIC0gIitjKToiIil9LGNyZWF0ZUl0 ZW1QYW5lbDpmdW5jdGlvbihjKXtyZXR1cm4gbmV3IGEuUXVpel9RdWl6SXRlbUNvbnRhaW5lclBh bmVsKGMpfX0pO2EuUXVpel9RdWl6UmVzdWx0PUV4dC5leHRlbmQoT2JqZWN0LHtyZXN1bHREYXRh Om51bGwsZnVsbFJlc3VsdDpmYWxzZSxjb25zdHJ1Y3RvcjpmdW5jdGlvbihjKXtpZighY3x8IShj LmV2YWx1YXRvciBpbnN0YW5jZW9mIGEuUXVpel9FdmFsdWF0b3JfQWJzdHJhY3QpKXt0aHJvdyJl dmFsdWF0b3IgaXMgbm90IGluc3RhbmNlIG9mIE1hc3Rlci5RdWl6X0V2YWx1YXRvcl9BYnN0cmFj dCJ9RXh0LmFwcGx5KHRoaXMsYyl9LGV2YWx1YXRlOmZ1bmN0aW9uKGMpe3RoaXMuZXZhbHVhdG9y LmdldFJlc3VsdERhdGEoZnVuY3Rpb24oZCl7dGhpcy5yZXN1bHREYXRhPWQ7YygpfS5jcmVhdGVE ZWxlZ2F0ZSh0aGlzKSl9LGdldFJlc3VsdERhdGE6ZnVuY3Rpb24oKXtpZighdGhpcy5yZXN1bHRE YXRhKXt0aHJvdyJxdWl6IHJlc3VsdCBpcyBub3QgbG9hZGVkIn1yZXR1cm4gdGhpcy5yZXN1bHRE YXRhfSxnZXRSZXN1bHRUZXh0QnlSYXRlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5nZXRSZXN1bHRE YXRhKCkudGV4dDtyZXR1cm4gYz9jOiIifSxpc1Zpc2libGU6ZnVuY3Rpb24oZCl7dmFyIGM9MSp0 aGlzLmdldFJlc3VsdE9wdGlvbnMoKVsiaGlkZV8iK2RdP3RydWU6ZmFsc2U7cmV0dXJuIHRoaXMu ZnVsbFJlc3VsdHx8IWN9LGdldENvbW1vblRleHQ6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmdldFJl c3VsdERhdGEoKS5jb21tb25UZXh0O3JldHVybiBjP2M6IiJ9LGdldFJlc3VsdE9wdGlvbnM6ZnVu Y3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRSZXN1bHREYXRhKCkub3B0aW9uc30sZ2V0UXVpelZpZXc6 ZnVuY3Rpb24oKXt2YXIgZT1uZXcgYS5RdWl6X1F1aXpDb25maWcoKSxkLGM7ZS5zZXQodGhpcy5n ZXRSZXN1bHREYXRhKCkucXVpelN0cnVjdHVyZSk7aWYoIWUpe3Rocm93InF1aXpDb25maWcgd2Fz IG5vdCBnaXZlbiB0byBNYXN0ZXIuUXVpel9RdWl6UmVzdWx0OjpnZXRRdWl6VmlldygpIn1pZih0 aGlzLmlzVmlzaWJsZSgiYW5zd2VycyIpKXtkPXRoaXMuZ2V0UmVzdWx0RGF0YSgpO2Uuc2V0Q29y cmVjdEFuc3dlcnMoZC5jb3JyZWN0QW5zd2Vycyk7Yz1uZXcgYS5RdWl6X1F1aXpQYW5lbCh7bW9k ZToicmVzdWx0Iixib3JkZXI6dHJ1ZSxxdWl6Q29uZmlnOmV9KTtjLnNldEFuc3dlcnMoZC5zdHVk ZW50QW5zd2Vycyk7Yy5vbigiYWZ0ZXJyZW5kZXIiLGZ1bmN0aW9uKGYpe2lmKCFmLnF1aXpSZW5k ZXJlZCl7Zi5kb1F1aXpMYXlvdXQoKX19KTtyZXR1cm4gY31lbHNle3JldHVybiBuZXcgRXh0LlBh bmVsKHtib3JkZXI6ZmFsc2V9KX19LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRS ZXN1bHREYXRhKCksYz1uZXcgYS5UZW1wbGF0ZV9RdWl6UmVzdWx0KCk7cmV0dXJuIGMuYXBwbHko e2NvbW1vbl90ZXh0OnRoaXMuZ2V0Q29tbW9uVGV4dCgpLHNob3dfZ3JhZGU6dGhpcy5pc1Zpc2li bGUoImdyYWRlIiksc2hvd19wZXJjZW50OnRoaXMuaXNWaXNpYmxlKCJwZXJjZW50Iiksc2hvd19j b3VudGluZzp0aGlzLmlzVmlzaWJsZSgiY291bnRpbmciKSxyYXRlOmQucmF0ZSx0b3RhbF9yYXRl OmQudG90YWxSYXRlLHBlcmNlbnQ6ZC5wZXJjZW50LHRvdGFsX3F1YW50aXR5OmQudG90YWxRdWFu dGl0eSxjb3JyZWN0X3F1YW50aXR5OmQuY29ycmVjdFF1YW50aXR5LHdyb25nX3F1YW50aXR5OmQu d3JvbmdRdWFudGl0eSx0ZXh0OnRoaXMuZ2V0UmVzdWx0VGV4dEJ5UmF0ZSgpfSl9fSk7YS5RdWl6 X1Jlc3VsdFBhbmVsPUV4dC5leHRlbmQoRXh0LlBhbmVsLHtsYXlvdXQ6ImJvcmRlciIsYm9keVN0 eWxlOiJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgcGFkZGluZzo1cHgiLGNvbnN0cnVjdG9yOmZ1 bmN0aW9uKGMpe2EuUXVpel9SZXN1bHRQYW5lbC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwo dGhpcyxjKTt0aGlzLmh0bWxDb250YW50UGFuZWw9dGhpcy5hZGQoe3RpdGxlOiLQoNC10LfRg9C7 0YzRgtCw0YIiLHJlZ2lvbjoid2VzdCIsbWFyZ2luczp7dG9wOjUsbGVmdDo1LGJvdHRvbTo1LHJp Z2h0OjB9LHdpZHRoOjIwMCxhdXRvU2Nyb2xsOnRydWUsc3BsaXQ6dHJ1ZSxzdHlsZToiYmFja2dy b3VuZC1jb2xvcjogd2hpdGUiLGJvZHlTdHlsZToicGFkZGluZzogNHB4Iixjb2xsYXBzaWJsZTp0 cnVlfSk7dGhpcy5xdWl6Vmlld0NvbnRhaW5lcj10aGlzLmFkZCh7cmVnaW9uOiJjZW50ZXIiLGxh eW91dDoiZml0IixtYXJnaW5zOnt0b3A6NSxsZWZ0OjAsYm90dG9tOjUscmlnaHQ6NX0sYm9yZGVy OmZhbHNlfSl9LHNldFJlc3VsdDpmdW5jdGlvbihjKXtpZighKGMgaW5zdGFuY2VvZiBhLlF1aXpf UXVpelJlc3VsdCkpe3Rocm93InJlc3VsdCBpcyBub3QgaW5zdGFuY2Ugb2YgTWFzdGVyLlF1aXpf UXVpelJlc3VsdCJ9dmFyIGQ9Yy50b1N0cmluZygpO2lmKHRoaXMuaHRtbENvbnRhbnRQYW5lbC5y ZW5kZXJlZCl7aWYoZCl7dGhpcy5odG1sQ29udGFudFBhbmVsLmJvZHkudXBkYXRlKGQpO3RoaXMu aHRtbENvbnRhbnRQYW5lbC5zaG93KCk7dGhpcy5odG1sQ29udGFudFBhbmVsLnNldFdpZHRoKDIw MCl9ZWxzZXt0aGlzLmh0bWxDb250YW50UGFuZWwuaGlkZSgpO3RoaXMuaHRtbENvbnRhbnRQYW5l bC5zZXRXaWR0aCgzNjApfX1lbHNle2lmKGQpe3RoaXMuaHRtbENvbnRhbnRQYW5lbC5odG1sPWQ7 dGhpcy5odG1sQ29udGFudFBhbmVsLnNldFdpZHRoKDIwMCl9ZWxzZXt0aGlzLmh0bWxDb250YW50 UGFuZWwuaGlkZGVuPXRydWU7dGhpcy5odG1sQ29udGFudFBhbmVsLnNldFdpZHRoKDM2MCl9fXRo aXMucXVpelZpZXdDb250YWluZXIucmVtb3ZlQWxsKCk7dGhpcy5xdWl6Vmlldz10aGlzLnF1aXpW aWV3Q29udGFpbmVyLmFkZChjLmdldFF1aXpWaWV3KCkpO2lmKHRoaXMucXVpelZpZXdDb250YWlu ZXIucmVuZGVyZWQpe3RoaXMucXVpelZpZXdDb250YWluZXIuZG9MYXlvdXQoKX19LHN0YXJ0RXZh bDpmdW5jdGlvbihjLGQpe3ZhciBlPXRoaXM7RXh0Lk1zZy5wcm9ncmVzcygi0J/RgNC+0LLQtdGA 0LrQsCIsItCf0L7QtNC+0LbQtNC40YLQtSwg0L/QvtC20LDQu9GD0LnRgdGC0LAiLCLQmNC00LXR giDQv9GA0L7QstC10YDQutCwINGC0LXRgdGC0LAuLi4iKTsoZnVuY3Rpb24oKXtFeHQuTXNnLnVw ZGF0ZVByb2dyZXNzKDAuMSk7Yy5ldmFsdWF0ZShmdW5jdGlvbigpe0V4dC5Nc2cudXBkYXRlUHJv Z3Jlc3MoMC4zMyk7KGZ1bmN0aW9uKCl7ZS5zZXRSZXN1bHQoYyk7RXh0Lk1zZy51cGRhdGVQcm9n cmVzcygwLjY2KTsoZnVuY3Rpb24oKXtkKCk7RXh0Lk1zZy51cGRhdGVQcm9ncmVzcygxLCLQn9GA 0L7QstC10YDQutCwINC30LDQstC10YDRiNC10L3QsCIpO0V4dC5Nc2cuaGlkZS5kZWZlcigxMDAw LEV4dC5Nc2cpfSkuZGVmZXIoMzAwKX0pLmRlZmVyKDMwMCl9KX0pLmRlZmVyKDMwMCl9fSk7YS5R dWl6X1Rlc3RpbmdQYW5lbD1FeHQuZXh0ZW5kKEV4dC5QYW5lbCx7bGF5b3V0OiJhbmNob3IiLHN0 YXRlOiJ3YWl0IixxdWl6UGFuZWw6bnVsbCxxdWl6UGFuZWxDb250YWluZXI6bnVsbCxjb25zdHJ1 Y3RvcjpmdW5jdGlvbihjKXt0aGlzLmFkZEV2ZW50cygiZmluaXNoIiwiYW5zd2VyY2hhbmdlIik7 Yz1jfHx7fTtFeHQuYXBwbHkoYyx7aXRlbXM6W3RoaXMucXVpelBhbmVsQ29udGFpbmVyPW5ldyBF eHQuUGFuZWwoe2FuY2hvcjoiMTAwJSAxMDAlIixsYXlvdXQ6ImZpdCIsYm9yZGVyOmZhbHNlfSld fSk7YS5RdWl6X1Rlc3RpbmdQYW5lbC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxj KX0sZmluaXNoVGVzdGluZzpmdW5jdGlvbigpe3RoaXMuZmluaXNoQnV0dG9uLmRpc2FibGUoKTtp Zih0aGlzLnN0YXRlPT0icnVubmVkIil7dGhpcy5zdGF0ZT0id2FpdCI7dmFyIGYsYyxkLGU7ZD10 aGlzLnF1aXpQYW5lbC5nZXRBbnN3ZXJzKCk7ZT10aGlzLnF1aXpQYW5lbC5nZXRRdWl6Q29uZmln KCk7Zj1uZXcgYS5RdWl6X0V2YWx1YXRvcl9Mb2NhbChlLGQpO2M9bmV3IGEuUXVpel9RdWl6UmVz dWx0KHtldmFsdWF0b3I6Zn0pO2lmKHRoaXMudGltZXIpe3RoaXMudGltZXIuc3RvcCgpfWlmKHRo aXMuZmlyZUV2ZW50KCJmaW5pc2giLGMsZSxkKT09PWZhbHNlKXt0aGlzLmZpbmlzaEJ1dHRvbi5l bmFibGUoKTt0aGlzLnN0YXRlPSJydW5uZWQifX1lbHNle3RoaXMuZmluaXNoQnV0dG9uLmRpc2Fi bGUoKX19LHJ1bjpmdW5jdGlvbihlLGMpe3ZhciBkO2lmKGMmJmMudGltZSYmYy50aW1lIT0iMDA6 MDA6MDAiKXtkPW5ldyBhLlF1aXpfVGltZXIoe3RpbWU6Yy50aW1lfSk7ZC5vbigic3RvcCIsdGhp cy5maW5pc2hUZXN0aW5nLHRoaXMpO3RoaXMudGltZXI9ZH10aGlzLnF1aXpQYW5lbD1uZXcgYS5R dWl6X1F1aXpQYW5lbCh7bW9kZToidGVzdGluZyIscXVpekNvbmZpZzplLGJvcmRlcjp0cnVlLG1v ZGVDb25maWc6e2ZpbmlzaEJ1dHRvbjp0aGlzLmZpbmlzaEJ1dHRvbj1uZXcgYS5RdWl6X0J1dHRv bih7dGV4dDoi0JfQsNC60L7QvdGH0LjRgtGMIixuYW1lOiJmaW5pc2hfYnV0dG9uIixpY29uQ2xz OiJpY29uLXRpY2siLGhhbmRsZXI6dGhpcy5maW5pc2hUZXN0aW5nLHNjb3BlOnRoaXN9KSx0aW1l cjpkfX0pO3RoaXMucXVpekNvbmZpZz1lO3RoaXMucXVpelBhbmVsQ29udGFpbmVyLnJlbW92ZUFs bCgpO3RoaXMucXVpelBhbmVsQ29udGFpbmVyLmFkZCh0aGlzLnF1aXpQYW5lbCk7dGhpcy5xdWl6 UGFuZWxDb250YWluZXIuZG9MYXlvdXQoKTt0aGlzLnF1aXpQYW5lbC5vbigiYW5zd2VyY2hhbmdl IixmdW5jdGlvbihmLGcpe3RoaXMuZmlyZUV2ZW50KCJhbnN3ZXJjaGFuZ2UiLGYsZyl9LHRoaXMp O2lmKGQpe2Quc3RhcnQoKX10aGlzLnN0YXRlPSJydW5uZWQifSxzZXRBbnN3ZXJzOmZ1bmN0aW9u KGMpe3RoaXMucXVpelBhbmVsLnNldEFuc3dlcnMoYyl9fSk7YS5RdWl6X0V2YWx1YXRvcl9BYnN0 cmFjdD1FeHQuZXh0ZW5kKE9iamVjdCx7Z2V0UmVzdWx0RGF0YTpmdW5jdGlvbihjKXt9fSk7YS5R dWl6X0V2YWx1YXRvcl9Mb2NhbD1FeHQuZXh0ZW5kKGEuUXVpel9FdmFsdWF0b3JfQWJzdHJhY3Qs e2NvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsYyl7dmFyIGQ9e307aWYoIWV8fCEoZSBpbnN0YW5jZW9m IGEuUXVpel9RdWl6Q29uZmlnKSl7dGhyb3cicXVpekNvbmZpZyBpcyBub3QgaW5zdGFuY2Ugb2Yg TWFzdGVyLlF1aXpfUXVpekNvbmZpZyBpbiBNYXN0ZXIuUXVpel9FdmFsdWF0b3JfTG9jYWw6OmNv bnN0cnVjdG9yKCkifWlmKCFjKXt0aHJvdyJzdHVkZW50QW5zd2VycyBpcyBub3Qgc2V0IGluIE1h c3Rlci5RdWl6X0V2YWx1YXRvcl9Mb2NhbDo6Y29uc3RydWN0b3IoKSJ9YS5lYWNoKGUuZ2V0UXVl c3Rpb25zKCksZnVuY3Rpb24oZixnKXtkW2ddPWYuZ2V0QXR0cigiY29ycmVjdF9hbnN3ZXIiKX0p O3RoaXMuY29ycmVjdEFuc3dlcnM9ZDt0aGlzLnN0dWRlbnRBbnN3ZXJzPWM7dGhpcy5xdWl6Q29u ZmlnPWV9LGdldFJlc3VsdERhdGE6ZnVuY3Rpb24oail7dmFyIGc9e30scj10aGlzLnN0dWRlbnRB bnN3ZXJzLG49dGhpcy5xdWl6Q29uZmlnLmdldFF1ZXN0aW9ucygxKSxoLGMsbCxmLGQ9dGhpcy5x dWl6Q29uZmlnLmdldFJlc3VsdENvbmZpZygpLHQ9ZC5nZXRPcHRpb25zKCkscSxrLHMsbSxvO2cu dG90YWxSYXRlPTA7Zy5yYXRlPTA7Zy50b3RhbFF1YW50aXR5PTA7Zy5jb3JyZWN0UXVhbnRpdHk9 MDtnLndyb25nUXVhbnRpdHk9MDtnLnRleHQ9IiI7Zy5zdHVkZW50QW5zd2Vycz10aGlzLnN0dWRl bnRBbnN3ZXJzO2cuY29ycmVjdEFuc3dlcnM9dGhpcy5jb3JyZWN0QW5zd2Vycztmb3IoZiBpbiBu KXtpZihuLmhhc093blByb3BlcnR5KGYpKXtpZihyLmhhc093blByb3BlcnR5KGYpKXtsPW5bZl07 Yz1hLlF1aXpfUXVlc3Rpb25NZ3IuZXZhbHVhdGUobCxyW2ZdKTtoPTEqbC5nZXRBdHRyKCJyYXRl Iik7Zy5yYXRlKz0xKmMqaDtnLnRvdGFsUmF0ZSs9aDsrK2cudG90YWxRdWFudGl0eTtpZihjKXsr K2cuY29ycmVjdFF1YW50aXR5fWVsc2V7KytnLndyb25nUXVhbnRpdHl9fWVsc2V7dGhyb3ciQW5z d2VyIG5vdCBleGlzdCJ9fX1pZih0LnVzZV9yYXRpbmcpe3E9Zy5yYXRlO2s9bnVsbDt0cnl7az1k LmdldFJhdGluZygpfWNhdGNoKHApe2EuZXhjZXB0aW9uKHApfWlmKCFrKXtnLnRleHQ9IiJ9ZWxz ZXtzPSIiO2ZvcihtIGluIGspe2lmKGsuaGFzT3duUHJvcGVydHkobSkpe2lmKGtbbV1bMF0+cSl7 YnJlYWt9ZWxzZXtzPWtbbV1bMV19fX1nLnRleHQ9RXh0LnV0aWwuRm9ybWF0Lm5sMmJyKHMpfX1l bHNle2cudGV4dD0iIn1nLnBlcmNlbnQ9TWF0aC5yb3VuZChnLnJhdGUqKDEwMC9nLnRvdGFsUmF0 ZSkpO2cuY29tbW9uVGV4dD1kLmdldENvbW1vblRleHQoKTtnLm9wdGlvbnM9dDtpZighdC5oaWRl X2Fuc3dlcnMpe289dGhpcy5xdWl6Q29uZmlnLmdldERhdGEoKTtvLnJlc3VsdD1udWxsO2cucXVp elN0cnVjdHVyZT1vfWooZyl9fSk7YS5RdWl6X0V2YWx1YXRvcl9SZW1vdGU9RXh0LmV4dGVuZChh LlF1aXpfRXZhbHVhdG9yX0Fic3RyYWN0LHtleGFtSWQ6bnVsbCxyb2xlOiJ0ZWFjaGVyIixjb25z dHJ1Y3RvcjpmdW5jdGlvbihjKXtpZighY3x8IWMuZXhhbUlkKXt0aHJvdyJRdWl6X0V2YWx1YXRv cl9SZW1vdGU6IGV4YW0gaWQgaXMgcmVxdWlyZWQifUV4dC5hcHBseSh0aGlzLGMpfSxnZXRSZXN1 bHREYXRhOmZ1bmN0aW9uKGQpe3ZhciBjO2lmKHRoaXMucm9sZT09InRlYWNoZXIiKXtjPW5ldyBh LlByb3h5X1RlYWNoZXJfRXhhbSgpfWVsc2V7aWYodGhpcy5yb2xlPT0ic3R1ZGVudCIpe2M9bmV3 IGEuUHJveHlfU3R1ZGVudF9FeGFtKCl9ZWxzZXt0aHJvdyJVbmRlZmluZWQgcm9sZSJ9fWMuZ2V0 UmVzdWx0KHRoaXMuZXhhbUlkLGZ1bmN0aW9uKGUpe2lmKGUuc3VjY2Vzcyl7ZChlLmRhdGEpfWVs c2V7YS5lcnJvcigi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LPRgNGD0LfQuNGC0Ywg0YDQtdC3 0YPQu9GM0YLQsNGCIik7ZChudWxsKX19KX19KTthLlF1aXpfUXVlc3Rpb25NZ3I9e3R5cGVzOltb IlNpbmdsZUFuc3dlciIsItCe0LTQvdC+0LfQvdCw0YfQvdGL0Lkg0J7RgtCy0LXRgiJdLFsiTXVs dGlwbGVBbnN3ZXIiLCLQnNC90L7QttC10YHRgtCy0LXQvdC90YvQuSDQntGC0LLQtdGCIl0sWyJX b3JkIiwi0KHQu9C+0LLQviJdLFsiTnVtYmVyIiwi0J3QvtC80LXRgCJdLFsiTWVyZ2UiLCLQodC+ 0L/QvtGB0YLQsNCy0LvQtdC90LjQtSJdXSxkZWZhdWx0UXVlc3Rpb25UeXBlOiJTaW5nbGVBbnN3 ZXIiLGdldFF1ZXN0aW9uQ2xhc3M6ZnVuY3Rpb24oYyl7c3dpdGNoKGMpe2Nhc2UiVGV4dEFuc3dl ciI6cmV0dXJuIGEuUXVpel9JdGVtX1F1ZXN0aW9uUGFuZWxfVGV4dDtjYXNlIlNpbmdsZUFuc3dl ciI6cmV0dXJuIGEuUXVpel9JdGVtX1F1ZXN0aW9uUGFuZWxfU2luZ2xlQW5zd2VyO2Nhc2UiTXVs dGlwbGVBbnN3ZXIiOnJldHVybiBhLlF1aXpfSXRlbV9RdWVzdGlvblBhbmVsX011bHRpcGxlQW5z d2VyO2Nhc2UiV29yZCI6cmV0dXJuIGEuUXVpel9JdGVtX1F1ZXN0aW9uUGFuZWxfV29yZDtjYXNl Ik51bWJlciI6cmV0dXJuIGEuUXVpel9JdGVtX1F1ZXN0aW9uUGFuZWxfTnVtYmVyO2Nhc2UiTWVy Z2UiOnJldHVybiBhLlF1aXpfSXRlbV9RdWVzdGlvblBhbmVsX01lcmdlO2RlZmF1bHQ6dGhyb3ci dW5zdXBwb3J0ZWQgcXVlc3Rpb24gdHlwZSAiK2N9fSxnZXRRdWVzdGlvbkVkaXRvckNsYXNzOmZ1 bmN0aW9uKGMpe3N3aXRjaChjKXtjYXNlIlRleHRBbnN3ZXIiOnJldHVybiBhLlF1aXpfSXRlbV9R dWVzdGlvblBhbmVsX1RleHRFZGl0b3I7Y2FzZSJTaW5nbGVBbnN3ZXIiOnJldHVybiBhLlF1aXpf SXRlbV9RdWVzdGlvblBhbmVsX1NpbmdsZUFuc3dlckVkaXRvcjtjYXNlIk11bHRpcGxlQW5zd2Vy IjpyZXR1cm4gYS5RdWl6X0l0ZW1fUXVlc3Rpb25QYW5lbF9NdWx0aXBsZUFuc3dlckVkaXRvcjtj YXNlIldvcmQiOnJldHVybiBhLlF1aXpfSXRlbV9RdWVzdGlvblBhbmVsX1dvcmRFZGl0b3I7Y2Fz ZSJOdW1iZXIiOnJldHVybiBhLlF1aXpfSXRlbV9RdWVzdGlvblBhbmVsX051bWJlckVkaXRvcjtj YXNlIk1lcmdlIjpyZXR1cm4gYS5RdWl6X0l0ZW1fUXVlc3Rpb25QYW5lbF9NZXJnZUVkaXRvcjtk ZWZhdWx0OnRocm93InVuc3VwcG9ydGVkIHF1ZXN0aW9uIHR5cGUgIitjfX0sZXZhbHVhdGU6ZnVu Y3Rpb24oZCxjKXtzd2l0Y2goZC5nZXRRdWVzdGlvblR5cGUoKSl7Y2FzZSJUZXh0QW5zd2VyIjpy ZXR1cm4gdGhpcy5ldmFsdWF0ZVRleHRBbnN3ZXIoZCxjKTtjYXNlIlNpbmdsZUFuc3dlciI6cmV0 dXJuIHRoaXMuZXZhbHVhdGVTaW5nbGVBbnN3ZXIoZCxjKTtjYXNlIk11bHRpcGxlQW5zd2VyIjpy ZXR1cm4gdGhpcy5ldmFsdWF0ZU11bHRpcGxlQW5zd2VyKGQsYyk7Y2FzZSJXb3JkIjpyZXR1cm4g dGhpcy5ldmFsdWF0ZVdvcmQoZCxjKTtjYXNlIk51bWJlciI6cmV0dXJuIHRoaXMuZXZhbHVhdGVO dW1iZXIoZCxjKTtjYXNlIk1lcmdlIjpyZXR1cm4gdGhpcy5ldmFsdWF0ZU1lcmdlKGQsYyk7ZGVm YXVsdDp0aHJvdyJ1bnN1cHBvcnRlZCBxdWVzdGlvbiB0eXBlICIrZC5nZXRRdWVzdGlvblR5cGUo KX19LGV2YWx1YXRlVGV4dEFuc3dlcjpmdW5jdGlvbihkLGMpe3JldHVybiBudWxsfSxldmFsdWF0 ZU11bHRpcGxlQW5zd2VyOmZ1bmN0aW9uKGQsYyl7cmV0dXJuIHRoaXMuZXZhbHVhdGVTaW5nbGVB bnN3ZXIoZCxjKX0sZXZhbHVhdGVTaW5nbGVBbnN3ZXI6ZnVuY3Rpb24oZCxjKXtyZXR1cm4gYz09 ZC5nZXRBdHRyKCJjb3JyZWN0X2Fuc3dlciIpPzE6MH0sZXZhbHVhdGVXb3JkOmZ1bmN0aW9uKG0s cCl7dmFyIGM9RXh0LmRlY29kZShtLmdldEF0dHIoImNvcnJlY3RfYW5zd2VyIikpLG49bS5nZXRB dHRyKCJjYXNlX3NlbnNpdGl2ZSIpLGY9bS5nZXRBdHRyKCJpZ25vcmVfb3JkZXIiKSxqLGwsayxn LG8saCxkO2lmKHApe2o9RXh0LmRlY29kZShwKX1lbHNle2o9e319az1mdW5jdGlvbihpLGUpe2lm KCFuKXtpPWkudG9Mb3dlckNhc2UoKTtlPWUudG9Mb3dlckNhc2UoKX1yZXR1cm4gaS52YWx1ZU9m KCk9PT1lLnZhbHVlT2YoKX07aWYoZil7Zm9yKGcgaW4gYyl7aWYoYy5oYXNPd25Qcm9wZXJ0eShn KSl7bz1mYWxzZTtmb3IoaCBpbiBqKXtpZihjLmhhc093blByb3BlcnR5KGgpKXtwPSIiK2pbaF07 bD0iIitjW2ddO289b3x8ayhwLGwpfX1pZighbyl7cmV0dXJuIGZhbHNlfX19fWVsc2V7Zm9yKGQg aW4gYyl7aWYoYy5oYXNPd25Qcm9wZXJ0eShkKSl7cD0iIitqW2RdO2w9IiIrY1tkXTtpZighayhw LGwpKXtyZXR1cm4gZmFsc2V9fX19cmV0dXJuIHRydWV9LGV2YWx1YXRlTnVtYmVyOmZ1bmN0aW9u KG0scCl7dmFyIGMsbixqLGwsZyxrLGYsaCxkLG87Yz1FeHQuZGVjb2RlKG0uZ2V0QXR0cigiY29y cmVjdF9hbnN3ZXIiKSk7bj17aWdub3JlX29yZGVyOm0uZ2V0QXR0cigiaWdub3JlX29yZGVyIiks cHJlY2lzaW9uOm0uZ2V0QXR0cigicHJlY2lzaW9uIiksYWxsb3dfZGVjaW1hbHM6bS5nZXRBdHRy KCJhbGxvd19kZWNpbWFscyIpLGFsbG93X25lZ2F0aXZlOm0uZ2V0QXR0cigiYWxsb3dfbmVnYXRp dmUiKX07aWYocCl7aj1FeHQuZGVjb2RlKHApfWVsc2V7aj17fX1rPWZ1bmN0aW9uKGksZSl7aWYo bi5hbGxvd19kZWNpbWFscyl7Zz1uLnByZWNpc2lvbn1lbHNle2c9MH1pPWkudG9GaXhlZChnKTtl PWUudG9GaXhlZChnKTtpZighbi5hbGxvd19uZWdhdGl2ZSl7aT1NYXRoLmFicyhpKTtlPU1hdGgu YWJzKGUpfXJldHVybiBpLnZhbHVlT2YoKT09PWUudmFsdWVPZigpfTtpZihuLmlnbm9yZV9vcmRl cil7Zm9yKGYgaW4gYyl7aWYoYy5oYXNPd25Qcm9wZXJ0eShmKSl7bz1mYWxzZTtmb3IoaCBpbiBq KXtpZihjLmhhc093blByb3BlcnR5KGgpKXtwPTEqaltoXTtsPTEqY1tmXTtvPW98fGsocCxsKX19 aWYoIW8pe3JldHVybiBmYWxzZX19fX1lbHNle2ZvcihkIGluIGMpe2lmKGMuaGFzT3duUHJvcGVy dHkoZCkpe3A9MSpqW2RdO2w9MSpjW2RdO2lmKCFrKHAsbCkpe3JldHVybiBmYWxzZX19fX1yZXR1 cm4gdHJ1ZX0sZXZhbHVhdGVNZXJnZTpmdW5jdGlvbihoLGYpe3ZhciBlLGcsZD10cnVlLGM7ZT1F eHQuZGVjb2RlKGguZ2V0QXR0cigiY29ycmVjdF9hbnN3ZXIiKSk7aWYoZil7Zz1FeHQuZGVjb2Rl KGYpfWVsc2V7Zz17fX1hLmVhY2goZSxmdW5jdGlvbihpKXtjPWZhbHNlO2EuZWFjaChnLGZ1bmN0 aW9uKGope2lmKGpbMF09PT1pWzBdKXtjPWlbMV09PT1qWzFdfX0pO2Q9ZCYmY30pO3JldHVybiBk fSxnZXRQb3NzaWJpbGl0eTpmdW5jdGlvbihoKXt2YXIgZyxkLGM7dHJ5e3N3aXRjaChoLmdldFF1 ZXN0aW9uVHlwZSgpKXtjYXNlIlRleHRBbnN3ZXIiOnJldHVybiAwO2Nhc2UiU2luZ2xlQW5zd2Vy IjpnPUV4dC5kZWNvZGUoaC5nZXRBdHRyKCJhbnN3ZXJzIikpO2Q9MDtmb3IoYyBpbiBnKXtpZihn Lmhhc093blByb3BlcnR5KGMpKXtkKyt9fXJldHVybiAxL2Q7Y2FzZSJNdWx0aXBsZUFuc3dlciI6 Zz1FeHQuZGVjb2RlKGguZ2V0QXR0cigiYW5zd2VycyIpKTtkPTA7Zm9yKGMgaW4gZyl7aWYoZy5o YXNPd25Qcm9wZXJ0eShjKSl7ZCsrfX1yZXR1cm4gMS9NYXRoLnBvdyhkLDIpO2Nhc2UiV29yZCI6 cmV0dXJuIDA7Y2FzZSJOdW1iZXIiOnJldHVybiAwO2Nhc2UiTWVyZ2UiOnJldHVybiAwO2RlZmF1 bHQ6dGhyb3cidW5zdXBwb3J0ZWQgcXVlc3Rpb24gdHlwZSAiK2guZ2V0UXVlc3Rpb25UeXBlKCl9 fWNhdGNoKGYpe2EuZXhjZXB0aW9uKGYpO3JldHVybiAwfX19O2EuUXVpel9JdGVtX0Fic3RyYWN0 UGFuZWw9RXh0LmV4dGVuZChFeHQuUGFuZWwse2l0ZW1Db25maWc6bnVsbCxib3JkZXI6ZmFsc2Us YXV0b0hlaWdodDp0cnVlLGdldEl0ZW1Db25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pdGVt Q29uZmlnfSxzZXRJdGVtQ29uZmlnOmZ1bmN0aW9uKGMpe2lmKGMgaW5zdGFuY2VvZiBhLlF1aXpf UXVpekl0ZW1Db25maWcpe3RoaXMuaXRlbUNvbmZpZz1jfWVsc2V7dGhyb3ciY29uZmlnLml0ZW1D b25maWcgaXMgbm90IGluc3RhbmNlIG9mIE1hc3Rlci5RdWl6X1F1aXpJdGVtQ29uZmlnIn19LGNv bnN0cnVjdG9yOmZ1bmN0aW9uKGMpe3RoaXMuYWRkQ2xhc3MoInF1aXotaXRlbS1wYW5lbCIpO2lm KGMmJmMuaXRlbUNvbmZpZyl7dGhpcy5zZXRJdGVtQ29uZmlnKGMuaXRlbUNvbmZpZyl9ZWxzZXt0 aGlzLnNldEl0ZW1Db25maWcobmV3IGEuUXVpel9RdWl6SXRlbUNvbmZpZygpKX1hLlF1aXpfSXRl bV9BYnN0cmFjdFBhbmVsLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGMpO3RoaXMu b24oInJlc2l6ZSIsZnVuY3Rpb24oKXt0aGlzLnNldEhlaWdodCgiYXV0byIpfSx0aGlzKX0sZ2V0 SXRlbUNvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLml0ZW1Db250YWluZXJ9fSk7YS5R dWl6X0l0ZW1fUXVlc3Rpb25Db25maWc9RXh0LmV4dGVuZChhLlF1aXpfUXVpekl0ZW1Db25maWcs e3h0eXBlOiJxdWl6X3F1ZXN0aW9uIix0aXRsZTpudWxsLGl0ZW1UeXBlOiJxdWVzdGlvbiIsZGVm YXVsdEF0dHJzOm51bGwsYXR0ckRhdGE6bnVsbCx2YWxpZEF0dHJMaXN0Om51bGwscXVlc3Rpb25U eXBlOm51bGwsaWQ6bnVsbCxxdWVzdGlvbklkOm51bGwsY29uc3RydWN0b3I6ZnVuY3Rpb24oYyl7 aWYoYyYmYy5xdWVzdGlvbklkKXt0aGlzLnF1ZXN0aW9uSWQ9Yy5xdWVzdGlvbklkO3RoaXMuaWQ9 dGhpcy5xdWVzdGlvbklkfXRoaXMucmVzZXREYXRhKCk7dGhpcy5yZXNldEF0dHJzKCk7YS5RdWl6 X0l0ZW1fUXVlc3Rpb25Db25maWcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYyl9 LGFkZEF0dHI6ZnVuY3Rpb24oZCxjKXt0aGlzLnZhbGlkQXR0ckxpc3RbZF09dHJ1ZTtpZihjKXt0 aGlzLmRlZmF1bHRBdHRyc1tkXT1jfXRoaXMuYWRkRXZlbnRzKGQrImNoYW5nZSIpfSxkZWxldGVB dHRyOmZ1bmN0aW9uKGMpe3RoaXMudmFsaWRBdHRyTGlzdFtjXT1mYWxzZX0scmVzZXREYXRhOmZ1 bmN0aW9uKCl7dGhpcy5hdHRyRGF0YT17fX0scmVzZXRBdHRyczpmdW5jdGlvbigpe3RoaXMudmFs aWRBdHRyTGlzdD17fTt0aGlzLmRlZmF1bHRBdHRycz17fTt0aGlzLmFkZEF0dHIoInRpdGxlIik7 dGhpcy5hZGRBdHRyKCJoZWxwdGV4dCIpO3RoaXMuYWRkQXR0cigicG9zaXRpb24iKTt0aGlzLmFk ZEF0dHIoIm1lZGlhIik7dGhpcy5hZGRBdHRyKCJzb3VyY2UiKTt0aGlzLmFkZEF0dHIoImNvcnJl Y3RfYW5zd2VyIik7dGhpcy5hZGRBdHRyKCJncm91cCIpO3RoaXMuYWRkQXR0cigicmF0ZSIsMSk7 dGhpcy5hZGRBdHRyKCJ0eXBlIixhLlF1aXpfUXVlc3Rpb25NZ3IuZGVmYXVsdFF1ZXN0aW9uVHlw ZSk7dGhpcy5nZXRRdWVzdGlvbkNsYXNzKCkucHJvdG90eXBlLmluaXRJdGVtQ29uZmlnLmNhbGwo dGhpcyx0aGlzKX0sdmFsaWRhdGVBdHRyOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLnZhbGlkQXR0 ckxpc3RbY10/dHJ1ZTpmYWxzZX0sZ2V0OmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmdldEF0dHIo Yyl9LGdldEF0dHI6ZnVuY3Rpb24oYyl7aWYodGhpcy5hdHRyRGF0YS5oYXNPd25Qcm9wZXJ0eShj KSl7cmV0dXJuIHRoaXMuYXR0ckRhdGFbY119ZWxzZXtpZih0aGlzLmRlZmF1bHRBdHRycy5oYXNP d25Qcm9wZXJ0eShjKSl7cmV0dXJuIHRoaXMuZGVmYXVsdEF0dHJzW2NdfWVsc2V7cmV0dXJuIG51 bGx9fX0sc2V0QXR0cjpmdW5jdGlvbihjLGQpe2lmKHRoaXMudmFsaWRhdGVBdHRyKGMpKXtpZihj JiZ0aGlzLmdldEF0dHIoYykhPT1kKXt0aGlzLmF0dHJEYXRhW2NdPWQ7aWYoYz09InR5cGUiKXt0 aGlzLnJlc2V0QXR0cnMoKX10aGlzLmZpcmVFdmVudChjKyJjaGFuZ2UiLGQpO3RoaXMuZmlyZUV2 ZW50KCJjaGFuZ2UiKX19ZWxzZXtpZihjIT0iYW5zd2VyX2Zvcm1hdCIpe2EuZXJyb3IoIkludmFs aWQgYXR0cmlidXRlICIrYyl9fX0sZ2V0SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVzdGlv bklkfSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEF0dHIoInRpdGxlIil9LHNl dFRpdGxlOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLnNldEF0dHIoInRpdGxlIixjKX0sc2V0UXVl c3Rpb25UeXBlOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLnNldEF0dHIoInR5cGUiLGMpfSxnZXRR dWVzdGlvblR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRBdHRyKCJ0eXBlIil9LHNldEdy b3VwOmZ1bmN0aW9uKGMsZCl7dGhpcy5zZXRBdHRyKCJncm91cCIsYy5nZXRJZCgpKX0sZ2V0UXVl c3Rpb25DbGFzczpmdW5jdGlvbigpe3JldHVybiBhLlF1aXpfUXVlc3Rpb25NZ3IuZ2V0UXVlc3Rp b25DbGFzcyh0aGlzLmdldFF1ZXN0aW9uVHlwZSgpKX0sZ2V0UXVlc3Rpb25FZGl0b3JDbGFzczpm dW5jdGlvbigpe3JldHVybiBhLlF1aXpfUXVlc3Rpb25NZ3IuZ2V0UXVlc3Rpb25FZGl0b3JDbGFz cyh0aGlzLmdldFF1ZXN0aW9uVHlwZSgpKX0saXNRdWVzdGlvbjpmdW5jdGlvbigpe3JldHVybiB0 cnVlfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBFeHQuZW5jb2RlKHRoaXMuZ2V0RGF0YSgp KX0sZ2V0RGF0YTpmdW5jdGlvbigpe3ZhciBkPXt9LGM7Zm9yKGMgaW4gdGhpcy52YWxpZEF0dHJM aXN0KXtpZih0aGlzLnZhbGlkQXR0ckxpc3QuaGFzT3duUHJvcGVydHkoYykmJnRoaXMudmFsaWRB dHRyTGlzdFtjXSl7ZFtjXT10aGlzLmdldEF0dHIoYyl9fXJldHVybiBkfSxzZXREYXRhOmZ1bmN0 aW9uKGQpe3RoaXMuc2V0QXR0cigidHlwZSIsZC50eXBlKTtmb3IodmFyIGMgaW4gZCl7aWYoZC5o YXNPd25Qcm9wZXJ0eShjKSl7dGhpcy5zZXRBdHRyKGMsZFtjXSl9fX0sc2V0OmZ1bmN0aW9uKGMp e2lmKEV4dC5pc1ByaW1pdGl2ZShjKSl7Yz1FeHQuZGVjb2RlKGMpfXRoaXMuc2V0RGF0YShjKX0s Z2V0UG9zc2liaWxpdHk6ZnVuY3Rpb24oKXtyZXR1cm4gYS5RdWl6X1F1ZXN0aW9uTWdyLmdldFBv c3NpYmlsaXR5KHRoaXMpfX0pO2EuUXVpel9JdGVtX1F1ZXN0aW9uUGFuZWw9RXh0LmV4dGVuZChh LlF1aXpfSXRlbV9BYnN0cmFjdFBhbmVsLHt0aXRsZToiUXVlc3Rpb24iLGxheW91dDoiYXV0byIs YXV0b1dpZHRoOnRydWUsdW5zdHlsZWQ6dHJ1ZSxhbnN3ZXJQYW5lbDpudWxsLHVzZUFuc3dlckJv eDp0cnVlLGhlYWRlckNmZzp7dGFnOiJoMyIsY2xzOiJtYXN0ZXItcXVlc3Rpb24tdGl0bGUifSxj b25zdHJ1Y3RvcjpmdW5jdGlvbihjKXt0aGlzLmFkZENsYXNzKCJtYXN0ZXItcXVlc3Rpb24tcGFu ZWwiKTt0aGlzLmFkZEV2ZW50cygiYW5zd2VyY2hhbmdlIik7YS5RdWl6X0l0ZW1fUXVlc3Rpb25Q YW5lbC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxjKTt2YXIgZj10aGlzLmdldEl0 ZW1Db25maWcoKTt0aGlzLm51bWJlcj1mLm51bWJlcj9mLm51bWJlcjpudWxsO3RoaXMuc2V0VGl0 bGUoZi5nZXRUaXRsZSgpKTtmLm9uKCJ0aXRsZWNoYW5nZSIsZnVuY3Rpb24oZSl7dGhpcy5zZXRU aXRsZShlKX0sdGhpcyk7dGhpcy5oZWxwVGV4dFBhbmVsPXRoaXMuYWRkKHtib3JkZXI6ZmFsc2Us YXV0b0hlaWdodDp0cnVlfSk7dGhpcy51cGRhdGVIZWxwVGV4dD1mdW5jdGlvbigpe3ZhciBnPUV4 dC51dGlsLkZvcm1hdCxlPWcubmwyYnIoZy5odG1sRW5jb2RlKGYuZ2V0QXR0cigiaGVscHRleHQi KSkpO3RoaXMuaGVscFRleHRQYW5lbC5yZW1vdmVBbGwoKTtpZih0aGlzLmhlbHBUZXh0UGFuZWwu cmVuZGVyZWQpe3RoaXMuaGVscFRleHRQYW5lbC5nZXRFbCgpLnVwZGF0ZShlKX1lbHNle3RoaXMu aGVscFRleHRQYW5lbC5odG1sPWV9fTtmLm9uKCJoZWxwdGV4dGNoYW5nZSIsdGhpcy51cGRhdGVI ZWxwVGV4dCx0aGlzKTt0aGlzLnVwZGF0ZUhlbHBUZXh0KCk7dGhpcy5tZWRpYUNvbnRhbnRQYW5l bD10aGlzLmFkZCh7Ym9yZGVyOmZhbHNlLGF1dG9IZWlnaHQ6dHJ1ZX0pO3RoaXMudXBkYXRlTWVk aWFDb250YW50PWZ1bmN0aW9uKCl7dmFyIGosaCxnLGw9Zi5nZXRBdHRyKCJtZWRpYSIpO3RoaXMu bWVkaWFDb250YW50UGFuZWwucmVtb3ZlQWxsKCk7aWYobCl7dHJ5e2o9RXh0LmRlY29kZShsKTtm b3IoaCBpbiBqKXtpZihqLmhhc093blByb3BlcnR5KGgpKXtnPWpbaF07dGhpcy5tZWRpYUNvbnRh bnRQYW5lbC5hZGQoe2FuY2hvcjoiMTAwJSIsYm9yZGVyOmZhbHNlLGF1dG9IZWlnaHQ6dHJ1ZSxs YXlvdXQ6ImZpdCIsc3R5bGU6Im1hcmdpbjoycHggNXB4IDEwcHggNXB4OyIsaXRlbXM6YS5RdWl6 X01lZGlhLmNyZWF0ZShnKX0pfX19Y2F0Y2goayl7YS5leGNlcHRpb24oayl9fX07Zi5vbigibWVk aWFjaGFuZ2UiLHRoaXMudXBkYXRlTWVkaWFDb250YW50LHRoaXMpO3RoaXMudXBkYXRlTWVkaWFD b250YW50KCk7aWYodGhpcy51c2VBbnN3ZXJCb3gpe3RyeXt0aGlzLmFuc3dlckNvbnRhaW5lclBh bmVsPXRoaXMuYWRkKHtib3JkZXI6ZmFsc2UsYXV0b0hlaWdodDp0cnVlLGFuY2hvcjoiMTAwJSJ9 KTt0aGlzLnVwZGF0ZUFuc3dlclBhbmVsPWZ1bmN0aW9uKCl7dGhpcy5hbnN3ZXJDbGFzc05hbWU9 dGhpcy5nZXRJdGVtQ29uZmlnKCkuZ2V0UXVlc3Rpb25DbGFzcygpO3RoaXMuYW5zd2VyUGFuZWw9 dGhpcy5hbnN3ZXJDb250YWluZXJQYW5lbC5hZGQobmV3IHRoaXMuYW5zd2VyQ2xhc3NOYW1lKHtp dGVtQ29uZmlnOmYsbW9kZTp0aGlzLm1vZGV9KSk7dGhpcy5hbnN3ZXJQYW5lbC5vbigiY2hhbmdl IixmdW5jdGlvbigpe3RoaXMuZmlyZUV2ZW50KCJhbnN3ZXJjaGFuZ2UiKX0sdGhpcyl9O3RoaXMu dXBkYXRlQW5zd2VyUGFuZWwoKTtmLm9uKCJ0eXBlY2hhbmdlIixmdW5jdGlvbigpe3RyeXt2YXIg aD10aGlzLmdldEl0ZW1Db25maWcoKSxnPWguZ2V0UXVlc3Rpb25DbGFzcygpO2lmKGchPT10aGlz LmFuc3dlckNsYXNzTmFtZSl7dGhpcy5hbnN3ZXJDb250YWluZXJQYW5lbC5yZW1vdmUodGhpcy5h bnN3ZXJQYW5lbCk7dGhpcy5hbnN3ZXJQYW5lbC5kZXN0cm95KCk7dGhpcy51cGRhdGVBbnN3ZXJQ YW5lbCgpfX1jYXRjaChpKXthLmV4Y2VwdGlvbihpKX19LHRoaXMpfWNhdGNoKGQpe2EuZXhjZXB0 aW9uKGQpfX10aGlzLm9uKCJyZW5kZXIiLGZ1bmN0aW9uKCl7dHJ5e3RoaXMuaW5pdE51bWJlcigp fWNhdGNoKGcpe2EuZXhjZXB0aW9uKGcsImluaXROdW1iZXIiKX19LHRoaXMpfSxpbml0TnVtYmVy OmZ1bmN0aW9uKCl7dGhpcy5udW1iZXJFbD10aGlzLmhlYWRlci5pbnNlcnRGaXJzdCh7dGFnOiJz cGFuIixjbHM6InF1ZXN0aW9uLW51bWJlciIsaHRtbDp0aGlzLm51bWJlcj90aGlzLm51bWJlcisi LiZuYnNwOyI6IiJ9KTt0aGlzLnNldFRpdGxlPWZ1bmN0aW9uKGQpe3RyeXt0aGlzLmhlYWRlci51 cGRhdGUoZCk7dGhpcy5pbml0TnVtYmVyKCl9Y2F0Y2goYyl7YS5leGNlcHRpb24oYyl9fX0sdXBk YXRlTnVtYmVyOmZ1bmN0aW9uKCl7aWYodGhpcy5yZW5kZXJlZCl7aWYoIXRoaXMubnVtYmVyRWwp e3RoaXMuaW5pdE51bWJlcigpfXRoaXMubnVtYmVyRWwudXBkYXRlKHRoaXMubnVtYmVyP3RoaXMu bnVtYmVyKyIuJm5ic3A7IjoiIil9fSxzZXROdW1iZXI6ZnVuY3Rpb24oYyl7dGhpcy5udW1iZXI9 Yzt0aGlzLnVwZGF0ZU51bWJlcigpfSxnZXRBbnN3ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5h bnN3ZXJQYW5lbC5nZXRBbnN3ZXIoKX0sc2V0QW5zd2VyOmZ1bmN0aW9uKGMpe3RoaXMuYW5zd2Vy UGFuZWwuc2V0QW5zd2VyKGMpfSxpc0NvcnJlY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbnN3 ZXJQYW5lbC5pc0NvcnJlY3QoKX0sdmFsaWRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbnN3 ZXJQYW5lbC52YWxpZGF0ZSgpfX0pO0V4dC5yZWcoInF1aXpfcXVlc3Rpb24iLGEuUXVpel9JdGVt X1F1ZXN0aW9uUGFuZWwpO2EuUXVpel9JdGVtX1RpdGxlQ29uZmlnPUV4dC5leHRlbmQoYS5RdWl6 X1F1aXpJdGVtQ29uZmlnLHt4dHlwZToicXVpel90aXRsZSIsdGl0bGU6IiIsY29uc3RydWN0b3I6 ZnVuY3Rpb24oYyl7dGhpcy5pZD0idGl0bGUiO3RoaXMuYWRkRXZlbnRzKCJjaGFuZ2UiKTthLlF1 aXpfSXRlbV9UaXRsZUNvbmZpZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxjKX0s c2V0VGl0bGU6ZnVuY3Rpb24oYyl7Yz1jP2MudG9TdHJpbmcoKToiIjtpZihjIT10aGlzLnRpdGxl KXt0aGlzLnRpdGxlPWM7dGhpcy5maXJlRXZlbnQoImNoYW5nZSIpfX0sZ2V0VGl0bGU6ZnVuY3Rp b24oKXtyZXR1cm4gdGhpcy50aXRsZT90aGlzLnRpdGxlOiIifSxkZWxldGVJdGVtOmZ1bmN0aW9u KCl7dGhpcy5zZXRUaXRsZSgiIil9fSk7YS5RdWl6X0l0ZW1fVGl0bGVQYW5lbD1FeHQuZXh0ZW5k KGEuUXVpel9JdGVtX0Fic3RyYWN0UGFuZWwse2F1dG9IZWlnaHQ6dHJ1ZSxjb2xsYXBzaWJsZTp0 cnVlLHN0eWxlOiJtYXJnaW46IDEwcHgiLGNvbnN0cnVjdG9yOmZ1bmN0aW9uKGMpe2EuUXVpel9J dGVtX1RpdGxlUGFuZWwuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYyk7dGhpcy5n ZXRJdGVtQ29uZmlnKCkub24oImNoYW5nZSIsdGhpcy51cGRhdGVRdWl6SXRlbSx0aGlzKTt0aGlz Lm9uKCJkZXN0cm95IixmdW5jdGlvbigpe3RoaXMuZ2V0SXRlbUNvbmZpZygpLnVuKCJjaGFuZ2Ui LHRoaXMudXBkYXRlUXVpekl0ZW0sdGhpcyl9KTt0aGlzLnVwZGF0ZVF1aXpJdGVtKCl9LHVwZGF0 ZVF1aXpJdGVtOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5nZXRJdGVtQ29uZmlnKCkuZ2V0VGl0bGUo KTtpZihjKXtpZih0aGlzLnJlbmRlcmVkKXt0aGlzLmV4cGFuZCgpfWVsc2V7dGhpcy5jb2xsYXBz ZWQ9ZmFsc2V9fWVsc2V7aWYodGhpcy5yZW5kZXJlZCl7dGhpcy5jb2xsYXBzZSgpfWVsc2V7dGhp cy5jb2xsYXBzZWQ9dHJ1ZX19aWYodGhpcy5yZW5kZXJlZCl7dGhpcy5ib2R5LnVwZGF0ZShjKX1l bHNle3RoaXMuaHRtbD1jfX19KTtFeHQucmVnKCJxdWl6X3RpdGxlIixhLlF1aXpfSXRlbV9UaXRs ZVBhbmVsKTthLlF1aXpfSXRlbV9RdWVzdGlvblBhbmVsX0Fic3RyYWN0PUV4dC5leHRlbmQoRXh0 LlBhbmVsLHtib3JkZXI6ZmFsc2UsYXV0b0hlaWdodDp0cnVlLGF1dG9XaWR0aDp0cnVlLGNvbnN0 cnVjdG9yOmZ1bmN0aW9uKGMpe3RoaXMuYWRkRXZlbnRzKCJjaGFuZ2UiKTtpZighY3x8IWMuaXRl bUNvbmZpZyl7dGhyb3cibm8gaXRlbSBjb25maWcifWlmKCEoYy5pdGVtQ29uZmlnIGluc3RhbmNl b2YgYS5RdWl6X0l0ZW1fUXVlc3Rpb25Db25maWcpKXt0aHJvdyJjb25maWcuaXRlbUNvbmZpZyBp cyBub3QgaW5zdGFuY2Ugb2YgTWFzdGVyLlF1aXpfSXRlbV9RdWVzdGlvbkNvbmZpZyJ9dGhpcy5p dGVtQ29uZmlnPWMuaXRlbUNvbmZpZzt0aGlzLmFuc3dlck5hbWU9dGhpcy5nZXRBbnN3ZXJOYW1l KCk7YS5RdWl6X0l0ZW1fUXVlc3Rpb25QYW5lbF9BYnN0cmFjdC5zdXBlcmNsYXNzLmNvbnN0cnVj dG9yLmNhbGwodGhpcyxjKX0sZ2V0QW5zd2VyTmFtZTpmdW5jdGlvbigpe3JldHVybiJxdWVzdGlv bl9hbnN3ZXJfIit0aGlzLml0ZW1Db25maWcuZ2V0SWQoKX0sZ2V0SXRlbUNvbmZpZzpmdW5jdGlv bigpe3JldHVybiB0aGlzLml0ZW1Db25maWd9LGluaXRJdGVtQ29uZmlnOmZ1bmN0aW9uKCl7fSxn ZXRBbnN3ZXI6ZnVuY3Rpb24oKXt0aHJvdyJnZXRBbnN3ZXIgZnVuY3Rpb24gaXMgbm90IGltcGxl bWVudGVkIn0sc2V0QW5zd2VyOmZ1bmN0aW9uKCl7dGhyb3cic2V0QW5zd2VyIGZ1bmN0aW9uIGlz IG5vdCBpbXBsZW1lbnRlZCJ9LGlzQ29ycmVjdDpmdW5jdGlvbigpe3JldHVybiBhLlF1aXpfUXVl c3Rpb25NZ3IuZXZhbHVhdGUodGhpcy5nZXRJdGVtQ29uZmlnKCksdGhpcy5nZXRBbnN3ZXIoKSl9 LHZhbGlkYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGZhbHNlfX0pO2EuUXVpel9JdGVtX1F1ZXN0aW9u UGFuZWxfU2luZ2xlQW5zd2VyPUV4dC5leHRlbmQoYS5RdWl6X0l0ZW1fUXVlc3Rpb25QYW5lbF9B YnN0cmFjdCx7bGF5b3V0OiJmb3JtIixhdXRvSGVpZ2h0OnRydWUsbGFiZWxTZXBhcmF0b3I6IiZu YnNwOyIsYm9yZGVyOmZhbHNlLGNvbnN0cnVjdG9yOmZ1bmN0aW9uKGMpe3RoaXMuYW5zd2Vycz17 fTthLlF1aXpfSXRlbV9RdWVzdGlvblBhbmVsX1NpbmdsZUFuc3dlci5zdXBlcmNsYXNzLmNvbnN0 cnVjdG9yLmNhbGwodGhpcyxjKTt0aGlzLm9uKCJyZW5kZXIiLHRoaXMudXBkYXRlQW5zd2Vycyx0 aGlzKTt0aGlzLmdldEl0ZW1Db25maWcoKS5vbigiYW5zd2Vyc2NoYW5nZSIsdGhpcy51cGRhdGVB bnN3ZXJzLHRoaXMpfSxpbml0Q29tcG9uZW50OmZ1bmN0aW9uKCl7YS5RdWl6X0l0ZW1fUXVlc3Rp b25QYW5lbF9TaW5nbGVBbnN3ZXIuc3VwZXJjbGFzcy5pbml0Q29tcG9uZW50LmNhbGwodGhpcyl9 LHVwZGF0ZUFuc3dlcnM6ZnVuY3Rpb24oKXt2YXIgYyxnLGQsaDt0cnl7aWYoIXRoaXMuX2Fuc3dl cil7dGhpcy5fYW5zd2VyPXRoaXMuZ2V0QW5zd2VyKCl9dGhpcy5yZW1vdmVBbGwoKTt0aGlzLmFu c3dlcnM9e307Zz10aGlzLmdldEl0ZW1Db25maWcoKS5nZXRBdHRyKCJhbnN3ZXJzIik7aWYoZyl7 Zz1FeHQuZGVjb2RlKGcpO2M9ZnVuY3Rpb24oKXt0aGlzLmZpcmVFdmVudCgiY2hhbmdlIil9O2Zv cihoIGluIGcpe2lmKGcuaGFzT3duUHJvcGVydHkoaCkmJmdbaF0pe2Q9Z1toXTt0aGlzLmFuc3dl cnNbaF09dGhpcy5hZGRBbnN3ZXIoZCxoKTt0aGlzLmFuc3dlcnNbaF0ub24oImNoYW5nZSIsYyx0 aGlzKX19aWYodGhpcy5yZW5kZXJlZCYmdGhpcy5sYXlvdXQubGF5b3V0KXsoZnVuY3Rpb24oKXt0 aGlzLmRvTGF5b3V0KCl9KS5kZWZlcigxMjAwLHRoaXMpfX10aGlzLnNldEFuc3dlcih0aGlzLl9h bnN3ZXIpO3RoaXMuX2Fuc3dlcj1udWxsfWNhdGNoKGYpe2EuZXhjZXB0aW9uKGYpfX0sYWRkQW5z d2VyOmZ1bmN0aW9uKGMsZCl7cmV0dXJuIHRoaXMuYWRkKHt4dHlwZToicmFkaW8iLGF1dG9IZWln aHQ6dHJ1ZSxpbnB1dFZhbHVlOmQsaGlkZUxhYmVsOnRydWUscmVhZE9ubHk6KHRoaXMubW9kZT09 InJlc3VsdCJ8fHRoaXMubW9kZT09InZpZXciKSxkaXNhYmxlZDoodGhpcy5tb2RlPT0icmVzdWx0 Inx8dGhpcy5tb2RlPT0idmlldyIpLG5hbWU6dGhpcy5hbnN3ZXJOYW1lLGJveExhYmVsOmN9KX0s aW5pdEl0ZW1Db25maWc6ZnVuY3Rpb24oYyl7Yy5hZGRBdHRyKCJhbnN3ZXJzIik7Yy5hZGRBdHRy KCJjb3JyZWN0X2Fuc3dlciIsIiIpfSxnZXRBbnN3ZXI6ZnVuY3Rpb24oKXtpZih0aGlzLl9hbnN3 ZXIpe3JldHVybiB0aGlzLl9hbnN3ZXJ9dmFyIGM9W10sZCxlO2ZvcihlIGluIHRoaXMuYW5zd2Vy cyl7aWYodGhpcy5hbnN3ZXJzLmhhc093blByb3BlcnR5KGUpKXtkPXRoaXMuYW5zd2Vyc1tlXTtp ZihkLmdldFZhbHVlKCkpe2MucHVzaChlKX19fXJldHVybiBFeHQuZW5jb2RlKGMuc29ydCgpKX0s c2V0QW5zd2VyOmZ1bmN0aW9uKGMpe2EubG9nKCJzZXRBbnN3ZXIiKTthLmxvZyhjKTtpZihjKXt0 aGlzLl9hbnN3ZXI9YzthLmVhY2godGhpcy5hbnN3ZXJzLGZ1bmN0aW9uKGUsZil7dmFyIGQ9ZmFs c2U7YS5lYWNoKEV4dC5kZWNvZGUoYyksZnVuY3Rpb24oZyl7aWYoZz09Zil7ZD10cnVlfX0pO2Uu c2V0VmFsdWUoZCl9LHRoaXMpO2lmKHRoaXMubW9kZT09InJlc3VsdCIpe3RoaXMuc2hvd0Fuc3dl ckVycm9ycygpfX19LGluaXRSZXN1bHRFbGVtZW50czpmdW5jdGlvbihmLGQsYyl7aWYoIWYuZWwu cGFyZW50KCkucXVlcnkoIi5tYXN0ZXItbGluZS10aHJvdWdoIikubGVuZ3RoKXt2YXIgZT0iJm5i c3A7Ijt3aGlsZShjPjEpe2UrPSImbmJzcDsiO2MtLX1mLmVsLmluc2VydEh0bWwoImFmdGVyRW5k IiwnPHNwYW4gY2xhc3M9Im1hc3Rlci1saW5lLXRocm91Z2giIHN0eWxlPSJtYXJnaW4tbGVmdDot JytkKydweDsiPicrZSsnPC9zcGFuPjxzcGFuIGNsYXNzPSJtYXN0ZXItYW5zd2VyLXBvaW50LXRy dWUiPis8L3NwYW4+PHNwYW4gY2xhc3M9Im1hc3Rlci1hbnN3ZXItcG9pbnQtZmFsc2UiPi08L3Nw YW4+Jyl9fSxzaG93QW5zd2VyRXJyb3JzOmZ1bmN0aW9uKCl7dHJ5e3ZhciBjPXRoaXMuZ2V0SXRl bUNvbmZpZygpLmdldEF0dHIoImNvcnJlY3RfYW5zd2VyIik7YS5lYWNoKHRoaXMuYW5zd2Vycyxm dW5jdGlvbihmLGgpe2lmKGYucmVuZGVyZWQpe3RoaXMuaW5pdFJlc3VsdEVsZW1lbnRzKGYsMjcs NCk7dmFyIGU9Zi5nZXRWYWx1ZSgpLGc9ZmFsc2U7aWYoYyl7YS5lYWNoKEV4dC5kZWNvZGUoYyks ZnVuY3Rpb24oaSl7aWYoaT09aCl7Zz10cnVlfX0pfWlmKGcpe2YuZWwucGFyZW50KCkucmVtb3Zl Q2xhc3MoInBvaW50LWZhbHNlIik7Zi5lbC5wYXJlbnQoKS5hZGRDbGFzcygicG9pbnQtdHJ1ZSIp fWVsc2V7Zi5lbC5wYXJlbnQoKS5yZW1vdmVDbGFzcygicG9pbnQtdHJ1ZSIpO2YuZWwucGFyZW50 KCkuYWRkQ2xhc3MoInBvaW50LWZhbHNlIil9aWYoZz09ZSl7Zi5lbC5wYXJlbnQoKS5yZW1vdmVD bGFzcygic2hvdy1saW5lLXRocm91Z2giKX1lbHNle2YuZWwucGFyZW50KCkuYWRkQ2xhc3MoInNo b3ctbGluZS10aHJvdWdoIil9fWVsc2V7Zi5vbigicmVuZGVyIix0aGlzLnNob3dBbnN3ZXJFcnJv cnMsdGhpcyl9fSx0aGlzKX1jYXRjaChkKXthLmV4Y2VwdGlvbihkKX19LHZhbGlkYXRlOmZ1bmN0 aW9uKCl7dHJ5e3ZhciBjPXRoaXMuZ2V0QW5zd2VyKCk7aWYoRXh0LmRlY29kZShjKS5sZW5ndGg+ MCl7cmV0dXJuIHRydWV9fWNhdGNoKGQpe2EuZXhjZXB0aW9uKGQpfXJldHVybiBmYWxzZX19KTtF eHQucmVnKCJ0ZXh0X3F1ZXN0aW9uIixhLlF1aXpfSXRlbV9RdWVzdGlvblBhbmVsX1NpbmdsZUFu c3dlcik7YS5RdWl6X0l0ZW1fUXVlc3Rpb25QYW5lbF9NdWx0aXBsZUFuc3dlcj1FeHQuZXh0ZW5k KGEuUXVpel9JdGVtX1F1ZXN0aW9uUGFuZWxfU2luZ2xlQW5zd2VyLHthZGRBbnN3ZXI6ZnVuY3Rp b24oYyxkKXtyZXR1cm4gdGhpcy5hZGQoe3h0eXBlOiJjaGVja2JveCIsYXV0b0hlaWdodDp0cnVl LG5hbWU6dGhpcy5hbnN3ZXJOYW1lKyJfIitkLGhpZGVMYWJlbDp0cnVlLHJlYWRPbmx5Oih0aGlz Lm1vZGU9PSJyZXN1bHQifHx0aGlzLm1vZGU9PSJ2aWV3IiksZGlzYWJsZWQ6KHRoaXMubW9kZT09 InJlc3VsdCJ8fHRoaXMubW9kZT09InZpZXciKSxib3hMYWJlbDpjfSl9fSk7RXh0LnJlZygidGV4 dF9xdWVzdGlvbiIsYS5RdWl6X0l0ZW1fUXVlc3Rpb25QYW5lbF9NdWx0aXBsZUFuc3dlcik7YS5R dWl6X0l0ZW1fUXVlc3Rpb25QYW5lbF9UZXh0PUV4dC5leHRlbmQoYS5RdWl6X0l0ZW1fUXVlc3Rp b25QYW5lbF9BYnN0cmFjdCx7bGF5b3V0OiJhdXRvIixhdXRvSGVpZ2h0OnRydWUsYXV0b1dpZHRo OnRydWUsYW5zd2VyOm51bGwsY29uc3RydWN0b3I6ZnVuY3Rpb24oYyl7YS5RdWl6X0l0ZW1fUXVl c3Rpb25QYW5lbF9UZXh0LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGMpO3RoaXMu YW5zd2VyRmllbGQ9dGhpcy5hZGQodGhpcy5nZXRGaWVsZENvbmZpZygpKTt0aGlzLmFuc3dlckZp ZWxkLm9uKCJjaGFuZ2UiLHRoaXMudXBkYXRlQW5zd2VyVmFsdWUsdGhpcyk7dGhpcy5hbnN3ZXJG aWVsZC5vbigiYWZ0ZXJyZW5kZXIiLHRoaXMudXBkYXRlQW5zd2VyVmFsdWUsdGhpcyl9LHVwZGF0 ZUFuc3dlclZhbHVlOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5hbnN3ZXJGaWVsZC5nZXRWYWx1ZSgp O2lmKGMhPXRoaXMuYW5zd2VyKXt0aGlzLmFuc3dlcj1jO3RoaXMuZmlyZUV2ZW50KCJjaGFuZ2Ui KX19LGdldEZpZWxkQ29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJue3h0eXBlOiJ0ZXh0ZmllbGQiLHJl YWRPbmx5Oih0aGlzLm1vZGU9PSJyZXN1bHQifHx0aGlzLm1vZGU9PSJ2aWV3Iiksd2lkdGg6MjAw fX0sZ2V0QW5zd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5zd2VyfSxzaG93QW5zd2VyRXJy b3JzOmZ1bmN0aW9uKCl7cmV0dXJufSxzZXRBbnN3ZXI6ZnVuY3Rpb24oYyl7dGhpcy5hbnN3ZXJG aWVsZC5zZXRWYWx1ZShjKTt0aGlzLmFuc3dlcj1jO2lmKHRoaXMubW9kZT09InJlc3VsdCIpe3Ro aXMuc2hvd0Fuc3dlckVycm9ycygpfX19KTtFeHQucmVnKCJ0ZXh0X3F1ZXN0aW9uIixhLlF1aXpf SXRlbV9RdWVzdGlvblBhbmVsX1RleHQpO2EuUXVpel9JdGVtX1F1ZXN0aW9uUGFuZWxfV29yZD1F eHQuZXh0ZW5kKGEuUXVpel9JdGVtX1F1ZXN0aW9uUGFuZWxfVGV4dCx7aW5pdEl0ZW1Db25maWc6 ZnVuY3Rpb24oYyl7Yy5hZGRBdHRyKCJjYXNlX3NlbnNpdGl2ZSIsMCk7Yy5hZGRBdHRyKCJpc19t dWx0aXBsZSIsMCk7Yy5hZGRBdHRyKCJpZ25vcmVfb3JkZXIiLDApO2MuYWRkQXR0cigiYW5zd2Vy cyIpO2MuYWRkQXR0cigiY29ycmVjdF9hbnN3ZXIiLCJ7fSIpfSxnZXRGaWVsZENvbmZpZzpmdW5j dGlvbigpe3RoaXMuZm9ybT1uZXcgRXh0LmZvcm0uRm9ybVBhbmVsKHtib3JkZXI6ZmFsc2UsYXV0 b0hlaWdodDp0cnVlfSk7dGhpcy5mb3JtLmFkZEV2ZW50cygiY2hhbmdlIik7dmFyIGM9dGhpczt0 aGlzLmZvcm0uc2V0VmFsdWU9ZnVuY3Rpb24oZyl7dmFyIGYsaDt0cnl7Zz1FeHQuZGVjb2RlKGcp O2lmKCFnKXt0aHJvdyJlbXB0eSJ9fWNhdGNoKGQpe2c9e319Zm9yKGggaW4gYy5hbnN3ZXJGaWVs ZHMpe2lmKGMuYW5zd2VyRmllbGRzLmhhc093blByb3BlcnR5KGgpKXtmPWMuYW5zd2VyRmllbGRz W2hdO2lmKGcuaGFzT3duUHJvcGVydHkoaCkpe2Yuc2V0VmFsdWUoZ1toXSl9ZWxzZXtmLnNldFZh bHVlKCIiKX19fX07dGhpcy5mb3JtLmdldFZhbHVlPWZ1bmN0aW9uKCl7dmFyIGQ9e30sZTtmb3Io ZSBpbiBjLmFuc3dlckZpZWxkcyl7aWYoYy5hbnN3ZXJGaWVsZHMuaGFzT3duUHJvcGVydHkoZSkp e2RbZV09Yy5hbnN3ZXJGaWVsZHNbZV0uZ2V0VmFsdWUoKX19cmV0dXJuIEV4dC5lbmNvZGUoZCl9 O3RoaXMudXBkYXRlRmllbGRzKCk7dGhpcy5nZXRJdGVtQ29uZmlnKCkub24oImFuc3dlcnNjaGFu Z2UiLHRoaXMudXBkYXRlRmllbGRzLHRoaXMpO3RoaXMuZ2V0SXRlbUNvbmZpZygpLm9uKCJjb3Jy ZWN0X2Fuc3dlcmNoYW5nZSIsdGhpcy51cGRhdGVGaWVsZHMsdGhpcyk7dGhpcy5vbigiZGVzdHJv eSIsZnVuY3Rpb24oKXt0aGlzLmdldEl0ZW1Db25maWcoKS51bigiYW5zd2Vyc2NoYW5nZSIsdGhp cy51cGRhdGVGaWVsZHMsdGhpcyk7dGhpcy5nZXRJdGVtQ29uZmlnKCkudW4oImNvcnJlY3RfYW5z d2VyY2hhbmdlIix0aGlzLnVwZGF0ZUZpZWxkcyx0aGlzKX0sdGhpcyk7cmV0dXJuIHRoaXMuZm9y bX0sdXBkYXRlRmllbGRzOmZ1bmN0aW9uKCl7dmFyIGksYyxqLGYsaCxkPXRoaXMuZ2V0SXRlbUNv bmZpZygpO3RoaXMuYW5zd2VyRmllbGRzPXt9O3RoaXMuZm9ybS5yZW1vdmVBbGwoKTt0cnl7aT1F eHQuZGVjb2RlKGQuZ2V0QXR0cigiYW5zd2VycyIpKX1jYXRjaChnKXthLmVycm9yKCJ3cm9uZyBh bnN3ZXJzIGF0dHJpYnV0ZSIpO3JldHVybn1jPWZ1bmN0aW9uKCl7dGhpcy5mb3JtLmZpcmVFdmVu dCgiY2hhbmdlIix0aGlzLmZvcm0pfTtmb3IoaiBpbiBpKXtpZihpLmhhc093blByb3BlcnR5KGop KXtmPWlbal07aD10aGlzLmZvcm0uYWRkKEV4dC5hcHBseSh0aGlzLmdldFdvcmRGaWVsZENvbmZp ZygpLHtoaWRlTGFiZWw6Zj9mYWxzZTp0cnVlLG5hbWU6ZC5nZXRBdHRyKCJpc19tdWx0aXBsZSIp Pyh0aGlzLmFuc3dlck5hbWUrIl8iK2opOnRoaXMuYW5zd2VyTmFtZSxsYWJlbFNlcGFyYXRvcjoi IixmaWVsZExhYmVsOmZ9KSk7aC5vbigiY2hhbmdlIixjLHRoaXMpO3RoaXMuYW5zd2VyRmllbGRz W2pdPWh9fXRoaXMuZG9MYXlvdXQoKX0sZ2V0V29yZEZpZWxkQ29uZmlnOmZ1bmN0aW9uKCl7cmV0 dXJue3h0eXBlOiJ0ZXh0ZmllbGQiLHJlYWRPbmx5Oih0aGlzLm1vZGU9PSJyZXN1bHQifHx0aGlz Lm1vZGU9PSJ2aWV3IiksbGFiZWxTdHlsZToidGV4dC1hbGlnbjogcmlnaHQ7Iix3aWR0aDoyMDB9 fSxpbml0UmVzdWx0UGFuZWw6ZnVuY3Rpb24oKXtpZighdGhpcy5yZXN1bHRQYW5lbCl7dGhpcy5y ZXN1bHRQYW5lbD10aGlzLmFkZCh7Ym9yZGVyOmZhbHNlLGF1dG9IZWlnaHQ6dHJ1ZX0pO2lmKHRo aXMubGF5b3V0LmxheW91dCl7dGhpcy5kb0xheW91dCgpfX19LHNob3dBbnN3ZXJFcnJvcnM6ZnVu Y3Rpb24oKXtpZih0aGlzLnJlbmRlcmVkKXt0cnl7dmFyIGY9dGhpcy5pc0NvcnJlY3QoKSxpLGQs YyxoLGo7dGhpcy5pbml0UmVzdWx0UGFuZWwoKTtpZighdGhpcy5yZXN1bHRQYW5lbC5yZW5kZXJl ZCl7dGhpcy5yZXN1bHRQYW5lbC5vbigiYWZ0ZXJyZW5kZXIiLHRoaXMuc2hvd0Fuc3dlckVycm9y cyx0aGlzKTtyZXR1cm59aT17aWQ6YS5pZCh0aGlzLmFuc3dlck5hbWUrIi1yZXN1bHQiKSx0YWc6 ImRpdiJ9O2lmKGYpe2kuaHRtbD0nPHNwYW4gc3R5bGU9ImNvbG9yOiBncmVlbiI+0JLQtdGA0L3Q vjwvc3Bhbj4nfWVsc2V7ZD1FeHQuZGVjb2RlKHRoaXMuZ2V0SXRlbUNvbmZpZygpLmdldEF0dHIo ImNvcnJlY3RfYW5zd2VyIikpO2g9RXh0LmRlY29kZSh0aGlzLmdldEl0ZW1Db25maWcoKS5nZXRB dHRyKCJhbnN3ZXJzIikpO2M9W107Zm9yKGogaW4gaCl7aWYoaC5oYXNPd25Qcm9wZXJ0eShqKSl7 Yy5wdXNoKHt0YWc6ImRpdiIsc3R5bGU6ImNsZWFyOmJvdGg7Iixjbjpbe3RhZzoiZGl2IixzdHls ZToid2lkdGg6IDEwMHB4OyB0ZXh0LWFsaWduOnJpZ2h0OyBmbG9hdDogbGVmdDsgcGFkZGluZy1y aWdodDoxMHB4OyIsaHRtbDpoW2pdfSx7dGFnOiJkaXYiLHN0eWxlOiJmbG9hdDogbGVmdCIsaHRt bDpkW2pdfV19KX19Yy51bnNoaWZ0KHt0YWc6ImRpdiIsaHRtbDoi0J/RgNCw0LLQuNC70YzQvdGL 0Lkg0L7RgtCy0LXRgjoifSk7aS5jbj1be2h0bWw6JzxzcGFuIHN0eWxlPSJjb2xvcjogcmVkIj7Q ntGC0LLQtdGCINC90LXQstC10YDQvdGL0Lk8L3NwYW4+J30se3RhZzoiZGl2IixjbjpjfV07dGhp cy5yZXN1bHRQYW5lbC5ib2R5LnNldFN0eWxlKHtib3JkZXI6IjFweCBzb2xpZCByZWQiLHBhZGRp bmc6IjVweCJ9KX1FeHQuRG9tSGVscGVyLm92ZXJ3cml0ZSh0aGlzLnJlc3VsdFBhbmVsLmJvZHks aSl9Y2F0Y2goZyl7YS5leGNlcHRpb24oZyl9fWVsc2V7dGhpcy5vbigiYWZ0ZXJyZW5kZXIiLHRo aXMuc2hvd0Fuc3dlckVycm9ycyx0aGlzKX19LHZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGM9dHJ1 ZTthLmVhY2godGhpcy5hbnN3ZXJGaWVsZHMsZnVuY3Rpb24oZCl7aWYoIWQuZ2V0VmFsdWUoKSl7 Yz1mYWxzZTtyZXR1cm4gZmFsc2V9fSx0aGlzKTtyZXR1cm4gY319KTthLlF1aXpfSXRlbV9RdWVz dGlvblBhbmVsX051bWJlcj1FeHQuZXh0ZW5kKGEuUXVpel9JdGVtX1F1ZXN0aW9uUGFuZWxfVGV4 dCx7YW5zd2VyRmllbGRzOm51bGwsaW5pdEl0ZW1Db25maWc6ZnVuY3Rpb24oYyl7Yy5hZGRBdHRy KCJhbGxvd19uZWdhdGl2ZSIsMSk7Yy5hZGRBdHRyKCJhbGxvd19kZWNpbWFscyIsMSk7Yy5hZGRB dHRyKCJwcmVjaXNpb24iLDIpO2MuYWRkQXR0cigiaXNfbXVsdGlwbGUiLDApO2MuYWRkQXR0cigi aWdub3JlX29yZGVyIiwwKTtjLmFkZEF0dHIoImFuc3dlcnMiKTtjLmFkZEF0dHIoImNvcnJlY3Rf YW5zd2VyIiwie30iKX0sZ2V0RmllbGRDb25maWc6ZnVuY3Rpb24oKXt2YXIgYz10aGlzO3RoaXMu Zm9ybT1uZXcgRXh0LmZvcm0uRm9ybVBhbmVsKHtib3JkZXI6ZmFsc2UsYXV0b0hlaWdodDp0cnVl fSk7dGhpcy5mb3JtLmFkZEV2ZW50cygiY2hhbmdlIik7dGhpcy5mb3JtLnNldFZhbHVlPWZ1bmN0 aW9uKGcpe3RyeXtpZihnKXtnPUV4dC5kZWNvZGUoZyl9ZWxzZXt0aHJvdyJlbXB0eSJ9fWNhdGNo KGYpe2c9e319dmFyIGQsaDtmb3IoaCBpbiBjLmFuc3dlckZpZWxkcyl7aWYoYy5hbnN3ZXJGaWVs ZHMuaGFzT3duUHJvcGVydHkoaCkpe2Q9Yy5hbnN3ZXJGaWVsZHNbaF07aWYoZy5oYXNPd25Qcm9w ZXJ0eShoKSl7ZC5zZXRWYWx1ZShnW2hdKX1lbHNle2Quc2V0VmFsdWUoIiIpfX19fTt0aGlzLmZv cm0uZ2V0VmFsdWU9ZnVuY3Rpb24oKXt2YXIgZD17fSxlO2ZvcihlIGluIGMuYW5zd2VyRmllbGRz KXtpZihjLmFuc3dlckZpZWxkcy5oYXNPd25Qcm9wZXJ0eShlKSl7ZFtlXT1jLmFuc3dlckZpZWxk c1tlXS5nZXRWYWx1ZSgpfX1yZXR1cm4gRXh0LmVuY29kZShkKX07dGhpcy51cGRhdGVGaWVsZHMo KTt0aGlzLmdldEl0ZW1Db25maWcoKS5vbigiYW5zd2Vyc2NoYW5nZSIsdGhpcy51cGRhdGVGaWVs ZHMsdGhpcyk7dGhpcy5nZXRJdGVtQ29uZmlnKCkub24oImNvcnJlY3RfYW5zd2VyY2hhbmdlIix0 aGlzLnVwZGF0ZUZpZWxkcyx0aGlzKTt0aGlzLm9uKCJkZXN0cm95IixmdW5jdGlvbigpe3RoaXMu Z2V0SXRlbUNvbmZpZygpLnVuKCJhbnN3ZXJzY2hhbmdlIix0aGlzLnVwZGF0ZUZpZWxkcyx0aGlz KTt0aGlzLmdldEl0ZW1Db25maWcoKS51bigiY29ycmVjdF9hbnN3ZXJjaGFuZ2UiLHRoaXMudXBk YXRlRmllbGRzLHRoaXMpfSx0aGlzKTtyZXR1cm4gdGhpcy5mb3JtfSx1cGRhdGVGaWVsZHM6ZnVu Y3Rpb24oKXt2YXIgaSxmLGMsaixkLGg7dGhpcy5hbnN3ZXJGaWVsZHM9e307dGhpcy5mb3JtLnJl bW92ZUFsbCgpO2Y9dGhpcy5nZXRJdGVtQ29uZmlnKCk7dHJ5e2k9RXh0LmRlY29kZShmLmdldEF0 dHIoImFuc3dlcnMiKSl9Y2F0Y2goZyl7YS5lcnJvcigid3JvbmcgYW5zd2VycyBhdHRyaWJ1dGUi KTtyZXR1cm59Yz1mdW5jdGlvbigpe3RoaXMuZm9ybS5maXJlRXZlbnQoImNoYW5nZSIsdGhpcy5m b3JtKX07Zm9yKGogaW4gaSl7aWYoaS5oYXNPd25Qcm9wZXJ0eShqKSl7ZD1pW2pdO2g9dGhpcy5m b3JtLmFkZChFeHQuYXBwbHkodGhpcy5nZXROdW1iZXJGaWVsZENvbmZpZygpLHtoaWRlTGFiZWw6 ZD9mYWxzZTp0cnVlLG5hbWU6Zi5nZXRBdHRyKCJpc19tdWx0aXBsZSIpPyh0aGlzLmFuc3dlck5h bWUrIl8iK2opOnRoaXMuYW5zd2VyTmFtZSxsYWJlbFNlcGFyYXRvcjoiIixmaWVsZExhYmVsOmR9 KSk7aC5vbigiY2hhbmdlIixjLHRoaXMpO3RoaXMuYW5zd2VyRmllbGRzW2pdPWh9fXRoaXMuZG9M YXlvdXQoKX0sZ2V0TnVtYmVyRmllbGRDb25maWc6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmdldEl0 ZW1Db25maWcoKTtyZXR1cm57eHR5cGU6Im51bWJlcmZpZWxkIixsYWJlbFN0eWxlOiJ0ZXh0LWFs aWduOiByaWdodDsiLGFsbG93TmVnYXRpdmU6Yy5nZXRBdHRyKCJhbGxvd19uZWdhdGl2ZSIpP3Ry dWU6ZmFsc2UsYWxsb3dEZWNpbWFsczpjLmdldEF0dHIoImFsbG93X2RlY2ltYWxzIik/dHJ1ZTpm YWxzZSxyZWFkT25seToodGhpcy5tb2RlPT0icmVzdWx0Inx8dGhpcy5tb2RlPT0idmlldyIpLGRl Y2ltYWxQcmVjaXNpb246Yy5nZXRBdHRyKCJwcmVjaXNpb24iKSx3aWR0aDoxMDB9fSxpbml0UmVz dWx0UGFuZWw6ZnVuY3Rpb24oKXtpZighdGhpcy5yZXN1bHRQYW5lbCl7dGhpcy5yZXN1bHRQYW5l bD10aGlzLmFkZCh7Ym9yZGVyOmZhbHNlLGF1dG9IZWlnaHQ6dHJ1ZX0pO2lmKHRoaXMubGF5b3V0 LmxheW91dCl7dGhpcy5kb0xheW91dCgpfX19LHNob3dBbnN3ZXJFcnJvcnM6ZnVuY3Rpb24oKXtp Zih0aGlzLnJlbmRlcmVkKXt0cnl7dmFyIGksZixkLGgsYyxqO2Y9dGhpcy5pc0NvcnJlY3QoKTt0 aGlzLmluaXRSZXN1bHRQYW5lbCgpO2lmKCF0aGlzLnJlc3VsdFBhbmVsLnJlbmRlcmVkKXt0aGlz LnJlc3VsdFBhbmVsLm9uKCJhZnRlcnJlbmRlciIsdGhpcy5zaG93QW5zd2VyRXJyb3JzLHRoaXMp O3JldHVybn1pPXtpZDphLmlkKHRoaXMuYW5zd2VyTmFtZSsiLXJlc3VsdCIpLHRhZzoiZGl2In07 aWYoZil7aS5odG1sPSc8c3BhbiBzdHlsZT0iY29sb3I6IGdyZWVuIj7QktC10YDQvdC+PC9zcGFu Pid9ZWxzZXtkPUV4dC5kZWNvZGUodGhpcy5nZXRJdGVtQ29uZmlnKCkuZ2V0QXR0cigiY29ycmVj dF9hbnN3ZXIiKSk7aD1FeHQuZGVjb2RlKHRoaXMuZ2V0SXRlbUNvbmZpZygpLmdldEF0dHIoImFu c3dlcnMiKSk7Yz1bXTtmb3IoaiBpbiBoKXtpZihoLmhhc093blByb3BlcnR5KGopKXtjLnB1c2go e3RhZzoiZGl2IixzdHlsZToiY2xlYXI6Ym90aDsiLGNuOlt7dGFnOiJkaXYiLHN0eWxlOiJ3aWR0 aDogMTAwcHg7IHRleHQtYWxpZ246cmlnaHQ7IGZsb2F0OiBsZWZ0OyBwYWRkaW5nLXJpZ2h0OjEw cHg7IixodG1sOmhbal19LHt0YWc6ImRpdiIsc3R5bGU6ImZsb2F0OiBsZWZ0IixodG1sOmRbal19 XX0pfX1jLnVuc2hpZnQoe3RhZzoiZGl2IixodG1sOiLQn9GA0LDQstC40LvRjNC90YvQuSDQvtGC 0LLQtdGCOiJ9KTtpLmNuPVt7aHRtbDonPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPtCe0YLQstC1 0YIg0L3QtdCy0LXRgNC90YvQuTwvc3Bhbj4nfSx7dGFnOiJkaXYiLGNuOmN9XTt0aGlzLnJlc3Vs dFBhbmVsLmJvZHkuc2V0U3R5bGUoe2JvcmRlcjoiMXB4IHNvbGlkIHJlZCIscGFkZGluZzoiNXB4 In0pfUV4dC5Eb21IZWxwZXIub3ZlcndyaXRlKHRoaXMucmVzdWx0UGFuZWwuYm9keSxpKX1jYXRj aChnKXthLmV4Y2VwdGlvbihnKX19ZWxzZXt0aGlzLm9uKCJhZnRlcnJlbmRlciIsdGhpcy5zaG93 QW5zd2VyRXJyb3JzLHRoaXMpfX0sdmFsaWRhdGU6ZnVuY3Rpb24oKXt2YXIgYz10cnVlO2EuZWFj aCh0aGlzLmFuc3dlckZpZWxkcyxmdW5jdGlvbihkKXtpZihkLmdldFZhbHVlKCk9PT0iIil7Yz1m YWxzZTtyZXR1cm4gZmFsc2V9fSx0aGlzKTtyZXR1cm4gY319KTthLlF1aXpfSXRlbV9RdWVzdGlv blBhbmVsX01lcmdlPUV4dC5leHRlbmQoYS5RdWl6X0l0ZW1fUXVlc3Rpb25QYW5lbF9BYnN0cmFj dCxmdW5jdGlvbigpe3ZhciBkO2Z1bmN0aW9uIGMoKXtpZighZCl7ZD1uZXcgRXh0LlhUZW1wbGF0 ZSgnPGRpdiBjbGFzcz0iaW5pdF90YXJnZXQiPicsJzxkaXYgc3R5bGU9ImhlaWdodDogNDBweDsg d2lkdGg6IDBweDsgZmxvYXQ6IHJpZ2h0OyI+PC9kaXY+JywnPHRwbCBmb3I9InNldF8yIj4nLCc8 ZGl2IGNsYXNzPSJkZF9pdGVtIj57LjpodG1sRW5jb2RlfTwvZGl2PicsIjwvdHBsPiIsJzxkaXYg c3R5bGU9ImNsZWFyOiBib3RoOyI+PC9kaXY+JywiPC9kaXY+IiwnPHRhYmxlIGNsYXNzPSJtZWdy ZV90YWJsZSI+JywnPHRwbCBmb3I9InNldF8xIj4nLCI8dHIgPiIsJzx0ZCBjbGFzcz0idGRfdGV4 dCI+ey46aHRtbEVuY29kZX08L3RkPicsJzx0ZCBjbGFzcz0idGRfdGFyZ2V0Ij48ZGl2IHN0eWxl PSJ3aWR0aDoxMDBweCI+PC9kaXY+PC90ZD4nLCc8dGQgY2xhc3M9InRkX2NvcnJlY3QiIHN0eWxl PSJkaXNwbGF5OiBub25lIj48ZGl2IHN0eWxlPSJ3aWR0aDoxMDBweCI+PC9kaXY+PC90ZD4nLCI8 L3RyPiIsIjwvdHBsPiIsIjwvdGFibGU+Iil9cmV0dXJuIGR9ZnVuY3Rpb24gZihpLGope0V4dC5z ZWxlY3QoIi5tZWdyZV90YWJsZSB0ciIsdHJ1ZSxpKS5lYWNoKGZ1bmN0aW9uKHApe3ZhciBrLG0s byxsPUV4dC51dGlsLkZvcm1hdCxuO2s9bC5odG1sRGVjb2RlKHAucXVlcnkoIi50ZF90ZXh0Iiku c2hpZnQoKS5pbm5lckhUTUwpO0V4dC5lYWNoKGosZnVuY3Rpb24ocSl7aWYoaz09PXFbMF0pe209 cVsxXX19KTtuPXAuc2VsZWN0KCIudGRfdGFyZ2V0IikuZmlyc3QoKTtjb3JyZWN0QW5zd2VyVGFy Z2V0PXAuc2VsZWN0KCIudGRfY29ycmVjdCIpLmZpcnN0KCk7aWYobSl7bz1uLnF1ZXJ5KCIuZGRf aXRlbSIpO289by5sZW5ndGg8MT8iIjpsLmh0bWxEZWNvZGUob1swXS5pbm5lckhUTUwpO2lmKG8h PW0pe24uYWRkQ2xhc3MoIm1lcmdlLXdyb25nIik7Y29ycmVjdEFuc3dlclRhcmdldC51cGRhdGUo bC5odG1sRW5jb2RlKG0pKTtjb3JyZWN0QW5zd2VyVGFyZ2V0LnNob3coKX1lbHNle24uYWRkQ2xh c3MoIm1lcmdlLWNvcnJlY3QiKX19fSk7RXh0LnNlbGVjdCgiLmluaXRfdGFyZ2V0IixmYWxzZSxp KS5zZXRWaXNpYmlsaXR5TW9kZShFeHQuRWxlbWVudC5ESVNQTEFZKS5oaWRlKCl9ZnVuY3Rpb24g ZyhpLGope0V4dC5zZWxlY3QoIi5tZWdyZV90YWJsZSB0ciIsdHJ1ZSxpKS5lYWNoKGZ1bmN0aW9u KG8pe3ZhciBsLG49bnVsbCxrLG09RXh0LnV0aWwuRm9ybWF0O2w9bS5odG1sRGVjb2RlKG8ucXVl cnkoIi50ZF90ZXh0Iikuc2hpZnQoKS5pbm5lckhUTUwpO0V4dC5lYWNoKGosZnVuY3Rpb24ocSl7 dmFyIHI9cVswXTt2YXIgcD1xWzFdO2lmKGw9PT1yKXtuPXB9fSk7aWYobil7RXh0LmVhY2goRXh0 LnF1ZXJ5KCIuZGRfaXRlbSIsaSksZnVuY3Rpb24ocCl7aWYobS5odG1sRGVjb2RlKHAuaW5uZXJI VE1MKT09PW4pe2s9cDtyZXR1cm4gZmFsc2V9fSk7by5zZWxlY3QoIi50ZF90YXJnZXQiKS5maXJz dCgpLmluc2VydEZpcnN0KGspfWVsc2V7az1vLnF1ZXJ5KCIudGRfdGFyZ2V0IC5kZF9pdGVtIiku c2hpZnQoKTtpZihrKXtFeHQuc2VsZWN0KCIuaW5pdF90YXJnZXQiLGZhbHNlLGkpLmZpcnN0KCku aW5zZXJ0Rmlyc3Qoayl9fX0pfWZ1bmN0aW9uIGUoaSl7dmFyIGo9W107RXh0LnNlbGVjdCgiLm1l Z3JlX3RhYmxlIHRyIix0cnVlLGkpLmVhY2goZnVuY3Rpb24obyl7dmFyIGwsbj0iIixrLG09RXh0 LnV0aWwuRm9ybWF0O2w9bS5odG1sRGVjb2RlKG8ucXVlcnkoIi50ZF90ZXh0Iikuc2hpZnQoKS5p bm5lckhUTUwpO2s9by5xdWVyeSgiLnRkX3RhcmdldCAuZGRfaXRlbSIpLnNoaWZ0KCk7aWYoayl7 bj1tLmh0bWxEZWNvZGUoay5pbm5lckhUTUwpfWoucHVzaChbbCxuXSl9KTtyZXR1cm4gan1mdW5j dGlvbiBoKGosaSxrKXt2YXIgbD0iZGRncm91cF8iK2k7RXh0LnNlbGVjdCgiLmRkX2l0ZW0iLHRy dWUsaikuZWFjaChmdW5jdGlvbihtKXttLnNldFN0eWxlKCJjdXJzb3IiLCJtb3ZlIik7bS5kZD1u ZXcgRXh0LmRkLkRyYWdTb3VyY2UobSx7ZGRHcm91cDpsLGlzVGFyZ2V0OmZhbHNlLGVuZERyYWc6 ZnVuY3Rpb24oKXtrKGUoaikpfSxiNFN0YXJ0RHJhZzpmdW5jdGlvbihuLG8pe3RoaXMuY29uc3Ry YWluVG8oRXh0LmdldEJvZHkoKSl9fSl9KTtFeHQuc2VsZWN0KCIuaW5pdF90YXJnZXQiLHRydWUs aikuZWFjaChmdW5jdGlvbihtKXttLmRkPW5ldyBFeHQuZGQuRHJvcFRhcmdldChtLHtkZEdyb3Vw Omwsb3ZlckNsYXNzOiJ0YXJnZXQtb3ZlciIsbm90aWZ5RHJvcDpmdW5jdGlvbihuKXtFeHQuZ2V0 KHRoaXMuZ2V0RWwoKSkuaW5zZXJ0Rmlyc3Qobi5nZXRFbCgpKTt0aGlzLm5vdGlmeU91dCgpO3Jl dHVybiB0cnVlfX0pfSk7RXh0LnNlbGVjdCgiLnRkX3RhcmdldCIsdHJ1ZSxqKS5lYWNoKGZ1bmN0 aW9uKG0pe20uZGQ9bmV3IEV4dC5kZC5Ecm9wVGFyZ2V0KG0se2RkR3JvdXA6bCxvdmVyQ2xhc3M6 InRhcmdldC1vdmVyIixpc0VtcHR5VGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEV4dC5nZXQodGhp cy5nZXRFbCgpKS5xdWVyeSgiLmRkX2l0ZW0iKS5sZW5ndGg9PT0wfSxub3RpZnlEcm9wOmZ1bmN0 aW9uKG4pe2lmKHRoaXMuaXNFbXB0eVRhcmdldCgpKXtFeHQuZ2V0KHRoaXMuZ2V0RWwoKSkuaW5z ZXJ0Rmlyc3Qobi5nZXRFbCgpKTt0aGlzLm5vdGlmeU91dCgpO3JldHVybiB0cnVlfWVsc2V7cmV0 dXJuIGZhbHNlfX19KX0pfXJldHVybntsYXlvdXQ6ImF1dG8iLGF1dG9IZWlnaHQ6dHJ1ZSx0cGw6 bnVsbCxhbnN3ZXI6bnVsbCxjb25zdHJ1Y3RvcjpmdW5jdGlvbihqKXt0aGlzLmFuc3dlcj17fTt0 aGlzLmFkZENsYXNzKCJtZXJnZV9xdWVzdGlvbiIpO2EuUXVpel9JdGVtX1F1ZXN0aW9uUGFuZWxf TWVyZ2Uuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsaik7dGhpcy5hZGRDbGFzcyh0 aGlzLmdldEFuc3dlck5hbWUoKSk7dmFyIGk9dGhpcy5nZXRJdGVtQ29uZmlnKCk7aS5vbigic2V0 XzFjaGFuZ2UiLHRoaXMudXBkYXRlUXVlc3Rpb24sdGhpcyk7aS5vbigic2V0XzJjaGFuZ2UiLHRo aXMudXBkYXRlUXVlc3Rpb24sdGhpcyk7aS5vbigiZGVsZXRlIixmdW5jdGlvbigpe2kudW4oInNl dF8xY2hhbmdlIix0aGlzLnVwZGF0ZVF1ZXN0aW9uLHRoaXMpO2kudW4oInNldF8yY2hhbmdlIix0 aGlzLnVwZGF0ZVF1ZXN0aW9uLHRoaXMpfSx0aGlzKTt0aGlzLm9uKCJyZW5kZXIiLHRoaXMudXBk YXRlUXVlc3Rpb24sdGhpcyl9LHVwZGF0ZVF1ZXN0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXMucmVu ZGVyZWQpe3JldHVybn12YXIgaj10aGlzLmdldEl0ZW1Db25maWcoKSxpLGs9dGhpcyxuPUV4dC5k ZWNvZGUoai5nZXQoInNldF8xIikpLGw9RXh0LmRlY29kZShqLmdldCgic2V0XzIiKSk7dHJ5e2Mo KS5vdmVyd3JpdGUodGhpcy5ib2R5LHtzZXRfMTpFeHQuaXNBcnJheShuKT9uOltdLHNldF8yOkV4 dC5pc0FycmF5KGwpP2w6W119KTtpPWZ1bmN0aW9uKG8pe2suYW5zd2VyPW87ay5maXJlRXZlbnQo ImNoYW5nZSIpfTtpZih0aGlzLm1vZGU9PSJ0ZXN0aW5nIil7dHJ5e2godGhpcy5nZXRFbCgpLmRv bSx0aGlzLmdldEFuc3dlck5hbWUoKSxpKX1jYXRjaChtKXthLmV4Y2VwdGlvbihtKX19fWNhdGNo KG0pe2EuZXhjZXB0aW9uKG0pO3RoaXMuYm9keS51cGRhdGUoKX10aGlzLl91cGRhdGVBbnN3ZXIo KX0sX3VwZGF0ZUFuc3dlcjpmdW5jdGlvbigpe3ZhciBpPUV4dC5pc0FycmF5KHRoaXMuYW5zd2Vy KT90aGlzLmFuc3dlcjpbXTtpZih0aGlzLnJlbmRlcmVkKXtnKHRoaXMuZ2V0RWwoKS5kb20saSk7 aWYodGhpcy5tb2RlPT0icmVzdWx0Iil7dGhpcy5zaG93QW5zd2VyRXJyb3JzKCl9fX0sc2V0QW5z d2VyOmZ1bmN0aW9uKGkpe2lmKHRoaXMuZ2V0QW5zd2VyKCkhPT1pKXtpPWk/RXh0LmRlY29kZShp KTpbXTt0aGlzLmFuc3dlcj1pO3RoaXMuX3VwZGF0ZUFuc3dlcigpfX0sZ2V0QW5zd2VyOmZ1bmN0 aW9uKCl7cmV0dXJuIHRoaXMuYW5zd2VyP0V4dC5lbmNvZGUodGhpcy5hbnN3ZXIpOm51bGx9LGlu aXRJdGVtQ29uZmlnOmZ1bmN0aW9uKGkpe2kuYWRkQXR0cigic2V0XzEiLCIiKTtpLmFkZEF0dHIo InNldF8yIiwiIik7aS5hZGRBdHRyKCJjb3JyZWN0X2Fuc3dlciIsIiIpfSx2YWxpZGF0ZTpmdW5j dGlvbigpe3ZhciBtPTAsaj0wLGk9dGhpcy5nZXRJdGVtQ29uZmlnKCksbCxrO2EuZWFjaCh0aGlz LmFuc3dlcixmdW5jdGlvbihuKXtpZihuWzBdJiZuWzFdKXttKyt9fSk7bD1FeHQuZGVjb2RlKGku Z2V0KCJzZXRfMSIpKTtrPUV4dC5kZWNvZGUoaS5nZXQoInNldF8yIikpO2o9TWF0aC5taW4obD9s Lmxlbmd0aDowLGs/ay5sZW5ndGg6MCk7cmV0dXJuIG0+PWp9LHNob3dBbnN3ZXJFcnJvcnM6ZnVu Y3Rpb24oKXt0cnl7Zih0aGlzLmdldEVsKCkuZG9tLEV4dC5kZWNvZGUodGhpcy5nZXRJdGVtQ29u ZmlnKCkuZ2V0KCJjb3JyZWN0X2Fuc3dlciIpKSl9Y2F0Y2goaSl7YS5leGNlcHRpb24oaSl9fX19 KCkpO0V4dC5yZWcoIm1lcmdlX3F1ZXN0aW9uIixhLlF1aXpfSXRlbV9RdWVzdGlvblBhbmVsX01l cmdlKTthLlRlbXBsYXRlX1F1aXpSZXN1bHQ9RXh0LmV4dGVuZChFeHQuWFRlbXBsYXRlLHttYXN0 ZXJfbmFtZXM6bnVsbCxhcHBseTpmdW5jdGlvbihjKXtpZih0aGlzLm1hc3Rlcl9uYW1lcyl7YS5l YWNoKHRoaXMubWFzdGVyX25hbWVzLGZ1bmN0aW9uKGQsZSl7aWYoYy5oYXNPd25Qcm9wZXJ0eShk KSl7Y1tlXT1jW2RdfWVsc2V7Y1tlXT1kfX0pfXJldHVybiBhLlRlbXBsYXRlX1F1aXpSZXN1bHQu c3VwZXJjbGFzcy5hcHBseS5jYWxsKHRoaXMsYyl9LGNvbnN0cnVjdG9yOmZ1bmN0aW9uKGQpe2lm KGQpe3RoaXMubWFzdGVyX25hbWVzPWR9dmFyIGM9JzxkaXYgY2xhc3M9InF1aXotcmVzdWx0LXJl cG9ydCI+ICAgIDx0cGwgaWY9ImNvbW1vbl90ZXh0Ij4gICAgICAgIDxwPntjb21tb25fdGV4dDp0 aGlzLm5sMmJyQW5kRXNjYXBlfTwvcD4gICAgPC90cGw+ICAgIDx0cGwgaWY9InNob3dfZ3JhZGUi PiAgICAgICAgPHA+0J3QsNCx0YDQsNC90L4g0LHQsNC70L7Qsjoge3JhdGU6cm91bmQoMCl9INC4 0Lcge3RvdGFsX3JhdGV9PC9wPiAgICA8L3RwbD4gICAgPHRwbCBpZj0ic2hvd19wZXJjZW50Ij4g ICAgICAgIDxwPtCf0YDQvtC50LTQtdC90L4ge3BlcmNlbnQ6cm91bmQoMCl9JSDRgtC10YHRgtCw PC9wPiAgICA8L3RwbD4gICAgPHRwbCBpZj0ic2hvd19jb3VudGluZyI+ICAgICAgICA8cD7QntCx 0YnQtdC1INC60L7Qu9C40YfQtdGB0YLQstC+INCy0L7Qv9GA0L7RgdC+0LI6IHt0b3RhbF9xdWFu dGl0eX08L3A+ICAgICAgICA8cD7QmtC+0LvQuNGH0LXRgdGC0LLQviDQv9GA0LDQstC40LvRjNC9 0YvRhSDQvtGC0LLQtdGC0L7Qsjoge2NvcnJlY3RfcXVhbnRpdHl9PC9wPiAgICAgICAgPHA+0JrQ vtC70LjRh9C10YHRgtCy0L4g0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9GFINC+0YLQstC10YLQvtCy OiB7d3JvbmdfcXVhbnRpdHl9PC9wPiAgICA8L3RwbD4gICAgPHRwbCBpZj0idGV4dCI+ICAgICAg ICA8cD57dGV4dDp0aGlzLm5sMmJyQW5kRXNjYXBlfTwvcD4gICAgPC90cGw+PC9kaXY+Jzt0aGlz Lm5sMmJyQW5kRXNjYXBlPWZ1bmN0aW9uKGUpe3JldHVybiBFeHQudXRpbC5Gb3JtYXQubmwyYnIo RXh0LnV0aWwuRm9ybWF0Lmh0bWxFbmNvZGUoZSkpfTthLlRlbXBsYXRlX1F1aXpSZXN1bHQuc3Vw ZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYyl9fSl9Ow== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: text/css Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/css/ext-all.css LyohCiAqIEV4dCBKUyBMaWJyYXJ5IDMuMC4wCiAqIENvcHlyaWdodChjKSAyMDA2LTIwMDkgRXh0 IEpTLCBMTEMKICogbGljZW5zaW5nQGV4dGpzLmNvbQogKiBodHRwOi8vd3d3LmV4dGpzLmNvbS9s aWNlbnNlCiAqLwpodG1sLGJvZHksZGl2LGRsLGR0LGRkLHVsLG9sLGxpLGgxLGgyLGgzLGg0LGg1 LGg2LHByZSxmb3JtLGZpZWxkc2V0LGlucHV0LHAsYmxvY2txdW90ZSx0aCx0ZHttYXJnaW46MDtw YWRkaW5nOjA7fWltZyxib2R5LGh0bWx7Ym9yZGVyOjA7fWFkZHJlc3MsY2FwdGlvbixjaXRlLGNv ZGUsZGZuLGVtLHN0cm9uZyx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9y bWFsO31vbCx1bCB7bGlzdC1zdHlsZTpub25lO31jYXB0aW9uLHRoIHt0ZXh0LWFsaWduOmxlZnQ7 fWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO31xOmJlZm9yZSxxOmFmdGVye2NvbnRl bnQ6Jyc7fS5leHQtZWwtbWFzayB7DQogICAgei1pbmRleDogMTAwOw0KICAgIHBvc2l0aW9uOiBh YnNvbHV0ZTsNCiAgICB0b3A6MDsNCiAgICBsZWZ0OjA7DQogICAgLW1vei1vcGFjaXR5OiAwLjU7 DQogICAgb3BhY2l0eTogLjUwOw0KICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT01MCk7DQogICAg d2lkdGg6IDEwMCU7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIHpvb206IDE7DQp9DQoNCi5leHQt ZWwtbWFzay1tc2cgew0KICAgIHotaW5kZXg6IDIwMDAxOw0KICAgIHBvc2l0aW9uOiBhYnNvbHV0 ZTsNCiAgICB0b3A6IDA7DQogICAgbGVmdDogMDsNCiAgICBib3JkZXI6MXB4IHNvbGlkOw0KICAg IGJhY2tncm91bmQ6cmVwZWF0LXggMCAtMTZweDsNCiAgICBwYWRkaW5nOjJweDsNCn0NCg0KLmV4 dC1lbC1tYXNrLW1zZyBkaXYgew0KICAgIHBhZGRpbmc6NXB4IDEwcHggNXB4IDEwcHg7DQogICAg Ym9yZGVyOjFweCBzb2xpZDsNCiAgICBjdXJzb3I6d2FpdDsNCn0NCg0KLmV4dC1zaGltIHsNCiAg ICBwb3NpdGlvbjphYnNvbHV0ZTsNCiAgICB2aXNpYmlsaXR5OmhpZGRlbjsNCiAgICBsZWZ0OjA7 DQogICAgdG9wOjA7DQogICAgb3ZlcmZsb3c6aGlkZGVuOw0KfQ0KDQouZXh0LWllIC5leHQtc2hp bSB7DQogICAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApOw0KfQ0KDQouZXh0LWllNiAuZXh0LXNo aW0gew0KICAgIG1hcmdpbi1sZWZ0OiA1cHg7DQogICAgbWFyZ2luLXRvcDogM3B4Ow0KfQ0KDQou eC1tYXNrLWxvYWRpbmcgZGl2IHsNCiAgICBwYWRkaW5nOjVweCAxMHB4IDVweCAyNXB4Ow0KICAg IGJhY2tncm91bmQ6bm8tcmVwZWF0IDVweCA1cHg7DQogICAgbGluZS1oZWlnaHQ6MTZweDsNCn0N Cg0KLyogY2xhc3MgZm9yIGhpZGluZyBlbGVtZW50cyB3aXRob3V0IHVzaW5nIGRpc3BsYXk6bm9u ZSAqLw0KLngtaGlkZGVuLCAueC1oaWRlLW9mZnNldHMgew0KICAgIHBvc2l0aW9uOmFic29sdXRl ICFpbXBvcnRhbnQ7DQogICAgbGVmdDotMTAwMDBweDsNCiAgICB0b3A6LTEwMDAwcHg7DQogICAg dmlzaWJpbGl0eTpoaWRkZW47DQp9DQoNCi54LWhpZGUtZGlzcGxheSB7DQogICAgZGlzcGxheTpu b25lICFpbXBvcnRhbnQ7DQp9DQoNCi54LWhpZGUtdmlzaWJpbGl0eSB7DQogICAgdmlzaWJpbGl0 eTpoaWRkZW4gIWltcG9ydGFudDsNCn0NCg0KLngtbWFza2VkIHsNCiAgICBvdmVyZmxvdzogaGlk ZGVuICFpbXBvcnRhbnQ7DQp9DQoueC1tYXNrZWQtcmVsYXRpdmUgew0KICAgIHBvc2l0aW9uOiBy ZWxhdGl2ZSAhaW1wb3J0YW50Ow0KfQ0KDQoueC1tYXNrZWQgc2VsZWN0LCAueC1tYXNrZWQgb2Jq ZWN0LCAueC1tYXNrZWQgZW1iZWQgew0KICAgIHZpc2liaWxpdHk6IGhpZGRlbjsNCn0NCg0KLngt bGF5ZXIgew0KICAgIHZpc2liaWxpdHk6IGhpZGRlbjsNCn0NCg0KLngtdW5zZWxlY3RhYmxlLCAu eC11bnNlbGVjdGFibGUgKiB7DQogICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsNCiAgICAta2h0 bWwtdXNlci1zZWxlY3Q6IG5vbmU7DQogICAgLXdlYmtpdC11c2VyLXNlbGVjdDppZ25vcmU7DQp9 DQoNCi54LXJlcGFpbnQgew0KICAgIHpvb206IDE7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdHJh bnNwYXJlbnQ7DQogICAgLW1vei1vdXRsaW5lOiBub25lOw0KfQ0KDQoueC1pdGVtLWRpc2FibGVk IHsNCiAgICBjdXJzb3I6IGRlZmF1bHQ7DQogICAgb3BhY2l0eTogLjY7DQogICAgLW1vei1vcGFj aXR5OiAuNjsNCiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NjApOw0KfQ0KDQoueC1pdGVtLWRp c2FibGVkICogew0KICAgIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50Ow0KfQ0KDQoueC1zcGxp dGJhci1wcm94eSB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHZpc2liaWxpdHk6IGhp ZGRlbjsNCiAgICB6LWluZGV4OiAyMDAwMTsNCiAgICB6b29tOiAxOw0KICAgIGxpbmUtaGVpZ2h0 OiAxcHg7DQogICAgZm9udC1zaXplOiAxcHg7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCn0NCg0K Lngtc3BsaXRiYXItaCwgLngtc3BsaXRiYXItcHJveHktaCB7DQogICAgY3Vyc29yOiBlLXJlc2l6 ZTsNCiAgICBjdXJzb3I6IGNvbC1yZXNpemU7DQp9DQoNCi54LXNwbGl0YmFyLXYsIC54LXNwbGl0 YmFyLXByb3h5LXYgew0KICAgIGN1cnNvcjogcy1yZXNpemU7DQogICAgY3Vyc29yOiByb3ctcmVz aXplOw0KfQ0KDQoueC1jb2xvci1wYWxldHRlIHsNCiAgICB3aWR0aDogMTUwcHg7DQogICAgaGVp Z2h0OiA5MnB4Ow0KICAgIGN1cnNvcjogcG9pbnRlcjsNCn0NCg0KLngtY29sb3ItcGFsZXR0ZSBh IHsNCiAgICBib3JkZXI6IDFweCBzb2xpZDsNCiAgICBmbG9hdDogbGVmdDsNCiAgICBwYWRkaW5n OiAycHg7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgIC1tb3otb3V0bGluZTogMCBu b25lOw0KICAgIG91dGxpbmU6IDAgbm9uZTsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQp9DQoNCi54 LWNvbG9yLXBhbGV0dGUgYTpob3ZlciwgLngtY29sb3ItcGFsZXR0ZSBhLngtY29sb3ItcGFsZXR0 ZS1zZWwgew0KICAgIGJvcmRlcjogMXB4IHNvbGlkOw0KfQ0KDQoueC1jb2xvci1wYWxldHRlIGVt IHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBib3JkZXI6IDFweCBzb2xpZDsNCn0NCg0KLngt Y29sb3ItcGFsZXR0ZSBlbSBzcGFuIHsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgZGlzcGxh eTogYmxvY2s7DQogICAgaGVpZ2h0OiAxMHB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxMHB4Ow0KICAg IHdpZHRoOiAxMHB4Ow0KfQ0KDQoueC1pZS1zaGFkb3cgew0KICAgIGRpc3BsYXk6IG5vbmU7DQog ICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgbGVmdDow Ow0KICAgIHRvcDowOw0KICAgIHpvb206MTsNCn0NCg0KLngtc2hhZG93IHsNCiAgICBkaXNwbGF5 OiBub25lOw0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBvdmVyZmxvdzogaGlkZGVuOw0K ICAgIGxlZnQ6MDsNCiAgICB0b3A6MDsNCn0NCg0KLngtc2hhZG93ICogew0KICAgIG92ZXJmbG93 OiBoaWRkZW47DQp9DQoNCi54LXNoYWRvdyAqIHsNCiAgICBwYWRkaW5nOiAwOw0KICAgIGJvcmRl cjogMDsNCiAgICBtYXJnaW46IDA7DQogICAgY2xlYXI6IG5vbmU7DQogICAgem9vbTogMTsNCn0N Cg0KLyogdG9wICBib3R0b20gKi8NCi54LXNoYWRvdyAueHN0YywgLngtc2hhZG93IC54c2JjIHsN CiAgICBoZWlnaHQ6IDZweDsNCiAgICBmbG9hdDogbGVmdDsNCn0NCg0KLyogY29ybmVycyAqLw0K Lngtc2hhZG93IC54c3RsLCAueC1zaGFkb3cgLnhzdHIsIC54LXNoYWRvdyAueHNibCwgLngtc2hh ZG93IC54c2JyIHsNCiAgICB3aWR0aDogNnB4Ow0KICAgIGhlaWdodDogNnB4Ow0KICAgIGZsb2F0 OiBsZWZ0Ow0KfQ0KDQovKiBzaWRlcyAqLw0KLngtc2hhZG93IC54c2Mgew0KICAgIHdpZHRoOiAx MDAlOw0KfQ0KDQoueC1zaGFkb3cgLnhzbWwsIC54LXNoYWRvdyAueHNtciB7DQogICAgd2lkdGg6 IDZweDsNCiAgICBmbG9hdDogbGVmdDsNCiAgICBoZWlnaHQ6IDEwMCU7DQp9DQoNCi54LXNoYWRv dyAueHNtYyB7DQogICAgZmxvYXQ6IGxlZnQ7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIGJhY2tn cm91bmQ6IHRyYW5zcGFyZW50Ow0KfQ0KDQoueC1zaGFkb3cgLnhzdCwgLngtc2hhZG93IC54c2Ig ew0KICAgIGhlaWdodDogNnB4Ow0KICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgd2lkdGg6IDEw MCU7DQp9DQoNCi54LXNoYWRvdyAueHNtbCB7DQogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQg cmVwZWF0LXkgMCAwOw0KfQ0KDQoueC1zaGFkb3cgLnhzbXIgew0KICAgIGJhY2tncm91bmQ6IHRy YW5zcGFyZW50IHJlcGVhdC15IC02cHggMDsNCn0NCg0KLngtc2hhZG93IC54c3RsIHsNCiAgICBi YWNrZ3JvdW5kOiB0cmFuc3BhcmVudCBuby1yZXBlYXQgMCAwOw0KfQ0KDQoueC1zaGFkb3cgLnhz dGMgew0KICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHJlcGVhdC14IDAgLTMwcHg7DQp9DQoN Ci54LXNoYWRvdyAueHN0ciB7DQogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgcmVwZWF0LXgg MCAtMThweDsNCn0NCg0KLngtc2hhZG93IC54c2JsIHsNCiAgICBiYWNrZ3JvdW5kOiB0cmFuc3Bh cmVudCBuby1yZXBlYXQgMCAtMTJweDsNCn0NCg0KLngtc2hhZG93IC54c2JjIHsNCiAgICBiYWNr Z3JvdW5kOiB0cmFuc3BhcmVudCByZXBlYXQteCAwIC0zNnB4Ow0KfQ0KDQoueC1zaGFkb3cgLnhz YnIgew0KICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHJlcGVhdC14IDAgLTZweDsNCn0NCg0K LmxvYWRpbmctaW5kaWNhdG9yIHsNCiAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgbGVmdDsNCiAg ICBwYWRkaW5nLWxlZnQ6IDIwcHg7DQogICAgbGluZS1oZWlnaHQ6IDE2cHg7DQogICAgbWFyZ2lu OiAzcHg7DQp9DQoNCi54LXRleHQtcmVzaXplIHsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQog ICAgbGVmdDogLTEwMDBweDsNCiAgICB0b3A6IC0xMDAwcHg7DQogICAgdmlzaWJpbGl0eTogaGlk ZGVuOw0KICAgIHpvb206IDE7DQp9DQoNCi54LWRyYWctb3ZlcmxheSB7DQogICAgd2lkdGg6IDEw MCU7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIGRpc3BsYXk6IG5vbmU7DQogICAgcG9zaXRpb246 IGFic29sdXRlOw0KICAgIGxlZnQ6IDA7DQogICAgdG9wOiAwOw0KICAgIGJhY2tncm91bmQtaW1h Z2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L3MuZ2lmKTsNCiAgICB6LWluZGV4OiAyMDAwMDsNCn0N Cg0KLngtY2xlYXIgew0KICAgIGNsZWFyOmJvdGg7DQogICAgaGVpZ2h0OjA7DQogICAgb3ZlcmZs b3c6aGlkZGVuOw0KICAgIGxpbmUtaGVpZ2h0OjA7DQogICAgZm9udC1zaXplOjA7DQp9DQoNCi54 LXNwb3RsaWdodCB7DQogICAgei1pbmRleDogODk5OTsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7 DQogICAgdG9wOjA7DQogICAgbGVmdDowOw0KICAgIC1tb3otb3BhY2l0eTogMC41Ow0KICAgIG9w YWNpdHk6IC41MDsNCiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NTApOw0KICAgIHdpZHRoOjA7 DQogICAgaGVpZ2h0OjA7DQogICAgem9vbTogMTsNCn0NCg0KI3gtaGlzdG9yeS1mcmFtZSB7DQog ICAgcG9zaXRpb246YWJzb2x1dGU7DQogICAgdG9wOi0xcHg7DQogICAgbGVmdDowOw0KCXdpZHRo OjFweDsNCiAgICBoZWlnaHQ6MXB4Ow0KICAgIHZpc2liaWxpdHk6aGlkZGVuOw0KfQ0KDQojeC1o aXN0b3J5LWZpZWxkIHsNCiAgICBwb3NpdGlvbjphYnNvbHV0ZTsNCiAgICB0b3A6MDsNCiAgICBs ZWZ0Oi0xcHg7DQoJd2lkdGg6MXB4Ow0KICAgIGhlaWdodDoxcHg7DQogICAgdmlzaWJpbGl0eTpo aWRkZW47DQp9DQoueC1yZXNpemFibGUtaGFuZGxlIHsNCiAgICBwb3NpdGlvbjphYnNvbHV0ZTsN CiAgICB6LWluZGV4OjEwMDsNCiAgICAvKiBpZSBuZWVkcyB0aGVzZSAqLw0KICAgIGZvbnQtc2l6 ZToxcHg7DQogICAgbGluZS1oZWlnaHQ6NnB4Ow0KICAgIG92ZXJmbG93OmhpZGRlbjsNCglmaWx0 ZXI6YWxwaGEob3BhY2l0eT0wKTsNCglvcGFjaXR5OjA7DQoJem9vbToxOw0KfQ0KDQoueC1yZXNp emFibGUtaGFuZGxlLWVhc3R7DQogICAgd2lkdGg6NnB4Ow0KICAgIGN1cnNvcjplLXJlc2l6ZTsN CiAgICByaWdodDowOw0KICAgIHRvcDowOw0KICAgIGhlaWdodDoxMDAlOw0KfQ0KDQouZXh0LWll IC54LXJlc2l6YWJsZS1oYW5kbGUtZWFzdCB7DQogICAgbWFyZ2luLXJpZ2h0Oi0xcHg7IC8qSUUg cm91bmRpbmcgZXJyb3IqLw0KfQ0KDQoueC1yZXNpemFibGUtaGFuZGxlLXNvdXRoew0KICAgIHdp ZHRoOjEwMCU7DQogICAgY3Vyc29yOnMtcmVzaXplOw0KICAgIGxlZnQ6MDsNCiAgICBib3R0b206 MDsNCiAgICBoZWlnaHQ6NnB4Ow0KfQ0KDQouZXh0LWllIC54LXJlc2l6YWJsZS1oYW5kbGUtc291 dGggew0KICAgIG1hcmdpbi1ib3R0b206LTFweDsgLypJRSByb3VuZGluZyBlcnJvciovDQp9DQoN Ci54LXJlc2l6YWJsZS1oYW5kbGUtd2VzdHsNCiAgICB3aWR0aDo2cHg7DQogICAgY3Vyc29yOnct cmVzaXplOw0KICAgIGxlZnQ6MDsNCiAgICB0b3A6MDsNCiAgICBoZWlnaHQ6MTAwJTsNCn0NCg0K LngtcmVzaXphYmxlLWhhbmRsZS1ub3J0aHsNCiAgICB3aWR0aDoxMDAlOw0KICAgIGN1cnNvcjpu LXJlc2l6ZTsNCiAgICBsZWZ0OjA7DQogICAgdG9wOjA7DQogICAgaGVpZ2h0OjZweDsNCn0NCg0K LngtcmVzaXphYmxlLWhhbmRsZS1zb3V0aGVhc3R7DQogICAgd2lkdGg6NnB4Ow0KICAgIGN1cnNv cjpzZS1yZXNpemU7DQogICAgcmlnaHQ6MDsNCiAgICBib3R0b206MDsNCiAgICBoZWlnaHQ6NnB4 Ow0KICAgIHotaW5kZXg6MTAxOw0KfQ0KDQoueC1yZXNpemFibGUtaGFuZGxlLW5vcnRod2VzdHsN CiAgICB3aWR0aDo2cHg7DQogICAgY3Vyc29yOm53LXJlc2l6ZTsNCiAgICBsZWZ0OjA7DQogICAg dG9wOjA7DQogICAgaGVpZ2h0OjZweDsNCiAgICB6LWluZGV4OjEwMTsNCn0NCg0KLngtcmVzaXph YmxlLWhhbmRsZS1ub3J0aGVhc3R7DQogICAgd2lkdGg6NnB4Ow0KICAgIGN1cnNvcjpuZS1yZXNp emU7DQogICAgcmlnaHQ6MDsNCiAgICB0b3A6MDsNCiAgICBoZWlnaHQ6NnB4Ow0KICAgIHotaW5k ZXg6MTAxOw0KfQ0KDQoueC1yZXNpemFibGUtaGFuZGxlLXNvdXRod2VzdHsNCiAgICB3aWR0aDo2 cHg7DQogICAgY3Vyc29yOnN3LXJlc2l6ZTsNCiAgICBsZWZ0OjA7DQogICAgYm90dG9tOjA7DQog ICAgaGVpZ2h0OjZweDsNCiAgICB6LWluZGV4OjEwMTsNCn0NCg0KLngtcmVzaXphYmxlLW92ZXIg LngtcmVzaXphYmxlLWhhbmRsZSwgLngtcmVzaXphYmxlLXBpbm5lZCAueC1yZXNpemFibGUtaGFu ZGxlew0KICAgIGZpbHRlcjphbHBoYShvcGFjaXR5PTEwMCk7DQoJb3BhY2l0eToxOw0KfQ0KDQou eC1yZXNpemFibGUtb3ZlciAueC1yZXNpemFibGUtaGFuZGxlLWVhc3QsIC54LXJlc2l6YWJsZS1w aW5uZWQgLngtcmVzaXphYmxlLWhhbmRsZS1lYXN0LA0KLngtcmVzaXphYmxlLW92ZXIgLngtcmVz aXphYmxlLWhhbmRsZS13ZXN0LCAueC1yZXNpemFibGUtcGlubmVkIC54LXJlc2l6YWJsZS1oYW5k bGUtd2VzdA0Kew0KCWJhY2tncm91bmQtcG9zaXRpb246IGxlZnQ7DQp9DQoNCi54LXJlc2l6YWJs ZS1vdmVyIC54LXJlc2l6YWJsZS1oYW5kbGUtc291dGgsIC54LXJlc2l6YWJsZS1waW5uZWQgLngt cmVzaXphYmxlLWhhbmRsZS1zb3V0aCwNCi54LXJlc2l6YWJsZS1vdmVyIC54LXJlc2l6YWJsZS1o YW5kbGUtbm9ydGgsIC54LXJlc2l6YWJsZS1waW5uZWQgLngtcmVzaXphYmxlLWhhbmRsZS1ub3J0 aA0Kew0KICAgIGJhY2tncm91bmQtcG9zaXRpb246IHRvcDsNCn0NCg0KLngtcmVzaXphYmxlLW92 ZXIgLngtcmVzaXphYmxlLWhhbmRsZS1zb3V0aGVhc3QsIC54LXJlc2l6YWJsZS1waW5uZWQgLngt cmVzaXphYmxlLWhhbmRsZS1zb3V0aGVhc3R7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogdG9w IGxlZnQ7DQp9DQoNCi54LXJlc2l6YWJsZS1vdmVyIC54LXJlc2l6YWJsZS1oYW5kbGUtbm9ydGh3 ZXN0LCAueC1yZXNpemFibGUtcGlubmVkIC54LXJlc2l6YWJsZS1oYW5kbGUtbm9ydGh3ZXN0ew0K ICAgIGJhY2tncm91bmQtcG9zaXRpb246Ym90dG9tIHJpZ2h0Ow0KfQ0KDQoueC1yZXNpemFibGUt b3ZlciAueC1yZXNpemFibGUtaGFuZGxlLW5vcnRoZWFzdCwgLngtcmVzaXphYmxlLXBpbm5lZCAu eC1yZXNpemFibGUtaGFuZGxlLW5vcnRoZWFzdHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBi b3R0b20gbGVmdDsNCn0NCg0KLngtcmVzaXphYmxlLW92ZXIgLngtcmVzaXphYmxlLWhhbmRsZS1z b3V0aHdlc3QsIC54LXJlc2l6YWJsZS1waW5uZWQgLngtcmVzaXphYmxlLWhhbmRsZS1zb3V0aHdl c3R7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogdG9wIHJpZ2h0Ow0KfQ0KDQoueC1yZXNpemFi bGUtcHJveHl7DQogICAgYm9yZGVyOiAxcHggZGFzaGVkOw0KICAgIHBvc2l0aW9uOmFic29sdXRl Ow0KICAgIG92ZXJmbG93OmhpZGRlbjsNCiAgICBkaXNwbGF5Om5vbmU7DQoJbGVmdDowOw0KICAg IHRvcDowOw0KICAgIHotaW5kZXg6NTAwMDA7DQp9DQoNCi54LXJlc2l6YWJsZS1vdmVybGF5ew0K ICAgIHdpZHRoOjEwMCU7DQoJaGVpZ2h0OjEwMCU7DQoJZGlzcGxheTpub25lOw0KCXBvc2l0aW9u OmFic29sdXRlOw0KCWxlZnQ6MDsNCgl0b3A6MDsNCgl6LWluZGV4OjIwMDAwMDsNCgktbW96LW9w YWNpdHk6IDA7DQogICAgb3BhY2l0eTowOw0KICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT0wKTsN Cn0NCi54LXRhYi1wYW5lbCB7CiAgICBvdmVyZmxvdzpoaWRkZW47Cn0KCi54LXRhYi1wYW5lbC1o ZWFkZXIsIC54LXRhYi1wYW5lbC1mb290ZXIgewoJYm9yZGVyOiAxcHggc29saWQ7CiAgICBvdmVy ZmxvdzpoaWRkZW47CiAgICB6b29tOjE7Cn0KCi54LXRhYi1wYW5lbC1oZWFkZXIgewoJYm9yZGVy OiAxcHggc29saWQ7CglwYWRkaW5nLWJvdHRvbTogMnB4Owp9CgoueC10YWItcGFuZWwtZm9vdGVy IHsKCWJvcmRlcjogMXB4IHNvbGlkOwoJcGFkZGluZy10b3A6IDJweDsKfQoKLngtdGFiLXN0cmlw LXdyYXAgewoJd2lkdGg6MTAwJTsKICAgIG92ZXJmbG93OmhpZGRlbjsKICAgIHBvc2l0aW9uOnJl bGF0aXZlOwogICAgem9vbToxOwp9Cgp1bC54LXRhYi1zdHJpcCB7CglkaXNwbGF5OmJsb2NrOwog ICAgd2lkdGg6NTAwMHB4OwogICAgem9vbToxOwp9Cgp1bC54LXRhYi1zdHJpcC10b3B7CglwYWRk aW5nLXRvcDogMXB4OwoJYmFja2dyb3VuZDogcmVwZWF0LXggYm90dG9tOwoJYm9yZGVyLWJvdHRv bTogMXB4IHNvbGlkOwp9Cgp1bC54LXRhYi1zdHJpcC1ib3R0b217CglwYWRkaW5nLWJvdHRvbTog MXB4OwoJYmFja2dyb3VuZDogcmVwZWF0LXggdG9wOwoJYm9yZGVyLXRvcDogMXB4IHNvbGlkOwoJ Ym9yZGVyLWJvdHRvbTogMCBub25lOwp9CgoueC10YWItcGFuZWwtaGVhZGVyLXBsYWluIC54LXRh Yi1zdHJpcC10b3AgewogICAgYmFja2dyb3VuZDp0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAg cGFkZGluZy10b3A6MCAhaW1wb3J0YW50Owp9CgoueC10YWItcGFuZWwtaGVhZGVyLXBsYWluIHsK ICAgIGJhY2tncm91bmQ6dHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGJvcmRlci13aWR0aDow ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLWJvdHRvbTowICFpbXBvcnRhbnQ7Cn0KCi54LXRhYi1w YW5lbC1oZWFkZXItcGxhaW4gLngtdGFiLXN0cmlwLXNwYWNlciwKLngtdGFiLXBhbmVsLWZvb3Rl ci1wbGFpbiAueC10YWItc3RyaXAtc3BhY2VyIHsKICAgIGJvcmRlcjoxcHggc29saWQ7CiAgICBo ZWlnaHQ6MnB4OwogICAgZm9udC1zaXplOjFweDsKICAgIGxpbmUtaGVpZ2h0OjFweDsKfQoKLngt dGFiLXBhbmVsLWhlYWRlci1wbGFpbiAueC10YWItc3RyaXAtc3BhY2VyIHsKICAgIGJvcmRlci10 b3A6IDAgbm9uZTsKfQoKLngtdGFiLXBhbmVsLWZvb3Rlci1wbGFpbiAueC10YWItc3RyaXAtc3Bh Y2VyIHsKICAgIGJvcmRlci1ib3R0b206IDAgbm9uZTsKfQoKLngtdGFiLXBhbmVsLWZvb3Rlci1w bGFpbiAueC10YWItc3RyaXAtYm90dG9tIHsKICAgIGJhY2tncm91bmQ6dHJhbnNwYXJlbnQgIWlt cG9ydGFudDsKICAgIHBhZGRpbmctYm90dG9tOjAgIWltcG9ydGFudDsKfQoKLngtdGFiLXBhbmVs LWZvb3Rlci1wbGFpbiB7CiAgICBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAg ICBib3JkZXItd2lkdGg6MCAhaW1wb3J0YW50OwogICAgcGFkZGluZy10b3A6MCAhaW1wb3J0YW50 Owp9CgouZXh0LWJvcmRlci1ib3ggLngtdGFiLXBhbmVsLWhlYWRlci1wbGFpbiAueC10YWItc3Ry aXAtc3BhY2VyLAouZXh0LWJvcmRlci1ib3ggLngtdGFiLXBhbmVsLWZvb3Rlci1wbGFpbiAueC10 YWItc3RyaXAtc3BhY2VyIHsKICAgIGhlaWdodDozcHg7Cn0KCnVsLngtdGFiLXN0cmlwIGxpIHsK ICAgIGZsb2F0OmxlZnQ7CiAgICBtYXJnaW4tbGVmdDoycHg7Cn0KCnVsLngtdGFiLXN0cmlwIGxp LngtdGFiLWVkZ2UgewogICAgZmxvYXQ6bGVmdDsKICAgIG1hcmdpbjowICFpbXBvcnRhbnQ7CiAg ICBwYWRkaW5nOjAgIWltcG9ydGFudDsKICAgIGJvcmRlcjowIG5vbmUgIWltcG9ydGFudDsKICAg IGZvbnQtc2l6ZToxcHggIWltcG9ydGFudDsKICAgIGxpbmUtaGVpZ2h0OjFweCAhaW1wb3J0YW50 OwogICAgb3ZlcmZsb3c6aGlkZGVuOwogICAgem9vbToxOwogICAgYmFja2dyb3VuZDp0cmFuc3Bh cmVudCAhaW1wb3J0YW50OwogICAgd2lkdGg6MXB4Owp9CgoueC10YWItc3RyaXAgYSwgLngtdGFi LXN0cmlwIHNwYW4sIC54LXRhYi1zdHJpcCBlbSB7CglkaXNwbGF5OmJsb2NrOwp9CgoueC10YWIt c3RyaXAgYSB7Cgl0ZXh0LWRlY29yYXRpb246bm9uZSAhaW1wb3J0YW50OwoJLW1vei1vdXRsaW5l OiBub25lOwoJb3V0bGluZTogbm9uZTsKCWN1cnNvcjpwb2ludGVyOwp9CgoueC10YWItc3RyaXAt aW5uZXIgewogICAgb3ZlcmZsb3c6aGlkZGVuOwoJdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0K Ci54LXRhYi1zdHJpcCBzcGFuLngtdGFiLXN0cmlwLXRleHQgewoJd2hpdGUtc3BhY2U6IG5vd3Jh cDsKCWN1cnNvcjpwb2ludGVyOwogICAgcGFkZGluZzo0cHggMDsKfQoKLngtdGFiLXN0cmlwLXRv cCAueC10YWItd2l0aC1pY29uIC54LXRhYi1yaWdodCB7CiAgICBwYWRkaW5nLWxlZnQ6NnB4Owp9 CgoueC10YWItc3RyaXAgLngtdGFiLXdpdGgtaWNvbiBzcGFuLngtdGFiLXN0cmlwLXRleHQgewoJ cGFkZGluZy1sZWZ0OjIwcHg7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDNweDsKICAgIGJh Y2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Cn0KCi54LXRhYi1zdHJpcC1hY3RpdmUsIC54LXRh Yi1zdHJpcC1hY3RpdmUgYS54LXRhYi1yaWdodCB7CiAgICBjdXJzb3I6ZGVmYXVsdDsKfQoKLngt dGFiLXN0cmlwLWFjdGl2ZSBzcGFuLngtdGFiLXN0cmlwLXRleHQgewoJY3Vyc29yOmRlZmF1bHQ7 Cn0KCi54LXRhYi1zdHJpcC1kaXNhYmxlZCAueC10YWJzLXRleHQgewoJY3Vyc29yOmRlZmF1bHQ7 Cn0KCi54LXRhYi1wYW5lbC1ib2R5IHsKICAgIG92ZXJmbG93OmhpZGRlbjsKfQoKLngtdGFiLXBh bmVsLWJ3cmFwIHsKICAgIG92ZXJmbG93OmhpZGRlbjsKfQoKLmV4dC1pZSAueC10YWItc3RyaXAg LngtdGFiLXJpZ2h0IHsKICAgIHBvc2l0aW9uOnJlbGF0aXZlOwp9CgoueC10YWItc3RyaXAtdG9w IC54LXRhYi1zdHJpcC1hY3RpdmUgLngtdGFiLXJpZ2h0IHsKICAgIG1hcmdpbi1ib3R0b206LTFw eDsKfQoKLyoKICogSG9ycmlibGUgaGFjayBmb3IgSUU4IGluIHF1aXJrcyBtb2RlCiAqLwouZXh0 LWJvcmRlci1ib3ggLmV4dC1pZTggLngtdGFiLXN0cmlwIC54LXRhYi1yaWdodHsKICAgIHRvcDog MXB4Owp9CgoueC10YWItc3RyaXAtdG9wIC54LXRhYi1zdHJpcC1hY3RpdmUgLngtdGFiLXJpZ2h0 IHNwYW4ueC10YWItc3RyaXAtdGV4dCB7CiAgICBwYWRkaW5nLWJvdHRvbTo1cHg7Cn0KCi54LXRh Yi1zdHJpcC1ib3R0b20gLngtdGFiLXN0cmlwLWFjdGl2ZSAueC10YWItcmlnaHQgewogICAgbWFy Z2luLXRvcDotMXB4Owp9CgoueC10YWItc3RyaXAtYm90dG9tIC54LXRhYi1zdHJpcC1hY3RpdmUg LngtdGFiLXJpZ2h0IHNwYW4ueC10YWItc3RyaXAtdGV4dCB7CiAgICBwYWRkaW5nLXRvcDo1cHg7 Cn0KCi54LXRhYi1zdHJpcC10b3AgLngtdGFiLXJpZ2h0IHsKCWJhY2tncm91bmQ6IHRyYW5zcGFy ZW50IG5vLXJlcGVhdCAwIC01MXB4OwogICAgcGFkZGluZy1sZWZ0OjEwcHg7Cn0KCi54LXRhYi1z dHJpcC10b3AgLngtdGFiLWxlZnQgewoJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgbm8tcmVwZWF0 IHJpZ2h0IC0zNTFweDsKICAgIHBhZGRpbmctcmlnaHQ6MTBweDsKfQoKLngtdGFiLXN0cmlwLXRv cCAueC10YWItc3RyaXAtaW5uZXIgewoJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgcmVwZWF0LXgg MCAtMjAxcHg7Cn0KCi54LXRhYi1zdHJpcC10b3AgLngtdGFiLXN0cmlwLW92ZXIgLngtdGFiLXJp Z2h0IHsKCSBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTEwMXB4Owp9CgoueC10YWItc3RyaXAtdG9w IC54LXRhYi1zdHJpcC1vdmVyIC54LXRhYi1sZWZ0IHsKCSBiYWNrZ3JvdW5kLXBvc2l0aW9uOnJp Z2h0IC00MDFweDsKfQoKLngtdGFiLXN0cmlwLXRvcCAueC10YWItc3RyaXAtb3ZlciAueC10YWIt c3RyaXAtaW5uZXIgewoJIGJhY2tncm91bmQtcG9zaXRpb246MCAtMjUxcHg7Cn0KCi54LXRhYi1z dHJpcC10b3AgLngtdGFiLXN0cmlwLWFjdGl2ZSAueC10YWItcmlnaHQgewoJYmFja2dyb3VuZC1w b3NpdGlvbjogMCAwOwp9CgoueC10YWItc3RyaXAtdG9wIC54LXRhYi1zdHJpcC1hY3RpdmUgLngt dGFiLWxlZnQgewoJYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgLTMwMXB4Owp9CgoueC10YWIt c3RyaXAtdG9wIC54LXRhYi1zdHJpcC1hY3RpdmUgLngtdGFiLXN0cmlwLWlubmVyIHsKCWJhY2tn cm91bmQtcG9zaXRpb246IDAgLTE1MXB4Owp9CgoueC10YWItc3RyaXAtYm90dG9tIC54LXRhYi1y aWdodCB7CgliYWNrZ3JvdW5kOiBuby1yZXBlYXQgYm90dG9tIHJpZ2h0Owp9CgoueC10YWItc3Ry aXAtYm90dG9tIC54LXRhYi1sZWZ0IHsKCWJhY2tncm91bmQ6IG5vLXJlcGVhdCBib3R0b20gbGVm dDsKfQoKLngtdGFiLXN0cmlwLWJvdHRvbSAueC10YWItc3RyaXAtYWN0aXZlIC54LXRhYi1yaWdo dCB7CgliYWNrZ3JvdW5kOiBuby1yZXBlYXQgYm90dG9tIGxlZnQ7Cn0KCi54LXRhYi1zdHJpcC1i b3R0b20gLngtdGFiLXN0cmlwLWFjdGl2ZSAueC10YWItbGVmdCB7CgliYWNrZ3JvdW5kOiBuby1y ZXBlYXQgYm90dG9tIHJpZ2h0Owp9CgoueC10YWItc3RyaXAtYm90dG9tIC54LXRhYi1sZWZ0IHsK ICAgIHBhZGRpbmc6MCAxMHB4Owp9CgoueC10YWItc3RyaXAtYm90dG9tIC54LXRhYi1yaWdodCB7 CiAgICBwYWRkaW5nOjA7Cn0KCi54LXRhYi1zdHJpcCAueC10YWItc3RyaXAtY2xvc2UgewogICAg ZGlzcGxheTpub25lOwp9CgoueC10YWItc3RyaXAtY2xvc2FibGUgewogICAgcG9zaXRpb246cmVs YXRpdmU7Cn0KCi54LXRhYi1zdHJpcC1jbG9zYWJsZSAueC10YWItbGVmdCB7CiAgICBwYWRkaW5n LXJpZ2h0OjE5cHg7Cn0KCi54LXRhYi1zdHJpcCAueC10YWItc3RyaXAtY2xvc2FibGUgYS54LXRh Yi1zdHJpcC1jbG9zZSB7CiAgICBvcGFjaXR5Oi42OwogICAgLW1vei1vcGFjaXR5Oi42OwogICAg YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0OwogICAgZGlzcGxheTpibG9jazsKCXdpZHRoOjEx cHg7CiAgICBoZWlnaHQ6MTFweDsKICAgIHBvc2l0aW9uOmFic29sdXRlOwogICAgdG9wOjNweDsK ICAgIHJpZ2h0OjNweDsKICAgIGN1cnNvcjpwb2ludGVyOwogICAgei1pbmRleDoyOwp9CgoueC10 YWItc3RyaXAgLngtdGFiLXN0cmlwLWFjdGl2ZSBhLngtdGFiLXN0cmlwLWNsb3NlIHsKICAgIG9w YWNpdHk6Ljg7CiAgICAtbW96LW9wYWNpdHk6Ljg7Cn0KLngtdGFiLXN0cmlwIC54LXRhYi1zdHJp cC1jbG9zYWJsZSBhLngtdGFiLXN0cmlwLWNsb3NlOmhvdmVyewogICAgb3BhY2l0eToxOwogICAg LW1vei1vcGFjaXR5OjE7Cn0KCi54LXRhYi1wYW5lbC1ib2R5IHsKICAgIGJvcmRlcjogMXB4IHNv bGlkOwp9CgoueC10YWItcGFuZWwtYm9keS10b3AgewogICAgYm9yZGVyLXRvcDogMCBub25lOwp9 CgoueC10YWItcGFuZWwtYm9keS1ib3R0b20gewogICAgYm9yZGVyLWJvdHRvbTogMCBub25lOwp9 CgoueC10YWItc2Nyb2xsZXItbGVmdCB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCBuby1y ZXBlYXQgLTE4cHggMDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKICAgIHdpZHRoOjE4 cHg7CiAgICBwb3NpdGlvbjphYnNvbHV0ZTsKICAgIGxlZnQ6MDsKICAgIHRvcDowOwogICAgei1p bmRleDoxMDsKICAgIGN1cnNvcjpwb2ludGVyOwp9Ci54LXRhYi1zY3JvbGxlci1sZWZ0LW92ZXIg ewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwOwp9CgoueC10YWItc2Nyb2xsZXItbGVmdC1k aXNhYmxlZCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMThweCAwOwogICAgb3BhY2l0eTou NTsKICAgIC1tb3otb3BhY2l0eTouNTsKICAgIGZpbHRlcjphbHBoYShvcGFjaXR5PTUwKTsKICAg IGN1cnNvcjpkZWZhdWx0Owp9CgoueC10YWItc2Nyb2xsZXItcmlnaHQgewogICAgYmFja2dyb3Vu ZDogdHJhbnNwYXJlbnQgbm8tcmVwZWF0IDAgMDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xp ZDsKICAgIHdpZHRoOjE4cHg7CiAgICBwb3NpdGlvbjphYnNvbHV0ZTsKICAgIHJpZ2h0OjA7CiAg ICB0b3A6MDsKICAgIHotaW5kZXg6MTA7CiAgICBjdXJzb3I6cG9pbnRlcjsKfQoKLngtdGFiLXNj cm9sbGVyLXJpZ2h0LW92ZXIgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE4cHggMDsKfQoK LngtdGFiLXNjcm9sbGVyLXJpZ2h0LWRpc2FibGVkIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246 IDAgMDsKICAgIG9wYWNpdHk6LjU7CiAgICAtbW96LW9wYWNpdHk6LjU7CiAgICBmaWx0ZXI6YWxw aGEob3BhY2l0eT01MCk7CiAgICBjdXJzb3I6ZGVmYXVsdDsKfQoKLngtdGFiLXNjcm9sbGluZy1i b3R0b20gLngtdGFiLXNjcm9sbGVyLWxlZnQsIC54LXRhYi1zY3JvbGxpbmctYm90dG9tIC54LXRh Yi1zY3JvbGxlci1yaWdodHsKICAgIG1hcmdpbi10b3A6IDFweDsKfQoKLngtdGFiLXNjcm9sbGlu ZyAueC10YWItc3RyaXAtd3JhcCB7CiAgICBtYXJnaW4tbGVmdDoxOHB4OwogICAgbWFyZ2luLXJp Z2h0OjE4cHg7Cn0KCi54LXRhYi1zY3JvbGxpbmcgewogICAgcG9zaXRpb246cmVsYXRpdmU7ICAg IAp9CgoueC10YWItcGFuZWwtYmJhciAueC10b29sYmFyIHsKICAgIGJvcmRlcjoxcHggc29saWQ7 CiAgICBib3JkZXItdG9wOjAgbm9uZTsKICAgIG92ZXJmbG93OmhpZGRlbjsKICAgIHBhZGRpbmc6 MnB4Owp9CgoueC10YWItcGFuZWwtdGJhciAueC10b29sYmFyIHsKICAgIGJvcmRlcjoxcHggc29s aWQ7CiAgICBib3JkZXItdG9wOjAgbm9uZTsKICAgIG92ZXJmbG93OmhpZGRlbjsKICAgIHBhZGRp bmc6MnB4Owp9LyogYWxsIGZpZWxkcyAqLwoueC1mb3JtLWZpZWxkewogICAgbWFyZ2luOiAwIDAg MCAwOwp9CgouZXh0LXdlYmtpdCAqOmZvY3VzewogICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50 Owp9CgovKiAtLS0tIHRleHQgZmllbGRzIC0tLS0gKi8KLngtZm9ybS10ZXh0LCB0ZXh0YXJlYS54 LWZvcm0tZmllbGR7CiAgICBwYWRkaW5nOjFweCAzcHg7CiAgICBiYWNrZ3JvdW5kOnJlcGVhdC14 IDAgMDsKICAgIGJvcmRlcjoxcHggc29saWQ7Cn0KCnRleHRhcmVhLngtZm9ybS1maWVsZCB7CiAg ICBwYWRkaW5nOjJweCAzcHg7Cn0KCi54LWZvcm0tdGV4dCwgLmV4dC1pZSAueC1mb3JtLWZpbGUg ewogICAgaGVpZ2h0OjIycHg7CiAgICBsaW5lLWhlaWdodDoxOHB4OwogICAgdmVydGljYWwtYWxp Z246bWlkZGxlOwp9CgouZXh0LWllNiAueC1mb3JtLXRleHQsIC5leHQtaWU3IC54LWZvcm0tdGV4 dCB7CiAgICBtYXJnaW46LTFweCAwOyAvKiBpZSBib2d1cyBtYXJnaW4gYnVnICovCiAgICBoZWln aHQ6MjJweDsgLyogaWUgcXVpcmtzICovCiAgICBsaW5lLWhlaWdodDoxOHB4Owp9CgouZXh0LWll NiB0ZXh0YXJlYS54LWZvcm0tZmllbGQsIC5leHQtaWU3IHRleHRhcmVhLngtZm9ybS1maWVsZCB7 CiAgICBtYXJnaW46LTFweCAwOyAvKiBpZSBib2d1cyBtYXJnaW4gYnVnICovCn0KCi5leHQtc3Ry aWN0IC54LWZvcm0tdGV4dCB7CiAgICBoZWlnaHQ6MThweDsKfQoKLmV4dC1zYWZhcmkuZXh0LW1h YyB0ZXh0YXJlYS54LWZvcm0tZmllbGQgewogICAgbWFyZ2luLWJvdHRvbTotMnB4OyAvKiBhbm90 aGVyIGJvZ3VzIG1hcmdpbiBidWcsIHNhZmFyaS9tYWMgb25seSAqLwp9CgouZXh0LXN0cmljdCAu ZXh0LWllOCAueC1mb3JtLXRleHQsIC5leHQtc3RyaWN0IC5leHQtaWU4IHRleHRhcmVhLngtZm9y bS1maWVsZCB7CgltYXJnaW4tYm90dG9tOiAxcHg7Cn0KCi5leHQtZ2Vja28gLngtZm9ybS10ZXh0 ICwgLmV4dC1pZTggLngtZm9ybS10ZXh0IHsKICAgIHBhZGRpbmctdG9wOjJweDsgLyogRkYgd29u J3QgY2VudGVyIHRoZSB0ZXh0IHZlcnRpY2FsbHkgKi8KICAgIHBhZGRpbmctYm90dG9tOjA7Cn0K CnRleHRhcmVhIHsKICAgIHJlc2l6ZTogbm9uZTsgIC8qIERpc2FibGUgYnJvd3NlciByZXNpemFi bGUgdGV4dGFyZWEgKi8KfQoKLyogc2VsZWN0IGJveGVzICovCi54LWZvcm0tc2VsZWN0LW9uZSB7 CiAgICBoZWlnaHQ6MjBweDsKICAgIGxpbmUtaGVpZ2h0OjE4cHg7CiAgICB2ZXJ0aWNhbC1hbGln bjptaWRkbGU7CiAgICBib3JkZXI6IDFweCBzb2xpZDsKfQoKLyogbXVsdGkgc2VsZWN0IGJveGVz ICovCgovKiAtLS0gVE9ETyAtLS0gKi8KCi8qIDIuMC4yIHN0eWxlICovCi54LWZvcm0tY2hlY2st d3JhcCB7CiAgICBsaW5lLWhlaWdodDoxOHB4Owp9CgouZXh0LWllIC54LWZvcm0tY2hlY2std3Jh cCBpbnB1dCB7CiAgICB3aWR0aDoxNXB4OwogICAgaGVpZ2h0OjE1cHg7Cn0KCi54LWVkaXRvciAu eC1mb3JtLWNoZWNrLXdyYXAgewogICAgcGFkZGluZzozcHg7Cn0KCi54LWVkaXRvciAueC1mb3Jt LWNoZWNrYm94IHsKICAgIGhlaWdodDoxM3B4Owp9CgoueC1mb3JtLWNoZWNrLWdyb3VwLWxhYmVs IHsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsK ICAgIHBhZGRpbmctbGVmdDogM3B4ICFpbXBvcnRhbnQ7CiAgICBmbG9hdDogbm9uZSAhaW1wb3J0 YW50Owp9CgovKiB3cmFwcGVkIGZpZWxkcyBhbmQgdHJpZ2dlcnMgKi8KLngtZm9ybS1maWVsZC13 cmFwIC54LWZvcm0tdHJpZ2dlcnsKICAgIHdpZHRoOjE3cHg7CiAgICBoZWlnaHQ6MjFweDsKICAg IGJvcmRlcjowOwogICAgYmFja2dyb3VuZDp0cmFuc3BhcmVudCBuby1yZXBlYXQgMCAwOwogICAg Y3Vyc29yOnBvaW50ZXI7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7CiAgICBwb3NpdGlv bjphYnNvbHV0ZTsKICAgIHRvcDowOwp9CgoueC1mb3JtLWZpZWxkLXdyYXAgLngtZm9ybS1kYXRl LXRyaWdnZXIsIC54LWZvcm0tZmllbGQtd3JhcCAueC1mb3JtLWNsZWFyLXRyaWdnZXIsIC54LWZv cm0tZmllbGQtd3JhcCAueC1mb3JtLXNlYXJjaC10cmlnZ2VyewogICAgY3Vyc29yOnBvaW50ZXI7 Cn0KCi5leHQtc2FmYXJpIC54LWZvcm0tZmllbGQtd3JhcCAueC1mb3JtLXRyaWdnZXJ7CiAgICBy aWdodDowOwp9CgoueC1mb3JtLWZpZWxkLXdyYXAgLngtZm9ybS10d2luLXRyaWdnZXJzIC54LWZv cm0tdHJpZ2dlcnsKICAgIHBvc2l0aW9uOnN0YXRpYzsKICAgIHRvcDphdXRvOwogICAgdmVydGlj YWwtYWxpZ246dG9wOwp9CgoueC1mb3JtLWZpZWxkLXdyYXAgewogICAgcG9zaXRpb246cmVsYXRp dmU7CiAgICBsZWZ0OjA7dG9wOjA7CiAgICB6b29tOjE7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFw Owp9CgoueC1mb3JtLWZpZWxkLXdyYXAgLngtZm9ybS10cmlnZ2VyLW92ZXJ7CiAgICBiYWNrZ3Jv dW5kLXBvc2l0aW9uOi0xN3B4IDA7Cn0KCi54LWZvcm0tZmllbGQtd3JhcCAueC1mb3JtLXRyaWdn ZXItY2xpY2t7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNHB4IDA7Cn0KCi54LXRyaWdnZXIt d3JhcC1mb2N1cyAueC1mb3JtLXRyaWdnZXJ7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi01MXB4 IDA7Cn0KCi54LXRyaWdnZXItd3JhcC1mb2N1cyAueC1mb3JtLXRyaWdnZXItb3ZlcnsKICAgIGJh Y2tncm91bmQtcG9zaXRpb246LTY4cHggMDsKfQoKLngtdHJpZ2dlci13cmFwLWZvY3VzIC54LWZv cm0tdHJpZ2dlci1jbGlja3sKICAgIGJhY2tncm91bmQtcG9zaXRpb246LTg1cHggMDsKfQoKLngt dHJpZ2dlci13cmFwLWZvY3VzIC54LWZvcm0tdHJpZ2dlcnsKICAgIGJvcmRlci1ib3R0b206IDFw eCBzb2xpZDsKfQoKLngtaXRlbS1kaXNhYmxlZCAueC1mb3JtLXRyaWdnZXItb3ZlcnsKICAgIGJh Y2tncm91bmQtcG9zaXRpb246MCAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItYm90dG9tOiAxcHgg c29saWQ7Cn0KCi54LWl0ZW0tZGlzYWJsZWQgLngtZm9ybS10cmlnZ2VyLWNsaWNrewogICAgYmFj a2dyb3VuZC1wb3NpdGlvbjowIDAgIWltcG9ydGFudDsKICAgIGJvcmRlci1ib3R0b206IDFweCBz b2xpZDsKfQoKLngtdHJpZ2dlci1ub2VkaXR7CiAgICBjdXJzb3I6cG9pbnRlcjsKfQoKLyogZmll bGQgZm9jdXMgc3R5bGUgKi8KLngtZm9ybS1mb2N1cywgdGV4dGFyZWEueC1mb3JtLWZvY3VzewoJ Ym9yZGVyOiAxcHggc29saWQ7Cn0KCi8qIGludmFsaWQgZmllbGRzICovCi54LWZvcm0taW52YWxp ZCwgdGV4dGFyZWEueC1mb3JtLWludmFsaWR7CgliYWNrZ3JvdW5kOnJlcGVhdC14IGJvdHRvbTsK CWJvcmRlcjogMXB4IHNvbGlkOwp9CgouZXh0LXNhZmFyaSAueC1mb3JtLWludmFsaWR7Cglib3Jk ZXI6IDFweCBzb2xpZDsKfQoKLngtZm9ybS1pbm5lci1pbnZhbGlkLCB0ZXh0YXJlYS54LWZvcm0t aW5uZXItaW52YWxpZHsKCWJhY2tncm91bmQ6cmVwZWF0LXggYm90dG9tOwp9CgovKiBlZGl0b3Jz ICovCi54LWVkaXRvciB7CiAgICB2aXNpYmlsaXR5OmhpZGRlbjsKICAgIHBhZGRpbmc6MDsKICAg IG1hcmdpbjowOwp9Ci54LWZvcm0tY2hlY2std3JhcCB7CiAgICBoZWlnaHQ6IDIycHg7CiAgICBs aW5lLWhlaWdodDoxOHB4Owp9CgouZXh0LWllIC54LWZvcm0tY2hlY2std3JhcCBpbnB1dCB7CiAg ICB3aWR0aDoxNXB4OwogICAgaGVpZ2h0OjE1cHg7Cn0KCi54LWVkaXRvciAueC1mb3JtLWNoZWNr LXdyYXAgewogICAgcGFkZGluZzozcHg7Cn0KCi54LWVkaXRvciAueC1mb3JtLWNoZWNrYm94IHsK ICAgIGhlaWdodDoxM3B4Owp9CgoueC1mb3JtLWdyb3ctc2l6ZXIgewogICAgbGVmdDogLTEwMDAw cHg7CglwYWRkaW5nOiA4cHggM3B4OwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdmlzaWJp bGl0eTpoaWRkZW47CiAgICB0b3A6IC0xMDAwMHB4OwoJd2hpdGUtc3BhY2U6IHByZS13cmFwOwog ICAgd2hpdGUtc3BhY2U6IC1tb3otcHJlLXdyYXA7CiAgICB3aGl0ZS1zcGFjZTogLXByZS13cmFw OwogICAgd2hpdGUtc3BhY2U6IC1vLXByZS13cmFwOwogICAgd29yZC13cmFwOiBicmVhay13b3Jk OwogICAgem9vbToxOwp9CgoueC1mb3JtLWdyb3ctc2l6ZXIgcCB7CiAgICBtYXJnaW46MCAhaW1w b3J0YW50OwogICAgYm9yZGVyOjAgbm9uZSAhaW1wb3J0YW50OwogICAgcGFkZGluZzowICFpbXBv cnRhbnQ7Cn0KCi8qIEZvcm0gSXRlbXMgQ1NTICovCgoueC1mb3JtLWl0ZW0gewogICAgZGlzcGxh eTpibG9jazsKICAgIG1hcmdpbi1ib3R0b206NHB4OwogICAgem9vbToxOwp9CgoueC1mb3JtLWl0 ZW0gbGFiZWwgewogICAgZGlzcGxheTpibG9jazsKICAgIGZsb2F0OmxlZnQ7CiAgICB3aWR0aDox MDBweDsKICAgIHBhZGRpbmc6M3B4OwogICAgcGFkZGluZy1sZWZ0OjA7CiAgICBjbGVhcjpsZWZ0 OwogICAgei1pbmRleDoyOwogICAgcG9zaXRpb246cmVsYXRpdmU7Cn0KCi54LWZvcm0tZWxlbWVu dCB7CiAgICBwYWRkaW5nLWxlZnQ6MTA1cHg7CiAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKfQoKLngt Zm9ybS1pbnZhbGlkLW1zZyB7CiAgICBwYWRkaW5nOjJweDsKICAgIHBhZGRpbmctbGVmdDoxOHB4 OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgbm8tcmVwZWF0IDAgMnB4OwogICAgbGluZS1o ZWlnaHQ6MTZweDsKICAgIHdpZHRoOjIwMHB4Owp9CgoueC1mb3JtLWxhYmVsLWxlZnQgbGFiZWwg ewogICB0ZXh0LWFsaWduOmxlZnQ7Cn0KCi54LWZvcm0tbGFiZWwtcmlnaHQgbGFiZWwgewogICB0 ZXh0LWFsaWduOnJpZ2h0Owp9CgoueC1mb3JtLWxhYmVsLXRvcCAueC1mb3JtLWl0ZW0gbGFiZWwg ewogICAgd2lkdGg6YXV0bzsKICAgIGZsb2F0Om5vbmU7CiAgICBjbGVhcjpub25lOwogICAgZGlz cGxheTppbmxpbmU7CiAgICBtYXJnaW4tYm90dG9tOjRweDsKICAgIHBvc2l0aW9uOnN0YXRpYzsK fQoKLngtZm9ybS1sYWJlbC10b3AgLngtZm9ybS1lbGVtZW50IHsKICAgIHBhZGRpbmctbGVmdDow OwogICAgcGFkZGluZy10b3A6NHB4Owp9CgoueC1mb3JtLWxhYmVsLXRvcCAueC1mb3JtLWl0ZW0g ewogICAgcGFkZGluZy1ib3R0b206NHB4Owp9CgovKiBFZGl0b3Igc21hbGwgZm9udCBmb3IgZ3Jp ZCwgdG9vbGJhciBhbmQgdHJlZSAqLwoueC1zbWFsbC1lZGl0b3IgLngtZm9ybS10ZXh0IHsKICAg IGhlaWdodDoyMHB4OwogICAgbGluZS1oZWlnaHQ6MTZweDsKICAgIHZlcnRpY2FsLWFsaWduOm1p ZGRsZTsKfQoKLmV4dC1pZTYgLngtc21hbGwtZWRpdG9yIC54LWZvcm0tdGV4dCwgLmV4dC1pZTcg Lngtc21hbGwtZWRpdG9yIC54LWZvcm0tdGV4dCB7CiAgICBtYXJnaW4tdG9wOi0xcHggIWltcG9y dGFudDsgLyogaWUgYm9ndXMgbWFyZ2luIGJ1ZyAqLwogICAgbWFyZ2luLWJvdHRvbTotMXB4ICFp bXBvcnRhbnQ7CiAgICBoZWlnaHQ6MjBweCAhaW1wb3J0YW50OyAvKiBpZSBxdWlya3MgKi8KICAg IGxpbmUtaGVpZ2h0OjE2cHggIWltcG9ydGFudDsKfQoKLmV4dC1zdHJpY3QgLngtc21hbGwtZWRp dG9yIC54LWZvcm0tdGV4dCB7CiAgICBoZWlnaHQ6MTZweCAhaW1wb3J0YW50Owp9CgouZXh0LWll NiAueC1zbWFsbC1lZGl0b3IgLngtZm9ybS10ZXh0LCAuZXh0LWllNyAueC1zbWFsbC1lZGl0b3Ig LngtZm9ybS10ZXh0IHsKICAgIGhlaWdodDoyMHB4OwogICAgbGluZS1oZWlnaHQ6MTZweDsKfQoK LmV4dC1ib3JkZXItYm94IC54LXNtYWxsLWVkaXRvciAueC1mb3JtLXRleHQgewogICAgaGVpZ2h0 OjIwcHg7Cn0KCi54LXNtYWxsLWVkaXRvciAueC1mb3JtLXNlbGVjdC1vbmUgewogICAgaGVpZ2h0 OjIwcHg7CiAgICBsaW5lLWhlaWdodDoxNnB4OwogICAgdmVydGljYWwtYWxpZ246bWlkZGxlOwp9 CgoueC1zbWFsbC1lZGl0b3IgLngtZm9ybS1udW0tZmllbGQgewogICAgdGV4dC1hbGlnbjpyaWdo dDsKfQoKLngtc21hbGwtZWRpdG9yIC54LWZvcm0tZmllbGQtd3JhcCAueC1mb3JtLXRyaWdnZXJ7 CiAgICBoZWlnaHQ6MTlweDsKfQoKLmV4dC13ZWJraXQgLngtc21hbGwtZWRpdG9yIC54LWZvcm0t dGV4dHtwYWRkaW5nLXRvcDozcHg7Zm9udC1zaXplOjEwMCU7fQoKLngtZm9ybS1jbGVhciB7CiAg ICBjbGVhcjpib3RoOwogICAgaGVpZ2h0OjA7CiAgICBvdmVyZmxvdzpoaWRkZW47CiAgICBsaW5l LWhlaWdodDowOwogICAgZm9udC1zaXplOjA7Cn0KLngtZm9ybS1jbGVhci1sZWZ0IHsKICAgIGNs ZWFyOmxlZnQ7CiAgICBoZWlnaHQ6MDsKICAgIG92ZXJmbG93OmhpZGRlbjsKICAgIGxpbmUtaGVp Z2h0OjA7CiAgICBmb250LXNpemU6MDsKfQoKLngtZm9ybS1jYi1sYWJlbCB7CiAgICB3aWR0aDph dXRvICFpbXBvcnRhbnQ7CiAgICBmbG9hdDpub25lICFpbXBvcnRhbnQ7CiAgICBjbGVhcjpub25l ICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OmlubGluZSAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxl ZnQ6NHB4OwogICAgdG9wOiAtMnB4Owp9CgouZXh0LWdlY2tvMiAueC1mb3JtLWNiLWxhYmVsewog ICAgdG9wOiAtMXB4Owp9CgouZXh0LWllOCAueC1mb3JtLWNiLWxhYmVsewogICAgcG9zaXRpb246 IHN0YXRpYzsKfQoKLmV4dC1zdHJpY3QgLmV4dC1pZTggLngtZm9ybS1jYi1sYWJlbCB7CiAgICB0 b3A6IC0zcHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5leHQtb3BlcmEgLngtZm9ybS1j Yi1sYWJlbCwgLmV4dC1zYWZhcmkzIC54LWZvcm0tY2ItbGFiZWwsIC5leHQtaWU3IC54LWZvcm0t Y2ItbGFiZWwsIC5leHQtaWU2IC54LWZvcm0tY2ItbGFiZWwgewogICAgdG9wOiAwOwp9CgoueC1m b3JtLWNvbHVtbiB7CiAgICBmbG9hdDpsZWZ0OwogICAgcGFkZGluZzowOwogICAgbWFyZ2luOjA7 CiAgICB3aWR0aDo0OCU7CiAgICBvdmVyZmxvdzpoaWRkZW47CiAgICB6b29tOjE7Cn0KCi8qIGJ1 dHRvbnMgKi8KLngtZm9ybSAueC1mb3JtLWJ0bnMtY3QgLngtYnRuewoJZmxvYXQ6cmlnaHQ7Cglj bGVhcjpub25lOwp9CgoueC1mb3JtIC54LWZvcm0tYnRucy1jdCAueC1mb3JtLWJ0bnMgdGQgewoJ Ym9yZGVyOjA7CglwYWRkaW5nOjA7Cn0KCi54LWZvcm0gLngtZm9ybS1idG5zLWN0IC54LWZvcm0t YnRucy1yaWdodCB0YWJsZXsKCWZsb2F0OnJpZ2h0OwoJY2xlYXI6bm9uZTsKfQoKLngtZm9ybSAu eC1mb3JtLWJ0bnMtY3QgLngtZm9ybS1idG5zLWxlZnQgdGFibGV7CglmbG9hdDpsZWZ0OwoJY2xl YXI6bm9uZTsKfQoKLngtZm9ybSAueC1mb3JtLWJ0bnMtY3QgLngtZm9ybS1idG5zLWNlbnRlcnsK CXRleHQtYWxpZ246Y2VudGVyOyAvKmllKi8KfQoKLngtZm9ybSAueC1mb3JtLWJ0bnMtY3QgLngt Zm9ybS1idG5zLWNlbnRlciB0YWJsZXsKCW1hcmdpbjowIGF1dG87IC8qZXZlcnlvbmUgZWxzZSov Cn0KCi54LWZvcm0gLngtZm9ybS1idG5zLWN0IHRhYmxlIHRkLngtZm9ybS1idG4tdGR7CglwYWRk aW5nOjNweDsKfQoKLngtZm9ybSAueC1mb3JtLWJ0bnMtY3QgLngtYnRuLWZvY3VzIC54LWJ0bi1s ZWZ0ewoJYmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNDdweDsKfQoKLngtZm9ybSAueC1mb3JtLWJ0 bnMtY3QgLngtYnRuLWZvY3VzIC54LWJ0bi1yaWdodHsKCWJhY2tncm91bmQtcG9zaXRpb246MCAt MTY4cHg7Cn0KCi54LWZvcm0gLngtZm9ybS1idG5zLWN0IC54LWJ0bi1mb2N1cyAueC1idG4tY2Vu dGVyewoJYmFja2dyb3VuZC1wb3NpdGlvbjowIC0xODlweDsKfQoKLngtZm9ybSAueC1mb3JtLWJ0 bnMtY3QgLngtYnRuLWNsaWNrIC54LWJ0bi1jZW50ZXJ7CgliYWNrZ3JvdW5kLXBvc2l0aW9uOjAg LTEyNnB4Owp9CgoueC1mb3JtIC54LWZvcm0tYnRucy1jdCAueC1idG4tY2xpY2sgIC54LWJ0bi1y aWdodHsKCWJhY2tncm91bmQtcG9zaXRpb246MCAtODRweDsKfQoKLngtZm9ybSAueC1mb3JtLWJ0 bnMtY3QgLngtYnRuLWNsaWNrIC54LWJ0bi1sZWZ0ewoJYmFja2dyb3VuZC1wb3NpdGlvbjowIC02 M3B4Owp9CgoueC1mb3JtLWludmFsaWQtaWNvbiB7CiAgICB3aWR0aDoxNnB4OwogICAgaGVpZ2h0 OjE4cHg7CiAgICB2aXNpYmlsaXR5OmhpZGRlbjsKICAgIHBvc2l0aW9uOmFic29sdXRlOwogICAg bGVmdDowOwogICAgdG9wOjA7CiAgICBkaXNwbGF5OmJsb2NrOwogICAgYmFja2dyb3VuZDp0cmFu c3BhcmVudCBuby1yZXBlYXQgMCAycHg7Cn0KCi8qIGZpZWxkc2V0cyAqLwoueC1maWVsZHNldCB7 CiAgICBib3JkZXI6MXB4IHNvbGlkOwogICAgcGFkZGluZzoxMHB4OwogICAgbWFyZ2luLWJvdHRv bToxMHB4OwogICAgZGlzcGxheTpibG9jazsgLyogcHJlc2VydmUgbWFyZ2lucyBpbiBJRSAqLwp9 CgovKiBtYWtlIHRvcCBvZiBjaGVja2JveC90b29scyB2aXNpYmxlIGluIHdlYmtpdCAqLwouZXh0 LXdlYmtpdCAueC1maWVsZHNldC1oZWFkZXIgewogICAgcGFkZGluZy10b3A6IDFweDsKfSAgICAg ICAgCgouZXh0LWllIC54LWZpZWxkc2V0IGxlZ2VuZCB7CiAgICBtYXJnaW4tYm90dG9tOjEwcHg7 Cn0KCi5leHQtaWUgLngtZmllbGRzZXQgewogICAgcGFkZGluZy10b3A6IDA7CiAgICBwYWRkaW5n LWJvdHRvbToxMHB4Owp9CgoueC1maWVsZHNldCBsZWdlbmQgLngtdG9vbC10b2dnbGUgewogICAg bWFyZ2luLXJpZ2h0OjNweDsKICAgIG1hcmdpbi1sZWZ0OjA7CiAgICBmbG9hdDpsZWZ0ICFpbXBv cnRhbnQ7Cn0KCi54LWZpZWxkc2V0IGxlZ2VuZCBpbnB1dCB7CiAgICBtYXJnaW4tcmlnaHQ6M3B4 OwogICAgZmxvYXQ6bGVmdCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OjEzcHg7CiAgICB3aWR0aDox M3B4Owp9CgpmaWVsZHNldC54LXBhbmVsLWNvbGxhcHNlZCB7CiAgICBwYWRkaW5nLWJvdHRvbTow ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItd2lkdGg6IDFweCAxcHggMCAxcHggIWltcG9ydGFudDsK ICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1yaWdodC1jb2xv cjogdHJhbnNwYXJlbnQ7Cn0gICAgICAKICAKLmV4dC1pZTYgZmllbGRzZXQueC1wYW5lbC1jb2xs YXBzZWR7CiAgICBwYWRkaW5nLWJvdHRvbTowICFpbXBvcnRhbnQ7CiAgICBib3JkZXItd2lkdGg6 IDFweCAwIDAgMCAhaW1wb3J0YW50OwogICAgbWFyZ2luLWxlZnQ6IDFweDsKICAgIG1hcmdpbi1y aWdodDogMXB4Owp9CgpmaWVsZHNldC54LXBhbmVsLWNvbGxhcHNlZCAueC1maWVsZHNldC1id3Jh cCB7CiAgICB2aXNpYmlsaXR5OmhpZGRlbjsKICAgIHBvc2l0aW9uOmFic29sdXRlOwogICAgbGVm dDotMTAwMHB4OwogICAgdG9wOi0xMDAwcHg7Cn0KCi5leHQtaWUgLngtZmllbGRzZXQtYndyYXAg ewogICAgem9vbToxOwp9CgoueC1maWVsZHNldC1ub2JvcmRlciB7CiAgICBib3JkZXI6MHB4IG5v bmUgdHJhbnNwYXJlbnQ7Cn0KCi54LWZpZWxkc2V0LW5vYm9yZGVyIGxlZ2VuZCB7CiAgICBtYXJn aW4tbGVmdDotM3B4Owp9CgovKiBJRSBsZWdlbmQgcG9zaXRpb2luZyBidWcgKi8KLmV4dC1pZSAu eC1maWVsZHNldC1ub2JvcmRlciBsZWdlbmQgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAg bWFyZ2luLWJvdHRvbToyM3B4Owp9Ci5leHQtaWUgLngtZmllbGRzZXQtbm9ib3JkZXIgbGVnZW5k IHNwYW4gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDoxNnB4Owp9CiAgICAgICAg Ci5leHQtZ2Vja28gLngtd2luZG93LWJvZHkgLngtZm9ybS1pdGVtIHsKICAgIC1tb3otb3V0bGlu ZTogbm9uZTsKICAgIG92ZXJmbG93OiBhdXRvOwp9CgouZXh0LWdlY2tvIC54LWZvcm0taXRlbSB7 CiAgICAtbW96LW91dGxpbmU6IG5vbmU7Cn0KCi54LWhpZGUtbGFiZWwgbGFiZWwueC1mb3JtLWl0 ZW0tbGFiZWwgewogICAgIGRpc3BsYXk6bm9uZTsKfQoKLngtaGlkZS1sYWJlbCAueC1mb3JtLWVs ZW1lbnQgewogICAgIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50Owp9CgoueC1maWVsZHNldCB7 CiAgICBvdmVyZmxvdzpoaWRkZW47Cn0KCi54LWZpZWxkc2V0LWJ3cmFwIHsKICAgIG92ZXJmbG93 OmhpZGRlbjsKICAgIHpvb206MTsKfQoKLngtZmllbGRzZXQtYm9keSB7CiAgICBvdmVyZmxvdzpo aWRkZW47Cn0KCgoueC1idG57DQoJY3Vyc29yOnBvaW50ZXI7DQoJd2hpdGUtc3BhY2U6IG5vd3Jh cDsNCn0NCg0KLngtYnRuIGJ1dHRvbnsNCiAgICBib3JkZXI6MCBub25lOw0KICAgIGJhY2tncm91 bmQ6dHJhbnNwYXJlbnQ7DQogICAgcGFkZGluZy1sZWZ0OjNweDsNCiAgICBwYWRkaW5nLXJpZ2h0 OjNweDsNCiAgICBjdXJzb3I6cG9pbnRlcjsNCiAgICBtYXJnaW46MDsNCiAgICBvdmVyZmxvdzp2 aXNpYmxlOw0KICAgIHdpZHRoOmF1dG87DQogICAgLW1vei1vdXRsaW5lOjAgbm9uZTsNCiAgICBv dXRsaW5lOjAgbm9uZTsNCn0NCg0KKiBodG1sIC5leHQtaWUgLngtYnRuIGJ1dHRvbiB7DQogICAg d2lkdGg6MXB4Ow0KfQ0KDQouZXh0LWdlY2tvIC54LWJ0biBidXR0b24gew0KICAgIHBhZGRpbmct bGVmdDowOw0KICAgIHBhZGRpbmctcmlnaHQ6MDsNCn0NCg0KLmV4dC1nZWNrbyAueC1idG4gYnV0 dG9uOjotbW96LWZvY3VzLWlubmVyIHsNCiAgICBwYWRkaW5nOjA7DQp9DQoNCi5leHQtaWUgLngt YnRuIGJ1dHRvbiB7DQogICAgcGFkZGluZy10b3A6MnB4Ow0KfQ0KDQoueC1idG4gdGQgew0KICAg IHBhZGRpbmc6MCAhaW1wb3J0YW50Ow0KfQ0KDQoueC1idG4tdGV4dCB7DQogICAgY3Vyc29yOnBv aW50ZXI7DQoJd2hpdGUtc3BhY2U6IG5vd3JhcDsNCiAgICBwYWRkaW5nOjA7DQp9DQoNCi8qIGlj b24gcGxhY2VtZW50IGFuZCBzaXppbmcgc3R5bGVzICovDQoNCi8qIE9ubHkgdGV4dCAqLw0KLngt YnRuLW5vaWNvbiAueC1idG4tc21hbGwgLngtYnRuLXRleHR7DQoJaGVpZ2h0OiAxNnB4Ow0KfQ0K DQoueC1idG4tbm9pY29uIC54LWJ0bi1tZWRpdW0gLngtYnRuLXRleHR7DQogICAgaGVpZ2h0OiAy NHB4Ow0KfQ0KDQoueC1idG4tbm9pY29uIC54LWJ0bi1sYXJnZSAueC1idG4tdGV4dHsNCiAgICBo ZWlnaHQ6IDMycHg7DQp9DQoNCi8qIE9ubHkgaWNvbnMgKi8NCi54LWJ0bi1pY29uIC54LWJ0bi10 ZXh0ew0KICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsNCgliYWNrZ3JvdW5kLXJlcGVh dDogbm8tcmVwZWF0Ow0KfQ0KDQoueC1idG4taWNvbiAueC1idG4tc21hbGwgLngtYnRuLXRleHR7 DQoJaGVpZ2h0OiAxNnB4Ow0KCXdpZHRoOiAxNnB4Ow0KfQ0KDQoueC1idG4taWNvbiAueC1idG4t bWVkaXVtIC54LWJ0bi10ZXh0ew0KICAgIGhlaWdodDogMjRweDsNCgl3aWR0aDogMjRweDsNCn0N Cg0KLngtYnRuLWljb24gLngtYnRuLWxhcmdlIC54LWJ0bi10ZXh0ew0KICAgIGhlaWdodDogMzJw eDsNCgl3aWR0aDogMzJweDsNCn0NCg0KLyogSWNvbnMgYW5kIHRleHQgKi8NCi8qIGxlZnQgKi8N Ci54LWJ0bi10ZXh0LWljb24gLngtYnRuLWljb24tc21hbGwtbGVmdCAueC1idG4tdGV4dHsNCiAg ICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIGNlbnRlcjsNCgliYWNrZ3JvdW5kLXJlcGVhdDogbm8t cmVwZWF0Ow0KICAgIHBhZGRpbmctbGVmdDoxOHB4Ow0KICAgIGhlaWdodDoxNnB4Ow0KfQ0KDQou eC1idG4tdGV4dC1pY29uIC54LWJ0bi1pY29uLW1lZGl1bS1sZWZ0IC54LWJ0bi10ZXh0ew0KICAg IGJhY2tncm91bmQtcG9zaXRpb246IDAgY2VudGVyOw0KCWJhY2tncm91bmQtcmVwZWF0OiBuby1y ZXBlYXQ7DQogICAgcGFkZGluZy1sZWZ0OjI2cHg7DQogICAgaGVpZ2h0OjI0cHg7DQp9DQoNCi54 LWJ0bi10ZXh0LWljb24gLngtYnRuLWljb24tbGFyZ2UtbGVmdCAueC1idG4tdGV4dHsNCiAgICBi YWNrZ3JvdW5kLXBvc2l0aW9uOiAwIGNlbnRlcjsNCgliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVw ZWF0Ow0KICAgIHBhZGRpbmctbGVmdDozNHB4Ow0KICAgIGhlaWdodDozMnB4Ow0KfQ0KDQovKiB0 b3AgKi8NCi54LWJ0bi10ZXh0LWljb24gLngtYnRuLWljb24tc21hbGwtdG9wIC54LWJ0bi10ZXh0 ew0KICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciAwOw0KCWJhY2tncm91bmQtcmVwZWF0 OiBuby1yZXBlYXQ7DQogICAgcGFkZGluZy10b3A6MThweDsNCn0NCg0KLngtYnRuLXRleHQtaWNv biAueC1idG4taWNvbi1tZWRpdW0tdG9wIC54LWJ0bi10ZXh0ew0KICAgIGJhY2tncm91bmQtcG9z aXRpb246IGNlbnRlciAwOw0KCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQogICAgcGFk ZGluZy10b3A6MjZweDsNCn0NCg0KLngtYnRuLXRleHQtaWNvbiAueC1idG4taWNvbi1sYXJnZS10 b3AgLngtYnRuLXRleHR7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIDA7DQoJYmFj a2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCiAgICBwYWRkaW5nLXRvcDozNHB4Ow0KfQ0KDQov KiByaWdodCAqLw0KLngtYnRuLXRleHQtaWNvbiAueC1idG4taWNvbi1zbWFsbC1yaWdodCAueC1i dG4tdGV4dHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCBjZW50ZXI7DQoJYmFja2dy b3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCiAgICBwYWRkaW5nLXJpZ2h0OjE4cHg7DQogICAgaGVp Z2h0OjE2cHg7DQp9DQoNCi54LWJ0bi10ZXh0LWljb24gLngtYnRuLWljb24tbWVkaXVtLXJpZ2h0 IC54LWJ0bi10ZXh0ew0KICAgIGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IGNlbnRlcjsNCgli YWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KICAgIHBhZGRpbmctcmlnaHQ6MjZweDsNCiAg ICBoZWlnaHQ6MjRweDsNCn0NCg0KLngtYnRuLXRleHQtaWNvbiAueC1idG4taWNvbi1sYXJnZS1y aWdodCAueC1idG4tdGV4dHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCBjZW50ZXI7 DQoJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCiAgICBwYWRkaW5nLXJpZ2h0OjM0cHg7 DQogICAgaGVpZ2h0OjMycHg7DQp9DQoNCi8qIGJvdHRvbSAqLw0KLngtYnRuLXRleHQtaWNvbiAu eC1idG4taWNvbi1zbWFsbC1ib3R0b20gLngtYnRuLXRleHR7DQogICAgYmFja2dyb3VuZC1wb3Np dGlvbjogY2VudGVyIGJvdHRvbTsNCgliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KICAg IHBhZGRpbmctYm90dG9tOjE4cHg7DQp9DQoNCi54LWJ0bi10ZXh0LWljb24gLngtYnRuLWljb24t bWVkaXVtLWJvdHRvbSAueC1idG4tdGV4dHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50 ZXIgYm90dG9tOw0KCWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQogICAgcGFkZGluZy1i b3R0b206MjZweDsNCn0NCg0KLngtYnRuLXRleHQtaWNvbiAueC1idG4taWNvbi1sYXJnZS1ib3R0 b20gLngtYnRuLXRleHR7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGJvdHRvbTsN CgliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KICAgIHBhZGRpbmctYm90dG9tOjM0cHg7 DQp9DQoNCi8qIGJhY2tncm91bmQgcG9zaXRpb25pbmcgKi8NCi54LWJ0bi10ciBpLCAueC1idG4t dGwgaSwgLngtYnRuLW1yIGksIC54LWJ0bi1tbCBpLCAueC1idG4tYnIgaSwgLngtYnRuLWJsIGl7 DQoJZm9udC1zaXplOjFweDsNCiAgICBsaW5lLWhlaWdodDoxcHg7DQogICAgd2lkdGg6M3B4Ow0K ICAgIGRpc3BsYXk6YmxvY2s7DQogICAgb3ZlcmZsb3c6aGlkZGVuOw0KfQ0KDQoueC1idG4tdHIg aSwgLngtYnRuLXRsIGksIC54LWJ0bi1iciBpLCAueC1idG4tYmwgaXsNCgloZWlnaHQ6M3B4Ow0K fQ0KDQoueC1idG4tdGx7DQoJd2lkdGg6M3B4Ow0KCWhlaWdodDozcHg7DQoJYmFja2dyb3VuZDpu by1yZXBlYXQgMCAwOw0KfQ0KLngtYnRuLXRyew0KCXdpZHRoOjNweDsNCgloZWlnaHQ6M3B4Ow0K CWJhY2tncm91bmQ6bm8tcmVwZWF0IC0zcHggMDsNCn0NCi54LWJ0bi10Y3sNCgloZWlnaHQ6M3B4 Ow0KCWJhY2tncm91bmQ6cmVwZWF0LXggMCAtNnB4Ow0KfQ0KDQoueC1idG4tbWx7DQoJd2lkdGg6 M3B4Ow0KCWJhY2tncm91bmQ6bm8tcmVwZWF0IDAgLTI0cHg7DQp9DQoueC1idG4tbXJ7DQoJd2lk dGg6M3B4Ow0KCWJhY2tncm91bmQ6bm8tcmVwZWF0IC0zcHggLTI0cHg7DQp9DQoNCi54LWJ0bi1t Y3sNCgliYWNrZ3JvdW5kOnJlcGVhdC14IDAgLTEwOTZweDsNCiAgICB2ZXJ0aWNhbC1hbGlnbjog bWlkZGxlOw0KCXRleHQtYWxpZ246Y2VudGVyOw0KCXBhZGRpbmc6MCA1cHg7DQoJY3Vyc29yOnBv aW50ZXI7DQoJd2hpdGUtc3BhY2U6bm93cmFwOw0KfQ0KDQoueC1idG4tYmx7DQoJd2lkdGg6M3B4 Ow0KCWhlaWdodDozcHg7DQoJYmFja2dyb3VuZDpuby1yZXBlYXQgMCAtM3B4Ow0KfQ0KDQoueC1i dG4tYnJ7DQoJd2lkdGg6M3B4Ow0KCWhlaWdodDozcHg7DQoJYmFja2dyb3VuZDpuby1yZXBlYXQg LTNweCAtM3B4Ow0KfQ0KDQoueC1idG4tYmN7DQoJaGVpZ2h0OjNweDsNCgliYWNrZ3JvdW5kOnJl cGVhdC14IDAgLTE1cHg7DQp9DQoNCi54LWJ0bi1vdmVyIC54LWJ0bi10bHsNCgliYWNrZ3JvdW5k LXBvc2l0aW9uOiAtNnB4IDA7DQp9DQoNCi54LWJ0bi1vdmVyIC54LWJ0bi10cnsNCgliYWNrZ3Jv dW5kLXBvc2l0aW9uOiAtOXB4IDA7DQp9DQoNCi54LWJ0bi1vdmVyIC54LWJ0bi10Y3sNCgliYWNr Z3JvdW5kLXBvc2l0aW9uOiAwIC05cHg7DQp9DQoNCi54LWJ0bi1vdmVyIC54LWJ0bi1tbHsNCgli YWNrZ3JvdW5kLXBvc2l0aW9uOiAtNnB4IC0yNHB4Ow0KfQ0KDQoueC1idG4tb3ZlciAueC1idG4t bXJ7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogLTlweCAtMjRweDsNCn0NCg0KLngtYnRuLW92ZXIg LngtYnRuLW1jew0KCWJhY2tncm91bmQtcG9zaXRpb246IDAgLTIxNjhweDsNCn0NCg0KLngtYnRu LW92ZXIgLngtYnRuLWJsew0KCWJhY2tncm91bmQtcG9zaXRpb246IC02cHggLTNweDsNCn0NCg0K LngtYnRuLW92ZXIgLngtYnRuLWJyew0KCWJhY2tncm91bmQtcG9zaXRpb246IC05cHggLTNweDsN Cn0NCg0KLngtYnRuLW92ZXIgLngtYnRuLWJjew0KCWJhY2tncm91bmQtcG9zaXRpb246IDAgLTE4 cHg7DQp9DQoNCi54LWJ0bi1jbGljayAueC1idG4tdGwsIC54LWJ0bi1tZW51LWFjdGl2ZSAueC1i dG4tdGwsIC54LWJ0bi1wcmVzc2VkIC54LWJ0bi10bHsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAt MTJweCAwOw0KfQ0KDQoueC1idG4tY2xpY2sgLngtYnRuLXRyLCAueC1idG4tbWVudS1hY3RpdmUg LngtYnRuLXRyLCAueC1idG4tcHJlc3NlZCAueC1idG4tdHJ7DQoJYmFja2dyb3VuZC1wb3NpdGlv bjogLTE1cHggMDsNCn0NCg0KLngtYnRuLWNsaWNrIC54LWJ0bi10YywgLngtYnRuLW1lbnUtYWN0 aXZlIC54LWJ0bi10YywgLngtYnRuLXByZXNzZWQgLngtYnRuLXRjew0KCWJhY2tncm91bmQtcG9z aXRpb246IDAgLTEycHg7DQp9DQoNCi54LWJ0bi1jbGljayAueC1idG4tbWwsIC54LWJ0bi1tZW51 LWFjdGl2ZSAueC1idG4tbWwsIC54LWJ0bi1wcmVzc2VkIC54LWJ0bi1tbHsNCgliYWNrZ3JvdW5k LXBvc2l0aW9uOiAtMTJweCAtMjRweDsNCn0NCg0KLngtYnRuLWNsaWNrIC54LWJ0bi1tciwgLngt YnRuLW1lbnUtYWN0aXZlIC54LWJ0bi1tciwgLngtYnRuLXByZXNzZWQgLngtYnRuLW1yew0KCWJh Y2tncm91bmQtcG9zaXRpb246IC0xNXB4IC0yNHB4Ow0KfQ0KDQoueC1idG4tY2xpY2sgLngtYnRu LW1jLCAueC1idG4tbWVudS1hY3RpdmUgLngtYnRuLW1jLCAueC1idG4tcHJlc3NlZCAueC1idG4t bWN7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzI0MHB4Ow0KfQ0KDQoueC1idG4tY2xpY2sg LngtYnRuLWJsLCAueC1idG4tbWVudS1hY3RpdmUgLngtYnRuLWJsLCAueC1idG4tcHJlc3NlZCAu eC1idG4tYmx7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogLTEycHggLTNweDsNCn0NCg0KLngtYnRu LWNsaWNrIC54LWJ0bi1iciwgLngtYnRuLW1lbnUtYWN0aXZlIC54LWJ0bi1iciwgLngtYnRuLXBy ZXNzZWQgLngtYnRuLWJyew0KCWJhY2tncm91bmQtcG9zaXRpb246IC0xNXB4IC0zcHg7DQp9DQoN Ci54LWJ0bi1jbGljayAueC1idG4tYmMsIC54LWJ0bi1tZW51LWFjdGl2ZSAueC1idG4tYmMsIC54 LWJ0bi1wcmVzc2VkIC54LWJ0bi1iY3sNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMXB4Ow0K fQ0KDQoueC1idG4tZGlzYWJsZWQgKnsNCgljdXJzb3I6ZGVmYXVsdCAhaW1wb3J0YW50Ow0KfQ0K DQoNCi8qIFdpdGggYSBtZW51IGFycm93ICovDQovKiByaWdodCAqLw0KLngtYnRuLW1jIGVtLngt YnRuLWFycm93IHsNCiAgICBkaXNwbGF5OmJsb2NrOw0KICAgIGJhY2tncm91bmQ6dHJhbnNwYXJl bnQgbm8tcmVwZWF0IHJpZ2h0IGNlbnRlcjsNCglwYWRkaW5nLXJpZ2h0OjEwcHg7DQp9DQoNCi54 LWJ0bi1tYyBlbS54LWJ0bi1zcGxpdCB7DQogICAgZGlzcGxheTpibG9jazsNCiAgICBiYWNrZ3Jv dW5kOnRyYW5zcGFyZW50IG5vLXJlcGVhdCByaWdodCBjZW50ZXI7DQoJcGFkZGluZy1yaWdodDox NHB4Ow0KfQ0KDQovKiBib3R0b20gKi8NCi54LWJ0bi1tYyBlbS54LWJ0bi1hcnJvdy1ib3R0b20g ew0KICAgIGRpc3BsYXk6YmxvY2s7DQogICAgYmFja2dyb3VuZDp0cmFuc3BhcmVudCBuby1yZXBl YXQgY2VudGVyIGJvdHRvbTsNCglwYWRkaW5nLWJvdHRvbToxNHB4Ow0KfQ0KDQoueC1idG4tbWMg ZW0ueC1idG4tc3BsaXQtYm90dG9tIHsNCiAgICBkaXNwbGF5OmJsb2NrOw0KICAgIGJhY2tncm91 bmQ6dHJhbnNwYXJlbnQgbm8tcmVwZWF0IGNlbnRlciBib3R0b207DQoJcGFkZGluZy1ib3R0b206 MTRweDsNCn0NCg0KLyogaGVpZ2h0IGFkanVzdG1lbnQgY2xhc3MgKi8NCi54LWJ0bi1hcy1hcnJv dyAueC1idG4tbWMgZW0gew0KICAgIGRpc3BsYXk6YmxvY2s7DQogICAgYmFja2dyb3VuZDp0cmFu c3BhcmVudDsNCglwYWRkaW5nLWJvdHRvbToxNHB4Ow0KfQ0KDQovKiBncm91cHMgKi8NCi54LWJ0 bi1ncm91cCB7DQogICAgcGFkZGluZzoxcHg7DQp9DQoNCi54LWJ0bi1ncm91cC1oZWFkZXIgew0K ICAgIHBhZGRpbmc6MnB4Ow0KICAgIHRleHQtYWxpZ246Y2VudGVyOw0KfQ0KDQoueC1idG4tZ3Jv dXAtdGMgew0KCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHJlcGVhdC14IDAgMDsNCglvdmVyZmxv dzpoaWRkZW47DQp9DQoNCi54LWJ0bi1ncm91cC10bCB7DQoJYmFja2dyb3VuZDogdHJhbnNwYXJl bnQgbm8tcmVwZWF0IDAgMDsNCglwYWRkaW5nLWxlZnQ6M3B4Ow0KICAgIHpvb206MTsNCn0NCg0K LngtYnRuLWdyb3VwLXRyIHsNCgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCBuby1yZXBlYXQgcmln aHQgMDsNCgl6b29tOjE7DQogICAgcGFkZGluZy1yaWdodDozcHg7DQp9DQoNCi54LWJ0bi1ncm91 cC1iYyB7DQoJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgcmVwZWF0LXggMCBib3R0b207DQogICAg em9vbToxOw0KfQ0KDQoueC1idG4tZ3JvdXAtYmMgLngtcGFuZWwtZm9vdGVyIHsNCiAgICB6b29t OjE7DQp9DQoNCi54LWJ0bi1ncm91cC1ibCB7DQoJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgbm8t cmVwZWF0IDAgYm90dG9tOw0KCXBhZGRpbmctbGVmdDozcHg7DQogICAgem9vbToxOw0KfQ0KDQou eC1idG4tZ3JvdXAtYnIgew0KCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50IG5vLXJlcGVhdCByaWdo dCBib3R0b207DQoJcGFkZGluZy1yaWdodDozcHg7DQogICAgem9vbToxOw0KfQ0KDQoueC1idG4t Z3JvdXAtbWMgew0KICAgIGJvcmRlcjowIG5vbmU7DQogICAgcGFkZGluZzoxcHggMCAwIDA7DQog ICAgbWFyZ2luOjA7DQp9DQoNCi54LWJ0bi1ncm91cC1tYyAueC1idG4tZ3JvdXAtYm9keSB7DQog ICAgYmFja2dyb3VuZDp0cmFuc3BhcmVudDsNCiAgICBib3JkZXI6IDAgbm9uZTsNCn0NCg0KLngt YnRuLWdyb3VwLW1sIHsNCgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCByZXBlYXQteSAwIDA7DQoJ cGFkZGluZy1sZWZ0OjNweDsNCiAgICB6b29tOjE7DQp9DQoNCi54LWJ0bi1ncm91cC1tciB7DQoJ YmFja2dyb3VuZDogdHJhbnNwYXJlbnQgcmVwZWF0LXkgcmlnaHQgMDsNCglwYWRkaW5nLXJpZ2h0 OjNweDsNCiAgICB6b29tOjE7DQp9DQoNCi54LWJ0bi1ncm91cC1iYyAueC1idG4tZ3JvdXAtZm9v dGVyIHsNCiAgICBwYWRkaW5nLWJvdHRvbTo2cHg7DQp9DQoNCi54LXBhbmVsLW5vZm9vdGVyIC54 LWJ0bi1ncm91cC1iYyB7DQoJaGVpZ2h0OjNweDsNCiAgICBmb250LXNpemU6MDsNCiAgICBsaW5l LWhlaWdodDowOw0KfQ0KDQoueC1idG4tZ3JvdXAtYndyYXAgew0KICAgIG92ZXJmbG93OmhpZGRl bjsNCiAgICB6b29tOjE7DQp9DQoNCi54LWJ0bi1ncm91cC1ib2R5IHsNCiAgICBvdmVyZmxvdzpo aWRkZW47DQogICAgem9vbToxOw0KfQ0KDQoueC1idG4tZ3JvdXAtbm90aXRsZSAueC1idG4tZ3Jv dXAtdGMgew0KCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHJlcGVhdC14IDAgMDsNCglvdmVyZmxv dzpoaWRkZW47DQogICAgaGVpZ2h0OjJweDsNCn0ueC10b29sYmFyew0KICAgIGJvcmRlci1zdHls ZTpzb2xpZDsNCiAgICBib3JkZXItd2lkdGg6MCAwIDFweCAwOw0KICAgIGRpc3BsYXk6IGJsb2Nr Ow0KCXBhZGRpbmc6MnB4Ow0KICAgIGJhY2tncm91bmQ6cmVwZWF0LXggdG9wIGxlZnQ7DQogICAg cG9zaXRpb246cmVsYXRpdmU7DQogICAgbGVmdDowOw0KICAgIHRvcDowOw0KICAgIHpvb206MTsN CiAgICBvdmVyZmxvdzpoaWRkZW47DQp9DQoNCi54LXRvb2xiYXIgLngtaXRlbS1kaXNhYmxlZCAu eC1idG4taWNvbiB7DQogICAgb3BhY2l0eTogLjM1Ow0KICAgIC1tb3otb3BhY2l0eTogLjM1Ow0K ICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT0zNSk7DQp9DQoNCi54LXRvb2xiYXIgdGQgew0KCXZl cnRpY2FsLWFsaWduOm1pZGRsZTsNCn0NCg0KLngtdG9vbGJhciB0ZCwueC10b29sYmFyIHNwYW4s LngtdG9vbGJhciBpbnB1dCwueC10b29sYmFyIGRpdiwueC10b29sYmFyIHNlbGVjdCwueC10b29s YmFyIGxhYmVsew0KCXdoaXRlLXNwYWNlOiBub3dyYXA7DQp9DQoNCi54LXRvb2xiYXIgLngtaXRl bS1kaXNhYmxlZCB7DQoJY3Vyc29yOmRlZmF1bHQ7DQoJb3BhY2l0eTouNjsNCgktbW96LW9wYWNp dHk6LjY7DQoJZmlsdGVyOmFscGhhKG9wYWNpdHk9NjApOw0KfQ0KDQoueC10b29sYmFyIC54LWl0 ZW0tZGlzYWJsZWQgKiB7DQoJY3Vyc29yOmRlZmF1bHQ7DQp9DQoNCi54LXRvb2xiYXIgLngtdG9v bGJhci1jZWxsIHsNCiAgICB2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7DQp9DQoNCi54LXRvb2xiYXIg LngtYnRuLXRsLCAueC10b29sYmFyIC54LWJ0bi10ciwgLngtdG9vbGJhciAueC1idG4tdGMsIC54 LXRvb2xiYXIgLngtYnRuLW1sLCAueC10b29sYmFyIC54LWJ0bi1tciwgDQoueC10b29sYmFyIC54 LWJ0bi1tYywgLngtdG9vbGJhciAueC1idG4tYmwsIC54LXRvb2xiYXIgLngtYnRuLWJyLCAueC10 b29sYmFyIC54LWJ0bi1iYw0Kew0KCWJhY2tncm91bmQtcG9zaXRpb246IDUwMHB4IDUwMHB4Ow0K fQ0KDQovKiBUaGVzZSBydWxlcyBhcmUgZHVwbGljYXRlZCBmcm9tIGJ1dHRvbi5jc3MgdG8gZ2l2 ZSBwcmlvcml0eSBvZiB4LXRvb2xiYXIgcnVsZXMgYWJvdmUgKi8NCi54LXRvb2xiYXIgLngtYnRu LW92ZXIgLngtYnRuLXRsew0KCWJhY2tncm91bmQtcG9zaXRpb246IC02cHggMDsNCn0NCg0KLngt dG9vbGJhciAueC1idG4tb3ZlciAueC1idG4tdHJ7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogLTlw eCAwOw0KfQ0KDQoueC10b29sYmFyIC54LWJ0bi1vdmVyIC54LWJ0bi10Y3sNCgliYWNrZ3JvdW5k LXBvc2l0aW9uOiAwIC05cHg7DQp9DQoNCi54LXRvb2xiYXIgLngtYnRuLW92ZXIgLngtYnRuLW1s ew0KCWJhY2tncm91bmQtcG9zaXRpb246IC02cHggLTI0cHg7DQp9DQoNCi54LXRvb2xiYXIgLngt YnRuLW92ZXIgLngtYnRuLW1yew0KCWJhY2tncm91bmQtcG9zaXRpb246IC05cHggLTI0cHg7DQp9 DQoNCi54LXRvb2xiYXIgLngtYnRuLW92ZXIgLngtYnRuLW1jew0KCWJhY2tncm91bmQtcG9zaXRp b246IDAgLTIxNjhweDsNCn0NCg0KLngtdG9vbGJhciAueC1idG4tb3ZlciAueC1idG4tYmx7DQoJ YmFja2dyb3VuZC1wb3NpdGlvbjogLTZweCAtM3B4Ow0KfQ0KDQoueC10b29sYmFyIC54LWJ0bi1v dmVyIC54LWJ0bi1icnsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOXB4IC0zcHg7DQp9DQoNCi54 LXRvb2xiYXIgLngtYnRuLW92ZXIgLngtYnRuLWJjew0KCWJhY2tncm91bmQtcG9zaXRpb246IDAg LTE4cHg7DQp9DQoNCi54LXRvb2xiYXIgLngtYnRuLWNsaWNrIC54LWJ0bi10bCwgLngtdG9vbGJh ciAueC1idG4tbWVudS1hY3RpdmUgLngtYnRuLXRsLCAueC10b29sYmFyIC54LWJ0bi1wcmVzc2Vk IC54LWJ0bi10bHsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTJweCAwOw0KfQ0KDQoueC10b29s YmFyIC54LWJ0bi1jbGljayAueC1idG4tdHIsIC54LXRvb2xiYXIgLngtYnRuLW1lbnUtYWN0aXZl IC54LWJ0bi10ciwgLngtdG9vbGJhciAueC1idG4tcHJlc3NlZCAueC1idG4tdHJ7DQoJYmFja2dy b3VuZC1wb3NpdGlvbjogLTE1cHggMDsNCn0NCg0KLngtdG9vbGJhciAueC1idG4tY2xpY2sgLngt YnRuLXRjLCAueC10b29sYmFyIC54LWJ0bi1tZW51LWFjdGl2ZSAueC1idG4tdGMsIC54LXRvb2xi YXIgLngtYnRuLXByZXNzZWQgLngtYnRuLXRjew0KCWJhY2tncm91bmQtcG9zaXRpb246IDAgLTEy cHg7DQp9DQoNCi54LXRvb2xiYXIgLngtYnRuLWNsaWNrIC54LWJ0bi1tbCwgLngtdG9vbGJhciAu eC1idG4tbWVudS1hY3RpdmUgLngtYnRuLW1sLCAueC10b29sYmFyIC54LWJ0bi1wcmVzc2VkIC54 LWJ0bi1tbHsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTJweCAtMjRweDsNCn0NCg0KLngtdG9v bGJhciAueC1idG4tY2xpY2sgLngtYnRuLW1yLCAueC10b29sYmFyIC54LWJ0bi1tZW51LWFjdGl2 ZSAueC1idG4tbXIsIC54LXRvb2xiYXIgLngtYnRuLXByZXNzZWQgLngtYnRuLW1yew0KCWJhY2tn cm91bmQtcG9zaXRpb246IC0xNXB4IC0yNHB4Ow0KfQ0KDQoueC10b29sYmFyIC54LWJ0bi1jbGlj ayAueC1idG4tbWMsIC54LXRvb2xiYXIgLngtYnRuLW1lbnUtYWN0aXZlIC54LWJ0bi1tYywgLngt dG9vbGJhciAueC1idG4tcHJlc3NlZCAueC1idG4tbWN7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjog MCAtMzI0MHB4Ow0KfQ0KDQoueC10b29sYmFyIC54LWJ0bi1jbGljayAueC1idG4tYmwsIC54LXRv b2xiYXIgLngtYnRuLW1lbnUtYWN0aXZlIC54LWJ0bi1ibCwgLngtdG9vbGJhciAueC1idG4tcHJl c3NlZCAueC1idG4tYmx7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogLTEycHggLTNweDsNCn0NCg0K LngtdG9vbGJhciAueC1idG4tY2xpY2sgLngtYnRuLWJyLCAueC10b29sYmFyIC54LWJ0bi1tZW51 LWFjdGl2ZSAueC1idG4tYnIsIC54LXRvb2xiYXIgLngtYnRuLXByZXNzZWQgLngtYnRuLWJyew0K CWJhY2tncm91bmQtcG9zaXRpb246IC0xNXB4IC0zcHg7DQp9DQoNCi54LXRvb2xiYXIgLngtYnRu LWNsaWNrIC54LWJ0bi1iYywgLngtdG9vbGJhciAueC1idG4tbWVudS1hY3RpdmUgLngtYnRuLWJj LCAueC10b29sYmFyIC54LWJ0bi1wcmVzc2VkIC54LWJ0bi1iY3sNCgliYWNrZ3JvdW5kLXBvc2l0 aW9uOiAwIC0yMXB4Ow0KfQ0KDQoueC10b29sYmFyIGRpdi54dGItdGV4dHsNCiAgICBwYWRkaW5n OjJweCAycHggMDsNCiAgICBsaW5lLWhlaWdodDoxNnB4Ow0KICAgIGRpc3BsYXk6YmxvY2s7DQp9 DQoNCi54LXRvb2xiYXIgLnh0Yi1zZXAgew0KCWJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsN CgliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KCWRpc3BsYXk6IGJsb2NrOw0KCWZvbnQt c2l6ZTogMXB4Ow0KCWhlaWdodDogMTZweDsNCgl3aWR0aDo0cHg7DQoJb3ZlcmZsb3c6IGhpZGRl bjsNCgljdXJzb3I6ZGVmYXVsdDsNCgltYXJnaW46IDAgMnB4IDA7DQoJYm9yZGVyOjA7DQp9DQoN Ci54LXRvb2xiYXIgLnh0Yi1zcGFjZXIgew0KICAgIHdpZHRoOjJweDsNCn0NCg0KLyogUGFnaW5n IFRvb2xiYXIgKi8NCi54LXRiYXItcGFnZS1udW1iZXJ7DQoJd2lkdGg6MzBweDsNCgloZWlnaHQ6 MTRweDsNCn0NCg0KLmV4dC1pZSAueC10YmFyLXBhZ2UtbnVtYmVyew0KICAgIG1hcmdpbi10b3A6 IDJweDsNCn0NCg0KLngtcGFnaW5nLWluZm8gew0KICAgIHBvc2l0aW9uOmFic29sdXRlOw0KICAg IHRvcDo1cHg7DQogICAgcmlnaHQ6IDhweDsNCn0NCg0KLyogZmxvYXRpbmcgKi8NCi54LXRvb2xi YXItY3Qgew0KICAgIHdpZHRoOjEwMCU7DQp9DQoNCi54LXRvb2xiYXItcmlnaHQgdGQgew0KICAg IHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KLngtcGFuZWwtdGJhciwgLngtcGFuZWwtYmJhciwg Lngtd2luZG93LXRiYXIsIC54LXdpbmRvdy1iYmFyLCAueC10YWItcGFuZWwtdGJhciwgLngtdGFi LXBhbmVsLWJiYXIsIC54LXBsYWluLXRiYXIsIC54LXBsYWluLWJiYXIgew0KICAgIG92ZXJmbG93 OmhpZGRlbjsNCiAgICB6b29tOjE7DQp9DQoNCi54LXRvb2xiYXItbW9yZSAueC1idG4tc21hbGwg LngtYnRuLXRleHR7DQoJaGVpZ2h0OiAxNnB4Ow0KCXdpZHRoOiAxMnB4Ow0KfQ0KDQoueC10b29s YmFyLW1vcmUgZW0ueC1idG4tYXJyb3cgew0KICAgIGRpc3BsYXk6aW5saW5lOw0KICAgIGJhY2tn cm91bmQ6dHJhbnNwYXJlbnQ7DQoJcGFkZGluZy1yaWdodDowOw0KfQ0KDQoueC10b29sYmFyLW1v cmUgLngtYnRuLW1jIGVtLngtYnRuLWFycm93IHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25l Ow0KfQ0KDQpkaXYueC10b29sYmFyLW5vLWl0ZW1zIHsNCiAgICBjb2xvcjpncmF5ICFpbXBvcnRh bnQ7DQogICAgcGFkZGluZzo1cHggMTBweCAhaW1wb3J0YW50Ow0KfQ0KDQovKiBmaXggaWUgdG9v bGJhciBmb3JtIGl0ZW1zICovDQouZXh0LWJvcmRlci1ib3ggLngtdG9vbGJhci1jZWxsIC54LWZv cm0tdGV4dCB7DQogICAgbWFyZ2luLWJvdHRvbTotMXB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5leHQt Ym9yZGVyLWJveCAueC10b29sYmFyLWNlbGwgLngtZm9ybS1maWVsZC13cmFwIC54LWZvcm0tdGV4 dCB7DQogICAgbWFyZ2luOjAgIWltcG9ydGFudDsNCn0NCg0KLmV4dC1pZSAueC10b29sYmFyLWNl bGwgLngtZm9ybS1maWVsZC13cmFwIHsNCiAgICBoZWlnaHQ6MjFweDsNCn0NCg0KLmV4dC1pZSAu eC10b29sYmFyLWNlbGwgLngtZm9ybS10ZXh0IHsNCiAgICBwb3NpdGlvbjpyZWxhdGl2ZTsNCiAg ICB0b3A6LTFweDsNCn0NCg0KLmV4dC1zdHJpY3QgLmV4dC1pZTggLngtdG9vbGJhci1jZWxsIC54 LWZvcm0tZmllbGQtdHJpZ2dlci13cmFwIC54LWZvcm0tdGV4dCwgLmV4dC1zdHJpY3QgLmV4dC1p ZSAueC10b29sYmFyLWNlbGwgLngtZm9ybS10ZXh0IHsNCiAgICB0b3A6IDBweDsNCn0NCg0KLngt dG9vbGJhci1yaWdodCB0ZCAueC1mb3JtLWZpZWxkLXRyaWdnZXItd3JhcHsNCiAgICB0ZXh0LWFs aWduOiBsZWZ0Ow0KfQ0KDQoueC10b29sYmFyLWNlbGwgLngtZm9ybS1jaGVja2JveCwgLngtdG9v bGJhci1jZWxsIC54LWZvcm0tcmFkaW97DQogICAgdmVydGljYWwtYWxpZ246IHRvcDsNCiAgICBt YXJnaW4tdG9wOiA1cHg7DQp9DQoNCi5leHQtaWUgLngtdG9vbGJhci1jZWxsIC54LWZvcm0tY2hl Y2tib3gsIC5leHQtaWUgLngtdG9vbGJhci1jZWxsIC54LWZvcm0tcmFkaW97DQogICAgbWFyZ2lu LXRvcDogNHB4Ow0KfQ0KDQoueC10b29sYmFyLWNlbGwgLngtZm9ybS1jaGVjay13cmFwIGxhYmVs ew0KICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207DQp9DQoNCi8qIFN0YXR1c0JhciAqLw0KLngt c3RhdHVzYmFyIC54LXN0YXR1cy10ZXh0IHsNCiAgICBoZWlnaHQ6IDIxcHg7DQogICAgbGluZS1o ZWlnaHQ6IDIxcHg7DQogICAgcGFkZGluZzogMCA0cHg7DQogICAgY3Vyc29yOiBkZWZhdWx0Ow0K fQ0KDQoueC1zdGF0dXNiYXIgLngtc3RhdHVzLWJ1c3kgew0KICAgIHBhZGRpbmctbGVmdDogMjVw eDsNCiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCBuby1yZXBlYXQgM3B4IDNweDsNCn0NCg0K Lngtc3RhdHVzYmFyIC54LXN0YXR1cy10ZXh0LXBhbmVsIHsNCiAgICBib3JkZXItdG9wOiAxcHgg c29saWQ7DQogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQ7DQogICAgYm9yZGVyLWJvdHRvbTog MXB4IHNvbGlkOw0KICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQ7DQogICAgcGFkZGluZzogMnB4 IDhweCAycHggNXB4Ow0KfS54LXRvb2xiYXJ7DQogICAgYm9yZGVyLXN0eWxlOnNvbGlkOw0KICAg IGJvcmRlci13aWR0aDowIDAgMXB4IDA7DQogICAgZGlzcGxheTogYmxvY2s7DQoJcGFkZGluZzoy cHg7DQogICAgYmFja2dyb3VuZDpyZXBlYXQteCB0b3AgbGVmdDsNCiAgICBwb3NpdGlvbjpyZWxh dGl2ZTsNCiAgICBsZWZ0OjA7DQogICAgdG9wOjA7DQogICAgem9vbToxOw0KICAgIG92ZXJmbG93 OmhpZGRlbjsNCn0NCg0KLngtdG9vbGJhciAueC1pdGVtLWRpc2FibGVkIC54LWJ0bi1pY29uIHsN CiAgICBvcGFjaXR5OiAuMzU7DQogICAgLW1vei1vcGFjaXR5OiAuMzU7DQogICAgZmlsdGVyOiBh bHBoYShvcGFjaXR5PTM1KTsNCn0NCg0KLngtdG9vbGJhciB0ZCB7DQoJdmVydGljYWwtYWxpZ246 bWlkZGxlOw0KfQ0KDQoueC10b29sYmFyIHRkLC54LXRvb2xiYXIgc3BhbiwueC10b29sYmFyIGlu cHV0LC54LXRvb2xiYXIgZGl2LC54LXRvb2xiYXIgc2VsZWN0LC54LXRvb2xiYXIgbGFiZWx7DQoJ d2hpdGUtc3BhY2U6IG5vd3JhcDsNCn0NCg0KLngtdG9vbGJhciAueC1pdGVtLWRpc2FibGVkIHsN CgljdXJzb3I6ZGVmYXVsdDsNCglvcGFjaXR5Oi42Ow0KCS1tb3otb3BhY2l0eTouNjsNCglmaWx0 ZXI6YWxwaGEob3BhY2l0eT02MCk7DQp9DQoNCi54LXRvb2xiYXIgLngtaXRlbS1kaXNhYmxlZCAq IHsNCgljdXJzb3I6ZGVmYXVsdDsNCn0NCg0KLngtdG9vbGJhciAueC10b29sYmFyLWNlbGwgew0K ICAgIHZlcnRpY2FsLWFsaWduOm1pZGRsZTsNCn0NCg0KLngtdG9vbGJhciAueC1idG4tdGwsIC54 LXRvb2xiYXIgLngtYnRuLXRyLCAueC10b29sYmFyIC54LWJ0bi10YywgLngtdG9vbGJhciAueC1i dG4tbWwsIC54LXRvb2xiYXIgLngtYnRuLW1yLCANCi54LXRvb2xiYXIgLngtYnRuLW1jLCAueC10 b29sYmFyIC54LWJ0bi1ibCwgLngtdG9vbGJhciAueC1idG4tYnIsIC54LXRvb2xiYXIgLngtYnRu LWJjDQp7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogNTAwcHggNTAwcHg7DQp9DQoNCi8qIFRoZXNl IHJ1bGVzIGFyZSBkdXBsaWNhdGVkIGZyb20gYnV0dG9uLmNzcyB0byBnaXZlIHByaW9yaXR5IG9m IHgtdG9vbGJhciBydWxlcyBhYm92ZSAqLw0KLngtdG9vbGJhciAueC1idG4tb3ZlciAueC1idG4t dGx7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogLTZweCAwOw0KfQ0KDQoueC10b29sYmFyIC54LWJ0 bi1vdmVyIC54LWJ0bi10cnsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOXB4IDA7DQp9DQoNCi54 LXRvb2xiYXIgLngtYnRuLW92ZXIgLngtYnRuLXRjew0KCWJhY2tncm91bmQtcG9zaXRpb246IDAg LTlweDsNCn0NCg0KLngtdG9vbGJhciAueC1idG4tb3ZlciAueC1idG4tbWx7DQoJYmFja2dyb3Vu ZC1wb3NpdGlvbjogLTZweCAtMjRweDsNCn0NCg0KLngtdG9vbGJhciAueC1idG4tb3ZlciAueC1i dG4tbXJ7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogLTlweCAtMjRweDsNCn0NCg0KLngtdG9vbGJh ciAueC1idG4tb3ZlciAueC1idG4tbWN7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjE2OHB4 Ow0KfQ0KDQoueC10b29sYmFyIC54LWJ0bi1vdmVyIC54LWJ0bi1ibHsNCgliYWNrZ3JvdW5kLXBv c2l0aW9uOiAtNnB4IC0zcHg7DQp9DQoNCi54LXRvb2xiYXIgLngtYnRuLW92ZXIgLngtYnRuLWJy ew0KCWJhY2tncm91bmQtcG9zaXRpb246IC05cHggLTNweDsNCn0NCg0KLngtdG9vbGJhciAueC1i dG4tb3ZlciAueC1idG4tYmN7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMThweDsNCn0NCg0K LngtdG9vbGJhciAueC1idG4tY2xpY2sgLngtYnRuLXRsLCAueC10b29sYmFyIC54LWJ0bi1tZW51 LWFjdGl2ZSAueC1idG4tdGwsIC54LXRvb2xiYXIgLngtYnRuLXByZXNzZWQgLngtYnRuLXRsew0K CWJhY2tncm91bmQtcG9zaXRpb246IC0xMnB4IDA7DQp9DQoNCi54LXRvb2xiYXIgLngtYnRuLWNs aWNrIC54LWJ0bi10ciwgLngtdG9vbGJhciAueC1idG4tbWVudS1hY3RpdmUgLngtYnRuLXRyLCAu eC10b29sYmFyIC54LWJ0bi1wcmVzc2VkIC54LWJ0bi10cnsNCgliYWNrZ3JvdW5kLXBvc2l0aW9u OiAtMTVweCAwOw0KfQ0KDQoueC10b29sYmFyIC54LWJ0bi1jbGljayAueC1idG4tdGMsIC54LXRv b2xiYXIgLngtYnRuLW1lbnUtYWN0aXZlIC54LWJ0bi10YywgLngtdG9vbGJhciAueC1idG4tcHJl c3NlZCAueC1idG4tdGN7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTJweDsNCn0NCg0KLngt dG9vbGJhciAueC1idG4tY2xpY2sgLngtYnRuLW1sLCAueC10b29sYmFyIC54LWJ0bi1tZW51LWFj dGl2ZSAueC1idG4tbWwsIC54LXRvb2xiYXIgLngtYnRuLXByZXNzZWQgLngtYnRuLW1sew0KCWJh Y2tncm91bmQtcG9zaXRpb246IC0xMnB4IC0yNHB4Ow0KfQ0KDQoueC10b29sYmFyIC54LWJ0bi1j bGljayAueC1idG4tbXIsIC54LXRvb2xiYXIgLngtYnRuLW1lbnUtYWN0aXZlIC54LWJ0bi1tciwg LngtdG9vbGJhciAueC1idG4tcHJlc3NlZCAueC1idG4tbXJ7DQoJYmFja2dyb3VuZC1wb3NpdGlv bjogLTE1cHggLTI0cHg7DQp9DQoNCi54LXRvb2xiYXIgLngtYnRuLWNsaWNrIC54LWJ0bi1tYywg LngtdG9vbGJhciAueC1idG4tbWVudS1hY3RpdmUgLngtYnRuLW1jLCAueC10b29sYmFyIC54LWJ0 bi1wcmVzc2VkIC54LWJ0bi1tY3sNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0zMjQwcHg7DQp9 DQoNCi54LXRvb2xiYXIgLngtYnRuLWNsaWNrIC54LWJ0bi1ibCwgLngtdG9vbGJhciAueC1idG4t bWVudS1hY3RpdmUgLngtYnRuLWJsLCAueC10b29sYmFyIC54LWJ0bi1wcmVzc2VkIC54LWJ0bi1i bHsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTJweCAtM3B4Ow0KfQ0KDQoueC10b29sYmFyIC54 LWJ0bi1jbGljayAueC1idG4tYnIsIC54LXRvb2xiYXIgLngtYnRuLW1lbnUtYWN0aXZlIC54LWJ0 bi1iciwgLngtdG9vbGJhciAueC1idG4tcHJlc3NlZCAueC1idG4tYnJ7DQoJYmFja2dyb3VuZC1w b3NpdGlvbjogLTE1cHggLTNweDsNCn0NCg0KLngtdG9vbGJhciAueC1idG4tY2xpY2sgLngtYnRu LWJjLCAueC10b29sYmFyIC54LWJ0bi1tZW51LWFjdGl2ZSAueC1idG4tYmMsIC54LXRvb2xiYXIg LngtYnRuLXByZXNzZWQgLngtYnRuLWJjew0KCWJhY2tncm91bmQtcG9zaXRpb246IDAgLTIxcHg7 DQp9DQoNCi54LXRvb2xiYXIgZGl2Lnh0Yi10ZXh0ew0KICAgIHBhZGRpbmc6MnB4IDJweCAwOw0K ICAgIGxpbmUtaGVpZ2h0OjE2cHg7DQogICAgZGlzcGxheTpibG9jazsNCn0NCg0KLngtdG9vbGJh ciAueHRiLXNlcCB7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOw0KCWJhY2tncm91bmQt cmVwZWF0OiBuby1yZXBlYXQ7DQoJZGlzcGxheTogYmxvY2s7DQoJZm9udC1zaXplOiAxcHg7DQoJ aGVpZ2h0OiAxNnB4Ow0KCXdpZHRoOjRweDsNCglvdmVyZmxvdzogaGlkZGVuOw0KCWN1cnNvcjpk ZWZhdWx0Ow0KCW1hcmdpbjogMCAycHggMDsNCglib3JkZXI6MDsNCn0NCg0KLngtdG9vbGJhciAu eHRiLXNwYWNlciB7DQogICAgd2lkdGg6MnB4Ow0KfQ0KDQovKiBQYWdpbmcgVG9vbGJhciAqLw0K LngtdGJhci1wYWdlLW51bWJlcnsNCgl3aWR0aDozMHB4Ow0KCWhlaWdodDoxNHB4Ow0KfQ0KDQou ZXh0LWllIC54LXRiYXItcGFnZS1udW1iZXJ7DQogICAgbWFyZ2luLXRvcDogMnB4Ow0KfQ0KDQou eC1wYWdpbmctaW5mbyB7DQogICAgcG9zaXRpb246YWJzb2x1dGU7DQogICAgdG9wOjVweDsNCiAg ICByaWdodDogOHB4Ow0KfQ0KDQovKiBmbG9hdGluZyAqLw0KLngtdG9vbGJhci1jdCB7DQogICAg d2lkdGg6MTAwJTsNCn0NCg0KLngtdG9vbGJhci1yaWdodCB0ZCB7DQogICAgdGV4dC1hbGlnbjog Y2VudGVyOw0KfQ0KDQoueC1wYW5lbC10YmFyLCAueC1wYW5lbC1iYmFyLCAueC13aW5kb3ctdGJh ciwgLngtd2luZG93LWJiYXIsIC54LXRhYi1wYW5lbC10YmFyLCAueC10YWItcGFuZWwtYmJhciwg LngtcGxhaW4tdGJhciwgLngtcGxhaW4tYmJhciB7DQogICAgb3ZlcmZsb3c6aGlkZGVuOw0KICAg IHpvb206MTsNCn0NCg0KLngtdG9vbGJhci1tb3JlIC54LWJ0bi1zbWFsbCAueC1idG4tdGV4dHsN CgloZWlnaHQ6IDE2cHg7DQoJd2lkdGg6IDEycHg7DQp9DQoNCi54LXRvb2xiYXItbW9yZSBlbS54 LWJ0bi1hcnJvdyB7DQogICAgZGlzcGxheTppbmxpbmU7DQogICAgYmFja2dyb3VuZDp0cmFuc3Bh cmVudDsNCglwYWRkaW5nLXJpZ2h0OjA7DQp9DQoNCi54LXRvb2xiYXItbW9yZSAueC1idG4tbWMg ZW0ueC1idG4tYXJyb3cgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7DQp9DQoNCmRpdi54 LXRvb2xiYXItbm8taXRlbXMgew0KICAgIGNvbG9yOmdyYXkgIWltcG9ydGFudDsNCiAgICBwYWRk aW5nOjVweCAxMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi8qIGZpeCBpZSB0b29sYmFyIGZvcm0gaXRl bXMgKi8NCi5leHQtYm9yZGVyLWJveCAueC10b29sYmFyLWNlbGwgLngtZm9ybS10ZXh0IHsNCiAg ICBtYXJnaW4tYm90dG9tOi0xcHggIWltcG9ydGFudDsNCn0NCg0KLmV4dC1ib3JkZXItYm94IC54 LXRvb2xiYXItY2VsbCAueC1mb3JtLWZpZWxkLXdyYXAgLngtZm9ybS10ZXh0IHsNCiAgICBtYXJn aW46MCAhaW1wb3J0YW50Ow0KfQ0KDQouZXh0LWllIC54LXRvb2xiYXItY2VsbCAueC1mb3JtLWZp ZWxkLXdyYXAgew0KICAgIGhlaWdodDoyMXB4Ow0KfQ0KDQouZXh0LWllIC54LXRvb2xiYXItY2Vs bCAueC1mb3JtLXRleHQgew0KICAgIHBvc2l0aW9uOnJlbGF0aXZlOw0KICAgIHRvcDotMXB4Ow0K fQ0KDQouZXh0LXN0cmljdCAuZXh0LWllOCAueC10b29sYmFyLWNlbGwgLngtZm9ybS1maWVsZC10 cmlnZ2VyLXdyYXAgLngtZm9ybS10ZXh0LCAuZXh0LXN0cmljdCAuZXh0LWllIC54LXRvb2xiYXIt Y2VsbCAueC1mb3JtLXRleHQgew0KICAgIHRvcDogMHB4Ow0KfQ0KDQoueC10b29sYmFyLXJpZ2h0 IHRkIC54LWZvcm0tZmllbGQtdHJpZ2dlci13cmFwew0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9 DQoNCi54LXRvb2xiYXItY2VsbCAueC1mb3JtLWNoZWNrYm94LCAueC10b29sYmFyLWNlbGwgLngt Zm9ybS1yYWRpb3sNCiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOw0KICAgIG1hcmdpbi10b3A6IDVw eDsNCn0NCg0KLmV4dC1pZSAueC10b29sYmFyLWNlbGwgLngtZm9ybS1jaGVja2JveCwgLmV4dC1p ZSAueC10b29sYmFyLWNlbGwgLngtZm9ybS1yYWRpb3sNCiAgICBtYXJnaW4tdG9wOiA0cHg7DQp9 DQoNCi54LXRvb2xiYXItY2VsbCAueC1mb3JtLWNoZWNrLXdyYXAgbGFiZWx7DQogICAgdmVydGlj YWwtYWxpZ246IGJvdHRvbTsNCn0NCg0KLyogU3RhdHVzQmFyICovDQoueC1zdGF0dXNiYXIgLngt c3RhdHVzLXRleHQgew0KICAgIGhlaWdodDogMjFweDsNCiAgICBsaW5lLWhlaWdodDogMjFweDsN CiAgICBwYWRkaW5nOiAwIDRweDsNCiAgICBjdXJzb3I6IGRlZmF1bHQ7DQp9DQoNCi54LXN0YXR1 c2JhciAueC1zdGF0dXMtYnVzeSB7DQogICAgcGFkZGluZy1sZWZ0OiAyNXB4Ow0KICAgIGJhY2tn cm91bmQ6IHRyYW5zcGFyZW50IG5vLXJlcGVhdCAzcHggM3B4Ow0KfQ0KDQoueC1zdGF0dXNiYXIg Lngtc3RhdHVzLXRleHQtcGFuZWwgew0KICAgIGJvcmRlci10b3A6IDFweCBzb2xpZDsNCiAgICBi b3JkZXItcmlnaHQ6IDFweCBzb2xpZDsNCiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQ7DQog ICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZDsNCiAgICBwYWRkaW5nOiAycHggOHB4IDJweCA1cHg7 DQp9LyogR3JpZDMgc3R5bGVzICovDQoueC1ncmlkMyB7DQoJcG9zaXRpb246cmVsYXRpdmU7DQoJ b3ZlcmZsb3c6aGlkZGVuOw0KfQ0KDQoueC1ncmlkLXBhbmVsIC54LXBhbmVsLWJvZHkgew0KICAg IG92ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50Ow0KfQ0KDQoueC1ncmlkLXBhbmVsIC54LXBhbmVs LW1jIC54LXBhbmVsLWJvZHkgew0KICAgIGJvcmRlcjoxcHggc29saWQ7DQp9DQoNCi54LWdyaWQz IHRhYmxlIHsNCiAgICB0YWJsZS1sYXlvdXQ6Zml4ZWQ7DQp9DQoNCi54LWdyaWQzLXZpZXdwb3J0 ew0KCW92ZXJmbG93OmhpZGRlbjsNCn0NCg0KLngtZ3JpZDMtaGQtcm93IHRkLCAueC1ncmlkMy1y b3cgdGQsIC54LWdyaWQzLXN1bW1hcnktcm93IHRkew0KICAgIC1tb3otb3V0bGluZTogbm9uZTsN CgktbW96LXVzZXItZm9jdXM6IG5vcm1hbDsNCn0NCg0KLngtZ3JpZDMtcm93IHRkLCAueC1ncmlk My1zdW1tYXJ5LXJvdyB0ZCB7DQogICAgbGluZS1oZWlnaHQ6MTNweDsNCiAgICB2ZXJ0aWNhbC1h bGlnbjogdG9wOw0KCXBhZGRpbmctbGVmdDoxcHg7DQogICAgcGFkZGluZy1yaWdodDoxcHg7DQog ICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsNCiAgICAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsN CiAgICAtd2Via2l0LXVzZXItc2VsZWN0Omlnbm9yZTsNCn0NCg0KLngtZ3JpZDMtY2VsbHsNCiAg ICAtbW96LXVzZXItc2VsZWN0OiBub25lOw0KICAgIC1raHRtbC11c2VyLXNlbGVjdDpub25lOw0K ICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6aWdub3JlOw0KfQ0KDQoueC1ncmlkMy1oZC1yb3cgdGQg ew0KICAgIGxpbmUtaGVpZ2h0OjE1cHg7DQogICAgdmVydGljYWwtYWxpZ246bWlkZGxlOw0KICAg IGJvcmRlci1sZWZ0OjFweCBzb2xpZDsNCiAgICBib3JkZXItcmlnaHQ6MXB4IHNvbGlkOw0KfQ0K DQoueC1ncmlkMy1oZC1yb3cgLngtZ3JpZDMtbWFya2VyLWhkIHsNCiAgICBwYWRkaW5nOjNweDsN Cn0NCg0KLngtZ3JpZDMtcm93IC54LWdyaWQzLW1hcmtlciB7DQogICAgcGFkZGluZzozcHg7DQp9 DQoNCi54LWdyaWQzLWNlbGwtaW5uZXIsIC54LWdyaWQzLWhkLWlubmVyew0KCW92ZXJmbG93Omhp ZGRlbjsNCgktby10ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsNCgl0ZXh0LW92ZXJmbG93OiBlbGxp cHNpczsNCiAgICBwYWRkaW5nOjNweCAzcHggM3B4IDVweDsNCiAgICB3aGl0ZS1zcGFjZTogbm93 cmFwOw0KfQ0KDQoueC1ncmlkMy1oZC1pbm5lciB7DQogICAgcG9zaXRpb246cmVsYXRpdmU7DQoJ Y3Vyc29yOmluaGVyaXQ7DQoJcGFkZGluZzo0cHggM3B4IDRweCA1cHg7DQp9DQoNCi54LWdyaWQz LXJvdy1ib2R5IHsNCiAgICB3aGl0ZS1zcGFjZTpub3JtYWw7DQp9DQoNCi54LWdyaWQzLWJvZHkt Y2VsbCB7DQogICAgLW1vei1vdXRsaW5lOjAgbm9uZTsNCiAgICBvdXRsaW5lOjAgbm9uZTsNCn0N Cg0KLyogSUUgUXVpcmtzIHRvIGNsaXAgKi8NCi5leHQtaWUgLngtZ3JpZDMtY2VsbC1pbm5lciwg LmV4dC1pZSAueC1ncmlkMy1oZC1pbm5lcnsNCgl3aWR0aDoxMDAlOw0KfQ0KDQovKiByZXZlcnNl IGFib3ZlIGluIHN0cmljdCBtb2RlICovDQouZXh0LXN0cmljdCAueC1ncmlkMy1jZWxsLWlubmVy LCAuZXh0LXN0cmljdCAueC1ncmlkMy1oZC1pbm5lcnsNCgl3aWR0aDphdXRvOw0KfQ0KDQoueC1n cmlkLXJvdy1sb2FkaW5nIHsNCiAgICBiYWNrZ3JvdW5kOiBuby1yZXBlYXQgY2VudGVyIGNlbnRl cjsNCn0NCg0KLngtZ3JpZC1wYWdlIHsNCiAgICBvdmVyZmxvdzpoaWRkZW47DQp9DQoNCi54LWdy aWQzLXJvdyB7DQoJY3Vyc29yOiBkZWZhdWx0Ow0KICAgIGJvcmRlcjogMXB4IHNvbGlkOw0KICAg IHdpZHRoOjEwMCU7DQp9DQoNCi54LWdyaWQzLXJvdy1vdmVyIHsNCglib3JkZXI6MXB4IHNvbGlk Ow0KICAgIGJhY2tncm91bmQ6IHJlcGVhdC14IGxlZnQgdG9wOw0KfQ0KDQoueC1ncmlkMy1yZXNp emUtcHJveHkgew0KCXdpZHRoOjFweDsNCiAgICBsZWZ0OjA7DQoJY3Vyc29yOiBlLXJlc2l6ZTsN CgljdXJzb3I6IGNvbC1yZXNpemU7DQoJcG9zaXRpb246YWJzb2x1dGU7DQoJdG9wOjA7DQoJaGVp Z2h0OjEwMHB4Ow0KCW92ZXJmbG93OmhpZGRlbjsNCgl2aXNpYmlsaXR5OmhpZGRlbjsNCglib3Jk ZXI6MCBub25lOw0KCXotaW5kZXg6NzsNCn0NCg0KLngtZ3JpZDMtcmVzaXplLW1hcmtlciB7DQoJ d2lkdGg6MXB4Ow0KCWxlZnQ6MDsNCglwb3NpdGlvbjphYnNvbHV0ZTsNCgl0b3A6MDsNCgloZWln aHQ6MTAwcHg7DQoJb3ZlcmZsb3c6aGlkZGVuOw0KCXZpc2liaWxpdHk6aGlkZGVuOw0KCWJvcmRl cjowIG5vbmU7DQoJei1pbmRleDo3Ow0KfQ0KDQoueC1ncmlkMy1mb2N1cyB7DQoJcG9zaXRpb246 YWJzb2x1dGU7DQoJbGVmdDowOw0KCXRvcDowOw0KCXdpZHRoOjFweDsNCgloZWlnaHQ6MXB4Ow0K ICAgIGxpbmUtaGVpZ2h0OjFweDsNCiAgICBmb250LXNpemU6MXB4Ow0KICAgIC1tb3otb3V0bGlu ZTowIG5vbmU7DQogICAgb3V0bGluZTowIG5vbmU7DQogICAgLW1vei11c2VyLXNlbGVjdDogdGV4 dDsNCiAgICAta2h0bWwtdXNlci1zZWxlY3Q6IHRleHQ7DQogICAgLXdlYmtpdC11c2VyLXNlbGVj dDppZ25vcmU7DQp9DQoNCi8qIGhlYWRlciBzdHlsZXMgKi8NCi54LWdyaWQzLWhlYWRlcnsNCgli YWNrZ3JvdW5kOiByZXBlYXQteCAwIGJvdHRvbTsNCgljdXJzb3I6ZGVmYXVsdDsNCiAgICB6b29t OjE7DQogICAgcGFkZGluZzoxcHggMCAwIDA7DQp9DQoNCi54LWdyaWQzLWhlYWRlci1wb3Agew0K ICAgIGJvcmRlci1sZWZ0OjFweCBzb2xpZDsNCiAgICBmbG9hdDpyaWdodDsNCiAgICBjbGVhcjpu b25lOw0KfQ0KDQoueC1ncmlkMy1oZWFkZXItcG9wLWlubmVyIHsNCiAgICBib3JkZXItbGVmdDox cHggc29saWQ7DQogICAgd2lkdGg6MTRweDsNCiAgICBoZWlnaHQ6MTlweDsNCiAgICBiYWNrZ3Jv dW5kOiB0cmFuc3BhcmVudCBuby1yZXBlYXQgY2VudGVyIGNlbnRlcjsNCn0NCg0KLmV4dC1pZSAu eC1ncmlkMy1oZWFkZXItcG9wLWlubmVyIHsNCiAgICB3aWR0aDoxNXB4Ow0KfQ0KDQouZXh0LXN0 cmljdCAueC1ncmlkMy1oZWFkZXItcG9wLWlubmVyIHsNCiAgICB3aWR0aDoxNHB4OyANCn0NCg0K LngtZ3JpZDMtaGVhZGVyLWlubmVyIHsNCiAgICBvdmVyZmxvdzpoaWRkZW47DQogICAgem9vbTox Ow0KICAgIGZsb2F0OmxlZnQ7DQp9DQoNCi54LWdyaWQzLWhlYWRlci1vZmZzZXQgew0KICAgIHBh ZGRpbmctbGVmdDoxcHg7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KdGQueC1ncmlkMy1o ZC1vdmVyLCB0ZC5zb3J0LWRlc2MsIHRkLnNvcnQtYXNjLCB0ZC54LWdyaWQzLWhkLW1lbnUtb3Bl biB7DQogICAgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkOw0KICAgIGJvcmRlci1yaWdodDoxcHggc29s aWQ7DQp9DQoNCnRkLngtZ3JpZDMtaGQtb3ZlciAueC1ncmlkMy1oZC1pbm5lciwgdGQuc29ydC1k ZXNjIC54LWdyaWQzLWhkLWlubmVyLCB0ZC5zb3J0LWFzYyAueC1ncmlkMy1oZC1pbm5lciwgdGQu eC1ncmlkMy1oZC1tZW51LW9wZW4gLngtZ3JpZDMtaGQtaW5uZXIgew0KICAgIGJhY2tncm91bmQ6 IHJlcGVhdC14IGxlZnQgYm90dG9tOw0KDQp9DQoNCi54LWdyaWQzLXNvcnQtaWNvbnsNCgliYWNr Z3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KCWRpc3BsYXk6IG5vbmU7DQoJaGVpZ2h0OiA0cHg7 DQoJd2lkdGg6IDEzcHg7DQoJbWFyZ2luLWxlZnQ6M3B4Ow0KCXZlcnRpY2FsLWFsaWduOiBtaWRk bGU7DQp9DQoNCi5zb3J0LWFzYyAueC1ncmlkMy1zb3J0LWljb24sIC5zb3J0LWRlc2MgLngtZ3Jp ZDMtc29ydC1pY29uIHsNCglkaXNwbGF5OiBpbmxpbmU7DQp9DQoNCi8qIEhlYWRlciBwb3NpdGlv biBmaXhlcyBmb3IgSUUgc3RyaWN0IG1vZGUgKi8NCi5leHQtc3RyaWN0IC5leHQtaWUgLngtZ3Jp ZDMtaGVhZGVyLWlubmVyLCAuZXh0LXN0cmljdCAuZXh0LWllNiAueC1ncmlkMy1oZCB7DQogICAg cG9zaXRpb246cmVsYXRpdmU7DQp9DQoNCi5leHQtc3RyaWN0IC5leHQtaWU2IC54LWdyaWQzLWhk LWlubmVyew0KICAgIHBvc2l0aW9uOnN0YXRpYzsNCn0NCg0KLyogQm9keSBTdHlsZXMgKi8NCi54 LWdyaWQzLWJvZHkgew0KCXpvb206MTsNCn0NCg0KLngtZ3JpZDMtc2Nyb2xsZXIgew0KCW92ZXJm bG93OmF1dG87DQogICAgem9vbToxOw0KICAgIHBvc2l0aW9uOnJlbGF0aXZlOw0KfQ0KDQoueC1n cmlkMy1jZWxsLXRleHQsIC54LWdyaWQzLWhkLXRleHQgew0KCWRpc3BsYXk6IGJsb2NrOw0KCXBh ZGRpbmc6IDNweCA1cHggM3B4IDVweDsNCgktbW96LXVzZXItc2VsZWN0OiBub25lOw0KCS1raHRt bC11c2VyLXNlbGVjdDogbm9uZTsNCiAgICAtd2Via2l0LXVzZXItc2VsZWN0Omlnbm9yZTsNCn0N Cg0KLngtZ3JpZDMtc3BsaXQgew0KCWJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsNCgliYWNr Z3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KCWN1cnNvcjogZS1yZXNpemU7DQoJY3Vyc29yOiBj b2wtcmVzaXplOw0KCWRpc3BsYXk6IGJsb2NrOw0KCWZvbnQtc2l6ZTogMXB4Ow0KCWhlaWdodDog MTZweDsNCglvdmVyZmxvdzogaGlkZGVuOw0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCgl0b3A6IDJw eDsNCgl3aWR0aDogNnB4Ow0KCXotaW5kZXg6IDM7DQp9DQoNCi8qIENvbHVtbiBSZW9yZGVyIERE ICovDQoueC1kZC1kcmFnLXByb3h5IC54LWdyaWQzLWhkLWlubmVyew0KCWJhY2tncm91bmQ6IHJl cGVhdC14IGxlZnQgYm90dG9tOw0KCXdpZHRoOjEyMHB4Ow0KCXBhZGRpbmc6M3B4Ow0KCWJvcmRl cjoxcHggc29saWQ7DQoJb3ZlcmZsb3c6aGlkZGVuOw0KfQ0KDQouY29sLW1vdmUtdG9wLCAuY29s LW1vdmUtYm90dG9tew0KCXdpZHRoOjlweDsNCgloZWlnaHQ6OXB4Ow0KCXBvc2l0aW9uOmFic29s dXRlOw0KCXRvcDowOw0KCWxpbmUtaGVpZ2h0OjFweDsNCglmb250LXNpemU6MXB4Ow0KCW92ZXJm bG93OmhpZGRlbjsNCgl2aXNpYmlsaXR5OmhpZGRlbjsNCgl6LWluZGV4OjIwMDAwOw0KICAgIGJh Y2tncm91bmQ6dHJhbnNwYXJlbnQgbm8tcmVwZWF0IGxlZnQgdG9wOw0KfQ0KDQovKiBTZWxlY3Rp b24gU3R5bGVzICovDQoueC1ncmlkMy1yb3ctc2VsZWN0ZWQgew0KCWJvcmRlcjoxcHggZG90dGVk Ow0KfQ0KDQoueC1ncmlkMy1sb2NrZWQgdGQueC1ncmlkMy1yb3ctbWFya2VyLCAueC1ncmlkMy1s b2NrZWQgLngtZ3JpZDMtcm93LXNlbGVjdGVkIHRkLngtZ3JpZDMtcm93LW1hcmtlcnsNCiAgICBi YWNrZ3JvdW5kOiByZXBlYXQteCAwIGJvdHRvbSAhaW1wb3J0YW50Ow0KICAgIHZlcnRpY2FsLWFs aWduOm1pZGRsZSAhaW1wb3J0YW50Ow0KICAgIHBhZGRpbmc6MDsNCiAgICBib3JkZXItdG9wOjFw eCBzb2xpZDsNCiAgICBib3JkZXItYm90dG9tOm5vbmUgIWltcG9ydGFudDsNCiAgICBib3JkZXIt cmlnaHQ6MXB4IHNvbGlkICFpbXBvcnRhbnQ7DQogICAgdGV4dC1hbGlnbjpjZW50ZXI7DQp9DQoN Ci54LWdyaWQzLWxvY2tlZCB0ZC54LWdyaWQzLXJvdy1tYXJrZXIgZGl2LCAueC1ncmlkMy1sb2Nr ZWQgLngtZ3JpZDMtcm93LXNlbGVjdGVkIHRkLngtZ3JpZDMtcm93LW1hcmtlciBkaXZ7DQogICAg cGFkZGluZzowIDRweDsNCiAgICB0ZXh0LWFsaWduOmNlbnRlcjsNCn0NCg0KLyogZGlydHkgY2Vs bHMgKi8NCi54LWdyaWQzLWRpcnR5LWNlbGwgew0KICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50 IG5vLXJlcGVhdCAwIDA7DQp9DQoNCi8qIEdyaWQgVG9vbGJhcnMgKi8NCi54LWdyaWQzLXRvcGJh ciwgLngtZ3JpZDMtYm90dG9tYmFyew0KICAgIG92ZXJmbG93OmhpZGRlbjsNCglkaXNwbGF5Om5v bmU7DQoJem9vbToxOw0KICAgIHBvc2l0aW9uOnJlbGF0aXZlOw0KfQ0KDQoueC1ncmlkMy10b3Bi YXIgLngtdG9vbGJhcnsNCglib3JkZXItcmlnaHQ6MCBub25lOw0KfQ0KDQoueC1ncmlkMy1ib3R0 b21iYXIgLngtdG9vbGJhcnsNCglib3JkZXItcmlnaHQ6MCBub25lOw0KCWJvcmRlci1ib3R0b206 MCBub25lOw0KCWJvcmRlci10b3A6MXB4IHNvbGlkOw0KfQ0KDQovKiBQcm9wcyBHcmlkIFN0eWxl cyAqLw0KLngtcHJvcHMtZ3JpZCAueC1ncmlkMy1jZWxsew0KCXBhZGRpbmc6MXB4Ow0KfQ0KDQou eC1wcm9wcy1ncmlkIC54LWdyaWQzLXRkLW5hbWUgLngtZ3JpZDMtY2VsbC1pbm5lcnsNCgliYWNr Z3JvdW5kOnRyYW5zcGFyZW50IHJlcGVhdC15IC0xNnB4ICFpbXBvcnRhbnQ7DQogICAgcGFkZGlu Zy1sZWZ0OjEycHg7DQp9DQoNCi54LXByb3BzLWdyaWQgLngtZ3JpZDMtYm9keSAueC1ncmlkMy10 ZC1uYW1lew0KICAgIHBhZGRpbmc6MXB4Ow0KICAgIHBhZGRpbmctcmlnaHQ6MDsNCiAgICBib3Jk ZXI6MCBub25lOw0KICAgIGJvcmRlci1yaWdodDoxcHggc29saWQ7DQp9DQoNCi8qIGRkICovDQou eC1ncmlkMy1jb2wtZGQgew0KICAgIGJvcmRlcjowIG5vbmU7DQogICAgcGFkZGluZzowOw0KICAg IGJhY2tncm91bmQ6dHJhbnNwYXJlbnQ7DQp9DQoNCi54LWRkLWRyYWctZ2hvc3QgLngtZ3JpZDMt ZGQtd3JhcCB7DQogICAgcGFkZGluZzoxcHggM3B4IDNweCAxcHg7DQp9DQoNCi54LWdyaWQzLWhk IHsNCiAgICAtbW96LXVzZXItc2VsZWN0Om5vbmU7DQogICAgLWtodG1sLXVzZXItc2VsZWN0Om5v bmU7DQogICAgLXdlYmtpdC11c2VyLXNlbGVjdDppZ25vcmU7DQp9DQoNCi54LWdyaWQzLWhkLWJ0 biB7DQogICAgZGlzcGxheTpub25lOw0KICAgIHBvc2l0aW9uOmFic29sdXRlOw0KICAgIHdpZHRo OjE0cHg7DQogICAgYmFja2dyb3VuZDpuby1yZXBlYXQgbGVmdCBjZW50ZXI7DQogICAgcmlnaHQ6 MDsNCiAgICB0b3A6MDsNCiAgICB6LWluZGV4OjI7DQoJY3Vyc29yOnBvaW50ZXI7DQp9DQoNCi54 LWdyaWQzLWhkLW92ZXIgLngtZ3JpZDMtaGQtYnRuLCAueC1ncmlkMy1oZC1tZW51LW9wZW4gLngt Z3JpZDMtaGQtYnRuIHsNCiAgICBkaXNwbGF5OmJsb2NrOw0KfQ0KDQphLngtZ3JpZDMtaGQtYnRu OmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNHB4IGNlbnRlcjsNCn0NCg0KLyog RXhwYW5kZXJzICovDQoueC1ncmlkMy1ib2R5IC54LWdyaWQzLXRkLWV4cGFuZGVyIHsNCiAgICBi YWNrZ3JvdW5kOnRyYW5zcGFyZW50IHJlcGVhdC15IHJpZ2h0Ow0KfQ0KDQoueC1ncmlkMy1ib2R5 IC54LWdyaWQzLXRkLWV4cGFuZGVyIC54LWdyaWQzLWNlbGwtaW5uZXIgew0KICAgIHBhZGRpbmc6 MCAhaW1wb3J0YW50Ow0KICAgIGhlaWdodDoxMDAlOw0KfQ0KDQoueC1ncmlkMy1yb3ctZXhwYW5k ZXIgew0KICAgIHdpZHRoOjEwMCU7DQogICAgaGVpZ2h0OjE4cHg7DQogICAgYmFja2dyb3VuZC1w b3NpdGlvbjo0cHggMnB4Ow0KICAgIGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsNCiAgICBi YWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50Ow0KfQ0KDQoueC1ncmlkMy1yb3ctY29sbGFwc2Vk IC54LWdyaWQzLXJvdy1leHBhbmRlciB7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjo0cHggMnB4 Ow0KfQ0KDQoueC1ncmlkMy1yb3ctZXhwYW5kZWQgLngtZ3JpZDMtcm93LWV4cGFuZGVyIHsNCiAg ICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMXB4IDJweDsNCn0NCg0KLngtZ3JpZDMtcm93LWNvbGxh cHNlZCAueC1ncmlkMy1yb3ctYm9keSB7DQogICAgZGlzcGxheTpub25lICFpbXBvcnRhbnQ7DQp9 DQoNCi54LWdyaWQzLXJvdy1leHBhbmRlZCAueC1ncmlkMy1yb3ctYm9keSB7DQogICAgZGlzcGxh eTpibG9jayAhaW1wb3J0YW50Ow0KfQ0KDQovKiBDaGVja2VycyAqLw0KLngtZ3JpZDMtYm9keSAu eC1ncmlkMy10ZC1jaGVja2VyIHsNCiAgICBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHJlcGVhdC15 IHJpZ2h0Ow0KfQ0KDQoueC1ncmlkMy1ib2R5IC54LWdyaWQzLXRkLWNoZWNrZXIgLngtZ3JpZDMt Y2VsbC1pbm5lciwgLngtZ3JpZDMtaGVhZGVyIC54LWdyaWQzLXRkLWNoZWNrZXIgLngtZ3JpZDMt aGQtaW5uZXIgew0KICAgIHBhZGRpbmc6MCAhaW1wb3J0YW50Ow0KICAgIGhlaWdodDoxMDAlOw0K fQ0KDQoueC1ncmlkMy1yb3ctY2hlY2tlciwgLngtZ3JpZDMtaGQtY2hlY2tlciB7DQogICAgd2lk dGg6MTAwJTsNCiAgICBoZWlnaHQ6MThweDsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjJweCAy cHg7DQogICAgYmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0Ow0KICAgIGJhY2tncm91bmQtY29s b3I6dHJhbnNwYXJlbnQ7DQp9DQoNCi54LWdyaWQzLXJvdyAueC1ncmlkMy1yb3ctY2hlY2tlciB7 DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjoycHggMnB4Ow0KfQ0KDQoueC1ncmlkMy1yb3ctc2Vs ZWN0ZWQgLngtZ3JpZDMtcm93LWNoZWNrZXIsIC54LWdyaWQzLWhkLWNoZWNrZXItb24gLngtZ3Jp ZDMtaGQtY2hlY2tlciwueC1ncmlkMy1yb3ctY2hlY2tlZCAueC1ncmlkMy1yb3ctY2hlY2tlciB7 DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjotMjNweCAycHg7DQp9DQoNCi54LWdyaWQzLWhkLWNo ZWNrZXIgew0KICAgIGJhY2tncm91bmQtcG9zaXRpb246MnB4IDNweDsNCn0NCg0KLngtZ3JpZDMt aGQtY2hlY2tlci1vbiAueC1ncmlkMy1oZC1jaGVja2VyIHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0 aW9uOi0yM3B4IDNweDsNCn0NCg0KLyogTnVtYmVyZXIgKi8NCi54LWdyaWQzLWJvZHkgLngtZ3Jp ZDMtdGQtbnVtYmVyZXIgew0KICAgIGJhY2tncm91bmQ6dHJhbnNwYXJlbnQgcmVwZWF0LXkgcmln aHQ7DQp9DQoNCi54LWdyaWQzLWJvZHkgLngtZ3JpZDMtdGQtbnVtYmVyZXIgLngtZ3JpZDMtY2Vs bC1pbm5lciB7DQogICAgcGFkZGluZzozcHggNXB4IDAgMCAhaW1wb3J0YW50Ow0KICAgIHRleHQt YWxpZ246cmlnaHQ7DQp9DQoNCi8qIFJvdyBJY29uICovDQoNCi54LWdyaWQzLWJvZHkgLngtZ3Jp ZDMtdGQtcm93LWljb24gew0KICAgIGJhY2tncm91bmQ6dHJhbnNwYXJlbnQgcmVwZWF0LXkgcmln aHQ7DQogICAgdmVydGljYWwtYWxpZ246dG9wOw0KICAgIHRleHQtYWxpZ246Y2VudGVyOw0KfQ0K DQoueC1ncmlkMy1ib2R5IC54LWdyaWQzLXRkLXJvdy1pY29uIC54LWdyaWQzLWNlbGwtaW5uZXIg ew0KICAgIHBhZGRpbmc6MCAhaW1wb3J0YW50Ow0KICAgIGJhY2tncm91bmQtcG9zaXRpb246Y2Vu dGVyIGNlbnRlcjsNCiAgICBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7DQogICAgd2lkdGg6 MTZweDsNCiAgICBoZWlnaHQ6MTZweDsNCiAgICBtYXJnaW4tbGVmdDoycHg7DQogICAgbWFyZ2lu LXRvcDozcHg7DQp9DQoNCi8qIEFsbCBzcGVjaWFscyAqLw0KLngtZ3JpZDMtYm9keSAueC1ncmlk My1yb3ctc2VsZWN0ZWQgLngtZ3JpZDMtdGQtbnVtYmVyZXIsDQoueC1ncmlkMy1ib2R5IC54LWdy aWQzLXJvdy1zZWxlY3RlZCAueC1ncmlkMy10ZC1jaGVja2VyLA0KLngtZ3JpZDMtYm9keSAueC1n cmlkMy1yb3ctc2VsZWN0ZWQgLngtZ3JpZDMtdGQtZXhwYW5kZXIgew0KCWJhY2tncm91bmQ6dHJh bnNwYXJlbnQgcmVwZWF0LXkgcmlnaHQ7DQp9DQoNCi54LWdyaWQzLWJvZHkgLngtZ3JpZDMtY2hl Y2stY29sLXRkIC54LWdyaWQzLWNlbGwtaW5uZXIgew0KICAgIHBhZGRpbmc6IDFweCAwIDAgMCAh aW1wb3J0YW50Ow0KfQ0KDQoueC1ncmlkMy1jaGVjay1jb2wgew0KICAgIHdpZHRoOjEwMCU7DQog ICAgaGVpZ2h0OjE2cHg7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXIgY2VudGVyOw0K ICAgIGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOnRy YW5zcGFyZW50Ow0KfQ0KDQoueC1ncmlkMy1jaGVjay1jb2wtb24gew0KICAgIHdpZHRoOjEwMCU7 DQogICAgaGVpZ2h0OjE2cHg7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXIgY2VudGVy Ow0KICAgIGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9y OnRyYW5zcGFyZW50Ow0KfQ0KDQovKiBHcm91cGluZyBjbGFzc2VzICovDQoueC1ncmlkLWdyb3Vw LCAueC1ncmlkLWdyb3VwLWJvZHksIC54LWdyaWQtZ3JvdXAtaGQgew0KICAgIHpvb206MTsNCn0N Cg0KLngtZ3JpZC1ncm91cC1oZCB7DQogICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkOw0KICAg IGN1cnNvcjpwb2ludGVyOw0KICAgIHBhZGRpbmctdG9wOjZweDsNCn0NCg0KLngtZ3JpZC1ncm91 cC1oZCBkaXYueC1ncmlkLWdyb3VwLXRpdGxlIHsNCiAgICBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50 IG5vLXJlcGVhdCAzcHggM3B4Ow0KICAgIHBhZGRpbmc6NHB4IDRweCA0cHggMTdweDsNCn0NCg0K LngtZ3JpZC1ncm91cC1jb2xsYXBzZWQgLngtZ3JpZC1ncm91cC1ib2R5IHsNCiAgICBkaXNwbGF5 Om5vbmU7DQp9DQoNCi5leHQtaWU2IC54LWdyaWQzIC54LWVkaXRvciAueC1mb3JtLXRleHQsIC5l eHQtaWU3IC54LWdyaWQzIC54LWVkaXRvciAueC1mb3JtLXRleHQgew0KICAgIHBvc2l0aW9uOnJl bGF0aXZlOw0KICAgIHRvcDotMXB4Ow0KfQ0KDQouZXh0LWllIC54LXByb3BzLWdyaWQgLngtZWRp dG9yIC54LWZvcm0tdGV4dCB7DQogICAgcG9zaXRpb246c3RhdGljOw0KICAgIHRvcDowOw0KfQ0K DQoueC1ncmlkLWVtcHR5IHsNCiAgICBwYWRkaW5nOjEwcHg7DQp9DQoNCi8qIGZpeCBmbG9hdGlu ZyB0b29sYmFyIGlzc3VlICovDQouZXh0LWllNyAueC1ncmlkLXBhbmVsIC54LXBhbmVsLWJiYXIg ew0KICAgIHBvc2l0aW9uOnJlbGF0aXZlOw0KfQ0KDQouZXh0LWllNiAueC1ncmlkMy1oZWFkZXIg ew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCn0NCg0KLyogY29sdW1uIGxpbmVzICovDQoueC1n cmlkLXdpdGgtY29sLWxpbmVzIC54LWdyaWQzLXJvdyB0ZC54LWdyaWQzLWNlbGwgew0KICAgIHBh ZGRpbmctcmlnaHQ6MDsNCiAgICBib3JkZXItcmlnaHQ6MXB4IHNvbGlkOw0KfQ0KLngtZGQtZHJh Zy1wcm94eXsNCglwb3NpdGlvbjphYnNvbHV0ZTsNCglsZWZ0OjA7DQogICAgdG9wOjA7DQoJdmlz aWJpbGl0eTpoaWRkZW47DQoJei1pbmRleDoxNTAwMDsNCn0NCg0KLngtZGQtZHJhZy1naG9zdHsN CgktbW96LW9wYWNpdHk6IDAuODU7DQogICAgb3BhY2l0eTouODU7DQogICAgZmlsdGVyOiBhbHBo YShvcGFjaXR5PTg1KTsNCiAgICBib3JkZXI6IDFweCBzb2xpZDsNCglwYWRkaW5nOjNweDsNCglw YWRkaW5nLWxlZnQ6MjBweDsNCgl3aGl0ZS1zcGFjZTpub3dyYXA7DQp9DQoNCi54LWRkLWRyYWct cmVwYWlyIC54LWRkLWRyYWctZ2hvc3R7DQoJLW1vei1vcGFjaXR5OiAwLjQ7DQogICAgb3BhY2l0 eTouNDsNCiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NDApOw0KCWJvcmRlcjowIG5vbmU7DQoJ cGFkZGluZzowOw0KCWJhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7DQp9DQoNCi54LWRkLWRy YWctcmVwYWlyIC54LWRkLWRyb3AtaWNvbnsNCgl2aXNpYmlsaXR5OmhpZGRlbjsNCn0NCg0KLngt ZGQtZHJvcC1pY29uew0KICAgIHBvc2l0aW9uOmFic29sdXRlOw0KCXRvcDozcHg7DQoJbGVmdDoz cHg7DQoJZGlzcGxheTpibG9jazsNCgl3aWR0aDoxNnB4Ow0KCWhlaWdodDoxNnB4Ow0KCWJhY2tn cm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOw0K CWJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQoJei1pbmRleDoxOw0KfQ0KDQoueC12aWV3 LXNlbGVjdG9yIHsNCiAgICBwb3NpdGlvbjphYnNvbHV0ZTsNCiAgICBsZWZ0OjA7DQogICAgdG9w OjA7DQogICAgd2lkdGg6MDsNCiAgICBib3JkZXI6MXB4IGRvdHRlZDsNCglvcGFjaXR5OiAuNTsN CiAgICAtbW96LW9wYWNpdHk6IC41Ow0KICAgIGZpbHRlcjphbHBoYShvcGFjaXR5PTUwKTsNCiAg ICB6b29tOjE7DQp9LmV4dC1zdHJpY3QgLmV4dC1pZSAueC10cmVlIC54LXBhbmVsLWJ3cmFwew0K ICAgIHBvc2l0aW9uOnJlbGF0aXZlOw0KICAgIG92ZXJmbG93OmhpZGRlbjsNCn0NCg0KLngtdHJl ZS1pY29uLCAueC10cmVlLWVjLWljb24sIC54LXRyZWUtZWxib3ctbGluZSwgLngtdHJlZS1lbGJv dywgLngtdHJlZS1lbGJvdy1lbmQsIC54LXRyZWUtZWxib3ctcGx1cywgLngtdHJlZS1lbGJvdy1t aW51cywgLngtdHJlZS1lbGJvdy1lbmQtcGx1cywgLngtdHJlZS1lbGJvdy1lbmQtbWludXN7DQoJ Ym9yZGVyOiAwIG5vbmU7DQoJaGVpZ2h0OiAxOHB4Ow0KCW1hcmdpbjogMDsNCglwYWRkaW5nOiAw Ow0KCXZlcnRpY2FsLWFsaWduOiB0b3A7DQoJd2lkdGg6IDE2cHg7DQogICAgYmFja2dyb3VuZC1y ZXBlYXQ6IG5vLXJlcGVhdDsNCn0NCg0KLngtdHJlZS1ub2RlLWNvbGxhcHNlZCAueC10cmVlLW5v ZGUtaWNvbiwgLngtdHJlZS1ub2RlLWV4cGFuZGVkIC54LXRyZWUtbm9kZS1pY29uLCAueC10cmVl LW5vZGUtbGVhZiAueC10cmVlLW5vZGUtaWNvbnsNCglib3JkZXI6IDAgbm9uZTsNCgloZWlnaHQ6 IDE4cHg7DQoJbWFyZ2luOiAwOw0KCXBhZGRpbmc6IDA7DQoJdmVydGljYWwtYWxpZ246IHRvcDsN Cgl3aWR0aDogMTZweDsNCgliYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjsNCiAgICBiYWNrZ3Jv dW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KfQ0KDQouZXh0LWllIC54LXRyZWUtbm9kZS1pbmRlbnQg aW1nLCAuZXh0LWllIC54LXRyZWUtbm9kZS1pY29uLCAuZXh0LWllIC54LXRyZWUtZWMtaWNvbiB7 DQogICAgdmVydGljYWwtYWxpZ246bWlkZGxlICFpbXBvcnRhbnQ7DQp9DQoNCi8qIGNoZWNrYm94 ZXMgKi8NCi5leHQtaWUgaW5wdXQueC10cmVlLW5vZGUtY2Igew0KICAgIHdpZHRoOjE1cHg7DQog ICAgaGVpZ2h0OjE1cHg7DQp9DQoNCmlucHV0LngtdHJlZS1ub2RlLWNiIHsNCiAgICBtYXJnaW4t bGVmdDoxcHg7DQp9DQoNCi5leHQtaWUgaW5wdXQueC10cmVlLW5vZGUtY2Igew0KICAgIG1hcmdp bi1sZWZ0OjA7DQp9DQoNCi54LXRyZWUtbm9pY29uIC54LXRyZWUtbm9kZS1pY29uew0KCXdpZHRo OjA7IGhlaWdodDowOw0KfQ0KDQovKiBsb2FkaW5nIGljb24gKi8NCi5leHQtaWUgLngtdHJlZS1u b2RlLWVsIGlucHV0IHsNCiAgICB3aWR0aDoxNXB4Ow0KICAgIGhlaWdodDoxNXB4Ow0KfQ0KDQov KiBObyBsaW5lIHN0eWxlcyAqLw0KLngtdHJlZS1uby1saW5lcyAueC10cmVlLWVsYm93ew0KCWJh Y2tncm91bmQ6dHJhbnNwYXJlbnQ7DQp9DQoNCi54LXRyZWUtbm8tbGluZXMgLngtdHJlZS1lbGJv dy1lbmR7DQoJYmFja2dyb3VuZDp0cmFuc3BhcmVudDsNCn0NCg0KLngtdHJlZS1uby1saW5lcyAu eC10cmVlLWVsYm93LWxpbmV7DQoJYmFja2dyb3VuZDp0cmFuc3BhcmVudDsNCn0NCg0KLyogQXJy b3dzICovDQoueC10cmVlLWFycm93cyAueC10cmVlLWVsYm93ew0KCWJhY2tncm91bmQ6dHJhbnNw YXJlbnQ7DQp9DQoNCi54LXRyZWUtYXJyb3dzIC54LXRyZWUtZWxib3ctcGx1c3sNCiAgICBiYWNr Z3JvdW5kOnRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIDA7DQp9DQoNCi54LXRyZWUtYXJyb3dzIC54 LXRyZWUtZWxib3ctbWludXN7DQogICAgYmFja2dyb3VuZDp0cmFuc3BhcmVudCBuby1yZXBlYXQg LTE2cHggMDsNCn0NCg0KLngtdHJlZS1hcnJvd3MgLngtdHJlZS1lbGJvdy1lbmR7DQoJYmFja2dy b3VuZDp0cmFuc3BhcmVudDsNCn0NCg0KLngtdHJlZS1hcnJvd3MgLngtdHJlZS1lbGJvdy1lbmQt cGx1c3sNCiAgICBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIDA7DQp9DQoNCi54 LXRyZWUtYXJyb3dzIC54LXRyZWUtZWxib3ctZW5kLW1pbnVzew0KICAgIGJhY2tncm91bmQ6dHJh bnNwYXJlbnQgbm8tcmVwZWF0IC0xNnB4IDA7DQp9DQoNCi54LXRyZWUtYXJyb3dzIC54LXRyZWUt ZWxib3ctbGluZXsNCgliYWNrZ3JvdW5kOnRyYW5zcGFyZW50Ow0KfQ0KDQoueC10cmVlLWFycm93 cyAueC10cmVlLWVjLW92ZXIgLngtdHJlZS1lbGJvdy1wbHVzew0KICAgIGJhY2tncm91bmQtcG9z aXRpb246LTMycHggMDsNCn0NCg0KLngtdHJlZS1hcnJvd3MgLngtdHJlZS1lYy1vdmVyIC54LXRy ZWUtZWxib3ctbWludXN7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAwOw0KfQ0KDQou eC10cmVlLWFycm93cyAueC10cmVlLWVjLW92ZXIgLngtdHJlZS1lbGJvdy1lbmQtcGx1c3sNCiAg ICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IDA7DQp9DQoNCi54LXRyZWUtYXJyb3dzIC54LXRy ZWUtZWMtb3ZlciAueC10cmVlLWVsYm93LWVuZC1taW51c3sNCiAgICBiYWNrZ3JvdW5kLXBvc2l0 aW9uOi00OHB4IDA7DQp9DQoNCi54LXRyZWUtZWxib3ctcGx1cywgLngtdHJlZS1lbGJvdy1taW51 cywgLngtdHJlZS1lbGJvdy1lbmQtcGx1cywgLngtdHJlZS1lbGJvdy1lbmQtbWludXN7DQoJY3Vy c29yOnBvaW50ZXI7DQp9DQoNCi5leHQtaWUgdWwueC10cmVlLW5vZGUtY3R7DQogICAgZm9udC1z aXplOjA7DQogICAgbGluZS1oZWlnaHQ6MDsNCiAgICB6b29tOjE7DQp9DQoNCi54LXRyZWUtbm9k ZXsNCgl3aGl0ZS1zcGFjZTogbm93cmFwOw0KfQ0KDQoueC10cmVlLW5vZGUtZWwgew0KICAgIGxp bmUtaGVpZ2h0OjE4cHg7DQogICAgY3Vyc29yOnBvaW50ZXI7DQp9DQoNCi54LXRyZWUtbm9kZSBh LCAueC1kZC1kcmFnLWdob3N0IGF7DQoJdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQoJLWtodG1sLXVz ZXItc2VsZWN0Om5vbmU7DQoJLW1vei11c2VyLXNlbGVjdDpub25lOw0KICAgIC13ZWJraXQtdXNl ci1zZWxlY3Q6aWdub3JlOw0KICAgIC1rdGhtbC11c2VyLWZvY3VzOm5vcm1hbDsNCiAgICAtbW96 LXVzZXItZm9jdXM6bm9ybWFsOw0KICAgIC1tb3otb3V0bGluZTogMCBub25lOw0KICAgIG91dGxp bmU6MCBub25lOw0KfQ0KDQoueC10cmVlLW5vZGUgYSBzcGFuLCAueC1kZC1kcmFnLWdob3N0IGEg c3BhbnsNCgl0ZXh0LWRlY29yYXRpb246bm9uZTsNCglwYWRkaW5nOjFweCAzcHggMXB4IDJweDsN Cn0NCg0KLngtdHJlZS1ub2RlIC54LXRyZWUtbm9kZS1kaXNhYmxlZCAueC10cmVlLW5vZGUtaWNv bnsNCgktbW96LW9wYWNpdHk6IDAuNTsNCiAgIG9wYWNpdHk6LjU7DQogICBmaWx0ZXI6IGFscGhh KG9wYWNpdHk9NTApOw0KfQ0KDQoueC10cmVlLW5vZGUgLngtdHJlZS1ub2RlLWlubGluZS1pY29u ew0KCWJhY2tncm91bmQ6dHJhbnNwYXJlbnQ7DQp9DQoNCi54LXRyZWUtbm9kZSBhOmhvdmVyLCAu eC1kZC1kcmFnLWdob3N0IGE6aG92ZXJ7DQoJdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQp9DQoNCi54 LXRyZWUtbm9kZSBkaXYueC10cmVlLWRyYWctaW5zZXJ0LWJlbG93ew0KIAkgYm9yZGVyLWJvdHRv bToxcHggZG90dGVkOw0KfQ0KDQoueC10cmVlLW5vZGUgZGl2LngtdHJlZS1kcmFnLWluc2VydC1h Ym92ZXsNCgkgYm9yZGVyLXRvcDoxcHggZG90dGVkOw0KfQ0KDQoueC10cmVlLWRkLXVuZGVybGlu ZSAueC10cmVlLW5vZGUgZGl2LngtdHJlZS1kcmFnLWluc2VydC1iZWxvd3sNCiAJIGJvcmRlci1i b3R0b206MCBub25lOw0KfQ0KDQoueC10cmVlLWRkLXVuZGVybGluZSAueC10cmVlLW5vZGUgZGl2 LngtdHJlZS1kcmFnLWluc2VydC1hYm92ZXsNCgkgYm9yZGVyLXRvcDowIG5vbmU7DQp9DQoNCi54 LXRyZWUtZGQtdW5kZXJsaW5lIC54LXRyZWUtbm9kZSBkaXYueC10cmVlLWRyYWctaW5zZXJ0LWJl bG93IGF7DQogCSBib3JkZXItYm90dG9tOjJweCBzb2xpZDsNCn0NCg0KLngtdHJlZS1kZC11bmRl cmxpbmUgLngtdHJlZS1ub2RlIGRpdi54LXRyZWUtZHJhZy1pbnNlcnQtYWJvdmUgYXsNCgkgYm9y ZGVyLXRvcDoycHggc29saWQ7DQp9DQoNCi54LXRyZWUtbm9kZSAueC10cmVlLWRyYWctYXBwZW5k IGEgc3BhbnsNCgkgYm9yZGVyOjFweCBkb3R0ZWQ7DQp9DQoNCi54LWRkLWRyYWctZ2hvc3QgLngt dHJlZS1ub2RlLWluZGVudCwgLngtZGQtZHJhZy1naG9zdCAueC10cmVlLWVjLWljb257DQoJZGlz cGxheTpub25lICFpbXBvcnRhbnQ7DQp9DQoNCi8qIEZpeCBmb3IgaWUgcm9vdFZpc2libGU6ZmFs c2UgaXNzdWUgKi8NCi54LXRyZWUtcm9vdC1jdCB7DQogICAgem9vbToxOw0KfQ0KLngtZGF0ZS1w aWNrZXIgewogICAgYm9yZGVyOiAxcHggc29saWQ7CiAgICBib3JkZXItdG9wOjAgbm9uZTsKCXBv c2l0aW9uOnJlbGF0aXZlOwp9CgoueC1kYXRlLXBpY2tlciBhIHsKICAgIC1tb3otb3V0bGluZTow IG5vbmU7CiAgICBvdXRsaW5lOjAgbm9uZTsKfQoKLngtZGF0ZS1pbm5lciwgLngtZGF0ZS1pbm5l ciB0ZCwgLngtZGF0ZS1pbm5lciB0aHsKICAgIGJvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsKfQoK LngtZGF0ZS1taWRkbGUsLngtZGF0ZS1sZWZ0LC54LWRhdGUtcmlnaHQgewoJYmFja2dyb3VuZDog cmVwZWF0LXggMCAtODNweDsKCW92ZXJmbG93OmhpZGRlbjsKfQoKLngtZGF0ZS1taWRkbGUgLngt YnRuLXRjLC54LWRhdGUtbWlkZGxlIC54LWJ0bi10bCwueC1kYXRlLW1pZGRsZSAueC1idG4tdHIs Ci54LWRhdGUtbWlkZGxlIC54LWJ0bi1tYywueC1kYXRlLW1pZGRsZSAueC1idG4tbWwsLngtZGF0 ZS1taWRkbGUgLngtYnRuLW1yLAoueC1kYXRlLW1pZGRsZSAueC1idG4tYmMsLngtZGF0ZS1taWRk bGUgLngtYnRuLWJsLC54LWRhdGUtbWlkZGxlIC54LWJ0bi1icnsKCWJhY2tncm91bmQ6dHJhbnNw YXJlbnQgIWltcG9ydGFudDsKICAgIHZlcnRpY2FsLWFsaWduOm1pZGRsZTsKfQoKLngtZGF0ZS1t aWRkbGUgLngtYnRuLW1jIGVtLngtYnRuLWFycm93IHsKICAgIGJhY2tncm91bmQ6dHJhbnNwYXJl bnQgbm8tcmVwZWF0IHJpZ2h0IDA7Cn0KCi54LWRhdGUtcmlnaHQsIC54LWRhdGUtbGVmdCB7CiAg ICB3aWR0aDoxOHB4Owp9CgoueC1kYXRlLXJpZ2h0ewogICAgdGV4dC1hbGlnbjpyaWdodDsKfQoK LngtZGF0ZS1taWRkbGUgewogICAgcGFkZGluZy10b3A6MnB4OwogICAgcGFkZGluZy1ib3R0b206 MnB4OwogICAgd2lkdGg6MTMwcHg7IC8qIEZGMyAqLwp9CgoueC1kYXRlLXJpZ2h0IGEsIC54LWRh dGUtbGVmdCBhewogICAgZGlzcGxheTpibG9jazsKICAgIHdpZHRoOjE2cHg7CgloZWlnaHQ6MTZw eDsKCWJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsKCWJhY2tncm91bmQtcmVwZWF0OiBuby1y ZXBlYXQ7CgljdXJzb3I6cG9pbnRlcjsKICAgIC1tb3otb3BhY2l0eTogMC42OwogICAgb3BhY2l0 eTouNjsKICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT02MCk7Cn0KCi54LWRhdGUtcmlnaHQgYTpo b3ZlciwgLngtZGF0ZS1sZWZ0IGE6aG92ZXJ7CiAgICAtbW96LW9wYWNpdHk6IDE7CiAgICBvcGFj aXR5OjE7CiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MTAwKTsKfQoKLngtaXRlbS1kaXNhYmxl ZCAueC1kYXRlLXJpZ2h0IGE6aG92ZXIsIC54LWl0ZW0tZGlzYWJsZWQgLngtZGF0ZS1sZWZ0IGE6 aG92ZXJ7CiAgICAtbW96LW9wYWNpdHk6IDAuNjsKICAgIG9wYWNpdHk6LjY7CiAgICBmaWx0ZXI6 IGFscGhhKG9wYWNpdHk9NjApOwp9CgoueC1kYXRlLXJpZ2h0IGEgewogICAgbWFyZ2luLXJpZ2h0 OjJweDsKICAgIHRleHQtZGVjb3JhdGlvbjpub25lICFpbXBvcnRhbnQ7Cn0KCi54LWRhdGUtbGVm dCBhewogICAgbWFyZ2luLWxlZnQ6MnB4OwogICAgdGV4dC1kZWNvcmF0aW9uOm5vbmUgIWltcG9y dGFudDsKfQoKdGFibGUueC1kYXRlLWlubmVyIHsKICAgIHdpZHRoOjEwMCU7CiAgICB0YWJsZS1s YXlvdXQ6Zml4ZWQ7Cn0KCi54LWRhdGUtaW5uZXIgdGggewogICAgd2lkdGg6MjVweDsKfQoKLngt ZGF0ZS1pbm5lciB0aCB7CiAgICBiYWNrZ3JvdW5kOiByZXBlYXQteCBsZWZ0IHRvcDsKICAgIHRl eHQtYWxpZ246cmlnaHQgIWltcG9ydGFudDsKCWJvcmRlci1ib3R0b206IDFweCBzb2xpZDsKCWN1 cnNvcjpkZWZhdWx0OwogICAgcGFkZGluZzowOwogICAgYm9yZGVyLWNvbGxhcHNlOnNlcGFyYXRl Owp9CgoueC1kYXRlLWlubmVyIHRoIHNwYW4gewogICAgZGlzcGxheTpibG9jazsKICAgIHBhZGRp bmc6MnB4OwogICAgcGFkZGluZy1yaWdodDo3cHg7Cn0KCi54LWRhdGUtaW5uZXIgdGQgewogICAg Ym9yZGVyOiAxcHggc29saWQ7Cgl0ZXh0LWFsaWduOnJpZ2h0OwogICAgcGFkZGluZzowOwp9Cgou eC1kYXRlLWlubmVyIGEgewogICAgcGFkZGluZzoycHggNXB4OwogICAgZGlzcGxheTpibG9jazsK CXRleHQtZGVjb3JhdGlvbjpub25lOwogICAgdGV4dC1hbGlnbjpyaWdodDsKICAgIHpvb206MTsK fQoKLngtZGF0ZS1pbm5lciAueC1kYXRlLWFjdGl2ZXsKCWN1cnNvcjpwb2ludGVyOwoJY29sb3I6 YmxhY2s7Cn0KCi54LWRhdGUtaW5uZXIgLngtZGF0ZS1zZWxlY3RlZCBhewoJYmFja2dyb3VuZDog cmVwZWF0LXggbGVmdCB0b3A7Cglib3JkZXI6MXB4IHNvbGlkOwogICAgcGFkZGluZzoxcHggNHB4 Owp9CgoueC1kYXRlLWlubmVyIC54LWRhdGUtdG9kYXkgYXsKCWJvcmRlcjogMXB4IHNvbGlkOwog ICAgcGFkZGluZzoxcHggNHB4Owp9CgoueC1kYXRlLWlubmVyIC54LWRhdGUtcHJldmRheSBhLC54 LWRhdGUtaW5uZXIgLngtZGF0ZS1uZXh0ZGF5IGEgewogICAgdGV4dC1kZWNvcmF0aW9uOm5vbmUg IWltcG9ydGFudDsKfQoKLngtZGF0ZS1ib3R0b20gewogICAgcGFkZGluZzo0cHg7CiAgICBib3Jk ZXItdG9wOiAxcHggc29saWQ7CiAgICBiYWNrZ3JvdW5kOiByZXBlYXQteCBsZWZ0IHRvcDsKfQoK LngtZGF0ZS1pbm5lciBhOmhvdmVyLCAueC1kYXRlLWlubmVyIC54LWRhdGUtZGlzYWJsZWQgYTpo b3ZlcnsKICAgIHRleHQtZGVjb3JhdGlvbjpub25lICFpbXBvcnRhbnQ7Cn0KCi54LWl0ZW0tZGlz YWJsZWQgLngtZGF0ZS1pbm5lciBhOmhvdmVyewogICAgYmFja2dyb3VuZDogbm9uZTsKfQoKLngt ZGF0ZS1pbm5lciAueC1kYXRlLWRpc2FibGVkIGEgewoJY3Vyc29yOmRlZmF1bHQ7Cn0KCi54LWRh dGUtbWVudSAueC1tZW51LWl0ZW0gewoJcGFkZGluZzoxcHggMjRweCAxcHggNHB4OwoJd2hpdGUt c3BhY2U6IG5vd3JhcDsKfQoKLngtZGF0ZS1tZW51IC54LW1lbnUtaXRlbSAueC1tZW51LWl0ZW0t aWNvbiB7CiAgICB3aWR0aDoxMHB4OwogICAgaGVpZ2h0OjEwcHg7CiAgICBtYXJnaW4tcmlnaHQ6 NXB4OwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXIgLTRweCAhaW1wb3J0YW50Owp9Cgou eC1kYXRlLW1wIHsKCXBvc2l0aW9uOmFic29sdXRlOwoJbGVmdDowOwoJdG9wOjA7CglkaXNwbGF5 Om5vbmU7Cn0KCi54LWRhdGUtbXAgdGQgewogICAgcGFkZGluZzoycHg7Cglmb250Om5vcm1hbCAx MXB4IGFyaWFsLCBoZWx2ZXRpY2EsdGFob21hLHNhbnMtc2VyaWY7Cn0KCnRkLngtZGF0ZS1tcC1t b250aCx0ZC54LWRhdGUtbXAteWVhcix0ZC54LWRhdGUtbXAteWJ0biB7CiAgICBib3JkZXI6IDAg bm9uZTsKCXRleHQtYWxpZ246Y2VudGVyOwoJdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCXdpZHRo OjI1JTsKfQoKLngtZGF0ZS1tcC1vayB7CgltYXJnaW4tcmlnaHQ6M3B4Owp9CgoueC1kYXRlLW1w LWJ0bnMgYnV0dG9uIHsKCXRleHQtZGVjb3JhdGlvbjpub25lOwoJdGV4dC1hbGlnbjpjZW50ZXI7 Cgl0ZXh0LWRlY29yYXRpb246bm9uZSAhaW1wb3J0YW50OwoJYm9yZGVyOjFweCBzb2xpZDsKCXBh ZGRpbmc6MXB4IDNweCAxcHg7CgljdXJzb3I6cG9pbnRlcjsKfQoKLngtZGF0ZS1tcC1idG5zIHsK CWJhY2tncm91bmQ6IHJlcGVhdC14IGxlZnQgdG9wOwp9CgoueC1kYXRlLW1wLWJ0bnMgdGQgewoJ Ym9yZGVyLXRvcDogMXB4IHNvbGlkOwogICAgdGV4dC1hbGlnbjpjZW50ZXI7Cn0KCnRkLngtZGF0 ZS1tcC1tb250aCBhLHRkLngtZGF0ZS1tcC15ZWFyIGEgewoJZGlzcGxheTpibG9jazsKCXBhZGRp bmc6MnB4IDRweDsKCXRleHQtZGVjb3JhdGlvbjpub25lOwoJdGV4dC1hbGlnbjpjZW50ZXI7Cn0K CnRkLngtZGF0ZS1tcC1tb250aCBhOmhvdmVyLHRkLngtZGF0ZS1tcC15ZWFyIGE6aG92ZXIgewoJ dGV4dC1kZWNvcmF0aW9uOm5vbmU7CgljdXJzb3I6cG9pbnRlcjsKfQoKdGQueC1kYXRlLW1wLXNl bCBhIHsKCXBhZGRpbmc6MXB4IDNweDsKCWJhY2tncm91bmQ6IHJlcGVhdC14IGxlZnQgdG9wOwoJ Ym9yZGVyOjFweCBzb2xpZDsKfQoKLngtZGF0ZS1tcC15YnRuIGEgewogICAgb3ZlcmZsb3c6aGlk ZGVuOwogICAgd2lkdGg6MTVweDsKICAgIGhlaWdodDoxNXB4OwogICAgY3Vyc29yOnBvaW50ZXI7 CiAgICBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IG5vLXJlcGVhdDsKICAgIGRpc3BsYXk6YmxvY2s7 CiAgICBtYXJnaW46MCBhdXRvOwp9CgoueC1kYXRlLW1wLXlidG4gYS54LWRhdGUtbXAtbmV4dCB7 CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTEyMHB4Owp9CgoueC1kYXRlLW1wLXlidG4gYS54 LWRhdGUtbXAtbmV4dDpob3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNXB4IC0xMjBw eDsKfQoKLngtZGF0ZS1tcC15YnRuIGEueC1kYXRlLW1wLXByZXYgewogICAgYmFja2dyb3VuZC1w b3NpdGlvbjowIC0xMDVweDsKfQoKLngtZGF0ZS1tcC15YnRuIGEueC1kYXRlLW1wLXByZXY6aG92 ZXIgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjotMTVweCAtMTA1cHg7Cn0KCi54LWRhdGUtbXAt eWJ0biB7CiAgIHRleHQtYWxpZ246Y2VudGVyOwp9Cgp0ZC54LWRhdGUtbXAtc2VwIHsKICAgYm9y ZGVyLXJpZ2h0OjFweCBzb2xpZDsKfS54LXRpcHsNCglwb3NpdGlvbjogYWJzb2x1dGU7DQoJdG9w OiAwOw0KICAgIGxlZnQ6MDsNCiAgICB2aXNpYmlsaXR5OiBoaWRkZW47DQoJei1pbmRleDogMjAw MDA7DQogICAgYm9yZGVyOjAgbm9uZTsNCn0NCg0KLngtdGlwIC54LXRpcC1jbG9zZXsNCgloZWln aHQ6IDE1cHg7DQoJZmxvYXQ6cmlnaHQ7DQoJd2lkdGg6IDE1cHg7DQogICAgbWFyZ2luOjAgMCAy cHggMnB4Ow0KICAgIGN1cnNvcjpwb2ludGVyOw0KICAgIGRpc3BsYXk6bm9uZTsNCn0NCg0KLngt dGlwIC54LXRpcC10YyB7DQoJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgbm8tcmVwZWF0IDAgLTYy cHg7DQoJcGFkZGluZy10b3A6M3B4Ow0KICAgIG92ZXJmbG93OmhpZGRlbjsNCiAgICB6b29tOjE7 DQp9DQoNCi54LXRpcCAueC10aXAtdGwgew0KCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50IG5vLXJl cGVhdCAwIDA7DQoJcGFkZGluZy1sZWZ0OjZweDsNCiAgICBvdmVyZmxvdzpoaWRkZW47DQogICAg em9vbToxOw0KfQ0KDQoueC10aXAgLngtdGlwLXRyIHsNCgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVu dCBuby1yZXBlYXQgcmlnaHQgMDsNCglwYWRkaW5nLXJpZ2h0OjZweDsNCiAgICBvdmVyZmxvdzpo aWRkZW47DQogICAgem9vbToxOw0KfQ0KDQoueC10aXAgLngtdGlwLWJjIHsNCgliYWNrZ3JvdW5k OiB0cmFuc3BhcmVudCBuby1yZXBlYXQgMCAtMTIxcHg7DQoJaGVpZ2h0OjNweDsNCiAgICBvdmVy ZmxvdzpoaWRkZW47DQp9DQoNCi54LXRpcCAueC10aXAtYmwgew0KCWJhY2tncm91bmQ6IHRyYW5z cGFyZW50IG5vLXJlcGVhdCAwIC01OXB4Ow0KCXBhZGRpbmctbGVmdDo2cHg7DQogICAgem9vbTox Ow0KfQ0KDQoueC10aXAgLngtdGlwLWJyIHsNCgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCBuby1y ZXBlYXQgcmlnaHQgLTU5cHg7DQoJcGFkZGluZy1yaWdodDo2cHg7DQogICAgem9vbToxOw0KfQ0K DQoueC10aXAgLngtdGlwLW1jIHsNCiAgICBib3JkZXI6MCBub25lOw0KfQ0KDQoueC10aXAgLngt dGlwLW1sIHsNCgliYWNrZ3JvdW5kOiBuby1yZXBlYXQgMCAtMTI0cHg7DQoJcGFkZGluZy1sZWZ0 OjZweDsNCiAgICB6b29tOjE7DQp9DQoNCi54LXRpcCAueC10aXAtbXIgew0KCWJhY2tncm91bmQ6 IHRyYW5zcGFyZW50IG5vLXJlcGVhdCByaWdodCAtMTI0cHg7DQoJcGFkZGluZy1yaWdodDo2cHg7 DQogICAgem9vbToxOw0KfQ0KDQouZXh0LWllIC54LXRpcCAueC10aXAtaGVhZGVyLC5leHQtaWUg LngtdGlwIC54LXRpcC10YyB7DQogICAgZm9udC1zaXplOjA7DQogICAgbGluZS1oZWlnaHQ6MDsN Cn0NCg0KLmV4dC1ib3JkZXItYm94IC54LXRpcCAueC10aXAtaGVhZGVyLCAuZXh0LWJvcmRlci1i b3ggLngtdGlwIC54LXRpcC10Y3sNCiAgICBsaW5lLWhlaWdodDogMXB4Ow0KfQ0KDQoueC10aXAg LngtdGlwLWhlYWRlci10ZXh0IHsNCiAgICBwYWRkaW5nOjA7DQogICAgbWFyZ2luOjAgMCAycHgg MDsNCn0NCg0KLngtdGlwIC54LXRpcC1ib2R5IHsNCiAgICBtYXJnaW46MCAhaW1wb3J0YW50Ow0K ICAgIGxpbmUtaGVpZ2h0OjE0cHg7DQogICAgcGFkZGluZzowOw0KfQ0KDQoueC10aXAgLngtdGlw LWJvZHkgLmxvYWRpbmctaW5kaWNhdG9yIHsNCiAgICBtYXJnaW46MDsNCn0NCg0KLngtdGlwLWRy YWdnYWJsZSAueC10aXAtaGVhZGVyLC54LXRpcC1kcmFnZ2FibGUgLngtdGlwLWhlYWRlci10ZXh0 IHsNCiAgICBjdXJzb3I6bW92ZTsNCn0NCg0KLngtZm9ybS1pbnZhbGlkLXRpcCAueC10aXAtdGMg ew0KCWJhY2tncm91bmQ6IHJlcGVhdC14IDAgLTEycHg7DQogICAgcGFkZGluZy10b3A6NnB4Ow0K fQ0KDQoueC1mb3JtLWludmFsaWQtdGlwIC54LXRpcC1iYyB7DQoJYmFja2dyb3VuZDogcmVwZWF0 LXggMCAtMThweDsNCiAgICBoZWlnaHQ6NnB4Ow0KfQ0KDQoueC1mb3JtLWludmFsaWQtdGlwIC54 LXRpcC1ibCB7DQoJYmFja2dyb3VuZDogbm8tcmVwZWF0IDAgLTZweDsNCn0NCg0KLngtZm9ybS1p bnZhbGlkLXRpcCAueC10aXAtYnIgew0KCWJhY2tncm91bmQ6IG5vLXJlcGVhdCByaWdodCAtNnB4 Ow0KfQ0KDQoueC1mb3JtLWludmFsaWQtdGlwIC54LXRpcC1ib2R5IHsNCiAgICBwYWRkaW5nOjJw eDsNCn0NCg0KLngtZm9ybS1pbnZhbGlkLXRpcCAueC10aXAtYm9keSB7DQogICAgcGFkZGluZy1s ZWZ0OjI0cHg7DQogICAgYmFja2dyb3VuZDp0cmFuc3BhcmVudCBuby1yZXBlYXQgMnB4IDJweDsN Cn0NCg0KLngtdGlwLWFuY2hvciB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHdpZHRo OiA5cHg7DQogICAgaGVpZ2h0OiAxMHB4Ow0KICAgIG92ZXJmbG93OmhpZGRlbjsNCiAgICBiYWNr Z3JvdW5kOiB0cmFuc3BhcmVudCBuby1yZXBlYXQgMCAwOw0KICAgIHpvb206MTsNCn0NCi54LXRp cC1hbmNob3ItYm90dG9tIHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOXB4IDA7DQp9DQou eC10aXAtYW5jaG9yLXJpZ2h0IHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMThweCAwOw0K ICAgIHdpZHRoOiAxMHB4Ow0KfQ0KLngtdGlwLWFuY2hvci1sZWZ0IHsNCiAgICBiYWNrZ3JvdW5k LXBvc2l0aW9uOiAtMjhweCAwOw0KICAgIHdpZHRoOiAxMHB4Ow0KfS54LW1lbnUgew0KCXotaW5k ZXg6IDE1MDAwOw0KCXpvb206IDE7DQoJYmFja2dyb3VuZDogcmVwZWF0LXk7DQp9DQoNCi54LW1l bnUtZmxvYXRpbmd7DQogICAgYm9yZGVyOiAxcHggc29saWQ7DQp9DQoNCi54LW1lbnUgYSB7DQog ICAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7DQp9DQoNCi5leHQtaWUgLngtbWVu dSB7DQogICAgem9vbToxOw0KICAgIG92ZXJmbG93OmhpZGRlbjsNCn0NCg0KLngtbWVudS1saXN0 ew0KICAgIHBhZGRpbmc6IDJweDsNCgliYWNrZ3JvdW5kOnRyYW5zcGFyZW50Ow0KCWJvcmRlcjow IG5vbmU7DQogICAgb3ZlcmZsb3c6aGlkZGVuOw0KICAgIG92ZXJmbG93LXk6IGhpZGRlbjsNCn0N Cg0KLmV4dC1zdHJpY3QgLmV4dC1pZSAueC1tZW51LWxpc3R7DQogICAgcG9zaXRpb246IHJlbGF0 aXZlOw0KfQ0KDQoueC1tZW51IGxpew0KCWxpbmUtaGVpZ2h0OjEwMCU7DQp9DQoNCi54LW1lbnUg bGkueC1tZW51LXNlcC1saXsNCglmb250LXNpemU6MXB4Ow0KCWxpbmUtaGVpZ2h0OjFweDsNCn0N Cg0KLngtbWVudS1saXN0LWl0ZW17DQogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsNCiAgICAtbW96 LXVzZXItc2VsZWN0OiBub25lOw0KICAgIC1raHRtbC11c2VyLXNlbGVjdDpub25lOw0KICAgIC13 ZWJraXQtdXNlci1zZWxlY3Q6aWdub3JlOw0KCWRpc3BsYXk6YmxvY2s7DQoJcGFkZGluZzoxcHg7 DQp9DQoNCi54LW1lbnUtaXRlbS1hcnJvd3sNCgliYWNrZ3JvdW5kOnRyYW5zcGFyZW50IG5vLXJl cGVhdCByaWdodDsNCn0NCg0KLngtbWVudS1zZXAgew0KCWRpc3BsYXk6YmxvY2s7DQoJZm9udC1z aXplOjFweDsNCglsaW5lLWhlaWdodDoxcHg7DQoJbWFyZ2luOiAycHggM3B4Ow0KCWJvcmRlci1i b3R0b206MXB4IHNvbGlkOw0KICAgIG92ZXJmbG93OmhpZGRlbjsNCn0NCg0KLngtbWVudS1mb2N1 cyB7DQoJcG9zaXRpb246YWJzb2x1dGU7DQoJbGVmdDotMXB4Ow0KCXRvcDotMXB4Ow0KCXdpZHRo OjFweDsNCgloZWlnaHQ6MXB4Ow0KICAgIGxpbmUtaGVpZ2h0OjFweDsNCiAgICBmb250LXNpemU6 MXB4Ow0KICAgIC1tb3otb3V0bGluZTowIG5vbmU7DQogICAgb3V0bGluZTowIG5vbmU7DQogICAg LW1vei11c2VyLXNlbGVjdDogbm9uZTsNCiAgICAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsNCiAg ICAtd2Via2l0LXVzZXItc2VsZWN0Omlnbm9yZTsNCiAgICBvdmVyZmxvdzpoaWRkZW47DQogICAg ZGlzcGxheTpibG9jazsNCn0NCg0KYS54LW1lbnUtaXRlbSB7DQogICAgY3Vyc29yOiBwb2ludGVy Ow0KICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgIGxpbmUtaGVpZ2h0OiAxNnB4Ow0KICAgIG91dGxp bmUtY29sb3I6IC1tb3otdXNlLXRleHQtY29sb3I7DQogICAgb3V0bGluZS1zdHlsZTogbm9uZTsN CiAgICBvdXRsaW5lLXdpZHRoOiAwOw0KICAgIHBhZGRpbmc6IDNweCAyMXB4IDNweCAyN3B4Ow0K ICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAg d2hpdGUtc3BhY2U6IG5vd3JhcDsNCn0NCg0KLngtbWVudS1pdGVtLWFjdGl2ZSB7DQogICAgYmFj a2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14Ow0KICAgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQg Ym90dG9tOw0KICAgIGJvcmRlci1zdHlsZTpzb2xpZDsNCiAgICBib3JkZXItd2lkdGg6IDFweCAw Ow0KICAgIG1hcmdpbjowIDFweDsNCglwYWRkaW5nOiAwOw0KfQ0KDQoueC1tZW51LWl0ZW0tYWN0 aXZlIGEueC1tZW51LWl0ZW0gew0KICAgIGJvcmRlci1zdHlsZTpzb2xpZDsNCiAgICBib3JkZXIt d2lkdGg6MCAxcHg7DQogICAgbWFyZ2luOjAgLTFweDsNCn0NCg0KLngtbWVudS1pdGVtLWljb24g ew0KCWJvcmRlcjogMCBub25lOw0KCWhlaWdodDogMTZweDsNCglwYWRkaW5nOiAwOw0KCXZlcnRp Y2FsLWFsaWduOiB0b3A7DQoJd2lkdGg6IDE2cHg7DQoJcG9zaXRpb246IGFic29sdXRlOw0KICAg IGxlZnQ6IDNweDsNCiAgICB0b3A6IDNweDsNCiAgICBtYXJnaW46IDA7DQogICAgYmFja2dyb3Vu ZC1wb3NpdGlvbjpjZW50ZXI7DQp9DQoNCi5leHQtaWUgLngtbWVudS1pdGVtLWljb24gew0KICAg IGxlZnQ6IC0yNHB4Ow0KfQ0KLmV4dC1zdHJpY3QgLngtbWVudS1pdGVtLWljb24gew0KICAgIGxl ZnQ6IDNweDsNCn0NCg0KLmV4dC1pZTYgLngtbWVudS1pdGVtLWljb24gew0KICAgIGxlZnQ6IC0y NHB4Ow0KfQ0KDQouZXh0LWllIC54LW1lbnUtaXRlbS1pY29uIHsNCiAgICB2ZXJ0aWNhbC1hbGln bjogbWlkZGxlOw0KfQ0KDQoueC1tZW51LWNoZWNrLWl0ZW0gLngtbWVudS1pdGVtLWljb257DQoJ YmFja2dyb3VuZDogdHJhbnNwYXJlbnQgbm8tcmVwZWF0IGNlbnRlcjsNCn0NCg0KLngtbWVudS1n cm91cC1pdGVtIC54LW1lbnUtaXRlbS1pY29uew0KCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0K fQ0KDQoueC1tZW51LWl0ZW0tY2hlY2tlZCAueC1tZW51LWdyb3VwLWl0ZW0gLngtbWVudS1pdGVt LWljb257DQogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgbm8tcmVwZWF0IGNlbnRlcjsNCn0N Cg0KLngtZGF0ZS1tZW51IC54LW1lbnUtbGlzdHsNCiAgICBwYWRkaW5nOiAwOw0KfQ0KDQoueC1t ZW51LWRhdGUtaXRlbXsNCglwYWRkaW5nOjA7DQp9DQoNCi54LW1lbnUgLngtY29sb3ItcGFsZXR0 ZSwgLngtbWVudSAueC1kYXRlLXBpY2tlcnsNCiAgICBtYXJnaW4tbGVmdDogMjZweDsNCgltYXJn aW4tcmlnaHQ6NHB4Ow0KfQ0KDQoueC1tZW51IC54LWRhdGUtcGlja2Vyew0KICAgIGJvcmRlcjox cHggc29saWQ7DQogICAgbWFyZ2luLXRvcDoycHg7DQogICAgbWFyZ2luLWJvdHRvbToycHg7DQp9 DQoNCi54LW1lbnUtcGxhaW4gLngtY29sb3ItcGFsZXR0ZSwgLngtbWVudS1wbGFpbiAueC1kYXRl LXBpY2tlcnsNCgkgbWFyZ2luOiAwOw0KCSBib3JkZXI6IDAgbm9uZTsNCn0NCg0KLngtZGF0ZS1t ZW51IHsNCiAgIHBhZGRpbmc6MCAhaW1wb3J0YW50Ow0KfQ0KDQoueC1jeWNsZS1tZW51IC54LW1l bnUtaXRlbS1jaGVja2VkIHsNCiAgICBib3JkZXI6MXB4IGRvdHRlZCAhaW1wb3J0YW50Ow0KCXBh ZGRpbmc6MDsNCn0NCg0KLngtbWVudSAueC1tZW51LXNjcm9sbGVyIHsNCiAgICB3aWR0aDogMTAw JTsNCgliYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7DQoJYmFja2dyb3VuZC1wb3NpdGlvbjpj ZW50ZXI7DQoJaGVpZ2h0OjhweDsNCiAgICBsaW5lLWhlaWdodDogOHB4Ow0KCWN1cnNvcjpwb2lu dGVyOw0KICAgIG1hcmdpbjogMDsNCiAgICBwYWRkaW5nOiAwOw0KfQ0KDQoueC1tZW51IC54LW1l bnUtc2Nyb2xsZXItYWN0aXZlew0KICAgIGhlaWdodDogNnB4Ow0KICAgIGxpbmUtaGVpZ2h0OiA2 cHg7DQp9DQoNCi54LW1lbnUtbGlzdC1pdGVtLWluZGVudHsNCiAgICBwYWRkaW5nLWxlZnQ6IDI3 cHg7DQp9DQovKgogQ3JlYXRlcyByb3VuZGVkLCByYWlzZWQgYm94ZXMgbGlrZSBvbiB0aGUgRXh0 IHdlYnNpdGUgLSB0aGUgbWFya3VwIGlzbid0IHByZXR0eToKICA8ZGl2IGNsYXNzPSJ4LWJveC1i bHVlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ4LWJveC10bCI+PGRpdiBjbGFzcz0ieC1ib3gtdHIi PjxkaXYgY2xhc3M9IngtYm94LXRjIj48L2Rpdj48L2Rpdj48L2Rpdj4KICAgICAgICA8ZGl2IGNs YXNzPSJ4LWJveC1tbCI+PGRpdiBjbGFzcz0ieC1ib3gtbXIiPjxkaXYgY2xhc3M9IngtYm94LW1j Ij4KICAgICAgICAgICAgPGgzPllPVVIgVElUTEUgSEVSRSAob3B0aW9uYWwpPC9oMz4KICAgICAg ICAgICAgPGRpdj5ZT1VSIENPTlRFTlQgSEVSRTwvZGl2PgogICAgICAgIDwvZGl2PjwvZGl2Pjwv ZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IngtYm94LWJsIj48ZGl2IGNsYXNzPSJ4LWJveC1iciI+ PGRpdiBjbGFzcz0ieC1ib3gtYmMiPjwvZGl2PjwvZGl2PjwvZGl2PgogICAgPC9kaXY+CiAqLwoK LngtYm94LXRsIHsKCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIDA7CiAgICB6 b29tOjE7Cn0KCi54LWJveC10YyB7CgloZWlnaHQ6IDhweDsKCWJhY2tncm91bmQ6IHRyYW5zcGFy ZW50IHJlcGVhdC14IDAgMDsKCW92ZXJmbG93OiBoaWRkZW47Cn0KCi54LWJveC10ciB7CgliYWNr Z3JvdW5kOiB0cmFuc3BhcmVudCBuby1yZXBlYXQgcmlnaHQgLThweDsKfQoKLngtYm94LW1sIHsK CWJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHJlcGVhdC15IDA7CglwYWRkaW5nLWxlZnQ6IDRweDsK CW92ZXJmbG93OiBoaWRkZW47CiAgICB6b29tOjE7Cn0KCi54LWJveC1tYyB7CgliYWNrZ3JvdW5k OiByZXBlYXQteCAwIC0xNnB4OwoJcGFkZGluZzogNHB4IDEwcHg7Cn0KCi54LWJveC1tYyBoMyB7 CgltYXJnaW46IDAgMCA0cHggMDsKICAgIHpvb206MTsKfQoKLngtYm94LW1yIHsKCWJhY2tncm91 bmQ6IHRyYW5zcGFyZW50IHJlcGVhdC15IHJpZ2h0OwoJcGFkZGluZy1yaWdodDogNHB4OwoJb3Zl cmZsb3c6IGhpZGRlbjsKfQoKLngtYm94LWJsIHsKCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50IG5v LXJlcGVhdCAwIC0xNnB4OwogICAgem9vbToxOwp9CgoueC1ib3gtYmMgewoJYmFja2dyb3VuZDog dHJhbnNwYXJlbnQgcmVwZWF0LXggMCAtOHB4OwoJaGVpZ2h0OiA4cHg7CglvdmVyZmxvdzogaGlk ZGVuOwp9CgoueC1ib3gtYnIgewoJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgbm8tcmVwZWF0IHJp Z2h0IC0yNHB4Owp9CgoueC1ib3gtdGwsIC54LWJveC1ibCB7CglwYWRkaW5nLWxlZnQ6IDhweDsK CW92ZXJmbG93OiBoaWRkZW47Cn0KCi54LWJveC10ciwgLngtYm94LWJyIHsKCXBhZGRpbmctcmln aHQ6IDhweDsKCW92ZXJmbG93OiBoaWRkZW47Cn0jeC1kZWJ1Zy1icm93c2VyIC54LXRyZWUgLngt dHJlZS1ub2RlIGEgc3BhbiB7CiAgICBwYWRkaW5nLXRvcDoycHg7CiAgICBsaW5lLWhlaWdodDox OHB4Owp9CgojeC1kZWJ1Zy1icm93c2VyICAueC10b29sLXRvZ2dsZSB7CiAgICBiYWNrZ3JvdW5k LXBvc2l0aW9uOjAgLTc1cHg7Cn0KCiN4LWRlYnVnLWJyb3dzZXIgIC54LXRvb2wtdG9nZ2xlLW92 ZXIgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjotMTVweCAtNzVweDsKfQoKI3gtZGVidWctYnJv d3Nlci54LXBhbmVsLWNvbGxhcHNlZCAueC10b29sLXRvZ2dsZSB7CiAgICBiYWNrZ3JvdW5kLXBv c2l0aW9uOjAgLTYwcHg7Cn0KCiN4LWRlYnVnLWJyb3dzZXIueC1wYW5lbC1jb2xsYXBzZWQgLngt dG9vbC10b2dnbGUtb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNXB4IC02MHB4Owp9 LngtY29tYm8tbGlzdCB7CiAgICBib3JkZXI6MXB4IHNvbGlkOwogICAgem9vbToxOwogICAgb3Zl cmZsb3c6aGlkZGVuOwp9CgoueC1jb21iby1saXN0LWlubmVyIHsKICAgIG92ZXJmbG93OmF1dG87 CiAgICBwb3NpdGlvbjpyZWxhdGl2ZTsgLyogZm9yIGNhbGN1bGF0aW5nIHNjcm9sbCBvZmZzZXRz ICovCiAgICB6b29tOjE7CiAgICBvdmVyZmxvdy14OmhpZGRlbjsKfQoKLngtY29tYm8tbGlzdC1o ZCB7CiAgICBib3JkZXItYm90dG9tOjFweCBzb2xpZDsKICAgIHBhZGRpbmc6M3B4Owp9CgoueC1y ZXNpemFibGUtcGlubmVkIC54LWNvbWJvLWxpc3QtaW5uZXIgewogICAgYm9yZGVyLWJvdHRvbTox cHggc29saWQ7Cn0KCi54LWNvbWJvLWxpc3QtaXRlbSB7CiAgICBwYWRkaW5nOjJweDsKICAgIGJv cmRlcjoxcHggc29saWQ7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6aGlk ZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KCi54LWNvbWJvLWxpc3QgLngtY29t Ym8tc2VsZWN0ZWR7Cglib3JkZXI6MXB4IGRvdHRlZCAhaW1wb3J0YW50OwogICAgY3Vyc29yOnBv aW50ZXI7Cn0KCi54LWNvbWJvLWxpc3QgLngtdG9vbGJhciB7CiAgICBib3JkZXItdG9wOjFweCBz b2xpZDsKICAgIGJvcmRlci1ib3R0b206MCBub25lOwp9LngtcGFuZWwgewogICAgYm9yZGVyLXN0 eWxlOiBzb2xpZDsKICAgIGJvcmRlci13aWR0aDowOwp9CgoueC1wYW5lbC1oZWFkZXIgewogICAg b3ZlcmZsb3c6aGlkZGVuOwogICAgem9vbToxOwogICAgcGFkZGluZzo1cHggM3B4IDRweCA1cHg7 CiAgICBib3JkZXI6MXB4IHNvbGlkOwogICAgbGluZS1oZWlnaHQ6IDE1cHg7CiAgICBiYWNrZ3Jv dW5kOiB0cmFuc3BhcmVudCByZXBlYXQteCAwIC0xcHg7Cn0KCi54LXBhbmVsLWJvZHkgewogICAg Ym9yZGVyOjFweCBzb2xpZDsKICAgIGJvcmRlci10b3A6MCBub25lOwogICAgb3ZlcmZsb3c6aGlk ZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiBhZGRlZCBmb3IgaXRlbSBzY3JvbGwgcG9z aXRpb25pbmcgKi8KfQoKLngtcGFuZWwtYmJhciAueC10b29sYmFyLCAueC1wYW5lbC10YmFyIC54 LXRvb2xiYXIgewogICAgYm9yZGVyOjFweCBzb2xpZDsKICAgIGJvcmRlci10b3A6MCBub25lOwog ICAgb3ZlcmZsb3c6aGlkZGVuOwogICAgcGFkZGluZzoycHg7Cn0KCi54LXBhbmVsLXRiYXItbm9o ZWFkZXIgLngtdG9vbGJhciwgLngtcGFuZWwtbWMgLngtcGFuZWwtdGJhciAueC10b29sYmFyIHsK ICAgIGJvcmRlci10b3A6MXB4IHNvbGlkOwogICAgYm9yZGVyLWJvdHRvbTogMCBub25lOwp9Cgou eC1wYW5lbC1ib2R5LW5vaGVhZGVyLCAueC1wYW5lbC1tYyAueC1wYW5lbC1ib2R5IHsKICAgIGJv cmRlci10b3A6MXB4IHNvbGlkOwp9CgoueC1wYW5lbC1oZWFkZXIgewogICAgb3ZlcmZsb3c6aGlk ZGVuOwogICAgem9vbToxOwp9CgoueC1wYW5lbC10bCAueC1wYW5lbC1oZWFkZXIgewogICAgcGFk ZGluZzo1cHggMCA0cHggMDsKICAgIGJvcmRlcjowIG5vbmU7CiAgICBiYWNrZ3JvdW5kOnRyYW5z cGFyZW50Owp9CgoueC1wYW5lbC10bCAueC1wYW5lbC1pY29uLCAueC13aW5kb3ctdGwgLngtcGFu ZWwtaWNvbiB7CiAgICBwYWRkaW5nLWxlZnQ6MjBweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3Vu ZC1yZXBlYXQ6bm8tcmVwZWF0OwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowIDRweDsKICAgIHpv b206MTsKfQoKLngtcGFuZWwtaW5saW5lLWljb24gewogICAgd2lkdGg6MTZweDsKCWhlaWdodDox NnB4OwogICAgYmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0OwogICAgYmFja2dyb3VuZC1wb3Np dGlvbjowIDA7Cgl2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7CgltYXJnaW4tcmlnaHQ6NHB4OwoJbWFy Z2luLXRvcDotMXB4OwoJbWFyZ2luLWJvdHRvbTotMXB4Owp9CgoueC1wYW5lbC10YyB7CgliYWNr Z3JvdW5kOiB0cmFuc3BhcmVudCByZXBlYXQteCAwIDA7CglvdmVyZmxvdzpoaWRkZW47Cn0KCi8q IGZpeCBpZTcgc3RyaWN0IG1vZGUgYnVnICovCi5leHQtc3RyaWN0IC5leHQtaWU3IC54LXBhbmVs LXRjIHsKICAgIG92ZXJmbG93OiB2aXNpYmxlOwp9CgoueC1wYW5lbC10bCB7CgliYWNrZ3JvdW5k OiB0cmFuc3BhcmVudCBuby1yZXBlYXQgMCAwOwoJcGFkZGluZy1sZWZ0OjZweDsKICAgIHpvb206 MTsKICAgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkOwp9CgoueC1wYW5lbC10ciB7CgliYWNrZ3Jv dW5kOiB0cmFuc3BhcmVudCBuby1yZXBlYXQgcmlnaHQgMDsKCXpvb206MTsKICAgIHBhZGRpbmct cmlnaHQ6NnB4Owp9CgoueC1wYW5lbC1iYyB7CgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCByZXBl YXQteCAwIGJvdHRvbTsKICAgIHpvb206MTsKfQoKLngtcGFuZWwtYmMgLngtcGFuZWwtZm9vdGVy IHsKICAgIHpvb206MTsKfQoKLngtcGFuZWwtYmwgewoJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQg bm8tcmVwZWF0IDAgYm90dG9tOwoJcGFkZGluZy1sZWZ0OjZweDsKICAgIHpvb206MTsKfQoKLngt cGFuZWwtYnIgewoJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgbm8tcmVwZWF0IHJpZ2h0IGJvdHRv bTsKCXBhZGRpbmctcmlnaHQ6NnB4OwogICAgem9vbToxOwp9CgoueC1wYW5lbC1tYyB7CiAgICBi b3JkZXI6MCBub25lOwogICAgcGFkZGluZzowOwogICAgbWFyZ2luOjA7CiAgICBwYWRkaW5nLXRv cDo2cHg7Cn0KCi54LXBhbmVsLW1jIC54LXBhbmVsLWJvZHkgewogICAgYmFja2dyb3VuZDp0cmFu c3BhcmVudDsKICAgIGJvcmRlcjogMCBub25lOwp9CgoueC1wYW5lbC1tbCB7CgliYWNrZ3JvdW5k OiByZXBlYXQteSAwIDA7CglwYWRkaW5nLWxlZnQ6NnB4OwogICAgem9vbToxOwp9CgoueC1wYW5l bC1tciB7CgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCByZXBlYXQteSByaWdodCAwOwoJcGFkZGlu Zy1yaWdodDo2cHg7CiAgICB6b29tOjE7Cn0KCi54LXBhbmVsLWJjIC54LXBhbmVsLWZvb3RlciB7 CiAgICBwYWRkaW5nLWJvdHRvbTo2cHg7Cn0KCi54LXBhbmVsLW5vZm9vdGVyIC54LXBhbmVsLWJj LCAueC1wYW5lbC1ub2Zvb3RlciAueC13aW5kb3ctYmMgewoJaGVpZ2h0OjZweDsKICAgIGZvbnQt c2l6ZTowOwogICAgbGluZS1oZWlnaHQ6MDsKfQoKLngtcGFuZWwtYndyYXAgewogICAgb3ZlcmZs b3c6aGlkZGVuOwogICAgem9vbToxOwogICAgbGVmdDowOwogICAgdG9wOjA7Cn0KLngtcGFuZWwt Ym9keSB7CiAgICBvdmVyZmxvdzpoaWRkZW47CiAgICB6b29tOjE7Cn0KCi54LXBhbmVsLWNvbGxh cHNlZCAueC1yZXNpemFibGUtaGFuZGxlewogICAgZGlzcGxheTpub25lOwp9CgouZXh0LWdlY2tv IC54LXBhbmVsLWFuaW1hdGVkIGRpdiB7CiAgICBvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudDsK fQoKLyogUGxhaW4gKi8KLngtcGxhaW4tYm9keSB7CiAgICBvdmVyZmxvdzpoaWRkZW47Cn0KCi54 LXBsYWluLWJiYXIgLngtdG9vbGJhciB7CiAgICBvdmVyZmxvdzpoaWRkZW47CiAgICBwYWRkaW5n OjJweDsKfQoKLngtcGxhaW4tdGJhciAueC10b29sYmFyIHsKICAgIG92ZXJmbG93OmhpZGRlbjsK ICAgIHBhZGRpbmc6MnB4Owp9CgoueC1wbGFpbi1id3JhcCB7CiAgICBvdmVyZmxvdzpoaWRkZW47 CiAgICB6b29tOjE7Cn0KCi54LXBsYWluIHsKICAgIG92ZXJmbG93OmhpZGRlbjsKfQoKLyogVG9v bHMgKi8KLngtdG9vbCB7CiAgICBvdmVyZmxvdzpoaWRkZW47CiAgICB3aWR0aDoxNXB4OwogICAg aGVpZ2h0OjE1cHg7CiAgICBmbG9hdDpyaWdodDsKICAgIGN1cnNvcjpwb2ludGVyOwogICAgYmFj a2dyb3VuZDp0cmFuc3BhcmVudCBuby1yZXBlYXQ7CiAgICBtYXJnaW4tbGVmdDoycHg7Cn0KCi8q IGV4cGFuZCAvIGNvbGxhcHNlIHRvb2xzICovCi54LXRvb2wtdG9nZ2xlIHsKICAgIGJhY2tncm91 bmQtcG9zaXRpb246MCAtNjBweDsKfQoKLngtdG9vbC10b2dnbGUtb3ZlciB7CiAgICBiYWNrZ3Jv dW5kLXBvc2l0aW9uOi0xNXB4IC02MHB4Owp9CgoueC1wYW5lbC1jb2xsYXBzZWQgLngtdG9vbC10 b2dnbGUgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowIC03NXB4Owp9CgoueC1wYW5lbC1jb2xs YXBzZWQgLngtdG9vbC10b2dnbGUtb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNXB4 IC03NXB4Owp9CgoKLngtdG9vbC1jbG9zZSB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTA7 Cn0KCi54LXRvb2wtY2xvc2Utb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNXB4IDA7 Cn0KCi54LXRvb2wtbWluaW1pemUgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNXB4Owp9 CgoueC10b29sLW1pbmltaXplLW92ZXIgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjotMTVweCAt MTVweDsKfQoKLngtdG9vbC1tYXhpbWl6ZSB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTMw cHg7Cn0KCi54LXRvb2wtbWF4aW1pemUtb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0x NXB4IC0zMHB4Owp9CgoueC10b29sLXJlc3RvcmUgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjow IC00NXB4Owp9CgoueC10b29sLXJlc3RvcmUtb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9u Oi0xNXB4IC00NXB4Owp9CgoueC10b29sLWdlYXIgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjow IC05MHB4Owp9CgoueC10b29sLWdlYXItb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0x NXB4IC05MHB4Owp9CgoueC10b29sLXBpbiB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTEz NXB4Owp9CgoueC10b29sLXBpbi1vdmVyIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246LTE1cHgg LTEzNXB4Owp9CgoueC10b29sLXVucGluIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246MCAtMTUw cHg7Cn0KCi54LXRvb2wtdW5waW4tb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNXB4 IC0xNTBweDsKfQoKLngtdG9vbC1yaWdodCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE2 NXB4Owp9CgoueC10b29sLXJpZ2h0LW92ZXIgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjotMTVw eCAtMTY1cHg7Cn0KCi54LXRvb2wtbGVmdCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE4 MHB4Owp9CgoueC10b29sLWxlZnQtb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNXB4 IC0xODBweDsKfQoKLngtdG9vbC11cCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTIxMHB4 Owp9CgoueC10b29sLXVwLW92ZXIgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjotMTVweCAtMjEw cHg7Cn0KCi54LXRvb2wtZG93biB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE5NXB4Owp9 CgoueC10b29sLWRvd24tb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNXB4IC0xOTVw eDsKfQoKLngtdG9vbC1yZWZyZXNoIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246MCAtMjI1cHg7 Cn0KCi54LXRvb2wtcmVmcmVzaC1vdmVyIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246LTE1cHgg LTIyNXB4Owp9CgoueC10b29sLW1pbnVzIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246MCAtMjU1 cHg7Cn0KCi54LXRvb2wtbWludXMtb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNXB4 IC0yNTVweDsKfQoKLngtdG9vbC1wbHVzIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246MCAtMjQw cHg7Cn0KCi54LXRvb2wtcGx1cy1vdmVyIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246LTE1cHgg LTI0MHB4Owp9CgoueC10b29sLXNlYXJjaCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTI3 MHB4Owp9CgoueC10b29sLXNlYXJjaC1vdmVyIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246LTE1 cHggLTI3MHB4Owp9CgoueC10b29sLXNhdmUgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjowIC0y ODVweDsKfQoKLngtdG9vbC1zYXZlLW92ZXIgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjotMTVw eCAtMjg1cHg7Cn0KCi54LXRvb2wtaGVscCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTMw MHB4Owp9CgoueC10b29sLWhlbHAtb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNXB4 IC0zMDBweDsKfQoKLngtdG9vbC1wcmludCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTMx NXB4Owp9CgoueC10b29sLXByaW50LW92ZXIgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjotMTVw eCAtMzE1cHg7Cn0KCi8qIEdob3N0aW5nICovCi54LXBhbmVsLWdob3N0IHsKICAgIHotaW5kZXg6 MTIwMDA7CiAgICBvdmVyZmxvdzpoaWRkZW47CiAgICBwb3NpdGlvbjphYnNvbHV0ZTsKICAgIGxl ZnQ6MDt0b3A6MDsKICAgIG9wYWNpdHk6LjY1OwogICAgLW1vei1vcGFjaXR5Oi42NTsKICAgIGZp bHRlcjphbHBoYShvcGFjaXR5PTY1KTsKfQoKLngtcGFuZWwtZ2hvc3QgdWwgewogICAgbWFyZ2lu OjA7CiAgICBwYWRkaW5nOjA7CiAgICBvdmVyZmxvdzpoaWRkZW47CiAgICBmb250LXNpemU6MDsK ICAgIGxpbmUtaGVpZ2h0OjA7CiAgICBib3JkZXI6MXB4IHNvbGlkOwogICAgYm9yZGVyLXRvcDow IG5vbmU7CiAgICBkaXNwbGF5OmJsb2NrOwp9CgoueC1wYW5lbC1naG9zdCAqIHsKICAgIGN1cnNv cjptb3ZlICFpbXBvcnRhbnQ7Cn0KCi54LXBhbmVsLWRkLXNwYWNlciB7CiAgICBib3JkZXI6MnB4 IGRhc2hlZDsKfQoKLyogQnV0dG9ucyAqLwoueC1wYW5lbC1idG5zIHsKICAgIHBhZGRpbmc6NXB4 OwogICAgb3ZlcmZsb3c6aGlkZGVuOwp9CgoueC1wYW5lbC1idG5zLXJpZ2h0IC54LXBhbmVsLWZi YXIgewoJZmxvYXQ6cmlnaHQ7CgljbGVhcjpub25lOwp9CgoueC1wYW5lbC1idG5zLWxlZnQgLngt cGFuZWwtZmJhciB7CgljbGVhcjpub25lOwp9CgoueC1wYW5lbC1idG5zLWNlbnRlcnsKCXRleHQt YWxpZ246Y2VudGVyOyAvKmllKi8KfQoKLngtcGFuZWwtYnRucy1jZW50ZXIgLngtdG9vbGJhci1j dCB7CgltYXJnaW46MCBhdXRvOyAvKmV2ZXJ5b25lIGVsc2UqLwogICAgdGV4dC1hbGlnbjpsZWZ0 OwogICAgd2lkdGg6YXV0bzsKfQoKLmV4dC1nZWNrbzIgLngtcGFuZWwtYnRucy1yaWdodCAueC10 b29sYmFyLWN0IHsKICAgIHdpZHRoOmF1dG87Cn0KCi54LXBhbmVsLWJ0bnMgdGQueC10b29sYmFy LWNlbGx7CglwYWRkaW5nOjNweDsKfQoKLngtcGFuZWwtYnRucyAueC1idG4tZm9jdXMgLngtYnRu LWxlZnR7CgliYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE0N3B4Owp9CgoueC1wYW5lbC1idG5zIC54 LWJ0bi1mb2N1cyAueC1idG4tcmlnaHR7CgliYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE2OHB4Owp9 CgoueC1wYW5lbC1idG5zIC54LWJ0bi1mb2N1cyAueC1idG4tY2VudGVyewoJYmFja2dyb3VuZC1w b3NpdGlvbjowIC0xODlweDsKfQoKLngtcGFuZWwtYnRucyAueC1idG4tb3ZlciAueC1idG4tbGVm dHsKCWJhY2tncm91bmQtcG9zaXRpb246MCAtNjNweDsKfQoKLngtcGFuZWwtYnRucyAueC1idG4t b3ZlciAueC1idG4tcmlnaHR7CgliYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTg0cHg7Cn0KCi54LXBh bmVsLWJ0bnMgLngtYnRuLW92ZXIgLngtYnRuLWNlbnRlcnsKCWJhY2tncm91bmQtcG9zaXRpb246 MCAtMTA1cHg7Cn0KCi54LXBhbmVsLWJ0bnMgLngtYnRuLWNsaWNrIC54LWJ0bi1jZW50ZXJ7Cgli YWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTEyNnB4Owp9CgoueC1wYW5lbC1idG5zIC54LWJ0bi1jbGlj ayAgLngtYnRuLXJpZ2h0ewoJYmFja2dyb3VuZC1wb3NpdGlvbjowIC04NHB4Owp9CgoueC1wYW5l bC1idG5zIC54LWJ0bi1jbGljayAueC1idG4tbGVmdHsKCWJhY2tncm91bmQtcG9zaXRpb246MCAt NjNweDsKfQoKLngtcGFuZWwtZmJhciB0ZCwueC1wYW5lbC1mYmFyIHNwYW4sLngtcGFuZWwtZmJh ciBpbnB1dCwueC1wYW5lbC1mYmFyIGRpdiwueC1wYW5lbC1mYmFyIHNlbGVjdCwueC1wYW5lbC1m YmFyIGxhYmVsewoJd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQovKioKICogVzNDIFN1Z2dlc3RlZCBE ZWZhdWx0IHN0eWxlIHNoZWV0IGZvciBIVE1MIDQKICogaHR0cDovL3d3dy53My5vcmcvVFIvQ1NT MjEvc2FtcGxlLmh0bWwKICoKICogUmVzZXRzIGZvciBFeHQuUGFuZWwgQGNmZyBub3JtYWw6IHRy dWUKICovCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgaHRtbCwKLngtcGFuZWwtcmVzZXQg LngtcGFuZWwtYm9keSBhZGRyZXNzLAoueC1wYW5lbC1yZXNldCAueC1wYW5lbC1ib2R5IGJsb2Nr cXVvdGUsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgYm9keSwKLngtcGFuZWwtcmVzZXQg LngtcGFuZWwtYm9keSBkZCwKLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBkaXYsCi54LXBh bmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgZGwsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkg ZHQsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgZmllbGRzZXQsCi54LXBhbmVsLXJlc2V0 IC54LXBhbmVsLWJvZHkgZm9ybSwKLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBmcmFtZSwg ZnJhbWVzZXQsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgaDEsCi54LXBhbmVsLXJlc2V0 IC54LXBhbmVsLWJvZHkgaDIsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgaDMsCi54LXBh bmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgaDQsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkg aDUsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgaDYsCi54LXBhbmVsLXJlc2V0IC54LXBh bmVsLWJvZHkgbm9mcmFtZXMsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgb2wsCi54LXBh bmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgcCwKLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSB1 bCwKLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBjZW50ZXIsCi54LXBhbmVsLXJlc2V0IC54 LXBhbmVsLWJvZHkgZGlyLAoueC1wYW5lbC1yZXNldCAueC1wYW5lbC1ib2R5IGhyLAoueC1wYW5l bC1yZXNldCAueC1wYW5lbC1ib2R5IG1lbnUsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkg cHJlIAkJCSAgeyBkaXNwbGF5OiBibG9jayB9Ci54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkg bGkgICAgICAgICAgICAgIHsgZGlzcGxheTogbGlzdC1pdGVtIH0KLngtcGFuZWwtcmVzZXQgLngt cGFuZWwtYm9keSBoZWFkICAgICAgICAgICAgeyBkaXNwbGF5OiBub25lIH0KLngtcGFuZWwtcmVz ZXQgLngtcGFuZWwtYm9keSB0YWJsZSAgICAgICAgICAgeyBkaXNwbGF5OiB0YWJsZSB9Ci54LXBh bmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgdHIgICAgICAgICAgICAgIHsgZGlzcGxheTogdGFibGUt cm93IH0KLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSB0aGVhZCAgICAgICAgICAgeyBkaXNw bGF5OiB0YWJsZS1oZWFkZXItZ3JvdXAgfQoueC1wYW5lbC1yZXNldCAueC1wYW5lbC1ib2R5IHRi b2R5ICAgICAgICAgICB7IGRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cCB9Ci54LXBhbmVsLXJlc2V0 IC54LXBhbmVsLWJvZHkgdGZvb3QgICAgICAgICAgIHsgZGlzcGxheTogdGFibGUtZm9vdGVyLWdy b3VwIH0KLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBjb2wgICAgICAgICAgICAgeyBkaXNw bGF5OiB0YWJsZS1jb2x1bW4gfQoueC1wYW5lbC1yZXNldCAueC1wYW5lbC1ib2R5IGNvbGdyb3Vw ICAgICAgICB7IGRpc3BsYXk6IHRhYmxlLWNvbHVtbi1ncm91cCB9Ci54LXBhbmVsLXJlc2V0IC54 LXBhbmVsLWJvZHkgdGQsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgdGggCSAgICAgICAg ICB7IGRpc3BsYXk6IHRhYmxlLWNlbGwgfQoueC1wYW5lbC1yZXNldCAueC1wYW5lbC1ib2R5IGNh cHRpb24gICAgICAgICB7IGRpc3BsYXk6IHRhYmxlLWNhcHRpb24gfQoueC1wYW5lbC1yZXNldCAu eC1wYW5lbC1ib2R5IHRoICAgICAgICAgICAgICB7IGZvbnQtd2VpZ2h0OiBib2xkZXI7IHRleHQt YWxpZ246IGNlbnRlciB9Ci54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgY2FwdGlvbiAgICAg ICAgIHsgdGV4dC1hbGlnbjogY2VudGVyIH0KLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBi b2R5ICAgICAgICAgICAgeyBtYXJnaW46IDhweCB9Ci54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJv ZHkgaDEgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAyZW07IG1hcmdpbjogLjY3ZW0gMCB9Ci54 LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgaDIgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAx LjVlbTsgbWFyZ2luOiAuNzVlbSAwIH0KLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBoMyAg ICAgICAgICAgICAgeyBmb250LXNpemU6IDEuMTdlbTsgbWFyZ2luOiAuODNlbSAwIH0KLngtcGFu ZWwtcmVzZXQgLngtcGFuZWwtYm9keSBoNCwKLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBw LAoueC1wYW5lbC1yZXNldCAueC1wYW5lbC1ib2R5IGJsb2NrcXVvdGUsCi54LXBhbmVsLXJlc2V0 IC54LXBhbmVsLWJvZHkgdWwsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgZmllbGRzZXQs Ci54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgZm9ybSwKLngtcGFuZWwtcmVzZXQgLngtcGFu ZWwtYm9keSBvbCwKLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBkbCwKLngtcGFuZWwtcmVz ZXQgLngtcGFuZWwtYm9keSBkaXIsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgbWVudSAg ICAgICAgICAgIHsgbWFyZ2luOiAxLjEyZW0gMCB9Ci54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJv ZHkgaDUgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAuODNlbTsgbWFyZ2luOiAxLjVlbSAwIH0K LngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBoNiAgICAgICAgICAgICAgeyBmb250LXNpemU6 IC43NWVtOyBtYXJnaW46IDEuNjdlbSAwIH0KLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBo MSwKLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBoMiwKLngtcGFuZWwtcmVzZXQgLngtcGFu ZWwtYm9keSBoMywKLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBoNCwKLngtcGFuZWwtcmVz ZXQgLngtcGFuZWwtYm9keSBoNSwKLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBoNiwKLngt cGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBiLAoueC1wYW5lbC1yZXNldCAueC1wYW5lbC1ib2R5 IHN0cm9uZyAgICAgICAgICB7IGZvbnQtd2VpZ2h0OiBib2xkZXIgfQoueC1wYW5lbC1yZXNldCAu eC1wYW5lbC1ib2R5IGJsb2NrcXVvdGUgICAgICB7IG1hcmdpbi1sZWZ0OiA0MHB4OyBtYXJnaW4t cmlnaHQ6IDQwcHggfQoueC1wYW5lbC1yZXNldCAueC1wYW5lbC1ib2R5IGksCi54LXBhbmVsLXJl c2V0IC54LXBhbmVsLWJvZHkgY2l0ZSwKLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBlbSwK LngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSB2YXIsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVs LWJvZHkgYWRkcmVzcyAgICAJICB7IGZvbnQtc3R5bGU6IGl0YWxpYyB9Ci54LXBhbmVsLXJlc2V0 IC54LXBhbmVsLWJvZHkgcHJlLAoueC1wYW5lbC1yZXNldCAueC1wYW5lbC1ib2R5IHR0LAoueC1w YW5lbC1yZXNldCAueC1wYW5lbC1ib2R5IGNvZGUsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJv ZHkga2JkLAoueC1wYW5lbC1yZXNldCAueC1wYW5lbC1ib2R5IHNhbXAgICAgICAgCSAgeyBmb250 LWZhbWlseTogbW9ub3NwYWNlIH0KLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBwcmUgICAg ICAgICAgICAgeyB3aGl0ZS1zcGFjZTogcHJlIH0KLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9k eSBidXR0b24sCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgdGV4dGFyZWEsCi54LXBhbmVs LXJlc2V0IC54LXBhbmVsLWJvZHkgaW5wdXQsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkg c2VsZWN0ICAgCQkgIHsgZGlzcGxheTogaW5saW5lLWJsb2NrIH0KLngtcGFuZWwtcmVzZXQgLngt cGFuZWwtYm9keSBiaWcgICAgICAgICAgICAgeyBmb250LXNpemU6IDEuMTdlbSB9Ci54LXBhbmVs LXJlc2V0IC54LXBhbmVsLWJvZHkgc21hbGwsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkg c3ViLAoueC1wYW5lbC1yZXNldCAueC1wYW5lbC1ib2R5IHN1cCAJCQkgIHsgZm9udC1zaXplOiAu ODNlbSB9Ci54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgc3ViICAgICAgICAgICAgIHsgdmVy dGljYWwtYWxpZ246IHN1YiB9Ci54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgc3VwICAgICAg ICAgICAgIHsgdmVydGljYWwtYWxpZ246IHN1cGVyIH0KLngtcGFuZWwtcmVzZXQgLngtcGFuZWwt Ym9keSB0YWJsZSAgICAgICAgICAgeyBib3JkZXItc3BhY2luZzogMnB4OyB9Ci54LXBhbmVsLXJl c2V0IC54LXBhbmVsLWJvZHkgdGhlYWQsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgdGJv ZHksCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgdGZvb3QgICAgICAgICAgIHsgdmVydGlj YWwtYWxpZ246IG1pZGRsZSB9Ci54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgdGQsCi54LXBh bmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgdGggICAgICAgICAgCSAgeyB2ZXJ0aWNhbC1hbGlnbjog aW5oZXJpdCB9Ci54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgcywKLngtcGFuZWwtcmVzZXQg LngtcGFuZWwtYm9keSBzdHJpa2UsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgZGVsICAJ CQkgIHsgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2ggfQoueC1wYW5lbC1yZXNldCAueC1w YW5lbC1ib2R5IGhyICAgICAgICAgICAgICB7IGJvcmRlcjogMXB4IGluc2V0IH0KLngtcGFuZWwt cmVzZXQgLngtcGFuZWwtYm9keSBvbCwKLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSB1bCwK LngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBkaXIsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVs LWJvZHkgbWVudSwKLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9keSBkZCAgICAgICAgCSAgeyBt YXJnaW4tbGVmdDogNDBweCB9Ci54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgdWwsIC54LXBh bmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgbWVudSwgLngtcGFuZWwtcmVzZXQgLngtcGFuZWwtYm9k eSBkaXIgeyBsaXN0LXN0eWxlLXR5cGU6IGRpc2M7fQoueC1wYW5lbC1yZXNldCAueC1wYW5lbC1i b2R5IG9sICAgICAgICAgICAgICB7IGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbCB9Ci54LXBhbmVs LXJlc2V0IC54LXBhbmVsLWJvZHkgb2wgdWwsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkg dWwgb2wsCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgdWwgdWwsCi54LXBhbmVsLXJlc2V0 IC54LXBhbmVsLWJvZHkgb2wgb2wgICAgCQkgIHsgbWFyZ2luLXRvcDogMDsgbWFyZ2luLWJvdHRv bTogMCB9Ci54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgdSwKLngtcGFuZWwtcmVzZXQgLngt cGFuZWwtYm9keSBpbnMgICAgICAgICAgCSAgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSB9 Ci54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgYnI6YmVmb3JlICAgICAgIHsgY29udGVudDog IlxBIiB9Ci54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgOmJlZm9yZSwgLngtcGFuZWwtcmVz ZXQgLngtcGFuZWwtYm9keSA6YWZ0ZXIgeyB3aGl0ZS1zcGFjZTogcHJlLWxpbmUgfQoueC1wYW5l bC1yZXNldCAueC1wYW5lbC1ib2R5IGNlbnRlciAgICAgICAgICB7IHRleHQtYWxpZ246IGNlbnRl ciB9Ci54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgOmxpbmssIC54LXBhbmVsLXJlc2V0IC54 LXBhbmVsLWJvZHkgOnZpc2l0ZWQgeyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSB9Ci54LXBh bmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgOmZvY3VzICAgICAgICAgIHsgb3V0bGluZTogdGhpbiBk b3R0ZWQgaW52ZXJ0IH0KCi8qIEJlZ2luIGJpZGlyZWN0aW9uYWxpdHkgc2V0dGluZ3MgKGRvIG5v dCBjaGFuZ2UpICovCi54LXBhbmVsLXJlc2V0IC54LXBhbmVsLWJvZHkgQkRPW0RJUj0ibHRyIl0g IHsgZGlyZWN0aW9uOiBsdHI7IHVuaWNvZGUtYmlkaTogYmlkaS1vdmVycmlkZSB9Ci54LXBhbmVs LXJlc2V0IC54LXBhbmVsLWJvZHkgQkRPW0RJUj0icnRsIl0gIHsgZGlyZWN0aW9uOiBydGw7IHVu aWNvZGUtYmlkaTogYmlkaS1vdmVycmlkZSB9Ci54LXdpbmRvdyB7CiAgICB6b29tOjE7Cn0KCi54 LXdpbmRvdyAueC1yZXNpemFibGUtaGFuZGxlIHsKICAgIG9wYWNpdHk6MDsKICAgIC1tb3otb3Bh Y2l0eTowOwogICAgZmlsdGVyOmFscGhhKG9wYWNpdHk9MCk7Cn0KCi54LXdpbmRvdy1wcm94eSB7 CiAgICBib3JkZXI6MXB4IHNvbGlkOwogICAgei1pbmRleDoxMjAwMDsKICAgIG92ZXJmbG93Omhp ZGRlbjsKICAgIHBvc2l0aW9uOmFic29sdXRlOwogICAgbGVmdDowO3RvcDowOwogICAgZGlzcGxh eTpub25lOwogICAgb3BhY2l0eTouNTsKICAgIC1tb3otb3BhY2l0eTouNTsKICAgIGZpbHRlcjph bHBoYShvcGFjaXR5PTUwKTsKfQoKLngtd2luZG93LWhlYWRlciB7CiAgICBvdmVyZmxvdzpoaWRk ZW47CiAgICB6b29tOjE7Cn0KCi54LXdpbmRvdy1id3JhcCB7CiAgICB6LWluZGV4OjE7CiAgICBw b3NpdGlvbjpyZWxhdGl2ZTsKICAgIHpvb206MTsKICAgIGxlZnQ6MDt0b3A6MDsKfQoKLngtd2lu ZG93LXRsIC54LXdpbmRvdy1oZWFkZXIgewogICAgcGFkZGluZzo1cHggMCA0cHggMDsKfQoKLngt d2luZG93LWhlYWRlci10ZXh0IHsKICAgIGN1cnNvcjpwb2ludGVyOwp9CgoueC13aW5kb3ctdGMg ewoJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgcmVwZWF0LXggMCAwOwoJb3ZlcmZsb3c6aGlkZGVu OwogICAgem9vbToxOwp9CgoueC13aW5kb3ctdGwgewoJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQg bm8tcmVwZWF0IDAgMDsKCXBhZGRpbmctbGVmdDo2cHg7CiAgICB6b29tOjE7CiAgICB6LWluZGV4 OjE7CiAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKfQoKLngtd2luZG93LXRyIHsKCWJhY2tncm91bmQ6 IHRyYW5zcGFyZW50IG5vLXJlcGVhdCByaWdodCAwOwoJcGFkZGluZy1yaWdodDo2cHg7Cn0KCi54 LXdpbmRvdy1iYyB7CgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCByZXBlYXQteCAwIGJvdHRvbTsK ICAgIHpvb206MTsKfQoKLngtd2luZG93LWJjIC54LXdpbmRvdy1mb290ZXIgewogICAgcGFkZGlu Zy1ib3R0b206NnB4OwogICAgem9vbToxOwogICAgZm9udC1zaXplOjA7CiAgICBsaW5lLWhlaWdo dDowOwp9CgoueC13aW5kb3ctYmwgewoJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgbm8tcmVwZWF0 IDAgYm90dG9tOwoJcGFkZGluZy1sZWZ0OjZweDsKICAgIHpvb206MTsKfQoKLngtd2luZG93LWJy IHsKCWJhY2tncm91bmQ6IHRyYW5zcGFyZW50IG5vLXJlcGVhdCByaWdodCBib3R0b207CglwYWRk aW5nLXJpZ2h0OjZweDsKICAgIHpvb206MTsKfQoKLngtd2luZG93LW1jIHsKICAgIGJvcmRlcjox cHggc29saWQ7CiAgICBwYWRkaW5nOjA7CiAgICBtYXJnaW46MDsKfQoKLngtd2luZG93LW1sIHsK CWJhY2tncm91bmQ6IHRyYW5zcGFyZW50IHJlcGVhdC15IDAgMDsKCXBhZGRpbmctbGVmdDo2cHg7 CiAgICB6b29tOjE7Cn0KCi54LXdpbmRvdy1tciB7CgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCBy ZXBlYXQteSByaWdodCAwOwoJcGFkZGluZy1yaWdodDo2cHg7CiAgICB6b29tOjE7Cn0KCi54LXdp bmRvdy1ib2R5IHsKICAgIG92ZXJmbG93OmhpZGRlbjsKfQoKLngtd2luZG93LWJ3cmFwIHsKICAg IG92ZXJmbG93OmhpZGRlbjsKfQoKLngtd2luZG93LW1heGltaXplZCAueC13aW5kb3ctYmwsIC54 LXdpbmRvdy1tYXhpbWl6ZWQgLngtd2luZG93LWJyLAogICAgLngtd2luZG93LW1heGltaXplZCAu eC13aW5kb3ctbWwsIC54LXdpbmRvdy1tYXhpbWl6ZWQgLngtd2luZG93LW1yLAogICAgLngtd2lu ZG93LW1heGltaXplZCAueC13aW5kb3ctdGwsIC54LXdpbmRvdy1tYXhpbWl6ZWQgLngtd2luZG93 LXRyIHsKICAgIHBhZGRpbmc6MDsKfQoKLngtd2luZG93LW1heGltaXplZCAueC13aW5kb3ctZm9v dGVyIHsKICAgIHBhZGRpbmctYm90dG9tOjA7Cn0KCi54LXdpbmRvdy1tYXhpbWl6ZWQgLngtd2lu ZG93LXRjIHsKICAgIHBhZGRpbmctbGVmdDozcHg7CiAgICBwYWRkaW5nLXJpZ2h0OjNweDsKfQoK Lngtd2luZG93LW1heGltaXplZCAueC13aW5kb3ctbWMgewogICAgYm9yZGVyLWxlZnQ6MCBub25l OwogICAgYm9yZGVyLXJpZ2h0OjAgbm9uZTsKfQoKLngtd2luZG93LXRiYXIgLngtdG9vbGJhciwg Lngtd2luZG93LWJiYXIgLngtdG9vbGJhciB7CiAgICBib3JkZXItbGVmdDowIG5vbmU7CiAgICBi b3JkZXItcmlnaHQ6IDAgbm9uZTsKfQoKLngtd2luZG93LWJiYXIgLngtdG9vbGJhciB7CiAgICBi b3JkZXItdG9wOjFweCBzb2xpZDsKICAgIGJvcmRlci1ib3R0b206MCBub25lOwp9CgoueC13aW5k b3ctZHJhZ2dhYmxlLCAueC13aW5kb3ctZHJhZ2dhYmxlIC54LXdpbmRvdy1oZWFkZXItdGV4dCB7 CiAgICBjdXJzb3I6bW92ZTsKfQoKLngtd2luZG93LW1heGltaXplZCAueC13aW5kb3ctZHJhZ2dh YmxlLCAueC13aW5kb3ctbWF4aW1pemVkIC54LXdpbmRvdy1kcmFnZ2FibGUgLngtd2luZG93LWhl YWRlci10ZXh0IHsKICAgIGN1cnNvcjpkZWZhdWx0Owp9CgoueC13aW5kb3ctYm9keSB7CiAgICBi YWNrZ3JvdW5kOnRyYW5zcGFyZW50Owp9CgoueC1wYW5lbC1naG9zdCAueC13aW5kb3ctdGwgewog ICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQ7Cn0KCi54LXBhbmVsLWNvbGxhcHNlZCAueC13aW5k b3ctdGwgewogICAgYm9yZGVyLWJvdHRvbToxcHggc29saWQ7Cn0KCi54LXdpbmRvdy1tYXhpbWl6 ZWQtY3QgewogICAgb3ZlcmZsb3c6aGlkZGVuOwp9CgoueC13aW5kb3ctbWF4aW1pemVkIC54LXJl c2l6YWJsZS1oYW5kbGUgewogICAgZGlzcGxheTpub25lOwp9CgoueC13aW5kb3ctc2l6aW5nLWdo b3N0IHVsIHsKICAgIGJvcmRlcjowIG5vbmUgIWltcG9ydGFudDsKfQoKLngtZGxnLWZvY3VzewoJ LW1vei1vdXRsaW5lOjAgbm9uZTsKCW91dGxpbmU6MCBub25lOwoJd2lkdGg6MDsKCWhlaWdodDow OwoJb3ZlcmZsb3c6aGlkZGVuOwoJcG9zaXRpb246YWJzb2x1dGU7Cgl0b3A6MDsKCWxlZnQ6MDsK fQoKLmV4dC13ZWJraXQgLngtZGxnLWZvY3VzewogICAgd2lkdGg6IDFweDsKICAgIGhlaWdodDog MXB4Owp9CgoueC1kbGctbWFza3sKICAgIHotaW5kZXg6MTAwMDA7CiAgICBkaXNwbGF5Om5vbmU7 CiAgICBwb3NpdGlvbjphYnNvbHV0ZTsKICAgIHRvcDowOwogICAgbGVmdDowOwogICAgLW1vei1v cGFjaXR5OiAwLjU7CiAgICBvcGFjaXR5Oi41MDsKICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT01 MCk7Cn0KCmJvZHkuZXh0LWllNi54LWJvZHktbWFza2VkIHNlbGVjdCB7Cgl2aXNpYmlsaXR5Omhp ZGRlbjsKfQoKYm9keS5leHQtaWU2LngtYm9keS1tYXNrZWQgLngtd2luZG93IHNlbGVjdCB7Cgl2 aXNpYmlsaXR5OnZpc2libGU7Cn0KCi54LXdpbmRvdy1wbGFpbiAueC13aW5kb3ctbWMgewogICAg Ym9yZGVyOiAxcHggc29saWQ7Cn0KCi54LXdpbmRvdy1wbGFpbiAueC13aW5kb3ctYm9keSB7CiAg ICBib3JkZXI6IDFweCBzb2xpZDsKICAgIGJhY2tncm91bmQ6dHJhbnNwYXJlbnQgIWltcG9ydGFu dDsKfS54LWh0bWwtZWRpdG9yLXdyYXAgew0KICAgIGJvcmRlcjoxcHggc29saWQ7DQp9DQoNCi54 LWh0bWwtZWRpdG9yLXRiIC54LWJ0bi10ZXh0IHsNCiAgICBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50 IG5vLXJlcGVhdDsNCn0NCg0KLngtaHRtbC1lZGl0b3ItdGIgLngtZWRpdC1ib2xkLCAueC1tZW51 LWl0ZW0gaW1nLngtZWRpdC1ib2xkIHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDsNCiAg ICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC9lZGl0b3IvdGItc3ByaXRl LmdpZik7ICAgIA0KfQ0KDQoueC1odG1sLWVkaXRvci10YiAueC1lZGl0LWl0YWxpYywgLngtbWVu dS1pdGVtIGltZy54LWVkaXQtaXRhbGljIHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4 IDA7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZWRpdG9yL3Ri LXNwcml0ZS5naWYpOw0KfQ0KDQoueC1odG1sLWVkaXRvci10YiAueC1lZGl0LXVuZGVybGluZSwg LngtbWVudS1pdGVtIGltZy54LWVkaXQtdW5kZXJsaW5lIHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0 aW9uOi0zMnB4IDA7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQv ZWRpdG9yL3RiLXNwcml0ZS5naWYpOw0KfQ0KDQoueC1odG1sLWVkaXRvci10YiAueC1lZGl0LWZv cmVjb2xvciwgLngtbWVudS1pdGVtIGltZy54LWVkaXQtZm9yZWNvbG9yIHsNCiAgICBiYWNrZ3Jv dW5kLXBvc2l0aW9uOi0xNjBweCAwOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdl cy9kZWZhdWx0L2VkaXRvci90Yi1zcHJpdGUuZ2lmKTsNCn0NCg0KLngtaHRtbC1lZGl0b3ItdGIg LngtZWRpdC1iYWNrY29sb3IsIC54LW1lbnUtaXRlbSBpbWcueC1lZGl0LWJhY2tjb2xvciB7DQog ICAgYmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggMDsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOnVy bCguLi9pbWFnZXMvZGVmYXVsdC9lZGl0b3IvdGItc3ByaXRlLmdpZik7DQp9DQoNCi54LWh0bWwt ZWRpdG9yLXRiIC54LWVkaXQtanVzdGlmeWxlZnQsIC54LW1lbnUtaXRlbSBpbWcueC1lZGl0LWp1 c3RpZnlsZWZ0IHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAwOw0KICAgIGJhY2tn cm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2VkaXRvci90Yi1zcHJpdGUuZ2lmKTsN Cn0NCg0KLngtaHRtbC1lZGl0b3ItdGIgLngtZWRpdC1qdXN0aWZ5Y2VudGVyLCAueC1tZW51LWl0 ZW0gaW1nLngtZWRpdC1qdXN0aWZ5Y2VudGVyIHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0x MjhweCAwOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2VkaXRv ci90Yi1zcHJpdGUuZ2lmKTsNCn0NCg0KLngtaHRtbC1lZGl0b3ItdGIgLngtZWRpdC1qdXN0aWZ5 cmlnaHQsIC54LW1lbnUtaXRlbSBpbWcueC1lZGl0LWp1c3RpZnlyaWdodCB7DQogICAgYmFja2dy b3VuZC1wb3NpdGlvbjotMTQ0cHggMDsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFn ZXMvZGVmYXVsdC9lZGl0b3IvdGItc3ByaXRlLmdpZik7DQp9DQoNCi54LWh0bWwtZWRpdG9yLXRi IC54LWVkaXQtaW5zZXJ0b3JkZXJlZGxpc3QsIC54LW1lbnUtaXRlbSBpbWcueC1lZGl0LWluc2Vy dG9yZGVyZWRsaXN0IHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IDA7DQogICAgYmFj a2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZWRpdG9yL3RiLXNwcml0ZS5naWYp Ow0KfQ0KDQoueC1odG1sLWVkaXRvci10YiAueC1lZGl0LWluc2VydHVub3JkZXJlZGxpc3QsIC54 LW1lbnUtaXRlbSBpbWcueC1lZGl0LWluc2VydHVub3JkZXJlZGxpc3Qgew0KICAgIGJhY2tncm91 bmQtcG9zaXRpb246LTk2cHggMDsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMv ZGVmYXVsdC9lZGl0b3IvdGItc3ByaXRlLmdpZik7DQp9DQoNCi54LWh0bWwtZWRpdG9yLXRiIC54 LWVkaXQtaW5jcmVhc2Vmb250c2l6ZSwgLngtbWVudS1pdGVtIGltZy54LWVkaXQtaW5jcmVhc2Vm b250c2l6ZSB7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAwOw0KICAgIGJhY2tncm91 bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2VkaXRvci90Yi1zcHJpdGUuZ2lmKTsNCn0N Cg0KLngtaHRtbC1lZGl0b3ItdGIgLngtZWRpdC1kZWNyZWFzZWZvbnRzaXplLCAueC1tZW51LWl0 ZW0gaW1nLngtZWRpdC1kZWNyZWFzZWZvbnRzaXplIHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9u Oi02NHB4IDA7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZWRp dG9yL3RiLXNwcml0ZS5naWYpOw0KfQ0KDQoueC1odG1sLWVkaXRvci10YiAueC1lZGl0LXNvdXJj ZWVkaXQsIC54LW1lbnUtaXRlbSBpbWcueC1lZGl0LXNvdXJjZWVkaXQgew0KICAgIGJhY2tncm91 bmQtcG9zaXRpb246LTE5MnB4IDA7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2Vz L2RlZmF1bHQvZWRpdG9yL3RiLXNwcml0ZS5naWYpOw0KfQ0KDQoueC1odG1sLWVkaXRvci10YiAu eC1lZGl0LWNyZWF0ZWxpbmssIC54LW1lbnUtaXRlbSBpbWcueC1lZGl0LWNyZWF0ZWxpbmsgew0K ICAgIGJhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IDA7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1 cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZWRpdG9yL3RiLXNwcml0ZS5naWYpOw0KfQ0KDQoueC1odG1s LWVkaXRvci10aXAgLngtdGlwLWJkIC54LXRpcC1iZC1pbm5lciB7DQogICAgcGFkZGluZzo1cHg7 DQogICAgcGFkZGluZy1ib3R0b206MXB4Ow0KfQ0KDQoueC1odG1sLWVkaXRvci10YiAueC10b29s YmFyIHsNCiAgICBwb3NpdGlvbjpzdGF0aWMgIWltcG9ydGFudDsNCn0ueC1wYW5lbC1ub2JvcmRl ciAueC1wYW5lbC1ib2R5LW5vYm9yZGVyIHsNCiAgICBib3JkZXItd2lkdGg6MDsNCn0NCg0KLngt cGFuZWwtbm9ib3JkZXIgLngtcGFuZWwtaGVhZGVyLW5vYm9yZGVyIHsNCiAgICBib3JkZXItd2lk dGg6MCAwIDFweDsNCiAgICBib3JkZXItc3R5bGU6c29saWQ7DQp9DQoNCi54LXBhbmVsLW5vYm9y ZGVyIC54LXBhbmVsLXRiYXItbm9ib3JkZXIgLngtdG9vbGJhciB7DQogICAgYm9yZGVyLXdpZHRo OjAgMCAxcHg7DQogICAgYm9yZGVyLXN0eWxlOnNvbGlkOw0KfQ0KDQoueC1wYW5lbC1ub2JvcmRl ciAueC1wYW5lbC1iYmFyLW5vYm9yZGVyIC54LXRvb2xiYXIgew0KICAgIGJvcmRlci13aWR0aDox cHggMCAwIDA7DQogICAgYm9yZGVyLXN0eWxlOnNvbGlkOw0KfQ0KDQoueC13aW5kb3ctbm9ib3Jk ZXIgLngtd2luZG93LW1jIHsNCiAgICBib3JkZXItd2lkdGg6MDsNCn0NCg0KLngtd2luZG93LXBs YWluIC54LXdpbmRvdy1ib2R5LW5vYm9yZGVyIHsNCiAgICBib3JkZXItd2lkdGg6MDsNCn0NCg0K LngtdGFiLXBhbmVsLW5vYm9yZGVyIC54LXRhYi1wYW5lbC1ib2R5LW5vYm9yZGVyIHsNCglib3Jk ZXItd2lkdGg6MDsNCn0NCg0KLngtdGFiLXBhbmVsLW5vYm9yZGVyIC54LXRhYi1wYW5lbC1oZWFk ZXItbm9ib3JkZXIgew0KICAgIGJvcmRlci13aWR0aDogMCAwIDFweCAwOw0KfQ0KDQoueC10YWIt cGFuZWwtbm9ib3JkZXIgLngtdGFiLXBhbmVsLWZvb3Rlci1ub2JvcmRlciB7DQogICAgYm9yZGVy LXdpZHRoOiAxcHggMCAwIDA7DQp9DQoNCi54LXRhYi1wYW5lbC1iYmFyLW5vYm9yZGVyIC54LXRv b2xiYXIgew0KICAgIGJvcmRlci13aWR0aDogMXB4IDAgMCAwOw0KICAgIGJvcmRlci1zdHlsZTpz b2xpZDsNCn0NCg0KLngtdGFiLXBhbmVsLXRiYXItbm9ib3JkZXIgLngtdG9vbGJhciB7DQogICAg Ym9yZGVyLXdpZHRoOjAgMCAxcHg7DQogICAgYm9yZGVyLXN0eWxlOnNvbGlkOw0KfS54LWJvcmRl ci1sYXlvdXQtY3QgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoueC1ib3JkZXItcGFuZWwg ewogICAgcG9zaXRpb246YWJzb2x1dGU7CiAgICBsZWZ0OjA7CiAgICB0b3A6MDsKfQoKLngtdG9v bC1jb2xsYXBzZS1zb3V0aCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE5NXB4Owp9Cgou eC10b29sLWNvbGxhcHNlLXNvdXRoLW92ZXIgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjotMTVw eCAtMTk1cHg7Cn0KCi54LXRvb2wtY29sbGFwc2Utbm9ydGggewogICAgYmFja2dyb3VuZC1wb3Np dGlvbjowIC0yMTBweDsKfQoKLngtdG9vbC1jb2xsYXBzZS1ub3J0aC1vdmVyIHsKICAgIGJhY2tn cm91bmQtcG9zaXRpb246LTE1cHggLTIxMHB4Owp9CgoueC10b29sLWNvbGxhcHNlLXdlc3Qgewog ICAgYmFja2dyb3VuZC1wb3NpdGlvbjowIC0xODBweDsKfQoKLngtdG9vbC1jb2xsYXBzZS13ZXN0 LW92ZXIgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjotMTVweCAtMTgwcHg7Cn0KCi54LXRvb2wt Y29sbGFwc2UtZWFzdCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE2NXB4Owp9CgoueC10 b29sLWNvbGxhcHNlLWVhc3Qtb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNXB4IC0x NjVweDsKfQoKLngtdG9vbC1leHBhbmQtc291dGggewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjow IC0yMTBweDsKfQoKLngtdG9vbC1leHBhbmQtc291dGgtb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBv c2l0aW9uOi0xNXB4IC0yMTBweDsKfQoKLngtdG9vbC1leHBhbmQtbm9ydGggewogICAgYmFja2dy b3VuZC1wb3NpdGlvbjowIC0xOTVweDsKfQoueC10b29sLWV4cGFuZC1ub3J0aC1vdmVyIHsKICAg IGJhY2tncm91bmQtcG9zaXRpb246LTE1cHggLTE5NXB4Owp9CgoueC10b29sLWV4cGFuZC13ZXN0 IHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246MCAtMTY1cHg7Cn0KCi54LXRvb2wtZXhwYW5kLXdl c3Qtb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNXB4IC0xNjVweDsKfQoKLngtdG9v bC1leHBhbmQtZWFzdCB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE4MHB4Owp9CgoueC10 b29sLWV4cGFuZC1lYXN0LW92ZXIgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjotMTVweCAtMTgw cHg7Cn0KCi54LXRvb2wtZXhwYW5kLW5vcnRoLCAueC10b29sLWV4cGFuZC1zb3V0aCB7CiAgICBm bG9hdDpyaWdodDsKICAgIG1hcmdpbjozcHg7Cn0KCi54LXRvb2wtZXhwYW5kLWVhc3QsIC54LXRv b2wtZXhwYW5kLXdlc3QgewogICAgZmxvYXQ6bm9uZTsKICAgIG1hcmdpbjozcHggYXV0bzsKfQoK LngtYWNjb3JkaW9uLWhkIC54LXRvb2wtdG9nZ2xlIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246 MCAtMjU1cHg7Cn0KCi54LWFjY29yZGlvbi1oZCAueC10b29sLXRvZ2dsZS1vdmVyIHsKICAgIGJh Y2tncm91bmQtcG9zaXRpb246LTE1cHggLTI1NXB4Owp9CgoueC1wYW5lbC1jb2xsYXBzZWQgLngt YWNjb3JkaW9uLWhkIC54LXRvb2wtdG9nZ2xlIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246MCAt MjQwcHg7Cn0KCi54LXBhbmVsLWNvbGxhcHNlZCAueC1hY2NvcmRpb24taGQgLngtdG9vbC10b2dn bGUtb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNXB4IC0yNDBweDsKfQoKLngtYWNj b3JkaW9uLWhkIHsKCXBhZGRpbmctdG9wOjRweDsKCXBhZGRpbmctYm90dG9tOjNweDsKCWJvcmRl ci10b3A6MCBub25lOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgcmVwZWF0LXggMCAtOXB4 Owp9CgoueC1sYXlvdXQtY29sbGFwc2VkewogICAgcG9zaXRpb246YWJzb2x1dGU7CiAgICBsZWZ0 Oi0xMDAwMHB4OwogICAgdG9wOi0xMDAwMHB4OwogICAgdmlzaWJpbGl0eTpoaWRkZW47CiAgICB3 aWR0aDoyMHB4OwogICAgaGVpZ2h0OjIwcHg7CiAgICBvdmVyZmxvdzpoaWRkZW47Cglib3JkZXI6 MXB4IHNvbGlkOwoJei1pbmRleDoyMDsKfQoKLmV4dC1ib3JkZXItYm94IC54LWxheW91dC1jb2xs YXBzZWR7CiAgICB3aWR0aDoyMnB4OwogICAgaGVpZ2h0OjIycHg7Cn0KCi54LWxheW91dC1jb2xs YXBzZWQtb3ZlcnsKICAgIGN1cnNvcjpwb2ludGVyOwp9CgoueC1sYXlvdXQtY29sbGFwc2VkLXdl c3QgLngtbGF5b3V0LWNvbGxhcHNlZC10b29scywgLngtbGF5b3V0LWNvbGxhcHNlZC1lYXN0IC54 LWxheW91dC1jb2xsYXBzZWQtdG9vbHN7Cglwb3NpdGlvbjphYnNvbHV0ZTsKICAgIHRvcDowOwog ICAgbGVmdDowOwogICAgd2lkdGg6MjBweDsKICAgIGhlaWdodDoyMHB4Owp9CgoKLngtbGF5b3V0 LXNwbGl0ewogICAgcG9zaXRpb246YWJzb2x1dGU7CiAgICBoZWlnaHQ6NXB4OwogICAgd2lkdGg6 NXB4OwogICAgbGluZS1oZWlnaHQ6MXB4OwogICAgZm9udC1zaXplOjFweDsKICAgIHotaW5kZXg6 MzsKICAgIGJhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Cn0KCi8qIElFNiBzdHJpY3Qgd29u J3QgZHJhZyB3L291dCBhIGNvbG9yICovCi5leHQtc3RyaWN0IC5leHQtaWU2IC54LWxheW91dC1z cGxpdHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDsKICAgIGZpbHRlcjog YWxwaGEob3BhY2l0eT0xKTsKfQoKLngtbGF5b3V0LXNwbGl0LWh7CiAgICBiYWNrZ3JvdW5kLWlt YWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC9zLmdpZik7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9u OiBsZWZ0Owp9CgoueC1sYXlvdXQtc3BsaXQtdnsKICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4u L2ltYWdlcy9kZWZhdWx0L3MuZ2lmKTsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IHRvcDsKfQoK LngtY29sdW1uLWxheW91dC1jdCB7CiAgICBvdmVyZmxvdzpoaWRkZW47CiAgICB6b29tOjE7Cn0K Ci54LWNvbHVtbiB7CiAgICBmbG9hdDpsZWZ0OwogICAgcGFkZGluZzowOwogICAgbWFyZ2luOjA7 CiAgICBvdmVyZmxvdzpoaWRkZW47CiAgICB6b29tOjE7Cn0KCi54LWNvbHVtbi1pbm5lciB7CiAg ICBvdmVyZmxvdzpoaWRkZW47CiAgICB6b29tOjE7Cn0KCi8qIG1pbmkgbW9kZSAqLwoueC1sYXlv dXQtbWluaSB7CiAgICBwb3NpdGlvbjphYnNvbHV0ZTsKICAgIHRvcDowOwogICAgbGVmdDowOwog ICAgZGlzcGxheTpibG9jazsKICAgIHdpZHRoOjVweDsKICAgIGhlaWdodDozNXB4OwogICAgY3Vy c29yOnBvaW50ZXI7CiAgICBvcGFjaXR5Oi41OwogICAgLW1vei1vcGFjaXR5Oi41OwogICAgZmls dGVyOmFscGhhKG9wYWNpdHk9NTApOwp9CgoueC1sYXlvdXQtbWluaS1vdmVyLCAueC1sYXlvdXQt Y29sbGFwc2VkLW92ZXIgLngtbGF5b3V0LW1pbml7CiAgICBvcGFjaXR5OjE7CiAgICAtbW96LW9w YWNpdHk6MTsKICAgIGZpbHRlcjpub25lOwp9CgoueC1sYXlvdXQtc3BsaXQtd2VzdCAueC1sYXlv dXQtbWluaSB7CiAgICB0b3A6NDglOwp9CgoueC1sYXlvdXQtc3BsaXQtZWFzdCAueC1sYXlvdXQt bWluaSB7CiAgICB0b3A6NDglOwp9CgoueC1sYXlvdXQtc3BsaXQtbm9ydGggLngtbGF5b3V0LW1p bmkgewogICAgbGVmdDo0OCU7CiAgICBoZWlnaHQ6NXB4OwogICAgd2lkdGg6MzVweDsKfQoKLngt bGF5b3V0LXNwbGl0LXNvdXRoIC54LWxheW91dC1taW5pIHsKICAgIGxlZnQ6NDglOwogICAgaGVp Z2h0OjVweDsKICAgIHdpZHRoOjM1cHg7Cn0KCi54LWxheW91dC1jbWluaS13ZXN0IC54LWxheW91 dC1taW5pIHsKICAgIHRvcDo0OCU7Cn0KCi54LWxheW91dC1jbWluaS1lYXN0IC54LWxheW91dC1t aW5pIHsKICAgIHRvcDo0OCU7Cn0KCi54LWxheW91dC1jbWluaS1ub3J0aCAueC1sYXlvdXQtbWlu aSB7CiAgICBsZWZ0OjQ4JTsKICAgIGhlaWdodDo1cHg7CiAgICB3aWR0aDozNXB4Owp9CgoueC1s YXlvdXQtY21pbmktc291dGggLngtbGF5b3V0LW1pbmkgewogICAgbGVmdDo0OCU7CiAgICBoZWln aHQ6NXB4OwogICAgd2lkdGg6MzVweDsKfQoKLngtbGF5b3V0LWNtaW5pLXdlc3QsIC54LWxheW91 dC1jbWluaS1lYXN0IHsKICAgIGJvcmRlcjowIG5vbmU7CiAgICB3aWR0aDo1cHggIWltcG9ydGFu dDsKICAgIHBhZGRpbmc6MDsKICAgIGJhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Cn0KCi54LWxheW91 dC1jbWluaS1ub3J0aCwgLngtbGF5b3V0LWNtaW5pLXNvdXRoIHsKICAgIGJvcmRlcjowIG5vbmU7 CiAgICBoZWlnaHQ6NXB4ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOjA7CiAgICBiYWNrZ3JvdW5k OnRyYW5zcGFyZW50Owp9CgoueC12aWV3cG9ydCwgLngtdmlld3BvcnQgYm9keSB7CiAgICBtYXJn aW46IDA7CiAgICBwYWRkaW5nOiAwOwogICAgYm9yZGVyOiAwIG5vbmU7CiAgICBvdmVyZmxvdzog aGlkZGVuOwogICAgaGVpZ2h0OiAxMDAlOwp9CgoueC1hYnMtbGF5b3V0LWl0ZW0gewogICAgcG9z aXRpb246YWJzb2x1dGU7CiAgICBsZWZ0OjA7CiAgICB0b3A6MDsKfQoKLmV4dC1pZSBpbnB1dC54 LWFicy1sYXlvdXQtaXRlbSwgLmV4dC1pZSB0ZXh0YXJlYS54LWFicy1sYXlvdXQtaXRlbSB7CiAg ICBtYXJnaW46MDsKfQoKLngtYm94LWxheW91dC1jdCB7CiAgICBvdmVyZmxvdzpoaWRkZW47CiAg ICB6b29tOjE7Cn0KCi54LWJveC1pbm5lciB7CiAgICBvdmVyZmxvdzpoaWRkZW47CiAgICB6b29t OjE7CiAgICBwb3NpdGlvbjpyZWxhdGl2ZTsKICAgIGxlZnQ6MDsKICAgIHRvcDowOwp9CgoueC1i b3gtaXRlbSB7CiAgICBwb3NpdGlvbjphYnNvbHV0ZTsKICAgIGxlZnQ6MDsKICAgIHRvcDowOwp9 LngtcHJvZ3Jlc3Mtd3JhcCB7DQogICAgYm9yZGVyOjFweCBzb2xpZDsNCiAgICBvdmVyZmxvdzpo aWRkZW47DQp9DQoNCi54LXByb2dyZXNzLWlubmVyIHsNCiAgICBoZWlnaHQ6MThweDsNCiAgICBi YWNrZ3JvdW5kOnJlcGVhdC14Ow0KICAgIHBvc2l0aW9uOnJlbGF0aXZlOw0KfQ0KDQoueC1wcm9n cmVzcy1iYXIgew0KICAgIGhlaWdodDoxOHB4Ow0KICAgIGZsb2F0OmxlZnQ7DQogICAgd2lkdGg6 MDsNCiAgICBiYWNrZ3JvdW5kOiByZXBlYXQteCBsZWZ0IGNlbnRlcjsNCiAgICBib3JkZXItdG9w OjFweCBzb2xpZDsNCiAgICBib3JkZXItYm90dG9tOjFweCBzb2xpZDsNCiAgICBib3JkZXItcmln aHQ6MXB4IHNvbGlkOw0KfQ0KDQoueC1wcm9ncmVzcy10ZXh0IHsNCiAgICBwYWRkaW5nOjFweCA1 cHg7DQogICAgb3ZlcmZsb3c6aGlkZGVuOw0KICAgIHBvc2l0aW9uOmFic29sdXRlOw0KICAgIGxl ZnQ6MDsNCiAgICB0ZXh0LWFsaWduOmNlbnRlcjsNCn0NCg0KLngtcHJvZ3Jlc3MtdGV4dC1iYWNr IHsNCiAgICBsaW5lLWhlaWdodDoxNnB4Ow0KfQ0KDQouZXh0LWllIC54LXByb2dyZXNzLXRleHQt YmFjayB7DQogICAgbGluZS1oZWlnaHQ6MTVweDsNCn0ueC1saXN0LWhlYWRlcnsNCgliYWNrZ3Jv dW5kOiByZXBlYXQteCAwIGJvdHRvbTsNCgljdXJzb3I6ZGVmYXVsdDsNCiAgICB6b29tOjE7DQog ICAgaGVpZ2h0OjIycHg7DQp9DQoNCi54LWxpc3QtaGVhZGVyLWlubmVyIGRpdiB7DQogICAgZGlz cGxheTpibG9jazsNCiAgICBmbG9hdDpsZWZ0Ow0KICAgIG92ZXJmbG93OmhpZGRlbjsNCgktby10 ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsNCgl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsNCiAgICB3 aGl0ZS1zcGFjZTogbm93cmFwOw0KfQ0KDQoueC1saXN0LWhlYWRlci1pbm5lciBkaXYgZW0gew0K ICAgIGRpc3BsYXk6YmxvY2s7DQogICAgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkOw0KICAgIHBhZGRp bmc6NHB4IDRweDsNCiAgICBvdmVyZmxvdzpoaWRkZW47DQogICAgLW1vei11c2VyLXNlbGVjdDog bm9uZTsNCiAgICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7DQogICAgbGluZS1oZWlnaHQ6MTRw eDsNCn0NCg0KLngtbGlzdC1ib2R5IHsNCiAgICBvdmVyZmxvdzphdXRvOw0KICAgIG92ZXJmbG93 LXg6aGlkZGVuOw0KICAgIG92ZXJmbG93LXk6YXV0bzsNCiAgICB6b29tOjE7DQogICAgZmxvYXQ6 IGxlZnQ7DQogICAgd2lkdGg6IDEwMCU7DQp9DQoNCi54LWxpc3QtYm9keSBkbCB7DQogICAgem9v bToxOw0KfQ0KDQoueC1saXN0LWJvZHkgZHQgew0KICAgIGRpc3BsYXk6YmxvY2s7DQogICAgZmxv YXQ6bGVmdDsNCiAgICBvdmVyZmxvdzpoaWRkZW47DQoJLW8tdGV4dC1vdmVyZmxvdzogZWxsaXBz aXM7DQoJdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7DQogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsN CiAgICBjdXJzb3I6cG9pbnRlcjsNCiAgICB6b29tOjE7DQp9DQoNCi54LWxpc3QtYm9keSBkdCBl bSB7DQogICAgZGlzcGxheTpibG9jazsNCiAgICBwYWRkaW5nOjNweCA0cHg7DQogICAgb3ZlcmZs b3c6aGlkZGVuOw0KICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7DQogICAgLWtodG1sLXVzZXIt c2VsZWN0OiBub25lOw0KfQ0KDQoueC1saXN0LXJlc2l6ZXIgew0KICAgIGJvcmRlci1sZWZ0OjFw eCBzb2xpZDsNCiAgICBib3JkZXItcmlnaHQ6MXB4IHNvbGlkOw0KICAgIHBvc2l0aW9uOmFic29s dXRlOw0KICAgIGxlZnQ6MDsNCiAgICB0b3A6MDsNCn0NCg0KLngtbGlzdC1oZWFkZXItaW5uZXIg ZW0uc29ydC1hc2Mgew0KICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IG5vLXJlcGVhdCBjZW50 ZXIgMDsNCiAgICBib3JkZXItc3R5bGU6c29saWQ7DQogICAgYm9yZGVyLXdpZHRoOiAwIDFweCAx cHg7DQogICAgcGFkZGluZy1ib3R0b206M3B4Ow0KfQ0KDQoueC1saXN0LWhlYWRlci1pbm5lciBl bS5zb3J0LWRlc2Mgew0KICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50IG5vLXJlcGVhdCBjZW50 ZXIgLTIzcHg7DQogICAgYm9yZGVyLXN0eWxlOnNvbGlkOw0KICAgIGJvcmRlci13aWR0aDogMCAx cHggMXB4Ow0KICAgIHBhZGRpbmctYm90dG9tOjNweDsNCn0NCi8qIFNoYXJlZCBzdHlsZXMgKi8N Ci54LXNsaWRlciB7DQogICAgem9vbToxOw0KfQ0KDQoueC1zbGlkZXItaW5uZXIgew0KICAgIHBv c2l0aW9uOnJlbGF0aXZlOw0KICAgIGxlZnQ6MDsNCiAgICB0b3A6MDsNCiAgICBvdmVyZmxvdzp2 aXNpYmxlOw0KICAgIHpvb206MTsNCn0NCg0KLngtc2xpZGVyLWZvY3VzIHsNCglwb3NpdGlvbjph YnNvbHV0ZTsNCglsZWZ0OjA7DQoJdG9wOjA7DQoJd2lkdGg6MXB4Ow0KCWhlaWdodDoxcHg7DQog ICAgbGluZS1oZWlnaHQ6MXB4Ow0KICAgIGZvbnQtc2l6ZToxcHg7DQogICAgLW1vei1vdXRsaW5l OjAgbm9uZTsNCiAgICBvdXRsaW5lOjAgbm9uZTsNCiAgICAtbW96LXVzZXItc2VsZWN0OiBub25l Ow0KICAgIC1raHRtbC11c2VyLXNlbGVjdDpub25lOw0KICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6 aWdub3JlOw0KCWRpc3BsYXk6YmxvY2s7DQoJb3ZlcmZsb3c6aGlkZGVuOyAgDQp9DQoNCi8qIEhv cml6b250YWwgc3R5bGVzICovDQoueC1zbGlkZXItaG9yeiB7DQogICAgcGFkZGluZy1sZWZ0Ojdw eDsNCiAgICBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIC0yMnB4Ow0KfQ0KDQou eC1zbGlkZXItaG9yeiAueC1zbGlkZXItZW5kIHsNCiAgICBwYWRkaW5nLXJpZ2h0OjdweDsNCiAg ICB6b29tOjE7DQogICAgYmFja2dyb3VuZDp0cmFuc3BhcmVudCBuby1yZXBlYXQgcmlnaHQgLTQ0 cHg7DQp9DQoNCi54LXNsaWRlci1ob3J6IC54LXNsaWRlci1pbm5lciB7DQogICAgYmFja2dyb3Vu ZDp0cmFuc3BhcmVudCByZXBlYXQteCAwIDA7DQogICAgaGVpZ2h0OjIycHg7DQp9DQoNCi54LXNs aWRlci1ob3J6IC54LXNsaWRlci10aHVtYiB7DQogICAgd2lkdGg6MTRweDsNCiAgICBoZWlnaHQ6 MTVweDsNCiAgICBwb3NpdGlvbjphYnNvbHV0ZTsNCiAgICBsZWZ0OjA7DQogICAgdG9wOjNweDsN CiAgICBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IG5vLXJlcGVhdCAwIDA7DQp9DQoNCi54LXNsaWRl ci1ob3J6IC54LXNsaWRlci10aHVtYi1vdmVyIHsNCiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAt MTRweCAtMTVweDsNCn0NCg0KLngtc2xpZGVyLWhvcnogLngtc2xpZGVyLXRodW1iLWRyYWcgew0K ICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yOHB4IC0zMHB4Ow0KfQ0KDQovKiBWZXJ0aWNhbCBz dHlsZXMgKi8NCi54LXNsaWRlci12ZXJ0IHsNCiAgICBwYWRkaW5nLXRvcDo3cHg7DQogICAgYmFj a2dyb3VuZDp0cmFuc3BhcmVudCBuby1yZXBlYXQgLTQ0cHggMDsNCiAgICB3aWR0aDoyMnB4Ow0K fQ0KDQoueC1zbGlkZXItdmVydCAueC1zbGlkZXItZW5kIHsNCiAgICBwYWRkaW5nLWJvdHRvbTo3 cHg7DQogICAgem9vbToxOw0KICAgIGJhY2tncm91bmQ6dHJhbnNwYXJlbnQgbm8tcmVwZWF0IC0y MnB4IGJvdHRvbTsNCn0NCg0KLngtc2xpZGVyLXZlcnQgLngtc2xpZGVyLWlubmVyIHsNCiAgICBi YWNrZ3JvdW5kOnRyYW5zcGFyZW50IHJlcGVhdC15IDAgMDsNCn0NCg0KLngtc2xpZGVyLXZlcnQg Lngtc2xpZGVyLXRodW1iIHsNCiAgICB3aWR0aDoxNXB4Ow0KICAgIGhlaWdodDoxNHB4Ow0KICAg IHBvc2l0aW9uOmFic29sdXRlOw0KICAgIGxlZnQ6M3B4Ow0KICAgIGJvdHRvbTowOw0KICAgIGJh Y2tncm91bmQ6dHJhbnNwYXJlbnQgbm8tcmVwZWF0IDAgMDsNCn0NCg0KLngtc2xpZGVyLXZlcnQg Lngtc2xpZGVyLXRodW1iLW92ZXIgew0KICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xNXB4IC0x NHB4Ow0KfQ0KDQoueC1zbGlkZXItdmVydCAueC1zbGlkZXItdGh1bWItZHJhZyB7DQogICAgYmFj a2dyb3VuZC1wb3NpdGlvbjogLTMwcHggLTI4cHg7DQp9Lngtd2luZG93LWRsZyAueC13aW5kb3ct Ym9keSB7DQogICAgYm9yZGVyOjAgbm9uZSAhaW1wb3J0YW50Ow0KICAgIHBhZGRpbmc6NXB4IDEw cHg7DQogICAgb3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnQ7DQp9DQoNCi54LXdpbmRvdy1kbGcg Lngtd2luZG93LW1jIHsNCiAgICBib3JkZXI6MCBub25lICFpbXBvcnRhbnQ7DQp9DQoNCi54LXdp bmRvdy1kbGcgLmV4dC1tYi1pbnB1dCB7DQogICAgbWFyZ2luLXRvcDo0cHg7DQogICAgd2lkdGg6 OTUlOw0KfQ0KDQoueC13aW5kb3ctZGxnIC5leHQtbWItdGV4dGFyZWEgew0KICAgIG1hcmdpbi10 b3A6NHB4Ow0KfQ0KDQoueC13aW5kb3ctZGxnIC54LXByb2dyZXNzLXdyYXAgew0KICAgIG1hcmdp bi10b3A6NHB4Ow0KfQ0KDQouZXh0LWllIC54LXdpbmRvdy1kbGcgLngtcHJvZ3Jlc3Mtd3JhcCB7 DQogICAgbWFyZ2luLXRvcDo2cHg7DQp9DQoNCi54LXdpbmRvdy1kbGcgLngtbXNnLWJveC13YWl0 IHsNCiAgICBiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IG5vLXJlcGVhdCBsZWZ0Ow0KICAgIGRpc3Bs YXk6YmxvY2s7DQogICAgd2lkdGg6MzAwcHg7DQogICAgcGFkZGluZy1sZWZ0OjE4cHg7DQogICAg bGluZS1oZWlnaHQ6MThweDsNCn0NCg0KLngtd2luZG93LWRsZyAuZXh0LW1iLWljb24gew0KICAg IGZsb2F0OmxlZnQ7DQogICAgd2lkdGg6NDdweDsNCiAgICBoZWlnaHQ6MzJweDsNCn0NCg0KLmV4 dC1pZSAueC13aW5kb3ctZGxnIC5leHQtbWItaWNvbiB7DQogICAgd2lkdGg6NDRweDsgLyogM3B4 IElFIG1hcmdpbiBpc3N1ZSAqLw0KfQ0KDQoueC13aW5kb3ctZGxnIC54LWRsZy1pY29uIC5leHQt bWItY29udGVudHsNCiAgICB6b29tOiAxOyBtYXJnaW4tbGVmdDogNDdweDsNCn0NCg0KLngtd2lu ZG93LWRsZyAuZXh0LW1iLWluZm8sIC54LXdpbmRvdy1kbGcgLmV4dC1tYi13YXJuaW5nLCAueC13 aW5kb3ctZGxnIC5leHQtbWItcXVlc3Rpb24sIC54LXdpbmRvdy1kbGcgLmV4dC1tYi1lcnJvciB7 DQogICAgYmFja2dyb3VuZDp0cmFuc3BhcmVudCBuby1yZXBlYXQgdG9wIGxlZnQ7DQp9DQoNCi5l eHQtZ2Vja28yIC5leHQtbWItZml4LWN1cnNvciB7DQogICAgb3ZlcmZsb3c6YXV0bzsNCn0uZXh0 LWVsLW1hc2sgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7DQp9DQoNCi5leHQtZWwtbWFz ay1tc2cgew0KICAgIGJvcmRlci1jb2xvcjojNjU5M2NmOw0KICAgIGJhY2tncm91bmQtY29sb3I6 I2MzZGFmOTsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC9ib3gv dGItYmx1ZS5naWYpOw0KfQ0KLmV4dC1lbC1tYXNrLW1zZyBkaXYgew0KICAgIGJhY2tncm91bmQt Y29sb3I6ICNlZWU7DQogICAgYm9yZGVyLWNvbG9yOiNhM2JhZDk7DQogICAgY29sb3I6IzIyMjsN CiAgICBmb250Om5vcm1hbCAxMXB4IHRhaG9tYSwgYXJpYWwsIGhlbHZldGljYSwgc2Fucy1zZXJp ZjsNCn0NCg0KLngtbWFzay1sb2FkaW5nIGRpdiB7DQogICAgYmFja2dyb3VuZC1jb2xvcjojZmJm YmZiOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2dyaWQvbG9h ZGluZy5naWYpOw0KfQ0KDQoueC1pdGVtLWRpc2FibGVkIHsNCiAgICBjb2xvcjogZ3JheTsNCn0N Cg0KLngtaXRlbS1kaXNhYmxlZCAqIHsNCiAgICBjb2xvcjogZ3JheSAhaW1wb3J0YW50Ow0KfQ0K DQoueC1zcGxpdGJhci1wcm94eSB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2FhYTsNCn0NCg0K LngtY29sb3ItcGFsZXR0ZSBhIHsNCiAgICBib3JkZXItY29sb3I6I2ZmZjsNCn0NCg0KLngtY29s b3ItcGFsZXR0ZSBhOmhvdmVyLCAueC1jb2xvci1wYWxldHRlIGEueC1jb2xvci1wYWxldHRlLXNl bCB7DQogICAgYm9yZGVyLWNvbG9yOiM4YmI4ZjM7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2Rl ZWNmZDsNCn0NCg0KLngtY29sb3ItcGFsZXR0ZSBlbSB7DQogICAgYm9yZGVyLWNvbG9yOiNhY2E4 OTk7DQp9DQoNCi54LWllLXNoYWRvdyB7DQogICAgYmFja2dyb3VuZC1jb2xvcjojNzc3Ow0KfQ0K DQoueC1zaGFkb3cgLnhzbWMgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMv ZGVmYXVsdC9zaGFkb3ctYy5wbmcpOw0KfQ0KDQoueC1zaGFkb3cgLnhzbWwsIC54LXNoYWRvdyAu eHNtciB7DQogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0L3NoYWRv dy1sci5wbmcpOw0KfQ0KDQoueC1zaGFkb3cgLnhzdGwsIC54LXNoYWRvdyAueHN0YywgIC54LXNo YWRvdyAueHN0ciwgLngtc2hhZG93IC54c2JsLCAueC1zaGFkb3cgLnhzYmMsIC54LXNoYWRvdyAu eHNicnsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvc2hhZG93 LnBuZyk7DQp9DQoNCi5sb2FkaW5nLWluZGljYXRvciB7DQogICAgZm9udC1zaXplOiAxMXB4Ow0K ICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC9ncmlkL2xvYWRpbmcu Z2lmKTsNCn0NCg0KLngtc3BvdGxpZ2h0IHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjOw0K fQ0KLngtdGFiLXBhbmVsLWhlYWRlciwgLngtdGFiLXBhbmVsLWZvb3RlciB7CgliYWNrZ3JvdW5k LWNvbG9yOiAjZGVlY2ZkOwoJYm9yZGVyLWNvbG9yOiM4ZGIyZTM7CiAgICBvdmVyZmxvdzpoaWRk ZW47CiAgICB6b29tOjE7Cn0KCi54LXRhYi1wYW5lbC1oZWFkZXIsIC54LXRhYi1wYW5lbC1mb290 ZXIgewoJYm9yZGVyLWNvbG9yOiM4ZGIyZTM7Cn0KCnVsLngtdGFiLXN0cmlwLXRvcHsKICAgIGJh Y2tncm91bmQtY29sb3I6I2NlZGZmNTsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMv ZGVmYXVsdC90YWJzL3RhYi1zdHJpcC1iZy5naWYpOwoJYm9yZGVyLWJvdHRvbS1jb2xvcjojOGRi MmUzOwp9Cgp1bC54LXRhYi1zdHJpcC1ib3R0b217CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNjZWRm ZjU7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvdGFicy90YWItc3Ry aXAtYnRtLWJnLmdpZik7Cglib3JkZXItdG9wLWNvbG9yOiM4ZGIyZTM7Cn0KCi54LXRhYi1wYW5l bC1oZWFkZXItcGxhaW4gLngtdGFiLXN0cmlwLXNwYWNlciwKLngtdGFiLXBhbmVsLWZvb3Rlci1w bGFpbiAueC10YWItc3RyaXAtc3BhY2VyIHsKICAgIGJvcmRlci1jb2xvcjojOGRiMmUzOwogICAg YmFja2dyb3VuZC1jb2xvcjogI2RlZWNmZDsKfQoKLngtdGFiLXN0cmlwIHNwYW4ueC10YWItc3Ry aXAtdGV4dCB7Cglmb250Om5vcm1hbCAxMXB4IHRhaG9tYSxhcmlhbCxoZWx2ZXRpY2E7Cgljb2xv cjojNDE2YWEzOwp9CgoueC10YWItc3RyaXAtb3ZlciBzcGFuLngtdGFiLXN0cmlwLXRleHQgewoJ Y29sb3I6IzE1NDI4YjsKfQoKLngtdGFiLXN0cmlwLWFjdGl2ZSBzcGFuLngtdGFiLXN0cmlwLXRl eHQgewoJY29sb3I6IzE1NDI4YjsKICAgIGZvbnQtd2VpZ2h0OmJvbGQ7Cn0KCi54LXRhYi1zdHJp cC1kaXNhYmxlZCAueC10YWJzLXRleHQgewoJY29sb3I6I2FhYWFhYTsKfQoKLngtdGFiLXN0cmlw LXRvcCAueC10YWItcmlnaHQsIC54LXRhYi1zdHJpcC10b3AgLngtdGFiLWxlZnQsIC54LXRhYi1z dHJpcC10b3AgLngtdGFiLXN0cmlwLWlubmVyewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2lt YWdlcy9kZWZhdWx0L3RhYnMvdGFicy1zcHJpdGUuZ2lmKTsKfQoKLngtdGFiLXN0cmlwLWJvdHRv bSAueC10YWItcmlnaHQgewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0 L3RhYnMvdGFiLWJ0bS1pbmFjdGl2ZS1yaWdodC1iZy5naWYpOwp9CgoueC10YWItc3RyaXAtYm90 dG9tIC54LXRhYi1sZWZ0IHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVs dC90YWJzL3RhYi1idG0taW5hY3RpdmUtbGVmdC1iZy5naWYpOwp9CgoueC10YWItc3RyaXAtYm90 dG9tIC54LXRhYi1zdHJpcC1hY3RpdmUgLngtdGFiLXJpZ2h0IHsKCWJhY2tncm91bmQtaW1hZ2U6 IHVybCguLi9pbWFnZXMvZGVmYXVsdC90YWJzL3RhYi1idG0tcmlnaHQtYmcuZ2lmKTsKfQoKLngt dGFiLXN0cmlwLWJvdHRvbSAueC10YWItc3RyaXAtYWN0aXZlIC54LXRhYi1sZWZ0IHsKCWJhY2tn cm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC90YWJzL3RhYi1idG0tbGVmdC1iZy5n aWYpOwp9CgoueC10YWItc3RyaXAgLngtdGFiLXN0cmlwLWNsb3NhYmxlIGEueC10YWItc3RyaXAt Y2xvc2UgewoJYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvdGFicy90YWIt Y2xvc2UuZ2lmKTsKfQoKLngtdGFiLXN0cmlwIC54LXRhYi1zdHJpcC1jbG9zYWJsZSBhLngtdGFi LXN0cmlwLWNsb3NlOmhvdmVyewoJYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1 bHQvdGFicy90YWItY2xvc2UuZ2lmKTsKfQoKLngtdGFiLXBhbmVsLWJvZHkgewogICAgYm9yZGVy LWNvbG9yOiM4ZGIyZTM7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Cn0KCi54LXRhYi1wYW5l bC1ib2R5LXRvcCB7CiAgICBib3JkZXItdG9wOiAwIG5vbmU7Cn0KCi54LXRhYi1wYW5lbC1ib2R5 LWJvdHRvbSB7CiAgICBib3JkZXItYm90dG9tOiAwIG5vbmU7Cn0KCi54LXRhYi1zY3JvbGxlci1s ZWZ0IHsKICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L3RhYnMvc2Ny b2xsLWxlZnQuZ2lmKTsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IzhkYjJlMzsKfQoKLngtdGFi LXNjcm9sbGVyLWxlZnQtb3ZlciB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7Cn0KCi54 LXRhYi1zY3JvbGxlci1sZWZ0LWRpc2FibGVkIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0x OHB4IDA7CiAgICBvcGFjaXR5Oi41OwogICAgLW1vei1vcGFjaXR5Oi41OwogICAgZmlsdGVyOmFs cGhhKG9wYWNpdHk9NTApOwogICAgY3Vyc29yOmRlZmF1bHQ7Cn0KCi54LXRhYi1zY3JvbGxlci1y aWdodCB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC90YWJzL3Nj cm9sbC1yaWdodC5naWYpOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjojOGRiMmUzOwp9CgoueC10 YWItcGFuZWwtYmJhciAueC10b29sYmFyLCAueC10YWItcGFuZWwtdGJhciAueC10b29sYmFyIHsK ICAgIGJvcmRlci1jb2xvcjojOTliYmU4Owp9LngtZm9ybS1maWVsZHsKICAgIGZvbnQ6bm9ybWFs IDEycHggdGFob21hLCBhcmlhbCwgaGVsdmV0aWNhLCBzYW5zLXNlcmlmOwp9CgoueC1mb3JtLXRl eHQsIHRleHRhcmVhLngtZm9ybS1maWVsZHsKICAgIGJhY2tncm91bmQtY29sb3I6I2ZmZjsKICAg IGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2Zvcm0vdGV4dC1iZy5naWYp OwogICAgYm9yZGVyLWNvbG9yOiNiNWI4Yzg7Cn0KCi54LWZvcm0tc2VsZWN0LW9uZSB7CiAgICBi YWNrZ3JvdW5kLWNvbG9yOiNmZmY7CiAgICBib3JkZXItY29sb3I6I2I1YjhjODsKfQoKLngtZm9y bS1jaGVjay1ncm91cC1sYWJlbCB7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzk5YmJl ODsKICAgIGNvbG9yOiAjMTU0MjhiOwp9CgoueC1lZGl0b3IgLngtZm9ybS1jaGVjay13cmFwIHsK ICAgIGJhY2tncm91bmQtY29sb3I6I2ZmZjsKfQoKLngtZm9ybS1maWVsZC13cmFwIC54LWZvcm0t dHJpZ2dlcnsKICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2Zvcm0v dHJpZ2dlci5naWYpOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjojYjViOGM4Owp9CgoueC1mb3Jt LWZpZWxkLXdyYXAgLngtZm9ybS1kYXRlLXRyaWdnZXJ7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1 cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZm9ybS9kYXRlLXRyaWdnZXIuZ2lmKTsKfQoKLngtZm9ybS1m aWVsZC13cmFwIC54LWZvcm0tY2xlYXItdHJpZ2dlcnsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVy bCguLi9pbWFnZXMvZGVmYXVsdC9mb3JtL2NsZWFyLXRyaWdnZXIuZ2lmKTsKfQoKLngtZm9ybS1m aWVsZC13cmFwIC54LWZvcm0tc2VhcmNoLXRyaWdnZXJ7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1 cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZm9ybS9zZWFyY2gtdHJpZ2dlci5naWYpOwp9CgoueC10cmln Z2VyLXdyYXAtZm9jdXMgLngtZm9ybS10cmlnZ2VyewogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjoj N2VhZGQ5Owp9CgoueC1pdGVtLWRpc2FibGVkIC54LWZvcm0tdHJpZ2dlci1vdmVyewogICAgYm9y ZGVyLWJvdHRvbS1jb2xvcjojYjViOGM4Owp9CgoueC1pdGVtLWRpc2FibGVkIC54LWZvcm0tdHJp Z2dlci1jbGlja3sKICAgIGJvcmRlci1ib3R0b20tY29sb3I6I2I1YjhjODsKfQoKLngtZm9ybS1m b2N1cywgdGV4dGFyZWEueC1mb3JtLWZvY3VzewoJYm9yZGVyLWNvbG9yOiM3ZWFkZDk7Cn0KCi54 LWZvcm0taW52YWxpZCwgdGV4dGFyZWEueC1mb3JtLWludmFsaWR7CiAgICBiYWNrZ3JvdW5kLWNv bG9yOiNmZmY7CgliYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC9ncmlkL2lu dmFsaWRfbGluZS5naWYpOwoJYm9yZGVyLWNvbG9yOiNjMzA7Cn0KCi5leHQtc2FmYXJpIC54LWZv cm0taW52YWxpZHsKCWJhY2tncm91bmQtY29sb3I6I2ZlZTsKCWJvcmRlci1jb2xvcjojZmY3ODcw Owp9CgoueC1mb3JtLWlubmVyLWludmFsaWQsIHRleHRhcmVhLngtZm9ybS1pbm5lci1pbnZhbGlk ewogICAgYmFja2dyb3VuZC1jb2xvcjojZmZmOwoJYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1h Z2VzL2RlZmF1bHQvZ3JpZC9pbnZhbGlkX2xpbmUuZ2lmKTsKfQoKLngtZm9ybS1ncm93LXNpemVy IHsKCWZvbnQ6bm9ybWFsIDEycHggdGFob21hLCBhcmlhbCwgaGVsdmV0aWNhLCBzYW5zLXNlcmlm Owp9CgoueC1mb3JtLWl0ZW0gewogICAgZm9udDpub3JtYWwgMTJweCB0YWhvbWEsIGFyaWFsLCBo ZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Cn0KCi54LWZvcm0taW52YWxpZC1tc2cgewogICAgY29sb3I6 I2MwMjcyYjsKICAgIGZvbnQ6bm9ybWFsIDExcHggdGFob21hLCBhcmlhbCwgaGVsdmV0aWNhLCBz YW5zLXNlcmlmOwogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvc2hh cmVkL3dhcm5pbmcuZ2lmKTsKfQoKLngtZm9ybS1lbXB0eS1maWVsZCB7CiAgICBjb2xvcjpncmF5 Owp9CgoueC1zbWFsbC1lZGl0b3IgLngtZm9ybS1maWVsZCB7CiAgICBmb250Om5vcm1hbCAxMXB4 IGFyaWFsLCB0YWhvbWEsIGhlbHZldGljYSwgc2Fucy1zZXJpZjsKfQoKLmV4dC1zYWZhcmkgLngt c21hbGwtZWRpdG9yIC54LWZvcm0tZmllbGQgewogICAgZm9udDpub3JtYWwgMTJweCBhcmlhbCwg dGFob21hLCBoZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Cn0KCi54LWZvcm0taW52YWxpZC1pY29uIHsK ICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2Zvcm0vZXhjbGFtYXRp b24uZ2lmKTsKfQoKLngtZmllbGRzZXQgewogICAgYm9yZGVyLWNvbG9yOiNiNWI4Yzg7Cn0KCi54 LWZpZWxkc2V0IGxlZ2VuZCB7CiAgICBmb250OmJvbGQgMTFweCB0YWhvbWEsIGFyaWFsLCBoZWx2 ZXRpY2EsIHNhbnMtc2VyaWY7CiAgICBjb2xvcjojMTU0MjhiOwp9Ci54LWJ0bnsNCglmb250Om5v cm1hbCAxMXB4IHRhaG9tYSwgdmVyZGFuYSwgaGVsdmV0aWNhOw0KfQ0KDQoueC1idG4gYnV0dG9u ew0KICAgIGZvbnQ6bm9ybWFsIDExcHggYXJpYWwsdGFob21hLHZlcmRhbmEsaGVsdmV0aWNhOw0K ICAgIGNvbG9yOiMzMzM7DQp9DQoNCi54LWJ0biBlbSB7DQogICAgZm9udC1zdHlsZTpub3JtYWw7 DQogICAgZm9udC13ZWlnaHQ6bm9ybWFsOw0KfQ0KDQoueC1idG4tdGwsIC54LWJ0bi10ciwgLngt YnRuLXRjLCAueC1idG4tbWwsIC54LWJ0bi1tciwgLngtYnRuLW1jLCAueC1idG4tYmwsIC54LWJ0 bi1iciwgLngtYnRuLWJjew0KCWJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0 L2J1dHRvbi9idG4uZ2lmKTsNCn0NCg0KLngtYnRuLWNsaWNrIC54LWJ0bi10ZXh0LCAueC1idG4t bWVudS1hY3RpdmUgLngtYnRuLXRleHQsIC54LWJ0bi1wcmVzc2VkIC54LWJ0bi10ZXh0ew0KICAg IGNvbG9yOiMwMDA7DQp9DQoNCi54LWJ0bi1kaXNhYmxlZCAqew0KCWNvbG9yOmdyYXkgIWltcG9y dGFudDsNCn0NCg0KLngtYnRuLW1jIGVtLngtYnRuLWFycm93IHsNCiAgICBiYWNrZ3JvdW5kLWlt YWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC9idXR0b24vYXJyb3cuZ2lmKTsNCn0NCg0KLngtYnRu LW1jIGVtLngtYnRuLXNwbGl0IHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMv ZGVmYXVsdC9idXR0b24vcy1hcnJvdy5naWYpOw0KfQ0KDQoueC1idG4tb3ZlciAueC1idG4tbWMg ZW0ueC1idG4tc3BsaXQsIC54LWJ0bi1jbGljayAueC1idG4tbWMgZW0ueC1idG4tc3BsaXQsIC54 LWJ0bi1tZW51LWFjdGl2ZSAueC1idG4tbWMgZW0ueC1idG4tc3BsaXQsIC54LWJ0bi1wcmVzc2Vk IC54LWJ0bi1tYyBlbS54LWJ0bi1zcGxpdCB7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4v aW1hZ2VzL2RlZmF1bHQvYnV0dG9uL3MtYXJyb3ctby5naWYpOw0KfQ0KDQoueC1idG4tbWMgZW0u eC1idG4tYXJyb3ctYm90dG9tIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMv ZGVmYXVsdC9idXR0b24vcy1hcnJvdy1iLW5vbGluZS5naWYpOw0KfQ0KDQoueC1idG4tbWMgZW0u eC1idG4tc3BsaXQtYm90dG9tIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMv ZGVmYXVsdC9idXR0b24vcy1hcnJvdy1iLmdpZik7DQp9DQoNCi54LWJ0bi1vdmVyIC54LWJ0bi1t YyBlbS54LWJ0bi1zcGxpdC1ib3R0b20sIC54LWJ0bi1jbGljayAueC1idG4tbWMgZW0ueC1idG4t c3BsaXQtYm90dG9tLCAueC1idG4tbWVudS1hY3RpdmUgLngtYnRuLW1jIGVtLngtYnRuLXNwbGl0 LWJvdHRvbSwgLngtYnRuLXByZXNzZWQgLngtYnRuLW1jIGVtLngtYnRuLXNwbGl0LWJvdHRvbSB7 DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvYnV0dG9uL3MtYXJy b3ctYm8uZ2lmKTsNCn0NCg0KLngtYnRuLWdyb3VwLWhlYWRlciB7DQogICAgY29sb3I6ICMzZTZh YWE7DQp9DQoNCi54LWJ0bi1ncm91cC10YyB7DQoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2lt YWdlcy9kZWZhdWx0L2J1dHRvbi9ncm91cC10Yi5naWYpOw0KfQ0KDQoueC1idG4tZ3JvdXAtdGwg ew0KCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC9idXR0b24vZ3JvdXAt Y3MuZ2lmKTsNCn0NCg0KLngtYnRuLWdyb3VwLXRyIHsNCgliYWNrZ3JvdW5kLWltYWdlOiB1cmwo Li4vaW1hZ2VzL2RlZmF1bHQvYnV0dG9uL2dyb3VwLWNzLmdpZik7DQp9DQoNCi54LWJ0bi1ncm91 cC1iYyB7DQoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0L2J1dHRvbi9n cm91cC10Yi5naWYpOw0KfQ0KDQoueC1idG4tZ3JvdXAtYmwgew0KCWJhY2tncm91bmQtaW1hZ2U6 IHVybCguLi9pbWFnZXMvZGVmYXVsdC9idXR0b24vZ3JvdXAtY3MuZ2lmKTsNCn0NCg0KLngtYnRu LWdyb3VwLWJyIHsNCgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvYnV0 dG9uL2dyb3VwLWNzLmdpZik7DQp9DQoNCi54LWJ0bi1ncm91cC1tbCB7DQoJYmFja2dyb3VuZC1p bWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0L2J1dHRvbi9ncm91cC1sci5naWYpOw0KfQ0KLngt YnRuLWdyb3VwLW1yIHsNCgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQv YnV0dG9uL2dyb3VwLWxyLmdpZik7DQp9DQoNCi54LWJ0bi1ncm91cC1ub3RpdGxlIC54LWJ0bi1n cm91cC10YyB7DQoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0L2J1dHRv bi9ncm91cC10Yi5naWYpOw0KfS54LXRvb2xiYXJ7DQoJYm9yZGVyLWNvbG9yOiNhOWJmZDM7DQog ICAgYmFja2dyb3VuZC1jb2xvcjojZDBkZWYwOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4u L2ltYWdlcy9kZWZhdWx0L3Rvb2xiYXIvYmcuZ2lmKTsNCn0NCg0KLngtdG9vbGJhciB0ZCwueC10 b29sYmFyIHNwYW4sLngtdG9vbGJhciBpbnB1dCwueC10b29sYmFyIGRpdiwueC10b29sYmFyIHNl bGVjdCwueC10b29sYmFyIGxhYmVsew0KICAgIGZvbnQ6bm9ybWFsIDExcHggYXJpYWwsdGFob21h LCBoZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQp9DQoNCi54LXRvb2xiYXIgLngtaXRlbS1kaXNhYmxl ZCB7DQoJY29sb3I6Z3JheTsNCn0NCg0KLngtdG9vbGJhciAueC1pdGVtLWRpc2FibGVkICogew0K CWNvbG9yOmdyYXk7DQp9DQoNCi54LXRvb2xiYXIgLngtYnRuLW1jIGVtLngtYnRuLXNwbGl0IHsN CiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC9idXR0b24vcy1hcnJv dy1ub2xpbmUuZ2lmKTsNCn0NCg0KLngtdG9vbGJhciAueC1idG4tb3ZlciAueC1idG4tbWMgZW0u eC1idG4tc3BsaXQsIC54LXRvb2xiYXIgLngtYnRuLWNsaWNrIC54LWJ0bi1tYyBlbS54LWJ0bi1z cGxpdCwgDQoueC10b29sYmFyIC54LWJ0bi1tZW51LWFjdGl2ZSAueC1idG4tbWMgZW0ueC1idG4t c3BsaXQsIC54LXRvb2xiYXIgLngtYnRuLXByZXNzZWQgLngtYnRuLW1jIGVtLngtYnRuLXNwbGl0 IA0Kew0KICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2J1dHRvbi9z LWFycm93LW8uZ2lmKTsNCn0NCg0KLngtdG9vbGJhciAueC1idG4tbWMgZW0ueC1idG4tc3BsaXQt Ym90dG9tIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC9idXR0 b24vcy1hcnJvdy1iLW5vbGluZS5naWYpOw0KfQ0KDQoueC10b29sYmFyIC54LWJ0bi1vdmVyIC54 LWJ0bi1tYyBlbS54LWJ0bi1zcGxpdC1ib3R0b20sIC54LXRvb2xiYXIgLngtYnRuLWNsaWNrIC54 LWJ0bi1tYyBlbS54LWJ0bi1zcGxpdC1ib3R0b20sIA0KLngtdG9vbGJhciAueC1idG4tbWVudS1h Y3RpdmUgLngtYnRuLW1jIGVtLngtYnRuLXNwbGl0LWJvdHRvbSwgLngtdG9vbGJhciAueC1idG4t cHJlc3NlZCAueC1idG4tbWMgZW0ueC1idG4tc3BsaXQtYm90dG9tIA0Kew0KICAgIGJhY2tncm91 bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2J1dHRvbi9zLWFycm93LWJvLmdpZik7DQp9 DQoNCi54LXRvb2xiYXIgLnh0Yi1zZXAgew0KCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFn ZXMvZGVmYXVsdC9ncmlkL2dyaWQtYmx1ZS1zcGxpdC5naWYpOw0KfQ0KDQoueC10YmFyLXBhZ2Ut Zmlyc3R7DQoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0L2dyaWQvcGFn ZS1maXJzdC5naWYpICFpbXBvcnRhbnQ7DQp9DQoNCi54LXRiYXItbG9hZGluZ3sNCgliYWNrZ3Jv dW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZ3JpZC9yZWZyZXNoLmdpZikgIWltcG9y dGFudDsNCn0NCg0KLngtdGJhci1wYWdlLWxhc3R7DQoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4u L2ltYWdlcy9kZWZhdWx0L2dyaWQvcGFnZS1sYXN0LmdpZikgIWltcG9ydGFudDsNCn0NCg0KLngt dGJhci1wYWdlLW5leHR7DQoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0 L2dyaWQvcGFnZS1uZXh0LmdpZikgIWltcG9ydGFudDsNCn0NCg0KLngtdGJhci1wYWdlLXByZXZ7 DQoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0L2dyaWQvcGFnZS1wcmV2 LmdpZikgIWltcG9ydGFudDsNCn0NCg0KLngtaXRlbS1kaXNhYmxlZCAueC10YmFyLWxvYWRpbmd7 DQoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0L2dyaWQvbG9hZGluZy5n aWYpICFpbXBvcnRhbnQ7DQp9DQoNCi54LWl0ZW0tZGlzYWJsZWQgLngtdGJhci1wYWdlLWZpcnN0 ew0KCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC9ncmlkL3BhZ2UtZmly c3QtZGlzYWJsZWQuZ2lmKSAhaW1wb3J0YW50Ow0KfQ0KDQoueC1pdGVtLWRpc2FibGVkIC54LXRi YXItcGFnZS1sYXN0ew0KCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC9n cmlkL3BhZ2UtbGFzdC1kaXNhYmxlZC5naWYpICFpbXBvcnRhbnQ7DQp9DQoNCi54LWl0ZW0tZGlz YWJsZWQgLngtdGJhci1wYWdlLW5leHR7DQoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdl cy9kZWZhdWx0L2dyaWQvcGFnZS1uZXh0LWRpc2FibGVkLmdpZikgIWltcG9ydGFudDsNCn0NCg0K LngtaXRlbS1kaXNhYmxlZCAueC10YmFyLXBhZ2UtcHJldnsNCgliYWNrZ3JvdW5kLWltYWdlOiB1 cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZ3JpZC9wYWdlLXByZXYtZGlzYWJsZWQuZ2lmKSAhaW1wb3J0 YW50Ow0KfQ0KDQoueC1wYWdpbmctaW5mbyB7DQogICAgY29sb3I6IzQ0NDsNCn0NCg0KLngtdG9v bGJhci1tb3JlLWljb24gew0KICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVm YXVsdC90b29sYmFyL21vcmUuZ2lmKSAhaW1wb3J0YW50Ow0KfQ0KDQoueC1zdGF0dXNiYXIgLngt c3RhdHVzLWJ1c3kgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVs dC9ncmlkL2xvYWRpbmcuZ2lmKTsNCn0NCg0KLngtc3RhdHVzYmFyIC54LXN0YXR1cy10ZXh0LXBh bmVsIHsNCiAgICBib3JkZXItY29sb3I6ICM5OWJiZTggI2ZmZiAjZmZmICM5OWJiZTg7DQp9Lngt cmVzaXphYmxlLWhhbmRsZSB7DQoJYmFja2dyb3VuZC1jb2xvcjojZmZmOw0KfQ0KDQoueC1yZXNp emFibGUtb3ZlciAueC1yZXNpemFibGUtaGFuZGxlLWVhc3QsIC54LXJlc2l6YWJsZS1waW5uZWQg LngtcmVzaXphYmxlLWhhbmRsZS1lYXN0LA0KLngtcmVzaXphYmxlLW92ZXIgLngtcmVzaXphYmxl LWhhbmRsZS13ZXN0LCAueC1yZXNpemFibGUtcGlubmVkIC54LXJlc2l6YWJsZS1oYW5kbGUtd2Vz dA0Kew0KICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L3NpemVyL2Ut aGFuZGxlLmdpZik7DQp9DQoNCi54LXJlc2l6YWJsZS1vdmVyIC54LXJlc2l6YWJsZS1oYW5kbGUt c291dGgsIC54LXJlc2l6YWJsZS1waW5uZWQgLngtcmVzaXphYmxlLWhhbmRsZS1zb3V0aCwNCi54 LXJlc2l6YWJsZS1vdmVyIC54LXJlc2l6YWJsZS1oYW5kbGUtbm9ydGgsIC54LXJlc2l6YWJsZS1w aW5uZWQgLngtcmVzaXphYmxlLWhhbmRsZS1ub3J0aA0Kew0KICAgIGJhY2tncm91bmQtaW1hZ2U6 dXJsKC4uL2ltYWdlcy9kZWZhdWx0L3NpemVyL3MtaGFuZGxlLmdpZik7DQp9DQoNCi54LXJlc2l6 YWJsZS1vdmVyIC54LXJlc2l6YWJsZS1oYW5kbGUtbm9ydGgsIC54LXJlc2l6YWJsZS1waW5uZWQg LngtcmVzaXphYmxlLWhhbmRsZS1ub3J0aHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9p bWFnZXMvZGVmYXVsdC9zaXplci9zLWhhbmRsZS5naWYpOw0KfQ0KLngtcmVzaXphYmxlLW92ZXIg LngtcmVzaXphYmxlLWhhbmRsZS1zb3V0aGVhc3QsIC54LXJlc2l6YWJsZS1waW5uZWQgLngtcmVz aXphYmxlLWhhbmRsZS1zb3V0aGVhc3R7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1h Z2VzL2RlZmF1bHQvc2l6ZXIvc2UtaGFuZGxlLmdpZik7DQp9DQoueC1yZXNpemFibGUtb3ZlciAu eC1yZXNpemFibGUtaGFuZGxlLW5vcnRod2VzdCwgLngtcmVzaXphYmxlLXBpbm5lZCAueC1yZXNp emFibGUtaGFuZGxlLW5vcnRod2VzdHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFn ZXMvZGVmYXVsdC9zaXplci9udy1oYW5kbGUuZ2lmKTsNCn0NCi54LXJlc2l6YWJsZS1vdmVyIC54 LXJlc2l6YWJsZS1oYW5kbGUtbm9ydGhlYXN0LCAueC1yZXNpemFibGUtcGlubmVkIC54LXJlc2l6 YWJsZS1oYW5kbGUtbm9ydGhlYXN0ew0KICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdl cy9kZWZhdWx0L3NpemVyL25lLWhhbmRsZS5naWYpOw0KfQ0KLngtcmVzaXphYmxlLW92ZXIgLngt cmVzaXphYmxlLWhhbmRsZS1zb3V0aHdlc3QsIC54LXJlc2l6YWJsZS1waW5uZWQgLngtcmVzaXph YmxlLWhhbmRsZS1zb3V0aHdlc3R7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2Vz L2RlZmF1bHQvc2l6ZXIvc3ctaGFuZGxlLmdpZik7DQp9DQoueC1yZXNpemFibGUtcHJveHl7DQog ICAgYm9yZGVyLWNvbG9yOiMzYjVhODI7DQp9DQoueC1yZXNpemFibGUtb3ZlcmxheXsNCiAgICBi YWNrZ3JvdW5kLWNvbG9yOiNmZmY7DQp9DQoueC1ncmlkMyB7DQogICAgYmFja2dyb3VuZC1jb2xv cjojZmZmOw0KfQ0KDQoueC1ncmlkLXBhbmVsIC54LXBhbmVsLW1jIC54LXBhbmVsLWJvZHkgew0K ICAgIGJvcmRlci1jb2xvcjojOTliYmU4Ow0KfQ0KDQoueC1ncmlkMy1oZC1yb3cgdGQsIC54LWdy aWQzLXJvdyB0ZCwgLngtZ3JpZDMtc3VtbWFyeS1yb3cgdGR7DQoJZm9udDpub3JtYWwgMTFweCBh cmlhbCwgdGFob21hLCBoZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQp9DQoNCi54LWdyaWQzLWhkLXJv dyB0ZCB7DQogICAgYm9yZGVyLWxlZnQtY29sb3I6I2VlZTsNCiAgICBib3JkZXItcmlnaHQtY29s b3I6I2QwZDBkMDsNCn0NCg0KLngtZ3JpZC1yb3ctbG9hZGluZyB7DQogICAgYmFja2dyb3VuZC1j b2xvcjogI2ZmZjsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC9z aGFyZWQvbG9hZGluZy1iYWxscy5naWYpOw0KfQ0KDQoueC1ncmlkMy1yb3cgew0KICAgIGJvcmRl ci1jb2xvcjojZWRlZGVkOw0KICAgIGJvcmRlci10b3AtY29sb3I6I2ZmZjsNCn0NCg0KLngtZ3Jp ZDMtcm93LWFsdHsNCgliYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7DQp9DQoNCi54LWdyaWQzLXJv dy1vdmVyIHsNCglib3JkZXItY29sb3I6I2RkZDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNlZmVm ZWY7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZ3JpZC9yb3ct b3Zlci5naWYpOw0KfQ0KDQoueC1ncmlkMy1yZXNpemUtcHJveHkgew0KICAgIGJhY2tncm91bmQt Y29sb3I6Izc3NzsNCn0NCg0KLngtZ3JpZDMtcmVzaXplLW1hcmtlciB7DQogICAgYmFja2dyb3Vu ZC1jb2xvcjojNzc3Ow0KfQ0KDQoueC1ncmlkMy1oZWFkZXJ7DQogICAgYmFja2dyb3VuZC1jb2xv cjojZjlmOWY5Ow0KCWJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2dyaWQv Z3JpZDMtaHJvdy5naWYpOw0KfQ0KDQoueC1ncmlkMy1oZWFkZXItcG9wIHsNCiAgICBib3JkZXIt bGVmdC1jb2xvcjojZDBkMGQwOw0KfQ0KDQoueC1ncmlkMy1oZWFkZXItcG9wLWlubmVyIHsNCiAg ICBib3JkZXItbGVmdC1jb2xvcjojZWVlOw0KICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2lt YWdlcy9kZWZhdWx0L2dyaWQvaGQtcG9wLmdpZik7DQp9DQoNCnRkLngtZ3JpZDMtaGQtb3Zlciwg dGQuc29ydC1kZXNjLCB0ZC5zb3J0LWFzYywgdGQueC1ncmlkMy1oZC1tZW51LW9wZW4gew0KICAg IGJvcmRlci1sZWZ0LWNvbG9yOiNhYWNjZjY7DQogICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiNhYWNj ZjY7DQp9DQoNCnRkLngtZ3JpZDMtaGQtb3ZlciAueC1ncmlkMy1oZC1pbm5lciwgdGQuc29ydC1k ZXNjIC54LWdyaWQzLWhkLWlubmVyLCB0ZC5zb3J0LWFzYyAueC1ncmlkMy1oZC1pbm5lciwgdGQu eC1ncmlkMy1oZC1tZW51LW9wZW4gLngtZ3JpZDMtaGQtaW5uZXIgew0KICAgIGJhY2tncm91bmQt Y29sb3I6I2ViZjNmZDsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVs dC9ncmlkL2dyaWQzLWhyb3ctb3Zlci5naWYpOw0KDQp9DQoNCi5zb3J0LWFzYyAueC1ncmlkMy1z b3J0LWljb24gew0KCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC9ncmlk L3NvcnRfYXNjLmdpZik7DQp9DQoNCi5zb3J0LWRlc2MgLngtZ3JpZDMtc29ydC1pY29uIHsNCgli YWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZ3JpZC9zb3J0X2Rlc2MuZ2lm KTsNCn0NCg0KLngtZ3JpZDMtY2VsbC10ZXh0LCAueC1ncmlkMy1oZC10ZXh0IHsNCgljb2xvcjoj MDAwOw0KfQ0KDQoueC1ncmlkMy1zcGxpdCB7DQoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2lt YWdlcy9kZWZhdWx0L2dyaWQvZ3JpZC1zcGxpdC5naWYpOw0KfQ0KDQoueC1ncmlkMy1oZC10ZXh0 IHsNCgljb2xvcjojMTU0MjhiOw0KfQ0KDQoueC1kZC1kcmFnLXByb3h5IC54LWdyaWQzLWhkLWlu bmVyew0KICAgIGJhY2tncm91bmQtY29sb3I6I2ViZjNmZDsNCgliYWNrZ3JvdW5kLWltYWdlOnVy bCguLi9pbWFnZXMvZGVmYXVsdC9ncmlkL2dyaWQzLWhyb3ctb3Zlci5naWYpOw0KCWJvcmRlci1j b2xvcjojYWFjY2Y2Ow0KfQ0KDQouY29sLW1vdmUtdG9wew0KCWJhY2tncm91bmQtaW1hZ2U6dXJs KC4uL2ltYWdlcy9kZWZhdWx0L2dyaWQvY29sLW1vdmUtdG9wLmdpZik7DQp9DQoNCi5jb2wtbW92 ZS1ib3R0b217DQoJYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZ3JpZC9j b2wtbW92ZS1ib3R0b20uZ2lmKTsNCn0NCg0KLngtZ3JpZDMtcm93LXNlbGVjdGVkIHsNCgliYWNr Z3JvdW5kLWNvbG9yOiAjZGZlOGY2ICFpbXBvcnRhbnQ7DQoJYmFja2dyb3VuZC1pbWFnZTogbm9u ZTsNCglib3JkZXItY29sb3I6I2EzYmFlOTsNCn0NCg0KLngtZ3JpZDMtY2VsbC1zZWxlY3RlZHsN CgliYWNrZ3JvdW5kLWNvbG9yOiAjYjhjZmVlICFpbXBvcnRhbnQ7DQoJY29sb3I6IzAwMDsNCn0N Cg0KLngtZ3JpZDMtY2VsbC1zZWxlY3RlZCBzcGFuew0KCWNvbG9yOiMwMDAgIWltcG9ydGFudDsN Cn0NCg0KLngtZ3JpZDMtY2VsbC1zZWxlY3RlZCAueC1ncmlkMy1jZWxsLXRleHR7DQoJY29sb3I6 IzAwMDsNCn0NCg0KLngtZ3JpZDMtbG9ja2VkIHRkLngtZ3JpZDMtcm93LW1hcmtlciwgLngtZ3Jp ZDMtbG9ja2VkIC54LWdyaWQzLXJvdy1zZWxlY3RlZCB0ZC54LWdyaWQzLXJvdy1tYXJrZXJ7DQog ICAgYmFja2dyb3VuZC1jb2xvcjojZWJlYWRiICFpbXBvcnRhbnQ7DQogICAgYmFja2dyb3VuZC1p bWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZ3JpZC9ncmlkLWhyb3cuZ2lmKSAhaW1wb3J0YW50 Ow0KICAgIGNvbG9yOiMwMDA7DQogICAgYm9yZGVyLXRvcC1jb2xvcjojZmZmOw0KICAgIGJvcmRl ci1yaWdodC1jb2xvcjojNmZhMGRmICFpbXBvcnRhbnQ7DQp9DQoNCi54LWdyaWQzLWxvY2tlZCB0 ZC54LWdyaWQzLXJvdy1tYXJrZXIgZGl2LCAueC1ncmlkMy1sb2NrZWQgLngtZ3JpZDMtcm93LXNl bGVjdGVkIHRkLngtZ3JpZDMtcm93LW1hcmtlciBkaXZ7DQogICAgY29sb3I6IzE1NDI4YiAhaW1w b3J0YW50Ow0KfQ0KDQoueC1ncmlkMy1kaXJ0eS1jZWxsIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdl OnVybCguLi9pbWFnZXMvZGVmYXVsdC9ncmlkL2RpcnR5LmdpZik7DQp9DQoNCi54LWdyaWQzLXRv cGJhciwgLngtZ3JpZDMtYm90dG9tYmFyew0KCWZvbnQ6bm9ybWFsIDExcHggYXJpYWwsIHRhaG9t YSwgaGVsdmV0aWNhLCBzYW5zLXNlcmlmOw0KfQ0KDQoueC1ncmlkMy1ib3R0b21iYXIgLngtdG9v bGJhcnsNCglib3JkZXItdG9wLWNvbG9yOiNhOWJmZDM7DQp9DQoNCi54LXByb3BzLWdyaWQgLngt Z3JpZDMtdGQtbmFtZSAueC1ncmlkMy1jZWxsLWlubmVyew0KCWJhY2tncm91bmQtaW1hZ2U6dXJs KC4uL2ltYWdlcy9kZWZhdWx0L2dyaWQvZ3JpZDMtc3BlY2lhbC1jb2wtYmcuZ2lmKSAhaW1wb3J0 YW50Ow0KICAgIGNvbG9yOiMwMDAgIWltcG9ydGFudDsNCn0NCg0KLngtcHJvcHMtZ3JpZCAueC1n cmlkMy1ib2R5IC54LWdyaWQzLXRkLW5hbWV7DQogICAgYmFja2dyb3VuZC1jb2xvcjojZmZmICFp bXBvcnRhbnQ7DQogICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiNlZWU7DQp9DQoNCi54Zy1obWVudS1z b3J0LWFzYyAueC1tZW51LWl0ZW0taWNvbnsNCgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1h Z2VzL2RlZmF1bHQvZ3JpZC9obWVudS1hc2MuZ2lmKTsNCn0NCg0KLnhnLWhtZW51LXNvcnQtZGVz YyAueC1tZW51LWl0ZW0taWNvbnsNCgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2Rl ZmF1bHQvZ3JpZC9obWVudS1kZXNjLmdpZik7DQp9DQoNCi54Zy1obWVudS1sb2NrIC54LW1lbnUt aXRlbS1pY29uew0KCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC9ncmlk L2htZW51LWxvY2suZ2lmKTsNCn0NCg0KLnhnLWhtZW51LXVubG9jayAueC1tZW51LWl0ZW0taWNv bnsNCgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZ3JpZC9obWVudS11 bmxvY2suZ2lmKTsNCn0NCg0KLngtZ3JpZDMtaGQtYnRuIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9y OiNjM2RhZjk7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZ3Jp ZC9ncmlkMy1oZC1idG4uZ2lmKTsNCn0NCg0KLngtZ3JpZDMtYm9keSAueC1ncmlkMy10ZC1leHBh bmRlciB7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZ3JpZC9n cmlkMy1zcGVjaWFsLWNvbC1iZy5naWYpOw0KfQ0KDQoueC1ncmlkMy1yb3ctZXhwYW5kZXIgew0K ICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2dyaWQvcm93LWV4cGFu ZC1zcHJpdGUuZ2lmKTsNCn0NCg0KLngtZ3JpZDMtYm9keSAueC1ncmlkMy10ZC1jaGVja2VyIHsN CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZ3JpZC9ncmlkMy1z cGVjaWFsLWNvbC1iZy5naWYpOw0KfQ0KDQoueC1ncmlkMy1yb3ctY2hlY2tlciwgLngtZ3JpZDMt aGQtY2hlY2tlciB7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQv Z3JpZC9yb3ctY2hlY2stc3ByaXRlLmdpZik7DQp9DQoNCi54LWdyaWQzLWJvZHkgLngtZ3JpZDMt dGQtbnVtYmVyZXIgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0 L2dyaWQvZ3JpZDMtc3BlY2lhbC1jb2wtYmcuZ2lmKTsNCn0NCg0KLngtZ3JpZDMtYm9keSAueC1n cmlkMy10ZC1udW1iZXJlciAueC1ncmlkMy1jZWxsLWlubmVyIHsNCgljb2xvcjojNDQ0Ow0KfQ0K DQoueC1ncmlkMy1ib2R5IC54LWdyaWQzLXRkLXJvdy1pY29uIHsNCiAgICBiYWNrZ3JvdW5kLWlt YWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC9ncmlkL2dyaWQzLXNwZWNpYWwtY29sLWJnLmdpZik7 DQp9DQoNCi54LWdyaWQzLWJvZHkgLngtZ3JpZDMtcm93LXNlbGVjdGVkIC54LWdyaWQzLXRkLW51 bWJlcmVyLA0KLngtZ3JpZDMtYm9keSAueC1ncmlkMy1yb3ctc2VsZWN0ZWQgLngtZ3JpZDMtdGQt Y2hlY2tlciwNCi54LWdyaWQzLWJvZHkgLngtZ3JpZDMtcm93LXNlbGVjdGVkIC54LWdyaWQzLXRk LWV4cGFuZGVyIHsNCgliYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC9ncmlk L2dyaWQzLXNwZWNpYWwtY29sLXNlbC1iZy5naWYpOw0KfQ0KDQoueC1ncmlkMy1jaGVjay1jb2wg ew0KCWJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L21lbnUvdW5jaGVja2Vk LmdpZik7DQp9DQoNCi54LWdyaWQzLWNoZWNrLWNvbC1vbiB7DQoJYmFja2dyb3VuZC1pbWFnZTp1 cmwoLi4vaW1hZ2VzL2RlZmF1bHQvbWVudS9jaGVja2VkLmdpZik7DQp9DQoNCi54LWdyaWQtZ3Jv dXAsIC54LWdyaWQtZ3JvdXAtYm9keSwgLngtZ3JpZC1ncm91cC1oZCB7DQogICAgem9vbToxOw0K fQ0KDQoueC1ncmlkLWdyb3VwLWhkIHsNCiAgICBib3JkZXItYm90dG9tLWNvbG9yOiM5OWJiZTg7 DQp9DQoNCi54LWdyaWQtZ3JvdXAtaGQgZGl2LngtZ3JpZC1ncm91cC10aXRsZSB7DQogICAgYmFj a2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZ3JpZC9ncm91cC1jb2xsYXBzZS5n aWYpOw0KICAgIGNvbG9yOiMzNzY0YTA7DQogICAgZm9udDpib2xkIDExcHggdGFob21hLCBhcmlh bCwgaGVsdmV0aWNhLCBzYW5zLXNlcmlmOw0KfQ0KDQoueC1ncmlkLWdyb3VwLWNvbGxhcHNlZCAu eC1ncmlkLWdyb3VwLWhkIGRpdi54LWdyaWQtZ3JvdXAtdGl0bGUgew0KICAgIGJhY2tncm91bmQt aW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2dyaWQvZ3JvdXAtZXhwYW5kLmdpZik7DQp9DQoN Ci54LWdyb3VwLWJ5LWljb24gew0KICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9k ZWZhdWx0L2dyaWQvZ3JvdXAtYnkuZ2lmKTsNCn0NCg0KLngtY29scy1pY29uIHsNCiAgICBiYWNr Z3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC9ncmlkL2NvbHVtbnMuZ2lmKTsNCn0N Cg0KLngtc2hvdy1ncm91cHMtaWNvbiB7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1h Z2VzL2RlZmF1bHQvZ3JpZC9ncm91cC1ieS5naWYpOw0KfQ0KDQoueC1ncmlkLWVtcHR5IHsNCiAg ICBjb2xvcjpncmF5Ow0KICAgIGZvbnQ6bm9ybWFsIDExcHggdGFob21hLCBhcmlhbCwgaGVsdmV0 aWNhLCBzYW5zLXNlcmlmOw0KfQ0KDQoueC1ncmlkLXdpdGgtY29sLWxpbmVzIC54LWdyaWQzLXJv dyB0ZC54LWdyaWQzLWNlbGwgew0KICAgIGJvcmRlci1yaWdodC1jb2xvcjojZWRlZGVkOw0KfQ0K DQoueC1ncmlkLXdpdGgtY29sLWxpbmVzIC54LWdyaWQzLXJvd3sNCiAgICBib3JkZXItdG9wLWNv bG9yOiNlZGVkZWQ7DQp9DQoNCi54LWdyaWQtd2l0aC1jb2wtbGluZXMgLngtZ3JpZDMtcm93LXNl bGVjdGVkIHsNCglib3JkZXItdG9wLWNvbG9yOiNhM2JhZTk7DQp9LngtZGQtZHJhZy1naG9zdHsN Cgljb2xvcjojMDAwOw0KCWZvbnQ6IG5vcm1hbCAxMXB4IGFyaWFsLCBoZWx2ZXRpY2EsIHNhbnMt c2VyaWY7DQogICAgYm9yZGVyLWNvbG9yOiAjZGRkICNiYmIgI2JiYiAjZGRkOw0KCWJhY2tncm91 bmQtY29sb3I6I2ZmZjsNCn0NCg0KLngtZGQtZHJvcC1ub2Ryb3AgLngtZGQtZHJvcC1pY29uew0K ICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvZGQvZHJvcC1uby5naWYp Ow0KfQ0KDQoueC1kZC1kcm9wLW9rIC54LWRkLWRyb3AtaWNvbnsNCiAgYmFja2dyb3VuZC1pbWFn ZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0L2RkL2Ryb3AteWVzLmdpZik7DQp9DQoNCi54LWRkLWRy b3Atb2stYWRkIC54LWRkLWRyb3AtaWNvbnsNCiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2lt YWdlcy9kZWZhdWx0L2RkL2Ryb3AtYWRkLmdpZik7DQp9DQoNCi54LXZpZXctc2VsZWN0b3Igew0K ICAgIGJhY2tncm91bmQtY29sb3I6I2MzZGFmOTsNCiAgICBib3JkZXItY29sb3I6IzMzOTliYjsN Cn0ueC10cmVlLW5vZGUtZXhwYW5kZWQgLngtdHJlZS1ub2RlLWljb257DQoJYmFja2dyb3VuZC1p bWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvdHJlZS9mb2xkZXItb3Blbi5naWYpOw0KfQ0KDQou eC10cmVlLW5vZGUtbGVhZiAueC10cmVlLW5vZGUtaWNvbnsNCgliYWNrZ3JvdW5kLWltYWdlOnVy bCguLi9pbWFnZXMvZGVmYXVsdC90cmVlL2xlYWYuZ2lmKTsNCn0NCg0KLngtdHJlZS1ub2RlLWNv bGxhcHNlZCAueC10cmVlLW5vZGUtaWNvbnsNCgliYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFn ZXMvZGVmYXVsdC90cmVlL2ZvbGRlci5naWYpOw0KfQ0KDQoueC10cmVlLW5vZGUtbG9hZGluZyAu eC10cmVlLW5vZGUtaWNvbnsNCgliYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVs dC90cmVlL2xvYWRpbmcuZ2lmKSAhaW1wb3J0YW50Ow0KfQ0KDQoueC10cmVlLW5vZGUgLngtdHJl ZS1ub2RlLWlubGluZS1pY29uIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOw0KfQ0KDQou eC10cmVlLW5vZGUtbG9hZGluZyBhIHNwYW57DQoJIGZvbnQtc3R5bGU6IGl0YWxpYzsNCgkgY29s b3I6IzQ0NDQ0NDsNCn0NCg0KLmV4dC1pZSAueC10cmVlLW5vZGUtZWwgaW5wdXQgew0KICAgIHdp ZHRoOjE1cHg7DQogICAgaGVpZ2h0OjE1cHg7DQp9DQoNCi54LXRyZWUtbGluZXMgLngtdHJlZS1l bGJvd3sNCgliYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC90cmVlL2VsYm93 LmdpZik7DQp9DQoNCi54LXRyZWUtbGluZXMgLngtdHJlZS1lbGJvdy1wbHVzew0KCWJhY2tncm91 bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L3RyZWUvZWxib3ctcGx1cy5naWYpOw0KfQ0K DQoueC10cmVlLWxpbmVzIC54LXRyZWUtZWxib3ctbWludXN7DQoJYmFja2dyb3VuZC1pbWFnZTp1 cmwoLi4vaW1hZ2VzL2RlZmF1bHQvdHJlZS9lbGJvdy1taW51cy5naWYpOw0KfQ0KDQoueC10cmVl LWxpbmVzIC54LXRyZWUtZWxib3ctZW5kew0KCWJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdl cy9kZWZhdWx0L3RyZWUvZWxib3ctZW5kLmdpZik7DQp9DQoNCi54LXRyZWUtbGluZXMgLngtdHJl ZS1lbGJvdy1lbmQtcGx1c3sNCgliYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVs dC90cmVlL2VsYm93LWVuZC1wbHVzLmdpZik7DQp9DQoNCi54LXRyZWUtbGluZXMgLngtdHJlZS1l bGJvdy1lbmQtbWludXN7DQoJYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQv dHJlZS9lbGJvdy1lbmQtbWludXMuZ2lmKTsNCn0NCg0KLngtdHJlZS1saW5lcyAueC10cmVlLWVs Ym93LWxpbmV7DQoJYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvdHJlZS9l bGJvdy1saW5lLmdpZik7DQp9DQoNCi54LXRyZWUtbm8tbGluZXMgLngtdHJlZS1lbGJvdy1wbHVz ew0KCWJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L3RyZWUvZWxib3ctcGx1 cy1ubC5naWYpOw0KfQ0KDQoueC10cmVlLW5vLWxpbmVzIC54LXRyZWUtZWxib3ctbWludXN7DQoJ YmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvdHJlZS9lbGJvdy1taW51cy1u bC5naWYpOw0KfQ0KDQoueC10cmVlLW5vLWxpbmVzIC54LXRyZWUtZWxib3ctZW5kLXBsdXN7DQoJ YmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvdHJlZS9lbGJvdy1lbmQtcGx1 cy1ubC5naWYpOw0KfQ0KDQoueC10cmVlLW5vLWxpbmVzIC54LXRyZWUtZWxib3ctZW5kLW1pbnVz ew0KCWJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L3RyZWUvZWxib3ctZW5k LW1pbnVzLW5sLmdpZik7DQp9DQoNCi54LXRyZWUtYXJyb3dzIC54LXRyZWUtZWxib3ctcGx1c3sN CiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC90cmVlL2Fycm93cy5n aWYpOw0KfQ0KDQoueC10cmVlLWFycm93cyAueC10cmVlLWVsYm93LW1pbnVzew0KICAgIGJhY2tn cm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L3RyZWUvYXJyb3dzLmdpZik7DQp9DQoN Ci54LXRyZWUtYXJyb3dzIC54LXRyZWUtZWxib3ctZW5kLXBsdXN7DQogICAgYmFja2dyb3VuZC1p bWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvdHJlZS9hcnJvd3MuZ2lmKTsNCn0NCg0KLngtdHJl ZS1hcnJvd3MgLngtdHJlZS1lbGJvdy1lbmQtbWludXN7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1 cmwoLi4vaW1hZ2VzL2RlZmF1bHQvdHJlZS9hcnJvd3MuZ2lmKTsNCn0NCg0KLngtdHJlZS1ub2Rl ew0KCWNvbG9yOiMwMDA7DQoJZm9udDogbm9ybWFsIDExcHggYXJpYWwsIHRhaG9tYSwgaGVsdmV0 aWNhLCBzYW5zLXNlcmlmOw0KfQ0KDQoueC10cmVlLW5vZGUgYSwgLngtZGQtZHJhZy1naG9zdCBh ew0KCWNvbG9yOiMwMDA7DQp9DQoNCi54LXRyZWUtbm9kZSBhIHNwYW4sIC54LWRkLWRyYWctZ2hv c3QgYSBzcGFuew0KCWNvbG9yOiMwMDA7DQp9DQoNCi54LXRyZWUtbm9kZSAueC10cmVlLW5vZGUt ZGlzYWJsZWQgYSBzcGFuew0KCWNvbG9yOmdyYXkgIWltcG9ydGFudDsNCn0NCg0KLngtdHJlZS1u b2RlIGRpdi54LXRyZWUtZHJhZy1pbnNlcnQtYmVsb3d7DQogCSBib3JkZXItYm90dG9tLWNvbG9y OiMzNmM7DQp9DQoNCi54LXRyZWUtbm9kZSBkaXYueC10cmVlLWRyYWctaW5zZXJ0LWFib3Zlew0K CSBib3JkZXItdG9wLWNvbG9yOiMzNmM7DQp9DQoNCi54LXRyZWUtZGQtdW5kZXJsaW5lIC54LXRy ZWUtbm9kZSBkaXYueC10cmVlLWRyYWctaW5zZXJ0LWJlbG93IGF7DQogCSBib3JkZXItYm90dG9t LWNvbG9yOiMzNmM7DQp9DQoNCi54LXRyZWUtZGQtdW5kZXJsaW5lIC54LXRyZWUtbm9kZSBkaXYu eC10cmVlLWRyYWctaW5zZXJ0LWFib3ZlIGF7DQoJIGJvcmRlci10b3AtY29sb3I6IzM2YzsNCn0N Cg0KLngtdHJlZS1ub2RlIC54LXRyZWUtZHJhZy1hcHBlbmQgYSBzcGFuew0KCSBiYWNrZ3JvdW5k LWNvbG9yOiNkZGQ7DQoJIGJvcmRlci1jb2xvcjpncmF5Ow0KfQ0KDQoueC10cmVlLW5vZGUgLngt dHJlZS1ub2RlLW92ZXIgew0KCWJhY2tncm91bmQtY29sb3I6ICNlZWU7DQp9DQoNCi54LXRyZWUt bm9kZSAueC10cmVlLXNlbGVjdGVkIHsNCgliYWNrZ3JvdW5kLWNvbG9yOiAjZDllOGZiOw0KfQ0K DQoueC10cmVlLWRyb3Atb2stYXBwZW5kIC54LWRkLWRyb3AtaWNvbnsNCiAgYmFja2dyb3VuZC1p bWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0L3RyZWUvZHJvcC1hZGQuZ2lmKTsNCn0NCg0KLngt dHJlZS1kcm9wLW9rLWFib3ZlIC54LWRkLWRyb3AtaWNvbnsNCiAgYmFja2dyb3VuZC1pbWFnZTog dXJsKC4uL2ltYWdlcy9kZWZhdWx0L3RyZWUvZHJvcC1vdmVyLmdpZik7DQp9DQoNCi54LXRyZWUt ZHJvcC1vay1iZWxvdyAueC1kZC1kcm9wLWljb257DQogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgu Li9pbWFnZXMvZGVmYXVsdC90cmVlL2Ryb3AtdW5kZXIuZ2lmKTsNCn0NCg0KLngtdHJlZS1kcm9w LW9rLWJldHdlZW4gLngtZGQtZHJvcC1pY29uew0KICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4v aW1hZ2VzL2RlZmF1bHQvdHJlZS9kcm9wLWJldHdlZW4uZ2lmKTsNCn0ueC1kYXRlLXBpY2tlciB7 CiAgICBib3JkZXItY29sb3I6ICMxYjM3NmM7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Cn0K Ci54LWRhdGUtbWlkZGxlLC54LWRhdGUtbGVmdCwueC1kYXRlLXJpZ2h0IHsKCWJhY2tncm91bmQt aW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC9zaGFyZWQvaGQtc3ByaXRlLmdpZik7Cgljb2xv cjojZmZmOwoJZm9udDpib2xkIDExcHggInNhbnMgc2VyaWYiLCB0YWhvbWEsIHZlcmRhbmEsIGhl bHZldGljYTsKfQoKLngtZGF0ZS1taWRkbGUgLngtYnRuIC54LWJ0bi10ZXh0IHsKICAgIGNvbG9y OiNmZmY7Cn0KCi54LWRhdGUtbWlkZGxlIC54LWJ0bi1tYyBlbS54LWJ0bi1hcnJvdyB7CiAgICBi YWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC90b29sYmFyL2J0bi1hcnJvdy1s aWdodC5naWYpOwp9CgoueC1kYXRlLXJpZ2h0IGEgewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJs KC4uL2ltYWdlcy9kZWZhdWx0L3NoYXJlZC9yaWdodC1idG4uZ2lmKTsKfQoKLngtZGF0ZS1sZWZ0 IGF7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvc2hhcmVkL2xlZnQt YnRuLmdpZik7Cn0KCi54LWRhdGUtaW5uZXIgdGggewogICAgYmFja2dyb3VuZC1jb2xvcjojZGZl Y2ZiOwogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvc2hhcmVkL2ds YXNzLWJnLmdpZik7Cglib3JkZXItYm90dG9tLWNvbG9yOiNhM2JhZDk7CiAgICBmb250Om5vcm1h bCAxMHB4IGFyaWFsLCBoZWx2ZXRpY2EsdGFob21hLHNhbnMtc2VyaWY7Cgljb2xvcjojMjMzZDZk Owp9CgoueC1kYXRlLWlubmVyIHRkIHsKICAgIGJvcmRlci1jb2xvcjojZmZmOwp9CgoueC1kYXRl LWlubmVyIGEgewogICAgZm9udDpub3JtYWwgMTFweCBhcmlhbCwgaGVsdmV0aWNhLHRhaG9tYSxz YW5zLXNlcmlmOwogICAgY29sb3I6IzAwMDsKfQoKLngtZGF0ZS1pbm5lciAueC1kYXRlLWFjdGl2 ZXsKCWNvbG9yOiMwMDA7Cn0KCi54LWRhdGUtaW5uZXIgLngtZGF0ZS1zZWxlY3RlZCBhewogICAg YmFja2dyb3VuZC1jb2xvcjojZGZlY2ZiOwoJYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2Vz L2RlZmF1bHQvc2hhcmVkL2dsYXNzLWJnLmdpZik7Cglib3JkZXItY29sb3I6IzhkYjJlMzsKfQoK LngtZGF0ZS1pbm5lciAueC1kYXRlLXRvZGF5IGF7Cglib3JkZXItY29sb3I6ZGFya3JlZDsKfQoK LngtZGF0ZS1pbm5lciAueC1kYXRlLXNlbGVjdGVkIHNwYW57CiAgICBmb250LXdlaWdodDpib2xk Owp9CgoueC1kYXRlLWlubmVyIC54LWRhdGUtcHJldmRheSBhLC54LWRhdGUtaW5uZXIgLngtZGF0 ZS1uZXh0ZGF5IGEgewoJY29sb3I6I2FhYTsKfQoKLngtZGF0ZS1ib3R0b20gewogICAgYm9yZGVy LXRvcC1jb2xvcjojYTNiYWQ5OwogICAgYmFja2dyb3VuZC1jb2xvcjojZGZlY2ZiOwogICAgYmFj a2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvc2hhcmVkL2dsYXNzLWJnLmdpZik7 Cn0KCi54LWRhdGUtaW5uZXIgYTpob3ZlciwgLngtZGF0ZS1pbm5lciAueC1kYXRlLWRpc2FibGVk IGE6aG92ZXJ7CiAgICBjb2xvcjojMDAwOwogICAgYmFja2dyb3VuZC1jb2xvcjojZGRlY2ZlOwp9 CgoueC1kYXRlLWlubmVyIC54LWRhdGUtZGlzYWJsZWQgYSB7CgliYWNrZ3JvdW5kLWNvbG9yOiNl ZWU7Cgljb2xvcjojYmJiOwp9CgoueC1kYXRlLW1tZW51ewogICAgYmFja2dyb3VuZC1jb2xvcjoj ZWVlICFpbXBvcnRhbnQ7Cn0KCi54LWRhdGUtbW1lbnUgLngtbWVudS1pdGVtIHsKCWZvbnQtc2l6 ZToxMHB4OwoJY29sb3I6IzAwMDsKfQoKLngtZGF0ZS1tcCB7CgliYWNrZ3JvdW5kLWNvbG9yOiNm ZmY7Cn0KCi54LWRhdGUtbXAgdGQgewoJZm9udDpub3JtYWwgMTFweCBhcmlhbCwgaGVsdmV0aWNh LHRhaG9tYSxzYW5zLXNlcmlmOwp9CgoueC1kYXRlLW1wLWJ0bnMgYnV0dG9uIHsKCWJhY2tncm91 bmQtY29sb3I6IzA4Mzc3MjsKCWNvbG9yOiNmZmY7Cglib3JkZXItY29sb3I6ICMzMzY2Y2MgIzAw MDA1NSAjMDAwMDU1ICMzMzY2Y2M7Cglmb250Om5vcm1hbCAxMXB4IGFyaWFsLCBoZWx2ZXRpY2Es dGFob21hLHNhbnMtc2VyaWY7Cn0KCi54LWRhdGUtbXAtYnRucyB7CiAgICBiYWNrZ3JvdW5kLWNv bG9yOiAjZGZlY2ZiOwoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0L3No YXJlZC9nbGFzcy1iZy5naWYpOwp9CgoueC1kYXRlLW1wLWJ0bnMgdGQgewoJYm9yZGVyLXRvcC1j b2xvcjogI2M1ZDJkZjsKfQoKdGQueC1kYXRlLW1wLW1vbnRoIGEsdGQueC1kYXRlLW1wLXllYXIg YSB7Cgljb2xvcjojMTU0MjhiOwp9Cgp0ZC54LWRhdGUtbXAtbW9udGggYTpob3Zlcix0ZC54LWRh dGUtbXAteWVhciBhOmhvdmVyIHsKCWNvbG9yOiMxNTQyOGI7CgliYWNrZ3JvdW5kLWNvbG9yOiAj ZGRlY2ZlOwp9Cgp0ZC54LWRhdGUtbXAtc2VsIGEgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2Rm ZWNmYjsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC9zaGFyZWQvZ2xh c3MtYmcuZ2lmKTsKCWJvcmRlci1jb2xvcjojOGRiMmUzOwp9CgoueC1kYXRlLW1wLXlidG4gYSB7 CiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC9wYW5lbC90b29sLXNw cml0ZXMuZ2lmKTsKfQoKdGQueC1kYXRlLW1wLXNlcCB7CiAgIGJvcmRlci1yaWdodC1jb2xvcjoj YzVkMmRmOwp9LngtdGlwIC54LXRpcC1jbG9zZXsNCgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4v aW1hZ2VzL2RlZmF1bHQvcXRpcC9jbG9zZS5naWYpOw0KfQ0KDQoueC10aXAgLngtdGlwLXRjLCAu eC10aXAgLngtdGlwLXRsLCAueC10aXAgLngtdGlwLXRyLCAueC10aXAgLngtdGlwLWJjLCAueC10 aXAgLngtdGlwLWJsLCAueC10aXAgLngtdGlwLWJyLCAueC10aXAgLngtdGlwLW1sLCAueC10aXAg LngtdGlwLW1yIHsNCgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvcXRp cC90aXAtc3ByaXRlLmdpZik7DQp9DQoNCi54LXRpcCAueC10aXAtbWMgew0KICAgIGZvbnQ6IG5v cm1hbCAxMXB4IHRhaG9tYSxhcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZjsNCn0NCi54LXRpcCAu eC10aXAtbWwgew0KCWJhY2tncm91bmQtY29sb3I6ICNmZmY7DQp9DQoNCi54LXRpcCAueC10aXAt aGVhZGVyLXRleHQgew0KICAgIGZvbnQ6IGJvbGQgMTFweCB0YWhvbWEsYXJpYWwsaGVsdmV0aWNh LHNhbnMtc2VyaWY7DQogICAgY29sb3I6IzQ0NDsNCn0NCg0KLngtdGlwIC54LXRpcC1ib2R5IHsN CiAgICBmb250OiBub3JtYWwgMTFweCB0YWhvbWEsYXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWY7 DQogICAgY29sb3I6IzQ0NDsNCn0NCg0KLngtZm9ybS1pbnZhbGlkLXRpcCAueC10aXAtdGMsIC54 LWZvcm0taW52YWxpZC10aXAgLngtdGlwLXRsLCAueC1mb3JtLWludmFsaWQtdGlwIC54LXRpcC10 ciwgLngtZm9ybS1pbnZhbGlkLXRpcCAueC10aXAtYmMsDQoueC1mb3JtLWludmFsaWQtdGlwIC54 LXRpcC1ibCwgLngtZm9ybS1pbnZhbGlkLXRpcCAueC10aXAtYnIsIC54LWZvcm0taW52YWxpZC10 aXAgLngtdGlwLW1sLCAueC1mb3JtLWludmFsaWQtdGlwIC54LXRpcC1tcg0Kew0KCWJhY2tncm91 bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC9mb3JtL2Vycm9yLXRpcC1jb3JuZXJzLmdp Zik7DQp9DQoNCi54LWZvcm0taW52YWxpZC10aXAgLngtdGlwLWJvZHkgew0KICAgIGJhY2tncm91 bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2Zvcm0vZXhjbGFtYXRpb24uZ2lmKTsNCn0N Cg0KLngtdGlwLWFuY2hvciB7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2Rl ZmF1bHQvcXRpcC90aXAtYW5jaG9yLXNwcml0ZS5naWYpOw0KfS54LW1lbnUgew0KICAgIGJhY2tn cm91bmQtY29sb3I6I2YwZjBmMDsNCgliYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVm YXVsdC9tZW51L21lbnUuZ2lmKTsNCn0NCg0KLngtbWVudS1mbG9hdGluZ3sNCiAgICBib3JkZXIt Y29sb3I6IzcxOGJiNzsNCn0NCg0KLngtbWVudS1ub3NlcCB7DQoJYmFja2dyb3VuZC1pbWFnZTpu b25lOw0KfQ0KDQoueC1tZW51LWxpc3QtaXRlbXsNCglmb250Om5vcm1hbCAxMXB4IGFyaWFsLHRh aG9tYSxzYW5zLXNlcmlmOw0KfQ0KDQoueC1tZW51LWl0ZW0tYXJyb3d7DQoJYmFja2dyb3VuZC1p bWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvbWVudS9tZW51LXBhcmVudC5naWYpOw0KfQ0KDQou eC1tZW51LXNlcCB7DQogICAgYmFja2dyb3VuZC1jb2xvcjojZTBlMGUwOw0KCWJvcmRlci1ib3R0 b20tY29sb3I6I2ZmZjsNCn0NCg0KYS54LW1lbnUtaXRlbSB7DQoJY29sb3I6IzIyMjsNCn0NCg0K LngtbWVudS1pdGVtLWFjdGl2ZSB7DQogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdl cy9kZWZhdWx0L21lbnUvaXRlbS1vdmVyLmdpZik7DQoJYmFja2dyb3VuZC1jb2xvcjogI2RiZWNm NDsNCiAgICBib3JkZXItY29sb3I6I2FhY2NmNjsNCn0NCg0KLngtbWVudS1pdGVtLWFjdGl2ZSBh LngtbWVudS1pdGVtIHsNCglib3JkZXItY29sb3I6I2FhY2NmNjsNCn0NCg0KLngtbWVudS1jaGVj ay1pdGVtIC54LW1lbnUtaXRlbS1pY29uew0KCWJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdl cy9kZWZhdWx0L21lbnUvdW5jaGVja2VkLmdpZik7DQp9DQoNCi54LW1lbnUtaXRlbS1jaGVja2Vk IC54LW1lbnUtaXRlbS1pY29uew0KCWJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZh dWx0L21lbnUvY2hlY2tlZC5naWYpOw0KfQ0KDQoueC1tZW51LWl0ZW0tY2hlY2tlZCAueC1tZW51 LWdyb3VwLWl0ZW0gLngtbWVudS1pdGVtLWljb257DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwo Li4vaW1hZ2VzL2RlZmF1bHQvbWVudS9ncm91cC1jaGVja2VkLmdpZik7DQp9DQoNCi54LW1lbnUt Z3JvdXAtaXRlbSAueC1tZW51LWl0ZW0taWNvbnsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOm5vbmU7 DQp9DQoNCi54LW1lbnUtcGxhaW4gew0KCWJhY2tncm91bmQtY29sb3I6I2ZmZiAhaW1wb3J0YW50 Ow0KfQ0KDQoueC1tZW51IC54LWRhdGUtcGlja2Vyew0KICAgIGJvcmRlci1jb2xvcjojYTNiYWQ5 Ow0KfQ0KDQoueC1jeWNsZS1tZW51IC54LW1lbnUtaXRlbS1jaGVja2VkIHsNCiAgICBib3JkZXIt Y29sb3I6I2EzYmFlOSAhaW1wb3J0YW50Ow0KICAgIGJhY2tncm91bmQtY29sb3I6I2RlZjhmNjsN Cn0NCg0KLngtbWVudS1zY3JvbGxlci10b3Agew0KICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4u L2ltYWdlcy9kZWZhdWx0L2xheW91dC9taW5pLXRvcC5naWYpOw0KfQ0KDQoueC1tZW51LXNjcm9s bGVyLWJvdHRvbSB7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQv bGF5b3V0L21pbmktYm90dG9tLmdpZik7DQp9DQoueC1ib3gtdGwgewoJYmFja2dyb3VuZC1pbWFn ZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0L2JveC9jb3JuZXJzLmdpZik7Cn0KCi54LWJveC10YyB7 CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvYm94L3RiLmdpZik7Cn0K Ci54LWJveC10ciB7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvYm94 L2Nvcm5lcnMuZ2lmKTsKfQoKLngtYm94LW1sIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9p bWFnZXMvZGVmYXVsdC9ib3gvbC5naWYpOwp9CgoueC1ib3gtbWMgewoJYmFja2dyb3VuZC1jb2xv cjogI2VlZTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC9ib3gv dGIuZ2lmKTsKCWZvbnQtZmFtaWx5OiAiTXlyaWFkIFBybyIsIk15cmlhZCBXZWIiLCJUYWhvbWEi LCJIZWx2ZXRpY2EiLCJBcmlhbCIsc2Fucy1zZXJpZjsKCWNvbG9yOiAjMzkzOTM5OwoJZm9udC1z aXplOiAxMnB4Owp9CgoueC1ib3gtbWMgaDMgewoJZm9udC1zaXplOiAxNHB4OwoJZm9udC13ZWln aHQ6IGJvbGQ7Cn0KCi54LWJveC1tciB7CgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2Vz L2RlZmF1bHQvYm94L3IuZ2lmKTsKfQoKLngtYm94LWJsIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVy bCguLi9pbWFnZXMvZGVmYXVsdC9ib3gvY29ybmVycy5naWYpOwp9CgoueC1ib3gtYmMgewoJYmFj a2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0L2JveC90Yi5naWYpOwp9CgoueC1i b3gtYnIgewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0L2JveC9jb3Ju ZXJzLmdpZik7Cn0KCi54LWJveC1ibHVlIC54LWJveC1ibCwgLngtYm94LWJsdWUgLngtYm94LWJy LCAueC1ib3gtYmx1ZSAueC1ib3gtdGwsIC54LWJveC1ibHVlIC54LWJveC10ciB7CgliYWNrZ3Jv dW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvYm94L2Nvcm5lcnMtYmx1ZS5naWYpOwp9 CgoueC1ib3gtYmx1ZSAueC1ib3gtYmMsIC54LWJveC1ibHVlIC54LWJveC1tYywgLngtYm94LWJs dWUgLngtYm94LXRjIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC9i b3gvdGItYmx1ZS5naWYpOwp9CgoueC1ib3gtYmx1ZSAueC1ib3gtbWMgewoJYmFja2dyb3VuZC1j b2xvcjogI2MzZGFmOTsKfQoKLngtYm94LWJsdWUgLngtYm94LW1jIGgzIHsKCWNvbG9yOiAjMTcz ODViOwp9CgoueC1ib3gtYmx1ZSAueC1ib3gtbWwgewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC4u L2ltYWdlcy9kZWZhdWx0L2JveC9sLWJsdWUuZ2lmKTsKfQoKLngtYm94LWJsdWUgLngtYm94LW1y IHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC9ib3gvci1ibHVlLmdp Zik7Cn0jeC1kZWJ1Zy1icm93c2VyIC54LXRyZWUgLngtdHJlZS1ub2RlIGEgc3BhbiB7CiAgICBj b2xvcjojMjIyMjk3OwogICAgZm9udC1zaXplOjExcHg7CiAgICBmb250LWZhbWlseToibW9ub3R5 cGUiLCJjb3VyaWVyIG5ldyIsc2Fucy1zZXJpZjsKfQoKI3gtZGVidWctYnJvd3NlciAueC10cmVl IGEgaSB7CiAgICBjb2xvcjojZmY0NTQ1OwogICAgZm9udC1zdHlsZTpub3JtYWw7Cn0KCiN4LWRl YnVnLWJyb3dzZXIgLngtdHJlZSBhIGVtIHsKICAgIGNvbG9yOiM5OTk7Cn0KCiN4LWRlYnVnLWJy b3dzZXIgLngtdHJlZSAueC10cmVlLW5vZGUgLngtdHJlZS1zZWxlY3RlZCBhIHNwYW57CiAgICBi YWNrZ3JvdW5kLWNvbG9yOiNjM2RhZjk7Cn0ueC1jb21iby1saXN0IHsKICAgIGJvcmRlci1jb2xv cjojOThjMGY0OwogICAgYmFja2dyb3VuZC1jb2xvcjojZGRlY2ZlOwogICAgZm9udDpub3JtYWwg MTJweCB0YWhvbWEsIGFyaWFsLCBoZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Cn0KCi54LWNvbWJvLWxp c3QtaW5uZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjojZmZmOwp9CgoueC1jb21iby1saXN0LWhk IHsKICAgIGZvbnQ6Ym9sZCAxMXB4IHRhaG9tYSwgYXJpYWwsIGhlbHZldGljYSwgc2Fucy1zZXJp ZjsKICAgIGNvbG9yOiMxNTQyOGI7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2Vz L2RlZmF1bHQvbGF5b3V0L3BhbmVsLXRpdGxlLWxpZ2h0LWJnLmdpZik7CiAgICBib3JkZXItYm90 dG9tLWNvbG9yOiM5OGMwZjQ7Cn0KCi54LXJlc2l6YWJsZS1waW5uZWQgLngtY29tYm8tbGlzdC1p bm5lciB7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiM5OGMwZjQ7Cn0KCi54LWNvbWJvLWxpc3Qt aXRlbSB7CiAgICBib3JkZXItY29sb3I6I2ZmZjsKfQoKLngtY29tYm8tbGlzdCAueC1jb21iby1z ZWxlY3RlZHsKCWJvcmRlci1jb2xvcjojYTNiYWU5ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5k LWNvbG9yOiNkZmU4ZjY7Cn0KCi54LWNvbWJvLWxpc3QgLngtdG9vbGJhciB7CiAgICBib3JkZXIt dG9wLWNvbG9yOiM5OGMwZjQ7Cn0KCi54LWNvbWJvLWxpc3Qtc21hbGwgewogICAgZm9udDpub3Jt YWwgMTFweCB0YWhvbWEsIGFyaWFsLCBoZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Cn0ueC1wYW5lbCB7 CiAgICBib3JkZXItY29sb3I6ICM5OWJiZTg7Cn0KCi54LXBhbmVsLWhlYWRlciB7CiAgICBjb2xv cjojMTU0MjhiOwoJZm9udC13ZWlnaHQ6Ym9sZDsgCiAgICBmb250LXNpemU6IDExcHg7CiAgICBm b250LWZhbWlseTogdGFob21hLGFyaWFsLHZlcmRhbmEsc2Fucy1zZXJpZjsKICAgIGJvcmRlci1j b2xvcjojOTliYmU4OwogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0 L3BhbmVsL3doaXRlLXRvcC1ib3R0b20uZ2lmKTsKfQoKLngtcGFuZWwtYm9keSB7CiAgICBib3Jk ZXItY29sb3I6Izk5YmJlODsKICAgIGJhY2tncm91bmQtY29sb3I6I2ZmZjsKfQoKLngtcGFuZWwt YmJhciAueC10b29sYmFyLCAueC1wYW5lbC10YmFyIC54LXRvb2xiYXIgewogICAgYm9yZGVyLWNv bG9yOiM5OWJiZTg7Cn0KCi54LXBhbmVsLXRiYXItbm9oZWFkZXIgLngtdG9vbGJhciwgLngtcGFu ZWwtbWMgLngtcGFuZWwtdGJhciAueC10b29sYmFyIHsKICAgIGJvcmRlci10b3AtY29sb3I6Izk5 YmJlODsKfQoKLngtcGFuZWwtYm9keS1ub2hlYWRlciwgLngtcGFuZWwtbWMgLngtcGFuZWwtYm9k eSB7CiAgICBib3JkZXItdG9wLWNvbG9yOiM5OWJiZTg7Cn0KCi54LXBhbmVsLXRsIC54LXBhbmVs LWhlYWRlciB7CiAgICBjb2xvcjojMTU0MjhiOwoJZm9udDpib2xkIDExcHggdGFob21hLGFyaWFs LHZlcmRhbmEsc2Fucy1zZXJpZjsKfQoKLngtcGFuZWwtdGMgewoJYmFja2dyb3VuZC1pbWFnZTog dXJsKC4uL2ltYWdlcy9kZWZhdWx0L3BhbmVsL3RvcC1ib3R0b20uZ2lmKTsKfQoKLngtcGFuZWwt dGwsIC54LXBhbmVsLXRyLCAueC1wYW5lbC1ibCwgIC54LXBhbmVsLWJyewoJYmFja2dyb3VuZC1p bWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0L3BhbmVsL2Nvcm5lcnMtc3ByaXRlLmdpZik7CiAg ICBib3JkZXItYm90dG9tLWNvbG9yOiM5OWJiZTg7Cn0KCi54LXBhbmVsLWJjIHsKCWJhY2tncm91 bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC9wYW5lbC90b3AtYm90dG9tLmdpZik7Cn0K Ci54LXBhbmVsLW1jIHsKICAgIGZvbnQ6IG5vcm1hbCAxMXB4IHRhaG9tYSxhcmlhbCxoZWx2ZXRp Y2Esc2Fucy1zZXJpZjsKICAgIGJhY2tncm91bmQtY29sb3I6I2RmZThmNjsKfQoKLngtcGFuZWwt bWwgewoJYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4u L2ltYWdlcy9kZWZhdWx0L3BhbmVsL2xlZnQtcmlnaHQuZ2lmKTsKfQoKLngtcGFuZWwtbXIgewoJ YmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9kZWZhdWx0L3BhbmVsL2xlZnQtcmlnaHQu Z2lmKTsKfQoKLngtdG9vbCB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVm YXVsdC9wYW5lbC90b29sLXNwcml0ZXMuZ2lmKTsKfQoKLngtcGFuZWwtZ2hvc3QgewogICAgYmFj a2dyb3VuZC1jb2xvcjojY2JkZGYzOwp9CgoueC1wYW5lbC1naG9zdCB1bCB7CiAgICBib3JkZXIt Y29sb3I6Izk5YmJlODsKfQoKLngtcGFuZWwtZGQtc3BhY2VyIHsKICAgIGJvcmRlci1jb2xvcjoj OTliYmU4Owp9CgoueC1wYW5lbC1mYmFyIHRkLC54LXBhbmVsLWZiYXIgc3BhbiwueC1wYW5lbC1m YmFyIGlucHV0LC54LXBhbmVsLWZiYXIgZGl2LC54LXBhbmVsLWZiYXIgc2VsZWN0LC54LXBhbmVs LWZiYXIgbGFiZWx7CiAgICBmb250Om5vcm1hbCAxMXB4IGFyaWFsLHRhaG9tYSwgaGVsdmV0aWNh LCBzYW5zLXNlcmlmOwp9Ci54LXdpbmRvdy1wcm94eSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNj N2RmZmM7CiAgICBib3JkZXItY29sb3I6Izk5YmJlODsKfQoKLngtd2luZG93LXRsIC54LXdpbmRv dy1oZWFkZXIgewogICAgY29sb3I6IzE1NDI4YjsKCWZvbnQ6Ym9sZCAxMXB4IHRhaG9tYSxhcmlh bCx2ZXJkYW5hLHNhbnMtc2VyaWY7Cn0KCi54LXdpbmRvdy10YyB7CgliYWNrZ3JvdW5kLWltYWdl OiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvd2luZG93L3RvcC1ib3R0b20ucG5nKTsKfQoKLngtd2lu ZG93LXRsIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC93aW5kb3cv bGVmdC1jb3JuZXJzLnBuZyk7Cn0KCi54LXdpbmRvdy10ciB7CgliYWNrZ3JvdW5kLWltYWdlOiB1 cmwoLi4vaW1hZ2VzL2RlZmF1bHQvd2luZG93L3JpZ2h0LWNvcm5lcnMucG5nKTsKfQoKLngtd2lu ZG93LWJjIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC93aW5kb3cv dG9wLWJvdHRvbS5wbmcpOwp9CgoueC13aW5kb3ctYmwgewoJYmFja2dyb3VuZC1pbWFnZTogdXJs KC4uL2ltYWdlcy9kZWZhdWx0L3dpbmRvdy9sZWZ0LWNvcm5lcnMucG5nKTsKfQoKLngtd2luZG93 LWJyIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC93aW5kb3cvcmln aHQtY29ybmVycy5wbmcpOwp9CgoueC13aW5kb3ctbWMgewogICAgYm9yZGVyLWNvbG9yOiM5OWJi ZTg7CiAgICBmb250OiBub3JtYWwgMTFweCB0YWhvbWEsYXJpYWwsaGVsdmV0aWNhLHNhbnMtc2Vy aWY7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNkZmU4ZjY7Cn0KCi54LXdpbmRvdy1tbCB7CgliYWNr Z3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvd2luZG93L2xlZnQtcmlnaHQucG5n KTsKfQoKLngtd2luZG93LW1yIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVm YXVsdC93aW5kb3cvbGVmdC1yaWdodC5wbmcpOwp9CgoueC13aW5kb3ctbWF4aW1pemVkIC54LXdp bmRvdy10YyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Cn0KCi54LXdpbmRvdy1iYmFyIC54 LXRvb2xiYXIgewogICAgYm9yZGVyLXRvcC1jb2xvcjojOTliYmU4Owp9CgoueC1wYW5lbC1naG9z dCAueC13aW5kb3ctdGwgewogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjojOTliYmU4Owp9CgoueC1w YW5lbC1jb2xsYXBzZWQgLngtd2luZG93LXRsIHsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6Izg0 YTBjNDsKfQoKLngtZGxnLW1hc2t7CiAgIGJhY2tncm91bmQtY29sb3I6I2NjYzsKfQoKLngtd2lu ZG93LXBsYWluIC54LXdpbmRvdy1tYyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NkOWU4Owog ICAgYm9yZGVyLWNvbG9yOiAjYTNiYWU5ICNkZmU4ZjYgI2RmZThmNiAjYTNiYWU5Owp9CgoueC13 aW5kb3ctcGxhaW4gLngtd2luZG93LWJvZHkgewogICAgYm9yZGVyLWNvbG9yOiAjZGZlOGY2ICNh M2JhZTkgI2EzYmFlOSAjZGZlOGY2Owp9Cgpib2R5LngtYm9keS1tYXNrZWQgLngtd2luZG93LXBs YWluIC54LXdpbmRvdy1tYyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NkOWU4Owp9LngtaHRt bC1lZGl0b3Itd3JhcCB7DQogICAgYm9yZGVyLWNvbG9yOiNhOWJmZDM7DQogICAgYmFja2dyb3Vu ZC1jb2xvcjojZmZmOw0KfQ0KLngtaHRtbC1lZGl0b3ItdGIgLngtYnRuLXRleHQgew0KICAgIGJh Y2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2VkaXRvci90Yi1zcHJpdGUuZ2lm KTsNCn0ueC1wYW5lbC1ub2JvcmRlciAueC1wYW5lbC1oZWFkZXItbm9ib3JkZXIgew0KICAgIGJv cmRlci1ib3R0b20tY29sb3I6Izk5YmJlODsNCn0NCg0KLngtcGFuZWwtbm9ib3JkZXIgLngtcGFu ZWwtdGJhci1ub2JvcmRlciAueC10b29sYmFyIHsNCiAgICBib3JkZXItYm90dG9tLWNvbG9yOiM5 OWJiZTg7DQp9DQoNCi54LXBhbmVsLW5vYm9yZGVyIC54LXBhbmVsLWJiYXItbm9ib3JkZXIgLngt dG9vbGJhciB7DQogICAgYm9yZGVyLXRvcC1jb2xvcjojOTliYmU4Ow0KfQ0KDQoueC10YWItcGFu ZWwtYmJhci1ub2JvcmRlciAueC10b29sYmFyIHsNCiAgICBib3JkZXItdG9wLWNvbG9yOiM5OWJi ZTg7DQp9DQoNCi54LXRhYi1wYW5lbC10YmFyLW5vYm9yZGVyIC54LXRvb2xiYXIgew0KICAgIGJv cmRlci1ib3R0b20tY29sb3I6Izk5YmJlODsNCn0ueC1ib3JkZXItbGF5b3V0LWN0IHsKICAgIGJh Y2tncm91bmQtY29sb3I6I2RmZThmNjsKfQoKLngtYWNjb3JkaW9uLWhkIHsKCWNvbG9yOiMyMjI7 CiAgICBmb250LXdlaWdodDpub3JtYWw7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1h Z2VzL2RlZmF1bHQvcGFuZWwvbGlnaHQtaGQuZ2lmKTsKfQoKLngtbGF5b3V0LWNvbGxhcHNlZHsK ICAgIGJhY2tncm91bmQtY29sb3I6I2QyZTBmMjsKCWJvcmRlci1jb2xvcjojOThjMGY0Owp9Cgou eC1sYXlvdXQtY29sbGFwc2VkLW92ZXJ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNkOWU4ZmI7Cn0K Ci54LWxheW91dC1zcGxpdC13ZXN0IC54LWxheW91dC1taW5pIHsKICAgIGJhY2tncm91bmQtaW1h Z2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2xheW91dC9taW5pLWxlZnQuZ2lmKTsKfQoueC1sYXlv dXQtc3BsaXQtZWFzdCAueC1sYXlvdXQtbWluaSB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCgu Li9pbWFnZXMvZGVmYXVsdC9sYXlvdXQvbWluaS1yaWdodC5naWYpOwp9Ci54LWxheW91dC1zcGxp dC1ub3J0aCAueC1sYXlvdXQtbWluaSB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFn ZXMvZGVmYXVsdC9sYXlvdXQvbWluaS10b3AuZ2lmKTsKfQoueC1sYXlvdXQtc3BsaXQtc291dGgg LngtbGF5b3V0LW1pbmkgewogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1 bHQvbGF5b3V0L21pbmktYm90dG9tLmdpZik7Cn0KCi54LWxheW91dC1jbWluaS13ZXN0IC54LWxh eW91dC1taW5pIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2xh eW91dC9taW5pLXJpZ2h0LmdpZik7Cn0KCi54LWxheW91dC1jbWluaS1lYXN0IC54LWxheW91dC1t aW5pIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2xheW91dC9t aW5pLWxlZnQuZ2lmKTsKfQoKLngtbGF5b3V0LWNtaW5pLW5vcnRoIC54LWxheW91dC1taW5pIHsK ICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2xheW91dC9taW5pLWJv dHRvbS5naWYpOwp9CgoueC1sYXlvdXQtY21pbmktc291dGggLngtbGF5b3V0LW1pbmkgewogICAg YmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvbGF5b3V0L21pbmktdG9wLmdp Zik7Cn0ueC1wcm9ncmVzcy13cmFwIHsNCiAgICBib3JkZXItY29sb3I6IzY1OTNjZjsNCn0NCg0K LngtcHJvZ3Jlc3MtaW5uZXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6I2UwZThmMzsNCiAgICBi YWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC9xdGlwL2JnLmdpZik7DQp9DQoN Ci54LXByb2dyZXNzLWJhciB7DQogICAgYmFja2dyb3VuZC1jb2xvcjojOWNiZmVlOw0KICAgIGJh Y2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L3Byb2dyZXNzL3Byb2dyZXNzLWJn LmdpZik7DQogICAgYm9yZGVyLXRvcC1jb2xvcjojZDFlNGZkOw0KICAgIGJvcmRlci1ib3R0b20t Y29sb3I6IzdmYTllNDsNCiAgICBib3JkZXItcmlnaHQtY29sb3I6IzdmYTllNDsNCn0NCg0KLngt cHJvZ3Jlc3MtdGV4dCB7DQogICAgZm9udC1zaXplOjExcHg7DQogICAgZm9udC13ZWlnaHQ6Ym9s ZDsNCiAgICBjb2xvcjojZmZmOw0KfQ0KDQoueC1wcm9ncmVzcy10ZXh0LWJhY2sgew0KICAgIGNv bG9yOiMzOTYwOTU7DQp9LngtbGlzdC1oZWFkZXJ7DQogICAgYmFja2dyb3VuZC1jb2xvcjojZjlm OWY5Ow0KCWJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L2dyaWQvZ3JpZDMt aHJvdy5naWYpOw0KfQ0KDQoueC1saXN0LWhlYWRlci1pbm5lciBkaXYgZW0gew0KICAgIGJvcmRl ci1sZWZ0LWNvbG9yOiNkZGQ7DQogICAgZm9udDpub3JtYWwgMTFweCBhcmlhbCwgdGFob21hLCBo ZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQp9DQoNCi54LWxpc3QtYm9keSBkdCBlbSB7DQogICAgZm9u dDpub3JtYWwgMTFweCBhcmlhbCwgdGFob21hLCBoZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQp9DQoN Ci54LWxpc3Qtb3ZlciB7DQogICAgYmFja2dyb3VuZC1jb2xvcjojZWVlOw0KfQ0KDQoueC1saXN0 LXNlbGVjdGVkIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNkZmU4ZjY7DQp9DQoNCi54LWxpc3Qt cmVzaXplciB7DQogICAgYm9yZGVyLWxlZnQtY29sb3I6IzU1NTsNCiAgICBib3JkZXItcmlnaHQt Y29sb3I6IzU1NTsNCn0NCg0KLngtbGlzdC1oZWFkZXItaW5uZXIgZW0uc29ydC1hc2MsIC54LWxp c3QtaGVhZGVyLWlubmVyIGVtLnNvcnQtZGVzYyB7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwo Li4vaW1hZ2VzL2RlZmF1bHQvZ3JpZC9zb3J0LWhkLmdpZik7DQogICAgYm9yZGVyLWNvbG9yOiAj OTliYmU4Ow0KfS54LXNsaWRlci1ob3J6LCAueC1zbGlkZXItaG9yeiAueC1zbGlkZXItZW5kLCAu eC1zbGlkZXItaG9yeiAueC1zbGlkZXItaW5uZXIgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6dXJs KC4uL2ltYWdlcy9kZWZhdWx0L3NsaWRlci9zbGlkZXItYmcucG5nKTsNCn0NCg0KLngtc2xpZGVy LWhvcnogLngtc2xpZGVyLXRodW1iIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFn ZXMvZGVmYXVsdC9zbGlkZXIvc2xpZGVyLXRodW1iLnBuZyk7DQp9DQoNCi54LXNsaWRlci12ZXJ0 LCAueC1zbGlkZXItdmVydCAueC1zbGlkZXItZW5kLCAueC1zbGlkZXItdmVydCAueC1zbGlkZXIt aW5uZXIgew0KICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L3NsaWRl ci9zbGlkZXItdi1iZy5wbmcpOw0KfQ0KDQoueC1zbGlkZXItdmVydCAueC1zbGlkZXItdGh1bWIg ew0KICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9kZWZhdWx0L3NsaWRlci9zbGlk ZXItdi10aHVtYi5wbmcpOw0KfS54LXdpbmRvdy1kbGcgLmV4dC1tYi10ZXh0LA0KLngtd2luZG93 LWRsZyAueC13aW5kb3ctaGVhZGVyLXRleHQgew0KICAgIGZvbnQtc2l6ZToxMnB4Ow0KfQ0KDQou eC13aW5kb3ctZGxnIC5leHQtbWItdGV4dGFyZWEgew0KICAgIGZvbnQ6bm9ybWFsIDEycHggdGFo b21hLGFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmOw0KfQ0KDQoueC13aW5kb3ctZGxnIC54LW1z Zy1ib3gtd2FpdCB7DQogICAgYmFja2dyb3VuZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQv Z3JpZC9sb2FkaW5nLmdpZik7DQp9DQoNCi54LXdpbmRvdy1kbGcgLmV4dC1tYi1pbmZvIHsNCiAg ICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC93aW5kb3cvaWNvbi1pbmZv LmdpZik7DQp9DQoNCi54LXdpbmRvdy1kbGcgLmV4dC1tYi13YXJuaW5nIHsNCiAgICBiYWNrZ3Jv dW5kLWltYWdlOnVybCguLi9pbWFnZXMvZGVmYXVsdC93aW5kb3cvaWNvbi13YXJuaW5nLmdpZik7 DQp9DQoNCi54LXdpbmRvdy1kbGcgLmV4dC1tYi1xdWVzdGlvbiB7DQogICAgYmFja2dyb3VuZC1p bWFnZTp1cmwoLi4vaW1hZ2VzL2RlZmF1bHQvd2luZG93L2ljb24tcXVlc3Rpb24uZ2lmKTsNCn0N Cg0KLngtd2luZG93LWRsZyAuZXh0LW1iLWVycm9yIHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOnVy bCguLi9pbWFnZXMvZGVmYXVsdC93aW5kb3cvaWNvbi1lcnJvci5naWYpOw0KfQ== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: text/css Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/css/ext-ux-youtubeplayer-all.css LyoNCiAqIEV4dC51eC5Zb3V0dWJlUGxheWVyDQogKiBDb3B5cmlnaHQoYykgMjAwOC0yMDA5LCBU aG9yc3RlbiBTdWNrb3ctSG9tYmVyZyA8dHNAc2l0ZWFydHdvcmsuZGU+Lg0KICogDQogKiBUaGlz IGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNF Lg0KICogDQogKiBUaGlzIHByb2plY3QgaXMgcmVsZWFzZWQgYXMgYSBzdWIgcHJvamVjdCBvZiBj b25qb29uIDxodHRwOi8vd3d3LmNvbmpvb24ub3JnPg0KICovDQoNCi5leHQtdXgteW91dHViZXBs YXllciB7DQogICAgYmFja2dyb3VuZC1jb2xvcjojMDAwMDAwOw0KfQ0KDQouZXh0LXV4LXlvdXR1 YmVwbGF5ZXIuc3RyaWN0IGVtYmVkew0KICAgIHBvc2l0aW9uOnJlbGF0aXZlOw0KfQ0KDQouZXh0 LXV4LXlvdXR1YmVwbGF5ZXIuc3RyZXRjaCBlbWJlZHsNCiAgICBwb3NpdGlvbjpub3JtYWw7DQp9 Cg0KLmV4dC11eC15b3V0dWJlcGxheWVyLWNvbnRyb2wgLnBsYXkgew0KICAgIGJhY2tncm91bmQt aW1hZ2U6dXJsKC4uL2ltYWdlcy9jb250cm9sX3BsYXlfYmx1ZS5wbmcpICFpbXBvcnRhbnQ7DQp9 DQoNCi5leHQtdXgteW91dHViZXBsYXllci1jb250cm9sIC5lamVjdCB7DQogICAgYmFja2dyb3Vu ZC1pbWFnZTp1cmwoLi4vaW1hZ2VzL2NvbnRyb2xfZWplY3RfYmx1ZS5wbmcpICFpbXBvcnRhbnQ7 DQp9DQoNCi5leHQtdXgteW91dHViZXBsYXllci1jb250cm9sIC5zdG9wIHsNCiAgICBiYWNrZ3Jv dW5kLWltYWdlOnVybCguLi9pbWFnZXMvY29udHJvbF9zdG9wX2JsdWUucG5nKSAhaW1wb3J0YW50 Ow0KfQ0KDQouZXh0LXV4LXlvdXR1YmVwbGF5ZXItY29udHJvbCAucGF1c2Ugew0KICAgIGJhY2tn cm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9jb250cm9sX3BhdXNlX2JsdWUucG5nKSAhaW1wb3J0 YW50Ow0KfQ0KDQouZXh0LXV4LXlvdXR1YmVwbGF5ZXItY29udHJvbCAuc3RhcnQgew0KICAgIGJh Y2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9jb250cm9sX3N0YXJ0X2JsdWUucG5nKSAhaW1w b3J0YW50Ow0KfQ0KDQouZXh0LXV4LXlvdXR1YmVwbGF5ZXItY29udHJvbCAuZW5kIHsNCiAgICBi YWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvY29udHJvbF9lbmRfYmx1ZS5wbmcpICFpbXBv cnRhbnQ7DQp9DQoNCi5leHQtdXgteW91dHViZXBsYXllci1jb250cm9sLW11dGVJY29uIHsNCiAg ICBiYWNrZ3JvdW5kLWltYWdlOnVybCguLi9pbWFnZXMvc291bmRfbXV0ZS5wbmcpICFpbXBvcnRh bnQ7DQp9DQoNCi5leHQtdXgteW91dHViZXBsYXllci1jb250cm9sLXZvbHVtZUljb24gew0KICAg IGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy9zb3VuZF9ub25lLnBuZykgIWltcG9ydGFu dDsNCn0NCg0KLmV4dC11eC15b3V0dWJlcGxheWVyLWNvbnRyb2wtc2xpZGVyIC5oYmFyIHsNCiAg ICBib3JkZXI6IHNvbGlkIDFweCAjQjVCOEM4Ow0KICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRl Ow0KICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltYWdlcy95b3V0dWJlcGxheWVyLXNsaWRl ci1wcm9ncmVzcy5wbmcpOw0KICAgIGJhY2tncm91bmQtcG9zaXRpb246LTEyODBweCAwOw0KICAg IGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsNCiAgICBoZWlnaHQ6IDFweDsNCiAgICB6LWlu ZGV4OjE7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHRvcDogLTEycHg7DQp9DQoNCi5l eHQtdXgteW91dHViZXBsYXllci1jb250cm9sLXNsaWRlci54LXNsaWRlci1ob3J6LA0KLmV4dC11 eC15b3V0dWJlcGxheWVyLWNvbnRyb2wtc2xpZGVyLngtc2xpZGVyLWhvcnogLngtc2xpZGVyLWVu ZCwNCi5leHQtdXgteW91dHViZXBsYXllci1jb250cm9sLXNsaWRlci54LXNsaWRlci1ob3J6IC54 LXNsaWRlci1pbm5lciB7DQogICAgYmFja2dyb3VuZC1pbWFnZTpub25lIWltcG9ydGFudDsNCn0N Cg0KLmV4dC11eC15b3V0dWJlcGxheWVyLWNvbnRyb2wtc2xpZGVyLngtc2xpZGVyLWhvcnogLngt c2xpZGVyLXRodW1iIHsNCiAgICB6LWluZGV4OjI7DQp9Cg== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: text/css Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/css/master.css LyogRXh0ZW5kaW5nIEh0bWxFZGl0b3IqLwoKLngtaHRtbC1lZGl0b3ItdGIgLngtZWRpdC11bmRv IC54LWJ0bi10ZXh0IHsKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCB1cmwoL2ltZy9pY29ucy9o dG1sZWRpdG9ydW5kb3JlZG8uZ2lmKSBuby1yZXBlYXQ7CiAgYmFja2dyb3VuZC1wb3NpdGlvbjog MCAwOwp9Ci54LWh0bWwtZWRpdG9yLXRiIC54LWVkaXQtcmVkbyAueC1idG4tdGV4dCB7CiAgYmFj a2dyb3VuZDogdHJhbnNwYXJlbnQgdXJsKC9pbWcvaWNvbnMvaHRtbGVkaXRvcnVuZG9yZWRvLmdp Zikgbm8tcmVwZWF0OwogIGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IDA7Cn0KCi54LWh0bWwt ZWRpdG9yLXRiIC54LWVkaXQtaW1hZ2UgLngtYnRuLXRleHQgewogIGJhY2tncm91bmQ6IHRyYW5z cGFyZW50IHVybCgvaW1nL2ljb25zL3BpY3R1cmUucG5nKSBuby1yZXBlYXQ7Cn0KLngtZm9ybS1j aGVjay13cmFwIHsKICBtYXJnaW4tdG9wOiAzcHg7Cn0KI2ltZy1jaG9vc2VyLXZpZXcgeyAKICBi YWNrZ3JvdW5kOiB3aGl0ZTsgCiAgZm9udDogMTFweCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNl cmlmOwp9IAojaW1nLWJyb3dzZXItdmlldyAuYWRkLWltYWdlIHsKICBiYWNrZ3JvdW5kLWltYWdl OiB1cmwoL2ltZy9pY29ucy9waWN0dXJlX2FkZC5wbmcpOwp9CiNpbWctYnJvd3Nlci12aWV3IC5k ZWxldGUtaW1hZ2UgewogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgvaW1nL2ljb25zL3BpY3R1cmVf ZGVsZXRlLnBuZyk7Cn0KI2ltZy1icm93c2VyLXZpZXcgLnRodW1iIHsKICBwb3NpdGlvbjogcmVs YXRpdmU7CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgYm9yZGVyOiAxcHggc29saWQgI2RkZGRkZDsK ICB3aWR0aDogODBweDsKICBoZWlnaHQ6IDgwcHg7Cn0KI2ltZy1icm93c2VyLXZpZXcgLnRodW1i IGltZyB7CiAgcG9zaXRpb246IGFic29sdXRlOwp9CiNpbWctYnJvd3Nlci12aWV3IC50aHVtYi13 cmFwIHsgCiAgZmxvYXQ6IGxlZnQ7IAogIG1hcmdpbjogNHB4OyAKICBtYXJnaW4tcmlnaHQ6IDA7 IAogIHBhZGRpbmc6IDVweDsKfSAKI2ltZy1icm93c2VyLXZpZXcgLnRodW1iLXdyYXAgc3BhbiB7 IAogIGRpc3BsYXk6IGJsb2NrOyAKICBvdmVyZmxvdzogaGlkZGVuOyAKICB0ZXh0LWFsaWduOiBj ZW50ZXI7IAp9IAojaW1nLWJyb3dzZXItdmlldyAueC12aWV3LW92ZXIgewogIGJvcmRlcjogMXB4 IHNvbGlkICNkZGRkZGQ7IAogIGJhY2tncm91bmQ6ICNlZmVmZWYgdXJsKCcvZXh0anMzMC9yZXNv dXJjZXMvaW1hZ2VzL2RlZmF1bHQvZ3JpZC9yb3ctb3Zlci5naWYnKSByZXBlYXQteCBsZWZ0IHRv cDsgCiAgcGFkZGluZzogNHB4OyAKfQojaW1nLWJyb3dzZXItdmlldyAueC12aWV3LXNlbGVjdGVk IHsgCiAgYmFja2dyb3VuZDogI0RGRURGRjsgCiAgYm9yZGVyOiAxcHggc29saWQgIzY1OTNjZjsg CiAgcGFkZGluZzogNHB4OyAKfSAKI2ltZy1icm93c2VyLXZpZXcgLngtdmlldy1zZWxlY3RlZCAu dGh1bWIgeyAKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgCn0KI2ltZy1icm93c2VyLXZpZXcg Lngtdmlldy1zZWxlY3RlZCBzcGFuIHsgCiAgY29sb3I6ICMxQTREOEY7Cn0KI2ltZy1icm93c2Vy LXZpZXcgLmxvYWRpbmctaW5kaWNhdG9yIHsgCiAgZm9udC1zaXplOiAxMXB4OyAKICBiYWNrZ3Jv dW5kLWltYWdlOiB1cmwoJy9leHRqczMwL3Jlc291cmNlcy9pbWFnZXMvZ3JpZC9sb2FkaW5nLmdp ZicpOyAKICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyAKICBiYWNrZ3JvdW5kLXBvc2l0 aW9uOiBsZWZ0OyAKICBwYWRkaW5nLWxlZnQ6IDIwcHg7IAogIG1hcmdpbjogMTBweDsgCn0gCi54 LXRiYXItbG9hZGluZyB7CiAgd2lkdGg6IDE2cHg7CiAgaGVpZ2h0OiAxNnB4Owp9Ci51eC1mb3Jt LXN0YXRpY3RleHRmaWVsZCB7CgliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKCWJvcmRlcjogbm9u ZTsKCXBhZGRpbmctdG9wOiAzcHggIWltcG9ydGFudDsKCXBhZGRpbmctYm90dG9tOiAxcHggIWlt cG9ydGFudDsKCWNvbG9yOiAjMzMzOwp9CgovKiBNdWx0aXNlbGVjdCAqLwoudXgtbXNlbGVjdHsK ICAgIG92ZXJmbG93OmF1dG87CiAgICBiYWNrZ3JvdW5kOndoaXRlOwogICAgcG9zaXRpb246cmVs YXRpdmU7IC8qIGZvciBjYWxjdWxhdGluZyBzY3JvbGwgb2Zmc2V0cyAqLwogICAgem9vbToxOwog ICAgb3ZlcmZsb3c6YXV0bzsJCn0KLnV4LW1zZWxlY3QtaXRlbXsKICAgIGZvbnQ6bm9ybWFsIDEy cHggdGFob21hLCBhcmlhbCwgaGVsdmV0aWNhLCBzYW5zLXNlcmlmOwogICAgcGFkZGluZzoycHg7 CiAgICBib3JkZXI6MXB4IHNvbGlkICNmZmY7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAg Y3Vyc29yOnBvaW50ZXI7Cn0KLnV4LW1zZWxlY3Qtc2VsZWN0ZWR7Cglib3JkZXI6MXB4IGRvdHRl ZCAjYTNiYWU5ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiNERkU4RjY7CiAgICBjdXJzb3I6 cG9pbnRlcjsKfQoKCi8qR3JpZyBDU1MqLwovKiBpY29ucyB1c2VkIGluIHRoZSB0b29sYmFyICov Ci5hZGQgewogYmFja2dyb3VuZC1pbWFnZTp1cmwoL2ltZy9ncmlkL2FkZC5naWYpICFpbXBvcnRh bnQ7Cn0KLnJlbW92ZSB7CiBiYWNrZ3JvdW5kLWltYWdlOnVybCgvaW1nL2dyaWQvZGVsZXRlLmdp ZikgIWltcG9ydGFudDsKfQouc2VhcmNoIHsKIGJhY2tncm91bmQtaW1hZ2U6dXJsKC9pbWcvZ3Jp ZC9zZWFyY2gucG5nKSAhaW1wb3J0YW50Owp9Ci5wcmludHsKIGJhY2tncm91bmQtaW1hZ2U6dXJs KC9pbWcvZ3JpZC9wcmludC5wbmcpICFpbXBvcnRhbnQ7Cn0KLnRhYmxlX3JlZnJlc2ggewogICAg YmFja2dyb3VuZC1pbWFnZTp1cmwoL2ltZy9ncmlkL3RhYmxlX3JlZnJlc2gucG5nKSAhaW1wb3J0 YW50Owp9CgovKlRlc3RDcmVhdG9yIFRyZWUqLwouYm9vayB7CiAgICBiYWNrZ3JvdW5kLWltYWdl OiB1cmwoL2ltZy9pY29ucy9ib29rLnBuZykgIWltcG9ydGFudDsKfQouaWNvbi1ib29rX2VkaXQg ewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9pbWcvaWNvbnMvYm9va19lZGl0LnBuZykgIWlt cG9ydGFudDsKfQouaWNvbi1ib29rX2FkZCwgLmJvb2tfYWRkewogICAgYmFja2dyb3VuZC1pbWFn ZTogdXJsKC9pbWcvaWNvbnMvYm9va19hZGQucG5nKSAhaW1wb3J0YW50Owp9Ci5ib29rX2xpbmsg ewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9pbWcvaWNvbnMvYm9va19saW5rLnBuZykgIWlt cG9ydGFudDsKfQouaWNvbi1ib29rX2RlbGV0ZSB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwo L2ltZy9pY29ucy9ib29rX2RlbGV0ZS5wbmcpICFpbXBvcnRhbnQ7Cn0KLmJvb2tfZ28gewogICAg YmFja2dyb3VuZC1pbWFnZTogdXJsKC9pbWcvaWNvbnMvYm9va19nby5wbmcpICFpbXBvcnRhbnQ7 Cn0KCi5wYWdlIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgvaW1nL2ljb25zL3BhZ2UucG5n KSAhaW1wb3J0YW50Owp9Ci5jYW5jZWwgewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9pbWcv aWNvbnMvY2FuY2VsLnBuZykgIWltcG9ydGFudDsKfQoudHJlZV9wYWdlIHsKICAgIGJhY2tncm91 bmQtaW1hZ2U6IHVybCgvaW1nL2ljb25zL3BhZ2UucG5nKSAhaW1wb3J0YW50Owp9Ci5xdWVzdGlv biB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL2ltZy9pY29ucy9xdWVzdGlvbi5wbmcpICFp bXBvcnRhbnQ7Cn0KLnRlc3QgewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9pbWcvaWNvbnMv dGVzdC5wbmcpICFpbXBvcnRhbnQ7Cn0KCi5kb2NzIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVy bCgvaW1nL2ljb25zL2RvY3MuZ2lmKSAhaW1wb3J0YW50Owp9Ci5leHBhbmQtYWxsIHsKICAgIGJh Y2tncm91bmQtaW1hZ2U6IHVybCgvaW1nL2ljb25zL2V4cGFuZC1hbGwuZ2lmKSAhaW1wb3J0YW50 Owp9Ci5pY29uLWhlbHAgewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9pbWcvaWNvbnMvaGVs cC5wbmcpICFpbXBvcnRhbnQ7Cn0KLmNvbGxhcHNlLWFsbCB7CiAgICBiYWNrZ3JvdW5kLWltYWdl OiB1cmwoL2ltZy9pY29ucy9jb2xsYXBzZS1hbGwuZ2lmKSAhaW1wb3J0YW50Owp9Ci5pY29uLWZv bGRlcl9uZXcgewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9pbWcvaWNvbnMvZm9sZGVyX25l dy5naWYpICFpbXBvcnRhbnQ7Cn0KLmljb24tZm9sZGVyX2VkaXQgewogICAgYmFja2dyb3VuZC1p bWFnZTogdXJsKC9pbWcvaWNvbnMvZm9sZGVyX2VkaXQucG5nKSAhaW1wb3J0YW50Owp9Ci5pY29u LWZvbGRlcl9kZWxldGUgewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9pbWcvaWNvbnMvZm9s ZGVyX2RlbGV0ZS5naWYpICFpbXBvcnRhbnQ7Cn0KLmljb24tZm9sZGVyIHsKICAgIGJhY2tncm91 bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvZGVmYXVsdC90cmVlL2ZvbGRlci5naWYpICFpbXBvcnRh bnQ7Cn0KCi54LXRyZWUtbm9kZS1sZWFmIGltZy5mb2xkZXJ7CiAgICBiYWNrZ3JvdW5kLWltYWdl OiB1cmwoL2V4dGpzL3Jlc291cmNlcy9pbWFnZXMvZGVmYXVsdC90cmVlL2ZvbGRlci5naWYpICFp bXBvcnRhbnQ7Cn0KCi54LXJlc2l6YWJsZS1oYW5kbGUgewovKiAgICBvcGFjaXR5OjAuNSAhaW1w b3J0YW50OyovCn0KdGV4dGFyZWEueC1tYXN0ZXJhcmVhIHsKICAgIGJvcmRlcjogMXB4IHNvbGlk ICNEOUQ5RTk7Cn0KdGV4dGFyZWEueC1tYXN0ZXJhcmVhLCB0ZXh0YXJlYS54LWZvcm0tZm9jdXN7 CiAgICBib3JkZXItY29sb3I6ICNDNkM5Qzk7Cn0KLmV4dC1nZWNrbyAueC13aW5kb3ctYm9keSAu bWFzdGVyLXRlc3QtYW5zd2VyIHsKICAgIG92ZXJmbG93OiB2aXNpYmxlOwp9CgoudGVzdCB7CiAg ICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL2ltZy9pY29ucy90ZXN0LnBuZykgIWltcG9ydGFudDsK fQouaWNvbi1hcnJvd19sZWZ0IHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgvaW1nL2ljb25z L2Fycm93X2xlZnQucG5nKSAhaW1wb3J0YW50Owp9Ci5pY29uLWxpZ2h0bmluZyB7CiAgICBiYWNr Z3JvdW5kLWltYWdlOiB1cmwoL2ltZy9pY29ucy9saWdodG5pbmcucG5nKSAhaW1wb3J0YW50Owp9 Ci5pY29uLXBlbmNpbCB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL2ltZy9pY29ucy9wZW5j aWwucG5nKSAhaW1wb3J0YW50Owp9Ci5pY29uLWFwcGxpY2F0aW9uIHsKICAgIGJhY2tncm91bmQt aW1hZ2U6IHVybCgvaW1nL2ljb25zL2FwcGxpY2F0aW9uLnBuZykgIWltcG9ydGFudDsKfQouaWNv bi1hcHBsaWNhdGlvbl9hZGQgewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9pbWcvaWNvbnMv YXBwbGljYXRpb25fYWRkLnBuZykgIWltcG9ydGFudDsKfQouaWNvbi1idWxsZXRfZ28gewogICAg YmFja2dyb3VuZC1pbWFnZTogdXJsKC9pbWcvaWNvbnMvYnVsbGV0X2dvLnBuZykgIWltcG9ydGFu dDsKfQouaWNvbi1hcnJvd19yaWdodCB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL2ltZy9p Y29ucy9hcnJvd19yaWdodC5wbmcpICFpbXBvcnRhbnQ7Cn0KCmgxIHsKICAgIGNvbG9yOiM3Nzg4 OTk7CiAgICBmb250LXNpemU6MjRweDsKICAgIG1hcmdpbjoyMHB4OwogICAgdGV4dC1pbmRlbnQ6 NDBweDsKICAgIGZvbnQtZmFtaWx5OnRhaG9tYSxhcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZjsK fQoKaDIgewogICAgY29sb3I6IzY2Nzc4ODsKICAgIGZvbnQtc2l6ZToyMHB4OwogICAgbWFyZ2lu OjE1cHg7CiAgICB0ZXh0LWFsaWduOmxlZnQ7CiAgICB0ZXh0LWluZGVudDoyMHB4OwogICAgZm9u dC1mYW1pbHk6dGFob21hLGFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmOwp9CgpoMyB7CiAgICBj b2xvcjojMzM1NTc3OwogICAgZm9udC1zaXplOjE4cHg7CiAgICBmb250LXdlaWdodDpub3JtYWw7 CiAgICBtYXJnaW46MTBweDsKICAgIHRleHQtaW5kZW50OjE1cHg7CiAgICBmb250LWZhbWlseTp0 YWhvbWEsYXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWY7Cn0KClAgewogICAgZm9udC1zaXplOjEz cHg7CiAgICB0ZXh0LWluZGVudDoxNXB4OwogICAgZm9udC1mYW1pbHk6dGFob21hLGFyaWFsLGhl bHZldGljYSxzYW5zLXNlcmlmOwp9Cm9sLm1hc3Rlci1saXN0IHsKICAgIGxpc3Qtc3R5bGUtdHlw ZTogZGlzYzsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKfQpvbC5tYXN0ZXItbGlzdCBsaXsKICAg IHBhZGRpbmctYm90dG9tOiAxMHB4Owp9CgoueC13aW5kb3ctYm9keSBwLC54LXBhbmVsLWJvZHkg cCB7CglwYWRkaW5nOiAxcHg7CgltYXJnaW46IDA7Cn0KCi5yaWdodC1hbnN3ZXJ7CiAgICBiYWNr Z3JvdW5kLWNvbG9yOmdyZWVuOwp9Ci53cm9uZy1hbnN3ZXJ7CiAgICBiYWNrZ3JvdW5kLWNvbG9y OnJlZDsKfQoKLm1hc3Rlci10ZXN0LWFuc3dlciBsYWJlbCBzcGFuewogICAgZGlzcGxheTpub25l Owp9Cgoud3Jvbmcgc3Bhbi5saW5lLXRocm91Z2ggewogICAgY29sb3I6cmVkOwogICAgbGVmdDoy MnB4OwogICAgcG9zaXRpb246YWJzb2x1dGU7CiAgICB0ZXh0LWRlY29yYXRpb246bGluZS10aHJv dWdoOwogICAgZGlzcGxheTppbmxpbmU7Cn0KCi5pY29uLWJ1bGxldF93cmVuY2ggewogICAgYmFj a2dyb3VuZC1pbWFnZTogdXJsKC9pbWcvaWNvbnMvYnVsbGV0X3dyZW5jaC5wbmcpICFpbXBvcnRh bnQ7Cn0KLmljb24tZW1haWxfZ28gewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9pbWcvaWNv bnMvZW1haWxfZ28ucG5nKSAhaW1wb3J0YW50Owp9Ci5pY29uLWVtYWlsIHsKICAgIGJhY2tncm91 bmQtaW1hZ2U6IHVybCgvaW1nL2ljb25zL2VtYWlsLnBuZykgIWltcG9ydGFudDsKfQoKYSB7CiAg ICBjb2xvcjojNTU1NTU1Owp9CgojbWFpbl9jb250ZW50X3BhbmVsIC5leHQtZWwtbWFza3sKICAg IHotaW5kZXg6MTAwMCAhaW1wb3J0YW50Owp9CgoubW91c2VvdmVyLCAubW91c2VvdmVyIC54LXBh bmVsLWJvZHkgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmZjsKfQoKLnF1ZXN0aW9uLWJ1 dHRvbnMgewogICAgZGlzcGxheTogbm9uZTsKICAgIGZsb2F0OnJpZ2h0Owp9Ci54LWZvcm0tZmll bGQtd3JhcCBpbnB1dC5yYXRlLXZhbHVlLWNvbWJvIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IG5v bmU7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBwYWRkaW5nOjA7Cn0KLm1vdXNlb3ZlciAucXVlc3Rp b24tYnV0dG9ucyB7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKLnRlc3RzLWdyaWQgLngtZ3JpZDMt cm93LXRhYmxlIC54LWdyaWQzLWNvbCBkaXYueC1ncmlkMy1jZWxsLWlubmVyIHsKICAgIHdoaXRl LXNwYWNlOiBub3JtYWw7Cn0KCi5tYXN0ZXItbm90aWNlIC54LXdpbmRvdy1tYyB7CiAgICBib3Jk ZXI6IG5vbmU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgIHBhZGRpbmc6MTBweDsK ICAgIGZvbnQtc2l6ZToxNHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWFzdGVyLWNoZWNr LWZpZWxkc2V0IHsKICAgIHBhZGRpbmc6MTBweCAwcHggMHB4Owp9Ci5tYXN0ZXItY2hlY2stZmll bGRzZXQgbGVnZW5kIHsKICAgIGZvbnQtc2l6ZToxMnB4OwogICAgY29sb3I6IGluaGVyaXQ7CiAg ICBmb250LWZhbWlseTp0YWhvbWEsYXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWY7CiAgICBmb250 LXdlaWdodDpub3JtYWw7CiAgICBwYWRkaW5nOjBweDsKfQoKLm1haW4tbWVudS1pdGVtIGF7CiAg ICBjb2xvcjojNTU2Njc3OwogICAgZm9udC1mYW1pbHk6YXJpYWwsdGFob21hLGhlbHZldGljYSxz YW5zLXNlcmlmOwogICAgZm9udC1zaXplOjE0cHg7CiAgICB0ZXh0LWRlY29yYXRpb246bm9uZTsK fQoubWFpbi1tZW51LWl0ZW0gewogICAgYmFja2dyb3VuZC1jb2xvcjojRkNGQ0ZGOwogICAgYm9y ZGVyLWJvdHRvbToxcHggc29saWQgI0RFREVERTsKICAgIGJvcmRlci10b3A6MnB4IHNvbGlkIHdo aXRlOwogICAgcGFkZGluZzowIDVweDsKfQouaWNvbi1hY2NlcHQgewogICAgYmFja2dyb3VuZC1p bWFnZTogdXJsKC9pbWcvaWNvbnMvYWNjZXB0LnBuZykgIWltcG9ydGFudDsKfQoKLyogRm9yIHRl bXBsYXRlcyBwYWNrYWdlICovCi5xdWl6LXJlc3VsdC1yZXBvcnQgcHsKICAgIG1hcmdpbi10b3A6 NXB4OwogICAgcGFkZGluZzowOwp9CgouaWNvbi1xdWl6LWNyZWF0ZSB7CiAgICBiYWNrZ3JvdW5k LWltYWdlOiB1cmwoL2ltZy9pY29ucy9hcHBsaWNhdGlvbl9jYXNjYWRlLnBuZykgIWltcG9ydGFu dDsKfQouaWNvbi1pbXBvcnQgewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC9pbWcvaWNvbnMv Zm9sZGVyX3RhYmxlLnBuZykgIWltcG9ydGFudDsKfQ== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: text/css Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/css/quiz.css Lm1hc3Rlci1xdWl6LXRpdGxlewogICAgYm9yZGVyOiBub25lOwp9Ci5tYXN0ZXItcXVpei1wYW5l bHsKICAgIGJhY2tncm91bmQtY29sb3I6d2hpdGU7CiAgICBwYWRkaW5nOjEwcHg7Cn0KLm1hc3Rl ci1xdWVzdGlvbi1wYW5lbCAubWFzdGVyLXF1ZXN0aW9uLXRpdGxlewogICAgZm9udC1zaXplOiAx NHB4OwogICAgYm9yZGVyOiBub25lOwogICAgcGFkZGluZzowOwogICAgbWFyZ2luOjA7CiAgICB0 ZXh0LWluZGVudDowcHg7Cn0KLm1hc3Rlci1xdWVzdGlvbi1wYW5lbHsKICAgIAp9CgovKiBFZGl0 b3IgKi8KLmJ1dHRvbnMtZmxvYXRpbmd7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKfQouYnV0dG9u cy1mbG9hdGluZ3sKICAgIGJhY2tncm91bmQtY29sb3I6ICNmOWY5ZmY7CiAgICBiYWNrZ3JvdW5k LWNvbG9yOiByZ2JhKDI0OSwgMjQ5LCAyNTUsIDAuNyk7Cn0KLnF1aXotZWRpdGFibGUtb3dlciwg LnF1aXotZWRpdGFibGUtb3dlciAueC1wYW5lbC1ib2R5IHsKICAgIGJhY2tncm91bmQtY29sb3I6 ICNmOWY5ZmY7CiAgICBjdXJzb3I6cG9pbnRlcjsKfQoKLnF1aXotaXRlbS1jb250YWluZXItcGFu ZWwgewogICAgbWFyZ2luOiAxMHB4IDA7CiAgICBjdXJzb3I6IGF1dG87Cn0KLnF1aXotaXRlbS1j b250YWluZXItcGFuZWwgPiBkaXYgPiAueC1wYW5lbC1ib2R5IHsKICAgIHBhZGRpbmc6IDE4cHgg MTBweDsKfQoKLnRpdGxlLWVkaXRvci1vdmVyIHsKICAgIGN1cnNvcjpwb2ludGVyOwogICAgdGV4 dC1kZWNvcmF0aW9uOnVuZGVybGluZTsKICAgIHZpc2liaWxpdHk6dmlzaWJsZTsKfQouaWNvbi1z YXZlIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6dXJsKC9pbWcvaWNvbnMvc2F2ZS5wbmcpICFpbXBv cnRhbnQ7Cn0KLmljb24tdGljayB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoL2ltZy9pY29u cy90aWNrLnBuZykgIWltcG9ydGFudDsKfQoKLmljb24tcXVpeiB7CiAgICBiYWNrZ3JvdW5kLWlt YWdlOiB1cmwoL2ltZy9pY29ucy9xdWl6LnBuZykgIWltcG9ydGFudDsKfQoKLm1hc3Rlci1saW5l LXRocm91Z2ggewogICAgY29sb3I6cmVkOwogICAgZm9udC1mYW1pbHk6bW9ub3NwYWNlOwogICAg bGluZS1oZWlnaHQ6MC44ZW07CiAgICBwb3NpdGlvbjphYnNvbHV0ZTsKICAgIHRleHQtZGVjb3Jh dGlvbjpsaW5lLXRocm91Z2g7CiAgICBkaXNwbGF5OiBub25lOwp9Ci5zaG93LWxpbmUtdGhyb3Vn aCBzcGFuLm1hc3Rlci1saW5lLXRocm91Z2ggewogICAgZGlzcGxheTogaW5saW5lOwp9CgoubWFz dGVyLWFuc3dlci1wb2ludC10cnVlIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLm1hc3Rlci1hbnN3 ZXItcG9pbnQtZmFsc2UgewogICAgZGlzcGxheTogbm9uZTsKfQoucG9pbnQtZmFsc2UgLm1hc3Rl ci1hbnN3ZXItcG9pbnQtZmFsc2UgewogICAgZGlzcGxheTogaW5saW5lOwp9Ci5wb2ludC10cnVl IC5tYXN0ZXItYW5zd2VyLXBvaW50LXRydWUgewogICAgZGlzcGxheTogaW5saW5lOwp9Cgouc2hv dy1saW5lLXRocm91Z2ggLm1hc3Rlci1hbnN3ZXItcG9pbnQtdHJ1ZSwgLnNob3ctbGluZS10aHJv dWdoIC5tYXN0ZXItYW5zd2VyLXBvaW50LWZhbHNlIHsKICAgIGNvbG9yOiByZWQgIWltcG9ydGFu dDsKfQoKLmljb24tY2FuY2VsIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgvaW1nL2ljb25z L2NhbmNlbC5wbmcpICFpbXBvcnRhbnQ7Cn0KCi54LWl0ZW0tZGlzYWJsZWQgKiB7CiAgICBjb2xv cjogIzAwMDAwMCAhaW1wb3J0YW50Owp9CgoucXVpei1pdGVtLWNvbnRhaW5lci1wYW5lbCAueC1p dGVtLWRpc2FibGVkICogewogICAgY29sb3I6ICMwMDAwMDA7Cn0KCi5yZWQtdGltZXIgewogICAg Y29sb3I6IHJlZDsKICAgIHRleHQtZGVjb3JhdGlvbjogYmxpbms7Cn0KCi5tZXJnZV9xdWVzdGlv biBkaXYuZGRfaXRlbXsKICAgIHRleHQtaW5kZW50OjA7CiAgICBib3JkZXI6MXB4IHNvbGlkICNF RUVFRUU7CiAgICBtYXJnaW46MnB4OwogICAgcGFkZGluZzoycHg7CiAgICBmbG9hdDogbGVmdDsK ICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7Cn0KLm1lcmdlX3F1ZXN0aW9uIC5tZWdyZV90 YWJsZXsKICAgIGJvcmRlcjogbm9uZTsKICAgIHdpZHRoOiAxMDAlOwp9Ci5tZXJnZV9xdWVzdGlv biAubWVncmVfdGFibGUgdGR7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjOTlCQkU4OwogICAgcGFk ZGluZzogMTBweDsKfQoubWVyZ2VfcXVlc3Rpb24gLm1lZ3JlX3RhYmxlIHRkLnRkX3RhcmdldCB7 CiAgICBwYWRkaW5nOiAwcHggIWltcG9ydGFudDsKfQoubWVyZ2VfcXVlc3Rpb24gLnRhcmdldC1v dmVyIHsKICAgIGJvcmRlcjoxcHggZGFzaGVkIG9yYW5nZSAhaW1wb3J0YW50Owp9Ci5tZXJnZV9x dWVzdGlvbiAudGRfdGFyZ2V0IGRpdi5kZF9pdGVtewogICAgYm9yZGVyOiBub25lOwogICAgbWFy Z2luOjBweDsKICAgIHBhZGRpbmc6MnB4OwogICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJl bnQ7Cn0KCi5tZXJnZV9xdWVzdGlvbiAubWVncmVfdGFibGUgLnRkX2NvcnJlY3QgewogICAgYm9y ZGVyOm5vbmUgIWltcG9ydGFudDsKICAgIGNvbG9yOiAjNjk2Owp9Ci5tZXJnZV9xdWVzdGlvbiAu aW5pdF90YXJnZXR7CiAgICBib3JkZXI6IG5vbmU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFm YWZmOwogICAgcGFkZGluZzoycHg7Cn0KCi5tZXJnZS13cm9uZyB7CiAgICBiYWNrZ3JvdW5kLWNv bG9yOiAjRkZBQUFBOwp9CgoubWVyZ2UtY29ycmVjdCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAj QUFGRkFBOwp9 ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/x-icon Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/favicon.ico AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEA AAAAAAAAAAAA1s/MAEtxPwDe1eIArqqpAN3X0AC3tLAAYHtUANbRzgDp4esAubayAE9kPgDSxsIA 4djUAO335gDq4d0A9envAOzh3QD07/AAwbyzANvZ0QCyrq0A493QALu3tgC7x6kATHc+ANPKxgD4 9/MA087LAMbIwgD57uoA8e3yAPPu8ADy5+MA8PzgAP7/7wDz8fAAyMbFAN7o2ADy+ewA0svIAEJz NQC8uroA1dHQAHyOWQDm2uAA5+fnANTNygCPiosA//34AP7u9QBMbj8AzszLAGx3VwAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAwMDAwMDAwMAAAMAAAAAAAAAAAAAAAADAAADAAKwUW LDMzMhAgLgAwAAAwAB0OMzMsGRMxEh8AMAAAMAAlJjMCKSw1IyQJADAAADAALTMsMywzLBgbAwAw AAAwACwzMxgMMywzIhQAMAAAMDMzMzMRDAwsLDMUADAAADAsLDMNIR4eBwszGAAwAAAwADMILxoP Dw8sMzMAMAAAMAAVKxwBKCgnMywzMzAAADAAKhcECgYGNA8zMywwAAAwAAAAAAAAAAAAADMzLAAA MDAwMDAwMDAwMDAwLCwAAAAAAAAAAAAAAAAAAAAAAP//AACAAQAAv/0AAKAFAACgBQAAoAUAAKAF AACgBQAAgAUAAIAFAACgBQAAoAEAAKABAAC/8QAAgAEAAP//AAA= ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/qtip/tip-sprite.gif R0lGODlh9AFqA4cAAEr/So6qzq7C3Ony/+71/+X1+QoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiH5BAMAAAAALAAAAAD0AWoD AAj/AAEEGDgQgMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOK3EiwYAABBVIWGMmypcuX MGPKnEmzps2bC1UWEDCwAIGfBHAKHUq0qNGjSJMqPQiUQIGeTZdKnUq1qtWrWEE2fRrAJ9CsYMOK HUu2bMutPQeoHWC2rdu3cONaXTuAawG6cvPq3cu370a6dvH6HUy4sOG3gNOuPcy4sePHRRN3FQy5 suXLmDNKvrs4s+fPoD1vphy6tOnTfEd3Rs26teuwqtW+nk279tHYbG3r3s27Je7ewIMLt/h7uPHj yAEUT868ee3lzqNLLw19uvXrkKtj387dr/bu4MO7//0uvrx5rOTPq1+PND379/Bruo9Pv/7I+fbz 69e8NvDq/QAGiBF+AhZooEEEHqjgfgku6CB9DT4o4XoRTmiheBVeqOF2GW7ooXQdfihiciGOaKJw JZ6o4m4prujibC2+KCNqMc5oI2g13qjjZTnu6KNjPf4oZGFBDmlkav0pJtuRTJpWZJNQtvVklFSK NWWVWF51ZZZcSrVll2DeluRk/4VpplxfnqmmfGNytuSacJqVZpx0sjRnnXh+dGeefGq0WVR9BroU Wl0BKuihRhHq1U+INkoUoSip5OikN+nEk0AlUarpTCUFgGmnoIYq6qiklmrqqaimquqqrLbq6quw xv8q66y01mrrrbjmaqpOvPbq66/ABivssMQWa+yxyCar7LLMNuvss9BGK+201FZrbbBNZavtttx2 6+234IYr7rjklmvuueimq+667Lbr7rvwxivvvPTWa++9+Oar77789uvvvwAHLPDABBds8MEIJ6xw unQ17PDDEEcs8cQUV2zxxRhnrPHGHHfs8ccghyzyyCSXbPLJKKes8sost+zyyzDHLPPMNNds8804 56zzzjz37PPPQAct9NBEF2300UgnrfTSTDft9NNQRy311FRXbfXVWGet9dZcd+3112CHLfbYZJdt 9tlop6322my37fbbcMct99x012333XjnrffefPf/7fffgAcu+OCEF2744YgnrvjijDfu+OOQRy75 5JRXbvnlmGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y012777bjnrvvuvPfu++/A By/88MQXb/zxyCev/PLMN+/889BHL/301Fdv/fXYZ6/99tx37/334Icv/vjkl2/++einr/76iC/s /vvwxy///PTXb//9+Oev//789+///wAMoADjd60CGvCACEygAhfIwAY68IEQ7JWuJkjBClrwghjM oAY3yMEOejBUbmKfCFnmnxGaMGUlPKEKSZbCFbrwYy18oQw1FsMZ2rBiNbyhDiGWwx36sE0/DOLD /3ooRB0SsYg2PCISZajEJbqwiU5UIRSjaMIpUlGEVrzi+rKoxfRxsYvn+yIYyyfGMY6vjGYMHxrT +L01srF7bnzj9uIox+zRsY7XuyMeq6fHPU6vj36MHiAD+bxBErJ5hjzk8hKpyOQxspHHeyQkiyfJ SQ6vkpYMHiYz+btNcrJ3nvzk7kIpytyRspS3OyUqa6fKVc6ula6MHSxj+bpZ0rJ1trzl6nKpy9Tx spen+yUwSyfMYY6umMYMHTKT+bllMrNzznzm5qIpzcxRs5qXuyY2K6fNbU6um96MHDjD+bhxkrNx 5jzn4tKpzsSxs52Heyc8CyfPeQ6unvYMHD7z+f+3ffKzb/78594CKtC8EbSgdzsoQuum0IXOraEO jRtEI/q2iVK0bRa96NoyqtG0cbSjZ/soSMsm0pGOraQmDRtKU/q1lbK0ay596dZiKtOs0bSmV7sp Tqum051Orac+jRpQg/q0oRK1aUY96tKSqtSkMbWpR3sqVIsm1akOrapWDRpWs/qzrXK1Z1796s7C KtackbWsNzsrWmum1rXOrK1ujRlc4/qyudK1ZXa968ryqlcUKqmvluMrYE0m2MGy8K+GlVxhExuy xTIWhoh9rOMcK1mOUbayNIwsZhV32c1erLOexaFmQ2s40JJWYqY9LQ9Hq1rBpba1DXstbIE429L/ sra2AL0tbgeq290atLe+TShwg8vQ4RL3ocY9rkSTq9yKMre5GH0udDcq3el6tLrWDSl2s0vS7XL3 pN79rkrDK96Wkre8MD0vemeq3vXatL3uzSl848vT+dL3p/a9r1Dzq9+i8re/SP0vgJcq4AE7tcAG jiqCE0zVBTP4qg5+sFYjLOGuUrjCYL0whseq4Q2btcMeTiuIQ8zWEZP4rSY+sVxTrOK6srjFeH0x jPcq4xn7lUw2fi+OcyzfHfO4vj7+MX6DLOT9ErnI/j0ykgOs5CUTuMlOPjCUo6zgKVO5wVa+MoSz rOUJc7nLFv4ymDMs5jFzuMxm/jCa0yziNbO5/8RufjOK4yznFdO5zi6+M55jrOc907jPfr5xCAPt M9nW1tCzRTRsFd1aRqvW0aeFNGklHVpKe9bSm8U0ZjVdWU5L1tOPBTVjRZ1YUhvW1INFNWBV3VdW 69XVd4U1XWUdV1q71dZrxTVadV1WXovV118FNleFnVViW9XYU0U2VJXdVGYr1dlHhTZRpR1UavvU 2jvFNk61XVNuy9TbLwU3S8WdUnKb1NwjRTdI1d1RdmvU3ReFN0XlHVF6O9TeC8U3QvVdUH4L1N// BDg/BZ5PgtvT4PNEODwV3k6Gq9Ph54Q4OSUeTop70+LbxDg2NV5NjkvT488EOTNFnkySG9Pkw/9E OTBV3kuW69Llt4Q5LWUeS5q70uarxDkqdV5KnovS558EOieFnkmiW9Lok0Q6JJXeSKYr0umHhDoh pR5IqvvR6nvEOh61Xkeuy9HrbwQ7G8WeRrKb0exjRDsY1d5FtmvR7VeEOxXlHkW6O9HuS8Q7EvVe RL4L0e9BBPwPBe9Dwu/Q8EasMaFjq/jF09bxZB405NUs+cm3ufKWhzPmMz/nzXPezp7/fJ5DL3o+ k770fz496gW9es23nmaIv2Hsk9h4yM9+hrdnYu0dn/sX9v6Ju1/871c4fCkGn9DFP2Hyq3j8QC9/ hM/HYvP9HH32VX+L09/z9dW3fS9mH8/dR1//+MP4/TqP33znJ2P55Zx+8rX/jOt/8/vFN381xp/N 9Qdf/tt4/zTv33v/B0f9Z2YByD0FOEcDOGYHqD0LaEcJCGYNiD0RmEcP2GUTaD0XyEcVqGUZSD0d +EcbeGUfKD0jKEghSGUlCD0pWEgnGGUr6DwviEgt6GQxyDw1uEgzuGQ3qDw76Eg5iGQ9iDxBGEk/ WGRDaDxHSElFKGRJSDxNeElL+GNPKDxTqElRyGNVCDxZ2ElXmGNb6DtfCEpdaGNhyDtlOEpjOGNn qDtraEppCGNtiDtxmEpv2GJzaDt3yEp1qGJ5SDt9+Ep7eGJ/KDuDKEuBSGKFCDuJWEuHGGKL/+g6 j4hLjehhkcg6lbhLk7hhl6g6m+hLmYhhnYg6oRhMn1hho2g6p0hMpShhqUg6rXhMq/hgryg6s6hM schgtQg6udhMt5hgu+g5vwhNvWhgwcg5xThNwzhgx6g5y2hNyQhgzYg50ZhNz9hf0xhY1ahf18hN 2Xhf20g53/hN3Uhf4ahY4xhf5ShO5+he6Qg57VhO67he7zhZ8Yhe84hO9Vhe98g4+7hO+She/chZ //hdAelOA8ldBYk4CRlPB5ldC2lbgPZ6GPOQ9NSQ1kWRhIOR92SR06WRrsWR0OWR+gSSzSWSgGOS /USSyoWSfsOSuRWREmkxLsk3M8lbMBmTFP9Tk3qjk791kziJWip5XDyJN0MpXD75k6t1lEjpMEVp N01ZXEq5lLghlSjzlHRjlcgVlVRZF0FJXFgpN1+5XFpJlWEJN2XpXGMplWfpNmsZXWm5lG3JNnFJ XW+JlHOpNnd5XXX5k3mJNn2pXXuJk39pNoPZXYEZk4VJNokJXocpkYspNo85Xo35epEJNpVpXpPZ epfpNZuZXpm5ep3JNaHJXp+JeqOpNaepY6q3lZbVlcGVmlgDmz22mqyZWaVZerJpNbkJZLRZmxPp mr61m1QjnEPWm74pk8C5W8QpNctpZMZ5nDmZnLjVnFBDnUn2nNAJlLcpetbpNN3JZNiZnUn/GZ7i yZTSeWjnmWjpuWjr2Wjt+WjvGWnxOWnzWWn1eWn3mWn5uWn72Wn9+Wn/GWoBOmoDWmoFemoHmmoJ umoL2moN+moPGmsROmsTWmsVemsXmmsZumsb2msd+msfGmwhOmwjWmwlemwnmmwpumwr2mwt+mwv Gm0xOm0zWm01em03mm05um072m09+m0/Gm5BOm5DWm5Fem5Hmm5Jum5L2m5N+m5PGm9ROm9TWm9V em9Xmm9Zum9b2m9d+m9fGnBhOnBjWnBlenBnmnBpunBr2nBt+nBvGnFxOnFzWnF1enF3mnF5unF7 2nF9+nF/GnKBOnKDWnKFenKHmnKJunKLjNpyjfpyjxpzkTpzk1pzlXpzl5pzmbpzm9pznfpznxp0 oTp0o1p0pXp0p5p0qbp0q9p0rfp0rxp1sTp1s1p1tXp1t5p1ubp1u9p1vfp1vxp2wTp2w1p2xXp2 x5p2ybp2y9p2zfp2zxp30Tp301p31Xp315p32bp329p33fp33xp44Tp441p45Xp4ARAQADs= ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/qtip/tip-anchor-sprite.gif R0lGODlhJgAKAPcAAI6qzq7C3ODo8uX1+e71/////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAYALAAAAAAmAAoA AAiUAA0INABgoIEBAwgoVIhwAICCBiMafDhgIIAAEAkKWKhQAIABAjBmlEjwooCKAgF4tBiAIwGM C0M+lPgwwEaFKVtitHiTwEqXMiHW7IlTo8+MFxfudNlRpE2mBAi2VLgz5caVBoCKTGnSpdGOSHVC jLk14tCFSTlW1ZgRZFmSJW06JHqUZduZcM1+ROgS4cS8gCMGBAA7 ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/panel/white-top-bottom.gif R0lGODlhAQAsAYcAAISgxKvH7LjP7rrQ7rzS773T77/U8MHV8MLW8MTY8cbZ8cja8snb8svd883e 88/f89Dg9NLh9NTi9NXk9dfl9djm9trn9vP3+////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAABACwB AAhFAAFcsGChAoUJEiJAeOAggIABBAoYOIAggYIFDBo42Mixo8ePIEOKHEmypMmTKD1iWMmypcuX MGPKnEmzps2bOHPaBBAQADs= ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/toolbar/bg.gif R0lGODlhAgA4AIcAAMnZ7cra7cra7svb7szb7s3c7s3c787d7s7d787e7s7e78/e78/f8NDe8NDf 8NHf8NDg8NDh8NHh8NLg8NLg8dLh8NPh8dTh8tXi8tbj8tbj89fk89jk89nl89nl9Nrm9PD1+gAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAACADgA AAhlAEGA+EDwgwcPHTpw4LCh4QYNGjJIzIChIoYLFyxotEChI4UJEx6IfNCgZIMFCxCoRGCgpYEC BQjIJDBggAABAQIA2AkAps8CBw4kGJpAgQKUDJIycOAAAoQIUCNIkFChqtWrAQEAOw== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/s.gif R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/tree/elbow.gif R0lGODlhEAASAPcAAEL/QsbGxv////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////yH5BAEAAAAALAAAAAAQABIA AAgvAAEIHEiwoMGBAQ4qXHgwIcOHCx1CnEhQIkWKCTMCsHjRIMeODD+CVChypMeDAQEAOw== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/img/icons/quiz.png iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0 U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ+SURBVBgZBcExbFRlAADg7//fu7teC3el QEoMgeDkYDQ6oMQQTYyGxMHZuDA6Ypw0cWI20cHJUdl0cJLIiomR6OACGhUCpqGWtlzbu/b97/3v 9/tCKQVc/e7RRXz+7OrSpUXbW7S9tu8ddv0M+3iCjF1s42v8WAP0XffKi2eOXfro9dMAYJ766SL1 092jfDa17DfZgycHfvh7/hau1QB9161PhgE8epoNQlAHqprRIDo3iqoYDSpeOjv2zHRl7atfNj6L ALltJys1Xc9+CmYtTxtmR8yO2D7kv4MMPr7x0KULK54/NThdA+S2XTs+jOYN86MsxqBGVRErKkEV 6BHynp//2fXbw9lGDZBTWp+OK7PDzqIpYiyqSMxBFakUVYVS2dxrfHHrrz1crQG6lM6vTwZmR0UH hSoHsSBTKeoS9YU8yLrUXfj+w9d2IkBOzfkz05F5KkKkCkFERACEQil0TSOnJkMNV67fHNdVHI4G UcpZVFAUZAEExEibs4P5osMeROiadHoUiIEeCgFREAoRBOMB2weNrkmbNz+9UiBCTs1yrVdHqhgI kRL0EOj7QGG5jrZ2D+XUbADEy9dunOpSun7xuXMe7xUPNrOd/WyeyKUIoRgOGS8xWWZ7b6FLaROg zim9iXd+vXvf7mHtoCnaXDRtkLpel3t9KdamUx+8fcbj7YWc0hZAndv25XffeGH8yfuvAoBcaHOR OhS+vLlhecD+wUJu222AOrft/cdPZr65ddfqsbHVyZLVlZHpysjx5aHRMBrV0XuX141qtnb25bb9 F6Duu+7b23funb195955nMRJnMAJTJeGg8HS0sBkZWx1suz3Px79iZ8A/gd7ijssEaZF9QAAAABJ RU5ErkJggg== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/tree/elbow-end.gif R0lGODlhEAASAPcAAEL/QsbGxv////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////yH5BAEAAAAALAAAAAAQABIA AAgpAAEIHEiwoMGBAQ4qXHgwIcOHCx1CnEhQIkWKCTMCsHixo8ePIEOGDAgAOw== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/button/btn.gif R0lGODlhEgDYEPcAAAAAAP///3KTvnSVwHOUv3WWwXSUv3aWwXiYw3eXwoCiz3mZxHmZw3qaxIWn 1IOl0YKk0H2dx3ycxoiq14ep1oao1X2cxnybxYep1X+eyH6dx4CfyYus2Iqr14KgyoGgyYyt2YSj zIOiy46v2oemz4alzoWkzYmn0Iqo0Iyq0oup0Y2r05m544+s1JGu1pCt1Z++6J6956HA6Z664arI 8XyfzH2gzX+izn6hzYGk0ICjz4Om0oSn0o2v2pCy3I+x25O03pKz3Ze44Za34JW235q75Jy85Za0 2pm226XE67fU9rnV9rTJ4rbL5Mnf+sXb9sXb9cTa9MPZ88LY8s7k/8zi/cvh/Mrf+sje+Mfd98bc 9sTZ88/l/87j/s3i/cvg+8fc9tDl/8nd9pbE9ZjF9ZrG9ajN9arO9azP9q7Q9rHR9rPS9rXT9qXA 3bzX9r7Y9sDZ9sLa9rfM5LnO5bjN5NHn/7zP5b7R5r3Q5Y3A9Y/B9ZHC9ZTD9Z3I9Z/J9aHK9aPL 9aXM9brP5dLo/9Tp/7/S5tXq/8DT5tXj8dLp/9br/9fs/9nt/9vu/93v/9bs/9jt/9nu/9ru/9zv /+f0/93w/+Tz/+X0/+j1/+r2/+fw9+f1/+n2/+v3/+r3/+z4/+76/+36/+77/+/7//D8//H9//L9 //L+//P+//f///39/fz8/Pv7+/r6+vn5+ff39/T09PPz8/Ly8vHx8fDw8O7u7u3t7ezs7Ovr6+rq 6unp6ejo6Ofn5+bm5uTk5OPj4+Li4uHh4eDg4N/f397e3t3d3dzc3Nra2snJycTExMLCwsHBwb+/ v729vby8vLu7u7m5ubi4uLe3t7a2trOzs7KysrGxsbCwsK6urq2traysrKqqqqmpqaioqKenp6am pqWlpaSkpKOjo6KioqCgoJ+fn56enp2dnf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAOgALAAAAAASANgQ AAj/ANEdQ4bsGDp0SmjQUHKQyYwZTAQqCxBA2bGEmjQtZHKkTZsjTCa+elWRhqZKlTQeacKyyRFl r2jReqXsCKJFixAdcQGmJxgXx2DSPMYRkU4mHMWIASkwWTKD6JggQRIx6tSIBLNq3aqVotevYL+O HEu2LFmFaNOqTZuqrdu3cN1amku3rl26D/Pq3avXo9+/gP+2HEy4sMzDiBMjNsu4rNPHkCNDxkm5 suXKdzPbTcK5s+fPnX2KHk1aqenTqE9PXc26NWtsAWDBCoCtByqUqHp8GPxBW4BYsQJo43DKkaNT HDLIWS4nw7bfwbd1MDVpkqkOEehopxOhG/QA3TBQ/7eOQcKc83MkfAsgS1aAbw5KNWpUykEDQfgF NQDH3j24HaVIIkkpOzBgx4F2MCBOfwGIkwMpApKSQwJ4VIhHAuQwSI4CpEQSCSkKFHDHiHcUUE4A s8wSQDk4kMIII6TgYEAhNBZiwDkoqnhODaNAAskoNQhwyJCHCIDjMccEsOMoU0wBpAB5RJmHAOYE YIwxAZhjwyhSSDGKDQToIaYeBGR4ZQDk3CDKFluIcsMAe8S5xwDjBFBMMQGMowMoUUQBig4H8CEo HwcsSAwxDUIQChRQhAJBAmNEOkYC4QQwzDABhPNAKFpoEcoDCJAhKhkIrHfpezyE0lMoPCxQxqtl LP/gjSrCCKOKNxV8kkUWn1TQQB/A9tFAN6oEE4wq3VDwCRZYfELBBX5E68cF3KgCDDCqcDPBJ044 8ckEFvwh7h8WaGMttsN1csUVnXCgASDwAqJBNqr88osq2YDQyRdfdAJCBoEEHEgG2Kziiy+rYDOC J1ZY4ckIG5ghsRkbXLNKL72scs0PnlRRhSc/eHDGyGd4YM3FGVvjQyZeeJGJDyKgITMaIlTDCi+8 sFJNEJx00QUnQYSQxtBphEANK7vswgo1QHBCBRWcAGGCGlSrYcI0reiiSyvTEIEJF1xgQkQJa5S9 RgnSZL21NENgEkYYmAxBAht0s0FCNK3kkksr0Qj/gUkddWAixAlKFK7ECdC0ggsurUDDwiaDDLIJ CygsYfkSKDzjyi23uPJMEZQkkgglRajgxuluqODM5p07YwQlhBBCiREpvGH7Gyk044ottrjSTAyX GGLIJTGsAMfxcKzAjCu11OIKMzBcoogil8DQQhzYx9HCMjHNtIwMljzyiCUyvPDE+U+8wL1Mr3wf /vjlo5/++t6DLz755qOvfvft2w9//ufbH/vcd7/46Y9+/Xsf/uQnwPop0IABRCAB/8dACfpvgQfk 3wQxGEENXhCC8/PgAwEYwgF+kIQNTGABUWjBEVZQhCt8oQldmMEZxrCGDrxhB21IQRyqsIc7zCEQ /0soRA4S8YdGTOEGQajEE8qwiExsoQ6PuEQWwnCITaRhEJEYxSsmUYpYBOMXvdhFHo7RjGWEohXR uEY1PpGLbYTjG6s4Ryf6kI53tOMW8bhHPVLRj1mcYiDDSMY48vGPWkSkIMWYRjnmMZGDPKMbH7nI QtYRkow0JCAzeclKsrGThPwkJUM5yT5i0pKjlKQjTenJUiqSlKt8pSoPGclG0pKTqbTlJlHJSlje kpey1OUpRdnLWe6SmMHU5DBdWUtltjKWzQSlMZcJTVwWU5jP/CUyo5lLZ/rymMy0ZjKlic1vUlOb 4QQmN6/pzWlmE5zVVKc41znObpKzneV0pznfef9OeKIzntucp0DlSdCAFjSdBk0oQhcKUIb+86H+ jGg/J8rPiu7zovrMaD43is+O3vOj9gwpO0E6UpHWs6QoPalK6cnSgSq0oTCFKEUxylGSrtSlDpWo RTXqUZO29KAx1SlNe5rSn75UpjutqU9xGtSZ8tSmRs2pU5VaVKYidahQtapQn7pUoF6Vq1X16lap elOxTpWoZT3qWNEa1aYmla1aPWtWzfrWuapVrl29a13zKtW9hlWvWOWrWwP7174SNq2GBStiB6vY tn6VrI5dq10TC9m4+nWxj4UrXQ8bWbwWlrGV3WxjLctZ0o5WtKEF7GlVm1rKapa1r3XtZEEbW9r/ zjazt5WsYHG7W91+lre/9S1mhdvZyxa3tKitLXCH61nmGte0rbVtb5t73NXKdrrPTW5uqQtd5RK3 u9vNLmzDi9zxYre81w0ud7V7XutKV73iTa9z0fve+bp3udWNLn7B2179fpe98KXvfgFsX/+u17wB vu9/EVxg7x5Yvvl1cHzrG2HyKvjBFOZvgg084QEzuML9lbCAFwxhDTfYwhweMYY9XGICg3jDIr5w h0mcYReb+MUnDjGKY5xiGat4xiumMYtr/OEbG9nGSC5yklus5CYz+clEhvKQpyzkKgf5ykDO8o+3 7OMu9/jLPA7zjses4zLDmMxnNnOO08zmNbsZ/8dwPrKTo0xnKmOZy2BG85vlLGUra9nLYlZznJdc Zz/jOdBtHvSc7fznPAuaz4W+M6D1rOg+S9rRiYY0ow9NaU0betKPJvSmQZ1pUX8a03s29aURnepF n5rVlY50o2Ht6VV3WtWzvrWrbR3qXee615b+dal9zWlgy7rYww42slutbFIz+9jOjvWoUS3tV+u6 2dSutbCfPW1a43rZ1eZ1sqGd7W9HW9vgRve5zV1uYq/b3e3GtrfhPW95X5vc9cb3vbu9b2sbG7+y CbjABy5w4Bj84AhPuMIXzvCGt+fhEI+4xCdO8Ypb/OITT5HGN87xjnv847NAkshHTvKRX+nkKP9P ucpXznJj3OnlMI85zA9F85rbvOaXyrnOd87znvt8GLUKutCHLnRjGf3oSD/6tZbO9KY7/elQB4a9 pk71qlP9YFjPutazjrGue/3rYA+72HuBs7Kb/exmT5ra1872tWvt7XCPu9znTndd6O3ueM873hfH 9777ve+cC7zgB0/4whv+FrxLvOIXr/jmOf7xkH+8YiZP+cpb/vKYz7zmN8/5znv+86APvehHT/rS m/70qE+96lfP+ta7/vWwj73sZ0/72tv+9rjPve53z/ve+/73wA++8IdP/OIb//jIT77yl8/85jv/ +dCPvvSnT/3qW//62M++9rfP/e57//vgD7//+MdP/vKb//zoT7/618/+9rv//fCPv/znT//62//+ +M+//vfP//77//8AGIACOIAEWIAGeIAImIAKuIAM2IAO+IAQGIESOIEUWIEWeIEYmIEauIEc2IEe +IEgGIIiOIIkWIImeIIomIIquIIs2IIu+IIwGIMyOIM0WIM2eIM4mIM6uIM82IM++INAGIRCOIRE WIRGeIRImIRKuIRMWIIo8YRQGIVQaBxUWIVWWIXVkYVauIVc2IVeOAnzEYZiOIZiKCBmeIZomIZq uIaS4CFu+IZw+IYvMod0WId06CN4mId6mIdN0od++Id+2CWCOIiEOIhscoiImIiI2CeM2IiO/9iI jBKJkjiJktgplniJmHiJpLGJo7ErnviJoPiJzDKKpFiKpNgtqJiKqpiK69KKrviKrsgvsjiLtDiL DXOLuJiLuOgxvNiLvtiLLROMwjiMwugzxniMyHiMT7OMzNiMzAg20BiN0hiNb1ON1niN1gg42riN 3LiNkfON4BiO4Cg65FiO5liOsZOO6riO6ig87viO8PiO0zOP9FiP9Cg++JiP+riP/NiP/viPABmQ AjmQBFmQBnmQCJmQCrmQDNmQDvmQEBmREjmRFFmRFnmRGJmRGrmRHNmRHvmRIBmSIjmSJFmSJnmS KJmSKrmSLNmSLvmSMBmTMjmTNFmTNnmTOP+Zkzq5kzzZkz75k0AZlEI5lERZlEZ5lEiZlEq5lEzZ lE75lFAZlVI5lVRZlVZ5lViZlVq5lVzZlV75lWAZlmI5lmRZlmZ5lmiZlmq5lmzZlm75lnAZl3I5 l3RZl3Z5l3iZl3q5l3zZl375l4AZmII5mIRZmIZ5mIiZmIq5mIzZmI75mJAZmZI5mZRZmZZ5mZiZ mZq5mZzZmZ75maAZmqI5mqRZmqZ5mqiZmqq5mqzZmq75mrAZm7I5m7RZm4BZGLiZm7pZGMzRm775 m9sRnMI5nOhRnMZ5nPmRnMq5nAjSnM75nBYSndI5nSRSndZ5nTWSndq5nVLSnd75nWMSnuL/OZ5y Up7meZ6Dkp7quZ6S0p7u+Z6jEp/yOZ+wUp/2eZ/Bkp/6uZ/S0p/++Z/jEqACOqDxUqAGeqACk6AK uqAT06AO+qAkE6ESOqEzU6EWeqFEk6EauqFV06Ee+qFmE6IiOqJ1U6ImeqKGk6IquqKX06Iu+qKo E6MyOqO3U6M2eqPIk6M6uqPZ06M++qNAGqRCOqREWqRGeqRImqRKuqRM2qRO+qRQGqVSOqVUWqVW eqVYmqVauqVc2qVe+qVgGqZiOqZkWqZmeqZomqZquqZs2qZu+qZwGqdyOqd0Wqd2eqd4mqd6uqd8 2qd++qeAGqiCOqiEWqiGeqiImqiKuqiMp9qojvqokBqpkjqplFqplnqpmJqpmrqpnNqpnvqpoBqq ojqqpFqqpnqqqJqqqrqqrNqqrvqqsBqrsjqrtFqrtnqruJqrurqrvNqrvvqrwBqswjqsxFqsxnqs yJqsyrqszNqszvqs0Bqt0jqt1Fqt1nqt2Jqt2rqt3Nqt3vqt4Bqu4jqu5Fqu5nqu6Jqu6rqu7Nqu 7vqu8Bqv8jqv9Fqv9nqv+Jqv2BoQADs= ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/box/tb-blue.gif R0lGODlhAQAqAIcAAKLG9KTH9KfJ9anK9avM9a7N9rDP9rLQ9rXR97fT97rU+LzW+L7X+Nvb28HZ +cXb+cjd+czg+s/i+tLk+tbm+trp+9/s++Tk5Ozs7OPv/Ojy/Pb29v39/QAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAABACoA AAgwADdcAMBBg0ENDhI62ACgAQYNGSxUoEBhgoQIEB44ABBAwAACBQwcQJBAwQIGDgICADs= ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/grid/loading.gif R0lGODlhEAAQALMMAKqooJGOhp2bk7e1rZ2bkre1rJCPhqqon8PBudDOxXd1bISCef///wAAAAAA AAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAAMACwAAAAAEAAQAAAET5DJyYyhmAZ7sxQEs1nM smACGJKmSaVEOLXnK1PuBADepCiMg/DQ+/2GRI8RKOxJfpTCIJNIYArS6aRajWYZCASDa41Ow+Fx 2YMWOyfpTAQAIfkEBQAADAAsAAAAABAAEAAABE6QyckEoZgKe7MEQMUxhoEd6FFdQWlOqTq15SlT 9VQM3rQsjMKO5/n9hANixgjc9SQ/CgKRUSgw0ynFapVmGYkEg3v1gsPibg8tfk7CnggAIfkEBQAA DAAsAAAAABAAEAAABE2QycnOoZjaA/IsRWV1goCBoMiUJTW8A0XMBPZmM4Ug3hQEjN2uZygahDyP 0RBMEpmTRCKzWGCkUkq1SsFOFQrG1tr9gsPc3jnco4A9EQAh+QQFAAAMACwAAAAAEAAQAAAETpDJ yUqhmFqbJ0LMIA7McWDfF5LmAVApOLUvLFMmlSTdJAiM3a73+wl5HYKSEET2lBSFIhMIYKRSimFr iGIZiwWD2/WCw+Jt7xxeU9qZCAAh+QQFAAAMACwAAAAAEAAQAAAETZDJyRCimFqbZ0rVxgwF9n3h SJbeSQ2rCWIkpSjddBzMfee7nQ/XCfJ+OQYAQFksMgQBxumkEKLSCfVpMDCugqyW2w18xZmuwZyc dDsRACH5BAUAAAwALAAAAAAQABAAAARNkMnJUqKYWpunUtXGIAj2feFIlt5JrWybkdSydNNQMLaN D7pC79YBFnY+HENHMRgyhwPGaQhQotGm00oQMLBSLYPQ9QIASrLAq5x0OxEAIfkEBQAADAAsAAAA ABAAEAAABE2QycmUopham+da1cYkCfZ94UiW3kmtbJuRlGF0E4Iwto3rut6tA9wFAjiJjkIgZAYD TLNJgUIpgqyAcTgwCuACJssAdL3gpLmbpLAzEQA7 ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/tree/elbow-end-minus.gif R0lGODlhEAASAIcAADFKY0L/QpSlvZylvZytxqW11qm92r3GxrnK5MbGxsbW69jh8efv9+vz//// /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAAEALAAAAAAQABIA AAhmAAMIHEiwoMGBCQ4qXHgwIcOHBRcQmDhggAABBw4ScMCRYwMGADR2dPARQUiDGz0yWGDgZMEB DgDIlNkygMOBAkiuXKCggEuCAj4u4InA50EBDBQgMFCg6c+BB2ZKzQixqtWrEAMCADs= ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/img/icons/help.png iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0 U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAOHSURBVHjaNJNbbNtkGIZf/7bjJOTUNZnS pe0WVkWlWrfRLax0ZeKwoiJVqhAMpE2aGGdxMYQ07uGGC04XXCBAHMQkhIbYBRqHIoE6CUrZStQu SbtlKWtL0wNJ05zs2E5imy+p8IVt+f++93/e9/vNZRamYJrAliqBEwVsF+T+fEk/U6yYx/NFNVRV Va5cKmWW/16YGjgQ+uqxkeFE9L5B/H9xTQF6YK3IxLWC+abb432tO+S38zyDrGgoyxpMC6g3LMwm bmul3Op7r7586o2Av72xIzA/hapuSsl14eujA72PBwMeJFMZ/Dm3hNnkCtY2C5BE4ECkAw8O9SOb V5BKpS6ff37sdJvPW+PmY79jKce9E40euuC0C/hxMoHFlSxcTglBvwfZbRnXZhcxl0gjGHDjlbOj 0OpAVS6+e+7ph17nx5964XBHqPOLcGc7+/anGNJLWYS7/BgfOQS9bsDrdmBooAeqpiNx8x8kby1j 5MRBbGzJgwK0H5huis/27u/gY4S7nNlCjZoGD4epMIMPL07i7Y8mIFd1PHDsHqKytYgmJv9CT3gP m09vPMecTsewIDAspNcpKBMWJfbN99fx3S83UKIABYFHZ7CNJmWC4zg4JAnxhRWK3SJCdr8g2cSg RqbyRQWmYcIwDaxuVqlZJc9evHT6BPRag3adQ93kwNNmiqqDxgsTfEBoqjYMA3VCN5rzoksUefCM w7lTQ7DR+/ufTuD2nXWIRNMkaVXRzS7ZOFYoK9kmpkSzMponiuAYmosidrfvjHRpNU/NQkvcJEK7 TYDb5cAurz3P5ErlD1nR0dMdQNMK9YNjrOX34uUp/HY9RTRsZ0vLohodkbv3oM3ngfcudo1FOl2f zcSXzaP9e+F02MhbjU7eTpiPHO/DsXt7qK9O+RiUhU41IsZORqEoKkIB8XPWF+mKwah9ML+4iSdH B6BrNWQ2CiiUq0imN5DbKqCmqShXKmQDePHMo/B6ffRN/iS8r2OasywNqqpJl67ELrXt8o/73HZM XI0jfnOFfqwyGnUNDjqhvftDGH04CsnuRKnw789jJ/ue8HhcCglkyR+PSqFsu/Lrrbe2FeH83q6g aBGyUq22grPbJYg2qUljumz1j0eGuy742kVaNEACuVbyGs1dIK8z8cyR6Rtrz8iaNcgxcTejNJ1O KedxcjMHI4Evj/R3TxtUJzqMlvh/AgwA6+OrKS32ECwAAAAASUVORK5CYII= ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/window/left-corners.png iVBORw0KGgoAAAANSUhEUgAAAAYAAAEsCAMAAADXUjKeAAAAB3RJTUUH2AsHFCMH41zUJAAAAAlw SFlzAAAewQAAHsEBw2lUUwAAAARnQU1BAACxjwv8YQUAAAASUExURfDw8IigvqO0yurt7czZ6Obp 7R8WhkIAAAABdFJOUwBA5thmAAAALElEQVR42u3WURUAIAzDwHZj/i3TPWSQ/JyFSN7kmiTPSQDw PQ0AEKqT3ixc2QQYefSBx54AAAAASUVORK5CYII= ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/window/right-corners.png iVBORw0KGgoAAAANSUhEUgAAAAYAAAEsCAMAAADXUjKeAAAALHRFWHRDcmVhdGlvbiBUaW1lAFdl ZCAyNSBBcHIgMjAwNyAwMjo0NDoxNiAtMDgwMKcuQjMAAAAHdElNRQfYCwcUIwaUW+SyAAAACXBI WXMAAB7BAAAewQHDaVRTAAAABGdBTUEAALGPC/xhBQAAABJQTFRF8PDwiKC+6u3to7TKzNno5unt LuyqiAAAAAF0Uk5TAEDm2GYAAAAsSURBVHja7dbBEQAgDITASzT9tyyOZQifbYHULRlalU0jIkIt It/TxB68WTi/0hfjs9KDYwAAAABJRU5ErkJggg== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/window/top-bottom.png iVBORw0KGgoAAAANSUhEUgAAAAUAAAEsCAMAAAA8ZYmdAAAAB3RJTUUH2AsHFCMEelWFngAAAAlw SFlzAAAewgAAHsIBbtB1PgAAAARnQU1BAACxjwv8YQUAAAAPUExURY6kwePp7c7Z58zY5+bq7TZN J7MAAAAoSURBVHjaY2AAAxYQYGAGgVGSBJIJBEbJUXKUHCVHySFGMoIApAIEAJi/DKmCWNPhAAAA AElFTkSuQmCC ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/window/left-right.png iVBORw0KGgoAAAANSUhEUgAAAAwAAAAFCAMAAABGpP0dAAAAB3RJTUUH2AsHFCEUVdT3eAAAAAlw SFlzAAAewgAAHsIBbtB1PgAAAARnQU1BAACxjwv8YQUAAAAJUExURY6kwePp7c3Z6J/ECzwAAAAS SURBVHjaY2BgZIICRgYGMjgAC64AWxzNSM4AAAAASUVORK5CYII= ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/panel/tool-sprites.gif R0lGODlhHgBoAYcAABwfKS81RDQ6TTlBVDhDXD9IYEJJXEFNZkJPaUFOb0ZVd09adE9ce05cfldi fl5mcSZDkC5LlS9MlTJOlz9ani5fpjJVsjppqj5qq0VNhEZZgU9fgU9YkVFYikFcoFFhh1VliVZm ilZqlVliklxtlVlwnl9xmURtq05pqURwsF9roldxrFd+u2FnkGZukWF0nmt1nWJtomd4omZ6pWd6 pGd8qGl8p255p259oml9qmt9qGR9tXJ/oHJ9rHJ/sXF/vVF/w1N/wUD/QFCAsFaFtFeGtFmHtV2E v2iAtWuFvG+IvGSQunCDsXGFtHCGtnGGtnWDsHOCuHWDv3KJunOKvHWLvXqItXqKt3qJu32Mv1SB xFWDxluGx12IyGGKx2CJyWGLyWKLyGWNymiOzW+LyWyLzWiL026K122L2myN3GmQzW6TzG6Ywm6X 1HeexHqQyHGY0HOZ0XOa1HWa0Hee2Xmc1Xie2Hif2Hmf23uc3XCP4XGg3Xmg2Xqg2Xuh3Hyj232j 3n6l3YS/UYS/VJjJb5nJcYOPt4aUuYSVvIKTyoOUyIOUy4mZxImZzICd24ud0o2f1ICmyoSpyoSp z4mtz4yvzoKk1oCm3YWi3YWo3Y6g04ih2JGgyZSl0ZGj2pao0ZWo3Jmo0pqt34Gn4YGn4ouk4Iym 4Yyv5JCs6pyw4p6x4p+y45+z45m76Ja2/5m2+Zu5+6Kx0KS52aK246G15KC056S256O456S54aS5 5Ka56qe86Km+6p7A/67B3qvA663D6a/E7a/F7rPO5LPN7bXM8bbN8rrT6LTS/7bU/7vS97/U8bza /8fuh8fujNf0otf2osLX8sPX8sTb9cbd9sHe/8jd9srf98rg+Mvi+crl/87i+M/k+9Hm/NTo/tbq /93s9dnr+tns/9vu/Nzy/9/x/t/y/v//3eXx7ebx7ebw7+bx7+n05Ojz6uHy+OHz/+b2/+rz8+31 8+r5/+/9////4PH4//f7//r7/fr8/fv8/fv8/vz9/v39/v///0D/QCH5BAMAAP8ALAAAAAAeAGgB AAj/AP/9a0WwoMFWAgXuWciw4Z6ErfxJnEjRH8J/e7hp3MiR28OIFUNazCiSoseI9OitSslyJb2R 3FK6bJnypL95qyCsmscz506Y/nzyxKlznk148Hwm1YkUaFCmPv3Bs/muqk+dVd/BrPo0alWbHH1y hLmxqz+OeyJ2W3t11dpuMNd21elvrU1v3nzm1YkXpjezUb3Z/Obzm+HCQKN+M2tTnLhVjiNDFgeT 8ip/kYNitkkvsmfHL1tl7IzZM2Z6HgeWnHgxY8eODwUenJ0Qo0OHtWcfrH0bt+zVElu/hq0aeHCS wDmzXM4SJvPnNodKlw5zuvWjSLNrhwdzu3eqWcNn/90qXjzY4WVFlw25MW3dbqviy3cLVz3c+fLr 3vUGob9/CH2p99d//vkjmHuH4beKYTAtpuBl3zT22WeV/RWSN+JwNmFkoY22IWipgbSacOhpFNtA uhXEW28M5ZYiQSuyeKKIJZFY4kfGHceNcco915x6Pi4XnQVEFlnkPEAR+N9Z7sFj5JPcqeePkgVS ZUF571yZpEgQMBkRNxYMF+aWHU3pZV0WvKVmmluqCVeXd1mA15x4ybllSHAi+KSRi0lJZX9nfpiZ lMm519mHHcYkKGo4AmcjejO+eJFCMp6I4osxsgiRcY8O1yinyK3WY5DOpSQSoxENtacFSKrH05RK nv+ZnQX4WRBlRk3pNF+eEWV1ZXhaqscVBOLxetaqYO7op5LcGNsNrfMVWR9JuspXpXveyEmntn/5 aWBfXRo4mAWGlUsug95S1KVhja06KLWxOqYhos6JBOKnNSpUookQSZppby5imlClM3Kq7774jhhq SaP6WGqQqN5kHXWuUjcddrNu1112ZmoHXlVFhkeeVgVmdR6YRqbn2o4EnmWiWs/uKZd9sLbczX50 5uyXhRXhNVi5QJfbYNBBSyhoZYJmaOiizi0aosEY7ZuabP4OXGnAKf5726aOHnxjcaDuWChKECda dsQTU5xR2kNh7F1T6jUVElLgrcqVsDUv+c7JT6r/XFbL7cG8lrRvxSVXgW/hXKfOAs5pJp0/Ey20 epIDbfSHSAs674ZmO51wSJ2+FqnAlMqItW5a+wZ2vlEjvLrCYotqKEuJJHLIcg/TU/vtLEU3zyeM APNILlak8mrFwAtPvPFGNQkPLsUIYwwvmigCN67PRz999XS7V1UWwVzBQyO3RHF3Rt+HP375X7nH DRbK/AIFN53QkogLyroGv/z024+/Td3Aggp2MQtPpEIUUhjBtLgRwAEW8IAJvBm2vOEDVdSCFaCA xA0ClBG8VPCCGdzggSJiGBh0IAaL4MAPeoCujJTwhClcIbvc4xlDZMAQsXgXN2p4wxzKa2n0ApLn /14HOq9Bql+ks43pkJg1qy2RiBUJHXFoBDsezQ5iuTOVkNxjHVYNpTrUsYDEmheR7RBJOxtrCpGk 0r1e+YpIIhMWV4rkD5O5TyMp85tG/GEkl73sPYMjkpoMBxc6Jm6CcyISnXbWlzXOKXLmAtrQhCbG cl1uQ5nLjGc2N6HOIeppXWvd16iWRIKdjjZO1NRvQrmyI1KxRgsTScOekzt/QIeLqrIOGJEkxos5 DylnRGPc1ChGj3nvjb86HzfGQ0c7fmkjeczfWPoYOEDGLE2Fs49cDGkXRGaLWxzkhuMc+UgERTJo k+SjP4pGw6RlsjSbBCLnmvbJz0XRiJ5iIupSCf8wfaKydKqEIkWkiBaBRjGW7LmiQ340mpQQqHe4 nMce4MGQL1ZsHhCAh3/a9suJMoRjw9SoRvuTnY/t4R0MGY8c30Es/zjTjxlhiB41AoFm9QctgttD NxiSzYy8BQLd8M8hI4KX3oQTL1TymTnLtQdiSJJyQIOAUy3Zzsg01TTq+YxU44kSz1wVNPR0zFbv ZdDg4FN0/twNP7eWVoOkriFcG9FZp5gjp8iObFgEUtl8N48hTGyXEJgYxoZA2MIO4VbcyA6VpnLM dwxBPI8dGbHCQyybGPayQ5Dmn25qE2J4FrNDWKBniUElCRIVL6DtVgeRqqQRrtMwQ5DcJCEguUv/ TiiTG+LkZzzJOVDKVZRHJGUTAdpP4e6TuGwtq0XmWtBXioRQd7Vl2bJ4y1T1dSh+tejaMDqUwHK0 jPAgLFLEe73EjhQpJG1jHatCWPY+Visr7U9V5Lu3O2qEsPfNLFk2wlnOuucthF1LgBf4U6AG1cD7 ISxqh+C4xvWHteUk4TdiC9unuvAbtDVMhmcYkaRRJqtJ061neNtJ37Kulfk07j+VGNBLDZfFxXXu QJnbHuXqyIp4JZVeIcbX6/Iku7vkLk+8O9jDhtfIaUxvesHTXse+F77oY+lk6VvfL+GXG1feo3ps StOa4vQ9Ax4wgQ+8lv4M9VveUHCaGaxacUKY/z8Aci3QKDzhFnIjquXKsG0pBGLNybOTYS2xPWcM 3BS7+LgwTu6hV2zKVf4WxWiV8UFjx7Ar6rihPMYlYbEL5Ir1p7tE/qV4yYtYxWY0vYx1o3ufDOVl ZsWlL+1IZseyZY54+csCDm2uZ+ZTMpcZwYhUsJrbPKcHP1ipEoYtYS185zz3x3JVdcwQ+JwRrX5G xBwK9G5N/Fwa80vFakWu6hYd7kSrTtJmLXSk6wrdSueYHkNgThYhwJweF1Zt3JDORr/LxiP7u7ym Pq963ZuVJpOHyvQ92X3LVGv+ik5w3SjsILX5awN387RrzvhRIXxsOU+Yzsvu04WfrWE9RxuTff/+ ELbBKsR6KpegNQa3W9c6bklNytxwdfSJpTboSeNYusuJN0Njwhx6Q9S6PPlsdlu13aST1rtkZCMx MAtweDz9PwN3bMGffPBXT7bKLiMGlscudmlqROw1rWnZAbhrAfOagb/+6cW/hVlibFxJdvf4xz3L bGfznaodjsy0qb3DyEBgQisXB4m33fN0Q5o4MlcRzXMeeRhNvkU677a66ZqjdsvS0g7bcZB6vI09 bAPf0tnGEE7Pb+2ofhvCxB5StgEB2Jf0mNvI/epzr8yq5J72v2/fM/dwWdfsdwgEmjXbpcH8ITBf Gm9fy/Mh8Py500kazl9k4/AiDepDbqnfkMb/HqTR93Jhn/yAhyfmUp7bP+9W2yPmdhE3X9DK37zR 9n8r5l/ubfk/F6EVMUvyJno+0mN/dVFp4zZvk0Zvk2rr9XsQ2HvvAIHBB3YmUnxatjLI9x/K91/d 8HwgGH0fCILMZ305wzirdYIR9lqVI3LN1oJ7hlXVFmLuN2LwxyH+R2iPV3/kNnPiRnk9KHk/uH/o tlz0V2NFeGNjA3RPwAT0YAM4MHQs0YRPGIU1gUvagAoMQA4NsAm6cDzblYVb2IVfGHVIQQNvkACl oAGOoABVh4ZqyIZu6IDvYAsg0AslQAYi4AofwAmtVod3mId72IcWqAMvsAELEAoFgAAEEABm/2eI iKiIjOiIANQE1QALiNANMoAMr+AABGaJmKiJnOiJd5EDzOAED+ANM5AMVSAAxGaKqKiKrOiKg0EC sFADB/ANIWAKJgAALvgNtoiLusiLvtgYB3CMByAOxzgABvBh1YaMybiMzZh4ixd/jWeEOxhzQWh5 Q7gQp1Ru+FeEMMcvSWhX7mZLbQAHljAGajAHcRAGX2A26biO7fiO8RgdXOAPayAR92APp+AFTJdv +biP/tCP/2iGXZAP+9AP/IAP+pAJQVBqCbmQDfmQEUkVYhAIl/AHfcAHd2AHR/CHGbmRHfmRIQkW YEAKowAIfoAHdCAHLGB2KbmSLfmSMQlAWv8QD+mwDuqADvJQBylAYDm5kz35k0F5F0DQDoJACIUw COyQBxdAbEm5lE35lFE5GFtwDs3wDNDgDPWACRjwi1m5lV35lWHZGC1gBnqQBmhwBmVwAhXgjDuU lmvZlm8Zl9R4g2Qljv03Oi+Gf9t4f1eTefOXjeTIbgBoErPjDpJQBEtQCe4ghfQADkggARQwBeBw dBJTCYblBtqVb/NABf+xAq0HD0swBMNwDENgBCCFPR4AAbLgCxAwAbenauNgDpEwBJSgUlH2DuFQ DjsAAUoQaxsxCUPABtgwUxqRBBCAAtaAa29BBESQDRPXa2sRARFwDWqiONNADSjoZnixDNH/kDOQ FHKTc2Elx06B5xiTMAmE5xlUQAXXVoPZ1nK9dY3jODWBqX/e2FZCiHNECDWGmYM+t4QpAQQICgSA gDt6hQIOigILqpk8AQQToaCfyRMoMBEQWpoUKhGAoKBVl6EeCqFZ16EVKoERUBERIHxn0QoqyZIu CZNmtwfxWaPx6QF/1A1aADpBGRciShF7AFRIqZRMOQjI0ApR6RcoQKRNiQxBKmdbgAxSOqWtEJYN ggJTOqVBGiE0BAhqyZZueQJpIJfiAAUPip394QFK01VB5CEux5dH+G37eXn9KQRCQDB2aqd4qqc8 x6cIc6eU9nmJOREekRFA0IDwwCgZYSsN/6io3JCg8JCghwoPzbOoZ2QkSFGpj5odWXp7i5odDeGp m9qA9fWppFqojyqp3iCpJmKpRfJNRNKqbgYEc5KlErRa3NIQtzqrKngguNqrqIoXCbqqCOoNXIqr ivSqx6qCU4ohhaqCDOGsC6Eo9eSm9wmof4qtN5Kne6qnlZKnd/qt3Cqu2gopfrqtgyoRqGpFhoqo jsqob+OoCEpRt6GpZ9QbmjqpDYiq8Po2qKqv3lGqYIKoAougO3UbsipIvSGrQGAXr7Gr2DQcu9qw bvIWvgomFWux/9qwt9ENx4oyB6ury5o4HdENSrMH3kCyHGGyqHoo92mtglaunnKu5uqtMgUCrnsa EAA7 ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/qtip/bg.gif R0lGODlhCQBOAIcAAN/o8uDo8+Dp8+Hp8+Lq9OPq9OPr9OTr9OTs9OXs9ebt9eft9efu9uju9unv 9urv9urw9+vw9+vx9+zx9+3y+O7y+O7z+O/z+fD0+fH1+fL1+vL2+vP2+vT3+vX3+/X4+/b4+/b5 +/f5/Pj6/Pn6/Pn7/Pn7/fr7/fr8/fv8/fz8/fz9/v39/v3+/v7+/v///wAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAP8ALAAAAAAJAE4A AAj/AF8IHDjwgMGDBxMoXMiw4UIFECNGXECxYsUGGDNq3JjRgcePHyGIHDkygsmTJyWoXLlygsuX LynInDmzgs2bNy3o3Lnzgs+fPzEIHTo0g9GjRzUoXbp0g9OnTzlInTq1g9WrVz1o3boVxIevYL+G AEG2LFkRaNOmHcG2bVsSJNy2NWGihN27JU7o3bs3hd+/f1WoAPx3heHDh1koXrzYheMWkCM7nuxC cuXIkBlrRsx5BeHPgFGI5ksaL964clOnVsvarOuwsLnKxkqbqm2ouJnqRsqbqG+gwHkKx0mcpnGY yFmyRMmcJMkHD0BK50gdI4PrFrNL3O5wIYLv4MEbIBhPnnyB8+jRE1jPnv2A9/DhC5hPn36A+/jx A9jPn39AADs= ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/progress/progress-bg.gif R0lGODlhAQBgAPcAAHOh4Hml4n+p5Hyr7IWu5oay7oqy6JC26pa67Jy/7pC58Zm/86DE9ajJ97DP +bfU+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAQBgAAAIJwAfCBxI sKDBgwgLOmjAYIGCAgMABBBAwMABBAkyatzIsaPHjxwDAgA7 ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/shadow.png iVBORw0KGgoAAAANSUhEUgAAAAYAAAAwCAYAAAAy7wv4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAANlJREFUeNrEkz0PgjAQhltQQVHD5mDi4sLipIMJi///7/iFCuq9+l7S gSNh0SYP195DuPZIvXMuChjo3MsjJkMCGfsgMRJSxqHnRJMTxgQiIWNhSvkRKQUSMyFTsRduwlk4 ChesIXYUSJyEq4oNRUWJeIdYCw8sNIk1xEJohJovgAZiLjxJrfPO7ZoHNFtiNtFsu/mjzO2aBzRb 0tpE7GblvkNr4LONildQo9YaKcmCXqV/F7lrGRBLSxSW2FqitMShtyh7Fy96HzDvKl4FdxCxipwx fiHeAgwAKlpFtigygOYAAAAASUVORK5CYII= ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/shadow-lr.png iVBORw0KGgoAAAANSUhEUgAAAAwAAAAGCAYAAAD37n+BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAAClJREFUeNpiZGBg4IBibiDmhdIgPgj8AOKvQPwZSv9gYiARDAcNAAEG AAwtBRShb5+6AAAAAElFTkSuQmCC ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/shadow-c.png iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ bWFnZVJlYWR5ccllPAAAABhJREFUeNpiZGBgsGBAA0wMWACFggABBgAYjgBCU52H7gAAAABJRU5E rkJggg== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/s.gif R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/img/icons/cancel.png iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0 U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHdSURBVDjLpZNraxpBFIb3a0ggISmmNISW XmOboKihxpgUNGWNSpvaS6RpKL3Ry//Mh1wgf6PElaCyzq67O09nVjdVlJbSDy8Lw77PmfecMwZg /I/GDw3DCo8HCkZl/RlgGA0e3Yfv7+DbAfLrW+SXOvLTG+SHV/gPbuMZRnsyIDL/OASziMxkkKkU QTJJsLaGn8/iHz6nd+8mQv87Ahg2H9Th/BxZqxEkEgSrq/iVCvLsDK9awtvfxb2zjD2ARID+lVVl babTgWYTv1rFL5fBUtHbbeTJCb3EQ3ovCnRC6xAgzJtOE+ztheYIEkqbFaS3vY2zuIj77AmtYYDu sPy8/zuvunJkDKXM7tYWTiyGWFjAqeQnAD6+7ueNx/FLpRGAru7mcoj5ebqzszil7DggeF/DX1nB N82rzPqrzbRayIsLhJqMPT2N83Sdy2GApwFqRN7jFPL0tF+10cDd3MTZ2AjNUkGCoyO6y9cRxfQo wFUbpufr1ct4ZoHg+Dg067zduTmEbq4yi/UkYidDe+kaTcP4ObJIajksPd/eyx3c+N2rvPbMDPbU FPZSLKzcGjKPrbJaDsu+dQO3msfZzeGY2TCvKGYQhdSYeeJjUt21dIcjXQ7U7Kv599f4j/oF55W4 g/2e3b8AAAAASUVORK5CYII= ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/extjs/resources/images/default/tree/elbow-end-plus.gif R0lGODlhEAASAIcAADFKY0L/QpSlvZylvZytxqW11qm92r3GxrXI48bGxsbS59Te8efv9+vz//// /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAAEALAAAAAAQABIA AAhoAAMIHEiwoMGBCQ4qXHgwIcOHBRcQmDhggAABBw4ScMCRYwMGADR2BPBRQUiDGzkCYLDAwMmC AxwAmDnTZQCHAwU4+AhggYICLwkK+LgAgAIEQA8KYHDUQIGnQQceoEk1I8SrWLNCDAgAOw== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED Content-Type: image/png Content-Transfer-Encoding: base64 Content-Location: http://mhtfile/img/icons/accept.png iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0 U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKfSURBVDjLpZPrS1NhHMf9O3bOdmwDCWRE IYKEUHsVJBI7mg3FvCxL09290jZj2EyLMnJexkgpLbPUanNOberU5taUMnHZUULMvelCtWF0sW/n 7MVMEiN64AsPD8/n83uucQDi/id/DBT4Dolypw/qsz0pTMbj/WHpiDgsdSUyUmeiPt2+V7SrIM+b Sss8ySGdR4abQQv6lrui6VxsRonrGCS9VEjSQ9E7CtiqdOZ4UuTqnBHO1X7YXl6Daa4yGq7vWO1D 40wVDtj4kWQbn94myPGkCDPdSesczE2sCZShwl8CzcwZ6NiUs6n2nYX99T1cnKqA2EKui6+TwphA 5k4yqMayopU5mANV3lNQTBdCMVUA9VQh3GuDMHiVcLCS3J4jSLhCGmKCjBEx0xlshjXYhApfMZRP 5CyYD+UkG08+xt+4wLVQZA1tzxthm2tEfD3JxARH7QkbD1ZuozaggdZbxK5kAIsf5qGaKMTY2lAU /rH5HW3PLsEwUYy+YCcERmIjJpDcpzb6l7th9KtQ69fi09ePUej9l7cx2DJbD7UrG3r3afQHOyCo +V3QQzE35pvQvnAZukk5zL5qRL59jsKbPzdheXoBZc4saFhBS6AO7V4zqCpiawuptwQG+UAa7Ct3 UT0hh9p9EnXT5Vh6t4C22QaUDh6HwnECOmcO7K+6kW49DKqS2DrEZCtfuI+9GrNHg4fMHVSO5kE7 nAPVkAxKBxcOzsajpS4Yh4ohUPPWKTUh3PaQEptIOr6BiJjcZXCwktaAGfrRIpwblqOV3YKdhfXO IvBLeREWpnd8ynsaSJoyESFphwTtfjN6X1jRO2+FxWtCWksqBApeiFIR9K6fiTpPiigDoadqCEag 5YUFKl6Yrciw0VOlhOivv/Ff8wtn0KzlebrUYwAAAABJRU5ErkJggg== ----9030E1216D1F6BE3CBA7988BC0FD4664_MULTIPART_MIXED--