Abu Dhabi F1 Grand Prix
This Is ES Sport.
Make Abu Dhabi Grand Prix weekend your own. Private suites, premium lounges and terraces with trackside views, exceptional dining and free-flowing beverages across four unforgettable days. Entertain clients, reward your team or bring your favourite people. Fully private and brandable options are available.
Days 04 Thursday to Sunday, practice to finale
Spaces 06 Suites, lounges, terraces and private
Attractions 05 teamLab Phenomena or one of four Yas Island parks
Museums 02 Louvre Abu Dhabi and Qasr Al Watan
F1 Abu Dhabi Grand Prix· 3 to 6 Dec 2026· Private Hospitality· Enquire Now
Private hospitality
Where The Season Is Decided.
The Abu Dhabi Grand Prix is the last race of the year, and the one everyone is watching. A day to night race under the lights at Yas Marina Circuit, with the championship, the podium and the after-race concerts all in one place.
Hospitality here is how the weekend is done properly. A suite over the hairpin, a lounge at Yas Central, a terrace on the finish line or a private space with your name on the door. Each has its own view of the race and its own way of hosting.
ES Sport is an official hospitality sales agent for the Abu Dhabi Grand Prix. Tell us who you want to host and we will find the right space for them.
A hospitality lounge at Yas Central
Yas Marina Circuit · 3 to 6 Dec 2026 Hospitality Spaces. Six ways to host at Yas Marina Circuit. Pricing and inclusions confirmed on enquiry.
← →
Four Day Access Thursday to Sunday, practice, qualifying and the season finale, with the F1 Fanzone and all Oasis areas across the circuit.
After-Race Concerts General admission to all After-Race Concerts at Etihad Park, on a first come, first served basis.
Abu Dhabi Experiences One day at teamLab Phenomena Abu Dhabi or any one Yas Island theme park: Ferrari World, SeaWorld, Warner Bros. World or Yas Waterworld.
Culture And Art Complimentary entry to the Louvre Abu Dhabi and Qasr Al Watan, making a race weekend an Abu Dhabi weekend.
Every space is arranged on enquiry rather than sold as a fixed package. Tell us your dates and how many guests you are hosting, and we confirm inclusions, capacity and pricing with the circuit before you commit.
Private space
Your Brand At TheCentre Of The Action.
Put your brand at the heart of the Abu Dhabi Grand Prix. A fully private suite gives you a unique opportunity to align your brand with one of the UAE’s biggest sporting moments, while giving clients, partners or your team an experience they’ll remember.
Make the suite your own, with your branding throughout the space, alongside prime positioning and views overlooking the race track.
With space for 40 guests and upwards, suites can be tailored with curated food and drink, F1 simulators, guest speakers, live entertainment and concierge hosting.
Trackside hospitality, Yas Marina Circuit
Hospitality Which space is right for us?
Shams Suite for contemporary Japanese dining over the Turn 5 hairpin. Sunset Lounge for live cooking, DJs and the terrace at sunset. Trackside Lounge for a track-level brunch with party energy, and a private suite for 40. Pitlane Views for the grid, pit stops and podium in a calm, refined setting. 16/360 for open-air terraces on the finish line. A bespoke private space if you want it fully yours and fully branded.
Hospitality Is food and drink included?
Yes. Each suite and lounge includes gourmet dining and premium drinks through the day. Exact menus and service vary by space and are confirmed on enquiry.
Corporate Can we brand the space?
Private spaces can carry your branding and identity throughout, with activations such as F1 simulators, guest speakers and live entertainment arranged by ES Sport.
Access Can children come?
Yes. Every hospitality space welcomes guests of all ages.
Access Are the spaces accessible?
The suites and lounges are accessible by people of determination. Please call us so we can confirm the requirements for your group.
Dates When is the 2026 Abu Dhabi Grand Prix?
3 to 6 December 2026 at Yas Marina Circuit. Thursday opens the weekend, Friday is practice, Saturday is qualifying and the race is on Sunday. Hospitality access runs across all four days.
Booking How do I book?
Hospitality is confirmed on enquiry. Tell us the space you want and how many guests, and we come back with availability and pricing. Our team can also advise on hotels and transfers.
Travel How do I get to Yas Marina Circuit?
Zayed International Airport is around fifteen minutes from Yas Island. From Dubai, allow around ninety minutes by road. We can arrange transfers as part of your booking.
×
Enquire
Host At The Season Finale.
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