Skip to content

Instantly share code, notes, and snippets.

@timelyportfolio
Last active March 14, 2017 19:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timelyportfolio/3ec8f53305f3575e48332642cae6c063 to your computer and use it in GitHub Desktop.
Save timelyportfolio/3ec8f53305f3575e48332642cae6c063 to your computer and use it in GitHub Desktop.
EventDrops in R
license: mit

Even though I resolved to not do any unpaid open-source this year, I unintentionally did not get paid on some work I did on an htmlwidget wrapper for the interactive EventDrops based on d3. So, here is an example of eventdropR.

Since I am still waiting for compensation, I assume I will never actually collect. I might as well contribute to the world. It is unfinished and still needs lots of improvement, but it does work.

Code

#devtools::install_github("timelyportfolio/eventdropR")

library(jsonlite)
library(eventdropR)
library(dplyr)
library(tibble)

# using example from https://cran.r-project.org/web/packages/jsonlite/vignettes/json-apis.html
fromJSON("https://api.github.com/repos/tidyverse/purrr/commits?per_page=100&since=2017-01-01") %>>%
  {
    tibble(
      name = .$commit$author$name,
      date = .$commit$author$date
    ) 
  } %>>%
  eventdrop(
    labelsWidth = 200
  )
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="data:application/x-javascript;base64,Ly8gaHR0cHM6Ly9kM2pzLm9yZyBWZXJzaW9uIDQuNy4wLiBDb3B5cmlnaHQgMjAxNyBNaWtlIEJvc3RvY2suCihmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/bihleHBvcnRzKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbImV4cG9ydHMiXSxuKTpuKHQuZDM9dC5kM3x8e30pfSkodGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm4gcXModChuKSxlKX19ZnVuY3Rpb24gZSh0LG4pe3JldHVyblt0LG5dfWZ1bmN0aW9uIHIodCxuLGUpe3ZhciByPU1hdGguYWJzKG4tdCkvTWF0aC5tYXgoMCxlKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cocikvTWF0aC5MTjEwKSksbz1yL2k7cmV0dXJuIG8+PUtzP2kqPTEwOm8+PXRmP2kqPTU6bz49bmYmJihpKj0yKSxuPHQ/LWk6aX1mdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aH1mdW5jdGlvbiBvKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0KyIsMCkifWZ1bmN0aW9uIHUodCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrdCsiKSJ9ZnVuY3Rpb24gYSh0KXt2YXIgbj10LmJhbmR3aWR0aCgpLzI7cmV0dXJuIHQucm91bmQoKSYmKG49TWF0aC5yb3VuZChuKSksZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrbn19ZnVuY3Rpb24gYygpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBzKHQsbil7ZnVuY3Rpb24gZShlKXt2YXIgbz1udWxsPT1zP24udGlja3M/bi50aWNrcy5hcHBseShuLGkpOm4uZG9tYWluKCk6cyx1PW51bGw9PWY/bi50aWNrRm9ybWF0P24udGlja0Zvcm1hdC5hcHBseShuLGkpOmJmOmYsZz1NYXRoLm1heChsLDApK3AseT1uLnJhbmdlKCksbT15WzBdKy41LHg9eVt5Lmxlbmd0aC0xXSsuNSxiPShuLmJhbmR3aWR0aD9hOmJmKShuLmNvcHkoKSksdz1lLnNlbGVjdGlvbj9lLnNlbGVjdGlvbigpOmUsTT13LnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxUPXcuc2VsZWN0QWxsKCIudGljayIpLmRhdGEobyxuKS5vcmRlcigpLGs9VC5leGl0KCksUz1ULmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksTj1ULnNlbGVjdCgibGluZSIpLEU9VC5zZWxlY3QoInRleHQiKTtNPU0ubWVyZ2UoTS5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCIjMDAwIikpLFQ9VC5tZXJnZShTKSxOPU4ubWVyZ2UoUy5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cihyKyIyIixkKmwpLmF0dHIodisiMSIsLjUpLmF0dHIodisiMiIsLjUpKSxFPUUubWVyZ2UoUy5hcHBlbmQoInRleHQiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIocixkKmcpLmF0dHIodiwuNSkuYXR0cigiZHkiLHQ9PT13Zj8iMGVtIjp0PT09VGY/IjAuNzFlbSI6IjAuMzJlbSIpKSxlIT09dyYmKE09TS50cmFuc2l0aW9uKGUpLFQ9VC50cmFuc2l0aW9uKGUpLE49Ti50cmFuc2l0aW9uKGUpLEU9RS50cmFuc2l0aW9uKGUpLGs9ay50cmFuc2l0aW9uKGUpLmF0dHIoIm9wYWNpdHkiLFNmKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PWIodCkpP18odCk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksUy5hdHRyKCJvcGFjaXR5IixTZikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXt2YXIgbj10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiBfKG4mJmlzRmluaXRlKG49bih0KSk/bjpiKHQpKX0pKSxrLnJlbW92ZSgpLE0uYXR0cigiZCIsdD09PWtmfHx0PT1NZj8iTSIrZCpoKyIsIittKyJIMC41ViIreCsiSCIrZCpoOiJNIittKyIsIitkKmgrIlYwLjVIIit4KyJWIitkKmgpLFQuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4gXyhiKHQpKX0pLE4uYXR0cihyKyIyIixkKmwpLEUuYXR0cihyLGQqZykudGV4dCh1KSx3LmZpbHRlcihjKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIix0PT09TWY/InN0YXJ0Ijp0PT09a2Y/ImVuZCI6Im1pZGRsZSIpLHcuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPWJ9KX12YXIgcixpPVtdLHM9bnVsbCxmPW51bGwsbD02LGg9NixwPTMsZD10PT09d2Z8fHQ9PT1rZj8tMToxLHY9dD09PWtmfHx0PT09TWY/KHI9IngiLCJ5Iik6KHI9InkiLCJ4IiksXz10PT09d2Z8fHQ9PT1UZj9vOnU7cmV0dXJuIGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlKTpufSxlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGk9eGYuY2FsbChhcmd1bWVudHMpLGV9LGUudGlja0FyZ3VtZW50cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10P1tdOnhmLmNhbGwodCksZSk6aS5zbGljZSgpfSxlLnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09dD9udWxsOnhmLmNhbGwodCksZSk6cyYmcy5zbGljZSgpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9dCxlKTpmfSxlLnRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPWg9K3QsZSk6bH0sZS50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0LGUpOmx9LGUudGlja1NpemVPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxlKTpofSxlLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0LGUpOnB9LGV9ZnVuY3Rpb24gZih0KXtyZXR1cm4gcyh3Zix0KX1mdW5jdGlvbiBsKHQpe3JldHVybiBzKE1mLHQpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHMoVGYsdCl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gcyhrZix0KX1mdW5jdGlvbiBkKCl7Zm9yKHZhciB0LG49MCxlPWFyZ3VtZW50cy5sZW5ndGgscj17fTtuPGU7KytuKXtpZighKHQ9YXJndW1lbnRzW25dKyIiKXx8dCBpbiByKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO3JbdF09W119cmV0dXJuIG5ldyB2KHIpfWZ1bmN0aW9uIHYodCl7dGhpcy5fPXR9ZnVuY3Rpb24gXyh0LG4pe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9IiIscj10LmluZGV4T2YoIi4iKTtpZihyPj0wJiYoZT10LnNsaWNlKHIrMSksdD10LnNsaWNlKDAscikpLHQmJiFuLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO3JldHVybnt0eXBlOnQsbmFtZTplfX0pfWZ1bmN0aW9uIGcodCxuKXtmb3IodmFyIGUscj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZigoZT10W3JdKS5uYW1lPT09bilyZXR1cm4gZS52YWx1ZX1mdW5jdGlvbiB5KHQsbixlKXtmb3IodmFyIHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYodFtyXS5uYW1lPT09bil7dFtyXT1OZix0PXQuc2xpY2UoMCxyKS5jb25jYXQodC5zbGljZShyKzEpKTticmVha31yZXR1cm4gbnVsbCE9ZSYmdC5wdXNoKHtuYW1lOm4sdmFsdWU6ZX0pLHR9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLm93bmVyRG9jdW1lbnQsZT10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZT09PUVmJiZuLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1FZj9uLmNyZWF0ZUVsZW1lbnQodCk6bi5jcmVhdGVFbGVtZW50TlMoZSx0KX19ZnVuY3Rpb24geCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBiKCl7cmV0dXJuIG5ldyB3fWZ1bmN0aW9uIHcoKXt0aGlzLl89IkAiKygrK1BmKS50b1N0cmluZygzNil9ZnVuY3Rpb24gTSh0LG4sZSl7cmV0dXJuIHQ9VCh0LG4sZSksZnVuY3Rpb24obil7dmFyIGU9bi5yZWxhdGVkVGFyZ2V0O2UmJihlPT09dGhpc3x8OCZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIFQobixlLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz10LmV2ZW50O3QuZXZlbnQ9aTt0cnl7bi5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLHIpfWZpbmFsbHl7dC5ldmVudD1vfX19ZnVuY3Rpb24gayh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBuPSIiLGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJihuPXQuc2xpY2UoZSsxKSx0PXQuc2xpY2UoMCxlKSkse3R5cGU6dCxuYW1lOm59fSl9ZnVuY3Rpb24gUyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLl9fb247aWYobil7Zm9yKHZhciBlLHI9MCxpPS0xLG89bi5sZW5ndGg7cjxvOysrcillPW5bcl0sdC50eXBlJiZlLnR5cGUhPT10LnR5cGV8fGUubmFtZSE9PXQubmFtZT9uWysraV09ZTp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZS50eXBlLGUubGlzdGVuZXIsZS5jYXB0dXJlKTsrK2k/bi5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gTih0LG4sZSl7dmFyIHI9RGYuaGFzT3duUHJvcGVydHkodC50eXBlKT9NOlQ7cmV0dXJuIGZ1bmN0aW9uKGksbyx1KXt2YXIgYSxjPXRoaXMuX19vbixzPXIobixvLHUpO2lmKGMpZm9yKHZhciBmPTAsbD1jLmxlbmd0aDtmPGw7KytmKWlmKChhPWNbZl0pLnR5cGU9PT10LnR5cGUmJmEubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEudHlwZSxhLmxpc3RlbmVyLGEuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGEudHlwZSxhLmxpc3RlbmVyPXMsYS5jYXB0dXJlPWUpLHZvaWQoYS52YWx1ZT1uKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLHMsZSksYT17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6bixsaXN0ZW5lcjpzLGNhcHR1cmU6ZX0sYz9jLnB1c2goYSk6dGhpcy5fX29uPVthXX19ZnVuY3Rpb24gRShuLGUscixpKXt2YXIgbz10LmV2ZW50O24uc291cmNlRXZlbnQ9dC5ldmVudCx0LmV2ZW50PW47dHJ5e3JldHVybiBlLmFwcGx5KHIsaSl9ZmluYWxseXt0LmV2ZW50PW99fWZ1bmN0aW9uIEEoKXt9ZnVuY3Rpb24gQygpe3JldHVybltdfWZ1bmN0aW9uIHoodCxuKXt0aGlzLm93bmVyRG9jdW1lbnQ9dC5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPXQubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9dCx0aGlzLl9fZGF0YV9fPW59ZnVuY3Rpb24gUCh0LG4sZSxyLGksbyl7Zm9yKHZhciB1LGE9MCxjPW4ubGVuZ3RoLHM9by5sZW5ndGg7YTxzOysrYSkodT1uW2FdKT8odS5fX2RhdGFfXz1vW2FdLHJbYV09dSk6ZVthXT1uZXcgeih0LG9bYV0pO2Zvcig7YTxjOysrYSkodT1uW2FdKSYmKGlbYV09dSl9ZnVuY3Rpb24gUih0LG4sZSxyLGksbyx1KXt2YXIgYSxjLHMsZj17fSxsPW4ubGVuZ3RoLGg9by5sZW5ndGgscD1uZXcgQXJyYXkobCk7Zm9yKGE9MDthPGw7KythKShjPW5bYV0pJiYocFthXT1zPUdmK3UuY2FsbChjLGMuX19kYXRhX18sYSxuKSxzIGluIGY/aVthXT1jOmZbc109Yyk7Zm9yKGE9MDthPGg7KythKXM9R2YrdS5jYWxsKHQsb1thXSxhLG8pLChjPWZbc10pPyhyW2FdPWMsYy5fX2RhdGFfXz1vW2FdLGZbc109bnVsbCk6ZVthXT1uZXcgeih0LG9bYV0pO2ZvcihhPTA7YTxsOysrYSkoYz1uW2FdKSYmZltwW2FdXT09PWMmJihpW2FdPWMpfWZ1bmN0aW9uIEwodCxuKXtyZXR1cm4gdDxuPy0xOnQ+bj8xOnQ+PW4/MDpOYU59ZnVuY3Rpb24gcSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gVSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIEQodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiBPKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsbil9fWZ1bmN0aW9uIEYodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpOnRoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uIEkodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlKX19ZnVuY3Rpb24gWSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBCKHQsbixlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsbixlKX19ZnVuY3Rpb24gaih0LG4sZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxyLGUpfX1mdW5jdGlvbiBIKHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBYKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1ufX1mdW5jdGlvbiBWKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPWV9fWZ1bmN0aW9uIFcodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uICQodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgWih0KX1mdW5jdGlvbiBaKHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1XKHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gRyh0LG4pe2Zvcih2YXIgZT0kKHQpLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspZS5hZGQobltyXSl9ZnVuY3Rpb24gSih0LG4pe2Zvcih2YXIgZT0kKHQpLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspZS5yZW1vdmUobltyXSl9ZnVuY3Rpb24gUSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtHKHRoaXMsdCl9fWZ1bmN0aW9uIEsodCl7cmV0dXJuIGZ1bmN0aW9uKCl7Sih0aGlzLHQpfX1mdW5jdGlvbiB0dCh0LG4pe3JldHVybiBmdW5jdGlvbigpeyhuLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9HOkopKHRoaXMsdCl9fWZ1bmN0aW9uIG50KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBldCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIHJ0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09bj8iIjpufX1mdW5jdGlvbiBpdCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIG90KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fWZ1bmN0aW9uIHV0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PW4/IiI6bn19ZnVuY3Rpb24gYXQoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gY3QoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBzdCgpe3JldHVybiBudWxsfWZ1bmN0aW9uIGZ0KCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gbHQodCxuLGUpe3ZhciByPXNsKHQpLGk9ci5DdXN0b21FdmVudDtpP2k9bmV3IGkobixlKTooaT1yLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KGkuaW5pdEV2ZW50KG4sZS5idWJibGVzLGUuY2FuY2VsYWJsZSksaS5kZXRhaWw9ZS5kZXRhaWwpOmkuaW5pdEV2ZW50KG4sITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gaHQodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbHQodGhpcyx0LG4pfX1mdW5jdGlvbiBwdCh0LG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBsdCh0aGlzLHQsbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBkdCh0LG4pe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9bn1mdW5jdGlvbiB2dCgpe3JldHVybiBuZXcgZHQoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSx3bCl9ZnVuY3Rpb24gX3QoKXt0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGd0KHQsbil7dmFyIGU9dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscj1NbCh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO24mJihyLm9uKCJjbGljay5kcmFnIixObCwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe3Iub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gZT9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooZS5zdHlsZS5Nb3pVc2VyU2VsZWN0PWUuX19ub3NlbGVjdCxkZWxldGUgZS5fX25vc2VsZWN0KX1mdW5jdGlvbiB5dCh0LG4sZSxyLGksbyx1LGEsYyxzKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1uLHRoaXMuc3ViamVjdD1lLHRoaXMuaWRlbnRpZmllcj1yLHRoaXMuYWN0aXZlPWksdGhpcy54PW8sdGhpcy55PXUsdGhpcy5keD1hLHRoaXMuZHk9Yyx0aGlzLl89c31mdW5jdGlvbiBtdCgpe3JldHVybiF0LmV2ZW50LmJ1dHRvbn1mdW5jdGlvbiB4dCgpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9ZnVuY3Rpb24gYnQobil7cmV0dXJuIG51bGw9PW4/e3g6dC5ldmVudC54LHk6dC5ldmVudC55fTpufWZ1bmN0aW9uIHd0KHQsbil7dmFyIGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciByIGluIG4pZVtyXT1uW3JdO3JldHVybiBlfWZ1bmN0aW9uIE10KCl7fWZ1bmN0aW9uIFR0KHQpe3ZhciBuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwobj1EbC5leGVjKHQpKT8obj1wYXJzZUludChuWzFdLDE2KSxuZXcgQXQobj4+OCYxNXxuPj40JjI0MCxuPj40JjE1fDI0MCZuLCgxNSZuKTw8NHwxNSZuLDEpKToobj1PbC5leGVjKHQpKT9rdChwYXJzZUludChuWzFdLDE2KSk6KG49RmwuZXhlYyh0KSk/bmV3IEF0KG5bMV0sblsyXSxuWzNdLDEpOihuPUlsLmV4ZWModCkpP25ldyBBdCgyNTUqblsxXS8xMDAsMjU1Km5bMl0vMTAwLDI1NSpuWzNdLzEwMCwxKToobj1ZbC5leGVjKHQpKT9TdChuWzFdLG5bMl0sblszXSxuWzRdKToobj1CbC5leGVjKHQpKT9TdCgyNTUqblsxXS8xMDAsMjU1Km5bMl0vMTAwLDI1NSpuWzNdLzEwMCxuWzRdKToobj1qbC5leGVjKHQpKT9DdChuWzFdLG5bMl0vMTAwLG5bM10vMTAwLDEpOihuPUhsLmV4ZWModCkpP0N0KG5bMV0sblsyXS8xMDAsblszXS8xMDAsbls0XSk6WGwuaGFzT3duUHJvcGVydHkodCk/a3QoWGxbdF0pOiJ0cmFuc3BhcmVudCI9PT10P25ldyBBdChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIGt0KHQpe3JldHVybiBuZXcgQXQodD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0LDEpfWZ1bmN0aW9uIFN0KHQsbixlLHIpe3JldHVybiByPD0wJiYodD1uPWU9TmFOKSxuZXcgQXQodCxuLGUscil9ZnVuY3Rpb24gTnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBNdHx8KHQ9VHQodCkpLHQ/KHQ9dC5yZ2IoKSxuZXcgQXQodC5yLHQuZyx0LmIsdC5vcGFjaXR5KSk6bmV3IEF0fWZ1bmN0aW9uIEV0KHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9OdCh0KTpuZXcgQXQodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIEF0KHQsbixlLHIpe3RoaXMucj0rdCx0aGlzLmc9K24sdGhpcy5iPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBDdCh0LG4sZSxyKXtyZXR1cm4gcjw9MD90PW49ZT1OYU46ZTw9MHx8ZT49MT90PW49TmFOOm48PTAmJih0PU5hTiksbmV3IFJ0KHQsbixlLHIpfWZ1bmN0aW9uIHp0KHQpe2lmKHQgaW5zdGFuY2VvZiBSdClyZXR1cm4gbmV3IFJ0KHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIE10fHwodD1UdCh0KSksIXQpcmV0dXJuIG5ldyBSdDtpZih0IGluc3RhbmNlb2YgUnQpcmV0dXJuIHQ7dD10LnJnYigpO3ZhciBuPXQuci8yNTUsZT10LmcvMjU1LHI9dC5iLzI1NSxpPU1hdGgubWluKG4sZSxyKSxvPU1hdGgubWF4KG4sZSxyKSx1PU5hTixhPW8taSxjPShvK2kpLzI7cmV0dXJuIGE/KHU9bj09PW8/KGUtcikvYSs2KihlPHIpOmU9PT1vPyhyLW4pL2ErMjoobi1lKS9hKzQsYS89YzwuNT9vK2k6Mi1vLWksdSo9NjApOmE9Yz4wJiZjPDE/MDp1LG5ldyBSdCh1LGEsYyx0Lm9wYWNpdHkpfWZ1bmN0aW9uIFB0KHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD96dCh0KTpuZXcgUnQodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIFJ0KHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLnM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBMdCh0LG4sZSl7cmV0dXJuIDI1NSoodDw2MD9uKyhlLW4pKnQvNjA6dDwxODA/ZTp0PDI0MD9uKyhlLW4pKigyNDAtdCkvNjA6bil9ZnVuY3Rpb24gcXQodCl7aWYodCBpbnN0YW5jZW9mIER0KXJldHVybiBuZXcgRHQodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgSHQpe3ZhciBuPXQuaCpWbDtyZXR1cm4gbmV3IER0KHQubCxNYXRoLmNvcyhuKSp0LmMsTWF0aC5zaW4obikqdC5jLHQub3BhY2l0eSl9dCBpbnN0YW5jZW9mIEF0fHwodD1OdCh0KSk7dmFyIGU9WXQodC5yKSxyPVl0KHQuZyksaT1ZdCh0LmIpLG89T3QoKC40MTI0NTY0KmUrLjM1NzU3NjEqcisuMTgwNDM3NSppKS9abCksdT1PdCgoLjIxMjY3MjkqZSsuNzE1MTUyMipyKy4wNzIxNzUqaSkvR2wpO3JldHVybiBuZXcgRHQoMTE2KnUtMTYsNTAwKihvLXUpLDIwMCoodS1PdCgoLjAxOTMzMzkqZSsuMTE5MTkyKnIrLjk1MDMwNDEqaSkvSmwpKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIFV0KHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9xdCh0KTpuZXcgRHQodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIER0KHQsbixlLHIpe3RoaXMubD0rdCx0aGlzLmE9K24sdGhpcy5iPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBPdCh0KXtyZXR1cm4gdD5uaD9NYXRoLnBvdyh0LDEvMyk6dC90aCtRbH1mdW5jdGlvbiBGdCh0KXtyZXR1cm4gdD5LbD90KnQqdDp0aCoodC1RbCl9ZnVuY3Rpb24gSXQodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBZdCh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBCdCh0KXtpZih0IGluc3RhbmNlb2YgSHQpcmV0dXJuIG5ldyBIdCh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBEdHx8KHQ9cXQodCkpO3ZhciBuPU1hdGguYXRhbjIodC5iLHQuYSkqV2w7cmV0dXJuIG5ldyBIdChuPDA/biszNjA6bixNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBqdCh0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/QnQodCk6bmV3IEh0KHQsbixlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBIdCh0LG4sZSxyKXt0aGlzLmg9K3QsdGhpcy5jPStuLHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gWHQodCl7aWYodCBpbnN0YW5jZW9mIFd0KXJldHVybiBuZXcgV3QodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgQXR8fCh0PU50KHQpKTt2YXIgbj10LnIvMjU1LGU9dC5nLzI1NSxyPXQuYi8yNTUsaT0oc2gqcithaCpuLWNoKmUpLyhzaCthaC1jaCksbz1yLWksdT0odWgqKGUtaSktaWgqbykvb2gsYT1NYXRoLnNxcnQodSp1K28qbykvKHVoKmkqKDEtaSkpLGM9YT9NYXRoLmF0YW4yKHUsbykqV2wtMTIwOk5hTjtyZXR1cm4gbmV3IFd0KGM8MD9jKzM2MDpjLGEsaSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIFZ0KHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9YdCh0KTpuZXcgV3QodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIFd0KHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLnM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiAkdCh0LG4sZSxyLGkpe3ZhciBvPXQqdCx1PW8qdDtyZXR1cm4oKDEtMyp0KzMqby11KSpuKyg0LTYqbyszKnUpKmUrKDErMyp0KzMqby0zKnUpKnIrdSppKS82fWZ1bmN0aW9uIFp0KHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0K2Uqbn19ZnVuY3Rpb24gR3QodCxuLGUpe3JldHVybiB0PU1hdGgucG93KHQsZSksbj1NYXRoLnBvdyhuLGUpLXQsZT0xL2UsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrcipuLGUpfX1mdW5jdGlvbiBKdCh0LG4pe3ZhciBlPW4tdDtyZXR1cm4gZT9adCh0LGU+MTgwfHxlPC0xODA/ZS0zNjAqTWF0aC5yb3VuZChlLzM2MCk6ZSk6eWgoaXNOYU4odCk/bjp0KX1mdW5jdGlvbiBRdCh0KXtyZXR1cm4gMT09PSh0PSt0KT9LdDpmdW5jdGlvbihuLGUpe3JldHVybiBlLW4/R3QobixlLHQpOnloKGlzTmFOKG4pP2U6bil9fWZ1bmN0aW9uIEt0KHQsbil7dmFyIGU9bi10O3JldHVybiBlP1p0KHQsZSk6eWgoaXNOYU4odCk/bjp0KX1mdW5jdGlvbiB0bih0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGUscixpPW4ubGVuZ3RoLG89bmV3IEFycmF5KGkpLHU9bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpO2ZvcihlPTA7ZTxpOysrZSlyPUV0KG5bZV0pLG9bZV09ci5yfHwwLHVbZV09ci5nfHwwLGFbZV09ci5ifHwwO3JldHVybiBvPXQobyksdT10KHUpLGE9dChhKSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPW8odCksci5nPXUodCksci5iPWEodCkscisiIn19fWZ1bmN0aW9uIG5uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBlbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQobikrIiJ9fWZ1bmN0aW9uIHJuKHQpe3JldHVybiJub25lIj09PXQ/UGg6KGZofHwoZmg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksbGg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGhoPWRvY3VtZW50LmRlZmF1bHRWaWV3KSxmaC5zdHlsZS50cmFuc2Zvcm09dCx0PWhoLmdldENvbXB1dGVkU3R5bGUobGguYXBwZW5kQ2hpbGQoZmgpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLGxoLnJlbW92ZUNoaWxkKGZoKSx0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxSaCgrdFswXSwrdFsxXSwrdFsyXSwrdFszXSwrdFs0XSwrdFs1XSkpfWZ1bmN0aW9uIG9uKHQpe3JldHVybiBudWxsPT10P1BoOihwaHx8KHBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLHBoLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1waC50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT8odD10Lm1hdHJpeCxSaCh0LmEsdC5iLHQuYyx0LmQsdC5lLHQuZikpOlBoKX1mdW5jdGlvbiB1bih0LG4sZSxyKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0Lmxlbmd0aD90LnBvcCgpKyIgIjoiIn1mdW5jdGlvbiBvKHQscixpLG8sdSxhKXtpZih0IT09aXx8ciE9PW8pe3ZhciBjPXUucHVzaCgidHJhbnNsYXRlKCIsbnVsbCxuLG51bGwsZSk7YS5wdXNoKHtpOmMtNCx4OlRoKHQsaSl9LHtpOmMtMix4OlRoKHIsbyl9KX1lbHNlKGl8fG8pJiZ1LnB1c2goInRyYW5zbGF0ZSgiK2krbitvK2UpfWZ1bmN0aW9uIHUodCxuLGUsbyl7dCE9PW4/KHQtbj4xODA/bis9MzYwOm4tdD4xODAmJih0Kz0zNjApLG8ucHVzaCh7aTplLnB1c2goaShlKSsicm90YXRlKCIsbnVsbCxyKS0yLHg6VGgodCxuKX0pKTpuJiZlLnB1c2goaShlKSsicm90YXRlKCIrbityKX1mdW5jdGlvbiBhKHQsbixlLG8pe3QhPT1uP28ucHVzaCh7aTplLnB1c2goaShlKSsic2tld1goIixudWxsLHIpLTIseDpUaCh0LG4pfSk6biYmZS5wdXNoKGkoZSkrInNrZXdYKCIrbityKX1mdW5jdGlvbiBjKHQsbixlLHIsbyx1KXtpZih0IT09ZXx8biE9PXIpe3ZhciBhPW8ucHVzaChpKG8pKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTt1LnB1c2goe2k6YS00LHg6VGgodCxlKX0se2k6YS0yLHg6VGgobixyKX0pfWVsc2UgMT09PWUmJjE9PT1yfHxvLnB1c2goaShvKSsic2NhbGUoIitlKyIsIityKyIpIil9cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9W10saT1bXTtyZXR1cm4gbj10KG4pLGU9dChlKSxvKG4udHJhbnNsYXRlWCxuLnRyYW5zbGF0ZVksZS50cmFuc2xhdGVYLGUudHJhbnNsYXRlWSxyLGkpLHUobi5yb3RhdGUsZS5yb3RhdGUscixpKSxhKG4uc2tld1gsZS5za2V3WCxyLGkpLGMobi5zY2FsZVgsbi5zY2FsZVksZS5zY2FsZVgsZS5zY2FsZVkscixpKSxuPWU9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIG4sZT0tMSxvPWkubGVuZ3RoOysrZTxvOylyWyhuPWlbZV0pLmldPW4ueCh0KTtyZXR1cm4gci5qb2luKCIiKX19fWZ1bmN0aW9uIGFuKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSkrMS90KS8yfWZ1bmN0aW9uIGNuKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfWZ1bmN0aW9uIHNuKHQpe3JldHVybigodD1NYXRoLmV4cCgyKnQpKS0xKS8odCsxKX1mdW5jdGlvbiBmbih0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KChuPVB0KG4pKS5oLChlPVB0KGUpKS5oKSxpPUt0KG4ucyxlLnMpLG89S3Qobi5sLGUubCksdT1LdChuLm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uaD1yKHQpLG4ucz1pKHQpLG4ubD1vKHQpLG4ub3BhY2l0eT11KHQpLG4rIiJ9fX1mdW5jdGlvbiBsbih0LG4pe3ZhciBlPUt0KCh0PVV0KHQpKS5sLChuPVV0KG4pKS5sKSxyPUt0KHQuYSxuLmEpLGk9S3QodC5iLG4uYiksbz1LdCh0Lm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQubD1lKG4pLHQuYT1yKG4pLHQuYj1pKG4pLHQub3BhY2l0eT1vKG4pLHQrIiJ9fWZ1bmN0aW9uIGhuKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPXQoKG49anQobikpLmgsKGU9anQoZSkpLmgpLGk9S3Qobi5jLGUuYyksbz1LdChuLmwsZS5sKSx1PUt0KG4ub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5oPXIodCksbi5jPWkodCksbi5sPW8odCksbi5vcGFjaXR5PXUodCksbisiIn19fWZ1bmN0aW9uIHBuKHQpe3JldHVybiBmdW5jdGlvbiBuKGUpe2Z1bmN0aW9uIHIobixyKXt2YXIgaT10KChuPVZ0KG4pKS5oLChyPVZ0KHIpKS5oKSxvPUt0KG4ucyxyLnMpLHU9S3Qobi5sLHIubCksYT1LdChuLm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uaD1pKHQpLG4ucz1vKHQpLG4ubD11KE1hdGgucG93KHQsZSkpLG4ub3BhY2l0eT1hKHQpLG4rIiJ9fXJldHVybiBlPStlLHIuZ2FtbWE9bixyfSgxKX1mdW5jdGlvbiBkbigpe3JldHVybiBLaHx8KGVwKHZuKSxLaD1ucC5ub3coKSt0cCl9ZnVuY3Rpb24gdm4oKXtLaD0wfWZ1bmN0aW9uIF9uKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBnbih0LG4sZSl7dmFyIHI9bmV3IF9uO3JldHVybiByLnJlc3RhcnQodCxuLGUpLHJ9ZnVuY3Rpb24geW4oKXtkbigpLCsrJGg7Zm9yKHZhciB0LG49ZGg7bjspKHQ9S2gtbi5fdGltZSk+PTAmJm4uX2NhbGwuY2FsbChudWxsLHQpLG49bi5fbmV4dDstLSRofWZ1bmN0aW9uIG1uKCl7S2g9KFFoPW5wLm5vdygpKSt0cCwkaD1aaD0wO3RyeXt5bigpfWZpbmFsbHl7JGg9MCxibigpLEtoPTB9fWZ1bmN0aW9uIHhuKCl7dmFyIHQ9bnAubm93KCksbj10LVFoO24+SmgmJih0cC09bixRaD10KX1mdW5jdGlvbiBibigpe2Zvcih2YXIgdCxuLGU9ZGgscj0xLzA7ZTspZS5fY2FsbD8ocj5lLl90aW1lJiYocj1lLl90aW1lKSx0PWUsZT1lLl9uZXh0KToobj1lLl9uZXh0LGUuX25leHQ9bnVsbCxlPXQ/dC5fbmV4dD1uOmRoPW4pO3ZoPXQsd24ocil9ZnVuY3Rpb24gd24odCl7aWYoISRoKXtaaCYmKFpoPWNsZWFyVGltZW91dChaaCkpO3ZhciBuPXQtS2g7bj4yND8odDwxLzAmJihaaD1zZXRUaW1lb3V0KG1uLG4pKSxHaCYmKEdoPWNsZWFySW50ZXJ2YWwoR2gpKSk6KEdofHwoUWg9S2gsR2g9c2V0SW50ZXJ2YWwoeG4sSmgpKSwkaD0xLGVwKG1uKSl9fWZ1bmN0aW9uIE1uKHQsbil7dmFyIGU9dC5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW25dKXx8ZS5zdGF0ZT5hcCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlIik7cmV0dXJuIGV9ZnVuY3Rpb24gVG4odCxuKXt2YXIgZT10Ll9fdHJhbnNpdGlvbjtpZighZXx8IShlPWVbbl0pfHxlLnN0YXRlPnNwKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGUiKTtyZXR1cm4gZX1mdW5jdGlvbiBrbih0LG4pe3ZhciBlPXQuX190cmFuc2l0aW9uO2lmKCFlfHwhKGU9ZVtuXSkpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZSIpO3JldHVybiBlfWZ1bmN0aW9uIFNuKHQsbixlKXtmdW5jdGlvbiByKHQpe2Uuc3RhdGU9Y3AsZS50aW1lci5yZXN0YXJ0KGksZS5kZWxheSxlLnRpbWUpLGUuZGVsYXk8PXQmJmkodC1lLmRlbGF5KX1mdW5jdGlvbiBpKHIpe3ZhciBzLGYsbCxoO2lmKGUuc3RhdGUhPT1jcClyZXR1cm4gdSgpO2ZvcihzIGluIGMpaWYoaD1jW3NdLGgubmFtZT09PWUubmFtZSl7aWYoaC5zdGF0ZT09PWZwKXJldHVybiBycChpKTtoLnN0YXRlPT09bHA/KGguc3RhdGU9cHAsaC50aW1lci5zdG9wKCksaC5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxoLmluZGV4LGguZ3JvdXApLGRlbGV0ZSBjW3NdKTorczxuJiYoaC5zdGF0ZT1wcCxoLnRpbWVyLnN0b3AoKSxkZWxldGUgY1tzXSl9aWYocnAoZnVuY3Rpb24oKXtlLnN0YXRlPT09ZnAmJihlLnN0YXRlPWxwLGUudGltZXIucmVzdGFydChvLGUuZGVsYXksZS50aW1lKSxvKHIpKX0pLGUuc3RhdGU9c3AsZS5vbi5jYWxsKCJzdGFydCIsdCx0Ll9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksZS5zdGF0ZT09PXNwKXtmb3IoZS5zdGF0ZT1mcCxhPW5ldyBBcnJheShsPWUudHdlZW4ubGVuZ3RoKSxzPTAsZj0tMTtzPGw7KytzKShoPWUudHdlZW5bc10udmFsdWUuY2FsbCh0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSkmJihhWysrZl09aCk7YS5sZW5ndGg9ZisxfX1mdW5jdGlvbiBvKG4pe2Zvcih2YXIgcj1uPGUuZHVyYXRpb24/ZS5lYXNlLmNhbGwobnVsbCxuL2UuZHVyYXRpb24pOihlLnRpbWVyLnJlc3RhcnQodSksZS5zdGF0ZT1ocCwxKSxpPS0xLG89YS5sZW5ndGg7KytpPG87KWFbaV0uY2FsbChudWxsLHIpO2Uuc3RhdGU9PT1ocCYmKGUub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSx1KCkpfWZ1bmN0aW9uIHUoKXtlLnN0YXRlPXBwLGUudGltZXIuc3RvcCgpLGRlbGV0ZSBjW25dO2Zvcih2YXIgciBpbiBjKXJldHVybjtkZWxldGUgdC5fX3RyYW5zaXRpb259dmFyIGEsYz10Ll9fdHJhbnNpdGlvbjtjW25dPWUsZS50aW1lcj1nbihyLDAsZS50aW1lKX1mdW5jdGlvbiBObih0LG4pe3ZhciBlLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9VG4odGhpcyx0KSxvPWkudHdlZW47aWYobyE9PWUpe3I9ZT1vO2Zvcih2YXIgdT0wLGE9ci5sZW5ndGg7dTxhOysrdSlpZihyW3VdLm5hbWU9PT1uKXtyPXIuc2xpY2UoKSxyLnNwbGljZSh1LDEpO2JyZWFrfX1pLnR3ZWVuPXJ9fWZ1bmN0aW9uIEVuKHQsbixlKXt2YXIgcixpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1Ubih0aGlzLHQpLHU9by50d2VlbjtpZih1IT09cil7aT0ocj11KS5zbGljZSgpO2Zvcih2YXIgYT17bmFtZTpuLHZhbHVlOmV9LGM9MCxzPWkubGVuZ3RoO2M8czsrK2MpaWYoaVtjXS5uYW1lPT09bil7aVtjXT1hO2JyZWFrfWM9PT1zJiZpLnB1c2goYSl9by50d2Vlbj1pfX1mdW5jdGlvbiBBbih0LG4sZSl7dmFyIHI9dC5faWQ7cmV0dXJuIHQuZWFjaChmdW5jdGlvbigpe3ZhciB0PVRuKHRoaXMscik7KHQudmFsdWV8fCh0LnZhbHVlPXt9KSlbbl09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbih0KXtyZXR1cm4ga24odCxyKS52YWx1ZVtuXX19ZnVuY3Rpb24gQ24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHpuKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gUG4odCxuLGUpe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUodCk7cmV0dXJuIG89PT1lP251bGw6bz09PXI/aTppPW4ocj1vLGUpfX1mdW5jdGlvbiBSbih0LG4sZSl7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1lP251bGw6bz09PXI/aTppPW4ocj1vLGUpfX1mdW5jdGlvbiBMbih0LG4sZSl7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciB1LGE9ZSh0aGlzKTtyZXR1cm4gbnVsbD09YT92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKHQpOih1PXRoaXMuZ2V0QXR0cmlidXRlKHQpLHU9PT1hP251bGw6dT09PXImJmE9PT1pP286bz1uKHI9dSxpPWEpKX19ZnVuY3Rpb24gcW4odCxuLGUpe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdSxhPWUodGhpcyk7cmV0dXJuIG51bGw9PWE/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6KHU9dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpLHU9PT1hP251bGw6dT09PXImJmE9PT1pP286bz1uKHI9dSxpPWEpKX19ZnVuY3Rpb24gVW4odCxuKXtmdW5jdGlvbiBlKCl7dmFyIGU9dGhpcyxyPW4uYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybiByJiZmdW5jdGlvbihuKXtlLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxyKG4pKX19cmV0dXJuIGUuX3ZhbHVlPW4sZX1mdW5jdGlvbiBEbih0LG4pe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzLHI9bi5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIHImJmZ1bmN0aW9uKG4pe2Uuc2V0QXR0cmlidXRlKHQscihuKSl9fXJldHVybiBlLl92YWx1ZT1uLGV9ZnVuY3Rpb24gT24odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtNbih0aGlzLHQpLmRlbGF5PStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gRm4odCxuKXtyZXR1cm4gbj0rbixmdW5jdGlvbigpe01uKHRoaXMsdCkuZGVsYXk9bn19ZnVuY3Rpb24gSW4odCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtUbih0aGlzLHQpLmR1cmF0aW9uPStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gWW4odCxuKXtyZXR1cm4gbj0rbixmdW5jdGlvbigpe1RuKHRoaXMsdCkuZHVyYXRpb249bn19ZnVuY3Rpb24gQm4odCxuKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7VG4odGhpcyx0KS5lYXNlPW59fWZ1bmN0aW9uIGpuKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJih0PXQuc2xpY2UoMCxuKSksIXR8fCJzdGFydCI9PT10fSl9ZnVuY3Rpb24gSG4odCxuLGUpe3ZhciByLGksbz1qbihuKT9NbjpUbjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdT1vKHRoaXMsdCksYT11Lm9uO2EhPT1yJiYoaT0ocj1hKS5jb3B5KCkpLm9uKG4sZSksdS5vbj1pfX1mdW5jdGlvbiBYbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBlIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtlIT09dClyZXR1cm47biYmbi5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gVm4odCxuKXt2YXIgZSxyLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89c2wodGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLHU9by5nZXRQcm9wZXJ0eVZhbHVlKHQpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksby5nZXRQcm9wZXJ0eVZhbHVlKHQpKTtyZXR1cm4gdT09PWE/bnVsbDp1PT09ZSYmYT09PXI/aTppPW4oZT11LHI9YSl9fWZ1bmN0aW9uIFduKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9fWZ1bmN0aW9uICRuKHQsbixlKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXNsKHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpO3JldHVybiBvPT09ZT9udWxsOm89PT1yP2k6aT1uKHI9byxlKX19ZnVuY3Rpb24gWm4odCxuLGUpe3ZhciByLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdT1zbCh0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCksYT11LmdldFByb3BlcnR5VmFsdWUodCksYz1lKHRoaXMpO3JldHVybiBudWxsPT1jJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxjPXUuZ2V0UHJvcGVydHlWYWx1ZSh0KSksYT09PWM/bnVsbDphPT09ciYmYz09PWk/bzpvPW4ocj1hLGk9Yyl9fWZ1bmN0aW9uIEduKHQsbixlKXtmdW5jdGlvbiByKCl7dmFyIHI9dGhpcyxpPW4uYXBwbHkocixhcmd1bWVudHMpO3JldHVybiBpJiZmdW5jdGlvbihuKXtyLnN0eWxlLnNldFByb3BlcnR5KHQsaShuKSxlKX19cmV0dXJuIHIuX3ZhbHVlPW4scn1mdW5jdGlvbiBKbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIFFuKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQodGhpcyk7dGhpcy50ZXh0Q29udGVudD1udWxsPT1uPyIiOm59fWZ1bmN0aW9uIEtuKHQsbixlLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9bix0aGlzLl9uYW1lPWUsdGhpcy5faWQ9cn1mdW5jdGlvbiB0ZSh0KXtyZXR1cm4gdnQoKS50cmFuc2l0aW9uKHQpfWZ1bmN0aW9uIG5lKCl7cmV0dXJuKytVcH1mdW5jdGlvbiBlZSh0KXtyZXR1cm4rdH1mdW5jdGlvbiByZSh0KXtyZXR1cm4gdCp0fWZ1bmN0aW9uIGllKHQpe3JldHVybiB0KigyLXQpfWZ1bmN0aW9uIG9lKHQpe3JldHVybigodCo9Mik8PTE/dCp0Oi0tdCooMi10KSsxKS8yfWZ1bmN0aW9uIHVlKHQpe3JldHVybiB0KnQqdH1mdW5jdGlvbiBhZSh0KXtyZXR1cm4tLXQqdCp0KzF9ZnVuY3Rpb24gY2UodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9ZnVuY3Rpb24gc2UodCl7cmV0dXJuIDEtTWF0aC5jb3ModCpqcCl9ZnVuY3Rpb24gZmUodCl7cmV0dXJuIE1hdGguc2luKHQqanApfWZ1bmN0aW9uIGxlKHQpe3JldHVybigxLU1hdGguY29zKEJwKnQpKS8yfWZ1bmN0aW9uIGhlKHQpe3JldHVybiBNYXRoLnBvdygyLDEwKnQtMTApfWZ1bmN0aW9uIHBlKHQpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKnQpfWZ1bmN0aW9uIGRlKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3coMiwxMCp0LTEwKToyLU1hdGgucG93KDIsMTAtMTAqdCkpLzJ9ZnVuY3Rpb24gdmUodCl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtdCp0KX1mdW5jdGlvbiBfZSh0KXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tdCp0KX1mdW5jdGlvbiBnZSh0KXtyZXR1cm4oKHQqPTIpPD0xPzEtTWF0aC5zcXJ0KDEtdCp0KTpNYXRoLnNxcnQoMS0odC09MikqdCkrMSkvMn1mdW5jdGlvbiB5ZSh0KXtyZXR1cm4gMS1tZSgxLXQpfWZ1bmN0aW9uIG1lKHQpe3JldHVybih0PSt0KTxIcD9LcCp0KnQ6dDxWcD9LcCoodC09WHApKnQrV3A6dDxacD9LcCoodC09JHApKnQrR3A6S3AqKHQtPUpwKSp0K1FwfWZ1bmN0aW9uIHhlKHQpe3JldHVybigodCo9Mik8PTE/MS1tZSgxLXQpOm1lKHQtMSkrMSkvMn1mdW5jdGlvbiBiZSh0LG4pe2Zvcih2YXIgZTshKGU9dC5fX3RyYW5zaXRpb24pfHwhKGU9ZVtuXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBmZC50aW1lPWRuKCksZmQ7cmV0dXJuIGV9ZnVuY3Rpb24gd2UoKXt0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIE1lKHQpe3JldHVybnt0eXBlOnR9fWZ1bmN0aW9uIFRlKCl7cmV0dXJuIXQuZXZlbnQuYnV0dG9ufWZ1bmN0aW9uIGtlKCl7dmFyIHQ9dGhpcy5vd25lclNWR0VsZW1lbnR8fHRoaXM7cmV0dXJuW1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIFNlKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24gTmUodCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiBFZSh0KXt2YXIgbj10Ll9fYnJ1c2g7cmV0dXJuIG4/bi5kaW0ub3V0cHV0KG4uc2VsZWN0aW9uKTpudWxsfWZ1bmN0aW9uIEFlKCl7cmV0dXJuIHplKGJkKX1mdW5jdGlvbiBDZSgpe3JldHVybiB6ZSh3ZCl9ZnVuY3Rpb24gemUobil7ZnVuY3Rpb24gZSh0KXt2YXIgZT10LnByb3BlcnR5KCJfX2JydXNoIixhKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbTWUoIm92ZXJsYXkiKV0pO2UuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm92ZXJsYXkiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoImN1cnNvciIsVGQub3ZlcmxheSkubWVyZ2UoZSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PVNlKHRoaXMpLmV4dGVudDtNbCh0aGlzKS5hdHRyKCJ4Iix0WzBdWzBdKS5hdHRyKCJ5Iix0WzBdWzFdKS5hdHRyKCJ3aWR0aCIsdFsxXVswXS10WzBdWzBdKS5hdHRyKCJoZWlnaHQiLHRbMV1bMV0tdFswXVsxXSl9KSx0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW01lKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLFRkLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciBpPXQuc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YShuLmhhbmRsZXMsZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZX0pO2kuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrdC50eXBlfSkuYXR0cigiY3Vyc29yIixmdW5jdGlvbih0KXtyZXR1cm4gVGRbdC50eXBlXX0pLHQuZWFjaChyKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKS5vbigibW91c2Vkb3duLmJydXNoIHRvdWNoc3RhcnQuYnJ1c2giLHUpfWZ1bmN0aW9uIHIoKXt2YXIgdD1NbCh0aGlzKSxuPVNlKHRoaXMpLnNlbGVjdGlvbjtuPyh0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixuWzBdWzBdKS5hdHRyKCJ5IixuWzBdWzFdKS5hdHRyKCJ3aWR0aCIsblsxXVswXS1uWzBdWzBdKS5hdHRyKCJoZWlnaHQiLG5bMV1bMV0tblswXVsxXSksdC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuImUiPT09dC50eXBlW3QudHlwZS5sZW5ndGgtMV0/blsxXVswXS1oLzI6blswXVswXS1oLzJ9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4icyI9PT10LnR5cGVbMF0/blsxXVsxXS1oLzI6blswXVsxXS1oLzJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIm4iPT09dC50eXBlfHwicyI9PT10LnR5cGU/blsxXVswXS1uWzBdWzBdK2g6aH0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuImUiPT09dC50eXBlfHwidyI9PT10LnR5cGU/blsxXVsxXS1uWzBdWzFdK2g6aH0pKTp0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gaSh0LG4pe3JldHVybiB0Ll9fYnJ1c2guZW1pdHRlcnx8bmV3IG8odCxuKX1mdW5jdGlvbiBvKHQsbil7dGhpcy50aGF0PXQsdGhpcy5hcmdzPW4sdGhpcy5zdGF0ZT10Ll9fYnJ1c2gsdGhpcy5hY3RpdmU9MH1mdW5jdGlvbiB1KCl7ZnVuY3Rpb24gZSgpe3ZhciB0PVlmKFQpOyFVfHx3fHxNfHwoTWF0aC5hYnModFswXS1PWzBdKT5NYXRoLmFicyh0WzFdLU9bMV0pP009ITA6dz0hMCksTz10LGI9ITAsX2QoKSxvKCl9ZnVuY3Rpb24gbygpe3ZhciB0O3N3aXRjaChtPU9bMF0tRFswXSx4PU9bMV0tRFsxXSxTKXtjYXNlIHlkOmNhc2UgZ2Q6TiYmKG09TWF0aC5tYXgoUC1sLE1hdGgubWluKEwtdixtKSksaD1sK20sXz12K20pLEUmJih4PU1hdGgubWF4KFItcCxNYXRoLm1pbihxLWcseCkpLGQ9cCt4LHk9Zyt4KTticmVhaztjYXNlIG1kOk48MD8obT1NYXRoLm1heChQLWwsTWF0aC5taW4oTC1sLG0pKSxoPWwrbSxfPXYpOk4+MCYmKG09TWF0aC5tYXgoUC12LE1hdGgubWluKEwtdixtKSksaD1sLF89dittKSxFPDA/KHg9TWF0aC5tYXgoUi1wLE1hdGgubWluKHEtcCx4KSksZD1wK3gseT1nKTpFPjAmJih4PU1hdGgubWF4KFItZyxNYXRoLm1pbihxLWcseCkpLGQ9cCx5PWcreCk7YnJlYWs7Y2FzZSB4ZDpOJiYoaD1NYXRoLm1heChQLE1hdGgubWluKEwsbC1tKk4pKSxfPU1hdGgubWF4KFAsTWF0aC5taW4oTCx2K20qTikpKSxFJiYoZD1NYXRoLm1heChSLE1hdGgubWluKHEscC14KkUpKSx5PU1hdGgubWF4KFIsTWF0aC5taW4ocSxnK3gqRSkpKX1fPGgmJihOKj0tMSx0PWwsbD12LHY9dCx0PWgsaD1fLF89dCxrIGluIGtkJiZZLmF0dHIoImN1cnNvciIsVGRbaz1rZFtrXV0pKSx5PGQmJihFKj0tMSx0PXAscD1nLGc9dCx0PWQsZD15LHk9dCxrIGluIFNkJiZZLmF0dHIoImN1cnNvciIsVGRbaz1TZFtrXV0pKSxBLnNlbGVjdGlvbiYmKHo9QS5zZWxlY3Rpb24pLHcmJihoPXpbMF1bMF0sXz16WzFdWzBdKSxNJiYoZD16WzBdWzFdLHk9elsxXVsxXSkselswXVswXT09PWgmJnpbMF1bMV09PT1kJiZ6WzFdWzBdPT09XyYmelsxXVsxXT09PXl8fChBLnNlbGVjdGlvbj1bW2gsZF0sW18seV1dLHIuY2FsbChUKSxGLmJydXNoKCkpfWZ1bmN0aW9uIHUoKXtpZih3ZSgpLHQuZXZlbnQudG91Y2hlcyl7aWYodC5ldmVudC50b3VjaGVzLmxlbmd0aClyZXR1cm47YyYmY2xlYXJUaW1lb3V0KGMpLGM9c2V0VGltZW91dChmdW5jdGlvbigpe2M9bnVsbH0sNTAwKSxJLm9uKCJ0b3VjaG1vdmUuYnJ1c2ggdG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLG51bGwpfWVsc2UgZ3QodC5ldmVudC52aWV3LGIpLEIub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO0kuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxZLmF0dHIoImN1cnNvciIsVGQub3ZlcmxheSksQS5zZWxlY3Rpb24mJih6PUEuc2VsZWN0aW9uKSxOZSh6KSYmKEEuc2VsZWN0aW9uPW51bGwsci5jYWxsKFQpKSxGLmVuZCgpfWZ1bmN0aW9uIGEoKXtzd2l0Y2godC5ldmVudC5rZXlDb2RlKXtjYXNlIDE2OlU9TiYmRTticmVhaztjYXNlIDE4OlM9PT1tZCYmKE4mJih2PV8tbSpOLGw9aCttKk4pLEUmJihnPXkteCpFLHA9ZCt4KkUpLFM9eGQsbygpKTticmVhaztjYXNlIDMyOlMhPT1tZCYmUyE9PXhkfHwoTjwwP3Y9Xy1tOk4+MCYmKGw9aC1tKSxFPDA/Zz15LXg6RT4wJiYocD1kLXgpLFM9eWQsWS5hdHRyKCJjdXJzb3IiLFRkLnNlbGVjdGlvbiksbygpKTticmVhaztkZWZhdWx0OnJldHVybn1fZCgpfWZ1bmN0aW9uIHMoKXtzd2l0Y2godC5ldmVudC5rZXlDb2RlKXtjYXNlIDE2OlUmJih3PU09VT0hMSxvKCkpO2JyZWFrO2Nhc2UgMTg6Uz09PXhkJiYoTjwwP3Y9XzpOPjAmJihsPWgpLEU8MD9nPXk6RT4wJiYocD1kKSxTPW1kLG8oKSk7YnJlYWs7Y2FzZSAzMjpTPT09eWQmJih0LmV2ZW50LmFsdEtleT8oTiYmKHY9Xy1tKk4sbD1oK20qTiksRSYmKGc9eS14KkUscD1kK3gqRSksUz14ZCk6KE48MD92PV86Tj4wJiYobD1oKSxFPDA/Zz15OkU+MCYmKHA9ZCksUz1tZCksWS5hdHRyKCJjdXJzb3IiLFRkW2tdKSxvKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufV9kKCl9aWYodC5ldmVudC50b3VjaGVzKXtpZih0LmV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aDx0LmV2ZW50LnRvdWNoZXMubGVuZ3RoKXJldHVybiBfZCgpfWVsc2UgaWYoYylyZXR1cm47aWYoZi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBsLGgscCxkLHYsXyxnLHksbSx4LGIsdyxNLFQ9dGhpcyxrPXQuZXZlbnQudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsUz0ic2VsZWN0aW9uIj09PSh0LmV2ZW50Lm1ldGFLZXk/az0ib3ZlcmxheSI6ayk/Z2Q6dC5ldmVudC5hbHRLZXk/eGQ6bWQsTj1uPT09d2Q/bnVsbDpOZFtrXSxFPW49PT1iZD9udWxsOkVkW2tdLEE9U2UoVCksQz1BLmV4dGVudCx6PUEuc2VsZWN0aW9uLFA9Q1swXVswXSxSPUNbMF1bMV0sTD1DWzFdWzBdLHE9Q1sxXVsxXSxVPU4mJkUmJnQuZXZlbnQuc2hpZnRLZXksRD1ZZihUKSxPPUQsRj1pKFQsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpOyJvdmVybGF5Ij09PWs/QS5zZWxlY3Rpb249ej1bW2w9bj09PXdkP1A6RFswXSxwPW49PT1iZD9SOkRbMV1dLFt2PW49PT13ZD9MOmwsZz1uPT09YmQ/cTpwXV06KGw9elswXVswXSxwPXpbMF1bMV0sdj16WzFdWzBdLGc9elsxXVsxXSksaD1sLGQ9cCxfPXYseT1nO3ZhciBJPU1sKFQpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLFk9SS5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixUZFtrXSk7aWYodC5ldmVudC50b3VjaGVzKUkub24oInRvdWNobW92ZS5icnVzaCIsZSwhMCkub24oInRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIix1LCEwKTtlbHNle3ZhciBCPU1sKHQuZXZlbnQudmlldykub24oImtleWRvd24uYnJ1c2giLGEsITApLm9uKCJrZXl1cC5icnVzaCIscywhMCkub24oIm1vdXNlbW92ZS5icnVzaCIsZSwhMCkub24oIm1vdXNldXAuYnJ1c2giLHUsITApO0VsKHQuZXZlbnQudmlldyl9d2UoKSx2cChUKSxyLmNhbGwoVCksRi5zdGFydCgpfX1mdW5jdGlvbiBhKCl7dmFyIHQ9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiB0LmV4dGVudD1zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmRpbT1uLHR9dmFyIGMscz1rZSxmPVRlLGw9ZChlLCJzdGFydCIsImJydXNoIiwiZW5kIiksaD02O3JldHVybiBlLm1vdmU9ZnVuY3Rpb24odCxlKXt0LnNlbGVjdGlvbj90Lm9uKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXtpKHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsZnVuY3Rpb24oKXtpKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJicnVzaCIsZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3Uuc2VsZWN0aW9uPTE9PT10JiZOZShzKT9udWxsOmYodCksci5jYWxsKG8pLGEuYnJ1c2goKX12YXIgbz10aGlzLHU9by5fX2JydXNoLGE9aShvLGFyZ3VtZW50cyksYz11LnNlbGVjdGlvbixzPW4uaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSx1LmV4dGVudCksZj1BaChjLHMpO3JldHVybiBjJiZzP3Q6dCgxKX0pOnQuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRoaXMsbz1hcmd1bWVudHMsdT10Ll9fYnJ1c2gsYT1uLmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodCxvKTplLHUuZXh0ZW50KSxjPWkodCxvKS5iZWZvcmVzdGFydCgpO3ZwKHQpLHUuc2VsZWN0aW9uPW51bGw9PWF8fE5lKGEpP251bGw6YSxyLmNhbGwodCksYy5zdGFydCgpLmJydXNoKCkuZW5kKCl9KX0sby5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydGluZyYmKHRoaXMuc3RhcnRpbmc9ITEsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSxicnVzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXQoImJydXNoIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlcix0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHQpe0UobmV3IHZkKGUsdCxuLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLGwuYXBwbHksbCxbdCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxlLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmRkKFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxlKTpzfSxlLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmRkKCEhdCksZSk6Zn0sZS5oYW5kbGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSt0LGUpOmh9LGUub249ZnVuY3Rpb24oKXt2YXIgdD1sLm9uLmFwcGx5KGwsYXJndW1lbnRzKTtyZXR1cm4gdD09PWw/ZTp0fSxlfWZ1bmN0aW9uIFBlKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3JldHVybiB0KG4uc291cmNlLnZhbHVlK24udGFyZ2V0LnZhbHVlLGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gUmUoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBMZSgpe3JldHVybiBuZXcgUmV9ZnVuY3Rpb24gcWUodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIFVlKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBEZSh0KXtyZXR1cm4gdC5yYWRpdXN9ZnVuY3Rpb24gT2UodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBGZSh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBJZSgpe31mdW5jdGlvbiBZZSh0LG4pe3ZhciBlPW5ldyBJZTtpZih0IGluc3RhbmNlb2YgSWUpdC5lYWNoKGZ1bmN0aW9uKHQsbil7ZS5zZXQobix0KX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIHIsaT0tMSxvPXQubGVuZ3RoO2lmKG51bGw9PW4pZm9yKDsrK2k8bzspZS5zZXQoaSx0W2ldKTtlbHNlIGZvcig7KytpPG87KWUuc2V0KG4ocj10W2ldLGksdCkscil9ZWxzZSBpZih0KWZvcih2YXIgdSBpbiB0KWUuc2V0KHUsdFt1XSk7cmV0dXJuIGV9ZnVuY3Rpb24gQmUoKXtyZXR1cm57fX1mdW5jdGlvbiBqZSh0LG4sZSl7dFtuXT1lfWZ1bmN0aW9uIEhlKCl7cmV0dXJuIFllKCl9ZnVuY3Rpb24gWGUodCxuLGUpe3Quc2V0KG4sZSl9ZnVuY3Rpb24gVmUoKXt9ZnVuY3Rpb24gV2UodCxuKXt2YXIgZT1uZXcgVmU7aWYodCBpbnN0YW5jZW9mIFZlKXQuZWFjaChmdW5jdGlvbih0KXtlLmFkZCh0KX0pO2Vsc2UgaWYodCl7dmFyIHI9LTEsaT10Lmxlbmd0aDtpZihudWxsPT1uKWZvcig7KytyPGk7KWUuYWRkKHRbcl0pO2Vsc2UgZm9yKDsrK3I8aTspZS5hZGQobih0W3JdLHIsdCkpfXJldHVybiBlfWZ1bmN0aW9uICRlKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK24rIl0ifSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gWmUodCxuKXt2YXIgZT0kZSh0KTtyZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gbihlKHIpLGksdCl9fWZ1bmN0aW9uIEdlKHQpe3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCksZT1bXTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgciBpbiB0KXIgaW4gbnx8ZS5wdXNoKG5bcl09cil9KSxlfWZ1bmN0aW9uIEplKHQsbixlLHIpe2lmKGlzTmFOKG4pfHxpc05hTihlKSlyZXR1cm4gdDt2YXIgaSxvLHUsYSxjLHMsZixsLGgscD10Ll9yb290LGQ9e2RhdGE6cn0sdj10Ll94MCxfPXQuX3kwLGc9dC5feDEseT10Ll95MTtpZighcClyZXR1cm4gdC5fcm9vdD1kLHQ7Zm9yKDtwLmxlbmd0aDspaWYoKHM9bj49KG89KHYrZykvMikpP3Y9bzpnPW8sKGY9ZT49KHU9KF8reSkvMikpP189dTp5PXUsaT1wLCEocD1wW2w9Zjw8MXxzXSkpcmV0dXJuIGlbbF09ZCx0O2lmKGE9K3QuX3guY2FsbChudWxsLHAuZGF0YSksYz0rdC5feS5jYWxsKG51bGwscC5kYXRhKSxuPT09YSYmZT09PWMpcmV0dXJuIGQubmV4dD1wLGk/aVtsXT1kOnQuX3Jvb3Q9ZCx0O2RvIGk9aT9pW2xdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwocz1uPj0obz0oditnKS8yKSk/dj1vOmc9bywoZj1lPj0odT0oXyt5KS8yKSk/Xz11Onk9dTt3aGlsZSgobD1mPDwxfHMpPT09KGg9KGM+PXUpPDwxfGE+PW8pKTtyZXR1cm4gaVtoXT1wLGlbbF09ZCx0fWZ1bmN0aW9uIFFlKHQpe3ZhciBuLGUscixpLG89dC5sZW5ndGgsdT1uZXcgQXJyYXkobyksYT1uZXcgQXJyYXkobyksYz0xLzAscz0xLzAsZj0tKDEvMCksbD0tKDEvMCk7Zm9yKGU9MDtlPG87KytlKWlzTmFOKHI9K3RoaXMuX3guY2FsbChudWxsLG49dFtlXSkpfHxpc05hTihpPSt0aGlzLl95LmNhbGwobnVsbCxuKSl8fCh1W2VdPXIsYVtlXT1pLHI8YyYmKGM9cikscj5mJiYoZj1yKSxpPHMmJihzPWkpLGk+bCYmKGw9aSkpO2ZvcihmPGMmJihjPXRoaXMuX3gwLGY9dGhpcy5feDEpLGw8cyYmKHM9dGhpcy5feTAsbD10aGlzLl95MSksdGhpcy5jb3ZlcihjLHMpLmNvdmVyKGYsbCksZT0wO2U8bzsrK2UpSmUodGhpcyx1W2VdLGFbZV0sdFtlXSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gS2UodCl7Zm9yKHZhciBuPTAsZT10Lmxlbmd0aDtuPGU7KytuKXRoaXMucmVtb3ZlKHRbbl0pO3JldHVybiB0aGlzfWZ1bmN0aW9uIHRyKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIG5yKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIGVyKHQsbixlKXt2YXIgcj1uZXcgcnIobnVsbD09bj90cjpuLG51bGw9PWU/bnI6ZSxOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P3I6ci5hZGRBbGwodCl9ZnVuY3Rpb24gcnIodCxuLGUscixpLG8pe3RoaXMuX3g9dCx0aGlzLl95PW4sdGhpcy5feDA9ZSx0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBpcih0KXtmb3IodmFyIG49e2RhdGE6dC5kYXRhfSxlPW47dD10Lm5leHQ7KWU9ZS5uZXh0PXtkYXRhOnQuZGF0YX07cmV0dXJuIG59ZnVuY3Rpb24gb3IodCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIHVyKHQpe3JldHVybiB0LnkrdC52eX1mdW5jdGlvbiBhcih0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBjcih0LG4pe3ZhciBlPXQuZ2V0KG4pO2lmKCFlKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIituKTtyZXR1cm4gZX1mdW5jdGlvbiBzcih0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIGZyKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gbHIodCl7cmV0dXJuIG5ldyBocih0KX1mdW5jdGlvbiBocih0KXtpZighKG49WXYuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgbixlPW5bMV18fCIgIixyPW5bMl18fCI+IixpPW5bM118fCItIixvPW5bNF18fCIiLHU9ISFuWzVdLGE9bls2XSYmK25bNl0sYz0hIW5bN10scz1uWzhdJiYrbls4XS5zbGljZSgxKSxmPW5bOV18fCIiOyJuIj09PWY/KGM9ITAsZj0iZyIpOkl2W2ZdfHwoZj0iIiksKHV8fCIwIj09PWUmJiI9Ij09PXIpJiYodT0hMCxlPSIwIixyPSI9IiksdGhpcy5maWxsPWUsdGhpcy5hbGlnbj1yLHRoaXMuc2lnbj1pLHRoaXMuc3ltYm9sPW8sdGhpcy56ZXJvPXUsdGhpcy53aWR0aD1hLHRoaXMuY29tbWE9Yyx0aGlzLnByZWNpc2lvbj1zLHRoaXMudHlwZT1mfWZ1bmN0aW9uIHByKG4pewpyZXR1cm4gQnY9WHYobiksdC5mb3JtYXQ9QnYuZm9ybWF0LHQuZm9ybWF0UHJlZml4PUJ2LmZvcm1hdFByZWZpeCxCdn1mdW5jdGlvbiBkcigpe3RoaXMucmVzZXQoKX1mdW5jdGlvbiB2cih0LG4sZSl7dmFyIHI9dC5zPW4rZSxpPXItbixvPXItaTt0LnQ9bi1vKyhlLWkpfWZ1bmN0aW9uIF9yKHQpe3JldHVybiB0PjE/MDp0PC0xP0NfOk1hdGguYWNvcyh0KX1mdW5jdGlvbiBncih0KXtyZXR1cm4gdD4xP3pfOnQ8LTE/LXpfOk1hdGguYXNpbih0KX1mdW5jdGlvbiB5cih0KXtyZXR1cm4odD1IXyh0LzIpKSp0fWZ1bmN0aW9uIG1yKCl7fWZ1bmN0aW9uIHhyKHQsbil7dCYmWl8uaGFzT3duUHJvcGVydHkodC50eXBlKSYmWl9bdC50eXBlXSh0LG4pfWZ1bmN0aW9uIGJyKHQsbixlKXt2YXIgcixpPS0xLG89dC5sZW5ndGgtZTtmb3Iobi5saW5lU3RhcnQoKTsrK2k8bzspcj10W2ldLG4ucG9pbnQoclswXSxyWzFdLHJbMl0pO24ubGluZUVuZCgpfWZ1bmN0aW9uIHdyKHQsbil7dmFyIGU9LTEscj10Lmxlbmd0aDtmb3Iobi5wb2x5Z29uU3RhcnQoKTsrK2U8cjspYnIodFtlXSxuLDEpO24ucG9seWdvbkVuZCgpfWZ1bmN0aW9uIE1yKCl7S18ucG9pbnQ9a3J9ZnVuY3Rpb24gVHIoKXtTcihHdixKdil9ZnVuY3Rpb24ga3IodCxuKXtLXy5wb2ludD1TcixHdj10LEp2PW4sdCo9cV8sbio9cV8sUXY9dCxLdj1GXyhuPW4vMitQXyksdF89SF8obil9ZnVuY3Rpb24gU3IodCxuKXt0Kj1xXyxuKj1xXyxuPW4vMitQXzt2YXIgZT10LVF2LHI9ZT49MD8xOi0xLGk9ciplLG89Rl8obiksdT1IXyhuKSxhPXRfKnUsYz1LdipvK2EqRl8oaSkscz1hKnIqSF8oaSk7Sl8uYWRkKE9fKHMsYykpLFF2PXQsS3Y9byx0Xz11fWZ1bmN0aW9uIE5yKHQpe3JldHVybltPXyh0WzFdLHRbMF0pLGdyKHRbMl0pXX1mdW5jdGlvbiBFcih0KXt2YXIgbj10WzBdLGU9dFsxXSxyPUZfKGUpO3JldHVybltyKkZfKG4pLHIqSF8obiksSF8oZSldfWZ1bmN0aW9uIEFyKHQsbil7cmV0dXJuIHRbMF0qblswXSt0WzFdKm5bMV0rdFsyXSpuWzJdfWZ1bmN0aW9uIENyKHQsbil7cmV0dXJuW3RbMV0qblsyXS10WzJdKm5bMV0sdFsyXSpuWzBdLXRbMF0qblsyXSx0WzBdKm5bMV0tdFsxXSpuWzBdXX1mdW5jdGlvbiB6cih0LG4pe3RbMF0rPW5bMF0sdFsxXSs9blsxXSx0WzJdKz1uWzJdfWZ1bmN0aW9uIFByKHQsbil7cmV0dXJuW3RbMF0qbix0WzFdKm4sdFsyXSpuXX1mdW5jdGlvbiBScih0KXt2YXIgbj1WXyh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSk7dFswXS89bix0WzFdLz1uLHRbMl0vPW59ZnVuY3Rpb24gTHIodCxuKXtzXy5wdXNoKGZfPVtuXz10LHJfPXRdKSxuPGVfJiYoZV89biksbj5pXyYmKGlfPW4pfWZ1bmN0aW9uIHFyKHQsbil7dmFyIGU9RXIoW3QqcV8sbipxX10pO2lmKGNfKXt2YXIgcj1DcihjXyxlKSxpPVtyWzFdLC1yWzBdLDBdLG89Q3IoaSxyKTtScihvKSxvPU5yKG8pO3ZhciB1LGE9dC1vXyxjPWE+MD8xOi0xLHM9b1swXSpMXypjLGY9VV8oYSk+MTgwO2ZeKGMqb188cyYmczxjKnQpPyh1PW9bMV0qTF8sdT5pXyYmKGlfPXUpKToocz0ocyszNjApJTM2MC0xODAsZl4oYypvXzxzJiZzPGMqdCk/KHU9LW9bMV0qTF8sdTxlXyYmKGVfPXUpKToobjxlXyYmKGVfPW4pLG4+aV8mJihpXz1uKSkpLGY/dDxvXz9ZcihuXyx0KT5ZcihuXyxyXykmJihyXz10KTpZcih0LHJfKT5ZcihuXyxyXykmJihuXz10KTpyXz49bl8/KHQ8bl8mJihuXz10KSx0PnJfJiYocl89dCkpOnQ+b18/WXIobl8sdCk+WXIobl8scl8pJiYocl89dCk6WXIodCxyXyk+WXIobl8scl8pJiYobl89dCl9ZWxzZSBzXy5wdXNoKGZfPVtuXz10LHJfPXRdKTtuPGVfJiYoZV89biksbj5pXyYmKGlfPW4pLGNfPWUsb189dH1mdW5jdGlvbiBVcigpe2VnLnBvaW50PXFyfWZ1bmN0aW9uIERyKCl7Zl9bMF09bl8sZl9bMV09cl8sZWcucG9pbnQ9THIsY189bnVsbH1mdW5jdGlvbiBPcih0LG4pe2lmKGNfKXt2YXIgZT10LW9fO25nLmFkZChVXyhlKT4xODA/ZSsoZT4wPzM2MDotMzYwKTplKX1lbHNlIHVfPXQsYV89bjtLXy5wb2ludCh0LG4pLHFyKHQsbil9ZnVuY3Rpb24gRnIoKXtLXy5saW5lU3RhcnQoKX1mdW5jdGlvbiBJcigpe09yKHVfLGFfKSxLXy5saW5lRW5kKCksVV8obmcpPkVfJiYobl89LShyXz0xODApKSxmX1swXT1uXyxmX1sxXT1yXyxjXz1udWxsfWZ1bmN0aW9uIFlyKHQsbil7cmV0dXJuKG4tPXQpPDA/biszNjA6bn1mdW5jdGlvbiBCcih0LG4pe3JldHVybiB0WzBdLW5bMF19ZnVuY3Rpb24ganIodCxuKXtyZXR1cm4gdFswXTw9dFsxXT90WzBdPD1uJiZuPD10WzFdOm48dFswXXx8dFsxXTxufWZ1bmN0aW9uIEhyKHQsbil7dCo9cV8sbio9cV87dmFyIGU9Rl8obik7WHIoZSpGXyh0KSxlKkhfKHQpLEhfKG4pKX1mdW5jdGlvbiBYcih0LG4sZSl7KytsXyxwXys9KHQtcF8pL2xfLGRfKz0obi1kXykvbF8sdl8rPShlLXZfKS9sX31mdW5jdGlvbiBWcigpe2lnLnBvaW50PVdyfWZ1bmN0aW9uIFdyKHQsbil7dCo9cV8sbio9cV87dmFyIGU9Rl8obik7VF89ZSpGXyh0KSxrXz1lKkhfKHQpLFNfPUhfKG4pLGlnLnBvaW50PSRyLFhyKFRfLGtfLFNfKX1mdW5jdGlvbiAkcih0LG4pe3QqPXFfLG4qPXFfO3ZhciBlPUZfKG4pLHI9ZSpGXyh0KSxpPWUqSF8odCksbz1IXyhuKSx1PU9fKFZfKCh1PWtfKm8tU18qaSkqdSsodT1TXypyLVRfKm8pKnUrKHU9VF8qaS1rXypyKSp1KSxUXypyK2tfKmkrU18qbyk7aF8rPXUsX18rPXUqKFRfKyhUXz1yKSksZ18rPXUqKGtfKyhrXz1pKSkseV8rPXUqKFNfKyhTXz1vKSksWHIoVF8sa18sU18pfWZ1bmN0aW9uIFpyKCl7aWcucG9pbnQ9SHJ9ZnVuY3Rpb24gR3IoKXtpZy5wb2ludD1Rcn1mdW5jdGlvbiBKcigpe0tyKHdfLE1fKSxpZy5wb2ludD1Icn1mdW5jdGlvbiBRcih0LG4pe3dfPXQsTV89bix0Kj1xXyxuKj1xXyxpZy5wb2ludD1Lcjt2YXIgZT1GXyhuKTtUXz1lKkZfKHQpLGtfPWUqSF8odCksU189SF8obiksWHIoVF8sa18sU18pfWZ1bmN0aW9uIEtyKHQsbil7dCo9cV8sbio9cV87dmFyIGU9Rl8obikscj1lKkZfKHQpLGk9ZSpIXyh0KSxvPUhfKG4pLHU9a18qby1TXyppLGE9U18qci1UXypvLGM9VF8qaS1rXypyLHM9Vl8odSp1K2EqYStjKmMpLGY9Z3IocyksbD1zJiYtZi9zO21fKz1sKnUseF8rPWwqYSxiXys9bCpjLGhfKz1mLF9fKz1mKihUXysoVF89cikpLGdfKz1mKihrXysoa189aSkpLHlfKz1mKihTXysoU189bykpLFhyKFRfLGtfLFNfKX1mdW5jdGlvbiB0aSh0LG4pe3JldHVyblt0PkNfP3QtUl86dDwtQ18/dCtSXzp0LG5dfWZ1bmN0aW9uIG5pKHQsbixlKXtyZXR1cm4odCU9Ul8pP258fGU/YWcocmkodCksaWkobixlKSk6cmkodCk6bnx8ZT9paShuLGUpOnRpfWZ1bmN0aW9uIGVpKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3JldHVybiBuKz10LFtuPkNfP24tUl86bjwtQ18/bitSXzpuLGVdfX1mdW5jdGlvbiByaSh0KXt2YXIgbj1laSh0KTtyZXR1cm4gbi5pbnZlcnQ9ZWkoLXQpLG59ZnVuY3Rpb24gaWkodCxuKXtmdW5jdGlvbiBlKHQsbil7dmFyIGU9Rl8obiksYT1GXyh0KSplLGM9SF8odCkqZSxzPUhfKG4pLGY9cypyK2EqaTtyZXR1cm5bT18oYypvLWYqdSxhKnItcyppKSxncihmKm8rYyp1KV19dmFyIHI9Rl8odCksaT1IXyh0KSxvPUZfKG4pLHU9SF8obik7cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9Rl8obiksYT1GXyh0KSplLGM9SF8odCkqZSxzPUhfKG4pLGY9cypvLWMqdTtyZXR1cm5bT18oYypvK3MqdSxhKnIrZippKSxncihmKnItYSppKV19LGV9ZnVuY3Rpb24gb2kodCxuLGUscixpLG8pe2lmKGUpe3ZhciB1PUZfKG4pLGE9SF8obiksYz1yKmU7bnVsbD09aT8oaT1uK3IqUl8sbz1uLWMvMik6KGk9dWkodSxpKSxvPXVpKHUsbyksKHI+MD9pPG86aT5vKSYmKGkrPXIqUl8pKTtmb3IodmFyIHMsZj1pO3I+MD9mPm86ZjxvO2YtPWMpcz1OcihbdSwtYSpGXyhmKSwtYSpIXyhmKV0pLHQucG9pbnQoc1swXSxzWzFdKX19ZnVuY3Rpb24gdWkodCxuKXtuPUVyKG4pLG5bMF0tPXQsUnIobik7dmFyIGU9X3IoLW5bMV0pO3JldHVybigoLW5bMl08MD8tZTplKStSXy1FXyklUl99ZnVuY3Rpb24gYWkodCxuLGUscil7dGhpcy54PXQsdGhpcy56PW4sdGhpcy5vPWUsdGhpcy5lPXIsdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBjaSh0KXtpZihuPXQubGVuZ3RoKXtmb3IodmFyIG4sZSxyPTAsaT10WzBdOysrcjxuOylpLm49ZT10W3JdLGUucD1pLGk9ZTtpLm49ZT10WzBdLGUucD1pfX1mdW5jdGlvbiBzaSh0LG4sZSxyKXtmdW5jdGlvbiBpKGksbyl7cmV0dXJuIHQ8PWkmJmk8PWUmJm48PW8mJm88PXJ9ZnVuY3Rpb24gbyhpLG8sYSxzKXt2YXIgZj0wLGw9MDtpZihudWxsPT1pfHwoZj11KGksYSkpIT09KGw9dShvLGEpKXx8YyhpLG8pPDBeYT4wKXtkbyBzLnBvaW50KDA9PT1mfHwzPT09Zj90OmUsZj4xP3I6bik7d2hpbGUoKGY9KGYrYSs0KSU0KSE9PWwpfWVsc2Ugcy5wb2ludChvWzBdLG9bMV0pfWZ1bmN0aW9uIHUocixpKXtyZXR1cm4gVV8oclswXS10KTxFXz9pPjA/MDozOlVfKHJbMF0tZSk8RV8/aT4wPzI6MTpVXyhyWzFdLW4pPEVfP2k+MD8xOjA6aT4wPzM6Mn1mdW5jdGlvbiBhKHQsbil7cmV0dXJuIGModC54LG4ueCl9ZnVuY3Rpb24gYyh0LG4pe3ZhciBlPXUodCwxKSxyPXUobiwxKTtyZXR1cm4gZSE9PXI/ZS1yOjA9PT1lP25bMV0tdFsxXToxPT09ZT90WzBdLW5bMF06Mj09PWU/dFsxXS1uWzFdOm5bMF0tdFswXX1yZXR1cm4gZnVuY3Rpb24odSl7ZnVuY3Rpb24gYyh0LG4pe2kodCxuKSYmUy5wb2ludCh0LG4pfWZ1bmN0aW9uIHMoKXtmb3IodmFyIG49MCxlPTAsaT1fLmxlbmd0aDtlPGk7KytlKWZvcih2YXIgbyx1LGE9X1tlXSxjPTEscz1hLmxlbmd0aCxmPWFbMF0sbD1mWzBdLGg9ZlsxXTtjPHM7KytjKW89bCx1PWgsZj1hW2NdLGw9ZlswXSxoPWZbMV0sdTw9cj9oPnImJihsLW8pKihyLXUpPihoLXUpKih0LW8pJiYrK246aDw9ciYmKGwtbykqKHItdSk8KGgtdSkqKHQtbykmJi0tbjtyZXR1cm4gbn1mdW5jdGlvbiBmKCl7Uz1OLHY9W10sXz1bXSxrPSEwfWZ1bmN0aW9uIGwoKXt2YXIgdD1zKCksbj1rJiZ0LGU9KHY9aGYodikpLmxlbmd0aDsobnx8ZSkmJih1LnBvbHlnb25TdGFydCgpLG4mJih1LmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsdSksdS5saW5lRW5kKCkpLGUmJlRnKHYsYSx0LG8sdSksdS5wb2x5Z29uRW5kKCkpLFM9dSx2PV89Zz1udWxsfWZ1bmN0aW9uIGgoKXtFLnBvaW50PWQsXyYmXy5wdXNoKGc9W10pLFQ9ITAsTT0hMSxiPXc9TmFOfWZ1bmN0aW9uIHAoKXt2JiYoZCh5LG0pLHgmJk0mJk4ucmVqb2luKCksdi5wdXNoKE4ucmVzdWx0KCkpKSxFLnBvaW50PWMsTSYmUy5saW5lRW5kKCl9ZnVuY3Rpb24gZChvLHUpe3ZhciBhPWkobyx1KTtpZihfJiZnLnB1c2goW28sdV0pLFQpeT1vLG09dSx4PWEsVD0hMSxhJiYoUy5saW5lU3RhcnQoKSxTLnBvaW50KG8sdSkpO2Vsc2UgaWYoYSYmTSlTLnBvaW50KG8sdSk7ZWxzZXt2YXIgYz1bYj1NYXRoLm1heChTZyxNYXRoLm1pbihrZyxiKSksdz1NYXRoLm1heChTZyxNYXRoLm1pbihrZyx3KSldLHM9W289TWF0aC5tYXgoU2csTWF0aC5taW4oa2csbykpLHU9TWF0aC5tYXgoU2csTWF0aC5taW4oa2csdSkpXTt3ZyhjLHMsdCxuLGUscik/KE18fChTLmxpbmVTdGFydCgpLFMucG9pbnQoY1swXSxjWzFdKSksUy5wb2ludChzWzBdLHNbMV0pLGF8fFMubGluZUVuZCgpLGs9ITEpOmEmJihTLmxpbmVTdGFydCgpLFMucG9pbnQobyx1KSxrPSExKX1iPW8sdz11LE09YX12YXIgdixfLGcseSxtLHgsYix3LE0sVCxrLFM9dSxOPWJnKCksRT17cG9pbnQ6YyxsaW5lU3RhcnQ6aCxsaW5lRW5kOnAscG9seWdvblN0YXJ0OmYscG9seWdvbkVuZDpsfTtyZXR1cm4gRX19ZnVuY3Rpb24gZmkoKXt6Zy5wb2ludD1oaSx6Zy5saW5lRW5kPWxpfWZ1bmN0aW9uIGxpKCl7emcucG9pbnQ9emcubGluZUVuZD1tcn1mdW5jdGlvbiBoaSh0LG4pe3QqPXFfLG4qPXFfLGNnPXQsc2c9SF8obiksZmc9Rl8obiksemcucG9pbnQ9cGl9ZnVuY3Rpb24gcGkodCxuKXt0Kj1xXyxuKj1xXzt2YXIgZT1IXyhuKSxyPUZfKG4pLGk9VV8odC1jZyksbz1GXyhpKSx1PUhfKGkpLGE9cip1LGM9ZmcqZS1zZypyKm8scz1zZyplK2ZnKnIqbztDZy5hZGQoT18oVl8oYSphK2MqYykscykpLGNnPXQsc2c9ZSxmZz1yfWZ1bmN0aW9uIGRpKHQsbil7cmV0dXJuISghdHx8IURnLmhhc093blByb3BlcnR5KHQudHlwZSkpJiZEZ1t0LnR5cGVdKHQsbil9ZnVuY3Rpb24gdmkodCxuKXtyZXR1cm4gMD09PXFnKHQsbil9ZnVuY3Rpb24gX2kodCxuKXt2YXIgZT1xZyh0WzBdLHRbMV0pO3JldHVybiBxZyh0WzBdLG4pK3FnKG4sdFsxXSk8PWUrRV99ZnVuY3Rpb24gZ2kodCxuKXtyZXR1cm4hIUFnKHQubWFwKHlpKSxtaShuKSl9ZnVuY3Rpb24geWkodCl7cmV0dXJuIHQ9dC5tYXAobWkpLHQucG9wKCksdH1mdW5jdGlvbiBtaSh0KXtyZXR1cm5bdFswXSpxXyx0WzFdKnFfXX1mdW5jdGlvbiB4aSh0LG4sZSl7dmFyIHI9UXModCxuLUVfLGUpLmNvbmNhdChuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKG4pe3JldHVyblt0LG5dfSl9fWZ1bmN0aW9uIGJpKHQsbixlKXt2YXIgcj1Rcyh0LG4tRV8sZSkuY29uY2F0KG4pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obil7cmV0dXJuW24sdF19KX19ZnVuY3Rpb24gd2koKXtmdW5jdGlvbiB0KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6bigpfX1mdW5jdGlvbiBuKCl7cmV0dXJuIFFzKElfKG8vXykqXyxpLF8pLm1hcChoKS5jb25jYXQoUXMoSV8ocy9nKSpnLGMsZykubWFwKHApKS5jb25jYXQoUXMoSV8oci9kKSpkLGUsZCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBVXyh0JV8pPkVffSkubWFwKGYpKS5jb25jYXQoUXMoSV8oYS92KSp2LHUsdikuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBVXyh0JWcpPkVffSkubWFwKGwpKX12YXIgZSxyLGksbyx1LGEsYyxzLGYsbCxoLHAsZD0xMCx2PWQsXz05MCxnPTM2MCx5PTIuNTtyZXR1cm4gdC5saW5lcz1mdW5jdGlvbigpe3JldHVybiBuKCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fX0pfSx0Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2gobykuY29uY2F0KHAoYykuc2xpY2UoMSksaChpKS5yZXZlcnNlKCkuc2xpY2UoMSkscChzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHQuZXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QuZXh0ZW50TWFqb3IobikuZXh0ZW50TWlub3Iobik6dC5leHRlbnRNaW5vcigpfSx0LmV4dGVudE1ham9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStuWzBdWzBdLGk9K25bMV1bMF0scz0rblswXVsxXSxjPStuWzFdWzFdLG8+aSYmKG49byxvPWksaT1uKSxzPmMmJihuPXMscz1jLGM9biksdC5wcmVjaXNpb24oeSkpOltbbyxzXSxbaSxjXV19LHQuZXh0ZW50TWlub3I9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K25bMF1bMF0sZT0rblsxXVswXSxhPStuWzBdWzFdLHU9K25bMV1bMV0scj5lJiYobj1yLHI9ZSxlPW4pLGE+dSYmKG49YSxhPXUsdT1uKSx0LnByZWNpc2lvbih5KSk6W1tyLGFdLFtlLHVdXX0sdC5zdGVwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3Quc3RlcE1ham9yKG4pLnN0ZXBNaW5vcihuKTp0LnN0ZXBNaW5vcigpfSx0LnN0ZXBNYWpvcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rblswXSxnPStuWzFdLHQpOltfLGddfSx0LnN0ZXBNaW5vcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rblswXSx2PStuWzFdLHQpOltkLHZdfSx0LnByZWNpc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0rbixmPXhpKGEsdSw5MCksbD1iaShyLGUseSksaD14aShzLGMsOTApLHA9YmkobyxpLHkpLHQpOnl9LHQuZXh0ZW50TWFqb3IoW1stMTgwLC05MCtFX10sWzE4MCw5MC1FX11dKS5leHRlbnRNaW5vcihbWy0xODAsLTgwLUVfXSxbMTgwLDgwK0VfXV0pfWZ1bmN0aW9uIE1pKCl7cmV0dXJuIHdpKCkoKX1mdW5jdGlvbiBUaSgpe2pnLnBvaW50PWtpfWZ1bmN0aW9uIGtpKHQsbil7amcucG9pbnQ9U2ksbGc9cGc9dCxoZz1kZz1ufWZ1bmN0aW9uIFNpKHQsbil7QmcuYWRkKGRnKnQtcGcqbikscGc9dCxkZz1ufWZ1bmN0aW9uIE5pKCl7U2kobGcsaGcpfWZ1bmN0aW9uIEVpKHQsbil7dDxIZyYmKEhnPXQpLHQ+VmcmJihWZz10KSxuPFhnJiYoWGc9biksbj5XZyYmKFdnPW4pfWZ1bmN0aW9uIEFpKHQsbil7WmcrPXQsR2crPW4sKytKZ31mdW5jdGlvbiBDaSgpe2l5LnBvaW50PXppfWZ1bmN0aW9uIHppKHQsbil7aXkucG9pbnQ9UGksQWkoZ2c9dCx5Zz1uKX1mdW5jdGlvbiBQaSh0LG4pe3ZhciBlPXQtZ2cscj1uLXlnLGk9Vl8oZSplK3Iqcik7UWcrPWkqKGdnK3QpLzIsS2crPWkqKHlnK24pLzIsdHkrPWksQWkoZ2c9dCx5Zz1uKX1mdW5jdGlvbiBSaSgpe2l5LnBvaW50PUFpfWZ1bmN0aW9uIExpKCl7aXkucG9pbnQ9VWl9ZnVuY3Rpb24gcWkoKXtEaSh2ZyxfZyl9ZnVuY3Rpb24gVWkodCxuKXtpeS5wb2ludD1EaSxBaSh2Zz1nZz10LF9nPXlnPW4pfWZ1bmN0aW9uIERpKHQsbil7dmFyIGU9dC1nZyxyPW4teWcsaT1WXyhlKmUrcipyKTtRZys9aSooZ2crdCkvMixLZys9aSooeWcrbikvMix0eSs9aSxpPXlnKnQtZ2cqbixueSs9aSooZ2crdCksZXkrPWkqKHlnK24pLHJ5Kz0zKmksQWkoZ2c9dCx5Zz1uKX1mdW5jdGlvbiBPaSh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRmkodCxuKXtseS5wb2ludD1JaSx1eT1jeT10LGF5PXN5PW59ZnVuY3Rpb24gSWkodCxuKXtjeS09dCxzeS09bixmeS5hZGQoVl8oY3kqY3krc3kqc3kpKSxjeT10LHN5PW59ZnVuY3Rpb24gWWkoKXt0aGlzLl9zdHJpbmc9W119ZnVuY3Rpb24gQmkodCl7cmV0dXJuIm0wLCIrdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIistMip0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKzIqdCsieiJ9ZnVuY3Rpb24gamkodCl7cmV0dXJuIHQubGVuZ3RoPjF9ZnVuY3Rpb24gSGkodCxuKXtyZXR1cm4oKHQ9dC54KVswXTwwP3RbMV0tel8tRV86el8tdFsxXSktKChuPW4ueClbMF08MD9uWzFdLXpfLUVfOnpfLW5bMV0pfWZ1bmN0aW9uIFhpKHQpe3ZhciBuLGU9TmFOLHI9TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLG49MX0scG9pbnQ6ZnVuY3Rpb24obyx1KXt2YXIgYT1vPjA/Q186LUNfLGM9VV8oby1lKTtVXyhjLUNfKTxFXz8odC5wb2ludChlLHI9KHIrdSkvMj4wP3pfOi16XyksdC5wb2ludChpLHIpLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChhLHIpLHQucG9pbnQobyxyKSxuPTApOmkhPT1hJiZjPj1DXyYmKFVfKGUtaSk8RV8mJihlLT1pKkVfKSxVXyhvLWEpPEVfJiYoby09YSpFXykscj1WaShlLHIsbyx1KSx0LnBvaW50KGksciksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KGEsciksbj0wKSx0LnBvaW50KGU9byxyPXUpLGk9YX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLGU9cj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItbn19fWZ1bmN0aW9uIFZpKHQsbixlLHIpe3ZhciBpLG8sdT1IXyh0LWUpO3JldHVybiBVXyh1KT5FXz9EXygoSF8obikqKG89Rl8ocikpKkhfKGUpLUhfKHIpKihpPUZfKG4pKSpIXyh0KSkvKGkqbyp1KSk6KG4rcikvMn1mdW5jdGlvbiBXaSh0LG4sZSxyKXt2YXIgaTtpZihudWxsPT10KWk9ZSp6XyxyLnBvaW50KC1DXyxpKSxyLnBvaW50KDAsaSksci5wb2ludChDXyxpKSxyLnBvaW50KENfLDApLHIucG9pbnQoQ18sLWkpLHIucG9pbnQoMCwtaSksci5wb2ludCgtQ18sLWkpLHIucG9pbnQoLUNfLDApLHIucG9pbnQoLUNfLGkpO2Vsc2UgaWYoVV8odFswXS1uWzBdKT5FXyl7dmFyIG89dFswXTxuWzBdP0NfOi1DXztpPWUqby8yLHIucG9pbnQoLW8saSksci5wb2ludCgwLGkpLHIucG9pbnQobyxpKX1lbHNlIHIucG9pbnQoblswXSxuWzFdKX1mdW5jdGlvbiAkaSh0KXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9bmV3IFppO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXTtyZXR1cm4gZS5zdHJlYW09bixlfX1mdW5jdGlvbiBaaSgpe31mdW5jdGlvbiBHaSh0LG4sZSl7dmFyIHI9blsxXVswXS1uWzBdWzBdLGk9blsxXVsxXS1uWzBdWzFdLG89dC5jbGlwRXh0ZW50JiZ0LmNsaXBFeHRlbnQoKTt0LnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxudWxsIT1vJiZ0LmNsaXBFeHRlbnQobnVsbCksR18oZSx0LnN0cmVhbSgkZykpO3ZhciB1PSRnLnJlc3VsdCgpLGE9TWF0aC5taW4oci8odVsxXVswXS11WzBdWzBdKSxpLyh1WzFdWzFdLXVbMF1bMV0pKSxjPStuWzBdWzBdKyhyLWEqKHVbMV1bMF0rdVswXVswXSkpLzIscz0rblswXVsxXSsoaS1hKih1WzFdWzFdK3VbMF1bMV0pKS8yO3JldHVybiBudWxsIT1vJiZ0LmNsaXBFeHRlbnQobyksdC5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtjLHNdKX1mdW5jdGlvbiBKaSh0LG4sZSl7cmV0dXJuIEdpKHQsW1swLDBdLG5dLGUpfWZ1bmN0aW9uIFFpKHQpe3JldHVybiAkaSh7cG9pbnQ6ZnVuY3Rpb24obixlKXtuPXQobixlKSx0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pfWZ1bmN0aW9uIEtpKHQsbil7ZnVuY3Rpb24gZShyLGksbyx1LGEsYyxzLGYsbCxoLHAsZCx2LF8pe3ZhciBnPXMtcix5PWYtaSxtPWcqZyt5Knk7aWYobT40Km4mJnYtLSl7dmFyIHg9dStoLGI9YStwLHc9YytkLE09Vl8oeCp4K2IqYit3KncpLFQ9Z3Iody89TSksaz1VXyhVXyh3KS0xKTxFX3x8VV8oby1sKTxFXz8obytsKS8yOk9fKGIseCksUz10KGssVCksTj1TWzBdLEU9U1sxXSxBPU4tcixDPUUtaSx6PXkqQS1nKkM7KHoqei9tPm58fFVfKChnKkEreSpDKS9tLS41KT4uM3x8dSpoK2EqcCtjKmQ8eXkpJiYoZShyLGksbyx1LGEsYyxOLEUsayx4Lz1NLGIvPU0sdyx2LF8pLF8ucG9pbnQoTixFKSxlKE4sRSxrLHgsYix3LHMsZixsLGgscCxkLHYsXykpfX1yZXR1cm4gZnVuY3Rpb24obil7ZnVuY3Rpb24gcihlLHIpe2U9dChlLHIpLG4ucG9pbnQoZVswXSxlWzFdKX1mdW5jdGlvbiBpKCl7Zz1OYU4sdy5wb2ludD1vLG4ubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbyhyLGkpe3ZhciBvPUVyKFtyLGldKSx1PXQocixpKTtlKGcseSxfLG0seCxiLGc9dVswXSx5PXVbMV0sXz1yLG09b1swXSx4PW9bMV0sYj1vWzJdLGd5LG4pLG4ucG9pbnQoZyx5KX1mdW5jdGlvbiB1KCl7dy5wb2ludD1yLG4ubGluZUVuZCgpfWZ1bmN0aW9uIGEoKXtpKCksdy5wb2ludD1jLHcubGluZUVuZD1zfWZ1bmN0aW9uIGModCxuKXtvKGY9dCxuKSxsPWcsaD15LHA9bSxkPXgsdj1iLHcucG9pbnQ9b31mdW5jdGlvbiBzKCl7ZShnLHksXyxtLHgsYixsLGgsZixwLGQsdixneSxuKSx3LmxpbmVFbmQ9dSx1KCl9dmFyIGYsbCxoLHAsZCx2LF8sZyx5LG0seCxiLHc9e3BvaW50OnIsbGluZVN0YXJ0OmksbGluZUVuZDp1LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe24ucG9seWdvblN0YXJ0KCksdy5saW5lU3RhcnQ9YX0scG9seWdvbkVuZDpmdW5jdGlvbigpe24ucG9seWdvbkVuZCgpLHcubGluZVN0YXJ0PWl9fTtyZXR1cm4gd319ZnVuY3Rpb24gdG8odCl7cmV0dXJuIG5vKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSgpfWZ1bmN0aW9uIG5vKHQpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQ9Zih0WzBdKnFfLHRbMV0qcV8pLFt0WzBdKl8rYSxjLXRbMV0qX119ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdD1mLmludmVydCgodFswXS1hKS9fLChjLXRbMV0pL18pLHQmJlt0WzBdKkxfLHRbMV0qTF9dfWZ1bmN0aW9uIHIodCxuKXtyZXR1cm4gdD11KHQsbiksW3RbMF0qXythLGMtdFsxXSpfXX1mdW5jdGlvbiBpKCl7Zj1hZyhzPW5pKGIsdyxNKSx1KTt2YXIgdD11KG0seCk7cmV0dXJuIGE9Zy10WzBdKl8sYz15K3RbMV0qXyxvKCl9ZnVuY3Rpb24gbygpe3JldHVybiBkPXY9bnVsbCxufXZhciB1LGEsYyxzLGYsbCxoLHAsZCx2LF89MTUwLGc9NDgwLHk9MjUwLG09MCx4PTAsYj0wLHc9MCxNPTAsVD1udWxsLGs9ZHksUz1udWxsLE49SWcsRT0uNSxBPW15KHIsRSk7cmV0dXJuIG4uc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBkJiZ2PT09dD9kOmQ9eHkoayhzLEEoTih2PXQpKSkpfSxuLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz0rdD92eShUPXQqcV8sNipxXyk6KFQ9bnVsbCxkeSksbygpKTpUKkxffSxuLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE49bnVsbD09dD8oUz1sPWg9cD1udWxsLElnKTpzaShTPSt0WzBdWzBdLGw9K3RbMF1bMV0saD0rdFsxXVswXSxwPSt0WzFdWzFdKSxvKCkpOm51bGw9PVM/bnVsbDpbW1MsbF0sW2gscF1dfSxuLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPSt0LGkoKSk6X30sbi50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3RbMF0seT0rdFsxXSxpKCkpOltnLHldfSxuLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT10WzBdJTM2MCpxXyx4PXRbMV0lMzYwKnFfLGkoKSk6W20qTF8seCpMX119LG4ucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXRbMF0lMzYwKnFfLHc9dFsxXSUzNjAqcV8sTT10Lmxlbmd0aD4yP3RbMl0lMzYwKnFfOjAsaSgpKTpbYipMXyx3KkxfLE0qTF9dfSxuLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT1teShyLEU9dCp0KSxvKCkpOlZfKEUpfSxuLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiBHaShuLHQsZSl9LG4uZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiBKaShuLHQsZSl9LGZ1bmN0aW9uKCl7cmV0dXJuIHU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5pbnZlcnQ9dS5pbnZlcnQmJmUsaSgpfX1mdW5jdGlvbiBlbyh0KXt2YXIgbj0wLGU9Q18vMyxyPW5vKHQpLGk9cihuLGUpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKG49dFswXSpxXyxlPXRbMV0qcV8pOltuKkxfLGUqTF9dfSxpfWZ1bmN0aW9uIHJvKHQpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm5bdCplLEhfKG4pL2VdfXZhciBlPUZfKHQpO3JldHVybiBuLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblt0L2UsZ3IobiplKV19LG59ZnVuY3Rpb24gaW8odCxuKXtmdW5jdGlvbiBlKHQsbil7dmFyIGU9Vl8oby0yKmkqSF8obikpL2k7cmV0dXJuW2UqSF8odCo9aSksdS1lKkZfKHQpXX12YXIgcj1IXyh0KSxpPShyK0hfKG4pKS8yO2lmKFVfKGkpPEVfKXJldHVybiBybyh0KTt2YXIgbz0xK3IqKDIqaS1yKSx1PVZfKG8pL2k7cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9dS1uO3JldHVybltPXyh0LFVfKGUpKS9pKlhfKGUpLGdyKChvLSh0KnQrZSplKSppKmkpLygyKmkpKV19LGV9ZnVuY3Rpb24gb28odCl7dmFyIG49dC5sZW5ndGg7cmV0dXJue3BvaW50OmZ1bmN0aW9uKGUscil7Zm9yKHZhciBpPS0xOysraTxuOyl0W2ldLnBvaW50KGUscil9LHNwaGVyZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0tMTsrK2U8bjspdFtlXS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPS0xOysrZTxuOyl0W2VdLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPS0xOysrZTxuOyl0W2VdLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPS0xOysrZTxuOyl0W2VdLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPS0xOysrZTxuOyl0W2VdLnBvbHlnb25FbmQoKX19fWZ1bmN0aW9uIHVvKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPUZfKG4pLGk9Rl8oZSksbz10KHIqaSk7cmV0dXJuW28qaSpIXyhuKSxvKkhfKGUpXX19ZnVuY3Rpb24gYW8odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9Vl8obipuK2UqZSksaT10KHIpLG89SF8oaSk7cmV0dXJuW09fKG4qbyxyKkZfKGkpKSxncihyJiZlKm8vcildfX1mdW5jdGlvbiBjbyh0LG4pe3JldHVyblt0LEJfKFdfKCh6XytuKS8yKSldfWZ1bmN0aW9uIHNvKHQpe3ZhciBuLGU9dG8odCkscj1lLnNjYWxlLGk9ZS50cmFuc2xhdGUsbz1lLmNsaXBFeHRlbnQ7cmV0dXJuIGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIodCksbiYmZS5jbGlwRXh0ZW50KG51bGwpLGUpOnIoKX0sZS50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkodCksbiYmZS5jbGlwRXh0ZW50KG51bGwpLGUpOmkoKX0sZS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuP251bGw6bygpO2lmKG49bnVsbD09dCl7dmFyIHU9Q18qcigpLGE9aSgpO3Q9W1thWzBdLXUsYVsxXS11XSxbYVswXSt1LGFbMV0rdV1dfXJldHVybiBvKHQpLGV9LGUuY2xpcEV4dGVudChudWxsKX1mdW5jdGlvbiBmbyh0KXtyZXR1cm4gV18oKHpfK3QpLzIpfWZ1bmN0aW9uIGxvKHQsbil7ZnVuY3Rpb24gZSh0LG4pe28+MD9uPC16XytFXyYmKG49LXpfK0VfKTpuPnpfLUVfJiYobj16Xy1FXyk7dmFyIGU9by9qXyhmbyhuKSxpKTtyZXR1cm5bZSpIXyhpKnQpLG8tZSpGXyhpKnQpXX12YXIgcj1GXyh0KSxpPXQ9PT1uP0hfKHQpOkJfKHIvRl8obikpL0JfKGZvKG4pL2ZvKHQpKSxvPXIqal8oZm8odCksaSkvaTtyZXR1cm4gaT8oZS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT1vLW4scj1YXyhpKSpWXyh0KnQrZSplKTtyZXR1cm5bT18odCxVXyhlKSkvaSpYXyhlKSwyKkRfKGpfKG8vciwxL2kpKS16X119LGUpOmNvfWZ1bmN0aW9uIGhvKHQsbil7cmV0dXJuW3Qsbl19ZnVuY3Rpb24gcG8odCxuKXtmdW5jdGlvbiBlKHQsbil7dmFyIGU9by1uLHI9aSp0O3JldHVybltlKkhfKHIpLG8tZSpGXyhyKV19dmFyIHI9Rl8odCksaT10PT09bj9IXyh0KTooci1GXyhuKSkvKG4tdCksbz1yL2krdDtyZXR1cm4gVV8oaSk8RV8/aG86KGUuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9by1uO3JldHVybltPXyh0LFVfKGUpKS9pKlhfKGUpLG8tWF8oaSkqVl8odCp0K2UqZSldfSxlKX1mdW5jdGlvbiB2byh0LG4pe3ZhciBlPUZfKG4pLHI9Rl8odCkqZTtyZXR1cm5bZSpIXyh0KS9yLEhfKG4pL3JdfWZ1bmN0aW9uIF9vKHQsbixlLHIpe3JldHVybiAxPT09dCYmMT09PW4mJjA9PT1lJiYwPT09cj9JZzokaSh7cG9pbnQ6ZnVuY3Rpb24oaSxvKXt0aGlzLnN0cmVhbS5wb2ludChpKnQrZSxvKm4rcil9fSl9ZnVuY3Rpb24gZ28odCxuKXtyZXR1cm5bRl8obikqSF8odCksSF8obildfWZ1bmN0aW9uIHlvKHQsbil7dmFyIGU9Rl8obikscj0xK0ZfKHQpKmU7cmV0dXJuW2UqSF8odCkvcixIXyhuKS9yXX1mdW5jdGlvbiBtbyh0LG4pe3JldHVybltCXyhXXygoel8rbikvMikpLC10XX1mdW5jdGlvbiB4byh0LG4pe3JldHVybiB0LnBhcmVudD09PW4ucGFyZW50PzE6Mn1mdW5jdGlvbiBibyh0KXtyZXR1cm4gdC5yZWR1Y2Uod28sMCkvdC5sZW5ndGh9ZnVuY3Rpb24gd28odCxuKXtyZXR1cm4gdCtuLnh9ZnVuY3Rpb24gTW8odCl7cmV0dXJuIDErdC5yZWR1Y2UoVG8sMCl9ZnVuY3Rpb24gVG8odCxuKXtyZXR1cm4gTWF0aC5tYXgodCxuLnkpfWZ1bmN0aW9uIGtvKHQpe2Zvcih2YXIgbjtuPXQuY2hpbGRyZW47KXQ9blswXTtyZXR1cm4gdH1mdW5jdGlvbiBTbyh0KXtmb3IodmFyIG47bj10LmNoaWxkcmVuOyl0PW5bbi5sZW5ndGgtMV07cmV0dXJuIHR9ZnVuY3Rpb24gTm8odCl7dmFyIG49MCxlPXQuY2hpbGRyZW4scj1lJiZlLmxlbmd0aDtpZihyKWZvcig7LS1yPj0wOyluKz1lW3JdLnZhbHVlO2Vsc2Ugbj0xO3QudmFsdWU9bn1mdW5jdGlvbiBFbyh0LG4pe2lmKHQ9PT1uKXJldHVybiB0O3ZhciBlPXQuYW5jZXN0b3JzKCkscj1uLmFuY2VzdG9ycygpLGk9bnVsbDtmb3IodD1lLnBvcCgpLG49ci5wb3AoKTt0PT09bjspaT10LHQ9ZS5wb3AoKSxuPXIucG9wKCk7cmV0dXJuIGl9ZnVuY3Rpb24gQW8odCxuKXt2YXIgZSxyLGksbyx1LGE9bmV3IExvKHQpLGM9K3QudmFsdWUmJihhLnZhbHVlPXQudmFsdWUpLHM9W2FdO2ZvcihudWxsPT1uJiYobj16byk7ZT1zLnBvcCgpOylpZihjJiYoZS52YWx1ZT0rZS5kYXRhLnZhbHVlKSwoaT1uKGUuZGF0YSkpJiYodT1pLmxlbmd0aCkpZm9yKGUuY2hpbGRyZW49bmV3IEFycmF5KHUpLG89dS0xO28+PTA7LS1vKXMucHVzaChyPWUuY2hpbGRyZW5bb109bmV3IExvKGlbb10pKSxyLnBhcmVudD1lLHIuZGVwdGg9ZS5kZXB0aCsxO3JldHVybiBhLmVhY2hCZWZvcmUoUm8pfWZ1bmN0aW9uIENvKCl7cmV0dXJuIEFvKHRoaXMpLmVhY2hCZWZvcmUoUG8pfWZ1bmN0aW9uIHpvKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIFBvKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBSbyh0KXt2YXIgbj0wO2RvIHQuaGVpZ2h0PW47d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK24pfWZ1bmN0aW9uIExvKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfWZ1bmN0aW9uIHFvKHQpe3RoaXMuXz10LHRoaXMubmV4dD1udWxsfWZ1bmN0aW9uIFVvKHQsbil7dmFyIGU9bi54LXQueCxyPW4ueS10LnksaT10LnItbi5yO3JldHVybiBpKmkrMWUtNj5lKmUrcipyfWZ1bmN0aW9uIERvKHQsbil7dmFyIGUscixpLG89bnVsbCx1PXQuaGVhZDtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMTplPU9vKG5bMF0pO2JyZWFrO2Nhc2UgMjplPUZvKG5bMF0sblsxXSk7YnJlYWs7Y2FzZSAzOmU9SW8oblswXSxuWzFdLG5bMl0pfWZvcig7dTspaT11Ll8scj11Lm5leHQsZSYmVW8oZSxpKT9vPXU6KG8/KHQudGFpbD1vLG8ubmV4dD1udWxsKTp0LmhlYWQ9dC50YWlsPW51bGwsbi5wdXNoKGkpLGU9RG8odCxuKSxuLnBvcCgpLHQuaGVhZD8odS5uZXh0PXQuaGVhZCx0LmhlYWQ9dSk6KHUubmV4dD1udWxsLHQuaGVhZD10LnRhaWw9dSksbz10LnRhaWwsby5uZXh0PXIpLHU9cjtyZXR1cm4gdC50YWlsPW8sZX1mdW5jdGlvbiBPbyh0KXtyZXR1cm57eDp0LngseTp0Lnkscjp0LnJ9fWZ1bmN0aW9uIEZvKHQsbil7dmFyIGU9dC54LHI9dC55LGk9dC5yLG89bi54LHU9bi55LGE9bi5yLGM9by1lLHM9dS1yLGY9YS1pLGw9TWF0aC5zcXJ0KGMqYytzKnMpO3JldHVybnt4OihlK28rYy9sKmYpLzIseToocit1K3MvbCpmKS8yLHI6KGwraSthKS8yfX1mdW5jdGlvbiBJbyh0LG4sZSl7dmFyIHI9dC54LGk9dC55LG89dC5yLHU9bi54LGE9bi55LGM9bi5yLHM9ZS54LGY9ZS55LGw9ZS5yLGg9Miooci11KSxwPTIqKGktYSksZD0yKihjLW8pLHY9cipyK2kqaS1vKm8tdSp1LWEqYStjKmMsXz0yKihyLXMpLGc9MiooaS1mKSx5PTIqKGwtbyksbT1yKnIraSppLW8qby1zKnMtZipmK2wqbCx4PV8qcC1oKmcsYj0ocCptLWcqdikveC1yLHc9KGcqZC1wKnkpL3gsTT0oXyp2LWgqbSkveC1pLFQ9KGgqeS1fKmQpL3gsaz13KncrVCpULTEsUz0yKihiKncrTSpUK28pLE49YipiK00qTS1vKm8sRT0oLVMtTWF0aC5zcXJ0KFMqUy00KmsqTikpLygyKmspO3JldHVybnt4OmIrdypFK3IseTpNK1QqRStpLHI6RX19ZnVuY3Rpb24gWW8odCxuLGUpe3ZhciByPXQueCxpPXQueSxvPW4ucitlLnIsdT10LnIrZS5yLGE9bi54LXIsYz1uLnktaSxzPWEqYStjKmM7aWYocyl7dmFyIGY9LjUrKCh1Kj11KS0obyo9bykpLygyKnMpLGw9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKih1K3MpLSh1LT1zKSp1LW8qbykpLygyKnMpO2UueD1yK2YqYStsKmMsZS55PWkrZipjLWwqYX1lbHNlIGUueD1yK3UsZS55PWl9ZnVuY3Rpb24gQm8odCxuKXt2YXIgZT1uLngtdC54LHI9bi55LXQueSxpPXQucituLnI7cmV0dXJuIGkqaS0xZS02PmUqZStyKnJ9ZnVuY3Rpb24gam8odCxuKXtmb3IodmFyIGU9dC5fLnI7dCE9PW47KWUrPTIqKHQ9dC5uZXh0KS5fLnI7cmV0dXJuIGUtbi5fLnJ9ZnVuY3Rpb24gSG8odCxuLGUpe3ZhciByPXQuXyxpPXQubmV4dC5fLG89ci5yK2kucix1PShyLngqaS5yK2kueCpyLnIpL28tbixhPShyLnkqaS5yK2kueSpyLnIpL28tZTtyZXR1cm4gdSp1K2EqYX1mdW5jdGlvbiBYbyh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gVm8odCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm4gMDt2YXIgbixlLHIsaTtpZihuPXRbMF0sbi54PTAsbi55PTAsIShpPjEpKXJldHVybiBuLnI7aWYoZT10WzFdLG4ueD0tZS5yLGUueD1uLnIsZS55PTAsIShpPjIpKXJldHVybiBuLnIrZS5yO1lvKGUsbixyPXRbMl0pO3ZhciBvLHUsYSxjLHMsZixsLGg9bi5yKm4ucixwPWUuciplLnIsZD1yLnIqci5yLHY9aCtwK2QsXz1oKm4ueCtwKmUueCtkKnIueCxnPWgqbi55K3AqZS55K2Qqci55O249bmV3IFhvKG4pLGU9bmV3IFhvKGUpLHI9bmV3IFhvKHIpLG4ubmV4dD1yLnByZXZpb3VzPWUsZS5uZXh0PW4ucHJldmlvdXM9cixyLm5leHQ9ZS5wcmV2aW91cz1uO3Q6Zm9yKGE9MzthPGk7KythKXtZbyhuLl8sZS5fLHI9dFthXSkscj1uZXcgWG8ociksYz1lLm5leHQscz1uLnByZXZpb3VzLGY9ZS5fLnIsbD1uLl8ucjtkbyBpZihmPD1sKXtpZihCbyhjLl8sci5fKSl7ZituLl8ucitlLl8ucj5qbyhjLGUpP249YzplPWMsbi5uZXh0PWUsZS5wcmV2aW91cz1uLC0tYTtjb250aW51ZSB0fWYrPWMuXy5yLGM9Yy5uZXh0fWVsc2V7aWYoQm8ocy5fLHIuXykpe2pvKG4scyk+bCtuLl8ucitlLl8ucj9uPXM6ZT1zLG4ubmV4dD1lLGUucHJldmlvdXM9biwtLWE7Y29udGludWUgdH1sKz1zLl8ucixzPXMucHJldmlvdXN9d2hpbGUoYyE9PXMubmV4dCk7Zm9yKHIucHJldmlvdXM9bixyLm5leHQ9ZSxuLm5leHQ9ZS5wcmV2aW91cz1lPXIsdis9ZD1yLl8ucipyLl8ucixfKz1kKnIuXy54LGcrPWQqci5fLnksaD1IbyhuLG89Xy92LHU9Zy92KTsocj1yLm5leHQpIT09ZTspKGQ9SG8ocixvLHUpKTxoJiYobj1yLGg9ZCk7ZT1uLm5leHR9Zm9yKG49W2UuX10scj1lOyhyPXIubmV4dCkhPT1lOyluLnB1c2goci5fKTtmb3Iocj1HeShuKSxhPTA7YTxpOysrYSluPXRbYV0sbi54LT1yLngsbi55LT1yLnk7cmV0dXJuIHIucn1mdW5jdGlvbiBXbyh0KXtyZXR1cm4gbnVsbD09dD9udWxsOiRvKHQpfWZ1bmN0aW9uICRvKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiBabygpe3JldHVybiAwfWZ1bmN0aW9uIEdvKHQpe3JldHVybiBNYXRoLnNxcnQodC52YWx1ZSl9ZnVuY3Rpb24gSm8odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uY2hpbGRyZW58fChuLnI9TWF0aC5tYXgoMCwrdChuKXx8MCkpfX1mdW5jdGlvbiBRbyh0LG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihyPWUuY2hpbGRyZW4pe3ZhciByLGksbyx1PXIubGVuZ3RoLGE9dChlKSpufHwwO2lmKGEpZm9yKGk9MDtpPHU7KytpKXJbaV0ucis9YTtpZihvPVZvKHIpLGEpZm9yKGk9MDtpPHU7KytpKXJbaV0uci09YTtlLnI9bythfX19ZnVuY3Rpb24gS28odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPW4ucGFyZW50O24ucio9dCxlJiYobi54PWUueCt0Km4ueCxuLnk9ZS55K3Qqbi55KX19ZnVuY3Rpb24gdHUodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gbnUodCl7cmV0dXJuIHQucGFyZW50SWR9ZnVuY3Rpb24gZXUodCxuKXtyZXR1cm4gdC5wYXJlbnQ9PT1uLnBhcmVudD8xOjJ9ZnVuY3Rpb24gcnUodCl7dmFyIG49dC5jaGlsZHJlbjtyZXR1cm4gbj9uWzBdOnQudH1mdW5jdGlvbiBpdSh0KXt2YXIgbj10LmNoaWxkcmVuO3JldHVybiBuP25bbi5sZW5ndGgtMV06dC50fWZ1bmN0aW9uIG91KHQsbixlKXt2YXIgcj1lLyhuLmktdC5pKTtuLmMtPXIsbi5zKz1lLHQuYys9cixuLnorPWUsbi5tKz1lfWZ1bmN0aW9uIHV1KHQpe2Zvcih2YXIgbixlPTAscj0wLGk9dC5jaGlsZHJlbixvPWkubGVuZ3RoOy0tbz49MDspbj1pW29dLG4ueis9ZSxuLm0rPWUsZSs9bi5zKyhyKz1uLmMpfWZ1bmN0aW9uIGF1KHQsbixlKXtyZXR1cm4gdC5hLnBhcmVudD09PW4ucGFyZW50P3QuYTplfWZ1bmN0aW9uIGN1KHQsbil7dGhpcy5fPXQsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5BPW51bGwsdGhpcy5hPXRoaXMsdGhpcy56PTAsdGhpcy5tPTAsdGhpcy5jPTAsdGhpcy5zPTAsdGhpcy50PW51bGwsdGhpcy5pPW59ZnVuY3Rpb24gc3UodCl7Zm9yKHZhciBuLGUscixpLG8sdT1uZXcgY3UodCwwKSxhPVt1XTtuPWEucG9wKCk7KWlmKHI9bi5fLmNoaWxkcmVuKWZvcihuLmNoaWxkcmVuPW5ldyBBcnJheShvPXIubGVuZ3RoKSxpPW8tMTtpPj0wOy0taSlhLnB1c2goZT1uLmNoaWxkcmVuW2ldPW5ldyBjdShyW2ldLGkpKSxlLnBhcmVudD1uO3JldHVybih1LnBhcmVudD1uZXcgY3UobnVsbCwwKSkuY2hpbGRyZW49W3VdLHV9ZnVuY3Rpb24gZnUodCxuLGUscixpLG8pe2Zvcih2YXIgdSxhLGMscyxmLGwsaCxwLGQsdixfLGc9W10seT1uLmNoaWxkcmVuLG09MCx4PTAsYj15Lmxlbmd0aCx3PW4udmFsdWU7bTxiOyl7Yz1pLWUscz1vLXI7ZG8gZj15W3grK10udmFsdWU7d2hpbGUoIWYmJng8Yik7Zm9yKGw9aD1mLHY9TWF0aC5tYXgocy9jLGMvcykvKHcqdCksXz1mKmYqdixkPU1hdGgubWF4KGgvXyxfL2wpO3g8YjsrK3gpe2lmKGYrPWE9eVt4XS52YWx1ZSxhPGwmJihsPWEpLGE+aCYmKGg9YSksXz1mKmYqdixwPU1hdGgubWF4KGgvXyxfL2wpLHA+ZCl7Zi09YTticmVha31kPXB9Zy5wdXNoKHU9e3ZhbHVlOmYsZGljZTpjPHMsY2hpbGRyZW46eS5zbGljZShtLHgpfSksdS5kaWNlP25tKHUsZSxyLGksdz9yKz1zKmYvdzpvKTpjbSh1LGUscix3P2UrPWMqZi93Omksbyksdy09ZixtPXh9cmV0dXJuIGd9ZnVuY3Rpb24gbHUodCxuKXtyZXR1cm4gdFswXS1uWzBdfHx0WzFdLW5bMV19ZnVuY3Rpb24gaHUodCl7Zm9yKHZhciBuPXQubGVuZ3RoLGU9WzAsMV0scj0yLGk9MjtpPG47KytpKXtmb3IoO3I+MSYmZ20odFtlW3ItMl1dLHRbZVtyLTFdXSx0W2ldKTw9MDspLS1yO2VbcisrXT1pfXJldHVybiBlLnNsaWNlKDAscil9ZnVuY3Rpb24gcHUodCl7aWYoISh0Pj0xKSl0aHJvdyBuZXcgRXJyb3I7dGhpcy5fc2l6ZT10LHRoaXMuX2NhbGw9dGhpcy5fZXJyb3I9bnVsbCx0aGlzLl90YXNrcz1bXSx0aGlzLl9kYXRhPVtdLHRoaXMuX3dhaXRpbmc9dGhpcy5fYWN0aXZlPXRoaXMuX2VuZGVkPXRoaXMuX3N0YXJ0PTB9ZnVuY3Rpb24gZHUodCl7aWYoIXQuX3N0YXJ0KXRyeXt2dSh0KX1jYXRjaChuKXtpZih0Ll90YXNrc1t0Ll9lbmRlZCt0Ll9hY3RpdmUtMV0pZ3UodCxuKTtlbHNlIGlmKCF0Ll9kYXRhKXRocm93IG59fWZ1bmN0aW9uIHZ1KHQpe2Zvcig7dC5fc3RhcnQ9dC5fd2FpdGluZyYmdC5fYWN0aXZlPHQuX3NpemU7KXt2YXIgbj10Ll9lbmRlZCt0Ll9hY3RpdmUsZT10Ll90YXNrc1tuXSxyPWUubGVuZ3RoLTEsaT1lW3JdO2Vbcl09X3UodCxuKSwtLXQuX3dhaXRpbmcsKyt0Ll9hY3RpdmUsZT1pLmFwcGx5KG51bGwsZSksdC5fdGFza3Nbbl0mJih0Ll90YXNrc1tuXT1lfHx3bSl9fWZ1bmN0aW9uIF91KHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUscil7dC5fdGFza3Nbbl0mJigtLXQuX2FjdGl2ZSwrK3QuX2VuZGVkLHQuX3Rhc2tzW25dPW51bGwsbnVsbD09dC5fZXJyb3ImJihudWxsIT1lP2d1KHQsZSk6KHQuX2RhdGFbbl09cix0Ll93YWl0aW5nP2R1KHQpOnl1KHQpKSkpfX1mdW5jdGlvbiBndSh0LG4pe3ZhciBlLHI9dC5fdGFza3MubGVuZ3RoO2Zvcih0Ll9lcnJvcj1uLHQuX2RhdGE9dm9pZCAwLHQuX3dhaXRpbmc9TmFOOy0tcj49MDspaWYoKGU9dC5fdGFza3Nbcl0pJiYodC5fdGFza3Nbcl09bnVsbCxlLmFib3J0KSl0cnl7ZS5hYm9ydCgpfWNhdGNoKHQpe310Ll9hY3RpdmU9TmFOLHl1KHQpfWZ1bmN0aW9uIHl1KHQpe2lmKCF0Ll9hY3RpdmUmJnQuX2NhbGwpe3ZhciBuPXQuX2RhdGE7dC5fZGF0YT12b2lkIDAsdC5fY2FsbCh0Ll9lcnJvcixuKX19ZnVuY3Rpb24gbXUodCl7cmV0dXJuIG5ldyBwdShhcmd1bWVudHMubGVuZ3RoPyt0OjEvMCl9ZnVuY3Rpb24geHUodCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dChudWxsPT1uP2U6bnVsbCl9fWZ1bmN0aW9uIGJ1KHQpe3ZhciBuPXQucmVzcG9uc2VUeXBlO3JldHVybiBuJiYidGV4dCIhPT1uP3QucmVzcG9uc2U6dC5yZXNwb25zZVRleHR9ZnVuY3Rpb24gd3UodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS5yZXNwb25zZVRleHQsbil9fWZ1bmN0aW9uIE11KHQpe2Z1bmN0aW9uIG4obil7dmFyIG89bisiIix1PWUuZ2V0KG8pO2lmKCF1KXtpZihpIT09WW0pcmV0dXJuIGk7ZS5zZXQobyx1PXIucHVzaChuKSl9cmV0dXJuIHRbKHUtMSkldC5sZW5ndGhdfXZhciBlPVllKCkscj1bXSxpPVltO3JldHVybiB0PW51bGw9PXQ/W106SW0uY2FsbCh0KSxuLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gci5zbGljZSgpO3I9W10sZT1ZZSgpO2Zvcih2YXIgaSxvLHU9LTEsYT10Lmxlbmd0aDsrK3U8YTspZS5oYXMobz0oaT10W3VdKSsiIil8fGUuc2V0KG8sci5wdXNoKGkpKTtyZXR1cm4gbn0sbi5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1JbS5jYWxsKGUpLG4pOnQuc2xpY2UoKX0sbi51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbik6aX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE11KCkuZG9tYWluKHIpLnJhbmdlKHQpLnVua25vd24oaSl9LG59ZnVuY3Rpb24gVHUoKXtmdW5jdGlvbiB0KCl7dmFyIHQ9aSgpLmxlbmd0aCxyPXVbMV08dVswXSxsPXVbci0wXSxoPXVbMS1yXTtuPShoLWwpL01hdGgubWF4KDEsdC1jKzIqcyksYSYmKG49TWF0aC5mbG9vcihuKSksbCs9KGgtbC1uKih0LWMpKSpmLGU9biooMS1jKSxhJiYobD1NYXRoLnJvdW5kKGwpLGU9TWF0aC5yb3VuZChlKSk7dmFyIHA9UXModCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBsK24qdH0pO3JldHVybiBvKHI/cC5yZXZlcnNlKCk6cCl9dmFyIG4sZSxyPU11KCkudW5rbm93bih2b2lkIDApLGk9ci5kb21haW4sbz1yLnJhbmdlLHU9WzAsMV0sYT0hMSxjPTAscz0wLGY9LjU7cmV0dXJuIGRlbGV0ZSByLnVua25vd24sci5kb21haW49ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkobiksdCgpKTppKCl9LHIucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9WytuWzBdLCtuWzFdXSx0KCkpOnUuc2xpY2UoKX0sci5yYW5nZVJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiB1PVsrblswXSwrblsxXV0sYT0hMCx0KCl9LHIuYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHIuc3RlcD1mdW5jdGlvbigpe3JldHVybiBufSxyLnJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhbix0KCkpOmF9LHIucGFkZGluZz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1zPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSksdCgpKTpjfSxyLnBhZGRpbmdJbm5lcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsbikpLHQoKSk6Y30sci5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSx0KCkpOnN9LHIuYWxpZ249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSx0KCkpOmZ9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiBUdSgpLmRvbWFpbihpKCkpLnJhbmdlKHUpLnJvdW5kKGEpLnBhZGRpbmdJbm5lcihjKS5wYWRkaW5nT3V0ZXIocykuYWxpZ24oZil9LHQoKX1mdW5jdGlvbiBrdSh0KXt2YXIgbj10LmNvcHk7cmV0dXJuIHQucGFkZGluZz10LnBhZGRpbmdPdXRlcixkZWxldGUgdC5wYWRkaW5nSW5uZXIsZGVsZXRlIHQucGFkZGluZ091dGVyLHQuY29weT1mdW5jdGlvbigpe3JldHVybiBrdShuKCkpfSx0fWZ1bmN0aW9uIFN1KCl7cmV0dXJuIGt1KFR1KCkucGFkZGluZ0lubmVyKDEpKX1mdW5jdGlvbiBOdSh0LG4pe3JldHVybihuLT10PSt0KT9mdW5jdGlvbihlKXtyZXR1cm4oZS10KS9ufTpCbShuKX1mdW5jdGlvbiBFdSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KG49K24sZT0rZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PD1uPzA6dD49ZT8xOnIodCl9fX1mdW5jdGlvbiBBdSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KG49K24sZT0rZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PD0wP246dD49MT9lOnIodCl9fX1mdW5jdGlvbiBDdSh0LG4sZSxyKXt2YXIgaT10WzBdLG89dFsxXSx1PW5bMF0sYT1uWzFdO3JldHVybiBvPGk/KGk9ZShvLGkpLHU9cihhLHUpKTooaT1lKGksbyksdT1yKHUsYSkpLGZ1bmN0aW9uKHQpe3JldHVybiB1KGkodCkpfX1mdW5jdGlvbiB6dSh0LG4sZSxyKXt2YXIgaT1NYXRoLm1pbih0Lmxlbmd0aCxuLmxlbmd0aCktMSxvPW5ldyBBcnJheShpKSx1PW5ldyBBcnJheShpKSxhPS0xO2Zvcih0W2ldPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksbj1uLnNsaWNlKCkucmV2ZXJzZSgpKTsrK2E8aTspb1thXT1lKHRbYV0sdFthKzFdKSx1W2FdPXIoblthXSxuW2ErMV0pO3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1Pcyh0LG4sMSxpKS0xO3JldHVybiB1W2VdKG9bZV0obikpfX1mdW5jdGlvbiBQdSh0LG4pe3JldHVybiBuLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKX1mdW5jdGlvbiBSdSh0LG4pe2Z1bmN0aW9uIGUoKXtyZXR1cm4gaT1NYXRoLm1pbihhLmxlbmd0aCxjLmxlbmd0aCk+Mj96dTpDdSxvPXU9bnVsbCxyfWZ1bmN0aW9uIHIobil7cmV0dXJuKG98fChvPWkoYSxjLGY/RXUodCk6dCxzKSkpKCtuKX12YXIgaSxvLHUsYT1IbSxjPUhtLHM9QWgsZj0hMTtyZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuKHV8fCh1PWkoYyxhLE51LGY/QXUobik6bikpKSgrdCl9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPUZtLmNhbGwodCxqbSksZSgpKTphLnNsaWNlKCl9LHIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9SW0uY2FsbCh0KSxlKCkpOmMuc2xpY2UoKX0sci5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBjPUltLmNhbGwodCkscz1DaCxlKCl9LHIuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ISF0LGUoKSk6Zn0sci5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGUoKSk6c30sZSgpfWZ1bmN0aW9uIEx1KHQpe3ZhciBuPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBlPW4oKTtyZXR1cm4gZWYoZVswXSxlW2UubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCl9LHQudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBYbShuKCksdCxlKX0sdC5uaWNlPWZ1bmN0aW9uKGUpe3ZhciBpPW4oKSxvPWkubGVuZ3RoLTEsdT1udWxsPT1lPzEwOmUsYT1pWzBdLGM9aVtvXSxzPXIoYSxjLHUpO3JldHVybiBzJiYocz1yKE1hdGguZmxvb3IoYS9zKSpzLE1hdGguY2VpbChjL3MpKnMsdSksaVswXT1NYXRoLmZsb29yKGEvcykqcyxpW29dPU1hdGguY2VpbChjL3MpKnMsbihpKSksdH0sdH1mdW5jdGlvbiBxdSgpe3ZhciB0PVJ1KE51LFRoKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFB1KHQscXUoKSl9LEx1KHQpfWZ1bmN0aW9uIFV1KCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4rdH12YXIgbj1bMCwxXTtyZXR1cm4gdC5pbnZlcnQ9dCx0LmRvbWFpbj10LnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPUZtLmNhbGwoZSxqbSksdCk6bi5zbGljZSgpfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVXUoKS5kb21haW4obil9LEx1KHQpfWZ1bmN0aW9uIER1KHQsbil7cmV0dXJuKG49TWF0aC5sb2cobi90KSk/ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubG9nKGUvdCkvbn06Qm0obil9ZnVuY3Rpb24gT3UodCxuKXtyZXR1cm4gdDwwP2Z1bmN0aW9uKGUpe3JldHVybi1NYXRoLnBvdygtbixlKSpNYXRoLnBvdygtdCwxLWUpfTpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3cobixlKSpNYXRoLnBvdyh0LDEtZSl9fWZ1bmN0aW9uIEZ1KHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiBJdSh0KXtyZXR1cm4gMTA9PT10P0Z1OnQ9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KHQsbil9fWZ1bmN0aW9uIFl1KHQpe3JldHVybiB0PT09TWF0aC5FP01hdGgubG9nOjEwPT09dCYmTWF0aC5sb2cxMHx8Mj09PXQmJk1hdGgubG9nMnx8KHQ9TWF0aC5sb2codCksZnVuY3Rpb24obil7cmV0dXJuIE1hdGgubG9nKG4pL3R9KX1mdW5jdGlvbiBCdSh0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuLXQoLW4pfX1mdW5jdGlvbiBqdSgpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbz1ZdShpKSx1PUl1KGkpLHIoKVswXTwwJiYobz1CdShvKSx1PUJ1KHUpKSxlfXZhciBlPVJ1KER1LE91KS5kb21haW4oWzEsMTBdKSxyPWUuZG9tYWluLGk9MTAsbz1ZdSgxMCksdT1JdSgxMCk7cmV0dXJuIGUuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxuKCkpOml9LGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHQpLG4oKSk6cigpfSxlLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuLGU9cigpLGE9ZVswXSxjPWVbZS5sZW5ndGgtMV07KG49YzxhKSYmKGg9YSxhPWMsYz1oKTt2YXIgcyxmLGwsaD1vKGEpLHA9byhjKSxkPW51bGw9PXQ/MTA6K3Qsdj1bXTtpZighKGklMSkmJnAtaDxkKXtpZihoPU1hdGgucm91bmQoaCktMSxwPU1hdGgucm91bmQocCkrMSxhPjApe2Zvcig7aDxwOysraClmb3IoZj0xLHM9dShoKTtmPGk7KytmKWlmKGw9cypmLCEobDxhKSl7aWYobD5jKWJyZWFrO3YucHVzaChsKX19ZWxzZSBmb3IoO2g8cDsrK2gpZm9yKGY9aS0xLHM9dShoKTtmPj0xOy0tZilpZihsPXMqZiwhKGw8YSkpe2lmKGw+YylicmVhazt2LnB1c2gobCl9fWVsc2Ugdj1lZihoLHAsTWF0aC5taW4ocC1oLGQpKS5tYXAodSk7cmV0dXJuIG4/di5yZXZlcnNlKCk6dn0sZS50aWNrRm9ybWF0PWZ1bmN0aW9uKG4scil7aWYobnVsbD09ciYmKHI9MTA9PT1pPyIuMGUiOiIsIiksImZ1bmN0aW9uIiE9dHlwZW9mIHImJihyPXQuZm9ybWF0KHIpKSxuPT09MS8wKXJldHVybiByO251bGw9PW4mJihuPTEwKTt2YXIgYT1NYXRoLm1heCgxLGkqbi9lLnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC91KE1hdGgucm91bmQobyh0KSkpO3JldHVybiBuKmk8aS0uNSYmKG4qPWkpLG48PWE/cih0KToiIn19LGUubmljZT1mdW5jdGlvbigpe3JldHVybiByKFZtKHIoKSx7Zmxvb3I6ZnVuY3Rpb24odCl7cmV0dXJuIHUoTWF0aC5mbG9vcihvKHQpKSl9LGNlaWw6ZnVuY3Rpb24odCl7cmV0dXJuIHUoTWF0aC5jZWlsKG8odCkpKX19KSl9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBQdShlLGp1KCkuYmFzZShpKSl9LGV9ZnVuY3Rpb24gSHUodCxuKXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxuKTpNYXRoLnBvdyh0LG4pfWZ1bmN0aW9uIFh1KCl7ZnVuY3Rpb24gdCh0LG4pe3JldHVybihuPUh1KG4sZSktKHQ9SHUodCxlKSkpP2Z1bmN0aW9uKHIpe3JldHVybihIdShyLGUpLXQpL259OkJtKG4pfWZ1bmN0aW9uIG4odCxuKXtyZXR1cm4gbj1IdShuLGUpLSh0PUh1KHQsZSkpLGZ1bmN0aW9uKHIpe3JldHVybiBIdSh0K24qciwxL2UpfX12YXIgZT0xLHI9UnUodCxuKSxpPXIuZG9tYWluO3JldHVybiByLmV4cG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGkoaSgpKSk6ZX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFB1KHIsWHUoKS5leHBvbmVudChlKSl9LEx1KHIpfWZ1bmN0aW9uIFZ1KCl7cmV0dXJuIFh1KCkuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIFd1KCl7ZnVuY3Rpb24gdCgpe3ZhciB0PTAsbz1NYXRoLm1heCgxLHIubGVuZ3RoKTtmb3IoaT1uZXcgQXJyYXkoby0xKTsrK3Q8bzspaVt0LTFdPXVmKGUsdC9vKTtyZXR1cm4gbn1mdW5jdGlvbiBuKHQpe2lmKCFpc05hTih0PSt0KSlyZXR1cm4gcltPcyhpLHQpXX12YXIgZT1bXSxyPVtdLGk9W107cmV0dXJuIG4uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBuPXIuaW5kZXhPZih0KTtyZXR1cm4gbjwwP1tOYU4sTmFOXTpbbj4wP2lbbi0xXTplWzBdLG48aS5sZW5ndGg/aVtuXTplW2UubGVuZ3RoLTFdXX0sbi5kb21haW49ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgcixpPTAsbz1uLmxlbmd0aDtpPG87KytpKXI9bltpXSxudWxsPT1yfHxpc05hTihyPStyKXx8ZS5wdXNoKHIpO3JldHVybiBlLnNvcnQocXMpLHQoKX0sbi5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1JbS5jYWxsKG4pLHQoKSk6ci5zbGljZSgpfSxuLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBpLnNsaWNlKCl9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBXdSgpLmRvbWFpbihlKS5yYW5nZShyKX0sbn1mdW5jdGlvbiAkdSgpe2Z1bmN0aW9uIHQodCl7aWYodDw9dClyZXR1cm4gdVtPcyhvLHQsMCxpKV19ZnVuY3Rpb24gbigpe3ZhciBuPS0xO2ZvcihvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT0oKG4rMSkqci0obi1pKSplKS8oaSsxKTtyZXR1cm4gdH12YXIgZT0wLHI9MSxpPTEsbz1bLjVdLHU9WzAsMV07cmV0dXJuIHQuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbMV0sbigpKTpbZSxyXX0sdC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0odT1JbS5jYWxsKHQpKS5sZW5ndGgtMSxuKCkpOnUuc2xpY2UoKX0sdC5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG49dS5pbmRleE9mKHQpO3JldHVybiBuPDA/W05hTixOYU5dOm48MT9bZSxvWzBdXTpuPj1pP1tvW2ktMV0scl06W29bbi0xXSxvW25dXX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuICR1KCkuZG9tYWluKFtlLHJdKS5yYW5nZSh1KX0sTHUodCl9ZnVuY3Rpb24gWnUoKXtmdW5jdGlvbiB0KHQpe2lmKHQ8PXQpcmV0dXJuIGVbT3Mobix0LDAscildfXZhciBuPVsuNV0sZT1bMCwxXSxyPTE7cmV0dXJuIHQuZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPUltLmNhbGwoaSkscj1NYXRoLm1pbihuLmxlbmd0aCxlLmxlbmd0aC0xKSx0KTpuLnNsaWNlKCl9LHQucmFuZ2U9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9SW0uY2FsbChpKSxyPU1hdGgubWluKG4ubGVuZ3RoLGUubGVuZ3RoLTEpLHQpOmUuc2xpY2UoKX0sdC5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIHI9ZS5pbmRleE9mKHQpO3JldHVybltuW3ItMV0sbltyXV19LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBadSgpLmRvbWFpbihuKS5yYW5nZShlKX0sdH1mdW5jdGlvbiBHdSh0LG4sZSxyKXtmdW5jdGlvbiBpKG4pe3JldHVybiB0KG49bmV3IERhdGUoK24pKSxufXJldHVybiBpLmZsb29yPWksaS5jZWlsPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoZS0xKSksbihlLDEpLHQoZSksZX0saS5yb3VuZD1mdW5jdGlvbih0KXt2YXIgbj1pKHQpLGU9aS5jZWlsKHQpO3JldHVybiB0LW48ZS10P246ZX0saS5vZmZzZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0PW5ldyBEYXRlKCt0KSxudWxsPT1lPzE6TWF0aC5mbG9vcihlKSksdH0saS5yYW5nZT1mdW5jdGlvbihlLHIsbyl7dmFyIHU9W107aWYoZT1pLmNlaWwoZSksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKGU8ciYmbz4wKSlyZXR1cm4gdTtkbyB1LnB1c2gobmV3IERhdGUoK2UpKTt3aGlsZShuKGUsbyksdChlKSxlPHIpO3JldHVybiB1fSxpLmZpbHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gR3UoZnVuY3Rpb24obil7aWYobj49bilmb3IoO3QobiksIWUobik7KW4uc2V0VGltZShuLTEpfSxmdW5jdGlvbih0LHIpe2lmKHQ+PXQpZm9yKDstLXI+PTA7KWZvcig7bih0LDEpLCFlKHQpOyk7fSl9LGUmJihpLmNvdW50PWZ1bmN0aW9uKG4scil7cmV0dXJuIFdtLnNldFRpbWUoK24pLCRtLnNldFRpbWUoK3IpLHQoV20pLHQoJG0pLE1hdGguZmxvb3IoZShXbSwkbSkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/aS5maWx0ZXIocj9mdW5jdGlvbihuKXtyZXR1cm4gcihuKSV0PT09MH06ZnVuY3Rpb24obil7cmV0dXJuIGkuY291bnQoMCxuKSV0PT09MH0pOmk6bnVsbH0pLGl9ZnVuY3Rpb24gSnUodCl7cmV0dXJuIEd1KGZ1bmN0aW9uKG4pe24uc2V0RGF0ZShuLmdldERhdGUoKS0obi5nZXREYXkoKSs3LXQpJTcpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdC0obi5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqUW0pL254fSl9ZnVuY3Rpb24gUXUodCl7cmV0dXJuIEd1KGZ1bmN0aW9uKG4pe24uc2V0VVRDRGF0ZShuLmdldFVUQ0RhdGUoKS0obi5nZXRVVENEYXkoKSs3LXQpJTcpLG4uc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvbnh9KX1mdW5jdGlvbiBLdSh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBuPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gbi5zZXRGdWxsWWVhcih0LnkpLG59cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gdGEodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgbj1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBuLnNldFVUQ0Z1bGxZZWFyKHQueSksbn1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gbmEodCl7cmV0dXJue3k6dCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gZWEodCl7ZnVuY3Rpb24gbih0LG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixpLG8sdT1bXSxhPS0xLGM9MCxzPXQubGVuZ3RoO2ZvcihlIGluc3RhbmNlb2YgRGF0ZXx8KGU9bmV3IERhdGUoK2UpKTsrK2E8czspMzc9PT10LmNoYXJDb2RlQXQoYSkmJih1LnB1c2godC5zbGljZShjLGEpKSxudWxsIT0oaT1LeFtyPXQuY2hhckF0KCsrYSldKT9yPXQuY2hhckF0KCsrYSk6aT0iZSI9PT1yPyIgIjoiMCIsKG89bltyXSkmJihyPW8oZSxpKSksdS5wdXNoKHIpLGM9YSsxKTtyZXR1cm4gdS5wdXNoKHQuc2xpY2UoYyxhKSksdS5qb2luKCIiKX19ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT1uYSgxOTAwKTtpZihyKGksdCxlKz0iIiwwKSE9ZS5sZW5ndGgpcmV0dXJuIG51bGw7aWYoInAiaW4gaSYmKGkuSD1pLkglMTIrMTIqaS5wKSwiVyJpbiBpfHwiVSJpbiBpKXsidyJpbiBpfHwoaS53PSJXImluIGk/MTowKTt2YXIgbz0iWiJpbiBpP3RhKG5hKGkueSkpLmdldFVUQ0RheSgpOm4obmEoaS55KSkuZ2V0RGF5KCk7aS5tPTAsaS5kPSJXImluIGk/KGkudys2KSU3KzcqaS5XLShvKzUpJTc6aS53KzcqaS5VLShvKzYpJTd9cmV0dXJuIloiaW4gaT8oaS5IKz1pLlovMTAwfDAsaS5NKz1pLlolMTAwLHRhKGkpKTpuKGkpfX1mdW5jdGlvbiByKHQsbixlLHIpewpmb3IodmFyIGksbyx1PTAsYT1uLmxlbmd0aCxjPWUubGVuZ3RoO3U8YTspe2lmKHI+PWMpcmV0dXJuLTE7aWYoaT1uLmNoYXJDb2RlQXQodSsrKSwzNz09PWkpe2lmKGk9bi5jaGFyQXQodSsrKSxvPUJbaSBpbiBLeD9uLmNoYXJBdCh1KyspOmldLCFvfHwocj1vKHQsZSxyKSk8MClyZXR1cm4tMX1lbHNlIGlmKGkhPWUuY2hhckNvZGVBdChyKyspKXJldHVybi0xfXJldHVybiByfWZ1bmN0aW9uIGkodCxuLGUpe3ZhciByPUMuZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC5wPXpbclswXS50b0xvd2VyQ2FzZSgpXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvKHQsbixlKXt2YXIgcj1MLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQudz1xW3JbMF0udG9Mb3dlckNhc2UoKV0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdSh0LG4sZSl7dmFyIHI9UC5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lnc9UltyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGEodCxuLGUpe3ZhciByPU8uZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC5tPUZbclswXS50b0xvd2VyQ2FzZSgpXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBjKHQsbixlKXt2YXIgcj1VLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQubT1EW3JbMF0udG9Mb3dlckNhc2UoKV0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcyh0LG4sZSl7cmV0dXJuIHIodCx3LG4sZSl9ZnVuY3Rpb24gZih0LG4sZSl7cmV0dXJuIHIodCxNLG4sZSl9ZnVuY3Rpb24gbCh0LG4sZSl7cmV0dXJuIHIodCxULG4sZSl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gTlt0LmdldERheSgpXX1mdW5jdGlvbiBwKHQpe3JldHVybiBTW3QuZ2V0RGF5KCldfWZ1bmN0aW9uIGQodCl7cmV0dXJuIEFbdC5nZXRNb250aCgpXX1mdW5jdGlvbiB2KHQpe3JldHVybiBFW3QuZ2V0TW9udGgoKV19ZnVuY3Rpb24gXyh0KXtyZXR1cm4ga1srKHQuZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBnKHQpe3JldHVybiBOW3QuZ2V0VVRDRGF5KCldfWZ1bmN0aW9uIHkodCl7cmV0dXJuIFNbdC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gbSh0KXtyZXR1cm4gQVt0LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIHgodCl7cmV0dXJuIEVbdC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBiKHQpe3JldHVybiBrWysodC5nZXRVVENIb3VycygpPj0xMildfXZhciB3PXQuZGF0ZVRpbWUsTT10LmRhdGUsVD10LnRpbWUsaz10LnBlcmlvZHMsUz10LmRheXMsTj10LnNob3J0RGF5cyxFPXQubW9udGhzLEE9dC5zaG9ydE1vbnRocyxDPW9hKGspLHo9dWEoayksUD1vYShTKSxSPXVhKFMpLEw9b2EoTikscT11YShOKSxVPW9hKEUpLEQ9dWEoRSksTz1vYShBKSxGPXVhKEEpLEk9e2E6aCxBOnAsYjpkLEI6dixjOm51bGwsZDpiYSxlOmJhLEg6d2EsSTpNYSxqOlRhLEw6a2EsbTpTYSxNOk5hLHA6XyxTOkVhLFU6QWEsdzpDYSxXOnphLHg6bnVsbCxYOm51bGwseTpQYSxZOlJhLFo6TGEsIiUiOlphfSxZPXthOmcsQTp5LGI6bSxCOngsYzpudWxsLGQ6cWEsZTpxYSxIOlVhLEk6RGEsajpPYSxMOkZhLG06SWEsTTpZYSxwOmIsUzpCYSxVOmphLHc6SGEsVzpYYSx4Om51bGwsWDpudWxsLHk6VmEsWTpXYSxaOiRhLCIlIjpaYX0sQj17YTpvLEE6dSxiOmEsQjpjLGM6cyxkOmRhLGU6ZGEsSDpfYSxJOl9hLGo6dmEsTDptYSxtOnBhLE06Z2EscDppLFM6eWEsVTpjYSx3OmFhLFc6c2EseDpmLFg6bCx5OmxhLFk6ZmEsWjpoYSwiJSI6eGF9O3JldHVybiBJLng9bihNLEkpLEkuWD1uKFQsSSksSS5jPW4odyxJKSxZLng9bihNLFkpLFkuWD1uKFQsWSksWS5jPW4odyxZKSx7Zm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPW4odCs9IiIsSSk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIG49ZSh0Kz0iIixLdSk7cmV0dXJuIG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sbn0sdXRjRm9ybWF0OmZ1bmN0aW9uKHQpe3ZhciBlPW4odCs9IiIsWSk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjUGFyc2U6ZnVuY3Rpb24odCl7dmFyIG49ZSh0LHRhKTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxufX19ZnVuY3Rpb24gcmEodCxuLGUpe3ZhciByPXQ8MD8iLSI6IiIsaT0ocj8tdDp0KSsiIixvPWkubGVuZ3RoO3JldHVybiByKyhvPGU/bmV3IEFycmF5KGUtbysxKS5qb2luKG4pK2k6aSl9ZnVuY3Rpb24gaWEodCl7cmV0dXJuIHQucmVwbGFjZShlYiwiXFwkJiIpfWZ1bmN0aW9uIG9hKHQpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86Iit0Lm1hcChpYSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHVhKHQpe2Zvcih2YXIgbj17fSxlPS0xLHI9dC5sZW5ndGg7KytlPHI7KW5bdFtlXS50b0xvd2VyQ2FzZSgpXT1lO3JldHVybiBufWZ1bmN0aW9uIGFhKHQsbixlKXt2YXIgcj10Yi5leGVjKG4uc2xpY2UoZSxlKzEpKTtyZXR1cm4gcj8odC53PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGNhKHQsbixlKXt2YXIgcj10Yi5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0LlU9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc2EodCxuLGUpe3ZhciByPXRiLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQuVz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmYSh0LG4sZSl7dmFyIHI9dGIuZXhlYyhuLnNsaWNlKGUsZSs0KSk7cmV0dXJuIHI/KHQueT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsYSh0LG4sZSl7dmFyIHI9dGIuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQueT0rclswXSsoK3JbMF0+Njg/MTkwMDoyZTMpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGhhKHQsbixlKXt2YXIgcj0vXihaKXwoWystXVxkXGQpKD86XDo/KFxkXGQpKT8vLmV4ZWMobi5zbGljZShlLGUrNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHBhKHQsbixlKXt2YXIgcj10Yi5leGVjKG4uc2xpY2UoZSxlKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBkYSh0LG4sZSl7dmFyIHI9dGIuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2YSh0LG4sZSl7dmFyIHI9dGIuZXhlYyhuLnNsaWNlKGUsZSszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBfYSh0LG4sZSl7dmFyIHI9dGIuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBnYSh0LG4sZSl7dmFyIHI9dGIuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5YSh0LG4sZSl7dmFyIHI9dGIuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBtYSh0LG4sZSl7dmFyIHI9dGIuZXhlYyhuLnNsaWNlKGUsZSszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB4YSh0LG4sZSl7dmFyIHI9bmIuZXhlYyhuLnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/ZStyWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBiYSh0LG4pe3JldHVybiByYSh0LmdldERhdGUoKSxuLDIpfWZ1bmN0aW9uIHdhKHQsbil7cmV0dXJuIHJhKHQuZ2V0SG91cnMoKSxuLDIpfWZ1bmN0aW9uIE1hKHQsbil7cmV0dXJuIHJhKHQuZ2V0SG91cnMoKSUxMnx8MTIsbiwyKX1mdW5jdGlvbiBUYSh0LG4pe3JldHVybiByYSgxK2N4LmNvdW50KFN4KHQpLHQpLG4sMyl9ZnVuY3Rpb24ga2EodCxuKXtyZXR1cm4gcmEodC5nZXRNaWxsaXNlY29uZHMoKSxuLDMpfWZ1bmN0aW9uIFNhKHQsbil7cmV0dXJuIHJhKHQuZ2V0TW9udGgoKSsxLG4sMil9ZnVuY3Rpb24gTmEodCxuKXtyZXR1cm4gcmEodC5nZXRNaW51dGVzKCksbiwyKX1mdW5jdGlvbiBFYSh0LG4pe3JldHVybiByYSh0LmdldFNlY29uZHMoKSxuLDIpfWZ1bmN0aW9uIEFhKHQsbil7cmV0dXJuIHJhKGZ4LmNvdW50KFN4KHQpLHQpLG4sMil9ZnVuY3Rpb24gQ2EodCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gemEodCxuKXtyZXR1cm4gcmEobHguY291bnQoU3godCksdCksbiwyKX1mdW5jdGlvbiBQYSh0LG4pe3JldHVybiByYSh0LmdldEZ1bGxZZWFyKCklMTAwLG4sMil9ZnVuY3Rpb24gUmEodCxuKXtyZXR1cm4gcmEodC5nZXRGdWxsWWVhcigpJTFlNCxuLDQpfWZ1bmN0aW9uIExhKHQpe3ZhciBuPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4obj4wPyItIjoobio9LTEsIisiKSkrcmEobi82MHwwLCIwIiwyKStyYShuJTYwLCIwIiwyKX1mdW5jdGlvbiBxYSh0LG4pe3JldHVybiByYSh0LmdldFVUQ0RhdGUoKSxuLDIpfWZ1bmN0aW9uIFVhKHQsbil7cmV0dXJuIHJhKHQuZ2V0VVRDSG91cnMoKSxuLDIpfWZ1bmN0aW9uIERhKHQsbil7cmV0dXJuIHJhKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsbiwyKX1mdW5jdGlvbiBPYSh0LG4pe3JldHVybiByYSgxK1B4LmNvdW50KEd4KHQpLHQpLG4sMyl9ZnVuY3Rpb24gRmEodCxuKXtyZXR1cm4gcmEodC5nZXRVVENNaWxsaXNlY29uZHMoKSxuLDMpfWZ1bmN0aW9uIElhKHQsbil7cmV0dXJuIHJhKHQuZ2V0VVRDTW9udGgoKSsxLG4sMil9ZnVuY3Rpb24gWWEodCxuKXtyZXR1cm4gcmEodC5nZXRVVENNaW51dGVzKCksbiwyKX1mdW5jdGlvbiBCYSh0LG4pe3JldHVybiByYSh0LmdldFVUQ1NlY29uZHMoKSxuLDIpfWZ1bmN0aW9uIGphKHQsbil7cmV0dXJuIHJhKEx4LmNvdW50KEd4KHQpLHQpLG4sMil9ZnVuY3Rpb24gSGEodCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gWGEodCxuKXtyZXR1cm4gcmEocXguY291bnQoR3godCksdCksbiwyKX1mdW5jdGlvbiBWYSh0LG4pe3JldHVybiByYSh0LmdldFVUQ0Z1bGxZZWFyKCklMTAwLG4sMil9ZnVuY3Rpb24gV2EodCxuKXtyZXR1cm4gcmEodC5nZXRVVENGdWxsWWVhcigpJTFlNCxuLDQpfWZ1bmN0aW9uICRhKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBaYSgpe3JldHVybiIlIn1mdW5jdGlvbiBHYShuKXtyZXR1cm4gSng9ZWEobiksdC50aW1lRm9ybWF0PUp4LmZvcm1hdCx0LnRpbWVQYXJzZT1KeC5wYXJzZSx0LnV0Y0Zvcm1hdD1KeC51dGNGb3JtYXQsdC51dGNQYXJzZT1KeC51dGNQYXJzZSxKeH1mdW5jdGlvbiBKYSh0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfWZ1bmN0aW9uIFFhKHQpe3ZhciBuPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihuKT9udWxsOm59ZnVuY3Rpb24gS2EodCl7cmV0dXJuIG5ldyBEYXRlKHQpfWZ1bmN0aW9uIHRjKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZT8rdDorbmV3IERhdGUoK3QpfWZ1bmN0aW9uIG5jKHQsbixlLGksbyx1LGEsYyxzKXtmdW5jdGlvbiBmKHIpe3JldHVybihhKHIpPHI/djp1KHIpPHI/XzpvKHIpPHI/ZzppKHIpPHI/eTpuKHIpPHI/ZShyKTxyP206eDp0KHIpPHI/Yjp3KShyKX1mdW5jdGlvbiBsKG4sZSxpLG8pe2lmKG51bGw9PW4mJihuPTEwKSwibnVtYmVyIj09dHlwZW9mIG4pe3ZhciB1PU1hdGguYWJzKGktZSkvbixhPVVzKGZ1bmN0aW9uKHQpe3JldHVybiB0WzJdfSkucmlnaHQoTSx1KTthPT09TS5sZW5ndGg/KG89cihlL2hiLGkvaGIsbiksbj10KTphPyhhPU1bdS9NW2EtMV1bMl08TVthXVsyXS91P2EtMTphXSxvPWFbMV0sbj1hWzBdKToobz1yKGUsaSxuKSxuPWMpfXJldHVybiBudWxsPT1vP246bi5ldmVyeShvKX12YXIgaD1SdShOdSxUaCkscD1oLmludmVydCxkPWguZG9tYWluLHY9cygiLiVMIiksXz1zKCI6JVMiKSxnPXMoIiVJOiVNIikseT1zKCIlSSAlcCIpLG09cygiJWEgJWQiKSx4PXMoIiViICVkIiksYj1zKCIlQiIpLHc9cygiJVkiKSxNPVtbYSwxLHViXSxbYSw1LDUqdWJdLFthLDE1LDE1KnViXSxbYSwzMCwzMCp1Yl0sW3UsMSxhYl0sW3UsNSw1KmFiXSxbdSwxNSwxNSphYl0sW3UsMzAsMzAqYWJdLFtvLDEsY2JdLFtvLDMsMypjYl0sW28sNiw2KmNiXSxbbywxMiwxMipjYl0sW2ksMSxzYl0sW2ksMiwyKnNiXSxbZSwxLGZiXSxbbiwxLGxiXSxbbiwzLDMqbGJdLFt0LDEsaGJdXTtyZXR1cm4gaC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKHAodCkpfSxoLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9kKEZtLmNhbGwodCx0YykpOmQoKS5tYXAoS2EpfSxoLnRpY2tzPWZ1bmN0aW9uKHQsbil7dmFyIGUscj1kKCksaT1yWzBdLG89cltyLmxlbmd0aC0xXSx1PW88aTtyZXR1cm4gdSYmKGU9aSxpPW8sbz1lKSxlPWwodCxpLG8sbiksZT1lP2UucmFuZ2UoaSxvKzEpOltdLHU/ZS5yZXZlcnNlKCk6ZX0saC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIG51bGw9PW4/ZjpzKG4pfSxoLm5pY2U9ZnVuY3Rpb24odCxuKXt2YXIgZT1kKCk7cmV0dXJuKHQ9bCh0LGVbMF0sZVtlLmxlbmd0aC0xXSxuKSk/ZChWbShlLHQpKTpofSxoLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gUHUoaCxuYyh0LG4sZSxpLG8sdSxhLGMscykpfSxofWZ1bmN0aW9uIGVjKHQpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGUqbikpKV19fWZ1bmN0aW9uIHJjKHQpe2Z1bmN0aW9uIG4obil7dmFyIG89KG4tZSkvKHItZSk7cmV0dXJuIHQoaT9NYXRoLm1heCgwLE1hdGgubWluKDEsbykpOm8pfXZhciBlPTAscj0xLGk9ITE7cmV0dXJuIG4uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbMV0sbik6W2Uscl19LG4uY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ISF0LG4pOml9LG4uaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbik6dH0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHJjKHQpLmRvbWFpbihbZSxyXSkuY2xhbXAoaSl9LEx1KG4pfWZ1bmN0aW9uIGljKHQpe3JldHVybiB0PjE/MDp0PC0xP09iOk1hdGguYWNvcyh0KX1mdW5jdGlvbiBvYyh0KXtyZXR1cm4gdD49MT9GYjp0PD0tMT8tRmI6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIHVjKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIGFjKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIGNjKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gc2ModCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gZmModCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gbGModCxuLGUscixpLG8sdSxhKXt2YXIgYz1lLXQscz1yLW4sZj11LWksbD1hLW8saD0oZioobi1vKS1sKih0LWkpKS8obCpjLWYqcyk7cmV0dXJuW3QraCpjLG4raCpzXX1mdW5jdGlvbiBoYyh0LG4sZSxyLGksbyx1KXt2YXIgYT10LWUsYz1uLXIscz0odT9vOi1vKS9VYihhKmErYypjKSxmPXMqYyxsPS1zKmEsaD10K2YscD1uK2wsZD1lK2Ysdj1yK2wsXz0oaCtkKS8yLGc9KHArdikvMix5PWQtaCxtPXYtcCx4PXkqeSttKm0sYj1pLW8sdz1oKnYtZCpwLE09KG08MD8tMToxKSpVYihSYigwLGIqYip4LXcqdykpLFQ9KHcqbS15Kk0pL3gsaz0oLXcqeS1tKk0pL3gsUz0odyptK3kqTSkveCxOPSgtdyp5K20qTSkveCxFPVQtXyxBPWstZyxDPVMtXyx6PU4tZztyZXR1cm4gRSpFK0EqQT5DKkMreip6JiYoVD1TLGs9Tikse2N4OlQsY3k6ayx4MDE6LWYseTAxOi1sLHgxMTpUKihpL2ItMSkseTExOmsqKGkvYi0xKX19ZnVuY3Rpb24gcGModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGRjKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIHZjKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIF9jKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gZ2ModCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbmV3IF9jKHQobikpfXJldHVybiBuLl9jdXJ2ZT10LG59ZnVuY3Rpb24geWModCl7dmFyIG49dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oZ2ModCkpOm4oKS5fY3VydmV9LHR9ZnVuY3Rpb24gbWModCxuLGUpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStuKS82LCh0Ll95MCs0KnQuX3kxK2UpLzYpfWZ1bmN0aW9uIHhjKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBiYyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gd2ModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIE1jKHQsbil7dGhpcy5fYmFzaXM9bmV3IHhjKHQpLHRoaXMuX2JldGE9bn1mdW5jdGlvbiBUYyh0LG4sZSl7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQuX3gxK3QuX2sqKHQuX3gyLXQuX3gwKSx0Ll95MSt0Ll9rKih0Ll95Mi10Ll95MCksdC5feDIrdC5fayoodC5feDEtbiksdC5feTIrdC5fayoodC5feTEtZSksdC5feDIsdC5feTIpfWZ1bmN0aW9uIGtjKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtbikvNn1mdW5jdGlvbiBTYyh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLW4pLzZ9ZnVuY3Rpb24gTmModCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1uKS82fWZ1bmN0aW9uIEVjKHQsbixlKXt2YXIgcj10Ll94MSxpPXQuX3kxLG89dC5feDIsdT10Ll95MjtpZih0Ll9sMDFfYT5EYil7dmFyIGE9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsYz0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7cj0ociphLXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2MsaT0oaSphLXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2N9aWYodC5fbDIzX2E+RGIpe3ZhciBzPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGY9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO289KG8qcyt0Ll94MSp0Ll9sMjNfMmEtbip0Ll9sMTJfMmEpL2YsdT0odSpzK3QuX3kxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvZn10Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocixpLG8sdSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gQWModCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9bn1mdW5jdGlvbiBDYyh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1ufWZ1bmN0aW9uIHpjKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPW59ZnVuY3Rpb24gUGModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIFJjKHQpe3JldHVybiB0PDA/LTE6MX1mdW5jdGlvbiBMYyh0LG4sZSl7dmFyIHI9dC5feDEtdC5feDAsaT1uLXQuX3gxLG89KHQuX3kxLXQuX3kwKS8ocnx8aTwwJiYtMCksdT0oZS10Ll95MSkvKGl8fHI8MCYmLTApLGE9KG8qaSt1KnIpLyhyK2kpO3JldHVybihSYyhvKStSYyh1KSkqTWF0aC5taW4oTWF0aC5hYnMobyksTWF0aC5hYnModSksLjUqTWF0aC5hYnMoYSkpfHwwfWZ1bmN0aW9uIHFjKHQsbil7dmFyIGU9dC5feDEtdC5feDA7cmV0dXJuIGU/KDMqKHQuX3kxLXQuX3kwKS9lLW4pLzI6bn1mdW5jdGlvbiBVYyh0LG4sZSl7dmFyIHI9dC5feDAsaT10Ll95MCxvPXQuX3gxLHU9dC5feTEsYT0oby1yKS8zO3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyK2EsaSthKm4sby1hLHUtYSplLG8sdSl9ZnVuY3Rpb24gRGModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIE9jKHQpe3RoaXMuX2NvbnRleHQ9bmV3IEZjKHQpfWZ1bmN0aW9uIEZjKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBJYyh0KXtyZXR1cm4gbmV3IERjKHQpfWZ1bmN0aW9uIFljKHQpe3JldHVybiBuZXcgT2ModCl9ZnVuY3Rpb24gQmModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGpjKHQpe3ZhciBuLGUscj10Lmxlbmd0aC0xLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLHU9bmV3IEFycmF5KHIpO2ZvcihpWzBdPTAsb1swXT0yLHVbMF09dFswXSsyKnRbMV0sbj0xO248ci0xOysrbilpW25dPTEsb1tuXT00LHVbbl09NCp0W25dKzIqdFtuKzFdO2ZvcihpW3ItMV09MixvW3ItMV09Nyx1W3ItMV09OCp0W3ItMV0rdFtyXSxuPTE7bjxyOysrbillPWlbbl0vb1tuLTFdLG9bbl0tPWUsdVtuXS09ZSp1W24tMV07Zm9yKGlbci0xXT11W3ItMV0vb1tyLTFdLG49ci0yO24+PTA7LS1uKWlbbl09KHVbbl0taVtuKzFdKS9vW25dO2ZvcihvW3ItMV09KHRbcl0raVtyLTFdKS8yLG49MDtuPHItMTsrK24pb1tuXT0yKnRbbisxXS1pW24rMV07cmV0dXJuW2ksb119ZnVuY3Rpb24gSGModCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1ufWZ1bmN0aW9uIFhjKHQpe3JldHVybiBuZXcgSGModCwwKX1mdW5jdGlvbiBWYyh0KXtyZXR1cm4gbmV3IEhjKHQsMSl9ZnVuY3Rpb24gV2ModCxuKXtyZXR1cm4gdFtuXX1mdW5jdGlvbiAkYyh0KXtmb3IodmFyIG4sZT0wLHI9LTEsaT10Lmxlbmd0aDsrK3I8aTspKG49K3Rbcl1bMV0pJiYoZSs9bik7cmV0dXJuIGV9ZnVuY3Rpb24gWmModCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gR2ModCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gSmMoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBRYyh0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIEtjKHQsbil7dmFyIGU9bixyPW4uUixpPWUuVTtpP2kuTD09PWU/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksZS5VPXIsZS5SPXIuTCxlLlImJihlLlIuVT1lKSxyLkw9ZX1mdW5jdGlvbiB0cyh0LG4pe3ZhciBlPW4scj1uLkwsaT1lLlU7aT9pLkw9PT1lP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLGUuVT1yLGUuTD1yLlIsZS5MJiYoZS5MLlU9ZSksci5SPWV9ZnVuY3Rpb24gbnModCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fWZ1bmN0aW9uIGVzKHQsbixlLHIpe3ZhciBpPVtudWxsLG51bGxdLG89V3cucHVzaChpKS0xO3JldHVybiBpLmxlZnQ9dCxpLnJpZ2h0PW4sZSYmaXMoaSx0LG4sZSksciYmaXMoaSxuLHQsciksWHdbdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksWHdbbi5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksaX1mdW5jdGlvbiBycyh0LG4sZSl7dmFyIHI9W24sZV07cmV0dXJuIHIubGVmdD10LHJ9ZnVuY3Rpb24gaXModCxuLGUscil7dFswXXx8dFsxXT90LmxlZnQ9PT1lP3RbMV09cjp0WzBdPXI6KHRbMF09cix0LmxlZnQ9bix0LnJpZ2h0PWUpfWZ1bmN0aW9uIG9zKHQsbixlLHIsaSl7dmFyIG8sdT10WzBdLGE9dFsxXSxjPXVbMF0scz11WzFdLGY9YVswXSxsPWFbMV0saD0wLHA9MSxkPWYtYyx2PWwtcztpZihvPW4tYyxkfHwhKG8+MCkpe2lmKG8vPWQsZDwwKXtpZihvPGgpcmV0dXJuO288cCYmKHA9byl9ZWxzZSBpZihkPjApe2lmKG8+cClyZXR1cm47bz5oJiYoaD1vKX1pZihvPXItYyxkfHwhKG88MCkpe2lmKG8vPWQsZDwwKXtpZihvPnApcmV0dXJuO28+aCYmKGg9byl9ZWxzZSBpZihkPjApe2lmKG88aClyZXR1cm47bzxwJiYocD1vKX1pZihvPWUtcyx2fHwhKG8+MCkpe2lmKG8vPXYsdjwwKXtpZihvPGgpcmV0dXJuO288cCYmKHA9byl9ZWxzZSBpZih2PjApe2lmKG8+cClyZXR1cm47bz5oJiYoaD1vKX1pZihvPWktcyx2fHwhKG88MCkpe2lmKG8vPXYsdjwwKXtpZihvPnApcmV0dXJuO28+aCYmKGg9byl9ZWxzZSBpZih2PjApe2lmKG88aClyZXR1cm47bzxwJiYocD1vKX1yZXR1cm4hKGg+MHx8cDwxKXx8KGg+MCYmKHRbMF09W2MraCpkLHMraCp2XSkscDwxJiYodFsxXT1bYytwKmQscytwKnZdKSwhMCl9fX19fWZ1bmN0aW9uIHVzKHQsbixlLHIsaSl7dmFyIG89dFsxXTtpZihvKXJldHVybiEwO3ZhciB1LGEsYz10WzBdLHM9dC5sZWZ0LGY9dC5yaWdodCxsPXNbMF0saD1zWzFdLHA9ZlswXSxkPWZbMV0sdj0obCtwKS8yLF89KGgrZCkvMjtpZihkPT09aCl7aWYodjxufHx2Pj1yKXJldHVybjtpZihsPnApe2lmKGMpe2lmKGNbMV0+PWkpcmV0dXJufWVsc2UgYz1bdixlXTtvPVt2LGldfWVsc2V7aWYoYyl7aWYoY1sxXTxlKXJldHVybn1lbHNlIGM9W3YsaV07bz1bdixlXX19ZWxzZSBpZih1PShsLXApLyhkLWgpLGE9Xy11KnYsdTwtMXx8dT4xKWlmKGw+cCl7aWYoYyl7aWYoY1sxXT49aSlyZXR1cm59ZWxzZSBjPVsoZS1hKS91LGVdO289WyhpLWEpL3UsaV19ZWxzZXtpZihjKXtpZihjWzFdPGUpcmV0dXJufWVsc2UgYz1bKGktYSkvdSxpXTtvPVsoZS1hKS91LGVdfWVsc2UgaWYoaDxkKXtpZihjKXtpZihjWzBdPj1yKXJldHVybn1lbHNlIGM9W24sdSpuK2FdO289W3IsdSpyK2FdfWVsc2V7aWYoYyl7aWYoY1swXTxuKXJldHVybn1lbHNlIGM9W3IsdSpyK2FdO289W24sdSpuK2FdfXJldHVybiB0WzBdPWMsdFsxXT1vLCEwfWZ1bmN0aW9uIGFzKHQsbixlLHIpe2Zvcih2YXIgaSxvPVd3Lmxlbmd0aDtvLS07KXVzKGk9V3dbb10sdCxuLGUscikmJm9zKGksdCxuLGUscikmJihNYXRoLmFicyhpWzBdWzBdLWlbMV1bMF0pPkd3fHxNYXRoLmFicyhpWzBdWzFdLWlbMV1bMV0pPkd3KXx8ZGVsZXRlIFd3W29dfWZ1bmN0aW9uIGNzKHQpe3JldHVybiBYd1t0LmluZGV4XT17c2l0ZTp0LGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gc3ModCxuKXt2YXIgZT10LnNpdGUscj1uLmxlZnQsaT1uLnJpZ2h0O3JldHVybiBlPT09aSYmKGk9cixyPWUpLGk/TWF0aC5hdGFuMihpWzFdLXJbMV0saVswXS1yWzBdKTooZT09PXI/KHI9blsxXSxpPW5bMF0pOihyPW5bMF0saT1uWzFdKSxNYXRoLmF0YW4yKHJbMF0taVswXSxpWzFdLXJbMV0pKX1mdW5jdGlvbiBmcyh0LG4pe3JldHVybiBuWysobi5sZWZ0IT09dC5zaXRlKV19ZnVuY3Rpb24gbHModCxuKXtyZXR1cm4gblsrKG4ubGVmdD09PXQuc2l0ZSldfWZ1bmN0aW9uIGhzKCl7Zm9yKHZhciB0LG4sZSxyLGk9MCxvPVh3Lmxlbmd0aDtpPG87KytpKWlmKCh0PVh3W2ldKSYmKHI9KG49dC5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciB1PW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKTtmb3IoZT0wO2U8cjsrK2UpdVtlXT1lLGFbZV09c3ModCxXd1tuW2VdXSk7Zm9yKHUuc29ydChmdW5jdGlvbih0LG4pe3JldHVybiBhW25dLWFbdF19KSxlPTA7ZTxyOysrZSlhW2VdPW5bdVtlXV07Zm9yKGU9MDtlPHI7KytlKW5bZV09YVtlXX19ZnVuY3Rpb24gcHModCxuLGUscil7dmFyIGksbyx1LGEsYyxzLGYsbCxoLHAsZCx2LF89WHcubGVuZ3RoLGc9ITA7Zm9yKGk9MDtpPF87KytpKWlmKG89WHdbaV0pe2Zvcih1PW8uc2l0ZSxjPW8uaGFsZmVkZ2VzLGE9Yy5sZW5ndGg7YS0tOylXd1tjW2FdXXx8Yy5zcGxpY2UoYSwxKTtmb3IoYT0wLHM9Yy5sZW5ndGg7YTxzOylwPWxzKG8sV3dbY1thXV0pLGQ9cFswXSx2PXBbMV0sZj1mcyhvLFd3W2NbKythJXNdXSksbD1mWzBdLGg9ZlsxXSwoTWF0aC5hYnMoZC1sKT5Hd3x8TWF0aC5hYnModi1oKT5HdykmJihjLnNwbGljZShhLDAsV3cucHVzaChycyh1LHAsTWF0aC5hYnMoZC10KTxHdyYmci12Pkd3P1t0LE1hdGguYWJzKGwtdCk8R3c/aDpyXTpNYXRoLmFicyh2LXIpPEd3JiZlLWQ+R3c/W01hdGguYWJzKGgtcik8R3c/bDplLHJdOk1hdGguYWJzKGQtZSk8R3cmJnYtbj5Hdz9bZSxNYXRoLmFicyhsLWUpPEd3P2g6bl06TWF0aC5hYnModi1uKTxHdyYmZC10Pkd3P1tNYXRoLmFicyhoLW4pPEd3P2w6dCxuXTpudWxsKSktMSksKytzKTtzJiYoZz0hMSl9aWYoZyl7dmFyIHksbSx4LGI9MS8wO2ZvcihpPTAsZz1udWxsO2k8XzsrK2kpKG89WHdbaV0pJiYodT1vLnNpdGUseT11WzBdLXQsbT11WzFdLW4seD15KnkrbSptLHg8YiYmKGI9eCxnPW8pKTtpZihnKXt2YXIgdz1bdCxuXSxNPVt0LHJdLFQ9W2Uscl0saz1bZSxuXTtnLmhhbGZlZGdlcy5wdXNoKFd3LnB1c2gocnModT1nLnNpdGUsdyxNKSktMSxXdy5wdXNoKHJzKHUsTSxUKSktMSxXdy5wdXNoKHJzKHUsVCxrKSktMSxXdy5wdXNoKHJzKHUsayx3KSktMSl9fWZvcihpPTA7aTxfOysraSkobz1Yd1tpXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBYd1tpXSl9ZnVuY3Rpb24gZHMoKXtRYyh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gdnModCl7dmFyIG49dC5QLGU9dC5OO2lmKG4mJmUpe3ZhciByPW4uc2l0ZSxpPXQuc2l0ZSxvPWUuc2l0ZTtpZihyIT09byl7dmFyIHU9aVswXSxhPWlbMV0sYz1yWzBdLXUscz1yWzFdLWEsZj1vWzBdLXUsbD1vWzFdLWEsaD0yKihjKmwtcypmKTtpZighKGg+PS1Kdykpe3ZhciBwPWMqYytzKnMsZD1mKmYrbCpsLHY9KGwqcC1zKmQpL2gsXz0oYypkLWYqcCkvaCxnPSR3LnBvcCgpfHxuZXcgZHM7Zy5hcmM9dCxnLnNpdGU9aSxnLng9dit1LGcueT0oZy5jeT1fK2EpK01hdGguc3FydCh2KnYrXypfKSx0LmNpcmNsZT1nO2Zvcih2YXIgeT1udWxsLG09VncuXzttOylpZihnLnk8bS55fHxnLnk9PT1tLnkmJmcueDw9bS54KXtpZighbS5MKXt5PW0uUDticmVha31tPW0uTH1lbHNle2lmKCFtLlIpe3k9bTticmVha31tPW0uUn1Wdy5pbnNlcnQoeSxnKSx5fHwoanc9Zyl9fX19ZnVuY3Rpb24gX3ModCl7dmFyIG49dC5jaXJjbGU7biYmKG4uUHx8KGp3PW4uTiksVncucmVtb3ZlKG4pLCR3LnB1c2gobiksUWMobiksdC5jaXJjbGU9bnVsbCl9ZnVuY3Rpb24gZ3MoKXtRYyh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24geXModCl7dmFyIG49WncucG9wKCl8fG5ldyBncztyZXR1cm4gbi5zaXRlPXQsbn1mdW5jdGlvbiBtcyh0KXtfcyh0KSxIdy5yZW1vdmUodCksWncucHVzaCh0KSxRYyh0KX1mdW5jdGlvbiB4cyh0KXt2YXIgbj10LmNpcmNsZSxlPW4ueCxyPW4uY3ksaT1bZSxyXSxvPXQuUCx1PXQuTixhPVt0XTttcyh0KTtmb3IodmFyIGM9bztjLmNpcmNsZSYmTWF0aC5hYnMoZS1jLmNpcmNsZS54KTxHdyYmTWF0aC5hYnMoci1jLmNpcmNsZS5jeSk8R3c7KW89Yy5QLGEudW5zaGlmdChjKSxtcyhjKSxjPW87YS51bnNoaWZ0KGMpLF9zKGMpO2Zvcih2YXIgcz11O3MuY2lyY2xlJiZNYXRoLmFicyhlLXMuY2lyY2xlLngpPEd3JiZNYXRoLmFicyhyLXMuY2lyY2xlLmN5KTxHdzspdT1zLk4sYS5wdXNoKHMpLG1zKHMpLHM9dTthLnB1c2gocyksX3Mocyk7dmFyIGYsbD1hLmxlbmd0aDtmb3IoZj0xO2Y8bDsrK2Ypcz1hW2ZdLGM9YVtmLTFdLGlzKHMuZWRnZSxjLnNpdGUscy5zaXRlLGkpO2M9YVswXSxzPWFbbC0xXSxzLmVkZ2U9ZXMoYy5zaXRlLHMuc2l0ZSxudWxsLGkpLHZzKGMpLHZzKHMpfWZ1bmN0aW9uIGJzKHQpe2Zvcih2YXIgbixlLHIsaSxvPXRbMF0sdT10WzFdLGE9SHcuXzthOylpZihyPXdzKGEsdSktbyxyPkd3KWE9YS5MO2Vsc2V7aWYoaT1vLU1zKGEsdSksIShpPkd3KSl7cj4tR3c/KG49YS5QLGU9YSk6aT4tR3c/KG49YSxlPWEuTik6bj1lPWE7YnJlYWt9aWYoIWEuUil7bj1hO2JyZWFrfWE9YS5SfWNzKHQpO3ZhciBjPXlzKHQpO2lmKEh3Lmluc2VydChuLGMpLG58fGUpe2lmKG49PT1lKXJldHVybiBfcyhuKSxlPXlzKG4uc2l0ZSksSHcuaW5zZXJ0KGMsZSksYy5lZGdlPWUuZWRnZT1lcyhuLnNpdGUsYy5zaXRlKSx2cyhuKSx2b2lkIHZzKGUpO2lmKCFlKXJldHVybiB2b2lkKGMuZWRnZT1lcyhuLnNpdGUsYy5zaXRlKSk7X3MobiksX3MoZSk7dmFyIHM9bi5zaXRlLGY9c1swXSxsPXNbMV0saD10WzBdLWYscD10WzFdLWwsZD1lLnNpdGUsdj1kWzBdLWYsXz1kWzFdLWwsZz0yKihoKl8tcCp2KSx5PWgqaCtwKnAsbT12KnYrXypfLHg9WyhfKnktcCptKS9nK2YsKGgqbS12KnkpL2crbF07aXMoZS5lZGdlLHMsZCx4KSxjLmVkZ2U9ZXMocyx0LG51bGwseCksZS5lZGdlPWVzKHQsZCxudWxsLHgpLHZzKG4pLHZzKGUpfX1mdW5jdGlvbiB3cyh0LG4pe3ZhciBlPXQuc2l0ZSxyPWVbMF0saT1lWzFdLG89aS1uO2lmKCFvKXJldHVybiByO3ZhciB1PXQuUDtpZighdSlyZXR1cm4tKDEvMCk7ZT11LnNpdGU7dmFyIGE9ZVswXSxjPWVbMV0scz1jLW47aWYoIXMpcmV0dXJuIGE7dmFyIGY9YS1yLGw9MS9vLTEvcyxoPWYvcztyZXR1cm4gbD8oLWgrTWF0aC5zcXJ0KGgqaC0yKmwqKGYqZi8oLTIqcyktYytzLzIraS1vLzIpKSkvbCtyOihyK2EpLzJ9ZnVuY3Rpb24gTXModCxuKXt2YXIgZT10Lk47aWYoZSlyZXR1cm4gd3MoZSxuKTt2YXIgcj10LnNpdGU7cmV0dXJuIHJbMV09PT1uP3JbMF06MS8wfWZ1bmN0aW9uIFRzKHQsbixlKXtyZXR1cm4odFswXS1lWzBdKSooblsxXS10WzFdKS0odFswXS1uWzBdKSooZVsxXS10WzFdKX1mdW5jdGlvbiBrcyh0LG4pe3JldHVybiBuWzFdLXRbMV18fG5bMF0tdFswXX1mdW5jdGlvbiBTcyh0LG4pe3ZhciBlLHIsaSxvPXQuc29ydChrcykucG9wKCk7Zm9yKFd3PVtdLFh3PW5ldyBBcnJheSh0Lmxlbmd0aCksSHc9bmV3IEpjLFZ3PW5ldyBKYzs7KWlmKGk9ancsbyYmKCFpfHxvWzFdPGkueXx8b1sxXT09PWkueSYmb1swXTxpLngpKW9bMF09PT1lJiZvWzFdPT09cnx8KGJzKG8pLGU9b1swXSxyPW9bMV0pLG89dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO3hzKGkuYXJjKX1pZihocygpLG4pe3ZhciB1PStuWzBdWzBdLGE9K25bMF1bMV0sYz0rblsxXVswXSxzPStuWzFdWzFdO2FzKHUsYSxjLHMpLHBzKHUsYSxjLHMpfXRoaXMuZWRnZXM9V3csdGhpcy5jZWxscz1YdyxIdz1Wdz1Xdz1Ydz1udWxsfWZ1bmN0aW9uIE5zKHQsbixlKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1uLHRoaXMudHJhbnNmb3JtPWV9ZnVuY3Rpb24gRXModCxuLGUpe3RoaXMuaz10LHRoaXMueD1uLHRoaXMueT1lfWZ1bmN0aW9uIEFzKHQpe3JldHVybiB0Ll9fem9vbXx8dE19ZnVuY3Rpb24gQ3MoKXt0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHpzKCl7cmV0dXJuIXQuZXZlbnQuYnV0dG9ufWZ1bmN0aW9uIFBzKCl7dmFyIHQsbixlPXRoaXM7cmV0dXJuIGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhlPWUub3duZXJTVkdFbGVtZW50fHxlLHQ9ZS53aWR0aC5iYXNlVmFsLnZhbHVlLG49ZS5oZWlnaHQuYmFzZVZhbC52YWx1ZSk6KHQ9ZS5jbGllbnRXaWR0aCxuPWUuY2xpZW50SGVpZ2h0KSxbWzAsMF0sW3Qsbl1dfWZ1bmN0aW9uIFJzKCl7cmV0dXJuIHRoaXMuX196b29tfHx0TX12YXIgTHM9IjQuNy4wIixxcz1mdW5jdGlvbih0LG4pe3JldHVybiB0PG4/LTE6dD5uPzE6dD49bj8wOk5hTn0sVXM9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aCYmKHQ9bih0KSkse2xlZnQ6ZnVuY3Rpb24obixlLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPW4ubGVuZ3RoKTtyPGk7KXt2YXIgbz1yK2k+Pj4xO3QobltvXSxlKTwwP3I9bysxOmk9b31yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24obixlLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPW4ubGVuZ3RoKTtyPGk7KXt2YXIgbz1yK2k+Pj4xO3QobltvXSxlKT4wP2k9bzpyPW8rMX1yZXR1cm4gcn19fSxEcz1VcyhxcyksT3M9RHMucmlnaHQsRnM9RHMubGVmdCxJcz1mdW5jdGlvbih0LG4pe251bGw9PW4mJihuPWUpO2Zvcih2YXIgcj0wLGk9dC5sZW5ndGgtMSxvPXRbMF0sdT1uZXcgQXJyYXkoaTwwPzA6aSk7cjxpOyl1W3JdPW4obyxvPXRbKytyXSk7cmV0dXJuIHV9LFlzPWZ1bmN0aW9uKHQsbixyKXt2YXIgaSxvLHUsYSxjPXQubGVuZ3RoLHM9bi5sZW5ndGgsZj1uZXcgQXJyYXkoYypzKTtmb3IobnVsbD09ciYmKHI9ZSksaT11PTA7aTxjOysraSlmb3IoYT10W2ldLG89MDtvPHM7KytvLCsrdSlmW3VdPXIoYSxuW29dKTtyZXR1cm4gZn0sQnM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59LGpzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9LEhzPWZ1bmN0aW9uKHQsbil7dmFyIGUscixpPXQubGVuZ3RoLG89MCx1PTAsYT0tMSxjPTA7aWYobnVsbD09bilmb3IoOysrYTxpOylpc05hTihlPWpzKHRbYV0pKXx8KHI9ZS1vLG8rPXIvKytjLHUrPXIqKGUtbykpO2Vsc2UgZm9yKDsrK2E8aTspaXNOYU4oZT1qcyhuKHRbYV0sYSx0KSkpfHwocj1lLW8sbys9ci8rK2MsdSs9ciooZS1vKSk7aWYoYz4xKXJldHVybiB1LyhjLTEpfSxYcz1mdW5jdGlvbih0LG4pe3ZhciBlPUhzKHQsbik7cmV0dXJuIGU/TWF0aC5zcXJ0KGUpOmV9LFZzPWZ1bmN0aW9uKHQsbil7dmFyIGUscixpLG89LTEsdT10Lmxlbmd0aDtpZihudWxsPT1uKXtmb3IoOysrbzx1OylpZihudWxsIT0ocj10W29dKSYmcj49cil7ZT1pPXI7YnJlYWt9Zm9yKDsrK288dTspbnVsbCE9KHI9dFtvXSkmJihlPnImJihlPXIpLGk8ciYmKGk9cikpfWVsc2V7Zm9yKDsrK288dTspaWYobnVsbCE9KHI9bih0W29dLG8sdCkpJiZyPj1yKXtlPWk9cjticmVha31mb3IoOysrbzx1OyludWxsIT0ocj1uKHRbb10sbyx0KSkmJihlPnImJihlPXIpLGk8ciYmKGk9cikpfXJldHVybltlLGldfSxXcz1BcnJheS5wcm90b3R5cGUsJHM9V3Muc2xpY2UsWnM9V3MubWFwLEdzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sSnM9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LFFzPWZ1bmN0aW9uKHQsbixlKXt0PSt0LG49K24sZT0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhuPXQsdD0wLDEpOmk8Mz8xOitlO2Zvcih2YXIgcj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKG4tdCkvZSkpLG89bmV3IEFycmF5KGkpOysrcjxpOylvW3JdPXQrciplO3JldHVybiBvfSxLcz1NYXRoLnNxcnQoNTApLHRmPU1hdGguc3FydCgxMCksbmY9TWF0aC5zcXJ0KDIpLGVmPWZ1bmN0aW9uKHQsbixlKXt2YXIgaT1yKHQsbixlKTtyZXR1cm4gUXMoTWF0aC5jZWlsKHQvaSkqaSxNYXRoLmZsb29yKG4vaSkqaStpLzIsaSl9LHJmPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKSsxfSxvZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGksbyx1PXQubGVuZ3RoLGE9bmV3IEFycmF5KHUpO2ZvcihpPTA7aTx1OysraSlhW2ldPW4odFtpXSxpLHQpO3ZhciBjPWUoYSkscz1jWzBdLGY9Y1sxXSxsPXIoYSxzLGYpO0FycmF5LmlzQXJyYXkobCl8fChsPWVmKHMsZixsKSk7Zm9yKHZhciBoPWwubGVuZ3RoO2xbMF08PXM7KWwuc2hpZnQoKSwtLWg7Zm9yKDtsW2gtMV0+PWY7KWwucG9wKCksLS1oO3ZhciBwLGQ9bmV3IEFycmF5KGgrMSk7Zm9yKGk9MDtpPD1oOysraSlwPWRbaV09W10scC54MD1pPjA/bFtpLTFdOnMscC54MT1pPGg/bFtpXTpmO2ZvcihpPTA7aTx1OysraSlvPWFbaV0sczw9byYmbzw9ZiYmZFtPcyhsLG8sMCxoKV0ucHVzaCh0W2ldKTtyZXR1cm4gZH12YXIgbj1KcyxlPVZzLHI9cmY7cmV0dXJuIHQudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpHcyhlKSx0KTpufSx0LmRvbWFpbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkdzKFtuWzBdLG5bMV1dKSx0KTplfSx0LnRocmVzaG9sZHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpHcyhBcnJheS5pc0FycmF5KG4pPyRzLmNhbGwobik6biksdCk6cn0sdH0sdWY9ZnVuY3Rpb24odCxuLGUpe2lmKG51bGw9PWUmJihlPWpzKSxyPXQubGVuZ3RoKXtpZigobj0rbik8PTB8fHI8MilyZXR1cm4rZSh0WzBdLDAsdCk7aWYobj49MSlyZXR1cm4rZSh0W3ItMV0sci0xLHQpO3ZhciByLGk9KHItMSkqbixvPU1hdGguZmxvb3IoaSksdT0rZSh0W29dLG8sdCk7cmV0dXJuIHUrKCtlKHRbbysxXSxvKzEsdCktdSkqKGktbyl9fSxhZj1mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHQ9WnMuY2FsbCh0LGpzKS5zb3J0KHFzKSxNYXRoLmNlaWwoKGUtbikvKDIqKHVmKHQsLjc1KS11Zih0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LGNmPWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gTWF0aC5jZWlsKChlLW4pLygzLjUqWHModCkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX0sc2Y9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1uKXtmb3IoOysraTxvOylpZihudWxsIT0ocj10W2ldKSYmcj49cil7ZT1yO2JyZWFrfWZvcig7KytpPG87KW51bGwhPShyPXRbaV0pJiZyPmUmJihlPXIpfWVsc2V7Zm9yKDsrK2k8bzspaWYobnVsbCE9KHI9bih0W2ldLGksdCkpJiZyPj1yKXtlPXI7YnJlYWt9Zm9yKDsrK2k8bzspbnVsbCE9KHI9bih0W2ldLGksdCkpJiZyPmUmJihlPXIpfXJldHVybiBlfSxmZj1mdW5jdGlvbih0LG4pe3ZhciBlLHI9MCxpPXQubGVuZ3RoLG89LTEsdT1pO2lmKG51bGw9PW4pZm9yKDsrK288aTspaXNOYU4oZT1qcyh0W29dKSk/LS11OnIrPWU7ZWxzZSBmb3IoOysrbzxpOylpc05hTihlPWpzKG4odFtvXSxvLHQpKSk/LS11OnIrPWU7aWYodSlyZXR1cm4gci91fSxsZj1mdW5jdGlvbih0LG4pe3ZhciBlLHI9W10saT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PW4pZm9yKDsrK288aTspaXNOYU4oZT1qcyh0W29dKSl8fHIucHVzaChlKTtlbHNlIGZvcig7KytvPGk7KWlzTmFOKGU9anMobih0W29dLG8sdCkpKXx8ci5wdXNoKGUpO3JldHVybiB1ZihyLnNvcnQocXMpLC41KX0saGY9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGUscixpPXQubGVuZ3RoLG89LTEsdT0wOysrbzxpOyl1Kz10W29dLmxlbmd0aDtmb3IoZT1uZXcgQXJyYXkodSk7LS1pPj0wOylmb3Iocj10W2ldLG49ci5sZW5ndGg7LS1uPj0wOyllWy0tdV09cltuXTtyZXR1cm4gZX0scGY9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk9LTEsbz10Lmxlbmd0aDtpZihudWxsPT1uKXtmb3IoOysraTxvOylpZihudWxsIT0ocj10W2ldKSYmcj49cil7ZT1yO2JyZWFrfWZvcig7KytpPG87KW51bGwhPShyPXRbaV0pJiZlPnImJihlPXIpfWVsc2V7Zm9yKDsrK2k8bzspaWYobnVsbCE9KHI9bih0W2ldLGksdCkpJiZyPj1yKXtlPXI7YnJlYWt9Zm9yKDsrK2k8bzspbnVsbCE9KHI9bih0W2ldLGksdCkpJiZlPnImJihlPXIpfXJldHVybiBlfSxkZj1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZT1uLmxlbmd0aCxyPW5ldyBBcnJheShlKTtlLS07KXJbZV09dFtuW2VdXTtyZXR1cm4gcn0sdmY9ZnVuY3Rpb24odCxuKXtpZihlPXQubGVuZ3RoKXt2YXIgZSxyLGk9MCxvPTAsdT10W29dO2ZvcihufHwobj1xcyk7KytpPGU7KShuKHI9dFtpXSx1KTwwfHwwIT09bih1LHUpKSYmKHU9cixvPWkpO3JldHVybiAwPT09bih1LHUpP286dm9pZCAwfX0sX2Y9ZnVuY3Rpb24odCxuLGUpe2Zvcih2YXIgcixpLG89KG51bGw9PWU/dC5sZW5ndGg6ZSktKG49bnVsbD09bj8wOituKTtvOylpPU1hdGgucmFuZG9tKCkqby0tfDAscj10W28rbl0sdFtvK25dPXRbaStuXSx0W2krbl09cjtyZXR1cm4gdH0sZ2Y9ZnVuY3Rpb24odCxuKXt2YXIgZSxyPTAsaT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PW4pZm9yKDsrK288aTspKGU9K3Rbb10pJiYocis9ZSk7ZWxzZSBmb3IoOysrbzxpOykoZT0rbih0W29dLG8sdCkpJiYocis9ZSk7cmV0dXJuIHJ9LHlmPWZ1bmN0aW9uKHQpe2lmKCEobz10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBuPS0xLGU9cGYodCxpKSxyPW5ldyBBcnJheShlKTsrK248ZTspZm9yKHZhciBvLHU9LTEsYT1yW25dPW5ldyBBcnJheShvKTsrK3U8bzspYVt1XT10W3VdW25dO3JldHVybiByfSxtZj1mdW5jdGlvbigpe3JldHVybiB5Zihhcmd1bWVudHMpfSx4Zj1BcnJheS5wcm90b3R5cGUuc2xpY2UsYmY9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHdmPTEsTWY9MixUZj0zLGtmPTQsU2Y9MWUtNixOZj17dmFsdWU6ZnVuY3Rpb24oKXt9fTt2LnByb3RvdHlwZT1kLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dixvbjpmdW5jdGlvbih0LG4pe3ZhciBlLHI9dGhpcy5fLGk9Xyh0KyIiLHIpLG89LTEsdT1pLmxlbmd0aDt7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1uJiYiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrbik7Zm9yKDsrK288dTspaWYoZT0odD1pW29dKS50eXBlKXJbZV09eShyW2VdLHQubmFtZSxuKTtlbHNlIGlmKG51bGw9PW4pZm9yKGUgaW4gcilyW2VdPXkocltlXSx0Lm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK288dTspaWYoKGU9KHQ9aVtvXSkudHlwZSkmJihlPWcocltlXSx0Lm5hbWUpKSlyZXR1cm4gZX19LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxuPXRoaXMuXztmb3IodmFyIGUgaW4gbil0W2VdPW5bZV0uc2xpY2UoKTtyZXR1cm4gbmV3IHYodCl9LGNhbGw6ZnVuY3Rpb24odCxuKXtpZigoZT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBlLHIsaT1uZXcgQXJyYXkoZSksbz0wO288ZTsrK28paVtvXT1hcmd1bWVudHNbbysyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihyPXRoaXMuX1t0XSxvPTAsZT1yLmxlbmd0aDtvPGU7KytvKXJbb10udmFsdWUuYXBwbHkobixpKX0sYXBwbHk6ZnVuY3Rpb24odCxuLGUpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsbz1yLmxlbmd0aDtpPG87KytpKXJbaV0udmFsdWUuYXBwbHkobixlKX19O3ZhciBFZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsQWY9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOkVmLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn0sQ2Y9ZnVuY3Rpb24odCl7dmFyIG49dCs9IiIsZT1uLmluZGV4T2YoIjoiKTtyZXR1cm4gZT49MCYmInhtbG5zIiE9PShuPXQuc2xpY2UoMCxlKSkmJih0PXQuc2xpY2UoZSsxKSksQWYuaGFzT3duUHJvcGVydHkobik/e3NwYWNlOkFmW25dLGxvY2FsOnR9OnR9LHpmPWZ1bmN0aW9uKHQpe3ZhciBuPUNmKHQpO3JldHVybihuLmxvY2FsP3g6bSkobil9LFBmPTA7dy5wcm90b3R5cGU9Yi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOncsZ2V0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLl87IShuIGluIHQpOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHRbbl19LHNldDpmdW5jdGlvbih0LG4pe3JldHVybiB0W3RoaXMuX109bn0scmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl8gaW4gdCYmZGVsZXRlIHRbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIFJmPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXModCl9fTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KXt2YXIgTGY9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2lmKCFMZi5tYXRjaGVzKXt2YXIgcWY9TGYud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxMZi5tc01hdGNoZXNTZWxlY3Rvcnx8TGYubW96TWF0Y2hlc1NlbGVjdG9yfHxMZi5vTWF0Y2hlc1NlbGVjdG9yO1JmPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBxZi5jYWxsKHRoaXMsdCl9fX19dmFyIFVmPVJmLERmPXt9O2lmKHQuZXZlbnQ9bnVsbCwidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KXsib25tb3VzZWVudGVyImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8KERmPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pfXZhciBPZj1mdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvPWsodCsiIiksdT1vLmxlbmd0aDt7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoYT1uP046UyxudWxsPT1lJiYoZT0hMSkscj0wO3I8dTsrK3IpdGhpcy5lYWNoKGEob1tyXSxuLGUpKTtyZXR1cm4gdGhpc312YXIgYT10aGlzLm5vZGUoKS5fX29uO2lmKGEpZm9yKHZhciBjLHM9MCxmPWEubGVuZ3RoO3M8ZjsrK3MpZm9yKHI9MCxjPWFbc107cjx1OysrcilpZigoaT1vW3JdKS50eXBlPT09Yy50eXBlJiZpLm5hbWU9PT1jLm5hbWUpcmV0dXJuIGMudmFsdWV9fSxGZj1mdW5jdGlvbigpe2Zvcih2YXIgbixlPXQuZXZlbnQ7bj1lLnNvdXJjZUV2ZW50OyllPW47cmV0dXJuIGV9LElmPWZ1bmN0aW9uKHQsbil7dmFyIGU9dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYoZS5jcmVhdGVTVkdQb2ludCl7dmFyIHI9ZS5jcmVhdGVTVkdQb2ludCgpO3JldHVybiByLng9bi5jbGllbnRYLHIueT1uLmNsaWVudFkscj1yLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW3IueCxyLnldfXZhciBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW24uY2xpZW50WC1pLmxlZnQtdC5jbGllbnRMZWZ0LG4uY2xpZW50WS1pLnRvcC10LmNsaWVudFRvcF19LFlmPWZ1bmN0aW9uKHQpe3ZhciBuPUZmKCk7cmV0dXJuIG4uY2hhbmdlZFRvdWNoZXMmJihuPW4uY2hhbmdlZFRvdWNoZXNbMF0pLElmKHQsbil9LEJmPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P0E6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX0samY9ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUJmKHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9bi5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpZm9yKHZhciBvLHUsYT1uW2ldLGM9YS5sZW5ndGgscz1yW2ldPW5ldyBBcnJheShjKSxmPTA7ZjxjOysrZikobz1hW2ZdKSYmKHU9dC5jYWxsKG8sby5fX2RhdGFfXyxmLGEpKSYmKCJfX2RhdGFfXyJpbiBvJiYodS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxzW2ZdPXUpO3JldHVybiBuZXcgZHQocix0aGlzLl9wYXJlbnRzKX0sSGY9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/QzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxYZj1mdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9SGYodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT1uLmxlbmd0aCxyPVtdLGk9W10sbz0wO288ZTsrK28pZm9yKHZhciB1LGE9bltvXSxjPWEubGVuZ3RoLHM9MDtzPGM7KytzKSh1PWFbc10pJiYoci5wdXNoKHQuY2FsbCh1LHUuX19kYXRhX18scyxhKSksaS5wdXNoKHUpKTtyZXR1cm4gbmV3IGR0KHIsaSl9LFZmPWZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1VZih0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyx1PW5baV0sYT11Lmxlbmd0aCxjPXJbaV09W10scz0wO3M8YTsrK3MpKG89dVtzXSkmJnQuY2FsbChvLG8uX19kYXRhX18scyx1KSYmYy5wdXNoKG8pO3JldHVybiBuZXcgZHQocix0aGlzLl9wYXJlbnRzKX0sV2Y9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9LCRmPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChXZiksdGhpcy5fcGFyZW50cyl9O3oucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp6LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsbil9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O3ZhciBaZj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LEdmPSIkIixKZj1mdW5jdGlvbih0LG4pe2lmKCF0KXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSkscz0tMSx0aGlzLmVhY2goZnVuY3Rpb24odCl7cFsrK3NdPXR9KSxwO3ZhciBlPW4/UjpQLHI9dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9WmYodCkpO2Zvcih2YXIgbz1pLmxlbmd0aCx1PW5ldyBBcnJheShvKSxhPW5ldyBBcnJheShvKSxjPW5ldyBBcnJheShvKSxzPTA7czxvOysrcyl7dmFyIGY9cltzXSxsPWlbc10saD1sLmxlbmd0aCxwPXQuY2FsbChmLGYmJmYuX19kYXRhX18scyxyKSxkPXAubGVuZ3RoLHY9YVtzXT1uZXcgQXJyYXkoZCksXz11W3NdPW5ldyBBcnJheShkKTtlKGYsbCx2LF8sY1tzXT1uZXcgQXJyYXkoaCkscCxuKTtmb3IodmFyIGcseSxtPTAseD0wO208ZDsrK20paWYoZz12W21dKXtmb3IobT49eCYmKHg9bSsxKTshKHk9X1t4XSkmJisreDxkOyk7Zy5fbmV4dD15fHxudWxsfX1yZXR1cm4gdT1uZXcgZHQodSxyKSx1Ll9lbnRlcj1hLHUuX2V4aXQ9Yyx1fSxRZj1mdW5jdGlvbigpe3JldHVybiBuZXcgZHQodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChXZiksdGhpcy5fcGFyZW50cyl9LEtmPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT10Ll9ncm91cHMscj1uLmxlbmd0aCxpPWUubGVuZ3RoLG89TWF0aC5taW4ocixpKSx1PW5ldyBBcnJheShyKSxhPTA7YTxvOysrYSlmb3IodmFyIGMscz1uW2FdLGY9ZVthXSxsPXMubGVuZ3RoLGg9dVthXT1uZXcgQXJyYXkobCkscD0wO3A8bDsrK3ApKGM9c1twXXx8ZltwXSkmJihoW3BdPWMpO2Zvcig7YTxyOysrYSl1W2FdPW5bYV07cmV0dXJuIG5ldyBkdCh1LHRoaXMuX3BhcmVudHMpfSx0bD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsbj0tMSxlPXQubGVuZ3RoOysrbjxlOylmb3IodmFyIHIsaT10W25dLG89aS5sZW5ndGgtMSx1PWlbb107LS1vPj0wOykocj1pW29dKSYmKHUmJnUhPT1yLm5leHRTaWJsaW5nJiZ1LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsdSksdT1yKTtyZXR1cm4gdGhpc30sbmw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihuLGUpe3JldHVybiBuJiZlP3Qobi5fX2RhdGFfXyxlLl9fZGF0YV9fKTohbi0hZX10fHwodD1MKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjsrK28pe2Zvcih2YXIgdSxhPWVbb10sYz1hLmxlbmd0aCxzPWlbb109bmV3IEFycmF5KGMpLGY9MDtmPGM7KytmKSh1PWFbZl0pJiYoc1tmXT11KTtzLnNvcnQobil9cmV0dXJuIG5ldyBkdChpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGVsPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxybD1mdW5jdGlvbigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksbj0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dFsrK25dPXRoaXN9KSx0fSxpbD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsbj0wLGU9dC5sZW5ndGg7bjxlOysrbilmb3IodmFyIHI9dFtuXSxpPTAsbz1yLmxlbmd0aDtpPG87KytpKXt2YXIgdT1yW2ldO2lmKHUpcmV0dXJuIHV9cmV0dXJuIG51bGx9LG9sPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Kyt0fSksdH0sdWw9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGFsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT0wLHI9bi5sZW5ndGg7ZTxyOysrZSlmb3IodmFyIGksbz1uW2VdLHU9MCxhPW8ubGVuZ3RoO3U8YTsrK3UpKGk9b1t1XSkmJnQuY2FsbChpLGkuX19kYXRhX18sdSxvKTtyZXR1cm4gdGhpc30sY2w9ZnVuY3Rpb24odCxuKXt2YXIgZT1DZih0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBlLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShlKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1uP2UubG9jYWw/VTpxOiJmdW5jdGlvbiI9PXR5cGVvZiBuP2UubG9jYWw/STpGOmUubG9jYWw/TzpEKShlLG4pKX0sc2w9ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fSxmbD1mdW5jdGlvbih0LG4sZSl7dmFyIHI7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PW4/WToiZnVuY3Rpb24iPT10eXBlb2Ygbj9qOkIpKHQsbixudWxsPT1lPyIiOmUpKTpzbChyPXRoaXMubm9kZSgpKS5nZXRDb21wdXRlZFN0eWxlKHIsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX0sbGw9ZnVuY3Rpb24odCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bj9IOiJmdW5jdGlvbiI9PXR5cGVvZiBuP1Y6WCkodCxuKSk6dGhpcy5ub2RlKClbdF19O1oucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtuPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKG4sMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgaGw9ZnVuY3Rpb24odCxuKXt2YXIgZT1XKHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByPSQodGhpcy5ub2RlKCkpLGk9LTEsbz1lLmxlbmd0aDsrK2k8bzspaWYoIXIuY29udGFpbnMoZVtpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/dHQ6bj9ROkspKGUsbikpfSxwbD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9udDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/cnQ6ZXQpKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0sZGw9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/aXQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3V0Om90KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSx2bD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goYXQpfSxfbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goY3QpfSxnbD1mdW5jdGlvbih0KXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnpmKHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSx5bD1mdW5jdGlvbih0LG4pe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6emYodCkscj1udWxsPT1uP3N0OiJmdW5jdGlvbiI9PXR5cGVvZiBuP246QmYobik7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxtbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnQpfSx4bD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LGJsPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/cHQ6aHQpKHQsbikpfSx3bD1bbnVsbF07ZHQucHJvdG90eXBlPXZ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZHQsc2VsZWN0OmpmLHNlbGVjdEFsbDpYZixmaWx0ZXI6VmYsZGF0YTpKZixlbnRlcjokZixleGl0OlFmLG1lcmdlOktmLG9yZGVyOnRsLHNvcnQ6bmwsY2FsbDplbCxub2RlczpybCxub2RlOmlsLHNpemU6b2wsZW1wdHk6dWwsZWFjaDphbCxhdHRyOmNsLHN0eWxlOmZsLHByb3BlcnR5OmxsLGNsYXNzZWQ6aGwsdGV4dDpwbCxodG1sOmRsLHJhaXNlOnZsLGxvd2VyOl9sLGFwcGVuZDpnbCxpbnNlcnQ6eWwscmVtb3ZlOm1sLGRhdHVtOnhsLG9uOk9mLGRpc3BhdGNoOmJsfTt2YXIgTWw9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBkdChbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGR0KFtbdF1dLHdsKX0sVGw9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBkdChbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBkdChbbnVsbD09dD9bXTp0XSx3bCl9LGtsPWZ1bmN0aW9uKHQsbixlKXthcmd1bWVudHMubGVuZ3RoPDMmJihlPW4sbj1GZigpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIHIsaT0wLG89bj9uLmxlbmd0aDowO2k8bzsrK2kpaWYoKHI9bltpXSkuaWRlbnRpZmllcj09PWUpcmV0dXJuIElmKHQscik7cmV0dXJuIG51bGx9LFNsPWZ1bmN0aW9uKHQsbil7bnVsbD09biYmKG49RmYoKS50b3VjaGVzKTtmb3IodmFyIGU9MCxyPW4/bi5sZW5ndGg6MCxpPW5ldyBBcnJheShyKTtlPHI7KytlKWlbZV09SWYodCxuW2VdKTtyZXR1cm4gaX0sTmw9ZnVuY3Rpb24oKXt0LmV2ZW50LnByZXZlbnREZWZhdWx0KCksdC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0sRWw9ZnVuY3Rpb24odCl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT1NbCh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLE5sLCEwKTsib25zZWxlY3RzdGFydCJpbiBuP2Uub24oInNlbGVjdHN0YXJ0LmRyYWciLE5sLCEwKToobi5fX25vc2VsZWN0PW4uc3R5bGUuTW96VXNlclNlbGVjdCxuLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX0sQWw9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTt5dC5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT10aGlzLl8/dGhpczp0fTt2YXIgQ2w9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQpe3Qub24oIm1vdXNlZG93bi5kcmFnIixlKS5vbigidG91Y2hzdGFydC5kcmFnIixvKS5vbigidG91Y2htb3ZlLmRyYWciLHUpLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLGEpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gZSgpe2lmKCFmJiZsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG49YygibW91c2UiLGguYXBwbHkodGhpcyxhcmd1bWVudHMpLFlmLHRoaXMsYXJndW1lbnRzKTtuJiYoTWwodC5ldmVudC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLHIsITApLm9uKCJtb3VzZXVwLmRyYWciLGksITApLEVsKHQuZXZlbnQudmlldyksX3QoKSxzPSExLG4oInN0YXJ0IikpfX1mdW5jdGlvbiByKCl7TmwoKSxzPSEwLHYubW91c2UoImRyYWciKX1mdW5jdGlvbiBpKCl7TWwodC5ldmVudC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSxndCh0LmV2ZW50LnZpZXcscyksTmwoKSx2Lm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBvKCl7aWYobC5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGk9aC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbz1yLmxlbmd0aDtmb3Iobj0wO248bzsrK24pKGU9YyhyW25dLmlkZW50aWZpZXIsaSxrbCx0aGlzLGFyZ3VtZW50cykpJiYoX3QoKSxlKCJzdGFydCIpKX19ZnVuY3Rpb24gdSgpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGk9ci5sZW5ndGg7Zm9yKG49MDtuPGk7KytuKShlPXZbcltuXS5pZGVudGlmaWVyXSkmJihObCgpLGUoImRyYWciKSl9ZnVuY3Rpb24gYSgpe3ZhciBuLGUscj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGk9ci5sZW5ndGg7Zm9yKGYmJmNsZWFyVGltZW91dChmKSxmPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtmPW51bGx9LDUwMCksCm49MDtuPGk7KytuKShlPXZbcltuXS5pZGVudGlmaWVyXSkmJihfdCgpLGUoImVuZCIpKX1mdW5jdGlvbiBjKGUscixpLG8sdSl7dmFyIGEsYyxzLGY9aShyLGUpLGw9Xy5jb3B5KCk7aWYoRShuZXcgeXQobiwiYmVmb3Jlc3RhcnQiLGEsZSxnLGZbMF0sZlsxXSwwLDAsbCksZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9KHQuZXZlbnQuc3ViamVjdD1hPXAuYXBwbHkobyx1KSkmJihjPWEueC1mWzBdfHwwLHM9YS55LWZbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIHQoaCl7dmFyIHAsZD1mO3N3aXRjaChoKXtjYXNlInN0YXJ0Ijp2W2VdPXQscD1nKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSB2W2VdLC0tZztjYXNlImRyYWciOmY9aShyLGUpLHA9Z31FKG5ldyB5dChuLGgsYSxlLHAsZlswXStjLGZbMV0rcyxmWzBdLWRbMF0sZlsxXS1kWzFdLGwpLGwuYXBwbHksbCxbaCxvLHVdKX19dmFyIHMsZixsPW10LGg9eHQscD1idCx2PXt9LF89ZCgic3RhcnQiLCJkcmFnIiwiZW5kIiksZz0wO3JldHVybiBuLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFsKCEhdCksbik6bH0sbi5jb250YWluZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBbCh0KSxuKTpofSxuLnN1YmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBbCh0KSxuKTpwfSxuLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9Xy5vbi5hcHBseShfLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1fP246dH0sbn0semw9ZnVuY3Rpb24odCxuLGUpe3QucHJvdG90eXBlPW4ucHJvdG90eXBlPWUsZS5jb25zdHJ1Y3Rvcj10fSxQbD0uNyxSbD0xL1BsLExsPSJcXHMqKFsrLV0/XFxkKylcXHMqIixxbD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixVbD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsRGw9L14jKFswLTlhLWZdezN9KSQvLE9sPS9eIyhbMC05YS1mXXs2fSkkLyxGbD1uZXcgUmVnRXhwKCJecmdiXFwoIitbTGwsTGwsTGxdKyJcXCkkIiksSWw9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW1VsLFVsLFVsXSsiXFwpJCIpLFlsPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbTGwsTGwsTGwscWxdKyJcXCkkIiksQmw9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tVbCxVbCxVbCxxbF0rIlxcKSQiKSxqbD1uZXcgUmVnRXhwKCJeaHNsXFwoIitbcWwsVWwsVWxdKyJcXCkkIiksSGw9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1txbCxVbCxVbCxxbF0rIlxcKSQiKSxYbD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTt6bChNdCxUdCx7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pLHpsKEF0LEV0LHd0KE10LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P1JsOk1hdGgucG93KFJsLHQpLG5ldyBBdCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD9QbDpNYXRoLnBvdyhQbCx0KSxuZXcgQXQodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4gdD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksKDE9PT10PyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSksemwoUnQsUHQsd3QoTXQse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Umw6TWF0aC5wb3coUmwsdCksbmV3IFJ0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/UGw6TWF0aC5wb3coUGwsdCksbmV3IFJ0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxuPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGU9dGhpcy5sLHI9ZSsoZTwuNT9lOjEtZSkqbixpPTIqZS1yO3JldHVybiBuZXcgQXQoTHQodD49MjQwP3QtMjQwOnQrMTIwLGksciksTHQodCxpLHIpLEx0KHQ8MTIwP3QrMjQwOnQtMTIwLGksciksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpO3ZhciBWbD1NYXRoLlBJLzE4MCxXbD0xODAvTWF0aC5QSSwkbD0xOCxabD0uOTUwNDcsR2w9MSxKbD0xLjA4ODgzLFFsPTQvMjksS2w9Ni8yOSx0aD0zKktsKktsLG5oPUtsKktsKktsO3psKER0LFV0LHd0KE10LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IER0KHRoaXMubCskbCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRHQodGhpcy5sLSRsKihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsbj1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLGU9aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gdD1HbCpGdCh0KSxuPVpsKkZ0KG4pLGU9SmwqRnQoZSksbmV3IEF0KEl0KDMuMjQwNDU0MipuLTEuNTM3MTM4NSp0LS40OTg1MzE0KmUpLEl0KC0uOTY5MjY2Km4rMS44NzYwMTA4KnQrLjA0MTU1NiplKSxJdCguMDU1NjQzNCpuLS4yMDQwMjU5KnQrMS4wNTcyMjUyKmUpLHRoaXMub3BhY2l0eSl9fSkpLHpsKEh0LGp0LHd0KE10LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEh0KHRoaXMuaCx0aGlzLmMsdGhpcy5sKyRsKihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSHQodGhpcy5oLHRoaXMuYyx0aGlzLmwtJGwqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gcXQodGhpcykucmdiKCl9fSkpO3ZhciBlaD0tLjE0ODYxLHJoPTEuNzgyNzcsaWg9LS4yOTIyNyxvaD0tLjkwNjQ5LHVoPTEuOTcyOTQsYWg9dWgqb2gsY2g9dWgqcmgsc2g9cmgqaWgtb2gqZWg7emwoV3QsVnQsd3QoTXQse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Umw6TWF0aC5wb3coUmwsdCksbmV3IFd0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/UGw6TWF0aC5wb3coUGwsdCksbmV3IFd0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpWbCxuPSt0aGlzLmwsZT1pc05hTih0aGlzLnMpPzA6dGhpcy5zKm4qKDEtbikscj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiBuZXcgQXQoMjU1KihuK2UqKGVoKnIrcmgqaSkpLDI1NSoobitlKihpaCpyK29oKmkpKSwyNTUqKG4rZSoodWgqcikpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciBmaCxsaCxoaCxwaCxkaCx2aCxfaD1mdW5jdGlvbih0KXt2YXIgbj10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1lPD0wP2U9MDplPj0xPyhlPTEsbi0xKTpNYXRoLmZsb29yKGUqbiksaT10W3JdLG89dFtyKzFdO3JldHVybiAkdCgoZS1yL24pKm4scj4wP3Rbci0xXToyKmktbyxpLG8scjxuLTE/dFtyKzJdOjIqby1pKX19LGdoPWZ1bmN0aW9uKHQpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1NYXRoLmZsb29yKCgoZSU9MSk8MD8rK2U6ZSkqbik7cmV0dXJuICR0KChlLXIvbikqbix0WyhyK24tMSklbl0sdFtyJW5dLHRbKHIrMSklbl0sdFsocisyKSVuXSl9fSx5aD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LG1oPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0LG4pe3ZhciBlPXIoKHQ9RXQodCkpLnIsKG49RXQobikpLnIpLGk9cih0Lmcsbi5nKSxvPXIodC5iLG4uYiksdT1LdCh0Lm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQucj1lKG4pLHQuZz1pKG4pLHQuYj1vKG4pLHQub3BhY2l0eT11KG4pLHQrIiJ9fXZhciByPVF0KG4pO3JldHVybiBlLmdhbW1hPXQsZX0oMSkseGg9dG4oX2gpLGJoPXRuKGdoKSx3aD1mdW5jdGlvbih0LG4pe3ZhciBlLHI9bj9uLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KHIpLHU9bmV3IEFycmF5KHIpO2ZvcihlPTA7ZTxpOysrZSlvW2VdPUFoKHRbZV0sbltlXSk7Zm9yKDtlPHI7KytlKXVbZV09bltlXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKGU9MDtlPGk7KytlKXVbZV09b1tlXSh0KTtyZXR1cm4gdX19LE1oPWZ1bmN0aW9uKHQsbil7dmFyIGU9bmV3IERhdGU7cmV0dXJuIHQ9K3Qsbi09dCxmdW5jdGlvbihyKXtyZXR1cm4gZS5zZXRUaW1lKHQrbipyKSxlfX0sVGg9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD0rdCxuLT10LGZ1bmN0aW9uKGUpe3JldHVybiB0K24qZX19LGtoPWZ1bmN0aW9uKHQsbil7dmFyIGUscj17fSxpPXt9O251bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBufHwobj17fSk7Zm9yKGUgaW4gbillIGluIHQ/cltlXT1BaCh0W2VdLG5bZV0pOmlbZV09bltlXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKGUgaW4gcilpW2VdPXJbZV0odCk7cmV0dXJuIGl9fSxTaD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csTmg9bmV3IFJlZ0V4cChTaC5zb3VyY2UsImciKSxFaD1mdW5jdGlvbih0LG4pe3ZhciBlLHIsaSxvPVNoLmxhc3RJbmRleD1OaC5sYXN0SW5kZXg9MCx1PS0xLGE9W10sYz1bXTtmb3IodCs9IiIsbis9IiI7KGU9U2guZXhlYyh0KSkmJihyPU5oLmV4ZWMobikpOykoaT1yLmluZGV4KT5vJiYoaT1uLnNsaWNlKG8saSksYVt1XT9hW3VdKz1pOmFbKyt1XT1pKSwoZT1lWzBdKT09PShyPXJbMF0pP2FbdV0/YVt1XSs9cjphWysrdV09cjooYVsrK3VdPW51bGwsYy5wdXNoKHtpOnUseDpUaChlLHIpfSkpLG89TmgubGFzdEluZGV4O3JldHVybiBvPG4ubGVuZ3RoJiYoaT1uLnNsaWNlKG8pLGFbdV0/YVt1XSs9aTphWysrdV09aSksYS5sZW5ndGg8Mj9jWzBdP2VuKGNbMF0ueCk6bm4obik6KG49Yy5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9MDtyPG47KytyKWFbKGU9Y1tyXSkuaV09ZS54KHQpO3JldHVybiBhLmpvaW4oIiIpfSl9LEFoPWZ1bmN0aW9uKHQsbil7dmFyIGUscj10eXBlb2YgbjtyZXR1cm4gbnVsbD09bnx8ImJvb2xlYW4iPT09cj95aChuKTooIm51bWJlciI9PT1yP1RoOiJzdHJpbmciPT09cj8oZT1UdChuKSk/KG49ZSxtaCk6RWg6biBpbnN0YW5jZW9mIFR0P21oOm4gaW5zdGFuY2VvZiBEYXRlP01oOkFycmF5LmlzQXJyYXkobik/d2g6aXNOYU4obik/a2g6VGgpKHQsbil9LENoPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9K3Qsbi09dCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZCh0K24qZSl9fSx6aD0xODAvTWF0aC5QSSxQaD17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfSxSaD1mdW5jdGlvbih0LG4sZSxyLGksbyl7dmFyIHUsYSxjO3JldHVybih1PU1hdGguc3FydCh0KnQrbipuKSkmJih0Lz11LG4vPXUpLChjPXQqZStuKnIpJiYoZS09dCpjLHItPW4qYyksKGE9TWF0aC5zcXJ0KGUqZStyKnIpKSYmKGUvPWEsci89YSxjLz1hKSx0KnI8biplJiYodD0tdCxuPS1uLGM9LWMsdT0tdSkse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIobix0KSp6aCxza2V3WDpNYXRoLmF0YW4oYykqemgsc2NhbGVYOnUsc2NhbGVZOmF9fSxMaD11bihybiwicHgsICIsInB4KSIsImRlZykiKSxxaD11bihvbiwiLCAiLCIpIiwiKSIpLFVoPU1hdGguU1FSVDIsRGg9MixPaD00LEZoPTFlLTEyLEloPWZ1bmN0aW9uKHQsbil7dmFyIGUscixpPXRbMF0sbz10WzFdLHU9dFsyXSxhPW5bMF0sYz1uWzFdLHM9blsyXSxmPWEtaSxsPWMtbyxoPWYqZitsKmw7aWYoaDxGaClyPU1hdGgubG9nKHMvdSkvVWgsZT1mdW5jdGlvbih0KXtyZXR1cm5baSt0KmYsbyt0KmwsdSpNYXRoLmV4cChVaCp0KnIpXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoaCksZD0ocypzLXUqdStPaCpoKS8oMip1KkRoKnApLHY9KHMqcy11KnUtT2gqaCkvKDIqcypEaCpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCk7cj0oTWF0aC5sb2coTWF0aC5zcXJ0KHYqdisxKS12KS1fKS9VaCxlPWZ1bmN0aW9uKHQpe3ZhciBuPXQqcixlPWFuKF8pLGE9dS8oRGgqcCkqKGUqc24oVWgqbitfKS1jbihfKSk7cmV0dXJuW2krYSpmLG8rYSpsLHUqZS9hbihVaCpuK18pXX19cmV0dXJuIGUuZHVyYXRpb249MWUzKnIsZX0sWWg9Zm4oSnQpLEJoPWZuKEt0KSxqaD1obihKdCksSGg9aG4oS3QpLFhoPXBuKEp0KSxWaD1wbihLdCksV2g9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9bmV3IEFycmF5KG4pLHI9MDtyPG47KytyKWVbcl09dChyLyhuLTEpKTtyZXR1cm4gZX0sJGg9MCxaaD0wLEdoPTAsSmg9MWUzLFFoPTAsS2g9MCx0cD0wLG5wPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLGVwPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/cmVxdWVzdEFuaW1hdGlvbkZyYW1lOmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O19uLnByb3RvdHlwZT1nbi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9uLHJlc3RhcnQ6ZnVuY3Rpb24odCxuLGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7ZT0obnVsbD09ZT9kbigpOitlKSsobnVsbD09bj8wOituKSx0aGlzLl9uZXh0fHx2aD09PXRoaXN8fCh2aD92aC5fbmV4dD10aGlzOmRoPXRoaXMsdmg9dGhpcyksdGhpcy5fY2FsbD10LHRoaXMuX3RpbWU9ZSx3bigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCx3bigpKX19O3ZhciBycD1mdW5jdGlvbih0LG4sZSl7dmFyIHI9bmV3IF9uO3JldHVybiBuPW51bGw9PW4/MDorbixyLnJlc3RhcnQoZnVuY3Rpb24oZSl7ci5zdG9wKCksdChlK24pfSxuLGUpLHJ9LGlwPWZ1bmN0aW9uKHQsbixlKXt2YXIgcj1uZXcgX24saT1uO3JldHVybiBudWxsPT1uPyhyLnJlc3RhcnQodCxuLGUpLHIpOihuPStuLGU9bnVsbD09ZT9kbigpOitlLHIucmVzdGFydChmdW5jdGlvbiBvKHUpe3UrPWksci5yZXN0YXJ0KG8saSs9bixlKSx0KHUpfSxuLGUpLHIpfSxvcD1kKCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLHVwPVtdLGFwPTAsY3A9MSxzcD0yLGZwPTMsbHA9NCxocD01LHBwPTYsZHA9ZnVuY3Rpb24odCxuLGUscixpLG8pe3ZhciB1PXQuX190cmFuc2l0aW9uO2lmKHUpe2lmKGUgaW4gdSlyZXR1cm59ZWxzZSB0Ll9fdHJhbnNpdGlvbj17fTtTbih0LGUse25hbWU6bixpbmRleDpyLGdyb3VwOmksb246b3AsdHdlZW46dXAsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6YXB9KX0sdnA9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGksbz10Ll9fdHJhbnNpdGlvbix1PSEwO2lmKG8pe249bnVsbD09bj9udWxsOm4rIiI7Zm9yKGkgaW4gbykoZT1vW2ldKS5uYW1lPT09bj8ocj1lLnN0YXRlPnNwJiZlLnN0YXRlPGhwLGUuc3RhdGU9cHAsZS50aW1lci5zdG9wKCksciYmZS5vbi5jYWxsKCJpbnRlcnJ1cHQiLHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGRlbGV0ZSBvW2ldKTp1PSExO3UmJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19LF9wPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2cCh0aGlzLHQpfSl9LGdwPWZ1bmN0aW9uKHQsbil7dmFyIGU9dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHIsaT1rbih0aGlzLm5vZGUoKSxlKS50d2VlbixvPTAsdT1pLmxlbmd0aDtvPHU7KytvKWlmKChyPWlbb10pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PW4/Tm46RW4pKGUsdCxuKSl9LHlwPWZ1bmN0aW9uKHQsbil7dmFyIGU7cmV0dXJuKCJudW1iZXIiPT10eXBlb2Ygbj9UaDpuIGluc3RhbmNlb2YgVHQ/bWg6KGU9VHQobikpPyhuPWUsbWgpOkVoKSh0LG4pfSxtcD1mdW5jdGlvbih0LG4pe3ZhciBlPUNmKHQpLHI9InRyYW5zZm9ybSI9PT1lP3FoOnlwO3JldHVybiB0aGlzLmF0dHJUd2Vlbih0LCJmdW5jdGlvbiI9PXR5cGVvZiBuPyhlLmxvY2FsP3FuOkxuKShlLHIsQW4odGhpcywiYXR0ci4iK3QsbikpOm51bGw9PW4/KGUubG9jYWw/em46Q24pKGUpOihlLmxvY2FsP1JuOlBuKShlLHIsbikpfSx4cD1mdW5jdGlvbih0LG4pe3ZhciBlPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGU9dGhpcy50d2VlbihlKSkmJmUuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4oZSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7dmFyIHI9Q2YodCk7cmV0dXJuIHRoaXMudHdlZW4oZSwoci5sb2NhbD9VbjpEbikocixuKSl9LGJwPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/T246Rm4pKG4sdCkpOmtuKHRoaXMubm9kZSgpLG4pLmRlbGF5fSx3cD1mdW5jdGlvbih0KXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P0luOlluKShuLHQpKTprbih0aGlzLm5vZGUoKSxuKS5kdXJhdGlvbn0sTXA9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKEJuKG4sdCkpOmtuKHRoaXMubm9kZSgpLG4pLmVhc2V9LFRwPWZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1VZih0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyx1PW5baV0sYT11Lmxlbmd0aCxjPXJbaV09W10scz0wO3M8YTsrK3MpKG89dVtzXSkmJnQuY2FsbChvLG8uX19kYXRhX18scyx1KSYmYy5wdXNoKG8pO3JldHVybiBuZXcgS24ocix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxrcD1mdW5jdGlvbih0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9dC5fZ3JvdXBzLHI9bi5sZW5ndGgsaT1lLmxlbmd0aCxvPU1hdGgubWluKHIsaSksdT1uZXcgQXJyYXkociksYT0wO2E8bzsrK2EpZm9yKHZhciBjLHM9blthXSxmPWVbYV0sbD1zLmxlbmd0aCxoPXVbYV09bmV3IEFycmF5KGwpLHA9MDtwPGw7KytwKShjPXNbcF18fGZbcF0pJiYoaFtwXT1jKTtmb3IoO2E8cjsrK2EpdVthXT1uW2FdO3JldHVybiBuZXcgS24odSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxTcD1mdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/a24odGhpcy5ub2RlKCksZSkub24ub24odCk6dGhpcy5lYWNoKEhuKGUsdCxuKSl9LE5wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLFhuKHRoaXMuX2lkKSl9LEVwPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX25hbWUsZT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9QmYodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPW5ldyBBcnJheShpKSx1PTA7dTxpOysrdSlmb3IodmFyIGEsYyxzPXJbdV0sZj1zLmxlbmd0aCxsPW9bdV09bmV3IEFycmF5KGYpLGg9MDtoPGY7KytoKShhPXNbaF0pJiYoYz10LmNhbGwoYSxhLl9fZGF0YV9fLGgscykpJiYoIl9fZGF0YV9fImluIGEmJihjLl9fZGF0YV9fPWEuX19kYXRhX18pLGxbaF09YyxkcChsW2hdLG4sZSxoLGwsa24oYSxlKSkpO3JldHVybiBuZXcgS24obyx0aGlzLl9wYXJlbnRzLG4sZSl9LEFwPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX25hbWUsZT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9SGYodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPVtdLHU9W10sYT0wO2E8aTsrK2EpZm9yKHZhciBjLHM9clthXSxmPXMubGVuZ3RoLGw9MDtsPGY7KytsKWlmKGM9c1tsXSl7Zm9yKHZhciBoLHA9dC5jYWxsKGMsYy5fX2RhdGFfXyxsLHMpLGQ9a24oYyxlKSx2PTAsXz1wLmxlbmd0aDt2PF87Kyt2KShoPXBbdl0pJiZkcChoLG4sZSx2LHAsZCk7by5wdXNoKHApLHUucHVzaChjKX1yZXR1cm4gbmV3IEtuKG8sdSxuLGUpfSxDcD12dC5wcm90b3R5cGUuY29uc3RydWN0b3IsenA9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IENwKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sUHA9ZnVuY3Rpb24odCxuLGUpe3ZhciByPSJ0cmFuc2Zvcm0iPT0odCs9IiIpP0xoOnlwO3JldHVybiBudWxsPT1uP3RoaXMuc3R5bGVUd2Vlbih0LFZuKHQscikpLm9uKCJlbmQuc3R5bGUuIit0LFduKHQpKTp0aGlzLnN0eWxlVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2Ygbj9abih0LHIsQW4odGhpcywic3R5bGUuIit0LG4pKTokbih0LHIsbiksZSl9LFJwPWZ1bmN0aW9uKHQsbixlKXt2YXIgcj0ic3R5bGUuIisodCs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYobnVsbD09bilyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihyLEduKHQsbixudWxsPT1lPyIiOmUpKX0sTHA9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiB0P1FuKEFuKHRoaXMsInRleHQiLHQpKTpKbihudWxsPT10PyIiOnQrIiIpKX0scXA9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fbmFtZSxuPXRoaXMuX2lkLGU9bmUoKSxyPXRoaXMuX2dyb3VwcyxpPXIubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgdSxhPXJbb10sYz1hLmxlbmd0aCxzPTA7czxjOysrcylpZih1PWFbc10pe3ZhciBmPWtuKHUsbik7ZHAodSx0LGUscyxhLHt0aW1lOmYudGltZStmLmRlbGF5K2YuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpmLmR1cmF0aW9uLGVhc2U6Zi5lYXNlfSl9cmV0dXJuIG5ldyBLbihyLHRoaXMuX3BhcmVudHMsdCxlKX0sVXA9MCxEcD12dC5wcm90b3R5cGU7S24ucHJvdG90eXBlPXRlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6S24sc2VsZWN0OkVwLHNlbGVjdEFsbDpBcCxmaWx0ZXI6VHAsbWVyZ2U6a3Asc2VsZWN0aW9uOnpwLHRyYW5zaXRpb246cXAsY2FsbDpEcC5jYWxsLG5vZGVzOkRwLm5vZGVzLG5vZGU6RHAubm9kZSxzaXplOkRwLnNpemUsZW1wdHk6RHAuZW1wdHksZWFjaDpEcC5lYWNoLG9uOlNwLGF0dHI6bXAsYXR0clR3ZWVuOnhwLHN0eWxlOlBwLHN0eWxlVHdlZW46UnAsdGV4dDpMcCxyZW1vdmU6TnAsdHdlZW46Z3AsZGVsYXk6YnAsZHVyYXRpb246d3AsZWFzZTpNcH07dmFyIE9wPTMsRnA9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBNYXRoLnBvdyh0LG4pfXJldHVybiBuPStuLGUuZXhwb25lbnQ9dCxlfShPcCksSXA9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiAxLU1hdGgucG93KDEtdCxuKX1yZXR1cm4gbj0rbixlLmV4cG9uZW50PXQsZX0oT3ApLFlwPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4oKHQqPTIpPD0xP01hdGgucG93KHQsbik6Mi1NYXRoLnBvdygyLXQsbikpLzJ9cmV0dXJuIG49K24sZS5leHBvbmVudD10LGV9KE9wKSxCcD1NYXRoLlBJLGpwPUJwLzIsSHA9NC8xMSxYcD02LzExLFZwPTgvMTEsV3A9Ljc1LCRwPTkvMTEsWnA9MTAvMTEsR3A9LjkzNzUsSnA9MjEvMjIsUXA9NjMvNjQsS3A9MS9IcC9IcCx0ZD0xLjcwMTU4LG5kPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCp0KigobisxKSp0LW4pfXJldHVybiBuPStuLGUub3ZlcnNob290PXQsZX0odGQpLGVkPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4tLXQqdCooKG4rMSkqdCtuKSsxfXJldHVybiBuPStuLGUub3ZlcnNob290PXQsZX0odGQpLHJkPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4oKHQqPTIpPDE/dCp0KigobisxKSp0LW4pOih0LT0yKSp0KigobisxKSp0K24pKzIpLzJ9cmV0dXJuIG49K24sZS5vdmVyc2hvb3Q9dCxlfSh0ZCksaWQ9MipNYXRoLlBJLG9kPTEsdWQ9LjMsYWQ9ZnVuY3Rpb24gdChuLGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG4qTWF0aC5wb3coMiwxMCotLXQpKk1hdGguc2luKChpLXQpL2UpfXZhciBpPU1hdGguYXNpbigxLyhuPU1hdGgubWF4KDEsbikpKSooZS89aWQpO3JldHVybiByLmFtcGxpdHVkZT1mdW5jdGlvbihuKXtyZXR1cm4gdChuLGUqaWQpfSxyLnBlcmlvZD1mdW5jdGlvbihlKXtyZXR1cm4gdChuLGUpfSxyfShvZCx1ZCksY2Q9ZnVuY3Rpb24gdChuLGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIDEtbipNYXRoLnBvdygyLC0xMCoodD0rdCkpKk1hdGguc2luKCh0K2kpL2UpfXZhciBpPU1hdGguYXNpbigxLyhuPU1hdGgubWF4KDEsbikpKSooZS89aWQpO3JldHVybiByLmFtcGxpdHVkZT1mdW5jdGlvbihuKXtyZXR1cm4gdChuLGUqaWQpfSxyLnBlcmlvZD1mdW5jdGlvbihlKXtyZXR1cm4gdChuLGUpfSxyfShvZCx1ZCksc2Q9ZnVuY3Rpb24gdChuLGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuKCh0PTIqdC0xKTwwP24qTWF0aC5wb3coMiwxMCp0KSpNYXRoLnNpbigoaS10KS9lKToyLW4qTWF0aC5wb3coMiwtMTAqdCkqTWF0aC5zaW4oKGkrdCkvZSkpLzJ9dmFyIGk9TWF0aC5hc2luKDEvKG49TWF0aC5tYXgoMSxuKSkpKihlLz1pZCk7cmV0dXJuIHIuYW1wbGl0dWRlPWZ1bmN0aW9uKG4pe3JldHVybiB0KG4sZSppZCl9LHIucGVyaW9kPWZ1bmN0aW9uKGUpe3JldHVybiB0KG4sZSl9LHJ9KG9kLHVkKSxmZD17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6Y2V9LGxkPWZ1bmN0aW9uKHQpe3ZhciBuLGU7dCBpbnN0YW5jZW9mIEtuPyhuPXQuX2lkLHQ9dC5fbmFtZSk6KG49bmUoKSwoZT1mZCkudGltZT1kbigpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIHUsYT1yW29dLGM9YS5sZW5ndGgscz0wO3M8YzsrK3MpKHU9YVtzXSkmJmRwKHUsdCxuLHMsYSxlfHxiZSh1LG4pKTtyZXR1cm4gbmV3IEtuKHIsdGhpcy5fcGFyZW50cyx0LG4pfTt2dC5wcm90b3R5cGUuaW50ZXJydXB0PV9wLHZ0LnByb3RvdHlwZS50cmFuc2l0aW9uPWxkO3ZhciBoZD1bbnVsbF0scGQ9ZnVuY3Rpb24odCxuKXt2YXIgZSxyLGk9dC5fX3RyYW5zaXRpb247aWYoaSl7bj1udWxsPT1uP251bGw6bisiIjtmb3IociBpbiBpKWlmKChlPWlbcl0pLnN0YXRlPmNwJiZlLm5hbWU9PT1uKXJldHVybiBuZXcgS24oW1t0XV0saGQsbiwrcil9cmV0dXJuIG51bGx9LGRkPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sdmQ9ZnVuY3Rpb24odCxuLGUpe3RoaXMudGFyZ2V0PXQsdGhpcy50eXBlPW4sdGhpcy5zZWxlY3Rpb249ZX0sX2Q9ZnVuY3Rpb24oKXt0LmV2ZW50LnByZXZlbnREZWZhdWx0KCksdC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0sZ2Q9e25hbWU6ImRyYWcifSx5ZD17bmFtZToic3BhY2UifSxtZD17bmFtZToiaGFuZGxlIn0seGQ9e25hbWU6ImNlbnRlciJ9LGJkPXtuYW1lOiJ4IixoYW5kbGVzOlsiZSIsInciXS5tYXAoTWUpLGlucHV0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQmJltbdFswXSxuWzBdWzFdXSxbdFsxXSxuWzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmW3RbMF1bMF0sdFsxXVswXV19fSx3ZD17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKE1lKSxpbnB1dDpmdW5jdGlvbih0LG4pe3JldHVybiB0JiZbW25bMF1bMF0sdFswXV0sW25bMV1bMF0sdFsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzFdLHRbMV1bMV1dfX0sTWQ9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0ubWFwKE1lKSxpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdH0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sVGQ9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LGtkPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxTZD17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sTmQ9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sRWQ9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX0sQWQ9ZnVuY3Rpb24oKXtyZXR1cm4gemUoTWQpfSxDZD1NYXRoLmNvcyx6ZD1NYXRoLnNpbixQZD1NYXRoLlBJLFJkPVBkLzIsTGQ9MipQZCxxZD1NYXRoLm1heCxVZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIG8sdSxhLGMscyxmLGw9dC5sZW5ndGgsaD1bXSxwPVFzKGwpLGQ9W10sdj1bXSxfPXYuZ3JvdXBzPW5ldyBBcnJheShsKSxnPW5ldyBBcnJheShsKmwpO2ZvcihvPTAscz0tMTsrK3M8bDspe2Zvcih1PTAsZj0tMTsrK2Y8bDspdSs9dFtzXVtmXTtoLnB1c2godSksZC5wdXNoKFFzKGwpKSxvKz11fWZvcihlJiZwLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShoW3RdLGhbbl0pfSksciYmZC5mb3JFYWNoKGZ1bmN0aW9uKG4sZSl7bi5zb3J0KGZ1bmN0aW9uKG4saSl7cmV0dXJuIHIodFtlXVtuXSx0W2VdW2ldKX0pfSksbz1xZCgwLExkLW4qbCkvbyxjPW8/bjpMZC9sLHU9MCxzPS0xOysrczxsOyl7Zm9yKGE9dSxmPS0xOysrZjxsOyl7dmFyIHk9cFtzXSxtPWRbeV1bZl0seD10W3ldW21dLGI9dSx3PXUrPXgqbztnW20qbCt5XT17aW5kZXg6eSxzdWJpbmRleDptLHN0YXJ0QW5nbGU6YixlbmRBbmdsZTp3LHZhbHVlOnh9fV9beV09e2luZGV4Onksc3RhcnRBbmdsZTphLGVuZEFuZ2xlOnUsdmFsdWU6aFt5XX0sdSs9Y31mb3Iocz0tMTsrK3M8bDspZm9yKGY9cy0xOysrZjxsOyl7dmFyIE09Z1tmKmwrc10sVD1nW3MqbCtmXTsoTS52YWx1ZXx8VC52YWx1ZSkmJnYucHVzaChNLnZhbHVlPFQudmFsdWU/e3NvdXJjZTpULHRhcmdldDpNfTp7c291cmNlOk0sdGFyZ2V0OlR9KX1yZXR1cm4gaT92LnNvcnQoaSk6dn12YXIgbj0wLGU9bnVsbCxyPW51bGwsaT1udWxsO3JldHVybiB0LnBhZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXFkKDAsZSksdCk6bn0sdC5zb3J0R3JvdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdCk6cn0sdC5zb3J0Q2hvcmRzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP2k9bnVsbDooaT1QZShuKSkuXz1uLHQpOmkmJmkuX30sdH0sRGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLE9kPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sRmQ9TWF0aC5QSSxJZD0yKkZkLFlkPTFlLTYsQmQ9SWQtWWQ7UmUucHJvdG90eXBlPUxlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UmUsbW92ZVRvOmZ1bmN0aW9uKHQsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStuKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxuKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K24pfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsbixlLHIpe3RoaXMuXys9IlEiKyArdCsiLCIrICtuKyIsIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3IpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsbixlLHIsaSxvKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArbisiLCIrICtlKyIsIisgK3IrIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKHQsbixlLHIsaSl7dD0rdCxuPStuLGU9K2Uscj0rcixpPStpO3ZhciBvPXRoaXMuX3gxLHU9dGhpcy5feTEsYT1lLXQsYz1yLW4scz1vLXQsZj11LW4sbD1zKnMrZipmO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9bik7ZWxzZSBpZihsPllkKWlmKE1hdGguYWJzKGYqYS1jKnMpPllkJiZpKXt2YXIgaD1lLW8scD1yLXUsZD1hKmErYypjLHY9aCpoK3AqcCxfPU1hdGguc3FydChkKSxnPU1hdGguc3FydChsKSx5PWkqTWF0aC50YW4oKEZkLU1hdGguYWNvcygoZCtsLXYpLygyKl8qZykpKS8yKSxtPXkvZyx4PXkvXztNYXRoLmFicyhtLTEpPllkJiYodGhpcy5fKz0iTCIrKHQrbSpzKSsiLCIrKG4rbSpmKSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKGYqaD5zKnApKyIsIisodGhpcy5feDE9dCt4KmEpKyIsIisodGhpcy5feTE9bit4KmMpfWVsc2UgdGhpcy5fKz0iTCIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9bik7ZWxzZTt9LGFyYzpmdW5jdGlvbih0LG4sZSxyLGksbyl7dD0rdCxuPStuLGU9K2U7dmFyIHU9ZSpNYXRoLmNvcyhyKSxhPWUqTWF0aC5zaW4ociksYz10K3Uscz1uK2EsZj0xXm8sbD1vP3ItaTppLXI7aWYoZTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2UpO251bGw9PT10aGlzLl94MT90aGlzLl8rPSJNIitjKyIsIitzOihNYXRoLmFicyh0aGlzLl94MS1jKT5ZZHx8TWF0aC5hYnModGhpcy5feTEtcyk+WWQpJiYodGhpcy5fKz0iTCIrYysiLCIrcyksZSYmKGw+QmQ/dGhpcy5fKz0iQSIrZSsiLCIrZSsiLDAsMSwiK2YrIiwiKyh0LXUpKyIsIisobi1hKSsiQSIrZSsiLCIrZSsiLDAsMSwiK2YrIiwiKyh0aGlzLl94MT1jKSsiLCIrKHRoaXMuX3kxPXMpOihsPDAmJihsPWwlSWQrSWQpLHRoaXMuXys9IkEiK2UrIiwiK2UrIiwwLCIrICsobD49RmQpKyIsIitmKyIsIisodGhpcy5feDE9dCtlKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPW4rZSpNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbih0LG4sZSxyKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K24pKyJoIisgK2UrInYiKyArcisiaCIrLWUrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgamQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHQsYT1EZC5jYWxsKGFyZ3VtZW50cyksYz1uLmFwcGx5KHRoaXMsYSkscz1lLmFwcGx5KHRoaXMsYSksZj0rci5hcHBseSh0aGlzLChhWzBdPWMsYSkpLGw9aS5hcHBseSh0aGlzLGEpLVJkLGg9by5hcHBseSh0aGlzLGEpLVJkLHA9ZipDZChsKSxkPWYqemQobCksdj0rci5hcHBseSh0aGlzLChhWzBdPXMsYSkpLF89aS5hcHBseSh0aGlzLGEpLVJkLGc9by5hcHBseSh0aGlzLGEpLVJkO2lmKHV8fCh1PXQ9TGUoKSksdS5tb3ZlVG8ocCxkKSx1LmFyYygwLDAsZixsLGgpLGw9PT1fJiZoPT09Z3x8KHUucXVhZHJhdGljQ3VydmVUbygwLDAsdipDZChfKSx2KnpkKF8pKSx1LmFyYygwLDAsdixfLGcpKSx1LnF1YWRyYXRpY0N1cnZlVG8oMCwwLHAsZCksdS5jbG9zZVBhdGgoKSx0KXJldHVybiB1PW51bGwsdCsiInx8bnVsbH12YXIgbj1xZSxlPVVlLHI9RGUsaT1PZSxvPUZlLHU9bnVsbDtyZXR1cm4gdC5yYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpPZCgrbiksdCk6cn0sdC5zdGFydEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246T2QoK24pLHQpOml9LHQuZW5kQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpPZCgrbiksdCk6b30sdC5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSx0KTpufSx0LnRhcmdldD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHQpOmV9LHQuY29udGV4dD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1udWxsPT1uP251bGw6bix0KTp1fSx0fSxIZD0iJCI7SWUucHJvdG90eXBlPVllLnByb3RvdHlwZT17Y29uc3RydWN0b3I6SWUsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiBIZCt0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1tIZCt0XX0sc2V0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXNbSGQrdF09bix0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIG49SGQrdDtyZXR1cm4gbiBpbiB0aGlzJiZkZWxldGUgdGhpc1tuXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09SGQmJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBuIGluIHRoaXMpblswXT09PUhkJiZ0LnB1c2gobi5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzKW5bMF09PT1IZCYmdC5wdXNoKHRoaXNbbl0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBuIGluIHRoaXMpblswXT09PUhkJiZ0LnB1c2goe2tleTpuLnNsaWNlKDEpLHZhbHVlOnRoaXNbbl19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBuIGluIHRoaXMpblswXT09PUhkJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYodFswXT09PUhkKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbiBpbiB0aGlzKW5bMF09PT1IZCYmdCh0aGlzW25dLG4uc2xpY2UoMSksdGhpcyl9fTt2YXIgWGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KG4saSx1LGEpe2lmKGk+PW8ubGVuZ3RoKXJldHVybiBudWxsIT1yP3Iobik6bnVsbCE9ZT9uLnNvcnQoZSk6bjtmb3IodmFyIGMscyxmLGw9LTEsaD1uLmxlbmd0aCxwPW9baSsrXSxkPVllKCksdj11KCk7KytsPGg7KShmPWQuZ2V0KGM9cChzPW5bbF0pKyIiKSk/Zi5wdXNoKHMpOmQuc2V0KGMsW3NdKTtyZXR1cm4gZC5lYWNoKGZ1bmN0aW9uKG4sZSl7YSh2LGUsdChuLGksdSxhKSl9KSx2fWZ1bmN0aW9uIG4odCxlKXtpZigrK2U+by5sZW5ndGgpcmV0dXJuIHQ7dmFyIGksYT11W2UtMV07cmV0dXJuIG51bGwhPXImJmU+PW8ubGVuZ3RoP2k9dC5lbnRyaWVzKCk6KGk9W10sdC5lYWNoKGZ1bmN0aW9uKHQscil7aS5wdXNoKHtrZXk6cix2YWx1ZXM6bih0LGUpfSl9KSksbnVsbCE9YT9pLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gYSh0LmtleSxuLmtleSl9KTppfXZhciBlLHIsaSxvPVtdLHU9W107cmV0dXJuIGk9e29iamVjdDpmdW5jdGlvbihuKXtyZXR1cm4gdChuLDAsQmUsamUpfSxtYXA6ZnVuY3Rpb24obil7cmV0dXJuIHQobiwwLEhlLFhlKX0sZW50cmllczpmdW5jdGlvbihlKXtyZXR1cm4gbih0KGUsMCxIZSxYZSksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gby5wdXNoKHQpLGl9LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiB1W28ubGVuZ3RoLTFdPXQsaX0sc29ydFZhbHVlczpmdW5jdGlvbih0KXtyZXR1cm4gZT10LGl9LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gcj10LGl9fX0sVmQ9WWUucHJvdG90eXBlO1ZlLnByb3RvdHlwZT1XZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlZlLGhhczpWZC5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0Kz0iIix0aGlzW0hkK3RdPXQsdGhpc30scmVtb3ZlOlZkLnJlbW92ZSxjbGVhcjpWZC5jbGVhcix2YWx1ZXM6VmQua2V5cyxzaXplOlZkLnNpemUsZW1wdHk6VmQuZW1wdHksZWFjaDpWZC5lYWNofTt2YXIgV2Q9ZnVuY3Rpb24odCl7dmFyIG49W107Zm9yKHZhciBlIGluIHQpbi5wdXNoKGUpO3JldHVybiBufSwkZD1mdW5jdGlvbih0KXt2YXIgbj1bXTtmb3IodmFyIGUgaW4gdCluLnB1c2godFtlXSk7cmV0dXJuIG59LFpkPWZ1bmN0aW9uKHQpe3ZhciBuPVtdO2Zvcih2YXIgZSBpbiB0KW4ucHVzaCh7a2V5OmUsdmFsdWU6dFtlXX0pO3JldHVybiBufSxHZD1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQsbil7dmFyIHIsaSxvPWUodCxmdW5jdGlvbih0LGUpe2lmKHIpcmV0dXJuIHIodCxlLTEpO2k9dCxyPW4/WmUodCxuKTokZSh0KX0pO3JldHVybiBvLmNvbHVtbnM9aSxvfWZ1bmN0aW9uIGUodCxuKXtmdW5jdGlvbiBlKCl7aWYoZj49cylyZXR1cm4gdTtpZihpKXJldHVybiBpPSExLG87dmFyIG4sZT1mO2lmKDM0PT09dC5jaGFyQ29kZUF0KGUpKXtmb3IodmFyIHI9ZTtyKys8czspaWYoMzQ9PT10LmNoYXJDb2RlQXQocikpe2lmKDM0IT09dC5jaGFyQ29kZUF0KHIrMSkpYnJlYWs7KytyfXJldHVybiBmPXIrMixuPXQuY2hhckNvZGVBdChyKzEpLDEzPT09bj8oaT0hMCwxMD09PXQuY2hhckNvZGVBdChyKzIpJiYrK2YpOjEwPT09biYmKGk9ITApLHQuc2xpY2UoZSsxLHIpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2Y8czspe3ZhciBhPTE7aWYobj10LmNoYXJDb2RlQXQoZisrKSwxMD09PW4paT0hMDtlbHNlIGlmKDEzPT09bilpPSEwLDEwPT09dC5jaGFyQ29kZUF0KGYpJiYoKytmLCsrYSk7ZWxzZSBpZihuIT09Yyljb250aW51ZTtyZXR1cm4gdC5zbGljZShlLGYtYSl9cmV0dXJuIHQuc2xpY2UoZSl9Zm9yKHZhciByLGksbz17fSx1PXt9LGE9W10scz10Lmxlbmd0aCxmPTAsbD0wOyhyPWUoKSkhPT11Oyl7Zm9yKHZhciBoPVtdO3IhPT1vJiZyIT09dTspaC5wdXNoKHIpLHI9ZSgpO24mJm51bGw9PShoPW4oaCxsKyspKXx8YS5wdXNoKGgpfXJldHVybiBhfWZ1bmN0aW9uIHIobixlKXtyZXR1cm4gbnVsbD09ZSYmKGU9R2UobikpLFtlLm1hcCh1KS5qb2luKHQpXS5jb25jYXQobi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB1KG5bdF0pfSkuam9pbih0KX0pKS5qb2luKCJcbiIpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQubWFwKG8pLmpvaW4oIlxuIil9ZnVuY3Rpb24gbyhuKXtyZXR1cm4gbi5tYXAodSkuam9pbih0KX1mdW5jdGlvbiB1KHQpe3JldHVybiBudWxsPT10PyIiOmEudGVzdCh0Kz0iIik/JyInK3QucmVwbGFjZSgvXCIvZywnIiInKSsnIic6dH12YXIgYT1uZXcgUmVnRXhwKCdbIicrdCsiXG5dIiksYz10LmNoYXJDb2RlQXQoMCk7cmV0dXJue3BhcnNlOm4scGFyc2VSb3dzOmUsZm9ybWF0OnIsZm9ybWF0Um93czppfX0sSmQ9R2QoIiwiKSxRZD1KZC5wYXJzZSxLZD1KZC5wYXJzZVJvd3MsdHY9SmQuZm9ybWF0LG52PUpkLmZvcm1hdFJvd3MsZXY9R2QoIlx0IikscnY9ZXYucGFyc2UsaXY9ZXYucGFyc2VSb3dzLG92PWV2LmZvcm1hdCx1dj1ldi5mb3JtYXRSb3dzLGF2PWZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZSgpe3ZhciBlLGksbz1yLmxlbmd0aCx1PTAsYT0wO2ZvcihlPTA7ZTxvOysrZSlpPXJbZV0sdSs9aS54LGErPWkueTtmb3IodT11L28tdCxhPWEvby1uLGU9MDtlPG87KytlKWk9cltlXSxpLngtPXUsaS55LT1hfXZhciByO3JldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1uJiYobj0wKSxlLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10fSxlLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K24sZSk6dH0sZS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LGUpOm59LGV9LGN2PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sc3Y9ZnVuY3Rpb24oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9LGZ2PWZ1bmN0aW9uKHQpe3ZhciBuPSt0aGlzLl94LmNhbGwobnVsbCx0KSxlPSt0aGlzLl95LmNhbGwobnVsbCx0KTtyZXR1cm4gSmUodGhpcy5jb3ZlcihuLGUpLG4sZSx0KX0sbHY9ZnVuY3Rpb24odCxuKXtpZihpc05hTih0PSt0KXx8aXNOYU4obj0rbikpcmV0dXJuIHRoaXM7dmFyIGU9dGhpcy5feDAscj10aGlzLl95MCxpPXRoaXMuX3gxLG89dGhpcy5feTE7aWYoaXNOYU4oZSkpaT0oZT1NYXRoLmZsb29yKHQpKSsxLG89KHI9TWF0aC5mbG9vcihuKSkrMTtlbHNle2lmKCEoZT50fHx0Pml8fHI+bnx8bj5vKSlyZXR1cm4gdGhpczt2YXIgdSxhLGM9aS1lLHM9dGhpcy5fcm9vdDtzd2l0Y2goYT0objwocitvKS8yKTw8MXx0PChlK2kpLzIpe2Nhc2UgMDpkbyB1PW5ldyBBcnJheSg0KSx1W2FdPXMscz11O3doaWxlKGMqPTIsaT1lK2Msbz1yK2MsdD5pfHxuPm8pO2JyZWFrO2Nhc2UgMTpkbyB1PW5ldyBBcnJheSg0KSx1W2FdPXMscz11O3doaWxlKGMqPTIsZT1pLWMsbz1yK2MsZT50fHxuPm8pO2JyZWFrO2Nhc2UgMjpkbyB1PW5ldyBBcnJheSg0KSx1W2FdPXMscz11O3doaWxlKGMqPTIsaT1lK2Mscj1vLWMsdD5pfHxyPm4pO2JyZWFrO2Nhc2UgMzpkbyB1PW5ldyBBcnJheSg0KSx1W2FdPXMscz11O3doaWxlKGMqPTIsZT1pLWMscj1vLWMsZT50fHxyPm4pfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1zKX1yZXR1cm4gdGhpcy5feDA9ZSx0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfSxodj1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKG4pe2lmKCFuLmxlbmd0aClkbyB0LnB1c2gobi5kYXRhKTt3aGlsZShuPW4ubmV4dCl9KSx0fSxwdj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0sZHY9ZnVuY3Rpb24odCxuLGUscixpKXt0aGlzLm5vZGU9dCx0aGlzLngwPW4sdGhpcy55MD1lLHRoaXMueDE9cix0aGlzLnkxPWl9LHZ2PWZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG8sdSxhLGMscyxmPXRoaXMuX3gwLGw9dGhpcy5feTAsaD10aGlzLl94MSxwPXRoaXMuX3kxLGQ9W10sdj10aGlzLl9yb290O2Zvcih2JiZkLnB1c2gobmV3IGR2KHYsZixsLGgscCkpLG51bGw9PWU/ZT0xLzA6KGY9dC1lLGw9bi1lLGg9dCtlLHA9bitlLGUqPWUpO2M9ZC5wb3AoKTspaWYoISghKHY9Yy5ub2RlKXx8KGk9Yy54MCk+aHx8KG89Yy55MCk+cHx8KHU9Yy54MSk8Znx8KGE9Yy55MSk8bCkpaWYodi5sZW5ndGgpe3ZhciBfPShpK3UpLzIsZz0obythKS8yO2QucHVzaChuZXcgZHYodlszXSxfLGcsdSxhKSxuZXcgZHYodlsyXSxpLGcsXyxhKSxuZXcgZHYodlsxXSxfLG8sdSxnKSxuZXcgZHYodlswXSxpLG8sXyxnKSksKHM9KG4+PWcpPDwxfHQ+PV8pJiYoYz1kW2QubGVuZ3RoLTFdLGRbZC5sZW5ndGgtMV09ZFtkLmxlbmd0aC0xLXNdLGRbZC5sZW5ndGgtMS1zXT1jKX1lbHNle3ZhciB5PXQtK3RoaXMuX3guY2FsbChudWxsLHYuZGF0YSksbT1uLSt0aGlzLl95LmNhbGwobnVsbCx2LmRhdGEpLHg9eSp5K20qbTtpZih4PGUpe3ZhciBiPU1hdGguc3FydChlPXgpO2Y9dC1iLGw9bi1iLGg9dCtiLHA9bitiLHI9di5kYXRhfX1yZXR1cm4gcn0sX3Y9ZnVuY3Rpb24odCl7aWYoaXNOYU4obz0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTih1PSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIG4sZSxyLGksbyx1LGEsYyxzLGYsbCxoLHA9dGhpcy5fcm9vdCxkPXRoaXMuX3gwLHY9dGhpcy5feTAsXz10aGlzLl94MSxnPXRoaXMuX3kxO2lmKCFwKXJldHVybiB0aGlzO2lmKHAubGVuZ3RoKWZvcig7Oyl7aWYoKHM9bz49KGE9KGQrXykvMikpP2Q9YTpfPWEsKGY9dT49KGM9KHYrZykvMikpP3Y9YzpnPWMsbj1wLCEocD1wW2w9Zjw8MXxzXSkpcmV0dXJuIHRoaXM7aWYoIXAubGVuZ3RoKWJyZWFrOyhuW2wrMSYzXXx8bltsKzImM118fG5bbCszJjNdKSYmKGU9bixoPWwpfWZvcig7cC5kYXRhIT09dDspaWYocj1wLCEocD1wLm5leHQpKXJldHVybiB0aGlzO3JldHVybihpPXAubmV4dCkmJmRlbGV0ZSBwLm5leHQscj8oaT9yLm5leHQ9aTpkZWxldGUgci5uZXh0LHRoaXMpOm4/KGk/bltsXT1pOmRlbGV0ZSBuW2xdLChwPW5bMF18fG5bMV18fG5bMl18fG5bM10pJiZwPT09KG5bM118fG5bMl18fG5bMV18fG5bMF0pJiYhcC5sZW5ndGgmJihlP2VbaF09cDp0aGlzLl9yb290PXApLHRoaXMpOih0aGlzLl9yb290PWksdGhpcyl9LGd2PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LHl2PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihuKXtpZighbi5sZW5ndGgpZG8rK3Q7d2hpbGUobj1uLm5leHQpfSksdH0sbXY9ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGksbyx1LGE9W10sYz10aGlzLl9yb290O2ZvcihjJiZhLnB1c2gobmV3IGR2KGMsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtuPWEucG9wKCk7KWlmKCF0KGM9bi5ub2RlLHI9bi54MCxpPW4ueTAsbz1uLngxLHU9bi55MSkmJmMubGVuZ3RoKXt2YXIgcz0ocitvKS8yLGY9KGkrdSkvMjsoZT1jWzNdKSYmYS5wdXNoKG5ldyBkdihlLHMsZixvLHUpKSwoZT1jWzJdKSYmYS5wdXNoKG5ldyBkdihlLHIsZixzLHUpKSwoZT1jWzFdKSYmYS5wdXNoKG5ldyBkdihlLHMsaSxvLGYpKSwoZT1jWzBdKSYmYS5wdXNoKG5ldyBkdihlLHIsaSxzLGYpKX1yZXR1cm4gdGhpc30seHY9ZnVuY3Rpb24odCl7dmFyIG4sZT1bXSxyPVtdO2Zvcih0aGlzLl9yb290JiZlLnB1c2gobmV3IGR2KHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtuPWUucG9wKCk7KXt2YXIgaT1uLm5vZGU7aWYoaS5sZW5ndGgpe3ZhciBvLHU9bi54MCxhPW4ueTAsYz1uLngxLHM9bi55MSxmPSh1K2MpLzIsbD0oYStzKS8yOyhvPWlbMF0pJiZlLnB1c2gobmV3IGR2KG8sdSxhLGYsbCkpLChvPWlbMV0pJiZlLnB1c2gobmV3IGR2KG8sZixhLGMsbCkpLChvPWlbMl0pJiZlLnB1c2gobmV3IGR2KG8sdSxsLGYscykpLChvPWlbM10pJiZlLnB1c2gobmV3IGR2KG8sZixsLGMscykpfXIucHVzaChuKX1mb3IoO249ci5wb3AoKTspdChuLm5vZGUsbi54MCxuLnkwLG4ueDEsbi55MSk7cmV0dXJuIHRoaXN9LGJ2PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sd3Y9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9dCx0aGlzKTp0aGlzLl95fSxNdj1lci5wcm90b3R5cGU9cnIucHJvdG90eXBlO012LmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxuLGU9bmV3IHJyKHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkscj10aGlzLl9yb290O2lmKCFyKXJldHVybiBlO2lmKCFyLmxlbmd0aClyZXR1cm4gZS5fcm9vdD1pcihyKSxlO2Zvcih0PVt7c291cmNlOnIsdGFyZ2V0OmUuX3Jvb3Q9bmV3IEFycmF5KDQpfV07cj10LnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShuPXIuc291cmNlW2ldKSYmKG4ubGVuZ3RoP3QucHVzaCh7c291cmNlOm4sdGFyZ2V0OnIudGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOnIudGFyZ2V0W2ldPWlyKG4pKTtyZXR1cm4gZX0sTXYuYWRkPWZ2LE12LmFkZEFsbD1RZSxNdi5jb3Zlcj1sdixNdi5kYXRhPWh2LE12LmV4dGVudD1wdixNdi5maW5kPXZ2LE12LnJlbW92ZT1fdixNdi5yZW1vdmVBbGw9S2UsTXYucm9vdD1ndixNdi5zaXplPXl2LE12LnZpc2l0PW12LE12LnZpc2l0QWZ0ZXI9eHYsTXYueD1idixNdi55PXd2O3ZhciBUdixrdj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7ZnVuY3Rpb24gdCh0LG4sZSxyLGkpe3ZhciBvPXQuZGF0YSxhPXQucixwPWwrYTt7aWYoIW8pcmV0dXJuIG4+cytwfHxyPHMtcHx8ZT5mK3B8fGk8Zi1wO2lmKG8uaW5kZXg+Yy5pbmRleCl7dmFyIGQ9cy1vLngtby52eCx2PWYtby55LW8udnksXz1kKmQrdip2O188cCpwJiYoMD09PWQmJihkPXN2KCksXys9ZCpkKSwwPT09diYmKHY9c3YoKSxfKz12KnYpLF89KHAtKF89TWF0aC5zcXJ0KF8pKSkvXyp1LGMudngrPShkKj1fKSoocD0oYSo9YSkvKGgrYSkpLGMudnkrPSh2Kj1fKSpwLG8udngtPWQqKHA9MS1wKSxvLnZ5LT12KnApfX19Zm9yKHZhciBuLHIsYyxzLGYsbCxoLHA9aS5sZW5ndGgsZD0wO2Q8YTsrK2QpZm9yKHI9ZXIoaSxvcix1cikudmlzaXRBZnRlcihlKSxuPTA7bjxwOysrbiljPWlbbl0sbD1vW2MuaW5kZXhdLGg9bCpsLHM9Yy54K2MudngsZj1jLnkrYy52eSxyLnZpc2l0KHQpfWZ1bmN0aW9uIGUodCl7aWYodC5kYXRhKXJldHVybiB0LnI9b1t0LmRhdGEuaW5kZXhdO2Zvcih2YXIgbj10LnI9MDtuPDQ7KytuKXRbbl0mJnRbbl0ucj50LnImJih0LnI9dFtuXS5yKX1mdW5jdGlvbiByKCl7aWYoaSl7dmFyIG4sZSxyPWkubGVuZ3RoO2ZvcihvPW5ldyBBcnJheShyKSxuPTA7bjxyOysrbillPWlbbl0sb1tlLmluZGV4XT0rdChlLG4saSl9fXZhciBpLG8sdT0xLGE9MTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Y3YobnVsbD09dD8xOit0KSksbi5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxyKCl9LG4uaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxuKTphfSxuLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LG4pOnV9LG4ucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6Y3YoK2UpLHIoKSxuKTp0fSxufSxTdj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe3JldHVybiAxL01hdGgubWluKHNbdC5zb3VyY2UuaW5kZXhdLHNbdC50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBlKG4pe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxkOysrZSlmb3IodmFyIGksbyxjLHMsbCxoLHAsdj0wO3Y8cjsrK3YpaT10W3ZdLG89aS5zb3VyY2UsYz1pLnRhcmdldCxzPWMueCtjLnZ4LW8ueC1vLnZ4fHxzdigpLGw9Yy55K2Mudnktby55LW8udnl8fHN2KCksaD1NYXRoLnNxcnQocypzK2wqbCksaD0oaC1hW3ZdKS9oKm4qdVt2XSxzKj1oLGwqPWgsYy52eC09cyoocD1mW3ZdKSxjLnZ5LT1sKnAsby52eCs9cyoocD0xLXApLG8udnkrPWwqcH1mdW5jdGlvbiByKCl7aWYoYyl7dmFyIG4sZSxyPWMubGVuZ3RoLGg9dC5sZW5ndGgscD1ZZShjLGwpO2ZvcihuPTAscz1uZXcgQXJyYXkocik7bjxoOysrbillPXRbbl0sZS5pbmRleD1uLCJvYmplY3QiIT10eXBlb2YgZS5zb3VyY2UmJihlLnNvdXJjZT1jcihwLGUuc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBlLnRhcmdldCYmKGUudGFyZ2V0PWNyKHAsZS50YXJnZXQpKSxzW2Uuc291cmNlLmluZGV4XT0oc1tlLnNvdXJjZS5pbmRleF18fDApKzEsc1tlLnRhcmdldC5pbmRleF09KHNbZS50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihuPTAsZj1uZXcgQXJyYXkoaCk7bjxoOysrbillPXRbbl0sZltuXT1zW2Uuc291cmNlLmluZGV4XS8oc1tlLnNvdXJjZS5pbmRleF0rc1tlLnRhcmdldC5pbmRleF0pO3U9bmV3IEFycmF5KGgpLGkoKSxhPW5ldyBBcnJheShoKSxvKCl9fWZ1bmN0aW9uIGkoKXtpZihjKWZvcih2YXIgbj0wLGU9dC5sZW5ndGg7bjxlOysrbil1W25dPStoKHRbbl0sbix0KX1mdW5jdGlvbiBvKCl7aWYoYylmb3IodmFyIG49MCxlPXQubGVuZ3RoO248ZTsrK24pYVtuXT0rcCh0W25dLG4sdCl9dmFyIHUsYSxjLHMsZixsPWFyLGg9bixwPWN2KDMwKSxkPTE7cmV0dXJuIG51bGw9PXQmJih0PVtdKSxlLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7Yz10LHIoKX0sZS5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLHIoKSxlKTp0fSxlLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsZSk6bH0sZS5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0LGUpOmR9LGUuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpjdigrdCksaSgpLGUpOmh9LGUuZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpjdigrdCksbygpLGUpOnB9LGV9LE52PTEwLEV2PU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKSxBdj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7ZSgpLHAuY2FsbCgidGljayIsbyksdTxhJiYoaC5zdG9wKCkscC5jYWxsKCJlbmQiLG8pKX1mdW5jdGlvbiBlKCl7dmFyIG4sZSxyPXQubGVuZ3RoO2Zvcih1Kz0ocy11KSpjLGwuZWFjaChmdW5jdGlvbih0KXt0KHUpfSksbj0wO248cjsrK24pZT10W25dLG51bGw9PWUuZng/ZS54Kz1lLnZ4Kj1mOihlLng9ZS5meCxlLnZ4PTApLApudWxsPT1lLmZ5P2UueSs9ZS52eSo9ZjooZS55PWUuZnksZS52eT0wKX1mdW5jdGlvbiByKCl7Zm9yKHZhciBuLGU9MCxyPXQubGVuZ3RoO2U8cjsrK2Upe2lmKG49dFtlXSxuLmluZGV4PWUsaXNOYU4obi54KXx8aXNOYU4obi55KSl7dmFyIGk9TnYqTWF0aC5zcXJ0KGUpLG89ZSpFdjtuLng9aSpNYXRoLmNvcyhvKSxuLnk9aSpNYXRoLnNpbihvKX0oaXNOYU4obi52eCl8fGlzTmFOKG4udnkpKSYmKG4udng9bi52eT0wKX19ZnVuY3Rpb24gaShuKXtyZXR1cm4gbi5pbml0aWFsaXplJiZuLmluaXRpYWxpemUodCksbn12YXIgbyx1PTEsYT0uMDAxLGM9MS1NYXRoLnBvdyhhLDEvMzAwKSxzPTAsZj0uNixsPVllKCksaD1nbihuKSxwPWQoInRpY2siLCJlbmQiKTtyZXR1cm4gbnVsbD09dCYmKHQ9W10pLHIoKSxvPXt0aWNrOmUscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBoLnJlc3RhcnQobiksb30sc3RvcDpmdW5jdGlvbigpe3JldHVybiBoLnN0b3AoKSxvfSxub2RlczpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLHIoKSxsLmVhY2goaSksbyk6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3Qsbyk6dX0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3Qsbyk6YX0sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdCxvKTorY30sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3Qsbyk6c30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0xLXQsbyk6MS1mfSxmb3JjZTpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PW4/bC5yZW1vdmUodCk6bC5zZXQodCxpKG4pKSxvKTpsLmdldCh0KX0sZmluZDpmdW5jdGlvbihuLGUscil7dmFyIGksbyx1LGEsYyxzPTAsZj10Lmxlbmd0aDtmb3IobnVsbD09cj9yPTEvMDpyKj1yLHM9MDtzPGY7KytzKWE9dFtzXSxpPW4tYS54LG89ZS1hLnksdT1pKmkrbypvLHU8ciYmKGM9YSxyPXUpO3JldHVybiBjfSxvbjpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KHAub24odCxuKSxvKTpwLm9uKHQpfX19LEN2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgbixhPWkubGVuZ3RoLGM9ZXIoaSxzcixmcikudmlzaXRBZnRlcihlKTtmb3IodT10LG49MDtuPGE7KytuKW89aVtuXSxjLnZpc2l0KHIpfWZ1bmN0aW9uIG4oKXtpZihpKXt2YXIgdCxuLGU9aS5sZW5ndGg7Zm9yKGE9bmV3IEFycmF5KGUpLHQ9MDt0PGU7Kyt0KW49aVt0XSxhW24uaW5kZXhdPStjKG4sdCxpKX19ZnVuY3Rpb24gZSh0KXt2YXIgbixlLHIsaSxvLHU9MDtpZih0Lmxlbmd0aCl7Zm9yKHI9aT1vPTA7bzw0Oysrbykobj10W29dKSYmKGU9bi52YWx1ZSkmJih1Kz1lLHIrPWUqbi54LGkrPWUqbi55KTt0Lng9ci91LHQueT1pL3V9ZWxzZXtuPXQsbi54PW4uZGF0YS54LG4ueT1uLmRhdGEueTtkbyB1Kz1hW24uZGF0YS5pbmRleF07d2hpbGUobj1uLm5leHQpfXQudmFsdWU9dX1mdW5jdGlvbiByKHQsbixlLHIpe2lmKCF0LnZhbHVlKXJldHVybiEwO3ZhciBpPXQueC1vLngsYz10Lnktby55LGg9ci1uLHA9aSppK2MqYztpZihoKmgvbDxwKXJldHVybiBwPGYmJigwPT09aSYmKGk9c3YoKSxwKz1pKmkpLDA9PT1jJiYoYz1zdigpLHArPWMqYykscDxzJiYocD1NYXRoLnNxcnQocypwKSksby52eCs9aSp0LnZhbHVlKnUvcCxvLnZ5Kz1jKnQudmFsdWUqdS9wKSwhMDtpZighKHQubGVuZ3RofHxwPj1mKSl7KHQuZGF0YSE9PW98fHQubmV4dCkmJigwPT09aSYmKGk9c3YoKSxwKz1pKmkpLDA9PT1jJiYoYz1zdigpLHArPWMqYykscDxzJiYocD1NYXRoLnNxcnQocypwKSkpO2RvIHQuZGF0YSE9PW8mJihoPWFbdC5kYXRhLmluZGV4XSp1L3Asby52eCs9aSpoLG8udnkrPWMqaCk7d2hpbGUodD10Lm5leHQpfX12YXIgaSxvLHUsYSxjPWN2KC0zMCkscz0xLGY9MS8wLGw9LjgxO3JldHVybiB0LmluaXRpYWxpemU9ZnVuY3Rpb24odCl7aT10LG4oKX0sdC5zdHJlbmd0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmN2KCtlKSxuKCksdCk6Y30sdC5kaXN0YW5jZU1pbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1uKm4sdCk6TWF0aC5zcXJ0KHMpfSx0LmRpc3RhbmNlTWF4PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPW4qbix0KTpNYXRoLnNxcnQoZil9LHQudGhldGE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bipuLHQpOk1hdGguc3FydChsKX0sdH0senY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0KXtmb3IodmFyIG4sZT0wLHU9ci5sZW5ndGg7ZTx1OysrZSluPXJbZV0sbi52eCs9KG9bZV0tbi54KSppW2VdKnR9ZnVuY3Rpb24gZSgpe2lmKHIpe3ZhciBuLGU9ci5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKWlbbl09aXNOYU4ob1tuXT0rdChyW25dLG4scikpPzA6K3UocltuXSxuLHIpfX12YXIgcixpLG8sdT1jdiguMSk7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWN2KG51bGw9PXQ/MDordCkpLG4uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsZSgpfSxuLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Y3YoK3QpLGUoKSxuKTp1fSxuLng9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHI/cjpjdigrciksZSgpLG4pOnR9LG59LFB2PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBuLGU9MCx1PXIubGVuZ3RoO2U8dTsrK2Upbj1yW2VdLG4udnkrPShvW2VdLW4ueSkqaVtlXSp0fWZ1bmN0aW9uIGUoKXtpZihyKXt2YXIgbixlPXIubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilpW25dPWlzTmFOKG9bbl09K3QocltuXSxuLHIpKT8wOit1KHJbbl0sbixyKX19dmFyIHIsaSxvLHU9Y3YoLjEpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1jdihudWxsPT10PzA6K3QpKSxuLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10LGUoKX0sbi5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmN2KCt0KSxlKCksbik6dX0sbi55PWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiByP3I6Y3YoK3IpLGUoKSxuKTp0fSxufSxSdj1mdW5jdGlvbih0LG4pe2lmKChlPSh0PW4/dC50b0V4cG9uZW50aWFsKG4tMSk6dC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxyPXQuc2xpY2UoMCxlKTtyZXR1cm5bci5sZW5ndGg+MT9yWzBdK3Iuc2xpY2UoMik6ciwrdC5zbGljZShlKzEpXX0sTHY9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9UnYoTWF0aC5hYnModCkpLHQ/dFsxXTpOYU59LHF2PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUscil7Zm9yKHZhciBpPWUubGVuZ3RoLG89W10sdT0wLGE9dFswXSxjPTA7aT4wJiZhPjAmJihjK2ErMT5yJiYoYT1NYXRoLm1heCgxLHItYykpLG8ucHVzaChlLnN1YnN0cmluZyhpLT1hLGkrYSkpLCEoKGMrPWErMSk+cikpOylhPXRbdT0odSsxKSV0Lmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4obil9fSxVdj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihuKXtyZXR1cm4gdFsrbl19KX19LER2PWZ1bmN0aW9uKHQsbil7dD10LnRvUHJlY2lzaW9uKG4pO3Q6Zm9yKHZhciBlLHI9dC5sZW5ndGgsaT0xLG89LTE7aTxyOysraSlzd2l0Y2godFtpXSl7Y2FzZSIuIjpvPWU9aTticmVhaztjYXNlIjAiOjA9PT1vJiYobz1pKSxlPWk7YnJlYWs7Y2FzZSJlIjpicmVhayB0O2RlZmF1bHQ6bz4wJiYobz0wKX1yZXR1cm4gbz4wP3Quc2xpY2UoMCxvKSt0LnNsaWNlKGUrMSk6dH0sT3Y9ZnVuY3Rpb24odCxuKXt2YXIgZT1Sdih0LG4pO2lmKCFlKXJldHVybiB0KyIiO3ZhciByPWVbMF0saT1lWzFdLG89aS0oVHY9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKSsxLHU9ci5sZW5ndGg7cmV0dXJuIG89PT11P3I6bz51P3IrbmV3IEFycmF5KG8tdSsxKS5qb2luKCIwIik6bz4wP3Iuc2xpY2UoMCxvKSsiLiIrci5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStSdih0LE1hdGgubWF4KDAsbitvLTEpKVswXX0sRnY9ZnVuY3Rpb24odCxuKXt2YXIgZT1Sdih0LG4pO2lmKCFlKXJldHVybiB0KyIiO3ZhciByPWVbMF0saT1lWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStyOnIubGVuZ3RoPmkrMT9yLnNsaWNlKDAsaSsxKSsiLiIrci5zbGljZShpKzEpOnIrbmV3IEFycmF5KGktci5sZW5ndGgrMikuam9pbigiMCIpfSxJdj17IiI6RHYsIiUiOmZ1bmN0aW9uKHQsbil7cmV0dXJuKDEwMCp0KS50b0ZpeGVkKG4pfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKHQpe3JldHVybiB0KyIifSxkOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbih0LG4pe3JldHVybiB0LnRvRXhwb25lbnRpYWwobil9LGY6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdC50b0ZpeGVkKG4pfSxnOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQudG9QcmVjaXNpb24obil9LG86ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24odCxuKXtyZXR1cm4gRnYoMTAwKnQsbil9LHI6RnYsczpPdixYOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KX19LFl2PS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLVwoIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KFthLXolXSk/JC9pO2xyLnByb3RvdHlwZT1oci5wcm90b3R5cGUsaHIucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKG51bGw9PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyhudWxsPT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrdGhpcy50eXBlfTt2YXIgQnYsanY9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LEh2PVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiwrUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXSxYdj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIG4odCl7dmFyIG4saSxzLG09dix4PV87aWYoImMiPT09ZCl4PWcodCkreCx0PSIiO2Vsc2V7dD0rdDt2YXIgYj10PDA7aWYodD1nKE1hdGguYWJzKHQpLHApLGImJjA9PT0rdCYmKGI9ITEpLG09KGI/IigiPT09Yz9jOiItIjoiLSI9PT1jfHwiKCI9PT1jPyIiOmMpK20seD14KygicyI9PT1kP0h2WzgrVHYvM106IiIpKyhiJiYiKCI9PT1jPyIpIjoiIikseSlmb3Iobj0tMSxpPXQubGVuZ3RoOysrbjxpOylpZihzPXQuY2hhckNvZGVBdChuKSw0OD5zfHxzPjU3KXt4PSg0Nj09PXM/byt0LnNsaWNlKG4rMSk6dC5zbGljZShuKSkreCx0PXQuc2xpY2UoMCxuKTticmVha319aCYmIWYmJih0PXIodCwxLzApKTt2YXIgdz1tLmxlbmd0aCt0Lmxlbmd0aCt4Lmxlbmd0aCxNPXc8bD9uZXcgQXJyYXkobC13KzEpLmpvaW4oZSk6IiI7c3dpdGNoKGgmJmYmJih0PXIoTSt0LE0ubGVuZ3RoP2wteC5sZW5ndGg6MS8wKSxNPSIiKSxhKXtjYXNlIjwiOnQ9bSt0K3grTTticmVhaztjYXNlIj0iOnQ9bStNK3QreDticmVhaztjYXNlIl4iOnQ9TS5zbGljZSgwLHc9TS5sZW5ndGg+PjEpK20rdCt4K00uc2xpY2Uodyk7YnJlYWs7ZGVmYXVsdDp0PU0rbSt0K3h9cmV0dXJuIHUodCl9dD1scih0KTt2YXIgZT10LmZpbGwsYT10LmFsaWduLGM9dC5zaWduLHM9dC5zeW1ib2wsZj10Lnplcm8sbD10LndpZHRoLGg9dC5jb21tYSxwPXQucHJlY2lzaW9uLGQ9dC50eXBlLHY9IiQiPT09cz9pWzBdOiIjIj09PXMmJi9bYm94WF0vLnRlc3QoZCk/IjAiK2QudG9Mb3dlckNhc2UoKToiIixfPSIkIj09PXM/aVsxXTovWyVwXS8udGVzdChkKT8iJSI6IiIsZz1JdltkXSx5PSFkfHwvW2RlZmdwcnMlXS8udGVzdChkKTtyZXR1cm4gcD1udWxsPT1wP2Q/NjoxMjovW2dwcnNdLy50ZXN0KGQpP01hdGgubWF4KDEsTWF0aC5taW4oMjEscCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAscCkpLG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sbn1mdW5jdGlvbiBlKHQsZSl7dmFyIHI9bigodD1scih0KSx0LnR5cGU9ImYiLHQpKSxpPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKEx2KGUpLzMpKSksbz1NYXRoLnBvdygxMCwtaSksdT1Idls4K2kvM107cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByKG8qdCkrdX19dmFyIHI9dC5ncm91cGluZyYmdC50aG91c2FuZHM/cXYodC5ncm91cGluZyx0LnRob3VzYW5kcyk6anYsaT10LmN1cnJlbmN5LG89dC5kZWNpbWFsLHU9dC5udW1lcmFscz9Vdih0Lm51bWVyYWxzKTpqdjtyZXR1cm57Zm9ybWF0Om4sZm9ybWF0UHJlZml4OmV9fTtwcih7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTt2YXIgVnY9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KDAsLUx2KE1hdGguYWJzKHQpKSl9LFd2PWZ1bmN0aW9uKHQsbil7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoTHYobikvMykpKS1MdihNYXRoLmFicyh0KSkpfSwkdj1mdW5jdGlvbih0LG4pe3JldHVybiB0PU1hdGguYWJzKHQpLG49TWF0aC5hYnMobiktdCxNYXRoLm1heCgwLEx2KG4pLUx2KHQpKSsxfSxadj1mdW5jdGlvbigpe3JldHVybiBuZXcgZHJ9O2RyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZHIscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbih0KXt2cihOXyx0LHRoaXMudCksdnIodGhpcyxOXy5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9Tl8udDp0aGlzLnM9Tl8udH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgR3YsSnYsUXYsS3YsdF8sbl8sZV8scl8saV8sb18sdV8sYV8sY18sc18sZl8sbF8saF8scF8sZF8sdl8sX18sZ18seV8sbV8seF8sYl8sd18sTV8sVF8sa18sU18sTl89bmV3IGRyLEVfPTFlLTYsQV89MWUtMTIsQ189TWF0aC5QSSx6Xz1DXy8yLFBfPUNfLzQsUl89MipDXyxMXz0xODAvQ18scV89Q18vMTgwLFVfPU1hdGguYWJzLERfPU1hdGguYXRhbixPXz1NYXRoLmF0YW4yLEZfPU1hdGguY29zLElfPU1hdGguY2VpbCxZXz1NYXRoLmV4cCxCXz1NYXRoLmxvZyxqXz1NYXRoLnBvdyxIXz1NYXRoLnNpbixYXz1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH0sVl89TWF0aC5zcXJ0LFdfPU1hdGgudGFuLCRfPXtGZWF0dXJlOmZ1bmN0aW9uKHQsbil7eHIodC5nZW9tZXRyeSxuKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5mZWF0dXJlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXhyKGVbcl0uZ2VvbWV0cnksbil9fSxaXz17U3BoZXJlOmZ1bmN0aW9uKHQsbil7bi5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24odCxuKXt0PXQuY29vcmRpbmF0ZXMsbi5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXQ9ZVtyXSxuLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbih0LG4pe2JyKHQuY29vcmRpbmF0ZXMsbiwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylicihlW3JdLG4sMCl9LFBvbHlnb246ZnVuY3Rpb24odCxuKXt3cih0LmNvb3JkaW5hdGVzLG4pfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXdyKGVbcl0sbil9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10Lmdlb21ldHJpZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOyl4cihlW3JdLG4pfX0sR189ZnVuY3Rpb24odCxuKXt0JiYkXy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpPyRfW3QudHlwZV0odCxuKTp4cih0LG4pfSxKXz1adigpLFFfPVp2KCksS189e3BvaW50Om1yLGxpbmVTdGFydDptcixsaW5lRW5kOm1yLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0pfLnJlc2V0KCksS18ubGluZVN0YXJ0PU1yLEtfLmxpbmVFbmQ9VHJ9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0rSl87UV8uYWRkKHQ8MD9SXyt0OnQpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PW1yfSxzcGhlcmU6ZnVuY3Rpb24oKXtRXy5hZGQoUl8pfX0sdGc9ZnVuY3Rpb24odCl7cmV0dXJuIFFfLnJlc2V0KCksR18odCxLXyksMipRX30sbmc9WnYoKSxlZz17cG9pbnQ6THIsbGluZVN0YXJ0OlVyLGxpbmVFbmQ6RHIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZWcucG9pbnQ9T3IsZWcubGluZVN0YXJ0PUZyLGVnLmxpbmVFbmQ9SXIsbmcucmVzZXQoKSxLXy5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0tfLnBvbHlnb25FbmQoKSxlZy5wb2ludD1McixlZy5saW5lU3RhcnQ9VXIsZWcubGluZUVuZD1EcixKXzwwPyhuXz0tKHJfPTE4MCksZV89LShpXz05MCkpOm5nPkVfP2lfPTkwOm5nPC1FXyYmKGVfPS05MCksZl9bMF09bl8sZl9bMV09cl99fSxyZz1mdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvLHUsYTtpZihpXz1yXz0tKG5fPWVfPTEvMCksc189W10sR18odCxlZyksZT1zXy5sZW5ndGgpe2ZvcihzXy5zb3J0KEJyKSxuPTEscj1zX1swXSxvPVtyXTtuPGU7KytuKWk9c19bbl0sanIocixpWzBdKXx8anIocixpWzFdKT8oWXIoclswXSxpWzFdKT5ZcihyWzBdLHJbMV0pJiYoclsxXT1pWzFdKSxZcihpWzBdLHJbMV0pPllyKHJbMF0sclsxXSkmJihyWzBdPWlbMF0pKTpvLnB1c2gocj1pKTtmb3IodT0tKDEvMCksZT1vLmxlbmd0aC0xLG49MCxyPW9bZV07bjw9ZTtyPWksKytuKWk9b1tuXSwoYT1ZcihyWzFdLGlbMF0pKT51JiYodT1hLG5fPWlbMF0scl89clsxXSl9cmV0dXJuIHNfPWZfPW51bGwsbl89PT0xLzB8fGVfPT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW25fLGVfXSxbcl8saV9dXX0saWc9e3NwaGVyZTptcixwb2ludDpIcixsaW5lU3RhcnQ6VnIsbGluZUVuZDpacixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtpZy5saW5lU3RhcnQ9R3IsaWcubGluZUVuZD1Kcn0scG9seWdvbkVuZDpmdW5jdGlvbigpe2lnLmxpbmVTdGFydD1WcixpZy5saW5lRW5kPVpyfX0sb2c9ZnVuY3Rpb24odCl7bF89aF89cF89ZF89dl89X189Z189eV89bV89eF89Yl89MCxHXyh0LGlnKTt2YXIgbj1tXyxlPXhfLHI9Yl8saT1uKm4rZSplK3IqcjtyZXR1cm4gaTxBXyYmKG49X18sZT1nXyxyPXlfLGhfPEVfJiYobj1wXyxlPWRfLHI9dl8pLGk9bipuK2UqZStyKnIsaTxBXyk/W05hTixOYU5dOltPXyhlLG4pKkxfLGdyKHIvVl8oaSkpKkxfXX0sdWc9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxhZz1mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGUoZSxyKXtyZXR1cm4gZT10KGUsciksbihlWzBdLGVbMV0pfXJldHVybiB0LmludmVydCYmbi5pbnZlcnQmJihlLmludmVydD1mdW5jdGlvbihlLHIpe3JldHVybiBlPW4uaW52ZXJ0KGUsciksZSYmdC5pbnZlcnQoZVswXSxlWzFdKX0pLGV9O3RpLmludmVydD10aTt2YXIgY2csc2csZmcsbGcsaGcscGcsZGcsdmcsX2csZ2cseWcsbWc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihuKXtyZXR1cm4gbj10KG5bMF0qcV8sblsxXSpxXyksblswXSo9TF8sblsxXSo9TF8sbn1yZXR1cm4gdD1uaSh0WzBdKnFfLHRbMV0qcV8sdC5sZW5ndGg+Mj90WzJdKnFfOjApLG4uaW52ZXJ0PWZ1bmN0aW9uKG4pe3JldHVybiBuPXQuaW52ZXJ0KG5bMF0qcV8sblsxXSpxXyksblswXSo9TF8sblsxXSo9TF8sbn0sbn0seGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsbil7ZS5wdXNoKHQ9cih0LG4pKSx0WzBdKj1MXyx0WzFdKj1MX31mdW5jdGlvbiBuKCl7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpxXyxjPXUuYXBwbHkodGhpcyxhcmd1bWVudHMpKnFfO3JldHVybiBlPVtdLHI9bmkoLXRbMF0qcV8sLXRbMV0qcV8sMCkuaW52ZXJ0LG9pKGEsbixjLDEpLHQ9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltlXX0sZT1yPW51bGwsdH12YXIgZSxyLGk9dWcoWzAsMF0pLG89dWcoOTApLHU9dWcoNiksYT17cG9pbnQ6dH07cmV0dXJuIG4uY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6dWcoWyt0WzBdLCt0WzFdXSksbik6aX0sbi5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1ZygrdCksbik6b30sbi5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1ZygrdCksbik6dX0sbn0sYmc9ZnVuY3Rpb24oKXt2YXIgdCxuPVtdO3JldHVybntwb2ludDpmdW5jdGlvbihuLGUpe3QucHVzaChbbixlXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe24ucHVzaCh0PVtdKX0sbGluZUVuZDptcixyZWpvaW46ZnVuY3Rpb24oKXtuLmxlbmd0aD4xJiZuLnB1c2gobi5wb3AoKS5jb25jYXQobi5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPW47cmV0dXJuIG49W10sdD1udWxsLGV9fX0sd2c9ZnVuY3Rpb24odCxuLGUscixpLG8pe3ZhciB1LGE9dFswXSxjPXRbMV0scz1uWzBdLGY9blsxXSxsPTAsaD0xLHA9cy1hLGQ9Zi1jO2lmKHU9ZS1hLHB8fCEodT4wKSl7aWYodS89cCxwPDApe2lmKHU8bClyZXR1cm47dTxoJiYoaD11KX1lbHNlIGlmKHA+MCl7aWYodT5oKXJldHVybjt1PmwmJihsPXUpfWlmKHU9aS1hLHB8fCEodTwwKSl7aWYodS89cCxwPDApe2lmKHU+aClyZXR1cm47dT5sJiYobD11KX1lbHNlIGlmKHA+MCl7aWYodTxsKXJldHVybjt1PGgmJihoPXUpfWlmKHU9ci1jLGR8fCEodT4wKSl7aWYodS89ZCxkPDApe2lmKHU8bClyZXR1cm47dTxoJiYoaD11KX1lbHNlIGlmKGQ+MCl7aWYodT5oKXJldHVybjt1PmwmJihsPXUpfWlmKHU9by1jLGR8fCEodTwwKSl7aWYodS89ZCxkPDApe2lmKHU+aClyZXR1cm47dT5sJiYobD11KX1lbHNlIGlmKGQ+MCl7aWYodTxsKXJldHVybjt1PGgmJihoPXUpfXJldHVybiBsPjAmJih0WzBdPWErbCpwLHRbMV09YytsKmQpLGg8MSYmKG5bMF09YStoKnAsblsxXT1jK2gqZCksITB9fX19fSxNZz1mdW5jdGlvbih0LG4pe3JldHVybiBVXyh0WzBdLW5bMF0pPEVfJiZVXyh0WzFdLW5bMV0pPEVffSxUZz1mdW5jdGlvbih0LG4sZSxyLGkpe3ZhciBvLHUsYT1bXSxjPVtdO2lmKHQuZm9yRWFjaChmdW5jdGlvbih0KXtpZighKChuPXQubGVuZ3RoLTEpPD0wKSl7dmFyIG4sZSxyPXRbMF0sdT10W25dO2lmKE1nKHIsdSkpe2ZvcihpLmxpbmVTdGFydCgpLG89MDtvPG47KytvKWkucG9pbnQoKHI9dFtvXSlbMF0sclsxXSk7cmV0dXJuIHZvaWQgaS5saW5lRW5kKCl9YS5wdXNoKGU9bmV3IGFpKHIsdCxudWxsLCEwKSksYy5wdXNoKGUubz1uZXcgYWkocixudWxsLGUsITEpKSxhLnB1c2goZT1uZXcgYWkodSx0LG51bGwsITEpKSxjLnB1c2goZS5vPW5ldyBhaSh1LG51bGwsZSwhMCkpfX0pLGEubGVuZ3RoKXtmb3IoYy5zb3J0KG4pLGNpKGEpLGNpKGMpLG89MCx1PWMubGVuZ3RoO288dTsrK28pY1tvXS5lPWU9IWU7Zm9yKHZhciBzLGYsbD1hWzBdOzspe2Zvcih2YXIgaD1sLHA9ITA7aC52OylpZigoaD1oLm4pPT09bClyZXR1cm47cz1oLnosaS5saW5lU3RhcnQoKTtkb3tpZihoLnY9aC5vLnY9ITAsaC5lKXtpZihwKWZvcihvPTAsdT1zLmxlbmd0aDtvPHU7KytvKWkucG9pbnQoKGY9c1tvXSlbMF0sZlsxXSk7ZWxzZSByKGgueCxoLm4ueCwxLGkpO2g9aC5ufWVsc2V7aWYocClmb3Iocz1oLnAueixvPXMubGVuZ3RoLTE7bz49MDstLW8paS5wb2ludCgoZj1zW29dKVswXSxmWzFdKTtlbHNlIHIoaC54LGgucC54LC0xLGkpO2g9aC5wfWg9aC5vLHM9aC56LHA9IXB9d2hpbGUoIWgudik7aS5saW5lRW5kKCl9fX0sa2c9MWU5LFNnPS1rZyxOZz1mdW5jdGlvbigpe3ZhciB0LG4sZSxyPTAsaT0wLG89OTYwLHU9NTAwO3JldHVybiBlPXtzdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIHQmJm49PT1lP3Q6dD1zaShyLGksbyx1KShuPWUpfSxleHRlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2FbMF1bMF0saT0rYVswXVsxXSxvPSthWzFdWzBdLHU9K2FbMV1bMV0sdD1uPW51bGwsZSk6W1tyLGldLFtvLHVdXX19fSxFZz1adigpLEFnPWZ1bmN0aW9uKHQsbil7dmFyIGU9blswXSxyPW5bMV0saT1bSF8oZSksLUZfKGUpLDBdLG89MCx1PTA7RWcucmVzZXQoKTtmb3IodmFyIGE9MCxjPXQubGVuZ3RoO2E8YzsrK2EpaWYoZj0ocz10W2FdKS5sZW5ndGgpZm9yKHZhciBzLGYsbD1zW2YtMV0saD1sWzBdLHA9bFsxXS8yK1BfLGQ9SF8ocCksdj1GXyhwKSxfPTA7XzxmOysrXyxoPXksZD14LHY9YixsPWcpe3ZhciBnPXNbX10seT1nWzBdLG09Z1sxXS8yK1BfLHg9SF8obSksYj1GXyhtKSx3PXktaCxNPXc+PTA/MTotMSxUPU0qdyxrPVQ+Q18sUz1kKng7aWYoRWcuYWRkKE9fKFMqTSpIXyhUKSx2KmIrUypGXyhUKSkpLG8rPWs/dytNKlJfOncsa15oPj1lXnk+PWUpe3ZhciBOPUNyKEVyKGwpLEVyKGcpKTtScihOKTt2YXIgRT1DcihpLE4pO1JyKEUpO3ZhciBBPShrXnc+PTA/LTE6MSkqZ3IoRVsyXSk7KHI+QXx8cj09PUEmJihOWzBdfHxOWzFdKSkmJih1Kz1rXnc+PTA/MTotMSl9fXJldHVybihvPC1FX3x8bzxFXyYmRWc8LUVfKV4xJnV9LENnPVp2KCksemc9e3NwaGVyZTptcixwb2ludDptcixsaW5lU3RhcnQ6ZmksbGluZUVuZDptcixwb2x5Z29uU3RhcnQ6bXIscG9seWdvbkVuZDptcn0sUGc9ZnVuY3Rpb24odCl7cmV0dXJuIENnLnJlc2V0KCksR18odCx6ZyksK0NnfSxSZz1bbnVsbCxudWxsXSxMZz17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6Umd9LHFnPWZ1bmN0aW9uKHQsbil7cmV0dXJuIFJnWzBdPXQsUmdbMV09bixQZyhMZyl9LFVnPXtGZWF0dXJlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGRpKHQuZ2VvbWV0cnksbil9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuZmVhdHVyZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZihkaShlW3JdLmdlb21ldHJ5LG4pKXJldHVybiEwO3JldHVybiExfX0sRGc9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbih0LG4pe3JldHVybiB2aSh0LmNvb3JkaW5hdGVzLG4pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZih2aShlW3JdLG4pKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsbil7cmV0dXJuIF9pKHQuY29vcmRpbmF0ZXMsbil9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYoX2koZVtyXSxuKSlyZXR1cm4hMDtyZXR1cm4hMX0sUG9seWdvbjpmdW5jdGlvbih0LG4pe3JldHVybiBnaSh0LmNvb3JkaW5hdGVzLG4pfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKGdpKGVbcl0sbikpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10Lmdlb21ldHJpZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZihkaShlW3JdLG4pKXJldHVybiEwO3JldHVybiExfX0sT2c9ZnVuY3Rpb24odCxuKXtyZXR1cm4odCYmVWcuaGFzT3duUHJvcGVydHkodC50eXBlKT9VZ1t0LnR5cGVdOmRpKSh0LG4pfSxGZz1mdW5jdGlvbih0LG4pe3ZhciBlPXRbMF0qcV8scj10WzFdKnFfLGk9blswXSpxXyxvPW5bMV0qcV8sdT1GXyhyKSxhPUhfKHIpLGM9Rl8obykscz1IXyhvKSxmPXUqRl8oZSksbD11KkhfKGUpLGg9YypGXyhpKSxwPWMqSF8oaSksZD0yKmdyKFZfKHlyKG8tcikrdSpjKnlyKGktZSkpKSx2PUhfKGQpLF89ZD9mdW5jdGlvbih0KXt2YXIgbj1IXyh0Kj1kKS92LGU9SF8oZC10KS92LHI9ZSpmK24qaCxpPWUqbCtuKnAsbz1lKmErbipzO3JldHVybltPXyhpLHIpKkxfLE9fKG8sVl8ocipyK2kqaSkpKkxfXX06ZnVuY3Rpb24oKXtyZXR1cm5bZSpMXyxyKkxfXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffSxJZz1mdW5jdGlvbih0KXtyZXR1cm4gdH0sWWc9WnYoKSxCZz1adigpLGpnPXtwb2ludDptcixsaW5lU3RhcnQ6bXIsbGluZUVuZDptcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtqZy5saW5lU3RhcnQ9VGksamcubGluZUVuZD1OaX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2pnLmxpbmVTdGFydD1qZy5saW5lRW5kPWpnLnBvaW50PW1yLFlnLmFkZChVXyhCZykpLEJnLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVlnLzI7cmV0dXJuIFlnLnJlc2V0KCksdH19LEhnPTEvMCxYZz1IZyxWZz0tSGcsV2c9VmcsJGc9e3BvaW50OkVpLGxpbmVTdGFydDptcixsaW5lRW5kOm1yLHBvbHlnb25TdGFydDptcixwb2x5Z29uRW5kOm1yLHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbSGcsWGddLFtWZyxXZ11dO3JldHVybiBWZz1XZz0tKFhnPUhnPTEvMCksdH19LFpnPTAsR2c9MCxKZz0wLFFnPTAsS2c9MCx0eT0wLG55PTAsZXk9MCxyeT0wLGl5PXtwb2ludDpBaSxsaW5lU3RhcnQ6Q2ksbGluZUVuZDpSaSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtpeS5saW5lU3RhcnQ9TGksaXkubGluZUVuZD1xaX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2l5LnBvaW50PUFpLGl5LmxpbmVTdGFydD1DaSxpeS5saW5lRW5kPVJpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1yeT9bbnkvcnksZXkvcnldOnR5P1tRZy90eSxLZy90eV06Smc/W1pnL0pnLEdnL0pnXTpbTmFOLE5hTl07cmV0dXJuIFpnPUdnPUpnPVFnPUtnPXR5PW55PWV5PXJ5PTAsdH19O09pLnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhZGl1cz10LHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbiksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTticmVhaztkZWZhdWx0OnRoaXMuX2NvbnRleHQubW92ZVRvKHQrdGhpcy5fcmFkaXVzLG4pLHRoaXMuX2NvbnRleHQuYXJjKHQsbix0aGlzLl9yYWRpdXMsMCxSXyl9fSxyZXN1bHQ6bXJ9O3ZhciBveSx1eSxheSxjeSxzeSxmeT1adigpLGx5PXtwb2ludDptcixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtseS5wb2ludD1GaX0sbGluZUVuZDpmdW5jdGlvbigpe295JiZJaSh1eSxheSksbHkucG9pbnQ9bXJ9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe295PSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7b3k9bnVsbH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9K2Z5O3JldHVybiBmeS5yZXNldCgpLHR9fTtZaS5wcm90b3R5cGU9e19jaXJjbGU6QmkoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2lyY2xlPUJpKHQpLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX3N0cmluZy5wdXNoKCJaIiksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3N0cmluZy5wdXNoKCJNIix0LCIsIixuKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9zdHJpbmcucHVzaCgiTCIsdCwiLCIsbik7YnJlYWs7ZGVmYXVsdDp0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsbix0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH19fTt2YXIgaHk9ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKHQpe3JldHVybiB0JiYoImZ1bmN0aW9uIj09dHlwZW9mIG8mJmkucG9pbnRSYWRpdXMoK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxHXyh0LHIoaSkpKSxpLnJlc3VsdCgpfXZhciByLGksbz00LjU7cmV0dXJuIGUuYXJlYT1mdW5jdGlvbih0KXtyZXR1cm4gR18odCxyKGpnKSksamcucmVzdWx0KCl9LGUubWVhc3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gR18odCxyKGx5KSksbHkucmVzdWx0KCl9LGUuYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBHXyh0LHIoJGcpKSwkZy5yZXN1bHQoKX0sZS5jZW50cm9pZD1mdW5jdGlvbih0KXtyZXR1cm4gR18odCxyKGl5KSksaXkucmVzdWx0KCl9LGUucHJvamVjdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1uPyh0PW51bGwsSWcpOih0PW4pLnN0cmVhbSxlKTp0fSxlLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD8obj1udWxsLG5ldyBZaSk6bmV3IE9pKG49dCksImZ1bmN0aW9uIiE9dHlwZW9mIG8mJmkucG9pbnRSYWRpdXMobyksZSk6bn0sZS5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OihpLnBvaW50UmFkaXVzKCt0KSwrdCksZSk6b30sZS5wcm9qZWN0aW9uKHQpLmNvbnRleHQobil9LHB5PWZ1bmN0aW9uKHQsbixlLHIpe3JldHVybiBmdW5jdGlvbihpLG8pe2Z1bmN0aW9uIHUobixlKXt2YXIgcj1pKG4sZSk7dChuPXJbMF0sZT1yWzFdKSYmby5wb2ludChuLGUpfWZ1bmN0aW9uIGEodCxuKXt2YXIgZT1pKHQsbik7Xy5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIGMoKXtiLnBvaW50PWEsXy5saW5lU3RhcnQoKX1mdW5jdGlvbiBzKCl7Yi5wb2ludD11LF8ubGluZUVuZCgpfWZ1bmN0aW9uIGYodCxuKXt2LnB1c2goW3Qsbl0pO3ZhciBlPWkodCxuKTttLnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gbCgpe20ubGluZVN0YXJ0KCksdj1bXX1mdW5jdGlvbiBoKCl7Zih2WzBdWzBdLHZbMF1bMV0pLG0ubGluZUVuZCgpO3ZhciB0LG4sZSxyLGk9bS5jbGVhbigpLHU9eS5yZXN1bHQoKSxhPXUubGVuZ3RoO2lmKHYucG9wKCkscC5wdXNoKHYpLHY9bnVsbCxhKWlmKDEmaSl7aWYoZT11WzBdLChuPWUubGVuZ3RoLTEpPjApe2Zvcih4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSxvLmxpbmVTdGFydCgpLHQ9MDt0PG47Kyt0KW8ucG9pbnQoKHI9ZVt0XSlbMF0sclsxXSk7by5saW5lRW5kKCl9fWVsc2UgYT4xJiYyJmkmJnUucHVzaCh1LnBvcCgpLmNvbmNhdCh1LnNoaWZ0KCkpKSxkLnB1c2godS5maWx0ZXIoamkpKX12YXIgcCxkLHYsXz1uKG8pLGc9aS5pbnZlcnQoclswXSxyWzFdKSx5PWJnKCksbT1uKHkpLHg9ITEsYj17cG9pbnQ6dSxsaW5lU3RhcnQ6YyxsaW5lRW5kOnMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Yi5wb2ludD1mLGIubGluZVN0YXJ0PWwsYi5saW5lRW5kPWgsZD1bXSxwPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Yi5wb2ludD11LGIubGluZVN0YXJ0PWMsYi5saW5lRW5kPXMsZD1oZihkKTt2YXIgdD1BZyhwLGcpO2QubGVuZ3RoPyh4fHwoby5wb2x5Z29uU3RhcnQoKSx4PSEwKSxUZyhkLEhpLHQsZSxvKSk6dCYmKHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLG8ubGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxvKSxvLmxpbmVFbmQoKSkseCYmKG8ucG9seWdvbkVuZCgpLHg9ITEpLGQ9cD1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtvLnBvbHlnb25TdGFydCgpLG8ubGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxvKSxvLmxpbmVFbmQoKSxvLnBvbHlnb25FbmQoKX19O3JldHVybiBifX0sZHk9cHkoZnVuY3Rpb24oKXtyZXR1cm4hMH0sWGksV2ksWy1DXywtel9dKSx2eT1mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGUoZSxyLGksbyl7b2kobyx0LG4saSxlLHIpfWZ1bmN0aW9uIHIodCxuKXtyZXR1cm4gRl8odCkqRl8obik+YX1mdW5jdGlvbiBpKHQpe3ZhciBuLGUsaSxhLGY7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2E9aT0hMSxmPTF9LHBvaW50OmZ1bmN0aW9uKGwsaCl7dmFyIHAsZD1bbCxoXSx2PXIobCxoKSxfPWM/dj8wOnUobCxoKTp2P3UobCsobDwwP0NfOi1DXyksaCk6MDtpZighbiYmKGE9aT12KSYmdC5saW5lU3RhcnQoKSx2IT09aSYmKHA9byhuLGQpLChNZyhuLHApfHxNZyhkLHApKSYmKGRbMF0rPUVfLGRbMV0rPUVfLHY9cihkWzBdLGRbMV0pKSksdiE9PWkpZj0wLHY/KHQubGluZVN0YXJ0KCkscD1vKGQsbiksdC5wb2ludChwWzBdLHBbMV0pKToocD1vKG4sZCksdC5wb2ludChwWzBdLHBbMV0pLHQubGluZUVuZCgpKSxuPXA7ZWxzZSBpZihzJiZuJiZjXnYpe3ZhciBnO18mZXx8IShnPW8oZCxuLCEwKSl8fChmPTAsYz8odC5saW5lU3RhcnQoKSx0LnBvaW50KGdbMF1bMF0sZ1swXVsxXSksdC5wb2ludChnWzFdWzBdLGdbMV1bMV0pLHQubGluZUVuZCgpKToodC5wb2ludChnWzFdWzBdLGdbMV1bMV0pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChnWzBdWzBdLGdbMF1bMV0pKSl9IXZ8fG4mJk1nKG4sZCl8fHQucG9pbnQoZFswXSxkWzFdKSxuPWQsaT12LGU9X30sbGluZUVuZDpmdW5jdGlvbigpe2kmJnQubGluZUVuZCgpLG49bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gZnwoYSYmaSk8PDF9fX1mdW5jdGlvbiBvKHQsbixlKXt2YXIgcj1Fcih0KSxpPUVyKG4pLG89WzEsMCwwXSx1PUNyKHIsaSksYz1Bcih1LHUpLHM9dVswXSxmPWMtcypzO2lmKCFmKXJldHVybiFlJiZ0O3ZhciBsPWEqYy9mLGg9LWEqcy9mLHA9Q3Iobyx1KSxkPVByKG8sbCk7enIoZCxQcih1LGgpKTt2YXIgdj1wLF89QXIoZCx2KSxnPUFyKHYsdikseT1fKl8tZyooQXIoZCxkKS0xKTtpZighKHk8MCkpe3ZhciBtPVZfKHkpLHg9UHIodiwoLV8tbSkvZyk7aWYoenIoeCxkKSx4PU5yKHgpLCFlKXJldHVybiB4O3ZhciBiLHc9dFswXSxNPW5bMF0sVD10WzFdLGs9blsxXTtNPHcmJihiPXcsdz1NLE09Yik7dmFyIFM9TS13LE49VV8oUy1DXyk8RV8sRT1OfHxTPEVfO2lmKCFOJiZrPFQmJihiPVQsVD1rLGs9YiksRT9OP1Qraz4wXnhbMV08KFVfKHhbMF0tdyk8RV8/VDprKTpUPD14WzFdJiZ4WzFdPD1rOlM+Q19eKHc8PXhbMF0mJnhbMF08PU0pKXt2YXIgQT1Qcih2LCgtXyttKS9nKTtyZXR1cm4genIoQSxkKSxbeCxOcihBKV19fX1mdW5jdGlvbiB1KG4sZSl7dmFyIHI9Yz90OkNfLXQsaT0wO3JldHVybiBuPC1yP2l8PTE6bj5yJiYoaXw9MiksZTwtcj9pfD00OmU+ciYmKGl8PTgpLGl9dmFyIGE9Rl8odCksYz1hPjAscz1VXyhhKT5FXztyZXR1cm4gcHkocixpLGUsYz9bMCwtdF06Wy1DXyx0LUNfXSl9LF95PWZ1bmN0aW9uKHQpe3JldHVybntzdHJlYW06JGkodCl9fTtaaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlppLHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5zdHJlYW0ucG9pbnQodCxuKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O3ZhciBneT0xNix5eT1GXygzMCpxXyksbXk9ZnVuY3Rpb24odCxuKXtyZXR1cm4rbj9LaSh0LG4pOlFpKHQpfSx4eT0kaSh7cG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLnN0cmVhbS5wb2ludCh0KnFfLG4qcV8pfX0pLGJ5PWZ1bmN0aW9uKCl7cmV0dXJuIGVvKGlvKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfSx3eT1mdW5jdGlvbigpe3JldHVybiBieSgpLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCkudHJhbnNsYXRlKFs0ODAsMjUwXSkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pfSxNeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIG49dFswXSxlPXRbMV07cmV0dXJuIGE9bnVsbCxpLnBvaW50KG4sZSksYXx8KG8ucG9pbnQobixlKSxhKXx8KHUucG9pbnQobixlKSxhKX1mdW5jdGlvbiBuKCl7cmV0dXJuIGU9cj1udWxsLHR9dmFyIGUscixpLG8sdSxhLGM9d3koKSxzPWJ5KCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxmPWJ5KCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGw9e3BvaW50OmZ1bmN0aW9uKHQsbil7YT1bdCxuXX19O3JldHVybiB0LmludmVydD1mdW5jdGlvbih0KXt2YXIgbj1jLnNjYWxlKCksZT1jLnRyYW5zbGF0ZSgpLHI9KHRbMF0tZVswXSkvbixpPSh0WzFdLWVbMV0pL247cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZyPj0tLjQyNSYmcjwtLjIxND9zOmk+PS4xNjYmJmk8LjIzNCYmcj49LS4yMTQmJnI8LS4xMTU/ZjpjKS5pbnZlcnQodCl9LHQuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBlJiZyPT09dD9lOmU9b28oW2Muc3RyZWFtKHI9dCkscy5zdHJlYW0odCksZi5zdHJlYW0odCldKX0sdC5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGMucHJlY2lzaW9uKHQpLHMucHJlY2lzaW9uKHQpLGYucHJlY2lzaW9uKHQpLG4oKSk6Yy5wcmVjaXNpb24oKX0sdC5zY2FsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYy5zY2FsZShuKSxzLnNjYWxlKC4zNSpuKSxmLnNjYWxlKG4pLHQudHJhbnNsYXRlKGMudHJhbnNsYXRlKCkpKTpjLnNjYWxlKCl9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBjLnRyYW5zbGF0ZSgpO3ZhciBlPWMuc2NhbGUoKSxyPSt0WzBdLGE9K3RbMV07cmV0dXJuIGk9Yy50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW3ItLjQ1NSplLGEtLjIzOCplXSxbcisuNDU1KmUsYSsuMjM4KmVdXSkuc3RyZWFtKGwpLG89cy50cmFuc2xhdGUoW3ItLjMwNyplLGErLjIwMSplXSkuY2xpcEV4dGVudChbW3ItLjQyNSplK0VfLGErLjEyKmUrRV9dLFtyLS4yMTQqZS1FXyxhKy4yMzQqZS1FX11dKS5zdHJlYW0obCksdT1mLnRyYW5zbGF0ZShbci0uMjA1KmUsYSsuMjEyKmVdKS5jbGlwRXh0ZW50KFtbci0uMjE0KmUrRV8sYSsuMTY2KmUrRV9dLFtyLS4xMTUqZS1FXyxhKy4yMzQqZS1FX11dKS5zdHJlYW0obCksbigpfSx0LmZpdEV4dGVudD1mdW5jdGlvbihuLGUpe3JldHVybiBHaSh0LG4sZSl9LHQuZml0U2l6ZT1mdW5jdGlvbihuLGUpe3JldHVybiBKaSh0LG4sZSl9LHQuc2NhbGUoMTA3MCl9LFR5PXVvKGZ1bmN0aW9uKHQpe3JldHVybiBWXygyLygxK3QpKX0pO1R5LmludmVydD1hbyhmdW5jdGlvbih0KXtyZXR1cm4gMipncih0LzIpfSk7dmFyIGt5PWZ1bmN0aW9uKCl7cmV0dXJuIHRvKFR5KS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sU3k9dW8oZnVuY3Rpb24odCl7cmV0dXJuKHQ9X3IodCkpJiZ0L0hfKHQpfSk7U3kuaW52ZXJ0PWFvKGZ1bmN0aW9uKHQpe3JldHVybiB0fSk7dmFyIE55PWZ1bmN0aW9uKCl7cmV0dXJuIHRvKFN5KS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9O2NvLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblt0LDIqRF8oWV8obikpLXpfXX07dmFyIEV5PWZ1bmN0aW9uKCl7cmV0dXJuIHNvKGNvKS5zY2FsZSg5NjEvUl8pfSxBeT1mdW5jdGlvbigpe3JldHVybiBlbyhsbykuc2NhbGUoMTA5LjUpLnBhcmFsbGVscyhbMzAsMzBdKX07aG8uaW52ZXJ0PWhvO3ZhciBDeT1mdW5jdGlvbigpe3JldHVybiB0byhobykuc2NhbGUoMTUyLjYzKX0senk9ZnVuY3Rpb24oKXtyZXR1cm4gZW8ocG8pLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9O3ZvLmludmVydD1hbyhEXyk7dmFyIFB5PWZ1bmN0aW9uKCl7cmV0dXJuIHRvKHZvKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfSxSeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gaT1vPW51bGwsdX12YXIgbixlLHIsaSxvLHUsYT0xLGM9MCxzPTAsZj0xLGw9MSxoPUlnLHA9bnVsbCxkPUlnO3JldHVybiB1PXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIGkmJm89PT10P2k6aT1oKGQobz10KSl9LGNsaXBFeHRlbnQ6ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9bnVsbD09aT8ocD1uPWU9cj1udWxsLElnKTpzaShwPStpWzBdWzBdLG49K2lbMF1bMV0sZT0raVsxXVswXSxyPStpWzFdWzFdKSx0KCkpOm51bGw9PXA/bnVsbDpbW3Asbl0sW2Uscl1dfSxzY2FsZTpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1fbygoYT0rbikqZixhKmwsYyxzKSx0KCkpOmF9LHRyYW5zbGF0ZTpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1fbyhhKmYsYSpsLGM9K25bMF0scz0rblsxXSksdCgpKTpbYyxzXX0scmVmbGVjdFg6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9X28oYSooZj1uPy0xOjEpLGEqbCxjLHMpLHQoKSk6ZjwwfSxyZWZsZWN0WTpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1fbyhhKmYsYSoobD1uPy0xOjEpLGMscyksdCgpKTpsPDB9LGZpdEV4dGVudDpmdW5jdGlvbih0LG4pe3JldHVybiBHaSh1LHQsbil9LGZpdFNpemU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gSmkodSx0LG4pfX19O2dvLmludmVydD1hbyhncik7dmFyIEx5PWZ1bmN0aW9uKCl7cmV0dXJuIHRvKGdvKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK0VfKX07eW8uaW52ZXJ0PWFvKGZ1bmN0aW9uKHQpe3JldHVybiAyKkRfKHQpfSk7dmFyIHF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRvKHlvKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfTttby5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm5bLW4sMipEXyhZXyh0KSktel9dfTt2YXIgVXk9ZnVuY3Rpb24oKXt2YXIgdD1zbyhtbyksbj10LmNlbnRlcixlPXQucm90YXRlO3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKFstdFsxXSx0WzBdXSk6KHQ9bigpLFt0WzFdLC10WzBdXSl9LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKToodD1lKCksW3RbMF0sdFsxXSx0WzJdLTkwXSl9LGUoWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfSxEeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIG8sdT0wO3QuZWFjaEFmdGVyKGZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hpbGRyZW47ZT8odC54PWJvKGUpLHQueT1NbyhlKSk6KHQueD1vP3UrPW4odCxvKTowLHQueT0wLG89dCl9KTt2YXIgYT1rbyh0KSxjPVNvKHQpLHM9YS54LW4oYSxjKS8yLGY9Yy54K24oYyxhKS8yO3JldHVybiB0LmVhY2hBZnRlcihpP2Z1bmN0aW9uKG4pe24ueD0obi54LXQueCkqZSxuLnk9KHQueS1uLnkpKnJ9OmZ1bmN0aW9uKG4pe24ueD0obi54LXMpLyhmLXMpKmUsbi55PSgxLSh0Lnk/bi55L3QueToxKSkqcn0pfXZhciBuPXhvLGU9MSxyPTEsaT0hMTtyZXR1cm4gdC5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSExLGU9K25bMF0scj0rblsxXSx0KTppP251bGw6W2Uscl19LHQubm9kZVNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ITAsZT0rblswXSxyPStuWzFdLHQpOmk/W2Uscl06bnVsbH0sdH0sT3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoTm8pfSxGeT1mdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvPXRoaXMsdT1bb107ZG8gZm9yKG49dS5yZXZlcnNlKCksdT1bXTtvPW4ucG9wKCk7KWlmKHQobyksZT1vLmNoaWxkcmVuKWZvcihyPTAsaT1lLmxlbmd0aDtyPGk7KytyKXUucHVzaChlW3JdKTt3aGlsZSh1Lmxlbmd0aCk7cmV0dXJuIHRoaXN9LEl5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9dGhpcyxpPVtyXTtyPWkucG9wKCk7KWlmKHQociksbj1yLmNoaWxkcmVuKWZvcihlPW4ubGVuZ3RoLTE7ZT49MDstLWUpaS5wdXNoKG5bZV0pO3JldHVybiB0aGlzfSxZeT1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyLGk9dGhpcyxvPVtpXSx1PVtdO2k9by5wb3AoKTspaWYodS5wdXNoKGkpLG49aS5jaGlsZHJlbilmb3IoZT0wLHI9bi5sZW5ndGg7ZTxyOysrZSlvLnB1c2gobltlXSk7Zm9yKDtpPXUucG9wKCk7KXQoaSk7cmV0dXJuIHRoaXN9LEJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbihuKXtmb3IodmFyIGU9K3Qobi5kYXRhKXx8MCxyPW4uY2hpbGRyZW4saT1yJiZyLmxlbmd0aDstLWk+PTA7KWUrPXJbaV0udmFsdWU7bi52YWx1ZT1lfSl9LGp5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obil7bi5jaGlsZHJlbiYmbi5jaGlsZHJlbi5zb3J0KHQpfSl9LEh5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLGU9RW8obix0KSxyPVtuXTtuIT09ZTspbj1uLnBhcmVudCxyLnB1c2gobik7Zm9yKHZhciBpPXIubGVuZ3RoO3QhPT1lOylyLnNwbGljZShpLDAsdCksdD10LnBhcmVudDtyZXR1cm4gcn0sWHk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxuPVt0XTt0PXQucGFyZW50OyluLnB1c2godCk7cmV0dXJuIG59LFZ5PWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihuKXt0LnB1c2gobil9KSx0fSxXeT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obil7bi5jaGlsZHJlbnx8dC5wdXNoKG4pfSksdH0sJHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihlKXtlIT09dCYmbi5wdXNoKHtzb3VyY2U6ZS5wYXJlbnQsdGFyZ2V0OmV9KX0pLG59O0xvLnByb3RvdHlwZT1Bby5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkxvLGNvdW50Ok95LGVhY2g6RnksZWFjaEFmdGVyOll5LGVhY2hCZWZvcmU6SXksc3VtOkJ5LHNvcnQ6ankscGF0aDpIeSxhbmNlc3RvcnM6WHksZGVzY2VuZGFudHM6VnksbGVhdmVzOld5LGxpbmtzOiR5LGNvcHk6Q299O3ZhciBaeT1mdW5jdGlvbih0KXtmb3IodmFyIG4sZT0odD10LnNsaWNlKCkpLmxlbmd0aCxyPW51bGwsaT1yO2U7KXt2YXIgbz1uZXcgcW8odFtlLTFdKTtpPWk/aS5uZXh0PW86cj1vLHRbbl09dFstLWVdfXJldHVybntoZWFkOnIsdGFpbDppfX0sR3k9ZnVuY3Rpb24odCl7cmV0dXJuIERvKFp5KHQpLFtdKX0sSnk9ZnVuY3Rpb24odCl7cmV0dXJuIFZvKHQpLHR9LFF5PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sS3k9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiB0Lng9ZS8yLHQueT1yLzIsbj90LmVhY2hCZWZvcmUoSm8obikpLmVhY2hBZnRlcihRbyhpLC41KSkuZWFjaEJlZm9yZShLbygxKSk6dC5lYWNoQmVmb3JlKEpvKEdvKSkuZWFjaEFmdGVyKFFvKFpvLDEpKS5lYWNoQWZ0ZXIoUW8oaSx0LnIvTWF0aC5taW4oZSxyKSkpLmVhY2hCZWZvcmUoS28oTWF0aC5taW4oZSxyKS8oMip0LnIpKSksdH12YXIgbj1udWxsLGU9MSxyPTEsaT1abztyZXR1cm4gdC5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49V28oZSksdCk6bn0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStuWzBdLHI9K25bMV0sdCk6W2Uscl19LHQucGFkZGluZz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlF5KCtuKSx0KTppfSx0fSx0bT1mdW5jdGlvbih0KXt0LngwPU1hdGgucm91bmQodC54MCksdC55MD1NYXRoLnJvdW5kKHQueTApLHQueDE9TWF0aC5yb3VuZCh0LngxKSx0LnkxPU1hdGgucm91bmQodC55MSl9LG5tPWZ1bmN0aW9uKHQsbixlLHIsaSl7Zm9yKHZhciBvLHU9dC5jaGlsZHJlbixhPS0xLGM9dS5sZW5ndGgscz10LnZhbHVlJiYoci1uKS90LnZhbHVlOysrYTxjOylvPXVbYV0sby55MD1lLG8ueTE9aSxvLngwPW4sby54MT1uKz1vLnZhbHVlKnN9LGVtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgdT10LmhlaWdodCsxO3JldHVybiB0LngwPXQueTA9aSx0LngxPWUsdC55MT1yL3UsdC5lYWNoQmVmb3JlKG4ocix1KSksbyYmdC5lYWNoQmVmb3JlKHRtKSx0fWZ1bmN0aW9uIG4odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmbm0oZSxlLngwLHQqKGUuZGVwdGgrMSkvbixlLngxLHQqKGUuZGVwdGgrMikvbik7dmFyIHI9ZS54MCxvPWUueTAsdT1lLngxLWksYT1lLnkxLWk7dTxyJiYocj11PShyK3UpLzIpLGE8byYmKG89YT0obythKS8yKSxlLngwPXIsZS55MD1vLGUueDE9dSxlLnkxPWF9fXZhciBlPTEscj0xLGk9MCxvPSExO3JldHVybiB0LnJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEhbix0KTpvfSx0LnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K25bMF0scj0rblsxXSx0KTpbZSxyXX0sdC5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStuLHQpOml9LHR9LHJtPSIkIixpbT17ZGVwdGg6LTF9LG9tPXt9LHVtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgcixpLG8sdSxhLGMscyxmPXQubGVuZ3RoLGw9bmV3IEFycmF5KGYpLGg9e307Zm9yKGk9MDtpPGY7KytpKXI9dFtpXSxhPWxbaV09bmV3IExvKHIpLG51bGwhPShjPW4ocixpLHQpKSYmKGMrPSIiKSYmKHM9cm0rKGEuaWQ9YyksaFtzXT1zIGluIGg/b206YSk7Zm9yKGk9MDtpPGY7KytpKWlmKGE9bFtpXSxjPWUodFtpXSxpLHQpLG51bGwhPWMmJihjKz0iIikpe2lmKHU9aFtybStjXSwhdSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrYyk7aWYodT09PW9tKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2MpO3UuY2hpbGRyZW4/dS5jaGlsZHJlbi5wdXNoKGEpOnUuY2hpbGRyZW49W2FdLGEucGFyZW50PXV9ZWxzZXtpZihvKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtvPWF9aWYoIW8pdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYoby5wYXJlbnQ9aW0sby5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLWZ9KS5lYWNoQmVmb3JlKFJvKSxvLnBhcmVudD1udWxsLGY+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIG99dmFyIG49dHUsZT1udTtyZXR1cm4gdC5pZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0kbyhlKSx0KTpufSx0LnBhcmVudElkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSRvKG4pLHQpOmV9LHR9O2N1LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKExvLnByb3RvdHlwZSk7dmFyIGFtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgcj1zdSh0KTtpZihyLmVhY2hBZnRlcihuKSxyLnBhcmVudC5tPS1yLnosci5lYWNoQmVmb3JlKGUpLGMpdC5lYWNoQmVmb3JlKGkpO2Vsc2V7dmFyIHM9dCxmPXQsbD10O3QuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0Lng8cy54JiYocz10KSx0Lng+Zi54JiYoZj10KSx0LmRlcHRoPmwuZGVwdGgmJihsPXQpfSk7dmFyIGg9cz09PWY/MTpvKHMsZikvMixwPWgtcy54LGQ9dS8oZi54K2grcCksdj1hLyhsLmRlcHRofHwxKTt0LmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC54PSh0LngrcCkqZCx0Lnk9dC5kZXB0aCp2fSl9cmV0dXJuIHR9ZnVuY3Rpb24gbih0KXt2YXIgbj10LmNoaWxkcmVuLGU9dC5wYXJlbnQuY2hpbGRyZW4saT10Lmk/ZVt0LmktMV06bnVsbDtpZihuKXt1dSh0KTt2YXIgdT0oblswXS56K25bbi5sZW5ndGgtMV0ueikvMjtpPyh0Lno9aS56K28odC5fLGkuXyksdC5tPXQuei11KTp0Lno9dX1lbHNlIGkmJih0Lno9aS56K28odC5fLGkuXykpO3QucGFyZW50LkE9cih0LGksdC5wYXJlbnQuQXx8ZVswXSl9ZnVuY3Rpb24gZSh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gcih0LG4sZSl7aWYobil7Zm9yKHZhciByLGk9dCx1PXQsYT1uLGM9aS5wYXJlbnQuY2hpbGRyZW5bMF0scz1pLm0sZj11Lm0sbD1hLm0saD1jLm07YT1pdShhKSxpPXJ1KGkpLGEmJmk7KWM9cnUoYyksdT1pdSh1KSx1LmE9dCxyPWEueitsLWkuei1zK28oYS5fLGkuXykscj4wJiYob3UoYXUoYSx0LGUpLHQscikscys9cixmKz1yKSxsKz1hLm0scys9aS5tLGgrPWMubSxmKz11Lm07YSYmIWl1KHUpJiYodS50PWEsdS5tKz1sLWYpLGkmJiFydShjKSYmKGMudD1pLGMubSs9cy1oLGU9dCl9cmV0dXJuIGV9ZnVuY3Rpb24gaSh0KXt0LngqPXUsdC55PXQuZGVwdGgqYX12YXIgbz1ldSx1PTEsYT0xLGM9bnVsbDtyZXR1cm4gdC5zZXBhcmF0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW4sdCk6b30sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSExLHU9K25bMF0sYT0rblsxXSx0KTpjP251bGw6W3UsYV19LHQubm9kZVNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ITAsdT0rblswXSxhPStuWzFdLHQpOmM/W3UsYV06bnVsbH0sdH0sY209ZnVuY3Rpb24odCxuLGUscixpKXtmb3IodmFyIG8sdT10LmNoaWxkcmVuLGE9LTEsYz11Lmxlbmd0aCxzPXQudmFsdWUmJihpLWUpL3QudmFsdWU7KythPGM7KW89dVthXSxvLngwPW4sby54MT1yLG8ueTA9ZSxvLnkxPWUrPW8udmFsdWUqc30sc209KDErTWF0aC5zcXJ0KDUpKS8yLGZtPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0LGUscixpLG8pe2Z1KG4sdCxlLHIsaSxvKX1yZXR1cm4gZS5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gdCgobj0rbik+MT9uOjEpfSxlfShzbSksbG09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiB0LngwPXQueTA9MCx0LngxPWksdC55MT1vLHQuZWFjaEJlZm9yZShuKSx1PVswXSxyJiZ0LmVhY2hCZWZvcmUodG0pLHR9ZnVuY3Rpb24gbih0KXt2YXIgbj11W3QuZGVwdGhdLHI9dC54MCtuLGk9dC55MCtuLG89dC54MS1uLGg9dC55MS1uO288ciYmKHI9bz0ocitvKS8yKSxoPGkmJihpPWg9KGkraCkvMiksdC54MD1yLHQueTA9aSx0LngxPW8sdC55MT1oLHQuY2hpbGRyZW4mJihuPXVbdC5kZXB0aCsxXT1hKHQpLzIscis9bCh0KS1uLGkrPWModCktbixvLT1zKHQpLW4saC09Zih0KS1uLG88ciYmKHI9bz0ocitvKS8yKSxoPGkmJihpPWg9KGkraCkvMiksZSh0LHIsaSxvLGgpKX12YXIgZT1mbSxyPSExLGk9MSxvPTEsdT1bMF0sYT1abyxjPVpvLHM9Wm8sZj1abyxsPVpvO3JldHVybiB0LnJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSEhbix0KTpyfSx0LnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K25bMF0sbz0rblsxXSx0KTpbaSxvXX0sdC50aWxlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSRvKG4pLHQpOmV9LHQucGFkZGluZz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90LnBhZGRpbmdJbm5lcihuKS5wYWRkaW5nT3V0ZXIobik6dC5wYWRkaW5nSW5uZXIoKX0sdC5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpReSgrbiksdCk6YX0sdC5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5wYWRkaW5nVG9wKG4pLnBhZGRpbmdSaWdodChuKS5wYWRkaW5nQm90dG9tKG4pLnBhZGRpbmdMZWZ0KG4pOnQucGFkZGluZ1RvcCgpfSx0LnBhZGRpbmdUb3A9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpReSgrbiksdCk6Y30sdC5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpReSgrbiksdCk6c30sdC5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246UXkoK24pLHQpOmZ9LHQucGFkZGluZ0xlZnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpReSgrbiksdCk6bH0sdH0saG09ZnVuY3Rpb24odCxuLGUscixpKXtmdW5jdGlvbiBvKHQsbixlLHIsaSx1LGEpe2lmKHQ+PW4tMSl7dmFyIHM9Y1t0XTtyZXR1cm4gcy54MD1yLHMueTA9aSxzLngxPXUscy55MT1hLHZvaWQgMH1mb3IodmFyIGw9Zlt0XSxoPWUvMitsLHA9dCsxLGQ9bi0xO3A8ZDspe3ZhciB2PXArZD4+PjE7Zlt2XTxoP3A9disxOmQ9dn12YXIgXz1mW3BdLWwsZz1lLV87aWYoYS1pPnUtcil7dmFyIHk9KGkqZythKl8pL2U7byh0LHAsXyxyLGksdSx5KSxvKHAsbixnLHIseSx1LGEpfWVsc2V7dmFyIG09KHIqZyt1Kl8pL2U7byh0LHAsXyxyLGksbSxhKSxvKHAsbixnLG0saSx1LGEpfX12YXIgdSxhLGM9dC5jaGlsZHJlbixzPWMubGVuZ3RoLGY9bmV3IEFycmF5KHMrMSk7Zm9yKGZbMF09YT11PTA7dTxzOysrdSlmW3UrMV09YSs9Y1t1XS52YWx1ZTtvKDAscyx0LnZhbHVlLG4sZSxyLGkpfSxwbT1mdW5jdGlvbih0LG4sZSxyLGkpeygxJnQuZGVwdGg/Y206bm0pKHQsbixlLHIsaSl9LGRtPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0LGUscixpLG8pe2lmKCh1PXQuX3NxdWFyaWZ5KSYmdS5yYXRpbz09PW4pZm9yKHZhciB1LGEsYyxzLGYsbD0tMSxoPXUubGVuZ3RoLHA9dC52YWx1ZTsrK2w8aDspe2ZvcihhPXVbbF0sYz1hLmNoaWxkcmVuLHM9YS52YWx1ZT0wLGY9Yy5sZW5ndGg7czxmOysrcylhLnZhbHVlKz1jW3NdLnZhbHVlO2EuZGljZT9ubShhLGUscixpLHIrPShvLXIpKmEudmFsdWUvcCk6Y20oYSxlLHIsZSs9KGktZSkqYS52YWx1ZS9wLG8pLHAtPWEudmFsdWV9ZWxzZSB0Ll9zcXVhcmlmeT11PWZ1KG4sdCxlLHIsaSxvKSx1LnJhdGlvPW59cmV0dXJuIGUucmF0aW89ZnVuY3Rpb24obil7cmV0dXJuIHQoKG49K24pPjE/bjoxKX0sZX0oc20pLHZtPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPS0xLHI9dC5sZW5ndGgsaT10W3ItMV0sbz0wOysrZTxyOyluPWksaT10W2VdLG8rPW5bMV0qaVswXS1uWzBdKmlbMV07cmV0dXJuIG8vMgp9LF9tPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9LTEsaT10Lmxlbmd0aCxvPTAsdT0wLGE9dFtpLTFdLGM9MDsrK3I8aTspbj1hLGE9dFtyXSxjKz1lPW5bMF0qYVsxXS1hWzBdKm5bMV0sbys9KG5bMF0rYVswXSkqZSx1Kz0oblsxXSthWzFdKSplO3JldHVybiBjKj0zLFtvL2MsdS9jXX0sZ209ZnVuY3Rpb24odCxuLGUpe3JldHVybihuWzBdLXRbMF0pKihlWzFdLXRbMV0pLShuWzFdLXRbMV0pKihlWzBdLXRbMF0pfSx5bT1mdW5jdGlvbih0KXtpZigoZT10Lmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgbixlLHI9bmV3IEFycmF5KGUpLGk9bmV3IEFycmF5KGUpO2ZvcihuPTA7bjxlOysrbilyW25dPVsrdFtuXVswXSwrdFtuXVsxXSxuXTtmb3Ioci5zb3J0KGx1KSxuPTA7bjxlOysrbilpW25dPVtyW25dWzBdLC1yW25dWzFdXTt2YXIgbz1odShyKSx1PWh1KGkpLGE9dVswXT09PW9bMF0sYz11W3UubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxzPVtdO2ZvcihuPW8ubGVuZ3RoLTE7bj49MDstLW4pcy5wdXNoKHRbcltvW25dXVsyXV0pO2ZvcihuPSthO248dS5sZW5ndGgtYzsrK24pcy5wdXNoKHRbclt1W25dXVsyXV0pO3JldHVybiBzfSxtbT1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZSxyLGk9dC5sZW5ndGgsbz10W2ktMV0sdT1uWzBdLGE9blsxXSxjPW9bMF0scz1vWzFdLGY9ITEsbD0wO2w8aTsrK2wpbz10W2xdLGU9b1swXSxyPW9bMV0scj5hIT1zPmEmJnU8KGMtZSkqKGEtcikvKHMtcikrZSYmKGY9IWYpLGM9ZSxzPXI7cmV0dXJuIGZ9LHhtPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9LTEsaT10Lmxlbmd0aCxvPXRbaS0xXSx1PW9bMF0sYT1vWzFdLGM9MDsrK3I8aTspbj11LGU9YSxvPXRbcl0sdT1vWzBdLGE9b1sxXSxuLT11LGUtPWEsYys9TWF0aC5zcXJ0KG4qbitlKmUpO3JldHVybiBjfSxibT1bXS5zbGljZSx3bT17fTtwdS5wcm90b3R5cGU9bXUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpwdSxkZWZlcjpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8dGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3I7aWYobnVsbCE9dGhpcy5fZXJyb3IpcmV0dXJuIHRoaXM7dmFyIG49Ym0uY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIG4ucHVzaCh0KSwrK3RoaXMuX3dhaXRpbmcsdGhpcy5fdGFza3MucHVzaChuKSxkdSh0aGlzKSx0aGlzfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiBudWxsPT10aGlzLl9lcnJvciYmZ3UodGhpcyxuZXcgRXJyb3IoImFib3J0IikpLHRoaXN9LGF3YWl0OmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy5fY2FsbD1mdW5jdGlvbihuLGUpe3QuYXBwbHkobnVsbCxbbl0uY29uY2F0KGUpKX0seXUodGhpcyksdGhpc30sYXdhaXRBbGw6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHR8fHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLl9jYWxsPXQseXUodGhpcyksdGhpc319O3ZhciBNbT1mdW5jdGlvbih0LG4pe3JldHVybiB0PW51bGw9PXQ/MDordCxuPW51bGw9PW4/MTorbiwxPT09YXJndW1lbnRzLmxlbmd0aD8obj10LHQ9MCk6bi09dCxmdW5jdGlvbigpe3JldHVybiBNYXRoLnJhbmRvbSgpKm4rdH19LFRtPWZ1bmN0aW9uKHQsbil7dmFyIGUscjtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgaTtpZihudWxsIT1lKWk9ZSxlPW51bGw7ZWxzZSBkbyBlPTIqTWF0aC5yYW5kb20oKS0xLGk9MipNYXRoLnJhbmRvbSgpLTEscj1lKmUraSppO3doaWxlKCFyfHxyPjEpO3JldHVybiB0K24qaSpNYXRoLnNxcnQoLTIqTWF0aC5sb2cocikvcil9fSxrbT1mdW5jdGlvbigpe3ZhciB0PVRtLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19LFNtPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj0wLGU9MDtlPHQ7KytlKW4rPU1hdGgucmFuZG9tKCk7cmV0dXJuIG59fSxObT1mdW5jdGlvbih0KXt2YXIgbj1TbSh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbigpL3R9fSxFbT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1NYXRoLnJhbmRvbSgpKS90fX0sQW09ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKHQpe3ZhciBuLGU9cy5zdGF0dXM7aWYoIWUmJmJ1KHMpfHxlPj0yMDAmJmU8MzAwfHwzMDQ9PT1lKXtpZihvKXRyeXtuPW8uY2FsbChyLHMpfWNhdGNoKHQpe3JldHVybiB2b2lkIGEuY2FsbCgiZXJyb3IiLHIsdCl9ZWxzZSBuPXM7YS5jYWxsKCJsb2FkIixyLG4pfWVsc2UgYS5jYWxsKCJlcnJvciIscix0KX12YXIgcixpLG8sdSxhPWQoImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIpLGM9WWUoKSxzPW5ldyBYTUxIdHRwUmVxdWVzdCxmPW51bGwsbD1udWxsLGg9MDtpZigidW5kZWZpbmVkIj09dHlwZW9mIFhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIHN8fCEvXihodHRwKHMpPzopP1wvXC8vLnRlc3QodCl8fChzPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBzP3Mub25sb2FkPXMub25lcnJvcj1zLm9udGltZW91dD1lOnMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKHQpe3MucmVhZHlTdGF0ZT4zJiZlKHQpfSxzLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24odCl7YS5jYWxsKCJwcm9ncmVzcyIscix0KX0scj17aGVhZGVyOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9KHQrIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP2MuZ2V0KHQpOihudWxsPT1uP2MucmVtb3ZlKHQpOmMuc2V0KHQsbisiIikscil9LG1pbWVUeXBlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXQ/bnVsbDp0KyIiLHIpOml9LHJlc3BvbnNlVHlwZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LHIpOnV9LHRpbWVvdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3Qscik6aH0sdXNlcjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP2Y6KGY9bnVsbD09dD9udWxsOnQrIiIscil9LHBhc3N3b3JkOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/bDoobD1udWxsPT10P251bGw6dCsiIixyKX0scmVzcG9uc2U6ZnVuY3Rpb24odCl7cmV0dXJuIG89dCxyfSxnZXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gci5zZW5kKCJHRVQiLHQsbil9LHBvc3Q6ZnVuY3Rpb24odCxuKXtyZXR1cm4gci5zZW5kKCJQT1NUIix0LG4pfSxzZW5kOmZ1bmN0aW9uKG4sZSxvKXtyZXR1cm4gcy5vcGVuKG4sdCwhMCxmLGwpLG51bGw9PWl8fGMuaGFzKCJhY2NlcHQiKXx8Yy5zZXQoImFjY2VwdCIsaSsiLCovKiIpLHMuc2V0UmVxdWVzdEhlYWRlciYmYy5lYWNoKGZ1bmN0aW9uKHQsbil7cy5zZXRSZXF1ZXN0SGVhZGVyKG4sdCl9KSxudWxsIT1pJiZzLm92ZXJyaWRlTWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZShpKSxudWxsIT11JiYocy5yZXNwb25zZVR5cGU9dSksaD4wJiYocy50aW1lb3V0PWgpLG51bGw9PW8mJiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYobz1lLGU9bnVsbCksbnVsbCE9byYmMT09PW8ubGVuZ3RoJiYobz14dShvKSksbnVsbCE9byYmci5vbigiZXJyb3IiLG8pLm9uKCJsb2FkIixmdW5jdGlvbih0KXtvKG51bGwsdCl9KSxhLmNhbGwoImJlZm9yZXNlbmQiLHIscykscy5zZW5kKG51bGw9PWU/bnVsbDplKSxyfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiBzLmFib3J0KCkscn0sb246ZnVuY3Rpb24oKXt2YXIgdD1hLm9uLmFwcGx5KGEsYXJndW1lbnRzKTtyZXR1cm4gdD09PWE/cjp0fX0sbnVsbCE9bil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK24pO3JldHVybiByLmdldChuKX1yZXR1cm4gcn0sQ209ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgaT1BbShlKS5taW1lVHlwZSh0KS5yZXNwb25zZShuKTtpZihudWxsIT1yKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrcik7cmV0dXJuIGkuZ2V0KHIpfXJldHVybiBpfX0sem09Q20oInRleHQvaHRtbCIsZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHQucmVzcG9uc2VUZXh0KX0pLFBtPUNtKCJhcHBsaWNhdGlvbi9qc29uIixmdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5wYXJzZSh0LnJlc3BvbnNlVGV4dCl9KSxSbT1DbSgidGV4dC9wbGFpbiIsZnVuY3Rpb24odCl7cmV0dXJuIHQucmVzcG9uc2VUZXh0fSksTG09Q20oImFwcGxpY2F0aW9uL3htbCIsZnVuY3Rpb24odCl7dmFyIG49dC5yZXNwb25zZVhNTDtpZighbil0aHJvdyBuZXcgRXJyb3IoInBhcnNlIGVycm9yIik7cmV0dXJuIG59KSxxbT1mdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihlLHIsaSl7YXJndW1lbnRzLmxlbmd0aDwzJiYoaT1yLHI9bnVsbCk7dmFyIG89QW0oZSkubWltZVR5cGUodCk7cmV0dXJuIG8ucm93PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP28ucmVzcG9uc2Uod3UobixyPXQpKTpyfSxvLnJvdyhyKSxpP28uZ2V0KGkpOm99fSxVbT1xbSgidGV4dC9jc3YiLFFkKSxEbT1xbSgidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIscnYpLE9tPUFycmF5LnByb3RvdHlwZSxGbT1PbS5tYXAsSW09T20uc2xpY2UsWW09e25hbWU6ImltcGxpY2l0In0sQm09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxqbT1mdW5jdGlvbih0KXtyZXR1cm4rdH0sSG09WzAsMV0sWG09ZnVuY3Rpb24obixlLGkpe3ZhciBvLHU9blswXSxhPW5bbi5sZW5ndGgtMV0sYz1yKHUsYSxudWxsPT1lPzEwOmUpO3N3aXRjaChpPWxyKG51bGw9PWk/IixmIjppKSxpLnR5cGUpe2Nhc2UicyI6dmFyIHM9TWF0aC5tYXgoTWF0aC5hYnModSksTWF0aC5hYnMoYSkpO3JldHVybiBudWxsIT1pLnByZWNpc2lvbnx8aXNOYU4obz1XdihjLHMpKXx8KGkucHJlY2lzaW9uPW8pLHQuZm9ybWF0UHJlZml4KGkscyk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbCE9aS5wcmVjaXNpb258fGlzTmFOKG89JHYoYyxNYXRoLm1heChNYXRoLmFicyh1KSxNYXRoLmFicyhhKSkpKXx8KGkucHJlY2lzaW9uPW8tKCJlIj09PWkudHlwZSkpO2JyZWFrO2Nhc2UiZiI6Y2FzZSIlIjpudWxsIT1pLnByZWNpc2lvbnx8aXNOYU4obz1WdihjKSl8fChpLnByZWNpc2lvbj1vLTIqKCIlIj09PWkudHlwZSkpfXJldHVybiB0LmZvcm1hdChpKX0sVm09ZnVuY3Rpb24odCxuKXt0PXQuc2xpY2UoKTt2YXIgZSxyPTAsaT10Lmxlbmd0aC0xLG89dFtyXSx1PXRbaV07cmV0dXJuIHU8byYmKGU9cixyPWksaT1lLGU9byxvPXUsdT1lKSx0W3JdPW4uZmxvb3IobyksdFtpXT1uLmNlaWwodSksdH0sV209bmV3IERhdGUsJG09bmV3IERhdGUsWm09R3UoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLXR9KTtabS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP0d1KGZ1bmN0aW9uKG4pe24uc2V0VGltZShNYXRoLmZsb29yKG4vdCkqdCl9LGZ1bmN0aW9uKG4sZSl7bi5zZXRUaW1lKCtuK2UqdCl9LGZ1bmN0aW9uKG4sZSl7cmV0dXJuKGUtbikvdH0pOlptOm51bGx9O3ZhciBHbT1abS5yYW5nZSxKbT0xZTMsUW09NmU0LEttPTM2ZTUsdHg9ODY0ZTUsbng9NjA0OGU1LGV4PUd1KGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvSm0pKkptKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrbipKbSl9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvSm19LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pLHJ4PWV4LnJhbmdlLGl4PUd1KGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvUW0pKlFtKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrbipRbSl9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvUW19LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pLG94PWl4LnJhbmdlLHV4PUd1KGZ1bmN0aW9uKHQpe3ZhciBuPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSpRbSVLbTtuPDAmJihuKz1LbSksdC5zZXRUaW1lKE1hdGguZmxvb3IoKCt0LW4pL0ttKSpLbStuKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrbipLbSl9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvS219LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSxheD11eC5yYW5nZSxjeD1HdShmdW5jdGlvbih0KXt0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0RGF0ZSh0LmdldERhdGUoKStuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10LShuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpRbSkvdHh9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSksc3g9Y3gucmFuZ2UsZng9SnUoMCksbHg9SnUoMSksaHg9SnUoMikscHg9SnUoMyksZHg9SnUoNCksdng9SnUoNSksX3g9SnUoNiksZ3g9ZngucmFuZ2UseXg9bHgucmFuZ2UsbXg9aHgucmFuZ2UseHg9cHgucmFuZ2UsYng9ZHgucmFuZ2Usd3g9dngucmFuZ2UsTXg9X3gucmFuZ2UsVHg9R3UoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKG4uZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSksa3g9VHgucmFuZ2UsU3g9R3UoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KTtTeC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP0d1KGZ1bmN0aW9uKG4pe24uc2V0RnVsbFllYXIoTWF0aC5mbG9vcihuLmdldEZ1bGxZZWFyKCkvdCkqdCksbi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sZSl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrZSp0KX0pOm51bGx9O3ZhciBOeD1TeC5yYW5nZSxFeD1HdShmdW5jdGlvbih0KXt0LnNldFVUQ1NlY29uZHMoMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldFRpbWUoK3QrbipRbSl9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvUW19LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pLEF4PUV4LnJhbmdlLEN4PUd1KGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24qS20pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL0ttfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENIb3VycygpfSkseng9Q3gucmFuZ2UsUHg9R3UoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvdHh9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSksUng9UHgucmFuZ2UsTHg9UXUoMCkscXg9UXUoMSksVXg9UXUoMiksRHg9UXUoMyksT3g9UXUoNCksRng9UXUoNSksSXg9UXUoNiksWXg9THgucmFuZ2UsQng9cXgucmFuZ2Usang9VXgucmFuZ2UsSHg9RHgucmFuZ2UsWHg9T3gucmFuZ2UsVng9RngucmFuZ2UsV3g9SXgucmFuZ2UsJHg9R3UoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRVVENNb250aCh0LmdldFVUQ01vbnRoKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKG4uZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSksWng9JHgucmFuZ2UsR3g9R3UoZnVuY3Rpb24odCl7dC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuIG4uZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCl9KTtHeC5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP0d1KGZ1bmN0aW9uKG4pe24uc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihuLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksbi5zZXRVVENNb250aCgwLDEpLG4uc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sZSl7bi5zZXRVVENGdWxsWWVhcihuLmdldFVUQ0Z1bGxZZWFyKCkrZSp0KX0pOm51bGx9O3ZhciBKeCxReD1HeC5yYW5nZSxLeD17Ii0iOiIiLF86IiAiLDA6IjAifSx0Yj0vXlxzKlxkKy8sbmI9L14lLyxlYj0vW1xcXF5cJFwqXCtcP1x8XFtcXVwoXClcLlx7XH1dL2c7R2Eoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgcmI9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIsaWI9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/SmE6dC51dGNGb3JtYXQocmIpLG9iPStuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/UWE6dC51dGNQYXJzZShyYiksdWI9MWUzLGFiPTYwKnViLGNiPTYwKmFiLHNiPTI0KmNiLGZiPTcqc2IsbGI9MzAqc2IsaGI9MzY1KnNiLHBiPWZ1bmN0aW9uKCl7cmV0dXJuIG5jKFN4LFR4LGZ4LGN4LHV4LGl4LGV4LFptLHQudGltZUZvcm1hdCkuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pfSxkYj1mdW5jdGlvbigpe3JldHVybiBuYyhHeCwkeCxMeCxQeCxDeCxFeCxleCxabSx0LnV0Y0Zvcm1hdCkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pfSx2Yj1mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXRjaCgvLns2fS9nKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiMiK3R9KX0sX2I9dmIoIjFmNzdiNGZmN2YwZTJjYTAyY2Q2MjcyODk0NjdiZDhjNTY0YmUzNzdjMjdmN2Y3ZmJjYmQyMjE3YmVjZiIpLGdiPXZiKCIzOTNiNzk1MjU0YTM2YjZlY2Y5YzllZGU2Mzc5Mzk4Y2EyNTJiNWNmNmJjZWRiOWM4YzZkMzFiZDllMzllN2JhNTJlN2NiOTQ4NDNjMzlhZDQ5NGFkNjYxNmJlNzk2OWM3YjQxNzNhNTUxOTRjZTZkYmRkZTllZDYiKSx5Yj12YigiMzE4MmJkNmJhZWQ2OWVjYWUxYzZkYmVmZTY1NTBkZmQ4ZDNjZmRhZTZiZmRkMGEyMzFhMzU0NzRjNDc2YTFkOTliYzdlOWMwNzU2YmIxOWU5YWM4YmNiZGRjZGFkYWViNjM2MzYzOTY5Njk2YmRiZGJkZDlkOWQ5IiksbWI9dmIoIjFmNzdiNGFlYzdlOGZmN2YwZWZmYmI3ODJjYTAyYzk4ZGY4YWQ2MjcyOGZmOTg5Njk0NjdiZGM1YjBkNThjNTY0YmM0OWM5NGUzNzdjMmY3YjZkMjdmN2Y3ZmM3YzdjN2JjYmQyMmRiZGI4ZDE3YmVjZjllZGFlNSIpLHhiPVZoKFZ0KDMwMCwuNSwwKSxWdCgtMjQwLC41LDEpKSxiYj1WaChWdCgtMTAwLC43NSwuMzUpLFZ0KDgwLDEuNSwuOCkpLHdiPVZoKFZ0KDI2MCwuNzUsLjM1KSxWdCg4MCwxLjUsLjgpKSxNYj1WdCgpLFRiPWZ1bmN0aW9uKHQpeyh0PDB8fHQ+MSkmJih0LT1NYXRoLmZsb29yKHQpKTt2YXIgbj1NYXRoLmFicyh0LS41KTtyZXR1cm4gTWIuaD0zNjAqdC0xMDAsTWIucz0xLjUtMS41Km4sTWIubD0uOC0uOSpuLE1iKyIifSxrYj1lYyh2YigiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLFNiPWVjKHZiKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksTmI9ZWModmIoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxFYj1lYyh2YigiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpLEFiPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sQ2I9TWF0aC5hYnMsemI9TWF0aC5hdGFuMixQYj1NYXRoLmNvcyxSYj1NYXRoLm1heCxMYj1NYXRoLm1pbixxYj1NYXRoLnNpbixVYj1NYXRoLnNxcnQsRGI9MWUtMTIsT2I9TWF0aC5QSSxGYj1PYi8yLEliPTIqT2IsWWI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHQscyxmPStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxsPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLUZiLHA9dS5hcHBseSh0aGlzLGFyZ3VtZW50cyktRmIsZD1DYihwLWgpLHY9cD5oO2lmKGN8fChjPXQ9TGUoKSksbDxmJiYocz1sLGw9ZixmPXMpLGw+RGIpaWYoZD5JYi1EYiljLm1vdmVUbyhsKlBiKGgpLGwqcWIoaCkpLGMuYXJjKDAsMCxsLGgscCwhdiksZj5EYiYmKGMubW92ZVRvKGYqUGIocCksZipxYihwKSksYy5hcmMoMCwwLGYscCxoLHYpKTtlbHNle3ZhciBfLGcseT1oLG09cCx4PWgsYj1wLHc9ZCxNPWQsVD1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLGs9VD5EYiYmKGk/K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpOlViKGYqZitsKmwpKSxTPUxiKENiKGwtZikvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLE49UyxFPVM7aWYoaz5EYil7dmFyIEE9b2Moay9mKnFiKFQpKSxDPW9jKGsvbCpxYihUKSk7KHctPTIqQSk+RGI/KEEqPXY/MTotMSx4Kz1BLGItPUEpOih3PTAseD1iPShoK3ApLzIpLChNLT0yKkMpPkRiPyhDKj12PzE6LTEseSs9QyxtLT1DKTooTT0wLHk9bT0oaCtwKS8yKX12YXIgej1sKlBiKHkpLFA9bCpxYih5KSxSPWYqUGIoYiksTD1mKnFiKGIpO2lmKFM+RGIpe3ZhciBxPWwqUGIobSksVT1sKnFiKG0pLEQ9ZipQYih4KSxPPWYqcWIoeCk7aWYoZDxPYil7dmFyIEY9dz5EYj9sYyh6LFAsRCxPLHEsVSxSLEwpOltSLExdLEk9ei1GWzBdLFk9UC1GWzFdLEI9cS1GWzBdLGo9VS1GWzFdLEg9MS9xYihpYygoSSpCK1kqaikvKFViKEkqSStZKlkpKlViKEIqQitqKmopKSkvMiksWD1VYihGWzBdKkZbMF0rRlsxXSpGWzFdKTtOPUxiKFMsKGYtWCkvKEgtMSkpLEU9TGIoUywobC1YKS8oSCsxKSl9fU0+RGI/RT5EYj8oXz1oYyhELE8seixQLGwsRSx2KSxnPWhjKHEsVSxSLEwsbCxFLHYpLGMubW92ZVRvKF8uY3grXy54MDEsXy5jeStfLnkwMSksRTxTP2MuYXJjKF8uY3gsXy5jeSxFLHpiKF8ueTAxLF8ueDAxKSx6YihnLnkwMSxnLngwMSksIXYpOihjLmFyYyhfLmN4LF8uY3ksRSx6YihfLnkwMSxfLngwMSksemIoXy55MTEsXy54MTEpLCF2KSxjLmFyYygwLDAsbCx6YihfLmN5K18ueTExLF8uY3grXy54MTEpLHpiKGcuY3krZy55MTEsZy5jeCtnLngxMSksIXYpLGMuYXJjKGcuY3gsZy5jeSxFLHpiKGcueTExLGcueDExKSx6YihnLnkwMSxnLngwMSksIXYpKSk6KGMubW92ZVRvKHosUCksYy5hcmMoMCwwLGwseSxtLCF2KSk6Yy5tb3ZlVG8oeixQKSxmPkRiJiZ3PkRiP04+RGI/KF89aGMoUixMLHEsVSxmLC1OLHYpLGc9aGMoeixQLEQsTyxmLC1OLHYpLGMubGluZVRvKF8uY3grXy54MDEsXy5jeStfLnkwMSksTjxTP2MuYXJjKF8uY3gsXy5jeSxOLHpiKF8ueTAxLF8ueDAxKSx6YihnLnkwMSxnLngwMSksIXYpOihjLmFyYyhfLmN4LF8uY3ksTix6YihfLnkwMSxfLngwMSksemIoXy55MTEsXy54MTEpLCF2KSxjLmFyYygwLDAsZix6YihfLmN5K18ueTExLF8uY3grXy54MTEpLHpiKGcuY3krZy55MTEsZy5jeCtnLngxMSksdiksYy5hcmMoZy5jeCxnLmN5LE4semIoZy55MTEsZy54MTEpLHpiKGcueTAxLGcueDAxKSwhdikpKTpjLmFyYygwLDAsZixiLHgsdik6Yy5saW5lVG8oUixMKX1lbHNlIGMubW92ZVRvKDAsMCk7aWYoYy5jbG9zZVBhdGgoKSx0KXJldHVybiBjPW51bGwsdCsiInx8bnVsbH12YXIgbj11YyxlPWFjLHI9QWIoMCksaT1udWxsLG89Y2MsdT1zYyxhPWZjLGM9bnVsbDtyZXR1cm4gdC5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciB0PSgrbi5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMixyPSgrby5hcHBseSh0aGlzLGFyZ3VtZW50cykrICt1LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1PYi8yO3JldHVybltQYihyKSp0LHFiKHIpKnRdfSx0LmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6QWIoK2UpLHQpOm59LHQub3V0ZXJSYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpBYigrbiksdCk6ZX0sdC5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpBYigrbiksdCk6cn0sdC5wYWRSYWRpdXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09bj9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiBuP246QWIoK24pLHQpOml9LHQuc3RhcnRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkFiKCtuKSx0KTpvfSx0LmVuZEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246QWIoK24pLHQpOnV9LHQucGFkQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpBYigrbiksdCk6YX0sdC5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW51bGw9PW4/bnVsbDpuLHQpOmN9LHR9O3BjLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pfX19O3ZhciBCYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHBjKHQpfSxqYj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGEsYyxzLGY9dC5sZW5ndGgsbD0hMTtmb3IobnVsbD09aSYmKHU9byhzPUxlKCkpKSxhPTA7YTw9ZjsrK2EpIShhPGYmJnIoYz10W2FdLGEsdCkpPT09bCYmKChsPSFsKT91LmxpbmVTdGFydCgpOnUubGluZUVuZCgpKSxsJiZ1LnBvaW50KCtuKGMsYSx0KSwrZShjLGEsdCkpO2lmKHMpcmV0dXJuIHU9bnVsbCxzKyIifHxudWxsfXZhciBuPWRjLGU9dmMscj1BYighMCksaT1udWxsLG89QmIsdT1udWxsO3JldHVybiB0Lng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpBYigrZSksdCk6bn0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246QWIoK24pLHQpOmV9LHQuZGVmaW5lZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkFiKCEhbiksdCk6cn0sdC5jdXJ2ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1uLG51bGwhPWkmJih1PW8oaSkpLHQpOm99LHQuY29udGV4dD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09bj9pPXU9bnVsbDp1PW8oaT1uKSx0KTppfSx0fSxIYj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIG4sZixsLGgscCxkPXQubGVuZ3RoLHY9ITEsXz1uZXcgQXJyYXkoZCksZz1uZXcgQXJyYXkoZCk7Zm9yKG51bGw9PWEmJihzPWMocD1MZSgpKSksbj0wO248PWQ7KytuKXtpZighKG48ZCYmdShoPXRbbl0sbix0KSk9PT12KWlmKHY9IXYpZj1uLHMuYXJlYVN0YXJ0KCkscy5saW5lU3RhcnQoKTtlbHNle2ZvcihzLmxpbmVFbmQoKSxzLmxpbmVTdGFydCgpLGw9bi0xO2w+PWY7LS1sKXMucG9pbnQoX1tsXSxnW2xdKTtzLmxpbmVFbmQoKSxzLmFyZWFFbmQoKX12JiYoX1tuXT0rZShoLG4sdCksZ1tuXT0raShoLG4sdCkscy5wb2ludChyPytyKGgsbix0KTpfW25dLG8/K28oaCxuLHQpOmdbbl0pKX1pZihwKXJldHVybiBzPW51bGwscCsiInx8bnVsbH1mdW5jdGlvbiBuKCl7cmV0dXJuIGpiKCkuZGVmaW5lZCh1KS5jdXJ2ZShjKS5jb250ZXh0KGEpfXZhciBlPWRjLHI9bnVsbCxpPUFiKDApLG89dmMsdT1BYighMCksYT1udWxsLGM9QmIscz1udWxsO3JldHVybiB0Lng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpBYigrbikscj1udWxsLHQpOmV9LHQueDA9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpBYigrbiksdCk6ZX0sdC54MT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1uP251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpBYigrbiksdCk6cn0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246QWIoK24pLG89bnVsbCx0KTppfSx0LnkwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246QWIoK24pLHQpOml9LHQueTE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bnVsbD09bj9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiBuP246QWIoK24pLHQpOm99LHQubGluZVgwPXQubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIG4oKS54KGUpLnkoaSl9LHQubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIG4oKS54KGUpLnkobyl9LHQubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIG4oKS54KHIpLnkoaSl9LHQuZGVmaW5lZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkFiKCEhbiksdCk6dX0sdC5jdXJ2ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1uLG51bGwhPWEmJihzPWMoYSkpLHQpOmN9LHQuY29udGV4dD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09bj9hPXM9bnVsbDpzPWMoYT1uKSx0KTphfSx0fSxYYj1mdW5jdGlvbih0LG4pe3JldHVybiBuPHQ/LTE6bj50PzE6bj49dD8wOk5hTn0sVmI9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LFdiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgYSxjLHMsZixsLGg9dC5sZW5ndGgscD0wLGQ9bmV3IEFycmF5KGgpLHY9bmV3IEFycmF5KGgpLF89K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpLGc9TWF0aC5taW4oSWIsTWF0aC5tYXgoLUliLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpLV8pKSx5PU1hdGgubWluKE1hdGguYWJzKGcpL2gsdS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG09eSooZzwwPy0xOjEpO2ZvcihhPTA7YTxoOysrYSkobD12W2RbYV09YV09K24odFthXSxhLHQpKT4wJiYocCs9bCk7Zm9yKG51bGwhPWU/ZC5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodlt0XSx2W25dKX0pOm51bGwhPXImJmQuc29ydChmdW5jdGlvbihuLGUpe3JldHVybiByKHRbbl0sdFtlXSl9KSxhPTAscz1wPyhnLWgqbSkvcDowO2E8aDsrK2EsXz1mKWM9ZFthXSxsPXZbY10sZj1fKyhsPjA/bCpzOjApK20sdltjXT17ZGF0YTp0W2NdLGluZGV4OmEsdmFsdWU6bCxzdGFydEFuZ2xlOl8sZW5kQW5nbGU6ZixwYWRBbmdsZTp5fTtyZXR1cm4gdn12YXIgbj1WYixlPVhiLHI9bnVsbCxpPUFiKDApLG89QWIoSWIpLHU9QWIoMCk7cmV0dXJuIHQudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpBYigrZSksdCk6bn0sdC5zb3J0VmFsdWVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4scj1udWxsLHQpOmV9LHQuc29ydD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLGU9bnVsbCx0KTpyfSx0LnN0YXJ0QW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpBYigrbiksdCk6aX0sdC5lbmRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkFiKCtuKSx0KTpvfSx0LnBhZEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246QWIoK24pLHQpOnV9LHR9LCRiPWdjKEJiKTtfYy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLl9jdXJ2ZS5wb2ludChuKk1hdGguc2luKHQpLG4qLU1hdGguY29zKHQpKX19O3ZhciBaYj1mdW5jdGlvbigpe3JldHVybiB5YyhqYigpLmN1cnZlKCRiKSl9LEdiPWZ1bmN0aW9uKCl7dmFyIHQ9SGIoKS5jdXJ2ZSgkYiksbj10LmN1cnZlLGU9dC5saW5lWDAscj10LmxpbmVYMSxpPXQubGluZVkwLG89dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiB5YyhlKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4geWMocigpKX0sZGVsZXRlIHQubGluZVgxLHQubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIHljKGkoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiB5YyhvKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKGdjKHQpKTpuKCkuX2N1cnZlfSx0fSxKYj17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydChuL09iKTt0Lm1vdmVUbyhlLDApLHQuYXJjKDAsMCxlLDAsSWIpfX0sUWI9e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQobi81KS8yO3QubW92ZVRvKC0zKmUsLWUpLHQubGluZVRvKC1lLC1lKSx0LmxpbmVUbygtZSwtMyplKSx0LmxpbmVUbyhlLC0zKmUpLHQubGluZVRvKGUsLWUpLHQubGluZVRvKDMqZSwtZSksdC5saW5lVG8oMyplLGUpLHQubGluZVRvKGUsZSksdC5saW5lVG8oZSwzKmUpLHQubGluZVRvKC1lLDMqZSksdC5saW5lVG8oLWUsZSksdC5saW5lVG8oLTMqZSxlKSx0LmNsb3NlUGF0aCgpfX0sS2I9TWF0aC5zcXJ0KDEvMyksdHc9MipLYixudz17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydChuL3R3KSxyPWUqS2I7dC5tb3ZlVG8oMCwtZSksdC5saW5lVG8ociwwKSx0LmxpbmVUbygwLGUpLHQubGluZVRvKC1yLDApLHQuY2xvc2VQYXRoKCl9fSxldz0uODkwODEzMDkxNTI5Mjg1Mixydz1NYXRoLnNpbihPYi8xMCkvTWF0aC5zaW4oNypPYi8xMCksaXc9TWF0aC5zaW4oSWIvMTApKnJ3LG93PS1NYXRoLmNvcyhJYi8xMCkqcncsdXc9e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQobipldykscj1pdyplLGk9b3cqZTt0Lm1vdmVUbygwLC1lKSx0LmxpbmVUbyhyLGkpO2Zvcih2YXIgbz0xO288NTsrK28pe3ZhciB1PUliKm8vNSxhPU1hdGguY29zKHUpLGM9TWF0aC5zaW4odSk7dC5saW5lVG8oYyplLC1hKmUpLHQubGluZVRvKGEqci1jKmksYypyK2EqaSl9dC5jbG9zZVBhdGgoKX19LGF3PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4pLHI9LWUvMjt0LnJlY3QocixyLGUsZSl9fSxjdz1NYXRoLnNxcnQoMyksc3c9e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT0tTWF0aC5zcXJ0KG4vKDMqY3cpKTt0Lm1vdmVUbygwLDIqZSksdC5saW5lVG8oLWN3KmUsLWUpLHQubGluZVRvKGN3KmUsLWUpLHQuY2xvc2VQYXRoKCl9fSxmdz0tLjUsbHc9TWF0aC5zcXJ0KDMpLzIsaHc9MS9NYXRoLnNxcnQoMTIpLHB3PTMqKGh3LzIrMSksZHc9e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQobi9wdykscj1lLzIsaT1lKmh3LG89cix1PWUqaHcrZSxhPS1vLGM9dTt0Lm1vdmVUbyhyLGkpLHQubGluZVRvKG8sdSksdC5saW5lVG8oYSxjKSx0LmxpbmVUbyhmdypyLWx3KmksbHcqcitmdyppKSx0LmxpbmVUbyhmdypvLWx3KnUsbHcqbytmdyp1KSx0LmxpbmVUbyhmdyphLWx3KmMsbHcqYStmdypjKSx0LmxpbmVUbyhmdypyK2x3KmksZncqaS1sdypyKSx0LmxpbmVUbyhmdypvK2x3KnUsZncqdS1sdypvKSx0LmxpbmVUbyhmdyphK2x3KmMsZncqYy1sdyphKSx0LmNsb3NlUGF0aCgpfX0sdnc9W0piLFFiLG53LGF3LHV3LHN3LGR3XSxfdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgdDtpZihyfHwocj10PUxlKCkpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcociwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHQpcmV0dXJuIHI9bnVsbCx0KyIifHxudWxsfXZhciBuPUFiKEpiKSxlPUFiKDY0KSxyPW51bGw7cmV0dXJuIHQudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkFiKGUpLHQpOm59LHQuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkFiKCtuKSx0KTplfSx0LmNvbnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09bj9udWxsOm4sdCk6cn0sdH0sZ3c9ZnVuY3Rpb24oKXt9O3hjLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6bWModGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6bWModGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bn19O3ZhciB5dz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHhjKHQpfTtiYy5wcm90b3R5cGU9e2FyZWFTdGFydDpndyxhcmVhRW5kOmd3LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9bjticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPW47YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1uLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErbikvNik7YnJlYWs7ZGVmYXVsdDptYyh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1ufX07dmFyIG13PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYmModCl9O3djLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciBlPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYscj0odGhpcy5feTArNCp0aGlzLl95MStuKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSxyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6bWModGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bn19O3ZhciB4dz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHdjKHQpfTtNYy5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsbj10aGlzLl95LGU9dC5sZW5ndGgtMTtpZihlPjApZm9yKHZhciByLGk9dFswXSxvPW5bMF0sdT10W2VdLWksYT1uW2VdLW8sYz0tMTsrK2M8PWU7KXI9Yy9lLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtjXSsoMS10aGlzLl9iZXRhKSooaStyKnUpLHRoaXMuX2JldGEqbltjXSsoMS10aGlzLl9iZXRhKSoobytyKmEpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK24pfX07dmFyIGJ3PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gMT09PW4/bmV3IHhjKHQpOm5ldyBNYyh0LG4pfXJldHVybiBlLmJldGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSguODUpO2tjLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpUYyh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1uO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6VGModGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciB3dz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBrYyh0LG4pfXJldHVybiBlLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSgwKTtTYy5wcm90b3R5cGU9e2FyZWFTdGFydDpndyxhcmVhRW5kOmd3LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1uO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9bik7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1uO2JyZWFrO2RlZmF1bHQ6VGModGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBNdz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBTYyh0LG4pfXJldHVybiBlLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSgwKTtOYy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpUYyh0aGlzLHQsbil9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIFR3PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbmV3IE5jKHQsbil9cmV0dXJuIGUudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KDApO0FjLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7aWYodD0rdCxuPStuLHRoaXMuX3BvaW50KXt2YXIgZT10aGlzLl94Mi10LHI9dGhpcy5feTItbjt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KGUqZStyKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zCjtkZWZhdWx0OkVjKHRoaXMsdCxuKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIGt3PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbj9uZXcgQWModCxuKTpuZXcga2ModCwwKX1yZXR1cm4gZS5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KC41KTtDYy5wcm90b3R5cGU9e2FyZWFTdGFydDpndyxhcmVhRW5kOmd3LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KX19LHBvaW50OmZ1bmN0aW9uKHQsbil7aWYodD0rdCxuPStuLHRoaXMuX3BvaW50KXt2YXIgZT10aGlzLl94Mi10LHI9dGhpcy5feTItbjt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KGUqZStyKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9bjticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PW4pO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9bjticmVhaztkZWZhdWx0OkVjKHRoaXMsdCxuKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIFN3PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbj9uZXcgQ2ModCxuKTpuZXcgU2ModCwwKX1yZXR1cm4gZS5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KC41KTt6Yy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtpZih0PSt0LG49K24sdGhpcy5fcG9pbnQpe3ZhciBlPXRoaXMuX3gyLXQscj10aGlzLl95Mi1uO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZSplK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6RWModGhpcyx0LG4pfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgTnc9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuP25ldyB6Yyh0LG4pOm5ldyBOYyh0LDApfXJldHVybiBlLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oLjUpO1BjLnByb3RvdHlwZT17YXJlYVN0YXJ0Omd3LGFyZWFFbmQ6Z3csbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbih0LG4pe3Q9K3Qsbj0rbix0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKHQsbikpfX07dmFyIEV3PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUGModCl9O0RjLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpVYyh0aGlzLHRoaXMuX3QwLHFjKHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7dmFyIGU9TmFOO2lmKHQ9K3Qsbj0rbix0IT09dGhpcy5feDF8fG4hPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxVYyh0aGlzLHFjKHRoaXMsZT1MYyh0aGlzLHQsbikpLGUpO2JyZWFrO2RlZmF1bHQ6VWModGhpcyx0aGlzLl90MCxlPUxjKHRoaXMsdCxuKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1uLHRoaXMuX3QwPWV9fX0sKE9jLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKERjLnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsbil7RGMucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxuLHQpfSxGYy5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LG4pe3RoaXMuX2NvbnRleHQubW92ZVRvKG4sdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LG4pe3RoaXMuX2NvbnRleHQubGluZVRvKG4sdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxuLGUscixpLG8pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuLHQscixlLG8saSl9fSxCYy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LG49dGhpcy5feSxlPXQubGVuZ3RoO2lmKGUpaWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLG5bMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0sblswXSksMj09PWUpdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxuWzFdKTtlbHNlIGZvcih2YXIgcj1qYyh0KSxpPWpjKG4pLG89MCx1PTE7dTxlOysrbywrK3UpdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHJbMF1bb10saVswXVtvXSxyWzFdW29dLGlbMV1bb10sdFt1XSxuW3VdKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1lKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrbil9fTt2YXIgQXc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCYyh0KX07SGMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJjI9PT10aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OmlmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCxuKSx0aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pO2Vsc2V7dmFyIGU9dGhpcy5feCooMS10aGlzLl90KSt0KnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhlLG4pfX10aGlzLl94PXQsdGhpcy5feT1ufX07dmFyIEN3PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSGModCwuNSl9LHp3PUFycmF5LnByb3RvdHlwZS5zbGljZSxQdz1mdW5jdGlvbih0LG4pe2lmKChyPXQubGVuZ3RoKT4xKWZvcih2YXIgZSxyLGk9MSxvPXRbblswXV0sdT1vLmxlbmd0aDtpPHI7KytpKXtlPW8sbz10W25baV1dO2Zvcih2YXIgYT0wO2E8dTsrK2Epb1thXVsxXSs9b1thXVswXT1pc05hTihlW2FdWzFdKT9lW2FdWzBdOmVbYV1bMV19fSxSdz1mdW5jdGlvbih0KXtmb3IodmFyIG49dC5sZW5ndGgsZT1uZXcgQXJyYXkobik7LS1uPj0wOyllW25dPW47cmV0dXJuIGV9LEx3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgbyx1LGE9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz10Lmxlbmd0aCxzPWEubGVuZ3RoLGY9bmV3IEFycmF5KHMpO2ZvcihvPTA7bzxzOysrbyl7Zm9yKHZhciBsLGg9YVtvXSxwPWZbb109bmV3IEFycmF5KGMpLGQ9MDtkPGM7KytkKXBbZF09bD1bMCwraSh0W2RdLGgsZCx0KV0sbC5kYXRhPXRbZF07cC5rZXk9aH1mb3Iobz0wLHU9ZShmKTtvPHM7KytvKWZbdVtvXV0uaW5kZXg9bztyZXR1cm4gcihmLHUpLGZ9dmFyIG49QWIoW10pLGU9Uncscj1QdyxpPVdjO3JldHVybiB0LmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpBYih6dy5jYWxsKGUpKSx0KTpufSx0LnZhbHVlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246QWIoK24pLHQpOml9LHQub3JkZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09bj9SdzoiZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkFiKHp3LmNhbGwobikpLHQpOmV9LHQub2Zmc2V0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PW4/UHc6bix0KTpyfSx0fSxxdz1mdW5jdGlvbih0LG4pe2lmKChyPXQubGVuZ3RoKT4wKXtmb3IodmFyIGUscixpLG89MCx1PXRbMF0ubGVuZ3RoO288dTsrK28pe2ZvcihpPWU9MDtlPHI7KytlKWkrPXRbZV1bb11bMV18fDA7aWYoaSlmb3IoZT0wO2U8cjsrK2UpdFtlXVtvXVsxXS89aX1Qdyh0LG4pfX0sVXc9ZnVuY3Rpb24odCxuKXtpZigoZT10Lmxlbmd0aCk+MCl7Zm9yKHZhciBlLHI9MCxpPXRbblswXV0sbz1pLmxlbmd0aDtyPG87KytyKXtmb3IodmFyIHU9MCxhPTA7dTxlOysrdSlhKz10W3VdW3JdWzFdfHwwO2lbcl1bMV0rPWlbcl1bMF09LWEvMn1Qdyh0LG4pfX0sRHc9ZnVuY3Rpb24odCxuKXtpZigoaT10Lmxlbmd0aCk+MCYmKHI9KGU9dFtuWzBdXSkubGVuZ3RoKT4wKXtmb3IodmFyIGUscixpLG89MCx1PTE7dTxyOysrdSl7Zm9yKHZhciBhPTAsYz0wLHM9MDthPGk7KythKXtmb3IodmFyIGY9dFtuW2FdXSxsPWZbdV1bMV18fDAsaD1mW3UtMV1bMV18fDAscD0obC1oKS8yLGQ9MDtkPGE7KytkKXt2YXIgdj10W25bZF1dO3ArPSh2W3VdWzFdfHwwKS0odlt1LTFdWzFdfHwwKX1jKz1sLHMrPXAqbH1lW3UtMV1bMV0rPWVbdS0xXVswXT1vLGMmJihvLT1zL2MpfWVbdS0xXVsxXSs9ZVt1LTFdWzBdPW8sUHcodCxuKX19LE93PWZ1bmN0aW9uKHQpe3ZhciBuPXQubWFwKCRjKTtyZXR1cm4gUncodCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBuW3RdLW5bZV19KX0sRnc9ZnVuY3Rpb24odCl7cmV0dXJuIE93KHQpLnJldmVyc2UoKX0sSXc9ZnVuY3Rpb24odCl7dmFyIG4sZSxyPXQubGVuZ3RoLGk9dC5tYXAoJGMpLG89UncodCkuc29ydChmdW5jdGlvbih0LG4pe3JldHVybiBpW25dLWlbdF19KSx1PTAsYT0wLGM9W10scz1bXTtmb3Iobj0wO248cjsrK24pZT1vW25dLHU8YT8odSs9aVtlXSxjLnB1c2goZSkpOihhKz1pW2VdLHMucHVzaChlKSk7cmV0dXJuIHMucmV2ZXJzZSgpLmNvbmNhdChjKX0sWXc9ZnVuY3Rpb24odCl7cmV0dXJuIFJ3KHQpLnJldmVyc2UoKX0sQnc9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTtKYy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkpjLGluc2VydDpmdW5jdGlvbih0LG4pe3ZhciBlLHIsaTtpZih0KXtpZihuLlA9dCxuLk49dC5OLHQuTiYmKHQuTi5QPW4pLHQuTj1uLHQuUil7Zm9yKHQ9dC5SO3QuTDspdD10Lkw7dC5MPW59ZWxzZSB0LlI9bjtlPXR9ZWxzZSB0aGlzLl8/KHQ9bnModGhpcy5fKSxuLlA9bnVsbCxuLk49dCx0LlA9dC5MPW4sZT10KToobi5QPW4uTj1udWxsLHRoaXMuXz1uLGU9bnVsbCk7Zm9yKG4uTD1uLlI9bnVsbCxuLlU9ZSxuLkM9ITAsdD1uO2UmJmUuQzspcj1lLlUsZT09PXIuTD8oaT1yLlIsaSYmaS5DPyhlLkM9aS5DPSExLHIuQz0hMCx0PXIpOih0PT09ZS5SJiYoS2ModGhpcyxlKSx0PWUsZT10LlUpLGUuQz0hMSxyLkM9ITAsdHModGhpcyxyKSkpOihpPXIuTCxpJiZpLkM/KGUuQz1pLkM9ITEsci5DPSEwLHQ9cik6KHQ9PT1lLkwmJih0cyh0aGlzLGUpLHQ9ZSxlPXQuVSksZS5DPSExLHIuQz0hMCxLYyh0aGlzLHIpKSksZT10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBuLGUscixpPXQuVSxvPXQuTCx1PXQuUjtpZihlPW8/dT9ucyh1KTpvOnUsaT9pLkw9PT10P2kuTD1lOmkuUj1lOnRoaXMuXz1lLG8mJnU/KHI9ZS5DLGUuQz10LkMsZS5MPW8sby5VPWUsZSE9PXU/KGk9ZS5VLGUuVT10LlUsdD1lLlIsaS5MPXQsZS5SPXUsdS5VPWUpOihlLlU9aSxpPWUsdD1lLlIpKToocj10LkMsdD1lKSx0JiYodC5VPWkpLCFyKXtpZih0JiZ0LkMpcmV0dXJuIHZvaWQodC5DPSExKTtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKG49aS5SLG4uQyYmKG4uQz0hMSxpLkM9ITAsS2ModGhpcyxpKSxuPWkuUiksbi5MJiZuLkwuQ3x8bi5SJiZuLlIuQyl7bi5SJiZuLlIuQ3x8KG4uTC5DPSExLG4uQz0hMCx0cyh0aGlzLG4pLG49aS5SKSxuLkM9aS5DLGkuQz1uLlIuQz0hMSxLYyh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKG49aS5MLG4uQyYmKG4uQz0hMSxpLkM9ITAsdHModGhpcyxpKSxuPWkuTCksbi5MJiZuLkwuQ3x8bi5SJiZuLlIuQyl7bi5MJiZuLkwuQ3x8KG4uUi5DPSExLG4uQz0hMCxLYyh0aGlzLG4pLG49aS5MKSxuLkM9aS5DLGkuQz1uLkwuQz0hMSx0cyh0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfW4uQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX07dmFyIGp3LEh3LFh3LFZ3LFd3LCR3PVtdLFp3PVtdLEd3PTFlLTYsSnc9MWUtMTI7U3MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpTcyxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKG4pe3ZhciBlPW4uaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZnMobix0W2VdKX0pO3JldHVybiBlLmRhdGE9bi5zaXRlLmRhdGEsZX0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXSxuPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLHIpe2lmKG89KGk9ZS5oYWxmZWRnZXMpLmxlbmd0aClmb3IodmFyIGksbyx1LGE9ZS5zaXRlLGM9LTEscz1uW2lbby0xXV0sZj1zLmxlZnQ9PT1hP3MucmlnaHQ6cy5sZWZ0OysrYzxvOyl1PWYscz1uW2lbY11dLGY9cy5sZWZ0PT09YT9zLnJpZ2h0OnMubGVmdCx1JiZmJiZyPHUuaW5kZXgmJnI8Zi5pbmRleCYmVHMoYSx1LGYpPDAmJnQucHVzaChbYS5kYXRhLHUuZGF0YSxmLmRhdGFdKX0pLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJpZ2h0fSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbih0LG4sZSl7Zm9yKHZhciByLGksbz10aGlzLHU9by5fZm91bmR8fDAsYT1vLmNlbGxzLmxlbmd0aDshKGk9by5jZWxsc1t1XSk7KWlmKCsrdT49YSlyZXR1cm4gbnVsbDt2YXIgYz10LWkuc2l0ZVswXSxzPW4taS5zaXRlWzFdLGY9YypjK3MqcztkbyBpPW8uY2VsbHNbcj11XSx1PW51bGwsaS5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1vLmVkZ2VzW2VdLGE9ci5sZWZ0O2lmKGEhPT1pLnNpdGUmJmF8fChhPXIucmlnaHQpKXt2YXIgYz10LWFbMF0scz1uLWFbMV0sbD1jKmMrcypzO2w8ZiYmKGY9bCx1PWEuaW5kZXgpfX0pO3doaWxlKG51bGwhPT11KTtyZXR1cm4gby5fZm91bmQ9cixudWxsPT1lfHxmPD1lKmU/aS5zaXRlOm51bGx9fTt2YXIgUXc9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiBuZXcgU3ModC5tYXAoZnVuY3Rpb24ocixpKXt2YXIgbz1bTWF0aC5yb3VuZChuKHIsaSx0KS9HdykqR3csTWF0aC5yb3VuZChlKHIsaSx0KS9HdykqR3ddO3JldHVybiBvLmluZGV4PWksby5kYXRhPXIsb30pLHIpfXZhciBuPVpjLGU9R2Mscj1udWxsO3JldHVybiB0LnBvbHlnb25zPWZ1bmN0aW9uKG4pe3JldHVybiB0KG4pLnBvbHlnb25zKCl9LHQubGlua3M9ZnVuY3Rpb24obil7cmV0dXJuIHQobikubGlua3MoKX0sdC50cmlhbmdsZXM9ZnVuY3Rpb24obil7cmV0dXJuIHQobikudHJpYW5nbGVzKCl9LHQueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkJ3KCtlKSx0KTpufSx0Lnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpCdygrbiksdCk6ZX0sdC5leHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09bj9udWxsOltbK25bMF1bMF0sK25bMF1bMV1dLFsrblsxXVswXSwrblsxXVsxXV1dLHQpOnImJltbclswXVswXSxyWzBdWzFdXSxbclsxXVswXSxyWzFdWzFdXV19LHQuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1uP251bGw6W1swLDBdLFsrblswXSwrblsxXV1dLHQpOnImJltyWzFdWzBdLXJbMF1bMF0sclsxXVsxXS1yWzBdWzFdXX0sdH0sS3c9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTtFcy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkVzLHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyBFcyh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIDA9PT10JjA9PT1uP3RoaXM6bmV3IEVzKHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuaypuKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIHRNPW5ldyBFcygxLDAsMCk7QXMucHJvdG90eXBlPUVzLnByb3RvdHlwZTt2YXIgbk09ZnVuY3Rpb24oKXt0LmV2ZW50LnByZXZlbnREZWZhdWx0KCksdC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0sZU09ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQpe3Qub24oIndoZWVsLnpvb20iLHMpLm9uKCJtb3VzZWRvd24uem9vbSIsZikub24oImRibGNsaWNrLnpvb20iLGwpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLGgpLm9uKCJ0b3VjaG1vdmUuem9vbSIscCkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsdikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKS5wcm9wZXJ0eSgiX196b29tIixScyl9ZnVuY3Rpb24gZSh0LG4pe3JldHVybiBuPU1hdGgubWF4KHgsTWF0aC5taW4oYixuKSksbj09PXQuaz90Om5ldyBFcyhuLHQueCx0LnkpfWZ1bmN0aW9uIHIodCxuLGUpe3ZhciByPW5bMF0tZVswXSp0LmssaT1uWzFdLWVbMV0qdC5rO3JldHVybiByPT09dC54JiZpPT09dC55P3Q6bmV3IEVzKHQuayxyLGkpfWZ1bmN0aW9uIGkodCxuKXt2YXIgZT10LmludmVydFgoblswXVswXSktdyxyPXQuaW52ZXJ0WChuWzFdWzBdKS1NLGk9dC5pbnZlcnRZKG5bMF1bMV0pLVQsbz10LmludmVydFkoblsxXVsxXSktaztyZXR1cm4gdC50cmFuc2xhdGUocj5lPyhlK3IpLzI6TWF0aC5taW4oMCxlKXx8TWF0aC5tYXgoMCxyKSxvPmk/KGkrbykvMjpNYXRoLm1pbigwLGkpfHxNYXRoLm1heCgwLG8pKX1mdW5jdGlvbiBvKHQpe3JldHVyblsoK3RbMF1bMF0rICt0WzFdWzBdKS8yLCgrdFswXVsxXSsgK3RbMV1bMV0pLzJdfWZ1bmN0aW9uIHUodCxuLGUpe3Qub24oInN0YXJ0Lnpvb20iLGZ1bmN0aW9uKCl7YSh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsZnVuY3Rpb24oKXthKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJ6b29tIixmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHMsaT1hKHQsciksdT1tLmFwcGx5KHQsciksYz1lfHxvKHUpLHM9TWF0aC5tYXgodVsxXVswXS11WzBdWzBdLHVbMV1bMV0tdVswXVsxXSksZj10Ll9fem9vbSxsPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodCxyKTpuLGg9TihmLmludmVydChjKS5jb25jYXQocy9mLmspLGwuaW52ZXJ0KGMpLmNvbmNhdChzL2wuaykpO3JldHVybiBmdW5jdGlvbih0KXtpZigxPT09dCl0PWw7ZWxzZXt2YXIgbj1oKHQpLGU9cy9uWzJdO3Q9bmV3IEVzKGUsY1swXS1uWzBdKmUsY1sxXS1uWzFdKmUpfWkuem9vbShudWxsLHQpfX0pfWZ1bmN0aW9uIGEodCxuKXtmb3IodmFyIGUscj0wLGk9QS5sZW5ndGg7cjxpOysrcilpZigoZT1BW3JdKS50aGF0PT09dClyZXR1cm4gZTtyZXR1cm4gbmV3IGModCxuKX1mdW5jdGlvbiBjKHQsbil7dGhpcy50aGF0PXQsdGhpcy5hcmdzPW4sdGhpcy5pbmRleD0tMSx0aGlzLmFjdGl2ZT0wLHRoaXMuZXh0ZW50PW0uYXBwbHkodCxuKX1mdW5jdGlvbiBzKCl7ZnVuY3Rpb24gbigpe28ud2hlZWw9bnVsbCxvLmVuZCgpfWlmKHkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbz1hKHRoaXMsYXJndW1lbnRzKSx1PXRoaXMuX196b29tLGM9TWF0aC5tYXgoeCxNYXRoLm1pbihiLHUuaypNYXRoLnBvdygyLC10LmV2ZW50LmRlbHRhWSoodC5ldmVudC5kZWx0YU1vZGU/MTIwOjEpLzUwMCkpKSxzPVlmKHRoaXMpO2lmKG8ud2hlZWwpby5tb3VzZVswXVswXT09PXNbMF0mJm8ubW91c2VbMF1bMV09PT1zWzFdfHwoby5tb3VzZVsxXT11LmludmVydChvLm1vdXNlWzBdPXMpKSxjbGVhclRpbWVvdXQoby53aGVlbCk7ZWxzZXtpZih1Lms9PT1jKXJldHVybjtvLm1vdXNlPVtzLHUuaW52ZXJ0KHMpXSx2cCh0aGlzKSxvLnN0YXJ0KCl9bk0oKSxvLndoZWVsPXNldFRpbWVvdXQobixQKSxvLnpvb20oIm1vdXNlIixpKHIoZSh1LGMpLG8ubW91c2VbMF0sby5tb3VzZVsxXSksby5leHRlbnQpKX19ZnVuY3Rpb24gZigpe2Z1bmN0aW9uIG4oKXtuTSgpLG8ubW92ZWQ9ITAsby56b29tKCJtb3VzZSIsaShyKG8udGhhdC5fX3pvb20sby5tb3VzZVswXT1ZZihvLnRoYXQpLG8ubW91c2VbMV0pLG8uZXh0ZW50KSl9ZnVuY3Rpb24gZSgpe3Uub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksZ3QodC5ldmVudC52aWV3LG8ubW92ZWQpLG5NKCksby5lbmQoKX1pZighZyYmeS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBvPWEodGhpcyxhcmd1bWVudHMpLHU9TWwodC5ldmVudC52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLG4sITApLm9uKCJtb3VzZXVwLnpvb20iLGUsITApLGM9WWYodGhpcyk7RWwodC5ldmVudC52aWV3KSxDcygpLG8ubW91c2U9W2MsdGhpcy5fX3pvb20uaW52ZXJ0KGMpXSx2cCh0aGlzKSxvLnN0YXJ0KCl9fWZ1bmN0aW9uIGwoKXtpZih5LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG89dGhpcy5fX3pvb20sYT1ZZih0aGlzKSxjPW8uaW52ZXJ0KGEpLHM9by5rKih0LmV2ZW50LnNoaWZ0S2V5Py41OjIpLGY9aShyKGUobyxzKSxhLGMpLG0uYXBwbHkodGhpcyxhcmd1bWVudHMpKTtuTSgpLFM+MD9NbCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oUykuY2FsbCh1LGYsYSk6TWwodGhpcykuY2FsbChuLnRyYW5zZm9ybSxmKX19ZnVuY3Rpb24gaCgpe2lmKHkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbixlLHIsaSxvPWEodGhpcyxhcmd1bWVudHMpLHU9dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxjPXUubGVuZ3RoO2ZvcihDcygpLGU9MDtlPGM7KytlKXI9dVtlXSxpPWtsKHRoaXMsdSxyLmlkZW50aWZpZXIpLGk9W2ksdGhpcy5fX3pvb20uaW52ZXJ0KGkpLHIuaWRlbnRpZmllcl0sby50b3VjaDA/by50b3VjaDF8fChvLnRvdWNoMT1pKTooby50b3VjaDA9aSxuPSEwKTtpZihfJiYoXz1jbGVhclRpbWVvdXQoXyksIW8udG91Y2gxKSlyZXR1cm4gby5lbmQoKSxpPU1sKHRoaXMpLm9uKCJkYmxjbGljay56b29tIiksdm9pZChpJiZpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSk7biYmKF89c2V0VGltZW91dChmdW5jdGlvbigpe189bnVsbH0seiksdnAodGhpcyksby5zdGFydCgpKX19ZnVuY3Rpb24gcCgpe3ZhciBuLG8sdSxjLHM9YSh0aGlzLGFyZ3VtZW50cyksZj10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGw9Zi5sZW5ndGg7Zm9yKG5NKCksXyYmKF89Y2xlYXJUaW1lb3V0KF8pKSxuPTA7bjxsOysrbilvPWZbbl0sdT1rbCh0aGlzLGYsby5pZGVudGlmaWVyKSxzLnRvdWNoMCYmcy50b3VjaDBbMl09PT1vLmlkZW50aWZpZXI/cy50b3VjaDBbMF09dTpzLnRvdWNoMSYmcy50b3VjaDFbMl09PT1vLmlkZW50aWZpZXImJihzLnRvdWNoMVswXT11KTtpZihvPXMudGhhdC5fX3pvb20scy50b3VjaDEpe3ZhciBoPXMudG91Y2gwWzBdLHA9cy50b3VjaDBbMV0sZD1zLnRvdWNoMVswXSx2PXMudG91Y2gxWzFdLGc9KGc9ZFswXS1oWzBdKSpnKyhnPWRbMV0taFsxXSkqZyx5PSh5PXZbMF0tcFswXSkqeSsoeT12WzFdLXBbMV0pKnk7bz1lKG8sTWF0aC5zcXJ0KGcveSkpLHU9WyhoWzBdK2RbMF0pLzIsKGhbMV0rZFsxXSkvMl0sYz1bKHBbMF0rdlswXSkvMiwocFsxXSt2WzFdKS8yXX1lbHNle2lmKCFzLnRvdWNoMClyZXR1cm47dT1zLnRvdWNoMFswXSxjPXMudG91Y2gwWzFdfXMuem9vbSgidG91Y2giLGkocihvLHUsYykscy5leHRlbnQpKX1mdW5jdGlvbiB2KCl7dmFyIG4sZSxyPWEodGhpcyxhcmd1bWVudHMpLGk9dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxvPWkubGVuZ3RoO2ZvcihDcygpLGcmJmNsZWFyVGltZW91dChnKSxnPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtnPW51bGx9LHopLG49MDtuPG87KytuKWU9aVtuXSxyLnRvdWNoMCYmci50b3VjaDBbMl09PT1lLmlkZW50aWZpZXI/ZGVsZXRlIHIudG91Y2gwOnIudG91Y2gxJiZyLnRvdWNoMVsyXT09PWUuaWRlbnRpZmllciYmZGVsZXRlIHIudG91Y2gxO3IudG91Y2gxJiYhci50b3VjaDAmJihyLnRvdWNoMD1yLnRvdWNoMSxkZWxldGUgci50b3VjaDEpLHIudG91Y2gwfHxyLmVuZCgpfXZhciBfLGcseT16cyxtPVBzLHg9MCxiPTEvMCx3PS1iLE09YixUPXcsaz1NLFM9MjUwLE49SWgsQT1bXSxDPWQoInN0YXJ0Iiwiem9vbSIsImVuZCIpLHo9NTAwLFA9MTUwO3JldHVybiBuLnRyYW5zZm9ybT1mdW5jdGlvbih0LG4pe3ZhciBlPXQuc2VsZWN0aW9uP3Quc2VsZWN0aW9uKCk6dDtlLnByb3BlcnR5KCJfX3pvb20iLFJzKSx0IT09ZT91KHQsbik6ZS5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7YSh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bikuZW5kKCl9KX0sbi5zY2FsZUJ5PWZ1bmN0aW9uKHQsZSl7bi5zY2FsZVRvKHQsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3pvb20uayooImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSl9KX0sbi5zY2FsZVRvPWZ1bmN0aW9uKHQsdSl7bi50cmFuc2Zvcm0odCxmdW5jdGlvbigpe3ZhciB0PW0uYXBwbHkodGhpcyxhcmd1bWVudHMpLG49dGhpcy5fX3pvb20sYT1vKHQpLGM9bi5pbnZlcnQoYSk7cmV0dXJuIGkocihlKG4sImZ1bmN0aW9uIj09dHlwZW9mIHU/dS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dSksYSxjKSx0KX0pfSxuLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKHQsZSxyKXtuLnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ciksbS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGMucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuaW5kZXg9QS5wdXNoKHRoaXMpLTEsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMubW91c2UmJiJtb3VzZSIhPT10JiYodGhpcy5tb3VzZVsxXT1uLmludmVydCh0aGlzLm1vdXNlWzBdKSksdGhpcy50b3VjaDAmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDBbMV09bi5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMVsxXT1uLmludmVydCh0aGlzLnRvdWNoMVswXSkpLHRoaXMudGhhdC5fX3pvb209bix0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PS0tdGhpcy5hY3RpdmUmJihBLnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXtFKG5ldyBOcyhuLHQsdGhpcy50aGF0Ll9fem9vbSksQy5hcHBseSxDLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LG4uZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S3coISF0KSxuKTp5fSxuLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Okt3KFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxuKTptfSxuLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PSt0WzBdLGI9K3RbMV0sbik6W3gsYl19LG4udHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PSt0WzBdWzBdLE09K3RbMV1bMF0sVD0rdFswXVsxXSxrPSt0WzFdWzFdLG4pOltbdyxUXSxbTSxrXV19LG4uZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9K3Qsbik6U30sbi5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTj10LG4pOk59LG4ub249ZnVuY3Rpb24oKXt2YXIgdD1DLm9uLmFwcGx5KEMsYXJndW1lbnRzKTtyZXR1cm4gdD09PUM/bjp0fSxufTt0LnZlcnNpb249THMsdC5iaXNlY3Q9T3MsdC5iaXNlY3RSaWdodD1Pcyx0LmJpc2VjdExlZnQ9RnMsdC5hc2NlbmRpbmc9cXMsdC5iaXNlY3Rvcj1Vcyx0LmNyb3NzPVlzLHQuZGVzY2VuZGluZz1Ccyx0LmRldmlhdGlvbj1Ycyx0LmV4dGVudD1Wcyx0Lmhpc3RvZ3JhbT1vZix0LnRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXM9YWYsdC50aHJlc2hvbGRTY290dD1jZix0LnRocmVzaG9sZFN0dXJnZXM9cmYsdC5tYXg9c2YsdC5tZWFuPWZmLHQubWVkaWFuPWxmLHQubWVyZ2U9aGYsdC5taW49cGYsdC5wYWlycz1Jcyx0LnBlcm11dGU9ZGYsdC5xdWFudGlsZT11Zix0LnJhbmdlPVFzLHQuc2Nhbj12Zix0LnNodWZmbGU9X2YsdC5zdW09Z2YsdC50aWNrcz1lZix0LnRpY2tTdGVwPXIsdC50cmFuc3Bvc2U9eWYsdC52YXJpYW5jZT1Icyx0LnppcD1tZix0LmF4aXNUb3A9Zix0LmF4aXNSaWdodD1sLHQuYXhpc0JvdHRvbT1oLHQuYXhpc0xlZnQ9cCx0LmJydXNoPUFkLHQuYnJ1c2hYPUFlLHQuYnJ1c2hZPUNlLHQuYnJ1c2hTZWxlY3Rpb249RWUsdC5jaG9yZD1VZCx0LnJpYmJvbj1qZCx0Lm5lc3Q9WGQsdC5zZXQ9V2UsdC5tYXA9WWUsdC5rZXlzPVdkLHQudmFsdWVzPSRkLHQuZW50cmllcz1aZCx0LmNvbG9yPVR0LHQucmdiPUV0LHQuaHNsPVB0LHQubGFiPVV0LHQuaGNsPWp0LHQuY3ViZWhlbGl4PVZ0LHQuZGlzcGF0Y2g9ZCx0LmRyYWc9Q2wsdC5kcmFnRGlzYWJsZT1FbCx0LmRyYWdFbmFibGU9Z3QsdC5kc3ZGb3JtYXQ9R2QsdC5jc3ZQYXJzZT1RZCx0LmNzdlBhcnNlUm93cz1LZCx0LmNzdkZvcm1hdD10dix0LmNzdkZvcm1hdFJvd3M9bnYsdC50c3ZQYXJzZT1ydix0LnRzdlBhcnNlUm93cz1pdix0LnRzdkZvcm1hdD1vdix0LnRzdkZvcm1hdFJvd3M9dXYsdC5lYXNlTGluZWFyPWVlLHQuZWFzZVF1YWQ9b2UsdC5lYXNlUXVhZEluPXJlLHQuZWFzZVF1YWRPdXQ9aWUsdC5lYXNlUXVhZEluT3V0PW9lLHQuZWFzZUN1YmljPWNlLHQuZWFzZUN1YmljSW49dWUsdC5lYXNlQ3ViaWNPdXQ9YWUsdC5lYXNlQ3ViaWNJbk91dD1jZSx0LmVhc2VQb2x5PVlwLHQuZWFzZVBvbHlJbj1GcCx0LmVhc2VQb2x5T3V0PUlwLHQuZWFzZVBvbHlJbk91dD1ZcCx0LmVhc2VTaW49bGUsdC5lYXNlU2luSW49c2UsdC5lYXNlU2luT3V0PWZlLHQuZWFzZVNpbkluT3V0PWxlLHQuZWFzZUV4cD1kZSx0LmVhc2VFeHBJbj1oZSx0LmVhc2VFeHBPdXQ9cGUsdC5lYXNlRXhwSW5PdXQ9ZGUsdC5lYXNlQ2lyY2xlPWdlLHQuZWFzZUNpcmNsZUluPXZlLHQuZWFzZUNpcmNsZU91dD1fZSx0LmVhc2VDaXJjbGVJbk91dD1nZSx0LmVhc2VCb3VuY2U9bWUsdC5lYXNlQm91bmNlSW49eWUsdC5lYXNlQm91bmNlT3V0PW1lLHQuZWFzZUJvdW5jZUluT3V0PXhlLHQuZWFzZUJhY2s9cmQsdC5lYXNlQmFja0luPW5kLHQuZWFzZUJhY2tPdXQ9ZWQsdC5lYXNlQmFja0luT3V0PXJkLHQuZWFzZUVsYXN0aWM9Y2QsdC5lYXNlRWxhc3RpY0luPWFkLHQuZWFzZUVsYXN0aWNPdXQ9Y2QsdC5lYXNlRWxhc3RpY0luT3V0PXNkLHQuZm9yY2VDZW50ZXI9YXYsdC5mb3JjZUNvbGxpZGU9a3YsdC5mb3JjZUxpbms9U3YsdC5mb3JjZU1hbnlCb2R5PUN2LHQuZm9yY2VTaW11bGF0aW9uPUF2LHQuZm9yY2VYPXp2LHQuZm9yY2VZPVB2LHQuZm9ybWF0RGVmYXVsdExvY2FsZT1wcix0LmZvcm1hdExvY2FsZT1Ydix0LmZvcm1hdFNwZWNpZmllcj1scix0LnByZWNpc2lvbkZpeGVkPVZ2LHQucHJlY2lzaW9uUHJlZml4PVd2LHQucHJlY2lzaW9uUm91bmQ9JHYsdC5nZW9BcmVhPXRnLHQuZ2VvQm91bmRzPXJnLHQuZ2VvQ2VudHJvaWQ9b2csdC5nZW9DaXJjbGU9eGcsdC5nZW9DbGlwRXh0ZW50PU5nLHQuZ2VvQ29udGFpbnM9T2csdC5nZW9EaXN0YW5jZT1xZyx0Lmdlb0dyYXRpY3VsZT13aSx0Lmdlb0dyYXRpY3VsZTEwPU1pLHQuZ2VvSW50ZXJwb2xhdGU9RmcsdC5nZW9MZW5ndGg9UGcsdC5nZW9QYXRoPWh5LHQuZ2VvQWxiZXJzPXd5LHQuZ2VvQWxiZXJzVXNhPU15LHQuZ2VvQXppbXV0aGFsRXF1YWxBcmVhPWt5LHQuZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3PVR5LHQuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnQ9TnksdC5nZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdz1TeSx0Lmdlb0NvbmljQ29uZm9ybWFsPUF5LHQuZ2VvQ29uaWNDb25mb3JtYWxSYXc9bG8sdC5nZW9Db25pY0VxdWFsQXJlYT1ieSx0Lmdlb0NvbmljRXF1YWxBcmVhUmF3PWlvLHQuZ2VvQ29uaWNFcXVpZGlzdGFudD16eSx0Lmdlb0NvbmljRXF1aWRpc3RhbnRSYXc9cG8sdC5nZW9FcXVpcmVjdGFuZ3VsYXI9Q3ksdC5nZW9FcXVpcmVjdGFuZ3VsYXJSYXc9aG8sdC5nZW9Hbm9tb25pYz1QeSx0Lmdlb0dub21vbmljUmF3PXZvLHQuZ2VvSWRlbnRpdHk9UnksdC5nZW9Qcm9qZWN0aW9uPXRvLHQuZ2VvUHJvamVjdGlvbk11dGF0b3I9bm8sdC5nZW9NZXJjYXRvcj1FeSx0Lmdlb01lcmNhdG9yUmF3PWNvLHQuZ2VvT3J0aG9ncmFwaGljPUx5LHQuZ2VvT3J0aG9ncmFwaGljUmF3PWdvLHQuZ2VvU3RlcmVvZ3JhcGhpYz1xeSx0Lmdlb1N0ZXJlb2dyYXBoaWNSYXc9eW8sdC5nZW9UcmFuc3ZlcnNlTWVyY2F0b3I9VXksdC5nZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc9bW8sdC5nZW9Sb3RhdGlvbj1tZyx0Lmdlb1N0cmVhbT1HXyx0Lmdlb1RyYW5zZm9ybT1feSx0LmNsdXN0ZXI9RHksdC5oaWVyYXJjaHk9QW8sdC5wYWNrPUt5LHQucGFja1NpYmxpbmdzPUp5LHQucGFja0VuY2xvc2U9R3ksdC5wYXJ0aXRpb249ZW0sdC5zdHJhdGlmeT11bSx0LnRyZWU9YW0sdC50cmVlbWFwPWxtLHQudHJlZW1hcEJpbmFyeT1obSx0LnRyZWVtYXBEaWNlPW5tLHQudHJlZW1hcFNsaWNlPWNtLHQudHJlZW1hcFNsaWNlRGljZT1wbSx0LnRyZWVtYXBTcXVhcmlmeT1mbSx0LnRyZWVtYXBSZXNxdWFyaWZ5PWRtLHQuaW50ZXJwb2xhdGU9QWgsdC5pbnRlcnBvbGF0ZUFycmF5PXdoLHQuaW50ZXJwb2xhdGVCYXNpcz1faCx0LmludGVycG9sYXRlQmFzaXNDbG9zZWQ9Z2gsdC5pbnRlcnBvbGF0ZURhdGU9TWgsdC5pbnRlcnBvbGF0ZU51bWJlcj1UaCx0LmludGVycG9sYXRlT2JqZWN0PWtoLHQuaW50ZXJwb2xhdGVSb3VuZD1DaCx0LmludGVycG9sYXRlU3RyaW5nPUVoLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M9TGgsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybVN2Zz1xaCx0LmludGVycG9sYXRlWm9vbT1JaCx0LmludGVycG9sYXRlUmdiPW1oLHQuaW50ZXJwb2xhdGVSZ2JCYXNpcz14aCx0LmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ9YmgsdC5pbnRlcnBvbGF0ZUhzbD1ZaCx0LmludGVycG9sYXRlSHNsTG9uZz1CaCx0LmludGVycG9sYXRlTGFiPWxuLHQuaW50ZXJwb2xhdGVIY2w9amgsdC5pbnRlcnBvbGF0ZUhjbExvbmc9SGgsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeD1YaCx0LmludGVycG9sYXRlQ3ViZWhlbGl4TG9uZz1WaCx0LnF1YW50aXplPVdoLHQucGF0aD1MZSx0LnBvbHlnb25BcmVhPXZtLHQucG9seWdvbkNlbnRyb2lkPV9tLHQucG9seWdvbkh1bGw9eW07dC5wb2x5Z29uQ29udGFpbnM9bW0sdC5wb2x5Z29uTGVuZ3RoPXhtLHQucXVhZHRyZWU9ZXIsdC5xdWV1ZT1tdSx0LnJhbmRvbVVuaWZvcm09TW0sdC5yYW5kb21Ob3JtYWw9VG0sdC5yYW5kb21Mb2dOb3JtYWw9a20sdC5yYW5kb21CYXRlcz1ObSx0LnJhbmRvbUlyd2luSGFsbD1TbSx0LnJhbmRvbUV4cG9uZW50aWFsPUVtLHQucmVxdWVzdD1BbSx0Lmh0bWw9em0sdC5qc29uPVBtLHQudGV4dD1SbSx0LnhtbD1MbSx0LmNzdj1VbSx0LnRzdj1EbSx0LnNjYWxlQmFuZD1UdSx0LnNjYWxlUG9pbnQ9U3UsdC5zY2FsZUlkZW50aXR5PVV1LHQuc2NhbGVMaW5lYXI9cXUsdC5zY2FsZUxvZz1qdSx0LnNjYWxlT3JkaW5hbD1NdSx0LnNjYWxlSW1wbGljaXQ9WW0sdC5zY2FsZVBvdz1YdSx0LnNjYWxlU3FydD1WdSx0LnNjYWxlUXVhbnRpbGU9V3UsdC5zY2FsZVF1YW50aXplPSR1LHQuc2NhbGVUaHJlc2hvbGQ9WnUsdC5zY2FsZVRpbWU9cGIsdC5zY2FsZVV0Yz1kYix0LnNjaGVtZUNhdGVnb3J5MTA9X2IsdC5zY2hlbWVDYXRlZ29yeTIwYj1nYix0LnNjaGVtZUNhdGVnb3J5MjBjPXliLHQuc2NoZW1lQ2F0ZWdvcnkyMD1tYix0LmludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdD14Yix0LmludGVycG9sYXRlUmFpbmJvdz1UYix0LmludGVycG9sYXRlV2FybT1iYix0LmludGVycG9sYXRlQ29vbD13Yix0LmludGVycG9sYXRlVmlyaWRpcz1rYix0LmludGVycG9sYXRlTWFnbWE9U2IsdC5pbnRlcnBvbGF0ZUluZmVybm89TmIsdC5pbnRlcnBvbGF0ZVBsYXNtYT1FYix0LnNjYWxlU2VxdWVudGlhbD1yYyx0LmNyZWF0b3I9emYsdC5sb2NhbD1iLHQubWF0Y2hlcj1VZix0Lm1vdXNlPVlmLHQubmFtZXNwYWNlPUNmLHQubmFtZXNwYWNlcz1BZix0LnNlbGVjdD1NbCx0LnNlbGVjdEFsbD1UbCx0LnNlbGVjdGlvbj12dCx0LnNlbGVjdG9yPUJmLHQuc2VsZWN0b3JBbGw9SGYsdC50b3VjaD1rbCx0LnRvdWNoZXM9U2wsdC53aW5kb3c9c2wsdC5jdXN0b21FdmVudD1FLHQuYXJjPVliLHQuYXJlYT1IYix0LmxpbmU9amIsdC5waWU9V2IsdC5yYWRpYWxBcmVhPUdiLHQucmFkaWFsTGluZT1aYix0LnN5bWJvbD1fdyx0LnN5bWJvbHM9dncsdC5zeW1ib2xDaXJjbGU9SmIsdC5zeW1ib2xDcm9zcz1RYix0LnN5bWJvbERpYW1vbmQ9bncsdC5zeW1ib2xTcXVhcmU9YXcsdC5zeW1ib2xTdGFyPXV3LHQuc3ltYm9sVHJpYW5nbGU9c3csdC5zeW1ib2xXeWU9ZHcsdC5jdXJ2ZUJhc2lzQ2xvc2VkPW13LHQuY3VydmVCYXNpc09wZW49eHcsdC5jdXJ2ZUJhc2lzPXl3LHQuY3VydmVCdW5kbGU9YncsdC5jdXJ2ZUNhcmRpbmFsQ2xvc2VkPU13LHQuY3VydmVDYXJkaW5hbE9wZW49VHcsdC5jdXJ2ZUNhcmRpbmFsPXd3LHQuY3VydmVDYXRtdWxsUm9tQ2xvc2VkPVN3LHQuY3VydmVDYXRtdWxsUm9tT3Blbj1Odyx0LmN1cnZlQ2F0bXVsbFJvbT1rdyx0LmN1cnZlTGluZWFyQ2xvc2VkPUV3LHQuY3VydmVMaW5lYXI9QmIsdC5jdXJ2ZU1vbm90b25lWD1JYyx0LmN1cnZlTW9ub3RvbmVZPVljLHQuY3VydmVOYXR1cmFsPUF3LHQuY3VydmVTdGVwPUN3LHQuY3VydmVTdGVwQWZ0ZXI9VmMsdC5jdXJ2ZVN0ZXBCZWZvcmU9WGMsdC5zdGFjaz1Mdyx0LnN0YWNrT2Zmc2V0RXhwYW5kPXF3LHQuc3RhY2tPZmZzZXROb25lPVB3LHQuc3RhY2tPZmZzZXRTaWxob3VldHRlPVV3LHQuc3RhY2tPZmZzZXRXaWdnbGU9RHcsdC5zdGFja09yZGVyQXNjZW5kaW5nPU93LHQuc3RhY2tPcmRlckRlc2NlbmRpbmc9RncsdC5zdGFja09yZGVySW5zaWRlT3V0PUl3LHQuc3RhY2tPcmRlck5vbmU9UncsdC5zdGFja09yZGVyUmV2ZXJzZT1Zdyx0LnRpbWVJbnRlcnZhbD1HdSx0LnRpbWVNaWxsaXNlY29uZD1abSx0LnRpbWVNaWxsaXNlY29uZHM9R20sdC51dGNNaWxsaXNlY29uZD1abSx0LnV0Y01pbGxpc2Vjb25kcz1HbSx0LnRpbWVTZWNvbmQ9ZXgsdC50aW1lU2Vjb25kcz1yeCx0LnV0Y1NlY29uZD1leCx0LnV0Y1NlY29uZHM9cngsdC50aW1lTWludXRlPWl4LHQudGltZU1pbnV0ZXM9b3gsdC50aW1lSG91cj11eCx0LnRpbWVIb3Vycz1heCx0LnRpbWVEYXk9Y3gsdC50aW1lRGF5cz1zeCx0LnRpbWVXZWVrPWZ4LHQudGltZVdlZWtzPWd4LHQudGltZVN1bmRheT1meCx0LnRpbWVTdW5kYXlzPWd4LHQudGltZU1vbmRheT1seCx0LnRpbWVNb25kYXlzPXl4LHQudGltZVR1ZXNkYXk9aHgsdC50aW1lVHVlc2RheXM9bXgsdC50aW1lV2VkbmVzZGF5PXB4LHQudGltZVdlZG5lc2RheXM9eHgsdC50aW1lVGh1cnNkYXk9ZHgsdC50aW1lVGh1cnNkYXlzPWJ4LHQudGltZUZyaWRheT12eCx0LnRpbWVGcmlkYXlzPXd4LHQudGltZVNhdHVyZGF5PV94LHQudGltZVNhdHVyZGF5cz1NeCx0LnRpbWVNb250aD1UeCx0LnRpbWVNb250aHM9a3gsdC50aW1lWWVhcj1TeCx0LnRpbWVZZWFycz1OeCx0LnV0Y01pbnV0ZT1FeCx0LnV0Y01pbnV0ZXM9QXgsdC51dGNIb3VyPUN4LHQudXRjSG91cnM9engsdC51dGNEYXk9UHgsdC51dGNEYXlzPVJ4LHQudXRjV2Vlaz1MeCx0LnV0Y1dlZWtzPVl4LHQudXRjU3VuZGF5PUx4LHQudXRjU3VuZGF5cz1ZeCx0LnV0Y01vbmRheT1xeCx0LnV0Y01vbmRheXM9QngsdC51dGNUdWVzZGF5PVV4LHQudXRjVHVlc2RheXM9angsdC51dGNXZWRuZXNkYXk9RHgsdC51dGNXZWRuZXNkYXlzPUh4LHQudXRjVGh1cnNkYXk9T3gsdC51dGNUaHVyc2RheXM9WHgsdC51dGNGcmlkYXk9RngsdC51dGNGcmlkYXlzPVZ4LHQudXRjU2F0dXJkYXk9SXgsdC51dGNTYXR1cmRheXM9V3gsdC51dGNNb250aD0keCx0LnV0Y01vbnRocz1aeCx0LnV0Y1llYXI9R3gsdC51dGNZZWFycz1ReCx0LnRpbWVGb3JtYXREZWZhdWx0TG9jYWxlPUdhLHQudGltZUZvcm1hdExvY2FsZT1lYSx0Lmlzb0Zvcm1hdD1pYix0Lmlzb1BhcnNlPW9iLHQubm93PWRuLHQudGltZXI9Z24sdC50aW1lckZsdXNoPXluLHQudGltZW91dD1ycCx0LmludGVydmFsPWlwLHQudHJhbnNpdGlvbj10ZSx0LmFjdGl2ZT1wZCx0LmludGVycnVwdD12cCx0LnZvcm9ub2k9UXcsdC56b29tPWVNLHQuem9vbVRyYW5zZm9ybT1Bcyx0Lnpvb21JZGVudGl0eT10TSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KTs="></script>
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgew0KICAvLyBJZiB3aW5kb3cuSFRNTFdpZGdldHMgaXMgYWxyZWFkeSBkZWZpbmVkLCB0aGVuIHVzZSBpdDsgb3RoZXJ3aXNlIGNyZWF0ZSBhDQogIC8vIG5ldyBvYmplY3QuIFRoaXMgYWxsb3dzIHByZWNlZGluZyBjb2RlIHRvIHNldCBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZQ0KICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLg0KICB3aW5kb3cuSFRNTFdpZGdldHMgPSB3aW5kb3cuSFRNTFdpZGdldHMgfHwge307DQoNCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLg0KICB2YXIgdmlld2VyTW9kZSA9IHdpbmRvdy5IVE1MV2lkZ2V0cy52aWV3ZXJNb2RlID0NCiAgICAgIC9cYnZpZXdlcl9wYW5lPTFcYi8udGVzdCh3aW5kb3cubG9jYXRpb24pOw0KDQogIC8vIFNlZSBpZiB3ZSdyZSBydW5uaW5nIGluIFNoaW55IG1vZGUuIElmIG5vdCwgaXQncyBhIHN0YXRpYyBkb2N1bWVudC4NCiAgLy8gTm90ZSB0aGF0IHN0YXRpYyB3aWRnZXRzIGNhbiBhcHBlYXIgaW4gYm90aCBTaGlueSBhbmQgc3RhdGljIG1vZGVzLCBidXQNCiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4NCiAgdmFyIHNoaW55TW9kZSA9IHdpbmRvdy5IVE1MV2lkZ2V0cy5zaGlueU1vZGUgPQ0KICAgICAgdHlwZW9mKHdpbmRvdy5TaGlueSkgIT09ICJ1bmRlZmluZWQiICYmICEhd2luZG93LlNoaW55Lm91dHB1dEJpbmRpbmdzOw0KDQogIC8vIFdlIGNhbid0IGNvdW50IG9uIGpRdWVyeSBiZWluZyBhdmFpbGFibGUsIHNvIHdlIGltcGxlbWVudCBvdXIgb3duDQogIC8vIHZlcnNpb24gaWYgbmVjZXNzYXJ5Lg0KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3Rvcikgew0KICAgIGlmICh0eXBlb2YoalF1ZXJ5KSAhPT0gInVuZGVmaW5lZCIgJiYgc2NvcGUgaW5zdGFuY2VvZiBqUXVlcnkpIHsNCiAgICAgIHJldHVybiBzY29wZS5maW5kKHNlbGVjdG9yKTsNCiAgICB9DQogICAgaWYgKHNjb3BlLnF1ZXJ5U2VsZWN0b3JBbGwpIHsNCiAgICAgIHJldHVybiBzY29wZS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsNCiAgICB9DQogIH0NCg0KICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7DQogICAgaWYgKHZhbHVlID09PSBudWxsKQ0KICAgICAgcmV0dXJuIFtdOw0KICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQ0KICAgICAgcmV0dXJuIHZhbHVlOw0KICAgIHJldHVybiBbdmFsdWVdOw0KICB9DQoNCiAgLy8gSW1wbGVtZW50IGpRdWVyeSdzIGV4dGVuZA0KICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsNCiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7DQogICAgICByZXR1cm4gdGFyZ2V0Ow0KICAgIH0NCiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgew0KICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsNCiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7DQogICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocHJvcCkpIHsNCiAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIHRhcmdldDsNCiAgfQ0KDQogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4NCiAgZnVuY3Rpb24gZm9yRWFjaCh2YWx1ZXMsIGNhbGxiYWNrLCB0aGlzQXJnKSB7DQogICAgaWYgKHZhbHVlcy5mb3JFYWNoKSB7DQogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7DQogICAgfSBlbHNlIHsNCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KDQogIC8vIFJlcGxhY2VzIHRoZSBzcGVjaWZpZWQgbWV0aG9kIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBmdW5jU291cmNlLg0KICAvLw0KICAvLyBOb3RlIHRoYXQgZnVuY1NvdXJjZSBzaG91bGQgbm90IEJFIHRoZSBuZXcgbWV0aG9kLCBpdCBzaG91bGQgYmUgYSBmdW5jdGlvbg0KICAvLyB0aGF0IFJFVFVSTlMgdGhlIG5ldyBtZXRob2QuIGZ1bmNTb3VyY2UgcmVjZWl2ZXMgYSBzaW5nbGUgYXJndW1lbnQgdGhhdCBpcw0KICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4NCiAgLy8gbWV0aG9kIGNhbiBiZSBjYWxsZWQgbGlrZSBhIHJlZ3VsYXIgZnVuY3Rpb24sIGl0IGhhcyB0aGUgdGFyZ2V0IHBlcm1hbmVudGx5DQogIC8vIGJvdW5kIHRvIGl0IHNvICJ0aGlzIiB3aWxsIHdvcmsgY29ycmVjdGx5Lg0KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsNCiAgICB2YXIgc3VwZXJGdW5jID0gdGFyZ2V0W21ldGhvZE5hbWVdIHx8IGZ1bmN0aW9uKCkge307DQogICAgdmFyIHN1cGVyRnVuY0JvdW5kID0gZnVuY3Rpb24oKSB7DQogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsNCiAgICB9Ow0KICAgIHRhcmdldFttZXRob2ROYW1lXSA9IGZ1bmNTb3VyY2Uoc3VwZXJGdW5jQm91bmQpOw0KICB9DQoNCiAgLy8gQWRkIGEgbWV0aG9kIHRvIGRlbGVnYXRvciB0aGF0LCB3aGVuIGludm9rZWQsIGNhbGxzDQogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbg0KICAvLyB0aGUgZGVsZWdhdGVlLCBidXQgdGhlcmUgd2FzIG9uZSBvbiBkZWxlZ2F0b3IgYmVmb3JlDQogIC8vIGRlbGVnYXRlTWV0aG9kIHdhcyBjYWxsZWQsIHRoZW4gdGhlIG9yaWdpbmFsIHZlcnNpb24NCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLg0KICAvLyBGb3IgZXhhbXBsZToNCiAgLy8NCiAgLy8gdmFyIGEgPSB7DQogIC8vICAgbWV0aG9kMTogZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKCdhMScpOyB9DQogIC8vICAgbWV0aG9kMjogZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKCdhMicpOyB9DQogIC8vIH07DQogIC8vIHZhciBiID0gew0KICAvLyAgIG1ldGhvZDE6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYjEnKTsgfQ0KICAvLyB9Ow0KICAvLyBkZWxlZ2F0ZU1ldGhvZChhLCBiLCAibWV0aG9kMSIpOw0KICAvLyBkZWxlZ2F0ZU1ldGhvZChhLCBiLCAibWV0aG9kMiIpOw0KICAvLyBhLm1ldGhvZDEoKTsNCiAgLy8gYS5tZXRob2QyKCk7DQogIC8vDQogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4NCiAgZnVuY3Rpb24gZGVsZWdhdGVNZXRob2QoZGVsZWdhdG9yLCBkZWxlZ2F0ZWUsIG1ldGhvZE5hbWUpIHsNCiAgICB2YXIgaW5oZXJpdGVkID0gZGVsZWdhdG9yW21ldGhvZE5hbWVdOw0KICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIHRhcmdldCA9IGRlbGVnYXRlZTsNCiAgICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZWVbbWV0aG9kTmFtZV07DQoNCiAgICAgIC8vIFRoZSBtZXRob2QgZG9lc24ndCBleGlzdCBvbiB0aGUgZGVsZWdhdGVlLiBJbnN0ZWFkLA0KICAgICAgLy8gY2FsbCB0aGUgbWV0aG9kIG9uIHRoZSBkZWxlZ2F0b3IsIGlmIGl0IGV4aXN0cy4NCiAgICAgIGlmICghbWV0aG9kKSB7DQogICAgICAgIHRhcmdldCA9IGRlbGVnYXRvcjsNCiAgICAgICAgbWV0aG9kID0gaW5oZXJpdGVkOw0KICAgICAgfQ0KDQogICAgICBpZiAobWV0aG9kKSB7DQogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOw0KICAgICAgfQ0KICAgIH07DQogIH0NCg0KICAvLyBJbXBsZW1lbnQgYSB2YWd1ZSBmYWNzaW1pbGllIG9mIGpRdWVyeSdzIGRhdGEgbWV0aG9kDQogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgew0KICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpIHsNCiAgICAgIHJldHVybiBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXTsNCiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgew0KICAgICAgZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV0gPSB2YWx1ZTsNCiAgICAgIHJldHVybiBlbDsNCiAgICB9IGVsc2Ugew0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBlbGVtZW50RGF0YTogIiArDQogICAgICAgIGFyZ3VtZW50cy5sZW5ndGgpOw0KICAgIH0NCiAgfQ0KDQogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleA0KICBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyKSB7DQogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXC1cW1xdXC9ce1x9XChcKVwqXCtcP1wuXFxcXlwkXHxdL2csICJcXCQmIik7DQogIH0NCg0KICBmdW5jdGlvbiBoYXNDbGFzcyhlbCwgY2xhc3NOYW1lKSB7DQogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOw0KICAgIHJldHVybiByZS50ZXN0KGVsLmNsYXNzTmFtZSk7DQogIH0NCg0KICAvLyBlbGVtZW50cyAtIGFycmF5IChvciBhcnJheS1saWtlIG9iamVjdCkgb2YgSFRNTCBlbGVtZW50cw0KICAvLyBjbGFzc05hbWUgLSBjbGFzcyBuYW1lIHRvIHRlc3QgZm9yDQogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsNCiAgLy8gICBpZiBmYWxzZSwgb25seSByZXR1cm4gZWxlbWVudHMgKndpdGhvdXQqIGdpdmVuIGNsYXNzTmFtZQ0KICBmdW5jdGlvbiBmaWx0ZXJCeUNsYXNzKGVsZW1lbnRzLCBjbGFzc05hbWUsIGluY2x1ZGUpIHsNCiAgICB2YXIgcmVzdWx0cyA9IFtdOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsNCiAgICAgIGlmIChoYXNDbGFzcyhlbGVtZW50c1tpXSwgY2xhc3NOYW1lKSA9PSBpbmNsdWRlKQ0KICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOw0KICAgIH0NCiAgICByZXR1cm4gcmVzdWx0czsNCiAgfQ0KDQogIGZ1bmN0aW9uIG9uKG9iaiwgZXZlbnROYW1lLCBmdW5jKSB7DQogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7DQogICAgICBvYmouYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGZ1bmMsIGZhbHNlKTsNCiAgICB9IGVsc2UgaWYgKG9iai5hdHRhY2hFdmVudCkgew0KICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7DQogICAgfQ0KICB9DQoNCiAgZnVuY3Rpb24gb2ZmKG9iaiwgZXZlbnROYW1lLCBmdW5jKSB7DQogICAgaWYgKG9iai5yZW1vdmVFdmVudExpc3RlbmVyKQ0KICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7DQogICAgZWxzZSBpZiAob2JqLmRldGFjaEV2ZW50KSB7DQogICAgICBvYmouZGV0YWNoRXZlbnQoZXZlbnROYW1lLCBmdW5jKTsNCiAgICB9DQogIH0NCg0KICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aA0KICAvLyB0aGUgInBhZGRpbmciIENTUyBwcm9wZXJ0eQ0KICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvcGFkZGluZw0KICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7DQogICAgaWYgKHR5cGVvZih2YWx1ZSkgPT09ICJudW1iZXIiKQ0KICAgICAgdmFsdWUgPSBbdmFsdWVdOw0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsNCiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzBdLCBib3R0b206IHZhbHVlWzBdLCBsZWZ0OiB2YWx1ZVswXX07DQogICAgfQ0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsNCiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzFdLCBib3R0b206IHZhbHVlWzBdLCBsZWZ0OiB2YWx1ZVsxXX07DQogICAgfQ0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsNCiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzFdLCBib3R0b206IHZhbHVlWzJdLCBsZWZ0OiB2YWx1ZVsxXX07DQogICAgfQ0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsNCiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzFdLCBib3R0b206IHZhbHVlWzJdLCBsZWZ0OiB2YWx1ZVszXX07DQogICAgfQ0KICB9DQoNCiAgLy8gQ29udmVydCBhbiB1bnBhY2tlZCBwYWRkaW5nIG9iamVjdCB0byBhIENTUyB2YWx1ZQ0KICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgew0KICAgIHJldHVybiBwYWRkaW5nT2JqLnRvcCArICJweCAiICsgcGFkZGluZ09iai5yaWdodCArICJweCAiICsgcGFkZGluZ09iai5ib3R0b20gKyAicHggIiArIHBhZGRpbmdPYmoubGVmdCArICJweCI7DQogIH0NCg0KICAvLyBNYWtlcyBhIG51bWJlciBzdWl0YWJsZSBmb3IgQ1NTDQogIGZ1bmN0aW9uIHB4KHgpIHsNCiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikNCiAgICAgIHJldHVybiB4ICsgInB4IjsNCiAgICBlbHNlDQogICAgICByZXR1cm4geDsNCiAgfQ0KDQogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuDQogIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgZWl0aGVyIG51bGwsIG9yIGFuIG9iamVjdCB3aXRoIGZpbGwsIHBhZGRpbmcsDQogIC8vIGRlZmF1bHRXaWR0aCwgZGVmYXVsdEhlaWdodCBmaWVsZHMuDQogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgew0KICAgIHZhciBzaXppbmdFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2h0bWx3aWRnZXQtc2l6aW5nJ10iKTsNCiAgICBpZiAoIXNpemluZ0VsKQ0KICAgICAgcmV0dXJuIG51bGw7DQogICAgdmFyIHNwID0gSlNPTi5wYXJzZShzaXppbmdFbC50ZXh0Q29udGVudCB8fCBzaXppbmdFbC50ZXh0IHx8ICJ7fSIpOw0KICAgIGlmICh2aWV3ZXJNb2RlKSB7DQogICAgICByZXR1cm4gc3Audmlld2VyOw0KICAgIH0gZWxzZSB7DQogICAgICByZXR1cm4gc3AuYnJvd3NlcjsNCiAgICB9DQogIH0NCg0KICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLg0KICAvLyAgIEVhY2ggZWxlbWVudCBtdXN0IGJlIGEgdmFsaWQgSmF2YVNjcmlwdCBleHByZXNzaW9uIHRoYXQgeWllbGRzIGENCiAgLy8gICBmdW5jdGlvbi4gT3IsIGNhbiBiZSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggImNvZGUiIGFuZCAiZGF0YSINCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nDQogIC8vICAgb2YgSlMgdGhhdCdzIGFuIGV4cHIgdGhhdCB5aWVsZHMgYSBmdW5jdGlvbiwgYW5kICJkYXRhIiBzaG91bGQgYmUNCiAgLy8gICBhbiBvYmplY3QgdGhhdCB3aWxsIGJlIGFkZGVkIGFzIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgd2hlbiB0aGF0DQogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLg0KICAvLyBAcGFyYW0gdGFyZ2V0IFRoZSBvYmplY3QgdGhhdCB3aWxsIGJlICJ0aGlzIiBmb3IgZWFjaCBmdW5jdGlvbg0KICAvLyAgIGV4ZWN1dGlvbi4NCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlDQogIC8vICAgc2FtZSBhcmd1bWVudHMgd2lsbCBiZSBwYXNzZWQgdG8gYWxsIGZ1bmN0aW9ucy4pDQogIGZ1bmN0aW9uIGV2YWxBbmRSdW4odGFza3MsIHRhcmdldCwgYXJncykgew0KICAgIGlmICh0YXNrcykgew0KICAgICAgZm9yRWFjaCh0YXNrcywgZnVuY3Rpb24odGFzaykgew0KICAgICAgICB2YXIgdGhlc2VBcmdzID0gYXJnczsNCiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsNCiAgICAgICAgICB0aGVzZUFyZ3MgPSB0aGVzZUFyZ3MuY29uY2F0KFt0YXNrLmRhdGFdKTsNCiAgICAgICAgICB0YXNrID0gdGFzay5jb2RlOw0KICAgICAgICB9DQogICAgICAgIHZhciB0YXNrRnVuYyA9IGV2YWwoIigiICsgdGFzayArICIpIik7DQogICAgICAgIGlmICh0eXBlb2YodGFza0Z1bmMpICE9PSAiZnVuY3Rpb24iKSB7DQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOw0KICAgICAgICB9DQogICAgICAgIHRhc2tGdW5jLmFwcGx5KHRhcmdldCwgdGhlc2VBcmdzKTsNCiAgICAgIH0pOw0KICAgIH0NCiAgfQ0KDQogIGZ1bmN0aW9uIGluaXRTaXppbmcoZWwpIHsNCiAgICB2YXIgc2l6aW5nID0gc2l6aW5nUG9saWN5KGVsKTsNCiAgICBpZiAoIXNpemluZykNCiAgICAgIHJldHVybjsNCg0KICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsNCiAgICBpZiAoIWNlbCkNCiAgICAgIHJldHVybjsNCg0KICAgIGlmICh0eXBlb2Yoc2l6aW5nLnBhZGRpbmcpICE9PSAidW5kZWZpbmVkIikgew0KICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4gPSAiMCI7DQogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOw0KICAgIH0NCg0KICAgIGlmIChzaXppbmcuZmlsbCkgew0KICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOw0KICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICIxMDAlIjsNCiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOw0KICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLndpZHRoID0gIjEwMCUiOw0KICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmhlaWdodCA9ICIxMDAlIjsNCiAgICAgIGlmIChjZWwpIHsNCiAgICAgICAgY2VsLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsNCiAgICAgICAgdmFyIHBhZCA9IHVucGFja1BhZGRpbmcoc2l6aW5nLnBhZGRpbmcpOw0KICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7DQogICAgICAgIGNlbC5zdHlsZS5yaWdodCA9IHBhZC5yaWdodCArICJweCI7DQogICAgICAgIGNlbC5zdHlsZS5ib3R0b20gPSBwYWQuYm90dG9tICsgInB4IjsNCiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7DQogICAgICAgIGVsLnN0eWxlLndpZHRoID0gIjEwMCUiOw0KICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7DQogICAgICB9DQoNCiAgICAgIHJldHVybiB7DQogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwNCiAgICAgICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRIZWlnaHQ7IH0NCiAgICAgIH07DQoNCiAgICB9IGVsc2Ugew0KICAgICAgZWwuc3R5bGUud2lkdGggPSBweChzaXppbmcud2lkdGgpOw0KICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7DQoNCiAgICAgIHJldHVybiB7DQogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LA0KICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZWwub2Zmc2V0SGVpZ2h0OyB9DQogICAgICB9Ow0KICAgIH0NCiAgfQ0KDQogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzDQogIHZhciBkZWZhdWx0cyA9IHsNCiAgICBmaW5kOiBmdW5jdGlvbihzY29wZSkgew0KICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7DQogICAgfSwNCiAgICByZW5kZXJFcnJvcjogZnVuY3Rpb24oZWwsIGVycikgew0KICAgICAgdmFyICRlbCA9ICQoZWwpOw0KDQogICAgICB0aGlzLmNsZWFyRXJyb3IoZWwpOw0KDQogICAgICAvLyBBZGQgYWxsIHRoZXNlIGVycm9yIGNsYXNzZXMsIGFzIFNoaW55IGRvZXMNCiAgICAgIHZhciBlcnJDbGFzcyA9ICJzaGlueS1vdXRwdXQtZXJyb3IiOw0KICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7DQogICAgICAgIC8vIHVzZSB0aGUgY2xhc3NlcyBvZiB0aGUgZXJyb3IgY29uZGl0aW9uIGFzIENTUyBjbGFzcyBuYW1lcw0KICAgICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiAiICsgJC5tYXAoYXNBcnJheShlcnIudHlwZSksIGZ1bmN0aW9uKHR5cGUpIHsNCiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOw0KICAgICAgICB9KS5qb2luKCIgIik7DQogICAgICB9DQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7DQoNCiAgICAgIC8vIElzIGVsIGlubGluZSBvciBibG9jaz8gSWYgaW5saW5lIG9yIGlubGluZS1ibG9jaywganVzdCBkaXNwbGF5Om5vbmUgaXQNCiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLg0KICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuY3NzKCJkaXNwbGF5Iik7DQogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBkaXNwbGF5KTsNCg0KICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7DQogICAgICAgICRlbC5oaWRlKCk7DQogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsNCiAgICAgICAgICB2YXIgZXJyb3JTcGFuID0gJCgiPHNwYW4+IikuYWRkQ2xhc3MoZXJyQ2xhc3MpOw0KICAgICAgICAgIGVycm9yU3Bhbi50ZXh0KGVyci5tZXNzYWdlKTsNCiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsNCiAgICAgICAgfQ0KICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09PSAiYmxvY2siKSB7DQogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlDQogICAgICAgIC8vIGVsLCBhbmQgcG9zaXRpb24gdGhlIGVycm9yIHRvIGJlIG9uIHRvcCBvZiB0aGUgZWwuDQogICAgICAgIC8vIE1hcmsgaXQgd2l0aCBhIHVuaXF1ZSBJRCBhbmQgQ1NTIGNsYXNzIHNvIHdlIGNhbiByZW1vdmUgaXQgbGF0ZXIuDQogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7DQogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsNCiAgICAgICAgICB2YXIgZXJyb3JEaXYgPSAkKCI8ZGl2PiIpLmFkZENsYXNzKGVyckNsYXNzKS5jc3MoInBvc2l0aW9uIiwgImFic29sdXRlIikNCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkNCiAgICAgICAgICAgIC5jc3MoImxlZnQiLCBlbC5vZmZzZXRMZWZ0KQ0KICAgICAgICAgICAgLy8gc2V0dGluZyB3aWR0aCBjYW4gcHVzaCBvdXQgdGhlIHBhZ2Ugc2l6ZSwgZm9yY2luZyBvdGhlcndpc2UNCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3INCiAgICAgICAgICAgIC8vIHRoZSBlbGVtZW50IHRvIHNocmluazsgc28gdXNlIG1heC13aWR0aCBpbnN0ZWFkDQogICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQ0KICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsNCiAgICAgICAgICBlcnJvckRpdi50ZXh0KGVyci5tZXNzYWdlKTsNCiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JEaXYpOw0KDQogICAgICAgICAgLy8gUmVhbGx5IGR1bWIgd2F5IHRvIGtlZXAgdGhlIHNpemUvcG9zaXRpb24gb2YgdGhlIGVycm9yIGluIHN5bmMgd2l0aA0KICAgICAgICAgIC8vIHRoZSBwYXJlbnQgZWxlbWVudCBhcyB0aGUgd2luZG93IGlzIHJlc2l6ZWQgb3Igd2hhdGV2ZXIuDQogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICBpZiAoIWVycm9yRGl2WzBdLnBhcmVudEVsZW1lbnQpIHsNCiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRJZCk7DQogICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVycm9yRGl2DQogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkNCiAgICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpDQogICAgICAgICAgICAgIC5jc3MoIm1heFdpZHRoIiwgZWwub2Zmc2V0V2lkdGgpDQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7DQogICAgICAgICAgfSwgNTAwKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgY2xlYXJFcnJvcjogZnVuY3Rpb24oZWwpIHsNCiAgICAgIHZhciAkZWwgPSAkKGVsKTsNCiAgICAgIHZhciBkaXNwbGF5ID0gJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIik7DQogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBudWxsKTsNCg0KICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7DQogICAgICAgIGlmIChkaXNwbGF5KQ0KICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsNCiAgICAgICAgJChlbC5uZXh0U2libGluZykuZmlsdGVyKCIuaHRtbHdpZGdldHMtZXJyb3IiKS5yZW1vdmUoKTsNCiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIil7DQogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOw0KICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOw0KICAgICAgfQ0KICAgIH0sDQogICAgc2l6aW5nOiB7fQ0KICB9Ow0KDQogIC8vIENhbGxlZCBieSB3aWRnZXQgYmluZGluZ3MgdG8gcmVnaXN0ZXIgYSBuZXcgdHlwZSBvZiB3aWRnZXQuIFRoZSBkZWZpbml0aW9uDQogIC8vIG9iamVjdCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6DQogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlDQogIC8vICAgdXNlZCBieSBkZWZhdWx0IGFzIHRoZSBDU1MgY2xhc3NuYW1lIHRvIGxvb2sgZm9yLg0KICAvLyAtIGluaXRpYWxpemUgKG9wdGlvbmFsKSAtIEEgZnVuY3Rpb24oZWwpIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25jZSBwZXINCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkDQogIC8vICAgdmFsdWUgdG8gcmVuZGVyVmFsdWUuDQogIC8vIC0gcmVuZGVyVmFsdWUgKHJlcXVpcmVkKSAtIEEgZnVuY3Rpb24oZWwsIGRhdGEsIGluaXRWYWx1ZSkgdGhhdCB3aWxsIGJlDQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXINCiAgLy8gICBlbGVtZW50OyBTaGlueSBhcHBzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgcGVyDQogIC8vICAgZWxlbWVudCwgYXMgdGhlIGRhdGEgY2hhbmdlcy4NCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsNCiAgICBpZiAoIWRlZmluaXRpb24ubmFtZSkgew0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgbmFtZSIpOw0KICAgIH0NCiAgICBpZiAoIWRlZmluaXRpb24udHlwZSkgew0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgdHlwZSIpOw0KICAgIH0NCiAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IG91dHB1dCB3aWRnZXRzDQogICAgaWYgKGRlZmluaXRpb24udHlwZSAhPT0gIm91dHB1dCIpIHsNCiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsNCiAgICB9DQogICAgLy8gVE9ETzogVmVyaWZ5IHRoYXQgLm5hbWUgaXMgYSB2YWxpZCBDU1MgY2xhc3NuYW1lDQoNCiAgICAvLyBTdXBwb3J0IG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucy4gT2xkLXN0eWxlIGNsYXNzLWJvdW5kDQogICAgLy8gZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0ICJvYmplY3QiIHBlciB3aWRnZXQgcGVyIHR5cGUvY2xhc3Mgb2YNCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cw0KICAgIC8vIHRha2UgZWwgYW5kIGluc3RhbmNlIGFyZ3VtZW50cywgYmVjYXVzZSB0aGUgd2lkZ2V0IG9iamVjdCBjYW4ndA0KICAgIC8vIHN0b3JlIHRoZW0uIE5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucyBoYXZlIG9uZSB3aWRnZXQNCiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0DQogICAgLy8gcHJvdmlkZSByZW5kZXJWYWx1ZSBvciByZXNpemUgbWV0aG9kcyBhdCBhbGwsIGp1c3QgdGhlIHNpbmdsZSBtZXRob2QNCiAgICAvLyAgIGZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpDQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4NCiAgICAvLyBUaGlzIGVuYWJsZXMgYSBmYXIgbW9yZSBuYXR1cmFsIHByb2dyYW1taW5nIHN0eWxlIGZvciB0aGUgd2lkZ2V0DQogICAgLy8gYXV0aG9yLCB3aG8gY2FuIHN0b3JlIHBlci1pbnN0YW5jZSBzdGF0ZSB1c2luZyBlaXRoZXIgT08tc3R5bGUNCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzDQogICAgLy8gaXMgaW4gY29udHJhc3QgdG8gd2hhdCBjYW4gb25seSBiZSBjYWxsZWQgQy1zdHlsZSBwc2V1ZG8tT08gd2hpY2ggaXMNCiAgICAvLyB3aGF0IHdlIHJlcXVpcmVkIGJlZm9yZSkuDQogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgew0KICAgICAgZGVmaW5pdGlvbiA9IGNyZWF0ZUxlZ2FjeURlZmluaXRpb25BZGFwdGVyKGRlZmluaXRpb24pOw0KICAgIH0NCg0KICAgIGlmICghZGVmaW5pdGlvbi5yZW5kZXJWYWx1ZSkgew0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgcmVuZGVyVmFsdWUgZnVuY3Rpb24iKTsNCiAgICB9DQoNCiAgICAvLyBGb3Igc3RhdGljIHJlbmRlcmluZyAobm9uLVNoaW55KSwgdXNlIGEgc2ltcGxlIHdpZGdldCByZWdpc3RyYXRpb24NCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28NCiAgICAvLyBjb250YWluIHN0YXRpYyB3aWRnZXRzLg0KICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107DQogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLg0KICAgIHZhciBzdGF0aWNCaW5kaW5nID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgZGVmaW5pdGlvbik7DQogICAgb3ZlcnJpZGVNZXRob2Qoc3RhdGljQmluZGluZywgImZpbmQiLCBmdW5jdGlvbihzdXBlcmZ1bmMpIHsNCiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgew0KICAgICAgICB2YXIgcmVzdWx0cyA9IHN1cGVyZnVuYyhzY29wZSk7DQogICAgICAgIC8vIEZpbHRlciBvdXQgU2hpbnkgb3V0cHV0cywgd2Ugb25seSB3YW50IHRoZSBzdGF0aWMga2luZA0KICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOw0KICAgICAgfTsNCiAgICB9KTsNCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOw0KDQogICAgaWYgKHNoaW55TW9kZSkgew0KICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4NCiAgICAgIC8vIFRoZSBkZWZpbml0aW9uIGl0c2VsZiB3aWxsIG5vdCBiZSB0aGUgb3V0cHV0IGJpbmRpbmcsIGluc3RlYWQNCiAgICAgIC8vIHdlIHdpbGwgbWFrZSBhbiBvdXRwdXQgYmluZGluZyBvYmplY3QgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlDQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kDQogICAgICAvLyBuYW1lIChyZW5kZXJWYWx1ZSkgZm9yIGh0bWx3aWRnZXRzIGRlZmluaXRpb24gYW5kIFNoaW55IGJpbmRpbmdzDQogICAgICAvLyBidXQgdGhleSBhY3R1YWxseSBoYXZlIHF1aXRlIGRpZmZlcmVudCBzZW1hbnRpY3MgKHRoZSBTaGlueQ0KICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0DQogICAgICAvLyBzdHJpcHMgb2ZmIGJlZm9yZSBjYWxsaW5nIGh0bWx3aWRnZXRzIHJlbmRlclZhbHVlKS4gV2UgY2FuJ3QNCiAgICAgIC8vIGp1c3QgaWdub3JlIHRoZSBkaWZmZXJlbmNlIGJlY2F1c2UgaW4gc29tZSB3aWRnZXRzIGl0J3MgaGVscGZ1bA0KICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZg0KICAgICAgLy8gd2UncmUgbm90IGRlbGVnYXRpbmcsIHRoZW4gdGhhdCBjYWxsIHdpbGwgZ28gdG8gdGhlIFNoaW55DQogICAgICAvLyB2ZXJzaW9uIGluc3RlYWQgb2YgdGhlIGh0bWx3aWRnZXRzIHZlcnNpb24uDQoNCiAgICAgIC8vIE1lcmdlIGRlZmF1bHRzIHdpdGggZGVmaW5pdGlvbiwgd2l0aG91dCBtdXRhdGluZyBlaXRoZXIuDQogICAgICB2YXIgYmluZGluZ0RlZiA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGRlZmluaXRpb24pOw0KDQogICAgICAvLyBUaGlzIG9iamVjdCB3aWxsIGJlIG91ciBhY3R1YWwgU2hpbnkgYmluZGluZy4NCiAgICAgIHZhciBzaGlueUJpbmRpbmcgPSBuZXcgU2hpbnkuT3V0cHV0QmluZGluZygpOw0KDQogICAgICAvLyBXaXRoIGEgZmV3IGV4Y2VwdGlvbnMsIHdlJ2xsIHdhbnQgdG8gc2ltcGx5IHVzZSB0aGUgYmluZGluZ0RlZidzDQogICAgICAvLyB2ZXJzaW9uIG9mIG1ldGhvZHMgaWYgdGhleSBhcmUgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvDQogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwNCiAgICAgIC8vIG1ldGhvZHMgaW4gdGhlIGZ1dHVyZSwgYW5kIHdlIHdhbnQgdGhlbSB0byBiZSBvdmVycmlkZWFibGUgYnkNCiAgICAgIC8vIEhUTUxXaWRnZXQgYmluZGluZyBkZWZpbml0aW9ucywgdGhlbiB3ZSdsbCBuZWVkIHRvIGFkZCB0aGVtIHRvIHRoaXMNCiAgICAgIC8vIGxpc3QuDQogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJnZXRJZCIpOw0KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUNoYW5nZSIpOw0KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7DQogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJyZW5kZXJFcnJvciIpOw0KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAiY2xlYXJFcnJvciIpOw0KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7DQoNCiAgICAgIC8vIFRoZSBmaW5kLCByZW5kZXJWYWx1ZSwgYW5kIHJlc2l6ZSBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSwgYmVjYXVzZSB3ZQ0KICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4NCg0KICAgICAgc2hpbnlCaW5kaW5nLmZpbmQgPSBmdW5jdGlvbihzY29wZSkgew0KICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7DQoNCiAgICAgICAgLy8gT25seSByZXR1cm4gZWxlbWVudHMgdGhhdCBhcmUgU2hpbnkgb3V0cHV0cywgbm90IHN0YXRpYyBvbmVzDQogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7DQoNCiAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHdoYXRldmVyIGNhdXNlZCBTaGlueSB0byB0aGluayB0aGVyZSBtaWdodCBiZQ0KICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuDQogICAgICAgIC8vIFNpbmNlIHRoZXJlIG1pZ2h0IGJlIGxvdHMgb2YgZGlmZmVyZW50IGh0bWx3aWRnZXRzIGJpbmRpbmdzLCB3ZQ0KICAgICAgICAvLyBzY2hlZHVsZSBleGVjdXRpb24gZm9yIGxhdGVyLS1ubyBuZWVkIHRvIHN0YXRpY1JlbmRlciBtdWx0aXBsZQ0KICAgICAgICAvLyB0aW1lcy4NCiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSBkeW5hbWljUmVzdWx0cy5sZW5ndGgpDQogICAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXIoKTsNCg0KICAgICAgICByZXR1cm4gZHluYW1pY1Jlc3VsdHM7DQogICAgICB9Ow0KDQogICAgICAvLyBXcmFwIHJlbmRlclZhbHVlIHRvIGhhbmRsZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggdW5mb3J0dW5hdGVseSBpc24ndA0KICAgICAgLy8gc3VwcG9ydGVkIG5hdGl2ZWx5IGJ5IFNoaW55IGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZy4NCg0KICAgICAgc2hpbnlCaW5kaW5nLnJlbmRlclZhbHVlID0gZnVuY3Rpb24oZWwsIGRhdGEpIHsNCiAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMNCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGRhdGEuZXZhbHMgJiYgaSA8IGRhdGEuZXZhbHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2ldKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIWJpbmRpbmdEZWYucmVuZGVyT25OdWxsVmFsdWUpIHsNCiAgICAgICAgICBpZiAoZGF0YS54ID09PSBudWxsKSB7DQogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7DQogICAgICAgICAgaW5pdFNpemluZyhlbCk7DQoNCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7DQogICAgICAgICAgaWYgKGJpbmRpbmdEZWYuaW5pdGlhbGl6ZSkgew0KICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJpbmRpbmdEZWYuaW5pdGlhbGl6ZShlbCwgZWwub2Zmc2V0V2lkdGgsDQogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7DQogICAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgcmVzdWx0KTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgU2hpbnkucmVuZGVyRGVwZW5kZW5jaWVzKGRhdGEuZGVwcyk7DQogICAgICAgIGJpbmRpbmdEZWYucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsNCiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7DQogICAgICB9Ow0KDQogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQNCiAgICAgIGlmIChiaW5kaW5nRGVmLnJlc2l6ZSkgew0KICAgICAgICBzaGlueUJpbmRpbmcucmVzaXplID0gZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsNCiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuDQogICAgICAgICAgLy8gY2FsbGVkLCB3aGljaCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIHdpZGdldHMuDQogICAgICAgICAgaWYgKGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgew0KICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7DQogICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgICAgfQ0KDQogICAgICBTaGlueS5vdXRwdXRCaW5kaW5ncy5yZWdpc3RlcihzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYubmFtZSk7DQogICAgfQ0KICB9Ow0KDQogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOw0KICBmdW5jdGlvbiBzY2hlZHVsZVN0YXRpY1JlbmRlcigpIHsNCiAgICBpZiAoIXNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCkgew0KICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsNCiAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gbnVsbDsNCiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOw0KICAgICAgfSwgMSk7DQogICAgfQ0KICB9DQoNCiAgLy8gUmVuZGVyIHN0YXRpYyB3aWRnZXRzIGFmdGVyIHRoZSBkb2N1bWVudCBmaW5pc2hlcyBsb2FkaW5nDQogIC8vIFN0YXRpY2FsbHkgcmVuZGVyIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBvZiB0aGlzIHdpZGdldCdzIGNsYXNzDQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsNCiAgICB2YXIgYmluZGluZ3MgPSB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyB8fCBbXTsNCiAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nKSB7DQogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOw0KICAgICAgZm9yRWFjaChtYXRjaGVzLCBmdW5jdGlvbihlbCkgew0KICAgICAgICB2YXIgc2l6ZU9iaiA9IGluaXRTaXppbmcoZWwsIGJpbmRpbmcpOw0KDQogICAgICAgIGlmIChoYXNDbGFzcyhlbCwgImh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCIpKQ0KICAgICAgICAgIHJldHVybjsNCiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOw0KDQogICAgICAgIHZhciBpbml0UmVzdWx0Ow0KICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7DQogICAgICAgICAgaW5pdFJlc3VsdCA9IGJpbmRpbmcuaW5pdGlhbGl6ZShlbCwNCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwNCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0DQogICAgICAgICAgKTsNCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgaW5pdFJlc3VsdCk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoYmluZGluZy5yZXNpemUpIHsNCiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsNCiAgICAgICAgICB2YXIgcmVzaXplSGFuZGxlciA9IGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgICAgIHZhciBzaXplID0gew0KICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsDQogICAgICAgICAgICAgIGg6IHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApDQogICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIGlmIChzaXplLncgPT09IGxhc3RTaXplLncgJiYgc2l6ZS5oID09PSBsYXN0U2l6ZS5oKQ0KICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICBsYXN0U2l6ZSA9IHNpemU7DQogICAgICAgICAgICBiaW5kaW5nLnJlc2l6ZShlbCwgc2l6ZS53LCBzaXplLmgsIGluaXRSZXN1bHQpOw0KICAgICAgICAgIH07DQoNCiAgICAgICAgICBvbih3aW5kb3csICJyZXNpemUiLCByZXNpemVIYW5kbGVyKTsNCg0KICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciBjYXNlcyB3aGVyZSB3ZSdyZSBydW5uaW5nIGluIGEgU2hpbnkNCiAgICAgICAgICAvLyBhcHAsIGJ1dCB0aGUgd2lkZ2V0IGl0c2VsZiBpcyBub3QgYSBTaGlueSBvdXRwdXQsIGJ1dA0KICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzDQogICAgICAgICAgLy8gYW4gcm1hcmtkb3duIGRvY3VtZW50IHRoYXQgaGFzIHJ1bnRpbWU6c2hpbnkgYW5kIHdpZGdldA0KICAgICAgICAgIC8vIHRoYXQgaXNuJ3QgaW4gYSByZW5kZXIgZnVuY3Rpb24uIFNoaW55IG9ubHkga25vd3MgdG8NCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMNCiAgICAgICAgICAvLyB3aWRnZXRzLCBzbyB3ZSBkbyBpdCBvdXJzZWx2ZXMuDQogICAgICAgICAgaWYgKHdpbmRvdy5qUXVlcnkpIHsNCiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKA0KICAgICAgICAgICAgICAic2hvd24uaHRtbHdpZGdldHMgc2hvd24uYnMudGFiLmh0bWx3aWRnZXRzIHNob3duLmJzLmNvbGxhcHNlLmh0bWx3aWRnZXRzIiwNCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcg0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKA0KICAgICAgICAgICAgICAiaGlkZGVuLmh0bWx3aWRnZXRzIGhpZGRlbi5icy50YWIuaHRtbHdpZGdldHMgaGlkZGVuLmJzLmNvbGxhcHNlLmh0bWx3aWRnZXRzIiwNCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcg0KICAgICAgICAgICAgKTsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGhlIHNwZWNpZmljIGNhc2Ugb2YgaW9zbGlkZXMsIHdoaWNoDQogICAgICAgICAgLy8gZmxpcHMgc2xpZGVzIGJldHdlZW4gZGlzcGxheTpub25lIGFuZCBkaXNwbGF5OmJsb2NrLg0KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUNCiAgICAgICAgICAvLyBoZXJlLCBidXQgcmF0aGVyIGhhdmUgaW9zbGlkZXMgcmFpc2UgYSBnZW5lcmljIGV2ZW50LA0KICAgICAgICAgIC8vIGJ1dCB0aGUgcm1hcmtkb3duIHBhY2thZ2UganVzdCB3ZW50IHRvIENSQU4gc28gdGhlDQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4NCiAgICAgICAgICBpZiAod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHsNCiAgICAgICAgICAgIC8vIEl0J3MgT0sgdG8gbGltaXQgdGhpcyB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcg0KICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cw0KICAgICAgICAgICAgLy8gc3VjaCBicm93c2Vycy4NCiAgICAgICAgICAgIG9uKGRvY3VtZW50LCAic2xpZGVlbnRlciIsIHJlc2l6ZUhhbmRsZXIpOw0KICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7DQogICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHNjcmlwdERhdGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzY3JpcHRbZGF0YS1mb3I9JyIgKyBlbC5pZCArICInXVt0eXBlPSdhcHBsaWNhdGlvbi9qc29uJ10iKTsNCiAgICAgICAgaWYgKHNjcmlwdERhdGEpIHsNCiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOw0KICAgICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzDQogICAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsNCiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1trXSk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7DQogICAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBpbml0UmVzdWx0LCBbZWwsIGRhdGEueF0pOw0KICAgICAgICB9DQogICAgICB9KTsNCiAgICB9KTsNCg0KICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOw0KICB9DQoNCiAgLy8gV2FpdCB1bnRpbCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGxvYWRlZCB0byByZW5kZXIgdGhlIHdpZGdldHMuDQogIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7DQogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGZ1bmN0aW9uKCkgew0KICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsNCiAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsNCiAgICB9LCBmYWxzZSk7DQogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsNCiAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgZnVuY3Rpb24oKSB7DQogICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIikgew0KICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7DQogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsNCiAgICAgIH0NCiAgICB9KTsNCiAgfQ0KDQoNCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEF0dGFjaG1lbnRVcmwgPSBmdW5jdGlvbihkZXBuYW1lLCBrZXkpIHsNCiAgICAvLyBJZiBubyBrZXksIGRlZmF1bHQgdG8gdGhlIGZpcnN0IGl0ZW0NCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQ0KICAgICAga2V5ID0gMTsNCg0KICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOw0KICAgIGlmICghbGluaykgew0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJBdHRhY2htZW50ICIgKyBkZXBuYW1lICsgIi8iICsga2V5ICsgIiBub3QgZm91bmQgaW4gZG9jdW1lbnQiKTsNCiAgICB9DQogICAgcmV0dXJuIGxpbmsuZ2V0QXR0cmlidXRlKCJocmVmIik7DQogIH07DQoNCiAgd2luZG93LkhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMgPSBmdW5jdGlvbihkZikgew0KICAgIHZhciBuYW1lcyA9IFtdOw0KICAgIHZhciBsZW5ndGg7DQogICAgZm9yICh2YXIgbmFtZSBpbiBkZikgew0KICAgICAgICBpZiAoZGYuaGFzT3duUHJvcGVydHkobmFtZSkpDQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOw0KICAgICAgICBpZiAodHlwZW9mKGRmW25hbWVdKSAhPT0gIm9iamVjdCIgfHwgdHlwZW9mKGRmW25hbWVdLmxlbmd0aCkgPT09ICJ1bmRlZmluZWQiKSB7DQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMiKTsNCiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGgiKTsNCiAgICAgICAgfQ0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7DQogICAgfQ0KICAgIHZhciByZXN1bHRzID0gW107DQogICAgdmFyIGl0ZW07DQogICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbGVuZ3RoOyByb3crKykgew0KICAgICAgICBpdGVtID0ge307DQogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsNCiAgICAgICAgICAgIGl0ZW1bbmFtZXNbY29sXV0gPSBkZltuYW1lc1tjb2xdXVtyb3ddOw0KICAgICAgICB9DQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsNCiAgICB9DQogICAgcmV0dXJuIHJlc3VsdHM7DQogIH07DQoNCiAgd2luZG93LkhUTUxXaWRnZXRzLnRyYW5zcG9zZUFycmF5MkQgPSBmdW5jdGlvbihhcnJheSkgew0KICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5Ow0KICAgICAgdmFyIG5ld0FycmF5ID0gYXJyYXlbMF0ubWFwKGZ1bmN0aW9uKGNvbCwgaSkgew0KICAgICAgICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24ocm93KSB7DQogICAgICAgICAgICAgIHJldHVybiByb3dbaV0NCiAgICAgICAgICB9KQ0KICAgICAgfSk7DQogICAgICByZXR1cm4gbmV3QXJyYXk7DQogIH07DQogIC8vIFNwbGl0IHZhbHVlIGF0IHNwbGl0Q2hhciwgYnV0IGFsbG93IHNwbGl0Q2hhciB0byBiZSBlc2NhcGVkDQogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcg0KICAvLyB3aWxsIGJlIGluY2x1ZGVkIGFzIHVzdWFsIChpbmNsdWRpbmcgZXNjYXBlQ2hhciBpdHNlbGYpLg0KICBmdW5jdGlvbiBzcGxpdFdpdGhFc2NhcGUodmFsdWUsIHNwbGl0Q2hhciwgZXNjYXBlQ2hhcikgew0KICAgIHZhciByZXN1bHRzID0gW107DQogICAgdmFyIGVzY2FwZU1vZGUgPSBmYWxzZTsNCiAgICB2YXIgY3VycmVudFJlc3VsdCA9ICIiOw0KICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsNCiAgICAgIGlmICghZXNjYXBlTW9kZSkgew0KICAgICAgICBpZiAodmFsdWVbcG9zXSA9PT0gc3BsaXRDaGFyKSB7DQogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOw0KICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSAiIjsNCiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtwb3NdID09PSBlc2NhcGVDaGFyKSB7DQogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOw0KICAgICAgICB9DQogICAgICB9IGVsc2Ugew0KICAgICAgICBjdXJyZW50UmVzdWx0ICs9IHZhbHVlW3Bvc107DQogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsNCiAgICAgIH0NCiAgICB9DQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7DQogICAgICByZXN1bHRzLnB1c2goY3VycmVudFJlc3VsdCk7DQogICAgfQ0KICAgIHJldHVybiByZXN1bHRzOw0KICB9DQogIC8vIEZ1bmN0aW9uIGF1dGhvcmVkIGJ5IFlpaHVpL0pKIEFsbGFpcmUNCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7DQogICAgdmFyIHBhcnRzID0gc3BsaXRXaXRoRXNjYXBlKG1lbWJlciwgJy4nLCAnXFwnKTsNCiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykgew0KICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsNCiAgICAgIC8vIHBhcnQgbWF5IGJlIGEgY2hhcmFjdGVyIG9yICdudW1lcmljJyBtZW1iZXIgbmFtZQ0KICAgICAgaWYgKG8gIT09IG51bGwgJiYgdHlwZW9mIG8gPT09ICJvYmplY3QiICYmIHBhcnQgaW4gbykgew0KICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlDQogICAgICAgICAgaWYgKHR5cGVvZiBvW3BhcnRdID09PSAic3RyaW5nIikNCiAgICAgICAgICAgIG9bcGFydF0gPSBldmFsKCIoIiArIG9bcGFydF0gKyAiKSIpOw0KICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QNCiAgICAgICAgICBvID0gb1twYXJ0XTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgfTsNCg0KICAvLyBSZXRyaWV2ZSB0aGUgSFRNTFdpZGdldCBpbnN0YW5jZSAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlIG9mIGFuDQogIC8vIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pDQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuDQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGVsKSB7DQogICAgcmV0dXJuIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKTsNCiAgfTsNCg0KICAvLyBGaW5kcyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3RvciwNCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZg0KICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQ0KICAvLyBhc3NvY2lhdGVkIHdpdGggdGhhdCBlbGVtZW50LCBpZiBhbnkuIElmIG5vIGVsZW1lbnQgbWF0Y2hlcyB0aGUNCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0DQogIC8vIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBpdCwgdGhlbiBudWxsIGlzIHJldHVybmVkLg0KICAvLw0KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuDQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7DQogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgew0KICAgICAgc2VsZWN0b3IgPSBzY29wZTsNCiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7DQogICAgfQ0KDQogICAgdmFyIGVsID0gc2NvcGUucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7DQogICAgaWYgKGVsID09PSBudWxsKSB7DQogICAgICByZXR1cm4gbnVsbDsNCiAgICB9IGVsc2Ugew0KICAgICAgcmV0dXJuIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZShlbCk7DQogICAgfQ0KICB9Ow0KDQogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZA0KICAvLyByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlcyAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlcyBvZg0KICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQ0KICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdA0KICAvLyBtYXRjaCB0aGUgc2VsZWN0b3IgZG9uJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIEhUTUxXaWRnZXQNCiAgLy8gaW5zdGFuY2UsIHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGNvbnRhaW4gbnVsbHMuDQogIC8vDQogIC8vIFRoZSBzY29wZSBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIHdpbmRvdy5kb2N1bWVudC4NCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmRBbGwgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsNCiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7DQogICAgICBzZWxlY3RvciA9IHNjb3BlOw0KICAgICAgc2NvcGUgPSBkb2N1bWVudDsNCiAgICB9DQoNCiAgICB2YXIgbm9kZXMgPSBzY29wZS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsNCiAgICB2YXIgcmVzdWx0cyA9IFtdOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsNCiAgICAgIHJlc3VsdHMucHVzaCh3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2Uobm9kZXNbaV0pKTsNCiAgICB9DQogICAgcmV0dXJuIHJlc3VsdHM7DQogIH07DQoNCiAgdmFyIHBvc3RSZW5kZXJIYW5kbGVycyA9IFtdOw0KICBmdW5jdGlvbiBpbnZva2VQb3N0UmVuZGVySGFuZGxlcnMoKSB7DQogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsNCiAgICAgIHZhciBoYW5kbGVyID0gcG9zdFJlbmRlckhhbmRsZXJzLnNoaWZ0KCk7DQogICAgICBpZiAoaGFuZGxlcikgew0KICAgICAgICBoYW5kbGVyKCk7DQogICAgICB9DQogICAgfQ0KICB9DQoNCiAgLy8gUmVnaXN0ZXIgdGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgYWZ0ZXIgdGhlDQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuDQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7DQogICAgcG9zdFJlbmRlckhhbmRsZXJzLnB1c2goY2FsbGJhY2spOw0KICB9Ow0KDQogIC8vIFRha2VzIGEgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb24sIGFuZCByZXR1cm5zIGFuDQogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nDQogIC8vIHRvIHJld3JpdGUgYWxsIHRoZSBsb2dpYyBpbiB0aGlzIGZpbGUgdG8gYWNjb21vZGF0ZSBib3RoDQogIC8vIHR5cGVzIG9mIGRlZmluaXRpb25zLg0KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7DQogICAgdmFyIHJlc3VsdCA9IHsNCiAgICAgIG5hbWU6IGRlZm4ubmFtZSwNCiAgICAgIHR5cGU6IGRlZm4udHlwZSwNCiAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7DQogICAgICAgIHJldHVybiBkZWZuLmZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpOw0KICAgICAgfSwNCiAgICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgeCwgaW5zdGFuY2UpIHsNCiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJlbmRlclZhbHVlKHgpOw0KICAgICAgfSwNCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7DQogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZXNpemUod2lkdGgsIGhlaWdodCk7DQogICAgICB9DQogICAgfTsNCg0KICAgIGlmIChkZWZuLmZpbmQpDQogICAgICByZXN1bHQuZmluZCA9IGRlZm4uZmluZDsNCiAgICBpZiAoZGVmbi5yZW5kZXJFcnJvcikNCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7DQogICAgaWYgKGRlZm4uY2xlYXJFcnJvcikNCiAgICAgIHJlc3VsdC5jbGVhckVycm9yID0gZGVmbi5jbGVhckVycm9yOw0KDQogICAgcmV0dXJuIHJlc3VsdDsNCiAgfQ0KfSkoKTsNCg0K"></script>
<link href="data:text/css;charset=utf-8,%2Ezoom%2Darea%7Bfill%3Atransparent%3Bcursor%3Apointer%7D%2Eline%2Dseparator%2C%2Ex%2Daxis%2C%2Ey%2Dtick%7Bstroke%3A%23000%3Bfill%3Anone%3Bstroke%2Dwidth%3A1px%7D%2Eline%2Dseparator%3Alast%2Dchild%7Bdisplay%3Anone%7D%2Ex%2Daxis%7Bposition%3Aabsolute%3Bz%2Dindex%3A50%7Dtext%7Bstroke%3Anone%3Bfill%3A%23000%7D%2Egraph%2Dbody%20%2Eline%7Bheight%3A20px%3Bpadding%3A10px%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1uKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sbik6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuZXZlbnREcm9wcz1uKCk6dC5ldmVudERyb3BzPW4oKX0odGhpcyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHIpe2lmKGVbcl0pcmV0dXJuIGVbcl0uZXhwb3J0czt2YXIgaT1lW3JdPXtleHBvcnRzOnt9LGlkOnIsbG9hZGVkOiExfTtyZXR1cm4gdFtyXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxuKSxpLmxvYWRlZD0hMCxpLmV4cG9ydHN9dmFyIGU9e307cmV0dXJuIG4ubT10LG4uYz1lLG4ucD0iIixuKDApfShbZnVuY3Rpb24odCxuLGUpe2UoMTcpLHQuZXhwb3J0cz1lKDEwKX0sZnVuY3Rpb24odCxuLGUpeyFmdW5jdGlvbih0LGUpe2Uobil9KHRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7cmV0dXJuIE9zKHQobiksZSl9fWZ1bmN0aW9uIGUodCxuKXtyZXR1cm5bdCxuXX1mdW5jdGlvbiByKHQsbixlKXt2YXIgcj1NYXRoLmFicyhuLXQpL01hdGgubWF4KDAsZSksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLG89ci9pO3JldHVybiBvPj1Rcz9pKj0xMDpvPj1Lcz9pKj01Om8+PXRsJiYoaSo9Miksbjx0Py1pOml9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5sZW5ndGh9ZnVuY3Rpb24gbyh0KXtyZXR1cm4idHJhbnNsYXRlKCIrdCsiLDApIn1mdW5jdGlvbiB1KHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiK3QrIikifWZ1bmN0aW9uIGEodCl7dmFyIG49dC5iYW5kd2lkdGgoKS8yO3JldHVybiB0LnJvdW5kKCkmJihuPU1hdGgucm91bmQobikpLGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpK259fWZ1bmN0aW9uIGMoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gcyh0LG4pe2Z1bmN0aW9uIGUoZSl7dmFyIG89bnVsbD09cz9uLnRpY2tzP24udGlja3MuYXBwbHkobixpKTpuLmRvbWFpbigpOnMsdT1udWxsPT1sP24udGlja0Zvcm1hdD9uLnRpY2tGb3JtYXQuYXBwbHkobixpKTptbDpsLGc9TWF0aC5tYXgoZiwwKStwLHk9bi5yYW5nZSgpLG09eVswXSsuNSx4PXlbeS5sZW5ndGgtMV0rLjUsYj0obi5iYW5kd2lkdGg/YTptbCkobi5jb3B5KCkpLHc9ZS5zZWxlY3Rpb24/ZS5zZWxlY3Rpb24oKTplLE09dy5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksVD13LnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKG8sbikub3JkZXIoKSxrPVQuZXhpdCgpLFM9VC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLEE9VC5zZWxlY3QoImxpbmUiKSxOPVQuc2VsZWN0KCJ0ZXh0Iik7TT1NLm1lcmdlKE0uZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiIzAwMCIpKSxUPVQubWVyZ2UoUyksQT1BLm1lcmdlKFMuYXBwZW5kKCJsaW5lIikuYXR0cigic3Ryb2tlIiwiIzAwMCIpLmF0dHIocisiMiIsZCpmKS5hdHRyKHYrIjEiLC41KS5hdHRyKHYrIjIiLC41KSksTj1OLm1lcmdlKFMuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsIiMwMDAiKS5hdHRyKHIsZCpnKS5hdHRyKHYsLjUpLmF0dHIoImR5Iix0PT09eGw/IjBlbSI6dD09PXdsPyIwLjcxZW0iOiIwLjMyZW0iKSksZSE9PXcmJihNPU0udHJhbnNpdGlvbihlKSxUPVQudHJhbnNpdGlvbihlKSxBPUEudHJhbnNpdGlvbihlKSxOPU4udHJhbnNpdGlvbihlKSxrPWsudHJhbnNpdGlvbihlKS5hdHRyKCJvcGFjaXR5IixUbCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1iKHQpKT9fKHQpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLFMuYXR0cigib3BhY2l0eSIsVGwpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7dmFyIG49dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gXyhuJiZpc0Zpbml0ZShuPW4odCkpP246Yih0KSl9KSksay5yZW1vdmUoKSxNLmF0dHIoImQiLHQ9PT1NbHx8dD09Ymw/Ik0iK2QqaCsiLCIrbSsiSDAuNVYiK3grIkgiK2QqaDoiTSIrbSsiLCIrZCpoKyJWMC41SCIreCsiViIrZCpoKSxULmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuIF8oYih0KSl9KSxBLmF0dHIocisiMiIsZCpmKSxOLmF0dHIocixkKmcpLnRleHQodSksdy5maWx0ZXIoYykuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsdD09PWJsPyJzdGFydCI6dD09PU1sPyJlbmQiOiJtaWRkbGUiKSx3LmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1ifSl9dmFyIHIsaT1bXSxzPW51bGwsbD1udWxsLGY9NixoPTYscD0zLGQ9dD09PXhsfHx0PT09TWw/LTE6MSx2PXQ9PT1NbHx8dD09PWJsPyhyPSJ4IiwieSIpOihyPSJ5IiwieCIpLF89dD09PXhsfHx0PT09d2w/bzp1O3JldHVybiBlLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZSk6bn0sZS50aWNrcz1mdW5jdGlvbigpe3JldHVybiBpPXlsLmNhbGwoYXJndW1lbnRzKSxlfSxlLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD9bXTp5bC5jYWxsKHQpLGUpOmkuc2xpY2UoKX0sZS50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp5bC5jYWxsKHQpLGUpOnMmJnMuc2xpY2UoKX0sZS50aWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsZSk6bH0sZS50aWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1oPSt0LGUpOmZ9LGUudGlja1NpemVJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0rdCxlKTpmfSxlLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3QsZSk6aH0sZS50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0rdCxlKTpwfSxlfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHMoeGwsdCl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gcyhibCx0KX1mdW5jdGlvbiBoKHQpe3JldHVybiBzKHdsLHQpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIHMoTWwsdCl9ZnVuY3Rpb24gZCgpe2Zvcih2YXIgdCxuPTAsZT1hcmd1bWVudHMubGVuZ3RoLHI9e307bjxlOysrbil7aWYoISh0PWFyZ3VtZW50c1tuXSsiIil8fHQgaW4gcil0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtyW3RdPVtdfXJldHVybiBuZXcgdihyKX1mdW5jdGlvbiB2KHQpe3RoaXMuXz10fWZ1bmN0aW9uIF8odCxuKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLHI9dC5pbmRleE9mKCIuIik7aWYocj49MCYmKGU9dC5zbGljZShyKzEpLHQ9dC5zbGljZSgwLHIpKSx0JiYhbi5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6ZX19KX1mdW5jdGlvbiBnKHQsbil7Zm9yKHZhciBlLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKGU9dFtyXSkubmFtZT09PW4pcmV0dXJuIGUudmFsdWV9ZnVuY3Rpb24geSh0LG4sZSl7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKHRbcl0ubmFtZT09PW4pe3Rbcl09a2wsdD10LnNsaWNlKDAscikuY29uY2F0KHQuc2xpY2UocisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPWUmJnQucHVzaCh7bmFtZTpuLHZhbHVlOmV9KSx0fWZ1bmN0aW9uIG0odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcy5vd25lckRvY3VtZW50LGU9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIGU9PT1TbCYmbi5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09U2w/bi5jcmVhdGVFbGVtZW50KHQpOm4uY3JlYXRlRWxlbWVudE5TKGUsdCl9fWZ1bmN0aW9uIHgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gYigpe3JldHVybiBuZXcgd31mdW5jdGlvbiB3KCl7dGhpcy5fPSJAIisoKytDbCkudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIE0odCxuLGUpe3JldHVybiB0PVQodCxuLGUpLGZ1bmN0aW9uKG4pe3ZhciBlPW4ucmVsYXRlZFRhcmdldDtlJiYoZT09PXRoaXN8fDgmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBUKG4sZSxyKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG89dC5ldmVudDt0LmV2ZW50PWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxyKX1maW5hbGx5e3QuZXZlbnQ9b319fWZ1bmN0aW9uIGsodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgbj0iIixlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYobj10LnNsaWNlKGUrMSksdD10LnNsaWNlKDAsZSkpLHt0eXBlOnQsbmFtZTpufX0pfWZ1bmN0aW9uIFModCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcy5fX29uO2lmKG4pe2Zvcih2YXIgZSxyPTAsaT0tMSxvPW4ubGVuZ3RoO3I8bzsrK3IpZT1uW3JdLHQudHlwZSYmZS50eXBlIT09dC50eXBlfHxlLm5hbWUhPT10Lm5hbWU/blsrK2ldPWU6dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUudHlwZSxlLmxpc3RlbmVyLGUuY2FwdHVyZSk7KytpP24ubGVuZ3RoPWk6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIEEodCxuLGUpe3ZhciByPUxsLmhhc093blByb3BlcnR5KHQudHlwZSk/TTpUO3JldHVybiBmdW5jdGlvbihpLG8sdSl7dmFyIGEsYz10aGlzLl9fb24scz1yKG4sbyx1KTtpZihjKWZvcih2YXIgbD0wLGY9Yy5sZW5ndGg7bDxmOysrbClpZigoYT1jW2xdKS50eXBlPT09dC50eXBlJiZhLm5hbWU9PT10Lm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLnR5cGUsYS5saXN0ZW5lcixhLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihhLnR5cGUsYS5saXN0ZW5lcj1zLGEuY2FwdHVyZT1lKSx2b2lkKGEudmFsdWU9bik7dGhpcy5hZGRFdmVudExpc3RlbmVyKHQudHlwZSxzLGUpLGE9e3R5cGU6dC50eXBlLG5hbWU6dC5uYW1lLHZhbHVlOm4sbGlzdGVuZXI6cyxjYXB0dXJlOmV9LGM/Yy5wdXNoKGEpOnRoaXMuX19vbj1bYV19fWZ1bmN0aW9uIE4obixlLHIsaSl7dmFyIG89dC5ldmVudDtuLnNvdXJjZUV2ZW50PXQuZXZlbnQsdC5ldmVudD1uO3RyeXtyZXR1cm4gZS5hcHBseShyLGkpfWZpbmFsbHl7dC5ldmVudD1vfX1mdW5jdGlvbiBFKCl7fWZ1bmN0aW9uIEMoKXtyZXR1cm5bXX1mdW5jdGlvbiBQKHQsbil7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1ufWZ1bmN0aW9uIHoodCxuLGUscixpLG8pe2Zvcih2YXIgdSxhPTAsYz1uLmxlbmd0aCxzPW8ubGVuZ3RoO2E8czsrK2EpKHU9blthXSk/KHUuX19kYXRhX189b1thXSxyW2FdPXUpOmVbYV09bmV3IFAodCxvW2FdKTtmb3IoO2E8YzsrK2EpKHU9blthXSkmJihpW2FdPXUpfWZ1bmN0aW9uIFIodCxuLGUscixpLG8sdSl7dmFyIGEsYyxzLGw9e30sZj1uLmxlbmd0aCxoPW8ubGVuZ3RoLHA9bmV3IEFycmF5KGYpO2ZvcihhPTA7YTxmOysrYSkoYz1uW2FdKSYmKHBbYV09cz0kbCt1LmNhbGwoYyxjLl9fZGF0YV9fLGEsbikscyBpbiBsP2lbYV09YzpsW3NdPWMpO2ZvcihhPTA7YTxoOysrYSlzPSRsK3UuY2FsbCh0LG9bYV0sYSxvKSwoYz1sW3NdKT8oclthXT1jLGMuX19kYXRhX189b1thXSxsW3NdPW51bGwpOmVbYV09bmV3IFAodCxvW2FdKTtmb3IoYT0wO2E8ZjsrK2EpKGM9blthXSkmJmxbcFthXV09PT1jJiYoaVthXT1jKX1mdW5jdGlvbiBPKHQsbil7cmV0dXJuIHQ8bj8tMTp0Pm4/MTp0Pj1uPzA6TmFOfWZ1bmN0aW9uIEwodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIHEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBEKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gVSh0LG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX1mdW5jdGlvbiBGKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiBJKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIGoodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gWSh0LG4sZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4sZSl9fWZ1bmN0aW9uIEIodCxuLGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQscixlKX19ZnVuY3Rpb24gSCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX19ZnVuY3Rpb24gWCh0LG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09bn19ZnVuY3Rpb24gVih0LG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1lfX1mdW5jdGlvbiBXKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBHKHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3ICQodCl9ZnVuY3Rpb24gJCh0KXt0aGlzLl9ub2RlPXQsdGhpcy5fbmFtZXM9Vyh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIFoodCxuKXtmb3IodmFyIGU9Ryh0KSxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWUuYWRkKG5bcl0pfWZ1bmN0aW9uIEoodCxuKXtmb3IodmFyIGU9Ryh0KSxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWUucmVtb3ZlKG5bcl0pfWZ1bmN0aW9uIFEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7Wih0aGlzLHQpfX1mdW5jdGlvbiBLKHQpe3JldHVybiBmdW5jdGlvbigpe0oodGhpcyx0KX19ZnVuY3Rpb24gdHQodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXsobi5hcHBseSh0aGlzLGFyZ3VtZW50cyk/WjpKKSh0aGlzLHQpfX1mdW5jdGlvbiBudCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gZXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBydCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PW4/IiI6bn19ZnVuY3Rpb24gaXQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBvdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiB1dCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1uPyIiOm59fWZ1bmN0aW9uIGF0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIGN0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gc3QoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBsdCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIGZ0KHQsbixlKXt2YXIgcj1zZih0KSxpPXIuQ3VzdG9tRXZlbnQ7aT9pPW5ldyBpKG4sZSk6KGk9ci5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxlPyhpLmluaXRFdmVudChuLGUuYnViYmxlcyxlLmNhbmNlbGFibGUpLGkuZGV0YWlsPWUuZGV0YWlsKTppLmluaXRFdmVudChuLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGh0KHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGZ0KHRoaXMsdCxuKX19ZnVuY3Rpb24gcHQodCxuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZnQodGhpcyx0LG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gZHQodCxuKXt0aGlzLl9ncm91cHM9dCx0aGlzLl9wYXJlbnRzPW59ZnVuY3Rpb24gdnQoKXtyZXR1cm4gbmV3IGR0KFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sd2YpfWZ1bmN0aW9uIF90KCl7dC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBndCh0LG4pe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9TWYodCkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtuJiYoci5vbigiY2xpY2suZHJhZyIsQWYsITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIGU/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KGUuc3R5bGUuTW96VXNlclNlbGVjdD1lLl9fbm9zZWxlY3QsZGVsZXRlIGUuX19ub3NlbGVjdCl9ZnVuY3Rpb24geXQodCxuLGUscixpLG8sdSxhLGMscyl7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9bix0aGlzLnN1YmplY3Q9ZSx0aGlzLmlkZW50aWZpZXI9cix0aGlzLmFjdGl2ZT1pLHRoaXMueD1vLHRoaXMueT11LHRoaXMuZHg9YSx0aGlzLmR5PWMsdGhpcy5fPXN9ZnVuY3Rpb24gbXQoKXtyZXR1cm4hdC5ldmVudC5idXR0b259ZnVuY3Rpb24geHQoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIGJ0KG4pe3JldHVybiBudWxsPT1uP3t4OnQuZXZlbnQueCx5OnQuZXZlbnQueX06bn1mdW5jdGlvbiB3dCh0LG4pe3ZhciBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUpO2Zvcih2YXIgciBpbiBuKWVbcl09bltyXTtyZXR1cm4gZX1mdW5jdGlvbiBNdCgpe31mdW5jdGlvbiBUdCh0KXt2YXIgbjtyZXR1cm4gdD0odCsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKG49RGYuZXhlYyh0KSk/KG49cGFyc2VJbnQoblsxXSwxNiksbmV3IEV0KG4+PjgmMTV8bj4+NCYyNDAsbj4+NCYxNXwyNDAmbiwoMTUmbik8PDR8MTUmbiwxKSk6KG49VWYuZXhlYyh0KSk/a3QocGFyc2VJbnQoblsxXSwxNikpOihuPUZmLmV4ZWModCkpP25ldyBFdChuWzFdLG5bMl0sblszXSwxKToobj1JZi5leGVjKHQpKT9uZXcgRXQoMjU1Km5bMV0vMTAwLDI1NSpuWzJdLzEwMCwyNTUqblszXS8xMDAsMSk6KG49amYuZXhlYyh0KSk/U3QoblsxXSxuWzJdLG5bM10sbls0XSk6KG49WWYuZXhlYyh0KSk/U3QoMjU1Km5bMV0vMTAwLDI1NSpuWzJdLzEwMCwyNTUqblszXS8xMDAsbls0XSk6KG49QmYuZXhlYyh0KSk/Q3QoblsxXSxuWzJdLzEwMCxuWzNdLzEwMCwxKToobj1IZi5leGVjKHQpKT9DdChuWzFdLG5bMl0vMTAwLG5bM10vMTAwLG5bNF0pOlhmLmhhc093blByb3BlcnR5KHQpP2t0KFhmW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgRXQoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBrdCh0KXtyZXR1cm4gbmV3IEV0KHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBTdCh0LG4sZSxyKXtyZXR1cm4gcjw9MCYmKHQ9bj1lPU5hTiksbmV3IEV0KHQsbixlLHIpfWZ1bmN0aW9uIEF0KHQpe3JldHVybiB0IGluc3RhbmNlb2YgTXR8fCh0PVR0KHQpKSx0Pyh0PXQucmdiKCksbmV3IEV0KHQucix0LmcsdC5iLHQub3BhY2l0eSkpOm5ldyBFdH1mdW5jdGlvbiBOdCh0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/QXQodCk6bmV3IEV0KHQsbixlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBFdCh0LG4sZSxyKXt0aGlzLnI9K3QsdGhpcy5nPStuLHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gQ3QodCxuLGUscil7cmV0dXJuIHI8PTA/dD1uPWU9TmFOOmU8PTB8fGU+PTE/dD1uPU5hTjpuPD0wJiYodD1OYU4pLG5ldyBSdCh0LG4sZSxyKX1mdW5jdGlvbiBQdCh0KXtpZih0IGluc3RhbmNlb2YgUnQpcmV0dXJuIG5ldyBSdCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBNdHx8KHQ9VHQodCkpLCF0KXJldHVybiBuZXcgUnQ7aWYodCBpbnN0YW5jZW9mIFJ0KXJldHVybiB0O3Q9dC5yZ2IoKTt2YXIgbj10LnIvMjU1LGU9dC5nLzI1NSxyPXQuYi8yNTUsaT1NYXRoLm1pbihuLGUsciksbz1NYXRoLm1heChuLGUsciksdT1OYU4sYT1vLWksYz0obytpKS8yO3JldHVybiBhPyh1PW49PT1vPyhlLXIpL2ErNiooZTxyKTplPT09bz8oci1uKS9hKzI6KG4tZSkvYSs0LGEvPWM8LjU/bytpOjItby1pLHUqPTYwKTphPWM+MCYmYzwxPzA6dSxuZXcgUnQodSxhLGMsdC5vcGFjaXR5KX1mdW5jdGlvbiB6dCh0LG4sZSxyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/UHQodCk6bmV3IFJ0KHQsbixlLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBSdCh0LG4sZSxyKXt0aGlzLmg9K3QsdGhpcy5zPStuLHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gT3QodCxuLGUpe3JldHVybiAyNTUqKHQ8NjA/bisoZS1uKSp0LzYwOnQ8MTgwP2U6dDwyNDA/bisoZS1uKSooMjQwLXQpLzYwOm4pfWZ1bmN0aW9uIEx0KHQpe2lmKHQgaW5zdGFuY2VvZiBEdClyZXR1cm4gbmV3IER0KHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEh0KXt2YXIgbj10LmgqVmY7cmV0dXJuIG5ldyBEdCh0LmwsTWF0aC5jb3MobikqdC5jLE1hdGguc2luKG4pKnQuYyx0Lm9wYWNpdHkpfXQgaW5zdGFuY2VvZiBFdHx8KHQ9QXQodCkpO3ZhciBlPWp0KHQucikscj1qdCh0LmcpLGk9anQodC5iKSxvPVV0KCguNDEyNDU2NCplKy4zNTc1NzYxKnIrLjE4MDQzNzUqaSkvJGYpLHU9VXQoKC4yMTI2NzI5KmUrLjcxNTE1MjIqcisuMDcyMTc1KmkpL1pmKSxhPVV0KCguMDE5MzMzOSplKy4xMTkxOTIqcisuOTUwMzA0MSppKS9KZik7cmV0dXJuIG5ldyBEdCgxMTYqdS0xNiw1MDAqKG8tdSksMjAwKih1LWEpLHQub3BhY2l0eSl9ZnVuY3Rpb24gcXQodCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0x0KHQpOm5ldyBEdCh0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gRHQodCxuLGUscil7dGhpcy5sPSt0LHRoaXMuYT0rbix0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFV0KHQpe3JldHVybiB0Pm5oP01hdGgucG93KHQsMS8zKTp0L3RoK1FmfWZ1bmN0aW9uIEZ0KHQpe3JldHVybiB0PktmP3QqdCp0OnRoKih0LVFmKX1mdW5jdGlvbiBJdCh0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIGp0KHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFl0KHQpe2lmKHQgaW5zdGFuY2VvZiBIdClyZXR1cm4gbmV3IEh0KHQuaCx0LmMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIER0fHwodD1MdCh0KSk7dmFyIG49TWF0aC5hdGFuMih0LmIsdC5hKSpXZjtyZXR1cm4gbmV3IEh0KG48MD9uKzM2MDpuLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEJ0KHQsbixlLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9ZdCh0KTpuZXcgSHQodCxuLGUsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIEh0KHQsbixlLHIpe3RoaXMuaD0rdCx0aGlzLmM9K24sdGhpcy5sPStlLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBYdCh0KXtpZih0IGluc3RhbmNlb2YgV3QpcmV0dXJuIG5ldyBXdCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBFdHx8KHQ9QXQodCkpO3ZhciBuPXQuci8yNTUsZT10LmcvMjU1LHI9dC5iLzI1NSxpPShzaCpyK2FoKm4tY2gqZSkvKHNoK2FoLWNoKSxvPXItaSx1PSh1aCooZS1pKS1paCpvKS9vaCxhPU1hdGguc3FydCh1KnUrbypvKS8odWgqaSooMS1pKSksYz1hP01hdGguYXRhbjIodSxvKSpXZi0xMjA6TmFOO3JldHVybiBuZXcgV3QoYzwwP2MrMzYwOmMsYSxpLHQub3BhY2l0eSl9ZnVuY3Rpb24gVnQodCxuLGUscil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1h0KHQpOm5ldyBXdCh0LG4sZSxudWxsPT1yPzE6cil9ZnVuY3Rpb24gV3QodCxuLGUscil7dGhpcy5oPSt0LHRoaXMucz0rbix0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIEd0KHQsbixlLHIsaSl7dmFyIG89dCp0LHU9byp0O3JldHVybigoMS0zKnQrMypvLXUpKm4rKDQtNipvKzMqdSkqZSsoMSszKnQrMypvLTMqdSkqcit1KmkpLzZ9ZnVuY3Rpb24gJHQodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQrZSpufX1mdW5jdGlvbiBadCh0LG4sZSl7cmV0dXJuIHQ9TWF0aC5wb3codCxlKSxuPU1hdGgucG93KG4sZSktdCxlPTEvZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCtyKm4sZSl9fWZ1bmN0aW9uIEp0KHQsbil7dmFyIGU9bi10O3JldHVybiBlPyR0KHQsZT4xODB8fGU8LTE4MD9lLTM2MCpNYXRoLnJvdW5kKGUvMzYwKTplKTp5aChpc05hTih0KT9uOnQpfWZ1bmN0aW9uIFF0KHQpe3JldHVybiAxPT09KHQ9K3QpP0t0OmZ1bmN0aW9uKG4sZSl7cmV0dXJuIGUtbj9adChuLGUsdCk6eWgoaXNOYU4obik/ZTpuKX19ZnVuY3Rpb24gS3QodCxuKXt2YXIgZT1uLXQ7cmV0dXJuIGU/JHQodCxlKTp5aChpc05hTih0KT9uOnQpfWZ1bmN0aW9uIHRuKHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgZSxyLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksdT1uZXcgQXJyYXkoaSksYT1uZXcgQXJyYXkoaSk7Zm9yKGU9MDtlPGk7KytlKXI9TnQobltlXSksb1tlXT1yLnJ8fDAsdVtlXT1yLmd8fDAsYVtlXT1yLmJ8fDA7cmV0dXJuIG89dChvKSx1PXQodSksYT10KGEpLHIub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiByLnI9byh0KSxyLmc9dSh0KSxyLmI9YSh0KSxyKyIifX19ZnVuY3Rpb24gbm4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGVuKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdChuKSsiIn19ZnVuY3Rpb24gcm4odCl7cmV0dXJuIm5vbmUiPT09dD96aDoobGh8fChsaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxmaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsaGg9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLGxoLnN0eWxlLnRyYW5zZm9ybT10LHQ9aGguZ2V0Q29tcHV0ZWRTdHlsZShmaC5hcHBlbmRDaGlsZChsaCksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksZmgucmVtb3ZlQ2hpbGQobGgpLHQ9dC5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLFJoKCt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9ZnVuY3Rpb24gb24odCl7cmV0dXJuIG51bGw9PXQ/emg6KHBofHwocGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSkscGguc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpLCh0PXBoLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyh0PXQubWF0cml4LFJoKHQuYSx0LmIsdC5jLHQuZCx0LmUsdC5mKSk6emgpfWZ1bmN0aW9uIHVuKHQsbixlLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8odCxyLGksbyx1LGEpe2lmKHQhPT1pfHxyIT09byl7dmFyIGM9dS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLG4sbnVsbCxlKTthLnB1c2goe2k6Yy00LHg6VGgodCxpKX0se2k6Yy0yLHg6VGgocixvKX0pfWVsc2UoaXx8bykmJnUucHVzaCgidHJhbnNsYXRlKCIraStuK28rZSl9ZnVuY3Rpb24gdSh0LG4sZSxvKXt0IT09bj8odC1uPjE4MD9uKz0zNjA6bi10PjE4MCYmKHQrPTM2MCksby5wdXNoKHtpOmUucHVzaChpKGUpKyJyb3RhdGUoIixudWxsLHIpLTIseDpUaCh0LG4pfSkpOm4mJmUucHVzaChpKGUpKyJyb3RhdGUoIituK3IpfWZ1bmN0aW9uIGEodCxuLGUsbyl7dCE9PW4/by5wdXNoKHtpOmUucHVzaChpKGUpKyJza2V3WCgiLG51bGwsciktMix4OlRoKHQsbil9KTpuJiZlLnB1c2goaShlKSsic2tld1goIituK3IpfWZ1bmN0aW9uIGModCxuLGUscixvLHUpe2lmKHQhPT1lfHxuIT09cil7dmFyIGE9by5wdXNoKGkobykrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO3UucHVzaCh7aTphLTQseDpUaCh0LGUpfSx7aTphLTIseDpUaChuLHIpfSl9ZWxzZSAxPT09ZSYmMT09PXJ8fG8ucHVzaChpKG8pKyJzY2FsZSgiK2UrIiwiK3IrIikiKX1yZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj1bXSxpPVtdO3JldHVybiBuPXQobiksZT10KGUpLG8obi50cmFuc2xhdGVYLG4udHJhbnNsYXRlWSxlLnRyYW5zbGF0ZVgsZS50cmFuc2xhdGVZLHIsaSksdShuLnJvdGF0ZSxlLnJvdGF0ZSxyLGkpLGEobi5za2V3WCxlLnNrZXdYLHIsaSksYyhuLnNjYWxlWCxuLnNjYWxlWSxlLnNjYWxlWCxlLnNjYWxlWSxyLGkpLG49ZT1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPS0xLG89aS5sZW5ndGg7KytlPG87KXJbKG49aVtlXSkuaV09bi54KHQpO3JldHVybiByLmpvaW4oIiIpfX19ZnVuY3Rpb24gYW4odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9ZnVuY3Rpb24gY24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9ZnVuY3Rpb24gc24odCl7cmV0dXJuKCh0PU1hdGguZXhwKDIqdCkpLTEpLyh0KzEpfWZ1bmN0aW9uIGxuKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPXQoKG49enQobikpLmgsKGU9enQoZSkpLmgpLGk9S3Qobi5zLGUucyksbz1LdChuLmwsZS5sKSx1PUt0KG4ub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5oPXIodCksbi5zPWkodCksbi5sPW8odCksbi5vcGFjaXR5PXUodCksbisiIn19fWZ1bmN0aW9uIGZuKHQsbil7dmFyIGU9S3QoKHQ9cXQodCkpLmwsKG49cXQobikpLmwpLHI9S3QodC5hLG4uYSksaT1LdCh0LmIsbi5iKSxvPUt0KHQub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdC5sPWUobiksdC5hPXIobiksdC5iPWkobiksdC5vcGFjaXR5PW8obiksdCsiIn19ZnVuY3Rpb24gaG4odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9dCgobj1CdChuKSkuaCwoZT1CdChlKSkuaCksaT1LdChuLmMsZS5jKSxvPUt0KG4ubCxlLmwpLHU9S3Qobi5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuLmg9cih0KSxuLmM9aSh0KSxuLmw9byh0KSxuLm9wYWNpdHk9dSh0KSxuKyIifX19ZnVuY3Rpb24gcG4odCl7cmV0dXJuIGZ1bmN0aW9uIG4oZSl7ZnVuY3Rpb24gcihuLHIpe3ZhciBpPXQoKG49VnQobikpLmgsKHI9VnQocikpLmgpLG89S3Qobi5zLHIucyksdT1LdChuLmwsci5sKSxhPUt0KG4ub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbi5oPWkodCksbi5zPW8odCksbi5sPXUoTWF0aC5wb3codCxlKSksbi5vcGFjaXR5PWEodCksbisiIn19cmV0dXJuIGU9K2Usci5nYW1tYT1uLHJ9KDEpfWZ1bmN0aW9uIGRuKCl7cmV0dXJuIEtofHwoZXAodm4pLEtoPW5wLm5vdygpK3RwKX1mdW5jdGlvbiB2bigpe0toPTB9ZnVuY3Rpb24gX24oKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIGduKHQsbixlKXt2YXIgcj1uZXcgX247cmV0dXJuIHIucmVzdGFydCh0LG4sZSkscn1mdW5jdGlvbiB5bigpe2RuKCksKytHaDtmb3IodmFyIHQsbj1kaDtuOykodD1LaC1uLl90aW1lKT49MCYmbi5fY2FsbC5jYWxsKG51bGwsdCksbj1uLl9uZXh0Oy0tR2h9ZnVuY3Rpb24gbW4oKXtLaD0oUWg9bnAubm93KCkpK3RwLEdoPSRoPTA7dHJ5e3luKCl9ZmluYWxseXtHaD0wLGJuKCksS2g9MH19ZnVuY3Rpb24geG4oKXt2YXIgdD1ucC5ub3coKSxuPXQtUWg7bj5KaCYmKHRwLT1uLFFoPXQpfWZ1bmN0aW9uIGJuKCl7Zm9yKHZhciB0LG4sZT1kaCxyPTEvMDtlOyllLl9jYWxsPyhyPmUuX3RpbWUmJihyPWUuX3RpbWUpLHQ9ZSxlPWUuX25leHQpOihuPWUuX25leHQsZS5fbmV4dD1udWxsLGU9dD90Ll9uZXh0PW46ZGg9bik7dmg9dCx3bihyKX1mdW5jdGlvbiB3bih0KXtpZighR2gpeyRoJiYoJGg9Y2xlYXJUaW1lb3V0KCRoKSk7dmFyIG49dC1LaDtuPjI0Pyh0PDEvMCYmKCRoPXNldFRpbWVvdXQobW4sbikpLFpoJiYoWmg9Y2xlYXJJbnRlcnZhbChaaCkpKTooWmh8fChRaD1LaCxaaD1zZXRJbnRlcnZhbCh4bixKaCkpLEdoPTEsZXAobW4pKX19ZnVuY3Rpb24gTW4odCxuKXt2YXIgZT10Ll9fdHJhbnNpdGlvbjtpZighZXx8IShlPWVbbl0pfHxlLnN0YXRlPmFwKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGUiKTtyZXR1cm4gZX1mdW5jdGlvbiBUbih0LG4pe3ZhciBlPXQuX190cmFuc2l0aW9uO2lmKCFlfHwhKGU9ZVtuXSl8fGUuc3RhdGU+c3ApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZSIpO3JldHVybiBlfWZ1bmN0aW9uIGtuKHQsbil7dmFyIGU9dC5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW25dKSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlIik7cmV0dXJuIGV9ZnVuY3Rpb24gU24odCxuLGUpe2Z1bmN0aW9uIHIodCl7ZS5zdGF0ZT1jcCxlLnRpbWVyLnJlc3RhcnQoaSxlLmRlbGF5LGUudGltZSksZS5kZWxheTw9dCYmaSh0LWUuZGVsYXkpfWZ1bmN0aW9uIGkocil7dmFyIHMsbCxmLGg7aWYoZS5zdGF0ZSE9PWNwKXJldHVybiB1KCk7Zm9yKHMgaW4gYylpZihoPWNbc10saC5uYW1lPT09ZS5uYW1lKXtpZihoLnN0YXRlPT09bHApcmV0dXJuIHJwKGkpO2guc3RhdGU9PT1mcD8oaC5zdGF0ZT1wcCxoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIGNbc10pOitzPG4mJihoLnN0YXRlPXBwLGgudGltZXIuc3RvcCgpLGRlbGV0ZSBjW3NdKX1pZihycChmdW5jdGlvbigpe2Uuc3RhdGU9PT1scCYmKGUuc3RhdGU9ZnAsZS50aW1lci5yZXN0YXJ0KG8sZS5kZWxheSxlLnRpbWUpLG8ocikpfSksZS5zdGF0ZT1zcCxlLm9uLmNhbGwoInN0YXJ0Iix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09c3Ape2ZvcihlLnN0YXRlPWxwLGE9bmV3IEFycmF5KGY9ZS50d2Vlbi5sZW5ndGgpLHM9MCxsPS0xO3M8ZjsrK3MpKGg9ZS50d2VlbltzXS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKGFbKytsXT1oKTthLmxlbmd0aD1sKzF9fWZ1bmN0aW9uIG8obil7Zm9yKHZhciByPW48ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLG4vZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydCh1KSxlLnN0YXRlPWhwLDEpLGk9LTEsbz1hLmxlbmd0aDsrK2k8bzspYVtpXS5jYWxsKG51bGwscik7ZS5zdGF0ZT09PWhwJiYoZS5vbi5jYWxsKCJlbmQiLHQsdC5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLHUoKSl9ZnVuY3Rpb24gdSgpe2Uuc3RhdGU9cHAsZS50aW1lci5zdG9wKCksZGVsZXRlIGNbbl07Zm9yKHZhciByIGluIGMpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn12YXIgYSxjPXQuX190cmFuc2l0aW9uO2Nbbl09ZSxlLnRpbWVyPWduKHIsMCxlLnRpbWUpfWZ1bmN0aW9uIEFuKHQsbil7dmFyIGUscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1Ubih0aGlzLHQpLG89aS50d2VlbjtpZihvIT09ZSl7cj1lPW87Zm9yKHZhciB1PTAsYT1yLmxlbmd0aDt1PGE7Kyt1KWlmKHJbdV0ubmFtZT09PW4pe3I9ci5zbGljZSgpLHIuc3BsaWNlKHUsMSk7YnJlYWt9fWkudHdlZW49cn19ZnVuY3Rpb24gTm4odCxuLGUpe3ZhciByLGk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPVRuKHRoaXMsdCksdT1vLnR3ZWVuO2lmKHUhPT1yKXtpPShyPXUpLnNsaWNlKCk7Zm9yKHZhciBhPXtuYW1lOm4sdmFsdWU6ZX0sYz0wLHM9aS5sZW5ndGg7YzxzOysrYylpZihpW2NdLm5hbWU9PT1uKXtpW2NdPWE7YnJlYWt9Yz09PXMmJmkucHVzaChhKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIEVuKHQsbixlKXt2YXIgcj10Ll9pZDtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9VG4odGhpcyxyKTsodC52YWx1ZXx8KHQudmFsdWU9e30pKVtuXT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKHQpe3JldHVybiBrbih0LHIpLnZhbHVlW25dfX1mdW5jdGlvbiBDbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gUG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiB6bih0LG4sZSl7dmFyIHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWU/bnVsbDpvPT09cj9pOmk9bihyPW8sZSl9fWZ1bmN0aW9uIFJuKHQsbixlKXt2YXIgcixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTtyZXR1cm4gbz09PWU/bnVsbDpvPT09cj9pOmk9bihyPW8sZSl9fWZ1bmN0aW9uIE9uKHQsbixlKXt2YXIgcixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHUsYT1lKHRoaXMpO3JldHVybiBudWxsPT1hP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6KHU9dGhpcy5nZXRBdHRyaWJ1dGUodCksdT09PWE/bnVsbDp1PT09ciYmYT09PWk/bzpvPW4ocj11LGk9YSkpfX1mdW5jdGlvbiBMbih0LG4sZSl7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciB1LGE9ZSh0aGlzKTtyZXR1cm4gbnVsbD09YT92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKToodT10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCksdT09PWE/bnVsbDp1PT09ciYmYT09PWk/bzpvPW4ocj11LGk9YSkpfX1mdW5jdGlvbiBxbih0LG4pe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzLHI9bi5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIHImJmZ1bmN0aW9uKG4pe2Uuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLHIobikpfX1yZXR1cm4gZS5fdmFsdWU9bixlfWZ1bmN0aW9uIERuKHQsbil7ZnVuY3Rpb24gZSgpe3ZhciBlPXRoaXMscj1uLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gciYmZnVuY3Rpb24obil7ZS5zZXRBdHRyaWJ1dGUodCxyKG4pKX19cmV0dXJuIGUuX3ZhbHVlPW4sZX1mdW5jdGlvbiBVbih0LG4pe3JldHVybiBmdW5jdGlvbigpe01uKHRoaXMsdCkuZGVsYXk9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBGbih0LG4pe3JldHVybiBuPStuLGZ1bmN0aW9uKCl7TW4odGhpcyx0KS5kZWxheT1ufX1mdW5jdGlvbiBJbih0LG4pe3JldHVybiBmdW5jdGlvbigpe1RuKHRoaXMsdCkuZHVyYXRpb249K24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBqbih0LG4pe3JldHVybiBuPStuLGZ1bmN0aW9uKCl7VG4odGhpcyx0KS5kdXJhdGlvbj1ufX1mdW5jdGlvbiBZbih0LG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtUbih0aGlzLHQpLmVhc2U9bn19ZnVuY3Rpb24gQm4odCl7cmV0dXJuKHQrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHQ9dC5zbGljZSgwLG4pKSwhdHx8InN0YXJ0Ij09PXR9KX1mdW5jdGlvbiBIbih0LG4sZSl7dmFyIHIsaSxvPUJuKG4pP01uOlRuO3JldHVybiBmdW5jdGlvbigpe3ZhciB1PW8odGhpcyx0KSxhPXUub247YSE9PXImJihpPShyPWEpLmNvcHkoKSkub24obixlKSx1Lm9uPWl9fWZ1bmN0aW9uIFhuKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIGUgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK2UhPT10KXJldHVybjtuJiZuLnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBWbih0LG4pe3ZhciBlLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1zZih0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCksdT1vLmdldFByb3BlcnR5VmFsdWUodCksYT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxvLmdldFByb3BlcnR5VmFsdWUodCkpO3JldHVybiB1PT09YT9udWxsOnU9PT1lJiZhPT09cj9pOmk9bihlPXUscj1hKX19ZnVuY3Rpb24gV24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gR24odCxuLGUpe3ZhciByLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89c2YodGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIG89PT1lP251bGw6bz09PXI/aTppPW4ocj1vLGUpfX1mdW5jdGlvbiAkbih0LG4sZSl7dmFyIHIsaSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciB1PXNmKHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKSxhPXUuZ2V0UHJvcGVydHlWYWx1ZSh0KSxjPWUodGhpcyk7cmV0dXJuIG51bGw9PWMmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpLGM9dS5nZXRQcm9wZXJ0eVZhbHVlKHQpKSxhPT09Yz9udWxsOmE9PT1yJiZjPT09aT9vOm89bihyPWEsaT1jKX19ZnVuY3Rpb24gWm4odCxuLGUpe2Z1bmN0aW9uIHIoKXt2YXIgcj10aGlzLGk9bi5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIGkmJmZ1bmN0aW9uKG4pe3Iuc3R5bGUuc2V0UHJvcGVydHkodCxpKG4pLGUpfX1yZXR1cm4gci5fdmFsdWU9bixyfWZ1bmN0aW9uIEpuKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gUW4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dCh0aGlzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PW4/IiI6bn19ZnVuY3Rpb24gS24odCxuLGUscil7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1uLHRoaXMuX25hbWU9ZSx0aGlzLl9pZD1yfWZ1bmN0aW9uIHRlKHQpe3JldHVybiB2dCgpLnRyYW5zaXRpb24odCl9ZnVuY3Rpb24gbmUoKXtyZXR1cm4rK3FwfWZ1bmN0aW9uIGVlKHQpe3JldHVybit0fWZ1bmN0aW9uIHJlKHQpe3JldHVybiB0KnR9ZnVuY3Rpb24gaWUodCl7cmV0dXJuIHQqKDItdCl9ZnVuY3Rpb24gb2UodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQ6LS10KigyLXQpKzEpLzJ9ZnVuY3Rpb24gdWUodCl7cmV0dXJuIHQqdCp0fWZ1bmN0aW9uIGFlKHQpe3JldHVybi0tdCp0KnQrMX1mdW5jdGlvbiBjZSh0KXtyZXR1cm4oKHQqPTIpPD0xP3QqdCp0Oih0LT0yKSp0KnQrMikvMn1mdW5jdGlvbiBzZSh0KXtyZXR1cm4gMS1NYXRoLmNvcyh0KkJwKX1mdW5jdGlvbiBsZSh0KXtyZXR1cm4gTWF0aC5zaW4odCpCcCl9ZnVuY3Rpb24gZmUodCl7cmV0dXJuKDEtTWF0aC5jb3MoWXAqdCkpLzJ9ZnVuY3Rpb24gaGUodCl7cmV0dXJuIE1hdGgucG93KDIsMTAqdC0xMCl9ZnVuY3Rpb24gcGUodCl7cmV0dXJuIDEtTWF0aC5wb3coMiwtMTAqdCl9ZnVuY3Rpb24gZGUodCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdygyLDEwKnQtMTApOjItTWF0aC5wb3coMiwxMC0xMCp0KSkvMn1mdW5jdGlvbiB2ZSh0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIF9lKHQpe3JldHVybiBNYXRoLnNxcnQoMS0gLS10KnQpfWZ1bmN0aW9uIGdlKHQpe3JldHVybigodCo9Mik8PTE/MS1NYXRoLnNxcnQoMS10KnQpOk1hdGguc3FydCgxLSh0LT0yKSp0KSsxKS8yfWZ1bmN0aW9uIHllKHQpe3JldHVybiAxLW1lKDEtdCl9ZnVuY3Rpb24gbWUodCl7cmV0dXJuKHQ9K3QpPEhwP0twKnQqdDp0PFZwP0twKih0LT1YcCkqdCtXcDp0PCRwP0twKih0LT1HcCkqdCtacDpLcCoodC09SnApKnQrUXB9ZnVuY3Rpb24geGUodCl7cmV0dXJuKCh0Kj0yKTw9MT8xLW1lKDEtdCk6bWUodC0xKSsxKS8yfWZ1bmN0aW9uIGJlKHQsbil7Zm9yKHZhciBlOyEoZT10Ll9fdHJhbnNpdGlvbil8fCEoZT1lW25dKTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIGxkLnRpbWU9ZG4oKSxsZDtyZXR1cm4gZX1mdW5jdGlvbiB3ZSgpe3QuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gTWUodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gVGUoKXtyZXR1cm4hdC5ldmVudC5idXR0b259ZnVuY3Rpb24ga2UoKXt2YXIgdD10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm5bWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV19ZnVuY3Rpb24gU2UodCl7Zm9yKDshdC5fX2JydXNoOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHQuX19icnVzaH1mdW5jdGlvbiBBZSh0KXtyZXR1cm4gdFswXVswXT09PXRbMV1bMF18fHRbMF1bMV09PT10WzFdWzFdfWZ1bmN0aW9uIE5lKHQpe3ZhciBuPXQuX19icnVzaDtyZXR1cm4gbj9uLmRpbS5vdXRwdXQobi5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gRWUoKXtyZXR1cm4gUGUoYmQpfWZ1bmN0aW9uIENlKCl7cmV0dXJuIFBlKHdkKX1mdW5jdGlvbiBQZShuKXtmdW5jdGlvbiBlKHQpe3ZhciBlPXQucHJvcGVydHkoIl9fYnJ1c2giLGEpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtNZSgib3ZlcmxheSIpXSk7ZS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixUZC5vdmVybGF5KS5tZXJnZShlKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9U2UodGhpcykuZXh0ZW50O01mKHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pLHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbTWUoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsVGQuc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGk9dC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKG4uaGFuZGxlcyxmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlfSk7aS5leGl0KCkucmVtb3ZlKCksaS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIit0LnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKHQpe3JldHVybiBUZFt0LnR5cGVdfSksdC5lYWNoKHIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsdSl9ZnVuY3Rpb24gcigpe3ZhciB0PU1mKHRoaXMpLG49U2UodGhpcykuc2VsZWN0aW9uO24/KHQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLG5bMF1bMF0pLmF0dHIoInkiLG5bMF1bMV0pLmF0dHIoIndpZHRoIixuWzFdWzBdLW5bMF1bMF0pLmF0dHIoImhlaWdodCIsblsxXVsxXS1uWzBdWzFdKSx0LnNlbGVjdEFsbCgiLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9uWzFdWzBdLWgvMjpuWzBdWzBdLWgvMn0pLmF0dHIoInkiLGZ1bmN0aW9uKHQpe3JldHVybiJzIj09PXQudHlwZVswXT9uWzFdWzFdLWgvMjpuWzBdWzFdLWgvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4ibiI9PT10LnR5cGV8fCJzIj09PXQudHlwZT9uWzFdWzBdLW5bMF1bMF0raDpofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9uWzFdWzFdLW5bMF1bMV0raDpofSkpOnQuc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiBpKHQsbil7cmV0dXJuIHQuX19icnVzaC5lbWl0dGVyfHxuZXcgbyh0LG4pfWZ1bmN0aW9uIG8odCxuKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9bix0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wfWZ1bmN0aW9uIHUoKXtmdW5jdGlvbiBlKCl7dmFyIHQ9SWwoVCk7IXF8fHd8fE18fChNYXRoLmFicyh0WzBdLVVbMF0pPk1hdGguYWJzKHRbMV0tVVsxXSk/TT0hMDp3PSEwKSxVPXQsYj0hMCxfZCgpLG8oKX1mdW5jdGlvbiBvKCl7dmFyIHQ7c3dpdGNoKG09VVswXS1EWzBdLHg9VVsxXS1EWzFdLFMpe2Nhc2UgeWQ6Y2FzZSBnZDpBJiYobT1NYXRoLm1heCh6LWYsTWF0aC5taW4oTy12LG0pKSxoPWYrbSxfPXYrbSksTiYmKHg9TWF0aC5tYXgoUi1wLE1hdGgubWluKEwtZyx4KSksZD1wK3gseT1nK3gpO2JyZWFrO2Nhc2UgbWQ6QTwwPyhtPU1hdGgubWF4KHotZixNYXRoLm1pbihPLWYsbSkpLGg9ZittLF89dik6QT4wJiYobT1NYXRoLm1heCh6LXYsTWF0aC5taW4oTy12LG0pKSxoPWYsXz12K20pLE48MD8oeD1NYXRoLm1heChSLXAsTWF0aC5taW4oTC1wLHgpKSxkPXAreCx5PWcpOk4+MCYmKHg9TWF0aC5tYXgoUi1nLE1hdGgubWluKEwtZyx4KSksZD1wLHk9Zyt4KTticmVhaztjYXNlIHhkOkEmJihoPU1hdGgubWF4KHosTWF0aC5taW4oTyxmLW0qQSkpLF89TWF0aC5tYXgoeixNYXRoLm1pbihPLHYrbSpBKSkpLE4mJihkPU1hdGgubWF4KFIsTWF0aC5taW4oTCxwLXgqTikpLHk9TWF0aC5tYXgoUixNYXRoLm1pbihMLGcreCpOKSkpfV88aCYmKEEqPS0xLHQ9ZixmPXYsdj10LHQ9aCxoPV8sXz10LGsgaW4ga2QmJmouYXR0cigiY3Vyc29yIixUZFtrPWtkW2tdXSkpLHk8ZCYmKE4qPS0xLHQ9cCxwPWcsZz10LHQ9ZCxkPXkseT10LGsgaW4gU2QmJmouYXR0cigiY3Vyc29yIixUZFtrPVNkW2tdXSkpLEUuc2VsZWN0aW9uJiYoUD1FLnNlbGVjdGlvbiksdyYmKGg9UFswXVswXSxfPVBbMV1bMF0pLE0mJihkPVBbMF1bMV0seT1QWzFdWzFdKSxQWzBdWzBdPT09aCYmUFswXVsxXT09PWQmJlBbMV1bMF09PT1fJiZQWzFdWzFdPT09eXx8KEUuc2VsZWN0aW9uPVtbaCxkXSxbXyx5XV0sci5jYWxsKFQpLEYuYnJ1c2goKSl9ZnVuY3Rpb24gdSgpe2lmKHdlKCksdC5ldmVudC50b3VjaGVzKXtpZih0LmV2ZW50LnRvdWNoZXMubGVuZ3RoKXJldHVybjtjJiZjbGVhclRpbWVvdXQoYyksYz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yz1udWxsfSw1MDApLEkub24oInRvdWNobW92ZS5icnVzaCB0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsbnVsbCl9ZWxzZSBndCh0LmV2ZW50LnZpZXcsYiksWS5vbigia2V5ZG93bi5icnVzaCBrZXl1cC5icnVzaCBtb3VzZW1vdmUuYnJ1c2ggbW91c2V1cC5icnVzaCIsbnVsbCk7SS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLGouYXR0cigiY3Vyc29yIixUZC5vdmVybGF5KSxFLnNlbGVjdGlvbiYmKFA9RS5zZWxlY3Rpb24pLEFlKFApJiYoRS5zZWxlY3Rpb249bnVsbCxyLmNhbGwoVCkpLEYuZW5kKCl9ZnVuY3Rpb24gYSgpe3N3aXRjaCh0LmV2ZW50LmtleUNvZGUpe2Nhc2UgMTY6cT1BJiZOO2JyZWFrO2Nhc2UgMTg6Uz09PW1kJiYoQSYmKHY9Xy1tKkEsZj1oK20qQSksTiYmKGc9eS14Kk4scD1kK3gqTiksUz14ZCxvKCkpO2JyZWFrO2Nhc2UgMzI6UyE9PW1kJiZTIT09eGR8fChBPDA/dj1fLW06QT4wJiYoZj1oLW0pLE48MD9nPXkteDpOPjAmJihwPWQteCksUz15ZCxqLmF0dHIoImN1cnNvciIsVGQuc2VsZWN0aW9uKSxvKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufV9kKCl9ZnVuY3Rpb24gcygpe3N3aXRjaCh0LmV2ZW50LmtleUNvZGUpe2Nhc2UgMTY6cSYmKHc9TT1xPSExLG8oKSk7YnJlYWs7Y2FzZSAxODpTPT09eGQmJihBPDA/dj1fOkE+MCYmKGY9aCksTjwwP2c9eTpOPjAmJihwPWQpLFM9bWQsbygpKTticmVhaztjYXNlIDMyOlM9PT15ZCYmKHQuZXZlbnQuYWx0S2V5PyhBJiYodj1fLW0qQSxmPWgrbSpBKSxOJiYoZz15LXgqTixwPWQreCpOKSxTPXhkKTooQTwwP3Y9XzpBPjAmJihmPWgpLE48MD9nPXk6Tj4wJiYocD1kKSxTPW1kKSxqLmF0dHIoImN1cnNvciIsVGRba10pLG8oKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59X2QoKX1pZih0LmV2ZW50LnRvdWNoZXMpe2lmKHQuZXZlbnQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHQuZXZlbnQudG91Y2hlcy5sZW5ndGgpcmV0dXJuIF9kKCl9ZWxzZSBpZihjKXJldHVybjtpZihsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGYsaCxwLGQsdixfLGcseSxtLHgsYix3LE0sVD10aGlzLGs9dC5ldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxTPSJzZWxlY3Rpb24iPT09KHQuZXZlbnQubWV0YUtleT9rPSJvdmVybGF5IjprKT9nZDp0LmV2ZW50LmFsdEtleT94ZDptZCxBPW49PT13ZD9udWxsOkFkW2tdLE49bj09PWJkP251bGw6TmRba10sRT1TZShUKSxDPUUuZXh0ZW50LFA9RS5zZWxlY3Rpb24sej1DWzBdWzBdLFI9Q1swXVsxXSxPPUNbMV1bMF0sTD1DWzFdWzFdLHE9QSYmTiYmdC5ldmVudC5zaGlmdEtleSxEPUlsKFQpLFU9RCxGPWkoVCxhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCk7Im92ZXJsYXkiPT09az9FLnNlbGVjdGlvbj1QPVtbZj1uPT09d2Q/ejpEWzBdLHA9bj09PWJkP1I6RFsxXV0sW3Y9bj09PXdkP086ZixnPW49PT1iZD9MOnBdXTooZj1QWzBdWzBdLHA9UFswXVsxXSx2PVBbMV1bMF0sZz1QWzFdWzFdKSxoPWYsZD1wLF89dix5PWc7dmFyIEk9TWYoVCkuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksaj1JLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLFRkW2tdKTtpZih0LmV2ZW50LnRvdWNoZXMpSS5vbigidG91Y2htb3ZlLmJydXNoIixlLCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLHUsITApO2Vsc2V7dmFyIFk9TWYodC5ldmVudC52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsYSwhMCkub24oImtleXVwLmJydXNoIixzLCEwKS5vbigibW91c2Vtb3ZlLmJydXNoIixlLCEwKS5vbigibW91c2V1cC5icnVzaCIsdSwhMCk7TmYodC5ldmVudC52aWV3KX13ZSgpLHZwKFQpLHIuY2FsbChUKSxGLnN0YXJ0KCl9fWZ1bmN0aW9uIGEoKXt2YXIgdD10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIHQuZXh0ZW50PXMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQuZGltPW4sdH12YXIgYyxzPWtlLGw9VGUsZj1kKGUsInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxoPTY7cmV0dXJuIGUubW92ZT1mdW5jdGlvbih0LGUpe3Quc2VsZWN0aW9uP3Qub24oInN0YXJ0LmJydXNoIixmdW5jdGlvbigpe2kodGhpcyxhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCkuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIixmdW5jdGlvbigpe2kodGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oImJydXNoIixmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dS5zZWxlY3Rpb249MT09PXQmJkFlKHMpP251bGw6bCh0KSxyLmNhbGwobyksYS5icnVzaCgpfXZhciBvPXRoaXMsdT1vLl9fYnJ1c2gsYT1pKG8sYXJndW1lbnRzKSxjPXUuc2VsZWN0aW9uLHM9bi5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLHUuZXh0ZW50KSxsPUVoKGMscyk7cmV0dXJuIGMmJnM/dDp0KDEpfSk6dC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxvPWFyZ3VtZW50cyx1PXQuX19icnVzaCxhPW4uaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0LG8pOmUsdS5leHRlbnQpLGM9aSh0LG8pLmJlZm9yZXN0YXJ0KCk7dnAodCksdS5zZWxlY3Rpb249bnVsbD09YXx8QWUoYSk/bnVsbDphLHIuY2FsbCh0KSxjLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pfSxvLnByb3RvdHlwZT17YmVmb3Jlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09PSsrdGhpcy5hY3RpdmUmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24odCl7TihuZXcgdmQoZSx0LG4ub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSksZi5hcHBseSxmLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LGUuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZGQoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLGUpOnN9LGUuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZGQoISF0KSxlKTpsfSxlLmhhbmRsZVNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3QsZSk6aH0sZS5vbj1mdW5jdGlvbigpe3ZhciB0PWYub24uYXBwbHkoZixhcmd1bWVudHMpO3JldHVybiB0PT09Zj9lOnR9LGV9ZnVuY3Rpb24gemUodCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7cmV0dXJuIHQobi5zb3VyY2UudmFsdWUrbi50YXJnZXQudmFsdWUsZS5zb3VyY2UudmFsdWUrZS50YXJnZXQudmFsdWUpfX1mdW5jdGlvbiBSZSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIE9lKCl7cmV0dXJuIG5ldyBSZX1mdW5jdGlvbiBMZSh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gcWUodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIERlKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBVZSh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIEZlKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIEllKCl7fWZ1bmN0aW9uIGplKHQsbil7dmFyIGU9bmV3IEllO2lmKHQgaW5zdGFuY2VvZiBJZSl0LmVhY2goZnVuY3Rpb24odCxuKXtlLnNldChuLHQpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgcixpPS0xLG89dC5sZW5ndGg7aWYobnVsbD09bilmb3IoOysraTxvOyllLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8bzspZS5zZXQobihyPXRbaV0saSx0KSxyKX1lbHNlIGlmKHQpZm9yKHZhciB1IGluIHQpZS5zZXQodSx0W3VdKTtyZXR1cm4gZX1mdW5jdGlvbiBZZSgpe3JldHVybnt9fWZ1bmN0aW9uIEJlKHQsbixlKXt0W25dPWV9ZnVuY3Rpb24gSGUoKXtyZXR1cm4gamUoKX1mdW5jdGlvbiBYZSh0LG4sZSl7dC5zZXQobixlKX1mdW5jdGlvbiBWZSgpe31mdW5jdGlvbiBXZSh0LG4pe3ZhciBlPW5ldyBWZTtpZih0IGluc3RhbmNlb2YgVmUpdC5lYWNoKGZ1bmN0aW9uKHQpe2UuYWRkKHQpfSk7ZWxzZSBpZih0KXt2YXIgcj0tMSxpPXQubGVuZ3RoO2lmKG51bGw9PW4pZm9yKDsrK3I8aTspZS5hZGQodFtyXSk7ZWxzZSBmb3IoOysrcjxpOyllLmFkZChuKHRbcl0scix0KSl9cmV0dXJuIGV9ZnVuY3Rpb24gR2UodCl7cmV0dXJuIG5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcChmdW5jdGlvbih0LG4pe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrbisiXSJ9KS5qb2luKCIsIikrIn0iKX1mdW5jdGlvbiAkZSh0LG4pe3ZhciBlPUdlKHQpO3JldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiBuKGUociksaSx0KX19ZnVuY3Rpb24gWmUodCl7dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxlPVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciByIGluIHQpciBpbiBufHxlLnB1c2gobltyXT1yKX0pLGV9ZnVuY3Rpb24gSmUodCxuLGUscil7aWYoaXNOYU4obil8fGlzTmFOKGUpKXJldHVybiB0O3ZhciBpLG8sdSxhLGMscyxsLGYsaCxwPXQuX3Jvb3QsZD17ZGF0YTpyfSx2PXQuX3gwLF89dC5feTAsZz10Ll94MSx5PXQuX3kxO2lmKCFwKXJldHVybiB0Ll9yb290PWQsdDtmb3IoO3AubGVuZ3RoOylpZigocz1uPj0obz0oditnKS8yKSk/dj1vOmc9bywobD1lPj0odT0oXyt5KS8yKSk/Xz11Onk9dSxpPXAsIShwPXBbZj1sPDwxfHNdKSlyZXR1cm4gaVtmXT1kLHQ7aWYoYT0rdC5feC5jYWxsKG51bGwscC5kYXRhKSxjPSt0Ll95LmNhbGwobnVsbCxwLmRhdGEpLG49PT1hJiZlPT09YylyZXR1cm4gZC5uZXh0PXAsaT9pW2ZdPWQ6dC5fcm9vdD1kLHQ7ZG8gaT1pP2lbZl09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLChzPW4+PShvPSh2K2cpLzIpKT92PW86Zz1vLChsPWU+PSh1PShfK3kpLzIpKT9fPXU6eT11O3doaWxlKChmPWw8PDF8cyk9PT0oaD0oYz49dSk8PDF8YT49bykpO3JldHVybiBpW2hdPXAsaVtmXT1kLHR9ZnVuY3Rpb24gUWUodCl7dmFyIG4sZSxyLGksbz10Lmxlbmd0aCx1PW5ldyBBcnJheShvKSxhPW5ldyBBcnJheShvKSxjPTEvMCxzPTEvMCxsPS0oMS8wKSxmPS0oMS8wKTtmb3IoZT0wO2U8bzsrK2UpaXNOYU4ocj0rdGhpcy5feC5jYWxsKG51bGwsbj10W2VdKSl8fGlzTmFOKGk9K3RoaXMuX3kuY2FsbChudWxsLG4pKXx8KHVbZV09cixhW2VdPWkscjxjJiYoYz1yKSxyPmwmJihsPXIpLGk8cyYmKHM9aSksaT5mJiYoZj1pKSk7Zm9yKGw8YyYmKGM9dGhpcy5feDAsbD10aGlzLl94MSksZjxzJiYocz10aGlzLl95MCxmPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGMscykuY292ZXIobCxmKSxlPTA7ZTxvOysrZSlKZSh0aGlzLHVbZV0sYVtlXSx0W2VdKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBLZSh0KXtmb3IodmFyIG49MCxlPXQubGVuZ3RoO248ZTsrK24pdGhpcy5yZW1vdmUodFtuXSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gdHIodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gbnIodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gZXIodCxuLGUpe3ZhciByPW5ldyBycihudWxsPT1uP3RyOm4sbnVsbD09ZT9ucjplLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIG51bGw9PXQ/cjpyLmFkZEFsbCh0KX1mdW5jdGlvbiBycih0LG4sZSxyLGksbyl7dGhpcy5feD10LHRoaXMuX3k9bix0aGlzLl94MD1lLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIGlyKHQpe2Zvcih2YXIgbj17ZGF0YTp0LmRhdGF9LGU9bjt0PXQubmV4dDspZT1lLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gbn1mdW5jdGlvbiBvcih0KXtyZXR1cm4gdC54K3Qudnh9ZnVuY3Rpb24gdXIodCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIGFyKHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIGNyKHQsbil7dmFyIGU9dC5nZXQobik7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK24pO3JldHVybiBlfWZ1bmN0aW9uIHNyKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gbHIodCl7cmV0dXJuIHQueX1mdW5jdGlvbiBmcih0KXtyZXR1cm4gbmV3IGhyKHQpfWZ1bmN0aW9uIGhyKHQpe2lmKCEobj1qdi5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpOwp2YXIgbixlPW5bMV18fCIgIixyPW5bMl18fCI+IixpPW5bM118fCItIixvPW5bNF18fCIiLHU9ISFuWzVdLGE9bls2XSYmK25bNl0sYz0hIW5bN10scz1uWzhdJiYrbls4XS5zbGljZSgxKSxsPW5bOV18fCIiOyJuIj09PWw/KGM9ITAsbD0iZyIpOkl2W2xdfHwobD0iIiksKHV8fCIwIj09PWUmJiI9Ij09PXIpJiYodT0hMCxlPSIwIixyPSI9IiksdGhpcy5maWxsPWUsdGhpcy5hbGlnbj1yLHRoaXMuc2lnbj1pLHRoaXMuc3ltYm9sPW8sdGhpcy56ZXJvPXUsdGhpcy53aWR0aD1hLHRoaXMuY29tbWE9Yyx0aGlzLnByZWNpc2lvbj1zLHRoaXMudHlwZT1sfWZ1bmN0aW9uIHByKG4pe3JldHVybiBZdj1YdihuKSx0LmZvcm1hdD1Zdi5mb3JtYXQsdC5mb3JtYXRQcmVmaXg9WXYuZm9ybWF0UHJlZml4LFl2fWZ1bmN0aW9uIGRyKCl7dGhpcy5yZXNldCgpfWZ1bmN0aW9uIHZyKHQsbixlKXt2YXIgcj10LnM9bitlLGk9ci1uLG89ci1pO3QudD1uLW8rKGUtaSl9ZnVuY3Rpb24gX3IodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/Q186TWF0aC5hY29zKHQpfWZ1bmN0aW9uIGdyKHQpe3JldHVybiB0PjE/UF86dDwtMT8tUF86TWF0aC5hc2luKHQpfWZ1bmN0aW9uIHlyKHQpe3JldHVybih0PUhfKHQvMikpKnR9ZnVuY3Rpb24gbXIoKXt9ZnVuY3Rpb24geHIodCxuKXt0JiYkXy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiYkX1t0LnR5cGVdKHQsbil9ZnVuY3Rpb24gYnIodCxuLGUpe3ZhciByLGk9LTEsbz10Lmxlbmd0aC1lO2ZvcihuLmxpbmVTdGFydCgpOysraTxvOylyPXRbaV0sbi5wb2ludChyWzBdLHJbMV0sclsyXSk7bi5saW5lRW5kKCl9ZnVuY3Rpb24gd3IodCxuKXt2YXIgZT0tMSxyPXQubGVuZ3RoO2ZvcihuLnBvbHlnb25TdGFydCgpOysrZTxyOylicih0W2VdLG4sMSk7bi5wb2x5Z29uRW5kKCl9ZnVuY3Rpb24gTXIoKXtLXy5wb2ludD1rcn1mdW5jdGlvbiBUcigpe1NyKFp2LEp2KX1mdW5jdGlvbiBrcih0LG4pe0tfLnBvaW50PVNyLFp2PXQsSnY9bix0Kj1MXyxuKj1MXyxRdj10LEt2PUZfKG49bi8yK3pfKSx0Xz1IXyhuKX1mdW5jdGlvbiBTcih0LG4pe3QqPUxfLG4qPUxfLG49bi8yK3pfO3ZhciBlPXQtUXYscj1lPj0wPzE6LTEsaT1yKmUsbz1GXyhuKSx1PUhfKG4pLGE9dF8qdSxjPUt2Km8rYSpGXyhpKSxzPWEqcipIXyhpKTtKXy5hZGQoVV8ocyxjKSksUXY9dCxLdj1vLHRfPXV9ZnVuY3Rpb24gQXIodCl7cmV0dXJuW1VfKHRbMV0sdFswXSksZ3IodFsyXSldfWZ1bmN0aW9uIE5yKHQpe3ZhciBuPXRbMF0sZT10WzFdLHI9Rl8oZSk7cmV0dXJuW3IqRl8obikscipIXyhuKSxIXyhlKV19ZnVuY3Rpb24gRXIodCxuKXtyZXR1cm4gdFswXSpuWzBdK3RbMV0qblsxXSt0WzJdKm5bMl19ZnVuY3Rpb24gQ3IodCxuKXtyZXR1cm5bdFsxXSpuWzJdLXRbMl0qblsxXSx0WzJdKm5bMF0tdFswXSpuWzJdLHRbMF0qblsxXS10WzFdKm5bMF1dfWZ1bmN0aW9uIFByKHQsbil7dFswXSs9blswXSx0WzFdKz1uWzFdLHRbMl0rPW5bMl19ZnVuY3Rpb24genIodCxuKXtyZXR1cm5bdFswXSpuLHRbMV0qbix0WzJdKm5dfWZ1bmN0aW9uIFJyKHQpe3ZhciBuPVZfKHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1uLHRbMV0vPW4sdFsyXS89bn1mdW5jdGlvbiBPcih0LG4pe3NfLnB1c2gobF89W25fPXQscl89dF0pLG48ZV8mJihlXz1uKSxuPmlfJiYoaV89bil9ZnVuY3Rpb24gTHIodCxuKXt2YXIgZT1OcihbdCpMXyxuKkxfXSk7aWYoY18pe3ZhciByPUNyKGNfLGUpLGk9W3JbMV0sLXJbMF0sMF0sbz1DcihpLHIpO1JyKG8pLG89QXIobyk7dmFyIHUsYT10LW9fLGM9YT4wPzE6LTEscz1vWzBdKk9fKmMsbD1xXyhhKT4xODA7bF4oYypvXzxzJiZzPGMqdCk/KHU9b1sxXSpPXyx1PmlfJiYoaV89dSkpOihzPShzKzM2MCklMzYwLTE4MCxsXihjKm9fPHMmJnM8Yyp0KT8odT0tb1sxXSpPXyx1PGVfJiYoZV89dSkpOihuPGVfJiYoZV89biksbj5pXyYmKGlfPW4pKSksbD90PG9fP2pyKG5fLHQpPmpyKG5fLHJfKSYmKHJfPXQpOmpyKHQscl8pPmpyKG5fLHJfKSYmKG5fPXQpOnJfPj1uXz8odDxuXyYmKG5fPXQpLHQ+cl8mJihyXz10KSk6dD5vXz9qcihuXyx0KT5qcihuXyxyXykmJihyXz10KTpqcih0LHJfKT5qcihuXyxyXykmJihuXz10KX1lbHNlIHNfLnB1c2gobF89W25fPXQscl89dF0pO248ZV8mJihlXz1uKSxuPmlfJiYoaV89biksY189ZSxvXz10fWZ1bmN0aW9uIHFyKCl7ZWcucG9pbnQ9THJ9ZnVuY3Rpb24gRHIoKXtsX1swXT1uXyxsX1sxXT1yXyxlZy5wb2ludD1PcixjXz1udWxsfWZ1bmN0aW9uIFVyKHQsbil7aWYoY18pe3ZhciBlPXQtb187bmcuYWRkKHFfKGUpPjE4MD9lKyhlPjA/MzYwOi0zNjApOmUpfWVsc2UgdV89dCxhXz1uO0tfLnBvaW50KHQsbiksTHIodCxuKX1mdW5jdGlvbiBGcigpe0tfLmxpbmVTdGFydCgpfWZ1bmN0aW9uIElyKCl7VXIodV8sYV8pLEtfLmxpbmVFbmQoKSxxXyhuZyk+Tl8mJihuXz0tKHJfPTE4MCkpLGxfWzBdPW5fLGxfWzFdPXJfLGNfPW51bGx9ZnVuY3Rpb24ganIodCxuKXtyZXR1cm4obi09dCk8MD9uKzM2MDpufWZ1bmN0aW9uIFlyKHQsbil7cmV0dXJuIHRbMF0tblswXX1mdW5jdGlvbiBCcih0LG4pe3JldHVybiB0WzBdPD10WzFdP3RbMF08PW4mJm48PXRbMV06bjx0WzBdfHx0WzFdPG59ZnVuY3Rpb24gSHIodCxuKXt0Kj1MXyxuKj1MXzt2YXIgZT1GXyhuKTtYcihlKkZfKHQpLGUqSF8odCksSF8obikpfWZ1bmN0aW9uIFhyKHQsbixlKXsrK2ZfLHBfKz0odC1wXykvZl8sZF8rPShuLWRfKS9mXyx2Xys9KGUtdl8pL2ZffWZ1bmN0aW9uIFZyKCl7aWcucG9pbnQ9V3J9ZnVuY3Rpb24gV3IodCxuKXt0Kj1MXyxuKj1MXzt2YXIgZT1GXyhuKTtUXz1lKkZfKHQpLGtfPWUqSF8odCksU189SF8obiksaWcucG9pbnQ9R3IsWHIoVF8sa18sU18pfWZ1bmN0aW9uIEdyKHQsbil7dCo9TF8sbio9TF87dmFyIGU9Rl8obikscj1lKkZfKHQpLGk9ZSpIXyh0KSxvPUhfKG4pLHU9VV8oVl8oKHU9a18qby1TXyppKSp1Kyh1PVNfKnItVF8qbykqdSsodT1UXyppLWtfKnIpKnUpLFRfKnIra18qaStTXypvKTtoXys9dSxfXys9dSooVF8rKFRfPXIpKSxnXys9dSooa18rKGtfPWkpKSx5Xys9dSooU18rKFNfPW8pKSxYcihUXyxrXyxTXyl9ZnVuY3Rpb24gJHIoKXtpZy5wb2ludD1Icn1mdW5jdGlvbiBacigpe2lnLnBvaW50PVFyfWZ1bmN0aW9uIEpyKCl7S3Iod18sTV8pLGlnLnBvaW50PUhyfWZ1bmN0aW9uIFFyKHQsbil7d189dCxNXz1uLHQqPUxfLG4qPUxfLGlnLnBvaW50PUtyO3ZhciBlPUZfKG4pO1RfPWUqRl8odCksa189ZSpIXyh0KSxTXz1IXyhuKSxYcihUXyxrXyxTXyl9ZnVuY3Rpb24gS3IodCxuKXt0Kj1MXyxuKj1MXzt2YXIgZT1GXyhuKSxyPWUqRl8odCksaT1lKkhfKHQpLG89SF8obiksdT1rXypvLVNfKmksYT1TXypyLVRfKm8sYz1UXyppLWtfKnIscz1WXyh1KnUrYSphK2MqYyksbD1ncihzKSxmPXMmJi1sL3M7bV8rPWYqdSx4Xys9ZiphLGJfKz1mKmMsaF8rPWwsX18rPWwqKFRfKyhUXz1yKSksZ18rPWwqKGtfKyhrXz1pKSkseV8rPWwqKFNfKyhTXz1vKSksWHIoVF8sa18sU18pfWZ1bmN0aW9uIHRpKHQsbil7cmV0dXJuW3Q+Q18/dC1SXzp0PC1DXz90K1JfOnQsbl19ZnVuY3Rpb24gbmkodCxuLGUpe3JldHVybih0JT1SXyk/bnx8ZT9hZyhyaSh0KSxpaShuLGUpKTpyaSh0KTpufHxlP2lpKG4sZSk6dGl9ZnVuY3Rpb24gZWkodCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7cmV0dXJuIG4rPXQsW24+Q18/bi1SXzpuPC1DXz9uK1JfOm4sZV19fWZ1bmN0aW9uIHJpKHQpe3ZhciBuPWVpKHQpO3JldHVybiBuLmludmVydD1laSgtdCksbn1mdW5jdGlvbiBpaSh0LG4pe2Z1bmN0aW9uIGUodCxuKXt2YXIgZT1GXyhuKSxhPUZfKHQpKmUsYz1IXyh0KSplLHM9SF8obiksbD1zKnIrYSppO3JldHVybltVXyhjKm8tbCp1LGEqci1zKmkpLGdyKGwqbytjKnUpXX12YXIgcj1GXyh0KSxpPUhfKHQpLG89Rl8obiksdT1IXyhuKTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgZT1GXyhuKSxhPUZfKHQpKmUsYz1IXyh0KSplLHM9SF8obiksbD1zKm8tYyp1O3JldHVybltVXyhjKm8rcyp1LGEqcitsKmkpLGdyKGwqci1hKmkpXX0sZX1mdW5jdGlvbiBvaSh0LG4sZSxyLGksbyl7aWYoZSl7dmFyIHU9Rl8obiksYT1IXyhuKSxjPXIqZTtudWxsPT1pPyhpPW4rcipSXyxvPW4tYy8yKTooaT11aSh1LGkpLG89dWkodSxvKSwocj4wP2k8bzppPm8pJiYoaSs9cipSXykpO2Zvcih2YXIgcyxsPWk7cj4wP2w+bzpsPG87bC09YylzPUFyKFt1LC1hKkZfKGwpLC1hKkhfKGwpXSksdC5wb2ludChzWzBdLHNbMV0pfX1mdW5jdGlvbiB1aSh0LG4pe249TnIobiksblswXS09dCxScihuKTt2YXIgZT1fcigtblsxXSk7cmV0dXJuKCgtblsyXTwwPy1lOmUpK1JfLU5fKSVSX31mdW5jdGlvbiBhaSh0LG4sZSxyKXt0aGlzLng9dCx0aGlzLno9bix0aGlzLm89ZSx0aGlzLmU9cix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIGNpKHQpe2lmKG49dC5sZW5ndGgpe2Zvcih2YXIgbixlLHI9MCxpPXRbMF07KytyPG47KWkubj1lPXRbcl0sZS5wPWksaT1lO2kubj1lPXRbMF0sZS5wPWl9fWZ1bmN0aW9uIHNpKHQsbixlLHIpe2Z1bmN0aW9uIGkoaSxvKXtyZXR1cm4gdDw9aSYmaTw9ZSYmbjw9byYmbzw9cn1mdW5jdGlvbiBvKGksbyxhLHMpe3ZhciBsPTAsZj0wO2lmKG51bGw9PWl8fChsPXUoaSxhKSkhPT0oZj11KG8sYSkpfHxjKGksbyk8MF5hPjApe2RvIHMucG9pbnQoMD09PWx8fDM9PT1sP3Q6ZSxsPjE/cjpuKTt3aGlsZSgobD0obCthKzQpJTQpIT09Zil9ZWxzZSBzLnBvaW50KG9bMF0sb1sxXSl9ZnVuY3Rpb24gdShyLGkpe3JldHVybiBxXyhyWzBdLXQpPE5fP2k+MD8wOjM6cV8oclswXS1lKTxOXz9pPjA/MjoxOnFfKHJbMV0tbik8Tl8/aT4wPzE6MDppPjA/MzoyfWZ1bmN0aW9uIGEodCxuKXtyZXR1cm4gYyh0Lngsbi54KX1mdW5jdGlvbiBjKHQsbil7dmFyIGU9dSh0LDEpLHI9dShuLDEpO3JldHVybiBlIT09cj9lLXI6MD09PWU/blsxXS10WzFdOjE9PT1lP3RbMF0tblswXToyPT09ZT90WzFdLW5bMV06blswXS10WzBdfXJldHVybiBmdW5jdGlvbih1KXtmdW5jdGlvbiBjKHQsbil7aSh0LG4pJiZTLnBvaW50KHQsbil9ZnVuY3Rpb24gcygpe2Zvcih2YXIgbj0wLGU9MCxpPV8ubGVuZ3RoO2U8aTsrK2UpZm9yKHZhciBvLHUsYT1fW2VdLGM9MSxzPWEubGVuZ3RoLGw9YVswXSxmPWxbMF0saD1sWzFdO2M8czsrK2Mpbz1mLHU9aCxsPWFbY10sZj1sWzBdLGg9bFsxXSx1PD1yP2g+ciYmKGYtbykqKHItdSk+KGgtdSkqKHQtbykmJisrbjpoPD1yJiYoZi1vKSooci11KTwoaC11KSoodC1vKSYmLS1uO3JldHVybiBufWZ1bmN0aW9uIGwoKXtTPUEsdj1bXSxfPVtdLGs9ITB9ZnVuY3Rpb24gZigpe3ZhciB0PXMoKSxuPWsmJnQsZT0odj1sbCh2KSkubGVuZ3RoOyhufHxlKSYmKHUucG9seWdvblN0YXJ0KCksbiYmKHUubGluZVN0YXJ0KCksbyhudWxsLG51bGwsMSx1KSx1LmxpbmVFbmQoKSksZSYmVGcodixhLHQsbyx1KSx1LnBvbHlnb25FbmQoKSksUz11LHY9Xz1nPW51bGx9ZnVuY3Rpb24gaCgpe04ucG9pbnQ9ZCxfJiZfLnB1c2goZz1bXSksVD0hMCxNPSExLGI9dz1OYU59ZnVuY3Rpb24gcCgpe3YmJihkKHksbSkseCYmTSYmQS5yZWpvaW4oKSx2LnB1c2goQS5yZXN1bHQoKSkpLE4ucG9pbnQ9YyxNJiZTLmxpbmVFbmQoKX1mdW5jdGlvbiBkKG8sdSl7dmFyIGE9aShvLHUpO2lmKF8mJmcucHVzaChbbyx1XSksVCl5PW8sbT11LHg9YSxUPSExLGEmJihTLmxpbmVTdGFydCgpLFMucG9pbnQobyx1KSk7ZWxzZSBpZihhJiZNKVMucG9pbnQobyx1KTtlbHNle3ZhciBjPVtiPU1hdGgubWF4KFNnLE1hdGgubWluKGtnLGIpKSx3PU1hdGgubWF4KFNnLE1hdGgubWluKGtnLHcpKV0scz1bbz1NYXRoLm1heChTZyxNYXRoLm1pbihrZyxvKSksdT1NYXRoLm1heChTZyxNYXRoLm1pbihrZyx1KSldO3dnKGMscyx0LG4sZSxyKT8oTXx8KFMubGluZVN0YXJ0KCksUy5wb2ludChjWzBdLGNbMV0pKSxTLnBvaW50KHNbMF0sc1sxXSksYXx8Uy5saW5lRW5kKCksaz0hMSk6YSYmKFMubGluZVN0YXJ0KCksUy5wb2ludChvLHUpLGs9ITEpfWI9byx3PXUsTT1hfXZhciB2LF8sZyx5LG0seCxiLHcsTSxULGssUz11LEE9YmcoKSxOPXtwb2ludDpjLGxpbmVTdGFydDpoLGxpbmVFbmQ6cCxwb2x5Z29uU3RhcnQ6bCxwb2x5Z29uRW5kOmZ9O3JldHVybiBOfX1mdW5jdGlvbiBsaSgpe1BnLnBvaW50PWhpLFBnLmxpbmVFbmQ9Zml9ZnVuY3Rpb24gZmkoKXtQZy5wb2ludD1QZy5saW5lRW5kPW1yfWZ1bmN0aW9uIGhpKHQsbil7dCo9TF8sbio9TF8sY2c9dCxzZz1IXyhuKSxsZz1GXyhuKSxQZy5wb2ludD1waX1mdW5jdGlvbiBwaSh0LG4pe3QqPUxfLG4qPUxfO3ZhciBlPUhfKG4pLHI9Rl8obiksaT1xXyh0LWNnKSxvPUZfKGkpLHU9SF8oaSksYT1yKnUsYz1sZyplLXNnKnIqbyxzPXNnKmUrbGcqcipvO0NnLmFkZChVXyhWXyhhKmErYypjKSxzKSksY2c9dCxzZz1lLGxnPXJ9ZnVuY3Rpb24gZGkodCxuKXtyZXR1cm4hKCF0fHwhRGcuaGFzT3duUHJvcGVydHkodC50eXBlKSkmJkRnW3QudHlwZV0odCxuKX1mdW5jdGlvbiB2aSh0LG4pe3JldHVybiAwPT09TGcodCxuKX1mdW5jdGlvbiBfaSh0LG4pe3ZhciBlPUxnKHRbMF0sdFsxXSkscj1MZyh0WzBdLG4pLGk9TGcobix0WzFdKTtyZXR1cm4gcitpPD1lK05ffWZ1bmN0aW9uIGdpKHQsbil7cmV0dXJuISFFZyh0Lm1hcCh5aSksbWkobikpfWZ1bmN0aW9uIHlpKHQpe3JldHVybiB0PXQubWFwKG1pKSx0LnBvcCgpLHR9ZnVuY3Rpb24gbWkodCl7cmV0dXJuW3RbMF0qTF8sdFsxXSpMX119ZnVuY3Rpb24geGkodCxuLGUpe3ZhciByPUpzKHQsbi1OXyxlKS5jb25jYXQobik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLm1hcChmdW5jdGlvbihuKXtyZXR1cm5bdCxuXX0pfX1mdW5jdGlvbiBiaSh0LG4sZSl7dmFyIHI9SnModCxuLU5fLGUpLmNvbmNhdChuKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKG4pe3JldHVybltuLHRdfSl9fWZ1bmN0aW9uIHdpKCl7ZnVuY3Rpb24gdCgpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOm4oKX19ZnVuY3Rpb24gbigpe3JldHVybiBKcyhJXyhvL18pKl8saSxfKS5tYXAoaCkuY29uY2F0KEpzKElfKHMvZykqZyxjLGcpLm1hcChwKSkuY29uY2F0KEpzKElfKHIvZCkqZCxlLGQpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gcV8odCVfKT5OX30pLm1hcChsKSkuY29uY2F0KEpzKElfKGEvdikqdix1LHYpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gcV8odCVnKT5OX30pLm1hcChmKSl9dmFyIGUscixpLG8sdSxhLGMscyxsLGYsaCxwLGQ9MTAsdj1kLF89OTAsZz0zNjAseT0yLjU7cmV0dXJuIHQubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbigpLm1hcChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KX0sdC5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltoKG8pLmNvbmNhdChwKGMpLnNsaWNlKDEpLGgoaSkucmV2ZXJzZSgpLnNsaWNlKDEpLHAocykucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx0LmV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90LmV4dGVudE1ham9yKG4pLmV4dGVudE1pbm9yKG4pOnQuZXh0ZW50TWlub3IoKX0sdC5leHRlbnRNYWpvcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rblswXVswXSxpPStuWzFdWzBdLHM9K25bMF1bMV0sYz0rblsxXVsxXSxvPmkmJihuPW8sbz1pLGk9bikscz5jJiYobj1zLHM9YyxjPW4pLHQucHJlY2lzaW9uKHkpKTpbW28sc10sW2ksY11dfSx0LmV4dGVudE1pbm9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStuWzBdWzBdLGU9K25bMV1bMF0sYT0rblswXVsxXSx1PStuWzFdWzFdLHI+ZSYmKG49cixyPWUsZT1uKSxhPnUmJihuPWEsYT11LHU9biksdC5wcmVjaXNpb24oeSkpOltbcixhXSxbZSx1XV19LHQuc3RlcD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90LnN0ZXBNYWpvcihuKS5zdGVwTWlub3Iobik6dC5zdGVwTWlub3IoKX0sdC5zdGVwTWFqb3I9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89K25bMF0sZz0rblsxXSx0KTpbXyxnXX0sdC5zdGVwTWlub3I9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9K25bMF0sdj0rblsxXSx0KTpbZCx2XX0sdC5wcmVjaXNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K24sbD14aShhLHUsOTApLGY9YmkocixlLHkpLGg9eGkocyxjLDkwKSxwPWJpKG8saSx5KSx0KTp5fSx0LmV4dGVudE1ham9yKFtbLTE4MCwtOTArTl9dLFsxODAsOTAtTl9dXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1OX10sWzE4MCw4MCtOX11dKX1mdW5jdGlvbiBNaSgpe3JldHVybiB3aSgpKCl9ZnVuY3Rpb24gVGkoKXtCZy5wb2ludD1raX1mdW5jdGlvbiBraSh0LG4pe0JnLnBvaW50PVNpLGZnPXBnPXQsaGc9ZGc9bn1mdW5jdGlvbiBTaSh0LG4pe1lnLmFkZChkZyp0LXBnKm4pLHBnPXQsZGc9bn1mdW5jdGlvbiBBaSgpe1NpKGZnLGhnKX1mdW5jdGlvbiBOaSh0LG4pe3Q8SGcmJihIZz10KSx0PlZnJiYoVmc9dCksbjxYZyYmKFhnPW4pLG4+V2cmJihXZz1uKX1mdW5jdGlvbiBFaSh0LG4peyRnKz10LFpnKz1uLCsrSmd9ZnVuY3Rpb24gQ2koKXtpeS5wb2ludD1QaX1mdW5jdGlvbiBQaSh0LG4pe2l5LnBvaW50PXppLEVpKGdnPXQseWc9bil9ZnVuY3Rpb24gemkodCxuKXt2YXIgZT10LWdnLHI9bi15ZyxpPVZfKGUqZStyKnIpO1FnKz1pKihnZyt0KS8yLEtnKz1pKih5ZytuKS8yLHR5Kz1pLEVpKGdnPXQseWc9bil9ZnVuY3Rpb24gUmkoKXtpeS5wb2ludD1FaX1mdW5jdGlvbiBPaSgpe2l5LnBvaW50PXFpfWZ1bmN0aW9uIExpKCl7RGkodmcsX2cpfWZ1bmN0aW9uIHFpKHQsbil7aXkucG9pbnQ9RGksRWkodmc9Z2c9dCxfZz15Zz1uKX1mdW5jdGlvbiBEaSh0LG4pe3ZhciBlPXQtZ2cscj1uLXlnLGk9Vl8oZSplK3Iqcik7UWcrPWkqKGdnK3QpLzIsS2crPWkqKHlnK24pLzIsdHkrPWksaT15Zyp0LWdnKm4sbnkrPWkqKGdnK3QpLGV5Kz1pKih5ZytuKSxyeSs9MyppLEVpKGdnPXQseWc9bil9ZnVuY3Rpb24gVWkodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEZpKHQsbil7ZnkucG9pbnQ9SWksdXk9Y3k9dCxheT1zeT1ufWZ1bmN0aW9uIElpKHQsbil7Y3ktPXQsc3ktPW4sbHkuYWRkKFZfKGN5KmN5K3N5KnN5KSksY3k9dCxzeT1ufWZ1bmN0aW9uIGppKCl7dGhpcy5fc3RyaW5nPVtdfWZ1bmN0aW9uIFlpKHQpe3JldHVybiJtMCwiK3QrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrLTIqdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIisyKnQrInoifWZ1bmN0aW9uIEJpKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIEhpKHQsbil7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLVBfLU5fOlBfLXRbMV0pLSgobj1uLngpWzBdPDA/blsxXS1QXy1OXzpQXy1uWzFdKX1mdW5jdGlvbiBYaSh0KXt2YXIgbixlPU5hTixyPU5hTixpPU5hTjtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKSxuPTF9LHBvaW50OmZ1bmN0aW9uKG8sdSl7dmFyIGE9bz4wP0NfOi1DXyxjPXFfKG8tZSk7cV8oYy1DXyk8Tl8/KHQucG9pbnQoZSxyPShyK3UpLzI+MD9QXzotUF8pLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQoYSxyKSx0LnBvaW50KG8sciksbj0wKTppIT09YSYmYz49Q18mJihxXyhlLWkpPE5fJiYoZS09aSpOXykscV8oby1hKTxOXyYmKG8tPWEqTl8pLHI9VmkoZSxyLG8sdSksdC5wb2ludChpLHIpLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludChhLHIpLG49MCksdC5wb2ludChlPW8scj11KSxpPWF9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0LmxpbmVFbmQoKSxlPXI9TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLW59fX1mdW5jdGlvbiBWaSh0LG4sZSxyKXt2YXIgaSxvLHU9SF8odC1lKTtyZXR1cm4gcV8odSk+Tl8/RF8oKEhfKG4pKihvPUZfKHIpKSpIXyhlKS1IXyhyKSooaT1GXyhuKSkqSF8odCkpLyhpKm8qdSkpOihuK3IpLzJ9ZnVuY3Rpb24gV2kodCxuLGUscil7dmFyIGk7aWYobnVsbD09dClpPWUqUF8sci5wb2ludCgtQ18saSksci5wb2ludCgwLGkpLHIucG9pbnQoQ18saSksci5wb2ludChDXywwKSxyLnBvaW50KENfLC1pKSxyLnBvaW50KDAsLWkpLHIucG9pbnQoLUNfLC1pKSxyLnBvaW50KC1DXywwKSxyLnBvaW50KC1DXyxpKTtlbHNlIGlmKHFfKHRbMF0tblswXSk+Tl8pe3ZhciBvPXRbMF08blswXT9DXzotQ187aT1lKm8vMixyLnBvaW50KC1vLGkpLHIucG9pbnQoMCxpKSxyLnBvaW50KG8saSl9ZWxzZSByLnBvaW50KG5bMF0sblsxXSl9ZnVuY3Rpb24gR2kodCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPW5ldyAkaTtmb3IodmFyIHIgaW4gdCllW3JdPXRbcl07cmV0dXJuIGUuc3RyZWFtPW4sZX19ZnVuY3Rpb24gJGkoKXt9ZnVuY3Rpb24gWmkodCxuLGUpe3ZhciByPW5bMV1bMF0tblswXVswXSxpPW5bMV1bMV0tblswXVsxXSxvPXQuY2xpcEV4dGVudCYmdC5jbGlwRXh0ZW50KCk7dC5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9byYmdC5jbGlwRXh0ZW50KG51bGwpLFpfKGUsdC5zdHJlYW0oR2cpKTt2YXIgdT1HZy5yZXN1bHQoKSxhPU1hdGgubWluKHIvKHVbMV1bMF0tdVswXVswXSksaS8odVsxXVsxXS11WzBdWzFdKSksYz0rblswXVswXSsoci1hKih1WzFdWzBdK3VbMF1bMF0pKS8yLHM9K25bMF1bMV0rKGktYSoodVsxXVsxXSt1WzBdWzFdKSkvMjtyZXR1cm4gbnVsbCE9byYmdC5jbGlwRXh0ZW50KG8pLHQuc2NhbGUoMTUwKmEpLnRyYW5zbGF0ZShbYyxzXSl9ZnVuY3Rpb24gSmkodCxuLGUpe3JldHVybiBaaSh0LFtbMCwwXSxuXSxlKX1mdW5jdGlvbiBRaSh0KXtyZXR1cm4gR2koe3BvaW50OmZ1bmN0aW9uKG4sZSl7bj10KG4sZSksdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX1mdW5jdGlvbiBLaSh0LG4pe2Z1bmN0aW9uIGUocixpLG8sdSxhLGMscyxsLGYsaCxwLGQsdixfKXt2YXIgZz1zLXIseT1sLWksbT1nKmcreSp5O2lmKG0+NCpuJiZ2LS0pe3ZhciB4PXUraCxiPWErcCx3PWMrZCxNPVZfKHgqeCtiKmIrdyp3KSxUPWdyKHcvPU0pLGs9cV8ocV8odyktMSk8Tl98fHFfKG8tZik8Tl8/KG8rZikvMjpVXyhiLHgpLFM9dChrLFQpLEE9U1swXSxOPVNbMV0sRT1BLXIsQz1OLWksUD15KkUtZypDOyhQKlAvbT5ufHxxXygoZypFK3kqQykvbS0uNSk+LjN8fHUqaCthKnArYypkPHl5KSYmKGUocixpLG8sdSxhLGMsQSxOLGsseC89TSxiLz1NLHcsdixfKSxfLnBvaW50KEEsTiksZShBLE4sayx4LGIsdyxzLGwsZixoLHAsZCx2LF8pKX19cmV0dXJuIGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHIoZSxyKXtlPXQoZSxyKSxuLnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gaSgpe2c9TmFOLHcucG9pbnQ9byxuLmxpbmVTdGFydCgpfWZ1bmN0aW9uIG8ocixpKXt2YXIgbz1OcihbcixpXSksdT10KHIsaSk7ZShnLHksXyxtLHgsYixnPXVbMF0seT11WzFdLF89cixtPW9bMF0seD1vWzFdLGI9b1syXSxneSxuKSxuLnBvaW50KGcseSl9ZnVuY3Rpb24gdSgpe3cucG9pbnQ9cixuLmxpbmVFbmQoKX1mdW5jdGlvbiBhKCl7aSgpLHcucG9pbnQ9Yyx3LmxpbmVFbmQ9c31mdW5jdGlvbiBjKHQsbil7byhsPXQsbiksZj1nLGg9eSxwPW0sZD14LHY9Yix3LnBvaW50PW99ZnVuY3Rpb24gcygpe2UoZyx5LF8sbSx4LGIsZixoLGwscCxkLHYsZ3ksbiksdy5saW5lRW5kPXUsdSgpfXZhciBsLGYsaCxwLGQsdixfLGcseSxtLHgsYix3PXtwb2ludDpyLGxpbmVTdGFydDppLGxpbmVFbmQ6dSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25TdGFydCgpLHcubGluZVN0YXJ0PWF9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKSx3LmxpbmVTdGFydD1pfX07cmV0dXJuIHd9fWZ1bmN0aW9uIHRvKHQpe3JldHVybiBubyhmdW5jdGlvbigpe3JldHVybiB0fSkoKX1mdW5jdGlvbiBubyh0KXtmdW5jdGlvbiBuKHQpe3JldHVybiB0PWwodFswXSpMXyx0WzFdKkxfKSxbdFswXSpfK2EsYy10WzFdKl9dfWZ1bmN0aW9uIGUodCl7cmV0dXJuIHQ9bC5pbnZlcnQoKHRbMF0tYSkvXywoYy10WzFdKS9fKSx0JiZbdFswXSpPXyx0WzFdKk9fXX1mdW5jdGlvbiByKHQsbil7cmV0dXJuIHQ9dSh0LG4pLFt0WzBdKl8rYSxjLXRbMV0qX119ZnVuY3Rpb24gaSgpe2w9YWcocz1uaShiLHcsTSksdSk7dmFyIHQ9dShtLHgpO3JldHVybiBhPWctdFswXSpfLGM9eSt0WzFdKl8sbygpfWZ1bmN0aW9uIG8oKXtyZXR1cm4gZD12PW51bGwsbn12YXIgdSxhLGMscyxsLGYsaCxwLGQsdixfPTE1MCxnPTQ4MCx5PTI1MCxtPTAseD0wLGI9MCx3PTAsTT0wLFQ9bnVsbCxrPWR5LFM9bnVsbCxBPUlnLE49LjUsRT1teShyLE4pO3JldHVybiBuLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gZCYmdj09PXQ/ZDpkPXh5KGsocyxFKEEodj10KSkpKX0sbi5jbGlwQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9K3Q/dnkoVD10KkxfLDYqTF8pOihUPW51bGwsZHkpLG8oKSk6VCpPX30sbi5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPW51bGw9PXQ/KFM9Zj1oPXA9bnVsbCxJZyk6c2koUz0rdFswXVswXSxmPSt0WzBdWzFdLGg9K3RbMV1bMF0scD0rdFsxXVsxXSksbygpKTpudWxsPT1TP251bGw6W1tTLGZdLFtoLHBdXX0sbi5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rdCxpKCkpOl99LG4udHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt0WzBdLHk9K3RbMV0saSgpKTpbZyx5XX0sbi5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dFswXSUzNjAqTF8seD10WzFdJTM2MCpMXyxpKCkpOlttKk9fLHgqT19dfSxuLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10WzBdJTM2MCpMXyx3PXRbMV0lMzYwKkxfLE09dC5sZW5ndGg+Mj90WzJdJTM2MCpMXzowLGkoKSk6W2IqT18sdypPXyxNKk9fXX0sbi5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9bXkocixOPXQqdCksbygpKTpWXyhOKX0sbi5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gWmkobix0LGUpfSxuLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSmkobix0LGUpfSxmdW5jdGlvbigpe3JldHVybiB1PXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uaW52ZXJ0PXUuaW52ZXJ0JiZlLGkoKX19ZnVuY3Rpb24gZW8odCl7dmFyIG49MCxlPUNfLzMscj1ubyh0KSxpPXIobixlKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihuPXRbMF0qTF8sZT10WzFdKkxfKTpbbipPXyxlKk9fXX0saX1mdW5jdGlvbiBybyh0KXtmdW5jdGlvbiBuKHQsbil7cmV0dXJuW3QqZSxIXyhuKS9lXX12YXIgZT1GXyh0KTtyZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm5bdC9lLGdyKG4qZSldfSxufWZ1bmN0aW9uIGlvKHQsbil7ZnVuY3Rpb24gZSh0LG4pe3ZhciBlPVZfKG8tMippKkhfKG4pKS9pO3JldHVybltlKkhfKHQqPWkpLHUtZSpGXyh0KV19dmFyIHI9SF8odCksaT0ocitIXyhuKSkvMjtpZihxXyhpKTxOXylyZXR1cm4gcm8odCk7dmFyIG89MStyKigyKmktciksdT1WXyhvKS9pO3JldHVybiBlLmludmVydD1mdW5jdGlvbih0LG4pe3ZhciBlPXUtbjtyZXR1cm5bVV8odCxxXyhlKSkvaSpYXyhlKSxncigoby0odCp0K2UqZSkqaSppKS8oMippKSldfSxlfWZ1bmN0aW9uIG9vKHQpe3ZhciBuPXQubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihlLHIpe2Zvcih2YXIgaT0tMTsrK2k8bjspdFtpXS5wb2ludChlLHIpfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9LTE7KytlPG47KXRbZV0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgZT0tMTsrK2U8bjspdFtlXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgZT0tMTsrK2U8bjspdFtlXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgZT0tMTsrK2U8bjspdFtlXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgZT0tMTsrK2U8bjspdFtlXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiB1byh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj1GXyhuKSxpPUZfKGUpLG89dChyKmkpO3JldHVybltvKmkqSF8obiksbypIXyhlKV19fWZ1bmN0aW9uIGFvKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciByPVZfKG4qbitlKmUpLGk9dChyKSxvPUhfKGkpLHU9Rl8oaSk7cmV0dXJuW1VfKG4qbyxyKnUpLGdyKHImJmUqby9yKV19fWZ1bmN0aW9uIGNvKHQsbil7cmV0dXJuW3QsWV8oV18oKFBfK24pLzIpKV19ZnVuY3Rpb24gc28odCl7ZnVuY3Rpb24gbigpe3ZhciBuPUNfKmEoKSx1PW8obWcoby5yb3RhdGUoKSkuaW52ZXJ0KFswLDBdKSk7cmV0dXJuIHMobnVsbD09bD9bW3VbMF0tbix1WzFdLW5dLFt1WzBdK24sdVsxXStuXV06dD09PWNvP1tbTWF0aC5tYXgodVswXS1uLGwpLGVdLFtNYXRoLm1pbih1WzBdK24sciksaV1dOltbbCxNYXRoLm1heCh1WzFdLW4sZSldLFtyLE1hdGgubWluKHVbMV0rbixpKV1dKX12YXIgZSxyLGksbz10byh0KSx1PW8uY2VudGVyLGE9by5zY2FsZSxjPW8udHJhbnNsYXRlLHM9by5jbGlwRXh0ZW50LGw9bnVsbDtyZXR1cm4gby5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYSh0KSxuKCkpOmEoKX0sby50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGModCksbigpKTpjKCl9LG8uY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1KHQpLG4oKSk6dSgpfSxvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/bD1lPXI9aT1udWxsOihsPSt0WzBdWzBdLGU9K3RbMF1bMV0scj0rdFsxXVswXSxpPSt0WzFdWzFdKSxuKCkpOm51bGw9PWw/bnVsbDpbW2wsZV0sW3IsaV1dfSxuKCl9ZnVuY3Rpb24gbG8odCl7cmV0dXJuIFdfKChQXyt0KS8yKX1mdW5jdGlvbiBmbyh0LG4pe2Z1bmN0aW9uIGUodCxuKXtvPjA/bjwtUF8rTl8mJihuPS1QXytOXyk6bj5QXy1OXyYmKG49UF8tTl8pO3ZhciBlPW8vQl8obG8obiksaSk7cmV0dXJuW2UqSF8oaSp0KSxvLWUqRl8oaSp0KV19dmFyIHI9Rl8odCksaT10PT09bj9IXyh0KTpZXyhyL0ZfKG4pKS9ZXyhsbyhuKS9sbyh0KSksbz1yKkJfKGxvKHQpLGkpL2k7cmV0dXJuIGk/KGUuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIGU9by1uLHI9WF8oaSkqVl8odCp0K2UqZSk7cmV0dXJuW1VfKHQscV8oZSkpL2kqWF8oZSksMipEXyhCXyhvL3IsMS9pKSktUF9dfSxlKTpjb31mdW5jdGlvbiBobyh0LG4pe3JldHVyblt0LG5dfWZ1bmN0aW9uIHBvKHQsbil7ZnVuY3Rpb24gZSh0LG4pe3ZhciBlPW8tbixyPWkqdDtyZXR1cm5bZSpIXyhyKSxvLWUqRl8ocildfXZhciByPUZfKHQpLGk9dD09PW4/SF8odCk6KHItRl8obikpLyhuLXQpLG89ci9pK3Q7cmV0dXJuIHFfKGkpPE5fP2hvOihlLmludmVydD1mdW5jdGlvbih0LG4pe3ZhciBlPW8tbjtyZXR1cm5bVV8odCxxXyhlKSkvaSpYXyhlKSxvLVhfKGkpKlZfKHQqdCtlKmUpXX0sZSl9ZnVuY3Rpb24gdm8odCxuKXt2YXIgZT1GXyhuKSxyPUZfKHQpKmU7cmV0dXJuW2UqSF8odCkvcixIXyhuKS9yXX1mdW5jdGlvbiBfbyh0LG4sZSxyKXtyZXR1cm4gMT09PXQmJjE9PT1uJiYwPT09ZSYmMD09PXI/SWc6R2koe3BvaW50OmZ1bmN0aW9uKGksbyl7dGhpcy5zdHJlYW0ucG9pbnQoaSp0K2UsbypuK3IpfX0pfWZ1bmN0aW9uIGdvKHQsbil7cmV0dXJuW0ZfKG4pKkhfKHQpLEhfKG4pXX1mdW5jdGlvbiB5byh0LG4pe3ZhciBlPUZfKG4pLHI9MStGXyh0KSplO3JldHVybltlKkhfKHQpL3IsSF8obikvcl19ZnVuY3Rpb24gbW8odCxuKXtyZXR1cm5bWV8oV18oKFBfK24pLzIpKSwtdF19ZnVuY3Rpb24geG8odCxuKXtyZXR1cm4gdC5wYXJlbnQ9PT1uLnBhcmVudD8xOjJ9ZnVuY3Rpb24gYm8odCl7cmV0dXJuIHQucmVkdWNlKHdvLDApL3QubGVuZ3RofWZ1bmN0aW9uIHdvKHQsbil7cmV0dXJuIHQrbi54fWZ1bmN0aW9uIE1vKHQpe3JldHVybiAxK3QucmVkdWNlKFRvLDApfWZ1bmN0aW9uIFRvKHQsbil7cmV0dXJuIE1hdGgubWF4KHQsbi55KX1mdW5jdGlvbiBrbyh0KXtmb3IodmFyIG47bj10LmNoaWxkcmVuOyl0PW5bMF07cmV0dXJuIHR9ZnVuY3Rpb24gU28odCl7Zm9yKHZhciBuO249dC5jaGlsZHJlbjspdD1uW24ubGVuZ3RoLTFdO3JldHVybiB0fWZ1bmN0aW9uIEFvKHQpe3ZhciBuPTAsZT10LmNoaWxkcmVuLHI9ZSYmZS5sZW5ndGg7aWYocilmb3IoOy0tcj49MDspbis9ZVtyXS52YWx1ZTtlbHNlIG49MTt0LnZhbHVlPW59ZnVuY3Rpb24gTm8odCxuKXtpZih0PT09bilyZXR1cm4gdDt2YXIgZT10LmFuY2VzdG9ycygpLHI9bi5hbmNlc3RvcnMoKSxpPW51bGw7Zm9yKHQ9ZS5wb3AoKSxuPXIucG9wKCk7dD09PW47KWk9dCx0PWUucG9wKCksbj1yLnBvcCgpO3JldHVybiBpfWZ1bmN0aW9uIEVvKHQsbil7dmFyIGUscixpLG8sdSxhPW5ldyBPbyh0KSxjPSt0LnZhbHVlJiYoYS52YWx1ZT10LnZhbHVlKSxzPVthXTtmb3IobnVsbD09biYmKG49UG8pO2U9cy5wb3AoKTspaWYoYyYmKGUudmFsdWU9K2UuZGF0YS52YWx1ZSksKGk9bihlLmRhdGEpKSYmKHU9aS5sZW5ndGgpKWZvcihlLmNoaWxkcmVuPW5ldyBBcnJheSh1KSxvPXUtMTtvPj0wOy0tbylzLnB1c2gocj1lLmNoaWxkcmVuW29dPW5ldyBPbyhpW29dKSksci5wYXJlbnQ9ZSxyLmRlcHRoPWUuZGVwdGgrMTtyZXR1cm4gYS5lYWNoQmVmb3JlKFJvKX1mdW5jdGlvbiBDbygpe3JldHVybiBFbyh0aGlzKS5lYWNoQmVmb3JlKHpvKX1mdW5jdGlvbiBQbyh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiB6byh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gUm8odCl7dmFyIG49MDtkbyB0LmhlaWdodD1uO3doaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytuKX1mdW5jdGlvbiBPbyh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1mdW5jdGlvbiBMbyh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbH1mdW5jdGlvbiBxbyh0LG4pe3ZhciBlPW4ueC10Lngscj1uLnktdC55LGk9dC5yLW4ucjtyZXR1cm4gaSppKzFlLTY+ZSplK3Iqcn1mdW5jdGlvbiBEbyh0LG4pe3ZhciBlLHIsaSxvPW51bGwsdT10LmhlYWQ7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDE6ZT1VbyhuWzBdKTticmVhaztjYXNlIDI6ZT1GbyhuWzBdLG5bMV0pO2JyZWFrO2Nhc2UgMzplPUlvKG5bMF0sblsxXSxuWzJdKX1mb3IoO3U7KWk9dS5fLHI9dS5uZXh0LGUmJnFvKGUsaSk/bz11OihvPyh0LnRhaWw9byxvLm5leHQ9bnVsbCk6dC5oZWFkPXQudGFpbD1udWxsLG4ucHVzaChpKSxlPURvKHQsbiksbi5wb3AoKSx0LmhlYWQ/KHUubmV4dD10LmhlYWQsdC5oZWFkPXUpOih1Lm5leHQ9bnVsbCx0LmhlYWQ9dC50YWlsPXUpLG89dC50YWlsLG8ubmV4dD1yKSx1PXI7cmV0dXJuIHQudGFpbD1vLGV9ZnVuY3Rpb24gVW8odCl7cmV0dXJue3g6dC54LHk6dC55LHI6dC5yfX1mdW5jdGlvbiBGbyh0LG4pe3ZhciBlPXQueCxyPXQueSxpPXQucixvPW4ueCx1PW4ueSxhPW4ucixjPW8tZSxzPXUtcixsPWEtaSxmPU1hdGguc3FydChjKmMrcypzKTtyZXR1cm57eDooZStvK2MvZipsKS8yLHk6KHIrdStzL2YqbCkvMixyOihmK2krYSkvMn19ZnVuY3Rpb24gSW8odCxuLGUpe3ZhciByPXQueCxpPXQueSxvPXQucix1PW4ueCxhPW4ueSxjPW4ucixzPWUueCxsPWUueSxmPWUucixoPTIqKHItdSkscD0yKihpLWEpLGQ9MiooYy1vKSx2PXIqcitpKmktbypvLXUqdS1hKmErYypjLF89Miooci1zKSxnPTIqKGktbCkseT0yKihmLW8pLG09cipyK2kqaS1vKm8tcypzLWwqbCtmKmYseD1fKnAtaCpnLGI9KHAqbS1nKnYpL3gtcix3PShnKmQtcCp5KS94LE09KF8qdi1oKm0pL3gtaSxUPShoKnktXypkKS94LGs9dyp3K1QqVC0xLFM9MiooYip3K00qVCtvKSxBPWIqYitNKk0tbypvLE49KC1TLU1hdGguc3FydChTKlMtNCprKkEpKS8oMiprKTtyZXR1cm57eDpiK3cqTityLHk6TStUKk4raSxyOk59fWZ1bmN0aW9uIGpvKHQsbixlKXt2YXIgcj10LngsaT10Lnksbz1uLnIrZS5yLHU9dC5yK2UucixhPW4ueC1yLGM9bi55LWkscz1hKmErYypjO2lmKHMpe3ZhciBsPS41KygodSo9dSktKG8qPW8pKS8oMipzKSxmPU1hdGguc3FydChNYXRoLm1heCgwLDIqbyoodStzKS0odS09cykqdS1vKm8pKS8oMipzKTtlLng9citsKmErZipjLGUueT1pK2wqYy1mKmF9ZWxzZSBlLng9cit1LGUueT1pfWZ1bmN0aW9uIFlvKHQsbil7dmFyIGU9bi54LXQueCxyPW4ueS10LnksaT10LnIrbi5yO3JldHVybiBpKmktMWUtNj5lKmUrcipyfWZ1bmN0aW9uIEJvKHQsbixlKXt2YXIgcj10Ll8saT10Lm5leHQuXyxvPXIucitpLnIsdT0oci54KmkucitpLngqci5yKS9vLW4sYT0oci55KmkucitpLnkqci5yKS9vLWU7cmV0dXJuIHUqdSthKmF9ZnVuY3Rpb24gSG8odCl7dGhpcy5fPXQsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFhvKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuIDA7dmFyIG4sZSxyLGk7aWYobj10WzBdLG4ueD0wLG4ueT0wLCEoaT4xKSlyZXR1cm4gbi5yO2lmKGU9dFsxXSxuLng9LWUucixlLng9bi5yLGUueT0wLCEoaT4yKSlyZXR1cm4gbi5yK2UucjtqbyhlLG4scj10WzJdKTt2YXIgbyx1LGEsYyxzLGwsZixoPW4ucipuLnIscD1lLnIqZS5yLGQ9ci5yKnIucix2PWgrcCtkLF89aCpuLngrcCplLngrZCpyLngsZz1oKm4ueStwKmUueStkKnIueTtuPW5ldyBIbyhuKSxlPW5ldyBIbyhlKSxyPW5ldyBIbyhyKSxuLm5leHQ9ci5wcmV2aW91cz1lLGUubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PWUucHJldmlvdXM9bjt0OmZvcihhPTM7YTxpOysrYSl7am8obi5fLGUuXyxyPXRbYV0pLHI9bmV3IEhvKHIpLGM9ZS5uZXh0LHM9bi5wcmV2aW91cyxsPWUuXy5yLGY9bi5fLnI7ZG8gaWYobDw9Zil7aWYoWW8oYy5fLHIuXykpe2U9YyxuLm5leHQ9ZSxlLnByZXZpb3VzPW4sLS1hO2NvbnRpbnVlIHR9bCs9Yy5fLnIsYz1jLm5leHR9ZWxzZXtpZihZbyhzLl8sci5fKSl7bj1zLG4ubmV4dD1lLGUucHJldmlvdXM9biwtLWE7Y29udGludWUgdH1mKz1zLl8ucixzPXMucHJldmlvdXN9d2hpbGUoYyE9PXMubmV4dCk7Zm9yKHIucHJldmlvdXM9bixyLm5leHQ9ZSxuLm5leHQ9ZS5wcmV2aW91cz1lPXIsdis9ZD1yLl8ucipyLl8ucixfKz1kKnIuXy54LGcrPWQqci5fLnksaD1CbyhuLG89Xy92LHU9Zy92KTsocj1yLm5leHQpIT09ZTspKGQ9Qm8ocixvLHUpKTxoJiYobj1yLGg9ZCk7ZT1uLm5leHR9Zm9yKG49W2UuX10scj1lOyhyPXIubmV4dCkhPT1lOyluLnB1c2goci5fKTtmb3Iocj1aeShuKSxhPTA7YTxpOysrYSluPXRbYV0sbi54LT1yLngsbi55LT1yLnk7cmV0dXJuIHIucn1mdW5jdGlvbiBWbyh0KXtyZXR1cm4gbnVsbD09dD9udWxsOldvKHQpfWZ1bmN0aW9uIFdvKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiBHbygpe3JldHVybiAwfWZ1bmN0aW9uICRvKHQpe3JldHVybiBNYXRoLnNxcnQodC52YWx1ZSl9ZnVuY3Rpb24gWm8odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uY2hpbGRyZW58fChuLnI9TWF0aC5tYXgoMCwrdChuKXx8MCkpfX1mdW5jdGlvbiBKbyh0LG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihyPWUuY2hpbGRyZW4pe3ZhciByLGksbyx1PXIubGVuZ3RoLGE9dChlKSpufHwwO2lmKGEpZm9yKGk9MDtpPHU7KytpKXJbaV0ucis9YTtpZihvPVhvKHIpLGEpZm9yKGk9MDtpPHU7KytpKXJbaV0uci09YTtlLnI9bythfX19ZnVuY3Rpb24gUW8odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBlPW4ucGFyZW50O24ucio9dCxlJiYobi54PWUueCt0Km4ueCxuLnk9ZS55K3Qqbi55KX19ZnVuY3Rpb24gS28odCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gdHUodCl7cmV0dXJuIHQucGFyZW50SWR9ZnVuY3Rpb24gbnUodCxuKXtyZXR1cm4gdC5wYXJlbnQ9PT1uLnBhcmVudD8xOjJ9ZnVuY3Rpb24gZXUodCl7dmFyIG49dC5jaGlsZHJlbjtyZXR1cm4gbj9uWzBdOnQudH1mdW5jdGlvbiBydSh0KXt2YXIgbj10LmNoaWxkcmVuO3JldHVybiBuP25bbi5sZW5ndGgtMV06dC50fWZ1bmN0aW9uIGl1KHQsbixlKXt2YXIgcj1lLyhuLmktdC5pKTtuLmMtPXIsbi5zKz1lLHQuYys9cixuLnorPWUsbi5tKz1lfWZ1bmN0aW9uIG91KHQpe2Zvcih2YXIgbixlPTAscj0wLGk9dC5jaGlsZHJlbixvPWkubGVuZ3RoOy0tbz49MDspbj1pW29dLG4ueis9ZSxuLm0rPWUsZSs9bi5zKyhyKz1uLmMpfWZ1bmN0aW9uIHV1KHQsbixlKXtyZXR1cm4gdC5hLnBhcmVudD09PW4ucGFyZW50P3QuYTplfWZ1bmN0aW9uIGF1KHQsbil7dGhpcy5fPXQsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5BPW51bGwsdGhpcy5hPXRoaXMsdGhpcy56PTAsdGhpcy5tPTAsdGhpcy5jPTAsdGhpcy5zPTAsdGhpcy50PW51bGwsdGhpcy5pPW59ZnVuY3Rpb24gY3UodCl7Zm9yKHZhciBuLGUscixpLG8sdT1uZXcgYXUodCwwKSxhPVt1XTtuPWEucG9wKCk7KWlmKHI9bi5fLmNoaWxkcmVuKWZvcihuLmNoaWxkcmVuPW5ldyBBcnJheShvPXIubGVuZ3RoKSxpPW8tMTtpPj0wOy0taSlhLnB1c2goZT1uLmNoaWxkcmVuW2ldPW5ldyBhdShyW2ldLGkpKSxlLnBhcmVudD1uO3JldHVybih1LnBhcmVudD1uZXcgYXUobnVsbCwwKSkuY2hpbGRyZW49W3VdLHV9ZnVuY3Rpb24gc3UodCxuLGUscixpLG8pe2Zvcih2YXIgdSxhLGMscyxsLGYsaCxwLGQsdixfLGc9W10seT1uLmNoaWxkcmVuLG09MCx4PTAsYj15Lmxlbmd0aCx3PW4udmFsdWU7bTxiOyl7Yz1pLWUscz1vLXI7ZG8gbD15W3grK10udmFsdWU7d2hpbGUoIWwmJng8Yik7Zm9yKGY9aD1sLHY9TWF0aC5tYXgocy9jLGMvcykvKHcqdCksXz1sKmwqdixkPU1hdGgubWF4KGgvXyxfL2YpO3g8YjsrK3gpe2lmKGwrPWE9eVt4XS52YWx1ZSxhPGYmJihmPWEpLGE+aCYmKGg9YSksXz1sKmwqdixwPU1hdGgubWF4KGgvXyxfL2YpLHA+ZCl7bC09YTticmVha31kPXB9Zy5wdXNoKHU9e3ZhbHVlOmwsZGljZTpjPHMsY2hpbGRyZW46eS5zbGljZShtLHgpfSksdS5kaWNlP25tKHUsZSxyLGksdz9yKz1zKmwvdzpvKTpjbSh1LGUscix3P2UrPWMqbC93Omksbyksdy09bCxtPXh9cmV0dXJuIGd9ZnVuY3Rpb24gbHUodCxuKXtyZXR1cm4gdFswXS1uWzBdfHx0WzFdLW5bMV19ZnVuY3Rpb24gZnUodCl7Zm9yKHZhciBuPXQubGVuZ3RoLGU9WzAsMV0scj0yLGk9MjtpPG47KytpKXtmb3IoO3I+MSYmZ20odFtlW3ItMl1dLHRbZVtyLTFdXSx0W2ldKTw9MDspLS1yO2VbcisrXT1pfXJldHVybiBlLnNsaWNlKDAscil9ZnVuY3Rpb24gaHUodCl7aWYoISh0Pj0xKSl0aHJvdyBuZXcgRXJyb3I7dGhpcy5fc2l6ZT10LHRoaXMuX2NhbGw9dGhpcy5fZXJyb3I9bnVsbCx0aGlzLl90YXNrcz1bXSx0aGlzLl9kYXRhPVtdLHRoaXMuX3dhaXRpbmc9dGhpcy5fYWN0aXZlPXRoaXMuX2VuZGVkPXRoaXMuX3N0YXJ0PTB9ZnVuY3Rpb24gcHUodCl7aWYoIXQuX3N0YXJ0KXRyeXtkdSh0KX1jYXRjaChuKXtpZih0Ll90YXNrc1t0Ll9lbmRlZCt0Ll9hY3RpdmUtMV0pX3UodCxuKTtlbHNlIGlmKCF0Ll9kYXRhKXRocm93IG59fWZ1bmN0aW9uIGR1KHQpe2Zvcig7dC5fc3RhcnQ9dC5fd2FpdGluZyYmdC5fYWN0aXZlPHQuX3NpemU7KXt2YXIgbj10Ll9lbmRlZCt0Ll9hY3RpdmUsZT10Ll90YXNrc1tuXSxyPWUubGVuZ3RoLTEsaT1lW3JdO2Vbcl09dnUodCxuKSwtLXQuX3dhaXRpbmcsKyt0Ll9hY3RpdmUsZT1pLmFwcGx5KG51bGwsZSksdC5fdGFza3Nbbl0mJih0Ll90YXNrc1tuXT1lfHx3bSl9fWZ1bmN0aW9uIHZ1KHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUscil7dC5fdGFza3Nbbl0mJigtLXQuX2FjdGl2ZSwrK3QuX2VuZGVkLHQuX3Rhc2tzW25dPW51bGwsbnVsbD09dC5fZXJyb3ImJihudWxsIT1lP191KHQsZSk6KHQuX2RhdGFbbl09cix0Ll93YWl0aW5nP3B1KHQpOmd1KHQpKSkpfX1mdW5jdGlvbiBfdSh0LG4pe3ZhciBlLHI9dC5fdGFza3MubGVuZ3RoO2Zvcih0Ll9lcnJvcj1uLHQuX2RhdGE9dm9pZCAwLHQuX3dhaXRpbmc9TmFOOy0tcj49MDspaWYoKGU9dC5fdGFza3Nbcl0pJiYodC5fdGFza3Nbcl09bnVsbCxlLmFib3J0KSl0cnl7ZS5hYm9ydCgpfWNhdGNoKHQpe310Ll9hY3RpdmU9TmFOLGd1KHQpfWZ1bmN0aW9uIGd1KHQpe2lmKCF0Ll9hY3RpdmUmJnQuX2NhbGwpe3ZhciBuPXQuX2RhdGE7dC5fZGF0YT12b2lkIDAsdC5fY2FsbCh0Ll9lcnJvcixuKX19ZnVuY3Rpb24geXUodCl7cmV0dXJuIG5ldyBodShhcmd1bWVudHMubGVuZ3RoPyt0OjEvMCl9ZnVuY3Rpb24gbXUodCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dChudWxsPT1uP2U6bnVsbCl9fWZ1bmN0aW9uIHh1KHQpe3ZhciBuPXQucmVzcG9uc2VUeXBlO3JldHVybiBuJiYidGV4dCIhPT1uP3QucmVzcG9uc2U6dC5yZXNwb25zZVRleHR9ZnVuY3Rpb24gYnUodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS5yZXNwb25zZVRleHQsbil9fWZ1bmN0aW9uIHd1KHQpe2Z1bmN0aW9uIG4obil7dmFyIG89bisiIix1PWUuZ2V0KG8pO2lmKCF1KXtpZihpIT09am0pcmV0dXJuIGk7ZS5zZXQobyx1PXIucHVzaChuKSl9cmV0dXJuIHRbKHUtMSkldC5sZW5ndGhdfXZhciBlPWplKCkscj1bXSxpPWptO3JldHVybiB0PW51bGw9PXQ/W106SW0uY2FsbCh0KSxuLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gci5zbGljZSgpO3I9W10sZT1qZSgpO2Zvcih2YXIgaSxvLHU9LTEsYT10Lmxlbmd0aDsrK3U8YTspZS5oYXMobz0oaT10W3VdKSsiIil8fGUuc2V0KG8sci5wdXNoKGkpKTtyZXR1cm4gbn0sbi5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1JbS5jYWxsKGUpLG4pOnQuc2xpY2UoKX0sbi51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbik6aX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHd1KCkuZG9tYWluKHIpLnJhbmdlKHQpLnVua25vd24oaSl9LG59ZnVuY3Rpb24gTXUoKXtmdW5jdGlvbiB0KCl7dmFyIHQ9aSgpLmxlbmd0aCxyPXVbMV08dVswXSxmPXVbci0wXSxoPXVbMS1yXTtuPShoLWYpL01hdGgubWF4KDEsdC1jKzIqcyksYSYmKG49TWF0aC5mbG9vcihuKSksZis9KGgtZi1uKih0LWMpKSpsLGU9biooMS1jKSxhJiYoZj1NYXRoLnJvdW5kKGYpLGU9TWF0aC5yb3VuZChlKSk7dmFyIHA9SnModCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBmK24qdH0pO3JldHVybiBvKHI/cC5yZXZlcnNlKCk6cCl9dmFyIG4sZSxyPXd1KCkudW5rbm93bih2b2lkIDApLGk9ci5kb21haW4sbz1yLnJhbmdlLHU9WzAsMV0sYT0hMSxjPTAscz0wLGw9LjU7cmV0dXJuIGRlbGV0ZSByLnVua25vd24sci5kb21haW49ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkobiksdCgpKTppKCl9LHIucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9WytuWzBdLCtuWzFdXSx0KCkpOnUuc2xpY2UoKX0sci5yYW5nZVJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiB1PVsrblswXSwrblsxXV0sYT0hMCx0KCl9LHIuYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHIuc3RlcD1mdW5jdGlvbigpe3JldHVybiBufSxyLnJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhbix0KCkpOmF9LHIucGFkZGluZz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1zPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSksdCgpKTpjfSxyLnBhZGRpbmdJbm5lcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsbikpLHQoKSk6Y30sci5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSx0KCkpOnN9LHIuYWxpZ249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSx0KCkpOmx9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiBNdSgpLmRvbWFpbihpKCkpLnJhbmdlKHUpLnJvdW5kKGEpLnBhZGRpbmdJbm5lcihjKS5wYWRkaW5nT3V0ZXIocykuYWxpZ24obCl9LHQoKX1mdW5jdGlvbiBUdSh0KXt2YXIgbj10LmNvcHk7cmV0dXJuIHQucGFkZGluZz10LnBhZGRpbmdPdXRlcixkZWxldGUgdC5wYWRkaW5nSW5uZXIsZGVsZXRlIHQucGFkZGluZ091dGVyLHQuY29weT1mdW5jdGlvbigpe3JldHVybiBUdShuKCkpfSx0fWZ1bmN0aW9uIGt1KCl7cmV0dXJuIFR1KE11KCkucGFkZGluZ0lubmVyKDEpKX1mdW5jdGlvbiBTdSh0LG4pe3JldHVybihuLT10PSt0KT9mdW5jdGlvbihlKXtyZXR1cm4oZS10KS9ufTpZbShuKX1mdW5jdGlvbiBBdSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KG49K24sZT0rZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PD1uPzA6dD49ZT8xOnIodCl9fX1mdW5jdGlvbiBOdSh0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj10KG49K24sZT0rZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PD0wP246dD49MT9lOnIodCl9fX1mdW5jdGlvbiBFdSh0LG4sZSxyKXt2YXIgaT10WzBdLG89dFsxXSx1PW5bMF0sYT1uWzFdO3JldHVybiBvPGk/KGk9ZShvLGkpLHU9cihhLHUpKTooaT1lKGksbyksdT1yKHUsYSkpLGZ1bmN0aW9uKHQpe3JldHVybiB1KGkodCkpfX1mdW5jdGlvbiBDdSh0LG4sZSxyKXt2YXIgaT1NYXRoLm1pbih0Lmxlbmd0aCxuLmxlbmd0aCktMSxvPW5ldyBBcnJheShpKSx1PW5ldyBBcnJheShpKSxhPS0xO2Zvcih0W2ldPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksbj1uLnNsaWNlKCkucmV2ZXJzZSgpKTsrK2E8aTspb1thXT1lKHRbYV0sdFthKzFdKSx1W2FdPXIoblthXSxuW2ErMV0pO3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1Ecyh0LG4sMSxpKS0xO3JldHVybiB1W2VdKG9bZV0obikpfX1mdW5jdGlvbiBQdSh0LG4pe3JldHVybiBuLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKX1mdW5jdGlvbiB6dSh0LG4pe2Z1bmN0aW9uIGUoKXtyZXR1cm4gaT1NYXRoLm1pbihhLmxlbmd0aCxjLmxlbmd0aCk+Mj9DdTpFdSxvPXU9bnVsbCxyfWZ1bmN0aW9uIHIobil7cmV0dXJuKG98fChvPWkoYSxjLGw/QXUodCk6dCxzKSkpKCtuKX12YXIgaSxvLHUsYT1IbSxjPUhtLHM9RWgsbD0hMTtyZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuKHV8fCh1PWkoYyxhLFN1LGw/TnUobik6bikpKSgrdCl9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPUZtLmNhbGwodCxCbSksZSgpKTphLnNsaWNlKCl9LHIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9SW0uY2FsbCh0KSxlKCkpOmMuc2xpY2UoKX0sci5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBjPUltLmNhbGwodCkscz1DaCxlKCl9LHIuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9ISF0LGUoKSk6bH0sci5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGUoKSk6c30sZSgpfWZ1bmN0aW9uIFJ1KHQpe3ZhciBuPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBlPW4oKTtyZXR1cm4gbmwoZVswXSxlW2UubGVuZ3RoLTFdLG51bGw9PXQ/MTA6dCl9LHQudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBYbShuKCksdCxlKX0sdC5uaWNlPWZ1bmN0aW9uKGUpe3ZhciBpPW4oKSxvPWkubGVuZ3RoLTEsdT1udWxsPT1lPzEwOmUsYT1pWzBdLGM9aVtvXSxzPXIoYSxjLHUpO3JldHVybiBzJiYocz1yKE1hdGguZmxvb3IoYS9zKSpzLE1hdGguY2VpbChjL3MpKnMsdSksaVswXT1NYXRoLmZsb29yKGEvcykqcyxpW29dPU1hdGguY2VpbChjL3MpKnMsbihpKSksdH0sdH1mdW5jdGlvbiBPdSgpe3ZhciB0PXp1KFN1LFRoKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFB1KHQsT3UoKSl9LFJ1KHQpfWZ1bmN0aW9uIEx1KCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4rdH12YXIgbj1bMCwxXTtyZXR1cm4gdC5pbnZlcnQ9dCx0LmRvbWFpbj10LnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPUZtLmNhbGwoZSxCbSksdCk6bi5zbGljZSgpfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTHUoKS5kb21haW4obil9LFJ1KHQpfWZ1bmN0aW9uIHF1KHQsbil7cmV0dXJuKG49TWF0aC5sb2cobi90KSk/ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubG9nKGUvdCkvbn06WW0obil9ZnVuY3Rpb24gRHUodCxuKXtyZXR1cm4gdDwwP2Z1bmN0aW9uKGUpe3JldHVybi1NYXRoLnBvdygtbixlKSpNYXRoLnBvdygtdCwxLWUpfTpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3cobixlKSpNYXRoLnBvdyh0LDEtZSl9fWZ1bmN0aW9uIFV1KHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiBGdSh0KXtyZXR1cm4gMTA9PT10P1V1OnQ9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KHQsbil9fWZ1bmN0aW9uIEl1KHQpe3JldHVybiB0PT09TWF0aC5FP01hdGgubG9nOjEwPT09dCYmTWF0aC5sb2cxMHx8Mj09PXQmJk1hdGgubG9nMnx8KHQ9TWF0aC5sb2codCksZnVuY3Rpb24obil7cmV0dXJuIE1hdGgubG9nKG4pL3R9KX1mdW5jdGlvbiBqdSh0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuLXQoLW4pfX1mdW5jdGlvbiBZdSgpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gbz1JdShpKSx1PUZ1KGkpLHIoKVswXTwwJiYobz1qdShvKSx1PWp1KHUpKSxlfXZhciBlPXp1KHF1LER1KS5kb21haW4oWzEsMTBdKSxyPWUuZG9tYWluLGk9MTAsbz1JdSgxMCksdT1GdSgxMCk7cmV0dXJuIGUuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxuKCkpOml9LGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHQpLG4oKSk6cigpfSxlLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuLGU9cigpLGE9ZVswXSxjPWVbZS5sZW5ndGgtMV07KG49YzxhKSYmKGg9YSxhPWMsYz1oKTt2YXIgcyxsLGYsaD1vKGEpLHA9byhjKSxkPW51bGw9PXQ/MTA6K3Qsdj1bXTtpZighKGklMSkmJnAtaDxkKXtpZihoPU1hdGgucm91bmQoaCktMSxwPU1hdGgucm91bmQocCkrMSxhPjApe2Zvcig7aDxwOysraClmb3IobD0xLHM9dShoKTtsPGk7KytsKWlmKGY9cypsLCEoZjxhKSl7aWYoZj5jKWJyZWFrO3YucHVzaChmKX19ZWxzZSBmb3IoO2g8cDsrK2gpZm9yKGw9aS0xLHM9dShoKTtsPj0xOy0tbClpZihmPXMqbCwhKGY8YSkpe2lmKGY+YylicmVhazt2LnB1c2goZil9fWVsc2Ugdj1ubChoLHAsTWF0aC5taW4ocC1oLGQpKS5tYXAodSk7cmV0dXJuIG4/di5yZXZlcnNlKCk6dn0sZS50aWNrRm9ybWF0PWZ1bmN0aW9uKG4scil7aWYobnVsbD09ciYmKHI9MTA9PT1pPyIuMGUiOiIsIiksImZ1bmN0aW9uIiE9dHlwZW9mIHImJihyPXQuZm9ybWF0KHIpKSxuPT09MS8wKXJldHVybiByO251bGw9PW4mJihuPTEwKTt2YXIgYT1NYXRoLm1heCgxLGkqbi9lLnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC91KE1hdGgucm91bmQobyh0KSkpO3JldHVybiBuKmk8aS0uNSYmKG4qPWkpLG48PWE/cih0KToiIn19LGUubmljZT1mdW5jdGlvbigpe3JldHVybiByKFZtKHIoKSx7Zmxvb3I6ZnVuY3Rpb24odCl7cmV0dXJuIHUoTWF0aC5mbG9vcihvKHQpKSl9LGNlaWw6ZnVuY3Rpb24odCl7cmV0dXJuIHUoTWF0aC5jZWlsKG8odCkpKX19KSl9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBQdShlLFl1KCkuYmFzZShpKSl9LGV9ZnVuY3Rpb24gQnUodCxuKXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxuKTpNYXRoLnBvdyh0LG4pfWZ1bmN0aW9uIEh1KCl7ZnVuY3Rpb24gdCh0LG4pe3JldHVybihuPUJ1KG4sZSktKHQ9QnUodCxlKSkpP2Z1bmN0aW9uKHIpe3JldHVybihCdShyLGUpLXQpL259OlltKG4pfWZ1bmN0aW9uIG4odCxuKXtyZXR1cm4gbj1CdShuLGUpLSh0PUJ1KHQsZSkpLGZ1bmN0aW9uKHIpe3JldHVybiBCdSh0K24qciwxL2UpfX12YXIgZT0xLHI9enUodCxuKSxpPXIuZG9tYWluO3JldHVybiByLmV4cG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LGkoaSgpKSk6ZX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFB1KHIsSHUoKS5leHBvbmVudChlKSl9LFJ1KHIpfWZ1bmN0aW9uIFh1KCl7cmV0dXJuIEh1KCkuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIFZ1KCl7ZnVuY3Rpb24gdCgpe3ZhciB0PTAsbz1NYXRoLm1heCgxLHIubGVuZ3RoKTtmb3IoaT1uZXcgQXJyYXkoby0xKTsrK3Q8bzspaVt0LTFdPWlsKGUsdC9vKTtyZXR1cm4gbn1mdW5jdGlvbiBuKHQpe2lmKCFpc05hTih0PSt0KSlyZXR1cm4gcltEcyhpLHQpXX12YXIgZT1bXSxyPVtdLGk9W107cmV0dXJuIG4uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBuPXIuaW5kZXhPZih0KTtyZXR1cm4gbjwwP1tOYU4sTmFOXTpbbj4wP2lbbi0xXTplWzBdLG48aS5sZW5ndGg/aVtuXTplW2UubGVuZ3RoLTFdXX0sbi5kb21haW49ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgcixpPTAsbz1uLmxlbmd0aDtpPG87KytpKXI9bltpXSxudWxsPT1yfHxpc05hTihyPStyKXx8ZS5wdXNoKHIpO3JldHVybiBlLnNvcnQoT3MpLHQoKX0sbi5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1JbS5jYWxsKG4pLHQoKSk6ci5zbGljZSgpfSxuLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiBpLnNsaWNlKCl9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWdSgpLmRvbWFpbihlKS5yYW5nZShyKX0sbn1mdW5jdGlvbiBXdSgpe2Z1bmN0aW9uIHQodCl7aWYodDw9dClyZXR1cm4gdVtEcyhvLHQsMCxpKV19ZnVuY3Rpb24gbigpe3ZhciBuPS0xO2ZvcihvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT0oKG4rMSkqci0obi1pKSplKS8oaSsxKTtyZXR1cm4gdH12YXIgZT0wLHI9MSxpPTEsbz1bLjVdLHU9WzAsMV07cmV0dXJuIHQuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbMV0sbigpKTpbZSxyXX0sdC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0odT1JbS5jYWxsKHQpKS5sZW5ndGgtMSxuKCkpOnUuc2xpY2UoKX0sdC5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG49dS5pbmRleE9mKHQpO3JldHVybiBuPDA/W05hTixOYU5dOm48MT9bZSxvWzBdXTpuPj1pP1tvW2ktMV0scl06W29bbi0xXSxvW25dXX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFd1KCkuZG9tYWluKFtlLHJdKS5yYW5nZSh1KX0sUnUodCl9ZnVuY3Rpb24gR3UoKXtmdW5jdGlvbiB0KHQpe2lmKHQ8PXQpcmV0dXJuIGVbRHMobix0LDAscildfXZhciBuPVsuNV0sZT1bMCwxXSxyPTE7cmV0dXJuIHQuZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPUltLmNhbGwoaSkscj1NYXRoLm1pbihuLmxlbmd0aCxlLmxlbmd0aC0xKSx0KTpuLnNsaWNlKCl9LHQucmFuZ2U9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9SW0uY2FsbChpKSxyPU1hdGgubWluKG4ubGVuZ3RoLGUubGVuZ3RoLTEpLHQpOmUuc2xpY2UoKX0sdC5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIHI9ZS5pbmRleE9mKHQpO3JldHVybltuW3ItMV0sbltyXV19LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBHdSgpLmRvbWFpbihuKS5yYW5nZShlKX0sdH1mdW5jdGlvbiAkdSh0LG4sZSxyKXtmdW5jdGlvbiBpKG4pe3JldHVybiB0KG49bmV3IERhdGUoK24pKSxufXJldHVybiBpLmZsb29yPWksaS5jZWlsPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoZS0xKSksbihlLDEpLHQoZSksZX0saS5yb3VuZD1mdW5jdGlvbih0KXt2YXIgbj1pKHQpLGU9aS5jZWlsKHQpO3JldHVybiB0LW48ZS10P246ZX0saS5vZmZzZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0PW5ldyBEYXRlKCt0KSxudWxsPT1lPzE6TWF0aC5mbG9vcihlKSksdH0saS5yYW5nZT1mdW5jdGlvbihlLHIsbyl7dmFyIHU9W107aWYoZT1pLmNlaWwoZSksbz1udWxsPT1vPzE6TWF0aC5mbG9vcihvKSwhKGU8ciYmbz4wKSlyZXR1cm4gdTtkbyB1LnB1c2gobmV3IERhdGUoK2UpKTt3aGlsZShuKGUsbyksdChlKSxlPHIpO3JldHVybiB1fSxpLmZpbHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gJHUoZnVuY3Rpb24obil7aWYobj49bilmb3IoO3QobiksIWUobik7KW4uc2V0VGltZShuLTEpfSxmdW5jdGlvbih0LHIpe2lmKHQ+PXQpZm9yKDstLXI+PTA7KWZvcig7bih0LDEpLCFlKHQpOyk7fSl9LGUmJihpLmNvdW50PWZ1bmN0aW9uKG4scil7cmV0dXJuIFdtLnNldFRpbWUoK24pLEdtLnNldFRpbWUoK3IpLHQoV20pLHQoR20pLE1hdGguZmxvb3IoZShXbSxHbSkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/aS5maWx0ZXIocj9mdW5jdGlvbihuKXtyZXR1cm4gcihuKSV0PT09MH06ZnVuY3Rpb24obil7cmV0dXJuIGkuY291bnQoMCxuKSV0PT09MH0pOmk6bnVsbH0pLGl9ZnVuY3Rpb24gWnUodCl7cmV0dXJuICR1KGZ1bmN0aW9uKG4pe24uc2V0RGF0ZShuLmdldERhdGUoKS0obi5nZXREYXkoKSs3LXQpJTcpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdC0obi5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqUW0pL254fSl9ZnVuY3Rpb24gSnUodCl7cmV0dXJuICR1KGZ1bmN0aW9uKG4pe24uc2V0VVRDRGF0ZShuLmdldFVUQ0RhdGUoKS0obi5nZXRVVENEYXkoKSs3LXQpJTcpLG4uc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdCkvbnh9KX1mdW5jdGlvbiBRdSh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBuPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gbi5zZXRGdWxsWWVhcih0LnkpLG59cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gS3UodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgbj1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBuLnNldFVUQ0Z1bGxZZWFyKHQueSksbn1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gdGEodCl7cmV0dXJue3k6dCxtOjAsZDoxLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gbmEodCl7ZnVuY3Rpb24gbih0LG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixpLG8sdT1bXSxhPS0xLGM9MCxzPXQubGVuZ3RoO2ZvcihlIGluc3RhbmNlb2YgRGF0ZXx8KGU9bmV3IERhdGUoK2UpKTsrK2E8czspMzc9PT10LmNoYXJDb2RlQXQoYSkmJih1LnB1c2godC5zbGljZShjLGEpKSxudWxsIT0oaT1LeFtyPXQuY2hhckF0KCsrYSldKT9yPXQuY2hhckF0KCsrYSk6aT0iZSI9PT1yPyIgIjoiMCIsCihvPW5bcl0pJiYocj1vKGUsaSkpLHUucHVzaChyKSxjPWErMSk7cmV0dXJuIHUucHVzaCh0LnNsaWNlKGMsYSkpLHUuam9pbigiIil9fWZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9dGEoMTkwMCksbz1yKGksdCxlKz0iIiwwKTtpZihvIT1lLmxlbmd0aClyZXR1cm4gbnVsbDtpZigicCJpbiBpJiYoaS5IPWkuSCUxMisxMippLnApLCJXImluIGl8fCJVImluIGkpeyJ3ImluIGl8fChpLnc9IlciaW4gaT8xOjApO3ZhciB1PSJaImluIGk/S3UodGEoaS55KSkuZ2V0VVRDRGF5KCk6bih0YShpLnkpKS5nZXREYXkoKTtpLm09MCxpLmQ9IlciaW4gaT8oaS53KzYpJTcrNyppLlctKHUrNSklNzppLncrNyppLlUtKHUrNiklN31yZXR1cm4iWiJpbiBpPyhpLkgrPWkuWi8xMDB8MCxpLk0rPWkuWiUxMDAsS3UoaSkpOm4oaSl9fWZ1bmN0aW9uIHIodCxuLGUscil7Zm9yKHZhciBpLG8sdT0wLGE9bi5sZW5ndGgsYz1lLmxlbmd0aDt1PGE7KXtpZihyPj1jKXJldHVybi0xO2lmKGk9bi5jaGFyQ29kZUF0KHUrKyksMzc9PT1pKXtpZihpPW4uY2hhckF0KHUrKyksbz1ZW2kgaW4gS3g/bi5jaGFyQXQodSsrKTppXSwhb3x8KHI9byh0LGUscikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1lLmNoYXJDb2RlQXQocisrKSlyZXR1cm4tMX1yZXR1cm4gcn1mdW5jdGlvbiBpKHQsbixlKXt2YXIgcj1DLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQucD1QW3JbMF0udG9Mb3dlckNhc2UoKV0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbyh0LG4sZSl7dmFyIHI9Ty5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lnc9TFtyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHUodCxuLGUpe3ZhciByPXouZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC53PVJbclswXS50b0xvd2VyQ2FzZSgpXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBhKHQsbixlKXt2YXIgcj1VLmV4ZWMobi5zbGljZShlKSk7cmV0dXJuIHI/KHQubT1GW3JbMF0udG9Mb3dlckNhc2UoKV0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYyh0LG4sZSl7dmFyIHI9cS5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Lm09RFtyWzBdLnRvTG93ZXJDYXNlKCldLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHModCxuLGUpe3JldHVybiByKHQsdyxuLGUpfWZ1bmN0aW9uIGwodCxuLGUpe3JldHVybiByKHQsTSxuLGUpfWZ1bmN0aW9uIGYodCxuLGUpe3JldHVybiByKHQsVCxuLGUpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIEFbdC5nZXREYXkoKV19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gU1t0LmdldERheSgpXX1mdW5jdGlvbiBkKHQpe3JldHVybiBFW3QuZ2V0TW9udGgoKV19ZnVuY3Rpb24gdih0KXtyZXR1cm4gTlt0LmdldE1vbnRoKCldfWZ1bmN0aW9uIF8odCl7cmV0dXJuIGtbKyh0LmdldEhvdXJzKCk+PTEyKV19ZnVuY3Rpb24gZyh0KXtyZXR1cm4gQVt0LmdldFVUQ0RheSgpXX1mdW5jdGlvbiB5KHQpe3JldHVybiBTW3QuZ2V0VVRDRGF5KCldfWZ1bmN0aW9uIG0odCl7cmV0dXJuIEVbdC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiB4KHQpe3JldHVybiBOW3QuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gYih0KXtyZXR1cm4ga1srKHQuZ2V0VVRDSG91cnMoKT49MTIpXX12YXIgdz10LmRhdGVUaW1lLE09dC5kYXRlLFQ9dC50aW1lLGs9dC5wZXJpb2RzLFM9dC5kYXlzLEE9dC5zaG9ydERheXMsTj10Lm1vbnRocyxFPXQuc2hvcnRNb250aHMsQz1pYShrKSxQPW9hKGspLHo9aWEoUyksUj1vYShTKSxPPWlhKEEpLEw9b2EoQSkscT1pYShOKSxEPW9hKE4pLFU9aWEoRSksRj1vYShFKSxJPXthOmgsQTpwLGI6ZCxCOnYsYzpudWxsLGQ6eGEsZTp4YSxIOmJhLEk6d2EsajpNYSxMOlRhLG06a2EsTTpTYSxwOl8sUzpBYSxVOk5hLHc6RWEsVzpDYSx4Om51bGwsWDpudWxsLHk6UGEsWTp6YSxaOlJhLCIlIjpHYX0saj17YTpnLEE6eSxiOm0sQjp4LGM6bnVsbCxkOk9hLGU6T2EsSDpMYSxJOnFhLGo6RGEsTDpVYSxtOkZhLE06SWEscDpiLFM6amEsVTpZYSx3OkJhLFc6SGEseDpudWxsLFg6bnVsbCx5OlhhLFk6VmEsWjpXYSwiJSI6R2F9LFk9e2E6byxBOnUsYjphLEI6YyxjOnMsZDpwYSxlOnBhLEg6dmEsSTp2YSxqOmRhLEw6eWEsbTpoYSxNOl9hLHA6aSxTOmdhLFU6YWEsdzp1YSxXOmNhLHg6bCxYOmYseTpsYSxZOnNhLFo6ZmEsIiUiOm1hfTtyZXR1cm4gSS54PW4oTSxJKSxJLlg9bihULEkpLEkuYz1uKHcsSSksai54PW4oTSxqKSxqLlg9bihULGopLGouYz1uKHcsaikse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1uKHQrPSIiLEkpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBuPWUodCs9IiIsUXUpO3JldHVybiBuLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG59LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1uKHQrPSIiLGopO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y1BhcnNlOmZ1bmN0aW9uKHQpe3ZhciBuPWUodCxLdSk7cmV0dXJuIG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sbn19fWZ1bmN0aW9uIGVhKHQsbixlKXt2YXIgcj10PDA/Ii0iOiIiLGk9KHI/LXQ6dCkrIiIsbz1pLmxlbmd0aDtyZXR1cm4gcisobzxlP25ldyBBcnJheShlLW8rMSkuam9pbihuKStpOmkpfWZ1bmN0aW9uIHJhKHQpe3JldHVybiB0LnJlcGxhY2UoZWIsIlxcJCYiKX1mdW5jdGlvbiBpYSh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAocmEpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBvYSh0KXtmb3IodmFyIG49e30sZT0tMSxyPXQubGVuZ3RoOysrZTxyOyluW3RbZV0udG9Mb3dlckNhc2UoKV09ZTtyZXR1cm4gbn1mdW5jdGlvbiB1YSh0LG4sZSl7dmFyIHI9dGIuZXhlYyhuLnNsaWNlKGUsZSsxKSk7cmV0dXJuIHI/KHQudz0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBhYSh0LG4sZSl7dmFyIHI9dGIuZXhlYyhuLnNsaWNlKGUpKTtyZXR1cm4gcj8odC5VPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGNhKHQsbixlKXt2YXIgcj10Yi5leGVjKG4uc2xpY2UoZSkpO3JldHVybiByPyh0Llc9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc2EodCxuLGUpe3ZhciByPXRiLmV4ZWMobi5zbGljZShlLGUrNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbGEodCxuLGUpe3ZhciByPXRiLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmYSh0LG4sZSl7dmFyIHI9L14oWil8KFsrLV1cZFxkKSg/Olw6PyhcZFxkKSk/Ly5leGVjKG4uc2xpY2UoZSxlKzYpKTtyZXR1cm4gcj8odC5aPXJbMV0/MDotKHJbMl0rKHJbM118fCIwMCIpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBoYSh0LG4sZSl7dmFyIHI9dGIuZXhlYyhuLnNsaWNlKGUsZSsyKSk7cmV0dXJuIHI/KHQubT1yWzBdLTEsZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcGEodCxuLGUpe3ZhciByPXRiLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0LmQ9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZGEodCxuLGUpe3ZhciByPXRiLmV4ZWMobi5zbGljZShlLGUrMykpO3JldHVybiByPyh0Lm09MCx0LmQ9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdmEodCxuLGUpe3ZhciByPXRiLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0Lkg9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gX2EodCxuLGUpe3ZhciByPXRiLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0Lk09K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZ2EodCxuLGUpe3ZhciByPXRiLmV4ZWMobi5zbGljZShlLGUrMikpO3JldHVybiByPyh0LlM9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geWEodCxuLGUpe3ZhciByPXRiLmV4ZWMobi5zbGljZShlLGUrMykpO3JldHVybiByPyh0Lkw9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbWEodCxuLGUpe3ZhciByPW5iLmV4ZWMobi5zbGljZShlLGUrMSkpO3JldHVybiByP2UrclswXS5sZW5ndGg6LTF9ZnVuY3Rpb24geGEodCxuKXtyZXR1cm4gZWEodC5nZXREYXRlKCksbiwyKX1mdW5jdGlvbiBiYSh0LG4pe3JldHVybiBlYSh0LmdldEhvdXJzKCksbiwyKX1mdW5jdGlvbiB3YSh0LG4pe3JldHVybiBlYSh0LmdldEhvdXJzKCklMTJ8fDEyLG4sMil9ZnVuY3Rpb24gTWEodCxuKXtyZXR1cm4gZWEoMStjeC5jb3VudChTeCh0KSx0KSxuLDMpfWZ1bmN0aW9uIFRhKHQsbil7cmV0dXJuIGVhKHQuZ2V0TWlsbGlzZWNvbmRzKCksbiwzKX1mdW5jdGlvbiBrYSh0LG4pe3JldHVybiBlYSh0LmdldE1vbnRoKCkrMSxuLDIpfWZ1bmN0aW9uIFNhKHQsbil7cmV0dXJuIGVhKHQuZ2V0TWludXRlcygpLG4sMil9ZnVuY3Rpb24gQWEodCxuKXtyZXR1cm4gZWEodC5nZXRTZWNvbmRzKCksbiwyKX1mdW5jdGlvbiBOYSh0LG4pe3JldHVybiBlYShseC5jb3VudChTeCh0KSx0KSxuLDIpfWZ1bmN0aW9uIEVhKHQpe3JldHVybiB0LmdldERheSgpfWZ1bmN0aW9uIENhKHQsbil7cmV0dXJuIGVhKGZ4LmNvdW50KFN4KHQpLHQpLG4sMil9ZnVuY3Rpb24gUGEodCxuKXtyZXR1cm4gZWEodC5nZXRGdWxsWWVhcigpJTEwMCxuLDIpfWZ1bmN0aW9uIHphKHQsbil7cmV0dXJuIGVhKHQuZ2V0RnVsbFllYXIoKSUxZTQsbiw0KX1mdW5jdGlvbiBSYSh0KXt2YXIgbj10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKG4+MD8iLSI6KG4qPS0xLCIrIikpK2VhKG4vNjB8MCwiMCIsMikrZWEobiU2MCwiMCIsMil9ZnVuY3Rpb24gT2EodCxuKXtyZXR1cm4gZWEodC5nZXRVVENEYXRlKCksbiwyKX1mdW5jdGlvbiBMYSh0LG4pe3JldHVybiBlYSh0LmdldFVUQ0hvdXJzKCksbiwyKX1mdW5jdGlvbiBxYSh0LG4pe3JldHVybiBlYSh0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLG4sMil9ZnVuY3Rpb24gRGEodCxuKXtyZXR1cm4gZWEoMSt6eC5jb3VudChaeCh0KSx0KSxuLDMpfWZ1bmN0aW9uIFVhKHQsbil7cmV0dXJuIGVhKHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksbiwzKX1mdW5jdGlvbiBGYSh0LG4pe3JldHVybiBlYSh0LmdldFVUQ01vbnRoKCkrMSxuLDIpfWZ1bmN0aW9uIElhKHQsbil7cmV0dXJuIGVhKHQuZ2V0VVRDTWludXRlcygpLG4sMil9ZnVuY3Rpb24gamEodCxuKXtyZXR1cm4gZWEodC5nZXRVVENTZWNvbmRzKCksbiwyKX1mdW5jdGlvbiBZYSh0LG4pe3JldHVybiBlYShPeC5jb3VudChaeCh0KSx0KSxuLDIpfWZ1bmN0aW9uIEJhKHQpe3JldHVybiB0LmdldFVUQ0RheSgpfWZ1bmN0aW9uIEhhKHQsbil7cmV0dXJuIGVhKEx4LmNvdW50KFp4KHQpLHQpLG4sMil9ZnVuY3Rpb24gWGEodCxuKXtyZXR1cm4gZWEodC5nZXRVVENGdWxsWWVhcigpJTEwMCxuLDIpfWZ1bmN0aW9uIFZhKHQsbil7cmV0dXJuIGVhKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsbiw0KX1mdW5jdGlvbiBXYSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gR2EoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gJGEobil7cmV0dXJuIEp4PW5hKG4pLHQudGltZUZvcm1hdD1KeC5mb3JtYXQsdC50aW1lUGFyc2U9SngucGFyc2UsdC51dGNGb3JtYXQ9SngudXRjRm9ybWF0LHQudXRjUGFyc2U9SngudXRjUGFyc2UsSnh9ZnVuY3Rpb24gWmEodCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX1mdW5jdGlvbiBKYSh0KXt2YXIgbj1uZXcgRGF0ZSh0KTtyZXR1cm4gaXNOYU4obik/bnVsbDpufWZ1bmN0aW9uIFFhKHQpe3JldHVybiBuZXcgRGF0ZSh0KX1mdW5jdGlvbiBLYSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGU/K3Q6K25ldyBEYXRlKCt0KX1mdW5jdGlvbiB0Yyh0LG4sZSxpLG8sdSxhLGMscyl7ZnVuY3Rpb24gbChyKXtyZXR1cm4oYShyKTxyP3Y6dShyKTxyP186byhyKTxyP2c6aShyKTxyP3k6bihyKTxyP2Uocik8cj9tOng6dChyKTxyP2I6dykocil9ZnVuY3Rpb24gZihuLGUsaSxvKXtpZihudWxsPT1uJiYobj0xMCksIm51bWJlciI9PXR5cGVvZiBuKXt2YXIgdT1NYXRoLmFicyhpLWUpL24sYT1McyhmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pLnJpZ2h0KE0sdSk7YT09PU0ubGVuZ3RoPyhvPXIoZS9oYixpL2hiLG4pLG49dCk6YT8oYT1NW3UvTVthLTFdWzJdPE1bYV1bMl0vdT9hLTE6YV0sbz1hWzFdLG49YVswXSk6KG89cihlLGksbiksbj1jKX1yZXR1cm4gbnVsbD09bz9uOm4uZXZlcnkobyl9dmFyIGg9enUoU3UsVGgpLHA9aC5pbnZlcnQsZD1oLmRvbWFpbix2PXMoIi4lTCIpLF89cygiOiVTIiksZz1zKCIlSTolTSIpLHk9cygiJUkgJXAiKSxtPXMoIiVhICVkIikseD1zKCIlYiAlZCIpLGI9cygiJUIiKSx3PXMoIiVZIiksTT1bW2EsMSx1Yl0sW2EsNSw1KnViXSxbYSwxNSwxNSp1Yl0sW2EsMzAsMzAqdWJdLFt1LDEsYWJdLFt1LDUsNSphYl0sW3UsMTUsMTUqYWJdLFt1LDMwLDMwKmFiXSxbbywxLGNiXSxbbywzLDMqY2JdLFtvLDYsNipjYl0sW28sMTIsMTIqY2JdLFtpLDEsc2JdLFtpLDIsMipzYl0sW2UsMSxsYl0sW24sMSxmYl0sW24sMywzKmZiXSxbdCwxLGhiXV07cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShwKHQpKX0saC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZChGbS5jYWxsKHQsS2EpKTpkKCkubWFwKFFhKX0saC50aWNrcz1mdW5jdGlvbih0LG4pe3ZhciBlLHI9ZCgpLGk9clswXSxvPXJbci5sZW5ndGgtMV0sdT1vPGk7cmV0dXJuIHUmJihlPWksaT1vLG89ZSksZT1mKHQsaSxvLG4pLGU9ZT9lLnJhbmdlKGksbysxKTpbXSx1P2UucmV2ZXJzZSgpOmV9LGgudGlja0Zvcm1hdD1mdW5jdGlvbih0LG4pe3JldHVybiBudWxsPT1uP2w6cyhuKX0saC5uaWNlPWZ1bmN0aW9uKHQsbil7dmFyIGU9ZCgpO3JldHVybih0PWYodCxlWzBdLGVbZS5sZW5ndGgtMV0sbikpP2QoVm0oZSx0KSk6aH0saC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFB1KGgsdGModCxuLGUsaSxvLHUsYSxjLHMpKX0saH1mdW5jdGlvbiBuYyh0KXt2YXIgbj10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihuLTEsTWF0aC5mbG9vcihlKm4pKSldfX1mdW5jdGlvbiBlYyh0KXtmdW5jdGlvbiBuKG4pe3ZhciBvPShuLWUpLyhyLWUpO3JldHVybiB0KGk/TWF0aC5tYXgoMCxNYXRoLm1pbigxLG8pKTpvKX12YXIgZT0wLHI9MSxpPSExO3JldHVybiBuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxyPSt0WzFdLG4pOltlLHJdfSxuLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSEhdCxuKTppfSxuLmludGVycG9sYXRvcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBlYyh0KS5kb21haW4oW2Uscl0pLmNsYW1wKGkpfSxSdShuKX1mdW5jdGlvbiByYyh0KXtyZXR1cm4gdD4xPzA6dDwtMT9VYjpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gaWModCl7cmV0dXJuIHQ+PTE/RmI6dDw9LTE/LUZiOk1hdGguYXNpbih0KX1mdW5jdGlvbiBvYyh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiB1Yyh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBhYyh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIGNjKHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIHNjKHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIGxjKHQsbixlLHIsaSxvLHUsYSl7dmFyIGM9ZS10LHM9ci1uLGw9dS1pLGY9YS1vLGg9KGwqKG4tbyktZioodC1pKSkvKGYqYy1sKnMpO3JldHVyblt0K2gqYyxuK2gqc119ZnVuY3Rpb24gZmModCxuLGUscixpLG8sdSl7dmFyIGE9dC1lLGM9bi1yLHM9KHU/bzotbykvcWIoYSphK2MqYyksbD1zKmMsZj0tcyphLGg9dCtsLHA9bitmLGQ9ZStsLHY9citmLF89KGgrZCkvMixnPShwK3YpLzIseT1kLWgsbT12LXAseD15KnkrbSptLGI9aS1vLHc9aCp2LWQqcCxNPShtPDA/LTE6MSkqcWIoUmIoMCxiKmIqeC13KncpKSxUPSh3Km0teSpNKS94LGs9KC13KnktbSpNKS94LFM9KHcqbSt5Kk0pL3gsQT0oLXcqeSttKk0pL3gsTj1ULV8sRT1rLWcsQz1TLV8sUD1BLWc7cmV0dXJuIE4qTitFKkU+QypDK1AqUCYmKFQ9UyxrPUEpLHtjeDpULGN5OmsseDAxOi1sLHkwMTotZix4MTE6VCooaS9iLTEpLHkxMTprKihpL2ItMSl9fWZ1bmN0aW9uIGhjKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBwYyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBkYyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiB2Yyh0KXt0aGlzLl9jdXJ2ZT10fWZ1bmN0aW9uIF9jKHQpe2Z1bmN0aW9uIG4obil7cmV0dXJuIG5ldyB2Yyh0KG4pKX1yZXR1cm4gbi5fY3VydmU9dCxufWZ1bmN0aW9uIGdjKHQpe3ZhciBuPXQuY3VydmU7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKF9jKHQpKTpuKCkuX2N1cnZlfSx0fWZ1bmN0aW9uIHljKHQsbixlKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqdC5feDArdC5feDEpLzMsKDIqdC5feTArdC5feTEpLzMsKHQuX3gwKzIqdC5feDEpLzMsKHQuX3kwKzIqdC5feTEpLzMsKHQuX3gwKzQqdC5feDErbikvNiwodC5feTArNCp0Ll95MStlKS82KX1mdW5jdGlvbiBtYyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24geGModCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIGJjKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB3Yyh0LG4pe3RoaXMuX2Jhc2lzPW5ldyBtYyh0KSx0aGlzLl9iZXRhPW59ZnVuY3Rpb24gTWModCxuLGUpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0Ll94MSt0Ll9rKih0Ll94Mi10Ll94MCksdC5feTErdC5fayoodC5feTItdC5feTApLHQuX3gyK3QuX2sqKHQuX3gxLW4pLHQuX3kyK3QuX2sqKHQuX3kxLWUpLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiBUYyh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLW4pLzZ9ZnVuY3Rpb24ga2ModCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1uKS82fWZ1bmN0aW9uIFNjKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtbikvNn1mdW5jdGlvbiBBYyh0LG4sZSl7dmFyIHI9dC5feDEsaT10Ll95MSxvPXQuX3gyLHU9dC5feTI7aWYodC5fbDAxX2E+RGIpe3ZhciBhPTIqdC5fbDAxXzJhKzMqdC5fbDAxX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGM9Myp0Ll9sMDFfYSoodC5fbDAxX2ErdC5fbDEyX2EpO3I9KHIqYS10Ll94MCp0Ll9sMTJfMmErdC5feDIqdC5fbDAxXzJhKS9jLGk9KGkqYS10Ll95MCp0Ll9sMTJfMmErdC5feTIqdC5fbDAxXzJhKS9jfWlmKHQuX2wyM19hPkRiKXt2YXIgcz0yKnQuX2wyM18yYSszKnQuX2wyM19hKnQuX2wxMl9hK3QuX2wxMl8yYSxsPTMqdC5fbDIzX2EqKHQuX2wyM19hK3QuX2wxMl9hKTtvPShvKnMrdC5feDEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS9sLHU9KHUqcyt0Ll95MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL2x9dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIsaSxvLHUsdC5feDIsdC5feTIpfWZ1bmN0aW9uIE5jKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPW59ZnVuY3Rpb24gRWModCxuKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9bn1mdW5jdGlvbiBDYyh0LG4pe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1ufWZ1bmN0aW9uIFBjKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB6Yyh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gUmModCxuLGUpe3ZhciByPXQuX3gxLXQuX3gwLGk9bi10Ll94MSxvPSh0Ll95MS10Ll95MCkvKHJ8fGk8MCYmLTApLHU9KGUtdC5feTEpLyhpfHxyPDAmJi0wKSxhPShvKmkrdSpyKS8ocitpKTtyZXR1cm4oemMobykremModSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKHUpLC41Kk1hdGguYWJzKGEpKXx8MH1mdW5jdGlvbiBPYyh0LG4pe3ZhciBlPXQuX3gxLXQuX3gwO3JldHVybiBlPygzKih0Ll95MS10Ll95MCkvZS1uKS8yOm59ZnVuY3Rpb24gTGModCxuLGUpe3ZhciByPXQuX3gwLGk9dC5feTAsbz10Ll94MSx1PXQuX3kxLGE9KG8tcikvMzt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocithLGkrYSpuLG8tYSx1LWEqZSxvLHUpfWZ1bmN0aW9uIHFjKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBEYyh0KXt0aGlzLl9jb250ZXh0PW5ldyBVYyh0KX1mdW5jdGlvbiBVYyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRmModCl7cmV0dXJuIG5ldyBxYyh0KX1mdW5jdGlvbiBJYyh0KXtyZXR1cm4gbmV3IERjKHQpfWZ1bmN0aW9uIGpjKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBZYyh0KXt2YXIgbixlLHI9dC5sZW5ndGgtMSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSx1PW5ldyBBcnJheShyKTtmb3IoaVswXT0wLG9bMF09Mix1WzBdPXRbMF0rMip0WzFdLG49MTtuPHItMTsrK24paVtuXT0xLG9bbl09NCx1W25dPTQqdFtuXSsyKnRbbisxXTtmb3IoaVtyLTFdPTIsb1tyLTFdPTcsdVtyLTFdPTgqdFtyLTFdK3Rbcl0sbj0xO248cjsrK24pZT1pW25dL29bbi0xXSxvW25dLT1lLHVbbl0tPWUqdVtuLTFdO2ZvcihpW3ItMV09dVtyLTFdL29bci0xXSxuPXItMjtuPj0wOy0tbilpW25dPSh1W25dLWlbbisxXSkvb1tuXTtmb3Iob1tyLTFdPSh0W3JdK2lbci0xXSkvMixuPTA7bjxyLTE7KytuKW9bbl09Mip0W24rMV0taVtuKzFdO3JldHVybltpLG9dfWZ1bmN0aW9uIEJjKHQsbil7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9bn1mdW5jdGlvbiBIYyh0KXtyZXR1cm4gbmV3IEJjKHQsMCl9ZnVuY3Rpb24gWGModCl7cmV0dXJuIG5ldyBCYyh0LDEpfWZ1bmN0aW9uIFZjKHQsbil7cmV0dXJuIHRbbl19ZnVuY3Rpb24gV2ModCl7Zm9yKHZhciBuLGU9MCxyPS0xLGk9dC5sZW5ndGg7KytyPGk7KShuPSt0W3JdWzFdKSYmKGUrPW4pO3JldHVybiBlfWZ1bmN0aW9uIEdjKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uICRjKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIFpjKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gSmModCl7dC5VPXQuQz10Lkw9dC5SPXQuUD10Lk49bnVsbH1mdW5jdGlvbiBRYyh0LG4pe3ZhciBlPW4scj1uLlIsaT1lLlU7aT9pLkw9PT1lP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLGUuVT1yLGUuUj1yLkwsZS5SJiYoZS5SLlU9ZSksci5MPWV9ZnVuY3Rpb24gS2ModCxuKXt2YXIgZT1uLHI9bi5MLGk9ZS5VO2k/aS5MPT09ZT9pLkw9cjppLlI9cjp0Ll89cixyLlU9aSxlLlU9cixlLkw9ci5SLGUuTCYmKGUuTC5VPWUpLHIuUj1lfWZ1bmN0aW9uIHRzKHQpe2Zvcig7dC5MOyl0PXQuTDtyZXR1cm4gdH1mdW5jdGlvbiBucyh0LG4sZSxyKXt2YXIgaT1bbnVsbCxudWxsXSxvPVd3LnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PXQsaS5yaWdodD1uLGUmJnJzKGksdCxuLGUpLHImJnJzKGksbix0LHIpLFh3W3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLFh3W24uaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGl9ZnVuY3Rpb24gZXModCxuLGUpe3ZhciByPVtuLGVdO3JldHVybiByLmxlZnQ9dCxyfWZ1bmN0aW9uIHJzKHQsbixlLHIpe3RbMF18fHRbMV0/dC5sZWZ0PT09ZT90WzFdPXI6dFswXT1yOih0WzBdPXIsdC5sZWZ0PW4sdC5yaWdodD1lKX1mdW5jdGlvbiBpcyh0LG4sZSxyLGkpe3ZhciBvLHU9dFswXSxhPXRbMV0sYz11WzBdLHM9dVsxXSxsPWFbMF0sZj1hWzFdLGg9MCxwPTEsZD1sLWMsdj1mLXM7aWYobz1uLWMsZHx8IShvPjApKXtpZihvLz1kLGQ8MCl7aWYobzxoKXJldHVybjtvPHAmJihwPW8pfWVsc2UgaWYoZD4wKXtpZihvPnApcmV0dXJuO28+aCYmKGg9byl9aWYobz1yLWMsZHx8IShvPDApKXtpZihvLz1kLGQ8MCl7aWYobz5wKXJldHVybjtvPmgmJihoPW8pfWVsc2UgaWYoZD4wKXtpZihvPGgpcmV0dXJuO288cCYmKHA9byl9aWYobz1lLXMsdnx8IShvPjApKXtpZihvLz12LHY8MCl7aWYobzxoKXJldHVybjtvPHAmJihwPW8pfWVsc2UgaWYodj4wKXtpZihvPnApcmV0dXJuO28+aCYmKGg9byl9aWYobz1pLXMsdnx8IShvPDApKXtpZihvLz12LHY8MCl7aWYobz5wKXJldHVybjtvPmgmJihoPW8pfWVsc2UgaWYodj4wKXtpZihvPGgpcmV0dXJuO288cCYmKHA9byl9cmV0dXJuIShoPjB8fHA8MSl8fChoPjAmJih0WzBdPVtjK2gqZCxzK2gqdl0pLHA8MSYmKHRbMV09W2MrcCpkLHMrcCp2XSksITApfX19fX1mdW5jdGlvbiBvcyh0LG4sZSxyLGkpe3ZhciBvPXRbMV07aWYobylyZXR1cm4hMDt2YXIgdSxhLGM9dFswXSxzPXQubGVmdCxsPXQucmlnaHQsZj1zWzBdLGg9c1sxXSxwPWxbMF0sZD1sWzFdLHY9KGYrcCkvMixfPShoK2QpLzI7aWYoZD09PWgpe2lmKHY8bnx8dj49cilyZXR1cm47aWYoZj5wKXtpZihjKXtpZihjWzFdPj1pKXJldHVybn1lbHNlIGM9W3YsZV07bz1bdixpXX1lbHNle2lmKGMpe2lmKGNbMV08ZSlyZXR1cm59ZWxzZSBjPVt2LGldO289W3YsZV19fWVsc2UgaWYodT0oZi1wKS8oZC1oKSxhPV8tdSp2LHU8LTF8fHU+MSlpZihmPnApe2lmKGMpe2lmKGNbMV0+PWkpcmV0dXJufWVsc2UgYz1bKGUtYSkvdSxlXTtvPVsoaS1hKS91LGldfWVsc2V7aWYoYyl7aWYoY1sxXTxlKXJldHVybn1lbHNlIGM9WyhpLWEpL3UsaV07bz1bKGUtYSkvdSxlXX1lbHNlIGlmKGg8ZCl7aWYoYyl7aWYoY1swXT49cilyZXR1cm59ZWxzZSBjPVtuLHUqbithXTtvPVtyLHUqcithXX1lbHNle2lmKGMpe2lmKGNbMF08bilyZXR1cm59ZWxzZSBjPVtyLHUqcithXTtvPVtuLHUqbithXX1yZXR1cm4gdFswXT1jLHRbMV09bywhMH1mdW5jdGlvbiB1cyh0LG4sZSxyKXtmb3IodmFyIGksbz1Xdy5sZW5ndGg7by0tOylvcyhpPVd3W29dLHQsbixlLHIpJiZpcyhpLHQsbixlLHIpJiYoTWF0aC5hYnMoaVswXVswXS1pWzFdWzBdKT5ad3x8TWF0aC5hYnMoaVswXVsxXS1pWzFdWzFdKT5adyl8fGRlbGV0ZSBXd1tvXX1mdW5jdGlvbiBhcyh0KXtyZXR1cm4gWHdbdC5pbmRleF09e3NpdGU6dCxoYWxmZWRnZXM6W119fWZ1bmN0aW9uIGNzKHQsbil7dmFyIGU9dC5zaXRlLHI9bi5sZWZ0LGk9bi5yaWdodDtyZXR1cm4gZT09PWkmJihpPXIscj1lKSxpP01hdGguYXRhbjIoaVsxXS1yWzFdLGlbMF0tclswXSk6KGU9PT1yPyhyPW5bMV0saT1uWzBdKToocj1uWzBdLGk9blsxXSksTWF0aC5hdGFuMihyWzBdLWlbMF0saVsxXS1yWzFdKSl9ZnVuY3Rpb24gc3ModCxuKXtyZXR1cm4gblsrKG4ubGVmdCE9PXQuc2l0ZSldfWZ1bmN0aW9uIGxzKHQsbil7cmV0dXJuIG5bKyhuLmxlZnQ9PT10LnNpdGUpXX1mdW5jdGlvbiBmcygpe2Zvcih2YXIgdCxuLGUscixpPTAsbz1Ydy5sZW5ndGg7aTxvOysraSlpZigodD1Yd1tpXSkmJihyPShuPXQuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgdT1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGU9MDtlPHI7KytlKXVbZV09ZSxhW2VdPWNzKHQsV3dbbltlXV0pO2Zvcih1LnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4gYVtuXS1hW3RdfSksZT0wO2U8cjsrK2UpYVtlXT1uW3VbZV1dO2ZvcihlPTA7ZTxyOysrZSluW2VdPWFbZV19fWZ1bmN0aW9uIGhzKHQsbixlLHIpe3ZhciBpLG8sdSxhLGMscyxsLGYsaCxwLGQsdixfPVh3Lmxlbmd0aCxnPSEwO2ZvcihpPTA7aTxfOysraSlpZihvPVh3W2ldKXtmb3IodT1vLnNpdGUsYz1vLmhhbGZlZGdlcyxhPWMubGVuZ3RoO2EtLTspV3dbY1thXV18fGMuc3BsaWNlKGEsMSk7Zm9yKGE9MCxzPWMubGVuZ3RoO2E8czspcD1scyhvLFd3W2NbYV1dKSxkPXBbMF0sdj1wWzFdLGw9c3MobyxXd1tjWysrYSVzXV0pLGY9bFswXSxoPWxbMV0sKE1hdGguYWJzKGQtZik+Wnd8fE1hdGguYWJzKHYtaCk+WncpJiYoYy5zcGxpY2UoYSwwLFd3LnB1c2goZXModSxwLE1hdGguYWJzKGQtdCk8WncmJnItdj5adz9bdCxNYXRoLmFicyhmLXQpPFp3P2g6cl06TWF0aC5hYnModi1yKTxadyYmZS1kPlp3P1tNYXRoLmFicyhoLXIpPFp3P2Y6ZSxyXTpNYXRoLmFicyhkLWUpPFp3JiZ2LW4+Wnc/W2UsTWF0aC5hYnMoZi1lKTxadz9oOm5dOk1hdGguYWJzKHYtbik8WncmJmQtdD5adz9bTWF0aC5hYnMoaC1uKTxadz9mOnQsbl06bnVsbCkpLTEpLCsrcyk7cyYmKGc9ITEpfWlmKGcpe3ZhciB5LG0seCxiPTEvMDtmb3IoaT0wLGc9bnVsbDtpPF87KytpKShvPVh3W2ldKSYmKHU9by5zaXRlLHk9dVswXS10LG09dVsxXS1uLHg9eSp5K20qbSx4PGImJihiPXgsZz1vKSk7aWYoZyl7dmFyIHc9W3Qsbl0sTT1bdCxyXSxUPVtlLHJdLGs9W2Usbl07Zy5oYWxmZWRnZXMucHVzaChXdy5wdXNoKGVzKHU9Zy5zaXRlLHcsTSkpLTEsV3cucHVzaChlcyh1LE0sVCkpLTEsV3cucHVzaChlcyh1LFQsaykpLTEsV3cucHVzaChlcyh1LGssdykpLTEpfX1mb3IoaT0wO2k8XzsrK2kpKG89WHdbaV0pJiYoby5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgWHdbaV0pfWZ1bmN0aW9uIHBzKCl7SmModGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIGRzKHQpe3ZhciBuPXQuUCxlPXQuTjtpZihuJiZlKXt2YXIgcj1uLnNpdGUsaT10LnNpdGUsbz1lLnNpdGU7aWYociE9PW8pe3ZhciB1PWlbMF0sYT1pWzFdLGM9clswXS11LHM9clsxXS1hLGw9b1swXS11LGY9b1sxXS1hLGg9MiooYypmLXMqbCk7aWYoIShoPj0tSncpKXt2YXIgcD1jKmMrcypzLGQ9bCpsK2YqZix2PShmKnAtcypkKS9oLF89KGMqZC1sKnApL2gsZz1Hdy5wb3AoKXx8bmV3IHBzO2cuYXJjPXQsZy5zaXRlPWksZy54PXYrdSxnLnk9KGcuY3k9XythKStNYXRoLnNxcnQodip2K18qXyksdC5jaXJjbGU9Zztmb3IodmFyIHk9bnVsbCxtPVZ3Ll87bTspaWYoZy55PG0ueXx8Zy55PT09bS55JiZnLng8PW0ueCl7aWYoIW0uTCl7eT1tLlA7YnJlYWt9bT1tLkx9ZWxzZXtpZighbS5SKXt5PW07YnJlYWt9bT1tLlJ9VncuaW5zZXJ0KHksZykseXx8KEJ3PWcpfX19fWZ1bmN0aW9uIHZzKHQpe3ZhciBuPXQuY2lyY2xlO24mJihuLlB8fChCdz1uLk4pLFZ3LnJlbW92ZShuKSxHdy5wdXNoKG4pLEpjKG4pLHQuY2lyY2xlPW51bGwpfWZ1bmN0aW9uIF9zKCl7SmModGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIGdzKHQpe3ZhciBuPSR3LnBvcCgpfHxuZXcgX3M7cmV0dXJuIG4uc2l0ZT10LG59ZnVuY3Rpb24geXModCl7dnModCksSHcucmVtb3ZlKHQpLCR3LnB1c2godCksSmModCl9ZnVuY3Rpb24gbXModCl7dmFyIG49dC5jaXJjbGUsZT1uLngscj1uLmN5LGk9W2Uscl0sbz10LlAsdT10Lk4sYT1bdF07eXModCk7Zm9yKHZhciBjPW87Yy5jaXJjbGUmJk1hdGguYWJzKGUtYy5jaXJjbGUueCk8WncmJk1hdGguYWJzKHItYy5jaXJjbGUuY3kpPFp3OylvPWMuUCxhLnVuc2hpZnQoYykseXMoYyksYz1vO2EudW5zaGlmdChjKSx2cyhjKTtmb3IodmFyIHM9dTtzLmNpcmNsZSYmTWF0aC5hYnMoZS1zLmNpcmNsZS54KTxadyYmTWF0aC5hYnMoci1zLmNpcmNsZS5jeSk8Wnc7KXU9cy5OLGEucHVzaChzKSx5cyhzKSxzPXU7YS5wdXNoKHMpLHZzKHMpO3ZhciBsLGY9YS5sZW5ndGg7Zm9yKGw9MTtsPGY7KytsKXM9YVtsXSxjPWFbbC0xXSxycyhzLmVkZ2UsYy5zaXRlLHMuc2l0ZSxpKTtjPWFbMF0scz1hW2YtMV0scy5lZGdlPW5zKGMuc2l0ZSxzLnNpdGUsbnVsbCxpKSxkcyhjKSxkcyhzKX1mdW5jdGlvbiB4cyh0KXtmb3IodmFyIG4sZSxyLGksbz10WzBdLHU9dFsxXSxhPUh3Ll87YTspaWYocj1icyhhLHUpLW8scj5adylhPWEuTDtlbHNle2lmKGk9by13cyhhLHUpLCEoaT5adykpe3I+LVp3PyhuPWEuUCxlPWEpOmk+LVp3PyhuPWEsZT1hLk4pOm49ZT1hO2JyZWFrfWlmKCFhLlIpe249YTticmVha31hPWEuUn1hcyh0KTt2YXIgYz1ncyh0KTtpZihIdy5pbnNlcnQobixjKSxufHxlKXtpZihuPT09ZSlyZXR1cm4gdnMobiksZT1ncyhuLnNpdGUpLEh3Lmluc2VydChjLGUpLGMuZWRnZT1lLmVkZ2U9bnMobi5zaXRlLGMuc2l0ZSksZHMobiksdm9pZCBkcyhlKTtpZighZSlyZXR1cm4gdm9pZChjLmVkZ2U9bnMobi5zaXRlLGMuc2l0ZSkpO3ZzKG4pLHZzKGUpO3ZhciBzPW4uc2l0ZSxsPXNbMF0sZj1zWzFdLGg9dFswXS1sLHA9dFsxXS1mLGQ9ZS5zaXRlLHY9ZFswXS1sLF89ZFsxXS1mLGc9MiooaCpfLXAqdikseT1oKmgrcCpwLG09dip2K18qXyx4PVsoXyp5LXAqbSkvZytsLChoKm0tdip5KS9nK2ZdO3JzKGUuZWRnZSxzLGQseCksYy5lZGdlPW5zKHMsdCxudWxsLHgpLGUuZWRnZT1ucyh0LGQsbnVsbCx4KSxkcyhuKSxkcyhlKX19ZnVuY3Rpb24gYnModCxuKXt2YXIgZT10LnNpdGUscj1lWzBdLGk9ZVsxXSxvPWktbjtpZighbylyZXR1cm4gcjt2YXIgdT10LlA7aWYoIXUpcmV0dXJuLSgxLzApO2U9dS5zaXRlO3ZhciBhPWVbMF0sYz1lWzFdLHM9Yy1uO2lmKCFzKXJldHVybiBhO3ZhciBsPWEtcixmPTEvby0xL3MsaD1sL3M7cmV0dXJuIGY/KC1oK01hdGguc3FydChoKmgtMipmKihsKmwvKC0yKnMpLWMrcy8yK2ktby8yKSkpL2YrcjoocithKS8yfWZ1bmN0aW9uIHdzKHQsbil7dmFyIGU9dC5OO2lmKGUpcmV0dXJuIGJzKGUsbik7dmFyIHI9dC5zaXRlO3JldHVybiByWzFdPT09bj9yWzBdOjEvMH1mdW5jdGlvbiBNcyh0LG4sZSl7cmV0dXJuKHRbMF0tZVswXSkqKG5bMV0tdFsxXSktKHRbMF0tblswXSkqKGVbMV0tdFsxXSl9ZnVuY3Rpb24gVHModCxuKXtyZXR1cm4gblsxXS10WzFdfHxuWzBdLXRbMF19ZnVuY3Rpb24ga3ModCxuKXt2YXIgZSxyLGksbz10LnNvcnQoVHMpLnBvcCgpO2ZvcihXdz1bXSxYdz1uZXcgQXJyYXkodC5sZW5ndGgpLEh3PW5ldyBaYyxWdz1uZXcgWmM7OylpZihpPUJ3LG8mJighaXx8b1sxXTxpLnl8fG9bMV09PT1pLnkmJm9bMF08aS54KSlvWzBdPT09ZSYmb1sxXT09PXJ8fCh4cyhvKSxlPW9bMF0scj1vWzFdKSxvPXQucG9wKCk7ZWxzZXtpZighaSlicmVhazttcyhpLmFyYyl9aWYoZnMoKSxuKXt2YXIgdT0rblswXVswXSxhPStuWzBdWzFdLGM9K25bMV1bMF0scz0rblsxXVsxXTt1cyh1LGEsYyxzKSxocyh1LGEsYyxzKX10aGlzLmVkZ2VzPVd3LHRoaXMuY2VsbHM9WHcsSHc9Vnc9V3c9WHc9bnVsbH1mdW5jdGlvbiBTcyh0LG4sZSl7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9bix0aGlzLnRyYW5zZm9ybT1lfWZ1bmN0aW9uIEFzKHQsbixlKXt0aGlzLms9dCx0aGlzLng9bix0aGlzLnk9ZX1mdW5jdGlvbiBOcyh0KXtyZXR1cm4gdC5fX3pvb218fHRNfWZ1bmN0aW9uIEVzKCl7dC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBDcygpe3JldHVybiF0LmV2ZW50LmJ1dHRvbn1mdW5jdGlvbiBQcygpe3ZhciB0LG4sZT10aGlzO3JldHVybiBlIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oZT1lLm93bmVyU1ZHRWxlbWVudHx8ZSx0PWUud2lkdGguYmFzZVZhbC52YWx1ZSxuPWUuaGVpZ2h0LmJhc2VWYWwudmFsdWUpOih0PWUuY2xpZW50V2lkdGgsbj1lLmNsaWVudEhlaWdodCksW1swLDBdLFt0LG5dXX1mdW5jdGlvbiB6cygpe3JldHVybiB0aGlzLl9fem9vbXx8dE19dmFyIFJzPSI0LjcuMyIsT3M9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdDxuPy0xOnQ+bj8xOnQ+PW4/MDpOYU59LExzPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5sZW5ndGgmJih0PW4odCkpLHtsZWZ0OmZ1bmN0aW9uKG4sZSxyLGkpe2ZvcihudWxsPT1yJiYocj0wKSxudWxsPT1pJiYoaT1uLmxlbmd0aCk7cjxpOyl7dmFyIG89citpPj4+MTt0KG5bb10sZSk8MD9yPW8rMTppPW99cmV0dXJuIHJ9LHJpZ2h0OmZ1bmN0aW9uKG4sZSxyLGkpe2ZvcihudWxsPT1yJiYocj0wKSxudWxsPT1pJiYoaT1uLmxlbmd0aCk7cjxpOyl7dmFyIG89citpPj4+MTt0KG5bb10sZSk+MD9pPW86cj1vKzF9cmV0dXJuIHJ9fX0scXM9THMoT3MpLERzPXFzLnJpZ2h0LFVzPXFzLmxlZnQsRnM9ZnVuY3Rpb24odCxuKXtudWxsPT1uJiYobj1lKTtmb3IodmFyIHI9MCxpPXQubGVuZ3RoLTEsbz10WzBdLHU9bmV3IEFycmF5KGk8MD8wOmkpO3I8aTspdVtyXT1uKG8sbz10Wysrcl0pO3JldHVybiB1fSxJcz1mdW5jdGlvbih0LG4scil7dmFyIGksbyx1LGEsYz10Lmxlbmd0aCxzPW4ubGVuZ3RoLGw9bmV3IEFycmF5KGMqcyk7Zm9yKG51bGw9PXImJihyPWUpLGk9dT0wO2k8YzsrK2kpZm9yKGE9dFtpXSxvPTA7bzxzOysrbywrK3UpbFt1XT1yKGEsbltvXSk7cmV0dXJuIGx9LGpzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfSxZcz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09PXQ/TmFOOit0fSxCcz1mdW5jdGlvbih0LG4pe3ZhciBlLHIsaT10Lmxlbmd0aCxvPTAsdT0wLGE9LTEsYz0wO2lmKG51bGw9PW4pZm9yKDsrK2E8aTspaXNOYU4oZT1Zcyh0W2FdKSl8fChyPWUtbyxvKz1yLysrYyx1Kz1yKihlLW8pKTtlbHNlIGZvcig7KythPGk7KWlzTmFOKGU9WXMobih0W2FdLGEsdCkpKXx8KHI9ZS1vLG8rPXIvKytjLHUrPXIqKGUtbykpO2lmKGM+MSlyZXR1cm4gdS8oYy0xKX0sSHM9ZnVuY3Rpb24odCxuKXt2YXIgZT1Ccyh0LG4pO3JldHVybiBlP01hdGguc3FydChlKTplfSxYcz1mdW5jdGlvbih0LG4pe3ZhciBlLHIsaSxvPS0xLHU9dC5sZW5ndGg7aWYobnVsbD09bil7Zm9yKDsrK288dTspaWYobnVsbCE9KHI9dFtvXSkmJnI+PXIpe2U9aT1yO2JyZWFrfWZvcig7KytvPHU7KW51bGwhPShyPXRbb10pJiYoZT5yJiYoZT1yKSxpPHImJihpPXIpKX1lbHNle2Zvcig7KytvPHU7KWlmKG51bGwhPShyPW4odFtvXSxvLHQpKSYmcj49cil7ZT1pPXI7YnJlYWt9Zm9yKDsrK288dTspbnVsbCE9KHI9bih0W29dLG8sdCkpJiYoZT5yJiYoZT1yKSxpPHImJihpPXIpKX1yZXR1cm5bZSxpXX0sVnM9QXJyYXkucHJvdG90eXBlLFdzPVZzLnNsaWNlLEdzPVZzLm1hcCwkcz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LFpzPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxKcz1mdW5jdGlvbih0LG4sZSl7dD0rdCxuPStuLGU9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8obj10LHQ9MCwxKTppPDM/MTorZTtmb3IodmFyIHI9LTEsaT0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKChuLXQpL2UpKSxvPW5ldyBBcnJheShpKTsrK3I8aTspb1tyXT10K3IqZTtyZXR1cm4gb30sUXM9TWF0aC5zcXJ0KDUwKSxLcz1NYXRoLnNxcnQoMTApLHRsPU1hdGguc3FydCgyKSxubD1mdW5jdGlvbih0LG4sZSl7dmFyIGk9cih0LG4sZSk7cmV0dXJuIEpzKE1hdGguY2VpbCh0L2kpKmksTWF0aC5mbG9vcihuL2kpKmkraS8yLGkpfSxlbD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHQubGVuZ3RoKS9NYXRoLkxOMikrMX0scmw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBpLG8sdT10Lmxlbmd0aCxhPW5ldyBBcnJheSh1KTtmb3IoaT0wO2k8dTsrK2kpYVtpXT1uKHRbaV0saSx0KTt2YXIgYz1lKGEpLHM9Y1swXSxsPWNbMV0sZj1yKGEscyxsKTtBcnJheS5pc0FycmF5KGYpfHwoZj1ubChzLGwsZikpO2Zvcih2YXIgaD1mLmxlbmd0aDtmWzBdPD1zOylmLnNoaWZ0KCksLS1oO2Zvcig7ZltoLTFdPj1sOylmLnBvcCgpLC0taDt2YXIgcCxkPW5ldyBBcnJheShoKzEpO2ZvcihpPTA7aTw9aDsrK2kpcD1kW2ldPVtdLHAueDA9aT4wP2ZbaS0xXTpzLHAueDE9aTxoP2ZbaV06bDtmb3IoaT0wO2k8dTsrK2kpbz1hW2ldLHM8PW8mJm88PWwmJmRbRHMoZixvLDAsaCldLnB1c2godFtpXSk7cmV0dXJuIGR9dmFyIG49WnMsZT1YcyxyPWVsO3JldHVybiB0LnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6JHMoZSksdCk6bn0sdC5kb21haW49ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjokcyhbblswXSxuWzFdXSksdCk6ZX0sdC50aHJlc2hvbGRzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246JHMoQXJyYXkuaXNBcnJheShuKT9Xcy5jYWxsKG4pOm4pLHQpOnJ9LHR9LGlsPWZ1bmN0aW9uKHQsbixlKXtpZihudWxsPT1lJiYoZT1Zcykscj10Lmxlbmd0aCl7aWYoKG49K24pPD0wfHxyPDIpcmV0dXJuK2UodFswXSwwLHQpO2lmKG4+PTEpcmV0dXJuK2UodFtyLTFdLHItMSx0KTt2YXIgcixpPShyLTEpKm4sbz1NYXRoLmZsb29yKGkpLHU9K2UodFtvXSxvLHQpLGE9K2UodFtvKzFdLG8rMSx0KTtyZXR1cm4gdSsoYS11KSooaS1vKX19LG9sPWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gdD1Hcy5jYWxsKHQsWXMpLnNvcnQoT3MpLE1hdGguY2VpbCgoZS1uKS8oMiooaWwodCwuNzUpLWlsKHQsLjI1KSkqTWF0aC5wb3codC5sZW5ndGgsLTEvMykpKX0sdWw9ZnVuY3Rpb24odCxuLGUpe3JldHVybiBNYXRoLmNlaWwoKGUtbikvKDMuNSpIcyh0KSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSxhbD1mdW5jdGlvbih0LG4pe3ZhciBlLHIsaT0tMSxvPXQubGVuZ3RoO2lmKG51bGw9PW4pe2Zvcig7KytpPG87KWlmKG51bGwhPShyPXRbaV0pJiZyPj1yKXtlPXI7YnJlYWt9Zm9yKDsrK2k8bzspbnVsbCE9KHI9dFtpXSkmJnI+ZSYmKGU9cil9ZWxzZXtmb3IoOysraTxvOylpZihudWxsIT0ocj1uKHRbaV0saSx0KSkmJnI+PXIpe2U9cjticmVha31mb3IoOysraTxvOyludWxsIT0ocj1uKHRbaV0saSx0KSkmJnI+ZSYmKGU9cil9cmV0dXJuIGV9LGNsPWZ1bmN0aW9uKHQsbil7dmFyIGUscj0wLGk9dC5sZW5ndGgsbz0tMSx1PWk7aWYobnVsbD09bilmb3IoOysrbzxpOylpc05hTihlPVlzKHRbb10pKT8tLXU6cis9ZTtlbHNlIGZvcig7KytvPGk7KWlzTmFOKGU9WXMobih0W29dLG8sdCkpKT8tLXU6cis9ZTtpZih1KXJldHVybiByL3V9LHNsPWZ1bmN0aW9uKHQsbil7dmFyIGUscj1bXSxpPXQubGVuZ3RoLG89LTE7aWYobnVsbD09bilmb3IoOysrbzxpOylpc05hTihlPVlzKHRbb10pKXx8ci5wdXNoKGUpO2Vsc2UgZm9yKDsrK288aTspaXNOYU4oZT1ZcyhuKHRbb10sbyx0KSkpfHxyLnB1c2goZSk7cmV0dXJuIGlsKHIuc29ydChPcyksLjUpfSxsbD1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyLGk9dC5sZW5ndGgsbz0tMSx1PTA7KytvPGk7KXUrPXRbb10ubGVuZ3RoO2ZvcihlPW5ldyBBcnJheSh1KTstLWk+PTA7KWZvcihyPXRbaV0sbj1yLmxlbmd0aDstLW4+PTA7KWVbLS11XT1yW25dO3JldHVybiBlfSxmbD1mdW5jdGlvbih0LG4pe3ZhciBlLHIsaT0tMSxvPXQubGVuZ3RoO2lmKG51bGw9PW4pe2Zvcig7KytpPG87KWlmKG51bGwhPShyPXRbaV0pJiZyPj1yKXtlPXI7YnJlYWt9Zm9yKDsrK2k8bzspbnVsbCE9KHI9dFtpXSkmJmU+ciYmKGU9cil9ZWxzZXtmb3IoOysraTxvOylpZihudWxsIT0ocj1uKHRbaV0saSx0KSkmJnI+PXIpe2U9cjticmVha31mb3IoOysraTxvOyludWxsIT0ocj1uKHRbaV0saSx0KSkmJmU+ciYmKGU9cil9cmV0dXJuIGV9LGhsPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpO2UtLTspcltlXT10W25bZV1dO3JldHVybiByfSxwbD1mdW5jdGlvbih0LG4pe2lmKGU9dC5sZW5ndGgpe3ZhciBlLHIsaT0wLG89MCx1PXRbb107Zm9yKG58fChuPU9zKTsrK2k8ZTspKG4ocj10W2ldLHUpPDB8fDAhPT1uKHUsdSkpJiYodT1yLG89aSk7cmV0dXJuIDA9PT1uKHUsdSk/bzp2b2lkIDB9fSxkbD1mdW5jdGlvbih0LG4sZSl7Zm9yKHZhciByLGksbz0obnVsbD09ZT90Lmxlbmd0aDplKS0obj1udWxsPT1uPzA6K24pO287KWk9TWF0aC5yYW5kb20oKSpvLS18MCxyPXRbbytuXSx0W28rbl09dFtpK25dLHRbaStuXT1yO3JldHVybiB0fSx2bD1mdW5jdGlvbih0LG4pe3ZhciBlLHI9MCxpPXQubGVuZ3RoLG89LTE7aWYobnVsbD09bilmb3IoOysrbzxpOykoZT0rdFtvXSkmJihyKz1lKTtlbHNlIGZvcig7KytvPGk7KShlPStuKHRbb10sbyx0KSkmJihyKz1lKTtyZXR1cm4gcn0sX2w9ZnVuY3Rpb24odCl7aWYoIShvPXQubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIG49LTEsZT1mbCh0LGkpLHI9bmV3IEFycmF5KGUpOysrbjxlOylmb3IodmFyIG8sdT0tMSxhPXJbbl09bmV3IEFycmF5KG8pOysrdTxvOylhW3VdPXRbdV1bbl07cmV0dXJuIHJ9LGdsPWZ1bmN0aW9uKCl7cmV0dXJuIF9sKGFyZ3VtZW50cyl9LHlsPUFycmF5LnByb3RvdHlwZS5zbGljZSxtbD1mdW5jdGlvbih0KXtyZXR1cm4gdH0seGw9MSxibD0yLHdsPTMsTWw9NCxUbD0xZS02LGtsPXt2YWx1ZTpmdW5jdGlvbigpe319O3YucHJvdG90eXBlPWQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp2LG9uOmZ1bmN0aW9uKHQsbil7dmFyIGUscj10aGlzLl8saT1fKHQrIiIsciksbz0tMSx1PWkubGVuZ3RoO3tpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPW4mJiJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIituKTtmb3IoOysrbzx1OylpZihlPSh0PWlbb10pLnR5cGUpcltlXT15KHJbZV0sdC5uYW1lLG4pO2Vsc2UgaWYobnVsbD09bilmb3IoZSBpbiByKXJbZV09eShyW2VdLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbzx1OylpZigoZT0odD1pW29dKS50eXBlKSYmKGU9ZyhyW2VdLHQubmFtZSkpKXJldHVybiBlfX0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LG49dGhpcy5fO2Zvcih2YXIgZSBpbiBuKXRbZV09bltlXS5zbGljZSgpO3JldHVybiBuZXcgdih0KX0sY2FsbDpmdW5jdGlvbih0LG4pe2lmKChlPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIGUscixpPW5ldyBBcnJheShlKSxvPTA7bzxlOysrbylpW29dPWFyZ3VtZW50c1tvKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHI9dGhpcy5fW3RdLG89MCxlPXIubGVuZ3RoO288ZTsrK28pcltvXS52YWx1ZS5hcHBseShuLGkpfSxhcHBseTpmdW5jdGlvbih0LG4sZSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIHI9dGhpcy5fW3RdLGk9MCxvPXIubGVuZ3RoO2k8bzsrK2kpcltpXS52YWx1ZS5hcHBseShuLGUpfX07dmFyIFNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixBbD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6U2wseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSxObD1mdW5jdGlvbih0KXt2YXIgbj10Kz0iIixlPW4uaW5kZXhPZigiOiIpO3JldHVybiBlPj0wJiYieG1sbnMiIT09KG49dC5zbGljZSgwLGUpKSYmKHQ9dC5zbGljZShlKzEpKSxBbC5oYXNPd25Qcm9wZXJ0eShuKT97c3BhY2U6QWxbbl0sbG9jYWw6dH06dH0sRWw9ZnVuY3Rpb24odCl7dmFyIG49TmwodCk7cmV0dXJuKG4ubG9jYWw/eDptKShuKX0sQ2w9MDt3LnByb3RvdHlwZT1iLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dyxnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMuXzshKG4gaW4gdCk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdFtuXX0sc2V0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbdGhpcy5fXT1ufSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuXyBpbiB0JiZkZWxldGUgdFt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgUGw9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19O2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpe3ZhciB6bD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7aWYoIXpsLm1hdGNoZXMpe3ZhciBSbD16bC53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fHpsLm1zTWF0Y2hlc1NlbGVjdG9yfHx6bC5tb3pNYXRjaGVzU2VsZWN0b3J8fHpsLm9NYXRjaGVzU2VsZWN0b3I7UGw9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFJsLmNhbGwodGhpcyx0KX19fX12YXIgT2w9UGwsTGw9e307aWYodC5ldmVudD1udWxsLCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQpe3ZhciBxbD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7Im9ubW91c2VlbnRlciJpbiBxbHx8KExsPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pfXZhciBEbD1mdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvPWsodCsiIiksdT1vLmxlbmd0aDt7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoYT1uP0E6UyxudWxsPT1lJiYoZT0hMSkscj0wO3I8dTsrK3IpdGhpcy5lYWNoKGEob1tyXSxuLGUpKTtyZXR1cm4gdGhpc312YXIgYT10aGlzLm5vZGUoKS5fX29uO2lmKGEpZm9yKHZhciBjLHM9MCxsPWEubGVuZ3RoO3M8bDsrK3MpZm9yKHI9MCxjPWFbc107cjx1OysrcilpZigoaT1vW3JdKS50eXBlPT09Yy50eXBlJiZpLm5hbWU9PT1jLm5hbWUpcmV0dXJuIGMudmFsdWV9fSxVbD1mdW5jdGlvbigpe2Zvcih2YXIgbixlPXQuZXZlbnQ7bj1lLnNvdXJjZUV2ZW50OyllPW47cmV0dXJuIGV9LEZsPWZ1bmN0aW9uKHQsbil7dmFyIGU9dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYoZS5jcmVhdGVTVkdQb2ludCl7dmFyIHI9ZS5jcmVhdGVTVkdQb2ludCgpO3JldHVybiByLng9bi5jbGllbnRYLHIueT1uLmNsaWVudFkscj1yLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW3IueCxyLnldfXZhciBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW24uY2xpZW50WC1pLmxlZnQtdC5jbGllbnRMZWZ0LG4uY2xpZW50WS1pLnRvcC10LmNsaWVudFRvcF19LElsPWZ1bmN0aW9uKHQpe3ZhciBuPVVsKCk7cmV0dXJuIG4uY2hhbmdlZFRvdWNoZXMmJihuPW4uY2hhbmdlZFRvdWNoZXNbMF0pLEZsKHQsbil9LGpsPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P0U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX0sWWw9ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWpsKHQpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9bi5sZW5ndGgscj1uZXcgQXJyYXkoZSksaT0wO2k8ZTsrK2kpZm9yKHZhciBvLHUsYT1uW2ldLGM9YS5sZW5ndGgscz1yW2ldPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkobz1hW2xdKSYmKHU9dC5jYWxsKG8sby5fX2RhdGFfXyxsLGEpKSYmKCJfX2RhdGFfXyJpbiBvJiYodS5fX2RhdGFfXz1vLl9fZGF0YV9fKSxzW2xdPXUpO3JldHVybiBuZXcgZHQocix0aGlzLl9wYXJlbnRzKX0sQmw9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/QzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxIbD1mdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9QmwodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT1uLmxlbmd0aCxyPVtdLGk9W10sbz0wO288ZTsrK28pZm9yKHZhciB1LGE9bltvXSxjPWEubGVuZ3RoLHM9MDtzPGM7KytzKSh1PWFbc10pJiYoci5wdXNoKHQuY2FsbCh1LHUuX19kYXRhX18scyxhKSksaS5wdXNoKHUpKTtyZXR1cm4gbmV3IGR0KHIsaSl9LFhsPWZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1PbCh0KSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPW4ubGVuZ3RoLHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKWZvcih2YXIgbyx1PW5baV0sYT11Lmxlbmd0aCxjPXJbaV09W10scz0wO3M8YTsrK3MpKG89dVtzXSkmJnQuY2FsbChvLG8uX19kYXRhX18scyx1KSYmYy5wdXNoKG8pO3JldHVybiBuZXcgZHQocix0aGlzLl9wYXJlbnRzKX0sVmw9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9LFdsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkdCh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChWbCksdGhpcy5fcGFyZW50cyl9O1AucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsbil9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O3ZhciBHbD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LCRsPSIkIixabD1mdW5jdGlvbih0LG4pe2lmKCF0KXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSkscz0tMSx0aGlzLmVhY2goZnVuY3Rpb24odCl7cFsrK3NdPXR9KSxwO3ZhciBlPW4/Ujp6LHI9dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9R2wodCkpO2Zvcih2YXIgbz1pLmxlbmd0aCx1PW5ldyBBcnJheShvKSxhPW5ldyBBcnJheShvKSxjPW5ldyBBcnJheShvKSxzPTA7czxvOysrcyl7dmFyIGw9cltzXSxmPWlbc10saD1mLmxlbmd0aCxwPXQuY2FsbChsLGwmJmwuX19kYXRhX18scyxyKSxkPXAubGVuZ3RoLHY9YVtzXT1uZXcgQXJyYXkoZCksXz11W3NdPW5ldyBBcnJheShkKSxnPWNbc109bmV3IEFycmF5KGgpO2UobCxmLHYsXyxnLHAsbik7Zm9yKHZhciB5LG0seD0wLGI9MDt4PGQ7Kyt4KWlmKHk9dlt4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShtPV9bYl0pJiYrK2I8ZDspO3kuX25leHQ9bXx8bnVsbH19cmV0dXJuIHU9bmV3IGR0KHUsciksdS5fZW50ZXI9YSx1Ll9leGl0PWMsdX0sSmw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR0KHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoVmwpLHRoaXMuX3BhcmVudHMpfSxRbD1mdW5jdGlvbih0KXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9dC5fZ3JvdXBzLHI9bi5sZW5ndGgsaT1lLmxlbmd0aCxvPU1hdGgubWluKHIsaSksdT1uZXcgQXJyYXkociksYT0wO2E8bzsrK2EpZm9yKHZhciBjLHM9blthXSxsPWVbYV0sZj1zLmxlbmd0aCxoPXVbYV09bmV3IEFycmF5KGYpLHA9MDtwPGY7KytwKShjPXNbcF18fGxbcF0pJiYoaFtwXT1jKTtmb3IoO2E8cjsrK2EpdVthXT1uW2FdO3JldHVybiBuZXcgZHQodSx0aGlzLl9wYXJlbnRzKX0sS2w9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLG49LTEsZT10Lmxlbmd0aDsrK248ZTspZm9yKHZhciByLGk9dFtuXSxvPWkubGVuZ3RoLTEsdT1pW29dOy0tbz49MDspKHI9aVtvXSkmJih1JiZ1IT09ci5uZXh0U2libGluZyYmdS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLHUpLHU9cik7cmV0dXJuIHRoaXN9LHRmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4obixlKXtyZXR1cm4gbiYmZT90KG4uX19kYXRhX18sZS5fX2RhdGFfXyk6IW4tIWV9dHx8KHQ9Tyk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxyPWUubGVuZ3RoLGk9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKXtmb3IodmFyIHUsYT1lW29dLGM9YS5sZW5ndGgscz1pW29dPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkodT1hW2xdKSYmKHNbbF09dSk7cy5zb3J0KG4pfXJldHVybiBuZXcgZHQoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxuZj1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsdC5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc30sZWY9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLG49LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RbKytuXT10aGlzfSksdH0scmY9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLG49MCxlPXQubGVuZ3RoO248ZTsrK24pZm9yKHZhciByPXRbbl0saT0wLG89ci5sZW5ndGg7aTxvOysraSl7dmFyIHU9cltpXTtpZih1KXJldHVybiB1fXJldHVybiBudWxsfSxvZj1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrdH0pLHR9LHVmPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxhZj1mdW5jdGlvbih0KXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGU9MCxyPW4ubGVuZ3RoO2U8cjsrK2UpZm9yKHZhciBpLG89bltlXSx1PTAsYT1vLmxlbmd0aDt1PGE7Kyt1KShpPW9bdV0pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLHUsbyk7cmV0dXJuIHRoaXN9LGNmPWZ1bmN0aW9uKHQsbil7dmFyIGU9TmwodCk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcj10aGlzLm5vZGUoKTtyZXR1cm4gZS5sb2NhbD9yLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6ci5nZXRBdHRyaWJ1dGUoZSl9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bj9lLmxvY2FsP3E6TDoiZnVuY3Rpb24iPT10eXBlb2Ygbj9lLmxvY2FsP0k6RjplLmxvY2FsP1U6RCkoZSxuKSl9LHNmPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld30sbGY9ZnVuY3Rpb24odCxuLGUpe3ZhciByO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1uP2o6ImZ1bmN0aW9uIj09dHlwZW9mIG4/QjpZKSh0LG4sbnVsbD09ZT8iIjplKSk6c2Yocj10aGlzLm5vZGUoKSkuZ2V0Q29tcHV0ZWRTdHlsZShyLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9LGZmPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PW4/SDoiZnVuY3Rpb24iPT10eXBlb2Ygbj9WOlgpKHQsbikpOnRoaXMubm9kZSgpW3RdfTskLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX25hbWVzLmluZGV4T2YodCk7bjwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtuPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKG4sMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTt2YXIgaGY9ZnVuY3Rpb24odCxuKXt2YXIgZT1XKHQrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByPUcodGhpcy5ub2RlKCkpLGk9LTEsbz1lLmxlbmd0aDsrK2k8bzspaWYoIXIuY29udGFpbnMoZVtpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/dHQ6bj9ROkspKGUsbikpfSxwZj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9udDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/cnQ6ZXQpKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0sZGY9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/aXQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3V0Om90KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSx2Zj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goYXQpfSxfZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goY3QpfSxnZj1mdW5jdGlvbih0KXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkVsKHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSx5Zj1mdW5jdGlvbih0LG4pe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6RWwodCkscj1udWxsPT1uP3N0OiJmdW5jdGlvbiI9PXR5cGVvZiBuP246amwobik7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxtZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2gobHQpfSx4Zj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LGJmPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/cHQ6aHQpKHQsbikpfSx3Zj1bbnVsbF07ZHQucHJvdG90eXBlPXZ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZHQsc2VsZWN0OllsLHNlbGVjdEFsbDpIbCxmaWx0ZXI6WGwsZGF0YTpabCxlbnRlcjpXbCxleGl0OkpsLG1lcmdlOlFsLG9yZGVyOktsLHNvcnQ6dGYsY2FsbDpuZixub2RlczplZixub2RlOnJmLHNpemU6b2YsZW1wdHk6dWYsZWFjaDphZixhdHRyOmNmLHN0eWxlOmxmLHByb3BlcnR5OmZmLGNsYXNzZWQ6aGYsdGV4dDpwZixodG1sOmRmLHJhaXNlOnZmLGxvd2VyOl9mLGFwcGVuZDpnZixpbnNlcnQ6eWYscmVtb3ZlOm1mLGRhdHVtOnhmLG9uOkRsLGRpc3BhdGNoOmJmfTt2YXIgTWY9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBkdChbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGR0KFtbdF1dLHdmKX0sVGY9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBkdChbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBkdChbbnVsbD09dD9bXTp0XSx3Zil9LGtmPWZ1bmN0aW9uKHQsbixlKXthcmd1bWVudHMubGVuZ3RoPDMmJihlPW4sbj1VbCgpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIHIsaT0wLG89bj9uLmxlbmd0aDowO2k8bzsrK2kpaWYoKHI9bltpXSkuaWRlbnRpZmllcj09PWUpcmV0dXJuIEZsKHQscik7cmV0dXJuIG51bGx9LFNmPWZ1bmN0aW9uKHQsbil7bnVsbD09biYmKG49VWwoKS50b3VjaGVzKTtmb3IodmFyIGU9MCxyPW4/bi5sZW5ndGg6MCxpPW5ldyBBcnJheShyKTtlPHI7KytlKWlbZV09RmwodCxuW2VdKTtyZXR1cm4gaX0sQWY9ZnVuY3Rpb24oKXt0LmV2ZW50LnByZXZlbnREZWZhdWx0KCksdC5ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0sTmY9ZnVuY3Rpb24odCl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT1NZih0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLEFmLCEwKTsib25zZWxlY3RzdGFydCJpbiBuP2Uub24oInNlbGVjdHN0YXJ0LmRyYWciLEFmLCEwKToobi5fX25vc2VsZWN0PW4uc3R5bGUuTW96VXNlclNlbGVjdCxuLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX0sRWY9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTt5dC5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT10aGlzLl8/dGhpczp0fTt2YXIgQ2Y9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQpe3Qub24oIm1vdXNlZG93bi5kcmFnIixlKS5vbigidG91Y2hzdGFydC5kcmFnIixvKS5vbigidG91Y2htb3ZlLmRyYWciLHUpLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLGEpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gZSgpe2lmKCFsJiZmLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG49YygibW91c2UiLGguYXBwbHkodGhpcyxhcmd1bWVudHMpLElsLHRoaXMsYXJndW1lbnRzKTtuJiYoTWYodC5ldmVudC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLHIsITApLm9uKCJtb3VzZXVwLmRyYWciLGksITApLE5mKHQuZXZlbnQudmlldyksX3QoKSxzPSExLG4oInN0YXJ0IikpfX1mdW5jdGlvbiByKCl7QWYoKSxzPSEwLHYubW91c2UoImRyYWciKX1mdW5jdGlvbiBpKCl7TWYodC5ldmVudC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSxndCh0LmV2ZW50LnZpZXcscyksQWYoKSwKdi5tb3VzZSgiZW5kIil9ZnVuY3Rpb24gbygpe2lmKGYuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbixlLHI9dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxpPWguYXBwbHkodGhpcyxhcmd1bWVudHMpLG89ci5sZW5ndGg7Zm9yKG49MDtuPG87KytuKShlPWMocltuXS5pZGVudGlmaWVyLGksa2YsdGhpcyxhcmd1bWVudHMpKSYmKF90KCksZSgic3RhcnQiKSl9fWZ1bmN0aW9uIHUoKXt2YXIgbixlLHI9dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxpPXIubGVuZ3RoO2ZvcihuPTA7bjxpOysrbikoZT12W3Jbbl0uaWRlbnRpZmllcl0pJiYoQWYoKSxlKCJkcmFnIikpfWZ1bmN0aW9uIGEoKXt2YXIgbixlLHI9dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxpPXIubGVuZ3RoO2ZvcihsJiZjbGVhclRpbWVvdXQobCksbD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bD1udWxsfSw1MDApLG49MDtuPGk7KytuKShlPXZbcltuXS5pZGVudGlmaWVyXSkmJihfdCgpLGUoImVuZCIpKX1mdW5jdGlvbiBjKGUscixpLG8sdSl7dmFyIGEsYyxzLGw9aShyLGUpLGY9Xy5jb3B5KCk7aWYoTihuZXcgeXQobiwiYmVmb3Jlc3RhcnQiLGEsZSxnLGxbMF0sbFsxXSwwLDAsZiksZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9KHQuZXZlbnQuc3ViamVjdD1hPXAuYXBwbHkobyx1KSkmJihjPWEueC1sWzBdfHwwLHM9YS55LWxbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIHQoaCl7dmFyIHAsZD1sO3N3aXRjaChoKXtjYXNlInN0YXJ0Ijp2W2VdPXQscD1nKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSB2W2VdLC0tZztjYXNlImRyYWciOmw9aShyLGUpLHA9Z31OKG5ldyB5dChuLGgsYSxlLHAsbFswXStjLGxbMV0rcyxsWzBdLWRbMF0sbFsxXS1kWzFdLGYpLGYuYXBwbHksZixbaCxvLHVdKX19dmFyIHMsbCxmPW10LGg9eHQscD1idCx2PXt9LF89ZCgic3RhcnQiLCJkcmFnIiwiZW5kIiksZz0wO3JldHVybiBuLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkVmKCEhdCksbik6Zn0sbi5jb250YWluZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpFZih0KSxuKTpofSxuLnN1YmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpFZih0KSxuKTpwfSxuLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9Xy5vbi5hcHBseShfLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1fP246dH0sbn0sUGY9ZnVuY3Rpb24odCxuLGUpe3QucHJvdG90eXBlPW4ucHJvdG90eXBlPWUsZS5jb25zdHJ1Y3Rvcj10fSx6Zj0uNyxSZj0xL3pmLE9mPSJcXHMqKFsrLV0/XFxkKylcXHMqIixMZj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixxZj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsRGY9L14jKFswLTlhLWZdezN9KSQvLFVmPS9eIyhbMC05YS1mXXs2fSkkLyxGZj1uZXcgUmVnRXhwKCJecmdiXFwoIitbT2YsT2YsT2ZdKyJcXCkkIiksSWY9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3FmLHFmLHFmXSsiXFwpJCIpLGpmPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbT2YsT2YsT2YsTGZdKyJcXCkkIiksWWY9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1txZixxZixxZixMZl0rIlxcKSQiKSxCZj1uZXcgUmVnRXhwKCJeaHNsXFwoIitbTGYscWYscWZdKyJcXCkkIiksSGY9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tMZixxZixxZixMZl0rIlxcKSQiKSxYZj17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtQZihNdCxUdCx7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pLFBmKEV0LE50LHd0KE10LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10P1JmOk1hdGgucG93KFJmLHQpLG5ldyBFdCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD96ZjpNYXRoLnBvdyh6Zix0KSxuZXcgRXQodGhpcy5yKnQsdGhpcy5nKnQsdGhpcy5iKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3BhY2l0eTtyZXR1cm4gdD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksKDE9PT10PyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT10PyIpIjoiLCAiK3QrIikiKX19KSksUGYoUnQsenQsd3QoTXQse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/UmY6TWF0aC5wb3coUmYsdCksbmV3IFJ0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/emY6TWF0aC5wb3coemYsdCksbmV3IFJ0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxuPWlzTmFOKHQpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGU9dGhpcy5sLHI9ZSsoZTwuNT9lOjEtZSkqbixpPTIqZS1yO3JldHVybiBuZXcgRXQoT3QodD49MjQwP3QtMjQwOnQrMTIwLGksciksT3QodCxpLHIpLE90KHQ8MTIwP3QrMjQwOnQtMTIwLGksciksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpO3ZhciBWZj1NYXRoLlBJLzE4MCxXZj0xODAvTWF0aC5QSSxHZj0xOCwkZj0uOTUwNDcsWmY9MSxKZj0xLjA4ODgzLFFmPTQvMjksS2Y9Ni8yOSx0aD0zKktmKktmLG5oPUtmKktmKktmO1BmKER0LHF0LHd0KE10LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IER0KHRoaXMubCtHZioobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRHQodGhpcy5sLUdmKihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsbj1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLGU9aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gdD1aZipGdCh0KSxuPSRmKkZ0KG4pLGU9SmYqRnQoZSksbmV3IEV0KEl0KDMuMjQwNDU0MipuLTEuNTM3MTM4NSp0LS40OTg1MzE0KmUpLEl0KC0uOTY5MjY2Km4rMS44NzYwMTA4KnQrLjA0MTU1NiplKSxJdCguMDU1NjQzNCpuLS4yMDQwMjU5KnQrMS4wNTcyMjUyKmUpLHRoaXMub3BhY2l0eSl9fSkpLFBmKEh0LEJ0LHd0KE10LHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IEh0KHRoaXMuaCx0aGlzLmMsdGhpcy5sK0dmKihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSHQodGhpcy5oLHRoaXMuYyx0aGlzLmwtR2YqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gTHQodGhpcykucmdiKCl9fSkpO3ZhciBlaD0tLjE0ODYxLHJoPTEuNzgyNzcsaWg9LS4yOTIyNyxvaD0tLjkwNjQ5LHVoPTEuOTcyOTQsYWg9dWgqb2gsY2g9dWgqcmgsc2g9cmgqaWgtb2gqZWg7UGYoV3QsVnQsd3QoTXQse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/UmY6TWF0aC5wb3coUmYsdCksbmV3IFd0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/emY6TWF0aC5wb3coemYsdCksbmV3IFd0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpWZixuPSt0aGlzLmwsZT1pc05hTih0aGlzLnMpPzA6dGhpcy5zKm4qKDEtbikscj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiBuZXcgRXQoMjU1KihuK2UqKGVoKnIrcmgqaSkpLDI1NSoobitlKihpaCpyK29oKmkpKSwyNTUqKG4rZSoodWgqcikpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciBsaCxmaCxoaCxwaCxkaCx2aCxfaD1mdW5jdGlvbih0KXt2YXIgbj10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1lPD0wP2U9MDplPj0xPyhlPTEsbi0xKTpNYXRoLmZsb29yKGUqbiksaT10W3JdLG89dFtyKzFdLHU9cj4wP3Rbci0xXToyKmktbyxhPXI8bi0xP3RbcisyXToyKm8taTtyZXR1cm4gR3QoKGUtci9uKSpuLHUsaSxvLGEpfX0sZ2g9ZnVuY3Rpb24odCl7dmFyIG49dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPU1hdGguZmxvb3IoKChlJT0xKTwwPysrZTplKSpuKSxpPXRbKHIrbi0xKSVuXSxvPXRbciVuXSx1PXRbKHIrMSklbl0sYT10WyhyKzIpJW5dO3JldHVybiBHdCgoZS1yL24pKm4saSxvLHUsYSl9fSx5aD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LG1oPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0LG4pe3ZhciBlPXIoKHQ9TnQodCkpLnIsKG49TnQobikpLnIpLGk9cih0Lmcsbi5nKSxvPXIodC5iLG4uYiksdT1LdCh0Lm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQucj1lKG4pLHQuZz1pKG4pLHQuYj1vKG4pLHQub3BhY2l0eT11KG4pLHQrIiJ9fXZhciByPVF0KG4pO3JldHVybiBlLmdhbW1hPXQsZX0oMSkseGg9dG4oX2gpLGJoPXRuKGdoKSx3aD1mdW5jdGlvbih0LG4pe3ZhciBlLHI9bj9uLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLG89bmV3IEFycmF5KHIpLHU9bmV3IEFycmF5KHIpO2ZvcihlPTA7ZTxpOysrZSlvW2VdPUVoKHRbZV0sbltlXSk7Zm9yKDtlPHI7KytlKXVbZV09bltlXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKGU9MDtlPGk7KytlKXVbZV09b1tlXSh0KTtyZXR1cm4gdX19LE1oPWZ1bmN0aW9uKHQsbil7dmFyIGU9bmV3IERhdGU7cmV0dXJuIHQ9K3Qsbi09dCxmdW5jdGlvbihyKXtyZXR1cm4gZS5zZXRUaW1lKHQrbipyKSxlfX0sVGg9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD0rdCxuLT10LGZ1bmN0aW9uKGUpe3JldHVybiB0K24qZX19LGtoPWZ1bmN0aW9uKHQsbil7dmFyIGUscj17fSxpPXt9O251bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBufHwobj17fSk7Zm9yKGUgaW4gbillIGluIHQ/cltlXT1FaCh0W2VdLG5bZV0pOmlbZV09bltlXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKGUgaW4gcilpW2VdPXJbZV0odCk7cmV0dXJuIGl9fSxTaD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csQWg9bmV3IFJlZ0V4cChTaC5zb3VyY2UsImciKSxOaD1mdW5jdGlvbih0LG4pe3ZhciBlLHIsaSxvPVNoLmxhc3RJbmRleD1BaC5sYXN0SW5kZXg9MCx1PS0xLGE9W10sYz1bXTtmb3IodCs9IiIsbis9IiI7KGU9U2guZXhlYyh0KSkmJihyPUFoLmV4ZWMobikpOykoaT1yLmluZGV4KT5vJiYoaT1uLnNsaWNlKG8saSksYVt1XT9hW3VdKz1pOmFbKyt1XT1pKSwoZT1lWzBdKT09PShyPXJbMF0pP2FbdV0/YVt1XSs9cjphWysrdV09cjooYVsrK3VdPW51bGwsYy5wdXNoKHtpOnUseDpUaChlLHIpfSkpLG89QWgubGFzdEluZGV4O3JldHVybiBvPG4ubGVuZ3RoJiYoaT1uLnNsaWNlKG8pLGFbdV0/YVt1XSs9aTphWysrdV09aSksYS5sZW5ndGg8Mj9jWzBdP2VuKGNbMF0ueCk6bm4obik6KG49Yy5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9MDtyPG47KytyKWFbKGU9Y1tyXSkuaV09ZS54KHQpO3JldHVybiBhLmpvaW4oIiIpfSl9LEVoPWZ1bmN0aW9uKHQsbil7dmFyIGUscj10eXBlb2YgbjtyZXR1cm4gbnVsbD09bnx8ImJvb2xlYW4iPT09cj95aChuKTooIm51bWJlciI9PT1yP1RoOiJzdHJpbmciPT09cj8oZT1UdChuKSk/KG49ZSxtaCk6Tmg6biBpbnN0YW5jZW9mIFR0P21oOm4gaW5zdGFuY2VvZiBEYXRlP01oOkFycmF5LmlzQXJyYXkobik/d2g6aXNOYU4obik/a2g6VGgpKHQsbil9LENoPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9K3Qsbi09dCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZCh0K24qZSl9fSxQaD0xODAvTWF0aC5QSSx6aD17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfSxSaD1mdW5jdGlvbih0LG4sZSxyLGksbyl7dmFyIHUsYSxjO3JldHVybih1PU1hdGguc3FydCh0KnQrbipuKSkmJih0Lz11LG4vPXUpLChjPXQqZStuKnIpJiYoZS09dCpjLHItPW4qYyksKGE9TWF0aC5zcXJ0KGUqZStyKnIpKSYmKGUvPWEsci89YSxjLz1hKSx0KnI8biplJiYodD0tdCxuPS1uLGM9LWMsdT0tdSkse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIobix0KSpQaCxza2V3WDpNYXRoLmF0YW4oYykqUGgsc2NhbGVYOnUsc2NhbGVZOmF9fSxPaD11bihybiwicHgsICIsInB4KSIsImRlZykiKSxMaD11bihvbiwiLCAiLCIpIiwiKSIpLHFoPU1hdGguU1FSVDIsRGg9MixVaD00LEZoPTFlLTEyLEloPWZ1bmN0aW9uKHQsbil7dmFyIGUscixpPXRbMF0sbz10WzFdLHU9dFsyXSxhPW5bMF0sYz1uWzFdLHM9blsyXSxsPWEtaSxmPWMtbyxoPWwqbCtmKmY7aWYoaDxGaClyPU1hdGgubG9nKHMvdSkvcWgsZT1mdW5jdGlvbih0KXtyZXR1cm5baSt0Kmwsbyt0KmYsdSpNYXRoLmV4cChxaCp0KnIpXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQoaCksZD0ocypzLXUqdStVaCpoKS8oMip1KkRoKnApLHY9KHMqcy11KnUtVWgqaCkvKDIqcypEaCpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCksZz1NYXRoLmxvZyhNYXRoLnNxcnQodip2KzEpLXYpO3I9KGctXykvcWgsZT1mdW5jdGlvbih0KXt2YXIgbj10KnIsZT1hbihfKSxhPXUvKERoKnApKihlKnNuKHFoKm4rXyktY24oXykpO3JldHVybltpK2EqbCxvK2EqZix1KmUvYW4ocWgqbitfKV19fXJldHVybiBlLmR1cmF0aW9uPTFlMypyLGV9LGpoPWxuKEp0KSxZaD1sbihLdCksQmg9aG4oSnQpLEhoPWhuKEt0KSxYaD1wbihKdCksVmg9cG4oS3QpLFdoPWZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPW5ldyBBcnJheShuKSxyPTA7cjxuOysrcillW3JdPXQoci8obi0xKSk7cmV0dXJuIGV9LEdoPTAsJGg9MCxaaD0wLEpoPTFlMyxRaD0wLEtoPTAsdHA9MCxucD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxlcD0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3JlcXVlc3RBbmltYXRpb25GcmFtZTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtfbi5wcm90b3R5cGU9Z24ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpfbixyZXN0YXJ0OmZ1bmN0aW9uKHQsbixlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2U9KG51bGw9PWU/ZG4oKTorZSkrKG51bGw9PW4/MDorbiksdGhpcy5fbmV4dHx8dmg9PT10aGlzfHwodmg/dmguX25leHQ9dGhpczpkaD10aGlzLHZoPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPWUsd24oKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsd24oKSl9fTt2YXIgcnA9ZnVuY3Rpb24odCxuLGUpe3ZhciByPW5ldyBfbjtyZXR1cm4gbj1udWxsPT1uPzA6K24sci5yZXN0YXJ0KGZ1bmN0aW9uKGUpe3Iuc3RvcCgpLHQoZStuKX0sbixlKSxyfSxpcD1mdW5jdGlvbih0LG4sZSl7dmFyIHI9bmV3IF9uLGk9bjtyZXR1cm4gbnVsbD09bj8oci5yZXN0YXJ0KHQsbixlKSxyKToobj0rbixlPW51bGw9PWU/ZG4oKTorZSxyLnJlc3RhcnQoZnVuY3Rpb24gbyh1KXt1Kz1pLHIucmVzdGFydChvLGkrPW4sZSksdCh1KX0sbixlKSxyKX0sb3A9ZCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSx1cD1bXSxhcD0wLGNwPTEsc3A9MixscD0zLGZwPTQsaHA9NSxwcD02LGRwPWZ1bmN0aW9uKHQsbixlLHIsaSxvKXt2YXIgdT10Ll9fdHJhbnNpdGlvbjtpZih1KXtpZihlIGluIHUpcmV0dXJufWVsc2UgdC5fX3RyYW5zaXRpb249e307U24odCxlLHtuYW1lOm4saW5kZXg6cixncm91cDppLG9uOm9wLHR3ZWVuOnVwLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOmFwfSl9LHZwPWZ1bmN0aW9uKHQsbil7dmFyIGUscixpLG89dC5fX3RyYW5zaXRpb24sdT0hMDtpZihvKXtuPW51bGw9PW4/bnVsbDpuKyIiO2ZvcihpIGluIG8pKGU9b1tpXSkubmFtZT09PW4/KHI9ZS5zdGF0ZT5zcCYmZS5zdGF0ZTxocCxlLnN0YXRlPXBwLGUudGltZXIuc3RvcCgpLHImJmUub24uY2FsbCgiaW50ZXJydXB0Iix0LHQuX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxkZWxldGUgb1tpXSk6dT0hMTt1JiZkZWxldGUgdC5fX3RyYW5zaXRpb259fSxfcD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dnAodGhpcyx0KX0pfSxncD1mdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMuX2lkO2lmKHQrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciByLGk9a24odGhpcy5ub2RlKCksZSkudHdlZW4sbz0wLHU9aS5sZW5ndGg7bzx1OysrbylpZigocj1pW29dKS5uYW1lPT09dClyZXR1cm4gci52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1uP0FuOk5uKShlLHQsbikpfSx5cD1mdW5jdGlvbih0LG4pe3ZhciBlO3JldHVybigibnVtYmVyIj09dHlwZW9mIG4/VGg6biBpbnN0YW5jZW9mIFR0P21oOihlPVR0KG4pKT8obj1lLG1oKTpOaCkodCxuKX0sbXA9ZnVuY3Rpb24odCxuKXt2YXIgZT1ObCh0KSxyPSJ0cmFuc2Zvcm0iPT09ZT9MaDp5cDtyZXR1cm4gdGhpcy5hdHRyVHdlZW4odCwiZnVuY3Rpb24iPT10eXBlb2Ygbj8oZS5sb2NhbD9MbjpPbikoZSxyLEVuKHRoaXMsImF0dHIuIit0LG4pKTpudWxsPT1uPyhlLmxvY2FsP1BuOkNuKShlKTooZS5sb2NhbD9Sbjp6bikoZSxyLG4rIiIpKX0seHA9ZnVuY3Rpb24odCxuKXt2YXIgZT0iYXR0ci4iK3Q7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT1uKXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yO3ZhciByPU5sKHQpO3JldHVybiB0aGlzLnR3ZWVuKGUsKHIubG9jYWw/cW46RG4pKHIsbikpfSxicD1mdW5jdGlvbih0KXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P1VuOkZuKShuLHQpKTprbih0aGlzLm5vZGUoKSxuKS5kZWxheX0sd3A9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9Jbjpqbikobix0KSk6a24odGhpcy5ub2RlKCksbikuZHVyYXRpb259LE1wPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChZbihuLHQpKTprbih0aGlzLm5vZGUoKSxuKS5lYXNlfSxUcD1mdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9T2wodCkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsZT1uLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlOysraSlmb3IodmFyIG8sdT1uW2ldLGE9dS5sZW5ndGgsYz1yW2ldPVtdLHM9MDtzPGE7KytzKShvPXVbc10pJiZ0LmNhbGwobyxvLl9fZGF0YV9fLHMsdSkmJmMucHVzaChvKTtyZXR1cm4gbmV3IEtuKHIsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sa3A9ZnVuY3Rpb24odCl7aWYodC5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxlPXQuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9ZS5sZW5ndGgsbz1NYXRoLm1pbihyLGkpLHU9bmV3IEFycmF5KHIpLGE9MDthPG87KythKWZvcih2YXIgYyxzPW5bYV0sbD1lW2FdLGY9cy5sZW5ndGgsaD11W2FdPW5ldyBBcnJheShmKSxwPTA7cDxmOysrcCkoYz1zW3BdfHxsW3BdKSYmKGhbcF09Yyk7Zm9yKDthPHI7KythKXVbYV09blthXTtyZXR1cm4gbmV3IEtuKHUsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sU3A9ZnVuY3Rpb24odCxuKXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2tuKHRoaXMubm9kZSgpLGUpLm9uLm9uKHQpOnRoaXMuZWFjaChIbihlLHQsbikpfSxBcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixYbih0aGlzLl9pZCkpfSxOcD1mdW5jdGlvbih0KXt2YXIgbj10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWpsKHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz1uZXcgQXJyYXkoaSksdT0wO3U8aTsrK3UpZm9yKHZhciBhLGMscz1yW3VdLGw9cy5sZW5ndGgsZj1vW3VdPW5ldyBBcnJheShsKSxoPTA7aDxsOysraCkoYT1zW2hdKSYmKGM9dC5jYWxsKGEsYS5fX2RhdGFfXyxoLHMpKSYmKCJfX2RhdGFfXyJpbiBhJiYoYy5fX2RhdGFfXz1hLl9fZGF0YV9fKSxmW2hdPWMsZHAoZltoXSxuLGUsaCxmLGtuKGEsZSkpKTtyZXR1cm4gbmV3IEtuKG8sdGhpcy5fcGFyZW50cyxuLGUpfSxFcD1mdW5jdGlvbih0KXt2YXIgbj10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUJsKHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz1bXSx1PVtdLGE9MDthPGk7KythKWZvcih2YXIgYyxzPXJbYV0sbD1zLmxlbmd0aCxmPTA7ZjxsOysrZilpZihjPXNbZl0pe2Zvcih2YXIgaCxwPXQuY2FsbChjLGMuX19kYXRhX18sZixzKSxkPWtuKGMsZSksdj0wLF89cC5sZW5ndGg7djxfOysrdikoaD1wW3ZdKSYmZHAoaCxuLGUsdixwLGQpO28ucHVzaChwKSx1LnB1c2goYyl9cmV0dXJuIG5ldyBLbihvLHUsbixlKX0sQ3A9dnQucHJvdG90eXBlLmNvbnN0cnVjdG9yLFBwPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDcCh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHpwPWZ1bmN0aW9uKHQsbixlKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT9PaDp5cDtyZXR1cm4gbnVsbD09bj90aGlzLnN0eWxlVHdlZW4odCxWbih0LHIpKS5vbigiZW5kLnN0eWxlLiIrdCxXbih0KSk6dGhpcy5zdHlsZVR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIG4/JG4odCxyLEVuKHRoaXMsInN0eWxlLiIrdCxuKSk6R24odCxyLG4rIiIpLGUpfSxScD1mdW5jdGlvbih0LG4sZSl7dmFyIHI9InN0eWxlLiIrKHQrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4ocixabih0LG4sbnVsbD09ZT8iIjplKSl9LE9wPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9RbihFbih0aGlzLCJ0ZXh0Iix0KSk6Sm4obnVsbD09dD8iIjp0KyIiKSl9LExwPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX25hbWUsbj10aGlzLl9pZCxlPW5lKCkscj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIHUsYT1yW29dLGM9YS5sZW5ndGgscz0wO3M8YzsrK3MpaWYodT1hW3NdKXt2YXIgbD1rbih1LG4pO2RwKHUsdCxlLHMsYSx7dGltZTpsLnRpbWUrbC5kZWxheStsLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246bC5kdXJhdGlvbixlYXNlOmwuZWFzZX0pfXJldHVybiBuZXcgS24ocix0aGlzLl9wYXJlbnRzLHQsZSl9LHFwPTAsRHA9dnQucHJvdG90eXBlO0tuLnByb3RvdHlwZT10ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOktuLHNlbGVjdDpOcCxzZWxlY3RBbGw6RXAsZmlsdGVyOlRwLG1lcmdlOmtwLHNlbGVjdGlvbjpQcCx0cmFuc2l0aW9uOkxwLGNhbGw6RHAuY2FsbCxub2RlczpEcC5ub2Rlcyxub2RlOkRwLm5vZGUsc2l6ZTpEcC5zaXplLGVtcHR5OkRwLmVtcHR5LGVhY2g6RHAuZWFjaCxvbjpTcCxhdHRyOm1wLGF0dHJUd2Vlbjp4cCxzdHlsZTp6cCxzdHlsZVR3ZWVuOlJwLHRleHQ6T3AscmVtb3ZlOkFwLHR3ZWVuOmdwLGRlbGF5OmJwLGR1cmF0aW9uOndwLGVhc2U6TXB9O3ZhciBVcD0zLEZwPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gTWF0aC5wb3codCxuKX1yZXR1cm4gbj0rbixlLmV4cG9uZW50PXQsZX0oVXApLElwPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsbil9cmV0dXJuIG49K24sZS5leHBvbmVudD10LGV9KFVwKSxqcD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdyh0LG4pOjItTWF0aC5wb3coMi10LG4pKS8yfXJldHVybiBuPStuLGUuZXhwb25lbnQ9dCxlfShVcCksWXA9TWF0aC5QSSxCcD1ZcC8yLEhwPTQvMTEsWHA9Ni8xMSxWcD04LzExLFdwPS43NSxHcD05LzExLCRwPTEwLzExLFpwPS45Mzc1LEpwPTIxLzIyLFFwPTYzLzY0LEtwPTEvSHAvSHAsdGQ9MS43MDE1OCxuZD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIHQqdCooKG4rMSkqdC1uKX1yZXR1cm4gbj0rbixlLm92ZXJzaG9vdD10LGV9KHRkKSxlZD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuLS10KnQqKChuKzEpKnQrbikrMX1yZXR1cm4gbj0rbixlLm92ZXJzaG9vdD10LGV9KHRkKSxyZD1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuKCh0Kj0yKTwxP3QqdCooKG4rMSkqdC1uKToodC09MikqdCooKG4rMSkqdCtuKSsyKS8yfXJldHVybiBuPStuLGUub3ZlcnNob290PXQsZX0odGQpLGlkPTIqTWF0aC5QSSxvZD0xLHVkPS4zLGFkPWZ1bmN0aW9uIHQobixlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuKk1hdGgucG93KDIsMTAqLS10KSpNYXRoLnNpbigoaS10KS9lKX12YXIgaT1NYXRoLmFzaW4oMS8obj1NYXRoLm1heCgxLG4pKSkqKGUvPWlkKTtyZXR1cm4gci5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKmlkKX0sci5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0scn0ob2QsdWQpLGNkPWZ1bmN0aW9uIHQobixlKXtmdW5jdGlvbiByKHQpe3JldHVybiAxLW4qTWF0aC5wb3coMiwtMTAqKHQ9K3QpKSpNYXRoLnNpbigodCtpKS9lKX12YXIgaT1NYXRoLmFzaW4oMS8obj1NYXRoLm1heCgxLG4pKSkqKGUvPWlkKTtyZXR1cm4gci5hbXBsaXR1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIHQobixlKmlkKX0sci5wZXJpb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlKX0scn0ob2QsdWQpLHNkPWZ1bmN0aW9uIHQobixlKXtmdW5jdGlvbiByKHQpe3JldHVybigodD0yKnQtMSk8MD9uKk1hdGgucG93KDIsMTAqdCkqTWF0aC5zaW4oKGktdCkvZSk6Mi1uKk1hdGgucG93KDIsLTEwKnQpKk1hdGguc2luKChpK3QpL2UpKS8yfXZhciBpPU1hdGguYXNpbigxLyhuPU1hdGgubWF4KDEsbikpKSooZS89aWQpO3JldHVybiByLmFtcGxpdHVkZT1mdW5jdGlvbihuKXtyZXR1cm4gdChuLGUqaWQpfSxyLnBlcmlvZD1mdW5jdGlvbihlKXtyZXR1cm4gdChuLGUpfSxyfShvZCx1ZCksbGQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmNlfSxmZD1mdW5jdGlvbih0KXt2YXIgbixlO3QgaW5zdGFuY2VvZiBLbj8obj10Ll9pZCx0PXQuX25hbWUpOihuPW5lKCksKGU9bGQpLnRpbWU9ZG4oKSx0PW51bGw9PXQ/bnVsbDp0KyIiKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciB1LGE9cltvXSxjPWEubGVuZ3RoLHM9MDtzPGM7KytzKSh1PWFbc10pJiZkcCh1LHQsbixzLGEsZXx8YmUodSxuKSk7cmV0dXJuIG5ldyBLbihyLHRoaXMuX3BhcmVudHMsdCxuKX07dnQucHJvdG90eXBlLmludGVycnVwdD1fcCx2dC5wcm90b3R5cGUudHJhbnNpdGlvbj1mZDt2YXIgaGQ9W251bGxdLHBkPWZ1bmN0aW9uKHQsbil7dmFyIGUscixpPXQuX190cmFuc2l0aW9uO2lmKGkpe249bnVsbD09bj9udWxsOm4rIiI7Zm9yKHIgaW4gaSlpZigoZT1pW3JdKS5zdGF0ZT5jcCYmZS5uYW1lPT09bilyZXR1cm4gbmV3IEtuKFtbdF1dLGhkLG4sK3IpfXJldHVybiBudWxsfSxkZD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LHZkPWZ1bmN0aW9uKHQsbixlKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1uLHRoaXMuc2VsZWN0aW9uPWV9LF9kPWZ1bmN0aW9uKCl7dC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLHQuZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LGdkPXtuYW1lOiJkcmFnIn0seWQ9e25hbWU6InNwYWNlIn0sbWQ9e25hbWU6ImhhbmRsZSJ9LHhkPXtuYW1lOiJjZW50ZXIifSxiZD17bmFtZToieCIsaGFuZGxlczpbImUiLCJ3Il0ubWFwKE1lKSxpbnB1dDpmdW5jdGlvbih0LG4pe3JldHVybiB0JiZbW3RbMF0sblswXVsxXV0sW3RbMV0sblsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfX0sd2Q9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChNZSksaW5wdXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdCYmW1tuWzBdWzBdLHRbMF1dLFtuWzFdWzBdLHRbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX19LE1kPXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwic2UiLCJzdyJdLm1hcChNZSksaW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG91dHB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdH19LFRkPXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxrZD17ZToidyIsdzoiZSIsbnc6Im5lIixuZToibnciLHNlOiJzdyIsc3c6InNlIn0sU2Q9e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LEFkPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LE5kPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjotMSxlOm51bGwsczoxLHc6bnVsbCxudzotMSxuZTotMSxzZToxLHN3OjF9LEVkPWZ1bmN0aW9uKCl7cmV0dXJuIFBlKE1kKX0sQ2Q9TWF0aC5jb3MsUGQ9TWF0aC5zaW4semQ9TWF0aC5QSSxSZD16ZC8yLE9kPTIqemQsTGQ9TWF0aC5tYXgscWQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBvLHUsYSxjLHMsbCxmPXQubGVuZ3RoLGg9W10scD1KcyhmKSxkPVtdLHY9W10sXz12Lmdyb3Vwcz1uZXcgQXJyYXkoZiksZz1uZXcgQXJyYXkoZipmKTtmb3Iobz0wLHM9LTE7KytzPGY7KXtmb3IodT0wLGw9LTE7KytsPGY7KXUrPXRbc11bbF07aC5wdXNoKHUpLGQucHVzaChKcyhmKSksbys9dX1mb3IoZSYmcC5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUoaFt0XSxoW25dKX0pLHImJmQuZm9yRWFjaChmdW5jdGlvbihuLGUpe24uc29ydChmdW5jdGlvbihuLGkpe3JldHVybiByKHRbZV1bbl0sdFtlXVtpXSl9KX0pLG89TGQoMCxPZC1uKmYpL28sYz1vP246T2QvZix1PTAscz0tMTsrK3M8Zjspe2ZvcihhPXUsbD0tMTsrK2w8Zjspe3ZhciB5PXBbc10sbT1kW3ldW2xdLHg9dFt5XVttXSxiPXUsdz11Kz14Km87Z1ttKmYreV09e2luZGV4Onksc3ViaW5kZXg6bSxzdGFydEFuZ2xlOmIsZW5kQW5nbGU6dyx2YWx1ZTp4fX1fW3ldPXtpbmRleDp5LHN0YXJ0QW5nbGU6YSxlbmRBbmdsZTp1LHZhbHVlOmhbeV19LHUrPWN9Zm9yKHM9LTE7KytzPGY7KWZvcihsPXMtMTsrK2w8Zjspe3ZhciBNPWdbbCpmK3NdLFQ9Z1tzKmYrbF07KE0udmFsdWV8fFQudmFsdWUpJiZ2LnB1c2goTS52YWx1ZTxULnZhbHVlP3tzb3VyY2U6VCx0YXJnZXQ6TX06e3NvdXJjZTpNLHRhcmdldDpUfSl9cmV0dXJuIGk/di5zb3J0KGkpOnZ9dmFyIG49MCxlPW51bGwscj1udWxsLGk9bnVsbDtyZXR1cm4gdC5wYWRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1MZCgwLGUpLHQpOm59LHQuc29ydEdyb3Vwcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHQpOmV9LHQuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQuc29ydENob3Jkcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09bj9pPW51bGw6KGk9emUobikpLl89bix0KTppJiZpLl99LHR9LERkPUFycmF5LnByb3RvdHlwZS5zbGljZSxVZD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LEZkPU1hdGguUEksSWQ9MipGZCxqZD0xZS02LFlkPUlkLWpkO1JlLnByb3RvdHlwZT1PZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJlLG1vdmVUbzpmdW5jdGlvbih0LG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rbil9LGNsb3NlUGF0aDpmdW5jdGlvbigpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKHQsbil7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kxPStuKX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyKXt0aGlzLl8rPSJRIisgK3QrIiwiKyArbisiLCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPStyKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbih0LG4sZSxyLGksbyl7dGhpcy5fKz0iQyIrICt0KyIsIisgK24rIiwiKyArZSsiLCIrICtyKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbih0LG4sZSxyLGkpe3Q9K3Qsbj0rbixlPStlLHI9K3IsaT0raTt2YXIgbz10aGlzLl94MSx1PXRoaXMuX3kxLGE9ZS10LGM9ci1uLHM9by10LGw9dS1uLGY9cypzK2wqbDtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuXys9Ik0iKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPW4pO2Vsc2UgaWYoZj5qZClpZihNYXRoLmFicyhsKmEtYypzKT5qZCYmaSl7dmFyIGg9ZS1vLHA9ci11LGQ9YSphK2MqYyx2PWgqaCtwKnAsXz1NYXRoLnNxcnQoZCksZz1NYXRoLnNxcnQoZikseT1pKk1hdGgudGFuKChGZC1NYXRoLmFjb3MoKGQrZi12KS8oMipfKmcpKSkvMiksbT15L2cseD15L187TWF0aC5hYnMobS0xKT5qZCYmKHRoaXMuXys9IkwiKyh0K20qcykrIiwiKyhuK20qbCkpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyhsKmg+cypwKSsiLCIrKHRoaXMuX3gxPXQreCphKSsiLCIrKHRoaXMuX3kxPW4reCpjKX1lbHNlIHRoaXMuXys9IkwiKyh0aGlzLl94MT10KSsiLCIrKHRoaXMuX3kxPW4pO2Vsc2U7fSxhcmM6ZnVuY3Rpb24odCxuLGUscixpLG8pe3Q9K3Qsbj0rbixlPStlO3ZhciB1PWUqTWF0aC5jb3MociksYT1lKk1hdGguc2luKHIpLGM9dCt1LHM9bithLGw9MV5vLGY9bz9yLWk6aS1yO2lmKGU8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitlKTtudWxsPT09dGhpcy5feDE/dGhpcy5fKz0iTSIrYysiLCIrczooTWF0aC5hYnModGhpcy5feDEtYyk+amR8fE1hdGguYWJzKHRoaXMuX3kxLXMpPmpkKSYmKHRoaXMuXys9IkwiK2MrIiwiK3MpLGUmJihmPDAmJihmPWYlSWQrSWQpLGY+WWQ/dGhpcy5fKz0iQSIrZSsiLCIrZSsiLDAsMSwiK2wrIiwiKyh0LXUpKyIsIisobi1hKSsiQSIrZSsiLCIrZSsiLDAsMSwiK2wrIiwiKyh0aGlzLl94MT1jKSsiLCIrKHRoaXMuX3kxPXMpOmY+amQmJih0aGlzLl8rPSJBIitlKyIsIitlKyIsMCwiKyArKGY+PUZkKSsiLCIrbCsiLCIrKHRoaXMuX3gxPXQrZSpNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT1uK2UqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24odCxuLGUscil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStuKSsiaCIrICtlKyJ2IisgK3IrImgiKy1lKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIEJkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0LGE9RGQuY2FsbChhcmd1bWVudHMpLGM9bi5hcHBseSh0aGlzLGEpLHM9ZS5hcHBseSh0aGlzLGEpLGw9K3IuYXBwbHkodGhpcywoYVswXT1jLGEpKSxmPWkuYXBwbHkodGhpcyxhKS1SZCxoPW8uYXBwbHkodGhpcyxhKS1SZCxwPWwqQ2QoZiksZD1sKlBkKGYpLHY9K3IuYXBwbHkodGhpcywoYVswXT1zLGEpKSxfPWkuYXBwbHkodGhpcyxhKS1SZCxnPW8uYXBwbHkodGhpcyxhKS1SZDtpZih1fHwodT10PU9lKCkpLHUubW92ZVRvKHAsZCksdS5hcmMoMCwwLGwsZixoKSxmPT09XyYmaD09PWd8fCh1LnF1YWRyYXRpY0N1cnZlVG8oMCwwLHYqQ2QoXyksdipQZChfKSksdS5hcmMoMCwwLHYsXyxnKSksdS5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxwLGQpLHUuY2xvc2VQYXRoKCksdClyZXR1cm4gdT1udWxsLHQrIiJ8fG51bGx9dmFyIG49TGUsZT1xZSxyPURlLGk9VWUsbz1GZSx1PW51bGw7cmV0dXJuIHQucmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246VWQoK24pLHQpOnJ9LHQuc3RhcnRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlVkKCtuKSx0KTppfSx0LmVuZEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246VWQoK24pLHQpOm99LHQuc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC50YXJnZXQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix0KTplfSx0LmNvbnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bnVsbD09bj9udWxsOm4sdCk6dX0sdH0sSGQ9IiQiO0llLnByb3RvdHlwZT1qZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkllLGhhczpmdW5jdGlvbih0KXtyZXR1cm4gSGQrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbSGQrdF19LHNldDpmdW5jdGlvbih0LG4pe3JldHVybiB0aGlzW0hkK3RdPW4sdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBuPUhkK3Q7cmV0dXJuIG4gaW4gdGhpcyYmZGVsZXRlIHRoaXNbbl19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PUhkJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzKW5bMF09PT1IZCYmdC5wdXNoKG4uc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIG4gaW4gdGhpcyluWzBdPT09SGQmJnQucHVzaCh0aGlzW25dKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgbiBpbiB0aGlzKW5bMF09PT1IZCYmdC5wdXNoKHtrZXk6bi5zbGljZSgxKSx2YWx1ZTp0aGlzW25dfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgbiBpbiB0aGlzKW5bMF09PT1IZCYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKHRbMF09PT1IZClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdGhpcyluWzBdPT09SGQmJnQodGhpc1tuXSxuLnNsaWNlKDEpLHRoaXMpfX07dmFyIFhkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChuLGksdSxhKXtpZihpPj1vLmxlbmd0aClyZXR1cm4gbnVsbCE9cj9yKG4pOm51bGwhPWU/bi5zb3J0KGUpOm47Zm9yKHZhciBjLHMsbCxmPS0xLGg9bi5sZW5ndGgscD1vW2krK10sZD1qZSgpLHY9dSgpOysrZjxoOykobD1kLmdldChjPXAocz1uW2ZdKSsiIikpP2wucHVzaChzKTpkLnNldChjLFtzXSk7cmV0dXJuIGQuZWFjaChmdW5jdGlvbihuLGUpe2EodixlLHQobixpLHUsYSkpfSksdn1mdW5jdGlvbiBuKHQsZSl7aWYoKytlPm8ubGVuZ3RoKXJldHVybiB0O3ZhciBpLGE9dVtlLTFdO3JldHVybiBudWxsIT1yJiZlPj1vLmxlbmd0aD9pPXQuZW50cmllcygpOihpPVtdLHQuZWFjaChmdW5jdGlvbih0LHIpe2kucHVzaCh7a2V5OnIsdmFsdWVzOm4odCxlKX0pfSkpLG51bGwhPWE/aS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGEodC5rZXksbi5rZXkpfSk6aX12YXIgZSxyLGksbz1bXSx1PVtdO3JldHVybiBpPXtvYmplY3Q6ZnVuY3Rpb24obil7cmV0dXJuIHQobiwwLFllLEJlKX0sbWFwOmZ1bmN0aW9uKG4pe3JldHVybiB0KG4sMCxIZSxYZSl9LGVudHJpZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIG4odChlLDAsSGUsWGUpLDApfSxrZXk6ZnVuY3Rpb24odCl7cmV0dXJuIG8ucHVzaCh0KSxpfSxzb3J0S2V5czpmdW5jdGlvbih0KXtyZXR1cm4gdVtvLmxlbmd0aC0xXT10LGl9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24odCl7cmV0dXJuIGU9dCxpfSxyb2xsdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHI9dCxpfX19LFZkPWplLnByb3RvdHlwZTtWZS5wcm90b3R5cGU9V2UucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpWZSxoYXM6VmQuaGFzLGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdCs9IiIsdGhpc1tIZCt0XT10LHRoaXN9LHJlbW92ZTpWZC5yZW1vdmUsY2xlYXI6VmQuY2xlYXIsdmFsdWVzOlZkLmtleXMsc2l6ZTpWZC5zaXplLGVtcHR5OlZkLmVtcHR5LGVhY2g6VmQuZWFjaH07dmFyIFdkPWZ1bmN0aW9uKHQpe3ZhciBuPVtdO2Zvcih2YXIgZSBpbiB0KW4ucHVzaChlKTtyZXR1cm4gbn0sR2Q9ZnVuY3Rpb24odCl7dmFyIG49W107Zm9yKHZhciBlIGluIHQpbi5wdXNoKHRbZV0pO3JldHVybiBufSwkZD1mdW5jdGlvbih0KXt2YXIgbj1bXTtmb3IodmFyIGUgaW4gdCluLnB1c2goe2tleTplLHZhbHVlOnRbZV19KTtyZXR1cm4gbn0sWmQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0LG4pe3ZhciByLGksbz1lKHQsZnVuY3Rpb24odCxlKXtyZXR1cm4gcj9yKHQsZS0xKTooaT10LHZvaWQocj1uPyRlKHQsbik6R2UodCkpKX0pO3JldHVybiBvLmNvbHVtbnM9aSxvfWZ1bmN0aW9uIGUodCxuKXtmdW5jdGlvbiBlKCl7aWYobD49cylyZXR1cm4gdTtpZihpKXJldHVybiBpPSExLG87dmFyIG4sZT1sO2lmKDM0PT09dC5jaGFyQ29kZUF0KGUpKXtmb3IodmFyIHI9ZTtyKys8czspaWYoMzQ9PT10LmNoYXJDb2RlQXQocikpe2lmKDM0IT09dC5jaGFyQ29kZUF0KHIrMSkpYnJlYWs7KytyfXJldHVybiBsPXIrMixuPXQuY2hhckNvZGVBdChyKzEpLDEzPT09bj8oaT0hMCwxMD09PXQuY2hhckNvZGVBdChyKzIpJiYrK2wpOjEwPT09biYmKGk9ITApLHQuc2xpY2UoZSsxLHIpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2w8czspe3ZhciBhPTE7aWYobj10LmNoYXJDb2RlQXQobCsrKSwxMD09PW4paT0hMDtlbHNlIGlmKDEzPT09bilpPSEwLDEwPT09dC5jaGFyQ29kZUF0KGwpJiYoKytsLCsrYSk7ZWxzZSBpZihuIT09Yyljb250aW51ZTtyZXR1cm4gdC5zbGljZShlLGwtYSl9cmV0dXJuIHQuc2xpY2UoZSl9Zm9yKHZhciByLGksbz17fSx1PXt9LGE9W10scz10Lmxlbmd0aCxsPTAsZj0wOyhyPWUoKSkhPT11Oyl7Zm9yKHZhciBoPVtdO3IhPT1vJiZyIT09dTspaC5wdXNoKHIpLHI9ZSgpO24mJm51bGw9PShoPW4oaCxmKyspKXx8YS5wdXNoKGgpfXJldHVybiBhfWZ1bmN0aW9uIHIobixlKXtyZXR1cm4gbnVsbD09ZSYmKGU9WmUobikpLFtlLm1hcCh1KS5qb2luKHQpXS5jb25jYXQobi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB1KG5bdF0pfSkuam9pbih0KX0pKS5qb2luKCJcbiIpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQubWFwKG8pLmpvaW4oIlxuIil9ZnVuY3Rpb24gbyhuKXtyZXR1cm4gbi5tYXAodSkuam9pbih0KX1mdW5jdGlvbiB1KHQpe3JldHVybiBudWxsPT10PyIiOmEudGVzdCh0Kz0iIik/JyInK3QucmVwbGFjZSgvXCIvZywnIiInKSsnIic6dH12YXIgYT1uZXcgUmVnRXhwKCdbIicrdCsiXG5ccl0iKSxjPXQuY2hhckNvZGVBdCgwKTtyZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6ZSxmb3JtYXQ6cixmb3JtYXRSb3dzOml9fSxKZD1aZCgiLCIpLFFkPUpkLnBhcnNlLEtkPUpkLnBhcnNlUm93cyx0dj1KZC5mb3JtYXQsbnY9SmQuZm9ybWF0Um93cyxldj1aZCgiXHQiKSxydj1ldi5wYXJzZSxpdj1ldi5wYXJzZVJvd3Msb3Y9ZXYuZm9ybWF0LHV2PWV2LmZvcm1hdFJvd3MsYXY9ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKCl7dmFyIGUsaSxvPXIubGVuZ3RoLHU9MCxhPTA7Zm9yKGU9MDtlPG87KytlKWk9cltlXSx1Kz1pLngsYSs9aS55O2Zvcih1PXUvby10LGE9YS9vLW4sZT0wO2U8bzsrK2UpaT1yW2VdLGkueC09dSxpLnktPWF9dmFyIHI7cmV0dXJuIG51bGw9PXQmJih0PTApLG51bGw9PW4mJihuPTApLGUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXR9LGUueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rbixlKTp0fSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsZSk6bn0sZX0sY3Y9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxzdj1mdW5jdGlvbigpe3JldHVybiAxZS02KihNYXRoLnJhbmRvbSgpLS41KX0sbHY9ZnVuY3Rpb24odCl7dmFyIG49K3RoaXMuX3guY2FsbChudWxsLHQpLGU9K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBKZSh0aGlzLmNvdmVyKG4sZSksbixlLHQpfSxmdj1mdW5jdGlvbih0LG4pe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihuPStuKSlyZXR1cm4gdGhpczt2YXIgZT10aGlzLl94MCxyPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihlKSlpPShlPU1hdGguZmxvb3IodCkpKzEsbz0ocj1NYXRoLmZsb29yKG4pKSsxO2Vsc2V7aWYoIShlPnR8fHQ+aXx8cj5ufHxuPm8pKXJldHVybiB0aGlzO3ZhciB1LGEsYz1pLWUscz10aGlzLl9yb290O3N3aXRjaChhPShuPChyK28pLzIpPDwxfHQ8KGUraSkvMil7Y2FzZSAwOmRvIHU9bmV3IEFycmF5KDQpLHVbYV09cyxzPXU7d2hpbGUoYyo9MixpPWUrYyxvPXIrYyx0Pml8fG4+byk7YnJlYWs7Y2FzZSAxOmRvIHU9bmV3IEFycmF5KDQpLHVbYV09cyxzPXU7d2hpbGUoYyo9MixlPWktYyxvPXIrYyxlPnR8fG4+byk7YnJlYWs7Y2FzZSAyOmRvIHU9bmV3IEFycmF5KDQpLHVbYV09cyxzPXU7d2hpbGUoYyo9MixpPWUrYyxyPW8tYyx0Pml8fHI+bik7YnJlYWs7Y2FzZSAzOmRvIHU9bmV3IEFycmF5KDQpLHVbYV09cyxzPXU7d2hpbGUoYyo9MixlPWktYyxyPW8tYyxlPnR8fHI+bil9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PXMpfXJldHVybiB0aGlzLl94MD1lLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXN9LGh2PWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24obil7aWYoIW4ubGVuZ3RoKWRvIHQucHVzaChuLmRhdGEpO3doaWxlKG49bi5uZXh0KX0pLHR9LHB2PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxkdj1mdW5jdGlvbih0LG4sZSxyLGkpe3RoaXMubm9kZT10LHRoaXMueDA9bix0aGlzLnkwPWUsdGhpcy54MT1yLHRoaXMueTE9aX0sdnY9ZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbyx1LGEsYyxzLGw9dGhpcy5feDAsZj10aGlzLl95MCxoPXRoaXMuX3gxLHA9dGhpcy5feTEsZD1bXSx2PXRoaXMuX3Jvb3Q7Zm9yKHYmJmQucHVzaChuZXcgZHYodixsLGYsaCxwKSksbnVsbD09ZT9lPTEvMDoobD10LWUsZj1uLWUsaD10K2UscD1uK2UsZSo9ZSk7Yz1kLnBvcCgpOylpZighKCEodj1jLm5vZGUpfHwoaT1jLngwKT5ofHwobz1jLnkwKT5wfHwodT1jLngxKTxsfHwoYT1jLnkxKTxmKSlpZih2Lmxlbmd0aCl7dmFyIF89KGkrdSkvMixnPShvK2EpLzI7ZC5wdXNoKG5ldyBkdih2WzNdLF8sZyx1LGEpLG5ldyBkdih2WzJdLGksZyxfLGEpLG5ldyBkdih2WzFdLF8sbyx1LGcpLG5ldyBkdih2WzBdLGksbyxfLGcpKSwocz0obj49Zyk8PDF8dD49XykmJihjPWRbZC5sZW5ndGgtMV0sZFtkLmxlbmd0aC0xXT1kW2QubGVuZ3RoLTEtc10sZFtkLmxlbmd0aC0xLXNdPWMpfWVsc2V7dmFyIHk9dC0rdGhpcy5feC5jYWxsKG51bGwsdi5kYXRhKSxtPW4tK3RoaXMuX3kuY2FsbChudWxsLHYuZGF0YSkseD15KnkrbSptO2lmKHg8ZSl7dmFyIGI9TWF0aC5zcXJ0KGU9eCk7bD10LWIsZj1uLWIsaD10K2IscD1uK2Iscj12LmRhdGF9fXJldHVybiByfSxfdj1mdW5jdGlvbih0KXtpZihpc05hTihvPSt0aGlzLl94LmNhbGwobnVsbCx0KSl8fGlzTmFOKHU9K3RoaXMuX3kuY2FsbChudWxsLHQpKSlyZXR1cm4gdGhpczt2YXIgbixlLHIsaSxvLHUsYSxjLHMsbCxmLGgscD10aGlzLl9yb290LGQ9dGhpcy5feDAsdj10aGlzLl95MCxfPXRoaXMuX3gxLGc9dGhpcy5feTE7aWYoIXApcmV0dXJuIHRoaXM7aWYocC5sZW5ndGgpZm9yKDs7KXtpZigocz1vPj0oYT0oZCtfKS8yKSk/ZD1hOl89YSwobD11Pj0oYz0oditnKS8yKSk/dj1jOmc9YyxuPXAsIShwPXBbZj1sPDwxfHNdKSlyZXR1cm4gdGhpcztpZighcC5sZW5ndGgpYnJlYWs7KG5bZisxJjNdfHxuW2YrMiYzXXx8bltmKzMmM10pJiYoZT1uLGg9Zil9Zm9yKDtwLmRhdGEhPT10OylpZihyPXAsIShwPXAubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKGk9cC5uZXh0KSYmZGVsZXRlIHAubmV4dCxyPyhpP3IubmV4dD1pOmRlbGV0ZSByLm5leHQsdGhpcyk6bj8oaT9uW2ZdPWk6ZGVsZXRlIG5bZl0sKHA9blswXXx8blsxXXx8blsyXXx8blszXSkmJnA9PT0oblszXXx8blsyXXx8blsxXXx8blswXSkmJiFwLmxlbmd0aCYmKGU/ZVtoXT1wOnRoaXMuX3Jvb3Q9cCksdGhpcyk6KHRoaXMuX3Jvb3Q9aSx0aGlzKX0sZ3Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0seXY9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKG4pe2lmKCFuLmxlbmd0aClkbysrdDt3aGlsZShuPW4ubmV4dCl9KSx0fSxtdj1mdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvLHUsYT1bXSxjPXRoaXMuX3Jvb3Q7Zm9yKGMmJmEucHVzaChuZXcgZHYoYyx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249YS5wb3AoKTspaWYoIXQoYz1uLm5vZGUscj1uLngwLGk9bi55MCxvPW4ueDEsdT1uLnkxKSYmYy5sZW5ndGgpe3ZhciBzPShyK28pLzIsbD0oaSt1KS8yOyhlPWNbM10pJiZhLnB1c2gobmV3IGR2KGUscyxsLG8sdSkpLChlPWNbMl0pJiZhLnB1c2gobmV3IGR2KGUscixsLHMsdSkpLChlPWNbMV0pJiZhLnB1c2gobmV3IGR2KGUscyxpLG8sbCkpLChlPWNbMF0pJiZhLnB1c2gobmV3IGR2KGUscixpLHMsbCkpfXJldHVybiB0aGlzfSx4dj1mdW5jdGlvbih0KXt2YXIgbixlPVtdLHI9W107Zm9yKHRoaXMuX3Jvb3QmJmUucHVzaChuZXcgZHYodGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249ZS5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sdT1uLngwLGE9bi55MCxjPW4ueDEscz1uLnkxLGw9KHUrYykvMixmPShhK3MpLzI7KG89aVswXSkmJmUucHVzaChuZXcgZHYobyx1LGEsbCxmKSksKG89aVsxXSkmJmUucHVzaChuZXcgZHYobyxsLGEsYyxmKSksKG89aVsyXSkmJmUucHVzaChuZXcgZHYobyx1LGYsbCxzKSksKG89aVszXSkmJmUucHVzaChuZXcgZHYobyxsLGYsYyxzKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyl0KG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc30sYnY9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSx3dj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9LE12PWVyLnByb3RvdHlwZT1yci5wcm90b3R5cGU7TXYuY29weT1mdW5jdGlvbigpe3ZhciB0LG4sZT1uZXcgcnIodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxyPXRoaXMuX3Jvb3Q7aWYoIXIpcmV0dXJuIGU7aWYoIXIubGVuZ3RoKXJldHVybiBlLl9yb290PWlyKHIpLGU7Zm9yKHQ9W3tzb3VyY2U6cix0YXJnZXQ6ZS5fcm9vdD1uZXcgQXJyYXkoNCl9XTtyPXQucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKG49ci5zb3VyY2VbaV0pJiYobi5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6bix0YXJnZXQ6ci50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6ci50YXJnZXRbaV09aXIobikpO3JldHVybiBlfSxNdi5hZGQ9bHYsTXYuYWRkQWxsPVFlLE12LmNvdmVyPWZ2LE12LmRhdGE9aHYsTXYuZXh0ZW50PXB2LE12LmZpbmQ9dnYsTXYucmVtb3ZlPV92LE12LnJlbW92ZUFsbD1LZSxNdi5yb290PWd2LE12LnNpemU9eXYsTXYudmlzaXQ9bXYsTXYudmlzaXRBZnRlcj14dixNdi54PWJ2LE12Lnk9d3Y7dmFyIFR2LGt2PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtmdW5jdGlvbiB0KHQsbixlLHIsaSl7dmFyIG89dC5kYXRhLGE9dC5yLHA9ZithO3tpZighbylyZXR1cm4gbj5zK3B8fHI8cy1wfHxlPmwrcHx8aTxsLXA7aWYoby5pbmRleD5jLmluZGV4KXt2YXIgZD1zLW8ueC1vLnZ4LHY9bC1vLnktby52eSxfPWQqZCt2KnY7XzxwKnAmJigwPT09ZCYmKGQ9c3YoKSxfKz1kKmQpLDA9PT12JiYodj1zdigpLF8rPXYqdiksXz0ocC0oXz1NYXRoLnNxcnQoXykpKS9fKnUsYy52eCs9KGQqPV8pKihwPShhKj1hKS8oaCthKSksYy52eSs9KHYqPV8pKnAsby52eC09ZCoocD0xLXApLG8udnktPXYqcCl9fX1mb3IodmFyIG4scixjLHMsbCxmLGgscD1pLmxlbmd0aCxkPTA7ZDxhOysrZClmb3Iocj1lcihpLG9yLHVyKS52aXNpdEFmdGVyKGUpLG49MDtuPHA7KytuKWM9aVtuXSxmPW9bYy5pbmRleF0saD1mKmYscz1jLngrYy52eCxsPWMueStjLnZ5LHIudmlzaXQodCl9ZnVuY3Rpb24gZSh0KXtpZih0LmRhdGEpcmV0dXJuIHQucj1vW3QuZGF0YS5pbmRleF07Zm9yKHZhciBuPXQucj0wO248NDsrK24pdFtuXSYmdFtuXS5yPnQuciYmKHQucj10W25dLnIpfWZ1bmN0aW9uIHIoKXtpZihpKXt2YXIgbixlLHI9aS5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KHIpLG49MDtuPHI7KytuKWU9aVtuXSxvW2UuaW5kZXhdPSt0KGUsbixpKX19dmFyIGksbyx1PTEsYT0xO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1jdihudWxsPT10PzE6K3QpKSxuLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7aT10LHIoKX0sbi5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LG4pOmF9LG4uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3Qsbik6dX0sbi5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpjdigrZSkscigpLG4pOnR9LG59LFN2PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIDEvTWF0aC5taW4oc1t0LnNvdXJjZS5pbmRleF0sc1t0LnRhcmdldC5pbmRleF0pfWZ1bmN0aW9uIGUobil7Zm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPGQ7KytlKWZvcih2YXIgaSxvLGMscyxmLGgscCx2PTA7djxyOysrdilpPXRbdl0sbz1pLnNvdXJjZSxjPWkudGFyZ2V0LHM9Yy54K2Mudngtby54LW8udnh8fHN2KCksZj1jLnkrYy52eS1vLnktby52eXx8c3YoKSxoPU1hdGguc3FydChzKnMrZipmKSxoPShoLWFbdl0pL2gqbip1W3ZdLHMqPWgsZio9aCxjLnZ4LT1zKihwPWxbdl0pLGMudnktPWYqcCxvLnZ4Kz1zKihwPTEtcCksby52eSs9ZipwfWZ1bmN0aW9uIHIoKXtpZihjKXt2YXIgbixlLHI9Yy5sZW5ndGgsaD10Lmxlbmd0aCxwPWplKGMsZik7Zm9yKG49MCxzPW5ldyBBcnJheShyKTtuPGg7KytuKWU9dFtuXSxlLmluZGV4PW4sIm9iamVjdCIhPXR5cGVvZiBlLnNvdXJjZSYmKGUuc291cmNlPWNyKHAsZS5zb3VyY2UpKSwib2JqZWN0IiE9dHlwZW9mIGUudGFyZ2V0JiYoZS50YXJnZXQ9Y3IocCxlLnRhcmdldCkpLHNbZS5zb3VyY2UuaW5kZXhdPShzW2Uuc291cmNlLmluZGV4XXx8MCkrMSxzW2UudGFyZ2V0LmluZGV4XT0oc1tlLnRhcmdldC5pbmRleF18fDApKzE7Zm9yKG49MCxsPW5ldyBBcnJheShoKTtuPGg7KytuKWU9dFtuXSxsW25dPXNbZS5zb3VyY2UuaW5kZXhdLyhzW2Uuc291cmNlLmluZGV4XStzW2UudGFyZ2V0LmluZGV4XSk7dT1uZXcgQXJyYXkoaCksaSgpLGE9bmV3IEFycmF5KGgpLG8oKX19ZnVuY3Rpb24gaSgpe2lmKGMpZm9yKHZhciBuPTAsZT10Lmxlbmd0aDtuPGU7KytuKXVbbl09K2godFtuXSxuLHQpfWZ1bmN0aW9uIG8oKXtpZihjKWZvcih2YXIgbj0wLGU9dC5sZW5ndGg7bjxlOysrbilhW25dPStwKHRbbl0sbix0KX12YXIgdSxhLGMscyxsLGY9YXIsaD1uLHA9Y3YoMzApLGQ9MTtyZXR1cm4gbnVsbD09dCYmKHQ9W10pLGUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtjPXQscigpfSxlLmxpbmtzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scigpLGUpOnR9LGUuaWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9dCxlKTpmfSxlLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9K3QsCmUpOmR9LGUuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpjdigrdCksaSgpLGUpOmh9LGUuZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpjdigrdCksbygpLGUpOnB9LGV9LEF2PTEwLE52PU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKSxFdj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKCl7ZSgpLHAuY2FsbCgidGljayIsbyksdTxhJiYoaC5zdG9wKCkscC5jYWxsKCJlbmQiLG8pKX1mdW5jdGlvbiBlKCl7dmFyIG4sZSxyPXQubGVuZ3RoO2Zvcih1Kz0ocy11KSpjLGYuZWFjaChmdW5jdGlvbih0KXt0KHUpfSksbj0wO248cjsrK24pZT10W25dLG51bGw9PWUuZng/ZS54Kz1lLnZ4Kj1sOihlLng9ZS5meCxlLnZ4PTApLG51bGw9PWUuZnk/ZS55Kz1lLnZ5Kj1sOihlLnk9ZS5meSxlLnZ5PTApfWZ1bmN0aW9uIHIoKXtmb3IodmFyIG4sZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSl7aWYobj10W2VdLG4uaW5kZXg9ZSxpc05hTihuLngpfHxpc05hTihuLnkpKXt2YXIgaT1BdipNYXRoLnNxcnQoZSksbz1lKk52O24ueD1pKk1hdGguY29zKG8pLG4ueT1pKk1hdGguc2luKG8pfShpc05hTihuLnZ4KXx8aXNOYU4obi52eSkpJiYobi52eD1uLnZ5PTApfX1mdW5jdGlvbiBpKG4pe3JldHVybiBuLmluaXRpYWxpemUmJm4uaW5pdGlhbGl6ZSh0KSxufXZhciBvLHU9MSxhPS4wMDEsYz0xLU1hdGgucG93KGEsMS8zMDApLHM9MCxsPS42LGY9amUoKSxoPWduKG4pLHA9ZCgidGljayIsImVuZCIpO3JldHVybiBudWxsPT10JiYodD1bXSkscigpLG89e3RpY2s6ZSxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGgucmVzdGFydChuKSxvfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGguc3RvcCgpLG99LG5vZGVzOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scigpLGYuZWFjaChpKSxvKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxvKTp1fSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxvKTphfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSt0LG8pOitjfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxvKTpzfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPTEtdCxvKToxLWx9LGZvcmNlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09bj9mLnJlbW92ZSh0KTpmLnNldCh0LGkobikpLG8pOmYuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKG4sZSxyKXt2YXIgaSxvLHUsYSxjLHM9MCxsPXQubGVuZ3RoO2ZvcihudWxsPT1yP3I9MS8wOnIqPXIscz0wO3M8bDsrK3MpYT10W3NdLGk9bi1hLngsbz1lLWEueSx1PWkqaStvKm8sdTxyJiYoYz1hLHI9dSk7cmV0dXJuIGN9LG9uOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8ocC5vbih0LG4pLG8pOnAub24odCl9fX0sQ3Y9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBuLGE9aS5sZW5ndGgsYz1lcihpLHNyLGxyKS52aXNpdEFmdGVyKGUpO2Zvcih1PXQsbj0wO248YTsrK24pbz1pW25dLGMudmlzaXQocil9ZnVuY3Rpb24gbigpe2lmKGkpe3ZhciB0LG4sZT1pLmxlbmd0aDtmb3IoYT1uZXcgQXJyYXkoZSksdD0wO3Q8ZTsrK3Qpbj1pW3RdLGFbbi5pbmRleF09K2Mobix0LGkpfX1mdW5jdGlvbiBlKHQpe3ZhciBuLGUscixpLG8sdT0wO2lmKHQubGVuZ3RoKXtmb3Iocj1pPW89MDtvPDQ7KytvKShuPXRbb10pJiYoZT1uLnZhbHVlKSYmKHUrPWUscis9ZSpuLngsaSs9ZSpuLnkpO3QueD1yL3UsdC55PWkvdX1lbHNle249dCxuLng9bi5kYXRhLngsbi55PW4uZGF0YS55O2RvIHUrPWFbbi5kYXRhLmluZGV4XTt3aGlsZShuPW4ubmV4dCl9dC52YWx1ZT11fWZ1bmN0aW9uIHIodCxuLGUscil7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIGk9dC54LW8ueCxjPXQueS1vLnksaD1yLW4scD1pKmkrYypjO2lmKGgqaC9mPHApcmV0dXJuIHA8bCYmKDA9PT1pJiYoaT1zdigpLHArPWkqaSksMD09PWMmJihjPXN2KCkscCs9YypjKSxwPHMmJihwPU1hdGguc3FydChzKnApKSxvLnZ4Kz1pKnQudmFsdWUqdS9wLG8udnkrPWMqdC52YWx1ZSp1L3ApLCEwO2lmKCEodC5sZW5ndGh8fHA+PWwpKXsodC5kYXRhIT09b3x8dC5uZXh0KSYmKDA9PT1pJiYoaT1zdigpLHArPWkqaSksMD09PWMmJihjPXN2KCkscCs9YypjKSxwPHMmJihwPU1hdGguc3FydChzKnApKSk7ZG8gdC5kYXRhIT09byYmKGg9YVt0LmRhdGEuaW5kZXhdKnUvcCxvLnZ4Kz1pKmgsby52eSs9YypoKTt3aGlsZSh0PXQubmV4dCl9fXZhciBpLG8sdSxhLGM9Y3YoLTMwKSxzPTEsbD0xLzAsZj0uODE7cmV0dXJuIHQuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtpPXQsbigpfSx0LnN0cmVuZ3RoPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6Y3YoK2UpLG4oKSx0KTpjfSx0LmRpc3RhbmNlTWluPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW4qbix0KTpNYXRoLnNxcnQocyl9LHQuZGlzdGFuY2VNYXg9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9bipuLHQpOk1hdGguc3FydChsKX0sdC50aGV0YT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1uKm4sdCk6TWF0aC5zcXJ0KGYpfSx0fSxQdj1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgbixlPTAsdT1yLmxlbmd0aDtlPHU7KytlKW49cltlXSxuLnZ4Kz0ob1tlXS1uLngpKmlbZV0qdH1mdW5jdGlvbiBlKCl7aWYocil7dmFyIG4sZT1yLmxlbmd0aDtmb3IoaT1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24paVtuXT1pc05hTihvW25dPSt0KHJbbl0sbixyKSk/MDordShyW25dLG4scil9fXZhciByLGksbyx1PWN2KC4xKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9Y3YobnVsbD09dD8wOit0KSksbi5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxlKCl9LG4uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpjdigrdCksZSgpLG4pOnV9LG4ueD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOmN2KCtyKSxlKCksbik6dH0sbn0senY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0KXtmb3IodmFyIG4sZT0wLHU9ci5sZW5ndGg7ZTx1OysrZSluPXJbZV0sbi52eSs9KG9bZV0tbi55KSppW2VdKnR9ZnVuY3Rpb24gZSgpe2lmKHIpe3ZhciBuLGU9ci5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKWlbbl09aXNOYU4ob1tuXT0rdChyW25dLG4scikpPzA6K3UocltuXSxuLHIpfX12YXIgcixpLG8sdT1jdiguMSk7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWN2KG51bGw9PXQ/MDordCkpLG4uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsZSgpfSxuLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Y3YoK3QpLGUoKSxuKTp1fSxuLnk9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHI/cjpjdigrciksZSgpLG4pOnR9LG59LFJ2PWZ1bmN0aW9uKHQsbil7aWYoKGU9KHQ9bj90LnRvRXhwb25lbnRpYWwobi0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBlLHI9dC5zbGljZSgwLGUpO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCt0LnNsaWNlKGUrMSldfSxPdj1mdW5jdGlvbih0KXtyZXR1cm4gdD1SdihNYXRoLmFicyh0KSksdD90WzFdOk5hTn0sTHY9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtmb3IodmFyIGk9ZS5sZW5ndGgsbz1bXSx1PTAsYT10WzBdLGM9MDtpPjAmJmE+MCYmKGMrYSsxPnImJihhPU1hdGgubWF4KDEsci1jKSksby5wdXNoKGUuc3Vic3RyaW5nKGktPWEsaSthKSksISgoYys9YSsxKT5yKSk7KWE9dFt1PSh1KzEpJXQubGVuZ3RoXTtyZXR1cm4gby5yZXZlcnNlKCkuam9pbihuKX19LHF2PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKG4pe3JldHVybiB0WytuXX0pfX0sRHY9ZnVuY3Rpb24odCxuKXt0PXQudG9QcmVjaXNpb24obik7dDpmb3IodmFyIGUscj10Lmxlbmd0aCxpPTEsbz0tMTtpPHI7KytpKXN3aXRjaCh0W2ldKXtjYXNlIi4iOm89ZT1pO2JyZWFrO2Nhc2UiMCI6MD09PW8mJihvPWkpLGU9aTticmVhaztjYXNlImUiOmJyZWFrIHQ7ZGVmYXVsdDpvPjAmJihvPTApfXJldHVybiBvPjA/dC5zbGljZSgwLG8pK3Quc2xpY2UoZSsxKTp0fSxVdj1mdW5jdGlvbih0LG4pe3ZhciBlPVJ2KHQsbik7aWYoIWUpcmV0dXJuIHQrIiI7dmFyIHI9ZVswXSxpPWVbMV0sbz1pLShUdj0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkpKzEsdT1yLmxlbmd0aDtyZXR1cm4gbz09PXU/cjpvPnU/cituZXcgQXJyYXkoby11KzEpLmpvaW4oIjAiKTpvPjA/ci5zbGljZSgwLG8pKyIuIityLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK1J2KHQsTWF0aC5tYXgoMCxuK28tMSkpWzBdfSxGdj1mdW5jdGlvbih0LG4pe3ZhciBlPVJ2KHQsbik7aWYoIWUpcmV0dXJuIHQrIiI7dmFyIHI9ZVswXSxpPWVbMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK3I6ci5sZW5ndGg+aSsxP3Iuc2xpY2UoMCxpKzEpKyIuIityLnNsaWNlKGkrMSk6cituZXcgQXJyYXkoaS1yLmxlbmd0aCsyKS5qb2luKCIwIil9LEl2PXsiIjpEdiwiJSI6ZnVuY3Rpb24odCxuKXtyZXR1cm4oMTAwKnQpLnRvRml4ZWQobil9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrIiJ9LGQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQudG9FeHBvbmVudGlhbChuKX0sZjpmdW5jdGlvbih0LG4pe3JldHVybiB0LnRvRml4ZWQobil9LGc6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdC50b1ByZWNpc2lvbihuKX0sbzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZyg4KX0scDpmdW5jdGlvbih0LG4pe3JldHVybiBGdigxMDAqdCxuKX0scjpGdixzOlV2LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoMTYpfX0sanY9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtXCggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8oW2EteiVdKT8kL2k7ZnIucHJvdG90eXBlPWhyLnByb3RvdHlwZSxoci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsobnVsbD09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKG51bGw9PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSt0aGlzLnR5cGV9O3ZhciBZdixCdj1mdW5jdGlvbih0KXtyZXR1cm4gdH0sSHY9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCLCtSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdLFh2PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7ZnVuY3Rpb24gbih0KXt2YXIgbixpLHMsbT12LHg9XztpZigiYyI9PT1kKXg9Zyh0KSt4LHQ9IiI7ZWxzZXt0PSt0O3ZhciBiPXQ8MDtpZih0PWcoTWF0aC5hYnModCkscCksYiYmMD09PSt0JiYoYj0hMSksbT0oYj8iKCI9PT1jP2M6Ii0iOiItIj09PWN8fCIoIj09PWM/IiI6YykrbSx4PXgrKCJzIj09PWQ/SHZbOCtUdi8zXToiIikrKGImJiIoIj09PWM/IikiOiIiKSx5KWZvcihuPS0xLGk9dC5sZW5ndGg7KytuPGk7KWlmKHM9dC5jaGFyQ29kZUF0KG4pLDQ4PnN8fHM+NTcpe3g9KDQ2PT09cz9vK3Quc2xpY2UobisxKTp0LnNsaWNlKG4pKSt4LHQ9dC5zbGljZSgwLG4pO2JyZWFrfX1oJiYhbCYmKHQ9cih0LDEvMCkpO3ZhciB3PW0ubGVuZ3RoK3QubGVuZ3RoK3gubGVuZ3RoLE09dzxmP25ldyBBcnJheShmLXcrMSkuam9pbihlKToiIjtzd2l0Y2goaCYmbCYmKHQ9cihNK3QsTS5sZW5ndGg/Zi14Lmxlbmd0aDoxLzApLE09IiIpLGEpe2Nhc2UiPCI6dD1tK3QreCtNO2JyZWFrO2Nhc2UiPSI6dD1tK00rdCt4O2JyZWFrO2Nhc2UiXiI6dD1NLnNsaWNlKDAsdz1NLmxlbmd0aD4+MSkrbSt0K3grTS5zbGljZSh3KTticmVhaztkZWZhdWx0OnQ9TSttK3QreH1yZXR1cm4gdSh0KX10PWZyKHQpO3ZhciBlPXQuZmlsbCxhPXQuYWxpZ24sYz10LnNpZ24scz10LnN5bWJvbCxsPXQuemVybyxmPXQud2lkdGgsaD10LmNvbW1hLHA9dC5wcmVjaXNpb24sZD10LnR5cGUsdj0iJCI9PT1zP2lbMF06IiMiPT09cyYmL1tib3hYXS8udGVzdChkKT8iMCIrZC50b0xvd2VyQ2FzZSgpOiIiLF89IiQiPT09cz9pWzFdOi9bJXBdLy50ZXN0KGQpPyIlIjoiIixnPUl2W2RdLHk9IWR8fC9bZGVmZ3BycyVdLy50ZXN0KGQpO3JldHVybiBwPW51bGw9PXA/ZD82OjEyOi9bZ3Byc10vLnRlc3QoZCk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxwKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxwKSksbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0KyIifSxufWZ1bmN0aW9uIGUodCxlKXt2YXIgcj1uKCh0PWZyKHQpLHQudHlwZT0iZiIsdCkpLGk9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoT3YoZSkvMykpKSxvPU1hdGgucG93KDEwLC1pKSx1PUh2WzgraS8zXTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIobyp0KSt1fX12YXIgcj10Lmdyb3VwaW5nJiZ0LnRob3VzYW5kcz9Mdih0Lmdyb3VwaW5nLHQudGhvdXNhbmRzKTpCdixpPXQuY3VycmVuY3ksbz10LmRlY2ltYWwsdT10Lm51bWVyYWxzP3F2KHQubnVtZXJhbHMpOkJ2O3JldHVybntmb3JtYXQ6bixmb3JtYXRQcmVmaXg6ZX19O3ByKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXX0pO3ZhciBWdj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCwtT3YoTWF0aC5hYnModCkpKX0sV3Y9ZnVuY3Rpb24odCxuKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihPdihuKS8zKSkpLU92KE1hdGguYWJzKHQpKSl9LEd2PWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9TWF0aC5hYnModCksbj1NYXRoLmFicyhuKS10LE1hdGgubWF4KDAsT3YobiktT3YodCkpKzF9LCR2PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBkcn07ZHIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkcixyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sYWRkOmZ1bmN0aW9uKHQpe3ZyKEFfLHQsdGhpcy50KSx2cih0aGlzLEFfLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1BXy50OnRoaXMucz1BXy50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBadixKdixRdixLdix0XyxuXyxlXyxyXyxpXyxvXyx1XyxhXyxjXyxzXyxsXyxmXyxoXyxwXyxkXyx2XyxfXyxnXyx5XyxtXyx4XyxiXyx3XyxNXyxUXyxrXyxTXyxBXz1uZXcgZHIsTl89MWUtNixFXz0xZS0xMixDXz1NYXRoLlBJLFBfPUNfLzIsel89Q18vNCxSXz0yKkNfLE9fPTE4MC9DXyxMXz1DXy8xODAscV89TWF0aC5hYnMsRF89TWF0aC5hdGFuLFVfPU1hdGguYXRhbjIsRl89TWF0aC5jb3MsSV89TWF0aC5jZWlsLGpfPU1hdGguZXhwLFlfPU1hdGgubG9nLEJfPU1hdGgucG93LEhfPU1hdGguc2luLFhfPU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD8xOnQ8MD8tMTowfSxWXz1NYXRoLnNxcnQsV189TWF0aC50YW4sR189e0ZlYXR1cmU6ZnVuY3Rpb24odCxuKXt4cih0Lmdlb21ldHJ5LG4pfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmZlYXR1cmVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspeHIoZVtyXS5nZW9tZXRyeSxuKX19LCRfPXtTcGhlcmU6ZnVuY3Rpb24odCxuKXtuLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LG4pe3Q9dC5jb29yZGluYXRlcyxuLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspdD1lW3JdLG4ucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsbil7YnIodC5jb29yZGluYXRlcyxuLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWJyKGVbcl0sbiwwKX0sUG9seWdvbjpmdW5jdGlvbih0LG4pe3dyKHQuY29vcmRpbmF0ZXMsbil9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspd3IoZVtyXSxuKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuZ2VvbWV0cmllcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KXhyKGVbcl0sbil9fSxaXz1mdW5jdGlvbih0LG4pe3QmJkdfLmhhc093blByb3BlcnR5KHQudHlwZSk/R19bdC50eXBlXSh0LG4pOnhyKHQsbil9LEpfPSR2KCksUV89JHYoKSxLXz17cG9pbnQ6bXIsbGluZVN0YXJ0Om1yLGxpbmVFbmQ6bXIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Sl8ucmVzZXQoKSxLXy5saW5lU3RhcnQ9TXIsS18ubGluZUVuZD1Ucn0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciB0PStKXztRXy5hZGQodDwwP1JfK3Q6dCksdGhpcy5saW5lU3RhcnQ9dGhpcy5saW5lRW5kPXRoaXMucG9pbnQ9bXJ9LHNwaGVyZTpmdW5jdGlvbigpe1FfLmFkZChSXyl9fSx0Zz1mdW5jdGlvbih0KXtyZXR1cm4gUV8ucmVzZXQoKSxaXyh0LEtfKSwyKlFffSxuZz0kdigpLGVnPXtwb2ludDpPcixsaW5lU3RhcnQ6cXIsbGluZUVuZDpEcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlZy5wb2ludD1VcixlZy5saW5lU3RhcnQ9RnIsZWcubGluZUVuZD1JcixuZy5yZXNldCgpLEtfLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7S18ucG9seWdvbkVuZCgpLGVnLnBvaW50PU9yLGVnLmxpbmVTdGFydD1xcixlZy5saW5lRW5kPURyLEpfPDA/KG5fPS0ocl89MTgwKSxlXz0tKGlfPTkwKSk6bmc+Tl8/aV89OTA6bmc8LU5fJiYoZV89LTkwKSxsX1swXT1uXyxsX1sxXT1yX319LHJnPWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG8sdSxhO2lmKGlfPXJfPS0obl89ZV89MS8wKSxzXz1bXSxaXyh0LGVnKSxlPXNfLmxlbmd0aCl7Zm9yKHNfLnNvcnQoWXIpLG49MSxyPXNfWzBdLG89W3JdO248ZTsrK24paT1zX1tuXSxCcihyLGlbMF0pfHxCcihyLGlbMV0pPyhqcihyWzBdLGlbMV0pPmpyKHJbMF0sclsxXSkmJihyWzFdPWlbMV0pLGpyKGlbMF0sclsxXSk+anIoclswXSxyWzFdKSYmKHJbMF09aVswXSkpOm8ucHVzaChyPWkpO2Zvcih1PS0oMS8wKSxlPW8ubGVuZ3RoLTEsbj0wLHI9b1tlXTtuPD1lO3I9aSwrK24paT1vW25dLChhPWpyKHJbMV0saVswXSkpPnUmJih1PWEsbl89aVswXSxyXz1yWzFdKX1yZXR1cm4gc189bF89bnVsbCxuXz09PTEvMHx8ZV89PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbbl8sZV9dLFtyXyxpX11dfSxpZz17c3BoZXJlOm1yLHBvaW50OkhyLGxpbmVTdGFydDpWcixsaW5lRW5kOiRyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2lnLmxpbmVTdGFydD1acixpZy5saW5lRW5kPUpyfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7aWcubGluZVN0YXJ0PVZyLGlnLmxpbmVFbmQ9JHJ9fSxvZz1mdW5jdGlvbih0KXtmXz1oXz1wXz1kXz12Xz1fXz1nXz15Xz1tXz14Xz1iXz0wLFpfKHQsaWcpO3ZhciBuPW1fLGU9eF8scj1iXyxpPW4qbitlKmUrcipyO3JldHVybiBpPEVfJiYobj1fXyxlPWdfLHI9eV8saF88Tl8mJihuPXBfLGU9ZF8scj12XyksaT1uKm4rZSplK3IqcixpPEVfKT9bTmFOLE5hTl06W1VfKGUsbikqT18sZ3Ioci9WXyhpKSkqT19dfSx1Zz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LGFnPWZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZShlLHIpe3JldHVybiBlPXQoZSxyKSxuKGVbMF0sZVsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZuLmludmVydCYmKGUuaW52ZXJ0PWZ1bmN0aW9uKGUscil7cmV0dXJuIGU9bi5pbnZlcnQoZSxyKSxlJiZ0LmludmVydChlWzBdLGVbMV0pfSksZX07dGkuaW52ZXJ0PXRpO3ZhciBjZyxzZyxsZyxmZyxoZyxwZyxkZyx2ZyxfZyxnZyx5ZyxtZz1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKG4pe3JldHVybiBuPXQoblswXSpMXyxuWzFdKkxfKSxuWzBdKj1PXyxuWzFdKj1PXyxufXJldHVybiB0PW5pKHRbMF0qTF8sdFsxXSpMXyx0Lmxlbmd0aD4yP3RbMl0qTF86MCksbi5pbnZlcnQ9ZnVuY3Rpb24obil7cmV0dXJuIG49dC5pbnZlcnQoblswXSpMXyxuWzFdKkxfKSxuWzBdKj1PXyxuWzFdKj1PXyxufSxufSx4Zz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxuKXtlLnB1c2godD1yKHQsbikpLHRbMF0qPU9fLHRbMV0qPU9ffWZ1bmN0aW9uIG4oKXt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpKkxfLGM9dS5hcHBseSh0aGlzLGFyZ3VtZW50cykqTF87cmV0dXJuIGU9W10scj1uaSgtdFswXSpMXywtdFsxXSpMXywwKS5pbnZlcnQsb2koYSxuLGMsMSksdD17dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2VdfSxlPXI9bnVsbCx0fXZhciBlLHIsaT11ZyhbMCwwXSksbz11Zyg5MCksdT11Zyg2KSxhPXtwb2ludDp0fTtyZXR1cm4gbi5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp1ZyhbK3RbMF0sK3RbMV1dKSxuKTppfSxuLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnVnKCt0KSxuKTpvfSxuLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnVnKCt0KSxuKTp1fSxufSxiZz1mdW5jdGlvbigpe3ZhciB0LG49W107cmV0dXJue3BvaW50OmZ1bmN0aW9uKG4sZSl7dC5wdXNoKFtuLGVdKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7bi5wdXNoKHQ9W10pfSxsaW5lRW5kOm1yLHJlam9pbjpmdW5jdGlvbigpe24ubGVuZ3RoPjEmJm4ucHVzaChuLnBvcCgpLmNvbmNhdChuLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9bjtyZXR1cm4gbj1bXSx0PW51bGwsZX19fSx3Zz1mdW5jdGlvbih0LG4sZSxyLGksbyl7dmFyIHUsYT10WzBdLGM9dFsxXSxzPW5bMF0sbD1uWzFdLGY9MCxoPTEscD1zLWEsZD1sLWM7aWYodT1lLWEscHx8ISh1PjApKXtpZih1Lz1wLHA8MCl7aWYodTxmKXJldHVybjt1PGgmJihoPXUpfWVsc2UgaWYocD4wKXtpZih1PmgpcmV0dXJuO3U+ZiYmKGY9dSl9aWYodT1pLWEscHx8ISh1PDApKXtpZih1Lz1wLHA8MCl7aWYodT5oKXJldHVybjt1PmYmJihmPXUpfWVsc2UgaWYocD4wKXtpZih1PGYpcmV0dXJuO3U8aCYmKGg9dSl9aWYodT1yLWMsZHx8ISh1PjApKXtpZih1Lz1kLGQ8MCl7aWYodTxmKXJldHVybjt1PGgmJihoPXUpfWVsc2UgaWYoZD4wKXtpZih1PmgpcmV0dXJuO3U+ZiYmKGY9dSl9aWYodT1vLWMsZHx8ISh1PDApKXtpZih1Lz1kLGQ8MCl7aWYodT5oKXJldHVybjt1PmYmJihmPXUpfWVsc2UgaWYoZD4wKXtpZih1PGYpcmV0dXJuO3U8aCYmKGg9dSl9cmV0dXJuIGY+MCYmKHRbMF09YStmKnAsdFsxXT1jK2YqZCksaDwxJiYoblswXT1hK2gqcCxuWzFdPWMraCpkKSwhMH19fX19LE1nPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHFfKHRbMF0tblswXSk8Tl8mJnFfKHRbMV0tblsxXSk8Tl99LFRnPWZ1bmN0aW9uKHQsbixlLHIsaSl7dmFyIG8sdSxhPVtdLGM9W107aWYodC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCEoKG49dC5sZW5ndGgtMSk8PTApKXt2YXIgbixlLHI9dFswXSx1PXRbbl07aWYoTWcocix1KSl7Zm9yKGkubGluZVN0YXJ0KCksbz0wO288bjsrK28paS5wb2ludCgocj10W29dKVswXSxyWzFdKTtyZXR1cm4gdm9pZCBpLmxpbmVFbmQoKX1hLnB1c2goZT1uZXcgYWkocix0LG51bGwsITApKSxjLnB1c2goZS5vPW5ldyBhaShyLG51bGwsZSwhMSkpLGEucHVzaChlPW5ldyBhaSh1LHQsbnVsbCwhMSkpLGMucHVzaChlLm89bmV3IGFpKHUsbnVsbCxlLCEwKSl9fSksYS5sZW5ndGgpe2ZvcihjLnNvcnQobiksY2koYSksY2koYyksbz0wLHU9Yy5sZW5ndGg7bzx1OysrbyljW29dLmU9ZT0hZTtmb3IodmFyIHMsbCxmPWFbMF07Oyl7Zm9yKHZhciBoPWYscD0hMDtoLnY7KWlmKChoPWgubik9PT1mKXJldHVybjtzPWgueixpLmxpbmVTdGFydCgpO2Rve2lmKGgudj1oLm8udj0hMCxoLmUpe2lmKHApZm9yKG89MCx1PXMubGVuZ3RoO288dTsrK28paS5wb2ludCgobD1zW29dKVswXSxsWzFdKTtlbHNlIHIoaC54LGgubi54LDEsaSk7aD1oLm59ZWxzZXtpZihwKWZvcihzPWgucC56LG89cy5sZW5ndGgtMTtvPj0wOy0tbylpLnBvaW50KChsPXNbb10pWzBdLGxbMV0pO2Vsc2UgcihoLngsaC5wLngsLTEsaSk7aD1oLnB9aD1oLm8scz1oLnoscD0hcH13aGlsZSghaC52KTtpLmxpbmVFbmQoKX19fSxrZz0xZTksU2c9LWtnLEFnPWZ1bmN0aW9uKCl7dmFyIHQsbixlLHI9MCxpPTAsbz05NjAsdT01MDA7cmV0dXJuIGU9e3N0cmVhbTpmdW5jdGlvbihlKXtyZXR1cm4gdCYmbj09PWU/dDp0PXNpKHIsaSxvLHUpKG49ZSl9LGV4dGVudDpmdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rYVswXVswXSxpPSthWzBdWzFdLG89K2FbMV1bMF0sdT0rYVsxXVsxXSx0PW49bnVsbCxlKTpbW3IsaV0sW28sdV1dfX19LE5nPSR2KCksRWc9ZnVuY3Rpb24odCxuKXt2YXIgZT1uWzBdLHI9blsxXSxpPVtIXyhlKSwtRl8oZSksMF0sbz0wLHU9MDtOZy5yZXNldCgpO2Zvcih2YXIgYT0wLGM9dC5sZW5ndGg7YTxjOysrYSlpZihsPShzPXRbYV0pLmxlbmd0aClmb3IodmFyIHMsbCxmPXNbbC0xXSxoPWZbMF0scD1mWzFdLzIrel8sZD1IXyhwKSx2PUZfKHApLF89MDtfPGw7KytfLGg9eSxkPXgsdj1iLGY9Zyl7dmFyIGc9c1tfXSx5PWdbMF0sbT1nWzFdLzIrel8seD1IXyhtKSxiPUZfKG0pLHc9eS1oLE09dz49MD8xOi0xLFQ9TSp3LGs9VD5DXyxTPWQqeDtpZihOZy5hZGQoVV8oUypNKkhfKFQpLHYqYitTKkZfKFQpKSksbys9az93K00qUl86dyxrXmg+PWVeeT49ZSl7dmFyIEE9Q3IoTnIoZiksTnIoZykpO1JyKEEpO3ZhciBOPUNyKGksQSk7UnIoTik7dmFyIEU9KGtedz49MD8tMToxKSpncihOWzJdKTsocj5FfHxyPT09RSYmKEFbMF18fEFbMV0pKSYmKHUrPWtedz49MD8xOi0xKX19cmV0dXJuKG88LU5ffHxvPE5fJiZOZzwtTl8pXjEmdX0sQ2c9JHYoKSxQZz17c3BoZXJlOm1yLHBvaW50Om1yLGxpbmVTdGFydDpsaSxsaW5lRW5kOm1yLHBvbHlnb25TdGFydDptcixwb2x5Z29uRW5kOm1yfSx6Zz1mdW5jdGlvbih0KXtyZXR1cm4gQ2cucmVzZXQoKSxaXyh0LFBnKSwrQ2d9LFJnPVtudWxsLG51bGxdLE9nPXt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpSZ30sTGc9ZnVuY3Rpb24odCxuKXtyZXR1cm4gUmdbMF09dCxSZ1sxXT1uLHpnKE9nKX0scWc9e0ZlYXR1cmU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gZGkodC5nZW9tZXRyeSxuKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5mZWF0dXJlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKGRpKGVbcl0uZ2VvbWV0cnksbikpcmV0dXJuITA7cmV0dXJuITF9fSxEZz17U3BoZXJlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LFBvaW50OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHZpKHQuY29vcmRpbmF0ZXMsbil9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9dC5jb29yZGluYXRlcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKHZpKGVbcl0sbikpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxuKXtyZXR1cm4gX2kodC5jb29yZGluYXRlcyxuKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuY29vcmRpbmF0ZXMscj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZihfaShlW3JdLG4pKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGdpKHQuY29vcmRpbmF0ZXMsbil9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LG4pe2Zvcih2YXIgZT10LmNvb3JkaW5hdGVzLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYoZ2koZVtyXSxuKSlyZXR1cm4hMDtyZXR1cm4hMX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXQuZ2VvbWV0cmllcyxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KWlmKGRpKGVbcl0sbikpcmV0dXJuITA7cmV0dXJuITF9fSxVZz1mdW5jdGlvbih0LG4pe3JldHVybih0JiZxZy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP3FnW3QudHlwZV06ZGkpKHQsbil9LEZnPWZ1bmN0aW9uKHQsbil7dmFyIGU9dFswXSpMXyxyPXRbMV0qTF8saT1uWzBdKkxfLG89blsxXSpMXyx1PUZfKHIpLGE9SF8ociksYz1GXyhvKSxzPUhfKG8pLGw9dSpGXyhlKSxmPXUqSF8oZSksaD1jKkZfKGkpLHA9YypIXyhpKSxkPTIqZ3IoVl8oeXIoby1yKSt1KmMqeXIoaS1lKSkpLHY9SF8oZCksXz1kP2Z1bmN0aW9uKHQpe3ZhciBuPUhfKHQqPWQpL3YsZT1IXyhkLXQpL3Yscj1lKmwrbipoLGk9ZSpmK24qcCxvPWUqYStuKnM7cmV0dXJuW1VfKGkscikqT18sVV8obyxWXyhyKnIraSppKSkqT19dfTpmdW5jdGlvbigpe3JldHVybltlKk9fLHIqT19dfTtyZXR1cm4gXy5kaXN0YW5jZT1kLF99LElnPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxqZz0kdigpLFlnPSR2KCksQmc9e3BvaW50Om1yLGxpbmVTdGFydDptcixsaW5lRW5kOm1yLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0JnLmxpbmVTdGFydD1UaSxCZy5saW5lRW5kPUFpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7QmcubGluZVN0YXJ0PUJnLmxpbmVFbmQ9QmcucG9pbnQ9bXIsamcuYWRkKHFfKFlnKSksWWcucmVzZXQoKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9amcvMjtyZXR1cm4gamcucmVzZXQoKSx0fX0sSGc9MS8wLFhnPUhnLFZnPS1IZyxXZz1WZyxHZz17cG9pbnQ6TmksbGluZVN0YXJ0Om1yLGxpbmVFbmQ6bXIscG9seWdvblN0YXJ0Om1yLHBvbHlnb25FbmQ6bXIscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9W1tIZyxYZ10sW1ZnLFdnXV07cmV0dXJuIFZnPVdnPS0oWGc9SGc9MS8wKSx0fX0sJGc9MCxaZz0wLEpnPTAsUWc9MCxLZz0wLHR5PTAsbnk9MCxleT0wLHJ5PTAsaXk9e3BvaW50OkVpLGxpbmVTdGFydDpDaSxsaW5lRW5kOlJpLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2l5LmxpbmVTdGFydD1PaSxpeS5saW5lRW5kPUxpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7aXkucG9pbnQ9RWksaXkubGluZVN0YXJ0PUNpLGl5LmxpbmVFbmQ9Uml9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PXJ5P1tueS9yeSxleS9yeV06dHk/W1FnL3R5LEtnL3R5XTpKZz9bJGcvSmcsWmcvSmddOltOYU4sTmFOXTtyZXR1cm4gJGc9Wmc9Smc9UWc9S2c9dHk9bnk9ZXk9cnk9MCx0fX07VWkucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFkaXVzPXQsdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxuKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pO2JyZWFrO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5tb3ZlVG8odCt0aGlzLl9yYWRpdXMsbiksdGhpcy5fY29udGV4dC5hcmModCxuLHRoaXMuX3JhZGl1cywwLFJfKX19LHJlc3VsdDptcn07dmFyIG95LHV5LGF5LGN5LHN5LGx5PSR2KCksZnk9e3BvaW50Om1yLGxpbmVTdGFydDpmdW5jdGlvbigpe2Z5LnBvaW50PUZpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7b3kmJklpKHV5LGF5KSxmeS5wb2ludD1tcn0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7b3k9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtveT1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0rbHk7cmV0dXJuIGx5LnJlc2V0KCksdH19O2ppLnByb3RvdHlwZT17X2NpcmNsZTpZaSg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jaXJjbGU9WWkodCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLG4pLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixuKTticmVhaztkZWZhdWx0OnRoaXMuX3N0cmluZy5wdXNoKCJNIix0LCIsIixuLHRoaXMuX2NpcmNsZSl9fSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdHJpbmcubGVuZ3RoKXt2YXIgdD10aGlzLl9zdHJpbmcuam9pbigiIik7cmV0dXJuIHRoaXMuX3N0cmluZz1bXSx0fX19O3ZhciBoeT1mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIHQmJigiZnVuY3Rpb24iPT10eXBlb2YgbyYmaS5wb2ludFJhZGl1cygrby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFpfKHQscihpKSkpLGkucmVzdWx0KCl9dmFyIHIsaSxvPTQuNTtyZXR1cm4gZS5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBaXyh0LHIoQmcpKSxCZy5yZXN1bHQoKX0sZS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiBaXyh0LHIoZnkpKSxmeS5yZXN1bHQoKX0sZS5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIFpfKHQscihHZykpLEdnLnJlc3VsdCgpfSxlLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiBaXyh0LHIoaXkpKSxpeS5yZXN1bHQoKX0sZS5wcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PW4/KHQ9bnVsbCxJZyk6KHQ9bikuc3RyZWFtLGUpOnR9LGUuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10PyhuPW51bGwsbmV3IGppKTpuZXcgVWkobj10KSwiZnVuY3Rpb24iIT10eXBlb2YgbyYmaS5wb2ludFJhZGl1cyhvKSxlKTpufSxlLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KGkucG9pbnRSYWRpdXMoK3QpLCt0KSxlKTpvfSxlLnByb2plY3Rpb24odCkuY29udGV4dChuKX0scHk9ZnVuY3Rpb24odCxuLGUscil7cmV0dXJuIGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gdShuLGUpe3ZhciByPWkobixlKTt0KG49clswXSxlPXJbMV0pJiZvLnBvaW50KG4sZSl9ZnVuY3Rpb24gYSh0LG4pe3ZhciBlPWkodCxuKTtfLnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gYygpe2IucG9pbnQ9YSxfLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHMoKXtiLnBvaW50PXUsXy5saW5lRW5kKCl9ZnVuY3Rpb24gbCh0LG4pe3YucHVzaChbdCxuXSk7dmFyIGU9aSh0LG4pO20ucG9pbnQoZVswXSxlWzFdKX1mdW5jdGlvbiBmKCl7bS5saW5lU3RhcnQoKSx2PVtdfWZ1bmN0aW9uIGgoKXtsKHZbMF1bMF0sdlswXVsxXSksbS5saW5lRW5kKCk7dmFyIHQsbixlLHIsaT1tLmNsZWFuKCksdT15LnJlc3VsdCgpLGE9dS5sZW5ndGg7aWYodi5wb3AoKSxwLnB1c2godiksdj1udWxsLGEpaWYoMSZpKXtpZihlPXVbMF0sKG49ZS5sZW5ndGgtMSk+MCl7Zm9yKHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLG8ubGluZVN0YXJ0KCksdD0wO3Q8bjsrK3Qpby5wb2ludCgocj1lW3RdKVswXSxyWzFdKTtvLmxpbmVFbmQoKX19ZWxzZSBhPjEmJjImaSYmdS5wdXNoKHUucG9wKCkuY29uY2F0KHUuc2hpZnQoKSkpLGQucHVzaCh1LmZpbHRlcihCaSkpfXZhciBwLGQsdixfPW4obyksZz1pLmludmVydChyWzBdLHJbMV0pLHk9YmcoKSxtPW4oeSkseD0hMSxiPXtwb2ludDp1LGxpbmVTdGFydDpjLGxpbmVFbmQ6cyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtiLnBvaW50PWwsYi5saW5lU3RhcnQ9ZixiLmxpbmVFbmQ9aCxkPVtdLHA9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtiLnBvaW50PXUsYi5saW5lU3RhcnQ9YyxiLmxpbmVFbmQ9cyxkPWxsKGQpO3ZhciB0PUVnKHAsZyk7ZC5sZW5ndGg/KHh8fChvLnBvbHlnb25TdGFydCgpLHg9ITApLFRnKGQsSGksdCxlLG8pKTp0JiYoeHx8KG8ucG9seWdvblN0YXJ0KCkseD0hMCksby5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpKSx4JiYoby5wb2x5Z29uRW5kKCkseD0hMSksZD1wPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe28ucG9seWdvblN0YXJ0KCksby5saW5lU3RhcnQoKSxlKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpLG8ucG9seWdvbkVuZCgpfX07cmV0dXJuIGJ9fSxkeT1weShmdW5jdGlvbigpe3JldHVybiEwfSxYaSxXaSxbLUNfLC1QX10pLHZ5PWZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZShlLHIsaSxvKXtvaShvLHQsbixpLGUscil9ZnVuY3Rpb24gcih0LG4pe3JldHVybiBGXyh0KSpGXyhuKT5hfWZ1bmN0aW9uIGkodCl7dmFyIG4sZSxpLGEsbDtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7YT1pPSExLGw9MX0scG9pbnQ6ZnVuY3Rpb24oZixoKXt2YXIgcCxkPVtmLGhdLHY9cihmLGgpLF89Yz92PzA6dShmLGgpOnY/dShmKyhmPDA/Q186LUNfKSxoKTowO2lmKCFuJiYoYT1pPXYpJiZ0LmxpbmVTdGFydCgpLHYhPT1pJiYocD1vKG4sZCksKE1nKG4scCl8fE1nKGQscCkpJiYoZFswXSs9Tl8sZFsxXSs9Tl8sdj1yKGRbMF0sZFsxXSkpKSx2IT09aSlsPTAsdj8odC5saW5lU3RhcnQoKSxwPW8oZCxuKSx0LnBvaW50KHBbMF0scFsxXSkpOihwPW8obixkKSx0LnBvaW50KHBbMF0scFsxXSksdC5saW5lRW5kKCkpLG49cDtlbHNlIGlmKHMmJm4mJmNedil7dmFyIGc7XyZlfHwhKGc9byhkLG4sITApKXx8KGw9MCxjPyh0LmxpbmVTdGFydCgpLHQucG9pbnQoZ1swXVswXSxnWzBdWzFdKSx0LnBvaW50KGdbMV1bMF0sZ1sxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KGdbMV1bMF0sZ1sxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KGdbMF1bMF0sZ1swXVsxXSkpKX0hdnx8biYmTWcobixkKXx8dC5wb2ludChkWzBdLGRbMV0pLG49ZCxpPXYsZT1ffSxsaW5lRW5kOmZ1bmN0aW9uKCl7aSYmdC5saW5lRW5kKCksbj1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBsfChhJiZpKTw8MX19fWZ1bmN0aW9uIG8odCxuLGUpe3ZhciByPU5yKHQpLGk9TnIobiksbz1bMSwwLDBdLHU9Q3IocixpKSxjPUVyKHUsdSkscz11WzBdLGw9Yy1zKnM7aWYoIWwpcmV0dXJuIWUmJnQ7dmFyIGY9YSpjL2wsaD0tYSpzL2wscD1DcihvLHUpLGQ9enIobyxmKSx2PXpyKHUsaCk7UHIoZCx2KTt2YXIgXz1wLGc9RXIoZCxfKSx5PUVyKF8sXyksbT1nKmcteSooRXIoZCxkKS0xKTtpZighKG08MCkpe3ZhciB4PVZfKG0pLGI9enIoXywoLWcteCkveSk7aWYoUHIoYixkKSxiPUFyKGIpLCFlKXJldHVybiBiO3ZhciB3LE09dFswXSxUPW5bMF0saz10WzFdLFM9blsxXTtUPE0mJih3PU0sTT1ULFQ9dyk7dmFyIEE9VC1NLE49cV8oQS1DXyk8Tl8sRT1OfHxBPE5fO2lmKCFOJiZTPGsmJih3PWssaz1TLFM9dyksRT9OP2srUz4wXmJbMV08KHFfKGJbMF0tTSk8Tl8/azpTKTprPD1iWzFdJiZiWzFdPD1TOkE+Q19eKE08PWJbMF0mJmJbMF08PVQpKXt2YXIgQz16cihfLCgtZyt4KS95KTtyZXR1cm4gUHIoQyxkKSxbYixBcihDKV19fX1mdW5jdGlvbiB1KG4sZSl7dmFyIHI9Yz90OkNfLXQsaT0wO3JldHVybiBuPC1yP2l8PTE6bj5yJiYoaXw9MiksZTwtcj9pfD00OmU+ciYmKGl8PTgpLGl9dmFyIGE9Rl8odCksYz1hPjAscz1xXyhhKT5OXztyZXR1cm4gcHkocixpLGUsYz9bMCwtdF06Wy1DXyx0LUNfXSl9LF95PWZ1bmN0aW9uKHQpe3JldHVybntzdHJlYW06R2kodCl9fTskaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOiRpLHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5zdHJlYW0ucG9pbnQodCxuKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O3ZhciBneT0xNix5eT1GXygzMCpMXyksbXk9ZnVuY3Rpb24odCxuKXtyZXR1cm4rbj9LaSh0LG4pOlFpKHQpfSx4eT1HaSh7cG9pbnQ6ZnVuY3Rpb24odCxuKXt0aGlzLnN0cmVhbS5wb2ludCh0KkxfLG4qTF8pfX0pLGJ5PWZ1bmN0aW9uKCl7cmV0dXJuIGVvKGlvKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfSx3eT1mdW5jdGlvbigpe3JldHVybiBieSgpLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCkudHJhbnNsYXRlKFs0ODAsMjUwXSkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pfSxNeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIG49dFswXSxlPXRbMV07cmV0dXJuIGE9bnVsbCxpLnBvaW50KG4sZSksYXx8KG8ucG9pbnQobixlKSxhKXx8KHUucG9pbnQobixlKSxhKX1mdW5jdGlvbiBuKCl7cmV0dXJuIGU9cj1udWxsLHR9dmFyIGUscixpLG8sdSxhLGM9d3koKSxzPWJ5KCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxsPWJ5KCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGY9e3BvaW50OmZ1bmN0aW9uKHQsbil7YT1bdCxuXX19O3JldHVybiB0LmludmVydD1mdW5jdGlvbih0KXt2YXIgbj1jLnNjYWxlKCksZT1jLnRyYW5zbGF0ZSgpLHI9KHRbMF0tZVswXSkvbixpPSh0WzFdLWVbMV0pL247cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZyPj0tLjQyNSYmcjwtLjIxND9zOmk+PS4xNjYmJmk8LjIzNCYmcj49LS4yMTQmJnI8LS4xMTU/bDpjKS5pbnZlcnQodCl9LHQuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBlJiZyPT09dD9lOmU9b28oW2Muc3RyZWFtKHI9dCkscy5zdHJlYW0odCksbC5zdHJlYW0odCldKX0sdC5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGMucHJlY2lzaW9uKHQpLHMucHJlY2lzaW9uKHQpLGwucHJlY2lzaW9uKHQpLG4oKSk6Yy5wcmVjaXNpb24oKX0sdC5zY2FsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYy5zY2FsZShuKSxzLnNjYWxlKC4zNSpuKSxsLnNjYWxlKG4pLHQudHJhbnNsYXRlKGMudHJhbnNsYXRlKCkpKTpjLnNjYWxlKCl9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBjLnRyYW5zbGF0ZSgpO3ZhciBlPWMuc2NhbGUoKSxyPSt0WzBdLGE9K3RbMV07cmV0dXJuIGk9Yy50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW3ItLjQ1NSplLGEtLjIzOCplXSxbcisuNDU1KmUsYSsuMjM4KmVdXSkuc3RyZWFtKGYpLG89cy50cmFuc2xhdGUoW3ItLjMwNyplLGErLjIwMSplXSkuY2xpcEV4dGVudChbW3ItLjQyNSplK05fLGErLjEyKmUrTl9dLFtyLS4yMTQqZS1OXyxhKy4yMzQqZS1OX11dKS5zdHJlYW0oZiksdT1sLnRyYW5zbGF0ZShbci0uMjA1KmUsYSsuMjEyKmVdKS5jbGlwRXh0ZW50KFtbci0uMjE0KmUrTl8sYSsuMTY2KmUrTl9dLFtyLS4xMTUqZS1OXyxhKy4yMzQqZS1OX11dKS5zdHJlYW0oZiksbigpfSx0LmZpdEV4dGVudD1mdW5jdGlvbihuLGUpe3JldHVybiBaaSh0LG4sZSl9LHQuZml0U2l6ZT1mdW5jdGlvbihuLGUpe3JldHVybiBKaSh0LG4sZSl9LHQuc2NhbGUoMTA3MCl9LFR5PXVvKGZ1bmN0aW9uKHQpe3JldHVybiBWXygyLygxK3QpKX0pO1R5LmludmVydD1hbyhmdW5jdGlvbih0KXtyZXR1cm4gMipncih0LzIpfSk7dmFyIGt5PWZ1bmN0aW9uKCl7cmV0dXJuIHRvKFR5KS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sU3k9dW8oZnVuY3Rpb24odCl7cmV0dXJuKHQ9X3IodCkpJiZ0L0hfKHQpfSk7U3kuaW52ZXJ0PWFvKGZ1bmN0aW9uKHQpe3JldHVybiB0fSk7dmFyIEF5PWZ1bmN0aW9uKCl7cmV0dXJuIHRvKFN5KS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9O2NvLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblt0LDIqRF8oal8obikpLVBfXX07dmFyIE55PWZ1bmN0aW9uKCl7cmV0dXJuIHNvKGNvKS5zY2FsZSg5NjEvUl8pfSxFeT1mdW5jdGlvbigpe3JldHVybiBlbyhmbykuc2NhbGUoMTA5LjUpLnBhcmFsbGVscyhbMzAsMzBdKX07aG8uaW52ZXJ0PWhvO3ZhciBDeT1mdW5jdGlvbigpe3JldHVybiB0byhobykuc2NhbGUoMTUyLjYzKX0sUHk9ZnVuY3Rpb24oKXtyZXR1cm4gZW8ocG8pLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9O3ZvLmludmVydD1hbyhEXyk7dmFyIHp5PWZ1bmN0aW9uKCl7cmV0dXJuIHRvKHZvKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfSxSeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gaT1vPW51bGwsdX12YXIgbixlLHIsaSxvLHUsYT0xLGM9MCxzPTAsbD0xLGY9MSxoPUlnLHA9bnVsbCxkPUlnO3JldHVybiB1PXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIGkmJm89PT10P2k6aT1oKGQobz10KSl9LGNsaXBFeHRlbnQ6ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9bnVsbD09aT8ocD1uPWU9cj1udWxsLElnKTpzaShwPStpWzBdWzBdLG49K2lbMF1bMV0sZT0raVsxXVswXSxyPStpWzFdWzFdKSx0KCkpOm51bGw9PXA/bnVsbDpbW3Asbl0sW2Uscl1dfSxzY2FsZTpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1fbygoYT0rbikqbCxhKmYsYyxzKSx0KCkpOmF9LHRyYW5zbGF0ZTpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1fbyhhKmwsYSpmLGM9K25bMF0scz0rblsxXSksdCgpKTpbYyxzXX0scmVmbGVjdFg6ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9X28oYSoobD1uPy0xOjEpLGEqZixjLHMpLHQoKSk6bDwwfSxyZWZsZWN0WTpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1fbyhhKmwsYSooZj1uPy0xOjEpLGMscyksdCgpKTpmPDB9LGZpdEV4dGVudDpmdW5jdGlvbih0LG4pe3JldHVybiBaaSh1LHQsbil9LGZpdFNpemU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gSmkodSx0LG4pfX19O2dvLmludmVydD1hbyhncik7dmFyIE95PWZ1bmN0aW9uKCl7cmV0dXJuIHRvKGdvKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK05fKX07eW8uaW52ZXJ0PWFvKGZ1bmN0aW9uKHQpe3JldHVybiAyKkRfKHQpfSk7dmFyIEx5PWZ1bmN0aW9uKCl7cmV0dXJuIHRvKHlvKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfTttby5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm5bLW4sMipEXyhqXyh0KSktUF9dfTt2YXIgcXk9ZnVuY3Rpb24oKXt2YXIgdD1zbyhtbyksbj10LmNlbnRlcixlPXQucm90YXRlO3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKFstdFsxXSx0WzBdXSk6KHQ9bigpLFt0WzFdLC10WzBdXSl9LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKToodD1lKCksW3RbMF0sdFsxXSx0WzJdLTkwXSl9LGUoWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfSxEeT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIG8sdT0wO3QuZWFjaEFmdGVyKGZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hpbGRyZW47ZT8odC54PWJvKGUpLHQueT1NbyhlKSk6KHQueD1vP3UrPW4odCxvKTowLHQueT0wLG89dCl9KTt2YXIgYT1rbyh0KSxjPVNvKHQpLHM9YS54LW4oYSxjKS8yLGw9Yy54K24oYyxhKS8yO3JldHVybiB0LmVhY2hBZnRlcihpP2Z1bmN0aW9uKG4pe24ueD0obi54LXQueCkqZSxuLnk9KHQueS1uLnkpKnJ9OmZ1bmN0aW9uKG4pe24ueD0obi54LXMpLyhsLXMpKmUsbi55PSgxLSh0Lnk/bi55L3QueToxKSkqcn0pfXZhciBuPXhvLGU9MSxyPTEsaT0hMTtyZXR1cm4gdC5zZXBhcmF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSExLGU9K25bMF0scj0rblsxXSx0KTppP251bGw6W2Uscl19LHQubm9kZVNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ITAsZT0rblswXSxyPStuWzFdLHQpOmk/W2Uscl06bnVsbH0sdH0sVXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoQW8pfSxGeT1mdW5jdGlvbih0KXt2YXIgbixlLHIsaSxvPXRoaXMsdT1bb107ZG8gZm9yKG49dS5yZXZlcnNlKCksdT1bXTtvPW4ucG9wKCk7KWlmKHQobyksZT1vLmNoaWxkcmVuKWZvcihyPTAsaT1lLmxlbmd0aDtyPGk7KytyKXUucHVzaChlW3JdKTt3aGlsZSh1Lmxlbmd0aCk7cmV0dXJuIHRoaXN9LEl5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9dGhpcyxpPVtyXTtyPWkucG9wKCk7KWlmKHQociksbj1yLmNoaWxkcmVuKWZvcihlPW4ubGVuZ3RoLTE7ZT49MDstLWUpaS5wdXNoKG5bZV0pO3JldHVybiB0aGlzfSxqeT1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyLGk9dGhpcyxvPVtpXSx1PVtdO2k9by5wb3AoKTspaWYodS5wdXNoKGkpLG49aS5jaGlsZHJlbilmb3IoZT0wLHI9bi5sZW5ndGg7ZTxyOysrZSlvLnB1c2gobltlXSk7Zm9yKDtpPXUucG9wKCk7KXQoaSk7cmV0dXJuIHRoaXN9LFl5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbihuKXtmb3IodmFyIGU9K3Qobi5kYXRhKXx8MCxyPW4uY2hpbGRyZW4saT1yJiZyLmxlbmd0aDstLWk+PTA7KWUrPXJbaV0udmFsdWU7bi52YWx1ZT1lfSl9LEJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obil7bi5jaGlsZHJlbiYmbi5jaGlsZHJlbi5zb3J0KHQpfSl9LEh5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLGU9Tm8obix0KSxyPVtuXTtuIT09ZTspbj1uLnBhcmVudCxyLnB1c2gobik7Zm9yKHZhciBpPXIubGVuZ3RoO3QhPT1lOylyLnNwbGljZShpLDAsdCksdD10LnBhcmVudDtyZXR1cm4gcn0sWHk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxuPVt0XTt0PXQucGFyZW50OyluLnB1c2godCk7cmV0dXJuIG59LFZ5PWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihuKXt0LnB1c2gobil9KSx0fSxXeT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24obil7bi5jaGlsZHJlbnx8dC5wdXNoKG4pfSksdH0sR3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49W107cmV0dXJuIHQuZWFjaChmdW5jdGlvbihlKXtlIT09dCYmbi5wdXNoKHtzb3VyY2U6ZS5wYXJlbnQsdGFyZ2V0OmV9KX0pLG59O09vLnByb3RvdHlwZT1Fby5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk9vLGNvdW50OlV5LGVhY2g6RnksZWFjaEFmdGVyOmp5LGVhY2hCZWZvcmU6SXksc3VtOll5LHNvcnQ6QnkscGF0aDpIeSxhbmNlc3RvcnM6WHksZGVzY2VuZGFudHM6VnksbGVhdmVzOld5LGxpbmtzOkd5LGNvcHk6Q299O3ZhciAkeT1mdW5jdGlvbih0KXtmb3IodmFyIG4sZT0odD10LnNsaWNlKCkpLmxlbmd0aCxyPW51bGwsaT1yO2U7KXt2YXIgbz1uZXcgTG8odFtlLTFdKTtpPWk/aS5uZXh0PW86cj1vLHRbbl09dFstLWVdfXJldHVybntoZWFkOnIsdGFpbDppfX0sWnk9ZnVuY3Rpb24odCl7cmV0dXJuIERvKCR5KHQpLFtdKX0sSnk9ZnVuY3Rpb24odCl7cmV0dXJuIFhvKHQpLHR9LFF5PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sS3k9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiB0Lng9ZS8yLHQueT1yLzIsbj90LmVhY2hCZWZvcmUoWm8obikpLmVhY2hBZnRlcihKbyhpLC41KSkuZWFjaEJlZm9yZShRbygxKSk6dC5lYWNoQmVmb3JlKFpvKCRvKSkuZWFjaEFmdGVyKEpvKEdvLDEpKS5lYWNoQWZ0ZXIoSm8oaSx0LnIvTWF0aC5taW4oZSxyKSkpLmVhY2hCZWZvcmUoUW8oTWF0aC5taW4oZSxyKS8oMip0LnIpKSksdH12YXIgbj1udWxsLGU9MSxyPTEsaT1HbztyZXR1cm4gdC5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Vm8oZSksdCk6bn0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStuWzBdLHI9K25bMV0sdCk6W2Uscl19LHQucGFkZGluZz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOlF5KCtuKSx0KTppfSx0fSx0bT1mdW5jdGlvbih0KXt0LngwPU1hdGgucm91bmQodC54MCksdC55MD1NYXRoLnJvdW5kKHQueTApLHQueDE9TWF0aC5yb3VuZCh0LngxKSx0LnkxPU1hdGgucm91bmQodC55MSl9LG5tPWZ1bmN0aW9uKHQsbixlLHIsaSl7Zm9yKHZhciBvLHU9dC5jaGlsZHJlbixhPS0xLGM9dS5sZW5ndGgscz10LnZhbHVlJiYoci1uKS90LnZhbHVlOysrYTxjOylvPXVbYV0sby55MD1lLG8ueTE9aSxvLngwPW4sby54MT1uKz1vLnZhbHVlKnN9LGVtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgdT10LmhlaWdodCsxO3JldHVybiB0LngwPXQueTA9aSx0LngxPWUsdC55MT1yL3UsdC5lYWNoQmVmb3JlKG4ocix1KSksbyYmdC5lYWNoQmVmb3JlKHRtKSx0fWZ1bmN0aW9uIG4odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmbm0oZSxlLngwLHQqKGUuZGVwdGgrMSkvbixlLngxLHQqKGUuZGVwdGgrMikvbik7dmFyIHI9ZS54MCxvPWUueTAsdT1lLngxLWksYT1lLnkxLWk7dTxyJiYocj11PShyK3UpLzIpLGE8byYmKG89YT0obythKS8yKSxlLngwPXIsZS55MD1vLGUueDE9dSxlLnkxPWF9fXZhciBlPTEscj0xLGk9MCxvPSExO3JldHVybiB0LnJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEhbix0KTpvfSx0LnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K25bMF0scj0rblsxXSx0KTpbZSxyXX0sdC5wYWRkaW5nPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStuLHQpOml9LHR9LHJtPSIkIixpbT17ZGVwdGg6LTF9LG9tPXt9LHVtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgcixpLG8sdSxhLGMscyxsPXQubGVuZ3RoLGY9bmV3IEFycmF5KGwpLGg9e307Zm9yKGk9MDtpPGw7KytpKXI9dFtpXSxhPWZbaV09bmV3IE9vKHIpLG51bGwhPShjPW4ocixpLHQpKSYmKGMrPSIiKSYmKHM9cm0rKGEuaWQ9YyksaFtzXT1zIGluIGg/b206YSk7Zm9yKGk9MDtpPGw7KytpKWlmKGE9ZltpXSxjPWUodFtpXSxpLHQpLG51bGwhPWMmJihjKz0iIikpe2lmKHU9aFtybStjXSwhdSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrYyk7aWYodT09PW9tKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2MpO3UuY2hpbGRyZW4/dS5jaGlsZHJlbi5wdXNoKGEpOnUuY2hpbGRyZW49W2FdLGEucGFyZW50PXV9ZWxzZXtpZihvKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtvPWF9aWYoIW8pdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYoby5wYXJlbnQ9aW0sby5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuZGVwdGg9dC5wYXJlbnQuZGVwdGgrMSwtLWx9KS5lYWNoQmVmb3JlKFJvKSxvLnBhcmVudD1udWxsLGw+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIG99dmFyIG49S28sZT10dTtyZXR1cm4gdC5pZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1XbyhlKSx0KTpufSx0LnBhcmVudElkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVdvKG4pLHQpOmV9LHR9O2F1LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE9vLnByb3RvdHlwZSk7dmFyIGFtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgcj1jdSh0KTtpZihyLmVhY2hBZnRlcihuKSxyLnBhcmVudC5tPS1yLnosci5lYWNoQmVmb3JlKGUpLGMpdC5lYWNoQmVmb3JlKGkpO2Vsc2V7dmFyIHM9dCxsPXQsZj10O3QuZWFjaEJlZm9yZShmdW5jdGlvbih0KXt0Lng8cy54JiYocz10KSx0Lng+bC54JiYobD10KSx0LmRlcHRoPmYuZGVwdGgmJihmPXQpfSk7dmFyIGg9cz09PWw/MTpvKHMsbCkvMixwPWgtcy54LGQ9dS8obC54K2grcCksdj1hLyhmLmRlcHRofHwxKTt0LmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC54PSh0LngrcCkqZCx0Lnk9dC5kZXB0aCp2fSl9cmV0dXJuIHR9ZnVuY3Rpb24gbih0KXt2YXIgbj10LmNoaWxkcmVuLGU9dC5wYXJlbnQuY2hpbGRyZW4saT10Lmk/ZVt0LmktMV06bnVsbDtpZihuKXtvdSh0KTt2YXIgdT0oblswXS56K25bbi5sZW5ndGgtMV0ueikvMjtpPyh0Lno9aS56K28odC5fLGkuXyksdC5tPXQuei11KTp0Lno9dX1lbHNlIGkmJih0Lno9aS56K28odC5fLGkuXykpO3QucGFyZW50LkE9cih0LGksdC5wYXJlbnQuQXx8ZVswXSl9ZnVuY3Rpb24gZSh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gcih0LG4sZSl7aWYobil7Zm9yKHZhciByLGk9dCx1PXQsYT1uLGM9aS5wYXJlbnQuY2hpbGRyZW5bMF0scz1pLm0sbD11Lm0sZj1hLm0saD1jLm07YT1ydShhKSxpPWV1KGkpLGEmJmk7KWM9ZXUoYyksdT1ydSh1KSx1LmE9dCxyPWEueitmLWkuei1zK28oYS5fLGkuXykscj4wJiYoaXUodXUoYSx0LGUpLHQscikscys9cixsKz1yKSxmKz1hLm0scys9aS5tLGgrPWMubSxsKz11Lm07YSYmIXJ1KHUpJiYodS50PWEsdS5tKz1mLWwpLGkmJiFldShjKSYmKGMudD1pLGMubSs9cy1oLGU9dCl9cmV0dXJuIGV9ZnVuY3Rpb24gaSh0KXt0LngqPXUsdC55PXQuZGVwdGgqYX12YXIgbz1udSx1PTEsYT0xLGM9bnVsbDtyZXR1cm4gdC5zZXBhcmF0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW4sdCk6b30sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSExLHU9K25bMF0sYT0rblsxXSx0KTpjP251bGw6W3UsYV19LHQubm9kZVNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ITAsdT0rblswXSxhPStuWzFdLHQpOmM/W3UsYV06bnVsbH0sdH0sY209ZnVuY3Rpb24odCxuLGUscixpKXtmb3IodmFyIG8sdT10LmNoaWxkcmVuLGE9LTEsYz11Lmxlbmd0aCxzPXQudmFsdWUmJihpLWUpL3QudmFsdWU7KythPGM7KW89dVthXSxvLngwPW4sby54MT1yLG8ueTA9ZSxvLnkxPWUrPW8udmFsdWUqc30sc209KDErTWF0aC5zcXJ0KDUpKS8yLGxtPWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0LGUscixpLG8pe3N1KG4sdCxlLHIsaSxvKX1yZXR1cm4gZS5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gdCgobj0rbik+MT9uOjEpfSxlfShzbSksZm09ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiB0LngwPXQueTA9MCx0LngxPWksdC55MT1vLHQuZWFjaEJlZm9yZShuKSx1PVswXSxyJiZ0LmVhY2hCZWZvcmUodG0pLHR9ZnVuY3Rpb24gbih0KXt2YXIgbj11W3QuZGVwdGhdLHI9dC54MCtuLGk9dC55MCtuLG89dC54MS1uLGg9dC55MS1uO288ciYmKHI9bz0ocitvKS8yKSxoPGkmJihpPWg9KGkraCkvMiksdC54MD1yLHQueTA9aSx0LngxPW8sdC55MT1oLHQuY2hpbGRyZW4mJihuPXVbdC5kZXB0aCsxXT1hKHQpLzIscis9Zih0KS1uLGkrPWModCktbixvLT1zKHQpLW4saC09bCh0KS1uLG88ciYmKHI9bz0ocitvKS8yKSxoPGkmJihpPWg9KGkraCkvMiksZSh0LHIsaSxvLGgpKX12YXIgZT1sbSxyPSExLGk9MSxvPTEsdT1bMF0sYT1HbyxjPUdvLHM9R28sbD1HbyxmPUdvO3JldHVybiB0LnJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSEhbix0KTpyfSx0LnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K25bMF0sbz0rblsxXSx0KTpbaSxvXX0sdC50aWxlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVdvKG4pLHQpOmV9LHQucGFkZGluZz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90LnBhZGRpbmdJbm5lcihuKS5wYWRkaW5nT3V0ZXIobik6dC5wYWRkaW5nSW5uZXIoKX0sdC5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpReSgrbiksdCk6YX0sdC5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dC5wYWRkaW5nVG9wKG4pLnBhZGRpbmdSaWdodChuKS5wYWRkaW5nQm90dG9tKG4pLnBhZGRpbmdMZWZ0KG4pOnQucGFkZGluZ1RvcCgpfSx0LnBhZGRpbmdUb3A9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpReSgrbiksdCk6Y30sdC5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpReSgrbiksdCk6c30sdC5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246UXkoK24pLHQpOmx9LHQucGFkZGluZ0xlZnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpReSgrbiksdCk6Zn0sdH0saG09ZnVuY3Rpb24odCxuLGUscixpKXtmdW5jdGlvbiBvKHQsbixlLHIsaSx1LGEpe2lmKHQ+PW4tMSl7dmFyIHM9Y1t0XTtyZXR1cm4gcy54MD1yLHMueTA9aSxzLngxPXUscy55MT1hLHZvaWQgMH1mb3IodmFyIGY9bFt0XSxoPWUvMitmLHA9dCsxLGQ9bi0xO3A8ZDspe3ZhciB2PXArZD4+PjE7bFt2XTxoP3A9disxOmQ9dn1oLWxbcC0xXTxsW3BdLWgmJnQrMTxwJiYtLXA7dmFyIF89bFtwXS1mLGc9ZS1fO2lmKHUtcj5hLWkpe3ZhciB5PShyKmcrdSpfKS9lO28odCxwLF8scixpLHksYSksbyhwLG4sZyx5LGksdSxhKX1lbHNle3ZhciBtPShpKmcrYSpfKS9lO28odCxwLF8scixpLHUsbSksbyhwLG4sZyxyLG0sdSxhKX19dmFyIHUsYSxjPXQuY2hpbGRyZW4scz1jLmxlbmd0aCxsPW5ldyBBcnJheShzKzEpO2ZvcihsWzBdPWE9dT0wO3U8czsrK3UpbFt1KzFdPWErPWNbdV0udmFsdWU7bygwLHMsdC52YWx1ZSxuLGUscixpKX0scG09ZnVuY3Rpb24odCxuLGUscixpKXsoMSZ0LmRlcHRoP2NtOm5tKSh0LG4sZSxyLGkpfSxkbT1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCxlLHIsaSxvKXsKaWYoKHU9dC5fc3F1YXJpZnkpJiZ1LnJhdGlvPT09bilmb3IodmFyIHUsYSxjLHMsbCxmPS0xLGg9dS5sZW5ndGgscD10LnZhbHVlOysrZjxoOyl7Zm9yKGE9dVtmXSxjPWEuY2hpbGRyZW4scz1hLnZhbHVlPTAsbD1jLmxlbmd0aDtzPGw7KytzKWEudmFsdWUrPWNbc10udmFsdWU7YS5kaWNlP25tKGEsZSxyLGkscis9KG8tcikqYS52YWx1ZS9wKTpjbShhLGUscixlKz0oaS1lKSphLnZhbHVlL3AsbykscC09YS52YWx1ZX1lbHNlIHQuX3NxdWFyaWZ5PXU9c3Uobix0LGUscixpLG8pLHUucmF0aW89bn1yZXR1cm4gZS5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gdCgobj0rbik+MT9uOjEpfSxlfShzbSksdm09ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9LTEscj10Lmxlbmd0aCxpPXRbci0xXSxvPTA7KytlPHI7KW49aSxpPXRbZV0sbys9blsxXSppWzBdLW5bMF0qaVsxXTtyZXR1cm4gby8yfSxfbT1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyPS0xLGk9dC5sZW5ndGgsbz0wLHU9MCxhPXRbaS0xXSxjPTA7KytyPGk7KW49YSxhPXRbcl0sYys9ZT1uWzBdKmFbMV0tYVswXSpuWzFdLG8rPShuWzBdK2FbMF0pKmUsdSs9KG5bMV0rYVsxXSkqZTtyZXR1cm4gYyo9Myxbby9jLHUvY119LGdtPWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4oblswXS10WzBdKSooZVsxXS10WzFdKS0oblsxXS10WzFdKSooZVswXS10WzBdKX0seW09ZnVuY3Rpb24odCl7aWYoKGU9dC5sZW5ndGgpPDMpcmV0dXJuIG51bGw7dmFyIG4sZSxyPW5ldyBBcnJheShlKSxpPW5ldyBBcnJheShlKTtmb3Iobj0wO248ZTsrK24pcltuXT1bK3Rbbl1bMF0sK3Rbbl1bMV0sbl07Zm9yKHIuc29ydChsdSksbj0wO248ZTsrK24paVtuXT1bcltuXVswXSwtcltuXVsxXV07dmFyIG89ZnUociksdT1mdShpKSxhPXVbMF09PT1vWzBdLGM9dVt1Lmxlbmd0aC0xXT09PW9bby5sZW5ndGgtMV0scz1bXTtmb3Iobj1vLmxlbmd0aC0xO24+PTA7LS1uKXMucHVzaCh0W3Jbb1tuXV1bMl1dKTtmb3Iobj0rYTtuPHUubGVuZ3RoLWM7KytuKXMucHVzaCh0W3JbdVtuXV1bMl1dKTtyZXR1cm4gc30sbW09ZnVuY3Rpb24odCxuKXtmb3IodmFyIGUscixpPXQubGVuZ3RoLG89dFtpLTFdLHU9blswXSxhPW5bMV0sYz1vWzBdLHM9b1sxXSxsPSExLGY9MDtmPGk7KytmKW89dFtmXSxlPW9bMF0scj1vWzFdLHI+YSE9cz5hJiZ1PChjLWUpKihhLXIpLyhzLXIpK2UmJihsPSFsKSxjPWUscz1yO3JldHVybiBsfSx4bT1mdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyPS0xLGk9dC5sZW5ndGgsbz10W2ktMV0sdT1vWzBdLGE9b1sxXSxjPTA7KytyPGk7KW49dSxlPWEsbz10W3JdLHU9b1swXSxhPW9bMV0sbi09dSxlLT1hLGMrPU1hdGguc3FydChuKm4rZSplKTtyZXR1cm4gY30sYm09W10uc2xpY2Usd209e307aHUucHJvdG90eXBlPXl1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aHUsZGVmZXI6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHR8fHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yO2lmKG51bGwhPXRoaXMuX2Vycm9yKXJldHVybiB0aGlzO3ZhciBuPWJtLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBuLnB1c2godCksKyt0aGlzLl93YWl0aW5nLHRoaXMuX3Rhc2tzLnB1c2gobikscHUodGhpcyksdGhpc30sYWJvcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dGhpcy5fZXJyb3ImJl91KHRoaXMsbmV3IEVycm9yKCJhYm9ydCIpKSx0aGlzfSxhd2FpdDpmdW5jdGlvbih0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8dGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuX2NhbGw9ZnVuY3Rpb24obixlKXt0LmFwcGx5KG51bGwsW25dLmNvbmNhdChlKSl9LGd1KHRoaXMpLHRoaXN9LGF3YWl0QWxsOmZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy5fY2FsbD10LGd1KHRoaXMpLHRoaXN9fTt2YXIgTW09ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sMT09PWFyZ3VtZW50cy5sZW5ndGg/KG49dCx0PTApOm4tPXQsZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yYW5kb20oKSpuK3R9fSxUbT1mdW5jdGlvbih0LG4pe3ZhciBlLHI7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLGZ1bmN0aW9uKCl7dmFyIGk7aWYobnVsbCE9ZSlpPWUsZT1udWxsO2Vsc2UgZG8gZT0yKk1hdGgucmFuZG9tKCktMSxpPTIqTWF0aC5yYW5kb20oKS0xLHI9ZSplK2kqaTt3aGlsZSghcnx8cj4xKTtyZXR1cm4gdCtuKmkqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKHIpL3IpfX0sa209ZnVuY3Rpb24oKXt2YXIgdD1UbS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKHQoKSl9fSxTbT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49MCxlPTA7ZTx0OysrZSluKz1NYXRoLnJhbmRvbSgpO3JldHVybiBufX0sQW09ZnVuY3Rpb24odCl7dmFyIG49U20odCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4oKS90fX0sTm09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtTWF0aC5yYW5kb20oKSkvdH19LEVtPWZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZSh0KXt2YXIgbixlPXMuc3RhdHVzO2lmKCFlJiZ4dShzKXx8ZT49MjAwJiZlPDMwMHx8MzA0PT09ZSl7aWYobyl0cnl7bj1vLmNhbGwocixzKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBhLmNhbGwoImVycm9yIixyLHQpfWVsc2Ugbj1zO2EuY2FsbCgibG9hZCIscixuKX1lbHNlIGEuY2FsbCgiZXJyb3IiLHIsdCl9dmFyIHIsaSxvLHUsYT1kKCJiZWZvcmVzZW5kIiwicHJvZ3Jlc3MiLCJsb2FkIiwiZXJyb3IiKSxjPWplKCkscz1uZXcgWE1MSHR0cFJlcXVlc3QsbD1udWxsLGY9bnVsbCxoPTA7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBYRG9tYWluUmVxdWVzdHx8IndpdGhDcmVkZW50aWFscyJpbiBzfHwhL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KHQpfHwocz1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gcz9zLm9ubG9hZD1zLm9uZXJyb3I9cy5vbnRpbWVvdXQ9ZTpzLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbih0KXtzLnJlYWR5U3RhdGU+MyYmZSh0KX0scy5vbnByb2dyZXNzPWZ1bmN0aW9uKHQpe2EuY2FsbCgicHJvZ3Jlc3MiLHIsdCl9LHI9e2hlYWRlcjpmdW5jdGlvbih0LG4pe3JldHVybiB0PSh0KyIiKS50b0xvd2VyQ2FzZSgpLGFyZ3VtZW50cy5sZW5ndGg8Mj9jLmdldCh0KToobnVsbD09bj9jLnJlbW92ZSh0KTpjLnNldCh0LG4rIiIpLHIpfSxtaW1lVHlwZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT10P251bGw6dCsiIixyKTppfSxyZXNwb25zZVR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxyKTp1fSx0aW1lb3V0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSt0LHIpOmh9LHVzZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT9sOihsPW51bGw9PXQ/bnVsbDp0KyIiLHIpfSxwYXNzd29yZDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP2Y6KGY9bnVsbD09dD9udWxsOnQrIiIscil9LHJlc3BvbnNlOmZ1bmN0aW9uKHQpe3JldHVybiBvPXQscn0sZ2V0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHIuc2VuZCgiR0VUIix0LG4pfSxwb3N0OmZ1bmN0aW9uKHQsbil7cmV0dXJuIHIuc2VuZCgiUE9TVCIsdCxuKX0sc2VuZDpmdW5jdGlvbihuLGUsbyl7cmV0dXJuIHMub3BlbihuLHQsITAsbCxmKSxudWxsPT1pfHxjLmhhcygiYWNjZXB0Iil8fGMuc2V0KCJhY2NlcHQiLGkrIiwqLyoiKSxzLnNldFJlcXVlc3RIZWFkZXImJmMuZWFjaChmdW5jdGlvbih0LG4pe3Muc2V0UmVxdWVzdEhlYWRlcihuLHQpfSksbnVsbCE9aSYmcy5vdmVycmlkZU1pbWVUeXBlJiZzLm92ZXJyaWRlTWltZVR5cGUoaSksbnVsbCE9dSYmKHMucmVzcG9uc2VUeXBlPXUpLGg+MCYmKHMudGltZW91dD1oKSxudWxsPT1vJiYiZnVuY3Rpb24iPT10eXBlb2YgZSYmKG89ZSxlPW51bGwpLG51bGwhPW8mJjE9PT1vLmxlbmd0aCYmKG89bXUobykpLG51bGwhPW8mJnIub24oImVycm9yIixvKS5vbigibG9hZCIsZnVuY3Rpb24odCl7byhudWxsLHQpfSksYS5jYWxsKCJiZWZvcmVzZW5kIixyLHMpLHMuc2VuZChudWxsPT1lP251bGw6ZSkscn0sYWJvcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5hYm9ydCgpLHJ9LG9uOmZ1bmN0aW9uKCl7dmFyIHQ9YS5vbi5hcHBseShhLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1hP3I6dH19LG51bGwhPW4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIituKTtyZXR1cm4gci5nZXQobil9cmV0dXJuIHJ9LENtPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIGk9RW0oZSkubWltZVR5cGUodCkucmVzcG9uc2Uobik7aWYobnVsbCE9cil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3IpO3JldHVybiBpLmdldChyKX1yZXR1cm4gaX19LFBtPUNtKCJ0ZXh0L2h0bWwiLGZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCh0LnJlc3BvbnNlVGV4dCl9KSx6bT1DbSgiYXBwbGljYXRpb24vanNvbiIsZnVuY3Rpb24odCl7cmV0dXJuIEpTT04ucGFyc2UodC5yZXNwb25zZVRleHQpfSksUm09Q20oInRleHQvcGxhaW4iLGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlVGV4dH0pLE9tPUNtKCJhcHBsaWNhdGlvbi94bWwiLGZ1bmN0aW9uKHQpe3ZhciBuPXQucmVzcG9uc2VYTUw7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJwYXJzZSBlcnJvciIpO3JldHVybiBufSksTG09ZnVuY3Rpb24odCxuKXtyZXR1cm4gZnVuY3Rpb24oZSxyLGkpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKGk9cixyPW51bGwpO3ZhciBvPUVtKGUpLm1pbWVUeXBlKHQpO3JldHVybiBvLnJvdz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLnJlc3BvbnNlKGJ1KG4scj10KSk6cn0sby5yb3cociksaT9vLmdldChpKTpvfX0scW09TG0oInRleHQvY3N2IixRZCksRG09TG0oInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXMiLHJ2KSxVbT1BcnJheS5wcm90b3R5cGUsRm09VW0ubWFwLEltPVVtLnNsaWNlLGptPXtuYW1lOiJpbXBsaWNpdCJ9LFltPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sQm09ZnVuY3Rpb24odCl7cmV0dXJuK3R9LEhtPVswLDFdLFhtPWZ1bmN0aW9uKG4sZSxpKXt2YXIgbyx1PW5bMF0sYT1uW24ubGVuZ3RoLTFdLGM9cih1LGEsbnVsbD09ZT8xMDplKTtzd2l0Y2goaT1mcihudWxsPT1pPyIsZiI6aSksaS50eXBlKXtjYXNlInMiOnZhciBzPU1hdGgubWF4KE1hdGguYWJzKHUpLE1hdGguYWJzKGEpKTtyZXR1cm4gbnVsbCE9aS5wcmVjaXNpb258fGlzTmFOKG89V3YoYyxzKSl8fChpLnByZWNpc2lvbj1vKSx0LmZvcm1hdFByZWZpeChpLHMpO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPWkucHJlY2lzaW9ufHxpc05hTihvPUd2KGMsTWF0aC5tYXgoTWF0aC5hYnModSksTWF0aC5hYnMoYSkpKSl8fChpLnByZWNpc2lvbj1vLSgiZSI9PT1pLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9aS5wcmVjaXNpb258fGlzTmFOKG89VnYoYykpfHwoaS5wcmVjaXNpb249by0yKigiJSI9PT1pLnR5cGUpKX1yZXR1cm4gdC5mb3JtYXQoaSl9LFZtPWZ1bmN0aW9uKHQsbil7dD10LnNsaWNlKCk7dmFyIGUscj0wLGk9dC5sZW5ndGgtMSxvPXRbcl0sdT10W2ldO3JldHVybiB1PG8mJihlPXIscj1pLGk9ZSxlPW8sbz11LHU9ZSksdFtyXT1uLmZsb29yKG8pLHRbaV09bi5jZWlsKHUpLHR9LFdtPW5ldyBEYXRlLEdtPW5ldyBEYXRlLCRtPSR1KGZ1bmN0aW9uKCl7fSxmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCtuKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4gbi10fSk7JG0uZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT8kdShmdW5jdGlvbihuKXtuLnNldFRpbWUoTWF0aC5mbG9vcihuL3QpKnQpfSxmdW5jdGlvbihuLGUpe24uc2V0VGltZSgrbitlKnQpfSxmdW5jdGlvbihuLGUpe3JldHVybihlLW4pL3R9KTokbTpudWxsfTt2YXIgWm09JG0ucmFuZ2UsSm09MWUzLFFtPTZlNCxLbT0zNmU1LHR4PTg2NGU1LG54PTYwNDhlNSxleD0kdShmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L0ptKSpKbSl9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24qSm0pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL0ptfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENTZWNvbmRzKCl9KSxyeD1leC5yYW5nZSxpeD0kdShmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L1FtKSpRbSl9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24qUW0pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL1FtfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCl9KSxveD1peC5yYW5nZSx1eD0kdShmdW5jdGlvbih0KXt2YXIgbj10LmdldFRpbWV6b25lT2Zmc2V0KCkqUW0lS207bjwwJiYobis9S20pLHQuc2V0VGltZShNYXRoLmZsb29yKCgrdC1uKS9LbSkqS20rbil9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24qS20pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL0ttfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSksYXg9dXgucmFuZ2UsY3g9JHUoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxuKXt0LnNldERhdGUodC5nZXREYXRlKCkrbil9LGZ1bmN0aW9uKHQsbil7cmV0dXJuKG4tdC0obi5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqUW0pL3R4fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pLHN4PWN4LnJhbmdlLGx4PVp1KDApLGZ4PVp1KDEpLGh4PVp1KDIpLHB4PVp1KDMpLGR4PVp1KDQpLHZ4PVp1KDUpLF94PVp1KDYpLGd4PWx4LnJhbmdlLHl4PWZ4LnJhbmdlLG14PWh4LnJhbmdlLHh4PXB4LnJhbmdlLGJ4PWR4LnJhbmdlLHd4PXZ4LnJhbmdlLE14PV94LnJhbmdlLFR4PSR1KGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSgxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0TW9udGgodC5nZXRNb250aCgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihuLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKX0pLGt4PVR4LnJhbmdlLFN4PSR1KGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSk7U3guZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD8kdShmdW5jdGlvbihuKXtuLnNldEZ1bGxZZWFyKE1hdGguZmxvb3Iobi5nZXRGdWxsWWVhcigpL3QpKnQpLG4uc2V0TW9udGgoMCwxKSxuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLGUpe24uc2V0RnVsbFllYXIobi5nZXRGdWxsWWVhcigpK2UqdCl9KTpudWxsfTt2YXIgQXg9U3gucmFuZ2UsTng9JHUoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRUaW1lKCt0K24qUW0pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL1FtfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9KSxFeD1OeC5yYW5nZSxDeD0kdShmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VGltZSgrdCtuKkttKX0sZnVuY3Rpb24odCxuKXtyZXR1cm4obi10KS9LbX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pLFB4PUN4LnJhbmdlLHp4PSR1KGZ1bmN0aW9uKHQpe3Quc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsbil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybihuLXQpL3R4fSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXRlKCktMX0pLFJ4PXp4LnJhbmdlLE94PUp1KDApLEx4PUp1KDEpLHF4PUp1KDIpLER4PUp1KDMpLFV4PUp1KDQpLEZ4PUp1KDUpLEl4PUp1KDYpLGp4PU94LnJhbmdlLFl4PUx4LnJhbmdlLEJ4PXF4LnJhbmdlLEh4PUR4LnJhbmdlLFh4PVV4LnJhbmdlLFZ4PUZ4LnJhbmdlLFd4PUl4LnJhbmdlLEd4PSR1KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSgxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihuLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDTW9udGgoKX0pLCR4PUd4LnJhbmdlLFp4PSR1KGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LG4pe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK24pfSxmdW5jdGlvbih0LG4pe3JldHVybiBuLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSk7WnguZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD8kdShmdW5jdGlvbihuKXtuLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3Iobi5nZXRVVENGdWxsWWVhcigpL3QpKnQpLG4uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLGUpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK2UqdCl9KTpudWxsfTt2YXIgSngsUXg9WngucmFuZ2UsS3g9eyItIjoiIixfOiIgIiwwOiIwIn0sdGI9L15ccypcZCsvLG5iPS9eJS8sZWI9L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nOyRhKHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7dmFyIHJiPSIlWS0lbS0lZFQlSDolTTolUy4lTFoiLGliPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nP1phOnQudXRjRm9ybWF0KHJiKSxvYj0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP0phOnQudXRjUGFyc2UocmIpLHViPTFlMyxhYj02MCp1YixjYj02MCphYixzYj0yNCpjYixsYj03KnNiLGZiPTMwKnNiLGhiPTM2NSpzYixwYj1mdW5jdGlvbigpe3JldHVybiB0YyhTeCxUeCxseCxjeCx1eCxpeCxleCwkbSx0LnRpbWVGb3JtYXQpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKX0sZGI9ZnVuY3Rpb24oKXtyZXR1cm4gdGMoWngsR3gsT3gsengsQ3gsTngsZXgsJG0sdC51dGNGb3JtYXQpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKX0sdmI9ZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2goLy57Nn0vZykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiIjIit0fSl9LF9iPXZiKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxnYj12YigiMzkzYjc5NTI1NGEzNmI2ZWNmOWM5ZWRlNjM3OTM5OGNhMjUyYjVjZjZiY2VkYjljOGM2ZDMxYmQ5ZTM5ZTdiYTUyZTdjYjk0ODQzYzM5YWQ0OTRhZDY2MTZiZTc5NjljN2I0MTczYTU1MTk0Y2U2ZGJkZGU5ZWQ2IikseWI9dmIoIjMxODJiZDZiYWVkNjllY2FlMWM2ZGJlZmU2NTUwZGZkOGQzY2ZkYWU2YmZkZDBhMjMxYTM1NDc0YzQ3NmExZDk5YmM3ZTljMDc1NmJiMTllOWFjOGJjYmRkY2RhZGFlYjYzNjM2Mzk2OTY5NmJkYmRiZGQ5ZDlkOSIpLG1iPXZiKCIxZjc3YjRhZWM3ZThmZjdmMGVmZmJiNzgyY2EwMmM5OGRmOGFkNjI3MjhmZjk4OTY5NDY3YmRjNWIwZDU4YzU2NGJjNDljOTRlMzc3YzJmN2I2ZDI3ZjdmN2ZjN2M3YzdiY2JkMjJkYmRiOGQxN2JlY2Y5ZWRhZTUiKSx4Yj1WaChWdCgzMDAsLjUsMCksVnQoLTI0MCwuNSwxKSksYmI9VmgoVnQoLTEwMCwuNzUsLjM1KSxWdCg4MCwxLjUsLjgpKSx3Yj1WaChWdCgyNjAsLjc1LC4zNSksVnQoODAsMS41LC44KSksTWI9VnQoKSxUYj1mdW5jdGlvbih0KXsodDwwfHx0PjEpJiYodC09TWF0aC5mbG9vcih0KSk7dmFyIG49TWF0aC5hYnModC0uNSk7cmV0dXJuIE1iLmg9MzYwKnQtMTAwLE1iLnM9MS41LTEuNSpuLE1iLmw9LjgtLjkqbixNYisiIn0sa2I9bmModmIoIjQ0MDE1NDQ0MDI1NjQ1MDQ1NzQ1MDU1OTQ2MDc1YTQ2MDg1YzQ2MGE1ZDQ2MGI1ZTQ3MGQ2MDQ3MGU2MTQ3MTA2MzQ3MTE2NDQ3MTM2NTQ4MTQ2NzQ4MTY2ODQ4MTc2OTQ4MTg2YTQ4MWE2YzQ4MWI2ZDQ4MWM2ZTQ4MWQ2ZjQ4MWY3MDQ4MjA3MTQ4MjE3MzQ4MjM3NDQ4MjQ3NTQ4MjU3NjQ4MjY3NzQ4Mjg3ODQ4Mjk3OTQ3MmE3YTQ3MmM3YTQ3MmQ3YjQ3MmU3YzQ3MmY3ZDQ2MzA3ZTQ2MzI3ZTQ2MzM3ZjQ2MzQ4MDQ1MzU4MTQ1Mzc4MTQ1Mzg4MjQ0Mzk4MzQ0M2E4MzQ0M2I4NDQzM2Q4NDQzM2U4NTQyM2Y4NTQyNDA4NjQyNDE4NjQxNDI4NzQxNDQ4NzQwNDU4ODQwNDY4ODNmNDc4ODNmNDg4OTNlNDk4OTNlNGE4OTNlNGM4YTNkNGQ4YTNkNGU4YTNjNGY4YTNjNTA4YjNiNTE4YjNiNTI4YjNhNTM4YjNhNTQ4YzM5NTU4YzM5NTY4YzM4NTg4YzM4NTk4YzM3NWE4YzM3NWI4ZDM2NWM4ZDM2NWQ4ZDM1NWU4ZDM1NWY4ZDM0NjA4ZDM0NjE4ZDMzNjI4ZDMzNjM4ZDMyNjQ4ZTMyNjU4ZTMxNjY4ZTMxNjc4ZTMxNjg4ZTMwNjk4ZTMwNmE4ZTJmNmI4ZTJmNmM4ZTJlNmQ4ZTJlNmU4ZTJlNmY4ZTJkNzA4ZTJkNzE4ZTJjNzE4ZTJjNzI4ZTJjNzM4ZTJiNzQ4ZTJiNzU4ZTJhNzY4ZTJhNzc4ZTJhNzg4ZTI5Nzk4ZTI5N2E4ZTI5N2I4ZTI4N2M4ZTI4N2Q4ZTI3N2U4ZTI3N2Y4ZTI3ODA4ZTI2ODE4ZTI2ODI4ZTI2ODI4ZTI1ODM4ZTI1ODQ4ZTI1ODU4ZTI0ODY4ZTI0ODc4ZTIzODg4ZTIzODk4ZTIzOGE4ZDIyOGI4ZDIyOGM4ZDIyOGQ4ZDIxOGU4ZDIxOGY4ZDIxOTA4ZDIxOTE4YzIwOTI4YzIwOTI4YzIwOTM4YzFmOTQ4YzFmOTU4YjFmOTY4YjFmOTc4YjFmOTg4YjFmOTk4YTFmOWE4YTFlOWI4YTFlOWM4OTFlOWQ4OTFmOWU4OTFmOWY4ODFmYTA4ODFmYTE4ODFmYTE4NzFmYTI4NzIwYTM4NjIwYTQ4NjIxYTU4NTIxYTY4NTIyYTc4NTIyYTg4NDIzYTk4MzI0YWE4MzI1YWI4MjI1YWM4MjI2YWQ4MTI3YWQ4MTI4YWU4MDI5YWY3ZjJhYjA3ZjJjYjE3ZTJkYjI3ZDJlYjM3YzJmYjQ3YzMxYjU3YjMyYjY3YTM0YjY3OTM1Yjc3OTM3Yjg3ODM4Yjk3NzNhYmE3NjNiYmI3NTNkYmM3NDNmYmM3MzQwYmQ3MjQyYmU3MTQ0YmY3MDQ2YzA2ZjQ4YzE2ZTRhYzE2ZDRjYzI2YzRlYzM2YjUwYzQ2YTUyYzU2OTU0YzU2ODU2YzY2NzU4Yzc2NTVhYzg2NDVjYzg2MzVlYzk2MjYwY2E2MDYzY2I1ZjY1Y2I1ZTY3Y2M1YzY5Y2Q1YjZjY2Q1YTZlY2U1ODcwY2Y1NzczZDA1Njc1ZDA1NDc3ZDE1MzdhZDE1MTdjZDI1MDdmZDM0ZTgxZDM0ZDg0ZDQ0Yjg2ZDU0OTg5ZDU0ODhiZDY0NjhlZDY0NTkwZDc0MzkzZDc0MTk1ZDg0MDk4ZDgzZTliZDkzYzlkZDkzYmEwZGEzOWEyZGEzN2E1ZGIzNmE4ZGIzNGFhZGMzMmFkZGMzMGIwZGQyZmIyZGQyZGI1ZGUyYmI4ZGUyOWJhZGUyOGJkZGYyNmMwZGYyNWMyZGYyM2M1ZTAyMWM4ZTAyMGNhZTExZmNkZTExZGQwZTExY2QyZTIxYmQ1ZTIxYWQ4ZTIxOWRhZTMxOWRkZTMxOGRmZTMxOGUyZTQxOGU1ZTQxOWU3ZTQxOWVhZTUxYWVjZTUxYmVmZTUxY2YxZTUxZGY0ZTYxZWY2ZTYyMGY4ZTYyMWZiZTcyM2ZkZTcyNSIpKSxTYj1uYyh2YigiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTA5MDIwMjBiMDIwMjBkMDMwMzBmMDMwMzEyMDQwNDE0MDUwNDE2MDYwNTE4MDYwNTFhMDcwNjFjMDgwNzFlMDkwNzIwMGEwODIyMGIwOTI0MGMwOTI2MGQwYTI5MGUwYjJiMTAwYjJkMTEwYzJmMTIwZDMxMTMwZDM0MTQwZTM2MTUwZTM4MTYwZjNiMTgwZjNkMTkxMDNmMWExMDQyMWMxMDQ0MWQxMTQ3MWUxMTQ5MjAxMTRiMjExMTRlMjIxMTUwMjQxMjUzMjUxMjU1MjcxMjU4MjkxMTVhMmExMTVjMmMxMTVmMmQxMTYxMmYxMTYzMzExMTY1MzMxMDY3MzQxMDY5MzYxMDZiMzgxMDZjMzkwZjZlM2IwZjcwM2QwZjcxM2YwZjcyNDAwZjc0NDIwZjc1NDQwZjc2NDUxMDc3NDcxMDc4NDkxMDc4NGExMDc5NGMxMTdhNGUxMTdiNGYxMjdiNTExMjdjNTIxMzdjNTQxMzdkNTYxNDdkNTcxNTdlNTkxNTdlNWExNjdlNWMxNjdmNWQxNzdmNWYxODdmNjAxODgwNjIxOTgwNjQxYTgwNjUxYTgwNjcxYjgwNjgxYzgxNmExYzgxNmIxZDgxNmQxZDgxNmUxZTgxNzAxZjgxNzIxZjgxNzMyMDgxNzUyMTgxNzYyMTgxNzgyMjgxNzkyMjgyN2IyMzgyN2MyMzgyN2UyNDgyODAyNTgyODEyNTgxODMyNjgxODQyNjgxODYyNzgxODgyNzgxODkyODgxOGIyOTgxOGMyOTgxOGUyYTgxOTAyYTgxOTEyYjgxOTMyYjgwOTQyYzgwOTYyYzgwOTgyZDgwOTkyZDgwOWIyZTdmOWMyZTdmOWUyZjdmYTAyZjdmYTEzMDdlYTMzMDdlYTUzMTdlYTYzMTdkYTgzMjdkYWEzMzdkYWIzMzdjYWQzNDdjYWUzNDdiYjAzNTdiYjIzNTdiYjMzNjdhYjUzNjdhYjczNzc5YjgzNzc5YmEzODc4YmMzOTc4YmQzOTc3YmYzYTc3YzAzYTc2YzIzYjc1YzQzYzc1YzUzYzc0YzczZDczYzgzZTczY2EzZTcyY2MzZjcxY2Q0MDcxY2Y0MDcwZDA0MTZmZDI0MjZmZDM0MzZlZDU0NDZkZDY0NTZjZDg0NTZjZDk0NjZiZGI0NzZhZGM0ODY5ZGU0OTY4ZGY0YTY4ZTA0YzY3ZTI0ZDY2ZTM0ZTY1ZTQ0ZjY0ZTU1MDY0ZTc1MjYzZTg1MzYyZTk1NDYyZWE1NjYxZWI1NzYwZWM1ODYwZWQ1YTVmZWU1YjVlZWY1ZDVlZjA1ZjVlZjE2MDVkZjI2MjVkZjI2NDVjZjM2NTVjZjQ2NzVjZjQ2OTVjZjU2YjVjZjY2YzVjZjY2ZTVjZjc3MDVjZjc3MjVjZjg3NDVjZjg3NjVjZjk3ODVkZjk3OTVkZjk3YjVkZmE3ZDVlZmE3ZjVlZmE4MTVmZmI4MzVmZmI4NTYwZmI4NzYxZmM4OTYxZmM4YTYyZmM4YzYzZmM4ZTY0ZmM5MDY1ZmQ5MjY2ZmQ5NDY3ZmQ5NjY4ZmQ5ODY5ZmQ5YTZhZmQ5YjZiZmU5ZDZjZmU5ZjZkZmVhMTZlZmVhMzZmZmVhNTcxZmVhNzcyZmVhOTczZmVhYTc0ZmVhYzc2ZmVhZTc3ZmViMDc4ZmViMjdhZmViNDdiZmViNjdjZmViNzdlZmViOTdmZmViYjgxZmViZDgyZmViZjg0ZmVjMTg1ZmVjMjg3ZmVjNDg4ZmVjNjhhZmVjODhjZmVjYThkZmVjYzhmZmVjZDkwZmVjZjkyZmVkMTk0ZmVkMzk1ZmVkNTk3ZmVkNzk5ZmVkODlhZmRkYTljZmRkYzllZmRkZWEwZmRlMGExZmRlMmEzZmRlM2E1ZmRlNWE3ZmRlN2E5ZmRlOWFhZmRlYmFjZmNlY2FlZmNlZWIwZmNmMGIyZmNmMmI0ZmNmNGI2ZmNmNmI4ZmNmN2I5ZmNmOWJiZmNmYmJkZmNmZGJmIikpLEFiPW5jKHZiKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksTmI9bmModmIoIjBkMDg4NzEwMDc4ODEzMDc4OTE2MDc4YTE5MDY4YzFiMDY4ZDFkMDY4ZTIwMDY4ZjIyMDY5MDI0MDY5MTI2MDU5MTI4MDU5MjJhMDU5MzJjMDU5NDJlMDU5NTJmMDU5NjMxMDU5NzMzMDU5NzM1MDQ5ODM3MDQ5OTM4MDQ5YTNhMDQ5YTNjMDQ5YjNlMDQ5YzNmMDQ5YzQxMDQ5ZDQzMDM5ZTQ0MDM5ZTQ2MDM5ZjQ4MDM5ZjQ5MDNhMDRiMDNhMTRjMDJhMTRlMDJhMjUwMDJhMjUxMDJhMzUzMDJhMzU1MDJhNDU2MDFhNDU4MDFhNDU5MDFhNTViMDFhNTVjMDFhNjVlMDFhNjYwMDFhNjYxMDBhNzYzMDBhNzY0MDBhNzY2MDBhNzY3MDBhODY5MDBhODZhMDBhODZjMDBhODZlMDBhODZmMDBhODcxMDBhODcyMDFhODc0MDFhODc1MDFhODc3MDFhODc4MDFhODdhMDJhODdiMDJhODdkMDNhODdlMDNhODgwMDRhODgxMDRhNzgzMDVhNzg0MDVhNzg2MDZhNjg3MDdhNjg4MDhhNjhhMDlhNThiMGFhNThkMGJhNThlMGNhNDhmMGRhNDkxMGVhMzkyMGZhMzk0MTBhMjk1MTFhMTk2MTNhMTk4MTRhMDk5MTU5ZjlhMTY5ZjljMTc5ZTlkMTg5ZDllMTk5ZGEwMWE5Y2ExMWI5YmEyMWQ5YWEzMWU5YWE1MWY5OWE2MjA5OGE3MjE5N2E4MjI5NmFhMjM5NWFiMjQ5NGFjMjY5NGFkMjc5M2FlMjg5MmIwMjk5MWIxMmE5MGIyMmI4ZmIzMmM4ZWI0MmU4ZGI1MmY4Y2I2MzA4YmI3MzE4YWI4MzI4OWJhMzM4OGJiMzQ4OGJjMzU4N2JkMzc4NmJlMzg4NWJmMzk4NGMwM2E4M2MxM2I4MmMyM2M4MWMzM2Q4MGM0M2U3ZmM1NDA3ZWM2NDE3ZGM3NDI3Y2M4NDM3YmM5NDQ3YWNhNDU3YWNiNDY3OWNjNDc3OGNjNDk3N2NkNGE3NmNlNGI3NWNmNGM3NGQwNGQ3M2QxNGU3MmQyNGY3MWQzNTE3MWQ0NTI3MGQ1NTM2ZmQ1NTQ2ZWQ2NTU2ZGQ3NTY2Y2Q4NTc2YmQ5NTg2YWRhNWE2YWRhNWI2OWRiNWM2OGRjNWQ2N2RkNWU2NmRlNWY2NWRlNjE2NGRmNjI2M2UwNjM2M2UxNjQ2MmUyNjU2MWUyNjY2MGUzNjg1ZmU0Njk1ZWU1NmE1ZGU1NmI1ZGU2NmM1Y2U3NmU1YmU3NmY1YWU4NzA1OWU5NzE1OGU5NzI1N2VhNzQ1N2ViNzU1NmViNzY1NWVjNzc1NGVkNzk1M2VkN2E1MmVlN2I1MWVmN2M1MWVmN2U1MGYwN2Y0ZmYwODA0ZWYxODE0ZGYxODM0Y2YyODQ0YmYzODU0YmYzODc0YWY0ODg0OWY0ODk0OGY1OGI0N2Y1OGM0NmY2OGQ0NWY2OGY0NGY3OTA0NGY3OTE0M2Y3OTM0MmY4OTQ0MWY4OTU0MGY5OTczZmY5OTgzZWY5OWEzZWZhOWIzZGZhOWMzY2ZhOWUzYmZiOWYzYWZiYTEzOWZiYTIzOGZjYTMzOGZjYTUzN2ZjYTYzNmZjYTgzNWZjYTkzNGZkYWIzM2ZkYWMzM2ZkYWUzMmZkYWYzMWZkYjEzMGZkYjIyZmZkYjQyZmZkYjUyZWZlYjcyZGZlYjgyY2ZlYmEyY2ZlYmIyYmZlYmQyYWZlYmUyYWZlYzAyOWZkYzIyOWZkYzMyOGZkYzUyN2ZkYzYyN2ZkYzgyN2ZkY2EyNmZkY2IyNmZjY2QyNWZjY2UyNWZjZDAyNWZjZDIyNWZiZDMyNGZiZDUyNGZiZDcyNGZhZDgyNGZhZGEyNGY5ZGMyNGY5ZGQyNWY4ZGYyNWY4ZTEyNWY3ZTIyNWY3ZTQyNWY2ZTYyNmY2ZTgyNmY1ZTkyNmY1ZWIyN2Y0ZWQyN2YzZWUyN2YzZjAyN2YyZjIyN2YxZjQyNmYxZjUyNWYwZjcyNGYwZjkyMSIpKSxFYj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LENiPU1hdGguYWJzLFBiPU1hdGguYXRhbjIsemI9TWF0aC5jb3MsUmI9TWF0aC5tYXgsT2I9TWF0aC5taW4sTGI9TWF0aC5zaW4scWI9TWF0aC5zcXJ0LERiPTFlLTEyLFViPU1hdGguUEksRmI9VWIvMixJYj0yKlViLGpiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0LHMsbD0rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1GYixwPXUuYXBwbHkodGhpcyxhcmd1bWVudHMpLUZiLGQ9Q2IocC1oKSx2PXA+aDtpZihjfHwoYz10PU9lKCkpLGY8bCYmKHM9ZixmPWwsbD1zKSxmPkRiKWlmKGQ+SWItRGIpYy5tb3ZlVG8oZip6YihoKSxmKkxiKGgpKSxjLmFyYygwLDAsZixoLHAsIXYpLGw+RGImJihjLm1vdmVUbyhsKnpiKHApLGwqTGIocCkpLGMuYXJjKDAsMCxsLHAsaCx2KSk7ZWxzZXt2YXIgXyxnLHk9aCxtPXAseD1oLGI9cCx3PWQsTT1kLFQ9YS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixrPVQ+RGImJihpPytpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpxYihsKmwrZipmKSksUz1PYihDYihmLWwpLzIsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxBPVMsTj1TO2lmKGs+RGIpe3ZhciBFPWljKGsvbCpMYihUKSksQz1pYyhrL2YqTGIoVCkpOyh3LT0yKkUpPkRiPyhFKj12PzE6LTEseCs9RSxiLT1FKToodz0wLHg9Yj0oaCtwKS8yKSwoTS09MipDKT5EYj8oQyo9dj8xOi0xLHkrPUMsbS09Qyk6KE09MCx5PW09KGgrcCkvMil9dmFyIFA9Zip6Yih5KSx6PWYqTGIoeSksUj1sKnpiKGIpLE89bCpMYihiKTtpZihTPkRiKXt2YXIgTD1mKnpiKG0pLHE9ZipMYihtKSxEPWwqemIoeCksVT1sKkxiKHgpO2lmKGQ8VWIpe3ZhciBGPXc+RGI/bGMoUCx6LEQsVSxMLHEsUixPKTpbUixPXSxJPVAtRlswXSxqPXotRlsxXSxZPUwtRlswXSxCPXEtRlsxXSxIPTEvTGIocmMoKEkqWStqKkIpLyhxYihJKkkraipqKSpxYihZKlkrQipCKSkpLzIpLFg9cWIoRlswXSpGWzBdK0ZbMV0qRlsxXSk7QT1PYihTLChsLVgpLyhILTEpKSxOPU9iKFMsKGYtWCkvKEgrMSkpfX1NPkRiP04+RGI/KF89ZmMoRCxVLFAseixmLE4sdiksZz1mYyhMLHEsUixPLGYsTix2KSxjLm1vdmVUbyhfLmN4K18ueDAxLF8uY3krXy55MDEpLE48Uz9jLmFyYyhfLmN4LF8uY3ksTixQYihfLnkwMSxfLngwMSksUGIoZy55MDEsZy54MDEpLCF2KTooYy5hcmMoXy5jeCxfLmN5LE4sUGIoXy55MDEsXy54MDEpLFBiKF8ueTExLF8ueDExKSwhdiksYy5hcmMoMCwwLGYsUGIoXy5jeStfLnkxMSxfLmN4K18ueDExKSxQYihnLmN5K2cueTExLGcuY3grZy54MTEpLCF2KSxjLmFyYyhnLmN4LGcuY3ksTixQYihnLnkxMSxnLngxMSksUGIoZy55MDEsZy54MDEpLCF2KSkpOihjLm1vdmVUbyhQLHopLGMuYXJjKDAsMCxmLHksbSwhdikpOmMubW92ZVRvKFAseiksbD5EYiYmdz5EYj9BPkRiPyhfPWZjKFIsTyxMLHEsbCwtQSx2KSxnPWZjKFAseixELFUsbCwtQSx2KSxjLmxpbmVUbyhfLmN4K18ueDAxLF8uY3krXy55MDEpLEE8Uz9jLmFyYyhfLmN4LF8uY3ksQSxQYihfLnkwMSxfLngwMSksUGIoZy55MDEsZy54MDEpLCF2KTooYy5hcmMoXy5jeCxfLmN5LEEsUGIoXy55MDEsXy54MDEpLFBiKF8ueTExLF8ueDExKSwhdiksYy5hcmMoMCwwLGwsUGIoXy5jeStfLnkxMSxfLmN4K18ueDExKSxQYihnLmN5K2cueTExLGcuY3grZy54MTEpLHYpLGMuYXJjKGcuY3gsZy5jeSxBLFBiKGcueTExLGcueDExKSxQYihnLnkwMSxnLngwMSksIXYpKSk6Yy5hcmMoMCwwLGwsYix4LHYpOmMubGluZVRvKFIsTyl9ZWxzZSBjLm1vdmVUbygwLDApO2lmKGMuY2xvc2VQYXRoKCksdClyZXR1cm4gYz1udWxsLHQrIiJ8fG51bGx9dmFyIG49b2MsZT11YyxyPUViKDApLGk9bnVsbCxvPWFjLHU9Y2MsYT1zYyxjPW51bGw7cmV0dXJuIHQuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgdD0oK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIscj0oK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKyArdS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItVWIvMjtyZXR1cm5bemIocikqdCxMYihyKSp0XX0sdC5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOkViKCtlKSx0KTpufSx0Lm91dGVyUmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246RWIoK24pLHQpOmV9LHQuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246RWIoK24pLHQpOnJ9LHQucGFkUmFkaXVzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PW4/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkViKCtuKSx0KTppfSx0LnN0YXJ0QW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpFYigrbiksdCk6b30sdC5lbmRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkViKCtuKSx0KTp1fSx0LnBhZEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246RWIoK24pLHQpOmF9LHQuY29udGV4dD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1udWxsPT1uP251bGw6bix0KTpjfSx0fTtoYy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8odCxuKX19fTt2YXIgWWI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBoYyh0KX0sQmI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBhLGMscyxsPXQubGVuZ3RoLGY9ITE7Zm9yKG51bGw9PWkmJih1PW8ocz1PZSgpKSksYT0wO2E8PWw7KythKSEoYTxsJiZyKGM9dFthXSxhLHQpKT09PWYmJigoZj0hZik/dS5saW5lU3RhcnQoKTp1LmxpbmVFbmQoKSksZiYmdS5wb2ludCgrbihjLGEsdCksK2UoYyxhLHQpKTtpZihzKXJldHVybiB1PW51bGwscysiInx8bnVsbH12YXIgbj1wYyxlPWRjLHI9RWIoITApLGk9bnVsbCxvPVliLHU9bnVsbDtyZXR1cm4gdC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RWIoK2UpLHQpOm59LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkViKCtuKSx0KTplfSx0LmRlZmluZWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpFYighIW4pLHQpOnJ9LHQuY3VydmU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bixudWxsIT1pJiYodT1vKGkpKSx0KTpvfSx0LmNvbnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PW4/aT11PW51bGw6dT1vKGk9biksdCk6aX0sdH0sSGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBuLGwsZixoLHAsZD10Lmxlbmd0aCx2PSExLF89bmV3IEFycmF5KGQpLGc9bmV3IEFycmF5KGQpO2ZvcihudWxsPT1hJiYocz1jKHA9T2UoKSkpLG49MDtuPD1kOysrbil7aWYoIShuPGQmJnUoaD10W25dLG4sdCkpPT09dilpZih2PSF2KWw9bixzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxmPW4tMTtmPj1sOy0tZilzLnBvaW50KF9bZl0sZ1tmXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9diYmKF9bbl09K2UoaCxuLHQpLGdbbl09K2koaCxuLHQpLHMucG9pbnQocj8rcihoLG4sdCk6X1tuXSxvPytvKGgsbix0KTpnW25dKSl9aWYocClyZXR1cm4gcz1udWxsLHArIiJ8fG51bGx9ZnVuY3Rpb24gbigpe3JldHVybiBCYigpLmRlZmluZWQodSkuY3VydmUoYykuY29udGV4dChhKX12YXIgZT1wYyxyPW51bGwsaT1FYigwKSxvPWRjLHU9RWIoITApLGE9bnVsbCxjPVliLHM9bnVsbDtyZXR1cm4gdC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246RWIoK24pLHI9bnVsbCx0KTplfSx0LngwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246RWIoK24pLHQpOmV9LHQueDE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09bj9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiBuP246RWIoK24pLHQpOnJ9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkViKCtuKSxvPW51bGwsdCk6aX0sdC55MD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkViKCtuKSx0KTppfSx0LnkxPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPW51bGw9PW4/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkViKCtuKSx0KTpvfSx0LmxpbmVYMD10LmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBuKCkueChlKS55KGkpfSx0LmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBuKCkueChlKS55KG8pfSx0LmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBuKCkueChyKS55KGkpfSx0LmRlZmluZWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpFYighIW4pLHQpOnV9LHQuY3VydmU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9bixudWxsIT1hJiYocz1jKGEpKSx0KTpjfSx0LmNvbnRleHQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PW4/YT1zPW51bGw6cz1jKGE9biksdCk6YX0sdH0sWGI9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59LFZiPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxXYj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGEsYyxzLGwsZixoPXQubGVuZ3RoLHA9MCxkPW5ldyBBcnJheShoKSx2PW5ldyBBcnJheShoKSxfPStpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxnPU1hdGgubWluKEliLE1hdGgubWF4KC1JYixvLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1fKSkseT1NYXRoLm1pbihNYXRoLmFicyhnKS9oLHUuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxtPXkqKGc8MD8tMToxKTtmb3IoYT0wO2E8aDsrK2EpKGY9dltkW2FdPWFdPStuKHRbYV0sYSx0KSk+MCYmKHArPWYpO2ZvcihudWxsIT1lP2Quc29ydChmdW5jdGlvbih0LG4pe3JldHVybiBlKHZbdF0sdltuXSl9KTpudWxsIT1yJiZkLnNvcnQoZnVuY3Rpb24obixlKXtyZXR1cm4gcih0W25dLHRbZV0pfSksYT0wLHM9cD8oZy1oKm0pL3A6MDthPGg7KythLF89bCljPWRbYV0sZj12W2NdLGw9XysoZj4wP2YqczowKSttLHZbY109e2RhdGE6dFtjXSxpbmRleDphLHZhbHVlOmYsc3RhcnRBbmdsZTpfLGVuZEFuZ2xlOmwscGFkQW5nbGU6eX07cmV0dXJuIHZ9dmFyIG49VmIsZT1YYixyPW51bGwsaT1FYigwKSxvPUViKEliKSx1PUViKDApO3JldHVybiB0LnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RWIoK2UpLHQpOm59LHQuc29ydFZhbHVlcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHI9bnVsbCx0KTplfSx0LnNvcnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bixlPW51bGwsdCk6cn0sdC5zdGFydEFuZ2xlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246RWIoK24pLHQpOml9LHQuZW5kQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpFYigrbiksdCk6b30sdC5wYWRBbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkViKCtuKSx0KTp1fSx0fSxHYj1fYyhZYik7dmMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5fY3VydmUucG9pbnQobipNYXRoLnNpbih0KSxuKi1NYXRoLmNvcyh0KSl9fTt2YXIgJGI9ZnVuY3Rpb24oKXtyZXR1cm4gZ2MoQmIoKS5jdXJ2ZShHYikpfSxaYj1mdW5jdGlvbigpe3ZhciB0PUhiKCkuY3VydmUoR2IpLG49dC5jdXJ2ZSxlPXQubGluZVgwLHI9dC5saW5lWDEsaT10LmxpbmVZMCxvPXQubGluZVkxO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQuc3RhcnRBbmdsZT10LngwLGRlbGV0ZSB0LngwLHQuZW5kQW5nbGU9dC54MSxkZWxldGUgdC54MSx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmlubmVyUmFkaXVzPXQueTAsZGVsZXRlIHQueTAsdC5vdXRlclJhZGl1cz10LnkxLGRlbGV0ZSB0LnkxLHQubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gZ2MoZSgpKX0sZGVsZXRlIHQubGluZVgwLHQubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIGdjKHIoKSl9LGRlbGV0ZSB0LmxpbmVYMSx0LmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBnYyhpKCkpfSxkZWxldGUgdC5saW5lWTAsdC5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gZ2MobygpKX0sZGVsZXRlIHQubGluZVkxLHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihfYyh0KSk6bigpLl9jdXJ2ZX0sdH0sSmI9e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQobi9VYik7dC5tb3ZlVG8oZSwwKSx0LmFyYygwLDAsZSwwLEliKX19LFFiPXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4vNSkvMjt0Lm1vdmVUbygtMyplLC1lKSx0LmxpbmVUbygtZSwtZSksdC5saW5lVG8oLWUsLTMqZSksdC5saW5lVG8oZSwtMyplKSx0LmxpbmVUbyhlLC1lKSx0LmxpbmVUbygzKmUsLWUpLHQubGluZVRvKDMqZSxlKSx0LmxpbmVUbyhlLGUpLHQubGluZVRvKGUsMyplKSx0LmxpbmVUbygtZSwzKmUpLHQubGluZVRvKC1lLGUpLHQubGluZVRvKC0zKmUsZSksdC5jbG9zZVBhdGgoKX19LEtiPU1hdGguc3FydCgxLzMpLHR3PTIqS2Isbnc9e2RyYXc6ZnVuY3Rpb24odCxuKXt2YXIgZT1NYXRoLnNxcnQobi90dykscj1lKktiO3QubW92ZVRvKDAsLWUpLHQubGluZVRvKHIsMCksdC5saW5lVG8oMCxlKSx0LmxpbmVUbygtciwwKSx0LmNsb3NlUGF0aCgpfX0sZXc9Ljg5MDgxMzA5MTUyOTI4NTIscnc9TWF0aC5zaW4oVWIvMTApL01hdGguc2luKDcqVWIvMTApLGl3PU1hdGguc2luKEliLzEwKSpydyxvdz0tTWF0aC5jb3MoSWIvMTApKnJ3LHV3PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4qZXcpLHI9aXcqZSxpPW93KmU7dC5tb3ZlVG8oMCwtZSksdC5saW5lVG8ocixpKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgdT1JYipvLzUsYT1NYXRoLmNvcyh1KSxjPU1hdGguc2luKHUpO3QubGluZVRvKGMqZSwtYSplKSx0LmxpbmVUbyhhKnItYyppLGMqcithKmkpfXQuY2xvc2VQYXRoKCl9fSxhdz17ZHJhdzpmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguc3FydChuKSxyPS1lLzI7dC5yZWN0KHIscixlLGUpfX0sY3c9TWF0aC5zcXJ0KDMpLHN3PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9LU1hdGguc3FydChuLygzKmN3KSk7dC5tb3ZlVG8oMCwyKmUpLHQubGluZVRvKC1jdyplLC1lKSx0LmxpbmVUbyhjdyplLC1lKSx0LmNsb3NlUGF0aCgpfX0sbHc9LS41LGZ3PU1hdGguc3FydCgzKS8yLGh3PTEvTWF0aC5zcXJ0KDEyKSxwdz0zKihody8yKzEpLGR3PXtkcmF3OmZ1bmN0aW9uKHQsbil7dmFyIGU9TWF0aC5zcXJ0KG4vcHcpLHI9ZS8yLGk9ZSpodyxvPXIsdT1lKmh3K2UsYT0tbyxjPXU7dC5tb3ZlVG8ocixpKSx0LmxpbmVUbyhvLHUpLHQubGluZVRvKGEsYyksdC5saW5lVG8obHcqci1mdyppLGZ3KnIrbHcqaSksdC5saW5lVG8obHcqby1mdyp1LGZ3Km8rbHcqdSksdC5saW5lVG8obHcqYS1mdypjLGZ3KmErbHcqYyksdC5saW5lVG8obHcqcitmdyppLGx3KmktZncqciksdC5saW5lVG8obHcqbytmdyp1LGx3KnUtZncqbyksdC5saW5lVG8obHcqYStmdypjLGx3KmMtZncqYSksdC5jbG9zZVBhdGgoKX19LHZ3PVtKYixRYixudyxhdyx1dyxzdyxkd10sX3c9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHQ7aWYocnx8KHI9dD1PZSgpKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHIsK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx0KXJldHVybiByPW51bGwsdCsiInx8bnVsbH12YXIgbj1FYihKYiksZT1FYig2NCkscj1udWxsO3JldHVybiB0LnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpFYihlKSx0KTpufSx0LnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpFYigrbiksdCk6ZX0sdC5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PW4/bnVsbDpuLHQpOnJ9LHR9LGd3PWZ1bmN0aW9uKCl7fTttYy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOnljKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OnljKHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPW59fTt2YXIgeXc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtYyh0KX07eGMucHJvdG90eXBlPXthcmVhU3RhcnQ6Z3csYXJlYUVuZDpndyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpfX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPW47YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1uO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9bix0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK24pLzYpO2JyZWFrO2RlZmF1bHQ6eWModGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bn19O3ZhciBtdz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHhjKHQpfTtiYy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtzd2l0Y2godD0rdCxuPStuLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgZT0odGhpcy5feDArNCp0aGlzLl94MSt0KS82LHI9KHRoaXMuX3kwKzQqdGhpcy5feTErbikvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUscik6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSxyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OnljKHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPW59fTt2YXIgeHc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBiYyh0KX07d2MucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LG49dGhpcy5feSxlPXQubGVuZ3RoLTE7aWYoZT4wKWZvcih2YXIgcixpPXRbMF0sbz1uWzBdLHU9dFtlXS1pLGE9bltlXS1vLGM9LTE7KytjPD1lOylyPWMvZSx0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbY10rKDEtdGhpcy5fYmV0YSkqKGkrcip1KSx0aGlzLl9iZXRhKm5bY10rKDEtdGhpcy5fYmV0YSkqKG8rciphKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LG4pe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtuKX19O3ZhciBidz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIDE9PT1uP25ldyBtYyh0KTpuZXcgd2ModCxuKX1yZXR1cm4gZS5iZXRhPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oLjg1KTtUYy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6TWModGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9bjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ok1jKHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgd3c9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuZXcgVGModCxuKX1yZXR1cm4gZS50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oMCk7a2MucHJvdG90eXBlPXthcmVhU3RhcnQ6Z3csYXJlYUVuZDpndyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LG4pe3N3aXRjaCh0PSt0LG49K24sdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9bjticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PW4pO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9bjticmVhaztkZWZhdWx0Ok1jKHRoaXMsdCxuKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPW59fTt2YXIgTXc9ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiBlKHQpe3JldHVybiBuZXcga2ModCxuKX1yZXR1cm4gZS50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiB0KCtuKX0sZX0oMCk7U2MucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6TWModGhpcyx0LG4pfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBUdz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG5ldyBTYyh0LG4pfXJldHVybiBlLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSgwKTtOYy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTsKYnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpfSh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxuKXtpZih0PSt0LG49K24sdGhpcy5fcG9pbnQpe3ZhciBlPXRoaXMuX3gyLXQscj10aGlzLl95Mi1uO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3coZSplK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDpBYyh0aGlzLHQsbil9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBrdz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG4/bmV3IE5jKHQsbik6bmV3IFRjKHQsMCl9cmV0dXJuIGUuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSguNSk7RWMucHJvdG90eXBlPXthcmVhU3RhcnQ6Z3csYXJlYUVuZDpndyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LG4pe2lmKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7dmFyIGU9dGhpcy5feDItdCxyPXRoaXMuX3kyLW47dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhlKmUrcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPW47YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1uKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PW47YnJlYWs7ZGVmYXVsdDpBYyh0aGlzLHQsbil9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9bn19O3ZhciBTdz1mdW5jdGlvbiB0KG4pe2Z1bmN0aW9uIGUodCl7cmV0dXJuIG4/bmV3IEVjKHQsbik6bmV3IGtjKHQsMCl9cmV0dXJuIGUuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIHQoK24pfSxlfSguNSk7Q2MucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsbil7aWYodD0rdCxuPStuLHRoaXMuX3BvaW50KXt2YXIgZT10aGlzLl94Mi10LHI9dGhpcy5feTItbjt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KGUqZStyKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OkFjKHRoaXMsdCxuKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1ufX07dmFyIEF3PWZ1bmN0aW9uIHQobil7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gbj9uZXcgQ2ModCxuKTpuZXcgU2ModCwwKX1yZXR1cm4gZS5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gdCgrbil9LGV9KC41KTtQYy5wcm90b3R5cGU9e2FyZWFTdGFydDpndyxhcmVhRW5kOmd3LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxuKXt0PSt0LG49K24sdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxuKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LG4pKX19O3ZhciBOdz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFBjKHQpfTtxYy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6TGModGhpcyx0aGlzLl90MCxPYyh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LG4pe3ZhciBlPU5hTjtpZih0PSt0LG49K24sdCE9PXRoaXMuX3gxfHxuIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsTGModGhpcyxPYyh0aGlzLGU9UmModGhpcyx0LG4pKSxlKTticmVhaztkZWZhdWx0OkxjKHRoaXMsdGhpcy5fdDAsZT1SYyh0aGlzLHQsbikpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9bix0aGlzLl90MD1lfX19LChEYy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShxYy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LG4pe3FjLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsbix0KX0sVWMucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxuKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxuKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsbixlLHIsaSxvKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8obix0LHIsZSxvLGkpfX0samMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxuPXRoaXMuX3ksZT10Lmxlbmd0aDtpZihlKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxuWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLG5bMF0pLDI9PT1lKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sblsxXSk7ZWxzZSBmb3IodmFyIHI9WWModCksaT1ZYyhuKSxvPTAsdT0xO3U8ZTsrK28sKyt1KXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyWzBdW29dLGlbMF1bb10sclsxXVtvXSxpWzFdW29dLHRbdV0sblt1XSk7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09ZSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKHQsbil7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK24pfX07dmFyIEV3PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgamModCl9O0JjLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsbil7c3dpdGNoKHQ9K3Qsbj0rbix0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsbik7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsbiksdGhpcy5fY29udGV4dC5saW5lVG8odCxuKTtlbHNle3ZhciBlPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKGUsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8oZSxuKX19dGhpcy5feD10LHRoaXMuX3k9bn19O3ZhciBDdz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEJjKHQsLjUpfSxQdz1BcnJheS5wcm90b3R5cGUuc2xpY2Usenc9ZnVuY3Rpb24odCxuKXtpZigocj10Lmxlbmd0aCk+MSlmb3IodmFyIGUscixpPTEsbz10W25bMF1dLHU9by5sZW5ndGg7aTxyOysraSl7ZT1vLG89dFtuW2ldXTtmb3IodmFyIGE9MDthPHU7KythKW9bYV1bMV0rPW9bYV1bMF09aXNOYU4oZVthXVsxXSk/ZVthXVswXTplW2FdWzFdfX0sUnc9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXQubGVuZ3RoLGU9bmV3IEFycmF5KG4pOy0tbj49MDspZVtuXT1uO3JldHVybiBlfSxPdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIG8sdSxhPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpLGM9dC5sZW5ndGgscz1hLmxlbmd0aCxsPW5ldyBBcnJheShzKTtmb3Iobz0wO288czsrK28pe2Zvcih2YXIgZixoPWFbb10scD1sW29dPW5ldyBBcnJheShjKSxkPTA7ZDxjOysrZClwW2RdPWY9WzAsK2kodFtkXSxoLGQsdCldLGYuZGF0YT10W2RdO3Aua2V5PWh9Zm9yKG89MCx1PWUobCk7bzxzOysrbylsW3Vbb11dLmluZGV4PW87cmV0dXJuIHIobCx1KSxsfXZhciBuPUViKFtdKSxlPVJ3LHI9encsaT1WYztyZXR1cm4gdC5rZXlzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RWIoUHcuY2FsbChlKSksdCk6bn0sdC52YWx1ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOkViKCtuKSx0KTppfSx0Lm9yZGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PW4/Unc6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpFYihQdy5jYWxsKG4pKSx0KTplfSx0Lm9mZnNldD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1uP3p3Om4sdCk6cn0sdH0sTHc9ZnVuY3Rpb24odCxuKXtpZigocj10Lmxlbmd0aCk+MCl7Zm9yKHZhciBlLHIsaSxvPTAsdT10WzBdLmxlbmd0aDtvPHU7KytvKXtmb3IoaT1lPTA7ZTxyOysrZSlpKz10W2VdW29dWzFdfHwwO2lmKGkpZm9yKGU9MDtlPHI7KytlKXRbZV1bb11bMV0vPWl9encodCxuKX19LHF3PWZ1bmN0aW9uKHQsbil7aWYoKGU9dC5sZW5ndGgpPjApe2Zvcih2YXIgZSxyPTAsaT10W25bMF1dLG89aS5sZW5ndGg7cjxvOysrcil7Zm9yKHZhciB1PTAsYT0wO3U8ZTsrK3UpYSs9dFt1XVtyXVsxXXx8MDtpW3JdWzFdKz1pW3JdWzBdPS1hLzJ9encodCxuKX19LER3PWZ1bmN0aW9uKHQsbil7aWYoKGk9dC5sZW5ndGgpPjAmJihyPShlPXRbblswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciBlLHIsaSxvPTAsdT0xO3U8cjsrK3Upe2Zvcih2YXIgYT0wLGM9MCxzPTA7YTxpOysrYSl7Zm9yKHZhciBsPXRbblthXV0sZj1sW3VdWzFdfHwwLGg9bFt1LTFdWzFdfHwwLHA9KGYtaCkvMixkPTA7ZDxhOysrZCl7dmFyIHY9dFtuW2RdXSxfPXZbdV1bMV18fDAsZz12W3UtMV1bMV18fDA7cCs9Xy1nfWMrPWYscys9cCpmfWVbdS0xXVsxXSs9ZVt1LTFdWzBdPW8sYyYmKG8tPXMvYyl9ZVt1LTFdWzFdKz1lW3UtMV1bMF09byx6dyh0LG4pfX0sVXc9ZnVuY3Rpb24odCl7dmFyIG49dC5tYXAoV2MpO3JldHVybiBSdyh0KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5bdF0tbltlXX0pfSxGdz1mdW5jdGlvbih0KXtyZXR1cm4gVXcodCkucmV2ZXJzZSgpfSxJdz1mdW5jdGlvbih0KXt2YXIgbixlLHI9dC5sZW5ndGgsaT10Lm1hcChXYyksbz1Sdyh0KS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGlbbl0taVt0XX0pLHU9MCxhPTAsYz1bXSxzPVtdO2ZvcihuPTA7bjxyOysrbillPW9bbl0sdTxhPyh1Kz1pW2VdLGMucHVzaChlKSk6KGErPWlbZV0scy5wdXNoKGUpKTtyZXR1cm4gcy5yZXZlcnNlKCkuY29uY2F0KGMpfSxqdz1mdW5jdGlvbih0KXtyZXR1cm4gUncodCkucmV2ZXJzZSgpfSxZdz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O1pjLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WmMsaW5zZXJ0OmZ1bmN0aW9uKHQsbil7dmFyIGUscixpO2lmKHQpe2lmKG4uUD10LG4uTj10Lk4sdC5OJiYodC5OLlA9biksdC5OPW4sdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9bn1lbHNlIHQuUj1uO2U9dH1lbHNlIHRoaXMuXz8odD10cyh0aGlzLl8pLG4uUD1udWxsLG4uTj10LHQuUD10Lkw9bixlPXQpOihuLlA9bi5OPW51bGwsdGhpcy5fPW4sZT1udWxsKTtmb3Iobi5MPW4uUj1udWxsLG4uVT1lLG4uQz0hMCx0PW47ZSYmZS5DOylyPWUuVSxlPT09ci5MPyhpPXIuUixpJiZpLkM/KGUuQz1pLkM9ITEsci5DPSEwLHQ9cik6KHQ9PT1lLlImJihRYyh0aGlzLGUpLHQ9ZSxlPXQuVSksZS5DPSExLHIuQz0hMCxLYyh0aGlzLHIpKSk6KGk9ci5MLGkmJmkuQz8oZS5DPWkuQz0hMSxyLkM9ITAsdD1yKToodD09PWUuTCYmKEtjKHRoaXMsZSksdD1lLGU9dC5VKSxlLkM9ITEsci5DPSEwLFFjKHRoaXMscikpKSxlPXQuVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3QuTiYmKHQuTi5QPXQuUCksdC5QJiYodC5QLk49dC5OKSx0Lk49dC5QPW51bGw7dmFyIG4sZSxyLGk9dC5VLG89dC5MLHU9dC5SO2lmKGU9bz91P3RzKHUpOm86dSxpP2kuTD09PXQ/aS5MPWU6aS5SPWU6dGhpcy5fPWUsbyYmdT8ocj1lLkMsZS5DPXQuQyxlLkw9byxvLlU9ZSxlIT09dT8oaT1lLlUsZS5VPXQuVSx0PWUuUixpLkw9dCxlLlI9dSx1LlU9ZSk6KGUuVT1pLGk9ZSx0PWUuUikpOihyPXQuQyx0PWUpLHQmJih0LlU9aSksIXIpe2lmKHQmJnQuQylyZXR1cm4gdm9pZCh0LkM9ITEpO2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PWkuTCl7aWYobj1pLlIsbi5DJiYobi5DPSExLGkuQz0hMCxRYyh0aGlzLGkpLG49aS5SKSxuLkwmJm4uTC5DfHxuLlImJm4uUi5DKXtuLlImJm4uUi5DfHwobi5MLkM9ITEsbi5DPSEwLEtjKHRoaXMsbiksbj1pLlIpLG4uQz1pLkMsaS5DPW4uUi5DPSExLFFjKHRoaXMsaSksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYobj1pLkwsbi5DJiYobi5DPSExLGkuQz0hMCxLYyh0aGlzLGkpLG49aS5MKSxuLkwmJm4uTC5DfHxuLlImJm4uUi5DKXtuLkwmJm4uTC5DfHwobi5SLkM9ITEsbi5DPSEwLFFjKHRoaXMsbiksbj1pLkwpLG4uQz1pLkMsaS5DPW4uTC5DPSExLEtjKHRoaXMsaSksdD10aGlzLl87YnJlYWt9bi5DPSEwLHQ9aSxpPWkuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fTt2YXIgQncsSHcsWHcsVncsV3csR3c9W10sJHc9W10sWnc9MWUtNixKdz0xZS0xMjtrcy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmtzLHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoZnVuY3Rpb24obil7dmFyIGU9bi5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBzcyhuLHRbZV0pfSk7cmV0dXJuIGUuZGF0YT1uLnNpdGUuZGF0YSxlfSl9LHRyaWFuZ2xlczpmdW5jdGlvbigpe3ZhciB0PVtdLG49dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7aWYobz0oaT1lLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgaSxvLHUsYT1lLnNpdGUsYz0tMSxzPW5baVtvLTFdXSxsPXMubGVmdD09PWE/cy5yaWdodDpzLmxlZnQ7KytjPG87KXU9bCxzPW5baVtjXV0sbD1zLmxlZnQ9PT1hP3MucmlnaHQ6cy5sZWZ0LHUmJmwmJnI8dS5pbmRleCYmcjxsLmluZGV4JiZNcyhhLHUsbCk8MCYmdC5wdXNoKFthLmRhdGEsdS5kYXRhLGwuZGF0YV0pfSksdH0sbGlua3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQucmlnaHR9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3NvdXJjZTp0LmxlZnQuZGF0YSx0YXJnZXQ6dC5yaWdodC5kYXRhfX0pfSxmaW5kOmZ1bmN0aW9uKHQsbixlKXtmb3IodmFyIHIsaSxvPXRoaXMsdT1vLl9mb3VuZHx8MCxhPW8uY2VsbHMubGVuZ3RoOyEoaT1vLmNlbGxzW3VdKTspaWYoKyt1Pj1hKXJldHVybiBudWxsO3ZhciBjPXQtaS5zaXRlWzBdLHM9bi1pLnNpdGVbMV0sbD1jKmMrcypzO2RvIGk9by5jZWxsc1tyPXVdLHU9bnVsbCxpLmhhbGZlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW8uZWRnZXNbZV0sYT1yLmxlZnQ7aWYoYSE9PWkuc2l0ZSYmYXx8KGE9ci5yaWdodCkpe3ZhciBjPXQtYVswXSxzPW4tYVsxXSxmPWMqYytzKnM7ZjxsJiYobD1mLHU9YS5pbmRleCl9fSk7d2hpbGUobnVsbCE9PXUpO3JldHVybiBvLl9mb3VuZD1yLG51bGw9PWV8fGw8PWUqZT9pLnNpdGU6bnVsbH19O3ZhciBRdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIG5ldyBrcyh0Lm1hcChmdW5jdGlvbihyLGkpe3ZhciBvPVtNYXRoLnJvdW5kKG4ocixpLHQpL1p3KSpadyxNYXRoLnJvdW5kKGUocixpLHQpL1p3KSpad107cmV0dXJuIG8uaW5kZXg9aSxvLmRhdGE9cixvfSkscil9dmFyIG49R2MsZT0kYyxyPW51bGw7cmV0dXJuIHQucG9seWdvbnM9ZnVuY3Rpb24obil7cmV0dXJuIHQobikucG9seWdvbnMoKX0sdC5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gdChuKS5saW5rcygpfSx0LnRyaWFuZ2xlcz1mdW5jdGlvbihuKXtyZXR1cm4gdChuKS50cmlhbmdsZXMoKX0sdC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6WXcoK2UpLHQpOm59LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOll3KCtuKSx0KTplfSx0LmV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT1uP251bGw6W1srblswXVswXSwrblswXVsxXV0sWytuWzFdWzBdLCtuWzFdWzFdXV0sdCk6ciYmW1tyWzBdWzBdLHJbMF1bMV1dLFtyWzFdWzBdLHJbMV1bMV1dXX0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PW4/bnVsbDpbWzAsMF0sWytuWzBdLCtuWzFdXV0sdCk6ciYmW3JbMV1bMF0tclswXVswXSxyWzFdWzFdLXJbMF1bMV1dfSx0fSxLdz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O0FzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QXMsc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P3RoaXM6bmV3IEFzKHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxuKXtyZXR1cm4gMD09PXQmMD09PW4/dGhpczpuZXcgQXModGhpcy5rLHRoaXMueCt0aGlzLmsqdCx0aGlzLnkrdGhpcy5rKm4pfSxhcHBseTpmdW5jdGlvbih0KXtyZXR1cm5bdFswXSp0aGlzLmsrdGhpcy54LHRbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKHQpe3JldHVyblsodFswXS10aGlzLngpL3RoaXMuaywodFsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0scmVzY2FsZVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgdE09bmV3IEFzKDEsMCwwKTtOcy5wcm90b3R5cGU9QXMucHJvdG90eXBlO3ZhciBuTT1mdW5jdGlvbigpe3QuZXZlbnQucHJldmVudERlZmF1bHQoKSx0LmV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfSxlTT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCl7dC5vbigid2hlZWwuem9vbSIscykub24oIm1vdXNlZG93bi56b29tIixsKS5vbigiZGJsY2xpY2suem9vbSIsZikub24oInRvdWNoc3RhcnQuem9vbSIsaCkub24oInRvdWNobW92ZS56b29tIixwKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIix2KS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLnByb3BlcnR5KCJfX3pvb20iLHpzKX1mdW5jdGlvbiBlKHQsbil7cmV0dXJuIG49TWF0aC5tYXgoeCxNYXRoLm1pbihiLG4pKSxuPT09dC5rP3Q6bmV3IEFzKG4sdC54LHQueSl9ZnVuY3Rpb24gcih0LG4sZSl7dmFyIHI9blswXS1lWzBdKnQuayxpPW5bMV0tZVsxXSp0Lms7cmV0dXJuIHI9PT10LngmJmk9PT10Lnk/dDpuZXcgQXModC5rLHIsaSl9ZnVuY3Rpb24gaSh0LG4pe3ZhciBlPXQuaW52ZXJ0WChuWzBdWzBdKS13LHI9dC5pbnZlcnRYKG5bMV1bMF0pLU0saT10LmludmVydFkoblswXVsxXSktVCxvPXQuaW52ZXJ0WShuWzFdWzFdKS1rO3JldHVybiB0LnRyYW5zbGF0ZShyPmU/KGUrcikvMjpNYXRoLm1pbigwLGUpfHxNYXRoLm1heCgwLHIpLG8+aT8oaStvKS8yOk1hdGgubWluKDAsaSl8fE1hdGgubWF4KDAsbykpfWZ1bmN0aW9uIG8odCl7cmV0dXJuWygrdFswXVswXSsgK3RbMV1bMF0pLzIsKCt0WzBdWzFdKyArdFsxXVsxXSkvMl19ZnVuY3Rpb24gdSh0LG4sZSl7dC5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXthKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe2EodGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cyxpPWEodCxyKSx1PW0uYXBwbHkodCxyKSxjPWV8fG8odSkscz1NYXRoLm1heCh1WzFdWzBdLXVbMF1bMF0sdVsxXVsxXS11WzBdWzFdKSxsPXQuX196b29tLGY9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0LHIpOm4saD1BKGwuaW52ZXJ0KGMpLmNvbmNhdChzL2wuayksZi5pbnZlcnQoYykuY29uY2F0KHMvZi5rKSk7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKDE9PT10KXQ9ZjtlbHNle3ZhciBuPWgodCksZT1zL25bMl07dD1uZXcgQXMoZSxjWzBdLW5bMF0qZSxjWzFdLW5bMV0qZSl9aS56b29tKG51bGwsdCl9fSl9ZnVuY3Rpb24gYSh0LG4pe2Zvcih2YXIgZSxyPTAsaT1FLmxlbmd0aDtyPGk7KytyKWlmKChlPUVbcl0pLnRoYXQ9PT10KXJldHVybiBlO3JldHVybiBuZXcgYyh0LG4pfWZ1bmN0aW9uIGModCxuKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9bix0aGlzLmluZGV4PS0xLHRoaXMuYWN0aXZlPTAsdGhpcy5leHRlbnQ9bS5hcHBseSh0LG4pfWZ1bmN0aW9uIHMoKXtmdW5jdGlvbiBuKCl7by53aGVlbD1udWxsLG8uZW5kKCl9aWYoeS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBvPWEodGhpcyxhcmd1bWVudHMpLHU9dGhpcy5fX3pvb20sYz1NYXRoLm1heCh4LE1hdGgubWluKGIsdS5rKk1hdGgucG93KDIsLXQuZXZlbnQuZGVsdGFZKih0LmV2ZW50LmRlbHRhTW9kZT8xMjA6MSkvNTAwKSkpLHM9SWwodGhpcyk7aWYoby53aGVlbClvLm1vdXNlWzBdWzBdPT09c1swXSYmby5tb3VzZVswXVsxXT09PXNbMV18fChvLm1vdXNlWzFdPXUuaW52ZXJ0KG8ubW91c2VbMF09cykpLGNsZWFyVGltZW91dChvLndoZWVsKTtlbHNle2lmKHUuaz09PWMpcmV0dXJuO28ubW91c2U9W3MsdS5pbnZlcnQocyldLHZwKHRoaXMpLG8uc3RhcnQoKX1uTSgpLG8ud2hlZWw9c2V0VGltZW91dChuLHopLG8uem9vbSgibW91c2UiLGkocihlKHUsYyksby5tb3VzZVswXSxvLm1vdXNlWzFdKSxvLmV4dGVudCkpfX1mdW5jdGlvbiBsKCl7ZnVuY3Rpb24gbigpe25NKCksby5tb3ZlZD0hMCxvLnpvb20oIm1vdXNlIixpKHIoby50aGF0Ll9fem9vbSxvLm1vdXNlWzBdPUlsKG8udGhhdCksby5tb3VzZVsxXSksby5leHRlbnQpKX1mdW5jdGlvbiBlKCl7dS5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxndCh0LmV2ZW50LnZpZXcsby5tb3ZlZCksbk0oKSxvLmVuZCgpfWlmKCFnJiZ5LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG89YSh0aGlzLGFyZ3VtZW50cyksdT1NZih0LmV2ZW50LnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsbiwhMCkub24oIm1vdXNldXAuem9vbSIsZSwhMCksYz1JbCh0aGlzKTtOZih0LmV2ZW50LnZpZXcpLEVzKCksby5tb3VzZT1bYyx0aGlzLl9fem9vbS5pbnZlcnQoYyldLHZwKHRoaXMpLG8uc3RhcnQoKX19ZnVuY3Rpb24gZigpe2lmKHkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbz10aGlzLl9fem9vbSxhPUlsKHRoaXMpLGM9by5pbnZlcnQoYSkscz1vLmsqKHQuZXZlbnQuc2hpZnRLZXk/LjU6MiksbD1pKHIoZShvLHMpLGEsYyksbS5hcHBseSh0aGlzLGFyZ3VtZW50cykpO25NKCksUz4wP01mKHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihTKS5jYWxsKHUsbCxhKTpNZih0aGlzKS5jYWxsKG4udHJhbnNmb3JtLGwpfX1mdW5jdGlvbiBoKCl7aWYoeS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBuLGUscixpLG89YSh0aGlzLGFyZ3VtZW50cyksdT10LmV2ZW50LmNoYW5nZWRUb3VjaGVzLGM9dS5sZW5ndGg7Zm9yKEVzKCksZT0wO2U8YzsrK2Upcj11W2VdLGk9a2YodGhpcyx1LHIuaWRlbnRpZmllciksaT1baSx0aGlzLl9fem9vbS5pbnZlcnQoaSksci5pZGVudGlmaWVyXSxvLnRvdWNoMD9vLnRvdWNoMXx8KG8udG91Y2gxPWkpOihvLnRvdWNoMD1pLG49ITApO3JldHVybiBfJiYoXz1jbGVhclRpbWVvdXQoXyksIW8udG91Y2gxKT8oby5lbmQoKSxpPU1mKHRoaXMpLm9uKCJkYmxjbGljay56b29tIiksdm9pZChpJiZpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpOnZvaWQobiYmKF89c2V0VGltZW91dChmdW5jdGlvbigpe189bnVsbH0sUCksdnAodGhpcyksby5zdGFydCgpKSl9fWZ1bmN0aW9uIHAoKXt2YXIgbixvLHUsYyxzPWEodGhpcyxhcmd1bWVudHMpLGw9dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxmPWwubGVuZ3RoO2ZvcihuTSgpLF8mJihfPWNsZWFyVGltZW91dChfKSksbj0wO248ZjsrK24pbz1sW25dLHU9a2YodGhpcyxsLG8uaWRlbnRpZmllcikscy50b3VjaDAmJnMudG91Y2gwWzJdPT09by5pZGVudGlmaWVyP3MudG91Y2gwWzBdPXU6cy50b3VjaDEmJnMudG91Y2gxWzJdPT09by5pZGVudGlmaWVyJiYocy50b3VjaDFbMF09dSk7aWYobz1zLnRoYXQuX196b29tLHMudG91Y2gxKXt2YXIgaD1zLnRvdWNoMFswXSxwPXMudG91Y2gwWzFdLGQ9cy50b3VjaDFbMF0sdj1zLnRvdWNoMVsxXSxnPShnPWRbMF0taFswXSkqZysoZz1kWzFdLWhbMV0pKmcseT0oeT12WzBdLXBbMF0pKnkrKHk9dlsxXS1wWzFdKSp5O289ZShvLE1hdGguc3FydChnL3kpKSx1PVsoaFswXStkWzBdKS8yLChoWzFdK2RbMV0pLzJdLGM9WyhwWzBdK3ZbMF0pLzIsKHBbMV0rdlsxXSkvMl19ZWxzZXtpZighcy50b3VjaDApcmV0dXJuO3U9cy50b3VjaDBbMF0sYz1zLnRvdWNoMFsxXX1zLnpvb20oInRvdWNoIixpKHIobyx1LGMpLHMuZXh0ZW50KSl9ZnVuY3Rpb24gdigpe3ZhciBuLGUscj1hKHRoaXMsYXJndW1lbnRzKSxpPXQuZXZlbnQuY2hhbmdlZFRvdWNoZXMsbz1pLmxlbmd0aDtmb3IoRXMoKSxnJiZjbGVhclRpbWVvdXQoZyksZz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zz1udWxsfSxQKSxuPTA7bjxvOysrbillPWlbbl0sci50b3VjaDAmJnIudG91Y2gwWzJdPT09ZS5pZGVudGlmaWVyP2RlbGV0ZSByLnRvdWNoMDpyLnRvdWNoMSYmci50b3VjaDFbMl09PT1lLmlkZW50aWZpZXImJmRlbGV0ZSByLnRvdWNoMTtyLnRvdWNoMSYmIXIudG91Y2gwJiYoci50b3VjaDA9ci50b3VjaDEsZGVsZXRlIHIudG91Y2gxKSxyLnRvdWNoMHx8ci5lbmQoKX12YXIgXyxnLHk9Q3MsbT1Qcyx4PTAsYj0xLzAsdz0tYixNPWIsVD13LGs9TSxTPTI1MCxBPUloLEU9W10sQz1kKCJzdGFydCIsInpvb20iLCJlbmQiKSxQPTUwMCx6PTE1MDtyZXR1cm4gbi50cmFuc2Zvcm09ZnVuY3Rpb24odCxuKXt2YXIgZT10LnNlbGVjdGlvbj90LnNlbGVjdGlvbigpOnQ7ZS5wcm9wZXJ0eSgiX196b29tIix6cyksdCE9PWU/dSh0LG4pOmUuaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpe2EodGhpcyxhcmd1bWVudHMpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4pLmVuZCgpfSl9LG4uc2NhbGVCeT1mdW5jdGlvbih0LGUpe24uc2NhbGVUbyh0LGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX3pvb20uayxuPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmU7cmV0dXJuIHQqbn0pfSxuLnNjYWxlVG89ZnVuY3Rpb24odCx1KXtuLnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7dmFyIHQ9bS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj10aGlzLl9fem9vbSxhPW8odCksYz1uLmludmVydChhKSxzPSJmdW5jdGlvbiI9PXR5cGVvZiB1P3UuYXBwbHkodGhpcyxhcmd1bWVudHMpOnU7cmV0dXJuIGkocihlKG4scyksYSxjKSx0KX0pfSxuLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKHQsZSxyKXtuLnRyYW5zZm9ybSh0LGZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ciksbS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGMucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuaW5kZXg9RS5wdXNoKHRoaXMpLTEsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMubW91c2UmJiJtb3VzZSIhPT10JiYodGhpcy5tb3VzZVsxXT1uLmludmVydCh0aGlzLm1vdXNlWzBdKSksdGhpcy50b3VjaDAmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDBbMV09bi5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMVsxXT1uLmludmVydCh0aGlzLnRvdWNoMVswXSkpLHRoaXMudGhhdC5fX3pvb209bix0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PS0tdGhpcy5hY3RpdmUmJihFLnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXtOKG5ldyBTcyhuLHQsdGhpcy50aGF0Ll9fem9vbSksQy5hcHBseSxDLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LG4uZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6S3coISF0KSxuKTp5fSxuLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Okt3KFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxuKTptfSxuLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh4PSt0WzBdLGI9K3RbMV0sbik6W3gsYl19LG4udHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PSt0WzBdWzBdLE09K3RbMV1bMF0sVD0rdFswXVsxXSxrPSt0WzFdWzFdLG4pOltbdyxUXSxbTSxrXV19LG4uZHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9K3Qsbik6U30sbi5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oQT10LG4pOkF9LG4ub249ZnVuY3Rpb24oKXt2YXIgdD1DLm9uLmFwcGx5KEMsYXJndW1lbnRzKTtyZXR1cm4gdD09PUM/bjp0fSxufTt0LnZlcnNpb249UnMsdC5iaXNlY3Q9RHMsdC5iaXNlY3RSaWdodD1Ecyx0LmJpc2VjdExlZnQ9VXMsdC5hc2NlbmRpbmc9T3MsdC5iaXNlY3Rvcj1Mcyx0LmNyb3NzPUlzLHQuZGVzY2VuZGluZz1qcyx0LmRldmlhdGlvbj1Icyx0LmV4dGVudD1Ycyx0Lmhpc3RvZ3JhbT1ybCx0LnRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXM9b2wsdC50aHJlc2hvbGRTY290dD11bCx0LnRocmVzaG9sZFN0dXJnZXM9ZWwsdC5tYXg9YWwsdC5tZWFuPWNsLHQubWVkaWFuPXNsLHQubWVyZ2U9bGwsdC5taW49ZmwsdC5wYWlycz1Gcyx0LnBlcm11dGU9aGwsdC5xdWFudGlsZT1pbCx0LnJhbmdlPUpzLHQuc2Nhbj1wbCx0LnNodWZmbGU9ZGwsdC5zdW09dmwsdC50aWNrcz1ubCx0LnRpY2tTdGVwPXIsdC50cmFuc3Bvc2U9X2wsdC52YXJpYW5jZT1Ccyx0LnppcD1nbCx0LmF4aXNUb3A9bCx0LmF4aXNSaWdodD1mLHQuYXhpc0JvdHRvbT1oLHQuYXhpc0xlZnQ9cCx0LmJydXNoPUVkLHQuYnJ1c2hYPUVlLHQuYnJ1c2hZPUNlLHQuYnJ1c2hTZWxlY3Rpb249TmUsdC5jaG9yZD1xZCx0LnJpYmJvbj1CZCx0Lm5lc3Q9WGQsdC5zZXQ9V2UsdC5tYXA9amUsdC5rZXlzPVdkLHQudmFsdWVzPUdkLHQuZW50cmllcz0kZCx0LmNvbG9yPVR0LHQucmdiPU50LHQuaHNsPXp0LHQubGFiPXF0LHQuaGNsPUJ0LHQuY3ViZWhlbGl4PVZ0LHQuZGlzcGF0Y2g9ZCx0LmRyYWc9Q2YsdC5kcmFnRGlzYWJsZT1OZix0LmRyYWdFbmFibGU9Z3QsdC5kc3ZGb3JtYXQ9WmQsdC5jc3ZQYXJzZT1RZCx0LmNzdlBhcnNlUm93cz1LZCx0LmNzdkZvcm1hdD10dix0LmNzdkZvcm1hdFJvd3M9bnYsdC50c3ZQYXJzZT1ydix0LnRzdlBhcnNlUm93cz1pdix0LnRzdkZvcm1hdD1vdix0LnRzdkZvcm1hdFJvd3M9dXYsdC5lYXNlTGluZWFyPWVlLHQuZWFzZVF1YWQ9b2UsdC5lYXNlUXVhZEluPXJlLHQuZWFzZVF1YWRPdXQ9aWUsdC5lYXNlUXVhZEluT3V0PW9lLHQuZWFzZUN1YmljPWNlLHQuZWFzZUN1YmljSW49dWUsdC5lYXNlQ3ViaWNPdXQ9YWUsdC5lYXNlQ3ViaWNJbk91dD1jZSx0LmVhc2VQb2x5PWpwLHQuZWFzZVBvbHlJbj1GcCx0LmVhc2VQb2x5T3V0PUlwLHQuZWFzZVBvbHlJbk91dD1qcCx0LmVhc2VTaW49ZmUsdC5lYXNlU2luSW49c2UsdC5lYXNlU2luT3V0PWxlLHQuZWFzZVNpbkluT3V0PWZlLHQuZWFzZUV4cD1kZSx0LmVhc2VFeHBJbj1oZSx0LmVhc2VFeHBPdXQ9cGUsdC5lYXNlRXhwSW5PdXQ9ZGUsdC5lYXNlQ2lyY2xlPWdlLHQuZWFzZUNpcmNsZUluPXZlLHQuZWFzZUNpcmNsZU91dD1fZSx0LmVhc2VDaXJjbGVJbk91dD1nZSx0LmVhc2VCb3VuY2U9bWUsdC5lYXNlQm91bmNlSW49eWUsdC5lYXNlQm91bmNlT3V0PW1lLHQuZWFzZUJvdW5jZUluT3V0PXhlLHQuZWFzZUJhY2s9cmQsdC5lYXNlQmFja0luPW5kLHQuZWFzZUJhY2tPdXQ9ZWQsdC5lYXNlQmFja0luT3V0PXJkLHQuZWFzZUVsYXN0aWM9Y2QsdC5lYXNlRWxhc3RpY0luPWFkLHQuZWFzZUVsYXN0aWNPdXQ9Y2QsdC5lYXNlRWxhc3RpY0luT3V0PXNkLHQuZm9yY2VDZW50ZXI9YXYsdC5mb3JjZUNvbGxpZGU9a3YsdC5mb3JjZUxpbms9U3YsdC5mb3JjZU1hbnlCb2R5PUN2LHQuZm9yY2VTaW11bGF0aW9uPUV2LHQuZm9yY2VYPVB2LHQuZm9yY2VZPXp2LHQuZm9ybWF0RGVmYXVsdExvY2FsZT1wcix0LmZvcm1hdExvY2FsZT1Ydix0LmZvcm1hdFNwZWNpZmllcj1mcix0LnByZWNpc2lvbkZpeGVkPVZ2LHQucHJlY2lzaW9uUHJlZml4PVd2LHQucHJlY2lzaW9uUm91bmQ9R3YsdC5nZW9BcmVhPXRnLHQuZ2VvQm91bmRzPXJnLHQuZ2VvQ2VudHJvaWQ9b2csdC5nZW9DaXJjbGU9eGcsdC5nZW9DbGlwRXh0ZW50PUFnLHQuZ2VvQ29udGFpbnM9VWcsdC5nZW9EaXN0YW5jZT1MZyx0Lmdlb0dyYXRpY3VsZT13aSx0Lmdlb0dyYXRpY3VsZTEwPU1pLHQuZ2VvSW50ZXJwb2xhdGU9RmcsdC5nZW9MZW5ndGg9emcsdC5nZW9QYXRoPWh5LHQuZ2VvQWxiZXJzPXd5LHQuZ2VvQWxiZXJzVXNhPU15LHQuZ2VvQXppbXV0aGFsRXF1YWxBcmVhPWt5LHQuZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3PVR5LHQuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnQ9QXksdC5nZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdz1TeSx0Lmdlb0NvbmljQ29uZm9ybWFsPUV5LHQuZ2VvQ29uaWNDb25mb3JtYWxSYXc9Zm8sdC5nZW9Db25pY0VxdWFsQXJlYT1ieSx0Lmdlb0NvbmljRXF1YWxBcmVhUmF3PWlvLHQuZ2VvQ29uaWNFcXVpZGlzdGFudD1QeSx0Lmdlb0NvbmljRXF1aWRpc3RhbnRSYXc9cG8sdC5nZW9FcXVpcmVjdGFuZ3VsYXI9Q3ksdC5nZW9FcXVpcmVjdGFuZ3VsYXJSYXc9aG8sdC5nZW9Hbm9tb25pYz16eSx0Lmdlb0dub21vbmljUmF3PXZvLHQuZ2VvSWRlbnRpdHk9UnksdC5nZW9Qcm9qZWN0aW9uPXRvLHQuZ2VvUHJvamVjdGlvbk11dGF0b3I9bm8sdC5nZW9NZXJjYXRvcj1OeSx0Lmdlb01lcmNhdG9yUmF3PWNvLHQuZ2VvT3J0aG9ncmFwaGljPU95LHQuZ2VvT3J0aG9ncmFwaGljUmF3PWdvLHQuZ2VvU3RlcmVvZ3JhcGhpYz1MeSx0Lmdlb1N0ZXJlb2dyYXBoaWNSYXc9eW8sdC5nZW9UcmFuc3ZlcnNlTWVyY2F0b3I9cXksdC5nZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc9bW8sdC5nZW9Sb3RhdGlvbj1tZyx0Lmdlb1N0cmVhbT1aXyx0Lmdlb1RyYW5zZm9ybT1feSx0LmNsdXN0ZXI9RHksdC5oaWVyYXJjaHk9RW8sdC5wYWNrPUt5LHQucGFja1NpYmxpbmdzPUp5LHQucGFja0VuY2xvc2U9WnksdC5wYXJ0aXRpb249ZW0sdC5zdHJhdGlmeT11bSx0LnRyZWU9YW0sdC50cmVlbWFwPWZtLHQudHJlZW1hcEJpbmFyeT1obSx0LnRyZWVtYXBEaWNlPW5tLHQudHJlZW1hcFNsaWNlPWNtLHQudHJlZW1hcFNsaWNlRGljZT1wbSx0LnRyZWVtYXBTcXVhcmlmeT1sbSx0LnRyZWVtYXBSZXNxdWFyaWZ5PWRtLHQuaW50ZXJwb2xhdGU9RWgsdC5pbnRlcnBvbGF0ZUFycmF5PXdoLHQuaW50ZXJwb2xhdGVCYXNpcz1faCx0LmludGVycG9sYXRlQmFzaXNDbG9zZWQ9Z2gsdC5pbnRlcnBvbGF0ZURhdGU9TWgsdC5pbnRlcnBvbGF0ZU51bWJlcj1UaCx0LmludGVycG9sYXRlT2JqZWN0PWtoLHQuaW50ZXJwb2xhdGVSb3VuZD1DaCx0LmludGVycG9sYXRlU3RyaW5nPU5oLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M9T2gsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybVN2Zz1MaCx0LmludGVycG9sYXRlWm9vbT1JaCx0LmludGVycG9sYXRlUmdiPW1oLHQuaW50ZXJwb2xhdGVSZ2JCYXNpcz14aCx0LmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ9YmgsdC5pbnRlcnBvbGF0ZUhzbD1qaCx0LmludGVycG9sYXRlSHNsTG9uZz1ZaCx0LmludGVycG9sYXRlTGFiPWZuLHQuaW50ZXJwb2xhdGVIY2w9QmgsdC5pbnRlcnBvbGF0ZUhjbExvbmc9SGgsdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeD1YaCx0LmludGVycG9sYXRlQ3ViZWhlbGl4TG9uZz1WaCx0LnF1YW50aXplPVdoLHQucGF0aD1PZSx0LnBvbHlnb25BcmVhPXZtLHQucG9seWdvbkNlbnRyb2lkPV9tLHQucG9seWdvbkh1bGw9eW07dC5wb2x5Z29uQ29udGFpbnM9bW07dC5wb2x5Z29uTGVuZ3RoPXhtLHQucXVhZHRyZWU9ZXIsdC5xdWV1ZT15dSx0LnJhbmRvbVVuaWZvcm09TW0sdC5yYW5kb21Ob3JtYWw9VG0sdC5yYW5kb21Mb2dOb3JtYWw9a20sdC5yYW5kb21CYXRlcz1BbSx0LnJhbmRvbUlyd2luSGFsbD1TbSx0LnJhbmRvbUV4cG9uZW50aWFsPU5tLHQucmVxdWVzdD1FbSx0Lmh0bWw9UG0sdC5qc29uPXptLHQudGV4dD1SbSx0LnhtbD1PbSx0LmNzdj1xbSx0LnRzdj1EbSx0LnNjYWxlQmFuZD1NdSx0LnNjYWxlUG9pbnQ9a3UsdC5zY2FsZUlkZW50aXR5PUx1LHQuc2NhbGVMaW5lYXI9T3UsdC5zY2FsZUxvZz1ZdSx0LnNjYWxlT3JkaW5hbD13dSx0LnNjYWxlSW1wbGljaXQ9am0sdC5zY2FsZVBvdz1IdSx0LnNjYWxlU3FydD1YdSx0LnNjYWxlUXVhbnRpbGU9VnUsdC5zY2FsZVF1YW50aXplPVd1LHQuc2NhbGVUaHJlc2hvbGQ9R3UsdC5zY2FsZVRpbWU9cGIsdC5zY2FsZVV0Yz1kYix0LnNjaGVtZUNhdGVnb3J5MTA9X2IsdC5zY2hlbWVDYXRlZ29yeTIwYj1nYix0LnNjaGVtZUNhdGVnb3J5MjBjPXliLHQuc2NoZW1lQ2F0ZWdvcnkyMD1tYix0LmludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdD14Yix0LmludGVycG9sYXRlUmFpbmJvdz1UYix0LmludGVycG9sYXRlV2FybT1iYix0LmludGVycG9sYXRlQ29vbD13Yix0LmludGVycG9sYXRlVmlyaWRpcz1rYix0LmludGVycG9sYXRlTWFnbWE9U2IsdC5pbnRlcnBvbGF0ZUluZmVybm89QWIsdC5pbnRlcnBvbGF0ZVBsYXNtYT1OYix0LnNjYWxlU2VxdWVudGlhbD1lYyx0LmNyZWF0b3I9RWwsdC5sb2NhbD1iLHQubWF0Y2hlcj1PbCx0Lm1vdXNlPUlsLHQubmFtZXNwYWNlPU5sLHQubmFtZXNwYWNlcz1BbCx0LnNlbGVjdD1NZix0LnNlbGVjdEFsbD1UZix0LnNlbGVjdGlvbj12dCx0LnNlbGVjdG9yPWpsLHQuc2VsZWN0b3JBbGw9QmwsdC50b3VjaD1rZix0LnRvdWNoZXM9U2YsdC53aW5kb3c9c2YsdC5jdXN0b21FdmVudD1OLHQuYXJjPWpiLHQuYXJlYT1IYix0LmxpbmU9QmIsdC5waWU9V2IsdC5yYWRpYWxBcmVhPVpiLHQucmFkaWFsTGluZT0kYix0LnN5bWJvbD1fdyx0LnN5bWJvbHM9dncsdC5zeW1ib2xDaXJjbGU9SmIsdC5zeW1ib2xDcm9zcz1RYix0LnN5bWJvbERpYW1vbmQ9bncsdC5zeW1ib2xTcXVhcmU9YXcsdC5zeW1ib2xTdGFyPXV3LHQuc3ltYm9sVHJpYW5nbGU9c3csdC5zeW1ib2xXeWU9ZHcsdC5jdXJ2ZUJhc2lzQ2xvc2VkPW13LHQuY3VydmVCYXNpc09wZW49eHcsdC5jdXJ2ZUJhc2lzPXl3LHQuY3VydmVCdW5kbGU9YncsdC5jdXJ2ZUNhcmRpbmFsQ2xvc2VkPU13LHQuY3VydmVDYXJkaW5hbE9wZW49VHcsdC5jdXJ2ZUNhcmRpbmFsPXd3LHQuY3VydmVDYXRtdWxsUm9tQ2xvc2VkPVN3LHQuY3VydmVDYXRtdWxsUm9tT3Blbj1Bdyx0LmN1cnZlQ2F0bXVsbFJvbT1rdyx0LmN1cnZlTGluZWFyQ2xvc2VkPU53LHQuY3VydmVMaW5lYXI9WWIsdC5jdXJ2ZU1vbm90b25lWD1GYyx0LmN1cnZlTW9ub3RvbmVZPUljLHQuY3VydmVOYXR1cmFsPUV3LHQuY3VydmVTdGVwPUN3LHQuY3VydmVTdGVwQWZ0ZXI9WGMsdC5jdXJ2ZVN0ZXBCZWZvcmU9SGMsdC5zdGFjaz1Pdyx0LnN0YWNrT2Zmc2V0RXhwYW5kPUx3LHQuc3RhY2tPZmZzZXROb25lPXp3LHQuc3RhY2tPZmZzZXRTaWxob3VldHRlPXF3LHQuc3RhY2tPZmZzZXRXaWdnbGU9RHcsdC5zdGFja09yZGVyQXNjZW5kaW5nPVV3LHQuc3RhY2tPcmRlckRlc2NlbmRpbmc9RncsdC5zdGFja09yZGVySW5zaWRlT3V0PUl3LHQuc3RhY2tPcmRlck5vbmU9UncsdC5zdGFja09yZGVyUmV2ZXJzZT1qdyx0LnRpbWVJbnRlcnZhbD0kdSx0LnRpbWVNaWxsaXNlY29uZD0kbSx0LnRpbWVNaWxsaXNlY29uZHM9Wm0sdC51dGNNaWxsaXNlY29uZD0kbSx0LnV0Y01pbGxpc2Vjb25kcz1abSx0LnRpbWVTZWNvbmQ9ZXgsdC50aW1lU2Vjb25kcz1yeCx0LnV0Y1NlY29uZD1leCx0LnV0Y1NlY29uZHM9cngsdC50aW1lTWludXRlPWl4LHQudGltZU1pbnV0ZXM9b3gsdC50aW1lSG91cj11eCx0LnRpbWVIb3Vycz1heCx0LnRpbWVEYXk9Y3gsdC50aW1lRGF5cz1zeCx0LnRpbWVXZWVrPWx4LHQudGltZVdlZWtzPWd4LHQudGltZVN1bmRheT1seCx0LnRpbWVTdW5kYXlzPWd4LHQudGltZU1vbmRheT1meCx0LnRpbWVNb25kYXlzPXl4LHQudGltZVR1ZXNkYXk9aHgsdC50aW1lVHVlc2RheXM9bXgsdC50aW1lV2VkbmVzZGF5PXB4LHQudGltZVdlZG5lc2RheXM9eHgsdC50aW1lVGh1cnNkYXk9ZHgsdC50aW1lVGh1cnNkYXlzPWJ4LHQudGltZUZyaWRheT12eCx0LnRpbWVGcmlkYXlzPXd4LHQudGltZVNhdHVyZGF5PV94LHQudGltZVNhdHVyZGF5cz1NeCx0LnRpbWVNb250aD1UeCx0LnRpbWVNb250aHM9a3gsdC50aW1lWWVhcj1TeCx0LnRpbWVZZWFycz1BeCx0LnV0Y01pbnV0ZT1OeCx0LnV0Y01pbnV0ZXM9RXgsdC51dGNIb3VyPUN4LHQudXRjSG91cnM9UHgsdC51dGNEYXk9engsdC51dGNEYXlzPVJ4LHQudXRjV2Vlaz1PeCx0LnV0Y1dlZWtzPWp4LHQudXRjU3VuZGF5PU94LHQudXRjU3VuZGF5cz1qeCx0LnV0Y01vbmRheT1MeCx0LnV0Y01vbmRheXM9WXgsdC51dGNUdWVzZGF5PXF4LHQudXRjVHVlc2RheXM9QngsdC51dGNXZWRuZXNkYXk9RHgsdC51dGNXZWRuZXNkYXlzPUh4LHQudXRjVGh1cnNkYXk9VXgsdC51dGNUaHVyc2RheXM9WHgsdC51dGNGcmlkYXk9RngsdC51dGNGcmlkYXlzPVZ4LHQudXRjU2F0dXJkYXk9SXgsdC51dGNTYXR1cmRheXM9V3gsdC51dGNNb250aD1HeCx0LnV0Y01vbnRocz0keCx0LnV0Y1llYXI9WngsdC51dGNZZWFycz1ReCx0LnRpbWVGb3JtYXREZWZhdWx0TG9jYWxlPSRhLHQudGltZUZvcm1hdExvY2FsZT1uYSx0Lmlzb0Zvcm1hdD1pYix0Lmlzb1BhcnNlPW9iLHQubm93PWRuLHQudGltZXI9Z24sdC50aW1lckZsdXNoPXluLHQudGltZW91dD1ycCx0LmludGVydmFsPWlwLHQudHJhbnNpdGlvbj10ZSx0LmFjdGl2ZT1wZCx0LmludGVycnVwdD12cCx0LnZvcm9ub2k9UXcsdC56b29tPWVNLHQuem9vbVRyYW5zZm9ybT1Ocyx0Lnpvb21JZGVudGl0eT10TSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0sZnVuY3Rpb24odCxuLGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX1PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9ZSgxMSksbz1yKGkpO24uZGVmYXVsdD1mdW5jdGlvbih0LG4sZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPXQuc2VsZWN0QWxsKCIubGFiZWwiKS5kYXRhKHIpLHU9ZnVuY3Rpb24odCl7dmFyIHI9KDAsby5kZWZhdWx0KSh0LmRhdGEsbi54LGUuZGF0ZSkubGVuZ3RoO3JldHVybiB0Lm5hbWUrKHI+MD8iICgiK3IrIikiOiIiKX07aS50ZXh0KHUpLGkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJsYWJlbCIsITApLmF0dHIoIngiLGUubGFiZWxzV2lkdGgpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCxlKXtyZXR1cm4idHJhbnNsYXRlKDAsICIrKDQwK24ueShlKSkrIikifSkuYXR0cigidGV4dC1hbmNob3IiLCJlbmQiKS50ZXh0KHUpLGkuZXhpdCgpLnJlbW92ZSgpfX19LGZ1bmN0aW9uKHQsbixlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uYm9vbE9yUmV0dXJuVmFsdWU9bi5kcmF3Qm90dG9tQXhpcz1uLmRyYXdUb3BBeGlzPXZvaWQgMDt2YXIgaT1lKDQpLG89cihpKSx1PWZ1bmN0aW9uKHQsbixlLHIsaSl7cmV0dXJuIHQuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1heGlzIiwhMCkuY2xhc3NlZChyLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIitpKyIpIikuY2FsbCgoMCxvLmRlZmF1bHQpKG4sZSxyKSl9O24uZHJhd1RvcEF4aXM9ZnVuY3Rpb24odCxuLGUscil7cmV0dXJuIHUodCxuLGUsInRvcCIsMCl9LG4uZHJhd0JvdHRvbUF4aXM9ZnVuY3Rpb24odCxuLGUscil7cmV0dXJuIHUodCxuLGUsImJvdHRvbSIsK3IuaGVpZ2h0LTIxKX0sbi5ib29sT3JSZXR1cm5WYWx1ZT1mdW5jdGlvbih0LG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Qobik6dH19LGZ1bmN0aW9uKHQsbixlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtpZih0JiZ0Ll9fZXNNb2R1bGUpcmV0dXJuIHQ7dmFyIG49e307aWYobnVsbCE9dClmb3IodmFyIGUgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKSYmKG5bZV09dFtlXSk7cmV0dXJuIG4uZGVmYXVsdD10LG59T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uZGVmYXVsdD1mdW5jdGlvbih0LG4sZSl7dmFyIHI9bi5sb2NhbGU/bi5sb2NhbGUudGltZUZvcm1hdDpuLnRpY2tGb3JtYXQ7ZT0iIitlWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTt2YXIgaT1vWyJheGlzIitlXSgpLnNjYWxlKHQpLnRpY2tGb3JtYXQocik7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4uYXhpc0Zvcm1hdCYmbi5heGlzRm9ybWF0KGkpLGl9O3ZhciBpPWUoMSksbz1yKGkpfSxmdW5jdGlvbih0LG4sZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBuPXt9O2lmKG51bGwhPXQpZm9yKHZhciBlIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSkmJihuW2VdPXRbZV0pO3JldHVybiBuLmRlZmF1bHQ9dCxufU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1lKDEpLG89cihpKSx1PXtsaW5lSGVpZ2h0OjQwLHN0YXJ0Om5ldyBEYXRlKDApLGVuZDpuZXcgRGF0ZSxtaW5TY2FsZTowLG1heFNjYWxlOjEvMCxtYXJnaW46e3RvcDo2MCxsZWZ0OjIwMCxib3R0b206NDAscmlnaHQ6NTB9LGxhYmVsc1dpZHRoOjIxMCxsYWJlbHNSaWdodE1hcmdpbjoxMCxsb2NhbGU6bnVsbCxheGlzRm9ybWF0Om51bGwsdGlja0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgbj1vLnRpbWVGb3JtYXQoIi4lTCIpLGU9by50aW1lRm9ybWF0KCI6JVMiKSxyPW8udGltZUZvcm1hdCgiJUk6JU0iKSxpPW8udGltZUZvcm1hdCgiJUkgJXAiKSx1PW8udGltZUZvcm1hdCgiJWEgJWQiKSxhPW8udGltZUZvcm1hdCgiJWIgJWQiKSxjPW8udGltZUZvcm1hdCgiJUIiKSxzPW8udGltZUZvcm1hdCgiJVkiKTtyZXR1cm4oby50aW1lU2Vjb25kKHQpPHQ/bjpvLnRpbWVNaW51dGUodCk8dD9lOm8udGltZUhvdXIodCk8dD9yOm8udGltZURheSh0KTx0P2k6by50aW1lTW9udGgodCk8dD9vLnRpbWVXZWVrKHQpPHQ/dTphOm8udGltZVllYXIodCk8dD9jOnMpKHQpfSxtb3VzZW91dDpmdW5jdGlvbigpe30sbW91c2VvdmVyOmZ1bmN0aW9uKCl7fSx6b29tZW5kOmZ1bmN0aW9uKCl7fSxjbGljazpmdW5jdGlvbigpe30saGFzRGVsaW1pdGVyOiEwLGRhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGhhc1RvcEF4aXM6ITAsaGFzQm90dG9tQXhpczpmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+PTEwfSxldmVudExpbmVDb2xvcjoiYmxhY2siLGV2ZW50Q29sb3I6bnVsbCxtZXRhYmFsbHM6ITAsem9vbWFibGU6ITB9O3UuZGF0ZUZvcm1hdD11LmxvY2FsZT91LmxvY2FsZS50aW1lRm9ybWF0KCIlZCAlQiAlWSIpOm8udGltZUZvcm1hdCgiJWQgJUIgJVkiKSxuLmRlZmF1bHQ9dX0sZnVuY3Rpb24odCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO24uZGVsaW1pdGVycz1mdW5jdGlvbih0LG4sZSxyKXt2YXIgaT10LnNlbGVjdCgiLmV4dHJlbXVtIiksbz1uLnguZG9tYWluKCk7aS5zZWxlY3RBbGwoIi5taW5pbXVtIikucmVtb3ZlKCksaS5zZWxlY3RBbGwoIi5tYXhpbXVtIikucmVtb3ZlKCksaS5hcHBlbmQoInRleHQiKS50ZXh0KHIob1swXSkpLmNsYXNzZWQoIm1pbmltdW0iLCEwKSxpLmFwcGVuZCgidGV4dCIpLnRleHQocihvWzFdKSkuY2xhc3NlZCgibWF4aW11bSIsITApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhuLngucmFuZ2UoKVsxXS1lKSsiKSIpLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIil9fSxmdW5jdGlvbih0LG4sZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBuPXt9O2lmKG51bGwhPXQpZm9yKHZhciBlIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSkmJihuW2VdPXRbZV0pO3JldHVybiBuLmRlZmF1bHQ9dCxufU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1lKDEpO3IoaSk7bi5kZWZhdWx0PWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9dC5zZWxlY3RBbGwoIi5kcm9wLWxpbmUiKS5kYXRhKHIpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZHJvcC1saW5lIiwhMCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0LGUpe3JldHVybiJ0cmFuc2xhdGUoMTAsICIrbi55KGUpKyIpIn0pLmF0dHIoImZpbGwiLGUuZXZlbnRMaW5lQ29sb3IpLG89aS5zZWxlY3RBbGwoIi5kcm9wIik7by5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRhdGF9KS5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuY2xhc3NlZCgiZHJvcCIsITApLmF0dHIoInIiLDUpLmF0dHIoImN4IixmdW5jdGlvbih0KXtyZXR1cm4gbi54KGUuZGF0ZSh0KSl9KS5hdHRyKCJjeSIsZS5saW5lSGVpZ2h0LzIpLmF0dHIoImZpbGwiLGUuZXZlbnRDb2xvcikub24oImNsaWNrIixlLmNsaWNrKS5vbigibW91c2VvdmVyIixlLm1vdXNlb3Zlcikub24oIm1vdXNlb3V0IixlLm1vdXNlb3V0KSxvLmV4aXQoKS5vbigiY2xpY2siLG51bGwpLm9uKCJtb3VzZW91dCIsbnVsbCkub24oIm1vdXNlb3ZlciIsbnVsbCkucmVtb3ZlKCksaS5leGl0KCkucmVtb3ZlKCl9fX0sZnVuY3Rpb24odCxuLGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX1PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9ZSgxMiksbz1lKDYpLHU9ZSg3KSxhPXIodSksYz1lKDIpLHM9cihjKSxsPWUoOSksZj1yKGwpLGg9ZSgzKTtuLmRlZmF1bHQ9ZnVuY3Rpb24odCxuLGUscil7dmFyIHU9dC5hcHBlbmQoImRlZnMiKTt1LmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsImRyb3BzLWNvbnRhaW5lci1jbGlwcGVyIikuYXBwZW5kKCJyZWN0IikuYXR0cigiaWQiLCJkcm9wcy1jb250YWluZXItcmVjdCIpLmF0dHIoIndpZHRoIixuLndpZHRoKS5hdHRyKCJoZWlnaHQiLG4uaGVpZ2h0K3IubWFyZ2luLnRvcCtyLm1hcmdpbi5ib3R0b20pO3ZhciBjPXQuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWxzIiwhMCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsICIrci5saW5lSGVpZ2h0KyIpIiksbD10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2hhcnQtd3JhcHBlciIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhyLmxhYmVsc1dpZHRoK3IubGFiZWxzUmlnaHRNYXJnaW4pKyIsIDU1KSIpLHA9bC5hcHBlbmQoImciKS5jbGFzc2VkKCJkcm9wcy1jb250YWluZXIiLCEwKS5hdHRyKCJjbGlwLXBhdGgiLCJ1cmwoI2Ryb3BzLWNvbnRhaW5lci1jbGlwcGVyKSIpLnN0eWxlKCJmaWx0ZXIiLCJ1cmwoI21ldGFiYWxscykiKTtsLmFwcGVuZCgiZyIpLmNsYXNzZWQoImV4dHJlbXVtIiwhMCkuYXR0cigid2lkdGgiLG4ud2lkdGgpLmF0dHIoImhlaWdodCIsMzApLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgwLCAtMzUpIiksci5tZXRhYmFsbHMmJigwLGkubWV0YWJhbGxzKSh1KTt2YXIgZD1sLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4ZXMiLCEwKSx2PSgwLGYuZGVmYXVsdCkoZSxyLG4pLF89KDAscy5kZWZhdWx0KShjLGUsciksZz0oMCxhLmRlZmF1bHQpKHAsZSxyKTtyZXR1cm4gZnVuY3Rpb24oaSl7dihkLGkpLCgwLG8uZGVsaW1pdGVycykodCxlLHIubGFiZWxzV2lkdGgrci5sYWJlbHNSaWdodE1hcmdpbixyLmRhdGVGb3JtYXQpLGcoaSksXyhpKSwoMCxoLmJvb2xPclJldHVyblZhbHVlKShyLmhhc1RvcEF4aXMsaSkmJigwLGguZHJhd1RvcEF4aXMpKGQsZS54LHIsbiksKDAsaC5ib29sT3JSZXR1cm5WYWx1ZSkoci5oYXNCb3R0b21BeGlzLGkpJiYoMCxoLmRyYXdCb3R0b21BeGlzKShkLGUueCxyLG4pfX19LGZ1bmN0aW9uKHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxuLmRlZmF1bHQ9ZnVuY3Rpb24odCxuLGUpe3JldHVybiBmdW5jdGlvbihyLGkpe3ZhciBvPXIuc2VsZWN0QWxsKCIubGluZS1zZXBhcmF0b3IiKS5kYXRhKGkpO28uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJsaW5lLXNlcGFyYXRvciIsITApLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZSxyKXtyZXR1cm4idHJhbnNsYXRlKDAsICIrKHQueShyKStuLmxpbmVIZWlnaHQpKyIpIn0pLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsZS53aWR0aCksby5leGl0KCkucmVtb3ZlKCl9fX0sZnVuY3Rpb24odCxuLGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX1mdW5jdGlvbiBpKHQpe2lmKHQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgbj17fTtpZihudWxsIT10KWZvcih2YXIgZSBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpJiYobltlXT10W2VdKTtyZXR1cm4gbi5kZWZhdWx0PXQsbn1mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gdC5lYWNoKGZ1bmN0aW9uKHQpe2Muc2VsZWN0KHRoaXMpLnNlbGVjdCgiLmV2ZW50LWRyb3BzLWNoYXJ0IikucmVtb3ZlKCk7dmFyIGU9e3dpZHRoOnRoaXMuY2xpZW50V2lkdGgsaGVpZ2h0OnQubGVuZ3RoKnIubGluZUhlaWdodH0saT1jLnNlbGVjdCh0aGlzKS5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImV2ZW50LWRyb3BzLWNoYXJ0IiwhMCkuYXR0cigid2lkdGgiLGUud2lkdGgpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQrci5tYXJnaW4udG9wK3IubWFyZ2luLmJvdHRvbSksbz1uKGUscix0KSx1PSgwLGQuZGVmYXVsdCkoaSxlLG8scik7dSh0KSxyLnpvb21hYmxlJiYoMCxfLmRlZmF1bHQpKGksZSxvLHIsdCl9KX1mdW5jdGlvbiBuKHQsbixlKXtyZXR1cm57eDpvKHQud2lkdGgsW24uc3RhcnQsbi5lbmRdKSx5OmkoZSl9fXZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxyPXUoe30saC5kZWZhdWx0LGUpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIGMuc2NhbGVPcmRpbmFsKCkuZG9tYWluKHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5hbWV9KSkucmFuZ2UodC5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4gbipyLmxpbmVIZWlnaHR9KSl9LG89ZnVuY3Rpb24odCxuKXtyZXR1cm4gYy5zY2FsZVRpbWUoKS5kb21haW4obikucmFuZ2UoWzAsdF0pfTtyZXR1cm4oMCxsLmRlZmF1bHQpKHQsciksdH1PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHU9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIGU9YXJndW1lbnRzW25dO2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYodFtyXT1lW3JdKX1yZXR1cm4gdH0sYT1lKDEpLGM9aShhKSxzPWUoMTQpLGw9cihzKSxmPWUoNSksaD1yKGYpLHA9ZSg4KSxkPXIocCksdj1lKDEzKSxfPXIodik7Yy5jaGFydD1jLmNoYXJ0fHx7fSxjLmNoYXJ0LmV2ZW50RHJvcHM9byxuLmRlZmF1bHQ9b30sZnVuY3Rpb24odCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSxuPWFyZ3VtZW50c1sxXSxlPWFyZ3VtZW50c1syXSxpPW4uZG9tYWluKCksbz1yKGksMiksdT1vWzBdLGE9b1sxXTtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGUodCk+PXUmJmUodCk8PWF9KX1PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsbil7dmFyIGU9W10scj0hMCxpPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIHUsYT10W1N5bWJvbC5pdGVyYXRvcl0oKTshKHI9KHU9YS5uZXh0KCkpLmRvbmUpJiYoZS5wdXNoKHUudmFsdWUpLCFufHxlLmxlbmd0aCE9PW4pO3I9ITApO31jYXRjaCh0KXtpPSEwLG89dH1maW5hbGx5e3RyeXshciYmYS5yZXR1cm4mJmEucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fXJldHVybiBlfXJldHVybiBmdW5jdGlvbihuLGUpe2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIG47aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChuKSlyZXR1cm4gdChuLGUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCk7bi5kZWZhdWx0PWV9LGZ1bmN0aW9uKHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtuLm1ldGFiYWxscz1mdW5jdGlvbih0KXsKdmFyIG49dC5hcHBlbmQoImZpbHRlciIpO3JldHVybiBuLmF0dHIoImlkIiwibWV0YWJhbGxzIiksbi5hcHBlbmQoImZlR2F1c3NpYW5CbHVyIikuYXR0cigiaW4iLCJTb3VyY2VHcmFwaGljIikuYXR0cigic3RkRGV2aWF0aW9uIiwxMCkuYXR0cigicmVzdWx0IiwiYmx1ciIpLG4uYXBwZW5kKCJmZUNvbG9yTWF0cml4IikuYXR0cigiaW4iLCJibHVyIikuYXR0cigibW9kZSIsIm1hdHJpeCIpLmF0dHIoInZhbHVlcyIsIjEgMCAwIDAgMCAgMCAxIDAgMCAwICAwIDAgMSAwIDAgIDAgMCAwIDUwIC0xMCIpLmF0dHIoInJlc3VsdCIsImNvbnRyYXN0Iiksbi5hcHBlbmQoImZlQmxlbmQiKS5hdHRyKCJpbiIsIlNvdXJjZUdyYXBoaWMiKS5hdHRyKCJpbjIiLCJjb250cmFzdCIpLG59fSxmdW5jdGlvbih0LG4sZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9fWZ1bmN0aW9uIGkodCl7aWYodCYmdC5fX2VzTW9kdWxlKXJldHVybiB0O3ZhciBuPXt9O2lmKG51bGwhPXQpZm9yKHZhciBlIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSkmJihuW2VdPXRbZV0pO3JldHVybiBuLmRlZmF1bHQ9dCxufU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbz1lKDEpLHU9aShvKSxhPWUoNCksYz0ocihhKSxlKDIpKSxzPXIoYyksbD1lKDMpLGY9ZSgxNSksaD1yKGYpO24uZGVmYXVsdD1mdW5jdGlvbih0LG4sZSxyLGksbyl7dmFyIGE9ZnVuY3Rpb24obixpLGEpe3ZhciBjPXUuZXZlbnQudHJhbnNmb3JtLnJlc2NhbGVYKGUueCk7KDAsbC5ib29sT3JSZXR1cm5WYWx1ZSkoci5oYXNUb3BBeGlzLG4pJiZ0LnNlbGVjdEFsbCgiLngtYXhpcy50b3AiKS5jYWxsKHUuYXhpc1RvcCgpLnNjYWxlKGMpKSwoMCxsLmJvb2xPclJldHVyblZhbHVlKShyLmhhc0JvdHRvbUF4aXMsbikmJnQuc2VsZWN0QWxsKCIueC1heGlzLmJvdHRvbSIpLmNhbGwodS5heGlzQm90dG9tKCkuc2NhbGUoYykpO3ZhciBmPSgwLGguZGVmYXVsdCkoKDAscy5kZWZhdWx0KSh0LnNlbGVjdCgiLmxhYmVscyIpLHt4OmN9LHIpLDEwMCk7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7dC5zZWxlY3RBbGwoIi5kcm9wLWxpbmUiKS5zZWxlY3RBbGwoIi5kcm9wIikuYXR0cigiY3giLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGMobmV3IERhdGUodC5kYXRlKSl9KTtmKG4pLG8mJm8obil9KX0sYz11Lnpvb20oKS5zY2FsZUV4dGVudChbci5taW5TY2FsZSxyLm1heFNjYWxlXSkub24oInpvb20iLGEpLm9uKCJlbmQiLHIuem9vbWVuZCk7cmV0dXJuIHQuY2FsbChjKSxjfX0sZnVuY3Rpb24odCxuLGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQsbil7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG5bZV09cix0KTpuW2VdfX1mb3IodmFyIHIgaW4gbil0W3JdPWUocil9dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe2Z1bmN0aW9uIGkoKXt2YXIgbD1yKCktYztsPG4mJmw+MD9vPXNldFRpbWVvdXQoaSxuLWwpOihvPW51bGwsZXx8KHM9dC5hcHBseShhLHUpLG98fChhPXU9bnVsbCkpKX12YXIgbyx1LGEsYyxzO3JldHVybiBudWxsPT1uJiYobj0xMDApLGZ1bmN0aW9uKCl7YT10aGlzLHU9YXJndW1lbnRzLGM9cigpO3ZhciBsPWUmJiFvO3JldHVybiBvfHwobz1zZXRUaW1lb3V0KGksbikpLGwmJihzPXQuYXBwbHkoYSx1KSxhPXU9bnVsbCksc319fSxmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGUoKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX10LmV4cG9ydHM9RGF0ZS5ub3d8fGV9LGZ1bmN0aW9uKHQsbil7fV0pfSk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZW50RHJvcHMuanMubWFw"></script>
<script src="data:application/x-javascript;base64,SFRNTFdpZGdldHMud2lkZ2V0KHsNCg0KICBuYW1lOiAnZXZlbnRkcm9wJywNCg0KICB0eXBlOiAnb3V0cHV0JywNCg0KICBmYWN0b3J5OiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCkgew0KDQogICAgdmFyIGluc3RhbmNlID0ge307DQoNCiAgICByZXR1cm4gew0KDQogICAgICBkcmF3RXZlbnREcm9wOiBmdW5jdGlvbihlbCwgaW5zdGFuY2Upew0KDQogICAgICAgICAgdmFyIHggPSBpbnN0YW5jZS54Ow0KDQogICAgICAgICAgLy8gZm9yIGNvbnZlbmllbmNlIGdldCBkMyBzZWxlY3RlZCBlbA0KICAgICAgICAgIGVsID0gZDMuc2VsZWN0KGVsKTsNCg0KICAgICAgICAgIC8vIGJydXRlIGZvcmNlIHdheSB0byBjbGVhbiBvdXQgb3VyIGNvbnRhaW5lciBlbGVtZW50DQogICAgICAgICAgLy8gIGZvciBkeW5hbWljIHNpdHVhdGlvbnMsIHNpbmNlIEV2ZW50RHJvcHMgZG9lcw0KICAgICAgICAgIC8vICBub3Qgc3VwcG9ydCBhbmltYXRlZCB1cGRhdGVzDQogICAgICAgICAgZWwuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7DQoNCiAgICAgICAgICAvLyBnZXQgaGVpZ2h0IGFuZCB3aWR0aA0KICAgICAgICAgIHZhciB3aWR0aCA9IGVsLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDsNCiAgICAgICAgICB2YXIgaGVpZ2h0ID0gZWwubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDsNCg0KICAgICAgICAgIC8vIGdldCBzdGFydCBhbmQgZW5kIHRpbWVzIGJhc2VkIG9uIHRoZSByYW5nZSBvZiBkYXRhDQogICAgICAgICAgdmFyIGVuZFRpbWUgPSBkMy5tYXgoeC5kYXRhW3guZGF0ZSB8fCAiZGF0ZSJdKTsNCiAgICAgICAgICB2YXIgc3RhcnRUaW1lID0gZDMubWluKHguZGF0YVt4LmRhdGUgfHwgImRhdGUiXSk7DQoNCiAgICAgICAgICAvLyBhc3N1bWUgZGF0YSBmcm9tIFIgZGF0YS5mcmFtZQ0KICAgICAgICAgIHZhciBkZiA9IEhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMoeC5kYXRhKTsNCiAgICAgICAgICBkZiA9IGQzLm5lc3QoKQ0KICAgICAgICAgICAgLmtleShmdW5jdGlvbihkKXsNCiAgICAgICAgICAgICAgcmV0dXJuIGRbeC5uYW1lIHx8ICJuYW1lIl0NCiAgICAgICAgICAgIH0pDQogICAgICAgICAgICAuZW50cmllcyhkZikNCiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24oZCl7DQogICAgICAgICAgICAgIC8vIHJlbmFtZSB0byBuYW1lIGFuZCBkYXRhIHdoaWNoIGFyZSB0aGUgZGVmYXVsdHMNCiAgICAgICAgICAgICAgLy8gIGZvciBFdmVudERyb3BzDQogICAgICAgICAgICAgIGQubmFtZSA9IGQua2V5Ow0KICAgICAgICAgICAgICBkLmRhdGEgPSBkLnZhbHVlczsNCiAgICAgICAgICAgICAgLy8gZGVsZXRlIHRoZXNlIHByb3BlcnRpZXMgc2luY2Ugd2UgcmVuYW1lZA0KICAgICAgICAgICAgICAvLyAgIHByb2JhYmx5IGJldHRlciB3YXkgdG8gaGFuZGxlDQogICAgICAgICAgICAgIGRlbGV0ZShkLmtleSk7DQogICAgICAgICAgICAgIGRlbGV0ZShkLnZhbHVlcyk7DQogICAgICAgICAgICAgIHJldHVybiBkOw0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICB2YXIgY29sb3IgPSBkMy5zY2FsZU9yZGluYWwoZDMuc2NoZW1lQ2F0ZWdvcnkyMCk7DQoNCiAgICAgICAgICAvLyBjcmVhdGUgY2hhcnQgZnVuY3Rpb24NCiAgICAgICAgICB2YXIgZXZlbnREcm9wc0NoYXJ0ID0gZXZlbnREcm9wcy5kZWZhdWx0KCk7DQoNCiAgICAgICAgICAvLyBzZXQgZGVmYXVsdHMgd2hpY2ggd2UgY2FuIG92ZXJyaWRlIGxhdGVyDQogICAgICAgICAgLy8gICBieSB4Lm9wdGlvbnMNCiAgICAgICAgICBldmVudERyb3BzQ2hhcnQNCiAgICAgICAgICAgIC8vLndpZHRoKHdpZHRoKQ0KICAgICAgICAgICAgLy8gbWFyZ2luIGRvbid0IGJlaGF2ZSB0aGUgd2F5IEkgZXhwZWN0DQogICAgICAgICAgICAvLy5tYXJnaW4oe3RvcDogNDAsIGJvdHRvbTogMjAsIGxlZnQ6IDc1LCByaWdodDogNTB9KQ0KICAgICAgICAgICAgLmxhYmVsc1dpZHRoKDEwMCkNCiAgICAgICAgICAgIC5ldmVudExpbmVDb2xvcihmdW5jdGlvbiAoZGF0dW0sIGluZGV4KSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yKGluZGV4KTsNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgICAuc3RhcnQobmV3IERhdGUoc3RhcnRUaW1lKSkNCiAgICAgICAgICAgIC5lbmQobmV3IERhdGUoZW5kVGltZSkpDQogICAgICAgICAgICAuZGF0ZShmdW5jdGlvbihkKXsNCiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRbeC5kYXRlIHx8ICdkYXRlJ10pOw0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAvLyBsb29wIHRocm91Z2ggeC5vcHRpb25zIGFuZCB0cnkgdG8gYXBwbHkgdGhlbQ0KICAgICAgICAgIC8vICAgdG8gb3VyIGV2ZW50RHJvcHNDaGFydA0KICAgICAgICAgIE9iamVjdC5rZXlzKHgub3B0aW9ucykNCiAgICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uKGt5KXsNCiAgICAgICAgICAgICAgdHJ5ew0KICAgICAgICAgICAgICAgIGV2ZW50RHJvcHNDaGFydFtreV0oeC5vcHRpb25zW2t5XSk7DQogICAgICAgICAgICAgIH0gY2F0Y2goZSkgeyB9DQogICAgICAgICAgICB9KQ0KDQogICAgICAgICAgLy8gYmluZCBkYXRhIHdpdGggRE9NDQogICAgICAgICAgZWwuZGF0dW0oZGYpOw0KDQogICAgICAgICAgLy8gZHJhdyB0aGUgY2hhcnQNCiAgICAgICAgICBldmVudERyb3BzQ2hhcnQoZWwpOw0KDQogICAgICAgICAgLy8gYWRkIGV2ZW50RHJvcHMgdG8gaW5zdGFuY2UNCiAgICAgICAgICBpbnN0YW5jZS5ldmVudGRyb3AgPSBldmVudERyb3BzQ2hhcnQ7DQoNCiAgICAgIH0sDQoNCiAgICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbih4KSB7DQoNCiAgICAgICAgLy8gYWRkIG91ciB4IChkYXRhKSB0byBpbnN0YW5jZQ0KICAgICAgICBpbnN0YW5jZS54ID0geDsNCg0KICAgICAgICB0aGlzLmRyYXdFdmVudERyb3AoZWwsIGluc3RhbmNlKTsNCg0KICAgICAgfSwNCg0KICAgICAgcmVzaXplOiBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7DQogICAgICAgIC8vIHVzZSBwdWxsIHJlcXVlc3QgODINCiAgICAgICAgLy8gIGZvciByZXNpemUgd2hlbiByZWFkeQ0KICAgICAgICAvLyAgaHR0cHM6Ly9naXRodWIuY29tL21hcm1lbGFiL0V2ZW50RHJvcHMvcHVsbC84Mg0KICAgICAgICB0aGlzLmRyYXdFdmVudERyb3AoZWwsIGluc3RhbmNlKTsNCg0KICAgICAgfSwNCg0KICAgICAgaW5zdGFuY2U6IGluc3RhbmNlDQoNCiAgICB9Ow0KICB9DQp9KTsNCg=="></script>
</head>
<body style="background-color:white;">
<h1>Github Commit History on the purrr package</h1>
<div id="htmlwidget_container">
<div id="htmlwidget-71117ea7233a138b9638" class="eventdrop html-widget" style="width:960px;height:500px;" width="960" height="500">
</div>
</div>
<script type="application/json" data-for="htmlwidget-71117ea7233a138b9638">{"x":{"data":{"name":["Hadley Wickham","hadley","hadley","Lionel Henry","Lionel Henry","Lionel Henry","Lionel Henry","Lionel Henry","Lionel Henry","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","Jennifer (Jenny) Bryan","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","Ian Lyttle","hadley","hadley","hadley","hadley","hadley","hadley","hadley","yutannihilation","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","hadley","TJ Mahr","hadley","hadley","hadley","Daniel Jordan"],"date":["2017-03-14T17:31:39Z","2017-03-14T02:01:06Z","2017-03-14T01:49:57Z","2017-03-13T22:48:35Z","2017-03-13T21:18:33Z","2017-03-13T21:08:04Z","2017-03-13T19:59:14Z","2017-03-13T19:36:32Z","2017-03-13T19:07:12Z","2017-03-13T19:18:48Z","2017-03-12T19:35:43Z","2017-03-12T19:35:11Z","2017-03-12T19:33:50Z","2017-03-12T19:33:10Z","2017-03-12T19:31:20Z","2017-03-12T19:29:16Z","2017-03-12T18:43:04Z","2017-03-12T18:27:26Z","2017-03-12T17:59:45Z","2017-03-10T07:26:43Z","2017-03-09T19:08:55Z","2017-03-09T18:56:02Z","2017-03-09T18:55:02Z","2017-03-09T18:44:57Z","2017-03-08T19:02:32Z","2017-03-08T18:41:46Z","2017-03-08T18:02:29Z","2017-03-08T04:28:39Z","2017-03-08T01:52:34Z","2017-03-08T01:30:51Z","2017-03-08T01:25:16Z","2017-03-07T22:13:59Z","2017-03-07T19:52:21Z","2017-03-07T19:40:52Z","2017-03-07T19:08:20Z","2017-03-07T18:53:04Z","2017-03-07T18:37:43Z","2017-03-07T18:01:05Z","2017-03-07T17:57:58Z","2017-03-07T17:12:35Z","2017-03-07T17:09:40Z","2017-03-07T03:15:35Z","2017-03-07T01:25:56Z","2017-03-07T01:09:09Z","2017-03-06T20:51:44Z","2017-03-06T20:25:21Z","2017-03-06T00:55:39Z","2017-03-06T17:38:21Z","2017-03-06T00:54:09Z","2017-03-05T23:15:24Z","2017-03-05T20:40:52Z","2017-03-05T20:40:13Z","2017-03-05T19:20:11Z","2017-03-05T19:11:19Z","2017-03-05T19:07:00Z","2017-03-05T18:42:12Z","2017-03-05T08:05:11Z","2017-03-05T08:03:34Z","2017-03-05T07:40:31Z","2017-03-05T07:30:39Z","2017-03-05T07:13:06Z","2017-03-05T06:42:50Z","2017-03-05T06:34:02Z","2017-03-05T06:18:38Z","2017-03-05T06:01:35Z","2017-03-05T05:59:18Z","2017-03-05T05:57:57Z","2017-03-05T05:57:08Z","2017-03-05T05:53:00Z","2017-03-04T19:38:43Z","2017-03-04T19:38:18Z","2017-03-04T19:30:24Z","2017-03-04T19:17:58Z","2017-03-04T19:16:46Z","2017-03-04T19:13:04Z","2017-03-04T19:07:56Z","2017-03-04T18:59:30Z","2017-03-04T18:38:45Z","2017-03-04T18:30:02Z","2017-03-04T18:22:11Z","2017-03-04T18:14:44Z","2017-03-04T18:14:29Z","2017-03-03T19:30:14Z","2017-03-03T19:26:04Z","2017-03-03T19:10:46Z","2017-03-03T19:10:26Z","2017-03-03T19:17:23Z"]},"name":null,"date":null,"options":{"labelsWidth":200}},"evals":[],"jsHooks":[]}</script>
<script type="application/htmlwidget-sizing" data-for="htmlwidget-71117ea7233a138b9638">{"viewer":{"width":450,"height":350,"padding":15,"fill":true},"browser":{"width":960,"height":500,"padding":40,"fill":false}}</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment