Dubai World Cup hospitality and tickets
This Is ES Sport.
The world’s richest race day. One Saturday in March at Meydan, nine races under the floodlights and a closing show to match.
First run 1996 Dubai World Cup at Meydan since 2010
Prize money 30.5 US$ million across the nine race card
Distance 2,000 Metres on dirt for the headline race
Grandstand 60,000 Seats along a stand more than a mile long
Dubai World Cup· 27 March 2027· Meydan Racecourse, Dubai· Enquire Now
Race day
The Pinnacle Of Racing.
Since 1996 the Dubai World Cup has drawn the best thoroughbreds, jockeys and trainers on earth to one Saturday in Dubai.
Gates open at noon. Racing from mid afternoon to the last race under the floodlights. Then the closing show.
ES Sport is an official agent for the Dubai World Cup, with ticketed access and hospitality from Apron Views to The Terrace.
Trackside dining, Meydan Racecourse
Watch
Race Day In Motion.
Dubai World Cup night at Meydan, with ES Sport.
Dubai World Cup with ES Sport
Meydan Racecourse · 27 March 2027 Choose Your Vantage Point. Every package is ticketed access. Hospitality tiers include house beverages. Enquire for availability.
← →
Nine Races A full card leading to the 2,000 metre Dubai World Cup, run under the floodlights.
The Closing Show Headline music acts, fireworks and a drone show after the last race.
Style Stakes Best dressed, most creative hat, best dressed couple. Every guest can enter by turning up.
Your Dubai Weekend Add a city tour, desert safari or waterpark day. We arrange the lot.
The venue
MeydanRacecourse.
Opened in 2010, Meydan pairs a 2,400 metre turf course and a 1,750 metre dirt course with a grandstand more than a mile long.
Hospitality suites, gourmet dining and the five star Meydan Hotel sit right beside the track.
Meydan Grandstand, Dubai
Dates When is the Dubai World Cup?
The Dubai World Cup runs on the last Saturday of March every year at Meydan Racecourse. The 2027 edition is Saturday 27 March 2027.
Timings How long does race day last?
It is a single day. Gates open at 12pm, the first race is around 3:30pm and the final race runs under the floodlights at around 8:30pm, followed by the closing show.
Dress code What is the dress code?
Smart casual. Jeans, T-shirts, shorts, trainers and flip flops are prohibited in the hospitality areas, including Apron Views and the Parade Ring.
Hospitality Which package suits corporate hosting?
The Terrace is the corporate choice, and we can build a bespoke package for larger groups. Tell us your numbers and we will recommend the right space.
Rules Can I bet at Meydan?
No. All forms of betting and gambling are illegal in the United Arab Emirates.
Rules Is alcohol available?
Yes. Bars operate around the Meydan Grandstand and hospitality tiers include house beverages. Guests are asked to remain respectful of others throughout.
Booking Do tickets sell out?
Yes, and quickly. Enquire early to secure your preferred package and we will confirm availability.
×
Enquire
Secure Your Race Day.
We’ll get back to you.
IWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzLXBhZ2UiKTtlJiZlLmNsYXNzTGlzdC5hZGQoImpzIiksZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHQ9bnVsbDt0cnl7dD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZXNUaGVtZSIpfWNhdGNoKFMpe30ibGlnaHQiPT09dHx8ImRhcmsiPT09dD9lLnNldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIsdCk6d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIpLm1hdGNoZXMmJmUuc2V0QXR0cmlidXRlKCJkYXRhLXRoZW1lIiwibGlnaHQiKTt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGhlbWVCdG4iKSxhPXdpbmRvdy5tYXRjaE1lZGlhJiZ3aW5kb3cubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzO2Z1bmN0aW9uIG8odCl7ZS5zZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiLHQpO3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiZXNUaGVtZSIsdCl9Y2F0Y2goUyl7fX1uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3ZhciB0PSJsaWdodCI9PT1lLmdldEF0dHJpYnV0ZSgiZGF0YS10aGVtZSIpPyJkYXJrIjoibGlnaHQiO2lmKG4uY2xhc3NMaXN0LmFkZCgic3BpbiIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLmNsYXNzTGlzdC5yZW1vdmUoInNwaW4iKX0sNTIwKSwhYSYmZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbil7dmFyIGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPWkubGVmdCtpLndpZHRoLzIscj1pLnRvcCtpLmhlaWdodC8yLHM9TWF0aC5oeXBvdChNYXRoLm1heChjLHdpbmRvdy5pbm5lcldpZHRoLWMpLE1hdGgubWF4KHIsd2luZG93LmlubmVySGVpZ2h0LXIpKTtkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGZ1bmN0aW9uKCl7byh0KX0pLnJlYWR5LnRoZW4oZnVuY3Rpb24oKXtlLmFuaW1hdGUoe2NsaXBQYXRoOlsiY2lyY2xlKDBweCBhdCAiK2MrInB4ICIrcisicHgpIiwiY2lyY2xlKCIrcysicHggYXQgIitjKyJweCAiK3IrInB4KSJdfSx7ZHVyYXRpb246NjIwLGVhc2luZzoiY3ViaWMtYmV6aWVyKC40LDAsLjIsMSkiLHBzZXVkb0VsZW1lbnQ6Ijo6dmlldy10cmFuc2l0aW9uLW5ldyhyb290KSJ9KX0pLmNhdGNoKGZ1bmN0aW9uKCl7fSl9ZWxzZSFmdW5jdGlvbih0KXtlLmNsYXNzTGlzdC5hZGQoInRoZW1pbmciKSxvKHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmNsYXNzTGlzdC5yZW1vdmUoInRoZW1pbmciKX0sNTYwKX0odCl9KTt2YXIgaT1mdW5jdGlvbigpe307IWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhlcm9UaXRsZSIpLHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmhlcm8tcGlsbGFycyIpO2lmKGUmJnQmJiFhJiZlLmFuaW1hdGUpe3ZhciBuPTI0MCxvPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10sYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmNoaWxkTm9kZXMpO2Z1bmN0aW9uIG8oZSxhKXtlLnNwbGl0KC8oXHMrKS8pLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSlpZigvXlxzKyQvLnRlc3QoZSkpYS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTtlbHNle3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtvLmNsYXNzTmFtZT0idyIsQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlLGZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTt0LmNsYXNzTmFtZT0iYyIsdC50ZXh0Q29udGVudD1lLG8uYXBwZW5kQ2hpbGQodCksbi5wdXNoKHQpfSksYS5hcHBlbmRDaGlsZChvKSx0LnB1c2gobyl9fSl9cmV0dXJuIGUuaW5uZXJIVE1MPSIiLGEuZm9yRWFjaChmdW5jdGlvbih0KXtpZigzPT09dC5ub2RlVHlwZSlvKHQudGV4dENvbnRlbnQsZSk7ZWxzZXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKTtuLmNsYXNzTmFtZT10LmNsYXNzTmFtZSxlLmFwcGVuZENoaWxkKG4pLG8odC50ZXh0Q29udGVudCxuKX19KSx7d29yZHM6dCxjaGFyczpufX0oZSksYz10LnF1ZXJ5U2VsZWN0b3JBbGwoImEiKTt0LmNsYXNzTGlzdC5hZGQoImxpZnQiKSxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGMsZnVuY3Rpb24oZSl7ZS5zdHlsZS5vcGFjaXR5PSIwIn0pLGk9ZnVuY3Rpb24oKXtkb2N1bWVudC5mb250cyYmZG9jdW1lbnQuZm9udHMucmVhZHk/ZG9jdW1lbnQuZm9udHMucmVhZHkudGhlbihyKS5jYXRjaChyKTpyKCl9fWZ1bmN0aW9uIHIoKXt2YXIgYT1mdW5jdGlvbigpe3ZhciB0PWUucXVlcnlTZWxlY3RvcigiZW0iKTtpZighdClyZXR1cm4gbnVsbDt2YXIgbj10LnF1ZXJ5U2VsZWN0b3JBbGwoIi53Iik7aWYobi5sZW5ndGg8MilyZXR1cm4gbnVsbDtmb3IodmFyIGE9blswXS5xdWVyeVNlbGVjdG9yQWxsKCIuYyIpLG89blsxXS5xdWVyeVNlbGVjdG9yQWxsKCIuYyIpLGk9bnVsbCxjPW8ubGVuZ3RoLTE7Yz49MDtjLS0paWYoInQiPT09b1tjXS50ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpKXtpPW9bY107YnJlYWt9cmV0dXJuIGFbMF0mJmFbMV0mJmk/W2FbMF0sYVsxXSxpXTpudWxsfSgpO2lmKCFhfHxjLmxlbmd0aDwzKXJldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGMsZnVuY3Rpb24oZSl7ZS5zdHlsZS5vcGFjaXR5PSIifSksdm9pZCB0LmNsYXNzTGlzdC5yZW1vdmUoImxpZnQiKTtvLmNoYXJzLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLmFuaW1hdGUoW3t0cmFuc2Zvcm06InRyYW5zbGF0ZVkoNDZweCkiLG9wYWNpdHk6MH0se3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSIsb3BhY2l0eToxfV0se2R1cmF0aW9uOjg2MCxkZWxheToyNCp0LGVhc2luZzoiY3ViaWMtYmV6aWVyKC4xNiwxLC4zLDEpIixmaWxsOiJib3RoIn0pfSk7dmFyIGk9W107QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjLGZ1bmN0aW9uKGUsdCl7dmFyIG49YVt0XS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aS5wdXNoKHtlbDplLGR4Om4ubGVmdC1vLmxlZnQsZHk6bi50b3Atby50b3B9KX0pO3ZhciByPTExODAscz0wO2kuZm9yRWFjaChmdW5jdGlvbihlLHQpe3ZhciBvPTFlMyszODAqdDtzPU1hdGgubWF4KHMsbys1MCtyKTt2YXIgaT1nZXRDb21wdXRlZFN0eWxlKGFbdF0pLmNvbG9yO2FbdF0uYW5pbWF0ZShbe3RyYW5zZm9ybToic2NhbGUoMSkiLGNvbG9yOml9LHt0cmFuc2Zvcm06InNjYWxlKDEuMykiLGNvbG9yOiIjRUJCNDQ2IixvZmZzZXQ6LjMzLGVhc2luZzoiY3ViaWMtYmV6aWVyKC4yNSwuNDYsLjQ1LC45NCkifSx7dHJhbnNmb3JtOiJzY2FsZSgxKSIsY29sb3I6aSxlYXNpbmc6ImN1YmljLWJlemllciguMzQsMS41NiwuNjQsMSkifV0se2R1cmF0aW9uOjQ1MCxkZWxheTpvLGZpbGw6Im5vbmUifSk7dmFyIGM9InRyYW5zbGF0ZSgiK2UuZHgrInB4LCIrZS5keSsicHgpIHNjYWxlKDEuNCwxLjQpIjtlLmVsLmFuaW1hdGUoW3t0cmFuc2Zvcm06YyxvcGFjaXR5OjAsb2Zmc2V0OjB9LHt0cmFuc2Zvcm06YyxvcGFjaXR5OjEsb2Zmc2V0OjEzMC9yfSx7dHJhbnNmb3JtOmMsb3BhY2l0eToxLG9mZnNldDpuL3IsZWFzaW5nOiJjdWJpYy1iZXppZXIoLjU1LC4wODUsLjY4LC41MykifSx7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoMHB4LDBweCkgc2NhbGUoMSwxKSIsb3BhY2l0eToxLG9mZnNldDo4ODAvcixlYXNpbmc6ImVhc2Utb3V0In0se3RyYW5zZm9ybToidHJhbnNsYXRlKDBweCwwcHgpIHNjYWxlKDEsMC44NSkiLG9wYWNpdHk6MSxvZmZzZXQ6OTcwL3IsZWFzaW5nOiJlYXNlLW91dCJ9LHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgwcHgsMHB4KSBzY2FsZSgxLDEpIixvcGFjaXR5OjEsb2Zmc2V0OjF9XSx7ZHVyYXRpb246cixkZWxheTpvKzUwLGZpbGw6ImJvdGgifSl9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChjLGZ1bmN0aW9uKGUpe2UuZ2V0QW5pbWF0aW9ucygpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jYW5jZWwoKX0pLGUuc3R5bGUub3BhY2l0eT0iIixlLnN0eWxlLnRyYW5zZm9ybT0iIn0pLHQuY2xhc3NMaXN0LnJlbW92ZSgibGlmdCIpfSxzKzQwKX19KCk7dmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVzTG9hZGVyIikscj1kb2N1bWVudC5ib2R5LHM9ITA7dHJ5e3M9ITB9Y2F0Y2goUyl7fWZ1bmN0aW9uIGwoKXtjLmNsYXNzTGlzdC5hZGQoImlzLW91dCIpLHIuY2xhc3NMaXN0LnJlbW92ZSgiZXNsLWxvY2siKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5oaWRkZW49ITB9LDcwMCk7dHJ5e3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oImVzU2VlbkxvYWRlciIsIjEiKX1jYXRjaChTKXt9c2V0VGltZW91dChpLDMwMCl9cz8oYy5oaWRkZW49ITAsci5jbGFzc0xpc3QucmVtb3ZlKCJlc2wtbG9jayIpLHNldFRpbWVvdXQoaSwyNjApKTooc2V0VGltZW91dChsLDIwNTApLGMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGwpKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIuY2FyLWJ0biIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLmRhdGFzZXQudGFyZ2V0KTtpZih0KXt2YXIgbj10LmZpcnN0RWxlbWVudENoaWxkLGE9bj9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKzQ6LjgqdC5jbGllbnRXaWR0aDt0LnNjcm9sbEJ5KHtsZWZ0OmEqK2UuZGF0YXNldC5kaXIsYmVoYXZpb3I6InNtb290aCJ9KX19KX0pLGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmZjaGlwIiksYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubmNhcmRbZGF0YS1zcG9ydF0iKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYXRFbXB0eSIpO2lmKHQubGVuZ3RoJiZhLmxlbmd0aCl7dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIG89ZS5kYXRhc2V0LmZpbHRlcixpPTA7YS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PSJhbGwiPT09b3x8ZS5kYXRhc2V0LnNwb3J0PT09bztlLmNsYXNzTGlzdC50b2dnbGUoImlzLWhpZGRlbiIsIXQpLHQmJihpKz0xLGUuY2xhc3NMaXN0LmFkZCgidiIpKX0pLG4mJihuLmhpZGRlbj1pPjApLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5yb3csLmNhdGFsb2d1ZS13cmFwIikuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgYz1yLnF1ZXJ5U2VsZWN0b3JBbGwoIi5uY2FyZCIpO2lmKGMubGVuZ3RoKXt2YXIgdj1yLnF1ZXJ5U2VsZWN0b3JBbGwoIi5uY2FyZDpub3QoLmlzLWhpZGRlbikiKS5sZW5ndGg7ci5jbGFzc0xpc3QudG9nZ2xlKCJpcy1lbXB0eSIsdj09PTApfX0pLHQuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLmRhdGFzZXQuZmlsdGVyPT09bztlLmNsYXNzTGlzdC50b2dnbGUoImlzLW9uIix0KSxlLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsdD8idHJ1ZSI6ImZhbHNlIil9KX0pfSl9fSgpO3ZhciBkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZmlNb2RhbCIpLHU9ZC5xdWVyeVNlbGVjdG9yKCIucmZpLWRsZyIpLGY9bnVsbCxtPW51bGwsaD0wO2Z1bmN0aW9uIHAoKXtpZighKGgrKz4wKSl7dmFyIGU9d2luZG93LmlubmVyV2lkdGgtZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO2U+MCYmKGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0PWUrInB4IiksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIn19ZnVuY3Rpb24geSgpeyhoPU1hdGgubWF4KDAsaC0xKSk+MHx8KGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9IiIsZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ9IiIpfWZ1bmN0aW9uIHYoKXtkLmhpZGRlbnx8KGQuY2xhc3NMaXN0LnJlbW92ZSgiaXMtb3BlbiIpLGQuY2xhc3NMaXN0LmFkZCgiaXMtY2xvc2luZyIpLGNsZWFyVGltZW91dChtKSxtPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmhpZGRlbj0hMCxkLmNsYXNzTGlzdC5yZW1vdmUoImlzLWNsb3NpbmciKSx5KCksZiYmZi5mb2N1cyYmZi5mb2N1cygpLGY9bnVsbH0sYT8wOjI0MCkpfWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLW9wZW4tcmZpXSIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuLG89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5hdlBhbmVsIik7aWYobyYmIW8uaGlkZGVuKXtvLmNsYXNzTGlzdC5yZW1vdmUoImlzLW9wZW4iKSxvLmNsYXNzTGlzdC5hZGQoImlzLWNsb3NpbmciKTt2YXIgaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmF2QnVyZ2VyIik7aSYmKGkuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIiwiZmFsc2UiKSxpLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsIk9wZW4gbWVudSIpKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5oaWRkZW49ITAsby5jbGFzc0xpc3QucmVtb3ZlKCJpcy1jbG9zaW5nIikseSgpfSxhPzA6MjYwKX1uPWUsY2xlYXJUaW1lb3V0KG0pLGY9bnx8bnVsbCxkLmNsYXNzTGlzdC5yZW1vdmUoImlzLWNsb3NpbmciKSxkLmhpZGRlbj0hMSxwKCksZC5vZmZzZXRXaWR0aCxkLmNsYXNzTGlzdC5hZGQoImlzLW9wZW4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImYtZmlyc3QiKTtpZihlKXRyeXtlLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9Y2F0Y2goUyl7ZS5mb2N1cygpfX0sYT8wOjI2MCl9KX0pLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWNsb3NlLXJmaV0iKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7digpfSl9KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmdW5jdGlvbihlKXsiRXNjYXBlIiE9PWUua2V5fHxkLmhpZGRlbnx8digpfSksZC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmdW5jdGlvbihlKXtpZigiVGFiIj09PWUua2V5KXtmb3IodmFyIHQ9dS5xdWVyeVNlbGVjdG9yQWxsKCJhW2hyZWZdLCBidXR0b246bm90KFtkaXNhYmxlZF0pLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSIpLG49W10sYT0wO2E8dC5sZW5ndGg7YSsrKW51bGwhPT10W2FdLm9mZnNldFBhcmVudCYmbi5wdXNoKHRbYV0pO2lmKG4ubGVuZ3RoKXt2YXIgbz1uWzBdLGk9bltuLmxlbmd0aC0xXTtlLnNoaWZ0S2V5JiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09bz8oZS5wcmV2ZW50RGVmYXVsdCgpLGkuZm9jdXMoKSk6ZS5zaGlmdEtleXx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWl8fChlLnByZXZlbnREZWZhdWx0KCksby5mb2N1cygpKX19fSksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZm9ybS5mb3JtIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoInN1Ym1pdCIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciB0PWUudGFyZ2V0O2lmKHQuY2hlY2tWYWxpZGl0eSgpKXt2YXIgbj10LnF1ZXJ5U2VsZWN0b3IoIi5zZW50Iil8fGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZW50IiksYT10LmRhdGFzZXQuZW5kcG9pbnQsbz1mdW5jdGlvbigpe3ZhciBzPW47biYmcy5jbGFzc0xpc3QuYWRkKCJvbiIpO3QucmVzZXQoKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7biYmcy5jbGFzc0xpc3QucmVtb3ZlKCJvbiIpfSw3MDAwKX07YT9mZXRjaChhLHttZXRob2Q6IlBPU1QiLGJvZHk6bmV3IEZvcm1EYXRhKHQpfSkudGhlbihvKS5jYXRjaChvKTpvKCl9ZWxzZSB0LnJlcG9ydFZhbGlkaXR5KCl9KX0pO3ZhciBnPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYXZCdXJnZXIiKSxFPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYXZQYW5lbCIpLGI9bnVsbDtmdW5jdGlvbiBMKCl7RS5oaWRkZW58fChFLmNsYXNzTGlzdC5yZW1vdmUoImlzLW9wZW4iKSxFLmNsYXNzTGlzdC5hZGQoImlzLWNsb3NpbmciKSxnLnNldEF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIsImZhbHNlIiksZy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJPcGVuIG1lbnUiKSxjbGVhclRpbWVvdXQoYiksYj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7RS5oaWRkZW49ITAsRS5jbGFzc0xpc3QucmVtb3ZlKCJpcy1jbG9zaW5nIikseSgpfSxhPzA6MjYwKSl9Zy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtFLmhpZGRlbj8oY2xlYXJUaW1lb3V0KGIpLEUuY2xhc3NMaXN0LnJlbW92ZSgiaXMtY2xvc2luZyIpLEUuaGlkZGVuPSExLHAoKSxFLm9mZnNldFdpZHRoLEUuY2xhc3NMaXN0LmFkZCgiaXMtb3BlbiIpLGcuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpLGcuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiQ2xvc2UgbWVudSIpKTpMKCl9KSxFLnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLWNsb3NlLW1lbnVdIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe0woKX0pfSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnVuY3Rpb24oZSl7IkVzY2FwZSIhPT1lLmtleXx8RS5oaWRkZW58fChMKCksZy5mb2N1cygpKX0pO3ZhciB3PXdpbmRvdy5tYXRjaE1lZGlhKCIobWluLXdpZHRoOiAxMDAxcHgpIikseD1mdW5jdGlvbihlKXtlLm1hdGNoZXMmJkwoKX07dy5hZGRFdmVudExpc3RlbmVyP3cuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix4KTp3LmFkZExpc3RlbmVyJiZ3LmFkZExpc3RlbmVyKHgpO3ZhciBBPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYXYiKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixmdW5jdGlvbigpe0EuY2xhc3NMaXN0LnRvZ2dsZSgic2Nyb2xsZWQiLHdpbmRvdy5zY3JvbGxZPjYwKX0pO3ZhciBxPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbihlKXtlLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5pc0ludGVyc2VjdGluZyYmKGUudGFyZ2V0LmNsYXNzTGlzdC5hZGQoInYiKSxxLnVub2JzZXJ2ZShlLnRhcmdldCkpfSl9LHt0aHJlc2hvbGQ6LjA4fSk7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLnIsIC5zZWN0aW9uLWhlYWRlciIpLmZvckVhY2goZnVuY3Rpb24oZSl7cS5vYnNlcnZlKGUpfSl9KCksZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGU9d2luZG93Lm1hdGNoTWVkaWEmJndpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIpLm1hdGNoZXMsdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXN4VGl0bGUiKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlc3hQaWxsYXJzIik7aWYodCYmbiYmIWUmJnQuYW5pbWF0ZSl7dmFyIGE9MjQwLG89ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmNoaWxkTm9kZXMpO2Z1bmN0aW9uIGEoZSxuKXtlLnNwbGl0KC8oXHMrKS8pLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoZSlpZigvXlxzKyQvLnRlc3QoZSkpbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTtlbHNle3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTthLmNsYXNzTmFtZT0idyIsQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlLGZ1bmN0aW9uKGUpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtuLmNsYXNzTmFtZT0iYyIsbi50ZXh0Q29udGVudD1lLGEuYXBwZW5kQ2hpbGQobiksdC5wdXNoKG4pfSksbi5hcHBlbmRDaGlsZChhKX19KX1yZXR1cm4gZS5pbm5lckhUTUw9IiIsbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKDM9PT10Lm5vZGVUeXBlKWEodC50ZXh0Q29udGVudCxlKTtlbHNle3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpO24uY2xhc3NOYW1lPXQuY2xhc3NOYW1lLGUuYXBwZW5kQ2hpbGQobiksYSh0LnRleHRDb250ZW50LG4pfX0pLHR9KHQpLGk9bi5xdWVyeVNlbGVjdG9yKCJhIik7bi5jbGFzc0xpc3QuYWRkKCJsaWZ0IiksaSYmKGkuc3R5bGUub3BhY2l0eT0iMCIpO3ZhciBlc3hUYWc9bi5xdWVyeVNlbGVjdG9yKCJsaTpudGgtY2hpbGQoMikiKTtlc3hUYWcmJmVzeFRhZy5jbGFzc0xpc3QuYWRkKCJ0YWctd2FpdCIpO3ZhciBjPSEwO3RyeXtjPSEwfWNhdGNoKHMpe31zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQuZm9udHMmJmRvY3VtZW50LmZvbnRzLnJlYWR5P2RvY3VtZW50LmZvbnRzLnJlYWR5LnRoZW4ocikuY2F0Y2gocik6cigpfSxjPzI2MDoyMzUwKX1mdW5jdGlvbiByKCl7dmFyIGU9ZnVuY3Rpb24oKXt2YXIgZT10LnF1ZXJ5U2VsZWN0b3IoImVtIik7aWYoIWUpcmV0dXJuIG51bGw7dmFyIGE9ZS5xdWVyeVNlbGVjdG9yQWxsKCIudyIpO2lmKCFhLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgbz1wYXJzZUludChuLmdldEF0dHJpYnV0ZSgiZGF0YS1zcmMtaW5kZXgiKXx8IjAiLDEwKXx8MCxpPWFbMF0ucXVlcnlTZWxlY3RvckFsbCgiLmMiKTtyZXR1cm4gaVtvXXx8aVswXXx8bnVsbH0oKTtpZighZXx8IWkpcmV0dXJuIGkmJihpLnN0eWxlLm9wYWNpdHk9IiIpLGVzeFRhZyYmZXN4VGFnLmNsYXNzTGlzdC5yZW1vdmUoInRhZy13YWl0Iiksdm9pZCBuLmNsYXNzTGlzdC5yZW1vdmUoImxpZnQiKTtvLmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLmFuaW1hdGUoW3t0cmFuc2Zvcm06InRyYW5zbGF0ZVkoNDZweCkiLG9wYWNpdHk6MH0se3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSIsb3BhY2l0eToxfV0se2R1cmF0aW9uOjg2MCxkZWxheToyNCp0LGVhc2luZzoiY3ViaWMtYmV6aWVyKC4xNiwxLC4zLDEpIixmaWxsOiJib3RoIn0pfSk7dmFyIGM9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1NYXRoLm1pbigxLjQsTWF0aC5tYXgoLjIsYy5oZWlnaHQvci5oZWlnaHQqMS4xNSkpLGw9Yy5sZWZ0LXIubGVmdCxkPWMuYm90dG9tLXIuYm90dG9tLHU9MTE4MCxmPTFlMyxtPWdldENvbXB1dGVkU3R5bGUoZSkuY29sb3I7ZS5hbmltYXRlKFt7dHJhbnNmb3JtOiJzY2FsZSgxKSIsY29sb3I6bX0se3RyYW5zZm9ybToic2NhbGUoMS4zKSIsY29sb3I6IiNFQkI0NDYiLG9mZnNldDouMzMsZWFzaW5nOiJjdWJpYy1iZXppZXIoLjI1LC40NiwuNDUsLjk0KSJ9LHt0cmFuc2Zvcm06InNjYWxlKDEpIixjb2xvcjptLGVhc2luZzoiY3ViaWMtYmV6aWVyKC4zNCwxLjU2LC42NCwxKSJ9XSx7ZHVyYXRpb246NDUwLGRlbGF5OmYsZmlsbDoibm9uZSJ9KTt2YXIgaD0idHJhbnNsYXRlKCIrbCsicHgsIitkKyJweCkgc2NhbGUoIitzKyIsIitzKyIpIjtpLmFuaW1hdGUoW3t0cmFuc2Zvcm06aCxvcGFjaXR5OjAsb2Zmc2V0OjB9LHt0cmFuc2Zvcm06aCxvcGFjaXR5OjEsb2Zmc2V0OjEzMC91fSx7dHJhbnNmb3JtOmgsb3BhY2l0eToxLG9mZnNldDphL3UsZWFzaW5nOiJjdWJpYy1iZXppZXIoLjU1LC4wODUsLjY4LC41MykifSx7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoMHB4LDBweCkgc2NhbGUoMSwxKSIsb3BhY2l0eToxLG9mZnNldDo4ODAvdSxlYXNpbmc6ImVhc2Utb3V0In0se3RyYW5zZm9ybToidHJhbnNsYXRlKDBweCwwcHgpIHNjYWxlKDEsMC44NSkiLG9wYWNpdHk6MSxvZmZzZXQ6OTcwL3UsZWFzaW5nOiJlYXNlLW91dCJ9LHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgwcHgsMHB4KSBzY2FsZSgxLDEpIixvcGFjaXR5OjEsb2Zmc2V0OjF9XSx7ZHVyYXRpb246dSxkZWxheToxMDUwLGZpbGw6ImJvdGgifSksc2V0VGltZW91dChmdW5jdGlvbigpe2kuZ2V0QW5pbWF0aW9ucygpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5jYW5jZWwoKX0pLGkuc3R5bGUub3BhY2l0eT0iIixpLnN0eWxlLnRyYW5zZm9ybT0iIixuLmNsYXNzTGlzdC5yZW1vdmUoImxpZnQiKSxlc3hUYWcmJihlc3hUYWcuY2xhc3NMaXN0LnJlbW92ZSgidGFnLXdhaXQiKSxlc3hUYWcuY2xhc3NMaXN0LmFkZCgidGFnLWluIikpfSwyMjcwKX19KCksZnVuY3Rpb24oKXtpZigoIXdpbmRvdy5tYXRjaE1lZGlhfHwhd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcykmJiJJbnRlcnNlY3Rpb25PYnNlcnZlciJpbiB3aW5kb3cpe2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtbyIpO3ZhciBlPVsiLnN0YWNrID4gLml0ZW0iLCIuYWNjLWl0ZW0iLCIuZmFxLWl0ZW0iLCIuYm91dCIsIi52c3RvcnkiLCIudGtib3giLCIuYWItZnJhbWUiLCIuY21wIHRib2R5IHRkIiwiLmNtcCB0aGVhZCB0aCIsIi50YXBlLWNlbGwiLCIudnMtcm93IiwiLnZlbnVlLXNwZWNzID4gKiIsIi56cC10aWVyIiwiLnRrZ3JpZCB0ZCIsIi5zdGF0cyA+IC5zdGF0IiwiLnN0YXRzID4gLnN0IiwiLnZpdGFscyA+IC52aXRhbCIsIi5oZXJvLW1ldGEgPiAuaG0iLCIudGllcnMgPiAudGllciIsIi52Z3JpZCA+IC52YmxvY2siLCIua2MtY2FyZCIsIi5hYi1zcGVjIiwiLmluYy1saXN0ID4gbGkiLCIuYXJ0cyA+IC5hcnQiLCIuZm9yayA+IC5yb3V0ZSIsIi5jYXRhbG9ndWUgLm5jYXJkIiwiLm9jYXJkIiwiLnBjYXJkIiwiLmJjYXJkIiwiLnBjYXJkcCIsIi5maXZldy1ncmlkID4gKiIsIi5sb2dvcyA+IC5sb2dvIiwiLmVzbS1iYW5kIiwiLm1hcC1jaGlwIiwiLnRhcGUtZ3JpZCA+IC50YXBlLWNlbGwiLCIuZ2NhcmQiXSx0PWUuam9pbigiLCIpO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLW1vXSIpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5tYXRjaGVzKHQpfHxlLnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS1tbyIpfSk7dmFyIG49W107aWYoZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0LGE9bnVsbCxvPTA7dHJ5e3Q9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKX1jYXRjaChpKXtyZXR1cm59dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKCFlLmhhc0F0dHJpYnV0ZSgiZGF0YS1tbyIpKXt2YXIgdD1lLnBhcmVudE5vZGU7bz10PT09YT9vKzE6MCxhPXQsZS5zZXRBdHRyaWJ1dGUoImRhdGEtbW8iLCIiKSxlLnN0eWxlLnNldFByb3BlcnR5KCItLW1vLWQiLE1hdGgubWluKDUwKm8sMzAwKSsibXMiKSxuLnB1c2goZSl9fSl9KSxuLmxlbmd0aCl7dmFyIGE9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXtlLmlzSW50ZXJzZWN0aW5nJiYoZS50YXJnZXQuY2xhc3NMaXN0LmFkZCgibW8tbGl0IiksYS51bm9ic2VydmUoZS50YXJnZXQpKX0pfSx7cm9vdE1hcmdpbjoiMHB4IDBweCAtNiUgMHB4Iix0aHJlc2hvbGQ6LjA1fSk7bi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Eub2JzZXJ2ZShlKX0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLmZvckVhY2goZnVuY3Rpb24oZSl7aWYoIWUuY2xhc3NMaXN0LmNvbnRhaW5zKCJtby1saXQiKSl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0LnRvcDxpbm5lckhlaWdodCYmdC5ib3R0b20+MCYmZS5jbGFzc0xpc3QuYWRkKCJtby1saXQiKX19KX0sNGUzKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKCFlLmNsYXNzTGlzdC5jb250YWlucygibW8tbGl0Iikpe3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dC50b3A8aW5uZXJIZWlnaHQmJnQuYm90dG9tPjAmJnQuaGVpZ2h0JiZlLmNsYXNzTGlzdC5hZGQoIm1vLWxpdCIpfX0pfSw2MCl9KX19fSgpLGZ1bmN0aW9uKCl7WyJ4cUZvcm0iLCJyZmkiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3QmJnQuYWRkRXZlbnRMaXN0ZW5lcigic3VibWl0IixmdW5jdGlvbihlKXt0LmNoZWNrVmFsaWRpdHkoKSYmKCh0LmdldEF0dHJpYnV0ZSgiZGF0YS1lbmRwb2ludCIpfHwiIikudHJpbSgpfHwod2luZG93LmxvY2F0aW9uLmhyZWY9ZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1lLnF1ZXJ5U2VsZWN0b3IoIltuYW1lPWV2ZW50LW5hbWVdIik7cmV0dXJuIG4mJnQucHVzaCgiRW5xdWlyeTogIituLnZhbHVlKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0Om5vdChbdHlwZT1oaWRkZW5dKSxzZWxlY3QsdGV4dGFyZWEiKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBhPWUucXVlcnlTZWxlY3RvcignbGFiZWxbZm9yPSInK24uaWQrJyJdJyksbz1hP2EudGV4dENvbnRlbnQudHJpbSgpOm4ubmFtZXx8bi5pZDtuLnZhbHVlJiZ0LnB1c2gobysiOiAiK24udmFsdWUpfSksIm1haWx0bzppbmZvQGVzLXNwb3J0LmFlP3N1YmplY3Q9IitlbmNvZGVVUklDb21wb25lbnQoKG4/bi52YWx1ZToiV2Vic2l0ZSBlbnF1aXJ5IikrIiAtIGVucXVpcnkiKSsiJmJvZHk9IitlbmNvZGVVUklDb21wb25lbnQodC5qb2luKCJcbiIpKX0odCkpKX0sITApfSk7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInhxTW9kYWwiKTtpZihlJiYhZG9jdW1lbnQuYm9keS5oYXNBdHRyaWJ1dGUoImRhdGEteHEtbmF0aXZlIikpe3ZhciB0LG49d2luZG93Lm1hdGNoTWVkaWEmJm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlcyxhPW51bGw7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtb3Blbi14cV0iKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe28uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGkpe2kucHJldmVudERlZmF1bHQoKSxmdW5jdGlvbihvKXtjbGVhclRpbWVvdXQodCksYT1vLGUuaGlkZGVuPSExLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsZS5vZmZzZXRXaWR0aCxlLmNsYXNzTGlzdC5hZGQoImlzLW9wZW4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIHQ9ZS5xdWVyeVNlbGVjdG9yKCJpbnB1dDpub3QoW3R5cGU9aGlkZGVuXSkiKTt0JiZ0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9LG4/MDoyNjApfShvKX0pfSksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtY2xvc2UteHFdIikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixpKX0pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZ1bmN0aW9uKHQpeyJFc2NhcGUiIT09dC5rZXl8fGUuaGlkZGVufHxpKCl9KTt2YXIgbz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgieHFGb3JtIik7byYmby5hZGRFdmVudExpc3RlbmVyKCJzdWJtaXQiLGZ1bmN0aW9uKGUpe2lmKGUucHJldmVudERlZmF1bHQoKSxvLmNoZWNrVmFsaWRpdHkoKSl7dmFyIHQ9by5nZXRBdHRyaWJ1dGUoImRhdGEtZW5kcG9pbnQiKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ4cVNlbnQiKSxhPWZ1bmN0aW9uKCl7biYmbi5jbGFzc0xpc3QuYWRkKCJvbiIpO28ucmVzZXQoKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7biYmbi5jbGFzc0xpc3QucmVtb3ZlKCJvbiIpfSw3MDAwKX07dD9mZXRjaCh0LHttZXRob2Q6IlBPU1QiLGJvZHk6bmV3IEZvcm1EYXRhKG8pfSkudGhlbihhKS5jYXRjaChhKTphKCl9ZWxzZSBvLnJlcG9ydFZhbGlkaXR5KCl9KX1mdW5jdGlvbiBpKCl7ZS5oaWRkZW58fChlLmNsYXNzTGlzdC5yZW1vdmUoImlzLW9wZW4iKSxjbGVhclRpbWVvdXQodCksdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5oaWRkZW49ITAsZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iIixhJiZhLmZvY3VzJiZhLmZvY3VzKCksYT1udWxsfSxuPzA6MzYwKSl9fSgpfSgpOwo7KGZ1bmN0aW9uKCl7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5hdiIpO2lmKCFuKXJldHVybjt2YXIgZj1mdW5jdGlvbigpe24uY2xhc3NMaXN0LnRvZ2dsZSgic2Nyb2xsZWQiLHdpbmRvdy5zY3JvbGxZPjYwKX07ZigpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlc2hvdyIsZik7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGYpO30pKCk7Ci8qIGV2ZW50LWV4dHJhcy5qczogYmVoYXZpb3VycyBmb3IgYXJjaGV0eXBlIEMgZXZlbnQgcGFnZXMsIGFwcGVuZGVkIGFmdGVyIG1haW4tanMuZGVjb2RlZC5qcwogICAxLiAuYWNjLWl0ZW0gYWNjb3JkaW9uIChGQVEpICAgICAgICAgIDIuIC5lcy1kZCBleHBhbmRhYmxlIHBhbmVscwogICAzLiBoZXJvIHN0YXQgY291bnQtdXAgKHJlZHVjZWQtbW90aW9uIHNhZmUpICAgNC4gcGFja2FnZSBjYXJkIC0+IGVucXVpcnkgbW9kYWwgcHJlLWZpbGwKICAgUnVsZXM6IG5vIHJlZ2V4IGxpdGVyYWxzLCBubyAtLSBkZWNyZW1lbnQgKExpdGVTcGVlZCBtaW5pZmllci1ob3N0aWxlIHRva2VucykuICovCihmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjsKdmFyIHJlZHVjZT13aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikubWF0Y2hlczsKLyogMSArIDI6IG9uZSBhY2NvcmRpb24gbWVjaGFuaWMgKi8KZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmFjYy1pdGVtIikuZm9yRWFjaChmdW5jdGlvbihpdGVtKXt2YXIgcT1pdGVtLnF1ZXJ5U2VsZWN0b3IoIi5hY2MtcSIpO2lmKCFxKXJldHVybjtxLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3ZhciBvcGVuPWl0ZW0uY2xhc3NMaXN0LnRvZ2dsZSgib3BlbiIpO3Euc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixvcGVuPyJ0cnVlIjoiZmFsc2UiKTt9KTt9KTsKZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmVzLWRkIikuZm9yRWFjaChmdW5jdGlvbihkZCl7dmFyIGhlYWQ9ZGQucXVlcnlTZWxlY3RvcigiLmVzLWRkX19oZWFkIik7aWYoIWhlYWQpcmV0dXJuO2hlYWQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIG9wZW49ZGQuZ2V0QXR0cmlidXRlKCJkYXRhLW9wZW4iKT09PSJ0cnVlIjtkZC5zZXRBdHRyaWJ1dGUoImRhdGEtb3BlbiIsb3Blbj8iZmFsc2UiOiJ0cnVlIik7aGVhZC5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLG9wZW4/ImZhbHNlIjoidHJ1ZSIpO30pO30pOwovKiAzOiBzdGF0IGNvdW50LXVwICovCnZhciBudW1zPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5zdGF0cyAuc3RhdCAubiIpOwppZihudW1zLmxlbmd0aCl7CiAgdmFyIHJ1bj1mdW5jdGlvbihlbCl7dmFyIHNyYz1lbC50ZXh0Q29udGVudC50cmltKCk7dmFyIGk9MCxwcmU9IiIsZGlnaXRzPSIiLHN1Zj0iIjt3aGlsZShpPHNyYy5sZW5ndGgmJihzcmMuY2hhckF0KGkpPCIwInx8c3JjLmNoYXJBdChpKT4iOSIpKXtwcmUrPXNyYy5jaGFyQXQoaSk7aSs9MTt9d2hpbGUoaTxzcmMubGVuZ3RoJiYoKHNyYy5jaGFyQXQoaSk+PSIwIiYmc3JjLmNoYXJBdChpKTw9IjkiKXx8c3JjLmNoYXJBdChpKT09PSIsIikpe2lmKHNyYy5jaGFyQXQoaSkhPT0iLCIpZGlnaXRzKz1zcmMuY2hhckF0KGkpO2krPTE7fXN1Zj1zcmMuc2xpY2UoaSk7aWYoIWRpZ2l0cyl7cmV0dXJuO312YXIgdGFyZ2V0PXBhcnNlSW50KGRpZ2l0cywxMCkscGFkPWRpZ2l0cy5sZW5ndGgsdXNlQ29tbWE9c3JjLmluZGV4T2YoIiwiKT4tMTt2YXIgZm10PWZ1bmN0aW9uKG4pe3ZhciBzPVN0cmluZyhuKTt3aGlsZShzLmxlbmd0aDxwYWQmJmRpZ2l0cy5jaGFyQXQoMCk9PT0iMCIpcz0iMCIrcztpZih1c2VDb21tYSl7dmFyIG91dD0iIixjPTAsaj1zLmxlbmd0aC0xO3doaWxlKGo+PTApe291dD1zLmNoYXJBdChqKStvdXQ7Yys9MTtpZihjJTM9PT0wJiZqPjApb3V0PSIsIitvdXQ7ai09MTt9cz1vdXQ7fXJldHVybiBwcmUrcytzdWY7fTtpZihyZWR1Y2V8fHRhcmdldD45OTk5KXtlbC50ZXh0Q29udGVudD1zcmM7cmV0dXJuO312YXIgdDA9bnVsbCxkdXI9MTQwMDt2YXIgc3RlcD1mdW5jdGlvbih0cyl7aWYodDA9PT1udWxsKXQwPXRzO3ZhciBwPU1hdGgubWluKDEsKHRzLXQwKS9kdXIpO3ZhciBlPTEtTWF0aC5wb3coMS1wLDMpO2VsLnRleHRDb250ZW50PWZtdChNYXRoLnJvdW5kKHRhcmdldCplKSk7aWYocDwxKXJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtlbHNlIGVsLnRleHRDb250ZW50PXNyYzt9O3JlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTt9OwogIGlmKCJJbnRlcnNlY3Rpb25PYnNlcnZlciJpbiB3aW5kb3cmJiFyZWR1Y2Upe3ZhciBpbz1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZW50cmllcyl7ZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGVuKXtpZihlbi5pc0ludGVyc2VjdGluZyl7cnVuKGVuLnRhcmdldCk7aW8udW5vYnNlcnZlKGVuLnRhcmdldCk7fX0pO30se3RocmVzaG9sZDouNH0pO251bXMuZm9yRWFjaChmdW5jdGlvbihuKXtpby5vYnNlcnZlKG4pO30pO30KfQovKiA0OiBwYWNrYWdlIGNhcmRzIGFuZCBDVEFzIGNhcnJ5aW5nIGRhdGEtY2F0IHByZS1maWxsIHRoZSBlbnF1aXJ5IGZvcm0gKi8KZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtb3Blbi1yZmldW2RhdGEtY2F0XSIpLmZvckVhY2goZnVuY3Rpb24oYnRuKXtidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7dmFyIGNhdD1idG4uZ2V0QXR0cmlidXRlKCJkYXRhLWNhdCIpfHwiIjt2YXIgc2VsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmLWNhdCIpO2lmKHNlbCl7Zm9yKHZhciBrPTA7azxzZWwub3B0aW9ucy5sZW5ndGg7ays9MSl7aWYoc2VsLm9wdGlvbnNba10udGV4dD09PWNhdCl7c2VsLnNlbGVjdGVkSW5kZXg9azticmVhazt9fX12YXIgaD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcmZpIGlucHV0W25hbWU9ZWViX2NhdGVnb3J5XSIpO2lmKGgpaC52YWx1ZT1jYXQ7fSx0cnVlKTt9KTsKfSkoKTsK