Skip to content

Instantly share code, notes, and snippets.

@timelyportfolio
Last active November 28, 2019 00:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save timelyportfolio/5cc94e2f3aca678bd993109675aa292d to your computer and use it in GitHub Desktop.
Save timelyportfolio/5cc94e2f3aca678bd993109675aa292d to your computer and use it in GitHub Desktop.
R leaflet tooltips with listviewer jsonedit
license: mit

forked from timelyportfolio's block: R leaflet popups with sparkline htmlwidget


See DT issue

helper functions

# Step 1 convert htmlwidget to character representation of HTML components
as.character.htmlwidget <- function(x, ...) {
  htmltools::HTML(
    htmltools:::as.character.shiny.tag.list(
      htmlwidgets:::as.tags.htmlwidget(
        x
      ),
      ...
    )
  )
}

add_deps <- function(dtbl, name, pkg = name) {
  tagList(
    dtbl,
    htmlwidgets::getDependency(name, pkg)
  )
}

make tooltips

library(leaflet) # needs leaflet > 1 timelyportfolio/leaflet@v1.0
library(htmlwidgets)
library(htmltools)
library(listviewer)

df <- read.csv(textConnection(
  "Name,Lat,Long
  Samurai Noodle,47.597131,-122.327298
  Kukai Ramen,47.6154,-122.327157
  Tsukushinbo,47.59987,-122.326726"
))

leaflet(df) %>% addTiles() %>%
  addMarkers(
    ~Long, ~Lat,
    popup = lapply(
      seq_along(df),
      function(i){
        as.character(
          jsonedit(
            jsonlite::toJSON(df[i,,drop=TRUE],auto_unbox=TRUE),
            height=200,width=200
          )
        )
      }
    )
  ) %>%
  onRender(
"
function(el,x) {
  this.on('popupopen', function() {HTMLWidgets.staticRender();})
}
") %>%
  add_deps("jsonedit", "listviewer") %>%
  browsable()
This file has been truncated, but you can view the full file.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgew0KICAvLyBJZiB3aW5kb3cuSFRNTFdpZGdldHMgaXMgYWxyZWFkeSBkZWZpbmVkLCB0aGVuIHVzZSBpdDsgb3RoZXJ3aXNlIGNyZWF0ZSBhDQogIC8vIG5ldyBvYmplY3QuIFRoaXMgYWxsb3dzIHByZWNlZGluZyBjb2RlIHRvIHNldCBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZQ0KICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLg0KICB3aW5kb3cuSFRNTFdpZGdldHMgPSB3aW5kb3cuSFRNTFdpZGdldHMgfHwge307DQoNCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLg0KICB2YXIgdmlld2VyTW9kZSA9IHdpbmRvdy5IVE1MV2lkZ2V0cy52aWV3ZXJNb2RlID0NCiAgICAgIC9cYnZpZXdlcl9wYW5lPTFcYi8udGVzdCh3aW5kb3cubG9jYXRpb24pOw0KDQogIC8vIFNlZSBpZiB3ZSdyZSBydW5uaW5nIGluIFNoaW55IG1vZGUuIElmIG5vdCwgaXQncyBhIHN0YXRpYyBkb2N1bWVudC4NCiAgLy8gTm90ZSB0aGF0IHN0YXRpYyB3aWRnZXRzIGNhbiBhcHBlYXIgaW4gYm90aCBTaGlueSBhbmQgc3RhdGljIG1vZGVzLCBidXQNCiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4NCiAgdmFyIHNoaW55TW9kZSA9IHdpbmRvdy5IVE1MV2lkZ2V0cy5zaGlueU1vZGUgPQ0KICAgICAgdHlwZW9mKHdpbmRvdy5TaGlueSkgIT09ICJ1bmRlZmluZWQiICYmICEhd2luZG93LlNoaW55Lm91dHB1dEJpbmRpbmdzOw0KDQogIC8vIFdlIGNhbid0IGNvdW50IG9uIGpRdWVyeSBiZWluZyBhdmFpbGFibGUsIHNvIHdlIGltcGxlbWVudCBvdXIgb3duDQogIC8vIHZlcnNpb24gaWYgbmVjZXNzYXJ5Lg0KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3Rvcikgew0KICAgIGlmICh0eXBlb2YoalF1ZXJ5KSAhPT0gInVuZGVmaW5lZCIgJiYgc2NvcGUgaW5zdGFuY2VvZiBqUXVlcnkpIHsNCiAgICAgIHJldHVybiBzY29wZS5maW5kKHNlbGVjdG9yKTsNCiAgICB9DQogICAgaWYgKHNjb3BlLnF1ZXJ5U2VsZWN0b3JBbGwpIHsNCiAgICAgIHJldHVybiBzY29wZS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsNCiAgICB9DQogIH0NCg0KICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7DQogICAgaWYgKHZhbHVlID09PSBudWxsKQ0KICAgICAgcmV0dXJuIFtdOw0KICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQ0KICAgICAgcmV0dXJuIHZhbHVlOw0KICAgIHJldHVybiBbdmFsdWVdOw0KICB9DQoNCiAgLy8gSW1wbGVtZW50IGpRdWVyeSdzIGV4dGVuZA0KICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsNCiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7DQogICAgICByZXR1cm4gdGFyZ2V0Ow0KICAgIH0NCiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgew0KICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsNCiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7DQogICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocHJvcCkpIHsNCiAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuIHRhcmdldDsNCiAgfQ0KDQogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4NCiAgZnVuY3Rpb24gZm9yRWFjaCh2YWx1ZXMsIGNhbGxiYWNrLCB0aGlzQXJnKSB7DQogICAgaWYgKHZhbHVlcy5mb3JFYWNoKSB7DQogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7DQogICAgfSBlbHNlIHsNCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KDQogIC8vIFJlcGxhY2VzIHRoZSBzcGVjaWZpZWQgbWV0aG9kIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiBmdW5jU291cmNlLg0KICAvLw0KICAvLyBOb3RlIHRoYXQgZnVuY1NvdXJjZSBzaG91bGQgbm90IEJFIHRoZSBuZXcgbWV0aG9kLCBpdCBzaG91bGQgYmUgYSBmdW5jdGlvbg0KICAvLyB0aGF0IFJFVFVSTlMgdGhlIG5ldyBtZXRob2QuIGZ1bmNTb3VyY2UgcmVjZWl2ZXMgYSBzaW5nbGUgYXJndW1lbnQgdGhhdCBpcw0KICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4NCiAgLy8gbWV0aG9kIGNhbiBiZSBjYWxsZWQgbGlrZSBhIHJlZ3VsYXIgZnVuY3Rpb24sIGl0IGhhcyB0aGUgdGFyZ2V0IHBlcm1hbmVudGx5DQogIC8vIGJvdW5kIHRvIGl0IHNvICJ0aGlzIiB3aWxsIHdvcmsgY29ycmVjdGx5Lg0KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsNCiAgICB2YXIgc3VwZXJGdW5jID0gdGFyZ2V0W21ldGhvZE5hbWVdIHx8IGZ1bmN0aW9uKCkge307DQogICAgdmFyIHN1cGVyRnVuY0JvdW5kID0gZnVuY3Rpb24oKSB7DQogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsNCiAgICB9Ow0KICAgIHRhcmdldFttZXRob2ROYW1lXSA9IGZ1bmNTb3VyY2Uoc3VwZXJGdW5jQm91bmQpOw0KICB9DQoNCiAgLy8gQWRkIGEgbWV0aG9kIHRvIGRlbGVnYXRvciB0aGF0LCB3aGVuIGludm9rZWQsIGNhbGxzDQogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbg0KICAvLyB0aGUgZGVsZWdhdGVlLCBidXQgdGhlcmUgd2FzIG9uZSBvbiBkZWxlZ2F0b3IgYmVmb3JlDQogIC8vIGRlbGVnYXRlTWV0aG9kIHdhcyBjYWxsZWQsIHRoZW4gdGhlIG9yaWdpbmFsIHZlcnNpb24NCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLg0KICAvLyBGb3IgZXhhbXBsZToNCiAgLy8NCiAgLy8gdmFyIGEgPSB7DQogIC8vICAgbWV0aG9kMTogZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKCdhMScpOyB9DQogIC8vICAgbWV0aG9kMjogZnVuY3Rpb24oKSB7IGNvbnNvbGUubG9nKCdhMicpOyB9DQogIC8vIH07DQogIC8vIHZhciBiID0gew0KICAvLyAgIG1ldGhvZDE6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYjEnKTsgfQ0KICAvLyB9Ow0KICAvLyBkZWxlZ2F0ZU1ldGhvZChhLCBiLCAibWV0aG9kMSIpOw0KICAvLyBkZWxlZ2F0ZU1ldGhvZChhLCBiLCAibWV0aG9kMiIpOw0KICAvLyBhLm1ldGhvZDEoKTsNCiAgLy8gYS5tZXRob2QyKCk7DQogIC8vDQogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4NCiAgZnVuY3Rpb24gZGVsZWdhdGVNZXRob2QoZGVsZWdhdG9yLCBkZWxlZ2F0ZWUsIG1ldGhvZE5hbWUpIHsNCiAgICB2YXIgaW5oZXJpdGVkID0gZGVsZWdhdG9yW21ldGhvZE5hbWVdOw0KICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIHRhcmdldCA9IGRlbGVnYXRlZTsNCiAgICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZWVbbWV0aG9kTmFtZV07DQoNCiAgICAgIC8vIFRoZSBtZXRob2QgZG9lc24ndCBleGlzdCBvbiB0aGUgZGVsZWdhdGVlLiBJbnN0ZWFkLA0KICAgICAgLy8gY2FsbCB0aGUgbWV0aG9kIG9uIHRoZSBkZWxlZ2F0b3IsIGlmIGl0IGV4aXN0cy4NCiAgICAgIGlmICghbWV0aG9kKSB7DQogICAgICAgIHRhcmdldCA9IGRlbGVnYXRvcjsNCiAgICAgICAgbWV0aG9kID0gaW5oZXJpdGVkOw0KICAgICAgfQ0KDQogICAgICBpZiAobWV0aG9kKSB7DQogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOw0KICAgICAgfQ0KICAgIH07DQogIH0NCg0KICAvLyBJbXBsZW1lbnQgYSB2YWd1ZSBmYWNzaW1pbGllIG9mIGpRdWVyeSdzIGRhdGEgbWV0aG9kDQogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgew0KICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpIHsNCiAgICAgIHJldHVybiBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXTsNCiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgew0KICAgICAgZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV0gPSB2YWx1ZTsNCiAgICAgIHJldHVybiBlbDsNCiAgICB9IGVsc2Ugew0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBlbGVtZW50RGF0YTogIiArDQogICAgICAgIGFyZ3VtZW50cy5sZW5ndGgpOw0KICAgIH0NCiAgfQ0KDQogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleA0KICBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyKSB7DQogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXC1cW1xdXC9ce1x9XChcKVwqXCtcP1wuXFxcXlwkXHxdL2csICJcXCQmIik7DQogIH0NCg0KICBmdW5jdGlvbiBoYXNDbGFzcyhlbCwgY2xhc3NOYW1lKSB7DQogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOw0KICAgIHJldHVybiByZS50ZXN0KGVsLmNsYXNzTmFtZSk7DQogIH0NCg0KICAvLyBlbGVtZW50cyAtIGFycmF5IChvciBhcnJheS1saWtlIG9iamVjdCkgb2YgSFRNTCBlbGVtZW50cw0KICAvLyBjbGFzc05hbWUgLSBjbGFzcyBuYW1lIHRvIHRlc3QgZm9yDQogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsNCiAgLy8gICBpZiBmYWxzZSwgb25seSByZXR1cm4gZWxlbWVudHMgKndpdGhvdXQqIGdpdmVuIGNsYXNzTmFtZQ0KICBmdW5jdGlvbiBmaWx0ZXJCeUNsYXNzKGVsZW1lbnRzLCBjbGFzc05hbWUsIGluY2x1ZGUpIHsNCiAgICB2YXIgcmVzdWx0cyA9IFtdOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsNCiAgICAgIGlmIChoYXNDbGFzcyhlbGVtZW50c1tpXSwgY2xhc3NOYW1lKSA9PSBpbmNsdWRlKQ0KICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOw0KICAgIH0NCiAgICByZXR1cm4gcmVzdWx0czsNCiAgfQ0KDQogIGZ1bmN0aW9uIG9uKG9iaiwgZXZlbnROYW1lLCBmdW5jKSB7DQogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7DQogICAgICBvYmouYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGZ1bmMsIGZhbHNlKTsNCiAgICB9IGVsc2UgaWYgKG9iai5hdHRhY2hFdmVudCkgew0KICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7DQogICAgfQ0KICB9DQoNCiAgZnVuY3Rpb24gb2ZmKG9iaiwgZXZlbnROYW1lLCBmdW5jKSB7DQogICAgaWYgKG9iai5yZW1vdmVFdmVudExpc3RlbmVyKQ0KICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7DQogICAgZWxzZSBpZiAob2JqLmRldGFjaEV2ZW50KSB7DQogICAgICBvYmouZGV0YWNoRXZlbnQoZXZlbnROYW1lLCBmdW5jKTsNCiAgICB9DQogIH0NCg0KICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aA0KICAvLyB0aGUgInBhZGRpbmciIENTUyBwcm9wZXJ0eQ0KICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvcGFkZGluZw0KICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7DQogICAgaWYgKHR5cGVvZih2YWx1ZSkgPT09ICJudW1iZXIiKQ0KICAgICAgdmFsdWUgPSBbdmFsdWVdOw0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsNCiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzBdLCBib3R0b206IHZhbHVlWzBdLCBsZWZ0OiB2YWx1ZVswXX07DQogICAgfQ0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsNCiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzFdLCBib3R0b206IHZhbHVlWzBdLCBsZWZ0OiB2YWx1ZVsxXX07DQogICAgfQ0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsNCiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzFdLCBib3R0b206IHZhbHVlWzJdLCBsZWZ0OiB2YWx1ZVsxXX07DQogICAgfQ0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsNCiAgICAgIHJldHVybiB7dG9wOiB2YWx1ZVswXSwgcmlnaHQ6IHZhbHVlWzFdLCBib3R0b206IHZhbHVlWzJdLCBsZWZ0OiB2YWx1ZVszXX07DQogICAgfQ0KICB9DQoNCiAgLy8gQ29udmVydCBhbiB1bnBhY2tlZCBwYWRkaW5nIG9iamVjdCB0byBhIENTUyB2YWx1ZQ0KICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgew0KICAgIHJldHVybiBwYWRkaW5nT2JqLnRvcCArICJweCAiICsgcGFkZGluZ09iai5yaWdodCArICJweCAiICsgcGFkZGluZ09iai5ib3R0b20gKyAicHggIiArIHBhZGRpbmdPYmoubGVmdCArICJweCI7DQogIH0NCg0KICAvLyBNYWtlcyBhIG51bWJlciBzdWl0YWJsZSBmb3IgQ1NTDQogIGZ1bmN0aW9uIHB4KHgpIHsNCiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikNCiAgICAgIHJldHVybiB4ICsgInB4IjsNCiAgICBlbHNlDQogICAgICByZXR1cm4geDsNCiAgfQ0KDQogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuDQogIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgZWl0aGVyIG51bGwsIG9yIGFuIG9iamVjdCB3aXRoIGZpbGwsIHBhZGRpbmcsDQogIC8vIGRlZmF1bHRXaWR0aCwgZGVmYXVsdEhlaWdodCBmaWVsZHMuDQogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgew0KICAgIHZhciBzaXppbmdFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2h0bWx3aWRnZXQtc2l6aW5nJ10iKTsNCiAgICBpZiAoIXNpemluZ0VsKQ0KICAgICAgcmV0dXJuIG51bGw7DQogICAgdmFyIHNwID0gSlNPTi5wYXJzZShzaXppbmdFbC50ZXh0Q29udGVudCB8fCBzaXppbmdFbC50ZXh0IHx8ICJ7fSIpOw0KICAgIGlmICh2aWV3ZXJNb2RlKSB7DQogICAgICByZXR1cm4gc3Audmlld2VyOw0KICAgIH0gZWxzZSB7DQogICAgICByZXR1cm4gc3AuYnJvd3NlcjsNCiAgICB9DQogIH0NCg0KICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLg0KICAvLyAgIEVhY2ggZWxlbWVudCBtdXN0IGJlIGEgdmFsaWQgSmF2YVNjcmlwdCBleHByZXNzaW9uIHRoYXQgeWllbGRzIGENCiAgLy8gICBmdW5jdGlvbi4gT3IsIGNhbiBiZSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggImNvZGUiIGFuZCAiZGF0YSINCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nDQogIC8vICAgb2YgSlMgdGhhdCdzIGFuIGV4cHIgdGhhdCB5aWVsZHMgYSBmdW5jdGlvbiwgYW5kICJkYXRhIiBzaG91bGQgYmUNCiAgLy8gICBhbiBvYmplY3QgdGhhdCB3aWxsIGJlIGFkZGVkIGFzIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQgd2hlbiB0aGF0DQogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLg0KICAvLyBAcGFyYW0gdGFyZ2V0IFRoZSBvYmplY3QgdGhhdCB3aWxsIGJlICJ0aGlzIiBmb3IgZWFjaCBmdW5jdGlvbg0KICAvLyAgIGV4ZWN1dGlvbi4NCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlDQogIC8vICAgc2FtZSBhcmd1bWVudHMgd2lsbCBiZSBwYXNzZWQgdG8gYWxsIGZ1bmN0aW9ucy4pDQogIGZ1bmN0aW9uIGV2YWxBbmRSdW4odGFza3MsIHRhcmdldCwgYXJncykgew0KICAgIGlmICh0YXNrcykgew0KICAgICAgZm9yRWFjaCh0YXNrcywgZnVuY3Rpb24odGFzaykgew0KICAgICAgICB2YXIgdGhlc2VBcmdzID0gYXJnczsNCiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsNCiAgICAgICAgICB0aGVzZUFyZ3MgPSB0aGVzZUFyZ3MuY29uY2F0KFt0YXNrLmRhdGFdKTsNCiAgICAgICAgICB0YXNrID0gdGFzay5jb2RlOw0KICAgICAgICB9DQogICAgICAgIHZhciB0YXNrRnVuYyA9IGV2YWwoIigiICsgdGFzayArICIpIik7DQogICAgICAgIGlmICh0eXBlb2YodGFza0Z1bmMpICE9PSAiZnVuY3Rpb24iKSB7DQogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOw0KICAgICAgICB9DQogICAgICAgIHRhc2tGdW5jLmFwcGx5KHRhcmdldCwgdGhlc2VBcmdzKTsNCiAgICAgIH0pOw0KICAgIH0NCiAgfQ0KDQogIGZ1bmN0aW9uIGluaXRTaXppbmcoZWwpIHsNCiAgICB2YXIgc2l6aW5nID0gc2l6aW5nUG9saWN5KGVsKTsNCiAgICBpZiAoIXNpemluZykNCiAgICAgIHJldHVybjsNCg0KICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsNCiAgICBpZiAoIWNlbCkNCiAgICAgIHJldHVybjsNCg0KICAgIGlmICh0eXBlb2Yoc2l6aW5nLnBhZGRpbmcpICE9PSAidW5kZWZpbmVkIikgew0KICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW4gPSAiMCI7DQogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOw0KICAgIH0NCg0KICAgIGlmIChzaXppbmcuZmlsbCkgew0KICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOw0KICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS53aWR0aCA9ICIxMDAlIjsNCiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOw0KICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLndpZHRoID0gIjEwMCUiOw0KICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmhlaWdodCA9ICIxMDAlIjsNCiAgICAgIGlmIChjZWwpIHsNCiAgICAgICAgY2VsLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsNCiAgICAgICAgdmFyIHBhZCA9IHVucGFja1BhZGRpbmcoc2l6aW5nLnBhZGRpbmcpOw0KICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7DQogICAgICAgIGNlbC5zdHlsZS5yaWdodCA9IHBhZC5yaWdodCArICJweCI7DQogICAgICAgIGNlbC5zdHlsZS5ib3R0b20gPSBwYWQuYm90dG9tICsgInB4IjsNCiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7DQogICAgICAgIGVsLnN0eWxlLndpZHRoID0gIjEwMCUiOw0KICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7DQogICAgICB9DQoNCiAgICAgIHJldHVybiB7DQogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwNCiAgICAgICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRIZWlnaHQ7IH0NCiAgICAgIH07DQoNCiAgICB9IGVsc2Ugew0KICAgICAgZWwuc3R5bGUud2lkdGggPSBweChzaXppbmcud2lkdGgpOw0KICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7DQoNCiAgICAgIHJldHVybiB7DQogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LA0KICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZWwub2Zmc2V0SGVpZ2h0OyB9DQogICAgICB9Ow0KICAgIH0NCiAgfQ0KDQogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzDQogIHZhciBkZWZhdWx0cyA9IHsNCiAgICBmaW5kOiBmdW5jdGlvbihzY29wZSkgew0KICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7DQogICAgfSwNCiAgICByZW5kZXJFcnJvcjogZnVuY3Rpb24oZWwsIGVycikgew0KICAgICAgdmFyICRlbCA9ICQoZWwpOw0KDQogICAgICB0aGlzLmNsZWFyRXJyb3IoZWwpOw0KDQogICAgICAvLyBBZGQgYWxsIHRoZXNlIGVycm9yIGNsYXNzZXMsIGFzIFNoaW55IGRvZXMNCiAgICAgIHZhciBlcnJDbGFzcyA9ICJzaGlueS1vdXRwdXQtZXJyb3IiOw0KICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7DQogICAgICAgIC8vIHVzZSB0aGUgY2xhc3NlcyBvZiB0aGUgZXJyb3IgY29uZGl0aW9uIGFzIENTUyBjbGFzcyBuYW1lcw0KICAgICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiAiICsgJC5tYXAoYXNBcnJheShlcnIudHlwZSksIGZ1bmN0aW9uKHR5cGUpIHsNCiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOw0KICAgICAgICB9KS5qb2luKCIgIik7DQogICAgICB9DQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7DQoNCiAgICAgIC8vIElzIGVsIGlubGluZSBvciBibG9jaz8gSWYgaW5saW5lIG9yIGlubGluZS1ibG9jaywganVzdCBkaXNwbGF5Om5vbmUgaXQNCiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLg0KICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuY3NzKCJkaXNwbGF5Iik7DQogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBkaXNwbGF5KTsNCg0KICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7DQogICAgICAgICRlbC5oaWRlKCk7DQogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsNCiAgICAgICAgICB2YXIgZXJyb3JTcGFuID0gJCgiPHNwYW4+IikuYWRkQ2xhc3MoZXJyQ2xhc3MpOw0KICAgICAgICAgIGVycm9yU3Bhbi50ZXh0KGVyci5tZXNzYWdlKTsNCiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsNCiAgICAgICAgfQ0KICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09PSAiYmxvY2siKSB7DQogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlDQogICAgICAgIC8vIGVsLCBhbmQgcG9zaXRpb24gdGhlIGVycm9yIHRvIGJlIG9uIHRvcCBvZiB0aGUgZWwuDQogICAgICAgIC8vIE1hcmsgaXQgd2l0aCBhIHVuaXF1ZSBJRCBhbmQgQ1NTIGNsYXNzIHNvIHdlIGNhbiByZW1vdmUgaXQgbGF0ZXIuDQogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7DQogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsNCiAgICAgICAgICB2YXIgZXJyb3JEaXYgPSAkKCI8ZGl2PiIpLmFkZENsYXNzKGVyckNsYXNzKS5jc3MoInBvc2l0aW9uIiwgImFic29sdXRlIikNCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkNCiAgICAgICAgICAgIC5jc3MoImxlZnQiLCBlbC5vZmZzZXRMZWZ0KQ0KICAgICAgICAgICAgLy8gc2V0dGluZyB3aWR0aCBjYW4gcHVzaCBvdXQgdGhlIHBhZ2Ugc2l6ZSwgZm9yY2luZyBvdGhlcndpc2UNCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3INCiAgICAgICAgICAgIC8vIHRoZSBlbGVtZW50IHRvIHNocmluazsgc28gdXNlIG1heC13aWR0aCBpbnN0ZWFkDQogICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQ0KICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsNCiAgICAgICAgICBlcnJvckRpdi50ZXh0KGVyci5tZXNzYWdlKTsNCiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JEaXYpOw0KDQogICAgICAgICAgLy8gUmVhbGx5IGR1bWIgd2F5IHRvIGtlZXAgdGhlIHNpemUvcG9zaXRpb24gb2YgdGhlIGVycm9yIGluIHN5bmMgd2l0aA0KICAgICAgICAgIC8vIHRoZSBwYXJlbnQgZWxlbWVudCBhcyB0aGUgd2luZG93IGlzIHJlc2l6ZWQgb3Igd2hhdGV2ZXIuDQogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICBpZiAoIWVycm9yRGl2WzBdLnBhcmVudEVsZW1lbnQpIHsNCiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRJZCk7DQogICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVycm9yRGl2DQogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkNCiAgICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpDQogICAgICAgICAgICAgIC5jc3MoIm1heFdpZHRoIiwgZWwub2Zmc2V0V2lkdGgpDQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7DQogICAgICAgICAgfSwgNTAwKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0sDQogICAgY2xlYXJFcnJvcjogZnVuY3Rpb24oZWwpIHsNCiAgICAgIHZhciAkZWwgPSAkKGVsKTsNCiAgICAgIHZhciBkaXNwbGF5ID0gJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIik7DQogICAgICAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiLCBudWxsKTsNCg0KICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7DQogICAgICAgIGlmIChkaXNwbGF5KQ0KICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsNCiAgICAgICAgJChlbC5uZXh0U2libGluZykuZmlsdGVyKCIuaHRtbHdpZGdldHMtZXJyb3IiKS5yZW1vdmUoKTsNCiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIil7DQogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOw0KICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOw0KICAgICAgfQ0KICAgIH0sDQogICAgc2l6aW5nOiB7fQ0KICB9Ow0KDQogIC8vIENhbGxlZCBieSB3aWRnZXQgYmluZGluZ3MgdG8gcmVnaXN0ZXIgYSBuZXcgdHlwZSBvZiB3aWRnZXQuIFRoZSBkZWZpbml0aW9uDQogIC8vIG9iamVjdCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6DQogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlDQogIC8vICAgdXNlZCBieSBkZWZhdWx0IGFzIHRoZSBDU1MgY2xhc3NuYW1lIHRvIGxvb2sgZm9yLg0KICAvLyAtIGluaXRpYWxpemUgKG9wdGlvbmFsKSAtIEEgZnVuY3Rpb24oZWwpIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25jZSBwZXINCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkDQogIC8vICAgdmFsdWUgdG8gcmVuZGVyVmFsdWUuDQogIC8vIC0gcmVuZGVyVmFsdWUgKHJlcXVpcmVkKSAtIEEgZnVuY3Rpb24oZWwsIGRhdGEsIGluaXRWYWx1ZSkgdGhhdCB3aWxsIGJlDQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXINCiAgLy8gICBlbGVtZW50OyBTaGlueSBhcHBzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgcGVyDQogIC8vICAgZWxlbWVudCwgYXMgdGhlIGRhdGEgY2hhbmdlcy4NCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsNCiAgICBpZiAoIWRlZmluaXRpb24ubmFtZSkgew0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgbmFtZSIpOw0KICAgIH0NCiAgICBpZiAoIWRlZmluaXRpb24udHlwZSkgew0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgdHlwZSIpOw0KICAgIH0NCiAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IG91dHB1dCB3aWRnZXRzDQogICAgaWYgKGRlZmluaXRpb24udHlwZSAhPT0gIm91dHB1dCIpIHsNCiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsNCiAgICB9DQogICAgLy8gVE9ETzogVmVyaWZ5IHRoYXQgLm5hbWUgaXMgYSB2YWxpZCBDU1MgY2xhc3NuYW1lDQoNCiAgICAvLyBTdXBwb3J0IG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucy4gT2xkLXN0eWxlIGNsYXNzLWJvdW5kDQogICAgLy8gZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0ICJvYmplY3QiIHBlciB3aWRnZXQgcGVyIHR5cGUvY2xhc3Mgb2YNCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cw0KICAgIC8vIHRha2UgZWwgYW5kIGluc3RhbmNlIGFyZ3VtZW50cywgYmVjYXVzZSB0aGUgd2lkZ2V0IG9iamVjdCBjYW4ndA0KICAgIC8vIHN0b3JlIHRoZW0uIE5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucyBoYXZlIG9uZSB3aWRnZXQNCiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0DQogICAgLy8gcHJvdmlkZSByZW5kZXJWYWx1ZSBvciByZXNpemUgbWV0aG9kcyBhdCBhbGwsIGp1c3QgdGhlIHNpbmdsZSBtZXRob2QNCiAgICAvLyAgIGZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpDQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4NCiAgICAvLyBUaGlzIGVuYWJsZXMgYSBmYXIgbW9yZSBuYXR1cmFsIHByb2dyYW1taW5nIHN0eWxlIGZvciB0aGUgd2lkZ2V0DQogICAgLy8gYXV0aG9yLCB3aG8gY2FuIHN0b3JlIHBlci1pbnN0YW5jZSBzdGF0ZSB1c2luZyBlaXRoZXIgT08tc3R5bGUNCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzDQogICAgLy8gaXMgaW4gY29udHJhc3QgdG8gd2hhdCBjYW4gb25seSBiZSBjYWxsZWQgQy1zdHlsZSBwc2V1ZG8tT08gd2hpY2ggaXMNCiAgICAvLyB3aGF0IHdlIHJlcXVpcmVkIGJlZm9yZSkuDQogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgew0KICAgICAgZGVmaW5pdGlvbiA9IGNyZWF0ZUxlZ2FjeURlZmluaXRpb25BZGFwdGVyKGRlZmluaXRpb24pOw0KICAgIH0NCg0KICAgIGlmICghZGVmaW5pdGlvbi5yZW5kZXJWYWx1ZSkgew0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJXaWRnZXQgbXVzdCBoYXZlIGEgcmVuZGVyVmFsdWUgZnVuY3Rpb24iKTsNCiAgICB9DQoNCiAgICAvLyBGb3Igc3RhdGljIHJlbmRlcmluZyAobm9uLVNoaW55KSwgdXNlIGEgc2ltcGxlIHdpZGdldCByZWdpc3RyYXRpb24NCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28NCiAgICAvLyBjb250YWluIHN0YXRpYyB3aWRnZXRzLg0KICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzID0gd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgfHwgW107DQogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLg0KICAgIHZhciBzdGF0aWNCaW5kaW5nID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgZGVmaW5pdGlvbik7DQogICAgb3ZlcnJpZGVNZXRob2Qoc3RhdGljQmluZGluZywgImZpbmQiLCBmdW5jdGlvbihzdXBlcmZ1bmMpIHsNCiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgew0KICAgICAgICB2YXIgcmVzdWx0cyA9IHN1cGVyZnVuYyhzY29wZSk7DQogICAgICAgIC8vIEZpbHRlciBvdXQgU2hpbnkgb3V0cHV0cywgd2Ugb25seSB3YW50IHRoZSBzdGF0aWMga2luZA0KICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOw0KICAgICAgfTsNCiAgICB9KTsNCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOw0KDQogICAgaWYgKHNoaW55TW9kZSkgew0KICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4NCiAgICAgIC8vIFRoZSBkZWZpbml0aW9uIGl0c2VsZiB3aWxsIG5vdCBiZSB0aGUgb3V0cHV0IGJpbmRpbmcsIGluc3RlYWQNCiAgICAgIC8vIHdlIHdpbGwgbWFrZSBhbiBvdXRwdXQgYmluZGluZyBvYmplY3QgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlDQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kDQogICAgICAvLyBuYW1lIChyZW5kZXJWYWx1ZSkgZm9yIGh0bWx3aWRnZXRzIGRlZmluaXRpb24gYW5kIFNoaW55IGJpbmRpbmdzDQogICAgICAvLyBidXQgdGhleSBhY3R1YWxseSBoYXZlIHF1aXRlIGRpZmZlcmVudCBzZW1hbnRpY3MgKHRoZSBTaGlueQ0KICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0DQogICAgICAvLyBzdHJpcHMgb2ZmIGJlZm9yZSBjYWxsaW5nIGh0bWx3aWRnZXRzIHJlbmRlclZhbHVlKS4gV2UgY2FuJ3QNCiAgICAgIC8vIGp1c3QgaWdub3JlIHRoZSBkaWZmZXJlbmNlIGJlY2F1c2UgaW4gc29tZSB3aWRnZXRzIGl0J3MgaGVscGZ1bA0KICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZg0KICAgICAgLy8gd2UncmUgbm90IGRlbGVnYXRpbmcsIHRoZW4gdGhhdCBjYWxsIHdpbGwgZ28gdG8gdGhlIFNoaW55DQogICAgICAvLyB2ZXJzaW9uIGluc3RlYWQgb2YgdGhlIGh0bWx3aWRnZXRzIHZlcnNpb24uDQoNCiAgICAgIC8vIE1lcmdlIGRlZmF1bHRzIHdpdGggZGVmaW5pdGlvbiwgd2l0aG91dCBtdXRhdGluZyBlaXRoZXIuDQogICAgICB2YXIgYmluZGluZ0RlZiA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGRlZmluaXRpb24pOw0KDQogICAgICAvLyBUaGlzIG9iamVjdCB3aWxsIGJlIG91ciBhY3R1YWwgU2hpbnkgYmluZGluZy4NCiAgICAgIHZhciBzaGlueUJpbmRpbmcgPSBuZXcgU2hpbnkuT3V0cHV0QmluZGluZygpOw0KDQogICAgICAvLyBXaXRoIGEgZmV3IGV4Y2VwdGlvbnMsIHdlJ2xsIHdhbnQgdG8gc2ltcGx5IHVzZSB0aGUgYmluZGluZ0RlZidzDQogICAgICAvLyB2ZXJzaW9uIG9mIG1ldGhvZHMgaWYgdGhleSBhcmUgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvDQogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwNCiAgICAgIC8vIG1ldGhvZHMgaW4gdGhlIGZ1dHVyZSwgYW5kIHdlIHdhbnQgdGhlbSB0byBiZSBvdmVycmlkZWFibGUgYnkNCiAgICAgIC8vIEhUTUxXaWRnZXQgYmluZGluZyBkZWZpbml0aW9ucywgdGhlbiB3ZSdsbCBuZWVkIHRvIGFkZCB0aGVtIHRvIHRoaXMNCiAgICAgIC8vIGxpc3QuDQogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJnZXRJZCIpOw0KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUNoYW5nZSIpOw0KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7DQogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJyZW5kZXJFcnJvciIpOw0KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAiY2xlYXJFcnJvciIpOw0KICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7DQoNCiAgICAgIC8vIFRoZSBmaW5kLCByZW5kZXJWYWx1ZSwgYW5kIHJlc2l6ZSBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSwgYmVjYXVzZSB3ZQ0KICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4NCg0KICAgICAgc2hpbnlCaW5kaW5nLmZpbmQgPSBmdW5jdGlvbihzY29wZSkgew0KICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7DQoNCiAgICAgICAgLy8gT25seSByZXR1cm4gZWxlbWVudHMgdGhhdCBhcmUgU2hpbnkgb3V0cHV0cywgbm90IHN0YXRpYyBvbmVzDQogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7DQoNCiAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHdoYXRldmVyIGNhdXNlZCBTaGlueSB0byB0aGluayB0aGVyZSBtaWdodCBiZQ0KICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuDQogICAgICAgIC8vIFNpbmNlIHRoZXJlIG1pZ2h0IGJlIGxvdHMgb2YgZGlmZmVyZW50IGh0bWx3aWRnZXRzIGJpbmRpbmdzLCB3ZQ0KICAgICAgICAvLyBzY2hlZHVsZSBleGVjdXRpb24gZm9yIGxhdGVyLS1ubyBuZWVkIHRvIHN0YXRpY1JlbmRlciBtdWx0aXBsZQ0KICAgICAgICAvLyB0aW1lcy4NCiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSBkeW5hbWljUmVzdWx0cy5sZW5ndGgpDQogICAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXIoKTsNCg0KICAgICAgICByZXR1cm4gZHluYW1pY1Jlc3VsdHM7DQogICAgICB9Ow0KDQogICAgICAvLyBXcmFwIHJlbmRlclZhbHVlIHRvIGhhbmRsZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggdW5mb3J0dW5hdGVseSBpc24ndA0KICAgICAgLy8gc3VwcG9ydGVkIG5hdGl2ZWx5IGJ5IFNoaW55IGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZy4NCg0KICAgICAgc2hpbnlCaW5kaW5nLnJlbmRlclZhbHVlID0gZnVuY3Rpb24oZWwsIGRhdGEpIHsNCiAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMNCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGRhdGEuZXZhbHMgJiYgaSA8IGRhdGEuZXZhbHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2ldKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIWJpbmRpbmdEZWYucmVuZGVyT25OdWxsVmFsdWUpIHsNCiAgICAgICAgICBpZiAoZGF0YS54ID09PSBudWxsKSB7DQogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7DQogICAgICAgICAgaW5pdFNpemluZyhlbCk7DQoNCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7DQogICAgICAgICAgaWYgKGJpbmRpbmdEZWYuaW5pdGlhbGl6ZSkgew0KICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJpbmRpbmdEZWYuaW5pdGlhbGl6ZShlbCwgZWwub2Zmc2V0V2lkdGgsDQogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7DQogICAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgcmVzdWx0KTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgU2hpbnkucmVuZGVyRGVwZW5kZW5jaWVzKGRhdGEuZGVwcyk7DQogICAgICAgIGJpbmRpbmdEZWYucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpKTsNCiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7DQogICAgICB9Ow0KDQogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQNCiAgICAgIGlmIChiaW5kaW5nRGVmLnJlc2l6ZSkgew0KICAgICAgICBzaGlueUJpbmRpbmcucmVzaXplID0gZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsNCiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuDQogICAgICAgICAgLy8gY2FsbGVkLCB3aGljaCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIHdpZGdldHMuDQogICAgICAgICAgaWYgKGVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgew0KICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7DQogICAgICAgICAgfQ0KICAgICAgICB9Ow0KICAgICAgfQ0KDQogICAgICBTaGlueS5vdXRwdXRCaW5kaW5ncy5yZWdpc3RlcihzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYubmFtZSk7DQogICAgfQ0KICB9Ow0KDQogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOw0KICBmdW5jdGlvbiBzY2hlZHVsZVN0YXRpY1JlbmRlcigpIHsNCiAgICBpZiAoIXNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCkgew0KICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsNCiAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gbnVsbDsNCiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOw0KICAgICAgfSwgMSk7DQogICAgfQ0KICB9DQoNCiAgLy8gUmVuZGVyIHN0YXRpYyB3aWRnZXRzIGFmdGVyIHRoZSBkb2N1bWVudCBmaW5pc2hlcyBsb2FkaW5nDQogIC8vIFN0YXRpY2FsbHkgcmVuZGVyIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBvZiB0aGlzIHdpZGdldCdzIGNsYXNzDQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsNCiAgICB2YXIgYmluZGluZ3MgPSB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyB8fCBbXTsNCiAgICBmb3JFYWNoKGJpbmRpbmdzLCBmdW5jdGlvbihiaW5kaW5nKSB7DQogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOw0KICAgICAgZm9yRWFjaChtYXRjaGVzLCBmdW5jdGlvbihlbCkgew0KICAgICAgICB2YXIgc2l6ZU9iaiA9IGluaXRTaXppbmcoZWwsIGJpbmRpbmcpOw0KDQogICAgICAgIGlmIChoYXNDbGFzcyhlbCwgImh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCIpKQ0KICAgICAgICAgIHJldHVybjsNCiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOw0KDQogICAgICAgIHZhciBpbml0UmVzdWx0Ow0KICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7DQogICAgICAgICAgaW5pdFJlc3VsdCA9IGJpbmRpbmcuaW5pdGlhbGl6ZShlbCwNCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwNCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0DQogICAgICAgICAgKTsNCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgaW5pdFJlc3VsdCk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoYmluZGluZy5yZXNpemUpIHsNCiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsNCiAgICAgICAgICB2YXIgcmVzaXplSGFuZGxlciA9IGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgICAgIHZhciBzaXplID0gew0KICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsDQogICAgICAgICAgICAgIGg6IHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApDQogICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIGlmIChzaXplLncgPT09IGxhc3RTaXplLncgJiYgc2l6ZS5oID09PSBsYXN0U2l6ZS5oKQ0KICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICBsYXN0U2l6ZSA9IHNpemU7DQogICAgICAgICAgICBiaW5kaW5nLnJlc2l6ZShlbCwgc2l6ZS53LCBzaXplLmgsIGluaXRSZXN1bHQpOw0KICAgICAgICAgIH07DQoNCiAgICAgICAgICBvbih3aW5kb3csICJyZXNpemUiLCByZXNpemVIYW5kbGVyKTsNCg0KICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciBjYXNlcyB3aGVyZSB3ZSdyZSBydW5uaW5nIGluIGEgU2hpbnkNCiAgICAgICAgICAvLyBhcHAsIGJ1dCB0aGUgd2lkZ2V0IGl0c2VsZiBpcyBub3QgYSBTaGlueSBvdXRwdXQsIGJ1dA0KICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzDQogICAgICAgICAgLy8gYW4gcm1hcmtkb3duIGRvY3VtZW50IHRoYXQgaGFzIHJ1bnRpbWU6c2hpbnkgYW5kIHdpZGdldA0KICAgICAgICAgIC8vIHRoYXQgaXNuJ3QgaW4gYSByZW5kZXIgZnVuY3Rpb24uIFNoaW55IG9ubHkga25vd3MgdG8NCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMNCiAgICAgICAgICAvLyB3aWRnZXRzLCBzbyB3ZSBkbyBpdCBvdXJzZWx2ZXMuDQogICAgICAgICAgaWYgKHdpbmRvdy5qUXVlcnkpIHsNCiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKA0KICAgICAgICAgICAgICAic2hvd24uaHRtbHdpZGdldHMgc2hvd24uYnMudGFiLmh0bWx3aWRnZXRzIHNob3duLmJzLmNvbGxhcHNlLmh0bWx3aWRnZXRzIiwNCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcg0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKA0KICAgICAgICAgICAgICAiaGlkZGVuLmh0bWx3aWRnZXRzIGhpZGRlbi5icy50YWIuaHRtbHdpZGdldHMgaGlkZGVuLmJzLmNvbGxhcHNlLmh0bWx3aWRnZXRzIiwNCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcg0KICAgICAgICAgICAgKTsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGhlIHNwZWNpZmljIGNhc2Ugb2YgaW9zbGlkZXMsIHdoaWNoDQogICAgICAgICAgLy8gZmxpcHMgc2xpZGVzIGJldHdlZW4gZGlzcGxheTpub25lIGFuZCBkaXNwbGF5OmJsb2NrLg0KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUNCiAgICAgICAgICAvLyBoZXJlLCBidXQgcmF0aGVyIGhhdmUgaW9zbGlkZXMgcmFpc2UgYSBnZW5lcmljIGV2ZW50LA0KICAgICAgICAgIC8vIGJ1dCB0aGUgcm1hcmtkb3duIHBhY2thZ2UganVzdCB3ZW50IHRvIENSQU4gc28gdGhlDQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4NCiAgICAgICAgICBpZiAod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHsNCiAgICAgICAgICAgIC8vIEl0J3MgT0sgdG8gbGltaXQgdGhpcyB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcg0KICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cw0KICAgICAgICAgICAgLy8gc3VjaCBicm93c2Vycy4NCiAgICAgICAgICAgIG9uKGRvY3VtZW50LCAic2xpZGVlbnRlciIsIHJlc2l6ZUhhbmRsZXIpOw0KICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7DQogICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgdmFyIHNjcmlwdERhdGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzY3JpcHRbZGF0YS1mb3I9JyIgKyBlbC5pZCArICInXVt0eXBlPSdhcHBsaWNhdGlvbi9qc29uJ10iKTsNCiAgICAgICAgaWYgKHNjcmlwdERhdGEpIHsNCiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOw0KICAgICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzDQogICAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsNCiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1trXSk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7DQogICAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBpbml0UmVzdWx0LCBbZWwsIGRhdGEueF0pOw0KICAgICAgICB9DQogICAgICB9KTsNCiAgICB9KTsNCg0KICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOw0KICB9DQoNCiAgLy8gV2FpdCB1bnRpbCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGxvYWRlZCB0byByZW5kZXIgdGhlIHdpZGdldHMuDQogIGlmIChkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKSB7DQogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGZ1bmN0aW9uKCkgew0KICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsNCiAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsNCiAgICB9LCBmYWxzZSk7DQogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsNCiAgICBkb2N1bWVudC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgZnVuY3Rpb24oKSB7DQogICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIikgew0KICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7DQogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsNCiAgICAgIH0NCiAgICB9KTsNCiAgfQ0KDQoNCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEF0dGFjaG1lbnRVcmwgPSBmdW5jdGlvbihkZXBuYW1lLCBrZXkpIHsNCiAgICAvLyBJZiBubyBrZXksIGRlZmF1bHQgdG8gdGhlIGZpcnN0IGl0ZW0NCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQ0KICAgICAga2V5ID0gMTsNCg0KICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOw0KICAgIGlmICghbGluaykgew0KICAgICAgdGhyb3cgbmV3IEVycm9yKCJBdHRhY2htZW50ICIgKyBkZXBuYW1lICsgIi8iICsga2V5ICsgIiBub3QgZm91bmQgaW4gZG9jdW1lbnQiKTsNCiAgICB9DQogICAgcmV0dXJuIGxpbmsuZ2V0QXR0cmlidXRlKCJocmVmIik7DQogIH07DQoNCiAgd2luZG93LkhUTUxXaWRnZXRzLmRhdGFmcmFtZVRvRDMgPSBmdW5jdGlvbihkZikgew0KICAgIHZhciBuYW1lcyA9IFtdOw0KICAgIHZhciBsZW5ndGg7DQogICAgZm9yICh2YXIgbmFtZSBpbiBkZikgew0KICAgICAgICBpZiAoZGYuaGFzT3duUHJvcGVydHkobmFtZSkpDQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOw0KICAgICAgICBpZiAodHlwZW9mKGRmW25hbWVdKSAhPT0gIm9iamVjdCIgfHwgdHlwZW9mKGRmW25hbWVdLmxlbmd0aCkgPT09ICJ1bmRlZmluZWQiKSB7DQogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMiKTsNCiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQWxsIGZpZWxkcyBtdXN0IGJlIGFycmF5cyBvZiB0aGUgc2FtZSBsZW5ndGgiKTsNCiAgICAgICAgfQ0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7DQogICAgfQ0KICAgIHZhciByZXN1bHRzID0gW107DQogICAgdmFyIGl0ZW07DQogICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgbGVuZ3RoOyByb3crKykgew0KICAgICAgICBpdGVtID0ge307DQogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsNCiAgICAgICAgICAgIGl0ZW1bbmFtZXNbY29sXV0gPSBkZltuYW1lc1tjb2xdXVtyb3ddOw0KICAgICAgICB9DQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsNCiAgICB9DQogICAgcmV0dXJuIHJlc3VsdHM7DQogIH07DQoNCiAgd2luZG93LkhUTUxXaWRnZXRzLnRyYW5zcG9zZUFycmF5MkQgPSBmdW5jdGlvbihhcnJheSkgew0KICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5Ow0KICAgICAgdmFyIG5ld0FycmF5ID0gYXJyYXlbMF0ubWFwKGZ1bmN0aW9uKGNvbCwgaSkgew0KICAgICAgICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24ocm93KSB7DQogICAgICAgICAgICAgIHJldHVybiByb3dbaV0NCiAgICAgICAgICB9KQ0KICAgICAgfSk7DQogICAgICByZXR1cm4gbmV3QXJyYXk7DQogIH07DQogIC8vIFNwbGl0IHZhbHVlIGF0IHNwbGl0Q2hhciwgYnV0IGFsbG93IHNwbGl0Q2hhciB0byBiZSBlc2NhcGVkDQogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcg0KICAvLyB3aWxsIGJlIGluY2x1ZGVkIGFzIHVzdWFsIChpbmNsdWRpbmcgZXNjYXBlQ2hhciBpdHNlbGYpLg0KICBmdW5jdGlvbiBzcGxpdFdpdGhFc2NhcGUodmFsdWUsIHNwbGl0Q2hhciwgZXNjYXBlQ2hhcikgew0KICAgIHZhciByZXN1bHRzID0gW107DQogICAgdmFyIGVzY2FwZU1vZGUgPSBmYWxzZTsNCiAgICB2YXIgY3VycmVudFJlc3VsdCA9ICIiOw0KICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsNCiAgICAgIGlmICghZXNjYXBlTW9kZSkgew0KICAgICAgICBpZiAodmFsdWVbcG9zXSA9PT0gc3BsaXRDaGFyKSB7DQogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOw0KICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSAiIjsNCiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVtwb3NdID09PSBlc2NhcGVDaGFyKSB7DQogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOw0KICAgICAgICB9DQogICAgICB9IGVsc2Ugew0KICAgICAgICBjdXJyZW50UmVzdWx0ICs9IHZhbHVlW3Bvc107DQogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsNCiAgICAgIH0NCiAgICB9DQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7DQogICAgICByZXN1bHRzLnB1c2goY3VycmVudFJlc3VsdCk7DQogICAgfQ0KICAgIHJldHVybiByZXN1bHRzOw0KICB9DQogIC8vIEZ1bmN0aW9uIGF1dGhvcmVkIGJ5IFlpaHVpL0pKIEFsbGFpcmUNCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7DQogICAgdmFyIHBhcnRzID0gc3BsaXRXaXRoRXNjYXBlKG1lbWJlciwgJy4nLCAnXFwnKTsNCiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykgew0KICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsNCiAgICAgIC8vIHBhcnQgbWF5IGJlIGEgY2hhcmFjdGVyIG9yICdudW1lcmljJyBtZW1iZXIgbmFtZQ0KICAgICAgaWYgKG8gIT09IG51bGwgJiYgdHlwZW9mIG8gPT09ICJvYmplY3QiICYmIHBhcnQgaW4gbykgew0KICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlDQogICAgICAgICAgaWYgKHR5cGVvZiBvW3BhcnRdID09PSAic3RyaW5nIikNCiAgICAgICAgICAgIG9bcGFydF0gPSBldmFsKCIoIiArIG9bcGFydF0gKyAiKSIpOw0KICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QNCiAgICAgICAgICBvID0gb1twYXJ0XTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgIH0NCiAgfTsNCg0KICAvLyBSZXRyaWV2ZSB0aGUgSFRNTFdpZGdldCBpbnN0YW5jZSAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlIG9mIGFuDQogIC8vIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pDQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuDQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKGVsKSB7DQogICAgcmV0dXJuIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKTsNCiAgfTsNCg0KICAvLyBGaW5kcyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3RvciwNCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZg0KICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQ0KICAvLyBhc3NvY2lhdGVkIHdpdGggdGhhdCBlbGVtZW50LCBpZiBhbnkuIElmIG5vIGVsZW1lbnQgbWF0Y2hlcyB0aGUNCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0DQogIC8vIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBpdCwgdGhlbiBudWxsIGlzIHJldHVybmVkLg0KICAvLw0KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuDQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7DQogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgew0KICAgICAgc2VsZWN0b3IgPSBzY29wZTsNCiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7DQogICAgfQ0KDQogICAgdmFyIGVsID0gc2NvcGUucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7DQogICAgaWYgKGVsID09PSBudWxsKSB7DQogICAgICByZXR1cm4gbnVsbDsNCiAgICB9IGVsc2Ugew0KICAgICAgcmV0dXJuIHdpbmRvdy5IVE1MV2lkZ2V0cy5nZXRJbnN0YW5jZShlbCk7DQogICAgfQ0KICB9Ow0KDQogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZA0KICAvLyByZXR1cm5zIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlcyAoaS5lLiB0aGUgcmV0dXJuIHZhbHVlcyBvZg0KICAvLyBhbiBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQ0KICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdA0KICAvLyBtYXRjaCB0aGUgc2VsZWN0b3IgZG9uJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIEhUTUxXaWRnZXQNCiAgLy8gaW5zdGFuY2UsIHRoZSByZXR1cm5lZCBhcnJheSB3aWxsIGNvbnRhaW4gbnVsbHMuDQogIC8vDQogIC8vIFRoZSBzY29wZSBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIGRlZmF1bHRzIHRvIHdpbmRvdy5kb2N1bWVudC4NCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmRBbGwgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsNCiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7DQogICAgICBzZWxlY3RvciA9IHNjb3BlOw0KICAgICAgc2NvcGUgPSBkb2N1bWVudDsNCiAgICB9DQoNCiAgICB2YXIgbm9kZXMgPSBzY29wZS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsNCiAgICB2YXIgcmVzdWx0cyA9IFtdOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHsNCiAgICAgIHJlc3VsdHMucHVzaCh3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2Uobm9kZXNbaV0pKTsNCiAgICB9DQogICAgcmV0dXJuIHJlc3VsdHM7DQogIH07DQoNCiAgdmFyIHBvc3RSZW5kZXJIYW5kbGVycyA9IFtdOw0KICBmdW5jdGlvbiBpbnZva2VQb3N0UmVuZGVySGFuZGxlcnMoKSB7DQogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsNCiAgICAgIHZhciBoYW5kbGVyID0gcG9zdFJlbmRlckhhbmRsZXJzLnNoaWZ0KCk7DQogICAgICBpZiAoaGFuZGxlcikgew0KICAgICAgICBoYW5kbGVyKCk7DQogICAgICB9DQogICAgfQ0KICB9DQoNCiAgLy8gUmVnaXN0ZXIgdGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGludm9rZWQgYWZ0ZXIgdGhlDQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuDQogIHdpbmRvdy5IVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7DQogICAgcG9zdFJlbmRlckhhbmRsZXJzLnB1c2goY2FsbGJhY2spOw0KICB9Ow0KDQogIC8vIFRha2VzIGEgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb24sIGFuZCByZXR1cm5zIGFuDQogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nDQogIC8vIHRvIHJld3JpdGUgYWxsIHRoZSBsb2dpYyBpbiB0aGlzIGZpbGUgdG8gYWNjb21vZGF0ZSBib3RoDQogIC8vIHR5cGVzIG9mIGRlZmluaXRpb25zLg0KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7DQogICAgdmFyIHJlc3VsdCA9IHsNCiAgICAgIG5hbWU6IGRlZm4ubmFtZSwNCiAgICAgIHR5cGU6IGRlZm4udHlwZSwNCiAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7DQogICAgICAgIHJldHVybiBkZWZuLmZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpOw0KICAgICAgfSwNCiAgICAgIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgeCwgaW5zdGFuY2UpIHsNCiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJlbmRlclZhbHVlKHgpOw0KICAgICAgfSwNCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7DQogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZXNpemUod2lkdGgsIGhlaWdodCk7DQogICAgICB9DQogICAgfTsNCg0KICAgIGlmIChkZWZuLmZpbmQpDQogICAgICByZXN1bHQuZmluZCA9IGRlZm4uZmluZDsNCiAgICBpZiAoZGVmbi5yZW5kZXJFcnJvcikNCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7DQogICAgaWYgKGRlZm4uY2xlYXJFcnJvcikNCiAgICAgIHJlc3VsdC5jbGVhckVycm9yID0gZGVmbi5jbGVhckVycm9yOw0KDQogICAgcmV0dXJuIHJlc3VsdDsNCiAgfQ0KfSkoKTsNCg0K"></script>
<script src="data:application/x-javascript;base64,LyohIGpRdWVyeSB2MS4xMi40IHwgKGMpIGpRdWVyeSBGb3VuZGF0aW9uIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovDQohZnVuY3Rpb24oYSxiKXsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1hLmRvY3VtZW50P2IoYSwhMCk6ZnVuY3Rpb24oYSl7aWYoIWEuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIGIoYSl9OmIoYSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZD1hLmRvY3VtZW50LGU9Yy5zbGljZSxmPWMuY29uY2F0LGc9Yy5wdXNoLGg9Yy5pbmRleE9mLGk9e30saj1pLnRvU3RyaW5nLGs9aS5oYXNPd25Qcm9wZXJ0eSxsPXt9LG09IjEuMTIuNCIsbj1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgbi5mbi5pbml0KGEsYil9LG89L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLHA9L14tbXMtLyxxPS8tKFtcZGEtel0pL2dpLHI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYi50b1VwcGVyQ2FzZSgpfTtuLmZuPW4ucHJvdG90eXBlPXtqcXVlcnk6bSxjb25zdHJ1Y3RvcjpuLHNlbGVjdG9yOiIiLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/MD5hP3RoaXNbYSt0aGlzLmxlbmd0aF06dGhpc1thXTplLmNhbGwodGhpcyl9LHB1c2hTdGFjazpmdW5jdGlvbihhKXt2YXIgYj1uLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gYi5wcmV2T2JqZWN0PXRoaXMsYi5jb250ZXh0PXRoaXMuY29udGV4dCxifSxlYWNoOmZ1bmN0aW9uKGEpe3JldHVybiBuLmVhY2godGhpcyxhKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhuLm1hcCh0aGlzLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5sZW5ndGgsYz0rYSsoMD5hP2I6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGM+PTAmJmI+Yz9bdGhpc1tjXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6Zyxzb3J0OmMuc29ydCxzcGxpY2U6Yy5zcGxpY2V9LG4uZXh0ZW5kPW4uZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGc9YXJndW1lbnRzWzBdfHx7fSxoPTEsaT1hcmd1bWVudHMubGVuZ3RoLGo9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIGcmJihqPWcsZz1hcmd1bWVudHNbaF18fHt9LGgrKyksIm9iamVjdCI9PXR5cGVvZiBnfHxuLmlzRnVuY3Rpb24oZyl8fChnPXt9KSxoPT09aSYmKGc9dGhpcyxoLS0pO2k+aDtoKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW2hdKSlmb3IoZCBpbiBlKWE9Z1tkXSxjPWVbZF0sZyE9PWMmJihqJiZjJiYobi5pc1BsYWluT2JqZWN0KGMpfHwoYj1uLmlzQXJyYXkoYykpKT8oYj8oYj0hMSxmPWEmJm4uaXNBcnJheShhKT9hOltdKTpmPWEmJm4uaXNQbGFpbk9iamVjdChhKT9hOnt9LGdbZF09bi5leHRlbmQoaixmLGMpKTp2b2lkIDAhPT1jJiYoZ1tkXT1jKSk7cmV0dXJuIGd9LG4uZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhtK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxub29wOmZ1bmN0aW9uKCl7fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PT1uLnR5cGUoYSl9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuImFycmF5Ij09PW4udHlwZShhKX0saXNXaW5kb3c6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWEmJmE9PWEud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7dmFyIGI9YSYmYS50b1N0cmluZygpO3JldHVybiFuLmlzQXJyYXkoYSkmJmItcGFyc2VGbG9hdChiKSsxPj0wfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiO2ZvcihiIGluIGEpcmV0dXJuITE7cmV0dXJuITB9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oYSl7dmFyIGI7aWYoIWF8fCJvYmplY3QiIT09bi50eXBlKGEpfHxhLm5vZGVUeXBlfHxuLmlzV2luZG93KGEpKXJldHVybiExO3RyeXtpZihhLmNvbnN0cnVjdG9yJiYhay5jYWxsKGEsImNvbnN0cnVjdG9yIikmJiFrLmNhbGwoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKSlyZXR1cm4hMX1jYXRjaChjKXtyZXR1cm4hMX1pZighbC5vd25GaXJzdClmb3IoYiBpbiBhKXJldHVybiBrLmNhbGwoYSxiKTtmb3IoYiBpbiBhKTtyZXR1cm4gdm9pZCAwPT09Ynx8ay5jYWxsKGEsYil9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/YSsiIjoib2JqZWN0Ij09dHlwZW9mIGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBhP2lbai5jYWxsKGEpXXx8Im9iamVjdCI6dHlwZW9mIGF9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYil7YiYmbi50cmltKGIpJiYoYS5leGVjU2NyaXB0fHxmdW5jdGlvbihiKXthLmV2YWwuY2FsbChhLGIpfSkoYil9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKHAsIm1zLSIpLnJlcGxhY2UocSxyKX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yi50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYil7dmFyIGMsZD0wO2lmKHMoYSkpe2ZvcihjPWEubGVuZ3RoO2M+ZDtkKyspaWYoYi5jYWxsKGFbZF0sZCxhW2RdKT09PSExKWJyZWFrfWVsc2UgZm9yKGQgaW4gYSlpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6KGErIiIpLnJlcGxhY2UobywiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO3JldHVybiBudWxsIT1hJiYocyhPYmplY3QoYSkpP24ubWVyZ2UoYywic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEpOmcuY2FsbChjLGEpKSxjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZihiKXtpZihoKXJldHVybiBoLmNhbGwoYixhLGMpO2ZvcihkPWIubGVuZ3RoLGM9Yz8wPmM/TWF0aC5tYXgoMCxkK2MpOmM6MDtkPmM7YysrKWlmKGMgaW4gYiYmYltjXT09PWEpcmV0dXJuIGN9cmV0dXJuLTF9LG1lcmdlOmZ1bmN0aW9uKGEsYil7dmFyIGM9K2IubGVuZ3RoLGQ9MCxlPWEubGVuZ3RoO3doaWxlKGM+ZClhW2UrK109YltkKytdO2lmKGMhPT1jKXdoaWxlKHZvaWQgMCE9PWJbZF0pYVtlKytdPWJbZCsrXTtyZXR1cm4gYS5sZW5ndGg9ZSxhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQsZT1bXSxmPTAsZz1hLmxlbmd0aCxoPSFjO2c+ZjtmKyspZD0hYihhW2ZdLGYpLGQhPT1oJiZlLnB1c2goYVtmXSk7cmV0dXJuIGV9LG1hcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxnPTAsaD1bXTtpZihzKGEpKWZvcihkPWEubGVuZ3RoO2Q+ZztnKyspZT1iKGFbZ10sZyxjKSxudWxsIT1lJiZoLnB1c2goZSk7ZWxzZSBmb3IoZyBpbiBhKWU9YihhW2ddLGcsYyksbnVsbCE9ZSYmaC5wdXNoKGUpO3JldHVybiBmLmFwcGx5KFtdLGgpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGY7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiJiYoZj1hW2JdLGI9YSxhPWYpLG4uaXNGdW5jdGlvbihhKT8oYz1lLmNhbGwoYXJndW1lbnRzLDIpLGQ9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShifHx0aGlzLGMuY29uY2F0KGUuY2FsbChhcmd1bWVudHMpKSl9LGQuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxuLmd1aWQrKyxkKTp2b2lkIDB9LG5vdzpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0sc3VwcG9ydDpsfSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKG4uZm5bU3ltYm9sLml0ZXJhdG9yXT1jW1N5bWJvbC5pdGVyYXRvcl0pLG4uZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtpWyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIHMoYSl7dmFyIGI9ISFhJiYibGVuZ3RoImluIGEmJmEubGVuZ3RoLGM9bi50eXBlKGEpO3JldHVybiJmdW5jdGlvbiI9PT1jfHxuLmlzV2luZG93KGEpPyExOiJhcnJheSI9PT1jfHwwPT09Ynx8Im51bWJlciI9PXR5cGVvZiBiJiZiPjAmJmItMSBpbiBhfXZhciB0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU9InNpenpsZSIrMSpuZXcgRGF0ZSx2PWEuZG9jdW1lbnQsdz0wLHg9MCx5PWdhKCksej1nYSgpLEE9Z2EoKSxCPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9PT1iJiYobD0hMCksMH0sQz0xPDwzMSxEPXt9Lmhhc093blByb3BlcnR5LEU9W10sRj1FLnBvcCxHPUUucHVzaCxIPUUucHVzaCxJPUUuc2xpY2UsSj1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7ZD5jO2MrKylpZihhW2NdPT09YilyZXR1cm4gYztyZXR1cm4tMX0sSz0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLEw9IltcXHgyMFxcdFxcclxcblxcZl0iLE09Iig/OlxcXFwufFtcXHctXXxbXlxceDAwLVxceGEwXSkrIixOPSJcXFsiK0wrIiooIitNKyIpKD86IitMKyIqKFsqXiR8IX5dPz0pIitMKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIrTSsiKSl8KSIrTCsiKlxcXSIsTz0iOigiK00rIikoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwiK04rIikqKXwuKilcXCl8KSIsUD1uZXcgUmVnRXhwKEwrIisiLCJnIiksUT1uZXcgUmVnRXhwKCJeIitMKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK0wrIiskIiwiZyIpLFI9bmV3IFJlZ0V4cCgiXiIrTCsiKiwiK0wrIioiKSxTPW5ldyBSZWdFeHAoIl4iK0wrIiooWz4rfl18IitMKyIpIitMKyIqIiksVD1uZXcgUmVnRXhwKCI9IitMKyIqKFteXFxdJ1wiXSo/KSIrTCsiKlxcXSIsImciKSxVPW5ldyBSZWdFeHAoTyksVj1uZXcgUmVnRXhwKCJeIitNKyIkIiksVz17SUQ6bmV3IFJlZ0V4cCgiXiMoIitNKyIpIiksQ0xBU1M6bmV3IFJlZ0V4cCgiXlxcLigiK00rIikiKSxUQUc6bmV3IFJlZ0V4cCgiXigiK00rInxbKl0pIiksQVRUUjpuZXcgUmVnRXhwKCJeIitOKSxQU0VVRE86bmV3IFJlZ0V4cCgiXiIrTyksQ0hJTEQ6bmV3IFJlZ0V4cCgiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFwoIitMKyIqKGV2ZW58b2RkfCgoWystXXwpKFxcZCopbnwpIitMKyIqKD86KFsrLV18KSIrTCsiKihcXGQrKXwpKSIrTCsiKlxcKXwpIiwiaSIpLGJvb2w6bmV3IFJlZ0V4cCgiXig/OiIrSysiKSQiLCJpIiksbmVlZHNDb250ZXh0Om5ldyBSZWdFeHAoIl4iK0wrIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIrTCsiKigoPzotXFxkKT9cXGQqKSIrTCsiKlxcKXwpKD89W14tXXwkKSIsImkiKX0sWD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFk9L15oXGQkL2ksWj0vXltee10rXHtccypcW25hdGl2ZSBcdy8sJD0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLF89L1srfl0vLGFhPS8nfFxcL2csYmE9bmV3IFJlZ0V4cCgiXFxcXChbXFxkYS1mXXsxLDZ9IitMKyI/fCgiK0wrIil8LikiLCJpZyIpLGNhPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0iMHgiK2ItNjU1MzY7cmV0dXJuIGQhPT1kfHxjP2I6MD5kP1N0cmluZy5mcm9tQ2hhckNvZGUoZCs2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZShkPj4xMHw1NTI5NiwxMDIzJmR8NTYzMjApfSxkYT1mdW5jdGlvbigpe20oKX07dHJ5e0guYXBwbHkoRT1JLmNhbGwodi5jaGlsZE5vZGVzKSx2LmNoaWxkTm9kZXMpLEVbdi5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZWEpe0g9e2FwcGx5OkUubGVuZ3RoP2Z1bmN0aW9uKGEsYil7Ry5hcHBseShhLEkuY2FsbChiKSl9OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5sZW5ndGgsZD0wO3doaWxlKGFbYysrXT1iW2QrK10pO2EubGVuZ3RoPWMtMX19fWZ1bmN0aW9uIGZhKGEsYixkLGUpe3ZhciBmLGgsaixrLGwsbyxyLHMsdz1iJiZiLm93bmVyRG9jdW1lbnQseD1iP2Iubm9kZVR5cGU6OTtpZihkPWR8fFtdLCJzdHJpbmciIT10eXBlb2YgYXx8IWF8fDEhPT14JiY5IT09eCYmMTEhPT14KXJldHVybiBkO2lmKCFlJiYoKGI/Yi5vd25lckRvY3VtZW50fHxiOnYpIT09biYmbShiKSxiPWJ8fG4scCkpe2lmKDExIT09eCYmKG89JC5leGVjKGEpKSlpZihmPW9bMV0pe2lmKDk9PT14KXtpZighKGo9Yi5nZXRFbGVtZW50QnlJZChmKSkpcmV0dXJuIGQ7aWYoai5pZD09PWYpcmV0dXJuIGQucHVzaChqKSxkfWVsc2UgaWYodyYmKGo9dy5nZXRFbGVtZW50QnlJZChmKSkmJnQoYixqKSYmai5pZD09PWYpcmV0dXJuIGQucHVzaChqKSxkfWVsc2V7aWYob1syXSlyZXR1cm4gSC5hcHBseShkLGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSkpLGQ7aWYoKGY9b1szXSkmJmMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBILmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGYpKSxkfWlmKGMucXNhJiYhQVthKyIgIl0mJighcXx8IXEudGVzdChhKSkpe2lmKDEhPT14KXc9YixzPWE7ZWxzZSBpZigib2JqZWN0IiE9PWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7KGs9Yi5nZXRBdHRyaWJ1dGUoImlkIikpP2s9ay5yZXBsYWNlKGFhLCJcXCQmIik6Yi5zZXRBdHRyaWJ1dGUoImlkIixrPXUpLHI9ZyhhKSxoPXIubGVuZ3RoLGw9Vi50ZXN0KGspPyIjIitrOiJbaWQ9JyIraysiJ10iO3doaWxlKGgtLSlyW2hdPWwrIiAiK3FhKHJbaF0pO3M9ci5qb2luKCIsIiksdz1fLnRlc3QoYSkmJm9hKGIucGFyZW50Tm9kZSl8fGJ9aWYocyl0cnl7cmV0dXJuIEguYXBwbHkoZCx3LnF1ZXJ5U2VsZWN0b3JBbGwocykpLGR9Y2F0Y2goeSl7fWZpbmFsbHl7az09PXUmJmIucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGkoYS5yZXBsYWNlKFEsIiQxIiksYixkLGUpfWZ1bmN0aW9uIGdhKCl7dmFyIGE9W107ZnVuY3Rpb24gYihjLGUpe3JldHVybiBhLnB1c2goYysiICIpPmQuY2FjaGVMZW5ndGgmJmRlbGV0ZSBiW2Euc2hpZnQoKV0sYltjKyIgIl09ZX1yZXR1cm4gYn1mdW5jdGlvbiBoYShhKXtyZXR1cm4gYVt1XT0hMCxhfWZ1bmN0aW9uIGlhKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEhYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24gamEoYSxiKXt2YXIgYz1hLnNwbGl0KCJ8IiksZT1jLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRySGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24ga2EoYSxiKXt2YXIgYz1iJiZhLGQ9YyYmMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiYofmIuc291cmNlSW5kZXh8fEMpLSh+YS5zb3VyY2VJbmRleHx8Qyk7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxlKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0xfWZ1bmN0aW9uIGxhKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWMmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG1hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1jfHwiYnV0dG9uIj09PWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBuYShhKXtyZXR1cm4gaGEoZnVuY3Rpb24oYil7cmV0dXJuIGI9K2IsaGEoZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10sYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tlXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBvYShhKXtyZXR1cm4gYSYmInVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZhfWM9ZmEuc3VwcG9ydD17fSxmPWZhLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1lbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj8iSFRNTCIhPT1iLm5vZGVOYW1lOiExfSxtPWZhLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe3ZhciBiLGUsZz1hP2Eub3duZXJEb2N1bWVudHx8YTp2O3JldHVybiBnIT09biYmOT09PWcubm9kZVR5cGUmJmcuZG9jdW1lbnRFbGVtZW50PyhuPWcsbz1uLmRvY3VtZW50RWxlbWVudCxwPSFmKG4pLChlPW4uZGVmYXVsdFZpZXcpJiZlLnRvcCE9PWUmJihlLmFkZEV2ZW50TGlzdGVuZXI/ZS5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLGRhLCExKTplLmF0dGFjaEV2ZW50JiZlLmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsZGEpKSxjLmF0dHJpYnV0ZXM9aWEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2xhc3NOYW1lPSJpIiwhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksYy5nZXRFbGVtZW50c0J5VGFnTmFtZT1pYShmdW5jdGlvbihhKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChuLmNyZWF0ZUNvbW1lbnQoIiIpKSwhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1aLnRlc3Qobi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxjLmdldEJ5SWQ9aWEoZnVuY3Rpb24oYSl7cmV0dXJuIG8uYXBwZW5kQ2hpbGQoYSkuaWQ9dSwhbi5nZXRFbGVtZW50c0J5TmFtZXx8IW4uZ2V0RWxlbWVudHNCeU5hbWUodSkubGVuZ3RofSksYy5nZXRCeUlkPyhkLmZpbmQuSUQ9ZnVuY3Rpb24oYSxiKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQmJnApe3ZhciBjPWIuZ2V0RWxlbWVudEJ5SWQoYSk7cmV0dXJuIGM/W2NdOltdfX0sZC5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKGJhLGNhKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJpZCIpPT09Yn19KTooZGVsZXRlIGQuZmluZC5JRCxkLmZpbHRlci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoYmEsY2EpO3JldHVybiBmdW5jdGlvbihhKXt2YXIgYz0idW5kZWZpbmVkIiE9dHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSYmYS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBjJiZjLnZhbHVlPT09Yn19KSxkLmZpbmQuVEFHPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZnVuY3Rpb24oYSxiKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGIuZ2V0RWxlbWVudHNCeVRhZ05hbWU/Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKTpjLnFzYT9iLnF1ZXJ5U2VsZWN0b3JBbGwoYSk6dm9pZCAwfTpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT0wLGY9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKTtpZigiKiI9PT1hKXt3aGlsZShjPWZbZSsrXSkxPT09Yy5ub2RlVHlwZSYmZC5wdXNoKGMpO3JldHVybiBkfXJldHVybiBmfSxkLmZpbmQuQ0xBU1M9Yy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbihhLGIpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZwP2IuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhKTp2b2lkIDB9LHI9W10scT1bXSwoYy5xc2E9Wi50ZXN0KG4ucXVlcnlTZWxlY3RvckFsbCkpJiYoaWEoZnVuY3Rpb24oYSl7by5hcHBlbmRDaGlsZChhKS5pbm5lckhUTUw9IjxhIGlkPSciK3UrIic+PC9hPjxzZWxlY3QgaWQ9JyIrdSsiLVxyXFwnIG1zYWxsb3djYXB0dXJlPScnPjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IixhLnF1ZXJ5U2VsZWN0b3JBbGwoIlttc2FsbG93Y2FwdHVyZV49JyddIikubGVuZ3RoJiZxLnB1c2goIlsqXiRdPSIrTCsiKig/OicnfFwiXCIpIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RofHxxLnB1c2goIlxcWyIrTCsiKig/OnZhbHVlfCIrSysiKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiW2lkfj0iK3UrIi1dIikubGVuZ3RofHxxLnB1c2goIn49IiksYS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8cS5wdXNoKCI6Y2hlY2tlZCIpLGEucXVlcnlTZWxlY3RvckFsbCgiYSMiK3UrIisqIikubGVuZ3RofHxxLnB1c2goIi4jLitbK35dIil9KSxpYShmdW5jdGlvbihhKXt2YXIgYj1uLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Yi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJoaWRkZW4iKSxhLmFwcGVuZENoaWxkKGIpLnNldEF0dHJpYnV0ZSgibmFtZSIsIkQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPWRdIikubGVuZ3RoJiZxLnB1c2goIm5hbWUiK0wrIipbKl4kfCF+XT89IiksYS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aHx8cS5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGEucXVlcnlTZWxlY3RvckFsbCgiKiw6eCIpLHEucHVzaCgiLC4qOiIpfSkpLChjLm1hdGNoZXNTZWxlY3Rvcj1aLnRlc3Qocz1vLm1hdGNoZXN8fG8ud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxvLm1vek1hdGNoZXNTZWxlY3Rvcnx8by5vTWF0Y2hlc1NlbGVjdG9yfHxvLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJmlhKGZ1bmN0aW9uKGEpe2MuZGlzY29ubmVjdGVkTWF0Y2g9cy5jYWxsKGEsImRpdiIpLHMuY2FsbChhLCJbcyE9JyddOngiKSxyLnB1c2goIiE9IixPKX0pLHE9cS5sZW5ndGgmJm5ldyBSZWdFeHAocS5qb2luKCJ8IikpLHI9ci5sZW5ndGgmJm5ldyBSZWdFeHAoci5qb2luKCJ8IikpLGI9Wi50ZXN0KG8uY29tcGFyZURvY3VtZW50UG9zaXRpb24pLHQ9Ynx8Wi50ZXN0KG8uY29udGFpbnMpP2Z1bmN0aW9uKGEsYil7dmFyIGM9OT09PWEubm9kZVR5cGU/YS5kb2N1bWVudEVsZW1lbnQ6YSxkPWImJmIucGFyZW50Tm9kZTtyZXR1cm4gYT09PWR8fCEoIWR8fDEhPT1kLm5vZGVUeXBlfHwhKGMuY29udGFpbnM/Yy5jb250YWlucyhkKTphLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQpKSl9OmZ1bmN0aW9uKGEsYil7aWYoYil3aGlsZShiPWIucGFyZW50Tm9kZSlpZihiPT09YSlyZXR1cm4hMDtyZXR1cm4hMX0sQj1iP2Z1bmN0aW9uKGEsYil7aWYoYT09PWIpcmV0dXJuIGw9ITAsMDt2YXIgZD0hYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gZD9kOihkPShhLm93bmVyRG9jdW1lbnR8fGEpPT09KGIub3duZXJEb2N1bWVudHx8Yik/YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKToxLDEmZHx8IWMuc29ydERldGFjaGVkJiZiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGEpPT09ZD9hPT09bnx8YS5vd25lckRvY3VtZW50PT09diYmdCh2LGEpPy0xOmI9PT1ufHxiLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYik/MTprP0ooayxhKS1KKGssYik6MDo0JmQ/LTE6MSl9OmZ1bmN0aW9uKGEsYil7aWYoYT09PWIpcmV0dXJuIGw9ITAsMDt2YXIgYyxkPTAsZT1hLnBhcmVudE5vZGUsZj1iLnBhcmVudE5vZGUsZz1bYV0saD1bYl07aWYoIWV8fCFmKXJldHVybiBhPT09bj8tMTpiPT09bj8xOmU/LTE6Zj8xOms/SihrLGEpLUooayxiKTowO2lmKGU9PT1mKXJldHVybiBrYShhLGIpO2M9YTt3aGlsZShjPWMucGFyZW50Tm9kZSlnLnVuc2hpZnQoYyk7Yz1iO3doaWxlKGM9Yy5wYXJlbnROb2RlKWgudW5zaGlmdChjKTt3aGlsZShnW2RdPT09aFtkXSlkKys7cmV0dXJuIGQ/a2EoZ1tkXSxoW2RdKTpnW2RdPT09dj8tMTpoW2RdPT09dj8xOjB9LG4pOm59LGZhLm1hdGNoZXM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZmEoYSxudWxsLG51bGwsYil9LGZhLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihhLGIpe2lmKChhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKSxiPWIucmVwbGFjZShULCI9JyQxJ10iKSxjLm1hdGNoZXNTZWxlY3RvciYmcCYmIUFbYisiICJdJiYoIXJ8fCFyLnRlc3QoYikpJiYoIXF8fCFxLnRlc3QoYikpKXRyeXt2YXIgZD1zLmNhbGwoYSxiKTtpZihkfHxjLmRpc2Nvbm5lY3RlZE1hdGNofHxhLmRvY3VtZW50JiYxMSE9PWEuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIGR9Y2F0Y2goZSl7fXJldHVybiBmYShiLG4sbnVsbCxbYV0pLmxlbmd0aD4wfSxmYS5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybihhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKSx0KGEsYil9LGZhLmF0dHI9ZnVuY3Rpb24oYSxiKXsoYS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSk7dmFyIGU9ZC5hdHRySGFuZGxlW2IudG9Mb3dlckNhc2UoKV0sZj1lJiZELmNhbGwoZC5hdHRySGFuZGxlLGIudG9Mb3dlckNhc2UoKSk/ZShhLGIsIXApOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09Zj9mOmMuYXR0cmlidXRlc3x8IXA/YS5nZXRBdHRyaWJ1dGUoYik6KGY9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmZi5zcGVjaWZpZWQ/Zi52YWx1ZTpudWxsfSxmYS5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrYSl9LGZhLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZD1bXSxlPTAsZj0wO2lmKGw9IWMuZGV0ZWN0RHVwbGljYXRlcyxrPSFjLnNvcnRTdGFibGUmJmEuc2xpY2UoMCksYS5zb3J0KEIpLGwpe3doaWxlKGI9YVtmKytdKWI9PT1hW2ZdJiYoZT1kLnB1c2goZikpO3doaWxlKGUtLSlhLnNwbGljZShkW2VdLDEpfXJldHVybiBrPW51bGwsYX0sZT1mYS5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9IiIsZD0wLGY9YS5ub2RlVHlwZTtpZihmKXtpZigxPT09Znx8OT09PWZ8fDExPT09Zil7aWYoInN0cmluZyI9PXR5cGVvZiBhLnRleHRDb250ZW50KXJldHVybiBhLnRleHRDb250ZW50O2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyljKz1lKGEpfWVsc2UgaWYoMz09PWZ8fDQ9PT1mKXJldHVybiBhLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKGI9YVtkKytdKWMrPWUoYik7cmV0dXJuIGN9LGQ9ZmEuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86aGEsbWF0Y2g6VyxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS5yZXBsYWNlKGJhLGNhKSxhWzNdPShhWzNdfHxhWzRdfHxhWzVdfHwiIikucmVwbGFjZShiYSxjYSksIn49Ij09PWFbMl0mJihhWzNdPSIgIithWzNdKyIgIiksYS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1hWzFdLnNsaWNlKDAsMyk/KGFbM118fGZhLmVycm9yKGFbMF0pLGFbNF09KyhhWzRdP2FbNV0rKGFbNl18fDEpOjIqKCJldmVuIj09PWFbM118fCJvZGQiPT09YVszXSkpLGFbNV09KyhhWzddK2FbOF18fCJvZGQiPT09YVszXSkpOmFbM10mJmZhLmVycm9yKGFbMF0pLGF9LFBTRVVETzpmdW5jdGlvbihhKXt2YXIgYixjPSFhWzZdJiZhWzJdO3JldHVybiBXLkNISUxELnRlc3QoYVswXSk/bnVsbDooYVszXT9hWzJdPWFbNF18fGFbNV18fCIiOmMmJlUudGVzdChjKSYmKGI9ZyhjLCEwKSkmJihiPWMuaW5kZXhPZigiKSIsYy5sZW5ndGgtYiktYy5sZW5ndGgpJiYoYVswXT1hWzBdLnNsaWNlKDAsYiksYVsyXT1jLnNsaWNlKDAsYikpLGEuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoYmEsY2EpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09YT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yn19LENMQVNTOmZ1bmN0aW9uKGEpe3ZhciBiPXlbYSsiICJdO3JldHVybiBifHwoYj1uZXcgUmVnRXhwKCIoXnwiK0wrIikiK2ErIigiK0wrInwkKSIpKSYmeShhLGZ1bmN0aW9uKGEpe3JldHVybiBiLnRlc3QoInN0cmluZyI9PXR5cGVvZiBhLmNsYXNzTmFtZSYmYS5jbGFzc05hbWV8fCJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRBdHRyaWJ1dGUmJmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBlPWZhLmF0dHIoZCxhKTtyZXR1cm4gbnVsbD09ZT8iIT0iPT09YjpiPyhlKz0iIiwiPSI9PT1iP2U9PT1jOiIhPSI9PT1iP2UhPT1jOiJePSI9PT1iP2MmJjA9PT1lLmluZGV4T2YoYyk6Iio9Ij09PWI/YyYmZS5pbmRleE9mKGMpPi0xOiIkPSI9PT1iP2MmJmUuc2xpY2UoLWMubGVuZ3RoKT09PWM6In49Ij09PWI/KCIgIitlLnJlcGxhY2UoUCwiICIpKyIgIikuaW5kZXhPZihjKT4tMToifD0iPT09Yj9lPT09Y3x8ZS5zbGljZSgwLGMubGVuZ3RoKzEpPT09YysiLSI6ITEpOiEwfX0sQ0hJTEQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj0ibnRoIiE9PWEuc2xpY2UoMCwzKSxnPSJsYXN0IiE9PWEuc2xpY2UoLTQpLGg9Im9mLXR5cGUiPT09YjtyZXR1cm4gMT09PWQmJjA9PT1lP2Z1bmN0aW9uKGEpe3JldHVybiEhYS5wYXJlbnROb2RlfTpmdW5jdGlvbihiLGMsaSl7dmFyIGosayxsLG0sbixvLHA9ZiE9PWc/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixxPWIucGFyZW50Tm9kZSxyPWgmJmIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxzPSFpJiYhaCx0PSExO2lmKHEpe2lmKGYpe3doaWxlKHApe209Yjt3aGlsZShtPW1bcF0paWYoaD9tLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1yOjE9PT1tLm5vZGVUeXBlKXJldHVybiExO289cD0ib25seSI9PT1hJiYhbyYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZihvPVtnP3EuZmlyc3RDaGlsZDpxLmxhc3RDaGlsZF0sZyYmcyl7bT1xLGw9bVt1XXx8KG1bdV09e30pLGs9bFttLnVuaXF1ZUlEXXx8KGxbbS51bmlxdWVJRF09e30pLGo9a1thXXx8W10sbj1qWzBdPT09dyYmalsxXSx0PW4mJmpbMl0sbT1uJiZxLmNoaWxkTm9kZXNbbl07d2hpbGUobT0rK24mJm0mJm1bcF18fCh0PW49MCl8fG8ucG9wKCkpaWYoMT09PW0ubm9kZVR5cGUmJisrdCYmbT09PWIpe2tbYV09W3csbix0XTticmVha319ZWxzZSBpZihzJiYobT1iLGw9bVt1XXx8KG1bdV09e30pLGs9bFttLnVuaXF1ZUlEXXx8KGxbbS51bmlxdWVJRF09e30pLGo9a1thXXx8W10sbj1qWzBdPT09dyYmalsxXSx0PW4pLHQ9PT0hMSl3aGlsZShtPSsrbiYmbSYmbVtwXXx8KHQ9bj0wKXx8by5wb3AoKSlpZigoaD9tLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1yOjE9PT1tLm5vZGVUeXBlKSYmKyt0JiYocyYmKGw9bVt1XXx8KG1bdV09e30pLGs9bFttLnVuaXF1ZUlEXXx8KGxbbS51bmlxdWVJRF09e30pLGtbYV09W3csdF0pLG09PT1iKSlicmVhaztyZXR1cm4gdC09ZSx0PT09ZHx8dCVkPT09MCYmdC9kPj0wfX19LFBTRVVETzpmdW5jdGlvbihhLGIpe3ZhciBjLGU9ZC5wc2V1ZG9zW2FdfHxkLnNldEZpbHRlcnNbYS50b0xvd2VyQ2FzZSgpXXx8ZmEuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIithKTtyZXR1cm4gZVt1XT9lKGIpOmUubGVuZ3RoPjE/KGM9W2EsYSwiIixiXSxkLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT9oYShmdW5jdGlvbihhLGMpe3ZhciBkLGY9ZShhLGIpLGc9Zi5sZW5ndGg7d2hpbGUoZy0tKWQ9SihhLGZbZ10pLGFbZF09IShjW2RdPWZbZ10pfSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSwwLGMpfSk6ZX19LHBzZXVkb3M6e25vdDpoYShmdW5jdGlvbihhKXt2YXIgYj1bXSxjPVtdLGQ9aChhLnJlcGxhY2UoUSwiJDEiKSk7cmV0dXJuIGRbdV0/aGEoZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSkoZj1nW2hdKSYmKGFbaF09IShiW2hdPWYpKX0pOmZ1bmN0aW9uKGEsZSxmKXtyZXR1cm4gYlswXT1hLGQoYixudWxsLGYsYyksYlswXT1udWxsLCFjLnBvcCgpfX0pLGhhczpoYShmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGZhKGEsYikubGVuZ3RoPjB9fSksY29udGFpbnM6aGEoZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKGJhLGNhKSxmdW5jdGlvbihiKXtyZXR1cm4oYi50ZXh0Q29udGVudHx8Yi5pbm5lclRleHR8fGUoYikpLmluZGV4T2YoYSk+LTF9fSksbGFuZzpoYShmdW5jdGlvbihhKXtyZXR1cm4gVi50ZXN0KGF8fCIiKXx8ZmEuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrYSksYT1hLnJlcGxhY2UoYmEsY2EpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24oYil7dmFyIGM7ZG8gaWYoYz1wP2IubGFuZzpiLmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8Yi5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gYz1jLnRvTG93ZXJDYXNlKCksYz09PWF8fDA9PT1jLmluZGV4T2YoYSsiLSIpO3doaWxlKChiPWIucGFyZW50Tm9kZSkmJjE9PT1iLm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24oYil7dmFyIGM9YS5sb2NhdGlvbiYmYS5sb2NhdGlvbi5oYXNoO3JldHVybiBjJiZjLnNsaWNlKDEpPT09Yi5pZH0scm9vdDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PW99LGZvY3VzOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09bi5hY3RpdmVFbGVtZW50JiYoIW4uaGFzRm9jdXN8fG4uaGFzRm9jdXMoKSkmJiEhKGEudHlwZXx8YS5ocmVmfHx+YS50YWJJbmRleCl9LGVuYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWImJiEhYS5jaGVja2VkfHwib3B0aW9uIj09PWImJiEhYS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsYS5zZWxlY3RlZD09PSEwfSxlbXB0eTpmdW5jdGlvbihhKXtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpaWYoYS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIWQucHNldWRvcy5lbXB0eShhKX0saGVhZGVyOmZ1bmN0aW9uKGEpe3JldHVybiBZLnRlc3QoYS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybiBYLnRlc3QoYS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWImJiJidXR0b24iPT09YS50eXBlfHwiYnV0dG9uIj09PWJ9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuImlucHV0Ij09PWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09YS50eXBlJiYobnVsbD09KGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PWIudG9Mb3dlckNhc2UoKSl9LGZpcnN0Om5hKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDpuYShmdW5jdGlvbihhLGIpe3JldHVybltiLTFdfSksZXE6bmEoZnVuY3Rpb24oYSxiLGMpe3JldHVyblswPmM/YytiOmNdfSksZXZlbjpuYShmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wO2I+YztjKz0yKWEucHVzaChjKTtyZXR1cm4gYX0pLG9kZDpuYShmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0xO2I+YztjKz0yKWEucHVzaChjKTtyZXR1cm4gYX0pLGx0Om5hKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2MrYjpjOy0tZD49MDspYS5wdXNoKGQpO3JldHVybiBhfSksZ3Q6bmEoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD0wPmM/YytiOmM7KytkPGI7KWEucHVzaChkKTtyZXR1cm4gYX0pfX0sZC5wc2V1ZG9zLm50aD1kLnBzZXVkb3MuZXE7Zm9yKGIgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pZC5wc2V1ZG9zW2JdPWxhKGIpO2ZvcihiIGlue3N1Ym1pdDohMCxyZXNldDohMH0pZC5wc2V1ZG9zW2JdPW1hKGIpO2Z1bmN0aW9uIHBhKCl7fXBhLnByb3RvdHlwZT1kLmZpbHRlcnM9ZC5wc2V1ZG9zLGQuc2V0RmlsdGVycz1uZXcgcGEsZz1mYS50b2tlbml6ZT1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZixnLGgsaSxqLGs9elthKyIgIl07aWYoaylyZXR1cm4gYj8wOmsuc2xpY2UoMCk7aD1hLGk9W10saj1kLnByZUZpbHRlcjt3aGlsZShoKXtjJiYhKGU9Ui5leGVjKGgpKXx8KGUmJihoPWguc2xpY2UoZVswXS5sZW5ndGgpfHxoKSxpLnB1c2goZj1bXSkpLGM9ITEsKGU9Uy5leGVjKGgpKSYmKGM9ZS5zaGlmdCgpLGYucHVzaCh7dmFsdWU6Yyx0eXBlOmVbMF0ucmVwbGFjZShRLCIgIil9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtmb3IoZyBpbiBkLmZpbHRlcikhKGU9V1tnXS5leGVjKGgpKXx8altnXSYmIShlPWpbZ10oZSkpfHwoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZyxtYXRjaGVzOmV9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtpZighYylicmVha31yZXR1cm4gYj9oLmxlbmd0aDpoP2ZhLmVycm9yKGEpOnooYSxpKS5zbGljZSgwKX07ZnVuY3Rpb24gcWEoYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aCxkPSIiO2M+YjtiKyspZCs9YVtiXS52YWx1ZTtyZXR1cm4gZH1mdW5jdGlvbiByYShhLGIsYyl7dmFyIGQ9Yi5kaXIsZT1jJiYicGFyZW50Tm9kZSI9PT1kLGY9eCsrO3JldHVybiBiLmZpcnN0P2Z1bmN0aW9uKGIsYyxmKXt3aGlsZShiPWJbZF0paWYoMT09PWIubm9kZVR5cGV8fGUpcmV0dXJuIGEoYixjLGYpfTpmdW5jdGlvbihiLGMsZyl7dmFyIGgsaSxqLGs9W3csZl07aWYoZyl7d2hpbGUoYj1iW2RdKWlmKCgxPT09Yi5ub2RlVHlwZXx8ZSkmJmEoYixjLGcpKXJldHVybiEwfWVsc2Ugd2hpbGUoYj1iW2RdKWlmKDE9PT1iLm5vZGVUeXBlfHxlKXtpZihqPWJbdV18fChiW3VdPXt9KSxpPWpbYi51bmlxdWVJRF18fChqW2IudW5pcXVlSURdPXt9KSwoaD1pW2RdKSYmaFswXT09PXcmJmhbMV09PT1mKXJldHVybiBrWzJdPWhbMl07aWYoaVtkXT1rLGtbMl09YShiLGMsZykpcmV0dXJuITB9fX1mdW5jdGlvbiBzYShhKXtyZXR1cm4gYS5sZW5ndGg+MT9mdW5jdGlvbihiLGMsZCl7dmFyIGU9YS5sZW5ndGg7d2hpbGUoZS0tKWlmKCFhW2VdKGIsYyxkKSlyZXR1cm4hMTtyZXR1cm4hMH06YVswXX1mdW5jdGlvbiB0YShhLGIsYyl7Zm9yKHZhciBkPTAsZT1iLmxlbmd0aDtlPmQ7ZCsrKWZhKGEsYltkXSxjKTtyZXR1cm4gY31mdW5jdGlvbiB1YShhLGIsYyxkLGUpe2Zvcih2YXIgZixnPVtdLGg9MCxpPWEubGVuZ3RoLGo9bnVsbCE9YjtpPmg7aCsrKShmPWFbaF0pJiYoYyYmIWMoZixkLGUpfHwoZy5wdXNoKGYpLGomJmIucHVzaChoKSkpO3JldHVybiBnfWZ1bmN0aW9uIHZhKGEsYixjLGQsZSxmKXtyZXR1cm4gZCYmIWRbdV0mJihkPXZhKGQpKSxlJiYhZVt1XSYmKGU9dmEoZSxmKSksaGEoZnVuY3Rpb24oZixnLGgsaSl7dmFyIGosayxsLG09W10sbj1bXSxvPWcubGVuZ3RoLHA9Znx8dGEoYnx8IioiLGgubm9kZVR5cGU/W2hdOmgsW10pLHE9IWF8fCFmJiZiP3A6dWEocCxtLGEsaCxpKSxyPWM/ZXx8KGY/YTpvfHxkKT9bXTpnOnE7aWYoYyYmYyhxLHIsaCxpKSxkKXtqPXVhKHIsbiksZChqLFtdLGgsaSksaz1qLmxlbmd0aDt3aGlsZShrLS0pKGw9altrXSkmJihyW25ba11dPSEocVtuW2tdXT1sKSl9aWYoZil7aWYoZXx8YSl7aWYoZSl7aj1bXSxrPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmai5wdXNoKHFba109bCk7ZShudWxsLHI9W10saixpKX1rPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmKGo9ZT9KKGYsbCk6bVtrXSk+LTEmJihmW2pdPSEoZ1tqXT1sKSl9fWVsc2Ugcj11YShyPT09Zz9yLnNwbGljZShvLHIubGVuZ3RoKTpyKSxlP2UobnVsbCxnLHIsaSk6SC5hcHBseShnLHIpfSl9ZnVuY3Rpb24gd2EoYSl7Zm9yKHZhciBiLGMsZSxmPWEubGVuZ3RoLGc9ZC5yZWxhdGl2ZVthWzBdLnR5cGVdLGg9Z3x8ZC5yZWxhdGl2ZVsiICJdLGk9Zz8xOjAsaz1yYShmdW5jdGlvbihhKXtyZXR1cm4gYT09PWJ9LGgsITApLGw9cmEoZnVuY3Rpb24oYSl7cmV0dXJuIEooYixhKT4tMX0saCwhMCksbT1bZnVuY3Rpb24oYSxjLGQpe3ZhciBlPSFnJiYoZHx8YyE9PWopfHwoKGI9Yykubm9kZVR5cGU/ayhhLGMsZCk6bChhLGMsZCkpO3JldHVybiBiPW51bGwsZX1dO2Y+aTtpKyspaWYoYz1kLnJlbGF0aXZlW2FbaV0udHlwZV0pbT1bcmEoc2EobSksYyldO2Vsc2V7aWYoYz1kLmZpbHRlclthW2ldLnR5cGVdLmFwcGx5KG51bGwsYVtpXS5tYXRjaGVzKSxjW3VdKXtmb3IoZT0rK2k7Zj5lO2UrKylpZihkLnJlbGF0aXZlW2FbZV0udHlwZV0pYnJlYWs7cmV0dXJuIHZhKGk+MSYmc2EobSksaT4xJiZxYShhLnNsaWNlKDAsaS0xKS5jb25jYXQoe3ZhbHVlOiIgIj09PWFbaS0yXS50eXBlPyIqIjoiIn0pKS5yZXBsYWNlKFEsIiQxIiksYyxlPmkmJndhKGEuc2xpY2UoaSxlKSksZj5lJiZ3YShhPWEuc2xpY2UoZSkpLGY+ZSYmcWEoYSkpfW0ucHVzaChjKX1yZXR1cm4gc2EobSl9ZnVuY3Rpb24geGEoYSxiKXt2YXIgYz1iLmxlbmd0aD4wLGU9YS5sZW5ndGg+MCxmPWZ1bmN0aW9uKGYsZyxoLGksayl7dmFyIGwsbyxxLHI9MCxzPSIwIix0PWYmJltdLHU9W10sdj1qLHg9Znx8ZSYmZC5maW5kLlRBRygiKiIsaykseT13Kz1udWxsPT12PzE6TWF0aC5yYW5kb20oKXx8LjEsej14Lmxlbmd0aDtmb3IoayYmKGo9Zz09PW58fGd8fGspO3MhPT16JiZudWxsIT0obD14W3NdKTtzKyspe2lmKGUmJmwpe289MCxnfHxsLm93bmVyRG9jdW1lbnQ9PT1ufHwobShsKSxoPSFwKTt3aGlsZShxPWFbbysrXSlpZihxKGwsZ3x8bixoKSl7aS5wdXNoKGwpO2JyZWFrfWsmJih3PXkpfWMmJigobD0hcSYmbCkmJnItLSxmJiZ0LnB1c2gobCkpfWlmKHIrPXMsYyYmcyE9PXIpe289MDt3aGlsZShxPWJbbysrXSlxKHQsdSxnLGgpO2lmKGYpe2lmKHI+MCl3aGlsZShzLS0pdFtzXXx8dVtzXXx8KHVbc109Ri5jYWxsKGkpKTt1PXVhKHUpfUguYXBwbHkoaSx1KSxrJiYhZiYmdS5sZW5ndGg+MCYmcitiLmxlbmd0aD4xJiZmYS51bmlxdWVTb3J0KGkpfXJldHVybiBrJiYodz15LGo9diksdH07cmV0dXJuIGM/aGEoZik6Zn1yZXR1cm4gaD1mYS5jb21waWxlPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPVtdLGY9QVthKyIgIl07aWYoIWYpe2J8fChiPWcoYSkpLGM9Yi5sZW5ndGg7d2hpbGUoYy0tKWY9d2EoYltjXSksZlt1XT9kLnB1c2goZik6ZS5wdXNoKGYpO2Y9QShhLHhhKGUsZCkpLGYuc2VsZWN0b3I9YX1yZXR1cm4gZn0saT1mYS5zZWxlY3Q9ZnVuY3Rpb24oYSxiLGUsZil7dmFyIGksaixrLGwsbSxuPSJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhLG89IWYmJmcoYT1uLnNlbGVjdG9yfHxhKTtpZihlPWV8fFtdLDE9PT1vLmxlbmd0aCl7aWYoaj1vWzBdPW9bMF0uc2xpY2UoMCksai5sZW5ndGg+MiYmIklEIj09PShrPWpbMF0pLnR5cGUmJmMuZ2V0QnlJZCYmOT09PWIubm9kZVR5cGUmJnAmJmQucmVsYXRpdmVbalsxXS50eXBlXSl7aWYoYj0oZC5maW5kLklEKGsubWF0Y2hlc1swXS5yZXBsYWNlKGJhLGNhKSxiKXx8W10pWzBdLCFiKXJldHVybiBlO24mJihiPWIucGFyZW50Tm9kZSksYT1hLnNsaWNlKGouc2hpZnQoKS52YWx1ZS5sZW5ndGgpfWk9Vy5uZWVkc0NvbnRleHQudGVzdChhKT8wOmoubGVuZ3RoO3doaWxlKGktLSl7aWYoaz1qW2ldLGQucmVsYXRpdmVbbD1rLnR5cGVdKWJyZWFrO2lmKChtPWQuZmluZFtsXSkmJihmPW0oay5tYXRjaGVzWzBdLnJlcGxhY2UoYmEsY2EpLF8udGVzdChqWzBdLnR5cGUpJiZvYShiLnBhcmVudE5vZGUpfHxiKSkpe2lmKGouc3BsaWNlKGksMSksYT1mLmxlbmd0aCYmcWEoaiksIWEpcmV0dXJuIEguYXBwbHkoZSxmKSxlO2JyZWFrfX19cmV0dXJuKG58fGgoYSxvKSkoZixiLCFwLGUsIWJ8fF8udGVzdChhKSYmb2EoYi5wYXJlbnROb2RlKXx8YiksZX0sYy5zb3J0U3RhYmxlPXUuc3BsaXQoIiIpLnNvcnQoQikuam9pbigiIik9PT11LGMuZGV0ZWN0RHVwbGljYXRlcz0hIWwsbSgpLGMuc29ydERldGFjaGVkPWlhKGZ1bmN0aW9uKGEpe3JldHVybiAxJmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24obi5jcmVhdGVFbGVtZW50KCJkaXYiKSl9KSxpYShmdW5jdGlvbihhKXtyZXR1cm4gYS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxqYSgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP3ZvaWQgMDphLmdldEF0dHJpYnV0ZShiLCJ0eXBlIj09PWIudG9Mb3dlckNhc2UoKT8xOjIpfSksYy5hdHRyaWJ1dGVzJiZpYShmdW5jdGlvbihhKXtyZXR1cm4gYS5pbm5lckhUTUw9IjxpbnB1dC8+IixhLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxqYSgidmFsdWUiLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY3x8ImlucHV0IiE9PWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT92b2lkIDA6YS5kZWZhdWx0VmFsdWV9KSxpYShmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8amEoSyxmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGM/dm9pZCAwOmFbYl09PT0hMD9iLnRvTG93ZXJDYXNlKCk6KGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmZC5zcGVjaWZpZWQ/ZC52YWx1ZTpudWxsfSksZmF9KGEpO24uZmluZD10LG4uZXhwcj10LnNlbGVjdG9ycyxuLmV4cHJbIjoiXT1uLmV4cHIucHNldWRvcyxuLnVuaXF1ZVNvcnQ9bi51bmlxdWU9dC51bmlxdWVTb3J0LG4udGV4dD10LmdldFRleHQsbi5pc1hNTERvYz10LmlzWE1MLG4uY29udGFpbnM9dC5jb250YWluczt2YXIgdT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9W10sZT12b2lkIDAhPT1jO3doaWxlKChhPWFbYl0pJiY5IT09YS5ub2RlVHlwZSlpZigxPT09YS5ub2RlVHlwZSl7aWYoZSYmbihhKS5pcyhjKSlicmVhaztkLnB1c2goYSl9cmV0dXJuIGR9LHY9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9W107YTthPWEubmV4dFNpYmxpbmcpMT09PWEubm9kZVR5cGUmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9LHc9bi5leHByLm1hdGNoLm5lZWRzQ29udGV4dCx4PS9ePChbXHctXSspXHMqXC8/Pig/OjxcL1wxPnwpJC8seT0vXi5bXjojXFtcLixdKiQvO2Z1bmN0aW9uIHooYSxiLGMpe2lmKG4uaXNGdW5jdGlvbihiKSlyZXR1cm4gbi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4hIWIuY2FsbChhLGQsYSkhPT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gbi5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1iIT09Y30pO2lmKCJzdHJpbmciPT10eXBlb2YgYil7aWYoeS50ZXN0KGIpKXJldHVybiBuLmZpbHRlcihiLGEsYyk7Yj1uLmZpbHRlcihiLGEpfXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gbi5pbkFycmF5KGEsYik+LTEhPT1jfSl9bi5maWx0ZXI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWJbMF07cmV0dXJuIGMmJihhPSI6bm90KCIrYSsiKSIpLDE9PT1iLmxlbmd0aCYmMT09PWQubm9kZVR5cGU/bi5maW5kLm1hdGNoZXNTZWxlY3RvcihkLGEpP1tkXTpbXTpuLmZpbmQubWF0Y2hlcyhhLG4uZ3JlcChiLGZ1bmN0aW9uKGEpe3JldHVybiAxPT09YS5ub2RlVHlwZX0pKX0sbi5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXSxkPXRoaXMsZT1kLmxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIHRoaXMucHVzaFN0YWNrKG4oYSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGI9MDtlPmI7YisrKWlmKG4uY29udGFpbnMoZFtiXSx0aGlzKSlyZXR1cm4hMH0pKTtmb3IoYj0wO2U+YjtiKyspbi5maW5kKGEsZFtiXSxjKTtyZXR1cm4gYz10aGlzLnB1c2hTdGFjayhlPjE/bi51bmlxdWUoYyk6YyksYy5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2E6YSxjfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHoodGhpcyxhfHxbXSwhMSkpfSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHoodGhpcyxhfHxbXSwhMCkpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIXoodGhpcywic3RyaW5nIj09dHlwZW9mIGEmJncudGVzdChhKT9uKGEpOmF8fFtdLCExKS5sZW5ndGh9fSk7dmFyIEEsQj0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLEM9bi5mbi5pbml0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZSxmO2lmKCFhKXJldHVybiB0aGlzO2lmKGM9Y3x8QSwic3RyaW5nIj09dHlwZW9mIGEpe2lmKGU9IjwiPT09YS5jaGFyQXQoMCkmJiI+Ij09PWEuY2hhckF0KGEubGVuZ3RoLTEpJiZhLmxlbmd0aD49Mz9bbnVsbCxhLG51bGxdOkIuZXhlYyhhKSwhZXx8IWVbMV0mJmIpcmV0dXJuIWJ8fGIuanF1ZXJ5PyhifHxjKS5maW5kKGEpOnRoaXMuY29uc3RydWN0b3IoYikuZmluZChhKTtpZihlWzFdKXtpZihiPWIgaW5zdGFuY2VvZiBuP2JbMF06YixuLm1lcmdlKHRoaXMsbi5wYXJzZUhUTUwoZVsxXSxiJiZiLm5vZGVUeXBlP2Iub3duZXJEb2N1bWVudHx8YjpkLCEwKSkseC50ZXN0KGVbMV0pJiZuLmlzUGxhaW5PYmplY3QoYikpZm9yKGUgaW4gYiluLmlzRnVuY3Rpb24odGhpc1tlXSk/dGhpc1tlXShiW2VdKTp0aGlzLmF0dHIoZSxiW2VdKTtyZXR1cm4gdGhpc31pZihmPWQuZ2V0RWxlbWVudEJ5SWQoZVsyXSksZiYmZi5wYXJlbnROb2RlKXtpZihmLmlkIT09ZVsyXSlyZXR1cm4gQS5maW5kKGEpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1mfXJldHVybiB0aGlzLmNvbnRleHQ9ZCx0aGlzLnNlbGVjdG9yPWEsdGhpc31yZXR1cm4gYS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xLHRoaXMpOm4uaXNGdW5jdGlvbihhKT8idW5kZWZpbmVkIiE9dHlwZW9mIGMucmVhZHk/Yy5yZWFkeShhKTphKG4pOih2b2lkIDAhPT1hLnNlbGVjdG9yJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQpLG4ubWFrZUFycmF5KGEsdGhpcykpfTtDLnByb3RvdHlwZT1uLmZuLEE9bihkKTt2YXIgRD0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxFPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O24uZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oYSl7dmFyIGIsYz1uKGEsdGhpcyksZD1jLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2Q+YjtiKyspaWYobi5jb250YWlucyh0aGlzLGNbYl0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD0wLGU9dGhpcy5sZW5ndGgsZj1bXSxnPXcudGVzdChhKXx8InN0cmluZyIhPXR5cGVvZiBhP24oYSxifHx0aGlzLmNvbnRleHQpOjA7ZT5kO2QrKylmb3IoYz10aGlzW2RdO2MmJmMhPT1iO2M9Yy5wYXJlbnROb2RlKWlmKGMubm9kZVR5cGU8MTEmJihnP2cuaW5kZXgoYyk+LTE6MT09PWMubm9kZVR5cGUmJm4uZmluZC5tYXRjaGVzU2VsZWN0b3IoYyxhKSkpe2YucHVzaChjKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2soZi5sZW5ndGg+MT9uLnVuaXF1ZVNvcnQoZik6Zil9LGluZGV4OmZ1bmN0aW9uKGEpe3JldHVybiBhPyJzdHJpbmciPT10eXBlb2YgYT9uLmluQXJyYXkodGhpc1swXSxuKGEpKTpuLmluQXJyYXkoYS5qcXVlcnk/YVswXTphLHRoaXMpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4udW5pcXVlU29ydChuLm1lcmdlKHRoaXMuZ2V0KCksbihhLGIpKSkpfSxhZGRCYWNrOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFkZChudWxsPT1hP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGEpKX19KTtmdW5jdGlvbiBGKGEsYil7ZG8gYT1hW2JdO3doaWxlKGEmJjEhPT1hLm5vZGVUeXBlKTtyZXR1cm4gYX1uLmVhY2goe3BhcmVudDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJjExIT09Yi5ub2RlVHlwZT9iOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHUoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB1KGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBGKGEsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIEYoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIHUoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gdShhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdShhLCJuZXh0U2libGluZyIsYyl9LHByZXZVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHUoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIHYoKGEucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiB2KGEuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBuLm5vZGVOYW1lKGEsImlmcmFtZSIpP2EuY29udGVudERvY3VtZW50fHxhLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6bi5tZXJnZShbXSxhLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oYSxiKXtuLmZuW2FdPWZ1bmN0aW9uKGMsZCl7dmFyIGU9bi5tYXAodGhpcyxiLGMpO3JldHVybiJVbnRpbCIhPT1hLnNsaWNlKC01KSYmKGQ9YyksZCYmInN0cmluZyI9PXR5cGVvZiBkJiYoZT1uLmZpbHRlcihkLGUpKSx0aGlzLmxlbmd0aD4xJiYoRVthXXx8KGU9bi51bmlxdWVTb3J0KGUpKSxELnRlc3QoYSkmJihlPWUucmV2ZXJzZSgpKSksdGhpcy5wdXNoU3RhY2soZSl9fSk7dmFyIEc9L1xTKy9nO2Z1bmN0aW9uIEgoYSl7dmFyIGI9e307cmV0dXJuIG4uZWFjaChhLm1hdGNoKEcpfHxbXSxmdW5jdGlvbihhLGMpe2JbY109ITB9KSxifW4uQ2FsbGJhY2tzPWZ1bmN0aW9uKGEpe2E9InN0cmluZyI9PXR5cGVvZiBhP0goYSk6bi5leHRlbmQoe30sYSk7dmFyIGIsYyxkLGUsZj1bXSxnPVtdLGg9LTEsaT1mdW5jdGlvbigpe2ZvcihlPWEub25jZSxkPWI9ITA7Zy5sZW5ndGg7aD0tMSl7Yz1nLnNoaWZ0KCk7d2hpbGUoKytoPGYubGVuZ3RoKWZbaF0uYXBwbHkoY1swXSxjWzFdKT09PSExJiZhLnN0b3BPbkZhbHNlJiYoaD1mLmxlbmd0aCxjPSExKX1hLm1lbW9yeXx8KGM9ITEpLGI9ITEsZSYmKGY9Yz9bXToiIil9LGo9e2FkZDpmdW5jdGlvbigpe3JldHVybiBmJiYoYyYmIWImJihoPWYubGVuZ3RoLTEsZy5wdXNoKGMpKSxmdW5jdGlvbiBkKGIpe24uZWFjaChiLGZ1bmN0aW9uKGIsYyl7bi5pc0Z1bmN0aW9uKGMpP2EudW5pcXVlJiZqLmhhcyhjKXx8Zi5wdXNoKGMpOmMmJmMubGVuZ3RoJiYic3RyaW5nIiE9PW4udHlwZShjKSYmZChjKX0pfShhcmd1bWVudHMpLGMmJiFiJiZpKCkpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiBuLmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGEsYil7dmFyIGM7d2hpbGUoKGM9bi5pbkFycmF5KGIsZixjKSk+LTEpZi5zcGxpY2UoYywxKSxoPj1jJiZoLS19KSx0aGlzfSxoYXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/bi5pbkFycmF5KGEsZik+LTE6Zi5sZW5ndGg+MH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gZiYmKGY9W10pLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZT1nPVtdLGY9Yz0iIix0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFmfSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGU9ITAsY3x8ai5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuISFlfSxmaXJlV2l0aDpmdW5jdGlvbihhLGMpe3JldHVybiBlfHwoYz1jfHxbXSxjPVthLGMuc2xpY2U/Yy5zbGljZSgpOmNdLGcucHVzaChjKSxifHxpKCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gai5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWR9fTtyZXR1cm4gan0sbi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPVtbInJlc29sdmUiLCJkb25lIixuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxbInJlamVjdCIsImZhaWwiLG4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLG4uQ2FsbGJhY2tzKCJtZW1vcnkiKV1dLGM9InBlbmRpbmciLGQ9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGFsd2F5czpmdW5jdGlvbigpe3JldHVybiBlLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50cztyZXR1cm4gbi5EZWZlcnJlZChmdW5jdGlvbihjKXtuLmVhY2goYixmdW5jdGlvbihiLGYpe3ZhciBnPW4uaXNGdW5jdGlvbihhW2JdKSYmYVtiXTtlW2ZbMV1dKGZ1bmN0aW9uKCl7dmFyIGE9ZyYmZy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7YSYmbi5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/YS5wcm9taXNlKCkucHJvZ3Jlc3MoYy5ub3RpZnkpLmRvbmUoYy5yZXNvbHZlKS5mYWlsKGMucmVqZWN0KTpjW2ZbMF0rIldpdGgiXSh0aGlzPT09ZD9jLnByb21pc2UoKTp0aGlzLGc/W2FdOmFyZ3VtZW50cyl9KX0pLGE9bnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YT9uLmV4dGVuZChhLGQpOmR9fSxlPXt9O3JldHVybiBkLnBpcGU9ZC50aGVuLG4uZWFjaChiLGZ1bmN0aW9uKGEsZil7dmFyIGc9ZlsyXSxoPWZbM107ZFtmWzFdXT1nLmFkZCxoJiZnLmFkZChmdW5jdGlvbigpe2M9aH0sYlsxXmFdWzJdLmRpc2FibGUsYlsyXVsyXS5sb2NrKSxlW2ZbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIGVbZlswXSsiV2l0aCJdKHRoaXM9PT1lP2Q6dGhpcyxhcmd1bWVudHMpLHRoaXN9LGVbZlswXSsiV2l0aCJdPWcuZmlyZVdpdGh9KSxkLnByb21pc2UoZSksYSYmYS5jYWxsKGUsZSksZX0sd2hlbjpmdW5jdGlvbihhKXt2YXIgYj0wLGM9ZS5jYWxsKGFyZ3VtZW50cyksZD1jLmxlbmd0aCxmPTEhPT1kfHxhJiZuLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9kOjAsZz0xPT09Zj9hOm4uRGVmZXJyZWQoKSxoPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCl7YlthXT10aGlzLGNbYV09YXJndW1lbnRzLmxlbmd0aD4xP2UuY2FsbChhcmd1bWVudHMpOmQsYz09PWk/Zy5ub3RpZnlXaXRoKGIsYyk6LS1mfHxnLnJlc29sdmVXaXRoKGIsYyl9fSxpLGosaztpZihkPjEpZm9yKGk9bmV3IEFycmF5KGQpLGo9bmV3IEFycmF5KGQpLGs9bmV3IEFycmF5KGQpO2Q+YjtiKyspY1tiXSYmbi5pc0Z1bmN0aW9uKGNbYl0ucHJvbWlzZSk/Y1tiXS5wcm9taXNlKCkucHJvZ3Jlc3MoaChiLGosaSkpLmRvbmUoaChiLGssYykpLmZhaWwoZy5yZWplY3QpOi0tZjtyZXR1cm4gZnx8Zy5yZXNvbHZlV2l0aChrLGMpLGcucHJvbWlzZSgpfX0pO3ZhciBJO24uZm4ucmVhZHk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4ucmVhZHkucHJvbWlzZSgpLmRvbmUoYSksdGhpc30sbi5leHRlbmQoe2lzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGEpe2E/bi5yZWFkeVdhaXQrKzpuLnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7KGE9PT0hMD8tLW4ucmVhZHlXYWl0Om4uaXNSZWFkeSl8fChuLmlzUmVhZHk9ITAsYSE9PSEwJiYtLW4ucmVhZHlXYWl0PjB8fChJLnJlc29sdmVXaXRoKGQsW25dKSxuLmZuLnRyaWdnZXJIYW5kbGVyJiYobihkKS50cmlnZ2VySGFuZGxlcigicmVhZHkiKSxuKGQpLm9mZigicmVhZHkiKSkpKX19KTtmdW5jdGlvbiBKKCl7ZC5hZGRFdmVudExpc3RlbmVyPyhkLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEspLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsSykpOihkLmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEspLGEuZGV0YWNoRXZlbnQoIm9ubG9hZCIsSykpfWZ1bmN0aW9uIEsoKXsoZC5hZGRFdmVudExpc3RlbmVyfHwibG9hZCI9PT1hLmV2ZW50LnR5cGV8fCJjb21wbGV0ZSI9PT1kLnJlYWR5U3RhdGUpJiYoSigpLG4ucmVhZHkoKSl9bi5yZWFkeS5wcm9taXNlPWZ1bmN0aW9uKGIpe2lmKCFJKWlmKEk9bi5EZWZlcnJlZCgpLCJjb21wbGV0ZSI9PT1kLnJlYWR5U3RhdGV8fCJsb2FkaW5nIiE9PWQucmVhZHlTdGF0ZSYmIWQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKWEuc2V0VGltZW91dChuLnJlYWR5KTtlbHNlIGlmKGQuYWRkRXZlbnRMaXN0ZW5lcilkLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEspLGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsSyk7ZWxzZXtkLmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEspLGEuYXR0YWNoRXZlbnQoIm9ubG9hZCIsSyk7dmFyIGM9ITE7dHJ5e2M9bnVsbD09YS5mcmFtZUVsZW1lbnQmJmQuZG9jdW1lbnRFbGVtZW50fWNhdGNoKGUpe31jJiZjLmRvU2Nyb2xsJiYhZnVuY3Rpb24gZigpe2lmKCFuLmlzUmVhZHkpe3RyeXtjLmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goYil7cmV0dXJuIGEuc2V0VGltZW91dChmLDUwKX1KKCksbi5yZWFkeSgpfX0oKX1yZXR1cm4gSS5wcm9taXNlKGIpfSxuLnJlYWR5LnByb21pc2UoKTt2YXIgTDtmb3IoTCBpbiBuKGwpKWJyZWFrO2wub3duRmlyc3Q9IjAiPT09TCxsLmlubGluZUJsb2NrTmVlZHNMYXlvdXQ9ITEsbihmdW5jdGlvbigpe3ZhciBhLGIsYyxlO2M9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLGMmJmMuc3R5bGUmJihiPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksZT1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGUuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLGMuYXBwZW5kQ2hpbGQoZSkuYXBwZW5kQ2hpbGQoYiksInVuZGVmaW5lZCIhPXR5cGVvZiBiLnN0eWxlLnpvb20mJihiLnN0eWxlLmNzc1RleHQ9ImRpc3BsYXk6aW5saW5lO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MXB4O3dpZHRoOjFweDt6b29tOjEiLGwuaW5saW5lQmxvY2tOZWVkc0xheW91dD1hPTM9PT1iLm9mZnNldFdpZHRoLGEmJihjLnN0eWxlLnpvb209MSkpLGMucmVtb3ZlQ2hpbGQoZSkpfSksZnVuY3Rpb24oKXt2YXIgYT1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuZGVsZXRlRXhwYW5kbz0hMDt0cnl7ZGVsZXRlIGEudGVzdH1jYXRjaChiKXtsLmRlbGV0ZUV4cGFuZG89ITF9YT1udWxsfSgpO3ZhciBNPWZ1bmN0aW9uKGEpe3ZhciBiPW4ubm9EYXRhWyhhLm5vZGVOYW1lKyIgIikudG9Mb3dlckNhc2UoKV0sYz0rYS5ub2RlVHlwZXx8MTtyZXR1cm4gMSE9PWMmJjkhPT1jPyExOiFifHxiIT09ITAmJmEuZ2V0QXR0cmlidXRlKCJjbGFzc2lkIik9PT1ifSxOPS9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0pJC8sTz0vKFtBLVpdKS9nO2Z1bmN0aW9uIFAoYSxiLGMpe2lmKHZvaWQgMD09PWMmJjE9PT1hLm5vZGVUeXBlKXt2YXIgZD0iZGF0YS0iK2IucmVwbGFjZShPLCItJDEiKS50b0xvd2VyQ2FzZSgpO2lmKGM9YS5nZXRBdHRyaWJ1dGUoZCksInN0cmluZyI9PXR5cGVvZiBjKXt0cnl7Yz0idHJ1ZSI9PT1jPyEwOiJmYWxzZSI9PT1jPyExOiJudWxsIj09PWM/bnVsbDorYysiIj09PWM/K2M6Ti50ZXN0KGMpP24ucGFyc2VKU09OKGMpOmN9Y2F0Y2goZSl7fW4uZGF0YShhLGIsYyl9ZWxzZSBjPXZvaWQgMDsNCn1yZXR1cm4gY31mdW5jdGlvbiBRKGEpe3ZhciBiO2ZvcihiIGluIGEpaWYoKCJkYXRhIiE9PWJ8fCFuLmlzRW1wdHlPYmplY3QoYVtiXSkpJiYidG9KU09OIiE9PWIpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gUihhLGIsZCxlKXtpZihNKGEpKXt2YXIgZixnLGg9bi5leHBhbmRvLGk9YS5ub2RlVHlwZSxqPWk/bi5jYWNoZTphLGs9aT9hW2hdOmFbaF0mJmg7aWYoayYmaltrXSYmKGV8fGpba10uZGF0YSl8fHZvaWQgMCE9PWR8fCJzdHJpbmciIT10eXBlb2YgYilyZXR1cm4ga3x8KGs9aT9hW2hdPWMucG9wKCl8fG4uZ3VpZCsrOmgpLGpba118fChqW2tdPWk/e306e3RvSlNPTjpuLm5vb3B9KSwib2JqZWN0IiE9dHlwZW9mIGImJiJmdW5jdGlvbiIhPXR5cGVvZiBifHwoZT9qW2tdPW4uZXh0ZW5kKGpba10sYik6altrXS5kYXRhPW4uZXh0ZW5kKGpba10uZGF0YSxiKSksZz1qW2tdLGV8fChnLmRhdGF8fChnLmRhdGE9e30pLGc9Zy5kYXRhKSx2b2lkIDAhPT1kJiYoZ1tuLmNhbWVsQ2FzZShiKV09ZCksInN0cmluZyI9PXR5cGVvZiBiPyhmPWdbYl0sbnVsbD09ZiYmKGY9Z1tuLmNhbWVsQ2FzZShiKV0pKTpmPWcsZn19ZnVuY3Rpb24gUyhhLGIsYyl7aWYoTShhKSl7dmFyIGQsZSxmPWEubm9kZVR5cGUsZz1mP24uY2FjaGU6YSxoPWY/YVtuLmV4cGFuZG9dOm4uZXhwYW5kbztpZihnW2hdKXtpZihiJiYoZD1jP2dbaF06Z1toXS5kYXRhKSl7bi5pc0FycmF5KGIpP2I9Yi5jb25jYXQobi5tYXAoYixuLmNhbWVsQ2FzZSkpOmIgaW4gZD9iPVtiXTooYj1uLmNhbWVsQ2FzZShiKSxiPWIgaW4gZD9bYl06Yi5zcGxpdCgiICIpKSxlPWIubGVuZ3RoO3doaWxlKGUtLSlkZWxldGUgZFtiW2VdXTtpZihjPyFRKGQpOiFuLmlzRW1wdHlPYmplY3QoZCkpcmV0dXJufShjfHwoZGVsZXRlIGdbaF0uZGF0YSxRKGdbaF0pKSkmJihmP24uY2xlYW5EYXRhKFthXSwhMCk6bC5kZWxldGVFeHBhbmRvfHxnIT1nLndpbmRvdz9kZWxldGUgZ1toXTpnW2hdPXZvaWQgMCl9fX1uLmV4dGVuZCh7Y2FjaGU6e30sbm9EYXRhOnsiYXBwbGV0ICI6ITAsImVtYmVkICI6ITAsIm9iamVjdCAiOiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAifSxoYXNEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiBhPWEubm9kZVR5cGU/bi5jYWNoZVthW24uZXhwYW5kb11dOmFbbi5leHBhbmRvXSwhIWEmJiFRKGEpfSxkYXRhOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gUihhLGIsYyl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUyhhLGIpfSxfZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIFIoYSxiLGMsITApfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihhLGIpe3JldHVybiBTKGEsYiwhMCl9fSksbi5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZj10aGlzWzBdLGc9ZiYmZi5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PWEpe2lmKHRoaXMubGVuZ3RoJiYoZT1uLmRhdGEoZiksMT09PWYubm9kZVR5cGUmJiFuLl9kYXRhKGYsInBhcnNlZEF0dHJzIikpKXtjPWcubGVuZ3RoO3doaWxlKGMtLSlnW2NdJiYoZD1nW2NdLm5hbWUsMD09PWQuaW5kZXhPZigiZGF0YS0iKSYmKGQ9bi5jYW1lbENhc2UoZC5zbGljZSg1KSksUChmLGQsZVtkXSkpKTtuLl9kYXRhKGYsInBhcnNlZEF0dHJzIiwhMCl9cmV0dXJuIGV9cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBhP3RoaXMuZWFjaChmdW5jdGlvbigpe24uZGF0YSh0aGlzLGEpfSk6YXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaChmdW5jdGlvbigpe24uZGF0YSh0aGlzLGEsYil9KTpmP1AoZixhLG4uZGF0YShmLGEpKTp2b2lkIDB9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe24ucmVtb3ZlRGF0YSh0aGlzLGEpfSl9fSksbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYT8oYj0oYnx8ImZ4IikrInF1ZXVlIixkPW4uX2RhdGEoYSxiKSxjJiYoIWR8fG4uaXNBcnJheShjKT9kPW4uX2RhdGEoYSxiLG4ubWFrZUFycmF5KGMpKTpkLnB1c2goYykpLGR8fFtdKTp2b2lkIDB9LGRlcXVldWU6ZnVuY3Rpb24oYSxiKXtiPWJ8fCJmeCI7dmFyIGM9bi5xdWV1ZShhLGIpLGQ9Yy5sZW5ndGgsZT1jLnNoaWZ0KCksZj1uLl9xdWV1ZUhvb2tzKGEsYiksZz1mdW5jdGlvbigpe24uZGVxdWV1ZShhLGIpfTsiaW5wcm9ncmVzcyI9PT1lJiYoZT1jLnNoaWZ0KCksZC0tKSxlJiYoImZ4Ij09PWImJmMudW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBmLnN0b3AsZS5jYWxsKGEsZyxmKSksIWQmJmYmJmYuZW1wdHkuZmlyZSgpfSxfcXVldWVIb29rczpmdW5jdGlvbihhLGIpe3ZhciBjPWIrInF1ZXVlSG9va3MiO3JldHVybiBuLl9kYXRhKGEsYyl8fG4uX2RhdGEoYSxjLHtlbXB0eTpuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtuLl9yZW1vdmVEYXRhKGEsYisicXVldWUiKSxuLl9yZW1vdmVEYXRhKGEsYyl9KX0pfX0pLG4uZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIpe3ZhciBjPTI7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYj1hLGE9ImZ4IixjLS0pLGFyZ3VtZW50cy5sZW5ndGg8Yz9uLnF1ZXVlKHRoaXNbMF0sYSk6dm9pZCAwPT09Yj90aGlzOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPW4ucXVldWUodGhpcyxhLGIpO24uX3F1ZXVlSG9va3ModGhpcyxhKSwiZngiPT09YSYmImlucHJvZ3Jlc3MiIT09Y1swXSYmbi5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5kZXF1ZXVlKHRoaXMsYSl9KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9MSxlPW4uRGVmZXJyZWQoKSxmPXRoaXMsZz10aGlzLmxlbmd0aCxoPWZ1bmN0aW9uKCl7LS1kfHxlLnJlc29sdmVXaXRoKGYsW2ZdKX07InN0cmluZyIhPXR5cGVvZiBhJiYoYj1hLGE9dm9pZCAwKSxhPWF8fCJmeCI7d2hpbGUoZy0tKWM9bi5fZGF0YShmW2ddLGErInF1ZXVlSG9va3MiKSxjJiZjLmVtcHR5JiYoZCsrLGMuZW1wdHkuYWRkKGgpKTtyZXR1cm4gaCgpLGUucHJvbWlzZShiKX19KSxmdW5jdGlvbigpe3ZhciBhO2wuc2hyaW5rV3JhcEJsb2Nrcz1mdW5jdGlvbigpe2lmKG51bGwhPWEpcmV0dXJuIGE7YT0hMTt2YXIgYixjLGU7cmV0dXJuIGM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLGMmJmMuc3R5bGU/KGI9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxlPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsYy5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZChiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGIuc3R5bGUuem9vbSYmKGIuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzoxcHg7d2lkdGg6MXB4O3pvb206MSIsYi5hcHBlbmRDaGlsZChkLmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5zdHlsZS53aWR0aD0iNXB4IixhPTMhPT1iLm9mZnNldFdpZHRoKSxjLnJlbW92ZUNoaWxkKGUpLGEpOnZvaWQgMH19KCk7dmFyIFQ9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsVT1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrVCsiKShbYS16JV0qKSQiLCJpIiksVj1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLFc9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1ifHxhLCJub25lIj09PW4uY3NzKGEsImRpc3BsYXkiKXx8IW4uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfTtmdW5jdGlvbiBYKGEsYixjLGQpe3ZhciBlLGY9MSxnPTIwLGg9ZD9mdW5jdGlvbigpe3JldHVybiBkLmN1cigpfTpmdW5jdGlvbigpe3JldHVybiBuLmNzcyhhLGIsIiIpfSxpPWgoKSxqPWMmJmNbM118fChuLmNzc051bWJlcltiXT8iIjoicHgiKSxrPShuLmNzc051bWJlcltiXXx8InB4IiE9PWomJitpKSYmVS5leGVjKG4uY3NzKGEsYikpO2lmKGsmJmtbM10hPT1qKXtqPWp8fGtbM10sYz1jfHxbXSxrPStpfHwxO2RvIGY9Znx8Ii41IixrLz1mLG4uc3R5bGUoYSxiLGsraik7d2hpbGUoZiE9PShmPWgoKS9pKSYmMSE9PWYmJi0tZyl9cmV0dXJuIGMmJihrPStrfHwraXx8MCxlPWNbMV0/aysoY1sxXSsxKSpjWzJdOitjWzJdLGQmJihkLnVuaXQ9aixkLnN0YXJ0PWssZC5lbmQ9ZSkpLGV9dmFyIFk9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9MCxpPWEubGVuZ3RoLGo9bnVsbD09YztpZigib2JqZWN0Ij09PW4udHlwZShjKSl7ZT0hMDtmb3IoaCBpbiBjKVkoYSxiLGgsY1toXSwhMCxmLGcpfWVsc2UgaWYodm9pZCAwIT09ZCYmKGU9ITAsbi5pc0Z1bmN0aW9uKGQpfHwoZz0hMCksaiYmKGc/KGIuY2FsbChhLGQpLGI9bnVsbCk6KGo9YixiPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gai5jYWxsKG4oYSksYyl9KSksYikpZm9yKDtpPmg7aCsrKWIoYVtoXSxjLGc/ZDpkLmNhbGwoYVtoXSxoLGIoYVtoXSxjKSkpO3JldHVybiBlP2E6aj9iLmNhbGwoYSk6aT9iKGFbMF0sYyk6Zn0sWj0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSwkPS88KFtcdzotXSspLyxfPS9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxhYT0vXlxzKy8sYmE9ImFiYnJ8YXJ0aWNsZXxhc2lkZXxhdWRpb3xiZGl8Y2FudmFzfGRhdGF8ZGF0YWxpc3R8ZGV0YWlsc3xkaWFsb2d8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxoZ3JvdXB8bWFpbnxtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cGljdHVyZXxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGVtcGxhdGV8dGltZXx2aWRlbyI7ZnVuY3Rpb24gY2EoYSl7dmFyIGI9YmEuc3BsaXQoInwiKSxjPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKGMuY3JlYXRlRWxlbWVudCl3aGlsZShiLmxlbmd0aCljLmNyZWF0ZUVsZW1lbnQoYi5wb3AoKSk7cmV0dXJuIGN9IWZ1bmN0aW9uKCl7dmFyIGE9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxiPWQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGM9ZC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2EuaW5uZXJIVE1MPSIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLGwubGVhZGluZ1doaXRlc3BhY2U9Mz09PWEuZmlyc3RDaGlsZC5ub2RlVHlwZSxsLnRib2R5PSFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxsLmh0bWxTZXJpYWxpemU9ISFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIikubGVuZ3RoLGwuaHRtbDVDbG9uZT0iPDpuYXY+PC86bmF2PiIhPT1kLmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSghMCkub3V0ZXJIVE1MLGMudHlwZT0iY2hlY2tib3giLGMuY2hlY2tlZD0hMCxiLmFwcGVuZENoaWxkKGMpLGwuYXBwZW5kQ2hlY2tlZD1jLmNoZWNrZWQsYS5pbm5lckhUTUw9Ijx0ZXh0YXJlYT54PC90ZXh0YXJlYT4iLGwubm9DbG9uZUNoZWNrZWQ9ISFhLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZSxiLmFwcGVuZENoaWxkKGEpLGM9ZC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGMuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSxjLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSxjLnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxhLmFwcGVuZENoaWxkKGMpLGwuY2hlY2tDbG9uZT1hLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxsLm5vQ2xvbmVFdmVudD0hIWEuYWRkRXZlbnRMaXN0ZW5lcixhW24uZXhwYW5kb109MSxsLmF0dHJpYnV0ZXM9IWEuZ2V0QXR0cmlidXRlKG4uZXhwYW5kbyl9KCk7dmFyIGRhPXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0scGFyYW06WzEsIjxvYmplY3Q+IiwiPC9vYmplY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDpsLmh0bWxTZXJpYWxpemU/WzAsIiIsIiJdOlsxLCJYPGRpdj4iLCI8L2Rpdj4iXX07ZGEub3B0Z3JvdXA9ZGEub3B0aW9uLGRhLnRib2R5PWRhLnRmb290PWRhLmNvbGdyb3VwPWRhLmNhcHRpb249ZGEudGhlYWQsZGEudGg9ZGEudGQ7ZnVuY3Rpb24gZWEoYSxiKXt2YXIgYyxkLGU9MCxmPSJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fCIqIik6InVuZGVmaW5lZCIhPXR5cGVvZiBhLnF1ZXJ5U2VsZWN0b3JBbGw/YS5xdWVyeVNlbGVjdG9yQWxsKGJ8fCIqIik6dm9pZCAwO2lmKCFmKWZvcihmPVtdLGM9YS5jaGlsZE5vZGVzfHxhO251bGwhPShkPWNbZV0pO2UrKykhYnx8bi5ub2RlTmFtZShkLGIpP2YucHVzaChkKTpuLm1lcmdlKGYsZWEoZCxiKSk7cmV0dXJuIHZvaWQgMD09PWJ8fGImJm4ubm9kZU5hbWUoYSxiKT9uLm1lcmdlKFthXSxmKTpmfWZ1bmN0aW9uIGZhKGEsYil7Zm9yKHZhciBjLGQ9MDtudWxsIT0oYz1hW2RdKTtkKyspbi5fZGF0YShjLCJnbG9iYWxFdmFsIiwhYnx8bi5fZGF0YShiW2RdLCJnbG9iYWxFdmFsIikpfXZhciBnYT0vPHwmIz9cdys7LyxoYT0vPHRib2R5L2k7ZnVuY3Rpb24gaWEoYSl7Wi50ZXN0KGEudHlwZSkmJihhLmRlZmF1bHRDaGVja2VkPWEuY2hlY2tlZCl9ZnVuY3Rpb24gamEoYSxiLGMsZCxlKXtmb3IodmFyIGYsZyxoLGksaixrLG0sbz1hLmxlbmd0aCxwPWNhKGIpLHE9W10scj0wO28+cjtyKyspaWYoZz1hW3JdLGd8fDA9PT1nKWlmKCJvYmplY3QiPT09bi50eXBlKGcpKW4ubWVyZ2UocSxnLm5vZGVUeXBlP1tnXTpnKTtlbHNlIGlmKGdhLnRlc3QoZykpe2k9aXx8cC5hcHBlbmRDaGlsZChiLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxqPSgkLmV4ZWMoZyl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksbT1kYVtqXXx8ZGEuX2RlZmF1bHQsaS5pbm5lckhUTUw9bVsxXStuLmh0bWxQcmVmaWx0ZXIoZykrbVsyXSxmPW1bMF07d2hpbGUoZi0tKWk9aS5sYXN0Q2hpbGQ7aWYoIWwubGVhZGluZ1doaXRlc3BhY2UmJmFhLnRlc3QoZykmJnEucHVzaChiLmNyZWF0ZVRleHROb2RlKGFhLmV4ZWMoZylbMF0pKSwhbC50Ym9keSl7Zz0idGFibGUiIT09anx8aGEudGVzdChnKT8iPHRhYmxlPiIhPT1tWzFdfHxoYS50ZXN0KGcpPzA6aTppLmZpcnN0Q2hpbGQsZj1nJiZnLmNoaWxkTm9kZXMubGVuZ3RoO3doaWxlKGYtLSluLm5vZGVOYW1lKGs9Zy5jaGlsZE5vZGVzW2ZdLCJ0Ym9keSIpJiYhay5jaGlsZE5vZGVzLmxlbmd0aCYmZy5yZW1vdmVDaGlsZChrKX1uLm1lcmdlKHEsaS5jaGlsZE5vZGVzKSxpLnRleHRDb250ZW50PSIiO3doaWxlKGkuZmlyc3RDaGlsZClpLnJlbW92ZUNoaWxkKGkuZmlyc3RDaGlsZCk7aT1wLmxhc3RDaGlsZH1lbHNlIHEucHVzaChiLmNyZWF0ZVRleHROb2RlKGcpKTtpJiZwLnJlbW92ZUNoaWxkKGkpLGwuYXBwZW5kQ2hlY2tlZHx8bi5ncmVwKGVhKHEsImlucHV0IiksaWEpLHI9MDt3aGlsZShnPXFbcisrXSlpZihkJiZuLmluQXJyYXkoZyxkKT4tMSllJiZlLnB1c2goZyk7ZWxzZSBpZihoPW4uY29udGFpbnMoZy5vd25lckRvY3VtZW50LGcpLGk9ZWEocC5hcHBlbmRDaGlsZChnKSwic2NyaXB0IiksaCYmZmEoaSksYyl7Zj0wO3doaWxlKGc9aVtmKytdKV8udGVzdChnLnR5cGV8fCIiKSYmYy5wdXNoKGcpfXJldHVybiBpPW51bGwscH0hZnVuY3Rpb24oKXt2YXIgYixjLGU9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3IoYiBpbntzdWJtaXQ6ITAsY2hhbmdlOiEwLGZvY3VzaW46ITB9KWM9Im9uIitiLChsW2JdPWMgaW4gYSl8fChlLnNldEF0dHJpYnV0ZShjLCJ0IiksbFtiXT1lLmF0dHJpYnV0ZXNbY10uZXhwYW5kbz09PSExKTtlPW51bGx9KCk7dmFyIGthPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhKSQvaSxsYT0vXmtleS8sbWE9L14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLG5hPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxvYT0vXihbXi5dKikoPzpcLiguKyl8KS87ZnVuY3Rpb24gcGEoKXtyZXR1cm4hMH1mdW5jdGlvbiBxYSgpe3JldHVybiExfWZ1bmN0aW9uIHJhKCl7dHJ5e3JldHVybiBkLmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYSl7fX1mdW5jdGlvbiBzYShhLGIsYyxkLGUsZil7dmFyIGcsaDtpZigib2JqZWN0Ij09dHlwZW9mIGIpeyJzdHJpbmciIT10eXBlb2YgYyYmKGQ9ZHx8YyxjPXZvaWQgMCk7Zm9yKGggaW4gYilzYShhLGgsYyxkLGJbaF0sZik7cmV0dXJuIGF9aWYobnVsbD09ZCYmbnVsbD09ZT8oZT1jLGQ9Yz12b2lkIDApOm51bGw9PWUmJigic3RyaW5nIj09dHlwZW9mIGM/KGU9ZCxkPXZvaWQgMCk6KGU9ZCxkPWMsYz12b2lkIDApKSxlPT09ITEpZT1xYTtlbHNlIGlmKCFlKXJldHVybiBhO3JldHVybiAxPT09ZiYmKGc9ZSxlPWZ1bmN0aW9uKGEpe3JldHVybiBuKCkub2ZmKGEpLGcuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLmd1aWQ9Zy5ndWlkfHwoZy5ndWlkPW4uZ3VpZCsrKSksYS5lYWNoKGZ1bmN0aW9uKCl7bi5ldmVudC5hZGQodGhpcyxiLGUsZCxjKX0pfW4uZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG8scCxxLHI9bi5fZGF0YShhKTtpZihyKXtjLmhhbmRsZXImJihpPWMsYz1pLmhhbmRsZXIsZT1pLnNlbGVjdG9yKSxjLmd1aWR8fChjLmd1aWQ9bi5ndWlkKyspLChnPXIuZXZlbnRzKXx8KGc9ci5ldmVudHM9e30pLChrPXIuaGFuZGxlKXx8KGs9ci5oYW5kbGU9ZnVuY3Rpb24oYSl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBufHxhJiZuLmV2ZW50LnRyaWdnZXJlZD09PWEudHlwZT92b2lkIDA6bi5ldmVudC5kaXNwYXRjaC5hcHBseShrLmVsZW0sYXJndW1lbnRzKX0say5lbGVtPWEpLGI9KGJ8fCIiKS5tYXRjaChHKXx8WyIiXSxoPWIubGVuZ3RoO3doaWxlKGgtLSlmPW9hLmV4ZWMoYltoXSl8fFtdLG89cT1mWzFdLHA9KGZbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxvJiYoaj1uLmV2ZW50LnNwZWNpYWxbb118fHt9LG89KGU/ai5kZWxlZ2F0ZVR5cGU6ai5iaW5kVHlwZSl8fG8saj1uLmV2ZW50LnNwZWNpYWxbb118fHt9LGw9bi5leHRlbmQoe3R5cGU6byxvcmlnVHlwZTpxLGRhdGE6ZCxoYW5kbGVyOmMsZ3VpZDpjLmd1aWQsc2VsZWN0b3I6ZSxuZWVkc0NvbnRleHQ6ZSYmbi5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGUpLG5hbWVzcGFjZTpwLmpvaW4oIi4iKX0saSksKG09Z1tvXSl8fChtPWdbb109W10sbS5kZWxlZ2F0ZUNvdW50PTAsai5zZXR1cCYmai5zZXR1cC5jYWxsKGEsZCxwLGspIT09ITF8fChhLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKG8saywhMSk6YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib24iK28saykpKSxqLmFkZCYmKGouYWRkLmNhbGwoYSxsKSxsLmhhbmRsZXIuZ3VpZHx8KGwuaGFuZGxlci5ndWlkPWMuZ3VpZCkpLGU/bS5zcGxpY2UobS5kZWxlZ2F0ZUNvdW50KyssMCxsKTptLnB1c2gobCksbi5ldmVudC5nbG9iYWxbb109ITApO2E9bnVsbH19LHJlbW92ZTpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbyxwLHEscj1uLmhhc0RhdGEoYSkmJm4uX2RhdGEoYSk7aWYociYmKGs9ci5ldmVudHMpKXtiPShifHwiIikubWF0Y2goRyl8fFsiIl0saj1iLmxlbmd0aDt3aGlsZShqLS0paWYoaD1vYS5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyl7bD1uLmV2ZW50LnNwZWNpYWxbb118fHt9LG89KGQ/bC5kZWxlZ2F0ZVR5cGU6bC5iaW5kVHlwZSl8fG8sbT1rW29dfHxbXSxoPWhbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK3Auam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksaT1mPW0ubGVuZ3RoO3doaWxlKGYtLSlnPW1bZl0sIWUmJnEhPT1nLm9yaWdUeXBlfHxjJiZjLmd1aWQhPT1nLmd1aWR8fGgmJiFoLnRlc3QoZy5uYW1lc3BhY2UpfHxkJiZkIT09Zy5zZWxlY3RvciYmKCIqKiIhPT1kfHwhZy5zZWxlY3Rvcil8fChtLnNwbGljZShmLDEpLGcuc2VsZWN0b3ImJm0uZGVsZWdhdGVDb3VudC0tLGwucmVtb3ZlJiZsLnJlbW92ZS5jYWxsKGEsZykpO2kmJiFtLmxlbmd0aCYmKGwudGVhcmRvd24mJmwudGVhcmRvd24uY2FsbChhLHAsci5oYW5kbGUpIT09ITF8fG4ucmVtb3ZlRXZlbnQoYSxvLHIuaGFuZGxlKSxkZWxldGUga1tvXSl9ZWxzZSBmb3IobyBpbiBrKW4uZXZlbnQucmVtb3ZlKGEsbytiW2pdLGMsZCwhMCk7bi5pc0VtcHR5T2JqZWN0KGspJiYoZGVsZXRlIHIuaGFuZGxlLG4uX3JlbW92ZURhdGEoYSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihiLGMsZSxmKXt2YXIgZyxoLGksaixsLG0sbyxwPVtlfHxkXSxxPWsuY2FsbChiLCJ0eXBlIik/Yi50eXBlOmIscj1rLmNhbGwoYiwibmFtZXNwYWNlIik/Yi5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihpPW09ZT1lfHxkLDMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmIW5hLnRlc3QocStuLmV2ZW50LnRyaWdnZXJlZCkmJihxLmluZGV4T2YoIi4iKT4tMSYmKHI9cS5zcGxpdCgiLiIpLHE9ci5zaGlmdCgpLHIuc29ydCgpKSxoPXEuaW5kZXhPZigiOiIpPDAmJiJvbiIrcSxiPWJbbi5leHBhbmRvXT9iOm5ldyBuLkV2ZW50KHEsIm9iamVjdCI9PXR5cGVvZiBiJiZiKSxiLmlzVHJpZ2dlcj1mPzI6MyxiLm5hbWVzcGFjZT1yLmpvaW4oIi4iKSxiLnJuYW1lc3BhY2U9Yi5uYW1lc3BhY2U/bmV3IFJlZ0V4cCgiKF58XFwuKSIrci5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsLGIucmVzdWx0PXZvaWQgMCxiLnRhcmdldHx8KGIudGFyZ2V0PWUpLGM9bnVsbD09Yz9bYl06bi5tYWtlQXJyYXkoYyxbYl0pLGw9bi5ldmVudC5zcGVjaWFsW3FdfHx7fSxmfHwhbC50cmlnZ2VyfHxsLnRyaWdnZXIuYXBwbHkoZSxjKSE9PSExKSl7aWYoIWYmJiFsLm5vQnViYmxlJiYhbi5pc1dpbmRvdyhlKSl7Zm9yKGo9bC5kZWxlZ2F0ZVR5cGV8fHEsbmEudGVzdChqK3EpfHwoaT1pLnBhcmVudE5vZGUpO2k7aT1pLnBhcmVudE5vZGUpcC5wdXNoKGkpLG09aTttPT09KGUub3duZXJEb2N1bWVudHx8ZCkmJnAucHVzaChtLmRlZmF1bHRWaWV3fHxtLnBhcmVudFdpbmRvd3x8YSl9bz0wO3doaWxlKChpPXBbbysrXSkmJiFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYi50eXBlPW8+MT9qOmwuYmluZFR5cGV8fHEsZz0obi5fZGF0YShpLCJldmVudHMiKXx8e30pW2IudHlwZV0mJm4uX2RhdGEoaSwiaGFuZGxlIiksZyYmZy5hcHBseShpLGMpLGc9aCYmaVtoXSxnJiZnLmFwcGx5JiZNKGkpJiYoYi5yZXN1bHQ9Zy5hcHBseShpLGMpLGIucmVzdWx0PT09ITEmJmIucHJldmVudERlZmF1bHQoKSk7aWYoYi50eXBlPXEsIWYmJiFiLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYoIWwuX2RlZmF1bHR8fGwuX2RlZmF1bHQuYXBwbHkocC5wb3AoKSxjKT09PSExKSYmTShlKSYmaCYmZVtxXSYmIW4uaXNXaW5kb3coZSkpe209ZVtoXSxtJiYoZVtoXT1udWxsKSxuLmV2ZW50LnRyaWdnZXJlZD1xO3RyeXtlW3FdKCl9Y2F0Y2gocyl7fW4uZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCxtJiYoZVtoXT1tKX1yZXR1cm4gYi5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihhKXthPW4uZXZlbnQuZml4KGEpO3ZhciBiLGMsZCxmLGcsaD1bXSxpPWUuY2FsbChhcmd1bWVudHMpLGo9KG4uX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVthLnR5cGVdfHxbXSxrPW4uZXZlbnQuc3BlY2lhbFthLnR5cGVdfHx7fTtpZihpWzBdPWEsYS5kZWxlZ2F0ZVRhcmdldD10aGlzLCFrLnByZURpc3BhdGNofHxrLnByZURpc3BhdGNoLmNhbGwodGhpcyxhKSE9PSExKXtoPW4uZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLGEsaiksYj0wO3doaWxlKChmPWhbYisrXSkmJiFhLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe2EuY3VycmVudFRhcmdldD1mLmVsZW0sYz0wO3doaWxlKChnPWYuaGFuZGxlcnNbYysrXSkmJiFhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpYS5ybmFtZXNwYWNlJiYhYS5ybmFtZXNwYWNlLnRlc3QoZy5uYW1lc3BhY2UpfHwoYS5oYW5kbGVPYmo9ZyxhLmRhdGE9Zy5kYXRhLGQ9KChuLmV2ZW50LnNwZWNpYWxbZy5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGcuaGFuZGxlcikuYXBwbHkoZi5lbGVtLGkpLHZvaWQgMCE9PWQmJihhLnJlc3VsdD1kKT09PSExJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCkpKX1yZXR1cm4gay5wb3N0RGlzcGF0Y2gmJmsucG9zdERpc3BhdGNoLmNhbGwodGhpcyxhKSxhLnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGYsZz1bXSxoPWIuZGVsZWdhdGVDb3VudCxpPWEudGFyZ2V0O2lmKGgmJmkubm9kZVR5cGUmJigiY2xpY2siIT09YS50eXBlfHxpc05hTihhLmJ1dHRvbil8fGEuYnV0dG9uPDEpKWZvcig7aSE9dGhpcztpPWkucGFyZW50Tm9kZXx8dGhpcylpZigxPT09aS5ub2RlVHlwZSYmKGkuZGlzYWJsZWQhPT0hMHx8ImNsaWNrIiE9PWEudHlwZSkpe2ZvcihkPVtdLGM9MDtoPmM7YysrKWY9YltjXSxlPWYuc2VsZWN0b3IrIiAiLHZvaWQgMD09PWRbZV0mJihkW2VdPWYubmVlZHNDb250ZXh0P24oZSx0aGlzKS5pbmRleChpKT4tMTpuLmZpbmQoZSx0aGlzLG51bGwsW2ldKS5sZW5ndGgpLGRbZV0mJmQucHVzaChmKTtkLmxlbmd0aCYmZy5wdXNoKHtlbGVtOmksaGFuZGxlcnM6ZH0pfXJldHVybiBoPGIubGVuZ3RoJiZnLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczpiLnNsaWNlKGgpfSksZ30sZml4OmZ1bmN0aW9uKGEpe2lmKGFbbi5leHBhbmRvXSlyZXR1cm4gYTt2YXIgYixjLGUsZj1hLnR5cGUsZz1hLGg9dGhpcy5maXhIb29rc1tmXTtofHwodGhpcy5maXhIb29rc1tmXT1oPW1hLnRlc3QoZik/dGhpcy5tb3VzZUhvb2tzOmxhLnRlc3QoZik/dGhpcy5rZXlIb29rczp7fSksZT1oLnByb3BzP3RoaXMucHJvcHMuY29uY2F0KGgucHJvcHMpOnRoaXMucHJvcHMsYT1uZXcgbi5FdmVudChnKSxiPWUubGVuZ3RoO3doaWxlKGItLSljPWVbYl0sYVtjXT1nW2NdO3JldHVybiBhLnRhcmdldHx8KGEudGFyZ2V0PWcuc3JjRWxlbWVudHx8ZCksMz09PWEudGFyZ2V0Lm5vZGVUeXBlJiYoYS50YXJnZXQ9YS50YXJnZXQucGFyZW50Tm9kZSksYS5tZXRhS2V5PSEhYS5tZXRhS2V5LGguZmlsdGVyP2guZmlsdGVyKGEsZyk6YX0scHJvcHM6ImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGRldGFpbCBldmVudFBoYXNlIG1ldGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2giLnNwbGl0KCIgIiksZml4SG9va3M6e30sa2V5SG9va3M6e3Byb3BzOiJjaGFyIGNoYXJDb2RlIGtleSBrZXlDb2RlIi5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGIpe3JldHVybiBudWxsPT1hLndoaWNoJiYoYS53aGljaD1udWxsIT1iLmNoYXJDb2RlP2IuY2hhckNvZGU6Yi5rZXlDb2RlKSxhfX0sbW91c2VIb29rczp7cHJvcHM6ImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBmcm9tRWxlbWVudCBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudCIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGYsZz1iLmJ1dHRvbixoPWIuZnJvbUVsZW1lbnQ7cmV0dXJuIG51bGw9PWEucGFnZVgmJm51bGwhPWIuY2xpZW50WCYmKGU9YS50YXJnZXQub3duZXJEb2N1bWVudHx8ZCxmPWUuZG9jdW1lbnRFbGVtZW50LGM9ZS5ib2R5LGEucGFnZVg9Yi5jbGllbnRYKyhmJiZmLnNjcm9sbExlZnR8fGMmJmMuc2Nyb2xsTGVmdHx8MCktKGYmJmYuY2xpZW50TGVmdHx8YyYmYy5jbGllbnRMZWZ0fHwwKSxhLnBhZ2VZPWIuY2xpZW50WSsoZiYmZi5zY3JvbGxUb3B8fGMmJmMuc2Nyb2xsVG9wfHwwKS0oZiYmZi5jbGllbnRUb3B8fGMmJmMuY2xpZW50VG9wfHwwKSksIWEucmVsYXRlZFRhcmdldCYmaCYmKGEucmVsYXRlZFRhcmdldD1oPT09YS50YXJnZXQ/Yi50b0VsZW1lbnQ6aCksYS53aGljaHx8dm9pZCAwPT09Z3x8KGEud2hpY2g9MSZnPzE6MiZnPzM6NCZnPzI6MCksYX19LHNwZWNpYWw6e2xvYWQ6e25vQnViYmxlOiEwfSxmb2N1czp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXMhPT1yYSgpJiZ0aGlzLmZvY3VzKXRyeXtyZXR1cm4gdGhpcy5mb2N1cygpLCExfWNhdGNoKGEpe319LGRlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PXJhKCkmJnRoaXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnZvaWQgMH0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIG4ubm9kZU5hbWUodGhpcywiaW5wdXQiKSYmImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljaz8odGhpcy5jbGljaygpLCExKTp2b2lkIDB9LF9kZWZhdWx0OmZ1bmN0aW9uKGEpe3JldHVybiBuLm5vZGVOYW1lKGEudGFyZ2V0LCJhIil9fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlvbihhKXt2b2lkIDAhPT1hLnJlc3VsdCYmYS5vcmlnaW5hbEV2ZW50JiYoYS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPWEucmVzdWx0KX19fSxzaW11bGF0ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9bi5leHRlbmQobmV3IG4uRXZlbnQsYyx7dHlwZTphLGlzU2ltdWxhdGVkOiEwfSk7bi5ldmVudC50cmlnZ2VyKGQsbnVsbCxiKSxkLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZjLnByZXZlbnREZWZhdWx0KCl9fSxuLnJlbW92ZUV2ZW50PWQucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjKX06ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSJvbiIrYjthLmRldGFjaEV2ZW50JiYoInVuZGVmaW5lZCI9PXR5cGVvZiBhW2RdJiYoYVtkXT1udWxsKSxhLmRldGFjaEV2ZW50KGQsYykpfSxuLkV2ZW50PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuLkV2ZW50PyhhJiZhLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1hLHRoaXMudHlwZT1hLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9YS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1hLmRlZmF1bHRQcmV2ZW50ZWQmJmEucmV0dXJuVmFsdWU9PT0hMT9wYTpxYSk6dGhpcy50eXBlPWEsYiYmbi5leHRlbmQodGhpcyxiKSx0aGlzLnRpbWVTdGFtcD1hJiZhLnRpbWVTdGFtcHx8bi5ub3coKSx2b2lkKHRoaXNbbi5leHBhbmRvXT0hMCkpOm5ldyBuLkV2ZW50KGEsYil9LG4uRXZlbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuLkV2ZW50LGlzRGVmYXVsdFByZXZlbnRlZDpxYSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpxYSxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpxYSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1wYSxhJiYoYS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6YS5yZXR1cm5WYWx1ZT0hMSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXBhLGEmJiF0aGlzLmlzU2ltdWxhdGVkJiYoYS5zdG9wUHJvcGFnYXRpb24mJmEuc3RvcFByb3BhZ2F0aW9uKCksYS5jYW5jZWxCdWJibGU9ITApfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1wYSxhJiZhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sbi5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihhLGIpe24uZXZlbnQuc3BlY2lhbFthXT17ZGVsZWdhdGVUeXBlOmIsYmluZFR5cGU6YixoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGMsZD10aGlzLGU9YS5yZWxhdGVkVGFyZ2V0LGY9YS5oYW5kbGVPYmo7cmV0dXJuIGUmJihlPT09ZHx8bi5jb250YWlucyhkLGUpKXx8KGEudHlwZT1mLm9yaWdUeXBlLGM9Zi5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhLnR5cGU9YiksY319fSksbC5zdWJtaXR8fChuLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBuLm5vZGVOYW1lKHRoaXMsImZvcm0iKT8hMTp2b2lkIG4uZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsYz1uLm5vZGVOYW1lKGIsImlucHV0Iil8fG4ubm9kZU5hbWUoYiwiYnV0dG9uIik/bi5wcm9wKGIsImZvcm0iKTp2b2lkIDA7YyYmIW4uX2RhdGEoYywic3VibWl0IikmJihuLmV2ZW50LmFkZChjLCJzdWJtaXQuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7YS5fc3VibWl0QnViYmxlPSEwfSksbi5fZGF0YShjLCJzdWJtaXQiLCEwKSl9KX0scG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe2EuX3N1Ym1pdEJ1YmJsZSYmKGRlbGV0ZSBhLl9zdWJtaXRCdWJibGUsdGhpcy5wYXJlbnROb2RlJiYhYS5pc1RyaWdnZXImJm4uZXZlbnQuc2ltdWxhdGUoInN1Ym1pdCIsdGhpcy5wYXJlbnROb2RlLGEpKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtyZXR1cm4gbi5ub2RlTmFtZSh0aGlzLCJmb3JtIik/ITE6dm9pZCBuLmV2ZW50LnJlbW92ZSh0aGlzLCIuX3N1Ym1pdCIpfX0pLGwuY2hhbmdlfHwobi5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtyZXR1cm4ga2EudGVzdCh0aGlzLm5vZGVOYW1lKT8oImNoZWNrYm94IiE9PXRoaXMudHlwZSYmInJhZGlvIiE9PXRoaXMudHlwZXx8KG4uZXZlbnQuYWRkKHRoaXMsInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpeyJjaGVja2VkIj09PWEub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWUmJih0aGlzLl9qdXN0Q2hhbmdlZD0hMCl9KSxuLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fY2hhbmdlIixmdW5jdGlvbihhKXt0aGlzLl9qdXN0Q2hhbmdlZCYmIWEuaXNUcmlnZ2VyJiYodGhpcy5fanVzdENoYW5nZWQ9ITEpLG4uZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcyxhKX0pKSwhMSk6dm9pZCBuLmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtrYS50ZXN0KGIubm9kZU5hbWUpJiYhbi5fZGF0YShiLCJjaGFuZ2UiKSYmKG4uZXZlbnQuYWRkKGIsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXshdGhpcy5wYXJlbnROb2RlfHxhLmlzU2ltdWxhdGVkfHxhLmlzVHJpZ2dlcnx8bi5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsYSl9KSxuLl9kYXRhKGIsImNoYW5nZSIsITApKX0pfSxoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7cmV0dXJuIHRoaXMhPT1ifHxhLmlzU2ltdWxhdGVkfHxhLmlzVHJpZ2dlcnx8InJhZGlvIiE9PWIudHlwZSYmImNoZWNrYm94IiE9PWIudHlwZT9hLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp2b2lkIDB9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIG4uZXZlbnQucmVtb3ZlKHRoaXMsIi5fY2hhbmdlIiksIWthLnRlc3QodGhpcy5ub2RlTmFtZSl9fSksbC5mb2N1c2lufHxuLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9ZnVuY3Rpb24oYSl7bi5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0LG4uZXZlbnQuZml4KGEpKX07bi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPW4uX2RhdGEoZCxiKTtlfHxkLmFkZEV2ZW50TGlzdGVuZXIoYSxjLCEwKSxuLl9kYXRhKGQsYiwoZXx8MCkrMSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGU9bi5fZGF0YShkLGIpLTE7ZT9uLl9kYXRhKGQsYixlKTooZC5yZW1vdmVFdmVudExpc3RlbmVyKGEsYywhMCksbi5fcmVtb3ZlRGF0YShkLGIpKX19fSksbi5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBzYSh0aGlzLGEsYixjLGQpfSxvbmU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHNhKHRoaXMsYSxiLGMsZCwxKX0sb2ZmOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlO2lmKGEmJmEucHJldmVudERlZmF1bHQmJmEuaGFuZGxlT2JqKXJldHVybiBkPWEuaGFuZGxlT2JqLG4oYS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGQubmFtZXNwYWNlP2Qub3JpZ1R5cGUrIi4iK2QubmFtZXNwYWNlOmQub3JpZ1R5cGUsZC5zZWxlY3RvcixkLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PXR5cGVvZiBhKXtmb3IoZSBpbiBhKXRoaXMub2ZmKGUsYixhW2VdKTtyZXR1cm4gdGhpc31yZXR1cm4gYiE9PSExJiYiZnVuY3Rpb24iIT10eXBlb2YgYnx8KGM9YixiPXZvaWQgMCksYz09PSExJiYoYz1xYSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5ldmVudC5yZW1vdmUodGhpcyxhLGMsYil9KX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpc1swXTtyZXR1cm4gYz9uLmV2ZW50LnRyaWdnZXIoYSxiLGMsITApOnZvaWQgMH19KTt2YXIgdGE9LyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZyx1YT1uZXcgUmVnRXhwKCI8KD86IitiYSsiKVtcXHMvPl0iLCJpIiksdmE9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Oi1dKylbXj5dKilcLz4vZ2ksd2E9LzxzY3JpcHR8PHN0eWxlfDxsaW5rL2kseGE9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2kseWE9L150cnVlXC8oLiopLyx6YT0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2csQWE9Y2EoZCksQmE9QWEuYXBwZW5kQ2hpbGQoZC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7ZnVuY3Rpb24gQ2EoYSxiKXtyZXR1cm4gbi5ub2RlTmFtZShhLCJ0YWJsZSIpJiZuLm5vZGVOYW1lKDExIT09Yi5ub2RlVHlwZT9iOmIuZmlyc3RDaGlsZCwidHIiKT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHxhLmFwcGVuZENoaWxkKGEub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKTphfWZ1bmN0aW9uIERhKGEpe3JldHVybiBhLnR5cGU9KG51bGwhPT1uLmZpbmQuYXR0cihhLCJ0eXBlIikpKyIvIithLnR5cGUsYX1mdW5jdGlvbiBFYShhKXt2YXIgYj15YS5leGVjKGEudHlwZSk7cmV0dXJuIGI/YS50eXBlPWJbMV06YS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxhfWZ1bmN0aW9uIEZhKGEsYil7aWYoMT09PWIubm9kZVR5cGUmJm4uaGFzRGF0YShhKSl7dmFyIGMsZCxlLGY9bi5fZGF0YShhKSxnPW4uX2RhdGEoYixmKSxoPWYuZXZlbnRzO2lmKGgpe2RlbGV0ZSBnLmhhbmRsZSxnLmV2ZW50cz17fTtmb3IoYyBpbiBoKWZvcihkPTAsZT1oW2NdLmxlbmd0aDtlPmQ7ZCsrKW4uZXZlbnQuYWRkKGIsYyxoW2NdW2RdKX1nLmRhdGEmJihnLmRhdGE9bi5leHRlbmQoe30sZy5kYXRhKSl9fWZ1bmN0aW9uIEdhKGEsYil7dmFyIGMsZCxlO2lmKDE9PT1iLm5vZGVUeXBlKXtpZihjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwhbC5ub0Nsb25lRXZlbnQmJmJbbi5leHBhbmRvXSl7ZT1uLl9kYXRhKGIpO2ZvcihkIGluIGUuZXZlbnRzKW4ucmVtb3ZlRXZlbnQoYixkLGUuaGFuZGxlKTtiLnJlbW92ZUF0dHJpYnV0ZShuLmV4cGFuZG8pfSJzY3JpcHQiPT09YyYmYi50ZXh0IT09YS50ZXh0PyhEYShiKS50ZXh0PWEudGV4dCxFYShiKSk6Im9iamVjdCI9PT1jPyhiLnBhcmVudE5vZGUmJihiLm91dGVySFRNTD1hLm91dGVySFRNTCksbC5odG1sNUNsb25lJiZhLmlubmVySFRNTCYmIW4udHJpbShiLmlubmVySFRNTCkmJihiLmlubmVySFRNTD1hLmlubmVySFRNTCkpOiJpbnB1dCI9PT1jJiZaLnRlc3QoYS50eXBlKT8oYi5kZWZhdWx0Q2hlY2tlZD1iLmNoZWNrZWQ9YS5jaGVja2VkLGIudmFsdWUhPT1hLnZhbHVlJiYoYi52YWx1ZT1hLnZhbHVlKSk6Im9wdGlvbiI9PT1jP2IuZGVmYXVsdFNlbGVjdGVkPWIuc2VsZWN0ZWQ9YS5kZWZhdWx0U2VsZWN0ZWQ6ImlucHV0IiE9PWMmJiJ0ZXh0YXJlYSIhPT1jfHwoYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWUpfX1mdW5jdGlvbiBIYShhLGIsYyxkKXtiPWYuYXBwbHkoW10sYik7dmFyIGUsZyxoLGksaixrLG09MCxvPWEubGVuZ3RoLHA9by0xLHE9YlswXSxyPW4uaXNGdW5jdGlvbihxKTtpZihyfHxvPjEmJiJzdHJpbmciPT10eXBlb2YgcSYmIWwuY2hlY2tDbG9uZSYmeGEudGVzdChxKSlyZXR1cm4gYS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBmPWEuZXEoZSk7ciYmKGJbMF09cS5jYWxsKHRoaXMsZSxmLmh0bWwoKSkpLEhhKGYsYixjLGQpfSk7aWYobyYmKGs9amEoYixhWzBdLm93bmVyRG9jdW1lbnQsITEsYSxkKSxlPWsuZmlyc3RDaGlsZCwxPT09ay5jaGlsZE5vZGVzLmxlbmd0aCYmKGs9ZSksZXx8ZCkpe2ZvcihpPW4ubWFwKGVhKGssInNjcmlwdCIpLERhKSxoPWkubGVuZ3RoO28+bTttKyspZz1rLG0hPT1wJiYoZz1uLmNsb25lKGcsITAsITApLGgmJm4ubWVyZ2UoaSxlYShnLCJzY3JpcHQiKSkpLGMuY2FsbChhW21dLGcsbSk7aWYoaClmb3Ioaj1pW2kubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsbi5tYXAoaSxFYSksbT0wO2g+bTttKyspZz1pW21dLF8udGVzdChnLnR5cGV8fCIiKSYmIW4uX2RhdGEoZywiZ2xvYmFsRXZhbCIpJiZuLmNvbnRhaW5zKGosZykmJihnLnNyYz9uLl9ldmFsVXJsJiZuLl9ldmFsVXJsKGcuc3JjKTpuLmdsb2JhbEV2YWwoKGcudGV4dHx8Zy50ZXh0Q29udGVudHx8Zy5pbm5lckhUTUx8fCIiKS5yZXBsYWNlKHphLCIiKSkpO2s9ZT1udWxsfXJldHVybiBhfWZ1bmN0aW9uIElhKGEsYixjKXtmb3IodmFyIGQsZT1iP24uZmlsdGVyKGIsYSk6YSxmPTA7bnVsbCE9KGQ9ZVtmXSk7ZisrKWN8fDEhPT1kLm5vZGVUeXBlfHxuLmNsZWFuRGF0YShlYShkKSksZC5wYXJlbnROb2RlJiYoYyYmbi5jb250YWlucyhkLm93bmVyRG9jdW1lbnQsZCkmJmZhKGVhKGQsInNjcmlwdCIpKSxkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCkpO3JldHVybiBhfW4uZXh0ZW5kKHtodG1sUHJlZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UodmEsIjwkMT48LyQyPiIpfSxjbG9uZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpPW4uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpO2lmKGwuaHRtbDVDbG9uZXx8bi5pc1hNTERvYyhhKXx8IXVhLnRlc3QoIjwiK2Eubm9kZU5hbWUrIj4iKT9mPWEuY2xvbmVOb2RlKCEwKTooQmEuaW5uZXJIVE1MPWEub3V0ZXJIVE1MLEJhLnJlbW92ZUNoaWxkKGY9QmEuZmlyc3RDaGlsZCkpLCEobC5ub0Nsb25lRXZlbnQmJmwubm9DbG9uZUNoZWNrZWR8fDEhPT1hLm5vZGVUeXBlJiYxMSE9PWEubm9kZVR5cGV8fG4uaXNYTUxEb2MoYSkpKWZvcihkPWVhKGYpLGg9ZWEoYSksZz0wO251bGwhPShlPWhbZ10pOysrZylkW2ddJiZHYShlLGRbZ10pO2lmKGIpaWYoYylmb3IoaD1ofHxlYShhKSxkPWR8fGVhKGYpLGc9MDtudWxsIT0oZT1oW2ddKTtnKyspRmEoZSxkW2ddKTtlbHNlIEZhKGEsZik7cmV0dXJuIGQ9ZWEoZiwic2NyaXB0IiksZC5sZW5ndGg+MCYmZmEoZCwhaSYmZWEoYSwic2NyaXB0IikpLGQ9aD1lPW51bGwsZn0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkLGUsZixnLGg9MCxpPW4uZXhwYW5kbyxqPW4uY2FjaGUsaz1sLmF0dHJpYnV0ZXMsbT1uLmV2ZW50LnNwZWNpYWw7bnVsbCE9KGQ9YVtoXSk7aCsrKWlmKChifHxNKGQpKSYmKGY9ZFtpXSxnPWYmJmpbZl0pKXtpZihnLmV2ZW50cylmb3IoZSBpbiBnLmV2ZW50cyltW2VdP24uZXZlbnQucmVtb3ZlKGQsZSk6bi5yZW1vdmVFdmVudChkLGUsZy5oYW5kbGUpO2pbZl0mJihkZWxldGUgaltmXSxrfHwidW5kZWZpbmVkIj09dHlwZW9mIGQucmVtb3ZlQXR0cmlidXRlP2RbaV09dm9pZCAwOmQucmVtb3ZlQXR0cmlidXRlKGkpLGMucHVzaChmKSl9fX0pLG4uZm4uZXh0ZW5kKHtkb21NYW5pcDpIYSxkZXRhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIElhKHRoaXMsYSwhMCl9LHJlbW92ZTpmdW5jdGlvbihhKXtyZXR1cm4gSWEodGhpcyxhKX0sdGV4dDpmdW5jdGlvbihhKXtyZXR1cm4gWSh0aGlzLGZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDA9PT1hP24udGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGQpLmNyZWF0ZVRleHROb2RlKGEpKX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gSGEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPUNhKHRoaXMsYSk7Yi5hcHBlbmRDaGlsZChhKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiBIYSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihhKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIGI9Q2EodGhpcyxhKTtiLmluc2VydEJlZm9yZShhLGIuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiBIYSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiBIYSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgYSxiPTA7bnVsbCE9KGE9dGhpc1tiXSk7YisrKXsxPT09YS5ub2RlVHlwZSYmbi5jbGVhbkRhdGEoZWEoYSwhMSkpO3doaWxlKGEuZmlyc3RDaGlsZClhLnJlbW92ZUNoaWxkKGEuZmlyc3RDaGlsZCk7YS5vcHRpb25zJiZuLm5vZGVOYW1lKGEsInNlbGVjdCIpJiYoYS5vcHRpb25zLmxlbmd0aD0wKX1yZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1udWxsPT1hPyExOmEsYj1udWxsPT1iP2E6Yix0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBuLmNsb25lKHRoaXMsYSxiKX0pfSxodG1sOmZ1bmN0aW9uKGEpe3JldHVybiBZKHRoaXMsZnVuY3Rpb24oYSl7dmFyIGI9dGhpc1swXXx8e30sYz0wLGQ9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09YSlyZXR1cm4gMT09PWIubm9kZVR5cGU/Yi5pbm5lckhUTUwucmVwbGFjZSh0YSwiIik6dm9pZCAwO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmIXdhLnRlc3QoYSkmJihsLmh0bWxTZXJpYWxpemV8fCF1YS50ZXN0KGEpKSYmKGwubGVhZGluZ1doaXRlc3BhY2V8fCFhYS50ZXN0KGEpKSYmIWRhWygkLmV4ZWMoYSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXthPW4uaHRtbFByZWZpbHRlcihhKTt0cnl7Zm9yKDtkPmM7YysrKWI9dGhpc1tjXXx8e30sMT09PWIubm9kZVR5cGUmJihuLmNsZWFuRGF0YShlYShiLCExKSksYi5pbm5lckhUTUw9YSk7Yj0wfWNhdGNoKGUpe319YiYmdGhpcy5lbXB0eSgpLmFwcGVuZChhKX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiBIYSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihiKXt2YXIgYz10aGlzLnBhcmVudE5vZGU7bi5pbkFycmF5KHRoaXMsYSk8MCYmKG4uY2xlYW5EYXRhKGVhKHRoaXMpKSxjJiZjLnJlcGxhY2VDaGlsZChiLHRoaXMpKX0sYSl9fSksbi5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtuLmZuW2FdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPTAsZT1bXSxmPW4oYSksaD1mLmxlbmd0aC0xO2g+PWQ7ZCsrKWM9ZD09PWg/dGhpczp0aGlzLmNsb25lKCEwKSxuKGZbZF0pW2JdKGMpLGcuYXBwbHkoZSxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZSl9fSk7dmFyIEphLEthPXtIVE1MOiJibG9jayIsQk9EWToiYmxvY2sifTtmdW5jdGlvbiBMYShhLGIpe3ZhciBjPW4oYi5jcmVhdGVFbGVtZW50KGEpKS5hcHBlbmRUbyhiLmJvZHkpLGQ9bi5jc3MoY1swXSwiZGlzcGxheSIpO3JldHVybiBjLmRldGFjaCgpLGR9ZnVuY3Rpb24gTWEoYSl7dmFyIGI9ZCxjPUthW2FdO3JldHVybiBjfHwoYz1MYShhLGIpLCJub25lIiE9PWMmJmN8fChKYT0oSmF8fG4oIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz4iKSkuYXBwZW5kVG8oYi5kb2N1bWVudEVsZW1lbnQpLGI9KEphWzBdLmNvbnRlbnRXaW5kb3d8fEphWzBdLmNvbnRlbnREb2N1bWVudCkuZG9jdW1lbnQsYi53cml0ZSgpLGIuY2xvc2UoKSxjPUxhKGEsYiksSmEuZGV0YWNoKCkpLEthW2FdPWMpLGN9dmFyIE5hPS9ebWFyZ2luLyxPYT1uZXcgUmVnRXhwKCJeKCIrVCsiKSg/IXB4KVthLXolXSskIiwiaSIpLFBhPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZz17fTtmb3IoZiBpbiBiKWdbZl09YS5zdHlsZVtmXSxhLnN0eWxlW2ZdPWJbZl07ZT1jLmFwcGx5KGEsZHx8W10pO2ZvcihmIGluIGIpYS5zdHlsZVtmXT1nW2ZdO3JldHVybiBlfSxRYT1kLmRvY3VtZW50RWxlbWVudDshZnVuY3Rpb24oKXt2YXIgYixjLGUsZixnLGgsaT1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGo9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKTtpZihqLnN0eWxlKXtqLnN0eWxlLmNzc1RleHQ9ImZsb2F0OmxlZnQ7b3BhY2l0eTouNSIsbC5vcGFjaXR5PSIwLjUiPT09ai5zdHlsZS5vcGFjaXR5LGwuY3NzRmxvYXQ9ISFqLnN0eWxlLmNzc0Zsb2F0LGouc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixqLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIsbC5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWouc3R5bGUuYmFja2dyb3VuZENsaXAsaT1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGkuc3R5bGUuY3NzVGV4dD0iYm9yZGVyOjA7d2lkdGg6OHB4O2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweDtwYWRkaW5nOjA7bWFyZ2luLXRvcDoxcHg7cG9zaXRpb246YWJzb2x1dGUiLGouaW5uZXJIVE1MPSIiLGkuYXBwZW5kQ2hpbGQoaiksbC5ib3hTaXppbmc9IiI9PT1qLnN0eWxlLmJveFNpemluZ3x8IiI9PT1qLnN0eWxlLk1vekJveFNpemluZ3x8IiI9PT1qLnN0eWxlLldlYmtpdEJveFNpemluZyxuLmV4dGVuZChsLHtyZWxpYWJsZUhpZGRlbk9mZnNldHM6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09YiYmaygpLGZ9LGJveFNpemluZ1JlbGlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWImJmsoKSxlfSxwaXhlbE1hcmdpblJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWImJmsoKSxjfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWImJmsoKSxifSxyZWxpYWJsZU1hcmdpblJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWImJmsoKSxnfSxyZWxpYWJsZU1hcmdpbkxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09YiYmaygpLGh9fSk7ZnVuY3Rpb24gaygpe3ZhciBrLGwsbT1kLmRvY3VtZW50RWxlbWVudDttLmFwcGVuZENoaWxkKGkpLGouc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7bWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt0b3A6MSU7d2lkdGg6NTAlIixiPWU9aD0hMSxjPWc9ITAsYS5nZXRDb21wdXRlZFN0eWxlJiYobD1hLmdldENvbXB1dGVkU3R5bGUoaiksYj0iMSUiIT09KGx8fHt9KS50b3AsaD0iMnB4Ij09PShsfHx7fSkubWFyZ2luTGVmdCxlPSI0cHgiPT09KGx8fHt3aWR0aDoiNHB4In0pLndpZHRoLGouc3R5bGUubWFyZ2luUmlnaHQ9IjUwJSIsYz0iNHB4Ij09PShsfHx7bWFyZ2luUmlnaHQ6IjRweCJ9KS5tYXJnaW5SaWdodCxrPWouYXBwZW5kQ2hpbGQoZC5jcmVhdGVFbGVtZW50KCJkaXYiKSksay5zdHlsZS5jc3NUZXh0PWouc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowIixrLnN0eWxlLm1hcmdpblJpZ2h0PWsuc3R5bGUud2lkdGg9IjAiLGouc3R5bGUud2lkdGg9IjFweCIsZz0hcGFyc2VGbG9hdCgoYS5nZXRDb21wdXRlZFN0eWxlKGspfHx7fSkubWFyZ2luUmlnaHQpLGoucmVtb3ZlQ2hpbGQoaykpLGouc3R5bGUuZGlzcGxheT0ibm9uZSIsZj0wPT09ai5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCxmJiYoai5zdHlsZS5kaXNwbGF5PSIiLGouaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IixqLmNoaWxkTm9kZXNbMF0uc3R5bGUuYm9yZGVyQ29sbGFwc2U9InNlcGFyYXRlIixrPWouZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIiksa1swXS5zdHlsZS5jc3NUZXh0PSJtYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjA7ZGlzcGxheTpub25lIixmPTA9PT1rWzBdLm9mZnNldEhlaWdodCxmJiYoa1swXS5zdHlsZS5kaXNwbGF5PSIiLGtbMV0uc3R5bGUuZGlzcGxheT0ibm9uZSIsZj0wPT09a1swXS5vZmZzZXRIZWlnaHQpKSxtLnJlbW92ZUNoaWxkKGkpfX19KCk7dmFyIFJhLFNhLFRhPS9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLzthLmdldENvbXB1dGVkU3R5bGU/KFJhPWZ1bmN0aW9uKGIpe3ZhciBjPWIub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm4gYyYmYy5vcGVuZXJ8fChjPWEpLGMuZ2V0Q29tcHV0ZWRTdHlsZShiKX0sU2E9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5zdHlsZTtyZXR1cm4gYz1jfHxSYShhKSxnPWM/Yy5nZXRQcm9wZXJ0eVZhbHVlKGIpfHxjW2JdOnZvaWQgMCwiIiE9PWcmJnZvaWQgMCE9PWd8fG4uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfHwoZz1uLnN0eWxlKGEsYikpLGMmJiFsLnBpeGVsTWFyZ2luUmlnaHQoKSYmT2EudGVzdChnKSYmTmEudGVzdChiKSYmKGQ9aC53aWR0aCxlPWgubWluV2lkdGgsZj1oLm1heFdpZHRoLGgubWluV2lkdGg9aC5tYXhXaWR0aD1oLndpZHRoPWcsZz1jLndpZHRoLGgud2lkdGg9ZCxoLm1pbldpZHRoPWUsaC5tYXhXaWR0aD1mKSx2b2lkIDA9PT1nP2c6ZysiIn0pOlFhLmN1cnJlbnRTdHlsZSYmKFJhPWZ1bmN0aW9uKGEpe3JldHVybiBhLmN1cnJlbnRTdHlsZX0sU2E9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5zdHlsZTtyZXR1cm4gYz1jfHxSYShhKSxnPWM/Y1tiXTp2b2lkIDAsbnVsbD09ZyYmaCYmaFtiXSYmKGc9aFtiXSksT2EudGVzdChnKSYmIVRhLnRlc3QoYikmJihkPWgubGVmdCxlPWEucnVudGltZVN0eWxlLGY9ZSYmZS5sZWZ0LGYmJihlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksaC5sZWZ0PSJmb250U2l6ZSI9PT1iPyIxZW0iOmcsZz1oLnBpeGVsTGVmdCsicHgiLGgubGVmdD1kLGYmJihlLmxlZnQ9ZikpLHZvaWQgMD09PWc/ZzpnKyIifHwiYXV0byJ9KTtmdW5jdGlvbiBVYShhLGIpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYSgpP3ZvaWQgZGVsZXRlIHRoaXMuZ2V0Oih0aGlzLmdldD1iKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX12YXIgVmE9L2FscGhhXChbXildKlwpL2ksV2E9L29wYWNpdHlccyo9XHMqKFteKV0qKS9pLFhhPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxZYT1uZXcgUmVnRXhwKCJeKCIrVCsiKSguKikkIiwiaSIpLFphPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSwkYT17bGV0dGVyU3BhY2luZzoiMCIsZm9udFdlaWdodDoiNDAwIn0sX2E9WyJXZWJraXQiLCJPIiwiTW96IiwibXMiXSxhYj1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlO2Z1bmN0aW9uIGJiKGEpe2lmKGEgaW4gYWIpcmV0dXJuIGE7dmFyIGI9YS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSthLnNsaWNlKDEpLGM9X2EubGVuZ3RoO3doaWxlKGMtLSlpZihhPV9hW2NdK2IsYSBpbiBhYilyZXR1cm4gYX1mdW5jdGlvbiBjYihhLGIpe2Zvcih2YXIgYyxkLGUsZj1bXSxnPTAsaD1hLmxlbmd0aDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoZltnXT1uLl9kYXRhKGQsIm9sZGRpc3BsYXkiKSxjPWQuc3R5bGUuZGlzcGxheSxiPyhmW2ddfHwibm9uZSIhPT1jfHwoZC5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PWQuc3R5bGUuZGlzcGxheSYmVyhkKSYmKGZbZ109bi5fZGF0YShkLCJvbGRkaXNwbGF5IixNYShkLm5vZGVOYW1lKSkpKTooZT1XKGQpLChjJiYibm9uZSIhPT1jfHwhZSkmJm4uX2RhdGEoZCwib2xkZGlzcGxheSIsZT9jOm4uY3NzKGQsImRpc3BsYXkiKSkpKTtmb3IoZz0wO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihiJiYibm9uZSIhPT1kLnN0eWxlLmRpc3BsYXkmJiIiIT09ZC5zdHlsZS5kaXNwbGF5fHwoZC5zdHlsZS5kaXNwbGF5PWI/ZltnXXx8IiI6Im5vbmUiKSk7cmV0dXJuIGF9ZnVuY3Rpb24gZGIoYSxiLGMpe3ZhciBkPVlhLmV4ZWMoYik7cmV0dXJuIGQ/TWF0aC5tYXgoMCxkWzFdLShjfHwwKSkrKGRbMl18fCJweCIpOmJ9ZnVuY3Rpb24gZWIoYSxiLGMsZCxlKXtmb3IodmFyIGY9Yz09PShkPyJib3JkZXIiOiJjb250ZW50Iik/NDoid2lkdGgiPT09Yj8xOjAsZz0wOzQ+ZjtmKz0yKSJtYXJnaW4iPT09YyYmKGcrPW4uY3NzKGEsYytWW2ZdLCEwLGUpKSxkPygiY29udGVudCI9PT1jJiYoZy09bi5jc3MoYSwicGFkZGluZyIrVltmXSwhMCxlKSksIm1hcmdpbiIhPT1jJiYoZy09bi5jc3MoYSwiYm9yZGVyIitWW2ZdKyJXaWR0aCIsITAsZSkpKTooZys9bi5jc3MoYSwicGFkZGluZyIrVltmXSwhMCxlKSwicGFkZGluZyIhPT1jJiYoZys9bi5jc3MoYSwiYm9yZGVyIitWW2ZdKyJXaWR0aCIsITAsZSkpKTtyZXR1cm4gZ31mdW5jdGlvbiBmYihhLGIsYyl7dmFyIGQ9ITAsZT0id2lkdGgiPT09Yj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0LGY9UmEoYSksZz1sLmJveFNpemluZyYmImJvcmRlci1ib3giPT09bi5jc3MoYSwiYm94U2l6aW5nIiwhMSxmKTtpZigwPj1lfHxudWxsPT1lKXtpZihlPVNhKGEsYixmKSwoMD5lfHxudWxsPT1lKSYmKGU9YS5zdHlsZVtiXSksT2EudGVzdChlKSlyZXR1cm4gZTtkPWcmJihsLmJveFNpemluZ1JlbGlhYmxlKCl8fGU9PT1hLnN0eWxlW2JdKSxlPXBhcnNlRmxvYXQoZSl8fDB9cmV0dXJuIGUrZWIoYSxiLGN8fChnPyJib3JkZXIiOiJjb250ZW50IiksZCxmKSsicHgifW4uZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9U2EoYSwib3BhY2l0eSIpO3JldHVybiIiPT09Yz8iMSI6Y319fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0IjpsLmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGIsYyxkKXtpZihhJiYzIT09YS5ub2RlVHlwZSYmOCE9PWEubm9kZVR5cGUmJmEuc3R5bGUpe3ZhciBlLGYsZyxoPW4uY2FtZWxDYXNlKGIpLGk9YS5zdHlsZTtpZihiPW4uY3NzUHJvcHNbaF18fChuLmNzc1Byb3BzW2hdPWJiKGgpfHxoKSxnPW4uY3NzSG9va3NbYl18fG4uY3NzSG9va3NbaF0sdm9pZCAwPT09YylyZXR1cm4gZyYmImdldCJpbiBnJiZ2b2lkIDAhPT0oZT1nLmdldChhLCExLGQpKT9lOmlbYl07aWYoZj10eXBlb2YgYywic3RyaW5nIj09PWYmJihlPVUuZXhlYyhjKSkmJmVbMV0mJihjPVgoYSxiLGUpLGY9Im51bWJlciIpLG51bGwhPWMmJmM9PT1jJiYoIm51bWJlciI9PT1mJiYoYys9ZSYmZVszXXx8KG4uY3NzTnVtYmVyW2hdPyIiOiJweCIpKSxsLmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1jfHwwIT09Yi5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChpW2JdPSJpbmhlcml0IiksIShnJiYic2V0ImluIGcmJnZvaWQgMD09PShjPWcuc2V0KGEsYyxkKSkpKSl0cnl7aVtiXT1jfWNhdGNoKGope319fSxjc3M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnLGg9bi5jYW1lbENhc2UoYik7cmV0dXJuIGI9bi5jc3NQcm9wc1toXXx8KG4uY3NzUHJvcHNbaF09YmIoaCl8fGgpLGc9bi5jc3NIb29rc1tiXXx8bi5jc3NIb29rc1toXSxnJiYiZ2V0ImluIGcmJihmPWcuZ2V0KGEsITAsYykpLHZvaWQgMD09PWYmJihmPVNhKGEsYixkKSksIm5vcm1hbCI9PT1mJiZiIGluICRhJiYoZj0kYVtiXSksIiI9PT1jfHxjPyhlPXBhcnNlRmxvYXQoZiksYz09PSEwfHxpc0Zpbml0ZShlKT9lfHwwOmYpOmZ9fSksbi5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihhLGIpe24uY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGM/WGEudGVzdChuLmNzcyhhLCJkaXNwbGF5IikpJiYwPT09YS5vZmZzZXRXaWR0aD9QYShhLFphLGZ1bmN0aW9uKCl7cmV0dXJuIGZiKGEsYixkKX0pOmZiKGEsYixkKTp2b2lkIDB9LHNldDpmdW5jdGlvbihhLGMsZCl7dmFyIGU9ZCYmUmEoYSk7cmV0dXJuIGRiKGEsYyxkP2ViKGEsYixkLGwuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT1uLmNzcyhhLCJib3hTaXppbmciLCExLGUpLGUpOjApfX19KSxsLm9wYWNpdHl8fChuLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBXYS50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/LjAxKnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9bi5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IisxMDAqYisiKSI6IiIsZj1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xLChiPj0xfHwiIj09PWIpJiYiIj09PW4udHJpbShmLnJlcGxhY2UoVmEsIiIpKSYmYy5yZW1vdmVBdHRyaWJ1dGUmJihjLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIiksIiI9PT1ifHxkJiYhZC5maWx0ZXIpfHwoYy5maWx0ZXI9VmEudGVzdChmKT9mLnJlcGxhY2UoVmEsZSk6ZisiICIrZSl9fSksbi5jc3NIb29rcy5tYXJnaW5SaWdodD1VYShsLnJlbGlhYmxlTWFyZ2luUmlnaHQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9QYShhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxTYSxbYSwibWFyZ2luUmlnaHQiXSk6dm9pZCAwfSksbi5jc3NIb29rcy5tYXJnaW5MZWZ0PVVhKGwucmVsaWFibGVNYXJnaW5MZWZ0LGZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/KHBhcnNlRmxvYXQoU2EoYSwibWFyZ2luTGVmdCIpKXx8KG4uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpP2EuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdC1QYShhLHsNCm1hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSk6MCkpKyJweCI6dm9pZCAwfSksbi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2ErYl09e2V4cGFuZDpmdW5jdGlvbihjKXtmb3IodmFyIGQ9MCxlPXt9LGY9InN0cmluZyI9PXR5cGVvZiBjP2Muc3BsaXQoIiAiKTpbY107ND5kO2QrKyllW2ErVltkXStiXT1mW2RdfHxmW2QtMl18fGZbMF07cmV0dXJuIGV9fSxOYS50ZXN0KGEpfHwobi5jc3NIb29rc1thK2JdLnNldD1kYil9KSxuLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXt9LGc9MDtpZihuLmlzQXJyYXkoYikpe2ZvcihkPVJhKGEpLGU9Yi5sZW5ndGg7ZT5nO2crKylmW2JbZ11dPW4uY3NzKGEsYltnXSwhMSxkKTtyZXR1cm4gZn1yZXR1cm4gdm9pZCAwIT09Yz9uLnN0eWxlKGEsYixjKTpuLmNzcyhhLGIpfSxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBjYih0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBjYih0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGE/YT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtXKHRoaXMpP24odGhpcykuc2hvdygpOm4odGhpcykuaGlkZSgpfSl9fSk7ZnVuY3Rpb24gZ2IoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IGdiLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9bi5Ud2Vlbj1nYixnYi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmdiLGluaXQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMuZWFzaW5nPWV8fG4uZWFzaW5nLl9kZWZhdWx0LHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1kLHRoaXMudW5pdD1mfHwobi5jc3NOdW1iZXJbY10/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBhPWdiLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBhJiZhLmdldD9hLmdldCh0aGlzKTpnYi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oYSl7dmFyIGIsYz1nYi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPWI9bi5lYXNpbmdbdGhpcy5lYXNpbmddKGEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9Yj1hLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOmdiLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LGdiLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1nYi5wcm90b3R5cGUsZ2IucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiAxIT09YS5lbGVtLm5vZGVUeXBlfHxudWxsIT1hLmVsZW1bYS5wcm9wXSYmbnVsbD09YS5lbGVtLnN0eWxlW2EucHJvcF0/YS5lbGVtW2EucHJvcF06KGI9bi5jc3MoYS5lbGVtLGEucHJvcCwiIiksYiYmImF1dG8iIT09Yj9iOjApfSxzZXQ6ZnVuY3Rpb24oYSl7bi5meC5zdGVwW2EucHJvcF0/bi5meC5zdGVwW2EucHJvcF0oYSk6MSE9PWEuZWxlbS5ub2RlVHlwZXx8bnVsbD09YS5lbGVtLnN0eWxlW24uY3NzUHJvcHNbYS5wcm9wXV0mJiFuLmNzc0hvb2tzW2EucHJvcF0/YS5lbGVtW2EucHJvcF09YS5ub3c6bi5zdHlsZShhLmVsZW0sYS5wcm9wLGEubm93K2EudW5pdCl9fX0sZ2IucHJvcEhvb2tzLnNjcm9sbFRvcD1nYi5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGEpe2EuZWxlbS5ub2RlVHlwZSYmYS5lbGVtLnBhcmVudE5vZGUmJihhLmVsZW1bYS5wcm9wXT1hLm5vdyl9fSxuLmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxzd2luZzpmdW5jdGlvbihhKXtyZXR1cm4uNS1NYXRoLmNvcyhhKk1hdGguUEkpLzJ9LF9kZWZhdWx0OiJzd2luZyJ9LG4uZng9Z2IucHJvdG90eXBlLmluaXQsbi5meC5zdGVwPXt9O3ZhciBoYixpYixqYj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sa2I9L3F1ZXVlSG9va3MkLztmdW5jdGlvbiBsYigpe3JldHVybiBhLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtoYj12b2lkIDB9KSxoYj1uLm5vdygpfWZ1bmN0aW9uIG1iKGEsYil7dmFyIGMsZD17aGVpZ2h0OmF9LGU9MDtmb3IoYj1iPzE6MDs0PmU7ZSs9Mi1iKWM9VltlXSxkWyJtYXJnaW4iK2NdPWRbInBhZGRpbmciK2NdPWE7cmV0dXJuIGImJihkLm9wYWNpdHk9ZC53aWR0aD1hKSxkfWZ1bmN0aW9uIG5iKGEsYixjKXtmb3IodmFyIGQsZT0ocWIudHdlZW5lcnNbYl18fFtdKS5jb25jYXQocWIudHdlZW5lcnNbIioiXSksZj0wLGc9ZS5sZW5ndGg7Zz5mO2YrKylpZihkPWVbZl0uY2FsbChjLGIsYSkpcmV0dXJuIGR9ZnVuY3Rpb24gb2IoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbT10aGlzLG89e30scD1hLnN0eWxlLHE9YS5ub2RlVHlwZSYmVyhhKSxyPW4uX2RhdGEoYSwiZnhzaG93Iik7Yy5xdWV1ZXx8KGg9bi5fcXVldWVIb29rcyhhLCJmeCIpLG51bGw9PWgudW5xdWV1ZWQmJihoLnVucXVldWVkPTAsaT1oLmVtcHR5LmZpcmUsaC5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7aC51bnF1ZXVlZHx8aSgpfSksaC51bnF1ZXVlZCsrLG0uYWx3YXlzKGZ1bmN0aW9uKCl7bS5hbHdheXMoZnVuY3Rpb24oKXtoLnVucXVldWVkLS0sbi5xdWV1ZShhLCJmeCIpLmxlbmd0aHx8aC5lbXB0eS5maXJlKCl9KX0pKSwxPT09YS5ub2RlVHlwZSYmKCJoZWlnaHQiaW4gYnx8IndpZHRoImluIGIpJiYoYy5vdmVyZmxvdz1bcC5vdmVyZmxvdyxwLm92ZXJmbG93WCxwLm92ZXJmbG93WV0saj1uLmNzcyhhLCJkaXNwbGF5Iiksaz0ibm9uZSI9PT1qP24uX2RhdGEoYSwib2xkZGlzcGxheSIpfHxNYShhLm5vZGVOYW1lKTpqLCJpbmxpbmUiPT09ayYmIm5vbmUiPT09bi5jc3MoYSwiZmxvYXQiKSYmKGwuaW5saW5lQmxvY2tOZWVkc0xheW91dCYmImlubGluZSIhPT1NYShhLm5vZGVOYW1lKT9wLnpvb209MTpwLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxjLm92ZXJmbG93JiYocC5vdmVyZmxvdz0iaGlkZGVuIixsLnNocmlua1dyYXBCbG9ja3MoKXx8bS5hbHdheXMoZnVuY3Rpb24oKXtwLm92ZXJmbG93PWMub3ZlcmZsb3dbMF0scC5vdmVyZmxvd1g9Yy5vdmVyZmxvd1sxXSxwLm92ZXJmbG93WT1jLm92ZXJmbG93WzJdfSkpO2ZvcihkIGluIGIpaWYoZT1iW2RdLGpiLmV4ZWMoZSkpe2lmKGRlbGV0ZSBiW2RdLGY9Znx8InRvZ2dsZSI9PT1lLGU9PT0ocT8iaGlkZSI6InNob3ciKSl7aWYoInNob3ciIT09ZXx8IXJ8fHZvaWQgMD09PXJbZF0pY29udGludWU7cT0hMH1vW2RdPXImJnJbZF18fG4uc3R5bGUoYSxkKX1lbHNlIGo9dm9pZCAwO2lmKG4uaXNFbXB0eU9iamVjdChvKSkiaW5saW5lIj09PSgibm9uZSI9PT1qP01hKGEubm9kZU5hbWUpOmopJiYocC5kaXNwbGF5PWopO2Vsc2V7cj8iaGlkZGVuImluIHImJihxPXIuaGlkZGVuKTpyPW4uX2RhdGEoYSwiZnhzaG93Iix7fSksZiYmKHIuaGlkZGVuPSFxKSxxP24oYSkuc2hvdygpOm0uZG9uZShmdW5jdGlvbigpe24oYSkuaGlkZSgpfSksbS5kb25lKGZ1bmN0aW9uKCl7dmFyIGI7bi5fcmVtb3ZlRGF0YShhLCJmeHNob3ciKTtmb3IoYiBpbiBvKW4uc3R5bGUoYSxiLG9bYl0pfSk7Zm9yKGQgaW4gbylnPW5iKHE/cltkXTowLGQsbSksZCBpbiByfHwocltkXT1nLnN0YXJ0LHEmJihnLmVuZD1nLnN0YXJ0LGcuc3RhcnQ9IndpZHRoIj09PWR8fCJoZWlnaHQiPT09ZD8xOjApKX19ZnVuY3Rpb24gcGIoYSxiKXt2YXIgYyxkLGUsZixnO2ZvcihjIGluIGEpaWYoZD1uLmNhbWVsQ2FzZShjKSxlPWJbZF0sZj1hW2NdLG4uaXNBcnJheShmKSYmKGU9ZlsxXSxmPWFbY109ZlswXSksYyE9PWQmJihhW2RdPWYsZGVsZXRlIGFbY10pLGc9bi5jc3NIb29rc1tkXSxnJiYiZXhwYW5kImluIGcpe2Y9Zy5leHBhbmQoZiksZGVsZXRlIGFbZF07Zm9yKGMgaW4gZiljIGluIGF8fChhW2NdPWZbY10sYltjXT1lKX1lbHNlIGJbZF09ZX1mdW5jdGlvbiBxYihhLGIsYyl7dmFyIGQsZSxmPTAsZz1xYi5wcmVmaWx0ZXJzLmxlbmd0aCxoPW4uRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgaS5lbGVtfSksaT1mdW5jdGlvbigpe2lmKGUpcmV0dXJuITE7Zm9yKHZhciBiPWhifHxsYigpLGM9TWF0aC5tYXgoMCxqLnN0YXJ0VGltZStqLmR1cmF0aW9uLWIpLGQ9Yy9qLmR1cmF0aW9ufHwwLGY9MS1kLGc9MCxpPWoudHdlZW5zLmxlbmd0aDtpPmc7ZysrKWoudHdlZW5zW2ddLnJ1bihmKTtyZXR1cm4gaC5ub3RpZnlXaXRoKGEsW2osZixjXSksMT5mJiZpP2M6KGgucmVzb2x2ZVdpdGgoYSxbal0pLCExKX0saj1oLnByb21pc2Uoe2VsZW06YSxwcm9wczpuLmV4dGVuZCh7fSxiKSxvcHRzOm4uZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9LGVhc2luZzpuLmVhc2luZy5fZGVmYXVsdH0sYyksb3JpZ2luYWxQcm9wZXJ0aWVzOmIsb3JpZ2luYWxPcHRpb25zOmMsc3RhcnRUaW1lOmhifHxsYigpLGR1cmF0aW9uOmMuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9bi5Ud2VlbihhLGoub3B0cyxiLGMsai5vcHRzLnNwZWNpYWxFYXNpbmdbYl18fGoub3B0cy5lYXNpbmcpO3JldHVybiBqLnR3ZWVucy5wdXNoKGQpLGR9LHN0b3A6ZnVuY3Rpb24oYil7dmFyIGM9MCxkPWI/ai50d2VlbnMubGVuZ3RoOjA7aWYoZSlyZXR1cm4gdGhpcztmb3IoZT0hMDtkPmM7YysrKWoudHdlZW5zW2NdLnJ1bigxKTtyZXR1cm4gYj8oaC5ub3RpZnlXaXRoKGEsW2osMSwwXSksaC5yZXNvbHZlV2l0aChhLFtqLGJdKSk6aC5yZWplY3RXaXRoKGEsW2osYl0pLHRoaXN9fSksaz1qLnByb3BzO2ZvcihwYihrLGoub3B0cy5zcGVjaWFsRWFzaW5nKTtnPmY7ZisrKWlmKGQ9cWIucHJlZmlsdGVyc1tmXS5jYWxsKGosYSxrLGoub3B0cykpcmV0dXJuIG4uaXNGdW5jdGlvbihkLnN0b3ApJiYobi5fcXVldWVIb29rcyhqLmVsZW0sai5vcHRzLnF1ZXVlKS5zdG9wPW4ucHJveHkoZC5zdG9wLGQpKSxkO3JldHVybiBuLm1hcChrLG5iLGopLG4uaXNGdW5jdGlvbihqLm9wdHMuc3RhcnQpJiZqLm9wdHMuc3RhcnQuY2FsbChhLGopLG4uZngudGltZXIobi5leHRlbmQoaSx7ZWxlbTphLGFuaW06aixxdWV1ZTpqLm9wdHMucXVldWV9KSksai5wcm9ncmVzcyhqLm9wdHMucHJvZ3Jlc3MpLmRvbmUoai5vcHRzLmRvbmUsai5vcHRzLmNvbXBsZXRlKS5mYWlsKGoub3B0cy5mYWlsKS5hbHdheXMoai5vcHRzLmFsd2F5cyl9bi5BbmltYXRpb249bi5leHRlbmQocWIse3R3ZWVuZXJzOnsiKiI6W2Z1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jcmVhdGVUd2VlbihhLGIpO3JldHVybiBYKGMuZWxlbSxhLFUuZXhlYyhiKSxjKSxjfV19LHR3ZWVuZXI6ZnVuY3Rpb24oYSxiKXtuLmlzRnVuY3Rpb24oYSk/KGI9YSxhPVsiKiJdKTphPWEubWF0Y2goRyk7Zm9yKHZhciBjLGQ9MCxlPWEubGVuZ3RoO2U+ZDtkKyspYz1hW2RdLHFiLnR3ZWVuZXJzW2NdPXFiLnR3ZWVuZXJzW2NdfHxbXSxxYi50d2VlbmVyc1tjXS51bnNoaWZ0KGIpfSxwcmVmaWx0ZXJzOltvYl0scHJlZmlsdGVyOmZ1bmN0aW9uKGEsYil7Yj9xYi5wcmVmaWx0ZXJzLnVuc2hpZnQoYSk6cWIucHJlZmlsdGVycy5wdXNoKGEpfX0pLG4uc3BlZWQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEmJiJvYmplY3QiPT10eXBlb2YgYT9uLmV4dGVuZCh7fSxhKTp7Y29tcGxldGU6Y3x8IWMmJmJ8fG4uaXNGdW5jdGlvbihhKSYmYSxkdXJhdGlvbjphLGVhc2luZzpjJiZifHxiJiYhbi5pc0Z1bmN0aW9uKGIpJiZifTtyZXR1cm4gZC5kdXJhdGlvbj1uLmZ4Lm9mZj8wOiJudW1iZXIiPT10eXBlb2YgZC5kdXJhdGlvbj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gbi5meC5zcGVlZHM/bi5meC5zcGVlZHNbZC5kdXJhdGlvbl06bi5meC5zcGVlZHMuX2RlZmF1bHQsbnVsbCE9ZC5xdWV1ZSYmZC5xdWV1ZSE9PSEwfHwoZC5xdWV1ZT0iZngiKSxkLm9sZD1kLmNvbXBsZXRlLGQuY29tcGxldGU9ZnVuY3Rpb24oKXtuLmlzRnVuY3Rpb24oZC5vbGQpJiZkLm9sZC5jYWxsKHRoaXMpLGQucXVldWUmJm4uZGVxdWV1ZSh0aGlzLGQucXVldWUpfSxkfSxuLmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmZpbHRlcihXKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1uLmlzRW1wdHlPYmplY3QoYSksZj1uLnNwZWVkKGIsYyxkKSxnPWZ1bmN0aW9uKCl7dmFyIGI9cWIodGhpcyxuLmV4dGVuZCh7fSxhKSxmKTsoZXx8bi5fZGF0YSh0aGlzLCJmaW5pc2giKSkmJmIuc3RvcCghMCl9O3JldHVybiBnLmZpbmlzaD1nLGV8fGYucXVldWU9PT0hMT90aGlzLmVhY2goZyk6dGhpcy5xdWV1ZShmLnF1ZXVlLGcpfSxzdG9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1mdW5jdGlvbihhKXt2YXIgYj1hLnN0b3A7ZGVsZXRlIGEuc3RvcCxiKGMpfTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGEmJihjPWIsYj1hLGE9dm9pZCAwKSxiJiZhIT09ITEmJnRoaXMucXVldWUoYXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ITAsZT1udWxsIT1hJiZhKyJxdWV1ZUhvb2tzIixmPW4udGltZXJzLGc9bi5fZGF0YSh0aGlzKTtpZihlKWdbZV0mJmdbZV0uc3RvcCYmZChnW2VdKTtlbHNlIGZvcihlIGluIGcpZ1tlXSYmZ1tlXS5zdG9wJiZrYi50ZXN0KGUpJiZkKGdbZV0pO2ZvcihlPWYubGVuZ3RoO2UtLTspZltlXS5lbGVtIT09dGhpc3x8bnVsbCE9YSYmZltlXS5xdWV1ZSE9PWF8fChmW2VdLmFuaW0uc3RvcChjKSxiPSExLGYuc3BsaWNlKGUsMSkpOyFiJiZjfHxuLmRlcXVldWUodGhpcyxhKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT0hMSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGIsYz1uLl9kYXRhKHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tzIl0sZj1uLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbi5xdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCksYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1hJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5iO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgYy5maW5pc2h9KX19KSxuLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bi5mbltiXTtuLmZuW2JdPWZ1bmN0aW9uKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUobWIoYiwhMCksYSxkLGUpfX0pLG4uZWFjaCh7c2xpZGVEb3duOm1iKCJzaG93Iiksc2xpZGVVcDptYigiaGlkZSIpLHNsaWRlVG9nZ2xlOm1iKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxuLnRpbWVycz1bXSxuLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPW4udGltZXJzLGM9MDtmb3IoaGI9bi5ub3coKTtjPGIubGVuZ3RoO2MrKylhPWJbY10sYSgpfHxiW2NdIT09YXx8Yi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxuLmZ4LnN0b3AoKSxoYj12b2lkIDB9LG4uZngudGltZXI9ZnVuY3Rpb24oYSl7bi50aW1lcnMucHVzaChhKSxhKCk/bi5meC5zdGFydCgpOm4udGltZXJzLnBvcCgpfSxuLmZ4LmludGVydmFsPTEzLG4uZnguc3RhcnQ9ZnVuY3Rpb24oKXtpYnx8KGliPWEuc2V0SW50ZXJ2YWwobi5meC50aWNrLG4uZnguaW50ZXJ2YWwpKX0sbi5meC5zdG9wPWZ1bmN0aW9uKCl7YS5jbGVhckludGVydmFsKGliKSxpYj1udWxsfSxuLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxuLmZuLmRlbGF5PWZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9bi5meD9uLmZ4LnNwZWVkc1tiXXx8YjpiLGM9Y3x8ImZ4Iix0aGlzLnF1ZXVlKGMsZnVuY3Rpb24oYyxkKXt2YXIgZT1hLnNldFRpbWVvdXQoYyxiKTtkLnN0b3A9ZnVuY3Rpb24oKXthLmNsZWFyVGltZW91dChlKX19KX0sZnVuY3Rpb24oKXt2YXIgYSxiPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxjPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksZT1kLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGY9ZS5hcHBlbmRDaGlsZChkLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTtjPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksYy5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxjLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixhPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxiLnNldEF0dHJpYnV0ZSgidHlwZSIsImNoZWNrYm94IiksYy5hcHBlbmRDaGlsZChiKSxhPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxhLnN0eWxlLmNzc1RleHQ9InRvcDoxcHgiLGwuZ2V0U2V0QXR0cmlidXRlPSJ0IiE9PWMuY2xhc3NOYW1lLGwuc3R5bGU9L3RvcC8udGVzdChhLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksbC5ocmVmTm9ybWFsaXplZD0iL2EiPT09YS5nZXRBdHRyaWJ1dGUoImhyZWYiKSxsLmNoZWNrT249ISFiLnZhbHVlLGwub3B0U2VsZWN0ZWQ9Zi5zZWxlY3RlZCxsLmVuY3R5cGU9ISFkLmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGUuZGlzYWJsZWQ9ITAsbC5vcHREaXNhYmxlZD0hZi5kaXNhYmxlZCxiPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxiLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSxsLmlucHV0PSIiPT09Yi5nZXRBdHRyaWJ1dGUoInZhbHVlIiksYi52YWx1ZT0idCIsYi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGwucmFkaW9WYWx1ZT0idCI9PT1iLnZhbHVlfSgpO3ZhciByYj0vXHIvZyxzYj0vW1x4MjBcdFxyXG5cZl0rL2c7bi5mbi5leHRlbmQoe3ZhbDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBkPW4uaXNGdW5jdGlvbihhKSx0aGlzLmVhY2goZnVuY3Rpb24oYyl7dmFyIGU7MT09PXRoaXMubm9kZVR5cGUmJihlPWQ/YS5jYWxsKHRoaXMsYyxuKHRoaXMpLnZhbCgpKTphLG51bGw9PWU/ZT0iIjoibnVtYmVyIj09dHlwZW9mIGU/ZSs9IiI6bi5pc0FycmF5KGUpJiYoZT1uLm1hcChlLGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hPyIiOmErIiJ9KSksYj1uLnZhbEhvb2tzW3RoaXMudHlwZV18fG4udmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxiJiYic2V0ImluIGImJnZvaWQgMCE9PWIuc2V0KHRoaXMsZSwidmFsdWUiKXx8KHRoaXMudmFsdWU9ZSkpfSk7aWYoZSlyZXR1cm4gYj1uLnZhbEhvb2tzW2UudHlwZV18fG4udmFsSG9va3NbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxiJiYiZ2V0ImluIGImJnZvaWQgMCE9PShjPWIuZ2V0KGUsInZhbHVlIikpP2M6KGM9ZS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIGM/Yy5yZXBsYWNlKHJiLCIiKTpudWxsPT1jPyIiOmMpfX19KSxuLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPW4uZmluZC5hdHRyKGEsInZhbHVlIik7cmV0dXJuIG51bGwhPWI/YjpuLnRyaW0obi50ZXh0KGEpKS5yZXBsYWNlKHNiLCIgIil9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkPWEub3B0aW9ucyxlPWEuc2VsZWN0ZWRJbmRleCxmPSJzZWxlY3Qtb25lIj09PWEudHlwZXx8MD5lLGc9Zj9udWxsOltdLGg9Zj9lKzE6ZC5sZW5ndGgsaT0wPmU/aDpmP2U6MDtoPmk7aSsrKWlmKGM9ZFtpXSwoYy5zZWxlY3RlZHx8aT09PWUpJiYobC5vcHREaXNhYmxlZD8hYy5kaXNhYmxlZDpudWxsPT09Yy5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikpJiYoIWMucGFyZW50Tm9kZS5kaXNhYmxlZHx8IW4ubm9kZU5hbWUoYy5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYoYj1uKGMpLnZhbCgpLGYpcmV0dXJuIGI7Zy5wdXNoKGIpfXJldHVybiBnfSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9YS5vcHRpb25zLGY9bi5tYWtlQXJyYXkoYiksZz1lLmxlbmd0aDt3aGlsZShnLS0paWYoZD1lW2ddLG4uaW5BcnJheShuLnZhbEhvb2tzLm9wdGlvbi5nZXQoZCksZik+LTEpdHJ5e2Quc2VsZWN0ZWQ9Yz0hMH1jYXRjaChoKXtkLnNjcm9sbEhlaWdodH1lbHNlIGQuc2VsZWN0ZWQ9ITE7cmV0dXJuIGN8fChhLnNlbGVjdGVkSW5kZXg9LTEpLGV9fX19KSxuLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtuLnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbi5pc0FycmF5KGIpP2EuY2hlY2tlZD1uLmluQXJyYXkobihhKS52YWwoKSxiKT4tMTp2b2lkIDB9fSxsLmNoZWNrT258fChuLnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09PWEuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6YS52YWx1ZX0pfSk7dmFyIHRiLHViLHZiPW4uZXhwci5hdHRySGFuZGxlLHdiPS9eKD86Y2hlY2tlZHxzZWxlY3RlZCkkL2kseGI9bC5nZXRTZXRBdHRyaWJ1dGUseWI9bC5pbnB1dDtuLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBZKHRoaXMsbi5hdHRyLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLnJlbW92ZUF0dHIodGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9YS5ub2RlVHlwZTtpZigzIT09ZiYmOCE9PWYmJjIhPT1mKXJldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgYS5nZXRBdHRyaWJ1dGU/bi5wcm9wKGEsYixjKTooMT09PWYmJm4uaXNYTUxEb2MoYSl8fChiPWIudG9Mb3dlckNhc2UoKSxlPW4uYXR0ckhvb2tzW2JdfHwobi5leHByLm1hdGNoLmJvb2wudGVzdChiKT91Yjp0YikpLHZvaWQgMCE9PWM/bnVsbD09PWM/dm9pZCBuLnJlbW92ZUF0dHIoYSxiKTplJiYic2V0ImluIGUmJnZvaWQgMCE9PShkPWUuc2V0KGEsYyxiKSk/ZDooYS5zZXRBdHRyaWJ1dGUoYixjKyIiKSxjKTplJiYiZ2V0ImluIGUmJm51bGwhPT0oZD1lLmdldChhLGIpKT9kOihkPW4uZmluZC5hdHRyKGEsYiksbnVsbD09ZD92b2lkIDA6ZCkpfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihhLGIpe2lmKCFsLnJhZGlvVmFsdWUmJiJyYWRpbyI9PT1iJiZuLm5vZGVOYW1lKGEsImlucHV0Iikpe3ZhciBjPWEudmFsdWU7cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKSxifX19fSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPTAsZj1iJiZiLm1hdGNoKEcpO2lmKGYmJjE9PT1hLm5vZGVUeXBlKXdoaWxlKGM9ZltlKytdKWQ9bi5wcm9wRml4W2NdfHxjLG4uZXhwci5tYXRjaC5ib29sLnRlc3QoYyk/eWImJnhifHwhd2IudGVzdChjKT9hW2RdPSExOmFbbi5jYW1lbENhc2UoImRlZmF1bHQtIitjKV09YVtkXT0hMTpuLmF0dHIoYSxjLCIiKSxhLnJlbW92ZUF0dHJpYnV0ZSh4Yj9jOmQpfX0pLHViPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPT09ITE/bi5yZW1vdmVBdHRyKGEsYyk6eWImJnhifHwhd2IudGVzdChjKT9hLnNldEF0dHJpYnV0ZSgheGImJm4ucHJvcEZpeFtjXXx8YyxjKTphW24uY2FtZWxDYXNlKCJkZWZhdWx0LSIrYyldPWFbY109ITAsY319LG4uZWFjaChuLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihhLGIpe3ZhciBjPXZiW2JdfHxuLmZpbmQuYXR0cjt5YiYmeGJ8fCF3Yi50ZXN0KGIpP3ZiW2JdPWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxmO3JldHVybiBkfHwoZj12YltiXSx2YltiXT1lLGU9bnVsbCE9YyhhLGIsZCk/Yi50b0xvd2VyQ2FzZSgpOm51bGwsdmJbYl09ZiksZX06dmJbYl09ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP3ZvaWQgMDphW24uY2FtZWxDYXNlKCJkZWZhdWx0LSIrYildP2IudG9Mb3dlckNhc2UoKTpudWxsfX0pLHliJiZ4Ynx8KG4uYXR0ckhvb2tzLnZhbHVlPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuLm5vZGVOYW1lKGEsImlucHV0Iik/dm9pZChhLmRlZmF1bHRWYWx1ZT1iKTp0YiYmdGIuc2V0KGEsYixjKX19KSx4Ynx8KHRiPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0QXR0cmlidXRlTm9kZShjKTtyZXR1cm4gZHx8YS5zZXRBdHRyaWJ1dGVOb2RlKGQ9YS5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZShjKSksZC52YWx1ZT1iKz0iIiwidmFsdWUiPT09Y3x8Yj09PWEuZ2V0QXR0cmlidXRlKGMpP2I6dm9pZCAwfX0sdmIuaWQ9dmIubmFtZT12Yi5jb29yZHM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBjP3ZvaWQgMDooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiYiIiE9PWQudmFsdWU/ZC52YWx1ZTpudWxsfSxuLnZhbEhvb2tzLmJ1dHRvbj17Z2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpO3JldHVybiBjJiZjLnNwZWNpZmllZD9jLnZhbHVlOnZvaWQgMH0sc2V0OnRiLnNldH0sbi5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3RiLnNldChhLCIiPT09Yj8hMTpiLGMpfX0sbi5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGIpe24uYXR0ckhvb2tzW2JdPXtzZXQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4iIj09PWM/KGEuc2V0QXR0cmlidXRlKGIsImF1dG8iKSxjKTp2b2lkIDB9fX0pKSxsLnN0eWxlfHwobi5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0fHx2b2lkIDB9LHNldDpmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0eWxlLmNzc1RleHQ9YisiIn19KTt2YXIgemI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkL2ksQWI9L14oPzphfGFyZWEpJC9pO24uZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFkodGhpcyxuLnByb3AsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9bi5wcm9wRml4W2FdfHxhLHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXt0aGlzW2FdPXZvaWQgMCxkZWxldGUgdGhpc1thXX1jYXRjaChiKXt9fSl9fSksbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj1hLm5vZGVUeXBlO2lmKDMhPT1mJiY4IT09ZiYmMiE9PWYpcmV0dXJuIDE9PT1mJiZuLmlzWE1MRG9jKGEpfHwoYj1uLnByb3BGaXhbYl18fGIsZT1uLnByb3BIb29rc1tiXSksdm9pZCAwIT09Yz9lJiYic2V0ImluIGUmJnZvaWQgMCE9PShkPWUuc2V0KGEsYyxiKSk/ZDphW2JdPWM6ZSYmImdldCJpbiBlJiZudWxsIT09KGQ9ZS5nZXQoYSxiKSk/ZDphW2JdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bi5maW5kLmF0dHIoYSwidGFiaW5kZXgiKTtyZXR1cm4gYj9wYXJzZUludChiLDEwKTp6Yi50ZXN0KGEubm9kZU5hbWUpfHxBYi50ZXN0KGEubm9kZU5hbWUpJiZhLmhyZWY/MDotMX19fSxwcm9wRml4OnsiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIn19KSxsLmhyZWZOb3JtYWxpemVkfHxuLmVhY2goWyJocmVmIiwic3JjIl0sZnVuY3Rpb24oYSxiKXtuLnByb3BIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZShiLDQpfX19KSxsLm9wdFNlbGVjdGVkfHwobi5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH0sc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtiJiYoYi5zZWxlY3RlZEluZGV4LGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpfX0pLG4uZWFjaChbInRhYkluZGV4IiwicmVhZE9ubHkiLCJtYXhMZW5ndGgiLCJjZWxsU3BhY2luZyIsImNlbGxQYWRkaW5nIiwicm93U3BhbiIsImNvbFNwYW4iLCJ1c2VNYXAiLCJmcmFtZUJvcmRlciIsImNvbnRlbnRFZGl0YWJsZSJdLGZ1bmN0aW9uKCl7bi5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pLGwuZW5jdHlwZXx8KG4ucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyIpO3ZhciBCYj0vW1x0XHJcblxmXS9nO2Z1bmN0aW9uIENiKGEpe3JldHVybiBuLmF0dHIoYSwiY2xhc3MiKXx8IiJ9bi5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk9MDtpZihuLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsQ2IodGhpcykpKX0pO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmYSl7Yj1hLm1hdGNoKEcpfHxbXTt3aGlsZShjPXRoaXNbaSsrXSlpZihlPUNiKGMpLGQ9MT09PWMubm9kZVR5cGUmJigiICIrZSsiICIpLnJlcGxhY2UoQmIsIiAiKSl7Zz0wO3doaWxlKGY9YltnKytdKWQuaW5kZXhPZigiICIrZisiICIpPDAmJihkKz1mKyIgIik7aD1uLnRyaW0oZCksZSE9PWgmJm4uYXR0cihjLCJjbGFzcyIsaCl9fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpPTA7aWYobi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLENiKHRoaXMpKSl9KTtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5hdHRyKCJjbGFzcyIsIiIpO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmYSl7Yj1hLm1hdGNoKEcpfHxbXTt3aGlsZShjPXRoaXNbaSsrXSlpZihlPUNiKGMpLGQ9MT09PWMubm9kZVR5cGUmJigiICIrZSsiICIpLnJlcGxhY2UoQmIsIiAiKSl7Zz0wO3doaWxlKGY9YltnKytdKXdoaWxlKGQuaW5kZXhPZigiICIrZisiICIpPi0xKWQ9ZC5yZXBsYWNlKCIgIitmKyIgIiwiICIpO2g9bi50cmltKGQpLGUhPT1oJiZuLmF0dHIoYywiY2xhc3MiLGgpfX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBiJiYic3RyaW5nIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6bi5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihjKXtuKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsQ2IodGhpcyksYiksYil9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYixkLGUsZjtpZigic3RyaW5nIj09PWMpe2Q9MCxlPW4odGhpcyksZj1hLm1hdGNoKEcpfHxbXTt3aGlsZShiPWZbZCsrXSllLmhhc0NsYXNzKGIpP2UucmVtb3ZlQ2xhc3MoYik6ZS5hZGRDbGFzcyhiKX1lbHNlIHZvaWQgMCE9PWEmJiJib29sZWFuIiE9PWN8fChiPUNiKHRoaXMpLGImJm4uX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIsYiksbi5hdHRyKHRoaXMsImNsYXNzIixifHxhPT09ITE/IiI6bi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIiKSl9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPTA7Yj0iICIrYSsiICI7d2hpbGUoYz10aGlzW2QrK10paWYoMT09PWMubm9kZVR5cGUmJigiICIrQ2IoYykrIiAiKS5yZXBsYWNlKEJiLCIgIikuaW5kZXhPZihiKT4tMSlyZXR1cm4hMDtyZXR1cm4hMX19KSxuLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtuLmZuW2JdPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX19KSxuLmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9fSk7dmFyIERiPWEubG9jYXRpb24sRWI9bi5ub3coKSxGYj0vXD8vLEdiPS8oLCl8KFxbfHspfCh9fF0pfCIoPzpbXiJcXFxyXG5dfFxcWyJcXFwvYmZucnRdfFxcdVtcZGEtZkEtRl17NH0pKiJccyo6P3x0cnVlfGZhbHNlfG51bGx8LT8oPyEwXGQpXGQrKD86XC5cZCt8KSg/OltlRV1bKy1dP1xkK3wpL2c7bi5wYXJzZUpTT049ZnVuY3Rpb24oYil7aWYoYS5KU09OJiZhLkpTT04ucGFyc2UpcmV0dXJuIGEuSlNPTi5wYXJzZShiKyIiKTt2YXIgYyxkPW51bGwsZT1uLnRyaW0oYisiIik7cmV0dXJuIGUmJiFuLnRyaW0oZS5yZXBsYWNlKEdiLGZ1bmN0aW9uKGEsYixlLGYpe3JldHVybiBjJiZiJiYoZD0wKSwwPT09ZD9hOihjPWV8fGIsZCs9IWYtIWUsIiIpfSkpP0Z1bmN0aW9uKCJyZXR1cm4gIitlKSgpOm4uZXJyb3IoIkludmFsaWQgSlNPTjogIitiKX0sbi5wYXJzZVhNTD1mdW5jdGlvbihiKXt2YXIgYyxkO2lmKCFifHwic3RyaW5nIiE9dHlwZW9mIGIpcmV0dXJuIG51bGw7dHJ5e2EuRE9NUGFyc2VyPyhkPW5ldyBhLkRPTVBhcnNlcixjPWQucGFyc2VGcm9tU3RyaW5nKGIsInRleHQveG1sIikpOihjPW5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxjLmFzeW5jPSJmYWxzZSIsYy5sb2FkWE1MKGIpKX1jYXRjaChlKXtjPXZvaWQgMH1yZXR1cm4gYyYmYy5kb2N1bWVudEVsZW1lbnQmJiFjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8bi5lcnJvcigiSW52YWxpZCBYTUw6ICIrYiksY307dmFyIEhiPS8jLiokLyxJYj0vKFs/Jl0pXz1bXiZdKi8sSmI9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9nbSxLYj0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxMYj0vXig/OkdFVHxIRUFEKSQvLE1iPS9eXC9cLy8sTmI9L14oW1x3ListXSs6KSg/OlwvXC8oPzpbXlwvPyNdKkB8KShbXlwvPyM6XSopKD86OihcZCspfCl8KS8sT2I9e30sUGI9e30sUWI9IiovIi5jb25jYXQoIioiKSxSYj1EYi5ocmVmLFNiPU5iLmV4ZWMoUmIudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIFRiKGEpe3JldHVybiBmdW5jdGlvbihiLGMpeyJzdHJpbmciIT10eXBlb2YgYiYmKGM9YixiPSIqIik7dmFyIGQsZT0wLGY9Yi50b0xvd2VyQ2FzZSgpLm1hdGNoKEcpfHxbXTtpZihuLmlzRnVuY3Rpb24oYykpd2hpbGUoZD1mW2UrK10pIisiPT09ZC5jaGFyQXQoMCk/KGQ9ZC5zbGljZSgxKXx8IioiLChhW2RdPWFbZF18fFtdKS51bnNoaWZ0KGMpKTooYVtkXT1hW2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24gVWIoYSxiLGMsZCl7dmFyIGU9e30sZj1hPT09UGI7ZnVuY3Rpb24gZyhoKXt2YXIgaTtyZXR1cm4gZVtoXT0hMCxuLmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGp8fGZ8fGVbal0/Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGcoaiksITEpfSksaX1yZXR1cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlWyIqIl0mJmcoIioiKX1mdW5jdGlvbiBWYihhLGIpe3ZhciBjLGQsZT1uLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGQgaW4gYil2b2lkIDAhPT1iW2RdJiYoKGVbZF0/YTpjfHwoYz17fSkpW2RdPWJbZF0pO3JldHVybiBjJiZuLmV4dGVuZCghMCxhLGMpLGF9ZnVuY3Rpb24gV2IoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jb250ZW50cyxpPWEuZGF0YVR5cGVzO3doaWxlKCIqIj09PWlbMF0paS5zaGlmdCgpLHZvaWQgMD09PWUmJihlPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihlKWZvcihnIGluIGgpaWYoaFtnXSYmaFtnXS50ZXN0KGUpKXtpLnVuc2hpZnQoZyk7YnJlYWt9aWYoaVswXWluIGMpZj1pWzBdO2Vsc2V7Zm9yKGcgaW4gYyl7aWYoIWlbMF18fGEuY29udmVydGVyc1tnKyIgIitpWzBdXSl7Zj1nO2JyZWFrfWR8fChkPWcpfWY9Znx8ZH1yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gWGIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihnIGluIGEuY29udmVydGVycylqW2cudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2Y9ay5zaGlmdCgpO3doaWxlKGYpaWYoYS5yZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxkc1tmXV09YiksIWkmJmQmJmEuZGF0YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlwZSkpLGk9ZixmPWsuc2hpZnQoKSlpZigiKiI9PT1mKWY9aTtlbHNlIGlmKCIqIiE9PWkmJmkhPT1mKXtpZihnPWpbaSsiICIrZl18fGpbIiogIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdCgiICIpLGhbMV09PT1mJiYoZz1qW2krIiAiK2hbMF1dfHxqWyIqICIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhWyJ0aHJvd3MiXSliPWcoYik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmc/bDoiTm8gY29udmVyc2lvbiBmcm9tICIraSsiIHRvICIrZn19fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTpifX1uLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6UmIsdHlwZToiR0VUIixpc0xvY2FsOktiLnRlc3QoU2JbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6UWIsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L1xieG1sXGIvLGh0bWw6L1xiaHRtbC8sanNvbjovXGJqc29uXGIvfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6bi5wYXJzZUpTT04sInRleHQgeG1sIjpuLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9WYihWYihhLG4uYWpheFNldHRpbmdzKSxiKTpWYihuLmFqYXhTZXR0aW5ncyxhKX0sYWpheFByZWZpbHRlcjpUYihPYiksYWpheFRyYW5zcG9ydDpUYihQYiksYWpheDpmdW5jdGlvbihiLGMpeyJvYmplY3QiPT10eXBlb2YgYiYmKGM9YixiPXZvaWQgMCksYz1jfHx7fTt2YXIgZCxlLGYsZyxoLGksaixrLGw9bi5hamF4U2V0dXAoe30sYyksbT1sLmNvbnRleHR8fGwsbz1sLmNvbnRleHQmJihtLm5vZGVUeXBlfHxtLmpxdWVyeSk/bihtKTpuLmV2ZW50LHA9bi5EZWZlcnJlZCgpLHE9bi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iikscj1sLnN0YXR1c0NvZGV8fHt9LHM9e30sdD17fSx1PTAsdj0iY2FuY2VsZWQiLHc9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihhKXt2YXIgYjtpZigyPT09dSl7aWYoIWspe2s9e307d2hpbGUoYj1KYi5leGVjKGcpKWtbYlsxXS50b0xvd2VyQ2FzZSgpXT1iWzJdfWI9a1thLnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT1iP251bGw6Yn0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT11P2c6bnVsbH0sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTtyZXR1cm4gdXx8KGE9dFtjXT10W2NdfHxhLHNbYV09YiksdGhpc30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gdXx8KGwubWltZVR5cGU9YSksdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihhKXt2YXIgYjtpZihhKWlmKDI+dSlmb3IoYiBpbiBhKXJbYl09W3JbYl0sYVtiXV07ZWxzZSB3LmFsd2F5cyhhW3cuc3RhdHVzXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe3ZhciBiPWF8fHY7cmV0dXJuIGomJmouYWJvcnQoYikseSgwLGIpLHRoaXN9fTtpZihwLnByb21pc2UodykuY29tcGxldGU9cS5hZGQsdy5zdWNjZXNzPXcuZG9uZSx3LmVycm9yPXcuZmFpbCxsLnVybD0oKGJ8fGwudXJsfHxSYikrIiIpLnJlcGxhY2UoSGIsIiIpLnJlcGxhY2UoTWIsU2JbMV0rIi8vIiksbC50eXBlPWMubWV0aG9kfHxjLnR5cGV8fGwubWV0aG9kfHxsLnR5cGUsbC5kYXRhVHlwZXM9bi50cmltKGwuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5tYXRjaChHKXx8WyIiXSxudWxsPT1sLmNyb3NzRG9tYWluJiYoZD1OYi5leGVjKGwudXJsLnRvTG93ZXJDYXNlKCkpLGwuY3Jvc3NEb21haW49ISghZHx8ZFsxXT09PVNiWzFdJiZkWzJdPT09U2JbMl0mJihkWzNdfHwoImh0dHA6Ij09PWRbMV0/IjgwIjoiNDQzIikpPT09KFNiWzNdfHwoImh0dHA6Ij09PVNiWzFdPyI4MCI6IjQ0MyIpKSkpLGwuZGF0YSYmbC5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiBsLmRhdGEmJihsLmRhdGE9bi5wYXJhbShsLmRhdGEsbC50cmFkaXRpb25hbCkpLFViKE9iLGwsYyx3KSwyPT09dSlyZXR1cm4gdztpPW4uZXZlbnQmJmwuZ2xvYmFsLGkmJjA9PT1uLmFjdGl2ZSsrJiZuLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLGwudHlwZT1sLnR5cGUudG9VcHBlckNhc2UoKSxsLmhhc0NvbnRlbnQ9IUxiLnRlc3QobC50eXBlKSxmPWwudXJsLGwuaGFzQ29udGVudHx8KGwuZGF0YSYmKGY9bC51cmwrPShGYi50ZXN0KGYpPyImIjoiPyIpK2wuZGF0YSxkZWxldGUgbC5kYXRhKSxsLmNhY2hlPT09ITEmJihsLnVybD1JYi50ZXN0KGYpP2YucmVwbGFjZShJYiwiJDFfPSIrRWIrKyk6ZisoRmIudGVzdChmKT8iJiI6Ij8iKSsiXz0iK0ViKyspKSxsLmlmTW9kaWZpZWQmJihuLmxhc3RNb2RpZmllZFtmXSYmdy5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsbi5sYXN0TW9kaWZpZWRbZl0pLG4uZXRhZ1tmXSYmdy5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixuLmV0YWdbZl0pKSwobC5kYXRhJiZsLmhhc0NvbnRlbnQmJmwuY29udGVudFR5cGUhPT0hMXx8Yy5jb250ZW50VHlwZSkmJncuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixsLmNvbnRlbnRUeXBlKSx3LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsbC5kYXRhVHlwZXNbMF0mJmwuYWNjZXB0c1tsLmRhdGFUeXBlc1swXV0/bC5hY2NlcHRzW2wuZGF0YVR5cGVzWzBdXSsoIioiIT09bC5kYXRhVHlwZXNbMF0/IiwgIitRYisiOyBxPTAuMDEiOiIiKTpsLmFjY2VwdHNbIioiXSk7Zm9yKGUgaW4gbC5oZWFkZXJzKXcuc2V0UmVxdWVzdEhlYWRlcihlLGwuaGVhZGVyc1tlXSk7aWYobC5iZWZvcmVTZW5kJiYobC5iZWZvcmVTZW5kLmNhbGwobSx3LGwpPT09ITF8fDI9PT11KSlyZXR1cm4gdy5hYm9ydCgpO3Y9ImFib3J0Ijtmb3IoZSBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl3W2VdKGxbZV0pO2lmKGo9VWIoUGIsbCxjLHcpKXtpZih3LnJlYWR5U3RhdGU9MSxpJiZvLnRyaWdnZXIoImFqYXhTZW5kIixbdyxsXSksMj09PXUpcmV0dXJuIHc7bC5hc3luYyYmbC50aW1lb3V0PjAmJihoPWEuc2V0VGltZW91dChmdW5jdGlvbigpe3cuYWJvcnQoInRpbWVvdXQiKX0sbC50aW1lb3V0KSk7dHJ5e3U9MSxqLnNlbmQocyx5KX1jYXRjaCh4KXtpZighKDI+dSkpdGhyb3cgeDt5KC0xLHgpfX1lbHNlIHkoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIHkoYixjLGQsZSl7dmFyIGsscyx0LHYseCx5PWM7MiE9PXUmJih1PTIsaCYmYS5jbGVhclRpbWVvdXQoaCksaj12b2lkIDAsZz1lfHwiIix3LnJlYWR5U3RhdGU9Yj4wPzQ6MCxrPWI+PTIwMCYmMzAwPmJ8fDMwND09PWIsZCYmKHY9V2IobCx3LGQpKSx2PVhiKGwsdix3LGspLGs/KGwuaWZNb2RpZmllZCYmKHg9dy5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLHgmJihuLmxhc3RNb2RpZmllZFtmXT14KSx4PXcuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSx4JiYobi5ldGFnW2ZdPXgpKSwyMDQ9PT1ifHwiSEVBRCI9PT1sLnR5cGU/eT0ibm9jb250ZW50IjozMDQ9PT1iP3k9Im5vdG1vZGlmaWVkIjooeT12LnN0YXRlLHM9di5kYXRhLHQ9di5lcnJvcixrPSF0KSk6KHQ9eSwhYiYmeXx8KHk9ImVycm9yIiwwPmImJihiPTApKSksdy5zdGF0dXM9Yix3LnN0YXR1c1RleHQ9KGN8fHkpKyIiLGs/cC5yZXNvbHZlV2l0aChtLFtzLHksd10pOnAucmVqZWN0V2l0aChtLFt3LHksdF0pLHcuc3RhdHVzQ29kZShyKSxyPXZvaWQgMCxpJiZvLnRyaWdnZXIoaz8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFt3LGwsaz9zOnRdKSxxLmZpcmVXaXRoKG0sW3cseV0pLGkmJihvLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3csbF0pLC0tbi5hY3RpdmV8fG4uZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiB3fSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbi5nZXQoYSxiLGMsImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG4uZ2V0KGEsdm9pZCAwLGIsInNjcmlwdCIpfX0pLG4uZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihhLGIpe25bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIG4uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLG4uYWpheChuLmV4dGVuZCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0sbi5pc1BsYWluT2JqZWN0KGEpJiZhKSl9fSksbi5fZXZhbFVybD1mdW5jdGlvbihhKXtyZXR1cm4gbi5hamF4KHt1cmw6YSx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGNhY2hlOiEwLGFzeW5jOiExLGdsb2JhbDohMSwidGhyb3dzIjohMH0pfSxuLmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihhKXtpZihuLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk7aWYodGhpc1swXSl7dmFyIGI9bihhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RDaGlsZCYmMT09PWEuZmlyc3RDaGlsZC5ub2RlVHlwZSlhPWEuZmlyc3RDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGEpe3JldHVybiBuLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24odGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPW4odGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9bi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7bih0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe24ubm9kZU5hbWUodGhpcywiYm9keSIpfHxuKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX19KTtmdW5jdGlvbiBZYihhKXtyZXR1cm4gYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxuLmNzcyhhLCJkaXNwbGF5Iil9ZnVuY3Rpb24gWmIoYSl7aWYoIW4uY29udGFpbnMoYS5vd25lckRvY3VtZW50fHxkLGEpKXJldHVybiEwO3doaWxlKGEmJjE9PT1hLm5vZGVUeXBlKXtpZigibm9uZSI9PT1ZYihhKXx8ImhpZGRlbiI9PT1hLnR5cGUpcmV0dXJuITA7YT1hLnBhcmVudE5vZGV9cmV0dXJuITF9bi5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiBsLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cygpP2Eub2Zmc2V0V2lkdGg8PTAmJmEub2Zmc2V0SGVpZ2h0PD0wJiYhYS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aDpaYihhKX0sbi5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4hbi5leHByLmZpbHRlcnMuaGlkZGVuKGEpfTt2YXIgJGI9LyUyMC9nLF9iPS9cW1xdJC8sYWM9L1xyP1xuL2csYmM9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLGNjPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBkYyhhLGIsYyxkKXt2YXIgZTtpZihuLmlzQXJyYXkoYikpbi5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxfYi50ZXN0KGEpP2QoYSxlKTpkYyhhKyJbIisoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKGN8fCJvYmplY3QiIT09bi50eXBlKGIpKWQoYSxiKTtlbHNlIGZvcihlIGluIGIpZGMoYSsiWyIrZSsiXSIsYltlXSxjLGQpfW4ucGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9ZnVuY3Rpb24oYSxiKXtiPW4uaXNGdW5jdGlvbihiKT9iKCk6bnVsbD09Yj8iIjpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtpZih2b2lkIDA9PT1iJiYoYj1uLmFqYXhTZXR0aW5ncyYmbi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLG4uaXNBcnJheShhKXx8YS5qcXVlcnkmJiFuLmlzUGxhaW5PYmplY3QoYSkpbi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKGMgaW4gYSlkYyhjLGFbY10sYixlKTtyZXR1cm4gZC5qb2luKCImIikucmVwbGFjZSgkYiwiKyIpfSxuLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIG4ucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT1uLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gYT9uLm1ha2VBcnJheShhKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFuKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmY2MudGVzdCh0aGlzLm5vZGVOYW1lKSYmIWJjLnRlc3QoYSkmJih0aGlzLmNoZWNrZWR8fCFaLnRlc3QoYSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9bih0aGlzKS52YWwoKTtyZXR1cm4gbnVsbD09Yz9udWxsOm4uaXNBcnJheShjKT9uLm1hcChjLGZ1bmN0aW9uKGEpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoYWMsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKGFjLCJcclxuIil9fSkuZ2V0KCl9fSksbi5hamF4U2V0dGluZ3MueGhyPXZvaWQgMCE9PWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzTG9jYWw/aWMoKTpkLmRvY3VtZW50TW9kZT44P2hjKCk6L14oZ2V0fHBvc3R8aGVhZHxwdXR8ZGVsZXRlfG9wdGlvbnMpJC9pLnRlc3QodGhpcy50eXBlKSYmaGMoKXx8aWMoKX06aGM7dmFyIGVjPTAsZmM9e30sZ2M9bi5hamF4U2V0dGluZ3MueGhyKCk7YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib251bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGZjKWZjW2FdKHZvaWQgMCwhMCl9KSxsLmNvcnM9ISFnYyYmIndpdGhDcmVkZW50aWFscyJpbiBnYyxnYz1sLmFqYXg9ISFnYyxnYyYmbi5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGIpe2lmKCFiLmNyb3NzRG9tYWlufHxsLmNvcnMpe3ZhciBjO3JldHVybntzZW5kOmZ1bmN0aW9uKGQsZSl7dmFyIGYsZz1iLnhocigpLGg9KytlYztpZihnLm9wZW4oYi50eXBlLGIudXJsLGIuYXN5bmMsYi51c2VybmFtZSxiLnBhc3N3b3JkKSxiLnhockZpZWxkcylmb3IoZiBpbiBiLnhockZpZWxkcylnW2ZdPWIueGhyRmllbGRzW2ZdO2IubWltZVR5cGUmJmcub3ZlcnJpZGVNaW1lVHlwZSYmZy5vdmVycmlkZU1pbWVUeXBlKGIubWltZVR5cGUpLGIuY3Jvc3NEb21haW58fGRbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGRbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoZiBpbiBkKXZvaWQgMCE9PWRbZl0mJmcuc2V0UmVxdWVzdEhlYWRlcihmLGRbZl0rIiIpO2cuc2VuZChiLmhhc0NvbnRlbnQmJmIuZGF0YXx8bnVsbCksYz1mdW5jdGlvbihhLGQpe3ZhciBmLGksajtpZihjJiYoZHx8ND09PWcucmVhZHlTdGF0ZSkpaWYoZGVsZXRlIGZjW2hdLGM9dm9pZCAwLGcub25yZWFkeXN0YXRlY2hhbmdlPW4ubm9vcCxkKTQhPT1nLnJlYWR5U3RhdGUmJmcuYWJvcnQoKTtlbHNle2o9e30sZj1nLnN0YXR1cywic3RyaW5nIj09dHlwZW9mIGcucmVzcG9uc2VUZXh0JiYoai50ZXh0PWcucmVzcG9uc2VUZXh0KTt0cnl7aT1nLnN0YXR1c1RleHR9Y2F0Y2goayl7aT0iIn1mfHwhYi5pc0xvY2FsfHxiLmNyb3NzRG9tYWluPzEyMjM9PT1mJiYoZj0yMDQpOmY9ai50ZXh0PzIwMDo0MDR9aiYmZShmLGksaixnLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKX0sYi5hc3luYz80PT09Zy5yZWFkeVN0YXRlP2Euc2V0VGltZW91dChjKTpnLm9ucmVhZHlzdGF0ZWNoYW5nZT1mY1toXT1jOmMoKX0sYWJvcnQ6ZnVuY3Rpb24oKXtjJiZjKHZvaWQgMCwhMCl9fX19KTtmdW5jdGlvbiBoYygpe3RyeXtyZXR1cm4gbmV3IGEuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYil7fX1mdW5jdGlvbiBpYygpe3RyeXtyZXR1cm4gbmV3IGEuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKX1jYXRjaChiKXt9fW4uYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovXGIoPzpqYXZhfGVjbWEpc2NyaXB0XGIvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBuLmdsb2JhbEV2YWwoYSksYX19fSksbi5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiLGEuZ2xvYmFsPSExKX0pLG4uYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjPWQuaGVhZHx8bigiaGVhZCIpWzBdfHxkLmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihlLGYpe2I9ZC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxiLmFzeW5jPSEwLGEuc2NyaXB0Q2hhcnNldCYmKGIuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGIuc3JjPWEudXJsLGIub25sb2FkPWIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsYyl7KGN8fCFiLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoYi5yZWFkeVN0YXRlKSkmJihiLm9ubG9hZD1iLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbCxjfHxmKDIwMCwic3VjY2VzcyIpKX0sYy5pbnNlcnRCZWZvcmUoYixjLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2ImJmIub25sb2FkKHZvaWQgMCwhMCl9fX19KTt2YXIgamM9W10sa2M9Lyg9KVw/KD89JnwkKXxcP1w/LztuLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGE9amMucG9wKCl8fG4uZXhwYW5kbysiXyIrRWIrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLG4uYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZyxoPWIuanNvbnAhPT0hMSYmKGtjLnRlc3QoYi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgYi5kYXRhJiYwPT09KGIuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYma2MudGVzdChiLmRhdGEpJiYiZGF0YSIpO3JldHVybiBofHwianNvbnAiPT09Yi5kYXRhVHlwZXNbMF0/KGU9Yi5qc29ucENhbGxiYWNrPW4uaXNGdW5jdGlvbihiLmpzb25wQ2FsbGJhY2spP2IuanNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxoP2JbaF09YltoXS5yZXBsYWNlKGtjLCIkMSIrZSk6Yi5qc29ucCE9PSExJiYoYi51cmwrPShGYi50ZXN0KGIudXJsKT8iJiI6Ij8iKStiLmpzb25wKyI9IitlKSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gZ3x8bi5lcnJvcihlKyIgd2FzIG5vdCBjYWxsZWQiKSxnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiIsZj1hW2VdLGFbZV09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZC5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1mP24oYSkucmVtb3ZlUHJvcChlKTphW2VdPWYsYltlXSYmKGIuanNvbnBDYWxsYmFjaz1jLmpzb25wQ2FsbGJhY2ssamMucHVzaChlKSksZyYmbi5pc0Z1bmN0aW9uKGYpJiZmKGdbMF0pLGc9Zj12b2lkIDB9KSwic2NyaXB0Iik6dm9pZCAwfSksbi5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2YgYiYmKGM9YixiPSExKSxiPWJ8fGQ7dmFyIGU9eC5leGVjKGEpLGY9IWMmJltdO3JldHVybiBlP1tiLmNyZWF0ZUVsZW1lbnQoZVsxXSldOihlPWphKFthXSxiLGYpLGYmJmYubGVuZ3RoJiZuKGYpLnJlbW92ZSgpLG4ubWVyZ2UoW10sZS5jaGlsZE5vZGVzKSl9O3ZhciBsYz1uLmZuLmxvYWQ7bi5mbi5sb2FkPWZ1bmN0aW9uKGEsYixjKXtpZigic3RyaW5nIiE9dHlwZW9mIGEmJmxjKXJldHVybiBsYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGQsZSxmLGc9dGhpcyxoPWEuaW5kZXhPZigiICIpO3JldHVybiBoPi0xJiYoZD1uLnRyaW0oYS5zbGljZShoLGEubGVuZ3RoKSksYT1hLnNsaWNlKDAsaCkpLG4uaXNGdW5jdGlvbihiKT8oYz1iLGI9dm9pZCAwKTpiJiYib2JqZWN0Ij09dHlwZW9mIGImJihlPSJQT1NUIiksZy5sZW5ndGg+MCYmbi5hamF4KHt1cmw6YSx0eXBlOmV8fCJHRVQiLGRhdGFUeXBlOiJodG1sIixkYXRhOmJ9KS5kb25lKGZ1bmN0aW9uKGEpe2Y9YXJndW1lbnRzLGcuaHRtbChkP24oIjxkaXY+IikuYXBwZW5kKG4ucGFyc2VIVE1MKGEpKS5maW5kKGQpOmEpfSkuYWx3YXlzKGMmJmZ1bmN0aW9uKGEsYil7Zy5lYWNoKGZ1bmN0aW9uKCl7Yy5hcHBseSh0aGlzLGZ8fFthLnJlc3BvbnNlVGV4dCxiLGFdKX0pfSksdGhpc30sbi5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oYSxiKXtuLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9uKGIsYSl9fSksbi5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZ3JlcChuLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH07ZnVuY3Rpb24gbWMoYSl7cmV0dXJuIG4uaXNXaW5kb3coYSk/YTo5PT09YS5ub2RlVHlwZT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1uLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPW4uY3NzKGEsInBvc2l0aW9uIiksbD1uKGEpLG09e307InN0YXRpYyI9PT1rJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxoPWwub2Zmc2V0KCksZj1uLmNzcyhhLCJ0b3AiKSxpPW4uY3NzKGEsImxlZnQiKSxqPSgiYWJzb2x1dGUiPT09a3x8ImZpeGVkIj09PWspJiZuLmluQXJyYXkoImF1dG8iLFtmLGldKT4tMSxqPyhkPWwucG9zaXRpb24oKSxnPWQudG9wLGU9ZC5sZWZ0KTooZz1wYXJzZUZsb2F0KGYpfHwwLGU9cGFyc2VGbG9hdChpKXx8MCksbi5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLG4uZXh0ZW5kKHt9LGgpKSksbnVsbCE9Yi50b3AmJihtLnRvcD1iLnRvcC1oLnRvcCtnKSxudWxsIT1iLmxlZnQmJihtLmxlZnQ9Yi5sZWZ0LWgubGVmdCtlKSwidXNpbmciaW4gYj9iLnVzaW5nLmNhbGwoYSxtKTpsLmNzcyhtKX19LG4uZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24oYSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09YT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihiKXtuLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7dmFyIGIsYyxkPXt0b3A6MCxsZWZ0OjB9LGU9dGhpc1swXSxmPWUmJmUub3duZXJEb2N1bWVudDtpZihmKXJldHVybiBiPWYuZG9jdW1lbnRFbGVtZW50LG4uY29udGFpbnMoYixlKT8oInVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCYmKGQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksYz1tYyhmKSx7dG9wOmQudG9wKyhjLnBhZ2VZT2Zmc2V0fHxiLnNjcm9sbFRvcCktKGIuY2xpZW50VG9wfHwwKSxsZWZ0OmQubGVmdCsoYy5wYWdlWE9mZnNldHx8Yi5zY3JvbGxMZWZ0KS0oYi5jbGllbnRMZWZ0fHwwKX0pOmR9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGEsYixjPXt0b3A6MCxsZWZ0OjB9LGQ9dGhpc1swXTtyZXR1cm4iZml4ZWQiPT09bi5jc3MoZCwicG9zaXRpb24iKT9iPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGE9dGhpcy5vZmZzZXRQYXJlbnQoKSxiPXRoaXMub2Zmc2V0KCksbi5ub2RlTmFtZShhWzBdLCJodG1sIil8fChjPWEub2Zmc2V0KCkpLGMudG9wKz1uLmNzcyhhWzBdLCJib3JkZXJUb3BXaWR0aCIsITApLGMubGVmdCs9bi5jc3MoYVswXSwiYm9yZGVyTGVmdFdpZHRoIiwhMCkpLHt0b3A6Yi50b3AtYy50b3Atbi5jc3MoZCwibWFyZ2luVG9wIiwhMCksbGVmdDpiLmxlZnQtYy5sZWZ0LW4uY3NzKGQsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudDt3aGlsZShhJiYhbi5ub2RlTmFtZShhLCJodG1sIikmJiJzdGF0aWMiPT09bi5jc3MoYSwicG9zaXRpb24iKSlhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfHxRYX0pfX0pLG4uZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPS9ZLy50ZXN0KGIpO24uZm5bYV09ZnVuY3Rpb24oZCl7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihhLGQsZSl7dmFyIGY9bWMoYSk7cmV0dXJuIHZvaWQgMD09PWU/Zj9iIGluIGY/ZltiXTpmLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXTphW2RdOnZvaWQoZj9mLnNjcm9sbFRvKGM/bihmKS5zY3JvbGxMZWZ0KCk6ZSxjP2U6bihmKS5zY3JvbGxUb3AoKSk6YVtkXT1lKX0sYSxkLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksbi5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7bi5jc3NIb29rc1tiXT1VYShsLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz8oYz1TYShhLGIpLE9hLnRlc3QoYyk/bihhKS5wb3NpdGlvbigpW2JdKyJweCI6Yyk6dm9pZCAwfSl9KSxuLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLGIpe24uZWFjaCh7DQpwYWRkaW5nOiJpbm5lciIrYSxjb250ZW50OmIsIiI6Im91dGVyIithfSxmdW5jdGlvbihjLGQpe24uZm5bZF09ZnVuY3Rpb24oZCxlKXt2YXIgZj1hcmd1bWVudHMubGVuZ3RoJiYoY3x8ImJvb2xlYW4iIT10eXBlb2YgZCksZz1jfHwoZD09PSEwfHxlPT09ITA/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiBZKHRoaXMsZnVuY3Rpb24oYixjLGQpe3ZhciBlO3JldHVybiBuLmlzV2luZG93KGIpP2IuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2FdOjk9PT1iLm5vZGVUeXBlPyhlPWIuZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KGIuYm9keVsic2Nyb2xsIithXSxlWyJzY3JvbGwiK2FdLGIuYm9keVsib2Zmc2V0IithXSxlWyJvZmZzZXQiK2FdLGVbImNsaWVudCIrYV0pKTp2b2lkIDA9PT1kP24uY3NzKGIsYyxnKTpuLnN0eWxlKGIsYyxkLGcpfSxiLGY/ZDp2b2lkIDAsZixudWxsKX19KX0pLG4uZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5vbihhLG51bGwsYixjKX0sdW5iaW5kOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub2ZmKGEsbnVsbCxiKX0sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYixhLGMsZCl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihhLCIqKiIpOnRoaXMub2ZmKGIsYXx8IioqIixjKX19KSxuLmZuLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LG4uZm4uYW5kU2VsZj1uLmZuLmFkZEJhY2ssImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIG59KTt2YXIgbmM9YS5qUXVlcnksb2M9YS4kO3JldHVybiBuLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGEuJD09PW4mJihhLiQ9b2MpLGImJmEualF1ZXJ5PT09biYmKGEualF1ZXJ5PW5jKSxufSxifHwoYS5qUXVlcnk9YS4kPW4pLG59KTsNCg=="></script>
<link href="data:text/css;charset=utf-8,%0A%2Eleaflet%2Dpane%2C%0A%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%2C%0A%2Eleaflet%2Dtile%2Dcontainer%2C%0A%2Eleaflet%2Dpane%20%3E%20svg%2C%0A%2Eleaflet%2Dpane%20%3E%20canvas%2C%0A%2Eleaflet%2Dzoom%2Dbox%2C%0A%2Eleaflet%2Dimage%2Dlayer%2C%0A%2Eleaflet%2Dlayer%20%7B%0Aposition%3A%20absolute%3B%0Aleft%3A%200%3B%0Atop%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%7B%0Aoverflow%3A%20hidden%3B%0A%7D%0A%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%20%7B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0A%2Dwebkit%2Duser%2Ddrag%3A%20none%3B%0A%7D%0A%0A%2Eleaflet%2Dsafari%20%2Eleaflet%2Dtile%20%7B%0Aimage%2Drendering%3A%20%2Dwebkit%2Doptimize%2Dcontrast%3B%0A%7D%0A%0A%2Eleaflet%2Dsafari%20%2Eleaflet%2Dtile%2Dcontainer%20%7B%0Awidth%3A%201600px%3B%0Aheight%3A%201600px%3B%0A%2Dwebkit%2Dtransform%2Dorigin%3A%200%200%3B%0A%7D%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%20%7B%0Adisplay%3A%20block%3B%0A%7D%0A%0A%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Doverlay%2Dpane%20svg%2C%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dmarker%2Dpane%20img%2C%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dshadow%2Dpane%20img%2C%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dtile%2Dpane%20img%2C%0A%2Eleaflet%2Dcontainer%20img%2Eleaflet%2Dimage%2Dlayer%20%7B%0Amax%2Dwidth%3A%20none%20%21important%3B%0A%7D%0A%2Eleaflet%2Dcontainer%2Eleaflet%2Dtouch%2Dzoom%20%7B%0A%2Dms%2Dtouch%2Daction%3A%20pan%2Dx%20pan%2Dy%3B%0Atouch%2Daction%3A%20pan%2Dx%20pan%2Dy%3B%0A%7D%0A%2Eleaflet%2Dcontainer%2Eleaflet%2Dtouch%2Ddrag%20%7B%0A%2Dms%2Dtouch%2Daction%3A%20pinch%2Dzoom%3B%0A%7D%0A%2Eleaflet%2Dcontainer%2Eleaflet%2Dtouch%2Ddrag%2Eleaflet%2Dtouch%2Dzoom%20%7B%0A%2Dms%2Dtouch%2Daction%3A%20none%3B%0Atouch%2Daction%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtile%20%7B%0Afilter%3A%20inherit%3B%0Avisibility%3A%20hidden%3B%0A%7D%0A%2Eleaflet%2Dtile%2Dloaded%20%7B%0Avisibility%3A%20inherit%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Dbox%20%7B%0Awidth%3A%200%3B%0Aheight%3A%200%3B%0A%2Dmoz%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0Az%2Dindex%3A%20800%3B%0A%7D%0A%0A%2Eleaflet%2Doverlay%2Dpane%20svg%20%7B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dpane%20%7B%20z%2Dindex%3A%20400%3B%20%7D%0A%2Eleaflet%2Dtile%2Dpane%20%7B%20z%2Dindex%3A%20200%3B%20%7D%0A%2Eleaflet%2Doverlay%2Dpane%20%7B%20z%2Dindex%3A%20400%3B%20%7D%0A%2Eleaflet%2Dshadow%2Dpane%20%7B%20z%2Dindex%3A%20500%3B%20%7D%0A%2Eleaflet%2Dmarker%2Dpane%20%7B%20z%2Dindex%3A%20600%3B%20%7D%0A%2Eleaflet%2Dtooltip%2Dpane%20%7B%20z%2Dindex%3A%20650%3B%20%7D%0A%2Eleaflet%2Dpopup%2Dpane%20%7B%20z%2Dindex%3A%20700%3B%20%7D%0A%2Eleaflet%2Dmap%2Dpane%20canvas%20%7B%20z%2Dindex%3A%20100%3B%20%7D%0A%2Eleaflet%2Dmap%2Dpane%20svg%20%7B%20z%2Dindex%3A%20200%3B%20%7D%0A%2Eleaflet%2Dvml%2Dshape%20%7B%0Awidth%3A%201px%3B%0Aheight%3A%201px%3B%0A%7D%0A%2Elvml%20%7B%0Abehavior%3A%20url%28%23default%23VML%29%3B%0Adisplay%3A%20inline%2Dblock%3B%0Aposition%3A%20absolute%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%20%7B%0Aposition%3A%20relative%3B%0Az%2Dindex%3A%20800%3B%0Apointer%2Devents%3A%20visiblePainted%3B%20%0Apointer%2Devents%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Dtop%2C%0A%2Eleaflet%2Dbottom%20%7B%0Aposition%3A%20absolute%3B%0Az%2Dindex%3A%201000%3B%0Apointer%2Devents%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtop%20%7B%0Atop%3A%200%3B%0A%7D%0A%2Eleaflet%2Dright%20%7B%0Aright%3A%200%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%7B%0Abottom%3A%200%3B%0A%7D%0A%2Eleaflet%2Dleft%20%7B%0Aleft%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontrol%20%7B%0Afloat%3A%20left%3B%0Aclear%3A%20both%3B%0A%7D%0A%2Eleaflet%2Dright%20%2Eleaflet%2Dcontrol%20%7B%0Afloat%3A%20right%3B%0A%7D%0A%2Eleaflet%2Dtop%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dtop%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dbottom%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dleft%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dleft%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dright%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dright%3A%2010px%3B%0A%7D%0A%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dtile%20%7B%0Awill%2Dchange%3A%20opacity%3B%0A%7D%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dpopup%20%7B%0Aopacity%3A%200%3B%0A%2Dwebkit%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0A%2Dmoz%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0A%2Do%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0Atransition%3A%20opacity%200%2E2s%20linear%3B%0A%7D%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dmap%2Dpane%20%2Eleaflet%2Dpopup%20%7B%0Aopacity%3A%201%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danimated%20%7B%0A%2Dwebkit%2Dtransform%2Dorigin%3A%200%200%3B%0A%2Dms%2Dtransform%2Dorigin%3A%200%200%3B%0Atransform%2Dorigin%3A%200%200%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Danimated%20%7B%0Awill%2Dchange%3A%20transform%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Danimated%20%7B%0A%2Dwebkit%2Dtransition%3A%20%2Dwebkit%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%2Dmoz%2Dtransition%3A%20%2Dmoz%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%2Do%2Dtransition%3A%20%2Do%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0Atransition%3A%20transform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dpan%2Danim%20%2Eleaflet%2Dtile%20%7B%0A%2Dwebkit%2Dtransition%3A%20none%3B%0A%2Dmoz%2Dtransition%3A%20none%3B%0A%2Do%2Dtransition%3A%20none%3B%0Atransition%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Dhide%20%7B%0Avisibility%3A%20hidden%3B%0A%7D%0A%0A%2Eleaflet%2Dinteractive%20%7B%0Acursor%3A%20pointer%3B%0A%7D%0A%2Eleaflet%2Dgrab%20%7B%0Acursor%3A%20%2Dwebkit%2Dgrab%3B%0Acursor%3A%20%2Dmoz%2Dgrab%3B%0A%7D%0A%2Eleaflet%2Dcrosshair%2C%0A%2Eleaflet%2Dcrosshair%20%2Eleaflet%2Dinteractive%20%7B%0Acursor%3A%20crosshair%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dpane%2C%0A%2Eleaflet%2Dcontrol%20%7B%0Acursor%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Ddragging%20%2Eleaflet%2Dgrab%2C%0A%2Eleaflet%2Ddragging%20%2Eleaflet%2Dgrab%20%2Eleaflet%2Dinteractive%2C%0A%2Eleaflet%2Ddragging%20%2Eleaflet%2Dmarker%2Ddraggable%20%7B%0Acursor%3A%20move%3B%0Acursor%3A%20%2Dwebkit%2Dgrabbing%3B%0Acursor%3A%20%2Dmoz%2Dgrabbing%3B%0A%7D%0A%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%2C%0A%2Eleaflet%2Dimage%2Dlayer%2C%0A%2Eleaflet%2Dpane%20%3E%20svg%20path%2C%0A%2Eleaflet%2Dtile%2Dcontainer%20%7B%0Apointer%2Devents%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dmarker%2Dicon%2Eleaflet%2Dinteractive%2C%0A%2Eleaflet%2Dimage%2Dlayer%2Eleaflet%2Dinteractive%2C%0A%2Eleaflet%2Dpane%20%3E%20svg%20path%2Eleaflet%2Dinteractive%20%7B%0Apointer%2Devents%3A%20visiblePainted%3B%20%0Apointer%2Devents%3A%20auto%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%7B%0Abackground%3A%20%23ddd%3B%0Aoutline%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%20%7B%0Acolor%3A%20%230078A8%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dactive%20%7B%0Aoutline%3A%202px%20solid%20orange%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Dbox%20%7B%0Aborder%3A%202px%20dotted%20%2338f%3B%0Abackground%3A%20rgba%28255%2C255%2C255%2C0%2E5%29%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%7B%0Afont%3A%2012px%2F1%2E5%20%22Helvetica%20Neue%22%2C%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0A%7D%0A%0A%2Eleaflet%2Dbar%20%7B%0Abox%2Dshadow%3A%200%201px%205px%20rgba%280%2C0%2C0%2C0%2E65%29%3B%0Aborder%2Dradius%3A%204px%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2C%0A%2Eleaflet%2Dbar%20a%3Ahover%20%7B%0Abackground%2Dcolor%3A%20%23fff%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23ccc%3B%0Awidth%3A%2026px%3B%0Aheight%3A%2026px%3B%0Aline%2Dheight%3A%2026px%3B%0Adisplay%3A%20block%3B%0Atext%2Dalign%3A%20center%3B%0Atext%2Ddecoration%3A%20none%3B%0Acolor%3A%20black%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2C%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dposition%3A%2050%25%2050%25%3B%0Abackground%2Drepeat%3A%20no%2Drepeat%3B%0Adisplay%3A%20block%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Ahover%20%7B%0Abackground%2Dcolor%3A%20%23f4f4f4%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Afirst%2Dchild%20%7B%0Aborder%2Dtop%2Dleft%2Dradius%3A%204px%3B%0Aborder%2Dtop%2Dright%2Dradius%3A%204px%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Alast%2Dchild%20%7B%0Aborder%2Dbottom%2Dleft%2Dradius%3A%204px%3B%0Aborder%2Dbottom%2Dright%2Dradius%3A%204px%3B%0Aborder%2Dbottom%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2Eleaflet%2Ddisabled%20%7B%0Acursor%3A%20default%3B%0Abackground%2Dcolor%3A%20%23f4f4f4%3B%0Acolor%3A%20%23bbb%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20a%20%7B%0Awidth%3A%2030px%3B%0Aheight%3A%2030px%3B%0Aline%2Dheight%3A%2030px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%2Dzoom%2Din%2C%0A%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%3A%20bold%2018px%20%27Lucida%20Console%27%2C%20Monaco%2C%20monospace%3B%0Atext%2Dindent%3A%201px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%2Dsize%3A%2020px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dzoom%2Din%20%7B%0Afont%2Dsize%3A%2022px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%2Dsize%3A%2024px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%2Dlayers%20%7B%0Abox%2Dshadow%3A%200%201px%205px%20rgba%280%2C0%2C0%2C0%2E4%29%3B%0Abackground%3A%20%23fff%3B%0Aborder%2Dradius%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc%2BqTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6%2Fee%2FXeCQ4D3ykPtL5tHno4n0d%2Fh3%2BxfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi%2FIOB0v7rVC7q45Q3Gr5K6jt%2B3Gl5nCoDD4MtO%2Bj96Wu8atmhGqcNGHObuf8OM%2Fx3AMx38%2B4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp%2BPfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a%2FPG2yutpS%2FVol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6%2FJlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH%2BcmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS%2BTzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay%2BZ%2BZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs%2BW080max1hFCarCfV%2BC1KATwcnvE9gRRuMP2prdbWGowm1KB1y%2BzwMMENkM755cJ2yPDtqhTI6ED1M%2F82yIDtC%2F4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS%2F7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC%29%3B%0Awidth%3A%2036px%3B%0Aheight%3A%2036px%3B%0A%7D%0A%2Eleaflet%2Dretina%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAQAAABvcdNgAAAEsklEQVR4AWL4TydIhpZK1kpWOlg0w3ZXP6D2soBtG42jeI6ZmQTHzAxiTbSJsYLjO9HhP%2BWOmcuhciVnmHVQcJnp7DFvScowZorad%2F%2BV%2FfVzMdMT2g9Cv9guXGv%2F7pYOrXh2U%2BRRR3dSd9JRx6bIFc%2FekqHI29JC6pJ5ZEh1yWkhkbcFeSjxgx3L2m1cb1C7bceyxA%2BCNjT%2FIfff%2B%2FkDk2u%2Fw%2F33%2FIeCMOSaWZ4glosqT3DNnNZQ7Cs58%2F3Ce5HL78iZH%2FvKVIaYlqzfdLu8Vi7dnvUbEza5Idt36tquZFldl6N5Z%2FPOLof0XLK61mZCmJSWjVF9tEjUluu74IUXvgttuVIHE7YxSkaYhJZam7yiM9Pv82JYfl9nptxZaxMJE4YSPty%2BvF0%2BY2up9d3wwijfjZbabqm%2F3bZ9ecKHsiGmRflnn1MW4pjHf9oLufyn2z3y1D6n8g8TZhxyzipLNPnAUpsOiuWimg52psrTZYnOWYNDTMuWBWa0tJb4rgq1UvmutpaYEbZlwU3CLJm%2FayYjHW5%2Fh7xWLn9Hh1vepDkyf7dE7MtT5LR4e7yYpHrkhOUpEfssBLq2pPhAqoSWKUkk7EDqkmK6RrCEzqDjhNDWNE%2BXSMvkJRDWlZTmCW0l0PHQGRZY5t1L83kT0Y3l2SItk5JAWHl2dCOBm%2BfPu3fo5%2F3v61RMCO9Jx2EEYYhb0rmNQMX%2Fvm7gqOEJLcXTGw3CAuRNeyaPWwjR8PRqKQ1PDA%2Fdpv%2Bon9Shox52WFnx0KY8onHayrJzm87i5h9xGw%2Ftfkev0jGsQizqezUKjk12hBMKJ4kbCqGPVNXudyyrShovGw5CgxsRICxF6aRmSjlBnHRzg7Gx8fKqEubI2rahQYdR1YgDIRQO7JvQyD52hoIQx0mxa0ODtW2Iozn1le2iIRdzwWewedyZzewidueOGqlsn1MvcnQpuVwLGG3%2FIR1hIKxCjelIDZ8ldqWz25jWAsnldEnK0Zxro19TGVb2ffIZEsIO89EIEDvKMPrzmBOQcKQ%2Brroye6NgRRxqR4U8EAkz0CL6uSGOm6KQCdWjvjRiSP1BPalCRS5iQYiEIvxuBMJEWgzSoHADcVMuN7IuqqTeyUPq22qFimFtxDyBBJEwNyt6TM88blFHao%2F6tWWhuuOM4SAK4EI4QmFHA%2BSEyWlp4EQoJ13cYGzMu7yszEIBOm2rVmHUNqwAIQabISNMRstmdhNWcFLsSm%2B0tjJH1MdRxO5Nx0WDMhCtgD6OKgZeljJqJKc9po8juskR9XN0Y1lZ3mWjLR9JCO1jRDMd0fpYC2VnvjBSEFg7wBENc0R9HFlb0xvF1%2BTBEpF68d%2BDHR6IOWVv2BECtxo46hOFUBd%2FAPU57WIoEwJhIi2CdpyZX0m93BZicktMj1AS9dClteUFAUNUIEygRZCtik5zSxI9MubTBH1GOiHsiLJ3OCoSZkILa9PxiN0EbvhsAo8tdAf9Seepd36lGWHmtNANTv5Jd0z4QYyeo%2FUEJqxKRpg5LZx6btLPsOaEmdMyxYdlc8LMaJnikDlhclqmPiQnTEpLUIZEwkRagjYkEibQErwhkTAKCLQEbUgkzJQWc%2F0PstHHcfEdQ%2BUAAAAASUVORK5CYII%3D%29%3B%0Abackground%2Dsize%3A%2026px%2026px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Awidth%3A%2044px%3B%0Aheight%3A%2044px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%20%2Eleaflet%2Dcontrol%2Dlayers%2Dlist%2C%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%2Eleaflet%2Dcontrol%2Dlayers%2Dlist%20%7B%0Adisplay%3A%20block%3B%0Aposition%3A%20relative%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%7B%0Apadding%3A%206px%2010px%206px%206px%3B%0Acolor%3A%20%23333%3B%0Abackground%3A%20%23fff%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dscrollbar%20%7B%0Aoverflow%2Dy%3A%20scroll%3B%0Apadding%2Dright%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dselector%20%7B%0Amargin%2Dtop%3A%202px%3B%0Aposition%3A%20relative%3B%0Atop%3A%201px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%20label%20%7B%0Adisplay%3A%20block%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dseparator%20%7B%0Aheight%3A%200%3B%0Aborder%2Dtop%3A%201px%20solid%20%23ddd%3B%0Amargin%3A%205px%20%2D10px%205px%20%2D6px%3B%0A%7D%0A%0A%2Eleaflet%2Ddefault%2Dicon%2Dpath%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq%2FbXZtrp%2FlWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq%2FRBpykd8oZUb%2FkaJutow8r1aP9II0WmLKLIsJyv1w%2Fkqw9Ch2MYdB%2B%2B12Onxee%2FQMwvf4%2FDk%2FLfp%2Fi4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg%2FFm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B%2BOadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7%2FXZKNH%2B9%2BhBLOHYozuKQPxyMPUKkrX%2FK0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz%2BbXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U%2Bw7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue%2FuDivd3fkWRbS6%2FIA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7%2F6U%2BqH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts%2BHEa73u6dT3FNWwflY86eMHPk%2BYu%2Bi6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU%2BuWDD7zg54mz5%2F2BSnizi9T1Dg4QQXLToGNCkb6tb1NU%2BQAlGr1%2B%2BeADrzhn%2Fu8Q2YZhQVlZ5%2BCAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz%2Bgwh%2BoHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi%2B%2BWDL1g%2FeEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2%2F0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX%2BJ0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60%2B0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2%2B%2BDYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL%2BF1%2BwkdZ2TBOW2gIF88PBTzD%2FgpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF%2F2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC%2BadRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk%2F4kggu40ZTvIEm5g24qtU4KjBrx%2FBTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF%2B0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH%2BUUA7%2BnG6mdG%2FPu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP%2B64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR%2FibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ%2BKiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf%2B%2FFrIjweHQS4%2FpduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON%2BdfNbM%2BGgIwYdwAAAAASUVORK5CYII%3D%29%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dattribution%20%7B%0Abackground%3A%20%23fff%3B%0Abackground%3A%20rgba%28255%2C%20255%2C%20255%2C%200%2E7%29%3B%0Amargin%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%20%7B%0Apadding%3A%200%205px%3B%0Acolor%3A%20%23333%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%20a%20%7B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%20a%3Ahover%20%7B%0Atext%2Ddecoration%3A%20underline%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Afont%2Dsize%3A%2011px%3B%0A%7D%0A%2Eleaflet%2Dleft%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Amargin%2Dleft%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Amargin%2Dbottom%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%20%7B%0Aborder%3A%202px%20solid%20%23777%3B%0Aborder%2Dtop%3A%20none%3B%0Aline%2Dheight%3A%201%2E1%3B%0Apadding%3A%202px%205px%201px%3B%0Afont%2Dsize%3A%2011px%3B%0Awhite%2Dspace%3A%20nowrap%3B%0Aoverflow%3A%20hidden%3B%0A%2Dmoz%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0Abox%2Dsizing%3A%20border%2Dbox%3B%0Abackground%3A%20%23fff%3B%0Abackground%3A%20rgba%28255%2C%20255%2C%20255%2C%200%2E5%29%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%3Anot%28%3Afirst%2Dchild%29%20%7B%0Aborder%2Dtop%3A%202px%20solid%20%23777%3B%0Aborder%2Dbottom%3A%20none%3B%0Amargin%2Dtop%3A%20%2D2px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%20%7B%0Aborder%2Dbottom%3A%202px%20solid%20%23777%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20%7B%0Abox%2Dshadow%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20%7B%0Aborder%3A%202px%20solid%20rgba%280%2C0%2C0%2C0%2E2%29%3B%0Abackground%2Dclip%3A%20padding%2Dbox%3B%0A%7D%0A%0A%2Eleaflet%2Dpopup%20%7B%0Aposition%3A%20absolute%3B%0Atext%2Dalign%3A%20center%3B%0Amargin%2Dbottom%3A%2020px%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%20%7B%0Apadding%3A%201px%3B%0Atext%2Dalign%3A%20left%3B%0Aborder%2Dradius%3A%2012px%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%20%7B%0Amargin%3A%2013px%2019px%3B%0Aline%2Dheight%3A%201%2E4%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%20p%20%7B%0Amargin%3A%2018px%200%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dtip%2Dcontainer%20%7B%0Awidth%3A%2040px%3B%0Aheight%3A%2020px%3B%0Aposition%3A%20absolute%3B%0Aleft%3A%2050%25%3B%0Amargin%2Dleft%3A%20%2D20px%3B%0Aoverflow%3A%20hidden%3B%0Apointer%2Devents%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dtip%20%7B%0Awidth%3A%2017px%3B%0Aheight%3A%2017px%3B%0Apadding%3A%201px%3B%0Amargin%3A%20%2D10px%20auto%200%3B%0A%2Dwebkit%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Dmoz%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Dms%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Do%2Dtransform%3A%20rotate%2845deg%29%3B%0Atransform%3A%20rotate%2845deg%29%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%2C%0A%2Eleaflet%2Dpopup%2Dtip%20%7B%0Abackground%3A%20white%3B%0Acolor%3A%20%23333%3B%0Abox%2Dshadow%3A%200%203px%2014px%20rgba%280%2C0%2C0%2C0%2E4%29%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dpopup%2Dclose%2Dbutton%20%7B%0Aposition%3A%20absolute%3B%0Atop%3A%200%3B%0Aright%3A%200%3B%0Apadding%3A%204px%204px%200%200%3B%0Aborder%3A%20none%3B%0Atext%2Dalign%3A%20center%3B%0Awidth%3A%2018px%3B%0Aheight%3A%2014px%3B%0Afont%3A%2016px%2F14px%20Tahoma%2C%20Verdana%2C%20sans%2Dserif%3B%0Acolor%3A%20%23c3c3c3%3B%0Atext%2Ddecoration%3A%20none%3B%0Afont%2Dweight%3A%20bold%3B%0Abackground%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dpopup%2Dclose%2Dbutton%3Ahover%20%7B%0Acolor%3A%20%23999%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dscrolled%20%7B%0Aoverflow%3A%20auto%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23ddd%3B%0Aborder%2Dtop%3A%201px%20solid%20%23ddd%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%20%7B%0Azoom%3A%201%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%20%7B%0Awidth%3A%2024px%3B%0Amargin%3A%200%20auto%3B%0A%2Dms%2Dfilter%3A%20%22progid%3ADXImageTransform%2EMicrosoft%2EMatrix%28M11%3D0%2E70710678%2C%20M12%3D0%2E70710678%2C%20M21%3D%2D0%2E70710678%2C%20M22%3D0%2E70710678%29%22%3B%0Afilter%3A%20progid%3ADXImageTransform%2EMicrosoft%2EMatrix%28M11%3D0%2E70710678%2C%20M12%3D0%2E70710678%2C%20M21%3D%2D0%2E70710678%2C%20M22%3D0%2E70710678%29%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%2Dcontainer%20%7B%0Amargin%2Dtop%3A%20%2D1px%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dcontrol%2Dzoom%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%20%7B%0Aborder%3A%201px%20solid%20%23999%3B%0A%7D%0A%0A%2Eleaflet%2Ddiv%2Dicon%20%7B%0Abackground%3A%20%23fff%3B%0Aborder%3A%201px%20solid%20%23666%3B%0A%7D%0A%0A%0A%2Eleaflet%2Dtooltip%20%7B%0Aposition%3A%20absolute%3B%0Apadding%3A%206px%3B%0Abackground%2Dcolor%3A%20%23fff%3B%0Aborder%3A%201px%20solid%20%23fff%3B%0Aborder%2Dradius%3A%203px%3B%0Acolor%3A%20%23222%3B%0Awhite%2Dspace%3A%20nowrap%3B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%2Dms%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0Apointer%2Devents%3A%20none%3B%0Abox%2Dshadow%3A%200%201px%203px%20rgba%280%2C0%2C0%2C0%2E4%29%3B%0A%7D%0A%2Eleaflet%2Dtooltip%2Eleaflet%2Dclickable%20%7B%0Acursor%3A%20pointer%3B%0Apointer%2Devents%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Dtooltip%2Dtop%3Abefore%2C%0A%2Eleaflet%2Dtooltip%2Dbottom%3Abefore%2C%0A%2Eleaflet%2Dtooltip%2Dleft%3Abefore%2C%0A%2Eleaflet%2Dtooltip%2Dright%3Abefore%20%7B%0Aposition%3A%20absolute%3B%0Apointer%2Devents%3A%20none%3B%0Aborder%3A%206px%20solid%20transparent%3B%0Abackground%3A%20transparent%3B%0Acontent%3A%20%22%22%3B%0A%7D%0A%0A%2Eleaflet%2Dtooltip%2Dbottom%20%7B%0Amargin%2Dtop%3A%206px%3B%0A%7D%0A%2Eleaflet%2Dtooltip%2Dtop%20%7B%0Amargin%2Dtop%3A%20%2D6px%3B%0A%7D%0A%2Eleaflet%2Dtooltip%2Dbottom%3Abefore%2C%0A%2Eleaflet%2Dtooltip%2Dtop%3Abefore%20%7B%0Aleft%3A%2050%25%3B%0Amargin%2Dleft%3A%20%2D6px%3B%0A%7D%0A%2Eleaflet%2Dtooltip%2Dtop%3Abefore%20%7B%0Abottom%3A%200%3B%0Amargin%2Dbottom%3A%20%2D12px%3B%0Aborder%2Dtop%2Dcolor%3A%20%23fff%3B%0A%7D%0A%2Eleaflet%2Dtooltip%2Dbottom%3Abefore%20%7B%0Atop%3A%200%3B%0Amargin%2Dtop%3A%20%2D12px%3B%0Amargin%2Dleft%3A%20%2D6px%3B%0Aborder%2Dbottom%2Dcolor%3A%20%23fff%3B%0A%7D%0A%2Eleaflet%2Dtooltip%2Dleft%20%7B%0Amargin%2Dleft%3A%20%2D6px%3B%0A%7D%0A%2Eleaflet%2Dtooltip%2Dright%20%7B%0Amargin%2Dleft%3A%206px%3B%0A%7D%0A%2Eleaflet%2Dtooltip%2Dleft%3Abefore%2C%0A%2Eleaflet%2Dtooltip%2Dright%3Abefore%20%7B%0Atop%3A%2050%25%3B%0Amargin%2Dtop%3A%20%2D6px%3B%0A%7D%0A%2Eleaflet%2Dtooltip%2Dleft%3Abefore%20%7B%0Aright%3A%200%3B%0Amargin%2Dright%3A%20%2D12px%3B%0Aborder%2Dleft%2Dcolor%3A%20%23fff%3B%0A%7D%0A%2Eleaflet%2Dtooltip%2Dright%3Abefore%20%7B%0Aleft%3A%200%3B%0Amargin%2Dleft%3A%20%2D12px%3B%0Aborder%2Dright%2Dcolor%3A%20%23fff%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,LyoKIExlYWZsZXQgMS4wLjMsIGEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwcy4gaHR0cDovL2xlYWZsZXRqcy5jb20KIChjKSAyMDEwLTIwMTYgVmxhZGltaXIgQWdhZm9ua2luLCAoYykgMjAxMC0yMDExIENsb3VkTWFkZQoqLwohZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG4oKXt2YXIgZT10Lkw7by5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuTD1lLHRoaXN9LHQuTD1vfXZhciBvPXt2ZXJzaW9uOiIxLjAuMyJ9OyJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPW86ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKG8pLCJ1bmRlZmluZWQiIT10eXBlb2YgdCYmbigpLG8uVXRpbD17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixvO2ZvcihpPTEsbj1hcmd1bWVudHMubGVuZ3RoO2k8bjtpKyspe289YXJndW1lbnRzW2ldO2ZvcihlIGluIG8pdFtlXT1vW2VdfXJldHVybiB0fSxjcmVhdGU6T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5wcm90b3R5cGU9ZSxuZXcgdH19KCksYmluZDpmdW5jdGlvbih0LGUpe3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZTtpZih0LmJpbmQpcmV0dXJuIHQuYmluZC5hcHBseSh0LGkuY2FsbChhcmd1bWVudHMsMSkpO3ZhciBuPWkuY2FsbChhcmd1bWVudHMsMik7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxuLmxlbmd0aD9uLmNvbmNhdChpLmNhbGwoYXJndW1lbnRzKSk6YXJndW1lbnRzKX19LHN0YW1wOmZ1bmN0aW9uKHQpe3JldHVybiB0Ll9sZWFmbGV0X2lkPXQuX2xlYWZsZXRfaWR8fCsrby5VdGlsLmxhc3RJZCx0Ll9sZWFmbGV0X2lkfSxsYXN0SWQ6MCx0aHJvdHRsZTpmdW5jdGlvbih0LGUsaSl7dmFyIG4sbyxzLHI7cmV0dXJuIHI9ZnVuY3Rpb24oKXtuPSExLG8mJihzLmFwcGx5KGksbyksbz0hMSl9LHM9ZnVuY3Rpb24oKXtuP289YXJndW1lbnRzOih0LmFwcGx5KGksYXJndW1lbnRzKSxzZXRUaW1lb3V0KHIsZSksbj0hMCl9fSx3cmFwTnVtOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj1lWzFdLG89ZVswXSxzPW4tbztyZXR1cm4gdD09PW4mJmk/dDooKHQtbyklcytzKSVzK299LGZhbHNlRm46ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZm9ybWF0TnVtOmZ1bmN0aW9uKHQsZSl7dmFyIGk9TWF0aC5wb3coMTAsZXx8NSk7cmV0dXJuIE1hdGgucm91bmQodCppKS9pfSx0cmltOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRyaW0/dC50cmltKCk6dC5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9LHNwbGl0V29yZHM6ZnVuY3Rpb24odCl7cmV0dXJuIG8uVXRpbC50cmltKHQpLnNwbGl0KC9ccysvKX0sc2V0T3B0aW9uczpmdW5jdGlvbih0LGUpe3QuaGFzT3duUHJvcGVydHkoIm9wdGlvbnMiKXx8KHQub3B0aW9ucz10Lm9wdGlvbnM/by5VdGlsLmNyZWF0ZSh0Lm9wdGlvbnMpOnt9KTtmb3IodmFyIGkgaW4gZSl0Lm9wdGlvbnNbaV09ZVtpXTtyZXR1cm4gdC5vcHRpb25zfSxnZXRQYXJhbVN0cmluZzpmdW5jdGlvbih0LGUsaSl7dmFyIG49W107Zm9yKHZhciBvIGluIHQpbi5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChpP28udG9VcHBlckNhc2UoKTpvKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHRbb10pKTtyZXR1cm4oZSYmZS5pbmRleE9mKCI/IikhPT0tMT8iJiI6Ij8iKStuLmpvaW4oIiYiKX0sdGVtcGxhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yZXBsYWNlKG8uVXRpbC50ZW1wbGF0ZVJlLGZ1bmN0aW9uKHQsbil7dmFyIG89ZVtuXTtpZihvPT09aSl0aHJvdyBuZXcgRXJyb3IoIk5vIHZhbHVlIHByb3ZpZGVkIGZvciB2YXJpYWJsZSAiK3QpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvJiYobz1vKGUpKSxvfSl9LHRlbXBsYXRlUmU6L1x7ICooW1x3X1wtXSspICpcfS9nLGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0saW5kZXhPZjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKWlmKHRbaV09PT1lKXJldHVybiBpO3JldHVybi0xfSxlbXB0eUltYWdlVXJsOiJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFEL0FDd0FBQUFBQVFBQkFBQUNBRHM9In0sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiB0WyJ3ZWJraXQiK2VdfHx0WyJtb3oiK2VdfHx0WyJtcyIrZV19ZnVuY3Rpb24gaShlKXt2YXIgaT0rbmV3IERhdGUsbz1NYXRoLm1heCgwLDE2LShpLW4pKTtyZXR1cm4gbj1pK28sdC5zZXRUaW1lb3V0KGUsbyl9dmFyIG49MCxzPXQucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxlKCJSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKXx8aSxyPXQuY2FuY2VsQW5pbWF0aW9uRnJhbWV8fGUoIkNhbmNlbEFuaW1hdGlvbkZyYW1lIil8fGUoIkNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSIpfHxmdW5jdGlvbihlKXt0LmNsZWFyVGltZW91dChlKX07by5VdGlsLnJlcXVlc3RBbmltRnJhbWU9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByJiZzPT09aT92b2lkIGUuY2FsbChuKTpzLmNhbGwodCxvLmJpbmQoZSxuKSl9LG8uVXRpbC5jYW5jZWxBbmltRnJhbWU9ZnVuY3Rpb24oZSl7ZSYmci5jYWxsKHQsZSl9fSgpLG8uZXh0ZW5kPW8uVXRpbC5leHRlbmQsby5iaW5kPW8uVXRpbC5iaW5kLG8uc3RhbXA9by5VdGlsLnN0YW1wLG8uc2V0T3B0aW9ucz1vLlV0aWwuc2V0T3B0aW9ucyxvLkNsYXNzPWZ1bmN0aW9uKCl7fSxvLkNsYXNzLmV4dGVuZD1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbigpe3RoaXMuaW5pdGlhbGl6ZSYmdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLmNhbGxJbml0SG9va3MoKX0saT1lLl9fc3VwZXJfXz10aGlzLnByb3RvdHlwZSxuPW8uVXRpbC5jcmVhdGUoaSk7bi5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlPW47Zm9yKHZhciBzIGluIHRoaXMpdGhpcy5oYXNPd25Qcm9wZXJ0eShzKSYmInByb3RvdHlwZSIhPT1zJiYoZVtzXT10aGlzW3NdKTtyZXR1cm4gdC5zdGF0aWNzJiYoby5leHRlbmQoZSx0LnN0YXRpY3MpLGRlbGV0ZSB0LnN0YXRpY3MpLHQuaW5jbHVkZXMmJihvLlV0aWwuZXh0ZW5kLmFwcGx5KG51bGwsW25dLmNvbmNhdCh0LmluY2x1ZGVzKSksZGVsZXRlIHQuaW5jbHVkZXMpLG4ub3B0aW9ucyYmKHQub3B0aW9ucz1vLlV0aWwuZXh0ZW5kKG8uVXRpbC5jcmVhdGUobi5vcHRpb25zKSx0Lm9wdGlvbnMpKSxvLmV4dGVuZChuLHQpLG4uX2luaXRIb29rcz1bXSxuLmNhbGxJbml0SG9va3M9ZnVuY3Rpb24oKXtpZighdGhpcy5faW5pdEhvb2tzQ2FsbGVkKXtpLmNhbGxJbml0SG9va3MmJmkuY2FsbEluaXRIb29rcy5jYWxsKHRoaXMpLHRoaXMuX2luaXRIb29rc0NhbGxlZD0hMDtmb3IodmFyIHQ9MCxlPW4uX2luaXRIb29rcy5sZW5ndGg7dDxlO3QrKyluLl9pbml0SG9va3NbdF0uY2FsbCh0aGlzKX19LGV9LG8uQ2xhc3MuaW5jbHVkZT1mdW5jdGlvbih0KXtyZXR1cm4gby5leHRlbmQodGhpcy5wcm90b3R5cGUsdCksdGhpc30sby5DbGFzcy5tZXJnZU9wdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIG8uZXh0ZW5kKHRoaXMucHJvdG90eXBlLm9wdGlvbnMsdCksdGhpc30sby5DbGFzcy5hZGRJbml0SG9vaz1mdW5jdGlvbih0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7dGhpc1t0XS5hcHBseSh0aGlzLGUpfTtyZXR1cm4gdGhpcy5wcm90b3R5cGUuX2luaXRIb29rcz10aGlzLnByb3RvdHlwZS5faW5pdEhvb2tzfHxbXSx0aGlzLnByb3RvdHlwZS5faW5pdEhvb2tzLnB1c2goaSksdGhpc30sby5FdmVudGVkPW8uQ2xhc3MuZXh0ZW5kKHtvbjpmdW5jdGlvbih0LGUsaSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KWZvcih2YXIgbiBpbiB0KXRoaXMuX29uKG4sdFtuXSxlKTtlbHNle3Q9by5VdGlsLnNwbGl0V29yZHModCk7Zm9yKHZhciBzPTAscj10Lmxlbmd0aDtzPHI7cysrKXRoaXMuX29uKHRbc10sZSxpKX1yZXR1cm4gdGhpc30sb2ZmOmZ1bmN0aW9uKHQsZSxpKXtpZih0KWlmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIG4gaW4gdCl0aGlzLl9vZmYobix0W25dLGUpO2Vsc2V7dD1vLlV0aWwuc3BsaXRXb3Jkcyh0KTtmb3IodmFyIHM9MCxyPXQubGVuZ3RoO3M8cjtzKyspdGhpcy5fb2ZmKHRbc10sZSxpKX1lbHNlIGRlbGV0ZSB0aGlzLl9ldmVudHM7cmV0dXJuIHRoaXN9LF9vbjpmdW5jdGlvbih0LGUsbil7dGhpcy5fZXZlbnRzPXRoaXMuX2V2ZW50c3x8e307dmFyIG89dGhpcy5fZXZlbnRzW3RdO298fChvPVtdLHRoaXMuX2V2ZW50c1t0XT1vKSxuPT09dGhpcyYmKG49aSk7Zm9yKHZhciBzPXtmbjplLGN0eDpufSxyPW8sYT0wLGg9ci5sZW5ndGg7YTxoO2ErKylpZihyW2FdLmZuPT09ZSYmclthXS5jdHg9PT1uKXJldHVybjtyLnB1c2gocyl9LF9vZmY6ZnVuY3Rpb24odCxlLG4pe3ZhciBzLHIsYTtpZih0aGlzLl9ldmVudHMmJihzPXRoaXMuX2V2ZW50c1t0XSkpe2lmKCFlKXtmb3Iocj0wLGE9cy5sZW5ndGg7cjxhO3IrKylzW3JdLmZuPW8uVXRpbC5mYWxzZUZuO3JldHVybiB2b2lkIGRlbGV0ZSB0aGlzLl9ldmVudHNbdF19aWYobj09PXRoaXMmJihuPWkpLHMpZm9yKHI9MCxhPXMubGVuZ3RoO3I8YTtyKyspe3ZhciBoPXNbcl07aWYoaC5jdHg9PT1uJiZoLmZuPT09ZSlyZXR1cm4gaC5mbj1vLlV0aWwuZmFsc2VGbix0aGlzLl9maXJpbmdDb3VudCYmKHRoaXMuX2V2ZW50c1t0XT1zPXMuc2xpY2UoKSksdm9pZCBzLnNwbGljZShyLDEpfX19LGZpcmU6ZnVuY3Rpb24odCxlLGkpe2lmKCF0aGlzLmxpc3RlbnModCxpKSlyZXR1cm4gdGhpczt2YXIgbj1vLlV0aWwuZXh0ZW5kKHt9LGUse3R5cGU6dCx0YXJnZXQ6dGhpc30pO2lmKHRoaXMuX2V2ZW50cyl7dmFyIHM9dGhpcy5fZXZlbnRzW3RdO2lmKHMpe3RoaXMuX2ZpcmluZ0NvdW50PXRoaXMuX2ZpcmluZ0NvdW50KzF8fDE7Zm9yKHZhciByPTAsYT1zLmxlbmd0aDtyPGE7cisrKXt2YXIgaD1zW3JdO2guZm4uY2FsbChoLmN0eHx8dGhpcyxuKX10aGlzLl9maXJpbmdDb3VudC0tfX1yZXR1cm4gaSYmdGhpcy5fcHJvcGFnYXRlRXZlbnQobiksdGhpc30sbGlzdGVuczpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzW3RdO2lmKGkmJmkubGVuZ3RoKXJldHVybiEwO2lmKGUpZm9yKHZhciBuIGluIHRoaXMuX2V2ZW50UGFyZW50cylpZih0aGlzLl9ldmVudFBhcmVudHNbbl0ubGlzdGVucyh0LGUpKXJldHVybiEwO3JldHVybiExfSxvbmNlOmZ1bmN0aW9uKHQsZSxpKXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe2Zvcih2YXIgbiBpbiB0KXRoaXMub25jZShuLHRbbl0sZSk7cmV0dXJuIHRoaXN9dmFyIHM9by5iaW5kKGZ1bmN0aW9uKCl7dGhpcy5vZmYodCxlLGkpLm9mZih0LHMsaSl9LHRoaXMpO3JldHVybiB0aGlzLm9uKHQsZSxpKS5vbih0LHMsaSl9LGFkZEV2ZW50UGFyZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ldmVudFBhcmVudHM9dGhpcy5fZXZlbnRQYXJlbnRzfHx7fSx0aGlzLl9ldmVudFBhcmVudHNbby5zdGFtcCh0KV09dCx0aGlzfSxyZW1vdmVFdmVudFBhcmVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZlbnRQYXJlbnRzJiZkZWxldGUgdGhpcy5fZXZlbnRQYXJlbnRzW28uc3RhbXAodCldLHRoaXN9LF9wcm9wYWdhdGVFdmVudDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fZXZlbnRQYXJlbnRzKXRoaXMuX2V2ZW50UGFyZW50c1tlXS5maXJlKHQudHlwZSxvLmV4dGVuZCh7bGF5ZXI6dC50YXJnZXR9LHQpLCEwKX19KTt2YXIgcz1vLkV2ZW50ZWQucHJvdG90eXBlO3MuYWRkRXZlbnRMaXN0ZW5lcj1zLm9uLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcj1zLmNsZWFyQWxsRXZlbnRMaXN0ZW5lcnM9cy5vZmYscy5hZGRPbmVUaW1lRXZlbnRMaXN0ZW5lcj1zLm9uY2Uscy5maXJlRXZlbnQ9cy5maXJlLHMuaGFzRXZlbnRMaXN0ZW5lcnM9cy5saXN0ZW5zLG8uTWl4aW49e0V2ZW50czpzfSxmdW5jdGlvbigpe3ZhciBpPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSxuPWUuZG9jdW1lbnRFbGVtZW50LHM9IkFjdGl2ZVhPYmplY3QiaW4gdCxyPWkuaW5kZXhPZigid2Via2l0IikhPT0tMSxhPWkuaW5kZXhPZigicGhhbnRvbSIpIT09LTEsaD1pLnNlYXJjaCgiYW5kcm9pZCBbMjNdIikhPT0tMSxsPWkuaW5kZXhPZigiY2hyb21lIikhPT0tMSx1PWkuaW5kZXhPZigiZ2Vja28iKSE9PS0xJiYhciYmIXQub3BlcmEmJiFzLGM9MD09PW5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCJXaW4iKSxkPSJ1bmRlZmluZWQiIT10eXBlb2Ygb3JpZW50YXRpb258fGkuaW5kZXhPZigibW9iaWxlIikhPT0tMSxfPSF0LlBvaW50ZXJFdmVudCYmdC5NU1BvaW50ZXJFdmVudCxtPXQuUG9pbnRlckV2ZW50fHxfLHA9cyYmInRyYW5zaXRpb24iaW4gbi5zdHlsZSxmPSJXZWJLaXRDU1NNYXRyaXgiaW4gdCYmIm0xMSJpbiBuZXcgdC5XZWJLaXRDU1NNYXRyaXgmJiFoLGc9Ik1velBlcnNwZWN0aXZlImluIG4uc3R5bGUsdj0iT1RyYW5zaXRpb24iaW4gbi5zdHlsZSx5PSF0LkxfTk9fVE9VQ0gmJihtfHwib250b3VjaHN0YXJ0ImluIHR8fHQuRG9jdW1lbnRUb3VjaCYmZSBpbnN0YW5jZW9mIHQuRG9jdW1lbnRUb3VjaCk7by5Ccm93c2VyPXtpZTpzLGllbHQ5OnMmJiFlLmFkZEV2ZW50TGlzdGVuZXIsZWRnZToibXNMYXVuY2hVcmkiaW4gbmF2aWdhdG9yJiYhKCJkb2N1bWVudE1vZGUiaW4gZSksd2Via2l0OnIsZ2Vja286dSxhbmRyb2lkOmkuaW5kZXhPZigiYW5kcm9pZCIpIT09LTEsYW5kcm9pZDIzOmgsY2hyb21lOmwsc2FmYXJpOiFsJiZpLmluZGV4T2YoInNhZmFyaSIpIT09LTEsd2luOmMsaWUzZDpwLHdlYmtpdDNkOmYsZ2Vja28zZDpnLG9wZXJhMTI6dixhbnkzZDohdC5MX0RJU0FCTEVfM0QmJihwfHxmfHxnKSYmIXYmJiFhLG1vYmlsZTpkLG1vYmlsZVdlYmtpdDpkJiZyLG1vYmlsZVdlYmtpdDNkOmQmJmYsbW9iaWxlT3BlcmE6ZCYmdC5vcGVyYSxtb2JpbGVHZWNrbzpkJiZ1LHRvdWNoOiEheSxtc1BvaW50ZXI6ISFfLHBvaW50ZXI6ISFtLHJldGluYToodC5kZXZpY2VQaXhlbFJhdGlvfHx0LnNjcmVlbi5kZXZpY2VYRFBJL3Quc2NyZWVuLmxvZ2ljYWxYRFBJKT4xfX0oKSxvLlBvaW50PWZ1bmN0aW9uKHQsZSxpKXt0aGlzLng9aT9NYXRoLnJvdW5kKHQpOnQsdGhpcy55PWk/TWF0aC5yb3VuZChlKTplfSxvLlBvaW50LnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uUG9pbnQodGhpcy54LHRoaXMueSl9LGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQoby5wb2ludCh0KSl9LF9hZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXN9LHN1YnRyYWN0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3N1YnRyYWN0KG8ucG9pbnQodCkpfSxfc3VidHJhY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXN9LGRpdmlkZUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2RpdmlkZUJ5KHQpfSxfZGl2aWRlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC89dCx0aGlzLnkvPXQsdGhpc30sbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0aXBseUJ5KHQpfSxfbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfSxzY2FsZUJ5OmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5Qb2ludCh0aGlzLngqdC54LHRoaXMueSp0LnkpfSx1bnNjYWxlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLlBvaW50KHRoaXMueC90LngsdGhpcy55L3QueSl9LHJvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKX0sX3JvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzfSxmbG9vcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX2Zsb29yKCl9LF9mbG9vcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc30sY2VpbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX2NlaWwoKX0sX2NlaWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzfSxkaXN0YW5jZVRvOmZ1bmN0aW9uKHQpe3Q9by5wb2ludCh0KTt2YXIgZT10LngtdGhpcy54LGk9dC55LXRoaXMueTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStpKmkpfSxlcXVhbHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9by5wb2ludCh0KSx0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9by5wb2ludCh0KSxNYXRoLmFicyh0LngpPD1NYXRoLmFicyh0aGlzLngpJiZNYXRoLmFicyh0LnkpPD1NYXRoLmFicyh0aGlzLnkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJQb2ludCgiK28uVXRpbC5mb3JtYXROdW0odGhpcy54KSsiLCAiK28uVXRpbC5mb3JtYXROdW0odGhpcy55KSsiKSJ9fSxvLnBvaW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdCBpbnN0YW5jZW9mIG8uUG9pbnQ/dDpvLlV0aWwuaXNBcnJheSh0KT9uZXcgby5Qb2ludCh0WzBdLHRbMV0pOnQ9PT1pfHxudWxsPT09dD90OiJvYmplY3QiPT10eXBlb2YgdCYmIngiaW4gdCYmInkiaW4gdD9uZXcgby5Qb2ludCh0LngsdC55KTpuZXcgby5Qb2ludCh0LGUsbil9LG8uQm91bmRzPWZ1bmN0aW9uKHQsZSl7aWYodClmb3IodmFyIGk9ZT9bdCxlXTp0LG49MCxvPWkubGVuZ3RoO248bztuKyspdGhpcy5leHRlbmQoaVtuXSl9LG8uQm91bmRzLnByb3RvdHlwZT17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3JldHVybiB0PW8ucG9pbnQodCksdGhpcy5taW58fHRoaXMubWF4Pyh0aGlzLm1pbi54PU1hdGgubWluKHQueCx0aGlzLm1pbi54KSx0aGlzLm1heC54PU1hdGgubWF4KHQueCx0aGlzLm1heC54KSx0aGlzLm1pbi55PU1hdGgubWluKHQueSx0aGlzLm1pbi55KSx0aGlzLm1heC55PU1hdGgubWF4KHQueSx0aGlzLm1heC55KSk6KHRoaXMubWluPXQuY2xvbmUoKSx0aGlzLm1heD10LmNsb25lKCkpLHRoaXN9LGdldENlbnRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uUG9pbnQoKHRoaXMubWluLngrdGhpcy5tYXgueCkvMiwodGhpcy5taW4ueSt0aGlzLm1heC55KS8yLHQpfSxnZXRCb3R0b21MZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvLlBvaW50KHRoaXMubWluLngsdGhpcy5tYXgueSl9LGdldFRvcFJpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvLlBvaW50KHRoaXMubWF4LngsdGhpcy5taW4ueSl9LGdldFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXguc3VidHJhY3QodGhpcy5taW4pfSxjb250YWluczpmdW5jdGlvbih0KXt2YXIgZSxpO3JldHVybiB0PSJudW1iZXIiPT10eXBlb2YgdFswXXx8dCBpbnN0YW5jZW9mIG8uUG9pbnQ/by5wb2ludCh0KTpvLmJvdW5kcyh0KSx0IGluc3RhbmNlb2Ygby5Cb3VuZHM/KGU9dC5taW4saT10Lm1heCk6ZT1pPXQsZS54Pj10aGlzLm1pbi54JiZpLng8PXRoaXMubWF4LngmJmUueT49dGhpcy5taW4ueSYmaS55PD10aGlzLm1heC55fSxpbnRlcnNlY3RzOmZ1bmN0aW9uKHQpe3Q9by5ib3VuZHModCk7dmFyIGU9dGhpcy5taW4saT10aGlzLm1heCxuPXQubWluLHM9dC5tYXgscj1zLng+PWUueCYmbi54PD1pLngsYT1zLnk+PWUueSYmbi55PD1pLnk7cmV0dXJuIHImJmF9LG92ZXJsYXBzOmZ1bmN0aW9uKHQpe3Q9by5ib3VuZHModCk7dmFyIGU9dGhpcy5taW4saT10aGlzLm1heCxuPXQubWluLHM9dC5tYXgscj1zLng+ZS54JiZuLng8aS54LGE9cy55PmUueSYmbi55PGkueTtyZXR1cm4gciYmYX0saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMubWlufHwhdGhpcy5tYXgpfX0sby5ib3VuZHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4hdHx8dCBpbnN0YW5jZW9mIG8uQm91bmRzP3Q6bmV3IG8uQm91bmRzKHQsZSl9LG8uVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24odCxlLGksbil7dGhpcy5fYT10LHRoaXMuX2I9ZSx0aGlzLl9jPWksdGhpcy5fZD1ufSxvLlRyYW5zZm9ybWF0aW9uLnByb3RvdHlwZT17dHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybSh0LmNsb25lKCksZSl9LF90cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lfHwxLHQueD1lKih0aGlzLl9hKnQueCt0aGlzLl9iKSx0Lnk9ZSoodGhpcy5fYyp0LnkrdGhpcy5fZCksdH0sdW50cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lfHwxLG5ldyBvLlBvaW50KCh0LngvZS10aGlzLl9iKS90aGlzLl9hLCh0LnkvZS10aGlzLl9kKS90aGlzLl9jKX19LG8uRG9tVXRpbD17Z2V0OmZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9lLmdldEVsZW1lbnRCeUlkKHQpOnR9LGdldFN0eWxlOmZ1bmN0aW9uKHQsaSl7dmFyIG49dC5zdHlsZVtpXXx8dC5jdXJyZW50U3R5bGUmJnQuY3VycmVudFN0eWxlW2ldO2lmKCghbnx8ImF1dG8iPT09bikmJmUuZGVmYXVsdFZpZXcpe3ZhciBvPWUuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpO249bz9vW2ldOm51bGx9cmV0dXJuImF1dG8iPT09bj9udWxsOm59LGNyZWF0ZTpmdW5jdGlvbih0LGksbil7dmFyIG89ZS5jcmVhdGVFbGVtZW50KHQpO3JldHVybiBvLmNsYXNzTmFtZT1pfHwiIixuJiZuLmFwcGVuZENoaWxkKG8pLG99LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0KX0sZW1wdHk6ZnVuY3Rpb24odCl7Zm9yKDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKX0sdG9Gcm9udDpmdW5jdGlvbih0KXt0LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodCl9LHRvQmFjazpmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudE5vZGU7ZS5pbnNlcnRCZWZvcmUodCxlLmZpcnN0Q2hpbGQpfSxoYXNDbGFzczpmdW5jdGlvbih0LGUpe2lmKHQuY2xhc3NMaXN0IT09aSlyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMoZSk7dmFyIG49by5Eb21VdGlsLmdldENsYXNzKHQpO3JldHVybiBuLmxlbmd0aD4wJiZuZXcgUmVnRXhwKCIoXnxcXHMpIitlKyIoXFxzfCQpIikudGVzdChuKX0sYWRkQ2xhc3M6ZnVuY3Rpb24odCxlKXtpZih0LmNsYXNzTGlzdCE9PWkpZm9yKHZhciBuPW8uVXRpbC5zcGxpdFdvcmRzKGUpLHM9MCxyPW4ubGVuZ3RoO3M8cjtzKyspdC5jbGFzc0xpc3QuYWRkKG5bc10pO2Vsc2UgaWYoIW8uRG9tVXRpbC5oYXNDbGFzcyh0LGUpKXt2YXIgYT1vLkRvbVV0aWwuZ2V0Q2xhc3ModCk7by5Eb21VdGlsLnNldENsYXNzKHQsKGE/YSsiICI6IiIpK2UpfX0scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdCE9PWk/dC5jbGFzc0xpc3QucmVtb3ZlKGUpOm8uRG9tVXRpbC5zZXRDbGFzcyh0LG8uVXRpbC50cmltKCgiICIrby5Eb21VdGlsLmdldENsYXNzKHQpKyIgIikucmVwbGFjZSgiICIrZSsiICIsIiAiKSkpfSxzZXRDbGFzczpmdW5jdGlvbih0LGUpe3QuY2xhc3NOYW1lLmJhc2VWYWw9PT1pP3QuY2xhc3NOYW1lPWU6dC5jbGFzc05hbWUuYmFzZVZhbD1lfSxnZXRDbGFzczpmdW5jdGlvbih0KXtyZXR1cm4gdC5jbGFzc05hbWUuYmFzZVZhbD09PWk/dC5jbGFzc05hbWU6dC5jbGFzc05hbWUuYmFzZVZhbH0sc2V0T3BhY2l0eTpmdW5jdGlvbih0LGUpeyJvcGFjaXR5ImluIHQuc3R5bGU/dC5zdHlsZS5vcGFjaXR5PWU6ImZpbHRlciJpbiB0LnN0eWxlJiZvLkRvbVV0aWwuX3NldE9wYWNpdHlJRSh0LGUpfSxfc2V0T3BhY2l0eUlFOmZ1bmN0aW9uKHQsZSl7dmFyIGk9ITEsbj0iRFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEiO3RyeXtpPXQuZmlsdGVycy5pdGVtKG4pfWNhdGNoKHQpe2lmKDE9PT1lKXJldHVybn1lPU1hdGgucm91bmQoMTAwKmUpLGk/KGkuRW5hYmxlZD0xMDAhPT1lLGkuT3BhY2l0eT1lKTp0LnN0eWxlLmZpbHRlcis9IiBwcm9naWQ6IituKyIob3BhY2l0eT0iK2UrIikifSx0ZXN0UHJvcDpmdW5jdGlvbih0KXtmb3IodmFyIGk9ZS5kb2N1bWVudEVsZW1lbnQuc3R5bGUsbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl1pbiBpKXJldHVybiB0W25dO3JldHVybiExfSxzZXRUcmFuc2Zvcm06ZnVuY3Rpb24odCxlLGkpe3ZhciBuPWV8fG5ldyBvLlBvaW50KDAsMCk7dC5zdHlsZVtvLkRvbVV0aWwuVFJBTlNGT1JNXT0oby5Ccm93c2VyLmllM2Q/InRyYW5zbGF0ZSgiK24ueCsicHgsIituLnkrInB4KSI6InRyYW5zbGF0ZTNkKCIrbi54KyJweCwiK24ueSsicHgsMCkiKSsoaT8iIHNjYWxlKCIraSsiKSI6IiIpfSxzZXRQb3NpdGlvbjpmdW5jdGlvbih0LGUpe3QuX2xlYWZsZXRfcG9zPWUsby5Ccm93c2VyLmFueTNkP28uRG9tVXRpbC5zZXRUcmFuc2Zvcm0odCxlKToodC5zdHlsZS5sZWZ0PWUueCsicHgiLHQuc3R5bGUudG9wPWUueSsicHgiKX0sZ2V0UG9zaXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQuX2xlYWZsZXRfcG9zfHxuZXcgby5Qb2ludCgwLDApfX0sZnVuY3Rpb24oKXtvLkRvbVV0aWwuVFJBTlNGT1JNPW8uRG9tVXRpbC50ZXN0UHJvcChbInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSIsIk9UcmFuc2Zvcm0iLCJNb3pUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKTt2YXIgaT1vLkRvbVV0aWwuVFJBTlNJVElPTj1vLkRvbVV0aWwudGVzdFByb3AoWyJ3ZWJraXRUcmFuc2l0aW9uIiwidHJhbnNpdGlvbiIsIk9UcmFuc2l0aW9uIiwiTW96VHJhbnNpdGlvbiIsIm1zVHJhbnNpdGlvbiJdKTtpZihvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQ9IndlYmtpdFRyYW5zaXRpb24iPT09aXx8Ik9UcmFuc2l0aW9uIj09PWk/aSsiRW5kIjoidHJhbnNpdGlvbmVuZCIsIm9uc2VsZWN0c3RhcnQiaW4gZSlvLkRvbVV0aWwuZGlzYWJsZVRleHRTZWxlY3Rpb249ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9uKHQsInNlbGVjdHN0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX0sby5Eb21VdGlsLmVuYWJsZVRleHRTZWxlY3Rpb249ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9mZih0LCJzZWxlY3RzdGFydCIsby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCl9O2Vsc2V7dmFyIG49by5Eb21VdGlsLnRlc3RQcm9wKFsidXNlclNlbGVjdCIsIldlYmtpdFVzZXJTZWxlY3QiLCJPVXNlclNlbGVjdCIsIk1velVzZXJTZWxlY3QiLCJtc1VzZXJTZWxlY3QiXSk7by5Eb21VdGlsLmRpc2FibGVUZXh0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7aWYobil7dmFyIHQ9ZS5kb2N1bWVudEVsZW1lbnQuc3R5bGU7dGhpcy5fdXNlclNlbGVjdD10W25dLHRbbl09Im5vbmUifX0sby5Eb21VdGlsLmVuYWJsZVRleHRTZWxlY3Rpb249ZnVuY3Rpb24oKXtuJiYoZS5kb2N1bWVudEVsZW1lbnQuc3R5bGVbbl09dGhpcy5fdXNlclNlbGVjdCxkZWxldGUgdGhpcy5fdXNlclNlbGVjdCl9fW8uRG9tVXRpbC5kaXNhYmxlSW1hZ2VEcmFnPWZ1bmN0aW9uKCl7by5Eb21FdmVudC5vbih0LCJkcmFnc3RhcnQiLG8uRG9tRXZlbnQucHJldmVudERlZmF1bHQpfSxvLkRvbVV0aWwuZW5hYmxlSW1hZ2VEcmFnPWZ1bmN0aW9uKCl7by5Eb21FdmVudC5vZmYodCwiZHJhZ3N0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX0sby5Eb21VdGlsLnByZXZlbnRPdXRsaW5lPWZ1bmN0aW9uKGUpe2Zvcig7ZS50YWJJbmRleD09PS0xOyllPWUucGFyZW50Tm9kZTtlJiZlLnN0eWxlJiYoby5Eb21VdGlsLnJlc3RvcmVPdXRsaW5lKCksdGhpcy5fb3V0bGluZUVsZW1lbnQ9ZSx0aGlzLl9vdXRsaW5lU3R5bGU9ZS5zdHlsZS5vdXRsaW5lLGUuc3R5bGUub3V0bGluZT0ibm9uZSIsby5Eb21FdmVudC5vbih0LCJrZXlkb3duIixvLkRvbVV0aWwucmVzdG9yZU91dGxpbmUsdGhpcykpfSxvLkRvbVV0aWwucmVzdG9yZU91dGxpbmU9ZnVuY3Rpb24oKXt0aGlzLl9vdXRsaW5lRWxlbWVudCYmKHRoaXMuX291dGxpbmVFbGVtZW50LnN0eWxlLm91dGxpbmU9dGhpcy5fb3V0bGluZVN0eWxlLGRlbGV0ZSB0aGlzLl9vdXRsaW5lRWxlbWVudCxkZWxldGUgdGhpcy5fb3V0bGluZVN0eWxlLG8uRG9tRXZlbnQub2ZmKHQsImtleWRvd24iLG8uRG9tVXRpbC5yZXN0b3JlT3V0bGluZSx0aGlzKSl9fSgpLG8uTGF0TG5nPWZ1bmN0aW9uKHQsZSxuKXtpZihpc05hTih0KXx8aXNOYU4oZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExhdExuZyBvYmplY3Q6ICgiK3QrIiwgIitlKyIpIik7dGhpcy5sYXQ9K3QsdGhpcy5sbmc9K2UsbiE9PWkmJih0aGlzLmFsdD0rbil9LG8uTGF0TG5nLnByb3RvdHlwZT17ZXF1YWxzOmZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuITE7dD1vLmxhdExuZyh0KTt2YXIgbj1NYXRoLm1heChNYXRoLmFicyh0aGlzLmxhdC10LmxhdCksTWF0aC5hYnModGhpcy5sbmctdC5sbmcpKTtyZXR1cm4gbjw9KGU9PT1pPzFlLTk6ZSl9LHRvU3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVybiJMYXRMbmcoIitvLlV0aWwuZm9ybWF0TnVtKHRoaXMubGF0LHQpKyIsICIrby5VdGlsLmZvcm1hdE51bSh0aGlzLmxuZyx0KSsiKSJ9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7cmV0dXJuIG8uQ1JTLkVhcnRoLmRpc3RhbmNlKHRoaXMsby5sYXRMbmcodCkpfSx3cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIG8uQ1JTLkVhcnRoLndyYXBMYXRMbmcodGhpcyl9LHRvQm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBlPTE4MCp0LzQwMDc1MDE3LGk9ZS9NYXRoLmNvcyhNYXRoLlBJLzE4MCp0aGlzLmxhdCk7cmV0dXJuIG8ubGF0TG5nQm91bmRzKFt0aGlzLmxhdC1lLHRoaXMubG5nLWldLFt0aGlzLmxhdCtlLHRoaXMubG5nK2ldKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uTGF0TG5nKHRoaXMubGF0LHRoaXMubG5nLHRoaXMuYWx0KX19LG8ubGF0TG5nPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdCBpbnN0YW5jZW9mIG8uTGF0TG5nP3Q6by5VdGlsLmlzQXJyYXkodCkmJiJvYmplY3QiIT10eXBlb2YgdFswXT8zPT09dC5sZW5ndGg/bmV3IG8uTGF0TG5nKHRbMF0sdFsxXSx0WzJdKToyPT09dC5sZW5ndGg/bmV3IG8uTGF0TG5nKHRbMF0sdFsxXSk6bnVsbDp0PT09aXx8bnVsbD09PXQ/dDoib2JqZWN0Ij09dHlwZW9mIHQmJiJsYXQiaW4gdD9uZXcgby5MYXRMbmcodC5sYXQsImxuZyJpbiB0P3QubG5nOnQubG9uLHQuYWx0KTplPT09aT9udWxsOm5ldyBvLkxhdExuZyh0LGUsbil9LG8uTGF0TG5nQm91bmRzPWZ1bmN0aW9uKHQsZSl7aWYodClmb3IodmFyIGk9ZT9bdCxlXTp0LG49MCxvPWkubGVuZ3RoO248bztuKyspdGhpcy5leHRlbmQoaVtuXSl9LG8uTGF0TG5nQm91bmRzLnByb3RvdHlwZT17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBlLGksbj10aGlzLl9zb3V0aFdlc3Qscz10aGlzLl9ub3J0aEVhc3Q7aWYodCBpbnN0YW5jZW9mIG8uTGF0TG5nKWU9dCxpPXQ7ZWxzZXtpZighKHQgaW5zdGFuY2VvZiBvLkxhdExuZ0JvdW5kcykpcmV0dXJuIHQ/dGhpcy5leHRlbmQoby5sYXRMbmcodCl8fG8ubGF0TG5nQm91bmRzKHQpKTp0aGlzO2lmKGU9dC5fc291dGhXZXN0LGk9dC5fbm9ydGhFYXN0LCFlfHwhaSlyZXR1cm4gdGhpc31yZXR1cm4gbnx8cz8obi5sYXQ9TWF0aC5taW4oZS5sYXQsbi5sYXQpLG4ubG5nPU1hdGgubWluKGUubG5nLG4ubG5nKSxzLmxhdD1NYXRoLm1heChpLmxhdCxzLmxhdCkscy5sbmc9TWF0aC5tYXgoaS5sbmcscy5sbmcpKToodGhpcy5fc291dGhXZXN0PW5ldyBvLkxhdExuZyhlLmxhdCxlLmxuZyksdGhpcy5fbm9ydGhFYXN0PW5ldyBvLkxhdExuZyhpLmxhdCxpLmxuZykpLHRoaXN9LHBhZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zb3V0aFdlc3QsaT10aGlzLl9ub3J0aEVhc3Qsbj1NYXRoLmFicyhlLmxhdC1pLmxhdCkqdCxzPU1hdGguYWJzKGUubG5nLWkubG5nKSp0O3JldHVybiBuZXcgby5MYXRMbmdCb3VuZHMobmV3IG8uTGF0TG5nKGUubGF0LW4sZS5sbmctcyksbmV3IG8uTGF0TG5nKGkubGF0K24saS5sbmcrcykpfSxnZXRDZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uTGF0TG5nKCh0aGlzLl9zb3V0aFdlc3QubGF0K3RoaXMuX25vcnRoRWFzdC5sYXQpLzIsKHRoaXMuX3NvdXRoV2VzdC5sbmcrdGhpcy5fbm9ydGhFYXN0LmxuZykvMil9LGdldFNvdXRoV2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3R9LGdldE5vcnRoRWFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub3J0aEVhc3R9LGdldE5vcnRoV2VzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5MYXRMbmcodGhpcy5nZXROb3J0aCgpLHRoaXMuZ2V0V2VzdCgpKX0sZ2V0U291dGhFYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvLkxhdExuZyh0aGlzLmdldFNvdXRoKCksdGhpcy5nZXRFYXN0KCkpfSxnZXRXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXRoV2VzdC5sbmd9LGdldFNvdXRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXRoV2VzdC5sYXR9LGdldEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ydGhFYXN0LmxuZ30sZ2V0Tm9ydGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ydGhFYXN0LmxhdH0sY29udGFpbnM6ZnVuY3Rpb24odCl7dD0ibnVtYmVyIj09dHlwZW9mIHRbMF18fHQgaW5zdGFuY2VvZiBvLkxhdExuZ3x8ImxhdCJpbiB0P28ubGF0TG5nKHQpOm8ubGF0TG5nQm91bmRzKHQpO3ZhciBlLGksbj10aGlzLl9zb3V0aFdlc3Qscz10aGlzLl9ub3J0aEVhc3Q7cmV0dXJuIHQgaW5zdGFuY2VvZiBvLkxhdExuZ0JvdW5kcz8oZT10LmdldFNvdXRoV2VzdCgpLGk9dC5nZXROb3J0aEVhc3QoKSk6ZT1pPXQsZS5sYXQ+PW4ubGF0JiZpLmxhdDw9cy5sYXQmJmUubG5nPj1uLmxuZyYmaS5sbmc8PXMubG5nfSxpbnRlcnNlY3RzOmZ1bmN0aW9uKHQpe3Q9by5sYXRMbmdCb3VuZHModCk7dmFyIGU9dGhpcy5fc291dGhXZXN0LGk9dGhpcy5fbm9ydGhFYXN0LG49dC5nZXRTb3V0aFdlc3QoKSxzPXQuZ2V0Tm9ydGhFYXN0KCkscj1zLmxhdD49ZS5sYXQmJm4ubGF0PD1pLmxhdCxhPXMubG5nPj1lLmxuZyYmbi5sbmc8PWkubG5nO3JldHVybiByJiZhfSxvdmVybGFwczpmdW5jdGlvbih0KXt0PW8ubGF0TG5nQm91bmRzKHQpO3ZhciBlPXRoaXMuX3NvdXRoV2VzdCxpPXRoaXMuX25vcnRoRWFzdCxuPXQuZ2V0U291dGhXZXN0KCkscz10LmdldE5vcnRoRWFzdCgpLHI9cy5sYXQ+ZS5sYXQmJm4ubGF0PGkubGF0LGE9cy5sbmc+ZS5sbmcmJm4ubG5nPGkubG5nO3JldHVybiByJiZhfSx0b0JCb3hTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5nZXRXZXN0KCksdGhpcy5nZXRTb3V0aCgpLHRoaXMuZ2V0RWFzdCgpLHRoaXMuZ2V0Tm9ydGgoKV0uam9pbigiLCIpfSxlcXVhbHM6ZnVuY3Rpb24odCl7cmV0dXJuISF0JiYodD1vLmxhdExuZ0JvdW5kcyh0KSx0aGlzLl9zb3V0aFdlc3QuZXF1YWxzKHQuZ2V0U291dGhXZXN0KCkpJiZ0aGlzLl9ub3J0aEVhc3QuZXF1YWxzKHQuZ2V0Tm9ydGhFYXN0KCkpKX0saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuX3NvdXRoV2VzdHx8IXRoaXMuX25vcnRoRWFzdCl9fSxvLmxhdExuZ0JvdW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2Ygby5MYXRMbmdCb3VuZHM/dDpuZXcgby5MYXRMbmdCb3VuZHModCxlKX0sby5Qcm9qZWN0aW9uPXt9LG8uUHJvamVjdGlvbi5Mb25MYXQ9e3Byb2plY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLlBvaW50KHQubG5nLHQubGF0KX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5MYXRMbmcodC55LHQueCl9LGJvdW5kczpvLmJvdW5kcyhbLTE4MCwtOTBdLFsxODAsOTBdKX0sby5Qcm9qZWN0aW9uLlNwaGVyaWNhbE1lcmNhdG9yPXtSOjYzNzgxMzcsTUFYX0xBVElUVURFOjg1LjA1MTEyODc3OTgscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLlBJLzE4MCxpPXRoaXMuTUFYX0xBVElUVURFLG49TWF0aC5tYXgoTWF0aC5taW4oaSx0LmxhdCksLWkpLHM9TWF0aC5zaW4obiplKTtyZXR1cm4gbmV3IG8uUG9pbnQodGhpcy5SKnQubG5nKmUsdGhpcy5SKk1hdGgubG9nKCgxK3MpLygxLXMpKS8yKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPTE4MC9NYXRoLlBJO3JldHVybiBuZXcgby5MYXRMbmcoKDIqTWF0aC5hdGFuKE1hdGguZXhwKHQueS90aGlzLlIpKS1NYXRoLlBJLzIpKmUsdC54KmUvdGhpcy5SKX0sYm91bmRzOmZ1bmN0aW9uKCl7dmFyIHQ9NjM3ODEzNypNYXRoLlBJO3JldHVybiBvLmJvdW5kcyhbLXQsLXRdLFt0LHRdKX0oKX0sby5DUlM9e2xhdExuZ1RvUG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxuPXRoaXMuc2NhbGUoZSk7cmV0dXJuIHRoaXMudHJhbnNmb3JtYXRpb24uX3RyYW5zZm9ybShpLG4pfSxwb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5zY2FsZShlKSxuPXRoaXMudHJhbnNmb3JtYXRpb24udW50cmFuc2Zvcm0odCxpKTtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdChuKX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdCh0KX0sc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDI1NipNYXRoLnBvdygyLHQpfSx6b29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0LzI1NikvTWF0aC5MTjJ9LGdldFByb2plY3RlZEJvdW5kczpmdW5jdGlvbih0KXtpZih0aGlzLmluZmluaXRlKXJldHVybiBudWxsO3ZhciBlPXRoaXMucHJvamVjdGlvbi5ib3VuZHMsaT10aGlzLnNjYWxlKHQpLG49dGhpcy50cmFuc2Zvcm1hdGlvbi50cmFuc2Zvcm0oZS5taW4saSkscz10aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShlLm1heCxpKTtyZXR1cm4gby5ib3VuZHMobixzKX0saW5maW5pdGU6ITEsd3JhcExhdExuZzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLndyYXBMbmc/by5VdGlsLndyYXBOdW0odC5sbmcsdGhpcy53cmFwTG5nLCEwKTp0LmxuZyxpPXRoaXMud3JhcExhdD9vLlV0aWwud3JhcE51bSh0LmxhdCx0aGlzLndyYXBMYXQsITApOnQubGF0LG49dC5hbHQ7cmV0dXJuIG8ubGF0TG5nKGksZSxuKX0sd3JhcExhdExuZ0JvdW5kczpmdW5jdGlvbih0KXt2YXIgZT10LmdldENlbnRlcigpLGk9dGhpcy53cmFwTGF0TG5nKGUpLG49ZS5sYXQtaS5sYXQscz1lLmxuZy1pLmxuZztpZigwPT09biYmMD09PXMpcmV0dXJuIHQ7dmFyIHI9dC5nZXRTb3V0aFdlc3QoKSxhPXQuZ2V0Tm9ydGhFYXN0KCksaD1vLmxhdExuZyh7bGF0OnIubGF0LW4sbG5nOnIubG5nLXN9KSxsPW8ubGF0TG5nKHtsYXQ6YS5sYXQtbixsbmc6YS5sbmctc30pO3JldHVybiBuZXcgby5MYXRMbmdCb3VuZHMoaCxsKX19LG8uQ1JTLlNpbXBsZT1vLmV4dGVuZCh7fSxvLkNSUyx7cHJvamVjdGlvbjpvLlByb2plY3Rpb24uTG9uTGF0LHRyYW5zZm9ybWF0aW9uOm5ldyBvLlRyYW5zZm9ybWF0aW9uKDEsMCwtMSwwKSxzY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMix0KX0sem9vbTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjJ9LGRpc3RhbmNlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS5sbmctdC5sbmcsbj1lLmxhdC10LmxhdDtyZXR1cm4gTWF0aC5zcXJ0KGkqaStuKm4pfSxpbmZpbml0ZTohMH0pLG8uQ1JTLkVhcnRoPW8uZXh0ZW5kKHt9LG8uQ1JTLHt3cmFwTG5nOlstMTgwLDE4MF0sUjo2MzcxZTMsZGlzdGFuY2U6ZnVuY3Rpb24odCxlKXt2YXIgaT1NYXRoLlBJLzE4MCxuPXQubGF0Kmksbz1lLmxhdCppLHM9TWF0aC5zaW4obikqTWF0aC5zaW4obykrTWF0aC5jb3MobikqTWF0aC5jb3MobykqTWF0aC5jb3MoKGUubG5nLXQubG5nKSppKTtyZXR1cm4gdGhpcy5SKk1hdGguYWNvcyhNYXRoLm1pbihzLDEpKX19KSxvLkNSUy5FUFNHMzg1Nz1vLmV4dGVuZCh7fSxvLkNSUy5FYXJ0aCx7Y29kZToiRVBTRzozODU3Iixwcm9qZWN0aW9uOm8uUHJvamVjdGlvbi5TcGhlcmljYWxNZXJjYXRvcix0cmFuc2Zvcm1hdGlvbjpmdW5jdGlvbigpe3ZhciB0PS41LyhNYXRoLlBJKm8uUHJvamVjdGlvbi5TcGhlcmljYWxNZXJjYXRvci5SKTtyZXR1cm4gbmV3IG8uVHJhbnNmb3JtYXRpb24odCwuNSwtdCwuNSl9KCl9KSxvLkNSUy5FUFNHOTAwOTEzPW8uZXh0ZW5kKHt9LG8uQ1JTLkVQU0czODU3LHtjb2RlOiJFUFNHOjkwMDkxMyJ9KSxvLkNSUy5FUFNHNDMyNj1vLmV4dGVuZCh7fSxvLkNSUy5FYXJ0aCx7Y29kZToiRVBTRzo0MzI2Iixwcm9qZWN0aW9uOm8uUHJvamVjdGlvbi5Mb25MYXQsdHJhbnNmb3JtYXRpb246bmV3IG8uVHJhbnNmb3JtYXRpb24oMS8xODAsMSwtMS8xODAsLjUpfSksby5NYXA9by5FdmVudGVkLmV4dGVuZCh7b3B0aW9uczp7Y3JzOm8uQ1JTLkVQU0czODU3LGNlbnRlcjppLHpvb206aSxtaW5ab29tOmksbWF4Wm9vbTppLGxheWVyczpbXSxtYXhCb3VuZHM6aSxyZW5kZXJlcjppLHpvb21BbmltYXRpb246ITAsem9vbUFuaW1hdGlvblRocmVzaG9sZDo0LGZhZGVBbmltYXRpb246ITAsbWFya2VyWm9vbUFuaW1hdGlvbjohMCx0cmFuc2Zvcm0zRExpbWl0OjgzODg2MDgsem9vbVNuYXA6MSx6b29tRGVsdGE6MSx0cmFja1Jlc2l6ZTohMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe2U9by5zZXRPcHRpb25zKHRoaXMsZSksdGhpcy5faW5pdENvbnRhaW5lcih0KSx0aGlzLl9pbml0TGF5b3V0KCksdGhpcy5fb25SZXNpemU9by5iaW5kKHRoaXMuX29uUmVzaXplLHRoaXMpLHRoaXMuX2luaXRFdmVudHMoKSxlLm1heEJvdW5kcyYmdGhpcy5zZXRNYXhCb3VuZHMoZS5tYXhCb3VuZHMpLGUuem9vbSE9PWkmJih0aGlzLl96b29tPXRoaXMuX2xpbWl0Wm9vbShlLnpvb20pKSxlLmNlbnRlciYmZS56b29tIT09aSYmdGhpcy5zZXRWaWV3KG8ubGF0TG5nKGUuY2VudGVyKSxlLnpvb20se3Jlc2V0OiEwfSksdGhpcy5faGFuZGxlcnM9W10sdGhpcy5fbGF5ZXJzPXt9LHRoaXMuX3pvb21Cb3VuZExheWVycz17fSx0aGlzLl9zaXplQ2hhbmdlZD0hMCx0aGlzLmNhbGxJbml0SG9va3MoKSx0aGlzLl96b29tQW5pbWF0ZWQ9by5Eb21VdGlsLlRSQU5TSVRJT04mJm8uQnJvd3Nlci5hbnkzZCYmIW8uQnJvd3Nlci5tb2JpbGVPcGVyYSYmdGhpcy5vcHRpb25zLnpvb21BbmltYXRpb24sdGhpcy5fem9vbUFuaW1hdGVkJiYodGhpcy5fY3JlYXRlQW5pbVByb3h5KCksby5Eb21FdmVudC5vbih0aGlzLl9wcm94eSxvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQsdGhpcy5fY2F0Y2hUcmFuc2l0aW9uRW5kLHRoaXMpKSx0aGlzLl9hZGRMYXllcnModGhpcy5vcHRpb25zLmxheWVycyl9LHNldFZpZXc6ZnVuY3Rpb24odCxlLG4pe2lmKGU9ZT09PWk/dGhpcy5fem9vbTp0aGlzLl9saW1pdFpvb20oZSksdD10aGlzLl9saW1pdENlbnRlcihvLmxhdExuZyh0KSxlLHRoaXMub3B0aW9ucy5tYXhCb3VuZHMpLG49bnx8e30sdGhpcy5fc3RvcCgpLHRoaXMuX2xvYWRlZCYmIW4ucmVzZXQmJm4hPT0hMCl7bi5hbmltYXRlIT09aSYmKG4uem9vbT1vLmV4dGVuZCh7YW5pbWF0ZTpuLmFuaW1hdGV9LG4uem9vbSksbi5wYW49by5leHRlbmQoe2FuaW1hdGU6bi5hbmltYXRlLGR1cmF0aW9uOm4uZHVyYXRpb259LG4ucGFuKSk7dmFyIHM9dGhpcy5fem9vbSE9PWU/dGhpcy5fdHJ5QW5pbWF0ZWRab29tJiZ0aGlzLl90cnlBbmltYXRlZFpvb20odCxlLG4uem9vbSk6dGhpcy5fdHJ5QW5pbWF0ZWRQYW4odCxuLnBhbik7aWYocylyZXR1cm4gY2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lciksdGhpc31yZXR1cm4gdGhpcy5fcmVzZXRWaWV3KHQsZSksdGhpc30sc2V0Wm9vbTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9sb2FkZWQ/dGhpcy5zZXRWaWV3KHRoaXMuZ2V0Q2VudGVyKCksdCx7em9vbTplfSk6KHRoaXMuX3pvb209dCx0aGlzKX0sem9vbUluOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9dHx8KG8uQnJvd3Nlci5hbnkzZD90aGlzLm9wdGlvbnMuem9vbURlbHRhOjEpLHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tK3QsZSl9LHpvb21PdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD10fHwoby5Ccm93c2VyLmFueTNkP3RoaXMub3B0aW9ucy56b29tRGVsdGE6MSksdGhpcy5zZXRab29tKHRoaXMuX3pvb20tdCxlKX0sc2V0Wm9vbUFyb3VuZDpmdW5jdGlvbih0LGUsaSl7dmFyIG49dGhpcy5nZXRab29tU2NhbGUoZSkscz10aGlzLmdldFNpemUoKS5kaXZpZGVCeSgyKSxyPXQgaW5zdGFuY2VvZiBvLlBvaW50P3Q6dGhpcy5sYXRMbmdUb0NvbnRhaW5lclBvaW50KHQpLGE9ci5zdWJ0cmFjdChzKS5tdWx0aXBseUJ5KDEtMS9uKSxoPXRoaXMuY29udGFpbmVyUG9pbnRUb0xhdExuZyhzLmFkZChhKSk7cmV0dXJuIHRoaXMuc2V0VmlldyhoLGUse3pvb206aX0pfSxfZ2V0Qm91bmRzQ2VudGVyWm9vbTpmdW5jdGlvbih0LGUpe2U9ZXx8e30sdD10LmdldEJvdW5kcz90LmdldEJvdW5kcygpOm8ubGF0TG5nQm91bmRzKHQpO3ZhciBpPW8ucG9pbnQoZS5wYWRkaW5nVG9wTGVmdHx8ZS5wYWRkaW5nfHxbMCwwXSksbj1vLnBvaW50KGUucGFkZGluZ0JvdHRvbVJpZ2h0fHxlLnBhZGRpbmd8fFswLDBdKSxzPXRoaXMuZ2V0Qm91bmRzWm9vbSh0LCExLGkuYWRkKG4pKTtzPSJudW1iZXIiPT10eXBlb2YgZS5tYXhab29tP01hdGgubWluKGUubWF4Wm9vbSxzKTpzO3ZhciByPW4uc3VidHJhY3QoaSkuZGl2aWRlQnkoMiksYT10aGlzLnByb2plY3QodC5nZXRTb3V0aFdlc3QoKSxzKSxoPXRoaXMucHJvamVjdCh0LmdldE5vcnRoRWFzdCgpLHMpLGw9dGhpcy51bnByb2plY3QoYS5hZGQoaCkuZGl2aWRlQnkoMikuYWRkKHIpLHMpO3JldHVybntjZW50ZXI6bCx6b29tOnN9fSxmaXRCb3VuZHM6ZnVuY3Rpb24odCxlKXtpZih0PW8ubGF0TG5nQm91bmRzKHQpLCF0LmlzVmFsaWQoKSl0aHJvdyBuZXcgRXJyb3IoIkJvdW5kcyBhcmUgbm90IHZhbGlkLiIpO3ZhciBpPXRoaXMuX2dldEJvdW5kc0NlbnRlclpvb20odCxlKTtyZXR1cm4gdGhpcy5zZXRWaWV3KGkuY2VudGVyLGkuem9vbSxlKX0sZml0V29ybGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZml0Qm91bmRzKFtbLTkwLC0xODBdLFs5MCwxODBdXSx0KX0scGFuVG86ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zZXRWaWV3KHQsdGhpcy5fem9vbSx7cGFuOmV9KX0scGFuQnk6ZnVuY3Rpb24odCxlKXtpZih0PW8ucG9pbnQodCkucm91bmQoKSxlPWV8fHt9LCF0LngmJiF0LnkpcmV0dXJuIHRoaXMuZmlyZSgibW92ZWVuZCIpO2lmKGUuYW5pbWF0ZSE9PSEwJiYhdGhpcy5nZXRTaXplKCkuY29udGFpbnModCkpcmV0dXJuIHRoaXMuX3Jlc2V0Vmlldyh0aGlzLnVucHJvamVjdCh0aGlzLnByb2plY3QodGhpcy5nZXRDZW50ZXIoKSkuYWRkKHQpKSx0aGlzLmdldFpvb20oKSksdGhpcztpZih0aGlzLl9wYW5BbmltfHwodGhpcy5fcGFuQW5pbT1uZXcgby5Qb3NBbmltYXRpb24sdGhpcy5fcGFuQW5pbS5vbih7c3RlcDp0aGlzLl9vblBhblRyYW5zaXRpb25TdGVwLGVuZDp0aGlzLl9vblBhblRyYW5zaXRpb25FbmR9LHRoaXMpKSxlLm5vTW92ZVN0YXJ0fHx0aGlzLmZpcmUoIm1vdmVzdGFydCIpLGUuYW5pbWF0ZSE9PSExKXtvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbWFwUGFuZSwibGVhZmxldC1wYW4tYW5pbSIpO3ZhciBpPXRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdCh0KS5yb3VuZCgpO3RoaXMuX3BhbkFuaW0ucnVuKHRoaXMuX21hcFBhbmUsaSxlLmR1cmF0aW9ufHwuMjUsZS5lYXNlTGluZWFyaXR5KX1lbHNlIHRoaXMuX3Jhd1BhbkJ5KHQpLHRoaXMuZmlyZSgibW92ZSIpLmZpcmUoIm1vdmVlbmQiKTtyZXR1cm4gdGhpc30sZmx5VG86ZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIHModCl7dmFyIGU9dD8tMToxLGk9dD92Omcsbj12KnYtZypnK2UqTCpMKnkqeSxvPTIqaSpMKnkscz1uL28scj1NYXRoLnNxcnQocypzKzEpLXMsYT1yPDFlLTk/LTE4Ok1hdGgubG9nKHIpO3JldHVybiBhfWZ1bmN0aW9uIHIodCl7cmV0dXJuKE1hdGguZXhwKHQpLU1hdGguZXhwKC10KSkvMn1mdW5jdGlvbiBhKHQpe3JldHVybihNYXRoLmV4cCh0KStNYXRoLmV4cCgtdCkpLzJ9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gcih0KS9hKHQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGcqKGEoeCkvYSh4K1AqdCkpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIGcqKGEoeCkqaCh4K1AqdCktcih4KSkvTH1mdW5jdGlvbiBjKHQpe3JldHVybiAxLU1hdGgucG93KDEtdCwxLjUpfWZ1bmN0aW9uIGQoKXt2YXIgaT0oRGF0ZS5ub3coKS13KS9ULG49YyhpKSpiO2k8PTE/KHRoaXMuX2ZseVRvRnJhbWU9by5VdGlsLnJlcXVlc3RBbmltRnJhbWUoZCx0aGlzKSx0aGlzLl9tb3ZlKHRoaXMudW5wcm9qZWN0KF8uYWRkKG0uc3VidHJhY3QoXykubXVsdGlwbHlCeSh1KG4pL3kpKSxmKSx0aGlzLmdldFNjYWxlWm9vbShnL2wobiksZikse2ZseVRvOiEwfSkpOnRoaXMuX21vdmUodCxlKS5fbW92ZUVuZCghMCl9aWYobj1ufHx7fSxuLmFuaW1hdGU9PT0hMXx8IW8uQnJvd3Nlci5hbnkzZClyZXR1cm4gdGhpcy5zZXRWaWV3KHQsZSxuKTt0aGlzLl9zdG9wKCk7dmFyIF89dGhpcy5wcm9qZWN0KHRoaXMuZ2V0Q2VudGVyKCkpLG09dGhpcy5wcm9qZWN0KHQpLHA9dGhpcy5nZXRTaXplKCksZj10aGlzLl96b29tO3Q9by5sYXRMbmcodCksZT1lPT09aT9mOmU7dmFyIGc9TWF0aC5tYXgocC54LHAueSksdj1nKnRoaXMuZ2V0Wm9vbVNjYWxlKGYsZSkseT1tLmRpc3RhbmNlVG8oXyl8fDEsUD0xLjQyLEw9UCpQLHg9cygwKSx3PURhdGUubm93KCksYj0ocygxKS14KS9QLFQ9bi5kdXJhdGlvbj8xZTMqbi5kdXJhdGlvbjoxZTMqYiouODtyZXR1cm4gdGhpcy5fbW92ZVN0YXJ0KCEwKSxkLmNhbGwodGhpcyksdGhpc30sZmx5VG9Cb3VuZHM6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9nZXRCb3VuZHNDZW50ZXJab29tKHQsZSk7cmV0dXJuIHRoaXMuZmx5VG8oaS5jZW50ZXIsaS56b29tLGUpfSxzZXRNYXhCb3VuZHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9by5sYXRMbmdCb3VuZHModCksdC5pc1ZhbGlkKCk/KHRoaXMub3B0aW9ucy5tYXhCb3VuZHMmJnRoaXMub2ZmKCJtb3ZlZW5kIix0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpLHRoaXMub3B0aW9ucy5tYXhCb3VuZHM9dCx0aGlzLl9sb2FkZWQmJnRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcygpLHRoaXMub24oIm1vdmVlbmQiLHRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcykpOih0aGlzLm9wdGlvbnMubWF4Qm91bmRzPW51bGwsdGhpcy5vZmYoIm1vdmVlbmQiLHRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcykpfSxzZXRNaW5ab29tOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMubWluWm9vbT10LHRoaXMuX2xvYWRlZCYmdGhpcy5nZXRab29tKCk8dGhpcy5vcHRpb25zLm1pblpvb20/dGhpcy5zZXRab29tKHQpOnRoaXN9LHNldE1heFpvb206ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5tYXhab29tPXQsdGhpcy5fbG9hZGVkJiZ0aGlzLmdldFpvb20oKT50aGlzLm9wdGlvbnMubWF4Wm9vbT90aGlzLnNldFpvb20odCk6dGhpc30scGFuSW5zaWRlQm91bmRzOmZ1bmN0aW9uKHQsZSl7dGhpcy5fZW5mb3JjaW5nQm91bmRzPSEwO3ZhciBpPXRoaXMuZ2V0Q2VudGVyKCksbj10aGlzLl9saW1pdENlbnRlcihpLHRoaXMuX3pvb20sby5sYXRMbmdCb3VuZHModCkpO3JldHVybiBpLmVxdWFscyhuKXx8dGhpcy5wYW5UbyhuLGUpLHRoaXMuX2VuZm9yY2luZ0JvdW5kcz0hMSx0aGlzfSxpbnZhbGlkYXRlU2l6ZTpmdW5jdGlvbih0KXtpZighdGhpcy5fbG9hZGVkKXJldHVybiB0aGlzO3Q9by5leHRlbmQoe2FuaW1hdGU6ITEscGFuOiEwfSx0PT09ITA/e2FuaW1hdGU6ITB9OnQpO3ZhciBlPXRoaXMuZ2V0U2l6ZSgpO3RoaXMuX3NpemVDaGFuZ2VkPSEwLHRoaXMuX2xhc3RDZW50ZXI9bnVsbDt2YXIgaT10aGlzLmdldFNpemUoKSxuPWUuZGl2aWRlQnkoMikucm91bmQoKSxzPWkuZGl2aWRlQnkoMikucm91bmQoKSxyPW4uc3VidHJhY3Qocyk7cmV0dXJuIHIueHx8ci55Pyh0LmFuaW1hdGUmJnQucGFuP3RoaXMucGFuQnkocik6KHQucGFuJiZ0aGlzLl9yYXdQYW5CeShyKSx0aGlzLmZpcmUoIm1vdmUiKSx0LmRlYm91bmNlTW92ZWVuZD8oY2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lciksdGhpcy5fc2l6ZVRpbWVyPXNldFRpbWVvdXQoby5iaW5kKHRoaXMuZmlyZSx0aGlzLCJtb3ZlZW5kIiksMjAwKSk6dGhpcy5maXJlKCJtb3ZlZW5kIikpLHRoaXMuZmlyZSgicmVzaXplIix7b2xkU2l6ZTplLG5ld1NpemU6aX0pKTp0aGlzfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2V0Wm9vbSh0aGlzLl9saW1pdFpvb20odGhpcy5fem9vbSkpLHRoaXMub3B0aW9ucy56b29tU25hcHx8dGhpcy5maXJlKCJ2aWV3cmVzZXQiKSx0aGlzLl9zdG9wKCl9LGxvY2F0ZTpmdW5jdGlvbih0KXtpZih0PXRoaXMuX2xvY2F0ZU9wdGlvbnM9by5leHRlbmQoe3RpbWVvdXQ6MWU0LHdhdGNoOiExfSx0KSwhKCJnZW9sb2NhdGlvbiJpbiBuYXZpZ2F0b3IpKXJldHVybiB0aGlzLl9oYW5kbGVHZW9sb2NhdGlvbkVycm9yKHtjb2RlOjAsbWVzc2FnZToiR2VvbG9jYXRpb24gbm90IHN1cHBvcnRlZC4ifSksdGhpczt2YXIgZT1vLmJpbmQodGhpcy5faGFuZGxlR2VvbG9jYXRpb25SZXNwb25zZSx0aGlzKSxpPW8uYmluZCh0aGlzLl9oYW5kbGVHZW9sb2NhdGlvbkVycm9yLHRoaXMpO3JldHVybiB0LndhdGNoP3RoaXMuX2xvY2F0aW9uV2F0Y2hJZD1uYXZpZ2F0b3IuZ2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbihlLGksdCk6bmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihlLGksdCksdGhpc30sc3RvcExvY2F0ZTpmdW5jdGlvbigpe3JldHVybiBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24mJm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoJiZuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9sb2NhdGlvbldhdGNoSWQpLHRoaXMuX2xvY2F0ZU9wdGlvbnMmJih0aGlzLl9sb2NhdGVPcHRpb25zLnNldFZpZXc9ITEpLHRoaXN9LF9oYW5kbGVHZW9sb2NhdGlvbkVycm9yOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY29kZSxpPXQubWVzc2FnZXx8KDE9PT1lPyJwZXJtaXNzaW9uIGRlbmllZCI6Mj09PWU/InBvc2l0aW9uIHVuYXZhaWxhYmxlIjoidGltZW91dCIpO3RoaXMuX2xvY2F0ZU9wdGlvbnMuc2V0VmlldyYmIXRoaXMuX2xvYWRlZCYmdGhpcy5maXRXb3JsZCgpLHRoaXMuZmlyZSgibG9jYXRpb25lcnJvciIse2NvZGU6ZSxtZXNzYWdlOiJHZW9sb2NhdGlvbiBlcnJvcjogIitpKyIuIn0pfSxfaGFuZGxlR2VvbG9jYXRpb25SZXNwb25zZTpmdW5jdGlvbih0KXt2YXIgZT10LmNvb3Jkcy5sYXRpdHVkZSxpPXQuY29vcmRzLmxvbmdpdHVkZSxuPW5ldyBvLkxhdExuZyhlLGkpLHM9bi50b0JvdW5kcyh0LmNvb3Jkcy5hY2N1cmFjeSkscj10aGlzLl9sb2NhdGVPcHRpb25zO2lmKHIuc2V0Vmlldyl7dmFyIGE9dGhpcy5nZXRCb3VuZHNab29tKHMpO3RoaXMuc2V0VmlldyhuLHIubWF4Wm9vbT9NYXRoLm1pbihhLHIubWF4Wm9vbSk6YSl9dmFyIGg9e2xhdGxuZzpuLGJvdW5kczpzLHRpbWVzdGFtcDp0LnRpbWVzdGFtcH07Zm9yKHZhciBsIGluIHQuY29vcmRzKSJudW1iZXIiPT10eXBlb2YgdC5jb29yZHNbbF0mJihoW2xdPXQuY29vcmRzW2xdKTt0aGlzLmZpcmUoImxvY2F0aW9uZm91bmQiLGgpfSxhZGRIYW5kbGVyOmZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIHRoaXM7dmFyIGk9dGhpc1t0XT1uZXcgZSh0aGlzKTtyZXR1cm4gdGhpcy5faGFuZGxlcnMucHVzaChpKSx0aGlzLm9wdGlvbnNbdF0mJmkuZW5hYmxlKCksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7aWYodGhpcy5faW5pdEV2ZW50cyghMCksdGhpcy5fY29udGFpbmVySWQhPT10aGlzLl9jb250YWluZXIuX2xlYWZsZXRfaWQpdGhyb3cgbmV3IEVycm9yKCJNYXAgY29udGFpbmVyIGlzIGJlaW5nIHJldXNlZCBieSBhbm90aGVyIGluc3RhbmNlIik7dHJ5e2RlbGV0ZSB0aGlzLl9jb250YWluZXIuX2xlYWZsZXRfaWQsZGVsZXRlIHRoaXMuX2NvbnRhaW5lcklkfWNhdGNoKHQpe3RoaXMuX2NvbnRhaW5lci5fbGVhZmxldF9pZD1pLHRoaXMuX2NvbnRhaW5lcklkPWl9by5Eb21VdGlsLnJlbW92ZSh0aGlzLl9tYXBQYW5lKSx0aGlzLl9jbGVhckNvbnRyb2xQb3MmJnRoaXMuX2NsZWFyQ29udHJvbFBvcygpLHRoaXMuX2NsZWFySGFuZGxlcnMoKSx0aGlzLl9sb2FkZWQmJnRoaXMuZmlyZSgidW5sb2FkIik7Zm9yKHZhciB0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0ucmVtb3ZlKCk7cmV0dXJuIHRoaXN9LGNyZWF0ZVBhbmU6ZnVuY3Rpb24odCxlKXt2YXIgaT0ibGVhZmxldC1wYW5lIisodD8iIGxlYWZsZXQtIit0LnJlcGxhY2UoIlBhbmUiLCIiKSsiLXBhbmUiOiIiKSxuPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsaSxlfHx0aGlzLl9tYXBQYW5lKTtyZXR1cm4gdCYmKHRoaXMuX3BhbmVzW3RdPW4pLG59LGdldENlbnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja0lmTG9hZGVkKCksdGhpcy5fbGFzdENlbnRlciYmIXRoaXMuX21vdmVkKCk/dGhpcy5fbGFzdENlbnRlcjp0aGlzLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9nZXRDZW50ZXJMYXllclBvaW50KCkpfSxnZXRab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb219LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxlPXRoaXMudW5wcm9qZWN0KHQuZ2V0Qm90dG9tTGVmdCgpKSxpPXRoaXMudW5wcm9qZWN0KHQuZ2V0VG9wUmlnaHQoKSk7cmV0dXJuIG5ldyBvLkxhdExuZ0JvdW5kcyhlLGkpfSxnZXRNaW5ab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW5ab29tPT09aT90aGlzLl9sYXllcnNNaW5ab29tfHwwOnRoaXMub3B0aW9ucy5taW5ab29tfSxnZXRNYXhab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5tYXhab29tPT09aT90aGlzLl9sYXllcnNNYXhab29tPT09aT8xLzA6dGhpcy5fbGF5ZXJzTWF4Wm9vbTp0aGlzLm9wdGlvbnMubWF4Wm9vbX0sZ2V0Qm91bmRzWm9vbTpmdW5jdGlvbih0LGUsaSl7dD1vLmxhdExuZ0JvdW5kcyh0KSxpPW8ucG9pbnQoaXx8WzAsMF0pO3ZhciBuPXRoaXMuZ2V0Wm9vbSgpfHwwLHM9dGhpcy5nZXRNaW5ab29tKCkscj10aGlzLmdldE1heFpvb20oKSxhPXQuZ2V0Tm9ydGhXZXN0KCksaD10LmdldFNvdXRoRWFzdCgpLGw9dGhpcy5nZXRTaXplKCkuc3VidHJhY3QoaSksdT1vLmJvdW5kcyh0aGlzLnByb2plY3QoaCxuKSx0aGlzLnByb2plY3QoYSxuKSkuZ2V0U2l6ZSgpLGM9by5Ccm93c2VyLmFueTNkP3RoaXMub3B0aW9ucy56b29tU25hcDoxLGQ9TWF0aC5taW4obC54L3UueCxsLnkvdS55KTtyZXR1cm4gbj10aGlzLmdldFNjYWxlWm9vbShkLG4pLGMmJihuPU1hdGgucm91bmQobi8oYy8xMDApKSooYy8xMDApLG49ZT9NYXRoLmNlaWwobi9jKSpjOk1hdGguZmxvb3Iobi9jKSpjKSxNYXRoLm1heChzLE1hdGgubWluKHIsbikpfSxnZXRTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NpemUmJiF0aGlzLl9zaXplQ2hhbmdlZHx8KHRoaXMuX3NpemU9bmV3IG8uUG9pbnQodGhpcy5fY29udGFpbmVyLmNsaWVudFdpZHRofHwwLHRoaXMuX2NvbnRhaW5lci5jbGllbnRIZWlnaHR8fDApLHRoaXMuX3NpemVDaGFuZ2VkPSExKSx0aGlzLl9zaXplLmNsb25lKCl9LGdldFBpeGVsQm91bmRzOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0VG9wTGVmdFBvaW50KHQsZSk7cmV0dXJuIG5ldyBvLkJvdW5kcyhpLGkuYWRkKHRoaXMuZ2V0U2l6ZSgpKSl9LGdldFBpeGVsT3JpZ2luOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrSWZMb2FkZWQoKSx0aGlzLl9waXhlbE9yaWdpbn0sZ2V0UGl4ZWxXb3JsZEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5nZXRQcm9qZWN0ZWRCb3VuZHModD09PWk/dGhpcy5nZXRab29tKCk6dCl9LGdldFBhbmU6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuX3BhbmVzW3RdOnR9LGdldFBhbmVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhbmVzfSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxnZXRab29tU2NhbGU6ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLm9wdGlvbnMuY3JzO3JldHVybiBlPWU9PT1pP3RoaXMuX3pvb206ZSxuLnNjYWxlKHQpL24uc2NhbGUoZSl9LGdldFNjYWxlWm9vbTpmdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMub3B0aW9ucy5jcnM7ZT1lPT09aT90aGlzLl96b29tOmU7dmFyIG89bi56b29tKHQqbi5zY2FsZShlKSk7cmV0dXJuIGlzTmFOKG8pPzEvMDpvfSxwcm9qZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZT09PWk/dGhpcy5fem9vbTplLHRoaXMub3B0aW9ucy5jcnMubGF0TG5nVG9Qb2ludChvLmxhdExuZyh0KSxlKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZT09PWk/dGhpcy5fem9vbTplLHRoaXMub3B0aW9ucy5jcnMucG9pbnRUb0xhdExuZyhvLnBvaW50KHQpLGUpfSxsYXllclBvaW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7dmFyIGU9by5wb2ludCh0KS5hZGQodGhpcy5nZXRQaXhlbE9yaWdpbigpKTtyZXR1cm4gdGhpcy51bnByb2plY3QoZSl9LGxhdExuZ1RvTGF5ZXJQb2ludDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnByb2plY3Qoby5sYXRMbmcodCkpLl9yb3VuZCgpO3JldHVybiBlLl9zdWJ0cmFjdCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpfSx3cmFwTGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuY3JzLndyYXBMYXRMbmcoby5sYXRMbmcodCkpfSx3cmFwTGF0TG5nQm91bmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuY3JzLndyYXBMYXRMbmdCb3VuZHMoby5sYXRMbmdCb3VuZHModCkpfSxkaXN0YW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm9wdGlvbnMuY3JzLmRpc3RhbmNlKG8ubGF0TG5nKHQpLG8ubGF0TG5nKGUpKX0sY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ucG9pbnQodCkuc3VidHJhY3QodGhpcy5fZ2V0TWFwUGFuZVBvcygpKX0sbGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ucG9pbnQodCkuYWRkKHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LGNvbnRhaW5lclBvaW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChvLnBvaW50KHQpKTtyZXR1cm4gdGhpcy5sYXllclBvaW50VG9MYXRMbmcoZSl9LGxhdExuZ1RvQ29udGFpbmVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQodGhpcy5sYXRMbmdUb0xheWVyUG9pbnQoby5sYXRMbmcodCkpKX0sbW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8uRG9tRXZlbnQuZ2V0TW91c2VQb3NpdGlvbih0LHRoaXMuX2NvbnRhaW5lcil9LG1vdXNlRXZlbnRUb0xheWVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KSl9LG1vdXNlRXZlbnRUb0xhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXllclBvaW50VG9MYXRMbmcodGhpcy5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpKX0sX2luaXRDb250YWluZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fY29udGFpbmVyPW8uRG9tVXRpbC5nZXQodCk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJNYXAgY29udGFpbmVyIG5vdCBmb3VuZC4iKTtpZihlLl9sZWFmbGV0X2lkKXRocm93IG5ldyBFcnJvcigiTWFwIGNvbnRhaW5lciBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiIpO28uRG9tRXZlbnQuYWRkTGlzdGVuZXIoZSwic2Nyb2xsIix0aGlzLl9vblNjcm9sbCx0aGlzKSx0aGlzLl9jb250YWluZXJJZD1vLlV0aWwuc3RhbXAoZSl9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29udGFpbmVyO3RoaXMuX2ZhZGVBbmltYXRlZD10aGlzLm9wdGlvbnMuZmFkZUFuaW1hdGlvbiYmby5Ccm93c2VyLmFueTNkLG8uRG9tVXRpbC5hZGRDbGFzcyh0LCJsZWFmbGV0LWNvbnRhaW5lciIrKG8uQnJvd3Nlci50b3VjaD8iIGxlYWZsZXQtdG91Y2giOiIiKSsoby5Ccm93c2VyLnJldGluYT8iIGxlYWZsZXQtcmV0aW5hIjoiIikrKG8uQnJvd3Nlci5pZWx0OT8iIGxlYWZsZXQtb2xkaWUiOiIiKSsoby5Ccm93c2VyLnNhZmFyaT8iIGxlYWZsZXQtc2FmYXJpIjoiIikrKHRoaXMuX2ZhZGVBbmltYXRlZD8iIGxlYWZsZXQtZmFkZS1hbmltIjoiIikpOwp2YXIgZT1vLkRvbVV0aWwuZ2V0U3R5bGUodCwicG9zaXRpb24iKTsiYWJzb2x1dGUiIT09ZSYmInJlbGF0aXZlIiE9PWUmJiJmaXhlZCIhPT1lJiYodC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSx0aGlzLl9pbml0UGFuZXMoKSx0aGlzLl9pbml0Q29udHJvbFBvcyYmdGhpcy5faW5pdENvbnRyb2xQb3MoKX0sX2luaXRQYW5lczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BhbmVzPXt9O3RoaXMuX3BhbmVSZW5kZXJlcnM9e30sdGhpcy5fbWFwUGFuZT10aGlzLmNyZWF0ZVBhbmUoIm1hcFBhbmUiLHRoaXMuX2NvbnRhaW5lciksby5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX21hcFBhbmUsbmV3IG8uUG9pbnQoMCwwKSksdGhpcy5jcmVhdGVQYW5lKCJ0aWxlUGFuZSIpLHRoaXMuY3JlYXRlUGFuZSgic2hhZG93UGFuZSIpLHRoaXMuY3JlYXRlUGFuZSgib3ZlcmxheVBhbmUiKSx0aGlzLmNyZWF0ZVBhbmUoIm1hcmtlclBhbmUiKSx0aGlzLmNyZWF0ZVBhbmUoInRvb2x0aXBQYW5lIiksdGhpcy5jcmVhdGVQYW5lKCJwb3B1cFBhbmUiKSx0aGlzLm9wdGlvbnMubWFya2VyWm9vbUFuaW1hdGlvbnx8KG8uRG9tVXRpbC5hZGRDbGFzcyh0Lm1hcmtlclBhbmUsImxlYWZsZXQtem9vbS1oaWRlIiksby5Eb21VdGlsLmFkZENsYXNzKHQuc2hhZG93UGFuZSwibGVhZmxldC16b29tLWhpZGUiKSl9LF9yZXNldFZpZXc6ZnVuY3Rpb24odCxlKXtvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fbWFwUGFuZSxuZXcgby5Qb2ludCgwLDApKTt2YXIgaT0hdGhpcy5fbG9hZGVkO3RoaXMuX2xvYWRlZD0hMCxlPXRoaXMuX2xpbWl0Wm9vbShlKSx0aGlzLmZpcmUoInZpZXdwcmVyZXNldCIpO3ZhciBuPXRoaXMuX3pvb20hPT1lO3RoaXMuX21vdmVTdGFydChuKS5fbW92ZSh0LGUpLl9tb3ZlRW5kKG4pLHRoaXMuZmlyZSgidmlld3Jlc2V0IiksaSYmdGhpcy5maXJlKCJsb2FkIil9LF9tb3ZlU3RhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnRoaXMuZmlyZSgiem9vbXN0YXJ0IiksdGhpcy5maXJlKCJtb3Zlc3RhcnQiKX0sX21vdmU6ZnVuY3Rpb24odCxlLG4pe2U9PT1pJiYoZT10aGlzLl96b29tKTt2YXIgbz10aGlzLl96b29tIT09ZTtyZXR1cm4gdGhpcy5fem9vbT1lLHRoaXMuX2xhc3RDZW50ZXI9dCx0aGlzLl9waXhlbE9yaWdpbj10aGlzLl9nZXROZXdQaXhlbE9yaWdpbih0KSwob3x8biYmbi5waW5jaCkmJnRoaXMuZmlyZSgiem9vbSIsbiksdGhpcy5maXJlKCJtb3ZlIixuKX0sX21vdmVFbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnRoaXMuZmlyZSgiem9vbWVuZCIpLHRoaXMuZmlyZSgibW92ZWVuZCIpfSxfc3RvcDpmdW5jdGlvbigpe3JldHVybiBvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX2ZseVRvRnJhbWUpLHRoaXMuX3BhbkFuaW0mJnRoaXMuX3BhbkFuaW0uc3RvcCgpLHRoaXN9LF9yYXdQYW5CeTpmdW5jdGlvbih0KXtvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fbWFwUGFuZSx0aGlzLl9nZXRNYXBQYW5lUG9zKCkuc3VidHJhY3QodCkpfSxfZ2V0Wm9vbVNwYW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRNYXhab29tKCktdGhpcy5nZXRNaW5ab29tKCl9LF9wYW5JbnNpZGVNYXhCb3VuZHM6ZnVuY3Rpb24oKXt0aGlzLl9lbmZvcmNpbmdCb3VuZHN8fHRoaXMucGFuSW5zaWRlQm91bmRzKHRoaXMub3B0aW9ucy5tYXhCb3VuZHMpfSxfY2hlY2tJZkxvYWRlZDpmdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWQpdGhyb3cgbmV3IEVycm9yKCJTZXQgbWFwIGNlbnRlciBhbmQgem9vbSBmaXJzdC4iKX0sX2luaXRFdmVudHM6ZnVuY3Rpb24oZSl7aWYoby5Eb21FdmVudCl7dGhpcy5fdGFyZ2V0cz17fSx0aGlzLl90YXJnZXRzW28uc3RhbXAodGhpcy5fY29udGFpbmVyKV09dGhpczt2YXIgaT1lPyJvZmYiOiJvbiI7by5Eb21FdmVudFtpXSh0aGlzLl9jb250YWluZXIsImNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZW1vdmUgY29udGV4dG1lbnUga2V5cHJlc3MiLHRoaXMuX2hhbmRsZURPTUV2ZW50LHRoaXMpLHRoaXMub3B0aW9ucy50cmFja1Jlc2l6ZSYmby5Eb21FdmVudFtpXSh0LCJyZXNpemUiLHRoaXMuX29uUmVzaXplLHRoaXMpLG8uQnJvd3Nlci5hbnkzZCYmdGhpcy5vcHRpb25zLnRyYW5zZm9ybTNETGltaXQmJnRoaXNbaV0oIm1vdmVlbmQiLHRoaXMuX29uTW92ZUVuZCl9fSxfb25SZXNpemU6ZnVuY3Rpb24oKXtvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX3Jlc2l6ZVJlcXVlc3QpLHRoaXMuX3Jlc2l6ZVJlcXVlc3Q9by5VdGlsLnJlcXVlc3RBbmltRnJhbWUoZnVuY3Rpb24oKXt0aGlzLmludmFsaWRhdGVTaXplKHtkZWJvdW5jZU1vdmVlbmQ6ITB9KX0sdGhpcyl9LF9vblNjcm9sbDpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lci5zY3JvbGxUb3A9MCx0aGlzLl9jb250YWluZXIuc2Nyb2xsTGVmdD0wfSxfb25Nb3ZlRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TWFwUGFuZVBvcygpO01hdGgubWF4KE1hdGguYWJzKHQueCksTWF0aC5hYnModC55KSk+PXRoaXMub3B0aW9ucy50cmFuc2Zvcm0zRExpbWl0JiZ0aGlzLl9yZXNldFZpZXcodGhpcy5nZXRDZW50ZXIoKSx0aGlzLmdldFpvb20oKSl9LF9maW5kRXZlbnRUYXJnZXRzOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpLG49W10scz0ibW91c2VvdXQiPT09ZXx8Im1vdXNlb3ZlciI9PT1lLHI9dC50YXJnZXR8fHQuc3JjRWxlbWVudCxhPSExO3I7KXtpZihpPXRoaXMuX3RhcmdldHNbby5zdGFtcChyKV0saSYmKCJjbGljayI9PT1lfHwicHJlY2xpY2siPT09ZSkmJiF0Ll9zaW11bGF0ZWQmJnRoaXMuX2RyYWdnYWJsZU1vdmVkKGkpKXthPSEwO2JyZWFrfWlmKGkmJmkubGlzdGVucyhlLCEwKSl7aWYocyYmIW8uRG9tRXZlbnQuX2lzRXh0ZXJuYWxUYXJnZXQocix0KSlicmVhaztpZihuLnB1c2goaSkscylicmVha31pZihyPT09dGhpcy5fY29udGFpbmVyKWJyZWFrO3I9ci5wYXJlbnROb2RlfXJldHVybiBuLmxlbmd0aHx8YXx8c3x8IW8uRG9tRXZlbnQuX2lzRXh0ZXJuYWxUYXJnZXQocix0KXx8KG49W3RoaXNdKSxufSxfaGFuZGxlRE9NRXZlbnQ6ZnVuY3Rpb24odCl7aWYodGhpcy5fbG9hZGVkJiYhby5Eb21FdmVudC5fc2tpcHBlZCh0KSl7dmFyIGU9ImtleXByZXNzIj09PXQudHlwZSYmMTM9PT10LmtleUNvZGU/ImNsaWNrIjp0LnR5cGU7Im1vdXNlZG93biI9PT1lJiZvLkRvbVV0aWwucHJldmVudE91dGxpbmUodC50YXJnZXR8fHQuc3JjRWxlbWVudCksdGhpcy5fZmlyZURPTUV2ZW50KHQsZSl9fSxfZmlyZURPTUV2ZW50OmZ1bmN0aW9uKHQsZSxpKXtpZigiY2xpY2siPT09dC50eXBlKXt2YXIgbj1vLlV0aWwuZXh0ZW5kKHt9LHQpO24udHlwZT0icHJlY2xpY2siLHRoaXMuX2ZpcmVET01FdmVudChuLG4udHlwZSxpKX1pZighdC5fc3RvcHBlZCYmKGk9KGl8fFtdKS5jb25jYXQodGhpcy5fZmluZEV2ZW50VGFyZ2V0cyh0LGUpKSxpLmxlbmd0aCkpe3ZhciBzPWlbMF07ImNvbnRleHRtZW51Ij09PWUmJnMubGlzdGVucyhlLCEwKSYmby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KTt2YXIgcj17b3JpZ2luYWxFdmVudDp0fTtpZigia2V5cHJlc3MiIT09dC50eXBlKXt2YXIgYT1zIGluc3RhbmNlb2Ygby5NYXJrZXI7ci5jb250YWluZXJQb2ludD1hP3RoaXMubGF0TG5nVG9Db250YWluZXJQb2ludChzLmdldExhdExuZygpKTp0aGlzLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLHIubGF5ZXJQb2ludD10aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHIuY29udGFpbmVyUG9pbnQpLHIubGF0bG5nPWE/cy5nZXRMYXRMbmcoKTp0aGlzLmxheWVyUG9pbnRUb0xhdExuZyhyLmxheWVyUG9pbnQpfWZvcih2YXIgaD0wO2g8aS5sZW5ndGg7aCsrKWlmKGlbaF0uZmlyZShlLHIsITApLHIub3JpZ2luYWxFdmVudC5fc3RvcHBlZHx8aVtoXS5vcHRpb25zLm5vbkJ1YmJsaW5nRXZlbnRzJiZvLlV0aWwuaW5kZXhPZihpW2hdLm9wdGlvbnMubm9uQnViYmxpbmdFdmVudHMsZSkhPT0tMSlyZXR1cm59fSxfZHJhZ2dhYmxlTW92ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5kcmFnZ2luZyYmdC5kcmFnZ2luZy5lbmFibGVkKCk/dDp0aGlzLHQuZHJhZ2dpbmcmJnQuZHJhZ2dpbmcubW92ZWQoKXx8dGhpcy5ib3hab29tJiZ0aGlzLmJveFpvb20ubW92ZWQoKX0sX2NsZWFySGFuZGxlcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuX2hhbmRsZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuX2hhbmRsZXJzW3RdLmRpc2FibGUoKX0sd2hlblJlYWR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2xvYWRlZD90LmNhbGwoZXx8dGhpcyx7dGFyZ2V0OnRoaXN9KTp0aGlzLm9uKCJsb2FkIix0LGUpLHRoaXN9LF9nZXRNYXBQYW5lUG9zOmZ1bmN0aW9uKCl7cmV0dXJuIG8uRG9tVXRpbC5nZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lKXx8bmV3IG8uUG9pbnQoMCwwKX0sX21vdmVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TWFwUGFuZVBvcygpO3JldHVybiB0JiYhdC5lcXVhbHMoWzAsMF0pfSxfZ2V0VG9wTGVmdFBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49dCYmZSE9PWk/dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4odCxlKTp0aGlzLmdldFBpeGVsT3JpZ2luKCk7cmV0dXJuIG4uc3VidHJhY3QodGhpcy5fZ2V0TWFwUGFuZVBvcygpKX0sX2dldE5ld1BpeGVsT3JpZ2luOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpO3JldHVybiB0aGlzLnByb2plY3QodCxlKS5fc3VidHJhY3QoaSkuX2FkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpLl9yb3VuZCgpfSxfbGF0TG5nVG9OZXdMYXllclBvaW50OmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10aGlzLl9nZXROZXdQaXhlbE9yaWdpbihpLGUpO3JldHVybiB0aGlzLnByb2plY3QodCxlKS5fc3VidHJhY3Qobil9LF9sYXRMbmdCb3VuZHNUb05ld0xheWVyQm91bmRzOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10aGlzLl9nZXROZXdQaXhlbE9yaWdpbihpLGUpO3JldHVybiBvLmJvdW5kcyhbdGhpcy5wcm9qZWN0KHQuZ2V0U291dGhXZXN0KCksZSkuX3N1YnRyYWN0KG4pLHRoaXMucHJvamVjdCh0LmdldE5vcnRoV2VzdCgpLGUpLl9zdWJ0cmFjdChuKSx0aGlzLnByb2plY3QodC5nZXRTb3V0aEVhc3QoKSxlKS5fc3VidHJhY3QobiksdGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCksZSkuX3N1YnRyYWN0KG4pXSl9LF9nZXRDZW50ZXJMYXllclBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpKX0sX2dldENlbnRlck9mZnNldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXRMbmdUb0xheWVyUG9pbnQodCkuc3VidHJhY3QodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sX2xpbWl0Q2VudGVyOmZ1bmN0aW9uKHQsZSxpKXtpZighaSlyZXR1cm4gdDt2YXIgbj10aGlzLnByb2plY3QodCxlKSxzPXRoaXMuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLHI9bmV3IG8uQm91bmRzKG4uc3VidHJhY3Qocyksbi5hZGQocykpLGE9dGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KHIsaSxlKTtyZXR1cm4gYS5yb3VuZCgpLmVxdWFscyhbMCwwXSk/dDp0aGlzLnVucHJvamVjdChuLmFkZChhKSxlKX0sX2xpbWl0T2Zmc2V0OmZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIHQ7dmFyIGk9dGhpcy5nZXRQaXhlbEJvdW5kcygpLG49bmV3IG8uQm91bmRzKGkubWluLmFkZCh0KSxpLm1heC5hZGQodCkpO3JldHVybiB0LmFkZCh0aGlzLl9nZXRCb3VuZHNPZmZzZXQobixlKSl9LF9nZXRCb3VuZHNPZmZzZXQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPW8uYm91bmRzKHRoaXMucHJvamVjdChlLmdldE5vcnRoRWFzdCgpLGkpLHRoaXMucHJvamVjdChlLmdldFNvdXRoV2VzdCgpLGkpKSxzPW4ubWluLnN1YnRyYWN0KHQubWluKSxyPW4ubWF4LnN1YnRyYWN0KHQubWF4KSxhPXRoaXMuX3JlYm91bmQocy54LC1yLngpLGg9dGhpcy5fcmVib3VuZChzLnksLXIueSk7cmV0dXJuIG5ldyBvLlBvaW50KGEsaCl9LF9yZWJvdW5kOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZT4wP01hdGgucm91bmQodC1lKS8yOk1hdGgubWF4KDAsTWF0aC5jZWlsKHQpKS1NYXRoLm1heCgwLE1hdGguZmxvb3IoZSkpfSxfbGltaXRab29tOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0TWluWm9vbSgpLGk9dGhpcy5nZXRNYXhab29tKCksbj1vLkJyb3dzZXIuYW55M2Q/dGhpcy5vcHRpb25zLnpvb21TbmFwOjE7cmV0dXJuIG4mJih0PU1hdGgucm91bmQodC9uKSpuKSxNYXRoLm1heChlLE1hdGgubWluKGksdCkpfSxfb25QYW5UcmFuc2l0aW9uU3RlcDpmdW5jdGlvbigpe3RoaXMuZmlyZSgibW92ZSIpfSxfb25QYW5UcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7by5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuX21hcFBhbmUsImxlYWZsZXQtcGFuLWFuaW0iKSx0aGlzLmZpcmUoIm1vdmVlbmQiKX0sX3RyeUFuaW1hdGVkUGFuOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0Q2VudGVyT2Zmc2V0KHQpLl9mbG9vcigpO3JldHVybiEoKGUmJmUuYW5pbWF0ZSkhPT0hMCYmIXRoaXMuZ2V0U2l6ZSgpLmNvbnRhaW5zKGkpKSYmKHRoaXMucGFuQnkoaSxlKSwhMCl9LF9jcmVhdGVBbmltUHJveHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wcm94eT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLCJsZWFmbGV0LXByb3h5IGxlYWZsZXQtem9vbS1hbmltYXRlZCIpO3RoaXMuX3BhbmVzLm1hcFBhbmUuYXBwZW5kQ2hpbGQodCksdGhpcy5vbigiem9vbWFuaW0iLGZ1bmN0aW9uKGUpe3ZhciBpPW8uRG9tVXRpbC5UUkFOU0ZPUk0sbj10LnN0eWxlW2ldO28uRG9tVXRpbC5zZXRUcmFuc2Zvcm0odCx0aGlzLnByb2plY3QoZS5jZW50ZXIsZS56b29tKSx0aGlzLmdldFpvb21TY2FsZShlLnpvb20sMSkpLG49PT10LnN0eWxlW2ldJiZ0aGlzLl9hbmltYXRpbmdab29tJiZ0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kKCl9LHRoaXMpLHRoaXMub24oImxvYWQgbW92ZWVuZCIsZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldENlbnRlcigpLGk9dGhpcy5nZXRab29tKCk7by5Eb21VdGlsLnNldFRyYW5zZm9ybSh0LHRoaXMucHJvamVjdChlLGkpLHRoaXMuZ2V0Wm9vbVNjYWxlKGksMSkpfSx0aGlzKX0sX2NhdGNoVHJhbnNpdGlvbkVuZDpmdW5jdGlvbih0KXt0aGlzLl9hbmltYXRpbmdab29tJiZ0LnByb3BlcnR5TmFtZS5pbmRleE9mKCJ0cmFuc2Zvcm0iKT49MCYmdGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpfSxfbm90aGluZ1RvQW5pbWF0ZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLl9jb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVhZmxldC16b29tLWFuaW1hdGVkIikubGVuZ3RofSxfdHJ5QW5pbWF0ZWRab29tOmZ1bmN0aW9uKHQsZSxpKXtpZih0aGlzLl9hbmltYXRpbmdab29tKXJldHVybiEwO2lmKGk9aXx8e30sIXRoaXMuX3pvb21BbmltYXRlZHx8aS5hbmltYXRlPT09ITF8fHRoaXMuX25vdGhpbmdUb0FuaW1hdGUoKXx8TWF0aC5hYnMoZS10aGlzLl96b29tKT50aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvblRocmVzaG9sZClyZXR1cm4hMTt2YXIgbj10aGlzLmdldFpvb21TY2FsZShlKSxzPXRoaXMuX2dldENlbnRlck9mZnNldCh0KS5fZGl2aWRlQnkoMS0xL24pO3JldHVybiEoaS5hbmltYXRlIT09ITAmJiF0aGlzLmdldFNpemUoKS5jb250YWlucyhzKSkmJihvLlV0aWwucmVxdWVzdEFuaW1GcmFtZShmdW5jdGlvbigpe3RoaXMuX21vdmVTdGFydCghMCkuX2FuaW1hdGVab29tKHQsZSwhMCl9LHRoaXMpLCEwKX0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQsZSxpLG4pe2kmJih0aGlzLl9hbmltYXRpbmdab29tPSEwLHRoaXMuX2FuaW1hdGVUb0NlbnRlcj10LHRoaXMuX2FuaW1hdGVUb1pvb209ZSxvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbWFwUGFuZSwibGVhZmxldC16b29tLWFuaW0iKSksdGhpcy5maXJlKCJ6b29tYW5pbSIse2NlbnRlcjp0LHpvb206ZSxub1VwZGF0ZTpufSksc2V0VGltZW91dChvLmJpbmQodGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCx0aGlzKSwyNTApfSxfb25ab29tVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZ1pvb20mJihvLkRvbVV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fbWFwUGFuZSwibGVhZmxldC16b29tLWFuaW0iKSx0aGlzLl9hbmltYXRpbmdab29tPSExLHRoaXMuX21vdmUodGhpcy5fYW5pbWF0ZVRvQ2VudGVyLHRoaXMuX2FuaW1hdGVUb1pvb20pLG8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uKCl7dGhpcy5fbW92ZUVuZCghMCl9LHRoaXMpKX19KSxvLm1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5NYXAodCxlKX0sby5MYXllcj1vLkV2ZW50ZWQuZXh0ZW5kKHtvcHRpb25zOntwYW5lOiJvdmVybGF5UGFuZSIsbm9uQnViYmxpbmdFdmVudHM6W10sYXR0cmlidXRpb246bnVsbH0sYWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWRkTGF5ZXIodGhpcyksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVtb3ZlRnJvbSh0aGlzLl9tYXB8fHRoaXMuX21hcFRvQWRkKX0scmVtb3ZlRnJvbTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5yZW1vdmVMYXllcih0aGlzKSx0aGlzfSxnZXRQYW5lOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuZ2V0UGFuZSh0P3RoaXMub3B0aW9uc1t0XXx8dDp0aGlzLm9wdGlvbnMucGFuZSl9LGFkZEludGVyYWN0aXZlVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXAuX3RhcmdldHNbby5zdGFtcCh0KV09dGhpcyx0aGlzfSxyZW1vdmVJbnRlcmFjdGl2ZVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMuX21hcC5fdGFyZ2V0c1tvLnN0YW1wKHQpXSx0aGlzfSxnZXRBdHRyaWJ1dGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYXR0cmlidXRpb259LF9sYXllckFkZDpmdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldDtpZihlLmhhc0xheWVyKHRoaXMpKXtpZih0aGlzLl9tYXA9ZSx0aGlzLl96b29tQW5pbWF0ZWQ9ZS5fem9vbUFuaW1hdGVkLHRoaXMuZ2V0RXZlbnRzKXt2YXIgaT10aGlzLmdldEV2ZW50cygpO2Uub24oaSx0aGlzKSx0aGlzLm9uY2UoInJlbW92ZSIsZnVuY3Rpb24oKXtlLm9mZihpLHRoaXMpfSx0aGlzKX10aGlzLm9uQWRkKGUpLHRoaXMuZ2V0QXR0cmlidXRpb24mJmUuYXR0cmlidXRpb25Db250cm9sJiZlLmF0dHJpYnV0aW9uQ29udHJvbC5hZGRBdHRyaWJ1dGlvbih0aGlzLmdldEF0dHJpYnV0aW9uKCkpLHRoaXMuZmlyZSgiYWRkIiksZS5maXJlKCJsYXllcmFkZCIse2xheWVyOnRoaXN9KX19fSksby5NYXAuaW5jbHVkZSh7YWRkTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGU9by5zdGFtcCh0KTtyZXR1cm4gdGhpcy5fbGF5ZXJzW2VdP3RoaXM6KHRoaXMuX2xheWVyc1tlXT10LHQuX21hcFRvQWRkPXRoaXMsdC5iZWZvcmVBZGQmJnQuYmVmb3JlQWRkKHRoaXMpLHRoaXMud2hlblJlYWR5KHQuX2xheWVyQWRkLHQpLHRoaXMpfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt2YXIgZT1vLnN0YW1wKHQpO3JldHVybiB0aGlzLl9sYXllcnNbZV0/KHRoaXMuX2xvYWRlZCYmdC5vblJlbW92ZSh0aGlzKSx0LmdldEF0dHJpYnV0aW9uJiZ0aGlzLmF0dHJpYnV0aW9uQ29udHJvbCYmdGhpcy5hdHRyaWJ1dGlvbkNvbnRyb2wucmVtb3ZlQXR0cmlidXRpb24odC5nZXRBdHRyaWJ1dGlvbigpKSxkZWxldGUgdGhpcy5fbGF5ZXJzW2VdLHRoaXMuX2xvYWRlZCYmKHRoaXMuZmlyZSgibGF5ZXJyZW1vdmUiLHtsYXllcjp0fSksdC5maXJlKCJyZW1vdmUiKSksdC5fbWFwPXQuX21hcFRvQWRkPW51bGwsdGhpcyk6dGhpc30saGFzTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuISF0JiZvLnN0YW1wKHQpaW4gdGhpcy5fbGF5ZXJzfSxlYWNoTGF5ZXI6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGkgaW4gdGhpcy5fbGF5ZXJzKXQuY2FsbChlLHRoaXMuX2xheWVyc1tpXSk7cmV0dXJuIHRoaXN9LF9hZGRMYXllcnM6ZnVuY3Rpb24odCl7dD10P28uVXRpbC5pc0FycmF5KHQpP3Q6W3RdOltdO2Zvcih2YXIgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmFkZExheWVyKHRbZV0pfSxfYWRkWm9vbUxpbWl0OmZ1bmN0aW9uKHQpeyFpc05hTih0Lm9wdGlvbnMubWF4Wm9vbSkmJmlzTmFOKHQub3B0aW9ucy5taW5ab29tKXx8KHRoaXMuX3pvb21Cb3VuZExheWVyc1tvLnN0YW1wKHQpXT10LHRoaXMuX3VwZGF0ZVpvb21MZXZlbHMoKSl9LF9yZW1vdmVab29tTGltaXQ6ZnVuY3Rpb24odCl7dmFyIGU9by5zdGFtcCh0KTt0aGlzLl96b29tQm91bmRMYXllcnNbZV0mJihkZWxldGUgdGhpcy5fem9vbUJvdW5kTGF5ZXJzW2VdLHRoaXMuX3VwZGF0ZVpvb21MZXZlbHMoKSl9LF91cGRhdGVab29tTGV2ZWxzOmZ1bmN0aW9uKCl7dmFyIHQ9MS8wLGU9LSgxLzApLG49dGhpcy5fZ2V0Wm9vbVNwYW4oKTtmb3IodmFyIG8gaW4gdGhpcy5fem9vbUJvdW5kTGF5ZXJzKXt2YXIgcz10aGlzLl96b29tQm91bmRMYXllcnNbb10ub3B0aW9uczt0PXMubWluWm9vbT09PWk/dDpNYXRoLm1pbih0LHMubWluWm9vbSksZT1zLm1heFpvb209PT1pP2U6TWF0aC5tYXgoZSxzLm1heFpvb20pfXRoaXMuX2xheWVyc01heFpvb209ZT09PS0oMS8wKT9pOmUsdGhpcy5fbGF5ZXJzTWluWm9vbT10PT09MS8wP2k6dCxuIT09dGhpcy5fZ2V0Wm9vbVNwYW4oKSYmdGhpcy5maXJlKCJ6b29tbGV2ZWxzY2hhbmdlIiksdGhpcy5vcHRpb25zLm1heFpvb209PT1pJiZ0aGlzLl9sYXllcnNNYXhab29tJiZ0aGlzLmdldFpvb20oKT50aGlzLl9sYXllcnNNYXhab29tJiZ0aGlzLnNldFpvb20odGhpcy5fbGF5ZXJzTWF4Wm9vbSksdGhpcy5vcHRpb25zLm1pblpvb209PT1pJiZ0aGlzLl9sYXllcnNNaW5ab29tJiZ0aGlzLmdldFpvb20oKTx0aGlzLl9sYXllcnNNaW5ab29tJiZ0aGlzLnNldFpvb20odGhpcy5fbGF5ZXJzTWluWm9vbSl9fSk7dmFyIHI9Il9sZWFmbGV0X2V2ZW50cyI7by5Eb21FdmVudD17b246ZnVuY3Rpb24odCxlLGksbil7aWYoIm9iamVjdCI9PXR5cGVvZiBlKWZvcih2YXIgcyBpbiBlKXRoaXMuX29uKHQscyxlW3NdLGkpO2Vsc2V7ZT1vLlV0aWwuc3BsaXRXb3JkcyhlKTtmb3IodmFyIHI9MCxhPWUubGVuZ3RoO3I8YTtyKyspdGhpcy5fb24odCxlW3JdLGksbil9cmV0dXJuIHRoaXN9LG9mZjpmdW5jdGlvbih0LGUsaSxuKXtpZigib2JqZWN0Ij09dHlwZW9mIGUpZm9yKHZhciBzIGluIGUpdGhpcy5fb2ZmKHQscyxlW3NdLGkpO2Vsc2V7ZT1vLlV0aWwuc3BsaXRXb3JkcyhlKTtmb3IodmFyIHI9MCxhPWUubGVuZ3RoO3I8YTtyKyspdGhpcy5fb2ZmKHQsZVtyXSxpLG4pfXJldHVybiB0aGlzfSxfb246ZnVuY3Rpb24oZSxpLG4scyl7dmFyIGE9aStvLnN0YW1wKG4pKyhzPyJfIitvLnN0YW1wKHMpOiIiKTtpZihlW3JdJiZlW3JdW2FdKXJldHVybiB0aGlzO3ZhciBoPWZ1bmN0aW9uKGkpe3JldHVybiBuLmNhbGwoc3x8ZSxpfHx0LmV2ZW50KX0sbD1oO3JldHVybiBvLkJyb3dzZXIucG9pbnRlciYmMD09PWkuaW5kZXhPZigidG91Y2giKT90aGlzLmFkZFBvaW50ZXJMaXN0ZW5lcihlLGksaCxhKTohby5Ccm93c2VyLnRvdWNofHwiZGJsY2xpY2siIT09aXx8IXRoaXMuYWRkRG91YmxlVGFwTGlzdGVuZXJ8fG8uQnJvd3Nlci5wb2ludGVyJiZvLkJyb3dzZXIuY2hyb21lPyJhZGRFdmVudExpc3RlbmVyImluIGU/Im1vdXNld2hlZWwiPT09aT9lLmFkZEV2ZW50TGlzdGVuZXIoIm9ud2hlZWwiaW4gZT8id2hlZWwiOiJtb3VzZXdoZWVsIixoLCExKToibW91c2VlbnRlciI9PT1pfHwibW91c2VsZWF2ZSI9PT1pPyhoPWZ1bmN0aW9uKGkpe2k9aXx8dC5ldmVudCxvLkRvbUV2ZW50Ll9pc0V4dGVybmFsVGFyZ2V0KGUsaSkmJmwoaSl9LGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciI9PT1pPyJtb3VzZW92ZXIiOiJtb3VzZW91dCIsaCwhMSkpOigiY2xpY2siPT09aSYmby5Ccm93c2VyLmFuZHJvaWQmJihoPWZ1bmN0aW9uKHQpe3JldHVybiBvLkRvbUV2ZW50Ll9maWx0ZXJDbGljayh0LGwpfSksZS5hZGRFdmVudExpc3RlbmVyKGksaCwhMSkpOiJhdHRhY2hFdmVudCJpbiBlJiZlLmF0dGFjaEV2ZW50KCJvbiIraSxoKTp0aGlzLmFkZERvdWJsZVRhcExpc3RlbmVyKGUsaCxhKSxlW3JdPWVbcl18fHt9LGVbcl1bYV09aCx0aGlzfSxfb2ZmOmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzPWUrby5zdGFtcChpKSsobj8iXyIrby5zdGFtcChuKToiIiksYT10W3JdJiZ0W3JdW3NdO3JldHVybiBhPyhvLkJyb3dzZXIucG9pbnRlciYmMD09PWUuaW5kZXhPZigidG91Y2giKT90aGlzLnJlbW92ZVBvaW50ZXJMaXN0ZW5lcih0LGUscyk6by5Ccm93c2VyLnRvdWNoJiYiZGJsY2xpY2siPT09ZSYmdGhpcy5yZW1vdmVEb3VibGVUYXBMaXN0ZW5lcj90aGlzLnJlbW92ZURvdWJsZVRhcExpc3RlbmVyKHQscyk6InJlbW92ZUV2ZW50TGlzdGVuZXIiaW4gdD8ibW91c2V3aGVlbCI9PT1lP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigib253aGVlbCJpbiB0PyJ3aGVlbCI6Im1vdXNld2hlZWwiLGEsITEpOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciI9PT1lPyJtb3VzZW92ZXIiOiJtb3VzZWxlYXZlIj09PWU/Im1vdXNlb3V0IjplLGEsITEpOiJkZXRhY2hFdmVudCJpbiB0JiZ0LmRldGFjaEV2ZW50KCJvbiIrZSxhKSx0W3JdW3NdPW51bGwsdGhpcyk6dGhpc30sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0LnN0b3BQcm9wYWdhdGlvbj90LnN0b3BQcm9wYWdhdGlvbigpOnQub3JpZ2luYWxFdmVudD90Lm9yaWdpbmFsRXZlbnQuX3N0b3BwZWQ9ITA6dC5jYW5jZWxCdWJibGU9ITAsby5Eb21FdmVudC5fc2tpcHBlZCh0KSx0aGlzfSxkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIG8uRG9tRXZlbnQub24odCwibW91c2V3aGVlbCIsby5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24pfSxkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT1vLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbjtyZXR1cm4gby5Eb21FdmVudC5vbih0LG8uRHJhZ2dhYmxlLlNUQVJULmpvaW4oIiAiKSxlKSxvLkRvbUV2ZW50Lm9uKHQse2NsaWNrOm8uRG9tRXZlbnQuX2Zha2VTdG9wLGRibGNsaWNrOmV9KX0scHJldmVudERlZmF1bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQucmV0dXJuVmFsdWU9ITEsdGhpc30sc3RvcDpmdW5jdGlvbih0KXtyZXR1cm4gby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KS5zdG9wUHJvcGFnYXRpb24odCl9LGdldE1vdXNlUG9zaXRpb246ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm4gbmV3IG8uUG9pbnQodC5jbGllbnRYLHQuY2xpZW50WSk7dmFyIGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gbmV3IG8uUG9pbnQodC5jbGllbnRYLWkubGVmdC1lLmNsaWVudExlZnQsdC5jbGllbnRZLWkudG9wLWUuY2xpZW50VG9wKX0sX3doZWVsUHhGYWN0b3I6by5Ccm93c2VyLndpbiYmby5Ccm93c2VyLmNocm9tZT8yOm8uQnJvd3Nlci5nZWNrbz90LmRldmljZVBpeGVsUmF0aW86MSxnZXRXaGVlbERlbHRhOmZ1bmN0aW9uKHQpe3JldHVybiBvLkJyb3dzZXIuZWRnZT90LndoZWVsRGVsdGFZLzI6dC5kZWx0YVkmJjA9PT10LmRlbHRhTW9kZT8tdC5kZWx0YVkvby5Eb21FdmVudC5fd2hlZWxQeEZhY3Rvcjp0LmRlbHRhWSYmMT09PXQuZGVsdGFNb2RlPzIwKi10LmRlbHRhWTp0LmRlbHRhWSYmMj09PXQuZGVsdGFNb2RlPzYwKi10LmRlbHRhWTp0LmRlbHRhWHx8dC5kZWx0YVo/MDp0LndoZWVsRGVsdGE/KHQud2hlZWxEZWx0YVl8fHQud2hlZWxEZWx0YSkvMjp0LmRldGFpbCYmTWF0aC5hYnModC5kZXRhaWwpPDMyNzY1PzIwKi10LmRldGFpbDp0LmRldGFpbD90LmRldGFpbC8tMzI3NjUqNjA6MH0sX3NraXBFdmVudHM6e30sX2Zha2VTdG9wOmZ1bmN0aW9uKHQpe28uRG9tRXZlbnQuX3NraXBFdmVudHNbdC50eXBlXT0hMH0sX3NraXBwZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc2tpcEV2ZW50c1t0LnR5cGVdO3JldHVybiB0aGlzLl9za2lwRXZlbnRzW3QudHlwZV09ITEsZX0sX2lzRXh0ZXJuYWxUYXJnZXQ6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLnJlbGF0ZWRUYXJnZXQ7aWYoIWkpcmV0dXJuITA7dHJ5e2Zvcig7aSYmaSE9PXQ7KWk9aS5wYXJlbnROb2RlfWNhdGNoKHQpe3JldHVybiExfXJldHVybiBpIT09dH0sX2ZpbHRlckNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC50aW1lU3RhbXB8fHQub3JpZ2luYWxFdmVudCYmdC5vcmlnaW5hbEV2ZW50LnRpbWVTdGFtcCxuPW8uRG9tRXZlbnQuX2xhc3RDbGljayYmaS1vLkRvbUV2ZW50Ll9sYXN0Q2xpY2s7cmV0dXJuIG4mJm4+MTAwJiZuPDUwMHx8dC50YXJnZXQuX3NpbXVsYXRlZENsaWNrJiYhdC5fc2ltdWxhdGVkP3ZvaWQgby5Eb21FdmVudC5zdG9wKHQpOihvLkRvbUV2ZW50Ll9sYXN0Q2xpY2s9aSx2b2lkIGUodCkpfX0sby5Eb21FdmVudC5hZGRMaXN0ZW5lcj1vLkRvbUV2ZW50Lm9uLG8uRG9tRXZlbnQucmVtb3ZlTGlzdGVuZXI9by5Eb21FdmVudC5vZmYsby5Qb3NBbmltYXRpb249by5FdmVudGVkLmV4dGVuZCh7cnVuOmZ1bmN0aW9uKHQsZSxpLG4pe3RoaXMuc3RvcCgpLHRoaXMuX2VsPXQsdGhpcy5faW5Qcm9ncmVzcz0hMCx0aGlzLl9kdXJhdGlvbj1pfHwuMjUsdGhpcy5fZWFzZU91dFBvd2VyPTEvTWF0aC5tYXgobnx8LjUsLjIpLHRoaXMuX3N0YXJ0UG9zPW8uRG9tVXRpbC5nZXRQb3NpdGlvbih0KSx0aGlzLl9vZmZzZXQ9ZS5zdWJ0cmFjdCh0aGlzLl9zdGFydFBvcyksdGhpcy5fc3RhcnRUaW1lPStuZXcgRGF0ZSx0aGlzLmZpcmUoInN0YXJ0IiksdGhpcy5fYW5pbWF0ZSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5faW5Qcm9ncmVzcyYmKHRoaXMuX3N0ZXAoITApLHRoaXMuX2NvbXBsZXRlKCkpfSxfYW5pbWF0ZTpmdW5jdGlvbigpe3RoaXMuX2FuaW1JZD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9hbmltYXRlLHRoaXMpLHRoaXMuX3N0ZXAoKX0sX3N0ZXA6ZnVuY3Rpb24odCl7dmFyIGU9K25ldyBEYXRlLXRoaXMuX3N0YXJ0VGltZSxpPTFlMyp0aGlzLl9kdXJhdGlvbjtlPGk/dGhpcy5fcnVuRnJhbWUodGhpcy5fZWFzZU91dChlL2kpLHQpOih0aGlzLl9ydW5GcmFtZSgxKSx0aGlzLl9jb21wbGV0ZSgpKX0sX3J1bkZyYW1lOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fc3RhcnRQb3MuYWRkKHRoaXMuX29mZnNldC5tdWx0aXBseUJ5KHQpKTtlJiZpLl9yb3VuZCgpLG8uRG9tVXRpbC5zZXRQb3NpdGlvbih0aGlzLl9lbCxpKSx0aGlzLmZpcmUoInN0ZXAiKX0sX2NvbXBsZXRlOmZ1bmN0aW9uKCl7by5VdGlsLmNhbmNlbEFuaW1GcmFtZSh0aGlzLl9hbmltSWQpLHRoaXMuX2luUHJvZ3Jlc3M9ITEsdGhpcy5maXJlKCJlbmQiKX0sX2Vhc2VPdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LHRoaXMuX2Vhc2VPdXRQb3dlcil9fSksby5Qcm9qZWN0aW9uLk1lcmNhdG9yPXtSOjYzNzgxMzcsUl9NSU5PUjo2MzU2NzUyLjMxNDI0NTE3OSxib3VuZHM6by5ib3VuZHMoWy0yMDAzNzUwOC4zNDI3OSwtMTU0OTY1NzAuNzM5NzJdLFsyMDAzNzUwOC4zNDI3OSwxODc2NDY1Ni4yMzEzOF0pLHByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5QSS8xODAsaT10aGlzLlIsbj10LmxhdCplLHM9dGhpcy5SX01JTk9SL2kscj1NYXRoLnNxcnQoMS1zKnMpLGE9cipNYXRoLnNpbihuKSxoPU1hdGgudGFuKE1hdGguUEkvNC1uLzIpL01hdGgucG93KCgxLWEpLygxK2EpLHIvMik7cmV0dXJuIG49LWkqTWF0aC5sb2coTWF0aC5tYXgoaCwxZS0xMCkpLG5ldyBvLlBvaW50KHQubG5nKmUqaSxuKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxpPTE4MC9NYXRoLlBJLG49dGhpcy5SLHM9dGhpcy5SX01JTk9SL24scj1NYXRoLnNxcnQoMS1zKnMpLGE9TWF0aC5leHAoLXQueS9uKSxoPU1hdGguUEkvMi0yKk1hdGguYXRhbihhKSxsPTAsdT0uMTtsPDE1JiZNYXRoLmFicyh1KT4xZS03O2wrKyllPXIqTWF0aC5zaW4oaCksZT1NYXRoLnBvdygoMS1lKS8oMStlKSxyLzIpLHU9TWF0aC5QSS8yLTIqTWF0aC5hdGFuKGEqZSktaCxoKz11O3JldHVybiBuZXcgby5MYXRMbmcoaCppLHQueCppL24pfX0sby5DUlMuRVBTRzMzOTU9by5leHRlbmQoe30sby5DUlMuRWFydGgse2NvZGU6IkVQU0c6MzM5NSIscHJvamVjdGlvbjpvLlByb2plY3Rpb24uTWVyY2F0b3IsdHJhbnNmb3JtYXRpb246ZnVuY3Rpb24oKXt2YXIgdD0uNS8oTWF0aC5QSSpvLlByb2plY3Rpb24uTWVyY2F0b3IuUik7cmV0dXJuIG5ldyBvLlRyYW5zZm9ybWF0aW9uKHQsLjUsLXQsLjUpfSgpfSksby5HcmlkTGF5ZXI9by5MYXllci5leHRlbmQoe29wdGlvbnM6e3RpbGVTaXplOjI1NixvcGFjaXR5OjEsdXBkYXRlV2hlbklkbGU6by5Ccm93c2VyLm1vYmlsZSx1cGRhdGVXaGVuWm9vbWluZzohMCx1cGRhdGVJbnRlcnZhbDoyMDAsekluZGV4OjEsYm91bmRzOm51bGwsbWluWm9vbTowLG1heFpvb206aSxub1dyYXA6ITEscGFuZToidGlsZVBhbmUiLGNsYXNzTmFtZToiIixrZWVwQnVmZmVyOjJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9LG9uQWRkOmZ1bmN0aW9uKCl7dGhpcy5faW5pdENvbnRhaW5lcigpLHRoaXMuX2xldmVscz17fSx0aGlzLl90aWxlcz17fSx0aGlzLl9yZXNldFZpZXcoKSx0aGlzLl91cGRhdGUoKX0sYmVmb3JlQWRkOmZ1bmN0aW9uKHQpe3QuX2FkZFpvb21MaW1pdCh0aGlzKX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dGhpcy5fcmVtb3ZlQWxsVGlsZXMoKSxvLkRvbVV0aWwucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdC5fcmVtb3ZlWm9vbUxpbWl0KHRoaXMpLHRoaXMuX2NvbnRhaW5lcj1udWxsLHRoaXMuX3RpbGVab29tPW51bGx9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJihvLkRvbVV0aWwudG9Gcm9udCh0aGlzLl9jb250YWluZXIpLHRoaXMuX3NldEF1dG9aSW5kZXgoTWF0aC5tYXgpKSx0aGlzfSxicmluZ1RvQmFjazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJihvLkRvbVV0aWwudG9CYWNrKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1pbikpLHRoaXN9LGdldENvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnpJbmRleD10LHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXN9LGlzTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkaW5nfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiYodGhpcy5fcmVtb3ZlQWxsVGlsZXMoKSx0aGlzLl91cGRhdGUoKSksdGhpc30sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3ZpZXdwcmVyZXNldDp0aGlzLl9pbnZhbGlkYXRlQWxsLHZpZXdyZXNldDp0aGlzLl9yZXNldFZpZXcsem9vbTp0aGlzLl9yZXNldFZpZXcsbW92ZWVuZDp0aGlzLl9vbk1vdmVFbmR9O3JldHVybiB0aGlzLm9wdGlvbnMudXBkYXRlV2hlbklkbGV8fCh0aGlzLl9vbk1vdmV8fCh0aGlzLl9vbk1vdmU9by5VdGlsLnRocm90dGxlKHRoaXMuX29uTW92ZUVuZCx0aGlzLm9wdGlvbnMudXBkYXRlSW50ZXJ2YWwsdGhpcykpLHQubW92ZT10aGlzLl9vbk1vdmUpLHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fYW5pbWF0ZVpvb20pLHR9LGNyZWF0ZVRpbGU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCJkaXYiKX0sZ2V0VGlsZVNpemU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMudGlsZVNpemU7cmV0dXJuIHQgaW5zdGFuY2VvZiBvLlBvaW50P3Q6bmV3IG8uUG9pbnQodCx0KX0sX3VwZGF0ZVpJbmRleDpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lciYmdGhpcy5vcHRpb25zLnpJbmRleCE9PWkmJm51bGwhPT10aGlzLm9wdGlvbnMuekluZGV4JiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnpJbmRleD10aGlzLm9wdGlvbnMuekluZGV4KX0sX3NldEF1dG9aSW5kZXg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLGk9dGhpcy5nZXRQYW5lKCkuY2hpbGRyZW4sbj0tdCgtKDEvMCksMS8wKSxvPTAscz1pLmxlbmd0aDtvPHM7bysrKWU9aVtvXS5zdHlsZS56SW5kZXgsaVtvXSE9PXRoaXMuX2NvbnRhaW5lciYmZSYmKG49dChuLCtlKSk7aXNGaW5pdGUobikmJih0aGlzLm9wdGlvbnMuekluZGV4PW4rdCgtMSwxKSx0aGlzLl91cGRhdGVaSW5kZXgoKSl9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwJiYhby5Ccm93c2VyLmllbHQ5KXtvLkRvbVV0aWwuc2V0T3BhY2l0eSh0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zLm9wYWNpdHkpO3ZhciB0PStuZXcgRGF0ZSxlPSExLGk9ITE7Zm9yKHZhciBuIGluIHRoaXMuX3RpbGVzKXt2YXIgcz10aGlzLl90aWxlc1tuXTtpZihzLmN1cnJlbnQmJnMubG9hZGVkKXt2YXIgcj1NYXRoLm1pbigxLCh0LXMubG9hZGVkKS8yMDApO28uRG9tVXRpbC5zZXRPcGFjaXR5KHMuZWwscikscjwxP2U9ITA6KHMuYWN0aXZlJiYoaT0hMCkscy5hY3RpdmU9ITApfX1pJiYhdGhpcy5fbm9QcnVuZSYmdGhpcy5fcHJ1bmVUaWxlcygpLGUmJihvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX2ZhZGVGcmFtZSksdGhpcy5fZmFkZUZyYW1lPW8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX3VwZGF0ZU9wYWNpdHksdGhpcykpfX0sX2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9jb250YWluZXI9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IiwibGVhZmxldC1sYXllciAiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfHwiIikpLHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSx0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpKX0sX3VwZGF0ZUxldmVsczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpbGVab29tLGU9dGhpcy5vcHRpb25zLm1heFpvb207aWYodD09PWkpcmV0dXJuIGk7Zm9yKHZhciBuIGluIHRoaXMuX2xldmVscyl0aGlzLl9sZXZlbHNbbl0uZWwuY2hpbGRyZW4ubGVuZ3RofHxuPT09dD90aGlzLl9sZXZlbHNbbl0uZWwuc3R5bGUuekluZGV4PWUtTWF0aC5hYnModC1uKTooby5Eb21VdGlsLnJlbW92ZSh0aGlzLl9sZXZlbHNbbl0uZWwpLHRoaXMuX3JlbW92ZVRpbGVzQXRab29tKG4pLGRlbGV0ZSB0aGlzLl9sZXZlbHNbbl0pO3ZhciBzPXRoaXMuX2xldmVsc1t0XSxyPXRoaXMuX21hcDtyZXR1cm4gc3x8KHM9dGhpcy5fbGV2ZWxzW3RdPXt9LHMuZWw9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IiwibGVhZmxldC10aWxlLWNvbnRhaW5lciBsZWFmbGV0LXpvb20tYW5pbWF0ZWQiLHRoaXMuX2NvbnRhaW5lcikscy5lbC5zdHlsZS56SW5kZXg9ZSxzLm9yaWdpbj1yLnByb2plY3Qoci51bnByb2plY3Qoci5nZXRQaXhlbE9yaWdpbigpKSx0KS5yb3VuZCgpLHMuem9vbT10LHRoaXMuX3NldFpvb21UcmFuc2Zvcm0ocyxyLmdldENlbnRlcigpLHIuZ2V0Wm9vbSgpKSxvLlV0aWwuZmFsc2VGbihzLmVsLm9mZnNldFdpZHRoKSksdGhpcy5fbGV2ZWw9cyxzfSxfcHJ1bmVUaWxlczpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQsZSxpPXRoaXMuX21hcC5nZXRab29tKCk7aWYoaT50aGlzLm9wdGlvbnMubWF4Wm9vbXx8aTx0aGlzLm9wdGlvbnMubWluWm9vbSlyZXR1cm4gdm9pZCB0aGlzLl9yZW1vdmVBbGxUaWxlcygpO2Zvcih0IGluIHRoaXMuX3RpbGVzKWU9dGhpcy5fdGlsZXNbdF0sZS5yZXRhaW49ZS5jdXJyZW50O2Zvcih0IGluIHRoaXMuX3RpbGVzKWlmKGU9dGhpcy5fdGlsZXNbdF0sZS5jdXJyZW50JiYhZS5hY3RpdmUpe3ZhciBuPWUuY29vcmRzO3RoaXMuX3JldGFpblBhcmVudChuLngsbi55LG4ueixuLnotNSl8fHRoaXMuX3JldGFpbkNoaWxkcmVuKG4ueCxuLnksbi56LG4ueisyKX1mb3IodCBpbiB0aGlzLl90aWxlcyl0aGlzLl90aWxlc1t0XS5yZXRhaW58fHRoaXMuX3JlbW92ZVRpbGUodCl9fSxfcmVtb3ZlVGlsZXNBdFpvb206ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW2VdLmNvb3Jkcy56PT09dCYmdGhpcy5fcmVtb3ZlVGlsZShlKX0sX3JlbW92ZUFsbFRpbGVzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX3RpbGVzKXRoaXMuX3JlbW92ZVRpbGUodCl9LF9pbnZhbGlkYXRlQWxsOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xldmVscylvLkRvbVV0aWwucmVtb3ZlKHRoaXMuX2xldmVsc1t0XS5lbCksZGVsZXRlIHRoaXMuX2xldmVsc1t0XTt0aGlzLl9yZW1vdmVBbGxUaWxlcygpLHRoaXMuX3RpbGVab29tPW51bGx9LF9yZXRhaW5QYXJlbnQ6ZnVuY3Rpb24odCxlLGksbil7dmFyIHM9TWF0aC5mbG9vcih0LzIpLHI9TWF0aC5mbG9vcihlLzIpLGE9aS0xLGg9bmV3IG8uUG9pbnQoK3MsK3IpO2guej0rYTt2YXIgbD10aGlzLl90aWxlQ29vcmRzVG9LZXkoaCksdT10aGlzLl90aWxlc1tsXTtyZXR1cm4gdSYmdS5hY3RpdmU/KHUucmV0YWluPSEwLCEwKToodSYmdS5sb2FkZWQmJih1LnJldGFpbj0hMCksYT5uJiZ0aGlzLl9yZXRhaW5QYXJlbnQocyxyLGEsbikpfSxfcmV0YWluQ2hpbGRyZW46ZnVuY3Rpb24odCxlLGksbil7Zm9yKHZhciBzPTIqdDtzPDIqdCsyO3MrKylmb3IodmFyIHI9MiplO3I8MiplKzI7cisrKXt2YXIgYT1uZXcgby5Qb2ludChzLHIpO2Euej1pKzE7dmFyIGg9dGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGEpLGw9dGhpcy5fdGlsZXNbaF07bCYmbC5hY3RpdmU/bC5yZXRhaW49ITA6KGwmJmwubG9hZGVkJiYobC5yZXRhaW49ITApLGkrMTxuJiZ0aGlzLl9yZXRhaW5DaGlsZHJlbihzLHIsaSsxLG4pKX19LF9yZXNldFZpZXc6ZnVuY3Rpb24odCl7dmFyIGU9dCYmKHQucGluY2h8fHQuZmx5VG8pO3RoaXMuX3NldFZpZXcodGhpcy5fbWFwLmdldENlbnRlcigpLHRoaXMuX21hcC5nZXRab29tKCksZSxlKX0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3RoaXMuX3NldFZpZXcodC5jZW50ZXIsdC56b29tLCEwLHQubm9VcGRhdGUpfSxfc2V0VmlldzpmdW5jdGlvbih0LGUsbixvKXt2YXIgcz1NYXRoLnJvdW5kKGUpOyh0aGlzLm9wdGlvbnMubWF4Wm9vbSE9PWkmJnM+dGhpcy5vcHRpb25zLm1heFpvb218fHRoaXMub3B0aW9ucy5taW5ab29tIT09aSYmczx0aGlzLm9wdGlvbnMubWluWm9vbSkmJihzPWkpO3ZhciByPXRoaXMub3B0aW9ucy51cGRhdGVXaGVuWm9vbWluZyYmcyE9PXRoaXMuX3RpbGVab29tO28mJiFyfHwodGhpcy5fdGlsZVpvb209cyx0aGlzLl9hYm9ydExvYWRpbmcmJnRoaXMuX2Fib3J0TG9hZGluZygpLHRoaXMuX3VwZGF0ZUxldmVscygpLHRoaXMuX3Jlc2V0R3JpZCgpLHMhPT1pJiZ0aGlzLl91cGRhdGUodCksbnx8dGhpcy5fcHJ1bmVUaWxlcygpLHRoaXMuX25vUHJ1bmU9ISFuKSx0aGlzLl9zZXRab29tVHJhbnNmb3Jtcyh0LGUpfSxfc2V0Wm9vbVRyYW5zZm9ybXM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGkgaW4gdGhpcy5fbGV2ZWxzKXRoaXMuX3NldFpvb21UcmFuc2Zvcm0odGhpcy5fbGV2ZWxzW2ldLHQsZSl9LF9zZXRab29tVHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKGksdC56b29tKSxzPXQub3JpZ2luLm11bHRpcGx5Qnkobikuc3VidHJhY3QodGhpcy5fbWFwLl9nZXROZXdQaXhlbE9yaWdpbihlLGkpKS5yb3VuZCgpO28uQnJvd3Nlci5hbnkzZD9vLkRvbVV0aWwuc2V0VHJhbnNmb3JtKHQuZWwscyxuKTpvLkRvbVV0aWwuc2V0UG9zaXRpb24odC5lbCxzKX0sX3Jlc2V0R3JpZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcCxlPXQub3B0aW9ucy5jcnMsaT10aGlzLl90aWxlU2l6ZT10aGlzLmdldFRpbGVTaXplKCksbj10aGlzLl90aWxlWm9vbSxvPXRoaXMuX21hcC5nZXRQaXhlbFdvcmxkQm91bmRzKHRoaXMuX3RpbGVab29tKTtvJiYodGhpcy5fZ2xvYmFsVGlsZVJhbmdlPXRoaXMuX3B4Qm91bmRzVG9UaWxlUmFuZ2UobykpLHRoaXMuX3dyYXBYPWUud3JhcExuZyYmIXRoaXMub3B0aW9ucy5ub1dyYXAmJltNYXRoLmZsb29yKHQucHJvamVjdChbMCxlLndyYXBMbmdbMF1dLG4pLngvaS54KSxNYXRoLmNlaWwodC5wcm9qZWN0KFswLGUud3JhcExuZ1sxXV0sbikueC9pLnkpXSx0aGlzLl93cmFwWT1lLndyYXBMYXQmJiF0aGlzLm9wdGlvbnMubm9XcmFwJiZbTWF0aC5mbG9vcih0LnByb2plY3QoW2Uud3JhcExhdFswXSwwXSxuKS55L2kueCksTWF0aC5jZWlsKHQucHJvamVjdChbZS53cmFwTGF0WzFdLDBdLG4pLnkvaS55KV19LF9vbk1vdmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJiF0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20mJnRoaXMuX3VwZGF0ZSgpfSxfZ2V0VGlsZWRQaXhlbEJvdW5kczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAsaT1lLl9hbmltYXRpbmdab29tP01hdGgubWF4KGUuX2FuaW1hdGVUb1pvb20sZS5nZXRab29tKCkpOmUuZ2V0Wm9vbSgpLG49ZS5nZXRab29tU2NhbGUoaSx0aGlzLl90aWxlWm9vbSkscz1lLnByb2plY3QodCx0aGlzLl90aWxlWm9vbSkuZmxvb3IoKSxyPWUuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIqbik7cmV0dXJuIG5ldyBvLkJvdW5kcyhzLnN1YnRyYWN0KHIpLHMuYWRkKHIpKX0sX3VwZGF0ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9tYXA7aWYobil7dmFyIHM9bi5nZXRab29tKCk7aWYodD09PWkmJih0PW4uZ2V0Q2VudGVyKCkpLHRoaXMuX3RpbGVab29tIT09aSl7dmFyIHI9dGhpcy5fZ2V0VGlsZWRQaXhlbEJvdW5kcyh0KSxhPXRoaXMuX3B4Qm91bmRzVG9UaWxlUmFuZ2UociksaD1hLmdldENlbnRlcigpLGw9W10sdT10aGlzLm9wdGlvbnMua2VlcEJ1ZmZlcixjPW5ldyBvLkJvdW5kcyhhLmdldEJvdHRvbUxlZnQoKS5zdWJ0cmFjdChbdSwtdV0pLGEuZ2V0VG9wUmlnaHQoKS5hZGQoW3UsLXVdKSk7Zm9yKHZhciBkIGluIHRoaXMuX3RpbGVzKXt2YXIgXz10aGlzLl90aWxlc1tkXS5jb29yZHM7Xy56PT09dGhpcy5fdGlsZVpvb20mJmMuY29udGFpbnMoby5wb2ludChfLngsXy55KSl8fCh0aGlzLl90aWxlc1tkXS5jdXJyZW50PSExKX1pZihNYXRoLmFicyhzLXRoaXMuX3RpbGVab29tKT4xKXJldHVybiB2b2lkIHRoaXMuX3NldFZpZXcodCxzKTtmb3IodmFyIG09YS5taW4ueTttPD1hLm1heC55O20rKylmb3IodmFyIHA9YS5taW4ueDtwPD1hLm1heC54O3ArKyl7dmFyIGY9bmV3IG8uUG9pbnQocCxtKTtpZihmLno9dGhpcy5fdGlsZVpvb20sdGhpcy5faXNWYWxpZFRpbGUoZikpe3ZhciBnPXRoaXMuX3RpbGVzW3RoaXMuX3RpbGVDb29yZHNUb0tleShmKV07Zz9nLmN1cnJlbnQ9ITA6bC5wdXNoKGYpfX1pZihsLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXN0YW5jZVRvKGgpLWUuZGlzdGFuY2VUbyhoKX0pLDAhPT1sLmxlbmd0aCl7dGhpcy5fbG9hZGluZ3x8KHRoaXMuX2xvYWRpbmc9ITAsdGhpcy5maXJlKCJsb2FkaW5nIikpO3ZhciB2PWUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2ZvcihwPTA7cDxsLmxlbmd0aDtwKyspdGhpcy5fYWRkVGlsZShsW3BdLHYpO3RoaXMuX2xldmVsLmVsLmFwcGVuZENoaWxkKHYpfX19fSxfaXNWYWxpZFRpbGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLm9wdGlvbnMuY3JzO2lmKCFlLmluZmluaXRlKXt2YXIgaT10aGlzLl9nbG9iYWxUaWxlUmFuZ2U7aWYoIWUud3JhcExuZyYmKHQueDxpLm1pbi54fHx0Lng+aS5tYXgueCl8fCFlLndyYXBMYXQmJih0Lnk8aS5taW4ueXx8dC55PmkubWF4LnkpKXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuYm91bmRzKXJldHVybiEwO3ZhciBuPXRoaXMuX3RpbGVDb29yZHNUb0JvdW5kcyh0KTtyZXR1cm4gby5sYXRMbmdCb3VuZHModGhpcy5vcHRpb25zLmJvdW5kcykub3ZlcmxhcHMobil9LF9rZXlUb0JvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdGlsZUNvb3Jkc1RvQm91bmRzKHRoaXMuX2tleVRvVGlsZUNvb3Jkcyh0KSl9LF90aWxlQ29vcmRzVG9Cb3VuZHM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9dGhpcy5nZXRUaWxlU2l6ZSgpLG49dC5zY2FsZUJ5KGkpLHM9bi5hZGQoaSkscj1lLnVucHJvamVjdChuLHQueiksYT1lLnVucHJvamVjdChzLHQueiksaD1uZXcgby5MYXRMbmdCb3VuZHMocixhKTtyZXR1cm4gdGhpcy5vcHRpb25zLm5vV3JhcHx8ZS53cmFwTGF0TG5nQm91bmRzKGgpLGh9LF90aWxlQ29vcmRzVG9LZXk6ZnVuY3Rpb24odCl7cmV0dXJuIHQueCsiOiIrdC55KyI6Iit0Lnp9LF9rZXlUb1RpbGVDb29yZHM6ZnVuY3Rpb24odCl7dmFyIGU9dC5zcGxpdCgiOiIpLGk9bmV3IG8uUG9pbnQoK2VbMF0sK2VbMV0pO3JldHVybiBpLno9K2VbMl0saX0sX3JlbW92ZVRpbGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZXNbdF07ZSYmKG8uRG9tVXRpbC5yZW1vdmUoZS5lbCksZGVsZXRlIHRoaXMuX3RpbGVzW3RdLHRoaXMuZmlyZSgidGlsZXVubG9hZCIse3RpbGU6ZS5lbCxjb29yZHM6dGhpcy5fa2V5VG9UaWxlQ29vcmRzKHQpfSkpfSxfaW5pdFRpbGU6ZnVuY3Rpb24odCl7by5Eb21VdGlsLmFkZENsYXNzKHQsImxlYWZsZXQtdGlsZSIpO3ZhciBlPXRoaXMuZ2V0VGlsZVNpemUoKTt0LnN0eWxlLndpZHRoPWUueCsicHgiLHQuc3R5bGUuaGVpZ2h0PWUueSsicHgiLHQub25zZWxlY3RzdGFydD1vLlV0aWwuZmFsc2VGbix0Lm9ubW91c2Vtb3ZlPW8uVXRpbC5mYWxzZUZuLG8uQnJvd3Nlci5pZWx0OSYmdGhpcy5vcHRpb25zLm9wYWNpdHk8MSYmby5Eb21VdGlsLnNldE9wYWNpdHkodCx0aGlzLm9wdGlvbnMub3BhY2l0eSksby5Ccm93c2VyLmFuZHJvaWQmJiFvLkJyb3dzZXIuYW5kcm9pZDIzJiYodC5zdHlsZS5XZWJraXRCYWNrZmFjZVZpc2liaWxpdHk9ImhpZGRlbiIpfSxfYWRkVGlsZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2dldFRpbGVQb3ModCksbj10aGlzLl90aWxlQ29vcmRzVG9LZXkodCkscz10aGlzLmNyZWF0ZVRpbGUodGhpcy5fd3JhcENvb3Jkcyh0KSxvLmJpbmQodGhpcy5fdGlsZVJlYWR5LHRoaXMsdCkpO3RoaXMuX2luaXRUaWxlKHMpLHRoaXMuY3JlYXRlVGlsZS5sZW5ndGg8MiYmby5VdGlsLnJlcXVlc3RBbmltRnJhbWUoby5iaW5kKHRoaXMuX3RpbGVSZWFkeSx0aGlzLHQsbnVsbCxzKSksby5Eb21VdGlsLnNldFBvc2l0aW9uKHMsaSksdGhpcy5fdGlsZXNbbl09e2VsOnMsY29vcmRzOnQsY3VycmVudDohMH0sZS5hcHBlbmRDaGlsZChzKSx0aGlzLmZpcmUoInRpbGVsb2Fkc3RhcnQiLHt0aWxlOnMsY29vcmRzOnR9KX0sX3RpbGVSZWFkeTpmdW5jdGlvbih0LGUsaSl7aWYodGhpcy5fbWFwKXtlJiZ0aGlzLmZpcmUoInRpbGVlcnJvciIse2Vycm9yOmUsdGlsZTppLGNvb3Jkczp0fSk7dmFyIG49dGhpcy5fdGlsZUNvb3Jkc1RvS2V5KHQpO2k9dGhpcy5fdGlsZXNbbl0saSYmKGkubG9hZGVkPStuZXcgRGF0ZSx0aGlzLl9tYXAuX2ZhZGVBbmltYXRlZD8oby5Eb21VdGlsLnNldE9wYWNpdHkoaS5lbCwwKSxvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX2ZhZGVGcmFtZSksdGhpcy5fZmFkZUZyYW1lPW8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX3VwZGF0ZU9wYWNpdHksdGhpcykpOihpLmFjdGl2ZT0hMCx0aGlzLl9wcnVuZVRpbGVzKCkpLGV8fChvLkRvbVV0aWwuYWRkQ2xhc3MoaS5lbCwibGVhZmxldC10aWxlLWxvYWRlZCIpLHRoaXMuZmlyZSgidGlsZWxvYWQiLHt0aWxlOmkuZWwsY29vcmRzOnR9KSksdGhpcy5fbm9UaWxlc1RvTG9hZCgpJiYodGhpcy5fbG9hZGluZz0hMSx0aGlzLmZpcmUoImxvYWQiKSxvLkJyb3dzZXIuaWVsdDl8fCF0aGlzLl9tYXAuX2ZhZGVBbmltYXRlZD9vLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9wcnVuZVRpbGVzLHRoaXMpOnNldFRpbWVvdXQoby5iaW5kKHRoaXMuX3BydW5lVGlsZXMsdGhpcyksMjUwKSkpfX0sX2dldFRpbGVQb3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2NhbGVCeSh0aGlzLmdldFRpbGVTaXplKCkpLnN1YnRyYWN0KHRoaXMuX2xldmVsLm9yaWdpbil9LF93cmFwQ29vcmRzOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvLlBvaW50KHRoaXMuX3dyYXBYP28uVXRpbC53cmFwTnVtKHQueCx0aGlzLl93cmFwWCk6dC54LHRoaXMuX3dyYXBZP28uVXRpbC53cmFwTnVtKHQueSx0aGlzLl93cmFwWSk6dC55KTtyZXR1cm4gZS56PXQueixlfSxfcHhCb3VuZHNUb1RpbGVSYW5nZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldFRpbGVTaXplKCk7cmV0dXJuIG5ldyBvLkJvdW5kcyh0Lm1pbi51bnNjYWxlQnkoZSkuZmxvb3IoKSx0Lm1heC51bnNjYWxlQnkoZSkuY2VpbCgpLnN1YnRyYWN0KFsxLDFdKSl9LF9ub1RpbGVzVG9Mb2FkOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX3RpbGVzKWlmKCF0aGlzLl90aWxlc1t0XS5sb2FkZWQpcmV0dXJuITE7cmV0dXJuITB9fSksby5ncmlkTGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkdyaWRMYXllcih0KX0sby5UaWxlTGF5ZXI9by5HcmlkTGF5ZXIuZXh0ZW5kKHtvcHRpb25zOnttaW5ab29tOjAsbWF4Wm9vbToxOCxtYXhOYXRpdmVab29tOm51bGwsbWluTmF0aXZlWm9vbTpudWxsLHN1YmRvbWFpbnM6ImFiYyIsZXJyb3JUaWxlVXJsOiIiLHpvb21PZmZzZXQ6MCx0bXM6ITEsem9vbVJldmVyc2U6ITEsZGV0ZWN0UmV0aW5hOiExLGNyb3NzT3JpZ2luOiExfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7dGhpcy5fdXJsPXQsZT1vLnNldE9wdGlvbnModGhpcyxlKSxlLmRldGVjdFJldGluYSYmby5Ccm93c2VyLnJldGluYSYmZS5tYXhab29tPjAmJihlLnRpbGVTaXplPU1hdGguZmxvb3IoZS50aWxlU2l6ZS8yKSxlLnpvb21SZXZlcnNlPyhlLnpvb21PZmZzZXQtLSxlLm1pblpvb20rKyk6KGUuem9vbU9mZnNldCsrLGUubWF4Wm9vbS0tKSxlLm1pblpvb209TWF0aC5tYXgoMCxlLm1pblpvb20pKSwic3RyaW5nIj09dHlwZW9mIGUuc3ViZG9tYWlucyYmKGUuc3ViZG9tYWlucz1lLnN1YmRvbWFpbnMuc3BsaXQoIiIpKSxvLkJyb3dzZXIuYW5kcm9pZHx8dGhpcy5vbigidGlsZXVubG9hZCIsdGhpcy5fb25UaWxlUmVtb3ZlKX0sc2V0VXJsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3VybD10LGV8fHRoaXMucmVkcmF3KCksdGhpc30sY3JlYXRlVGlsZTpmdW5jdGlvbih0LGkpe3ZhciBuPWUuY3JlYXRlRWxlbWVudCgiaW1nIik7cmV0dXJuIG8uRG9tRXZlbnQub24obiwibG9hZCIsby5iaW5kKHRoaXMuX3RpbGVPbkxvYWQsdGhpcyxpLG4pKSxvLkRvbUV2ZW50Lm9uKG4sImVycm9yIixvLmJpbmQodGhpcy5fdGlsZU9uRXJyb3IsdGhpcyxpLG4pKSx0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4mJihuLmNyb3NzT3JpZ2luPSIiKSxuLmFsdD0iIixuLnNldEF0dHJpYnV0ZSgicm9sZSIsInByZXNlbnRhdGlvbiIpLG4uc3JjPXRoaXMuZ2V0VGlsZVVybCh0KSxufSxnZXRUaWxlVXJsOmZ1bmN0aW9uKHQpe3ZhciBlPXtyOm8uQnJvd3Nlci5yZXRpbmE/IkAyeCI6IiIsczp0aGlzLl9nZXRTdWJkb21haW4odCkseDp0LngseTp0Lnksejp0aGlzLl9nZXRab29tRm9yVXJsKCl9O2lmKHRoaXMuX21hcCYmIXRoaXMuX21hcC5vcHRpb25zLmNycy5pbmZpbml0ZSl7dmFyIGk9dGhpcy5fZ2xvYmFsVGlsZVJhbmdlLm1heC55LXQueTt0aGlzLm9wdGlvbnMudG1zJiYoZS55PWkpLGVbIi15Il09aX1yZXR1cm4gby5VdGlsLnRlbXBsYXRlKHRoaXMuX3VybCxvLmV4dGVuZChlLHRoaXMub3B0aW9ucykpfSxfdGlsZU9uTG9hZDpmdW5jdGlvbih0LGUpe28uQnJvd3Nlci5pZWx0OT9zZXRUaW1lb3V0KG8uYmluZCh0LHRoaXMsbnVsbCxlKSwwKTp0KG51bGwsZSl9LF90aWxlT25FcnJvcjpmdW5jdGlvbih0LGUsaSl7dmFyIG49dGhpcy5vcHRpb25zLmVycm9yVGlsZVVybDtuJiZlLnNyYyE9PW4mJihlLnNyYz1uKSx0KGksZSl9LGdldFRpbGVTaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGU9by5HcmlkTGF5ZXIucHJvdG90eXBlLmdldFRpbGVTaXplLmNhbGwodGhpcyksaT10aGlzLl90aWxlWm9vbSt0aGlzLm9wdGlvbnMuem9vbU9mZnNldCxuPXRoaXMub3B0aW9ucy5taW5OYXRpdmVab29tLHM9dGhpcy5vcHRpb25zLm1heE5hdGl2ZVpvb207cmV0dXJuIG51bGwhPT1uJiZpPG4/ZS5kaXZpZGVCeSh0LmdldFpvb21TY2FsZShuLGkpKS5yb3VuZCgpOm51bGwhPT1zJiZpPnM/ZS5kaXZpZGVCeSh0LmdldFpvb21TY2FsZShzLGkpKS5yb3VuZCgpOmV9LF9vblRpbGVSZW1vdmU6ZnVuY3Rpb24odCl7dC50aWxlLm9ubG9hZD1udWxsfSxfZ2V0Wm9vbUZvclVybDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpbGVab29tLGU9dGhpcy5vcHRpb25zLm1heFpvb20saT10aGlzLm9wdGlvbnMuem9vbVJldmVyc2Usbj10aGlzLm9wdGlvbnMuem9vbU9mZnNldCxvPXRoaXMub3B0aW9ucy5taW5OYXRpdmVab29tLHM9dGhpcy5vcHRpb25zLm1heE5hdGl2ZVpvb207cmV0dXJuIGkmJih0PWUtdCksdCs9bixudWxsIT09byYmdDxvP286bnVsbCE9PXMmJnQ+cz9zOnR9LF9nZXRTdWJkb21haW46ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5hYnModC54K3QueSkldGhpcy5vcHRpb25zLnN1YmRvbWFpbnMubGVuZ3RoO3JldHVybiB0aGlzLm9wdGlvbnMuc3ViZG9tYWluc1tlXX0sX2Fib3J0TG9hZGluZzpmdW5jdGlvbigpe3ZhciB0LGU7Zm9yKHQgaW4gdGhpcy5fdGlsZXMpdGhpcy5fdGlsZXNbdF0uY29vcmRzLnohPT10aGlzLl90aWxlWm9vbSYmKGU9dGhpcy5fdGlsZXNbdF0uZWwsZS5vbmxvYWQ9by5VdGlsLmZhbHNlRm4sZS5vbmVycm9yPW8uVXRpbC5mYWxzZUZuLGUuY29tcGxldGV8fChlLnNyYz1vLlV0aWwuZW1wdHlJbWFnZVVybCxvLkRvbVV0aWwucmVtb3ZlKGUpKSl9fSksby50aWxlTGF5ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uVGlsZUxheWVyKHQsZSl9LG8uVGlsZUxheWVyLldNUz1vLlRpbGVMYXllci5leHRlbmQoe2RlZmF1bHRXbXNQYXJhbXM6e3NlcnZpY2U6IldNUyIscmVxdWVzdDoiR2V0TWFwIixsYXllcnM6IiIsc3R5bGVzOiIiLGZvcm1hdDoiaW1hZ2UvanBlZyIsdHJhbnNwYXJlbnQ6ITEsdmVyc2lvbjoiMS4xLjEifSxvcHRpb25zOntjcnM6bnVsbCx1cHBlcmNhc2U6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl91cmw9dDt2YXIgaT1vLmV4dGVuZCh7fSx0aGlzLmRlZmF1bHRXbXNQYXJhbXMpO2Zvcih2YXIgbiBpbiBlKW4gaW4gdGhpcy5vcHRpb25zfHwoaVtuXT1lW25dKTtlPW8uc2V0T3B0aW9ucyh0aGlzLGUpLGkud2lkdGg9aS5oZWlnaHQ9ZS50aWxlU2l6ZSooZS5kZXRlY3RSZXRpbmEmJm8uQnJvd3Nlci5yZXRpbmE/MjoxKSx0aGlzLndtc1BhcmFtcz1pfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9jcnM9dGhpcy5vcHRpb25zLmNyc3x8dC5vcHRpb25zLmNycyx0aGlzLl93bXNWZXJzaW9uPXBhcnNlRmxvYXQodGhpcy53bXNQYXJhbXMudmVyc2lvbik7dmFyIGU9dGhpcy5fd21zVmVyc2lvbj49MS4zPyJjcnMiOiJzcnMiO3RoaXMud21zUGFyYW1zW2VdPXRoaXMuX2Nycy5jb2RlLG8uVGlsZUxheWVyLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsdCl9LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZUNvb3Jkc1RvQm91bmRzKHQpLGk9dGhpcy5fY3JzLnByb2plY3QoZS5nZXROb3J0aFdlc3QoKSksbj10aGlzLl9jcnMucHJvamVjdChlLmdldFNvdXRoRWFzdCgpKSxzPSh0aGlzLl93bXNWZXJzaW9uPj0xLjMmJnRoaXMuX2Nycz09PW8uQ1JTLkVQU0c0MzI2P1tuLnksaS54LGkueSxuLnhdOltpLngsbi55LG4ueCxpLnldKS5qb2luKCIsIikscj1vLlRpbGVMYXllci5wcm90b3R5cGUuZ2V0VGlsZVVybC5jYWxsKHRoaXMsdCk7cmV0dXJuIHIrby5VdGlsLmdldFBhcmFtU3RyaW5nKHRoaXMud21zUGFyYW1zLHIsdGhpcy5vcHRpb25zLnVwcGVyY2FzZSkrKHRoaXMub3B0aW9ucy51cHBlcmNhc2U/IiZCQk9YPSI6IiZiYm94PSIpK3N9LHNldFBhcmFtczpmdW5jdGlvbih0LGUpe3JldHVybiBvLmV4dGVuZCh0aGlzLndtc1BhcmFtcyx0KSxlfHx0aGlzLnJlZHJhdygpLHRoaXN9fSksby50aWxlTGF5ZXIud21zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLlRpbGVMYXllci5XTVModCxlKX0sby5JbWFnZU92ZXJsYXk9by5MYXllci5leHRlbmQoe29wdGlvbnM6e29wYWNpdHk6MSxhbHQ6IiIsaW50ZXJhY3RpdmU6ITEsY3Jvc3NPcmlnaW46ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlLGkpe3RoaXMuX3VybD10LHRoaXMuX2JvdW5kcz1vLmxhdExuZ0JvdW5kcyhlKSxvLnNldE9wdGlvbnModGhpcyxpKX0sb25BZGQ6ZnVuY3Rpb24oKXt0aGlzLl9pbWFnZXx8KHRoaXMuX2luaXRJbWFnZSgpLHRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSksdGhpcy5vcHRpb25zLmludGVyYWN0aXZlJiYoby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX2ltYWdlLCJsZWFmbGV0LWludGVyYWN0aXZlIiksdGhpcy5hZGRJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pbWFnZSkpLHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2ltYWdlKSx0aGlzLl9yZXNldCgpfSxvblJlbW92ZTpmdW5jdGlvbigpe28uRG9tVXRpbC5yZW1vdmUodGhpcy5faW1hZ2UpLHRoaXMub3B0aW9ucy5pbnRlcmFjdGl2ZSYmdGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pbWFnZSl9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5faW1hZ2UmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSx0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5vcGFjaXR5JiZ0aGlzLnNldE9wYWNpdHkodC5vcGFjaXR5KSx0aGlzfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZvLkRvbVV0aWwudG9Gcm9udCh0aGlzLl9pbWFnZSksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZvLkRvbVV0aWwudG9CYWNrKHRoaXMuX2ltYWdlKSx0aGlzfSxzZXRVcmw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3VybD10LHRoaXMuX2ltYWdlJiYodGhpcy5faW1hZ2Uuc3JjPXQpLHRoaXN9LHNldEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYm91bmRzPXQsdGhpcy5fbWFwJiZ0aGlzLl9yZXNldCgpLHRoaXN9LGdldEV2ZW50czpmdW5jdGlvbigpe3ZhciB0PXt6b29tOnRoaXMuX3Jlc2V0LHZpZXdyZXNldDp0aGlzLl9yZXNldH07cmV0dXJuIHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fYW5pbWF0ZVpvb20pLHR9LGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib3VuZHN9LGdldEVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW1hZ2V9LF9pbml0SW1hZ2U6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbWFnZT1vLkRvbVV0aWwuY3JlYXRlKCJpbWciLCJsZWFmbGV0LWltYWdlLWxheWVyICIrKHRoaXMuX3pvb21BbmltYXRlZD8ibGVhZmxldC16b29tLWFuaW1hdGVkIjoiIikpO3Qub25zZWxlY3RzdGFydD1vLlV0aWwuZmFsc2VGbix0Lm9ubW91c2Vtb3ZlPW8uVXRpbC5mYWxzZUZuLHQub25sb2FkPW8uYmluZCh0aGlzLmZpcmUsdGhpcywibG9hZCIpLHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiYmKHQuY3Jvc3NPcmlnaW49IiIpLHQuc3JjPXRoaXMuX3VybCx0LmFsdD10aGlzLm9wdGlvbnMuYWx0fSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLmdldFpvb21TY2FsZSh0Lnpvb20pLGk9dGhpcy5fbWFwLl9sYXRMbmdCb3VuZHNUb05ld0xheWVyQm91bmRzKHRoaXMuX2JvdW5kcyx0Lnpvb20sdC5jZW50ZXIpLm1pbjtvLkRvbVV0aWwuc2V0VHJhbnNmb3JtKHRoaXMuX2ltYWdlLGksZSl9LF9yZXNldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2ltYWdlLGU9bmV3IG8uQm91bmRzKHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldE5vcnRoV2VzdCgpKSx0aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2JvdW5kcy5nZXRTb3V0aEVhc3QoKSkpLGk9ZS5nZXRTaXplKCk7Cm8uRG9tVXRpbC5zZXRQb3NpdGlvbih0LGUubWluKSx0LnN0eWxlLndpZHRoPWkueCsicHgiLHQuc3R5bGUuaGVpZ2h0PWkueSsicHgifSxfdXBkYXRlT3BhY2l0eTpmdW5jdGlvbigpe28uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2ltYWdlLHRoaXMub3B0aW9ucy5vcGFjaXR5KX19KSxvLmltYWdlT3ZlcmxheT1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG5ldyBvLkltYWdlT3ZlcmxheSh0LGUsaSl9LG8uSWNvbj1vLkNsYXNzLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtvLnNldE9wdGlvbnModGhpcyx0KX0sY3JlYXRlSWNvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY3JlYXRlSWNvbigiaWNvbiIsdCl9LGNyZWF0ZVNoYWRvdzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY3JlYXRlSWNvbigic2hhZG93Iix0KX0sX2NyZWF0ZUljb246ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9nZXRJY29uVXJsKHQpO2lmKCFpKXtpZigiaWNvbiI9PT10KXRocm93IG5ldyBFcnJvcigiaWNvblVybCBub3Qgc2V0IGluIEljb24gb3B0aW9ucyAoc2VlIHRoZSBkb2NzKS4iKTtyZXR1cm4gbnVsbH12YXIgbj10aGlzLl9jcmVhdGVJbWcoaSxlJiYiSU1HIj09PWUudGFnTmFtZT9lOm51bGwpO3JldHVybiB0aGlzLl9zZXRJY29uU3R5bGVzKG4sdCksbn0sX3NldEljb25TdHlsZXM6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLm9wdGlvbnMsbj1pW2UrIlNpemUiXTsibnVtYmVyIj09dHlwZW9mIG4mJihuPVtuLG5dKTt2YXIgcz1vLnBvaW50KG4pLHI9by5wb2ludCgic2hhZG93Ij09PWUmJmkuc2hhZG93QW5jaG9yfHxpLmljb25BbmNob3J8fHMmJnMuZGl2aWRlQnkoMiwhMCkpO3QuY2xhc3NOYW1lPSJsZWFmbGV0LW1hcmtlci0iK2UrIiAiKyhpLmNsYXNzTmFtZXx8IiIpLHImJih0LnN0eWxlLm1hcmdpbkxlZnQ9LXIueCsicHgiLHQuc3R5bGUubWFyZ2luVG9wPS1yLnkrInB4IikscyYmKHQuc3R5bGUud2lkdGg9cy54KyJweCIsdC5zdHlsZS5oZWlnaHQ9cy55KyJweCIpfSxfY3JlYXRlSW1nOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8ZS5jcmVhdGVFbGVtZW50KCJpbWciKSxpLnNyYz10LGl9LF9nZXRJY29uVXJsOmZ1bmN0aW9uKHQpe3JldHVybiBvLkJyb3dzZXIucmV0aW5hJiZ0aGlzLm9wdGlvbnNbdCsiUmV0aW5hVXJsIl18fHRoaXMub3B0aW9uc1t0KyJVcmwiXX19KSxvLmljb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkljb24odCl9LG8uSWNvbi5EZWZhdWx0PW8uSWNvbi5leHRlbmQoe29wdGlvbnM6e2ljb25Vcmw6Im1hcmtlci1pY29uLnBuZyIsaWNvblJldGluYVVybDoibWFya2VyLWljb24tMngucG5nIixzaGFkb3dVcmw6Im1hcmtlci1zaGFkb3cucG5nIixpY29uU2l6ZTpbMjUsNDFdLGljb25BbmNob3I6WzEyLDQxXSxwb3B1cEFuY2hvcjpbMSwtMzRdLHRvb2x0aXBBbmNob3I6WzE2LC0yOF0sc2hhZG93U2l6ZTpbNDEsNDFdfSxfZ2V0SWNvblVybDpmdW5jdGlvbih0KXtyZXR1cm4gby5JY29uLkRlZmF1bHQuaW1hZ2VQYXRofHwoby5JY29uLkRlZmF1bHQuaW1hZ2VQYXRoPXRoaXMuX2RldGVjdEljb25QYXRoKCkpLCh0aGlzLm9wdGlvbnMuaW1hZ2VQYXRofHxvLkljb24uRGVmYXVsdC5pbWFnZVBhdGgpK28uSWNvbi5wcm90b3R5cGUuX2dldEljb25VcmwuY2FsbCh0aGlzLHQpfSxfZGV0ZWN0SWNvblBhdGg6ZnVuY3Rpb24oKXt2YXIgdD1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLCJsZWFmbGV0LWRlZmF1bHQtaWNvbi1wYXRoIixlLmJvZHkpLGk9by5Eb21VdGlsLmdldFN0eWxlKHQsImJhY2tncm91bmQtaW1hZ2UiKXx8by5Eb21VdGlsLmdldFN0eWxlKHQsImJhY2tncm91bmRJbWFnZSIpO3JldHVybiBlLmJvZHkucmVtb3ZlQ2hpbGQodCksMD09PWkuaW5kZXhPZigidXJsIik/aS5yZXBsYWNlKC9edXJsXChbXCJcJ10/LywiIikucmVwbGFjZSgvbWFya2VyLWljb25cLnBuZ1tcIlwnXT9cKSQvLCIiKToiIn19KSxvLk1hcmtlcj1vLkxheWVyLmV4dGVuZCh7b3B0aW9uczp7aWNvbjpuZXcgby5JY29uLkRlZmF1bHQsaW50ZXJhY3RpdmU6ITAsZHJhZ2dhYmxlOiExLGtleWJvYXJkOiEwLHRpdGxlOiIiLGFsdDoiIix6SW5kZXhPZmZzZXQ6MCxvcGFjaXR5OjEscmlzZU9uSG92ZXI6ITEscmlzZU9mZnNldDoyNTAscGFuZToibWFya2VyUGFuZSIsbm9uQnViYmxpbmdFdmVudHM6WyJjbGljayIsImRibGNsaWNrIiwibW91c2VvdmVyIiwibW91c2VvdXQiLCJjb250ZXh0bWVudSJdfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7by5zZXRPcHRpb25zKHRoaXMsZSksdGhpcy5fbGF0bG5nPW8ubGF0TG5nKHQpfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl96b29tQW5pbWF0ZWQ9dGhpcy5fem9vbUFuaW1hdGVkJiZ0Lm9wdGlvbnMubWFya2VyWm9vbUFuaW1hdGlvbix0aGlzLl96b29tQW5pbWF0ZWQmJnQub24oInpvb21hbmltIix0aGlzLl9hbmltYXRlWm9vbSx0aGlzKSx0aGlzLl9pbml0SWNvbigpLHRoaXMudXBkYXRlKCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dpbmcmJnRoaXMuZHJhZ2dpbmcuZW5hYmxlZCgpJiYodGhpcy5vcHRpb25zLmRyYWdnYWJsZT0hMCx0aGlzLmRyYWdnaW5nLnJlbW92ZUhvb2tzKCkpLHRoaXMuX3pvb21BbmltYXRlZCYmdC5vZmYoInpvb21hbmltIix0aGlzLl9hbmltYXRlWm9vbSx0aGlzKSx0aGlzLl9yZW1vdmVJY29uKCksdGhpcy5fcmVtb3ZlU2hhZG93KCl9LGdldEV2ZW50czpmdW5jdGlvbigpe3JldHVybnt6b29tOnRoaXMudXBkYXRlLHZpZXdyZXNldDp0aGlzLnVwZGF0ZX19LGdldExhdExuZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmd9LHNldExhdExuZzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9sYXRsbmc7cmV0dXJuIHRoaXMuX2xhdGxuZz1vLmxhdExuZyh0KSx0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgibW92ZSIse29sZExhdExuZzplLGxhdGxuZzp0aGlzLl9sYXRsbmd9KX0sc2V0WkluZGV4T2Zmc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4T2Zmc2V0PXQsdGhpcy51cGRhdGUoKX0sc2V0SWNvbjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb249dCx0aGlzLl9tYXAmJih0aGlzLl9pbml0SWNvbigpLHRoaXMudXBkYXRlKCkpLHRoaXMuX3BvcHVwJiZ0aGlzLmJpbmRQb3B1cCh0aGlzLl9wb3B1cCx0aGlzLl9wb3B1cC5vcHRpb25zKSx0aGlzfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ljb259LHVwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2ljb24pe3ZhciB0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKS5yb3VuZCgpO3RoaXMuX3NldFBvcyh0KX1yZXR1cm4gdGhpc30sX2luaXRJY29uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGU9ImxlYWZsZXQtem9vbS0iKyh0aGlzLl96b29tQW5pbWF0ZWQ/ImFuaW1hdGVkIjoiaGlkZSIpLGk9dC5pY29uLmNyZWF0ZUljb24odGhpcy5faWNvbiksbj0hMTtpIT09dGhpcy5faWNvbiYmKHRoaXMuX2ljb24mJnRoaXMuX3JlbW92ZUljb24oKSxuPSEwLHQudGl0bGUmJihpLnRpdGxlPXQudGl0bGUpLHQuYWx0JiYoaS5hbHQ9dC5hbHQpKSxvLkRvbVV0aWwuYWRkQ2xhc3MoaSxlKSx0LmtleWJvYXJkJiYoaS50YWJJbmRleD0iMCIpLHRoaXMuX2ljb249aSx0LnJpc2VPbkhvdmVyJiZ0aGlzLm9uKHttb3VzZW92ZXI6dGhpcy5fYnJpbmdUb0Zyb250LG1vdXNlb3V0OnRoaXMuX3Jlc2V0WkluZGV4fSk7dmFyIHM9dC5pY29uLmNyZWF0ZVNoYWRvdyh0aGlzLl9zaGFkb3cpLHI9ITE7cyE9PXRoaXMuX3NoYWRvdyYmKHRoaXMuX3JlbW92ZVNoYWRvdygpLHI9ITApLHMmJihvLkRvbVV0aWwuYWRkQ2xhc3MocyxlKSxzLmFsdD0iIiksdGhpcy5fc2hhZG93PXMsdC5vcGFjaXR5PDEmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSxuJiZ0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9pY29uKSx0aGlzLl9pbml0SW50ZXJhY3Rpb24oKSxzJiZyJiZ0aGlzLmdldFBhbmUoInNoYWRvd1BhbmUiKS5hcHBlbmRDaGlsZCh0aGlzLl9zaGFkb3cpfSxfcmVtb3ZlSWNvbjpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5yaXNlT25Ib3ZlciYmdGhpcy5vZmYoe21vdXNlb3Zlcjp0aGlzLl9icmluZ1RvRnJvbnQsbW91c2VvdXQ6dGhpcy5fcmVzZXRaSW5kZXh9KSxvLkRvbVV0aWwucmVtb3ZlKHRoaXMuX2ljb24pLHRoaXMucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5faWNvbiksdGhpcy5faWNvbj1udWxsfSxfcmVtb3ZlU2hhZG93OmZ1bmN0aW9uKCl7dGhpcy5fc2hhZG93JiZvLkRvbVV0aWwucmVtb3ZlKHRoaXMuX3NoYWRvdyksdGhpcy5fc2hhZG93PW51bGx9LF9zZXRQb3M6ZnVuY3Rpb24odCl7by5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2ljb24sdCksdGhpcy5fc2hhZG93JiZvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fc2hhZG93LHQpLHRoaXMuX3pJbmRleD10LnkrdGhpcy5vcHRpb25zLnpJbmRleE9mZnNldCx0aGlzLl9yZXNldFpJbmRleCgpfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKHQpe3RoaXMuX2ljb24uc3R5bGUuekluZGV4PXRoaXMuX3pJbmRleCt0fSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcikucm91bmQoKTt0aGlzLl9zZXRQb3MoZSl9LF9pbml0SW50ZXJhY3Rpb246ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJihvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5faWNvbiwibGVhZmxldC1pbnRlcmFjdGl2ZSIpLHRoaXMuYWRkSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5faWNvbiksby5IYW5kbGVyLk1hcmtlckRyYWcpKXt2YXIgdD10aGlzLm9wdGlvbnMuZHJhZ2dhYmxlO3RoaXMuZHJhZ2dpbmcmJih0PXRoaXMuZHJhZ2dpbmcuZW5hYmxlZCgpLHRoaXMuZHJhZ2dpbmcuZGlzYWJsZSgpKSx0aGlzLmRyYWdnaW5nPW5ldyBvLkhhbmRsZXIuTWFya2VyRHJhZyh0aGlzKSx0JiZ0aGlzLmRyYWdnaW5nLmVuYWJsZSgpfX0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLm9wYWNpdHk9dCx0aGlzLl9tYXAmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSx0aGlzfSxfdXBkYXRlT3BhY2l0eTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5vcGFjaXR5O28uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2ljb24sdCksdGhpcy5fc2hhZG93JiZvLkRvbVV0aWwuc2V0T3BhY2l0eSh0aGlzLl9zaGFkb3csdCl9LF9icmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVaSW5kZXgodGhpcy5vcHRpb25zLnJpc2VPZmZzZXQpfSxfcmVzZXRaSW5kZXg6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVaSW5kZXgoMCl9LF9nZXRQb3B1cEFuY2hvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuaWNvbi5vcHRpb25zLnBvcHVwQW5jaG9yfHxbMCwwXX0sX2dldFRvb2x0aXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy50b29sdGlwQW5jaG9yfHxbMCwwXX19KSxvLm1hcmtlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5NYXJrZXIodCxlKX0sby5EaXZJY29uPW8uSWNvbi5leHRlbmQoe29wdGlvbnM6e2ljb25TaXplOlsxMiwxMl0saHRtbDohMSxiZ1BvczpudWxsLGNsYXNzTmFtZToibGVhZmxldC1kaXYtaWNvbiJ9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7dmFyIGk9dCYmIkRJViI9PT10LnRhZ05hbWU/dDplLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG49dGhpcy5vcHRpb25zO2lmKGkuaW5uZXJIVE1MPW4uaHRtbCE9PSExP24uaHRtbDoiIixuLmJnUG9zKXt2YXIgcz1vLnBvaW50KG4uYmdQb3MpO2kuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uPS1zLngrInB4ICIrLXMueSsicHgifXJldHVybiB0aGlzLl9zZXRJY29uU3R5bGVzKGksImljb24iKSxpfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KSxvLmRpdkljb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkRpdkljb24odCl9LG8uRGl2T3ZlcmxheT1vLkxheWVyLmV4dGVuZCh7b3B0aW9uczp7b2Zmc2V0OlswLDddLGNsYXNzTmFtZToiIixwYW5lOiJwb3B1cFBhbmUifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7by5zZXRPcHRpb25zKHRoaXMsdCksdGhpcy5fc291cmNlPWV9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX3pvb21BbmltYXRlZD10Ll96b29tQW5pbWF0ZWQsdGhpcy5fY29udGFpbmVyfHx0aGlzLl9pbml0TGF5b3V0KCksdC5fZmFkZUFuaW1hdGVkJiZvLkRvbVV0aWwuc2V0T3BhY2l0eSh0aGlzLl9jb250YWluZXIsMCksY2xlYXJUaW1lb3V0KHRoaXMuX3JlbW92ZVRpbWVvdXQpLHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy51cGRhdGUoKSx0Ll9mYWRlQW5pbWF0ZWQmJm8uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lciwxKSx0aGlzLmJyaW5nVG9Gcm9udCgpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0Ll9mYWRlQW5pbWF0ZWQ/KG8uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lciwwKSx0aGlzLl9yZW1vdmVUaW1lb3V0PXNldFRpbWVvdXQoby5iaW5kKG8uRG9tVXRpbC5yZW1vdmUsby5Eb21VdGlsLHRoaXMuX2NvbnRhaW5lciksMjAwKSk6by5Eb21VdGlsLnJlbW92ZSh0aGlzLl9jb250YWluZXIpfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhdGxuZz1vLmxhdExuZyh0KSx0aGlzLl9tYXAmJih0aGlzLl91cGRhdGVQb3NpdGlvbigpLHRoaXMuX2FkanVzdFBhbigpKSx0aGlzfSxnZXRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRlbnR9LHNldENvbnRlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NvbnRlbnQ9dCx0aGlzLnVwZGF0ZSgpLHRoaXN9LGdldEVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSx1cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJih0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLl91cGRhdGVDb250ZW50KCksdGhpcy5fdXBkYXRlTGF5b3V0KCksdGhpcy5fdXBkYXRlUG9zaXRpb24oKSx0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eT0iIix0aGlzLl9hZGp1c3RQYW4oKSl9LGdldEV2ZW50czpmdW5jdGlvbigpe3ZhciB0PXt6b29tOnRoaXMuX3VwZGF0ZVBvc2l0aW9uLHZpZXdyZXNldDp0aGlzLl91cGRhdGVQb3NpdGlvbn07cmV0dXJuIHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fYW5pbWF0ZVpvb20pLHR9LGlzT3BlbjpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fbWFwJiZ0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcyl9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJm8uRG9tVXRpbC50b0Zyb250KHRoaXMuX2NvbnRhaW5lciksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZvLkRvbVV0aWwudG9CYWNrKHRoaXMuX2NvbnRhaW5lciksdGhpc30sX3VwZGF0ZUNvbnRlbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9jb250ZW50KXt2YXIgdD10aGlzLl9jb250ZW50Tm9kZSxlPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9jb250ZW50P3RoaXMuX2NvbnRlbnQodGhpcy5fc291cmNlfHx0aGlzKTp0aGlzLl9jb250ZW50O2lmKCJzdHJpbmciPT10eXBlb2YgZSl0LmlubmVySFRNTD1lO2Vsc2V7Zm9yKDt0Lmhhc0NoaWxkTm9kZXMoKTspdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpO3QuYXBwZW5kQ2hpbGQoZSl9dGhpcy5maXJlKCJjb250ZW50dXBkYXRlIil9fSxfdXBkYXRlUG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXApe3ZhciB0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSxlPW8ucG9pbnQodGhpcy5vcHRpb25zLm9mZnNldCksaT10aGlzLl9nZXRBbmNob3IoKTt0aGlzLl96b29tQW5pbWF0ZWQ/by5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lcix0LmFkZChpKSk6ZT1lLmFkZCh0KS5hZGQoaSk7dmFyIG49dGhpcy5fY29udGFpbmVyQm90dG9tPS1lLnkscz10aGlzLl9jb250YWluZXJMZWZ0PS1NYXRoLnJvdW5kKHRoaXMuX2NvbnRhaW5lcldpZHRoLzIpK2UueDt0aGlzLl9jb250YWluZXIuc3R5bGUuYm90dG9tPW4rInB4Iix0aGlzLl9jb250YWluZXIuc3R5bGUubGVmdD1zKyJweCJ9fSxfZ2V0QW5jaG9yOmZ1bmN0aW9uKCl7cmV0dXJuWzAsMF19fSksby5Qb3B1cD1vLkRpdk92ZXJsYXkuZXh0ZW5kKHtvcHRpb25zOnttYXhXaWR0aDozMDAsbWluV2lkdGg6NTAsbWF4SGVpZ2h0Om51bGwsYXV0b1BhbjohMCxhdXRvUGFuUGFkZGluZ1RvcExlZnQ6bnVsbCxhdXRvUGFuUGFkZGluZ0JvdHRvbVJpZ2h0Om51bGwsYXV0b1BhblBhZGRpbmc6WzUsNV0sa2VlcEluVmlldzohMSxjbG9zZUJ1dHRvbjohMCxhdXRvQ2xvc2U6ITAsY2xhc3NOYW1lOiIifSxvcGVuT246ZnVuY3Rpb24odCl7cmV0dXJuIHQub3BlblBvcHVwKHRoaXMpLHRoaXN9LG9uQWRkOmZ1bmN0aW9uKHQpe28uRGl2T3ZlcmxheS5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLHQpLHQuZmlyZSgicG9wdXBvcGVuIix7cG9wdXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmKHRoaXMuX3NvdXJjZS5maXJlKCJwb3B1cG9wZW4iLHtwb3B1cDp0aGlzfSwhMCksdGhpcy5fc291cmNlIGluc3RhbmNlb2Ygby5QYXRofHx0aGlzLl9zb3VyY2Uub24oInByZWNsaWNrIixvLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbikpfSxvblJlbW92ZTpmdW5jdGlvbih0KXtvLkRpdk92ZXJsYXkucHJvdG90eXBlLm9uUmVtb3ZlLmNhbGwodGhpcyx0KSx0LmZpcmUoInBvcHVwY2xvc2UiLHtwb3B1cDp0aGlzfSksdGhpcy5fc291cmNlJiYodGhpcy5fc291cmNlLmZpcmUoInBvcHVwY2xvc2UiLHtwb3B1cDp0aGlzfSwhMCksdGhpcy5fc291cmNlIGluc3RhbmNlb2Ygby5QYXRofHx0aGlzLl9zb3VyY2Uub2ZmKCJwcmVjbGljayIsby5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24pKX0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9by5EaXZPdmVybGF5LnByb3RvdHlwZS5nZXRFdmVudHMuY2FsbCh0aGlzKTtyZXR1cm4oImNsb3NlT25DbGljayJpbiB0aGlzLm9wdGlvbnM/dGhpcy5vcHRpb25zLmNsb3NlT25DbGljazp0aGlzLl9tYXAub3B0aW9ucy5jbG9zZVBvcHVwT25DbGljaykmJih0LnByZWNsaWNrPXRoaXMuX2Nsb3NlKSx0aGlzLm9wdGlvbnMua2VlcEluVmlldyYmKHQubW92ZWVuZD10aGlzLl9hZGp1c3RQYW4pLHR9LF9jbG9zZTpmdW5jdGlvbigpe3RoaXMuX21hcCYmdGhpcy5fbWFwLmNsb3NlUG9wdXAodGhpcyl9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQ9ImxlYWZsZXQtcG9wdXAiLGU9dGhpcy5fY29udGFpbmVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsdCsiICIrKHRoaXMub3B0aW9ucy5jbGFzc05hbWV8fCIiKSsiIGxlYWZsZXQtem9vbS1hbmltYXRlZCIpO2lmKHRoaXMub3B0aW9ucy5jbG9zZUJ1dHRvbil7dmFyIGk9dGhpcy5fY2xvc2VCdXR0b249by5Eb21VdGlsLmNyZWF0ZSgiYSIsdCsiLWNsb3NlLWJ1dHRvbiIsZSk7aS5ocmVmPSIjY2xvc2UiLGkuaW5uZXJIVE1MPSImIzIxNTsiLG8uRG9tRXZlbnQub24oaSwiY2xpY2siLHRoaXMuX29uQ2xvc2VCdXR0b25DbGljayx0aGlzKX12YXIgbj10aGlzLl93cmFwcGVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsdCsiLWNvbnRlbnQtd3JhcHBlciIsZSk7dGhpcy5fY29udGVudE5vZGU9by5Eb21VdGlsLmNyZWF0ZSgiZGl2Iix0KyItY29udGVudCIsbiksby5Eb21FdmVudC5kaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihuKS5kaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb24odGhpcy5fY29udGVudE5vZGUpLm9uKG4sImNvbnRleHRtZW51IixvLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbiksdGhpcy5fdGlwQ29udGFpbmVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsdCsiLXRpcC1jb250YWluZXIiLGUpLHRoaXMuX3RpcD1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLHQrIi10aXAiLHRoaXMuX3RpcENvbnRhaW5lcil9LF91cGRhdGVMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250ZW50Tm9kZSxlPXQuc3R5bGU7ZS53aWR0aD0iIixlLndoaXRlU3BhY2U9Im5vd3JhcCI7dmFyIGk9dC5vZmZzZXRXaWR0aDtpPU1hdGgubWluKGksdGhpcy5vcHRpb25zLm1heFdpZHRoKSxpPU1hdGgubWF4KGksdGhpcy5vcHRpb25zLm1pbldpZHRoKSxlLndpZHRoPWkrMSsicHgiLGUud2hpdGVTcGFjZT0iIixlLmhlaWdodD0iIjt2YXIgbj10Lm9mZnNldEhlaWdodCxzPXRoaXMub3B0aW9ucy5tYXhIZWlnaHQscj0ibGVhZmxldC1wb3B1cC1zY3JvbGxlZCI7cyYmbj5zPyhlLmhlaWdodD1zKyJweCIsby5Eb21VdGlsLmFkZENsYXNzKHQscikpOm8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0LHIpLHRoaXMuX2NvbnRhaW5lcldpZHRoPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aH0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5fbGF0TG5nVG9OZXdMYXllclBvaW50KHRoaXMuX2xhdGxuZyx0Lnpvb20sdC5jZW50ZXIpLGk9dGhpcy5fZ2V0QW5jaG9yKCk7by5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lcixlLmFkZChpKSl9LF9hZGp1c3RQYW46ZnVuY3Rpb24oKXtpZighKCF0aGlzLm9wdGlvbnMuYXV0b1Bhbnx8dGhpcy5fbWFwLl9wYW5BbmltJiZ0aGlzLl9tYXAuX3BhbkFuaW0uX2luUHJvZ3Jlc3MpKXt2YXIgdD10aGlzLl9tYXAsZT1wYXJzZUludChvLkRvbVV0aWwuZ2V0U3R5bGUodGhpcy5fY29udGFpbmVyLCJtYXJnaW5Cb3R0b20iKSwxMCl8fDAsaT10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0K2Usbj10aGlzLl9jb250YWluZXJXaWR0aCxzPW5ldyBvLlBvaW50KHRoaXMuX2NvbnRhaW5lckxlZnQsLWktdGhpcy5fY29udGFpbmVyQm90dG9tKTtzLl9hZGQoby5Eb21VdGlsLmdldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lcikpO3ZhciByPXQubGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQocyksYT1vLnBvaW50KHRoaXMub3B0aW9ucy5hdXRvUGFuUGFkZGluZyksaD1vLnBvaW50KHRoaXMub3B0aW9ucy5hdXRvUGFuUGFkZGluZ1RvcExlZnR8fGEpLGw9by5wb2ludCh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmdCb3R0b21SaWdodHx8YSksdT10LmdldFNpemUoKSxjPTAsZD0wO3IueCtuK2wueD51LngmJihjPXIueCtuLXUueCtsLngpLHIueC1jLWgueDwwJiYoYz1yLngtaC54KSxyLnkraStsLnk+dS55JiYoZD1yLnkraS11LnkrbC55KSxyLnktZC1oLnk8MCYmKGQ9ci55LWgueSksKGN8fGQpJiZ0LmZpcmUoImF1dG9wYW5zdGFydCIpLnBhbkJ5KFtjLGRdKX19LF9vbkNsb3NlQnV0dG9uQ2xpY2s6ZnVuY3Rpb24odCl7dGhpcy5fY2xvc2UoKSxvLkRvbUV2ZW50LnN0b3AodCl9LF9nZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gby5wb2ludCh0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5fZ2V0UG9wdXBBbmNob3I/dGhpcy5fc291cmNlLl9nZXRQb3B1cEFuY2hvcigpOlswLDBdKX19KSxvLnBvcHVwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLlBvcHVwKHQsZSl9LG8uTWFwLm1lcmdlT3B0aW9ucyh7Y2xvc2VQb3B1cE9uQ2xpY2s6ITB9KSxvLk1hcC5pbmNsdWRlKHtvcGVuUG9wdXA6ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0IGluc3RhbmNlb2Ygby5Qb3B1cHx8KHQ9bmV3IG8uUG9wdXAoaSkuc2V0Q29udGVudCh0KSksZSYmdC5zZXRMYXRMbmcoZSksdGhpcy5oYXNMYXllcih0KT90aGlzOih0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAub3B0aW9ucy5hdXRvQ2xvc2UmJnRoaXMuY2xvc2VQb3B1cCgpLHRoaXMuX3BvcHVwPXQsdGhpcy5hZGRMYXllcih0KSl9LGNsb3NlUG9wdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQhPT10aGlzLl9wb3B1cHx8KHQ9dGhpcy5fcG9wdXAsdGhpcy5fcG9wdXA9bnVsbCksdCYmdGhpcy5yZW1vdmVMYXllcih0KSx0aGlzfX0pLG8uTGF5ZXIuaW5jbHVkZSh7YmluZFBvcHVwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBvLlBvcHVwPyhvLnNldE9wdGlvbnModCxlKSx0aGlzLl9wb3B1cD10LHQuX3NvdXJjZT10aGlzKToodGhpcy5fcG9wdXAmJiFlfHwodGhpcy5fcG9wdXA9bmV3IG8uUG9wdXAoZSx0aGlzKSksdGhpcy5fcG9wdXAuc2V0Q29udGVudCh0KSksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkfHwodGhpcy5vbih7Y2xpY2s6dGhpcy5fb3BlblBvcHVwLHJlbW92ZTp0aGlzLmNsb3NlUG9wdXAsbW92ZTp0aGlzLl9tb3ZlUG9wdXB9KSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITApLHRoaXN9LHVuYmluZFBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5vZmYoe2NsaWNrOnRoaXMuX29wZW5Qb3B1cCxyZW1vdmU6dGhpcy5jbG9zZVBvcHVwLG1vdmU6dGhpcy5fbW92ZVBvcHVwfSksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkPSExLHRoaXMuX3BvcHVwPW51bGwpLHRoaXN9LG9wZW5Qb3B1cDpmdW5jdGlvbih0LGUpe2lmKHQgaW5zdGFuY2VvZiBvLkxheWVyfHwoZT10LHQ9dGhpcyksdCBpbnN0YW5jZW9mIG8uRmVhdHVyZUdyb3VwKWZvcih2YXIgaSBpbiB0aGlzLl9sYXllcnMpe3Q9dGhpcy5fbGF5ZXJzW2ldO2JyZWFrfXJldHVybiBlfHwoZT10LmdldENlbnRlcj90LmdldENlbnRlcigpOnQuZ2V0TGF0TG5nKCkpLHRoaXMuX3BvcHVwJiZ0aGlzLl9tYXAmJih0aGlzLl9wb3B1cC5fc291cmNlPXQsdGhpcy5fcG9wdXAudXBkYXRlKCksdGhpcy5fbWFwLm9wZW5Qb3B1cCh0aGlzLl9wb3B1cCxlKSksdGhpc30sY2xvc2VQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuX2Nsb3NlKCksdGhpc30sdG9nZ2xlUG9wdXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXAuX21hcD90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cCh0KSksdGhpc30saXNQb3B1cE9wZW46ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5pc09wZW4oKX0sc2V0UG9wdXBDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuc2V0Q29udGVudCh0KSx0aGlzfSxnZXRQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cH0sX29wZW5Qb3B1cDpmdW5jdGlvbih0KXt2YXIgZT10LmxheWVyfHx0LnRhcmdldDtpZih0aGlzLl9wb3B1cCYmdGhpcy5fbWFwKXJldHVybiBvLkRvbUV2ZW50LnN0b3AodCksZSBpbnN0YW5jZW9mIG8uUGF0aD92b2lkIHRoaXMub3BlblBvcHVwKHQubGF5ZXJ8fHQudGFyZ2V0LHQubGF0bG5nKTp2b2lkKHRoaXMuX21hcC5oYXNMYXllcih0aGlzLl9wb3B1cCkmJnRoaXMuX3BvcHVwLl9zb3VyY2U9PT1lP3RoaXMuY2xvc2VQb3B1cCgpOnRoaXMub3BlblBvcHVwKGUsdC5sYXRsbmcpKX0sX21vdmVQb3B1cDpmdW5jdGlvbih0KXt0aGlzLl9wb3B1cC5zZXRMYXRMbmcodC5sYXRsbmcpfX0pLG8uVG9vbHRpcD1vLkRpdk92ZXJsYXkuZXh0ZW5kKHtvcHRpb25zOntwYW5lOiJ0b29sdGlwUGFuZSIsb2Zmc2V0OlswLDBdLGRpcmVjdGlvbjoiYXV0byIscGVybWFuZW50OiExLHN0aWNreTohMSxpbnRlcmFjdGl2ZTohMSxvcGFjaXR5Oi45fSxvbkFkZDpmdW5jdGlvbih0KXtvLkRpdk92ZXJsYXkucHJvdG90eXBlLm9uQWRkLmNhbGwodGhpcyx0KSx0aGlzLnNldE9wYWNpdHkodGhpcy5vcHRpb25zLm9wYWNpdHkpLHQuZmlyZSgidG9vbHRpcG9wZW4iLHt0b29sdGlwOnRoaXN9KSx0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5maXJlKCJ0b29sdGlwb3BlbiIse3Rvb2x0aXA6dGhpc30sITApfSxvblJlbW92ZTpmdW5jdGlvbih0KXtvLkRpdk92ZXJsYXkucHJvdG90eXBlLm9uUmVtb3ZlLmNhbGwodGhpcyx0KSx0LmZpcmUoInRvb2x0aXBjbG9zZSIse3Rvb2x0aXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLmZpcmUoInRvb2x0aXBjbG9zZSIse3Rvb2x0aXA6dGhpc30sITApfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1vLkRpdk92ZXJsYXkucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybiBvLkJyb3dzZXIudG91Y2gmJiF0aGlzLm9wdGlvbnMucGVybWFuZW50JiYodC5wcmVjbGljaz10aGlzLl9jbG9zZSksdH0sX2Nsb3NlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiZ0aGlzLl9tYXAuY2xvc2VUb29sdGlwKHRoaXMpfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PSJsZWFmbGV0LXRvb2x0aXAiLGU9dCsiICIrKHRoaXMub3B0aW9ucy5jbGFzc05hbWV8fCIiKSsiIGxlYWZsZXQtem9vbS0iKyh0aGlzLl96b29tQW5pbWF0ZWQ/ImFuaW1hdGVkIjoiaGlkZSIpO3RoaXMuX2NvbnRlbnROb2RlPXRoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUpfSxfdXBkYXRlTGF5b3V0OmZ1bmN0aW9uKCl7fSxfYWRqdXN0UGFuOmZ1bmN0aW9uKCl7fSxfc2V0UG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9dGhpcy5fY29udGFpbmVyLG49ZS5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGUuZ2V0Q2VudGVyKCkpLHM9ZS5sYXllclBvaW50VG9Db250YWluZXJQb2ludCh0KSxyPXRoaXMub3B0aW9ucy5kaXJlY3Rpb24sYT1pLm9mZnNldFdpZHRoLGg9aS5vZmZzZXRIZWlnaHQsbD1vLnBvaW50KHRoaXMub3B0aW9ucy5vZmZzZXQpLHU9dGhpcy5fZ2V0QW5jaG9yKCk7InRvcCI9PT1yP3Q9dC5hZGQoby5wb2ludCgtYS8yK2wueCwtaCtsLnkrdS55LCEwKSk6ImJvdHRvbSI9PT1yP3Q9dC5zdWJ0cmFjdChvLnBvaW50KGEvMi1sLngsLWwueSwhMCkpOiJjZW50ZXIiPT09cj90PXQuc3VidHJhY3Qoby5wb2ludChhLzIrbC54LGgvMi11LnkrbC55LCEwKSk6InJpZ2h0Ij09PXJ8fCJhdXRvIj09PXImJnMueDxuLng/KHI9InJpZ2h0Iix0PXQuYWRkKG8ucG9pbnQobC54K3UueCx1LnktaC8yK2wueSwhMCkpKToocj0ibGVmdCIsdD10LnN1YnRyYWN0KG8ucG9pbnQoYSt1LngtbC54LGgvMi11LnktbC55LCEwKSkpLG8uRG9tVXRpbC5yZW1vdmVDbGFzcyhpLCJsZWFmbGV0LXRvb2x0aXAtcmlnaHQiKSxvLkRvbVV0aWwucmVtb3ZlQ2xhc3MoaSwibGVhZmxldC10b29sdGlwLWxlZnQiKSxvLkRvbVV0aWwucmVtb3ZlQ2xhc3MoaSwibGVhZmxldC10b29sdGlwLXRvcCIpLG8uRG9tVXRpbC5yZW1vdmVDbGFzcyhpLCJsZWFmbGV0LXRvb2x0aXAtYm90dG9tIiksby5Eb21VdGlsLmFkZENsYXNzKGksImxlYWZsZXQtdG9vbHRpcC0iK3IpLG8uRG9tVXRpbC5zZXRQb3NpdGlvbihpLHQpfSxfdXBkYXRlUG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyk7dGhpcy5fc2V0UG9zaXRpb24odCl9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zLm9wYWNpdHk9dCx0aGlzLl9jb250YWluZXImJm8uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lcix0KX0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5fbGF0TG5nVG9OZXdMYXllclBvaW50KHRoaXMuX2xhdGxuZyx0Lnpvb20sdC5jZW50ZXIpO3RoaXMuX3NldFBvc2l0aW9uKGUpfSxfZ2V0QW5jaG9yOmZ1bmN0aW9uKCl7cmV0dXJuIG8ucG9pbnQodGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2UuX2dldFRvb2x0aXBBbmNob3ImJiF0aGlzLm9wdGlvbnMuc3RpY2t5P3RoaXMuX3NvdXJjZS5fZ2V0VG9vbHRpcEFuY2hvcigpOlswLDBdKX19KSxvLnRvb2x0aXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uVG9vbHRpcCh0LGUpfSxvLk1hcC5pbmNsdWRlKHtvcGVuVG9vbHRpcDpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBvLlRvb2x0aXB8fCh0PW5ldyBvLlRvb2x0aXAoaSkuc2V0Q29udGVudCh0KSksZSYmdC5zZXRMYXRMbmcoZSksdGhpcy5oYXNMYXllcih0KT90aGlzOnRoaXMuYWRkTGF5ZXIodCl9LGNsb3NlVG9vbHRpcDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdGhpcy5yZW1vdmVMYXllcih0KSx0aGlzfX0pLG8uTGF5ZXIuaW5jbHVkZSh7YmluZFRvb2x0aXA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIG8uVG9vbHRpcD8oby5zZXRPcHRpb25zKHQsZSksdGhpcy5fdG9vbHRpcD10LHQuX3NvdXJjZT10aGlzKToodGhpcy5fdG9vbHRpcCYmIWV8fCh0aGlzLl90b29sdGlwPW8udG9vbHRpcChlLHRoaXMpKSx0aGlzLl90b29sdGlwLnNldENvbnRlbnQodCkpLHRoaXMuX2luaXRUb29sdGlwSW50ZXJhY3Rpb25zKCksdGhpcy5fdG9vbHRpcC5vcHRpb25zLnBlcm1hbmVudCYmdGhpcy5fbWFwJiZ0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcykmJnRoaXMub3BlblRvb2x0aXAoKSx0aGlzfSx1bmJpbmRUb29sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAmJih0aGlzLl9pbml0VG9vbHRpcEludGVyYWN0aW9ucyghMCksdGhpcy5jbG9zZVRvb2x0aXAoKSx0aGlzLl90b29sdGlwPW51bGwpLHRoaXN9LF9pbml0VG9vbHRpcEludGVyYWN0aW9uczpmdW5jdGlvbih0KXtpZih0fHwhdGhpcy5fdG9vbHRpcEhhbmRsZXJzQWRkZWQpe3ZhciBlPXQ/Im9mZiI6Im9uIixpPXtyZW1vdmU6dGhpcy5jbG9zZVRvb2x0aXAsbW92ZTp0aGlzLl9tb3ZlVG9vbHRpcH07dGhpcy5fdG9vbHRpcC5vcHRpb25zLnBlcm1hbmVudD9pLmFkZD10aGlzLl9vcGVuVG9vbHRpcDooaS5tb3VzZW92ZXI9dGhpcy5fb3BlblRvb2x0aXAsaS5tb3VzZW91dD10aGlzLmNsb3NlVG9vbHRpcCx0aGlzLl90b29sdGlwLm9wdGlvbnMuc3RpY2t5JiYoaS5tb3VzZW1vdmU9dGhpcy5fbW92ZVRvb2x0aXApLG8uQnJvd3Nlci50b3VjaCYmKGkuY2xpY2s9dGhpcy5fb3BlblRvb2x0aXApKSx0aGlzW2VdKGkpLHRoaXMuX3Rvb2x0aXBIYW5kbGVyc0FkZGVkPSF0fX0sb3BlblRvb2x0aXA6ZnVuY3Rpb24odCxlKXtpZih0IGluc3RhbmNlb2Ygby5MYXllcnx8KGU9dCx0PXRoaXMpLHQgaW5zdGFuY2VvZiBvLkZlYXR1cmVHcm91cClmb3IodmFyIGkgaW4gdGhpcy5fbGF5ZXJzKXt0PXRoaXMuX2xheWVyc1tpXTticmVha31yZXR1cm4gZXx8KGU9dC5nZXRDZW50ZXI/dC5nZXRDZW50ZXIoKTp0LmdldExhdExuZygpKSx0aGlzLl90b29sdGlwJiZ0aGlzLl9tYXAmJih0aGlzLl90b29sdGlwLl9zb3VyY2U9dCx0aGlzLl90b29sdGlwLnVwZGF0ZSgpLHRoaXMuX21hcC5vcGVuVG9vbHRpcCh0aGlzLl90b29sdGlwLGUpLHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5pbnRlcmFjdGl2ZSYmdGhpcy5fdG9vbHRpcC5fY29udGFpbmVyJiYoby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciwibGVhZmxldC1jbGlja2FibGUiKSx0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lcikpKSx0aGlzfSxjbG9zZVRvb2x0aXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdG9vbHRpcCYmKHRoaXMuX3Rvb2x0aXAuX2Nsb3NlKCksdGhpcy5fdG9vbHRpcC5vcHRpb25zLmludGVyYWN0aXZlJiZ0aGlzLl90b29sdGlwLl9jb250YWluZXImJihvLkRvbVV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fdG9vbHRpcC5fY29udGFpbmVyLCJsZWFmbGV0LWNsaWNrYWJsZSIpLHRoaXMucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5fdG9vbHRpcC5fY29udGFpbmVyKSkpLHRoaXN9LHRvZ2dsZVRvb2x0aXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAmJih0aGlzLl90b29sdGlwLl9tYXA/dGhpcy5jbG9zZVRvb2x0aXAoKTp0aGlzLm9wZW5Ub29sdGlwKHQpKSx0aGlzfSxpc1Rvb2x0aXBPcGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAuaXNPcGVuKCl9LHNldFRvb2x0aXBDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl90b29sdGlwJiZ0aGlzLl90b29sdGlwLnNldENvbnRlbnQodCksdGhpc30sZ2V0VG9vbHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwfSxfb3BlblRvb2x0aXA6ZnVuY3Rpb24odCl7dmFyIGU9dC5sYXllcnx8dC50YXJnZXQ7dGhpcy5fdG9vbHRpcCYmdGhpcy5fbWFwJiZ0aGlzLm9wZW5Ub29sdGlwKGUsdGhpcy5fdG9vbHRpcC5vcHRpb25zLnN0aWNreT90LmxhdGxuZzppKX0sX21vdmVUb29sdGlwOmZ1bmN0aW9uKHQpe3ZhciBlLGksbj10LmxhdGxuZzt0aGlzLl90b29sdGlwLm9wdGlvbnMuc3RpY2t5JiZ0Lm9yaWdpbmFsRXZlbnQmJihlPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0Lm9yaWdpbmFsRXZlbnQpLGk9dGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGUpLG49dGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhpKSksdGhpcy5fdG9vbHRpcC5zZXRMYXRMbmcobil9fSksby5MYXllckdyb3VwPW8uTGF5ZXIuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX2xheWVycz17fTt2YXIgZSxpO2lmKHQpZm9yKGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5hZGRMYXllcih0W2VdKX0sYWRkTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRMYXllcklkKHQpO3JldHVybiB0aGlzLl9sYXllcnNbZV09dCx0aGlzLl9tYXAmJnRoaXMuX21hcC5hZGRMYXllcih0KSx0aGlzfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt2YXIgZT10IGluIHRoaXMuX2xheWVycz90OnRoaXMuZ2V0TGF5ZXJJZCh0KTtyZXR1cm4gdGhpcy5fbWFwJiZ0aGlzLl9sYXllcnNbZV0mJnRoaXMuX21hcC5yZW1vdmVMYXllcih0aGlzLl9sYXllcnNbZV0pLGRlbGV0ZSB0aGlzLl9sYXllcnNbZV0sdGhpc30saGFzTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuISF0JiYodCBpbiB0aGlzLl9sYXllcnN8fHRoaXMuZ2V0TGF5ZXJJZCh0KWluIHRoaXMuX2xheWVycyl9LGNsZWFyTGF5ZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xheWVycyl0aGlzLnJlbW92ZUxheWVyKHRoaXMuX2xheWVyc1t0XSk7cmV0dXJuIHRoaXN9LGludm9rZTpmdW5jdGlvbih0KXt2YXIgZSxpLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2ZvcihlIGluIHRoaXMuX2xheWVycylpPXRoaXMuX2xheWVyc1tlXSxpW3RdJiZpW3RdLmFwcGx5KGksbik7cmV0dXJuIHRoaXN9LG9uQWRkOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpdC5hZGRMYXllcih0aGlzLl9sYXllcnNbZV0pfSxvblJlbW92ZTpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fbGF5ZXJzKXQucmVtb3ZlTGF5ZXIodGhpcy5fbGF5ZXJzW2VdKX0sZWFjaExheWVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpIGluIHRoaXMuX2xheWVycyl0LmNhbGwoZSx0aGlzLl9sYXllcnNbaV0pO3JldHVybiB0aGlzfSxnZXRMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF5ZXJzW3RdfSxnZXRMYXllcnM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fbGF5ZXJzKXQucHVzaCh0aGlzLl9sYXllcnNbZV0pO3JldHVybiB0fSxzZXRaSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52b2tlKCJzZXRaSW5kZXgiLHQpfSxnZXRMYXllcklkOmZ1bmN0aW9uKHQpe3JldHVybiBvLnN0YW1wKHQpfX0pLG8ubGF5ZXJHcm91cD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uTGF5ZXJHcm91cCh0KX0sby5GZWF0dXJlR3JvdXA9by5MYXllckdyb3VwLmV4dGVuZCh7YWRkTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzTGF5ZXIodCk/dGhpczoodC5hZGRFdmVudFBhcmVudCh0aGlzKSxvLkxheWVyR3JvdXAucHJvdG90eXBlLmFkZExheWVyLmNhbGwodGhpcyx0KSx0aGlzLmZpcmUoImxheWVyYWRkIix7bGF5ZXI6dH0pKX0scmVtb3ZlTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzTGF5ZXIodCk/KHQgaW4gdGhpcy5fbGF5ZXJzJiYodD10aGlzLl9sYXllcnNbdF0pLHQucmVtb3ZlRXZlbnRQYXJlbnQodGhpcyksby5MYXllckdyb3VwLnByb3RvdHlwZS5yZW1vdmVMYXllci5jYWxsKHRoaXMsdCksdGhpcy5maXJlKCJsYXllcnJlbW92ZSIse2xheWVyOnR9KSk6dGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52b2tlKCJzZXRTdHlsZSIsdCl9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZSgiYnJpbmdUb0Zyb250Iil9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW52b2tlKCJicmluZ1RvQmFjayIpfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgby5MYXRMbmdCb3VuZHM7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl7dmFyIGk9dGhpcy5fbGF5ZXJzW2VdO3QuZXh0ZW5kKGkuZ2V0Qm91bmRzP2kuZ2V0Qm91bmRzKCk6aS5nZXRMYXRMbmcoKSl9cmV0dXJuIHR9fSksby5mZWF0dXJlR3JvdXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkZlYXR1cmVHcm91cCh0KX0sby5SZW5kZXJlcj1vLkxheWVyLmV4dGVuZCh7b3B0aW9uczp7cGFkZGluZzouMX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtvLnNldE9wdGlvbnModGhpcyx0KSxvLnN0YW1wKHRoaXMpLHRoaXMuX2xheWVycz10aGlzLl9sYXllcnN8fHt9fSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2luaXRDb250YWluZXIoKSx0aGlzLl96b29tQW5pbWF0ZWQmJm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9jb250YWluZXIsImxlYWZsZXQtem9vbS1hbmltYXRlZCIpKSx0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpLHRoaXMuX3VwZGF0ZSgpLHRoaXMub24oInVwZGF0ZSIsdGhpcy5fdXBkYXRlUGF0aHMsdGhpcyl9LG9uUmVtb3ZlOmZ1bmN0aW9uKCl7by5Eb21VdGlsLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMub2ZmKCJ1cGRhdGUiLHRoaXMuX3VwZGF0ZVBhdGhzLHRoaXMpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17dmlld3Jlc2V0OnRoaXMuX3Jlc2V0LHpvb206dGhpcy5fb25ab29tLG1vdmVlbmQ6dGhpcy5fdXBkYXRlLHpvb21lbmQ6dGhpcy5fb25ab29tRW5kfTtyZXR1cm4gdGhpcy5fem9vbUFuaW1hdGVkJiYodC56b29tYW5pbT10aGlzLl9vbkFuaW1ab29tKSx0fSxfb25BbmltWm9vbTpmdW5jdGlvbih0KXt0aGlzLl91cGRhdGVUcmFuc2Zvcm0odC5jZW50ZXIsdC56b29tKX0sX29uWm9vbTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVRyYW5zZm9ybSh0aGlzLl9tYXAuZ2V0Q2VudGVyKCksdGhpcy5fbWFwLmdldFpvb20oKSl9LF91cGRhdGVUcmFuc2Zvcm06ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKGUsdGhpcy5fem9vbSksbj1vLkRvbVV0aWwuZ2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyKSxzPXRoaXMuX21hcC5nZXRTaXplKCkubXVsdGlwbHlCeSguNSt0aGlzLm9wdGlvbnMucGFkZGluZykscj10aGlzLl9tYXAucHJvamVjdCh0aGlzLl9jZW50ZXIsZSksYT10aGlzLl9tYXAucHJvamVjdCh0LGUpLGg9YS5zdWJ0cmFjdChyKSxsPXMubXVsdGlwbHlCeSgtaSkuYWRkKG4pLmFkZChzKS5zdWJ0cmFjdChoKTtvLkJyb3dzZXIuYW55M2Q/by5Eb21VdGlsLnNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsbCxpKTpvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyLGwpfSxfcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGUoKSx0aGlzLl91cGRhdGVUcmFuc2Zvcm0odGhpcy5fY2VudGVyLHRoaXMuX3pvb20pO2Zvcih2YXIgdCBpbiB0aGlzLl9sYXllcnMpdGhpcy5fbGF5ZXJzW3RdLl9yZXNldCgpfSxfb25ab29tRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0uX3Byb2plY3QoKX0sX3VwZGF0ZVBhdGhzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0uX3VwZGF0ZSgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnBhZGRpbmcsZT10aGlzLl9tYXAuZ2V0U2l6ZSgpLGk9dGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGUubXVsdGlwbHlCeSgtdCkpLnJvdW5kKCk7dGhpcy5fYm91bmRzPW5ldyBvLkJvdW5kcyhpLGkuYWRkKGUubXVsdGlwbHlCeSgxKzIqdCkpLnJvdW5kKCkpLHRoaXMuX2NlbnRlcj10aGlzLl9tYXAuZ2V0Q2VudGVyKCksdGhpcy5fem9vbT10aGlzLl9tYXAuZ2V0Wm9vbSgpfX0pLG8uTWFwLmluY2x1ZGUoe2dldFJlbmRlcmVyOmZ1bmN0aW9uKHQpe3ZhciBlPXQub3B0aW9ucy5yZW5kZXJlcnx8dGhpcy5fZ2V0UGFuZVJlbmRlcmVyKHQub3B0aW9ucy5wYW5lKXx8dGhpcy5vcHRpb25zLnJlbmRlcmVyfHx0aGlzLl9yZW5kZXJlcjtyZXR1cm4gZXx8KGU9dGhpcy5fcmVuZGVyZXI9dGhpcy5vcHRpb25zLnByZWZlckNhbnZhcyYmby5jYW52YXMoKXx8by5zdmcoKSksdGhpcy5oYXNMYXllcihlKXx8dGhpcy5hZGRMYXllcihlKSxlfSxfZ2V0UGFuZVJlbmRlcmVyOmZ1bmN0aW9uKHQpe2lmKCJvdmVybGF5UGFuZSI9PT10fHx0PT09aSlyZXR1cm4hMTt2YXIgZT10aGlzLl9wYW5lUmVuZGVyZXJzW3RdO3JldHVybiBlPT09aSYmKGU9by5TVkcmJm8uc3ZnKHtwYW5lOnR9KXx8by5DYW52YXMmJm8uY2FudmFzKHtwYW5lOnR9KSx0aGlzLl9wYW5lUmVuZGVyZXJzW3RdPWUpLGV9fSksby5QYXRoPW8uTGF5ZXIuZXh0ZW5kKHtvcHRpb25zOntzdHJva2U6ITAsY29sb3I6IiMzMzg4ZmYiLHdlaWdodDozLG9wYWNpdHk6MSxsaW5lQ2FwOiJyb3VuZCIsbGluZUpvaW46InJvdW5kIixkYXNoQXJyYXk6bnVsbCxkYXNoT2Zmc2V0Om51bGwsZmlsbDohMSxmaWxsQ29sb3I6bnVsbCxmaWxsT3BhY2l0eTouMixmaWxsUnVsZToiZXZlbm9kZCIsaW50ZXJhY3RpdmU6ITB9LGJlZm9yZUFkZDpmdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJlcj10LmdldFJlbmRlcmVyKHRoaXMpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl9pbml0UGF0aCh0aGlzKSx0aGlzLl9yZXNldCgpLHRoaXMuX3JlbmRlcmVyLl9hZGRQYXRoKHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl9yZW1vdmVQYXRoKHRoaXMpfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZ0aGlzLl9yZW5kZXJlci5fdXBkYXRlUGF0aCh0aGlzKSx0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gby5zZXRPcHRpb25zKHRoaXMsdCksdGhpcy5fcmVuZGVyZXImJnRoaXMuX3JlbmRlcmVyLl91cGRhdGVTdHlsZSh0aGlzKSx0aGlzfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXImJnRoaXMuX3JlbmRlcmVyLl9icmluZ1RvRnJvbnQodGhpcyksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXImJnRoaXMuX3JlbmRlcmVyLl9icmluZ1RvQmFjayh0aGlzKSx0aGlzfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhdGh9LF9yZXNldDpmdW5jdGlvbigpe3RoaXMuX3Byb2plY3QoKSx0aGlzLl91cGRhdGUoKX0sX2NsaWNrVG9sZXJhbmNlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMub3B0aW9ucy5zdHJva2U/dGhpcy5vcHRpb25zLndlaWdodC8yOjApKyhvLkJyb3dzZXIudG91Y2g/MTA6MCl9fSksby5MaW5lVXRpbD17c2ltcGxpZnk6ZnVuY3Rpb24odCxlKXtpZighZXx8IXQubGVuZ3RoKXJldHVybiB0LnNsaWNlKCk7dmFyIGk9ZSplO3JldHVybiB0PXRoaXMuX3JlZHVjZVBvaW50cyh0LGkpLHQ9dGhpcy5fc2ltcGxpZnlEUCh0LGkpfSxwb2ludFRvU2VnbWVudERpc3RhbmNlOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50KHQsZSxpLCEwKSl9LGNsb3Nlc3RQb2ludE9uU2VnbWVudDpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMuX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50KHQsZSxpKX0sX3NpbXBsaWZ5RFA6ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmxlbmd0aCxvPXR5cGVvZiBVaW50OEFycmF5IT1pKyIiP1VpbnQ4QXJyYXk6QXJyYXkscz1uZXcgbyhuKTtzWzBdPXNbbi0xXT0xLHRoaXMuX3NpbXBsaWZ5RFBTdGVwKHQscyxlLDAsbi0xKTt2YXIgcixhPVtdO2ZvcihyPTA7cjxuO3IrKylzW3JdJiZhLnB1c2godFtyXSk7cmV0dXJuIGF9LF9zaW1wbGlmeURQU3RlcDpmdW5jdGlvbih0LGUsaSxuLG8pe3ZhciBzLHIsYSxoPTA7Zm9yKHI9bisxO3I8PW8tMTtyKyspYT10aGlzLl9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudCh0W3JdLHRbbl0sdFtvXSwhMCksYT5oJiYocz1yLGg9YSk7aD5pJiYoZVtzXT0xLHRoaXMuX3NpbXBsaWZ5RFBTdGVwKHQsZSxpLG4scyksdGhpcy5fc2ltcGxpZnlEUFN0ZXAodCxlLGkscyxvKSl9LF9yZWR1Y2VQb2ludHM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9W3RbMF1dLG49MSxvPTAscz10Lmxlbmd0aDtuPHM7bisrKXRoaXMuX3NxRGlzdCh0W25dLHRbb10pPmUmJihpLnB1c2godFtuXSksbz1uKTtyZXR1cm4gbzxzLTEmJmkucHVzaCh0W3MtMV0pLGl9LGNsaXBTZWdtZW50OmZ1bmN0aW9uKHQsZSxpLG4sbyl7dmFyIHMscixhLGg9bj90aGlzLl9sYXN0Q29kZTp0aGlzLl9nZXRCaXRDb2RlKHQsaSksbD10aGlzLl9nZXRCaXRDb2RlKGUsaSk7Zm9yKHRoaXMuX2xhc3RDb2RlPWw7Oyl7aWYoIShofGwpKXJldHVyblt0LGVdO2lmKGgmbClyZXR1cm4hMTtzPWh8fGwscj10aGlzLl9nZXRFZGdlSW50ZXJzZWN0aW9uKHQsZSxzLGksbyksYT10aGlzLl9nZXRCaXRDb2RlKHIsaSkscz09PWg/KHQ9cixoPWEpOihlPXIsbD1hKX19LF9nZXRFZGdlSW50ZXJzZWN0aW9uOmZ1bmN0aW9uKHQsZSxpLG4scyl7dmFyIHIsYSxoPWUueC10LngsbD1lLnktdC55LHU9bi5taW4sYz1uLm1heDtyZXR1cm4gOCZpPyhyPXQueCtoKihjLnktdC55KS9sLGE9Yy55KTo0Jmk/KHI9dC54K2gqKHUueS10LnkpL2wsYT11LnkpOjImaT8ocj1jLngsYT10LnkrbCooYy54LXQueCkvaCk6MSZpJiYocj11LngsYT10LnkrbCoodS54LXQueCkvaCksbmV3IG8uUG9pbnQocixhLHMpfSxfZ2V0Qml0Q29kZTpmdW5jdGlvbih0LGUpe3ZhciBpPTA7cmV0dXJuIHQueDxlLm1pbi54P2l8PTE6dC54PmUubWF4LngmJihpfD0yKSx0Lnk8ZS5taW4ueT9pfD00OnQueT5lLm1heC55JiYoaXw9OCksaX0sX3NxRGlzdDpmdW5jdGlvbih0LGUpe3ZhciBpPWUueC10Lngsbj1lLnktdC55O3JldHVybiBpKmkrbipufSxfc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQ6ZnVuY3Rpb24odCxlLGksbil7dmFyIHMscj1lLngsYT1lLnksaD1pLngtcixsPWkueS1hLHU9aCpoK2wqbDtyZXR1cm4gdT4wJiYocz0oKHQueC1yKSpoKyh0LnktYSkqbCkvdSxzPjE/KHI9aS54LGE9aS55KTpzPjAmJihyKz1oKnMsYSs9bCpzKSksaD10LngtcixsPXQueS1hLG4/aCpoK2wqbDpuZXcgby5Qb2ludChyLGEpfX0sby5Qb2x5bGluZT1vLlBhdGguZXh0ZW5kKHtvcHRpb25zOntzbW9vdGhGYWN0b3I6MSxub0NsaXA6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtvLnNldE9wdGlvbnModGhpcyxlKSx0aGlzLl9zZXRMYXRMbmdzKHQpfSxnZXRMYXRMbmdzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhdGxuZ3N9LHNldExhdExuZ3M6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3NldExhdExuZ3ModCksdGhpcy5yZWRyYXcoKX0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLl9sYXRsbmdzLmxlbmd0aH0sY2xvc2VzdExheWVyUG9pbnQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLGksbj0xLzAscz1udWxsLHI9by5MaW5lVXRpbC5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQsYT0wLGg9dGhpcy5fcGFydHMubGVuZ3RoO2E8aDthKyspZm9yKHZhciBsPXRoaXMuX3BhcnRzW2FdLHU9MSxjPWwubGVuZ3RoO3U8Yzt1Kyspe2U9bFt1LTFdLGk9bFt1XTt2YXIgZD1yKHQsZSxpLCEwKTtkPG4mJihuPWQscz1yKHQsZSxpKSl9cmV0dXJuIHMmJihzLmRpc3RhbmNlPU1hdGguc3FydChuKSksc30sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21hcCl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYWRkIGxheWVyIHRvIG1hcCBiZWZvcmUgdXNpbmcgZ2V0Q2VudGVyKCkiKTt2YXIgdCxlLGksbixvLHMscixhPXRoaXMuX3JpbmdzWzBdLGg9YS5sZW5ndGg7aWYoIWgpcmV0dXJuIG51bGw7Zm9yKHQ9MCxlPTA7dDxoLTE7dCsrKWUrPWFbdF0uZGlzdGFuY2VUbyhhW3QrMV0pLzI7aWYoMD09PWUpcmV0dXJuIHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoYVswXSk7Zm9yKHQ9MCxuPTA7dDxoLTE7dCsrKWlmKG89YVt0XSxzPWFbdCsxXSxpPW8uZGlzdGFuY2VUbyhzKSxuKz1pLG4+ZSlyZXR1cm4gcj0obi1lKS9pLHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoW3MueC1yKihzLngtby54KSxzLnktcioocy55LW8ueSldKX0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JvdW5kc30sYWRkTGF0TG5nOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZXx8dGhpcy5fZGVmYXVsdFNoYXBlKCksdD1vLmxhdExuZyh0KSxlLnB1c2godCksdGhpcy5fYm91bmRzLmV4dGVuZCh0KSx0aGlzLnJlZHJhdygpfSxfc2V0TGF0TG5nczpmdW5jdGlvbih0KXt0aGlzLl9ib3VuZHM9bmV3IG8uTGF0TG5nQm91bmRzLHRoaXMuX2xhdGxuZ3M9dGhpcy5fY29udmVydExhdExuZ3ModCl9LF9kZWZhdWx0U2hhcGU6ZnVuY3Rpb24oKXtyZXR1cm4gby5Qb2x5bGluZS5fZmxhdCh0aGlzLl9sYXRsbmdzKT90aGlzLl9sYXRsbmdzOnRoaXMuX2xhdGxuZ3NbMF19LF9jb252ZXJ0TGF0TG5nczpmdW5jdGlvbih0KXtmb3IodmFyIGU9W10saT1vLlBvbHlsaW5lLl9mbGF0KHQpLG49MCxzPXQubGVuZ3RoO248cztuKyspaT8oZVtuXT1vLmxhdExuZyh0W25dKSx0aGlzLl9ib3VuZHMuZXh0ZW5kKGVbbl0pKTplW25dPXRoaXMuX2NvbnZlcnRMYXRMbmdzKHRbbl0pO3JldHVybiBlfSxfcHJvamVjdDpmdW5jdGlvbigpe3ZhciB0PW5ldyBvLkJvdW5kczt0aGlzLl9yaW5ncz1bXSx0aGlzLl9wcm9qZWN0TGF0bG5ncyh0aGlzLl9sYXRsbmdzLHRoaXMuX3JpbmdzLHQpO3ZhciBlPXRoaXMuX2NsaWNrVG9sZXJhbmNlKCksaT1uZXcgby5Qb2ludChlLGUpO3RoaXMuX2JvdW5kcy5pc1ZhbGlkKCkmJnQuaXNWYWxpZCgpJiYodC5taW4uX3N1YnRyYWN0KGkpLHQubWF4Ll9hZGQoaSksdGhpcy5fcHhCb3VuZHM9dCl9LF9wcm9qZWN0TGF0bG5nczpmdW5jdGlvbih0LGUsaSl7dmFyIG4scyxyPXRbMF1pbnN0YW5jZW9mIG8uTGF0TG5nLGE9dC5sZW5ndGg7aWYocil7Zm9yKHM9W10sbj0wO248YTtuKyspc1tuXT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRbbl0pLGkuZXh0ZW5kKHNbbl0pO2UucHVzaChzKX1lbHNlIGZvcihuPTA7bjxhO24rKyl0aGlzLl9wcm9qZWN0TGF0bG5ncyh0W25dLGUsaSl9LF9jbGlwUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVuZGVyZXIuX2JvdW5kcztpZih0aGlzLl9wYXJ0cz1bXSx0aGlzLl9weEJvdW5kcyYmdGhpcy5fcHhCb3VuZHMuaW50ZXJzZWN0cyh0KSl7aWYodGhpcy5vcHRpb25zLm5vQ2xpcClyZXR1cm4gdm9pZCh0aGlzLl9wYXJ0cz10aGlzLl9yaW5ncyk7dmFyIGUsaSxuLHMscixhLGgsbD10aGlzLl9wYXJ0cztmb3IoZT0wLG49MCxzPXRoaXMuX3JpbmdzLmxlbmd0aDtlPHM7ZSsrKWZvcihoPXRoaXMuX3JpbmdzW2VdLGk9MCxyPWgubGVuZ3RoO2k8ci0xO2krKylhPW8uTGluZVV0aWwuY2xpcFNlZ21lbnQoaFtpXSxoW2krMV0sdCxpLCEwKSxhJiYobFtuXT1sW25dfHxbXSxsW25dLnB1c2goYVswXSksYVsxXT09PWhbaSsxXSYmaSE9PXItMnx8KGxbbl0ucHVzaChhWzFdKSxuKyspKX19LF9zaW1wbGlmeVBvaW50czpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9wYXJ0cyxlPXRoaXMub3B0aW9ucy5zbW9vdGhGYWN0b3IsaT0wLG49dC5sZW5ndGg7aTxuO2krKyl0W2ldPW8uTGluZVV0aWwuc2ltcGxpZnkodFtpXSxlKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX21hcCYmKHRoaXMuX2NsaXBQb2ludHMoKSx0aGlzLl9zaW1wbGlmeVBvaW50cygpLHRoaXMuX3VwZGF0ZVBhdGgoKSl9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3VwZGF0ZVBvbHkodGhpcyl9fSksby5wb2x5bGluZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5Qb2x5bGluZSh0LGUpfSxvLlBvbHlsaW5lLl9mbGF0PWZ1bmN0aW9uKHQpe3JldHVybiFvLlV0aWwuaXNBcnJheSh0WzBdKXx8Im9iamVjdCIhPXR5cGVvZiB0WzBdWzBdJiYidW5kZWZpbmVkIiE9dHlwZW9mIHRbMF1bMF19LG8uUG9seVV0aWw9e30sby5Qb2x5VXRpbC5jbGlwUG9seWdvbj1mdW5jdGlvbih0LGUsaSl7dmFyIG4scyxyLGEsaCxsLHUsYyxkLF89WzEsNCwyLDhdLG09by5MaW5lVXRpbDtmb3Iocz0wLHU9dC5sZW5ndGg7czx1O3MrKyl0W3NdLl9jb2RlPW0uX2dldEJpdENvZGUodFtzXSxlKTtmb3IoYT0wO2E8NDthKyspe2ZvcihjPV9bYV0sbj1bXSxzPTAsdT10Lmxlbmd0aCxyPXUtMTtzPHU7cj1zKyspaD10W3NdLGw9dFtyXSxoLl9jb2RlJmM/bC5fY29kZSZjfHwoZD1tLl9nZXRFZGdlSW50ZXJzZWN0aW9uKGwsaCxjLGUsaSksZC5fY29kZT1tLl9nZXRCaXRDb2RlKGQsZSksbi5wdXNoKGQpKToobC5fY29kZSZjJiYoZD1tLl9nZXRFZGdlSW50ZXJzZWN0aW9uKGwsaCxjLGUsaSksZC5fY29kZT1tLl9nZXRCaXRDb2RlKGQsZSksbi5wdXNoKGQpKSxuLnB1c2goaCkpO3Q9bn1yZXR1cm4gdH0sby5Qb2x5Z29uPW8uUG9seWxpbmUuZXh0ZW5kKHtvcHRpb25zOntmaWxsOiEwfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX2xhdGxuZ3MubGVuZ3RofHwhdGhpcy5fbGF0bG5nc1swXS5sZW5ndGh9LGdldENlbnRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl9tYXApdGhyb3cgbmV3IEVycm9yKCJNdXN0IGFkZCBsYXllciB0byBtYXAgYmVmb3JlIHVzaW5nIGdldENlbnRlcigpIik7dmFyIHQsZSxpLG4sbyxzLHIsYSxoLGw9dGhpcy5fcmluZ3NbMF0sdT1sLmxlbmd0aDtpZighdSlyZXR1cm4gbnVsbDtmb3Iocz1yPWE9MCx0PTAsZT11LTE7dDx1O2U9dCsrKWk9bFt0XSxuPWxbZV0sbz1pLnkqbi54LW4ueSppLngscis9KGkueCtuLngpKm8sYSs9KGkueStuLnkpKm8scys9MypvO3JldHVybiBoPTA9PT1zP2xbMF06W3IvcyxhL3NdLHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoaCl9LF9jb252ZXJ0TGF0TG5nczpmdW5jdGlvbih0KXt2YXIgZT1vLlBvbHlsaW5lLnByb3RvdHlwZS5fY29udmVydExhdExuZ3MuY2FsbCh0aGlzLHQpLGk9ZS5sZW5ndGg7cmV0dXJuIGk+PTImJmVbMF1pbnN0YW5jZW9mIG8uTGF0TG5nJiZlWzBdLmVxdWFscyhlW2ktMV0pJiZlLnBvcCgpLGV9LF9zZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe28uUG9seWxpbmUucHJvdG90eXBlLl9zZXRMYXRMbmdzLmNhbGwodGhpcyx0KSxvLlBvbHlsaW5lLl9mbGF0KHRoaXMuX2xhdGxuZ3MpJiYodGhpcy5fbGF0bG5ncz1bdGhpcy5fbGF0bG5nc10pfSxfZGVmYXVsdFNoYXBlOmZ1bmN0aW9uKCl7cmV0dXJuIG8uUG9seWxpbmUuX2ZsYXQodGhpcy5fbGF0bG5nc1swXSk/dGhpcy5fbGF0bG5nc1swXTp0aGlzLl9sYXRsbmdzWzBdWzBdfSxfY2xpcFBvaW50czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlbmRlcmVyLl9ib3VuZHMsZT10aGlzLm9wdGlvbnMud2VpZ2h0LGk9bmV3IG8uUG9pbnQoZSxlKTtpZih0PW5ldyBvLkJvdW5kcyh0Lm1pbi5zdWJ0cmFjdChpKSx0Lm1heC5hZGQoaSkpLHRoaXMuX3BhcnRzPVtdLHRoaXMuX3B4Qm91bmRzJiZ0aGlzLl9weEJvdW5kcy5pbnRlcnNlY3RzKHQpKXtpZih0aGlzLm9wdGlvbnMubm9DbGlwKXJldHVybiB2b2lkKHRoaXMuX3BhcnRzPXRoaXMuX3JpbmdzKTtmb3IodmFyIG4scz0wLHI9dGhpcy5fcmluZ3MubGVuZ3RoO3M8cjtzKyspbj1vLlBvbHlVdGlsLmNsaXBQb2x5Z29uKHRoaXMuX3JpbmdzW3NdLHQsITApLG4ubGVuZ3RoJiZ0aGlzLl9wYXJ0cy5wdXNoKG4pfX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdXBkYXRlUG9seSh0aGlzLCEwKX19KSxvLnBvbHlnb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uUG9seWdvbih0LGUpfSxvLlJlY3RhbmdsZT1vLlBvbHlnb24uZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7by5Qb2x5Z29uLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyx0aGlzLl9ib3VuZHNUb0xhdExuZ3ModCksZSl9LHNldEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZXRMYXRMbmdzKHRoaXMuX2JvdW5kc1RvTGF0TG5ncyh0KSl9LF9ib3VuZHNUb0xhdExuZ3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9by5sYXRMbmdCb3VuZHModCksW3QuZ2V0U291dGhXZXN0KCksdC5nZXROb3J0aFdlc3QoKSx0LmdldE5vcnRoRWFzdCgpLHQuZ2V0U291dGhFYXN0KCldfX0pLG8ucmVjdGFuZ2xlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLlJlY3RhbmdsZSh0LGUpfSxvLkNpcmNsZU1hcmtlcj1vLlBhdGguZXh0ZW5kKHtvcHRpb25zOntmaWxsOiEwLHJhZGl1czoxMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uc2V0T3B0aW9ucyh0aGlzLGUpLHRoaXMuX2xhdGxuZz1vLmxhdExuZyh0KSx0aGlzLl9yYWRpdXM9dGhpcy5vcHRpb25zLnJhZGl1c30sc2V0TGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXRsbmc9by5sYXRMbmcodCksdGhpcy5yZWRyYXcoKSx0aGlzLmZpcmUoIm1vdmUiLHtsYXRsbmc6dGhpcy5fbGF0bG5nfSl9LGdldExhdExuZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmd9LHNldFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnJhZGl1cz10aGlzLl9yYWRpdXM9dCx0aGlzLnJlZHJhdygpfSxnZXRSYWRpdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaXVzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXt2YXIgZT10JiZ0LnJhZGl1c3x8dGhpcy5fcmFkaXVzO3JldHVybiBvLlBhdGgucHJvdG90eXBlLnNldFN0eWxlLmNhbGwodGhpcyx0KSx0aGlzLnNldFJhZGl1cyhlKSx0aGlzfSxfcHJvamVjdDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSx0aGlzLl91cGRhdGVCb3VuZHMoKX0sX3VwZGF0ZUJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JhZGl1cyxlPXRoaXMuX3JhZGl1c1l8fHQsaT10aGlzLl9jbGlja1RvbGVyYW5jZSgpLG49W3QraSxlK2ldO3RoaXMuX3B4Qm91bmRzPW5ldyBvLkJvdW5kcyh0aGlzLl9wb2ludC5zdWJ0cmFjdChuKSx0aGlzLl9wb2ludC5hZGQobikpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiZ0aGlzLl91cGRhdGVQYXRoKCl9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3VwZGF0ZUNpcmNsZSh0aGlzKX0sX2VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGl1cyYmIXRoaXMuX3JlbmRlcmVyLl9ib3VuZHMuaW50ZXJzZWN0cyh0aGlzLl9weEJvdW5kcyl9fSksby5jaXJjbGVNYXJrZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uQ2lyY2xlTWFya2VyKHQsZSl9LG8uQ2lyY2xlPW8uQ2lyY2xlTWFya2VyLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7aWYoIm51bWJlciI9PXR5cGVvZiBlJiYoZT1vLmV4dGVuZCh7fSxpLHtyYWRpdXM6ZX0pKSxvLnNldE9wdGlvbnModGhpcyxlKSx0aGlzLl9sYXRsbmc9by5sYXRMbmcodCksaXNOYU4odGhpcy5vcHRpb25zLnJhZGl1cykpdGhyb3cgbmV3IEVycm9yKCJDaXJjbGUgcmFkaXVzIGNhbm5vdCBiZSBOYU4iKTt0aGlzLl9tUmFkaXVzPXRoaXMub3B0aW9ucy5yYWRpdXN9LHNldFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbVJhZGl1cz10LHRoaXMucmVkcmF3KCl9LGdldFJhZGl1czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tUmFkaXVzfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5fcmFkaXVzLHRoaXMuX3JhZGl1c1l8fHRoaXMuX3JhZGl1c107cmV0dXJuIG5ldyBvLkxhdExuZ0JvdW5kcyh0aGlzLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMuX3BvaW50LnN1YnRyYWN0KHQpKSx0aGlzLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMuX3BvaW50LmFkZCh0KSkpOwp9LHNldFN0eWxlOm8uUGF0aC5wcm90b3R5cGUuc2V0U3R5bGUsX3Byb2plY3Q6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9sYXRsbmcubG5nLGU9dGhpcy5fbGF0bG5nLmxhdCxpPXRoaXMuX21hcCxuPWkub3B0aW9ucy5jcnM7aWYobi5kaXN0YW5jZT09PW8uQ1JTLkVhcnRoLmRpc3RhbmNlKXt2YXIgcz1NYXRoLlBJLzE4MCxyPXRoaXMuX21SYWRpdXMvby5DUlMuRWFydGguUi9zLGE9aS5wcm9qZWN0KFtlK3IsdF0pLGg9aS5wcm9qZWN0KFtlLXIsdF0pLGw9YS5hZGQoaCkuZGl2aWRlQnkoMiksdT1pLnVucHJvamVjdChsKS5sYXQsYz1NYXRoLmFjb3MoKE1hdGguY29zKHIqcyktTWF0aC5zaW4oZSpzKSpNYXRoLnNpbih1KnMpKS8oTWF0aC5jb3MoZSpzKSpNYXRoLmNvcyh1KnMpKSkvczsoaXNOYU4oYyl8fDA9PT1jKSYmKGM9ci9NYXRoLmNvcyhNYXRoLlBJLzE4MCplKSksdGhpcy5fcG9pbnQ9bC5zdWJ0cmFjdChpLmdldFBpeGVsT3JpZ2luKCkpLHRoaXMuX3JhZGl1cz1pc05hTihjKT8wOk1hdGgubWF4KE1hdGgucm91bmQobC54LWkucHJvamVjdChbdSx0LWNdKS54KSwxKSx0aGlzLl9yYWRpdXNZPU1hdGgubWF4KE1hdGgucm91bmQobC55LWEueSksMSl9ZWxzZXt2YXIgZD1uLnVucHJvamVjdChuLnByb2plY3QodGhpcy5fbGF0bG5nKS5zdWJ0cmFjdChbdGhpcy5fbVJhZGl1cywwXSkpO3RoaXMuX3BvaW50PWkubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyksdGhpcy5fcmFkaXVzPXRoaXMuX3BvaW50LngtaS5sYXRMbmdUb0xheWVyUG9pbnQoZCkueH10aGlzLl91cGRhdGVCb3VuZHMoKX19KSxvLmNpcmNsZT1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG5ldyBvLkNpcmNsZSh0LGUsaSl9LG8uU1ZHPW8uUmVuZGVyZXIuZXh0ZW5kKHtnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1vLlJlbmRlcmVyLnByb3RvdHlwZS5nZXRFdmVudHMuY2FsbCh0aGlzKTtyZXR1cm4gdC56b29tc3RhcnQ9dGhpcy5fb25ab29tU3RhcnQsdH0sX2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXI9by5TVkcuY3JlYXRlKCJzdmciKSx0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSx0aGlzLl9yb290R3JvdXA9by5TVkcuY3JlYXRlKCJnIiksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3Jvb3RHcm91cCl9LF9vblpvb21TdGFydDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZSgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21hcC5fYW5pbWF0aW5nWm9vbXx8IXRoaXMuX2JvdW5kcyl7by5SZW5kZXJlci5wcm90b3R5cGUuX3VwZGF0ZS5jYWxsKHRoaXMpO3ZhciB0PXRoaXMuX2JvdW5kcyxlPXQuZ2V0U2l6ZSgpLGk9dGhpcy5fY29udGFpbmVyO3RoaXMuX3N2Z1NpemUmJnRoaXMuX3N2Z1NpemUuZXF1YWxzKGUpfHwodGhpcy5fc3ZnU2l6ZT1lLGkuc2V0QXR0cmlidXRlKCJ3aWR0aCIsZS54KSxpLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixlLnkpKSxvLkRvbVV0aWwuc2V0UG9zaXRpb24oaSx0Lm1pbiksaS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFt0Lm1pbi54LHQubWluLnksZS54LGUueV0uam9pbigiICIpKSx0aGlzLmZpcmUoInVwZGF0ZSIpfX0sX2luaXRQYXRoOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX3BhdGg9by5TVkcuY3JlYXRlKCJwYXRoIik7dC5vcHRpb25zLmNsYXNzTmFtZSYmby5Eb21VdGlsLmFkZENsYXNzKGUsdC5vcHRpb25zLmNsYXNzTmFtZSksdC5vcHRpb25zLmludGVyYWN0aXZlJiZvLkRvbVV0aWwuYWRkQ2xhc3MoZSwibGVhZmxldC1pbnRlcmFjdGl2ZSIpLHRoaXMuX3VwZGF0ZVN0eWxlKHQpLHRoaXMuX2xheWVyc1tvLnN0YW1wKHQpXT10fSxfYWRkUGF0aDpmdW5jdGlvbih0KXt0aGlzLl9yb290R3JvdXAuYXBwZW5kQ2hpbGQodC5fcGF0aCksdC5hZGRJbnRlcmFjdGl2ZVRhcmdldCh0Ll9wYXRoKX0sX3JlbW92ZVBhdGg6ZnVuY3Rpb24odCl7by5Eb21VdGlsLnJlbW92ZSh0Ll9wYXRoKSx0LnJlbW92ZUludGVyYWN0aXZlVGFyZ2V0KHQuX3BhdGgpLGRlbGV0ZSB0aGlzLl9sYXllcnNbby5zdGFtcCh0KV19LF91cGRhdGVQYXRoOmZ1bmN0aW9uKHQpe3QuX3Byb2plY3QoKSx0Ll91cGRhdGUoKX0sX3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX3BhdGgsaT10Lm9wdGlvbnM7ZSYmKGkuc3Ryb2tlPyhlLnNldEF0dHJpYnV0ZSgic3Ryb2tlIixpLmNvbG9yKSxlLnNldEF0dHJpYnV0ZSgic3Ryb2tlLW9wYWNpdHkiLGkub3BhY2l0eSksZS5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsaS53ZWlnaHQpLGUuc2V0QXR0cmlidXRlKCJzdHJva2UtbGluZWNhcCIsaS5saW5lQ2FwKSxlLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWxpbmVqb2luIixpLmxpbmVKb2luKSxpLmRhc2hBcnJheT9lLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWRhc2hhcnJheSIsaS5kYXNoQXJyYXkpOmUucmVtb3ZlQXR0cmlidXRlKCJzdHJva2UtZGFzaGFycmF5IiksaS5kYXNoT2Zmc2V0P2Uuc2V0QXR0cmlidXRlKCJzdHJva2UtZGFzaG9mZnNldCIsaS5kYXNoT2Zmc2V0KTplLnJlbW92ZUF0dHJpYnV0ZSgic3Ryb2tlLWRhc2hvZmZzZXQiKSk6ZS5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsIm5vbmUiKSxpLmZpbGw/KGUuc2V0QXR0cmlidXRlKCJmaWxsIixpLmZpbGxDb2xvcnx8aS5jb2xvciksZS5zZXRBdHRyaWJ1dGUoImZpbGwtb3BhY2l0eSIsaS5maWxsT3BhY2l0eSksZS5zZXRBdHRyaWJ1dGUoImZpbGwtcnVsZSIsaS5maWxsUnVsZXx8ImV2ZW5vZGQiKSk6ZS5zZXRBdHRyaWJ1dGUoImZpbGwiLCJub25lIikpfSxfdXBkYXRlUG9seTpmdW5jdGlvbih0LGUpe3RoaXMuX3NldFBhdGgodCxvLlNWRy5wb2ludHNUb1BhdGgodC5fcGFydHMsZSkpfSxfdXBkYXRlQ2lyY2xlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX3BvaW50LGk9dC5fcmFkaXVzLG49dC5fcmFkaXVzWXx8aSxvPSJhIitpKyIsIituKyIgMCAxLDAgIixzPXQuX2VtcHR5KCk/Ik0wIDAiOiJNIisoZS54LWkpKyIsIitlLnkrbysyKmkrIiwwICIrbysyKi1pKyIsMCAiO3RoaXMuX3NldFBhdGgodCxzKX0sX3NldFBhdGg6ZnVuY3Rpb24odCxlKXt0Ll9wYXRoLnNldEF0dHJpYnV0ZSgiZCIsZSl9LF9icmluZ1RvRnJvbnQ6ZnVuY3Rpb24odCl7by5Eb21VdGlsLnRvRnJvbnQodC5fcGF0aCl9LF9icmluZ1RvQmFjazpmdW5jdGlvbih0KXtvLkRvbVV0aWwudG9CYWNrKHQuX3BhdGgpfX0pLG8uZXh0ZW5kKG8uU1ZHLHtjcmVhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCl9LHBvaW50c1RvUGF0aDpmdW5jdGlvbih0LGUpe3ZhciBpLG4scyxyLGEsaCxsPSIiO2ZvcihpPTAscz10Lmxlbmd0aDtpPHM7aSsrKXtmb3IoYT10W2ldLG49MCxyPWEubGVuZ3RoO248cjtuKyspaD1hW25dLGwrPShuPyJMIjoiTSIpK2gueCsiICIraC55O2wrPWU/by5Ccm93c2VyLnN2Zz8ieiI6IngiOiIifXJldHVybiBsfHwiTTAgMCJ9fSksby5Ccm93c2VyLnN2Zz0hKCFlLmNyZWF0ZUVsZW1lbnROU3x8IW8uU1ZHLmNyZWF0ZSgic3ZnIikuY3JlYXRlU1ZHUmVjdCksby5zdmc9ZnVuY3Rpb24odCl7cmV0dXJuIG8uQnJvd3Nlci5zdmd8fG8uQnJvd3Nlci52bWw/bmV3IG8uU1ZHKHQpOm51bGx9LG8uQnJvd3Nlci52bWw9IW8uQnJvd3Nlci5zdmcmJmZ1bmN0aW9uKCl7dHJ5e3ZhciB0PWUuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5pbm5lckhUTUw9Jzx2OnNoYXBlIGFkaj0iMSIvPic7dmFyIGk9dC5maXJzdENoaWxkO3JldHVybiBpLnN0eWxlLmJlaGF2aW9yPSJ1cmwoI2RlZmF1bHQjVk1MKSIsaSYmIm9iamVjdCI9PXR5cGVvZiBpLmFkan1jYXRjaCh0KXtyZXR1cm4hMX19KCksby5TVkcuaW5jbHVkZShvLkJyb3dzZXIudm1sP3tfaW5pdENvbnRhaW5lcjpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLCJsZWFmbGV0LXZtbC1jb250YWluZXIiKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX21hcC5fYW5pbWF0aW5nWm9vbXx8KG8uUmVuZGVyZXIucHJvdG90eXBlLl91cGRhdGUuY2FsbCh0aGlzKSx0aGlzLmZpcmUoInVwZGF0ZSIpKX0sX2luaXRQYXRoOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2NvbnRhaW5lcj1vLlNWRy5jcmVhdGUoInNoYXBlIik7by5Eb21VdGlsLmFkZENsYXNzKGUsImxlYWZsZXQtdm1sLXNoYXBlICIrKHRoaXMub3B0aW9ucy5jbGFzc05hbWV8fCIiKSksZS5jb29yZHNpemU9IjEgMSIsdC5fcGF0aD1vLlNWRy5jcmVhdGUoInBhdGgiKSxlLmFwcGVuZENoaWxkKHQuX3BhdGgpLHRoaXMuX3VwZGF0ZVN0eWxlKHQpLHRoaXMuX2xheWVyc1tvLnN0YW1wKHQpXT10fSxfYWRkUGF0aDpmdW5jdGlvbih0KXt2YXIgZT10Ll9jb250YWluZXI7dGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGUpLHQub3B0aW9ucy5pbnRlcmFjdGl2ZSYmdC5hZGRJbnRlcmFjdGl2ZVRhcmdldChlKX0sX3JlbW92ZVBhdGg6ZnVuY3Rpb24odCl7dmFyIGU9dC5fY29udGFpbmVyO28uRG9tVXRpbC5yZW1vdmUoZSksdC5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldChlKSxkZWxldGUgdGhpcy5fbGF5ZXJzW28uc3RhbXAodCldfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9dC5fc3Ryb2tlLGk9dC5fZmlsbCxuPXQub3B0aW9ucyxzPXQuX2NvbnRhaW5lcjtzLnN0cm9rZWQ9ISFuLnN0cm9rZSxzLmZpbGxlZD0hIW4uZmlsbCxuLnN0cm9rZT8oZXx8KGU9dC5fc3Ryb2tlPW8uU1ZHLmNyZWF0ZSgic3Ryb2tlIikpLHMuYXBwZW5kQ2hpbGQoZSksZS53ZWlnaHQ9bi53ZWlnaHQrInB4IixlLmNvbG9yPW4uY29sb3IsZS5vcGFjaXR5PW4ub3BhY2l0eSxuLmRhc2hBcnJheT9lLmRhc2hTdHlsZT1vLlV0aWwuaXNBcnJheShuLmRhc2hBcnJheSk/bi5kYXNoQXJyYXkuam9pbigiICIpOm4uZGFzaEFycmF5LnJlcGxhY2UoLyggKiwgKikvZywiICIpOmUuZGFzaFN0eWxlPSIiLGUuZW5kY2FwPW4ubGluZUNhcC5yZXBsYWNlKCJidXR0IiwiZmxhdCIpLGUuam9pbnN0eWxlPW4ubGluZUpvaW4pOmUmJihzLnJlbW92ZUNoaWxkKGUpLHQuX3N0cm9rZT1udWxsKSxuLmZpbGw/KGl8fChpPXQuX2ZpbGw9by5TVkcuY3JlYXRlKCJmaWxsIikpLHMuYXBwZW5kQ2hpbGQoaSksaS5jb2xvcj1uLmZpbGxDb2xvcnx8bi5jb2xvcixpLm9wYWNpdHk9bi5maWxsT3BhY2l0eSk6aSYmKHMucmVtb3ZlQ2hpbGQoaSksdC5fZmlsbD1udWxsKX0sX3VwZGF0ZUNpcmNsZTpmdW5jdGlvbih0KXt2YXIgZT10Ll9wb2ludC5yb3VuZCgpLGk9TWF0aC5yb3VuZCh0Ll9yYWRpdXMpLG49TWF0aC5yb3VuZCh0Ll9yYWRpdXNZfHxpKTt0aGlzLl9zZXRQYXRoKHQsdC5fZW1wdHkoKT8iTTAgMCI6IkFMICIrZS54KyIsIitlLnkrIiAiK2krIiwiK24rIiAwLDIzNTkyNjAwIil9LF9zZXRQYXRoOmZ1bmN0aW9uKHQsZSl7dC5fcGF0aC52PWV9LF9icmluZ1RvRnJvbnQ6ZnVuY3Rpb24odCl7by5Eb21VdGlsLnRvRnJvbnQodC5fY29udGFpbmVyKX0sX2JyaW5nVG9CYWNrOmZ1bmN0aW9uKHQpe28uRG9tVXRpbC50b0JhY2sodC5fY29udGFpbmVyKX19Ont9KSxvLkJyb3dzZXIudm1sJiYoby5TVkcuY3JlYXRlPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBlLm5hbWVzcGFjZXMuYWRkKCJsdm1sIiwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCI8bHZtbDoiK3QrJyBjbGFzcz0ibHZtbCI+Jyl9fWNhdGNoKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5jcmVhdGVFbGVtZW50KCI8Iit0KycgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC5jb206dm1sIiBjbGFzcz0ibHZtbCI+Jyl9fX0oKSksby5DYW52YXM9by5SZW5kZXJlci5leHRlbmQoe2dldEV2ZW50czpmdW5jdGlvbigpe3ZhciB0PW8uUmVuZGVyZXIucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybiB0LnZpZXdwcmVyZXNldD10aGlzLl9vblZpZXdQcmVSZXNldCx0fSxfb25WaWV3UHJlUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzPSEwfSxvbkFkZDpmdW5jdGlvbigpe28uUmVuZGVyZXIucHJvdG90eXBlLm9uQWRkLmNhbGwodGhpcyksdGhpcy5fZHJhdygpfSxfaW5pdENvbnRhaW5lcjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcj1lLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO28uRG9tRXZlbnQub24odCwibW91c2Vtb3ZlIixvLlV0aWwudGhyb3R0bGUodGhpcy5fb25Nb3VzZU1vdmUsMzIsdGhpcyksdGhpcykub24odCwiY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgY29udGV4dG1lbnUiLHRoaXMuX29uQ2xpY2ssdGhpcykub24odCwibW91c2VvdXQiLHRoaXMuX2hhbmRsZU1vdXNlT3V0LHRoaXMpLHRoaXMuX2N0eD10LmdldENvbnRleHQoIjJkIil9LF91cGRhdGVQYXRoczpmdW5jdGlvbigpe2lmKCF0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzKXt2YXIgdDt0aGlzLl9yZWRyYXdCb3VuZHM9bnVsbDtmb3IodmFyIGUgaW4gdGhpcy5fbGF5ZXJzKXQ9dGhpcy5fbGF5ZXJzW2VdLHQuX3VwZGF0ZSgpO3RoaXMuX3JlZHJhdygpfX0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb218fCF0aGlzLl9ib3VuZHMpe3RoaXMuX2RyYXduTGF5ZXJzPXt9LG8uUmVuZGVyZXIucHJvdG90eXBlLl91cGRhdGUuY2FsbCh0aGlzKTt2YXIgdD10aGlzLl9ib3VuZHMsZT10aGlzLl9jb250YWluZXIsaT10LmdldFNpemUoKSxuPW8uQnJvd3Nlci5yZXRpbmE/MjoxO28uRG9tVXRpbC5zZXRQb3NpdGlvbihlLHQubWluKSxlLndpZHRoPW4qaS54LGUuaGVpZ2h0PW4qaS55LGUuc3R5bGUud2lkdGg9aS54KyJweCIsZS5zdHlsZS5oZWlnaHQ9aS55KyJweCIsby5Ccm93c2VyLnJldGluYSYmdGhpcy5fY3R4LnNjYWxlKDIsMiksdGhpcy5fY3R4LnRyYW5zbGF0ZSgtdC5taW4ueCwtdC5taW4ueSksdGhpcy5maXJlKCJ1cGRhdGUiKX19LF9yZXNldDpmdW5jdGlvbigpe28uUmVuZGVyZXIucHJvdG90eXBlLl9yZXNldC5jYWxsKHRoaXMpLHRoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHMmJih0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzPSExLHRoaXMuX3VwZGF0ZVBhdGhzKCkpfSxfaW5pdFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlRGFzaEFycmF5KHQpLHRoaXMuX2xheWVyc1tvLnN0YW1wKHQpXT10O3ZhciBlPXQuX29yZGVyPXtsYXllcjp0LHByZXY6dGhpcy5fZHJhd0xhc3QsbmV4dDpudWxsfTt0aGlzLl9kcmF3TGFzdCYmKHRoaXMuX2RyYXdMYXN0Lm5leHQ9ZSksdGhpcy5fZHJhd0xhc3Q9ZSx0aGlzLl9kcmF3Rmlyc3Q9dGhpcy5fZHJhd0ZpcnN0fHx0aGlzLl9kcmF3TGFzdH0sX2FkZFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fcmVxdWVzdFJlZHJhdyh0KX0sX3JlbW92ZVBhdGg6ZnVuY3Rpb24odCl7dmFyIGU9dC5fb3JkZXIsaT1lLm5leHQsbj1lLnByZXY7aT9pLnByZXY9bjp0aGlzLl9kcmF3TGFzdD1uLG4/bi5uZXh0PWk6dGhpcy5fZHJhd0ZpcnN0PWksZGVsZXRlIHQuX29yZGVyLGRlbGV0ZSB0aGlzLl9sYXllcnNbby5zdGFtcCh0KV0sdGhpcy5fcmVxdWVzdFJlZHJhdyh0KX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fZXh0ZW5kUmVkcmF3Qm91bmRzKHQpLHQuX3Byb2plY3QoKSx0Ll91cGRhdGUoKSx0aGlzLl9yZXF1ZXN0UmVkcmF3KHQpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlRGFzaEFycmF5KHQpLHRoaXMuX3JlcXVlc3RSZWRyYXcodCl9LF91cGRhdGVEYXNoQXJyYXk6ZnVuY3Rpb24odCl7aWYodC5vcHRpb25zLmRhc2hBcnJheSl7dmFyIGUsaT10Lm9wdGlvbnMuZGFzaEFycmF5LnNwbGl0KCIsIiksbj1bXTtmb3IoZT0wO2U8aS5sZW5ndGg7ZSsrKW4ucHVzaChOdW1iZXIoaVtlXSkpO3Qub3B0aW9ucy5fZGFzaEFycmF5PW59fSxfcmVxdWVzdFJlZHJhdzpmdW5jdGlvbih0KXt0aGlzLl9tYXAmJih0aGlzLl9leHRlbmRSZWRyYXdCb3VuZHModCksdGhpcy5fcmVkcmF3UmVxdWVzdD10aGlzLl9yZWRyYXdSZXF1ZXN0fHxvLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9yZWRyYXcsdGhpcykpfSxfZXh0ZW5kUmVkcmF3Qm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBlPSh0Lm9wdGlvbnMud2VpZ2h0fHwwKSsxO3RoaXMuX3JlZHJhd0JvdW5kcz10aGlzLl9yZWRyYXdCb3VuZHN8fG5ldyBvLkJvdW5kcyx0aGlzLl9yZWRyYXdCb3VuZHMuZXh0ZW5kKHQuX3B4Qm91bmRzLm1pbi5zdWJ0cmFjdChbZSxlXSkpLHRoaXMuX3JlZHJhd0JvdW5kcy5leHRlbmQodC5fcHhCb3VuZHMubWF4LmFkZChbZSxlXSkpfSxfcmVkcmF3OmZ1bmN0aW9uKCl7dGhpcy5fcmVkcmF3UmVxdWVzdD1udWxsLHRoaXMuX3JlZHJhd0JvdW5kcyYmKHRoaXMuX3JlZHJhd0JvdW5kcy5taW4uX2Zsb29yKCksdGhpcy5fcmVkcmF3Qm91bmRzLm1heC5fY2VpbCgpKSx0aGlzLl9jbGVhcigpLHRoaXMuX2RyYXcoKSx0aGlzLl9yZWRyYXdCb3VuZHM9bnVsbH0sX2NsZWFyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVkcmF3Qm91bmRzO2lmKHQpe3ZhciBlPXQuZ2V0U2l6ZSgpO3RoaXMuX2N0eC5jbGVhclJlY3QodC5taW4ueCx0Lm1pbi55LGUueCxlLnkpfWVsc2UgdGhpcy5fY3R4LmNsZWFyUmVjdCgwLDAsdGhpcy5fY29udGFpbmVyLndpZHRoLHRoaXMuX2NvbnRhaW5lci5oZWlnaHQpfSxfZHJhdzpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5fcmVkcmF3Qm91bmRzO2lmKHRoaXMuX2N0eC5zYXZlKCksZSl7dmFyIGk9ZS5nZXRTaXplKCk7dGhpcy5fY3R4LmJlZ2luUGF0aCgpLHRoaXMuX2N0eC5yZWN0KGUubWluLngsZS5taW4ueSxpLngsaS55KSx0aGlzLl9jdHguY2xpcCgpfXRoaXMuX2RyYXdpbmc9ITA7Zm9yKHZhciBuPXRoaXMuX2RyYXdGaXJzdDtuO249bi5uZXh0KXQ9bi5sYXllciwoIWV8fHQuX3B4Qm91bmRzJiZ0Ll9weEJvdW5kcy5pbnRlcnNlY3RzKGUpKSYmdC5fdXBkYXRlUGF0aCgpO3RoaXMuX2RyYXdpbmc9ITEsdGhpcy5fY3R4LnJlc3RvcmUoKX0sX3VwZGF0ZVBvbHk6ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9kcmF3aW5nKXt2YXIgaSxuLG8scyxyPXQuX3BhcnRzLGE9ci5sZW5ndGgsaD10aGlzLl9jdHg7aWYoYSl7Zm9yKHRoaXMuX2RyYXduTGF5ZXJzW3QuX2xlYWZsZXRfaWRdPXQsaC5iZWdpblBhdGgoKSxoLnNldExpbmVEYXNoJiZoLnNldExpbmVEYXNoKHQub3B0aW9ucyYmdC5vcHRpb25zLl9kYXNoQXJyYXl8fFtdKSxpPTA7aTxhO2krKyl7Zm9yKG49MCxvPXJbaV0ubGVuZ3RoO248bztuKyspcz1yW2ldW25dLGhbbj8ibGluZVRvIjoibW92ZVRvIl0ocy54LHMueSk7ZSYmaC5jbG9zZVBhdGgoKX10aGlzLl9maWxsU3Ryb2tlKGgsdCl9fX0sX3VwZGF0ZUNpcmNsZTpmdW5jdGlvbih0KXtpZih0aGlzLl9kcmF3aW5nJiYhdC5fZW1wdHkoKSl7dmFyIGU9dC5fcG9pbnQsaT10aGlzLl9jdHgsbj10Ll9yYWRpdXMsbz0odC5fcmFkaXVzWXx8bikvbjt0aGlzLl9kcmF3bkxheWVyc1t0Ll9sZWFmbGV0X2lkXT10LDEhPT1vJiYoaS5zYXZlKCksaS5zY2FsZSgxLG8pKSxpLmJlZ2luUGF0aCgpLGkuYXJjKGUueCxlLnkvbyxuLDAsMipNYXRoLlBJLCExKSwxIT09byYmaS5yZXN0b3JlKCksdGhpcy5fZmlsbFN0cm9rZShpLHQpfX0sX2ZpbGxTdHJva2U6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLm9wdGlvbnM7aS5maWxsJiYodC5nbG9iYWxBbHBoYT1pLmZpbGxPcGFjaXR5LHQuZmlsbFN0eWxlPWkuZmlsbENvbG9yfHxpLmNvbG9yLHQuZmlsbChpLmZpbGxSdWxlfHwiZXZlbm9kZCIpKSxpLnN0cm9rZSYmMCE9PWkud2VpZ2h0JiYodC5nbG9iYWxBbHBoYT1pLm9wYWNpdHksdC5saW5lV2lkdGg9aS53ZWlnaHQsdC5zdHJva2VTdHlsZT1pLmNvbG9yLHQubGluZUNhcD1pLmxpbmVDYXAsdC5saW5lSm9pbj1pLmxpbmVKb2luLHQuc3Ryb2tlKCkpfSxfb25DbGljazpmdW5jdGlvbih0KXtmb3IodmFyIGUsaSxuPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpLHM9dGhpcy5fZHJhd0ZpcnN0O3M7cz1zLm5leHQpZT1zLmxheWVyLGUub3B0aW9ucy5pbnRlcmFjdGl2ZSYmZS5fY29udGFpbnNQb2ludChuKSYmIXRoaXMuX21hcC5fZHJhZ2dhYmxlTW92ZWQoZSkmJihpPWUpO2kmJihvLkRvbUV2ZW50Ll9mYWtlU3RvcCh0KSx0aGlzLl9maXJlRXZlbnQoW2ldLHQpKX0sX29uTW91c2VNb3ZlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX21hcCYmIXRoaXMuX21hcC5kcmFnZ2luZy5tb3ZpbmcoKSYmIXRoaXMuX21hcC5fYW5pbWF0aW5nWm9vbSl7dmFyIGU9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodCk7dGhpcy5faGFuZGxlTW91c2VIb3Zlcih0LGUpfX0sX2hhbmRsZU1vdXNlT3V0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2hvdmVyZWRMYXllcjtlJiYoby5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1pbnRlcmFjdGl2ZSIpLHRoaXMuX2ZpcmVFdmVudChbZV0sdCwibW91c2VvdXQiKSx0aGlzLl9ob3ZlcmVkTGF5ZXI9bnVsbCl9LF9oYW5kbGVNb3VzZUhvdmVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpLG4scz10aGlzLl9kcmF3Rmlyc3Q7cztzPXMubmV4dClpPXMubGF5ZXIsaS5vcHRpb25zLmludGVyYWN0aXZlJiZpLl9jb250YWluc1BvaW50KGUpJiYobj1pKTtuIT09dGhpcy5faG92ZXJlZExheWVyJiYodGhpcy5faGFuZGxlTW91c2VPdXQodCksbiYmKG8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9jb250YWluZXIsImxlYWZsZXQtaW50ZXJhY3RpdmUiKSx0aGlzLl9maXJlRXZlbnQoW25dLHQsIm1vdXNlb3ZlciIpLHRoaXMuX2hvdmVyZWRMYXllcj1uKSksdGhpcy5faG92ZXJlZExheWVyJiZ0aGlzLl9maXJlRXZlbnQoW3RoaXMuX2hvdmVyZWRMYXllcl0sdCl9LF9maXJlRXZlbnQ6ZnVuY3Rpb24odCxlLGkpe3RoaXMuX21hcC5fZmlyZURPTUV2ZW50KGUsaXx8ZS50eXBlLHQpfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX29yZGVyLGk9ZS5uZXh0LG49ZS5wcmV2O2kmJihpLnByZXY9bixuP24ubmV4dD1pOmkmJih0aGlzLl9kcmF3Rmlyc3Q9aSksZS5wcmV2PXRoaXMuX2RyYXdMYXN0LHRoaXMuX2RyYXdMYXN0Lm5leHQ9ZSxlLm5leHQ9bnVsbCx0aGlzLl9kcmF3TGFzdD1lLHRoaXMuX3JlcXVlc3RSZWRyYXcodCkpfSxfYnJpbmdUb0JhY2s6ZnVuY3Rpb24odCl7dmFyIGU9dC5fb3JkZXIsaT1lLm5leHQsbj1lLnByZXY7biYmKG4ubmV4dD1pLGk/aS5wcmV2PW46biYmKHRoaXMuX2RyYXdMYXN0PW4pLGUucHJldj1udWxsLGUubmV4dD10aGlzLl9kcmF3Rmlyc3QsdGhpcy5fZHJhd0ZpcnN0LnByZXY9ZSx0aGlzLl9kcmF3Rmlyc3Q9ZSx0aGlzLl9yZXF1ZXN0UmVkcmF3KHQpKX19KSxvLkJyb3dzZXIuY2FudmFzPWZ1bmN0aW9uKCl7cmV0dXJuISFlLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHR9KCksby5jYW52YXM9ZnVuY3Rpb24odCl7cmV0dXJuIG8uQnJvd3Nlci5jYW52YXM/bmV3IG8uQ2FudmFzKHQpOm51bGx9LG8uUG9seWxpbmUucHJvdG90eXBlLl9jb250YWluc1BvaW50PWZ1bmN0aW9uKHQsZSl7dmFyIGksbixzLHIsYSxoLGw9dGhpcy5fY2xpY2tUb2xlcmFuY2UoKTtpZighdGhpcy5fcHhCb3VuZHMuY29udGFpbnModCkpcmV0dXJuITE7Zm9yKGk9MCxyPXRoaXMuX3BhcnRzLmxlbmd0aDtpPHI7aSsrKWZvcihoPXRoaXMuX3BhcnRzW2ldLG49MCxhPWgubGVuZ3RoLHM9YS0xO248YTtzPW4rKylpZigoZXx8MCE9PW4pJiZvLkxpbmVVdGlsLnBvaW50VG9TZWdtZW50RGlzdGFuY2UodCxoW3NdLGhbbl0pPD1sKXJldHVybiEwO3JldHVybiExfSxvLlBvbHlnb24ucHJvdG90eXBlLl9jb250YWluc1BvaW50PWZ1bmN0aW9uKHQpe3ZhciBlLGksbixzLHIsYSxoLGwsdT0hMTtpZighdGhpcy5fcHhCb3VuZHMuY29udGFpbnModCkpcmV0dXJuITE7Zm9yKHM9MCxoPXRoaXMuX3BhcnRzLmxlbmd0aDtzPGg7cysrKWZvcihlPXRoaXMuX3BhcnRzW3NdLHI9MCxsPWUubGVuZ3RoLGE9bC0xO3I8bDthPXIrKylpPWVbcl0sbj1lW2FdLGkueT50LnkhPW4ueT50LnkmJnQueDwobi54LWkueCkqKHQueS1pLnkpLyhuLnktaS55KStpLngmJih1PSF1KTtyZXR1cm4gdXx8by5Qb2x5bGluZS5wcm90b3R5cGUuX2NvbnRhaW5zUG9pbnQuY2FsbCh0aGlzLHQsITApfSxvLkNpcmNsZU1hcmtlci5wcm90b3R5cGUuX2NvbnRhaW5zUG9pbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLl9wb2ludCk8PXRoaXMuX3JhZGl1cyt0aGlzLl9jbGlja1RvbGVyYW5jZSgpfSxvLkdlb0pTT049by5GZWF0dXJlR3JvdXAuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7by5zZXRPcHRpb25zKHRoaXMsZSksdGhpcy5fbGF5ZXJzPXt9LHQmJnRoaXMuYWRkRGF0YSh0KX0sYWRkRGF0YTpmdW5jdGlvbih0KXt2YXIgZSxpLG4scz1vLlV0aWwuaXNBcnJheSh0KT90OnQuZmVhdHVyZXM7aWYocyl7Zm9yKGU9MCxpPXMubGVuZ3RoO2U8aTtlKyspbj1zW2VdLChuLmdlb21ldHJpZXN8fG4uZ2VvbWV0cnl8fG4uZmVhdHVyZXN8fG4uY29vcmRpbmF0ZXMpJiZ0aGlzLmFkZERhdGEobik7cmV0dXJuIHRoaXN9dmFyIHI9dGhpcy5vcHRpb25zO2lmKHIuZmlsdGVyJiYhci5maWx0ZXIodCkpcmV0dXJuIHRoaXM7dmFyIGE9by5HZW9KU09OLmdlb21ldHJ5VG9MYXllcih0LHIpO3JldHVybiBhPyhhLmZlYXR1cmU9by5HZW9KU09OLmFzRmVhdHVyZSh0KSxhLmRlZmF1bHRPcHRpb25zPWEub3B0aW9ucyx0aGlzLnJlc2V0U3R5bGUoYSksci5vbkVhY2hGZWF0dXJlJiZyLm9uRWFjaEZlYXR1cmUodCxhKSx0aGlzLmFkZExheWVyKGEpKTp0aGlzfSxyZXNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm9wdGlvbnM9by5VdGlsLmV4dGVuZCh7fSx0LmRlZmF1bHRPcHRpb25zKSx0aGlzLl9zZXRMYXllclN0eWxlKHQsdGhpcy5vcHRpb25zLnN0eWxlKSx0aGlzfSxzZXRTdHlsZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24oZSl7dGhpcy5fc2V0TGF5ZXJTdHlsZShlLHQpfSx0aGlzKX0sX3NldExheWVyU3R5bGU6ZnVuY3Rpb24odCxlKXsiZnVuY3Rpb24iPT10eXBlb2YgZSYmKGU9ZSh0LmZlYXR1cmUpKSx0LnNldFN0eWxlJiZ0LnNldFN0eWxlKGUpfX0pLG8uZXh0ZW5kKG8uR2VvSlNPTix7Z2VvbWV0cnlUb0xheWVyOmZ1bmN0aW9uKHQsZSl7dmFyIGksbixzLHIsYT0iRmVhdHVyZSI9PT10LnR5cGU/dC5nZW9tZXRyeTp0LGg9YT9hLmNvb3JkaW5hdGVzOm51bGwsbD1bXSx1PWUmJmUucG9pbnRUb0xheWVyLGM9ZSYmZS5jb29yZHNUb0xhdExuZ3x8dGhpcy5jb29yZHNUb0xhdExuZztpZighaCYmIWEpcmV0dXJuIG51bGw7c3dpdGNoKGEudHlwZSl7Y2FzZSJQb2ludCI6cmV0dXJuIGk9YyhoKSx1P3UodCxpKTpuZXcgby5NYXJrZXIoaSk7Y2FzZSJNdWx0aVBvaW50Ijpmb3Iocz0wLHI9aC5sZW5ndGg7czxyO3MrKylpPWMoaFtzXSksbC5wdXNoKHU/dSh0LGkpOm5ldyBvLk1hcmtlcihpKSk7cmV0dXJuIG5ldyBvLkZlYXR1cmVHcm91cChsKTtjYXNlIkxpbmVTdHJpbmciOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gbj10aGlzLmNvb3Jkc1RvTGF0TG5ncyhoLCJMaW5lU3RyaW5nIj09PWEudHlwZT8wOjEsYyksbmV3IG8uUG9seWxpbmUobixlKTtjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gbj10aGlzLmNvb3Jkc1RvTGF0TG5ncyhoLCJQb2x5Z29uIj09PWEudHlwZT8xOjIsYyksbmV3IG8uUG9seWdvbihuLGUpO2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpmb3Iocz0wLHI9YS5nZW9tZXRyaWVzLmxlbmd0aDtzPHI7cysrKXt2YXIgZD10aGlzLmdlb21ldHJ5VG9MYXllcih7Z2VvbWV0cnk6YS5nZW9tZXRyaWVzW3NdLHR5cGU6IkZlYXR1cmUiLHByb3BlcnRpZXM6dC5wcm9wZXJ0aWVzfSxlKTtkJiZsLnB1c2goZCl9cmV0dXJuIG5ldyBvLkZlYXR1cmVHcm91cChsKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBHZW9KU09OIG9iamVjdC4iKX19LGNvb3Jkc1RvTGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5MYXRMbmcodFsxXSx0WzBdLHRbMl0pfSxjb29yZHNUb0xhdExuZ3M6ZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgbixvPVtdLHM9MCxyPXQubGVuZ3RoO3M8cjtzKyspbj1lP3RoaXMuY29vcmRzVG9MYXRMbmdzKHRbc10sZS0xLGkpOihpfHx0aGlzLmNvb3Jkc1RvTGF0TG5nKSh0W3NdKSxvLnB1c2gobik7cmV0dXJuIG99LGxhdExuZ1RvQ29vcmRzOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFsdCE9PWk/W3QubG5nLHQubGF0LHQuYWx0XTpbdC5sbmcsdC5sYXRdfSxsYXRMbmdzVG9Db29yZHM6ZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgbj1bXSxzPTAscj10Lmxlbmd0aDtzPHI7cysrKW4ucHVzaChlP28uR2VvSlNPTi5sYXRMbmdzVG9Db29yZHModFtzXSxlLTEsaSk6by5HZW9KU09OLmxhdExuZ1RvQ29vcmRzKHRbc10pKTtyZXR1cm4hZSYmaSYmbi5wdXNoKG5bMF0pLG59LGdldEZlYXR1cmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5mZWF0dXJlP28uZXh0ZW5kKHt9LHQuZmVhdHVyZSx7Z2VvbWV0cnk6ZX0pOm8uR2VvSlNPTi5hc0ZlYXR1cmUoZSl9LGFzRmVhdHVyZTpmdW5jdGlvbih0KXtyZXR1cm4iRmVhdHVyZSI9PT10LnR5cGV8fCJGZWF0dXJlQ29sbGVjdGlvbiI9PT10LnR5cGU/dDp7dHlwZToiRmVhdHVyZSIscHJvcGVydGllczp7fSxnZW9tZXRyeTp0fX19KTt2YXIgYT17dG9HZW9KU09OOmZ1bmN0aW9uKCl7cmV0dXJuIG8uR2VvSlNPTi5nZXRGZWF0dXJlKHRoaXMse3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpvLkdlb0pTT04ubGF0TG5nVG9Db29yZHModGhpcy5nZXRMYXRMbmcoKSl9KX19O28uTWFya2VyLmluY2x1ZGUoYSksby5DaXJjbGUuaW5jbHVkZShhKSxvLkNpcmNsZU1hcmtlci5pbmNsdWRlKGEpLG8uUG9seWxpbmUucHJvdG90eXBlLnRvR2VvSlNPTj1mdW5jdGlvbigpe3ZhciB0PSFvLlBvbHlsaW5lLl9mbGF0KHRoaXMuX2xhdGxuZ3MpLGU9by5HZW9KU09OLmxhdExuZ3NUb0Nvb3Jkcyh0aGlzLl9sYXRsbmdzLHQ/MTowKTtyZXR1cm4gby5HZW9KU09OLmdldEZlYXR1cmUodGhpcyx7dHlwZToodD8iTXVsdGkiOiIiKSsiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6ZX0pfSxvLlBvbHlnb24ucHJvdG90eXBlLnRvR2VvSlNPTj1mdW5jdGlvbigpe3ZhciB0PSFvLlBvbHlsaW5lLl9mbGF0KHRoaXMuX2xhdGxuZ3MpLGU9dCYmIW8uUG9seWxpbmUuX2ZsYXQodGhpcy5fbGF0bG5nc1swXSksaT1vLkdlb0pTT04ubGF0TG5nc1RvQ29vcmRzKHRoaXMuX2xhdGxuZ3MsZT8yOnQ/MTowLCEwKTtyZXR1cm4gdHx8KGk9W2ldKSxvLkdlb0pTT04uZ2V0RmVhdHVyZSh0aGlzLHt0eXBlOihlPyJNdWx0aSI6IiIpKyJQb2x5Z29uIixjb29yZGluYXRlczppfSl9LG8uTGF5ZXJHcm91cC5pbmNsdWRlKHt0b011bHRpUG9pbnQ6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24oZSl7dC5wdXNoKGUudG9HZW9KU09OKCkuZ2VvbWV0cnkuY29vcmRpbmF0ZXMpfSksby5HZW9KU09OLmdldEZlYXR1cmUodGhpcyx7dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6dH0pfSx0b0dlb0pTT046ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZlYXR1cmUmJnRoaXMuZmVhdHVyZS5nZW9tZXRyeSYmdGhpcy5mZWF0dXJlLmdlb21ldHJ5LnR5cGU7aWYoIk11bHRpUG9pbnQiPT09dClyZXR1cm4gdGhpcy50b011bHRpUG9pbnQoKTt2YXIgZT0iR2VvbWV0cnlDb2xsZWN0aW9uIj09PXQsaT1bXTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIoZnVuY3Rpb24odCl7aWYodC50b0dlb0pTT04pe3ZhciBuPXQudG9HZW9KU09OKCk7aS5wdXNoKGU/bi5nZW9tZXRyeTpvLkdlb0pTT04uYXNGZWF0dXJlKG4pKX19KSxlP28uR2VvSlNPTi5nZXRGZWF0dXJlKHRoaXMse2dlb21ldHJpZXM6aSx0eXBlOiJHZW9tZXRyeUNvbGxlY3Rpb24ifSk6e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczppfX19KSxvLmdlb0pTT049ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uR2VvSlNPTih0LGUpfSxvLmdlb0pzb249by5nZW9KU09OLG8uRHJhZ2dhYmxlPW8uRXZlbnRlZC5leHRlbmQoe29wdGlvbnM6e2NsaWNrVG9sZXJhbmNlOjN9LHN0YXRpY3M6e1NUQVJUOm8uQnJvd3Nlci50b3VjaD9bInRvdWNoc3RhcnQiLCJtb3VzZWRvd24iXTpbIm1vdXNlZG93biJdLEVORDp7bW91c2Vkb3duOiJtb3VzZXVwIix0b3VjaHN0YXJ0OiJ0b3VjaGVuZCIscG9pbnRlcmRvd246InRvdWNoZW5kIixNU1BvaW50ZXJEb3duOiJ0b3VjaGVuZCJ9LE1PVkU6e21vdXNlZG93bjoibW91c2Vtb3ZlIix0b3VjaHN0YXJ0OiJ0b3VjaG1vdmUiLHBvaW50ZXJkb3duOiJ0b3VjaG1vdmUiLE1TUG9pbnRlckRvd246InRvdWNobW92ZSJ9fSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSxpKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0PWV8fHQsdGhpcy5fcHJldmVudE91dGxpbmU9aX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZHx8KG8uRG9tRXZlbnQub24odGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0LG8uRHJhZ2dhYmxlLlNUQVJULmpvaW4oIiAiKSx0aGlzLl9vbkRvd24sdGhpcyksdGhpcy5fZW5hYmxlZD0hMCl9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkJiYoby5EcmFnZ2FibGUuX2RyYWdnaW5nPT09dGhpcyYmdGhpcy5maW5pc2hEcmFnKCksby5Eb21FdmVudC5vZmYodGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0LG8uRHJhZ2dhYmxlLlNUQVJULmpvaW4oIiAiKSx0aGlzLl9vbkRvd24sdGhpcyksdGhpcy5fZW5hYmxlZD0hMSx0aGlzLl9tb3ZlZD0hMSl9LF9vbkRvd246ZnVuY3Rpb24odCl7aWYoIXQuX3NpbXVsYXRlZCYmdGhpcy5fZW5hYmxlZCYmKHRoaXMuX21vdmVkPSExLCFvLkRvbVV0aWwuaGFzQ2xhc3ModGhpcy5fZWxlbWVudCwibGVhZmxldC16b29tLWFuaW0iKSYmIShvLkRyYWdnYWJsZS5fZHJhZ2dpbmd8fHQuc2hpZnRLZXl8fDEhPT10LndoaWNoJiYxIT09dC5idXR0b24mJiF0LnRvdWNoZXN8fChvLkRyYWdnYWJsZS5fZHJhZ2dpbmc9dGhpcyx0aGlzLl9wcmV2ZW50T3V0bGluZSYmby5Eb21VdGlsLnByZXZlbnRPdXRsaW5lKHRoaXMuX2VsZW1lbnQpLG8uRG9tVXRpbC5kaXNhYmxlSW1hZ2VEcmFnKCksby5Eb21VdGlsLmRpc2FibGVUZXh0U2VsZWN0aW9uKCksdGhpcy5fbW92aW5nKSkpKXt0aGlzLmZpcmUoImRvd24iKTt2YXIgaT10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQ7dGhpcy5fc3RhcnRQb2ludD1uZXcgby5Qb2ludChpLmNsaWVudFgsaS5jbGllbnRZKSxvLkRvbUV2ZW50Lm9uKGUsby5EcmFnZ2FibGUuTU9WRVt0LnR5cGVdLHRoaXMuX29uTW92ZSx0aGlzKS5vbihlLG8uRHJhZ2dhYmxlLkVORFt0LnR5cGVdLHRoaXMuX29uVXAsdGhpcyl9fSxfb25Nb3ZlOmZ1bmN0aW9uKGkpe2lmKCFpLl9zaW11bGF0ZWQmJnRoaXMuX2VuYWJsZWQpe2lmKGkudG91Y2hlcyYmaS50b3VjaGVzLmxlbmd0aD4xKXJldHVybiB2b2lkKHRoaXMuX21vdmVkPSEwKTt2YXIgbj1pLnRvdWNoZXMmJjE9PT1pLnRvdWNoZXMubGVuZ3RoP2kudG91Y2hlc1swXTppLHM9bmV3IG8uUG9pbnQobi5jbGllbnRYLG4uY2xpZW50WSkscj1zLnN1YnRyYWN0KHRoaXMuX3N0YXJ0UG9pbnQpOyhyLnh8fHIueSkmJihNYXRoLmFicyhyLngpK01hdGguYWJzKHIueSk8dGhpcy5vcHRpb25zLmNsaWNrVG9sZXJhbmNlfHwoby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdChpKSx0aGlzLl9tb3ZlZHx8KHRoaXMuZmlyZSgiZHJhZ3N0YXJ0IiksdGhpcy5fbW92ZWQ9ITAsdGhpcy5fc3RhcnRQb3M9by5Eb21VdGlsLmdldFBvc2l0aW9uKHRoaXMuX2VsZW1lbnQpLnN1YnRyYWN0KHIpLG8uRG9tVXRpbC5hZGRDbGFzcyhlLmJvZHksImxlYWZsZXQtZHJhZ2dpbmciKSx0aGlzLl9sYXN0VGFyZ2V0PWkudGFyZ2V0fHxpLnNyY0VsZW1lbnQsdC5TVkdFbGVtZW50SW5zdGFuY2UmJnRoaXMuX2xhc3RUYXJnZXQgaW5zdGFuY2VvZiBTVkdFbGVtZW50SW5zdGFuY2UmJih0aGlzLl9sYXN0VGFyZ2V0PXRoaXMuX2xhc3RUYXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpLG8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9sYXN0VGFyZ2V0LCJsZWFmbGV0LWRyYWctdGFyZ2V0IikpLHRoaXMuX25ld1Bvcz10aGlzLl9zdGFydFBvcy5hZGQociksdGhpcy5fbW92aW5nPSEwLG8uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuX2xhc3RFdmVudD1pLHRoaXMuX2FuaW1SZXF1ZXN0PW8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX3VwZGF0ZVBvc2l0aW9uLHRoaXMsITApKSl9fSxfdXBkYXRlUG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD17b3JpZ2luYWxFdmVudDp0aGlzLl9sYXN0RXZlbnR9O3RoaXMuZmlyZSgicHJlZHJhZyIsdCksby5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2VsZW1lbnQsdGhpcy5fbmV3UG9zKSx0aGlzLmZpcmUoImRyYWciLHQpfSxfb25VcDpmdW5jdGlvbih0KXshdC5fc2ltdWxhdGVkJiZ0aGlzLl9lbmFibGVkJiZ0aGlzLmZpbmlzaERyYWcoKX0sZmluaXNoRHJhZzpmdW5jdGlvbigpe28uRG9tVXRpbC5yZW1vdmVDbGFzcyhlLmJvZHksImxlYWZsZXQtZHJhZ2dpbmciKSx0aGlzLl9sYXN0VGFyZ2V0JiYoby5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuX2xhc3RUYXJnZXQsImxlYWZsZXQtZHJhZy10YXJnZXQiKSx0aGlzLl9sYXN0VGFyZ2V0PW51bGwpO2Zvcih2YXIgdCBpbiBvLkRyYWdnYWJsZS5NT1ZFKW8uRG9tRXZlbnQub2ZmKGUsby5EcmFnZ2FibGUuTU9WRVt0XSx0aGlzLl9vbk1vdmUsdGhpcykub2ZmKGUsby5EcmFnZ2FibGUuRU5EW3RdLHRoaXMuX29uVXAsdGhpcyk7by5Eb21VdGlsLmVuYWJsZUltYWdlRHJhZygpLG8uRG9tVXRpbC5lbmFibGVUZXh0U2VsZWN0aW9uKCksdGhpcy5fbW92ZWQmJnRoaXMuX21vdmluZyYmKG8uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuZmlyZSgiZHJhZ2VuZCIse2Rpc3RhbmNlOnRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKX0pKSx0aGlzLl9tb3Zpbmc9ITEsby5EcmFnZ2FibGUuX2RyYWdnaW5nPSExfX0pLG8uSGFuZGxlcj1vLkNsYXNzLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dH0sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWQ/dGhpczoodGhpcy5fZW5hYmxlZD0hMCx0aGlzLmFkZEhvb2tzKCksdGhpcyl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZD8odGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlbW92ZUhvb2tzKCksdGhpcyk6dGhpc30sZW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH19KSxvLk1hcC5tZXJnZU9wdGlvbnMoe2RyYWdnaW5nOiEwLGluZXJ0aWE6IW8uQnJvd3Nlci5hbmRyb2lkMjMsaW5lcnRpYURlY2VsZXJhdGlvbjozNDAwLGluZXJ0aWFNYXhTcGVlZDoxLzAsZWFzZUxpbmVhcml0eTouMix3b3JsZENvcHlKdW1wOiExLG1heEJvdW5kc1Zpc2Nvc2l0eTowfSksby5NYXAuRHJhZz1vLkhhbmRsZXIuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe2lmKCF0aGlzLl9kcmFnZ2FibGUpe3ZhciB0PXRoaXMuX21hcDt0aGlzLl9kcmFnZ2FibGU9bmV3IG8uRHJhZ2dhYmxlKHQuX21hcFBhbmUsdC5fY29udGFpbmVyKSx0aGlzLl9kcmFnZ2FibGUub24oe2Rvd246dGhpcy5fb25Eb3duLGRyYWdzdGFydDp0aGlzLl9vbkRyYWdTdGFydCxkcmFnOnRoaXMuX29uRHJhZyxkcmFnZW5kOnRoaXMuX29uRHJhZ0VuZH0sdGhpcyksdGhpcy5fZHJhZ2dhYmxlLm9uKCJwcmVkcmFnIix0aGlzLl9vblByZURyYWdMaW1pdCx0aGlzKSx0Lm9wdGlvbnMud29ybGRDb3B5SnVtcCYmKHRoaXMuX2RyYWdnYWJsZS5vbigicHJlZHJhZyIsdGhpcy5fb25QcmVEcmFnV3JhcCx0aGlzKSx0Lm9uKCJ6b29tZW5kIix0aGlzLl9vblpvb21FbmQsdGhpcyksdC53aGVuUmVhZHkodGhpcy5fb25ab29tRW5kLHRoaXMpKX1vLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbWFwLl9jb250YWluZXIsImxlYWZsZXQtZ3JhYiBsZWFmbGV0LXRvdWNoLWRyYWciKSx0aGlzLl9kcmFnZ2FibGUuZW5hYmxlKCksdGhpcy5fcG9zaXRpb25zPVtdLHRoaXMuX3RpbWVzPVtdfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe28uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9tYXAuX2NvbnRhaW5lciwibGVhZmxldC1ncmFiIiksby5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuX21hcC5fY29udGFpbmVyLCJsZWFmbGV0LXRvdWNoLWRyYWciKSx0aGlzLl9kcmFnZ2FibGUuZGlzYWJsZSgpfSxtb3ZlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnZ2FibGUmJnRoaXMuX2RyYWdnYWJsZS5fbW92ZWR9LG1vdmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnZ2FibGUmJnRoaXMuX2RyYWdnYWJsZS5fbW92aW5nfSxfb25Eb3duOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLl9zdG9wKCl9LF9vbkRyYWdTdGFydDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcDtpZih0aGlzLl9tYXAub3B0aW9ucy5tYXhCb3VuZHMmJnRoaXMuX21hcC5vcHRpb25zLm1heEJvdW5kc1Zpc2Nvc2l0eSl7dmFyIGU9by5sYXRMbmdCb3VuZHModGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzKTt0aGlzLl9vZmZzZXRMaW1pdD1vLmJvdW5kcyh0aGlzLl9tYXAubGF0TG5nVG9Db250YWluZXJQb2ludChlLmdldE5vcnRoV2VzdCgpKS5tdWx0aXBseUJ5KC0xKSx0aGlzLl9tYXAubGF0TG5nVG9Db250YWluZXJQb2ludChlLmdldFNvdXRoRWFzdCgpKS5tdWx0aXBseUJ5KC0xKS5hZGQodGhpcy5fbWFwLmdldFNpemUoKSkpLHRoaXMuX3Zpc2Nvc2l0eT1NYXRoLm1pbigxLE1hdGgubWF4KDAsdGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzVmlzY29zaXR5KSl9ZWxzZSB0aGlzLl9vZmZzZXRMaW1pdD1udWxsO3QuZmlyZSgibW92ZXN0YXJ0IikuZmlyZSgiZHJhZ3N0YXJ0IiksdC5vcHRpb25zLmluZXJ0aWEmJih0aGlzLl9wb3NpdGlvbnM9W10sdGhpcy5fdGltZXM9W10pfSxfb25EcmFnOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX21hcC5vcHRpb25zLmluZXJ0aWEpe3ZhciBlPXRoaXMuX2xhc3RUaW1lPStuZXcgRGF0ZSxpPXRoaXMuX2xhc3RQb3M9dGhpcy5fZHJhZ2dhYmxlLl9hYnNQb3N8fHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zO3RoaXMuX3Bvc2l0aW9ucy5wdXNoKGkpLHRoaXMuX3RpbWVzLnB1c2goZSksZS10aGlzLl90aW1lc1swXT41MCYmKHRoaXMuX3Bvc2l0aW9ucy5zaGlmdCgpLHRoaXMuX3RpbWVzLnNoaWZ0KCkpfXRoaXMuX21hcC5maXJlKCJtb3ZlIix0KS5maXJlKCJkcmFnIix0KX0sX29uWm9vbUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5nZXRTaXplKCkuZGl2aWRlQnkoMiksZT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KFswLDBdKTt0aGlzLl9pbml0aWFsV29ybGRPZmZzZXQ9ZS5zdWJ0cmFjdCh0KS54LHRoaXMuX3dvcmxkV2lkdGg9dGhpcy5fbWFwLmdldFBpeGVsV29ybGRCb3VuZHMoKS5nZXRTaXplKCkueH0sX3Zpc2NvdXNMaW1pdDpmdW5jdGlvbih0LGUpe3JldHVybiB0LSh0LWUpKnRoaXMuX3Zpc2Nvc2l0eX0sX29uUHJlRHJhZ0xpbWl0OmZ1bmN0aW9uKCl7aWYodGhpcy5fdmlzY29zaXR5JiZ0aGlzLl9vZmZzZXRMaW1pdCl7dmFyIHQ9dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3Muc3VidHJhY3QodGhpcy5fZHJhZ2dhYmxlLl9zdGFydFBvcyksZT10aGlzLl9vZmZzZXRMaW1pdDt0Lng8ZS5taW4ueCYmKHQueD10aGlzLl92aXNjb3VzTGltaXQodC54LGUubWluLngpKSx0Lnk8ZS5taW4ueSYmKHQueT10aGlzLl92aXNjb3VzTGltaXQodC55LGUubWluLnkpKSx0Lng+ZS5tYXgueCYmKHQueD10aGlzLl92aXNjb3VzTGltaXQodC54LGUubWF4LngpKSx0Lnk+ZS5tYXgueSYmKHQueT10aGlzLl92aXNjb3VzTGltaXQodC55LGUubWF4LnkpKSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcz10aGlzLl9kcmFnZ2FibGUuX3N0YXJ0UG9zLmFkZCh0KX19LF9vblByZURyYWdXcmFwOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fd29ybGRXaWR0aCxlPU1hdGgucm91bmQodC8yKSxpPXRoaXMuX2luaXRpYWxXb3JsZE9mZnNldCxuPXRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLngsbz0obi1lK2kpJXQrZS1pLHM9KG4rZStpKSV0LWUtaSxyPU1hdGguYWJzKG8raSk8TWF0aC5hYnMocytpKT9vOnM7dGhpcy5fZHJhZ2dhYmxlLl9hYnNQb3M9dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MuY2xvbmUoKSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54PXJ9LF9vbkRyYWdFbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9ZS5vcHRpb25zLG49IWkuaW5lcnRpYXx8dGhpcy5fdGltZXMubGVuZ3RoPDI7aWYoZS5maXJlKCJkcmFnZW5kIix0KSxuKWUuZmlyZSgibW92ZWVuZCIpO2Vsc2V7dmFyIHM9dGhpcy5fbGFzdFBvcy5zdWJ0cmFjdCh0aGlzLl9wb3NpdGlvbnNbMF0pLHI9KHRoaXMuX2xhc3RUaW1lLXRoaXMuX3RpbWVzWzBdKS8xZTMsYT1pLmVhc2VMaW5lYXJpdHksaD1zLm11bHRpcGx5QnkoYS9yKSxsPWguZGlzdGFuY2VUbyhbMCwwXSksdT1NYXRoLm1pbihpLmluZXJ0aWFNYXhTcGVlZCxsKSxjPWgubXVsdGlwbHlCeSh1L2wpLGQ9dS8oaS5pbmVydGlhRGVjZWxlcmF0aW9uKmEpLF89Yy5tdWx0aXBseUJ5KC1kLzIpLnJvdW5kKCk7Xy54fHxfLnk/KF89ZS5fbGltaXRPZmZzZXQoXyxlLm9wdGlvbnMubWF4Qm91bmRzKSxvLlV0aWwucmVxdWVzdEFuaW1GcmFtZShmdW5jdGlvbigpe2UucGFuQnkoXyx7ZHVyYXRpb246ZCxlYXNlTGluZWFyaXR5OmEsbm9Nb3ZlU3RhcnQ6ITAsYW5pbWF0ZTohMH0pfSkpOmUuZmlyZSgibW92ZWVuZCIpfX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImRyYWdnaW5nIixvLk1hcC5EcmFnKSxvLk1hcC5tZXJnZU9wdGlvbnMoe2RvdWJsZUNsaWNrWm9vbTohMH0pLG8uTWFwLkRvdWJsZUNsaWNrWm9vbT1vLkhhbmRsZXIuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe3RoaXMuX21hcC5vbigiZGJsY2xpY2siLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLm9mZigiZGJsY2xpY2siLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LF9vbkRvdWJsZUNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcCxpPWUuZ2V0Wm9vbSgpLG49ZS5vcHRpb25zLnpvb21EZWx0YSxvPXQub3JpZ2luYWxFdmVudC5zaGlmdEtleT9pLW46aStuOyJjZW50ZXIiPT09ZS5vcHRpb25zLmRvdWJsZUNsaWNrWm9vbT9lLnNldFpvb20obyk6ZS5zZXRab29tQXJvdW5kKHQuY29udGFpbmVyUG9pbnQsbyl9fSksby5NYXAuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJkb3VibGVDbGlja1pvb20iLG8uTWFwLkRvdWJsZUNsaWNrWm9vbSksby5NYXAubWVyZ2VPcHRpb25zKHtzY3JvbGxXaGVlbFpvb206ITAsd2hlZWxEZWJvdW5jZVRpbWU6NDAsd2hlZWxQeFBlclpvb21MZXZlbDo2MH0pLG8uTWFwLlNjcm9sbFdoZWVsWm9vbT1vLkhhbmRsZXIuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub24odGhpcy5fbWFwLl9jb250YWluZXIsIm1vdXNld2hlZWwiLHRoaXMuX29uV2hlZWxTY3JvbGwsdGhpcyksdGhpcy5fZGVsdGE9MH0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9mZih0aGlzLl9tYXAuX2NvbnRhaW5lciwibW91c2V3aGVlbCIsdGhpcy5fb25XaGVlbFNjcm9sbCx0aGlzKX0sX29uV2hlZWxTY3JvbGw6ZnVuY3Rpb24odCl7dmFyIGU9by5Eb21FdmVudC5nZXRXaGVlbERlbHRhKHQpLGk9dGhpcy5fbWFwLm9wdGlvbnMud2hlZWxEZWJvdW5jZVRpbWU7dGhpcy5fZGVsdGErPWUsdGhpcy5fbGFzdE1vdXNlUG9zPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KSx0aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9K25ldyBEYXRlKTt2YXIgbj1NYXRoLm1heChpLSgrbmV3IERhdGUtdGhpcy5fc3RhcnRUaW1lKSwwKTtjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpLHRoaXMuX3RpbWVyPXNldFRpbWVvdXQoby5iaW5kKHRoaXMuX3BlcmZvcm1ab29tLHRoaXMpLG4pLG8uRG9tRXZlbnQuc3RvcCh0KX0sX3BlcmZvcm1ab29tOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGU9dC5nZXRab29tKCksaT10aGlzLl9tYXAub3B0aW9ucy56b29tU25hcHx8MDt0Ll9zdG9wKCk7dmFyIG49dGhpcy5fZGVsdGEvKDQqdGhpcy5fbWFwLm9wdGlvbnMud2hlZWxQeFBlclpvb21MZXZlbCksbz00Kk1hdGgubG9nKDIvKDErTWF0aC5leHAoLU1hdGguYWJzKG4pKSkpL01hdGguTE4yLHM9aT9NYXRoLmNlaWwoby9pKSppOm8scj10Ll9saW1pdFpvb20oZSsodGhpcy5fZGVsdGE+MD9zOi1zKSktZTt0aGlzLl9kZWx0YT0wLHRoaXMuX3N0YXJ0VGltZT1udWxsLHImJigiY2VudGVyIj09PXQub3B0aW9ucy5zY3JvbGxXaGVlbFpvb20/dC5zZXRab29tKGUrcik6dC5zZXRab29tQXJvdW5kKHRoaXMuX2xhc3RNb3VzZVBvcyxlK3IpKX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsInNjcm9sbFdoZWVsWm9vbSIsby5NYXAuU2Nyb2xsV2hlZWxab29tKSxvLmV4dGVuZChvLkRvbUV2ZW50LHtfdG91Y2hzdGFydDpvLkJyb3dzZXIubXNQb2ludGVyPyJNU1BvaW50ZXJEb3duIjpvLkJyb3dzZXIucG9pbnRlcj8icG9pbnRlcmRvd24iOiJ0b3VjaHN0YXJ0IixfdG91Y2hlbmQ6by5Ccm93c2VyLm1zUG9pbnRlcj8iTVNQb2ludGVyVXAiOm8uQnJvd3Nlci5wb2ludGVyPyJwb2ludGVydXAiOiJ0b3VjaGVuZCIsYWRkRG91YmxlVGFwTGlzdGVuZXI6ZnVuY3Rpb24odCxlLGkpe2Z1bmN0aW9uIG4odCl7dmFyIGU7aWYoby5Ccm93c2VyLnBvaW50ZXIpe2lmKCFvLkJyb3dzZXIuZWRnZXx8Im1vdXNlIj09PXQucG9pbnRlclR5cGUpcmV0dXJuO2U9by5Eb21FdmVudC5fcG9pbnRlcnNDb3VudH1lbHNlIGU9dC50b3VjaGVzLmxlbmd0aDtpZighKGU+MSkpe3ZhciBpPURhdGUubm93KCksbj1pLShyfHxpKTthPXQudG91Y2hlcz90LnRvdWNoZXNbMF06dCxoPW4+MCYmbjw9bCxyPWl9fWZ1bmN0aW9uIHModCl7aWYoaCYmIWEuY2FuY2VsQnViYmxlKXtpZihvLkJyb3dzZXIucG9pbnRlcil7aWYoIW8uQnJvd3Nlci5lZGdlfHwibW91c2UiPT09dC5wb2ludGVyVHlwZSlyZXR1cm47dmFyIGksbixzPXt9O2ZvcihuIGluIGEpaT1hW25dLHNbbl09aSYmaS5iaW5kP2kuYmluZChhKTppO2E9c31hLnR5cGU9ImRibGNsaWNrIixlKGEpLHI9bnVsbH19dmFyIHIsYSxoPSExLGw9MjUwLHU9Il9sZWFmbGV0XyIsYz10aGlzLl90b3VjaHN0YXJ0LGQ9dGhpcy5fdG91Y2hlbmQ7cmV0dXJuIHRbdStjK2ldPW4sdFt1K2QraV09cyx0W3UrImRibGNsaWNrIitpXT1lLHQuYWRkRXZlbnRMaXN0ZW5lcihjLG4sITEpLHQuYWRkRXZlbnRMaXN0ZW5lcihkLHMsITEpLHQuYWRkRXZlbnRMaXN0ZW5lcigiZGJsY2xpY2siLGUsITEpLHRoaXN9LHJlbW92ZURvdWJsZVRhcExpc3RlbmVyOmZ1bmN0aW9uKHQsZSl7dmFyIGk9Il9sZWFmbGV0XyIsbj10W2krdGhpcy5fdG91Y2hzdGFydCtlXSxzPXRbaSt0aGlzLl90b3VjaGVuZCtlXSxyPXRbaSsiZGJsY2xpY2siK2VdO3JldHVybiB0LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fdG91Y2hzdGFydCxuLCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fdG91Y2hlbmQscywhMSksby5Ccm93c2VyLmVkZ2V8fHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGJsY2xpY2siLHIsITEpLHRoaXN9fSksby5leHRlbmQoby5Eb21FdmVudCx7UE9JTlRFUl9ET1dOOm8uQnJvd3Nlci5tc1BvaW50ZXI/Ik1TUG9pbnRlckRvd24iOiJwb2ludGVyZG93biIsUE9JTlRFUl9NT1ZFOm8uQnJvd3Nlci5tc1BvaW50ZXI/Ik1TUG9pbnRlck1vdmUiOiJwb2ludGVybW92ZSIsUE9JTlRFUl9VUDpvLkJyb3dzZXIubXNQb2ludGVyPyJNU1BvaW50ZXJVcCI6InBvaW50ZXJ1cCIsUE9JTlRFUl9DQU5DRUw6by5Ccm93c2VyLm1zUG9pbnRlcj8iTVNQb2ludGVyQ2FuY2VsIjoicG9pbnRlcmNhbmNlbCIsVEFHX1dISVRFX0xJU1Q6WyJJTlBVVCIsIlNFTEVDVCIsIk9QVElPTiJdLF9wb2ludGVyczp7fSxfcG9pbnRlcnNDb3VudDowLGFkZFBvaW50ZXJMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSxuKXtyZXR1cm4idG91Y2hzdGFydCI9PT1lP3RoaXMuX2FkZFBvaW50ZXJTdGFydCh0LGksbik6InRvdWNobW92ZSI9PT1lP3RoaXMuX2FkZFBvaW50ZXJNb3ZlKHQsaSxuKToidG91Y2hlbmQiPT09ZSYmdGhpcy5fYWRkUG9pbnRlckVuZCh0LGksbiksdGhpc30scmVtb3ZlUG9pbnRlckxpc3RlbmVyOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10WyJfbGVhZmxldF8iK2UraV07cmV0dXJuInRvdWNoc3RhcnQiPT09ZT90LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX0RPV04sbiwhMSk6InRvdWNobW92ZSI9PT1lP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfTU9WRSxuLCExKToidG91Y2hlbmQiPT09ZSYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfVVAsbiwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9DQU5DRUwsbiwhMSkpLHRoaXN9LF9hZGRQb2ludGVyU3RhcnQ6ZnVuY3Rpb24odCxpLG4pe3ZhciBzPW8uYmluZChmdW5jdGlvbih0KXtpZigibW91c2UiIT09dC5wb2ludGVyVHlwZSYmdC5NU1BPSU5URVJfVFlQRV9NT1VTRSYmdC5wb2ludGVyVHlwZSE9PXQuTVNQT0lOVEVSX1RZUEVfTU9VU0Upe2lmKCEodGhpcy5UQUdfV0hJVEVfTElTVC5pbmRleE9mKHQudGFyZ2V0LnRhZ05hbWUpPDApKXJldHVybjtvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpfXRoaXMuX2hhbmRsZVBvaW50ZXIodCxpKX0sdGhpcyk7aWYodFsiX2xlYWZsZXRfdG91Y2hzdGFydCIrbl09cyx0LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX0RPV04scywhMSksIXRoaXMuX3BvaW50ZXJEb2NMaXN0ZW5lcil7dmFyIHI9by5iaW5kKHRoaXMuX2dsb2JhbFBvaW50ZXJVcCx0aGlzKTtlLmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9ET1dOLG8uYmluZCh0aGlzLl9nbG9iYWxQb2ludGVyRG93bix0aGlzKSwhMCksZS5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfTU9WRSxvLmJpbmQodGhpcy5fZ2xvYmFsUG9pbnRlck1vdmUsdGhpcyksITApLGUuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX1VQLHIsITApLGUuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX0NBTkNFTCxyLCEwKSx0aGlzLl9wb2ludGVyRG9jTGlzdGVuZXI9ITB9fSxfZ2xvYmFsUG9pbnRlckRvd246ZnVuY3Rpb24odCl7dGhpcy5fcG9pbnRlcnNbdC5wb2ludGVySWRdPXQsdGhpcy5fcG9pbnRlcnNDb3VudCsrfSxfZ2xvYmFsUG9pbnRlck1vdmU6ZnVuY3Rpb24odCl7dGhpcy5fcG9pbnRlcnNbdC5wb2ludGVySWRdJiYodGhpcy5fcG9pbnRlcnNbdC5wb2ludGVySWRdPXQpfSxfZ2xvYmFsUG9pbnRlclVwOmZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLl9wb2ludGVyc1t0LnBvaW50ZXJJZF0sdGhpcy5fcG9pbnRlcnNDb3VudC0tfSxfaGFuZGxlUG9pbnRlcjpmdW5jdGlvbih0LGUpe3QudG91Y2hlcz1bXTtmb3IodmFyIGkgaW4gdGhpcy5fcG9pbnRlcnMpdC50b3VjaGVzLnB1c2godGhpcy5fcG9pbnRlcnNbaV0pO3QuY2hhbmdlZFRvdWNoZXM9W3RdLGUodCl9LF9hZGRQb2ludGVyTW92ZTpmdW5jdGlvbih0LGUsaSl7dmFyIG49by5iaW5kKGZ1bmN0aW9uKHQpeyh0LnBvaW50ZXJUeXBlIT09dC5NU1BPSU5URVJfVFlQRV9NT1VTRSYmIm1vdXNlIiE9PXQucG9pbnRlclR5cGV8fDAhPT10LmJ1dHRvbnMpJiZ0aGlzLl9oYW5kbGVQb2ludGVyKHQsZSl9LHRoaXMpO3RbIl9sZWFmbGV0X3RvdWNobW92ZSIraV09bix0LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX01PVkUsbiwhMSl9LF9hZGRQb2ludGVyRW5kOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj1vLmJpbmQoZnVuY3Rpb24odCl7dGhpcy5faGFuZGxlUG9pbnRlcih0LGUpfSx0aGlzKTt0WyJfbGVhZmxldF90b3VjaGVuZCIraV09bix0LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX1VQLG4sITEpLHQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfQ0FOQ0VMLG4sITEpfX0pLG8uTWFwLm1lcmdlT3B0aW9ucyh7dG91Y2hab29tOm8uQnJvd3Nlci50b3VjaCYmIW8uQnJvd3Nlci5hbmRyb2lkMjMsYm91bmNlQXRab29tTGltaXRzOiEwfSksby5NYXAuVG91Y2hab29tPW8uSGFuZGxlci5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7by5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX21hcC5fY29udGFpbmVyLCJsZWFmbGV0LXRvdWNoLXpvb20iKSxvLkRvbUV2ZW50Lm9uKHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vblRvdWNoU3RhcnQsdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7by5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuX21hcC5fY29udGFpbmVyLCJsZWFmbGV0LXRvdWNoLXpvb20iKSxvLkRvbUV2ZW50Lm9mZih0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LHRoaXMpfSxfb25Ub3VjaFN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX21hcDtpZih0LnRvdWNoZXMmJjI9PT10LnRvdWNoZXMubGVuZ3RoJiYhaS5fYW5pbWF0aW5nWm9vbSYmIXRoaXMuX3pvb21pbmcpe3ZhciBuPWkubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzBdKSxzPWkubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzFdKTt0aGlzLl9jZW50ZXJQb2ludD1pLmdldFNpemUoKS5fZGl2aWRlQnkoMiksdGhpcy5fc3RhcnRMYXRMbmc9aS5jb250YWluZXJQb2ludFRvTGF0TG5nKHRoaXMuX2NlbnRlclBvaW50KSwiY2VudGVyIiE9PWkub3B0aW9ucy50b3VjaFpvb20mJih0aGlzLl9waW5jaFN0YXJ0TGF0TG5nPWkuY29udGFpbmVyUG9pbnRUb0xhdExuZyhuLmFkZChzKS5fZGl2aWRlQnkoMikpKSx0aGlzLl9zdGFydERpc3Q9bi5kaXN0YW5jZVRvKHMpLHRoaXMuX3N0YXJ0Wm9vbT1pLmdldFpvb20oKSx0aGlzLl9tb3ZlZD0hMSx0aGlzLl96b29taW5nPSEwLGkuX3N0b3AoKSxvLkRvbUV2ZW50Lm9uKGUsInRvdWNobW92ZSIsdGhpcy5fb25Ub3VjaE1vdmUsdGhpcykub24oZSwidG91Y2hlbmQiLHRoaXMuX29uVG91Y2hFbmQsdGhpcyksby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KX19LF9vblRvdWNoTW92ZTpmdW5jdGlvbih0KXtpZih0LnRvdWNoZXMmJjI9PT10LnRvdWNoZXMubGVuZ3RoJiZ0aGlzLl96b29taW5nKXt2YXIgZT10aGlzLl9tYXAsaT1lLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQudG91Y2hlc1swXSksbj1lLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQudG91Y2hlc1sxXSkscz1pLmRpc3RhbmNlVG8obikvdGhpcy5fc3RhcnREaXN0O2lmKHRoaXMuX3pvb209ZS5nZXRTY2FsZVpvb20ocyx0aGlzLl9zdGFydFpvb20pLCFlLm9wdGlvbnMuYm91bmNlQXRab29tTGltaXRzJiYodGhpcy5fem9vbTxlLmdldE1pblpvb20oKSYmczwxfHx0aGlzLl96b29tPmUuZ2V0TWF4Wm9vbSgpJiZzPjEpJiYodGhpcy5fem9vbT1lLl9saW1pdFpvb20odGhpcy5fem9vbSkpLCJjZW50ZXIiPT09ZS5vcHRpb25zLnRvdWNoWm9vbSl7aWYodGhpcy5fY2VudGVyPXRoaXMuX3N0YXJ0TGF0TG5nLDE9PT1zKXJldHVybn1lbHNle3ZhciByPWkuX2FkZChuKS5fZGl2aWRlQnkoMikuX3N1YnRyYWN0KHRoaXMuX2NlbnRlclBvaW50KTtpZigxPT09cyYmMD09PXIueCYmMD09PXIueSlyZXR1cm47dGhpcy5fY2VudGVyPWUudW5wcm9qZWN0KGUucHJvamVjdCh0aGlzLl9waW5jaFN0YXJ0TGF0TG5nLHRoaXMuX3pvb20pLnN1YnRyYWN0KHIpLHRoaXMuX3pvb20pfXRoaXMuX21vdmVkfHwoZS5fbW92ZVN0YXJ0KCEwKSx0aGlzLl9tb3ZlZD0hMCksby5VdGlsLmNhbmNlbEFuaW1GcmFtZSh0aGlzLl9hbmltUmVxdWVzdCk7dmFyIGE9by5iaW5kKGUuX21vdmUsZSx0aGlzLl9jZW50ZXIsdGhpcy5fem9vbSx7cGluY2g6ITAscm91bmQ6ITF9KTt0aGlzLl9hbmltUmVxdWVzdD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZShhLHRoaXMsITApLG8uRG9tRXZlbnQucHJldmVudERlZmF1bHQodCl9fSxfb25Ub3VjaEVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3ZlZCYmdGhpcy5fem9vbWluZz8odGhpcy5fem9vbWluZz0hMSxvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX2FuaW1SZXF1ZXN0KSxvLkRvbUV2ZW50Lm9mZihlLCJ0b3VjaG1vdmUiLHRoaXMuX29uVG91Y2hNb3ZlKS5vZmYoZSwidG91Y2hlbmQiLHRoaXMuX29uVG91Y2hFbmQpLHZvaWQodGhpcy5fbWFwLm9wdGlvbnMuem9vbUFuaW1hdGlvbj90aGlzLl9tYXAuX2FuaW1hdGVab29tKHRoaXMuX2NlbnRlcix0aGlzLl9tYXAuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSwhMCx0aGlzLl9tYXAub3B0aW9ucy56b29tU25hcCk6dGhpcy5fbWFwLl9yZXNldFZpZXcodGhpcy5fY2VudGVyLHRoaXMuX21hcC5fbGltaXRab29tKHRoaXMuX3pvb20pKSkpOnZvaWQodGhpcy5fem9vbWluZz0hMSl9fSksby5NYXAuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJ0b3VjaFpvb20iLG8uTWFwLlRvdWNoWm9vbSksby5NYXAubWVyZ2VPcHRpb25zKHt0YXA6ITAsdGFwVG9sZXJhbmNlOjE1fSksby5NYXAuVGFwPW8uSGFuZGxlci5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vbih0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Eb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24sdGhpcyl9LF9vbkRvd246ZnVuY3Rpb24odCl7aWYodC50b3VjaGVzKXtpZihvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpLHRoaXMuX2ZpcmVDbGljaz0hMCx0LnRvdWNoZXMubGVuZ3RoPjEpcmV0dXJuIHRoaXMuX2ZpcmVDbGljaz0hMSx2b2lkIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7dmFyIGk9dC50b3VjaGVzWzBdLG49aS50YXJnZXQ7dGhpcy5fc3RhcnRQb3M9dGhpcy5fbmV3UG9zPW5ldyBvLlBvaW50KGkuY2xpZW50WCxpLmNsaWVudFkpLG4udGFnTmFtZSYmImEiPT09bi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJm8uRG9tVXRpbC5hZGRDbGFzcyhuLCJsZWFmbGV0LWFjdGl2ZSIpLHRoaXMuX2hvbGRUaW1lb3V0PXNldFRpbWVvdXQoby5iaW5kKGZ1bmN0aW9uKCl7dGhpcy5faXNUYXBWYWxpZCgpJiYodGhpcy5fZmlyZUNsaWNrPSExLHRoaXMuX29uVXAoKSx0aGlzLl9zaW11bGF0ZUV2ZW50KCJjb250ZXh0bWVudSIsaSkpfSx0aGlzKSwxZTMpLHRoaXMuX3NpbXVsYXRlRXZlbnQoIm1vdXNlZG93biIsaSksby5Eb21FdmVudC5vbihlLHt0b3VjaG1vdmU6dGhpcy5fb25Nb3ZlLHRvdWNoZW5kOnRoaXMuX29uVXB9LHRoaXMpfX0sX29uVXA6ZnVuY3Rpb24odCl7aWYoY2xlYXJUaW1lb3V0KHRoaXMuX2hvbGRUaW1lb3V0KSxvLkRvbUV2ZW50Lm9mZihlLHt0b3VjaG1vdmU6dGhpcy5fb25Nb3ZlLHRvdWNoZW5kOnRoaXMuX29uVXB9LHRoaXMpLHRoaXMuX2ZpcmVDbGljayYmdCYmdC5jaGFuZ2VkVG91Y2hlcyl7dmFyIGk9dC5jaGFuZ2VkVG91Y2hlc1swXSxuPWkudGFyZ2V0O24mJm4udGFnTmFtZSYmImEiPT09bi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJm8uRG9tVXRpbC5yZW1vdmVDbGFzcyhuLCJsZWFmbGV0LWFjdGl2ZSIpLHRoaXMuX3NpbXVsYXRlRXZlbnQoIm1vdXNldXAiLGkpLHRoaXMuX2lzVGFwVmFsaWQoKSYmdGhpcy5fc2ltdWxhdGVFdmVudCgiY2xpY2siLGkpfX0sX2lzVGFwVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmV3UG9zLmRpc3RhbmNlVG8odGhpcy5fc3RhcnRQb3MpPD10aGlzLl9tYXAub3B0aW9ucy50YXBUb2xlcmFuY2V9LF9vbk1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dC50b3VjaGVzWzBdO3RoaXMuX25ld1Bvcz1uZXcgby5Qb2ludChlLmNsaWVudFgsZS5jbGllbnRZKSwKdGhpcy5fc2ltdWxhdGVFdmVudCgibW91c2Vtb3ZlIixlKX0sX3NpbXVsYXRlRXZlbnQ6ZnVuY3Rpb24oaSxuKXt2YXIgbz1lLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpO28uX3NpbXVsYXRlZD0hMCxuLnRhcmdldC5fc2ltdWxhdGVkQ2xpY2s9ITAsby5pbml0TW91c2VFdmVudChpLCEwLCEwLHQsMSxuLnNjcmVlblgsbi5zY3JlZW5ZLG4uY2xpZW50WCxuLmNsaWVudFksITEsITEsITEsITEsMCxudWxsKSxuLnRhcmdldC5kaXNwYXRjaEV2ZW50KG8pfX0pLG8uQnJvd3Nlci50b3VjaCYmIW8uQnJvd3Nlci5wb2ludGVyJiZvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsInRhcCIsby5NYXAuVGFwKSxvLk1hcC5tZXJnZU9wdGlvbnMoe2JveFpvb206ITB9KSxvLk1hcC5Cb3hab29tPW8uSGFuZGxlci5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyPXQuX2NvbnRhaW5lcix0aGlzLl9wYW5lPXQuX3BhbmVzLm92ZXJsYXlQYW5lfSxhZGRIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub24odGhpcy5fY29udGFpbmVyLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHRoaXMuX2NvbnRhaW5lciwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKX0sbW92ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW92ZWR9LF9yZXNldFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fbW92ZWQ9ITF9LF9vbk1vdXNlRG93bjpmdW5jdGlvbih0KXtyZXR1cm4hKCF0LnNoaWZ0S2V5fHwxIT09dC53aGljaCYmMSE9PXQuYnV0dG9uKSYmKHRoaXMuX3Jlc2V0U3RhdGUoKSxvLkRvbVV0aWwuZGlzYWJsZVRleHRTZWxlY3Rpb24oKSxvLkRvbVV0aWwuZGlzYWJsZUltYWdlRHJhZygpLHRoaXMuX3N0YXJ0UG9pbnQ9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLHZvaWQgby5Eb21FdmVudC5vbihlLHtjb250ZXh0bWVudTpvLkRvbUV2ZW50LnN0b3AsbW91c2Vtb3ZlOnRoaXMuX29uTW91c2VNb3ZlLG1vdXNldXA6dGhpcy5fb25Nb3VzZVVwLGtleWRvd246dGhpcy5fb25LZXlEb3dufSx0aGlzKSl9LF9vbk1vdXNlTW92ZTpmdW5jdGlvbih0KXt0aGlzLl9tb3ZlZHx8KHRoaXMuX21vdmVkPSEwLHRoaXMuX2JveD1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLCJsZWFmbGV0LXpvb20tYm94Iix0aGlzLl9jb250YWluZXIpLG8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9jb250YWluZXIsImxlYWZsZXQtY3Jvc3NoYWlyIiksdGhpcy5fbWFwLmZpcmUoImJveHpvb21zdGFydCIpKSx0aGlzLl9wb2ludD10aGlzLl9tYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCk7dmFyIGU9bmV3IG8uQm91bmRzKHRoaXMuX3BvaW50LHRoaXMuX3N0YXJ0UG9pbnQpLGk9ZS5nZXRTaXplKCk7by5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2JveCxlLm1pbiksdGhpcy5fYm94LnN0eWxlLndpZHRoPWkueCsicHgiLHRoaXMuX2JveC5zdHlsZS5oZWlnaHQ9aS55KyJweCJ9LF9maW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZlZCYmKG8uRG9tVXRpbC5yZW1vdmUodGhpcy5fYm94KSxvLkRvbVV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fY29udGFpbmVyLCJsZWFmbGV0LWNyb3NzaGFpciIpKSxvLkRvbVV0aWwuZW5hYmxlVGV4dFNlbGVjdGlvbigpLG8uRG9tVXRpbC5lbmFibGVJbWFnZURyYWcoKSxvLkRvbUV2ZW50Lm9mZihlLHtjb250ZXh0bWVudTpvLkRvbUV2ZW50LnN0b3AsbW91c2Vtb3ZlOnRoaXMuX29uTW91c2VNb3ZlLG1vdXNldXA6dGhpcy5fb25Nb3VzZVVwLGtleWRvd246dGhpcy5fb25LZXlEb3dufSx0aGlzKX0sX29uTW91c2VVcDpmdW5jdGlvbih0KXtpZigoMT09PXQud2hpY2h8fDE9PT10LmJ1dHRvbikmJih0aGlzLl9maW5pc2goKSx0aGlzLl9tb3ZlZCkpe3NldFRpbWVvdXQoby5iaW5kKHRoaXMuX3Jlc2V0U3RhdGUsdGhpcyksMCk7dmFyIGU9bmV3IG8uTGF0TG5nQm91bmRzKHRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF0TG5nKHRoaXMuX3N0YXJ0UG9pbnQpLHRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF0TG5nKHRoaXMuX3BvaW50KSk7dGhpcy5fbWFwLmZpdEJvdW5kcyhlKS5maXJlKCJib3h6b29tZW5kIix7Ym94Wm9vbUJvdW5kczplfSl9fSxfb25LZXlEb3duOmZ1bmN0aW9uKHQpezI3PT09dC5rZXlDb2RlJiZ0aGlzLl9maW5pc2goKX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImJveFpvb20iLG8uTWFwLkJveFpvb20pLG8uTWFwLm1lcmdlT3B0aW9ucyh7a2V5Ym9hcmQ6ITAsa2V5Ym9hcmRQYW5EZWx0YTo4MH0pLG8uTWFwLktleWJvYXJkPW8uSGFuZGxlci5leHRlbmQoe2tleUNvZGVzOntsZWZ0OlszN10scmlnaHQ6WzM5XSxkb3duOls0MF0sdXA6WzM4XSx6b29tSW46WzE4NywxMDcsNjEsMTcxXSx6b29tT3V0OlsxODksMTA5LDU0LDE3M119LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fc2V0UGFuRGVsdGEodC5vcHRpb25zLmtleWJvYXJkUGFuRGVsdGEpLHRoaXMuX3NldFpvb21EZWx0YSh0Lm9wdGlvbnMuem9vbURlbHRhKX0sYWRkSG9va3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX2NvbnRhaW5lcjt0LnRhYkluZGV4PD0wJiYodC50YWJJbmRleD0iMCIpLG8uRG9tRXZlbnQub24odCx7Zm9jdXM6dGhpcy5fb25Gb2N1cyxibHVyOnRoaXMuX29uQmx1cixtb3VzZWRvd246dGhpcy5fb25Nb3VzZURvd259LHRoaXMpLHRoaXMuX21hcC5vbih7Zm9jdXM6dGhpcy5fYWRkSG9va3MsYmx1cjp0aGlzLl9yZW1vdmVIb29rc30sdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlSG9va3MoKSxvLkRvbUV2ZW50Lm9mZih0aGlzLl9tYXAuX2NvbnRhaW5lcix7Zm9jdXM6dGhpcy5fb25Gb2N1cyxibHVyOnRoaXMuX29uQmx1cixtb3VzZWRvd246dGhpcy5fb25Nb3VzZURvd259LHRoaXMpLHRoaXMuX21hcC5vZmYoe2ZvY3VzOnRoaXMuX2FkZEhvb2tzLGJsdXI6dGhpcy5fcmVtb3ZlSG9va3N9LHRoaXMpfSxfb25Nb3VzZURvd246ZnVuY3Rpb24oKXtpZighdGhpcy5fZm9jdXNlZCl7dmFyIGk9ZS5ib2R5LG49ZS5kb2N1bWVudEVsZW1lbnQsbz1pLnNjcm9sbFRvcHx8bi5zY3JvbGxUb3Ascz1pLnNjcm9sbExlZnR8fG4uc2Nyb2xsTGVmdDt0aGlzLl9tYXAuX2NvbnRhaW5lci5mb2N1cygpLHQuc2Nyb2xsVG8ocyxvKX19LF9vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZD0hMCx0aGlzLl9tYXAuZmlyZSgiZm9jdXMiKX0sX29uQmx1cjpmdW5jdGlvbigpe3RoaXMuX2ZvY3VzZWQ9ITEsdGhpcy5fbWFwLmZpcmUoImJsdXIiKX0sX3NldFBhbkRlbHRhOmZ1bmN0aW9uKHQpe3ZhciBlLGksbj10aGlzLl9wYW5LZXlzPXt9LG89dGhpcy5rZXlDb2Rlcztmb3IoZT0wLGk9by5sZWZ0Lmxlbmd0aDtlPGk7ZSsrKW5bby5sZWZ0W2VdXT1bLTEqdCwwXTtmb3IoZT0wLGk9by5yaWdodC5sZW5ndGg7ZTxpO2UrKyluW28ucmlnaHRbZV1dPVt0LDBdO2ZvcihlPTAsaT1vLmRvd24ubGVuZ3RoO2U8aTtlKyspbltvLmRvd25bZV1dPVswLHRdO2ZvcihlPTAsaT1vLnVwLmxlbmd0aDtlPGk7ZSsrKW5bby51cFtlXV09WzAsLTEqdF19LF9zZXRab29tRGVsdGE6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPXRoaXMuX3pvb21LZXlzPXt9LG89dGhpcy5rZXlDb2Rlcztmb3IoZT0wLGk9by56b29tSW4ubGVuZ3RoO2U8aTtlKyspbltvLnpvb21JbltlXV09dDtmb3IoZT0wLGk9by56b29tT3V0Lmxlbmd0aDtlPGk7ZSsrKW5bby56b29tT3V0W2VdXT0tdH0sX2FkZEhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vbihlLCJrZXlkb3duIix0aGlzLl9vbktleURvd24sdGhpcyl9LF9yZW1vdmVIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKGUsImtleWRvd24iLHRoaXMuX29uS2V5RG93bix0aGlzKX0sX29uS2V5RG93bjpmdW5jdGlvbih0KXtpZighKHQuYWx0S2V5fHx0LmN0cmxLZXl8fHQubWV0YUtleSkpe3ZhciBlLGk9dC5rZXlDb2RlLG49dGhpcy5fbWFwO2lmKGkgaW4gdGhpcy5fcGFuS2V5cyl7aWYobi5fcGFuQW5pbSYmbi5fcGFuQW5pbS5faW5Qcm9ncmVzcylyZXR1cm47ZT10aGlzLl9wYW5LZXlzW2ldLHQuc2hpZnRLZXkmJihlPW8ucG9pbnQoZSkubXVsdGlwbHlCeSgzKSksbi5wYW5CeShlKSxuLm9wdGlvbnMubWF4Qm91bmRzJiZuLnBhbkluc2lkZUJvdW5kcyhuLm9wdGlvbnMubWF4Qm91bmRzKX1lbHNlIGlmKGkgaW4gdGhpcy5fem9vbUtleXMpbi5zZXRab29tKG4uZ2V0Wm9vbSgpKyh0LnNoaWZ0S2V5PzM6MSkqdGhpcy5fem9vbUtleXNbaV0pO2Vsc2V7aWYoMjchPT1pKXJldHVybjtuLmNsb3NlUG9wdXAoKX1vLkRvbUV2ZW50LnN0b3AodCl9fX0pLG8uTWFwLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwia2V5Ym9hcmQiLG8uTWFwLktleWJvYXJkKSxvLkhhbmRsZXIuTWFya2VyRHJhZz1vLkhhbmRsZXIuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcmtlcj10fSxhZGRIb29rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcmtlci5faWNvbjt0aGlzLl9kcmFnZ2FibGV8fCh0aGlzLl9kcmFnZ2FibGU9bmV3IG8uRHJhZ2dhYmxlKHQsdCwhMCkpLHRoaXMuX2RyYWdnYWJsZS5vbih7ZHJhZ3N0YXJ0OnRoaXMuX29uRHJhZ1N0YXJ0LGRyYWc6dGhpcy5fb25EcmFnLGRyYWdlbmQ6dGhpcy5fb25EcmFnRW5kfSx0aGlzKS5lbmFibGUoKSxvLkRvbVV0aWwuYWRkQ2xhc3ModCwibGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlIil9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fZHJhZ2dhYmxlLm9mZih7ZHJhZ3N0YXJ0OnRoaXMuX29uRHJhZ1N0YXJ0LGRyYWc6dGhpcy5fb25EcmFnLGRyYWdlbmQ6dGhpcy5fb25EcmFnRW5kfSx0aGlzKS5kaXNhYmxlKCksdGhpcy5fbWFya2VyLl9pY29uJiZvLkRvbVV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fbWFya2VyLl9pY29uLCJsZWFmbGV0LW1hcmtlci1kcmFnZ2FibGUiKX0sbW92ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ2dhYmxlJiZ0aGlzLl9kcmFnZ2FibGUuX21vdmVkfSxfb25EcmFnU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9vbGRMYXRMbmc9dGhpcy5fbWFya2VyLmdldExhdExuZygpLHRoaXMuX21hcmtlci5jbG9zZVBvcHVwKCkuZmlyZSgibW92ZXN0YXJ0IikuZmlyZSgiZHJhZ3N0YXJ0Iil9LF9vbkRyYWc6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFya2VyLGk9ZS5fc2hhZG93LG49by5Eb21VdGlsLmdldFBvc2l0aW9uKGUuX2ljb24pLHM9ZS5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhuKTtpJiZvLkRvbVV0aWwuc2V0UG9zaXRpb24oaSxuKSxlLl9sYXRsbmc9cyx0LmxhdGxuZz1zLHQub2xkTGF0TG5nPXRoaXMuX29sZExhdExuZyxlLmZpcmUoIm1vdmUiLHQpLmZpcmUoImRyYWciLHQpfSxfb25EcmFnRW5kOmZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLl9vbGRMYXRMbmcsdGhpcy5fbWFya2VyLmZpcmUoIm1vdmVlbmQiKS5maXJlKCJkcmFnZW5kIix0KX19KSxvLkNvbnRyb2w9by5DbGFzcy5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJ0b3ByaWdodCJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbn0sc2V0UG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwO3JldHVybiBlJiZlLnJlbW92ZUNvbnRyb2wodGhpcyksdGhpcy5vcHRpb25zLnBvc2l0aW9uPXQsZSYmZS5hZGRDb250cm9sKHRoaXMpLHRoaXN9LGdldENvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LGFkZFRvOmZ1bmN0aW9uKHQpe3RoaXMucmVtb3ZlKCksdGhpcy5fbWFwPXQ7dmFyIGU9dGhpcy5fY29udGFpbmVyPXRoaXMub25BZGQodCksaT10aGlzLmdldFBvc2l0aW9uKCksbj10Ll9jb250cm9sQ29ybmVyc1tpXTtyZXR1cm4gby5Eb21VdGlsLmFkZENsYXNzKGUsImxlYWZsZXQtY29udHJvbCIpLGkuaW5kZXhPZigiYm90dG9tIikhPT0tMT9uLmluc2VydEJlZm9yZShlLG4uZmlyc3RDaGlsZCk6bi5hcHBlbmRDaGlsZChlKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwPyhvLkRvbVV0aWwucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5vblJlbW92ZSYmdGhpcy5vblJlbW92ZSh0aGlzLl9tYXApLHRoaXMuX21hcD1udWxsLHRoaXMpOnRoaXN9LF9yZWZvY3VzT25NYXA6ZnVuY3Rpb24odCl7dGhpcy5fbWFwJiZ0JiZ0LnNjcmVlblg+MCYmdC5zY3JlZW5ZPjAmJnRoaXMuX21hcC5nZXRDb250YWluZXIoKS5mb2N1cygpfX0pLG8uY29udHJvbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uQ29udHJvbCh0KX0sby5NYXAuaW5jbHVkZSh7YWRkQ29udHJvbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRUbyh0aGlzKSx0aGlzfSxyZW1vdmVDb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbW92ZSgpLHRoaXN9LF9pbml0Q29udHJvbFBvczpmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxzKXt2YXIgcj1pK3QrIiAiK2krcztlW3Qrc109by5Eb21VdGlsLmNyZWF0ZSgiZGl2IixyLG4pfXZhciBlPXRoaXMuX2NvbnRyb2xDb3JuZXJzPXt9LGk9ImxlYWZsZXQtIixuPXRoaXMuX2NvbnRyb2xDb250YWluZXI9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IixpKyJjb250cm9sLWNvbnRhaW5lciIsdGhpcy5fY29udGFpbmVyKTt0KCJ0b3AiLCJsZWZ0IiksdCgidG9wIiwicmlnaHQiKSx0KCJib3R0b20iLCJsZWZ0IiksdCgiYm90dG9tIiwicmlnaHQiKX0sX2NsZWFyQ29udHJvbFBvczpmdW5jdGlvbigpe28uRG9tVXRpbC5yZW1vdmUodGhpcy5fY29udHJvbENvbnRhaW5lcil9fSksby5Db250cm9sLlpvb209by5Db250cm9sLmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246InRvcGxlZnQiLHpvb21JblRleHQ6IisiLHpvb21JblRpdGxlOiJab29tIGluIix6b29tT3V0VGV4dDoiLSIsem9vbU91dFRpdGxlOiJab29tIG91dCJ9LG9uQWRkOmZ1bmN0aW9uKHQpe3ZhciBlPSJsZWFmbGV0LWNvbnRyb2wtem9vbSIsaT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIiBsZWFmbGV0LWJhciIpLG49dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKG4uem9vbUluVGV4dCxuLnpvb21JblRpdGxlLGUrIi1pbiIsaSx0aGlzLl96b29tSW4pLHRoaXMuX3pvb21PdXRCdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKG4uem9vbU91dFRleHQsbi56b29tT3V0VGl0bGUsZSsiLW91dCIsaSx0aGlzLl96b29tT3V0KSx0aGlzLl91cGRhdGVEaXNhYmxlZCgpLHQub24oInpvb21lbmQgem9vbWxldmVsc2NoYW5nZSIsdGhpcy5fdXBkYXRlRGlzYWJsZWQsdGhpcyksaX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYoInpvb21lbmQgem9vbWxldmVsc2NoYW5nZSIsdGhpcy5fdXBkYXRlRGlzYWJsZWQsdGhpcyl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWQ9ITAsdGhpcy5fdXBkYXRlRGlzYWJsZWQoKSx0aGlzfSxlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fdXBkYXRlRGlzYWJsZWQoKSx0aGlzfSxfem9vbUluOmZ1bmN0aW9uKHQpeyF0aGlzLl9kaXNhYmxlZCYmdGhpcy5fbWFwLl96b29tPHRoaXMuX21hcC5nZXRNYXhab29tKCkmJnRoaXMuX21hcC56b29tSW4odGhpcy5fbWFwLm9wdGlvbnMuem9vbURlbHRhKih0LnNoaWZ0S2V5PzM6MSkpfSxfem9vbU91dDpmdW5jdGlvbih0KXshdGhpcy5fZGlzYWJsZWQmJnRoaXMuX21hcC5fem9vbT50aGlzLl9tYXAuZ2V0TWluWm9vbSgpJiZ0aGlzLl9tYXAuem9vbU91dCh0aGlzLl9tYXAub3B0aW9ucy56b29tRGVsdGEqKHQuc2hpZnRLZXk/MzoxKSl9LF9jcmVhdGVCdXR0b246ZnVuY3Rpb24odCxlLGksbixzKXt2YXIgcj1vLkRvbVV0aWwuY3JlYXRlKCJhIixpLG4pO3JldHVybiByLmlubmVySFRNTD10LHIuaHJlZj0iIyIsci50aXRsZT1lLHIuc2V0QXR0cmlidXRlKCJyb2xlIiwiYnV0dG9uIiksci5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGUpLG8uRG9tRXZlbnQub24ociwibW91c2Vkb3duIGRibGNsaWNrIixvLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbikub24ociwiY2xpY2siLG8uRG9tRXZlbnQuc3RvcCkub24ociwiY2xpY2siLHMsdGhpcykub24ociwiY2xpY2siLHRoaXMuX3JlZm9jdXNPbk1hcCx0aGlzKSxyfSxfdXBkYXRlRGlzYWJsZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsZT0ibGVhZmxldC1kaXNhYmxlZCI7by5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuX3pvb21JbkJ1dHRvbixlKSxvLkRvbVV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fem9vbU91dEJ1dHRvbixlKSwodGhpcy5fZGlzYWJsZWR8fHQuX3pvb209PT10LmdldE1pblpvb20oKSkmJm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl96b29tT3V0QnV0dG9uLGUpLCh0aGlzLl9kaXNhYmxlZHx8dC5fem9vbT09PXQuZ2V0TWF4Wm9vbSgpKSYmby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX3pvb21JbkJ1dHRvbixlKX19KSxvLk1hcC5tZXJnZU9wdGlvbnMoe3pvb21Db250cm9sOiEwfSksby5NYXAuYWRkSW5pdEhvb2soZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuem9vbUNvbnRyb2wmJih0aGlzLnpvb21Db250cm9sPW5ldyBvLkNvbnRyb2wuWm9vbSx0aGlzLmFkZENvbnRyb2wodGhpcy56b29tQ29udHJvbCkpfSksby5jb250cm9sLnpvb209ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkNvbnRyb2wuWm9vbSh0KX0sby5Db250cm9sLkF0dHJpYnV0aW9uPW8uQ29udHJvbC5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJib3R0b21yaWdodCIscHJlZml4Oic8YSBocmVmPSJodHRwOi8vbGVhZmxldGpzLmNvbSIgdGl0bGU9IkEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwcyI+TGVhZmxldDwvYT4nfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe28uc2V0T3B0aW9ucyh0aGlzLHQpLHRoaXMuX2F0dHJpYnV0aW9ucz17fX0sb25BZGQ6ZnVuY3Rpb24odCl7dC5hdHRyaWJ1dGlvbkNvbnRyb2w9dGhpcyx0aGlzLl9jb250YWluZXI9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IiwibGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uIiksby5Eb21FdmVudCYmby5Eb21FdmVudC5kaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbih0aGlzLl9jb250YWluZXIpO2Zvcih2YXIgZSBpbiB0Ll9sYXllcnMpdC5fbGF5ZXJzW2VdLmdldEF0dHJpYnV0aW9uJiZ0aGlzLmFkZEF0dHJpYnV0aW9uKHQuX2xheWVyc1tlXS5nZXRBdHRyaWJ1dGlvbigpKTtyZXR1cm4gdGhpcy5fdXBkYXRlKCksdGhpcy5fY29udGFpbmVyfSxzZXRQcmVmaXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wcmVmaXg9dCx0aGlzLl91cGRhdGUoKSx0aGlzfSxhZGRBdHRyaWJ1dGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdD8odGhpcy5fYXR0cmlidXRpb25zW3RdfHwodGhpcy5fYXR0cmlidXRpb25zW3RdPTApLHRoaXMuX2F0dHJpYnV0aW9uc1t0XSsrLHRoaXMuX3VwZGF0ZSgpLHRoaXMpOnRoaXN9LHJlbW92ZUF0dHJpYnV0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0Pyh0aGlzLl9hdHRyaWJ1dGlvbnNbdF0mJih0aGlzLl9hdHRyaWJ1dGlvbnNbdF0tLSx0aGlzLl91cGRhdGUoKSksdGhpcyk6dGhpc30sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuX2F0dHJpYnV0aW9ucyl0aGlzLl9hdHRyaWJ1dGlvbnNbZV0mJnQucHVzaChlKTt2YXIgaT1bXTt0aGlzLm9wdGlvbnMucHJlZml4JiZpLnB1c2godGhpcy5vcHRpb25zLnByZWZpeCksdC5sZW5ndGgmJmkucHVzaCh0LmpvaW4oIiwgIikpLHRoaXMuX2NvbnRhaW5lci5pbm5lckhUTUw9aS5qb2luKCIgfCAiKX19fSksby5NYXAubWVyZ2VPcHRpb25zKHthdHRyaWJ1dGlvbkNvbnRyb2w6ITB9KSxvLk1hcC5hZGRJbml0SG9vayhmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5hdHRyaWJ1dGlvbkNvbnRyb2wmJihuZXcgby5Db250cm9sLkF0dHJpYnV0aW9uKS5hZGRUbyh0aGlzKX0pLG8uY29udHJvbC5hdHRyaWJ1dGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uQ29udHJvbC5BdHRyaWJ1dGlvbih0KX0sby5Db250cm9sLlNjYWxlPW8uQ29udHJvbC5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJib3R0b21sZWZ0IixtYXhXaWR0aDoxMDAsbWV0cmljOiEwLGltcGVyaWFsOiEwfSxvbkFkZDpmdW5jdGlvbih0KXt2YXIgZT0ibGVhZmxldC1jb250cm9sLXNjYWxlIixpPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSksbj10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuX2FkZFNjYWxlcyhuLGUrIi1saW5lIixpKSx0Lm9uKG4udXBkYXRlV2hlbklkbGU/Im1vdmVlbmQiOiJtb3ZlIix0aGlzLl91cGRhdGUsdGhpcyksdC53aGVuUmVhZHkodGhpcy5fdXBkYXRlLHRoaXMpLGl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZT8ibW92ZWVuZCI6Im1vdmUiLHRoaXMuX3VwZGF0ZSx0aGlzKX0sX2FkZFNjYWxlczpmdW5jdGlvbih0LGUsaSl7dC5tZXRyaWMmJih0aGlzLl9tU2NhbGU9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IixlLGkpKSx0LmltcGVyaWFsJiYodGhpcy5faVNjYWxlPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSxpKSl9LF91cGRhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsZT10LmdldFNpemUoKS55LzIsaT10LmRpc3RhbmNlKHQuY29udGFpbmVyUG9pbnRUb0xhdExuZyhbMCxlXSksdC5jb250YWluZXJQb2ludFRvTGF0TG5nKFt0aGlzLm9wdGlvbnMubWF4V2lkdGgsZV0pKTt0aGlzLl91cGRhdGVTY2FsZXMoaSl9LF91cGRhdGVTY2FsZXM6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zLm1ldHJpYyYmdCYmdGhpcy5fdXBkYXRlTWV0cmljKHQpLHRoaXMub3B0aW9ucy5pbXBlcmlhbCYmdCYmdGhpcy5fdXBkYXRlSW1wZXJpYWwodCl9LF91cGRhdGVNZXRyaWM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0Um91bmROdW0odCksaT1lPDFlMz9lKyIgbSI6ZS8xZTMrIiBrbSI7dGhpcy5fdXBkYXRlU2NhbGUodGhpcy5fbVNjYWxlLGksZS90KX0sX3VwZGF0ZUltcGVyaWFsOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixvPTMuMjgwODM5OSp0O28+NTI4MD8oZT1vLzUyODAsaT10aGlzLl9nZXRSb3VuZE51bShlKSx0aGlzLl91cGRhdGVTY2FsZSh0aGlzLl9pU2NhbGUsaSsiIG1pIixpL2UpKToobj10aGlzLl9nZXRSb3VuZE51bShvKSx0aGlzLl91cGRhdGVTY2FsZSh0aGlzLl9pU2NhbGUsbisiIGZ0IixuL28pKX0sX3VwZGF0ZVNjYWxlOmZ1bmN0aW9uKHQsZSxpKXt0LnN0eWxlLndpZHRoPU1hdGgucm91bmQodGhpcy5vcHRpb25zLm1heFdpZHRoKmkpKyJweCIsdC5pbm5lckhUTUw9ZX0sX2dldFJvdW5kTnVtOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucG93KDEwLChNYXRoLmZsb29yKHQpKyIiKS5sZW5ndGgtMSksaT10L2U7cmV0dXJuIGk9aT49MTA/MTA6aT49NT81Omk+PTM/MzppPj0yPzI6MSxlKml9fSksby5jb250cm9sLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5Db250cm9sLlNjYWxlKHQpfSxvLkNvbnRyb2wuTGF5ZXJzPW8uQ29udHJvbC5leHRlbmQoe29wdGlvbnM6e2NvbGxhcHNlZDohMCxwb3NpdGlvbjoidG9wcmlnaHQiLGF1dG9aSW5kZXg6ITAsaGlkZVNpbmdsZUJhc2U6ITEsc29ydExheWVyczohMSxzb3J0RnVuY3Rpb246ZnVuY3Rpb24odCxlLGksbil7cmV0dXJuIGk8bj8tMTpuPGk/MTowfX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7by5zZXRPcHRpb25zKHRoaXMsaSksdGhpcy5fbGF5ZXJzPVtdLHRoaXMuX2xhc3RaSW5kZXg9MCx0aGlzLl9oYW5kbGluZ0NsaWNrPSExO2Zvcih2YXIgbiBpbiB0KXRoaXMuX2FkZExheWVyKHRbbl0sbik7Zm9yKG4gaW4gZSl0aGlzLl9hZGRMYXllcihlW25dLG4sITApfSxvbkFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5pdExheW91dCgpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX21hcD10LHQub24oInpvb21lbmQiLHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMsdGhpcyksdGhpcy5fY29udGFpbmVyfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX21hcC5vZmYoInpvb21lbmQiLHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMsdGhpcyk7Zm9yKHZhciB0PTA7dDx0aGlzLl9sYXllcnMubGVuZ3RoO3QrKyl0aGlzLl9sYXllcnNbdF0ubGF5ZXIub2ZmKCJhZGQgcmVtb3ZlIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpfSxhZGRCYXNlTGF5ZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYWRkTGF5ZXIodCxlKSx0aGlzLl9tYXA/dGhpcy5fdXBkYXRlKCk6dGhpc30sYWRkT3ZlcmxheTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9hZGRMYXllcih0LGUsITApLHRoaXMuX21hcD90aGlzLl91cGRhdGUoKTp0aGlzfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt0Lm9mZigiYWRkIHJlbW92ZSIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKTt2YXIgZT10aGlzLl9nZXRMYXllcihvLnN0YW1wKHQpKTtyZXR1cm4gZSYmdGhpcy5fbGF5ZXJzLnNwbGljZSh0aGlzLl9sYXllcnMuaW5kZXhPZihlKSwxKSx0aGlzLl9tYXA/dGhpcy5fdXBkYXRlKCk6dGhpc30sZXhwYW5kOmZ1bmN0aW9uKCl7by5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCIpLHRoaXMuX2Zvcm0uc3R5bGUuaGVpZ2h0PW51bGw7dmFyIHQ9dGhpcy5fbWFwLmdldFNpemUoKS55LSh0aGlzLl9jb250YWluZXIub2Zmc2V0VG9wKzUwKTtyZXR1cm4gdDx0aGlzLl9mb3JtLmNsaWVudEhlaWdodD8oby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX2Zvcm0sImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2Nyb2xsYmFyIiksdGhpcy5fZm9ybS5zdHlsZS5oZWlnaHQ9dCsicHgiKTpvLkRvbVV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fZm9ybSwibGVhZmxldC1jb250cm9sLWxheWVycy1zY3JvbGxiYXIiKSx0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzKCksdGhpc30sY29sbGFwc2U6ZnVuY3Rpb24oKXtyZXR1cm4gby5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCIpLHRoaXN9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQ9ImxlYWZsZXQtY29udHJvbC1sYXllcnMiLGU9dGhpcy5fY29udGFpbmVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsdCksaT10aGlzLm9wdGlvbnMuY29sbGFwc2VkO2Uuc2V0QXR0cmlidXRlKCJhcmlhLWhhc3BvcHVwIiwhMCksby5Eb21FdmVudC5kaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihlKSxvLkJyb3dzZXIudG91Y2h8fG8uRG9tRXZlbnQuZGlzYWJsZVNjcm9sbFByb3BhZ2F0aW9uKGUpO3ZhciBuPXRoaXMuX2Zvcm09by5Eb21VdGlsLmNyZWF0ZSgiZm9ybSIsdCsiLWxpc3QiKTtpJiYodGhpcy5fbWFwLm9uKCJjbGljayIsdGhpcy5jb2xsYXBzZSx0aGlzKSxvLkJyb3dzZXIuYW5kcm9pZHx8by5Eb21FdmVudC5vbihlLHttb3VzZWVudGVyOnRoaXMuZXhwYW5kLG1vdXNlbGVhdmU6dGhpcy5jb2xsYXBzZX0sdGhpcykpO3ZhciBzPXRoaXMuX2xheWVyc0xpbms9by5Eb21VdGlsLmNyZWF0ZSgiYSIsdCsiLXRvZ2dsZSIsZSk7cy5ocmVmPSIjIixzLnRpdGxlPSJMYXllcnMiLG8uQnJvd3Nlci50b3VjaD9vLkRvbUV2ZW50Lm9uKHMsImNsaWNrIixvLkRvbUV2ZW50LnN0b3ApLm9uKHMsImNsaWNrIix0aGlzLmV4cGFuZCx0aGlzKTpvLkRvbUV2ZW50Lm9uKHMsImZvY3VzIix0aGlzLmV4cGFuZCx0aGlzKSxvLkRvbUV2ZW50Lm9uKG4sImNsaWNrIixmdW5jdGlvbigpe3NldFRpbWVvdXQoby5iaW5kKHRoaXMuX29uSW5wdXRDbGljayx0aGlzKSwwKX0sdGhpcyksaXx8dGhpcy5leHBhbmQoKSx0aGlzLl9iYXNlTGF5ZXJzTGlzdD1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLHQrIi1iYXNlIixuKSx0aGlzLl9zZXBhcmF0b3I9by5Eb21VdGlsLmNyZWF0ZSgiZGl2Iix0KyItc2VwYXJhdG9yIixuKSx0aGlzLl9vdmVybGF5c0xpc3Q9by5Eb21VdGlsLmNyZWF0ZSgiZGl2Iix0KyItb3ZlcmxheXMiLG4pLGUuYXBwZW5kQ2hpbGQobil9LF9nZXRMYXllcjpmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuX2xheWVycy5sZW5ndGg7ZSsrKWlmKHRoaXMuX2xheWVyc1tlXSYmby5zdGFtcCh0aGlzLl9sYXllcnNbZV0ubGF5ZXIpPT09dClyZXR1cm4gdGhpcy5fbGF5ZXJzW2VdfSxfYWRkTGF5ZXI6ZnVuY3Rpb24odCxlLGkpe3Qub24oImFkZCByZW1vdmUiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyksdGhpcy5fbGF5ZXJzLnB1c2goe2xheWVyOnQsbmFtZTplLG92ZXJsYXk6aX0pLHRoaXMub3B0aW9ucy5zb3J0TGF5ZXJzJiZ0aGlzLl9sYXllcnMuc29ydChvLmJpbmQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5vcHRpb25zLnNvcnRGdW5jdGlvbih0LmxheWVyLGUubGF5ZXIsdC5uYW1lLGUubmFtZSl9LHRoaXMpKSx0aGlzLm9wdGlvbnMuYXV0b1pJbmRleCYmdC5zZXRaSW5kZXgmJih0aGlzLl9sYXN0WkluZGV4KyssdC5zZXRaSW5kZXgodGhpcy5fbGFzdFpJbmRleCkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2NvbnRhaW5lcilyZXR1cm4gdGhpcztvLkRvbVV0aWwuZW1wdHkodGhpcy5fYmFzZUxheWVyc0xpc3QpLG8uRG9tVXRpbC5lbXB0eSh0aGlzLl9vdmVybGF5c0xpc3QpO3ZhciB0LGUsaSxuLHM9MDtmb3IoaT0wO2k8dGhpcy5fbGF5ZXJzLmxlbmd0aDtpKyspbj10aGlzLl9sYXllcnNbaV0sdGhpcy5fYWRkSXRlbShuKSxlPWV8fG4ub3ZlcmxheSx0PXR8fCFuLm92ZXJsYXkscys9bi5vdmVybGF5PzA6MTtyZXR1cm4gdGhpcy5vcHRpb25zLmhpZGVTaW5nbGVCYXNlJiYodD10JiZzPjEsdGhpcy5fYmFzZUxheWVyc0xpc3Quc3R5bGUuZGlzcGxheT10PyIiOiJub25lIiksdGhpcy5fc2VwYXJhdG9yLnN0eWxlLmRpc3BsYXk9ZSYmdD8iIjoibm9uZSIsdGhpc30sX29uTGF5ZXJDaGFuZ2U6ZnVuY3Rpb24odCl7dGhpcy5faGFuZGxpbmdDbGlja3x8dGhpcy5fdXBkYXRlKCk7dmFyIGU9dGhpcy5fZ2V0TGF5ZXIoby5zdGFtcCh0LnRhcmdldCkpLGk9ZS5vdmVybGF5PyJhZGQiPT09dC50eXBlPyJvdmVybGF5YWRkIjoib3ZlcmxheXJlbW92ZSI6ImFkZCI9PT10LnR5cGU/ImJhc2VsYXllcmNoYW5nZSI6bnVsbDtpJiZ0aGlzLl9tYXAuZmlyZShpLGUpfSxfY3JlYXRlUmFkaW9FbGVtZW50OmZ1bmN0aW9uKHQsaSl7dmFyIG49JzxpbnB1dCB0eXBlPSJyYWRpbyIgY2xhc3M9ImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3IiIG5hbWU9IicrdCsnIicrKGk/JyBjaGVja2VkPSJjaGVja2VkIic6IiIpKyIvPiIsbz1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBvLmlubmVySFRNTD1uLG8uZmlyc3RDaGlsZH0sX2FkZEl0ZW06ZnVuY3Rpb24odCl7dmFyIGksbj1lLmNyZWF0ZUVsZW1lbnQoImxhYmVsIikscz10aGlzLl9tYXAuaGFzTGF5ZXIodC5sYXllcik7dC5vdmVybGF5PyhpPWUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxpLnR5cGU9ImNoZWNrYm94IixpLmNsYXNzTmFtZT0ibGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvciIsaS5kZWZhdWx0Q2hlY2tlZD1zKTppPXRoaXMuX2NyZWF0ZVJhZGlvRWxlbWVudCgibGVhZmxldC1iYXNlLWxheWVycyIscyksaS5sYXllcklkPW8uc3RhbXAodC5sYXllciksby5Eb21FdmVudC5vbihpLCJjbGljayIsdGhpcy5fb25JbnB1dENsaWNrLHRoaXMpO3ZhciByPWUuY3JlYXRlRWxlbWVudCgic3BhbiIpO3IuaW5uZXJIVE1MPSIgIit0Lm5hbWU7dmFyIGE9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKTtuLmFwcGVuZENoaWxkKGEpLGEuYXBwZW5kQ2hpbGQoaSksYS5hcHBlbmRDaGlsZChyKTt2YXIgaD10Lm92ZXJsYXk/dGhpcy5fb3ZlcmxheXNMaXN0OnRoaXMuX2Jhc2VMYXllcnNMaXN0O3JldHVybiBoLmFwcGVuZENoaWxkKG4pLHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMoKSxufSxfb25JbnB1dENsaWNrOmZ1bmN0aW9uKCl7dmFyIHQsZSxpLG49dGhpcy5fZm9ybS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKSxvPVtdLHM9W107dGhpcy5faGFuZGxpbmdDbGljaz0hMDtmb3IodmFyIHI9bi5sZW5ndGgtMTtyPj0wO3ItLSl0PW5bcl0sZT10aGlzLl9nZXRMYXllcih0LmxheWVySWQpLmxheWVyLGk9dGhpcy5fbWFwLmhhc0xheWVyKGUpLHQuY2hlY2tlZCYmIWk/by5wdXNoKGUpOiF0LmNoZWNrZWQmJmkmJnMucHVzaChlKTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXRoaXMuX21hcC5yZW1vdmVMYXllcihzW3JdKTtmb3Iocj0wO3I8by5sZW5ndGg7cisrKXRoaXMuX21hcC5hZGRMYXllcihvW3JdKTt0aGlzLl9oYW5kbGluZ0NsaWNrPSExLHRoaXMuX3JlZm9jdXNPbk1hcCgpfSxfY2hlY2tEaXNhYmxlZExheWVyczpmdW5jdGlvbigpe2Zvcih2YXIgdCxlLG49dGhpcy5fZm9ybS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKSxvPXRoaXMuX21hcC5nZXRab29tKCkscz1uLmxlbmd0aC0xO3M+PTA7cy0tKXQ9bltzXSxlPXRoaXMuX2dldExheWVyKHQubGF5ZXJJZCkubGF5ZXIsdC5kaXNhYmxlZD1lLm9wdGlvbnMubWluWm9vbSE9PWkmJm88ZS5vcHRpb25zLm1pblpvb218fGUub3B0aW9ucy5tYXhab29tIT09aSYmbz5lLm9wdGlvbnMubWF4Wm9vbX0sX2V4cGFuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmV4cGFuZCgpfSxfY29sbGFwc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2xsYXBzZSgpfX0pLG8uY29udHJvbC5sYXllcnM9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBuZXcgby5Db250cm9sLkxheWVycyh0LGUsaSl9fSh3aW5kb3csZG9jdW1lbnQpOw=="></script>
<link href="data:text/css;charset=utf-8,%0Aimg%2Eleaflet%2Dtile%20%7B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0Aborder%2Dradius%3A%200%3B%0Aborder%3A%20none%3B%0A%7D%0A%2Einfo%20%7B%0Apadding%3A%206px%208px%3B%0Afont%3A%2014px%2F16px%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0Abackground%3A%20white%3B%0Abackground%3A%20rgba%28255%2C255%2C255%2C0%2E8%29%3B%0Abox%2Dshadow%3A%200%200%2015px%20rgba%280%2C0%2C0%2C0%2E2%29%3B%0Aborder%2Dradius%3A%205px%3B%0A%7D%0A%2Elegend%20%7B%0Aline%2Dheight%3A%2018px%3B%0Acolor%3A%20%23555%3B%0A%7D%0A%2Elegend%20svg%20text%20%7B%0Afill%3A%20%23555%3B%0A%7D%0A%2Elegend%20svg%20line%20%7B%0Astroke%3A%20%23555%3B%0A%7D%0A%2Elegend%20i%20%7B%0Awidth%3A%2018px%3B%0Aheight%3A%2018px%3B%0Afloat%3A%20left%3B%0Amargin%2Dright%3A%208px%3B%0Aopacity%3A%200%2E7%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,IWZ1bmN0aW9uKGEpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyltb2R1bGUuZXhwb3J0cz1hKCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShhKTtlbHNle3ZhciBiOyJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P2I9d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2I9Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZiYmKGI9c2VsZiksYi5wcm9qND1hKCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBhKGIsYyxkKXtmdW5jdGlvbiBlKGcsaCl7aWYoIWNbZ10pe2lmKCFiW2ddKXt2YXIgaT0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighaCYmaSlyZXR1cm4gaShnLCEwKTtpZihmKXJldHVybiBmKGcsITApO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2crIiciKX12YXIgaj1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoai5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoYz9jOmEpfSxqLGouZXhwb3J0cyxhLGIsYyxkKX1yZXR1cm4gY1tnXS5leHBvcnRzfWZvcih2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxnPTA7ZzxkLmxlbmd0aDtnKyspZShkW2ddKTtyZXR1cm4gZX0oezE6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBQb2ludChhLGIsYyl7aWYoISh0aGlzIGluc3RhbmNlb2YgUG9pbnQpKXJldHVybiBuZXcgUG9pbnQoYSxiLGMpO2lmKEFycmF5LmlzQXJyYXkoYSkpdGhpcy54PWFbMF0sdGhpcy55PWFbMV0sdGhpcy56PWFbMl18fDA7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGEpdGhpcy54PWEueCx0aGlzLnk9YS55LHRoaXMuej1hLnp8fDA7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGEmJiJ1bmRlZmluZWQiPT10eXBlb2YgYil7dmFyIGQ9YS5zcGxpdCgiLCIpO3RoaXMueD1wYXJzZUZsb2F0KGRbMF0sMTApLHRoaXMueT1wYXJzZUZsb2F0KGRbMV0sMTApLHRoaXMuej1wYXJzZUZsb2F0KGRbMl0sMTApfHwwfWVsc2UgdGhpcy54PWEsdGhpcy55PWIsdGhpcy56PWN8fDA7Y29uc29sZS53YXJuKCJwcm9qNC5Qb2ludCB3aWxsIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiAzLCB1c2UgcHJvajQudG9Qb2ludCIpfXZhciBkPWEoIm1ncnMiKTtQb2ludC5mcm9tTUdSUz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IFBvaW50KGQudG9Qb2ludChhKSl9LFBvaW50LnByb3RvdHlwZS50b01HUlM9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuZm9yd2FyZChbdGhpcy54LHRoaXMueV0sYSl9LGIuZXhwb3J0cz1Qb2ludH0se21ncnM6Njd9XSwyOltmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gUHJvamVjdGlvbihhLGIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFByb2plY3Rpb24pKXJldHVybiBuZXcgUHJvamVjdGlvbihhKTtiPWJ8fGZ1bmN0aW9uKGEpe2lmKGEpdGhyb3cgYX07dmFyIGM9ZChhKTtpZigib2JqZWN0IiE9dHlwZW9mIGMpcmV0dXJuIHZvaWQgYihhKTt2YXIgZj1nKGMpLGg9UHJvamVjdGlvbi5wcm9qZWN0aW9ucy5nZXQoZi5wcm9qTmFtZSk7aD8oZSh0aGlzLGYpLGUodGhpcyxoKSx0aGlzLmluaXQoKSxiKG51bGwsdGhpcykpOmIoYSl9dmFyIGQ9YSgiLi9wYXJzZUNvZGUiKSxlPWEoIi4vZXh0ZW5kIiksZj1hKCIuL3Byb2plY3Rpb25zIiksZz1hKCIuL2Rlcml2ZUNvbnN0YW50cyIpO1Byb2plY3Rpb24ucHJvamVjdGlvbnM9ZixQcm9qZWN0aW9uLnByb2plY3Rpb25zLnN0YXJ0KCksYi5leHBvcnRzPVByb2plY3Rpb259LHsiLi9kZXJpdmVDb25zdGFudHMiOjMzLCIuL2V4dGVuZCI6MzQsIi4vcGFyc2VDb2RlIjozNywiLi9wcm9qZWN0aW9ucyI6Mzl9XSwzOltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZz1jLngsaD1jLnksaT1jLnp8fDA7Zm9yKGY9MDszPmY7ZisrKWlmKCFifHwyIT09Znx8dm9pZCAwIT09Yy56KXN3aXRjaCgwPT09Zj8oZD1nLGU9IngiKToxPT09Zj8oZD1oLGU9InkiKTooZD1pLGU9InoiKSxhLmF4aXNbZl0pe2Nhc2UiZSI6Y1tlXT1kO2JyZWFrO2Nhc2UidyI6Y1tlXT0tZDticmVhaztjYXNlIm4iOmNbZV09ZDticmVhaztjYXNlInMiOmNbZV09LWQ7YnJlYWs7Y2FzZSJ1Ijp2b2lkIDAhPT1jW2VdJiYoYy56PWQpO2JyZWFrO2Nhc2UiZCI6dm9pZCAwIT09Y1tlXSYmKGMuej0tZCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gY319LHt9XSw0OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9TWF0aC5QSS8yLGU9YSgiLi9zaWduIik7Yi5leHBvcnRzPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLmFicyhhKTxkP2E6YS1lKGEpKk1hdGguUEl9fSx7Ii4vc2lnbiI6MjF9XSw1OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MipNYXRoLlBJLGU9My4xNDE1OTI2NTM1OSxmPWEoIi4vc2lnbiIpO2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5hYnMoYSk8PWU/YTphLWYoYSkqZH19LHsiLi9zaWduIjoyMX1dLDY6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguYWJzKGEpPjEmJihhPWE+MT8xOi0xKSxNYXRoLmFzaW4oYSl9fSx7fV0sNzpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gMS0uMjUqYSooMSthLzE2KigzKzEuMjUqYSkpfX0se31dLDg6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSl7cmV0dXJuLjM3NSphKigxKy4yNSphKigxKy40Njg3NSphKSl9fSx7fV0sOTpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4uMDU4NTkzNzUqYSphKigxKy43NSphKX19LHt9XSwxMDpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gYSphKmEqKDM1LzMwNzIpfX0se31dLDExOltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1iKmM7cmV0dXJuIGEvTWF0aC5zcXJ0KDEtZCpkKX19LHt9XSwxMjpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7Zj1hL2I7Zm9yKHZhciBoPTA7MTU+aDtoKyspaWYoZz0oYS0oYipmLWMqTWF0aC5zaW4oMipmKStkKk1hdGguc2luKDQqZiktZSpNYXRoLnNpbig2KmYpKSkvKGItMipjKk1hdGguY29zKDIqZikrNCpkKk1hdGguY29zKDQqZiktNiplKk1hdGguY29zKDYqZikpLGYrPWcsTWF0aC5hYnMoZyk8PTFlLTEwKXJldHVybiBmO3JldHVybiBOYU59fSx7fV0sMTM6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLlBJLzI7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYil7dmFyIGM9MS0oMS1hKmEpLygyKmEpKk1hdGgubG9nKCgxLWEpLygxK2EpKTtpZihNYXRoLmFicyhNYXRoLmFicyhiKS1jKTwxZS02KXJldHVybiAwPmI/LTEqZDpkO2Zvcih2YXIgZSxmLGcsaCxpPU1hdGguYXNpbiguNSpiKSxqPTA7MzA+ajtqKyspaWYoZj1NYXRoLnNpbihpKSxnPU1hdGguY29zKGkpLGg9YSpmLGU9TWF0aC5wb3coMS1oKmgsMikvKDIqZykqKGIvKDEtYSphKS1mLygxLWgqaCkrLjUvYSpNYXRoLmxvZygoMS1oKS8oMStoKSkpLGkrPWUsTWF0aC5hYnMoZSk8PTFlLTEwKXJldHVybiBpO3JldHVybiBOYU59fSx7fV0sMTQ6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiLGMsZCxlKXtyZXR1cm4gYSplLWIqTWF0aC5zaW4oMiplKStjKk1hdGguc2luKDQqZSktZCpNYXRoLnNpbig2KmUpfX0se31dLDE1OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hKmI7cmV0dXJuIGMvTWF0aC5zcXJ0KDEtZCpkKX19LHt9XSwxNjpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPU1hdGguUEkvMjtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZSxmPS41KmEsZz1kLTIqTWF0aC5hdGFuKGIpLGg9MDsxNT49aDtoKyspaWYoYz1hKk1hdGguc2luKGcpLGU9ZC0yKk1hdGguYXRhbihiKk1hdGgucG93KCgxLWMpLygxK2MpLGYpKS1nLGcrPWUsTWF0aC5hYnMoZSk8PTFlLTEwKXJldHVybiBnO3JldHVybi05OTk5fX0se31dLDE3OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MSxlPS4yNSxmPS4wNDY4NzUsZz0uMDE5NTMxMjUsaD0uMDEwNjgxMTUyMzQzNzUsaT0uNzUsaj0uNDY4NzUsaz0uMDEzMDIwODMzMzMzMzMzMzM0LGw9LjAwNzEyMDc2ODIyOTE2NjY2NyxtPS4zNjQ1ODMzMzMzMzMzMzMzLG49LjAwNTY5NjYxNDU4MzMzMzMzMyxvPS4zMDc2MTcxODc1O2IuZXhwb3J0cz1mdW5jdGlvbihhKXt2YXIgYj1bXTtiWzBdPWQtYSooZSthKihmK2EqKGcrYSpoKSkpLGJbMV09YSooaS1hKihmK2EqKGcrYSpoKSkpO3ZhciBjPWEqYTtyZXR1cm4gYlsyXT1jKihqLWEqKGsrYSpsKSksYyo9YSxiWzNdPWMqKG0tYSpuKSxiWzRdPWMqYSpvLGJ9fSx7fV0sMTg6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuL3BqX21sZm4iKSxlPTFlLTEwLGY9MjA7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGc9MS8oMS1iKSxoPWEsaT1mO2k7LS1pKXt2YXIgaj1NYXRoLnNpbihoKSxrPTEtYipqKmo7aWYoaz0oZChoLGosTWF0aC5jb3MoaCksYyktYSkqKGsqTWF0aC5zcXJ0KGspKSpnLGgtPWssTWF0aC5hYnMoayk8ZSlyZXR1cm4gaH1yZXR1cm4gaH19LHsiLi9wal9tbGZuIjoxOX1dLDE5OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjKj1iLGIqPWIsZFswXSphLWMqKGRbMV0rYiooZFsyXStiKihkWzNdK2IqZFs0XSkpKX19LHt9XSwyMDpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhLGIpe3ZhciBjO3JldHVybiBhPjFlLTc/KGM9YSpiLCgxLWEqYSkqKGIvKDEtYypjKS0uNS9hKk1hdGgubG9nKCgxLWMpLygxK2MpKSkpOjIqYn19LHt9XSwyMTpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gMD5hPy0xOjF9fSx7fV0sMjI6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTWF0aC5wb3coKDEtYSkvKDErYSksYil9fSx7fV0sMjM6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSl7dmFyIGI9e3g6YVswXSx5OmFbMV19O3JldHVybiBhLmxlbmd0aD4yJiYoYi56PWFbMl0pLGEubGVuZ3RoPjMmJihiLm09YVszXSksYn19LHt9XSwyNDpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPU1hdGguUEkvMjtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPWEqYyxmPS41KmE7cmV0dXJuIGU9TWF0aC5wb3coKDEtZSkvKDErZSksZiksTWF0aC50YW4oLjUqKGQtYikpL2V9fSx7fV0sMjU6W2Z1bmN0aW9uKGEsYixjKXtjLndnczg0PXt0b3dnczg0OiIwLDAsMCIsZWxsaXBzZToiV0dTODQiLGRhdHVtTmFtZToiV0dTODQifSxjLmNoMTkwMz17dG93Z3M4NDoiNjc0LjM3NCwxNS4wNTYsNDA1LjM0NiIsZWxsaXBzZToiYmVzc2VsIixkYXR1bU5hbWU6InN3aXNzIn0sYy5nZ3JzODc9e3Rvd2dzODQ6Ii0xOTkuODcsNzQuNzksMjQ2LjYyIixlbGxpcHNlOiJHUlM4MCIsZGF0dW1OYW1lOiJHcmVla19HZW9kZXRpY19SZWZlcmVuY2VfU3lzdGVtXzE5ODcifSxjLm5hZDgzPXt0b3dnczg0OiIwLDAsMCIsZWxsaXBzZToiR1JTODAiLGRhdHVtTmFtZToiTm9ydGhfQW1lcmljYW5fRGF0dW1fMTk4MyJ9LGMubmFkMjc9e25hZGdyaWRzOiJAY29udXMsQGFsYXNrYSxAbnR2Ml8wLmdzYixAbnR2MV9jYW4uZGF0IixlbGxpcHNlOiJjbHJrNjYiLGRhdHVtTmFtZToiTm9ydGhfQW1lcmljYW5fRGF0dW1fMTkyNyJ9LGMucG90c2RhbT17dG93Z3M4NDoiNjA2LjAsMjMuMCw0MTMuMCIsZWxsaXBzZToiYmVzc2VsIixkYXR1bU5hbWU6IlBvdHNkYW0gUmF1ZW5iZXJnIDE5NTAgREhETiJ9LGMuY2FydGhhZ2U9e3Rvd2dzODQ6Ii0yNjMuMCw2LjAsNDMxLjAiLGVsbGlwc2U6ImNsYXJrODAiLGRhdHVtTmFtZToiQ2FydGhhZ2UgMTkzNCBUdW5pc2lhIn0sYy5oZXJtYW5uc2tvZ2VsPXt0b3dnczg0OiI2NTMuMCwtMjEyLjAsNDQ5LjAiLGVsbGlwc2U6ImJlc3NlbCIsZGF0dW1OYW1lOiJIZXJtYW5uc2tvZ2VsIn0sYy5pcmU2NT17dG93Z3M4NDoiNDgyLjUzMCwtMTMwLjU5Niw1NjQuNTU3LC0xLjA0MiwtMC4yMTQsLTAuNjMxLDguMTUiLGVsbGlwc2U6Im1vZF9haXJ5IixkYXR1bU5hbWU6IklyZWxhbmQgMTk2NSJ9LGMucmFzc2FkaXJhbj17dG93Z3M4NDoiLTEzMy42MywtMTU3LjUsLTE1OC42MiIsZWxsaXBzZToiaW50bCIsZGF0dW1OYW1lOiJSYXNzYWRpcmFuIn0sYy5uemdkNDk9e3Rvd2dzODQ6IjU5LjQ3LC01LjA0LDE4Ny40NCwwLjQ3LC0wLjEsMS4wMjQsLTQuNTk5MyIsZWxsaXBzZToiaW50bCIsZGF0dW1OYW1lOiJOZXcgWmVhbGFuZCBHZW9kZXRpYyBEYXR1bSAxOTQ5In0sYy5vc2diMzY9e3Rvd2dzODQ6IjQ0Ni40NDgsLTEyNS4xNTcsNTQyLjA2MCwwLjE1MDIsMC4yNDcwLDAuODQyMSwtMjAuNDg5NCIsZWxsaXBzZToiYWlyeSIsZGF0dW1OYW1lOiJBaXJ5IDE4MzAifSxjLnNfanRzaz17dG93Z3M4NDoiNTg5LDc2LDQ4MCIsZWxsaXBzZToiYmVzc2VsIixkYXR1bU5hbWU6IlMtSlRTSyAoRmVycm8pIn0sYy5iZWR1YXJhbT17dG93Z3M4NDoiLTEwNiwtODcsMTg4IixlbGxpcHNlOiJjbHJrODAiLGRhdHVtTmFtZToiQmVkdWFyYW0ifSxjLmd1bnVuZ19zZWdhcmE9e3Rvd2dzODQ6Ii00MDMsNjg0LDQxIixlbGxpcHNlOiJiZXNzZWwiLGRhdHVtTmFtZToiR3VudW5nIFNlZ2FyYSBKYWthcnRhIn0sYy5ybmI3Mj17dG93Z3M4NDoiMTA2Ljg2OSwtNTIuMjk3OCwxMDMuNzI0LC0wLjMzNjU3LDAuNDU2OTU1LC0xLjg0MjE4LDEiLGVsbGlwc2U6ImludGwiLGRhdHVtTmFtZToiUmVzZWF1IE5hdGlvbmFsIEJlbGdlIDE5NzIifX0se31dLDI2OltmdW5jdGlvbihhLGIsYyl7Yy5NRVJJVD17YTo2Mzc4MTM3LHJmOjI5OC4yNTcsZWxsaXBzZU5hbWU6Ik1FUklUIDE5ODMifSxjLlNHUzg1PXthOjYzNzgxMzYscmY6Mjk4LjI1NyxlbGxpcHNlTmFtZToiU292aWV0IEdlb2RldGljIFN5c3RlbSA4NSJ9LGMuR1JTODA9e2E6NjM3ODEzNyxyZjoyOTguMjU3MjIyMTAxLGVsbGlwc2VOYW1lOiJHUlMgMTk4MChJVUdHLCAxOTgwKSJ9LGMuSUFVNzY9e2E6NjM3ODE0MCxyZjoyOTguMjU3LGVsbGlwc2VOYW1lOiJJQVUgMTk3NiJ9LGMuYWlyeT17YTo2Mzc3NTYzLjM5NixiOjYzNTYyNTYuOTEsZWxsaXBzZU5hbWU6IkFpcnkgMTgzMCJ9LGMuQVBMND17YTo2Mzc4MTM3LHJmOjI5OC4yNSxlbGxpcHNlTmFtZToiQXBwbC4gUGh5c2ljcy4gMTk2NSJ9LGMuTldMOUQ9e2E6NjM3ODE0NSxyZjoyOTguMjUsZWxsaXBzZU5hbWU6Ik5hdmFsIFdlYXBvbnMgTGFiLiwgMTk2NSJ9LGMubW9kX2Fpcnk9e2E6NjM3NzM0MC4xODksYjo2MzU2MDM0LjQ0NixlbGxpcHNlTmFtZToiTW9kaWZpZWQgQWlyeSJ9LGMuYW5kcmFlPXthOjYzNzcxMDQuNDMscmY6MzAwLGVsbGlwc2VOYW1lOiJBbmRyYWUgMTg3NiAoRGVuLiwgSWNsbmQuKSJ9LGMuYXVzdF9TQT17YTo2Mzc4MTYwLHJmOjI5OC4yNSxlbGxpcHNlTmFtZToiQXVzdHJhbGlhbiBOYXRsICYgUy4gQW1lci4gMTk2OSJ9LGMuR1JTNjc9e2E6NjM3ODE2MCxyZjoyOTguMjQ3MTY3NDI3LGVsbGlwc2VOYW1lOiJHUlMgNjcoSVVHRyAxOTY3KSJ9LGMuYmVzc2VsPXthOjYzNzczOTcuMTU1LHJmOjI5OS4xNTI4MTI4LGVsbGlwc2VOYW1lOiJCZXNzZWwgMTg0MSJ9LGMuYmVzc19uYW09e2E6NjM3NzQ4My44NjUscmY6Mjk5LjE1MjgxMjgsZWxsaXBzZU5hbWU6IkJlc3NlbCAxODQxIChOYW1pYmlhKSJ9LGMuY2xyazY2PXthOjYzNzgyMDYuNCxiOjYzNTY1ODMuOCxlbGxpcHNlTmFtZToiQ2xhcmtlIDE4NjYifSxjLmNscms4MD17YTo2Mzc4MjQ5LjE0NSxyZjoyOTMuNDY2MyxlbGxpcHNlTmFtZToiQ2xhcmtlIDE4ODAgbW9kLiJ9LGMuY2xyazU4PXthOjYzNzgyOTMuNjQ1MjA4NzU5LHJmOjI5NC4yNjA2NzYzNjkyNjU0LGVsbGlwc2VOYW1lOiJDbGFya2UgMTg1OCJ9LGMuQ1BNPXthOjYzNzU3MzguNyxyZjozMzQuMjksZWxsaXBzZU5hbWU6IkNvbW0uIGRlcyBQb2lkcyBldCBNZXN1cmVzIDE3OTkifSxjLmRlbG1icj17YTo2Mzc2NDI4LHJmOjMxMS41LGVsbGlwc2VOYW1lOiJEZWxhbWJyZSAxODEwIChCZWxnaXVtKSJ9LGMuZW5nZWxpcz17YTo2Mzc4MTM2LjA1LHJmOjI5OC4yNTY2LGVsbGlwc2VOYW1lOiJFbmdlbGlzIDE5ODUifSxjLmV2cnN0MzA9e2E6NjM3NzI3Ni4zNDUscmY6MzAwLjgwMTcsZWxsaXBzZU5hbWU6IkV2ZXJlc3QgMTgzMCJ9LGMuZXZyc3Q0OD17YTo2Mzc3MzA0LjA2MyxyZjozMDAuODAxNyxlbGxpcHNlTmFtZToiRXZlcmVzdCAxOTQ4In0sYy5ldnJzdDU2PXthOjYzNzczMDEuMjQzLHJmOjMwMC44MDE3LGVsbGlwc2VOYW1lOiJFdmVyZXN0IDE5NTYifSxjLmV2cnN0Njk9e2E6NjM3NzI5NS42NjQscmY6MzAwLjgwMTcsZWxsaXBzZU5hbWU6IkV2ZXJlc3QgMTk2OSJ9LGMuZXZyc3RTUz17YTo2Mzc3Mjk4LjU1NixyZjozMDAuODAxNyxlbGxpcHNlTmFtZToiRXZlcmVzdCAoU2FiYWggJiBTYXJhd2FrKSJ9LGMuZnNjaHI2MD17YTo2Mzc4MTY2LHJmOjI5OC4zLGVsbGlwc2VOYW1lOiJGaXNjaGVyIChNZXJjdXJ5IERhdHVtKSAxOTYwIn0sYy5mc2NocjYwbT17YTo2Mzc4MTU1LHJmOjI5OC4zLGVsbGlwc2VOYW1lOiJGaXNjaGVyIDE5NjAifSxjLmZzY2hyNjg9e2E6NjM3ODE1MCxyZjoyOTguMyxlbGxpcHNlTmFtZToiRmlzY2hlciAxOTY4In0sYy5oZWxtZXJ0PXthOjYzNzgyMDAscmY6Mjk4LjMsZWxsaXBzZU5hbWU6IkhlbG1lcnQgMTkwNiJ9LGMuaG91Z2g9e2E6NjM3ODI3MCxyZjoyOTcsZWxsaXBzZU5hbWU6IkhvdWdoIn0sYy5pbnRsPXthOjYzNzgzODgscmY6Mjk3LGVsbGlwc2VOYW1lOiJJbnRlcm5hdGlvbmFsIDE5MDkgKEhheWZvcmQpIn0sYy5rYXVsYT17YTo2Mzc4MTYzLHJmOjI5OC4yNCxlbGxpcHNlTmFtZToiS2F1bGEgMTk2MSJ9LGMubGVyY2g9e2E6NjM3ODEzOSxyZjoyOTguMjU3LGVsbGlwc2VOYW1lOiJMZXJjaCAxOTc5In0sYy5tcHJ0cz17YTo2Mzk3MzAwLHJmOjE5MSxlbGxpcHNlTmFtZToiTWF1cGVydGl1cyAxNzM4In0sYy5uZXdfaW50bD17YTo2Mzc4MTU3LjUsYjo2MzU2NzcyLjIsZWxsaXBzZU5hbWU6Ik5ldyBJbnRlcm5hdGlvbmFsIDE5NjcifSxjLnBsZXNzaXM9e2E6NjM3NjUyMyxyZjo2MzU1ODYzLGVsbGlwc2VOYW1lOiJQbGVzc2lzIDE4MTcgKEZyYW5jZSkifSxjLmtyYXNzPXthOjYzNzgyNDUscmY6Mjk4LjMsZWxsaXBzZU5hbWU6IktyYXNzb3Zza3ksIDE5NDIifSxjLlNFYXNpYT17YTo2Mzc4MTU1LGI6NjM1Njc3My4zMjA1LGVsbGlwc2VOYW1lOiJTb3V0aGVhc3QgQXNpYSJ9LGMud2FsYmVjaz17YTo2Mzc2ODk2LGI6NjM1NTgzNC44NDY3LGVsbGlwc2VOYW1lOiJXYWxiZWNrIn0sYy5XR1M2MD17YTo2Mzc4MTY1LHJmOjI5OC4zLGVsbGlwc2VOYW1lOiJXR1MgNjAifSxjLldHUzY2PXthOjYzNzgxNDUscmY6Mjk4LjI1LGVsbGlwc2VOYW1lOiJXR1MgNjYifSxjLldHUzc9e2E6NjM3ODEzNSxyZjoyOTguMjYsZWxsaXBzZU5hbWU6IldHUyA3MiJ9LGMuV0dTODQ9e2E6NjM3ODEzNyxyZjoyOTguMjU3MjIzNTYzLGVsbGlwc2VOYW1lOiJXR1MgODQifSxjLnNwaGVyZT17YTo2MzcwOTk3LGI6NjM3MDk5NyxlbGxpcHNlTmFtZToiTm9ybWFsIFNwaGVyZSAocj02MzcwOTk3KSJ9fSx7fV0sMjc6W2Z1bmN0aW9uKGEsYixjKXtjLmdyZWVud2ljaD0wLGMubGlzYm9uPS05LjEzMTkwNjExMTExMSxjLnBhcmlzPTIuMzM3MjI5MTY2NjY3LGMuYm9nb3RhPS03NC4wODA5MTY2NjY2NjcsYy5tYWRyaWQ9LTMuNjg3OTM4ODg4ODg5LGMucm9tZT0xMi40NTIzMzMzMzMzMzMsYy5iZXJuPTcuNDM5NTgzMzMzMzMzLGMuamFrYXJ0YT0xMDYuODA3NzE5NDQ0NDQ0LGMuZmVycm89LTE3LjY2NjY2NjY2NjY2NyxjLmJydXNzZWxzPTQuMzY3OTc1LGMuc3RvY2tob2xtPTE4LjA1ODI3Nzc3Nzc3OCxjLmF0aGVucz0yMy43MTYzMzc1LGMub3Nsbz0xMC43MjI5MTY2NjY2Njd9LHt9XSwyODpbZnVuY3Rpb24oYSxiLGMpe2MuZnQ9e3RvX21ldGVyOi4zMDQ4fSxjWyJ1cy1mdCJdPXt0b19tZXRlcjoxMjAwLzM5Mzd9fSx7fV0sMjk6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYixjKXt2YXIgZDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT8oZD1nKGEsYixjKSwzPT09Yy5sZW5ndGg/W2QueCxkLnksZC56XTpbZC54LGQueV0pOmcoYSxiLGMpfWZ1bmN0aW9uIGUoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBmP2E6YS5vUHJvaj9hLm9Qcm9qOmYoYSl9ZnVuY3Rpb24gcHJvajQoYSxiLGMpe2E9ZShhKTt2YXIgZixnPSExO3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgYj8oYj1hLGE9aCxnPSEwKTooInVuZGVmaW5lZCIhPXR5cGVvZiBiLnh8fEFycmF5LmlzQXJyYXkoYikpJiYoYz1iLGI9YSxhPWgsZz0hMCksYj1lKGIpLGM/ZChhLGIsYyk6KGY9e2ZvcndhcmQ6ZnVuY3Rpb24oYyl7cmV0dXJuIGQoYSxiLGMpfSxpbnZlcnNlOmZ1bmN0aW9uKGMpe3JldHVybiBkKGIsYSxjKX19LGcmJihmLm9Qcm9qPWIpLGYpfXZhciBmPWEoIi4vUHJvaiIpLGc9YSgiLi90cmFuc2Zvcm0iKSxoPWYoIldHUzg0Iik7Yi5leHBvcnRzPXByb2o0fSx7Ii4vUHJvaiI6MiwiLi90cmFuc2Zvcm0iOjY1fV0sMzA6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLlBJLzIsZT0xLGY9MixnPTMsaD00LGk9NSxqPTQ4NDgxMzY4MTEwOTUzNmUtMjAsaz0xLjAwMjYsbD0uMzgyNjgzNDMyMzY1MDg5OCxtPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbT8odGhpcy5kYXR1bV90eXBlPWgsdm9pZChhJiYoYS5kYXR1bUNvZGUmJiJub25lIj09PWEuZGF0dW1Db2RlJiYodGhpcy5kYXR1bV90eXBlPWkpLGEuZGF0dW1fcGFyYW1zJiYodGhpcy5kYXR1bV9wYXJhbXM9YS5kYXR1bV9wYXJhbXMubWFwKHBhcnNlRmxvYXQpLCgwIT09dGhpcy5kYXR1bV9wYXJhbXNbMF18fDAhPT10aGlzLmRhdHVtX3BhcmFtc1sxXXx8MCE9PXRoaXMuZGF0dW1fcGFyYW1zWzJdKSYmKHRoaXMuZGF0dW1fdHlwZT1lKSx0aGlzLmRhdHVtX3BhcmFtcy5sZW5ndGg+MyYmKDAhPT10aGlzLmRhdHVtX3BhcmFtc1szXXx8MCE9PXRoaXMuZGF0dW1fcGFyYW1zWzRdfHwwIT09dGhpcy5kYXR1bV9wYXJhbXNbNV18fDAhPT10aGlzLmRhdHVtX3BhcmFtc1s2XSkmJih0aGlzLmRhdHVtX3R5cGU9Zix0aGlzLmRhdHVtX3BhcmFtc1szXSo9aix0aGlzLmRhdHVtX3BhcmFtc1s0XSo9aix0aGlzLmRhdHVtX3BhcmFtc1s1XSo9aix0aGlzLmRhdHVtX3BhcmFtc1s2XT10aGlzLmRhdHVtX3BhcmFtc1s2XS8xZTYrMSkpLHRoaXMuZGF0dW1fdHlwZT1hLmdyaWRzP2c6dGhpcy5kYXR1bV90eXBlLHRoaXMuYT1hLmEsdGhpcy5iPWEuYix0aGlzLmVzPWEuZXMsdGhpcy5lcDI9YS5lcDIsdGhpcy5kYXR1bV90eXBlPT09ZyYmKHRoaXMuZ3JpZHM9YS5ncmlkcykpKSk6bmV3IG0oYSl9O20ucHJvdG90eXBlPXtjb21wYXJlX2RhdHVtczpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXR1bV90eXBlIT09YS5kYXR1bV90eXBlPyExOnRoaXMuYSE9PWEuYXx8TWF0aC5hYnModGhpcy5lcy1hLmVzKT41ZS0xMT8hMTp0aGlzLmRhdHVtX3R5cGU9PT1lP3RoaXMuZGF0dW1fcGFyYW1zWzBdPT09YS5kYXR1bV9wYXJhbXNbMF0mJnRoaXMuZGF0dW1fcGFyYW1zWzFdPT09YS5kYXR1bV9wYXJhbXNbMV0mJnRoaXMuZGF0dW1fcGFyYW1zWzJdPT09YS5kYXR1bV9wYXJhbXNbMl06dGhpcy5kYXR1bV90eXBlPT09Zj90aGlzLmRhdHVtX3BhcmFtc1swXT09PWEuZGF0dW1fcGFyYW1zWzBdJiZ0aGlzLmRhdHVtX3BhcmFtc1sxXT09PWEuZGF0dW1fcGFyYW1zWzFdJiZ0aGlzLmRhdHVtX3BhcmFtc1syXT09PWEuZGF0dW1fcGFyYW1zWzJdJiZ0aGlzLmRhdHVtX3BhcmFtc1szXT09PWEuZGF0dW1fcGFyYW1zWzNdJiZ0aGlzLmRhdHVtX3BhcmFtc1s0XT09PWEuZGF0dW1fcGFyYW1zWzRdJiZ0aGlzLmRhdHVtX3BhcmFtc1s1XT09PWEuZGF0dW1fcGFyYW1zWzVdJiZ0aGlzLmRhdHVtX3BhcmFtc1s2XT09PWEuZGF0dW1fcGFyYW1zWzZdOnRoaXMuZGF0dW1fdHlwZT09PWd8fGEuZGF0dW1fdHlwZT09PWc/dGhpcy5uYWRncmlkcz09PWEubmFkZ3JpZHM6ITB9LGdlb2RldGljX3RvX2dlb2NlbnRyaWM6ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGYsZyxoLGksaj1hLngsaz1hLnksbD1hLno/YS56OjAsbT0wO2lmKC1kPmsmJms+LTEuMDAxKmQpaz0tZDtlbHNlIGlmKGs+ZCYmMS4wMDEqZD5rKWs9ZDtlbHNlIGlmKC1kPmt8fGs+ZClyZXR1cm4gbnVsbDtyZXR1cm4gaj5NYXRoLlBJJiYoai09MipNYXRoLlBJKSxnPU1hdGguc2luKGspLGk9TWF0aC5jb3MoayksaD1nKmcsZj10aGlzLmEvTWF0aC5zcXJ0KDEtdGhpcy5lcypoKSxiPShmK2wpKmkqTWF0aC5jb3MoaiksYz0oZitsKSppKk1hdGguc2luKGopLGU9KGYqKDEtdGhpcy5lcykrbCkqZyxhLng9YixhLnk9YyxhLno9ZSxtfSxnZW9jZW50cmljX3RvX2dlb2RldGljOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdD0xZS0xMix1PXQqdCx2PTMwLHc9YS54LHg9YS55LHk9YS56P2EuejowO2lmKG89ITEsYj1NYXRoLnNxcnQodyp3K3gqeCksYz1NYXRoLnNxcnQodyp3K3gqeCt5KnkpLGIvdGhpcy5hPHQpe2lmKG89ITAscT0wLGMvdGhpcy5hPHQpcmV0dXJuIHI9ZCx2b2lkKHM9LXRoaXMuYil9ZWxzZSBxPU1hdGguYXRhbjIoeCx3KTtlPXkvYyxmPWIvYyxnPTEvTWF0aC5zcXJ0KDEtdGhpcy5lcyooMi10aGlzLmVzKSpmKmYpLGo9ZiooMS10aGlzLmVzKSpnLGs9ZSpnLHA9MDtkbyBwKyssaT10aGlzLmEvTWF0aC5zcXJ0KDEtdGhpcy5lcyprKmspLHM9YipqK3kqay1pKigxLXRoaXMuZXMqayprKSxoPXRoaXMuZXMqaS8oaStzKSxnPTEvTWF0aC5zcXJ0KDEtaCooMi1oKSpmKmYpLGw9ZiooMS1oKSpnLG09ZSpnLG49bSpqLWwqayxqPWwsaz1tO3doaWxlKG4qbj51JiZ2PnApO3JldHVybiByPU1hdGguYXRhbihtL01hdGguYWJzKGwpKSxhLng9cSxhLnk9cixhLno9cyxhfSxnZW9jZW50cmljX3RvX2dlb2RldGljX25vbml0ZXI6ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGYsZyxoLGksaixtLG4sbyxwLHEscixzLHQsdSx2PWEueCx3PWEueSx4PWEuej9hLno6MDtpZih2PXBhcnNlRmxvYXQodiksdz1wYXJzZUZsb2F0KHcpLHg9cGFyc2VGbG9hdCh4KSx1PSExLDAhPT12KWI9TWF0aC5hdGFuMih3LHYpO2Vsc2UgaWYodz4wKWI9ZDtlbHNlIGlmKDA+dyliPS1kO2Vsc2UgaWYodT0hMCxiPTAseD4wKWM9ZDtlbHNle2lmKCEoMD54KSlyZXR1cm4gYz1kLHZvaWQoZT0tdGhpcy5iKTtjPS1kfXJldHVybiBnPXYqdit3KncsZj1NYXRoLnNxcnQoZyksaD14Kmssaj1NYXRoLnNxcnQoaCpoK2cpLG49aC9qLHA9Zi9qLG89bipuKm4saT14K3RoaXMuYip0aGlzLmVwMipvLHQ9Zi10aGlzLmEqdGhpcy5lcypwKnAqcCxtPU1hdGguc3FydChpKmkrdCp0KSxxPWkvbSxyPXQvbSxzPXRoaXMuYS9NYXRoLnNxcnQoMS10aGlzLmVzKnEqcSksZT1yPj1sP2Yvci1zOi1sPj1yP2YvLXItczp4L3ErcyoodGhpcy5lcy0xKSx1PT09ITEmJihjPU1hdGguYXRhbihxL3IpKSxhLng9YixhLnk9YyxhLno9ZSxhfSxnZW9jZW50cmljX3RvX3dnczg0OmZ1bmN0aW9uKGEpe2lmKHRoaXMuZGF0dW1fdHlwZT09PWUpYS54Kz10aGlzLmRhdHVtX3BhcmFtc1swXSxhLnkrPXRoaXMuZGF0dW1fcGFyYW1zWzFdLGEueis9dGhpcy5kYXR1bV9wYXJhbXNbMl07ZWxzZSBpZih0aGlzLmRhdHVtX3R5cGU9PT1mKXt2YXIgYj10aGlzLmRhdHVtX3BhcmFtc1swXSxjPXRoaXMuZGF0dW1fcGFyYW1zWzFdLGQ9dGhpcy5kYXR1bV9wYXJhbXNbMl0sZz10aGlzLmRhdHVtX3BhcmFtc1szXSxoPXRoaXMuZGF0dW1fcGFyYW1zWzRdLGk9dGhpcy5kYXR1bV9wYXJhbXNbNV0saj10aGlzLmRhdHVtX3BhcmFtc1s2XSxrPWoqKGEueC1pKmEueStoKmEueikrYixsPWoqKGkqYS54K2EueS1nKmEueikrYyxtPWoqKC1oKmEueCtnKmEueSthLnopK2Q7YS54PWssYS55PWwsYS56PW19fSxnZW9jZW50cmljX2Zyb21fd2dzODQ6ZnVuY3Rpb24oYSl7aWYodGhpcy5kYXR1bV90eXBlPT09ZSlhLngtPXRoaXMuZGF0dW1fcGFyYW1zWzBdLGEueS09dGhpcy5kYXR1bV9wYXJhbXNbMV0sYS56LT10aGlzLmRhdHVtX3BhcmFtc1syXTtlbHNlIGlmKHRoaXMuZGF0dW1fdHlwZT09PWYpe3ZhciBiPXRoaXMuZGF0dW1fcGFyYW1zWzBdLGM9dGhpcy5kYXR1bV9wYXJhbXNbMV0sZD10aGlzLmRhdHVtX3BhcmFtc1syXSxnPXRoaXMuZGF0dW1fcGFyYW1zWzNdLGg9dGhpcy5kYXR1bV9wYXJhbXNbNF0saT10aGlzLmRhdHVtX3BhcmFtc1s1XSxqPXRoaXMuZGF0dW1fcGFyYW1zWzZdLGs9KGEueC1iKS9qLGw9KGEueS1jKS9qLG09KGEuei1kKS9qO2EueD1rK2kqbC1oKm0sYS55PS1pKmsrbCtnKm0sYS56PWgqay1nKmwrbX19fSxiLmV4cG9ydHM9bX0se31dLDMxOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MSxlPTIsZj0zLGc9NSxoPTYzNzgxMzcsaT0uMDA2Njk0Mzc5OTkwMTQxMzE2O2IuZXhwb3J0cz1mdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gaihhKXtyZXR1cm4gYT09PWR8fGE9PT1lfXZhciBrLGwsbTtpZihhLmNvbXBhcmVfZGF0dW1zKGIpKXJldHVybiBjO2lmKGEuZGF0dW1fdHlwZT09PWd8fGIuZGF0dW1fdHlwZT09PWcpcmV0dXJuIGM7dmFyIG49YS5hLG89YS5lcyxwPWIuYSxxPWIuZXMscj1hLmRhdHVtX3R5cGU7aWYocj09PWYpaWYoMD09PXRoaXMuYXBwbHlfZ3JpZHNoaWZ0KGEsMCxjKSlhLmE9aCxhLmVzPWk7ZWxzZXtpZighYS5kYXR1bV9wYXJhbXMpcmV0dXJuIGEuYT1uLGEuZXM9YS5lcyxjO2ZvcihrPTEsbD0wLG09YS5kYXR1bV9wYXJhbXMubGVuZ3RoO20+bDtsKyspayo9YS5kYXR1bV9wYXJhbXNbbF07aWYoMD09PWspcmV0dXJuIGEuYT1uLGEuZXM9YS5lcyxjO3I9YS5kYXR1bV9wYXJhbXMubGVuZ3RoPjM/ZTpkfXJldHVybiBiLmRhdHVtX3R5cGU9PT1mJiYoYi5hPWgsYi5lcz1pKSwoYS5lcyE9PWIuZXN8fGEuYSE9PWIuYXx8aihyKXx8aihiLmRhdHVtX3R5cGUpKSYmKGEuZ2VvZGV0aWNfdG9fZ2VvY2VudHJpYyhjKSxqKGEuZGF0dW1fdHlwZSkmJmEuZ2VvY2VudHJpY190b193Z3M4NChjKSxqKGIuZGF0dW1fdHlwZSkmJmIuZ2VvY2VudHJpY19mcm9tX3dnczg0KGMpLGIuZ2VvY2VudHJpY190b19nZW9kZXRpYyhjKSksYi5kYXR1bV90eXBlPT09ZiYmdGhpcy5hcHBseV9ncmlkc2hpZnQoYiwxLGMpLGEuYT1uLGEuZXM9byxiLmE9cCxiLmVzPXEsY319LHt9XSwzMjpbZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGI9dGhpcztpZigyPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIGM9YXJndW1lbnRzWzFdOyJzdHJpbmciPT10eXBlb2YgYz8iKyI9PT1jLmNoYXJBdCgwKT9kW2FdPWYoYXJndW1lbnRzWzFdKTpkW2FdPWcoYXJndW1lbnRzWzFdKTpkW2FdPWN9ZWxzZSBpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7aWYoQXJyYXkuaXNBcnJheShhKSlyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSl7QXJyYXkuaXNBcnJheShhKT9kLmFwcGx5KGIsYSk6ZChhKX0pO2lmKCJzdHJpbmciPT10eXBlb2YgYSl7aWYoYSBpbiBkKXJldHVybiBkW2FdfWVsc2UiRVBTRyJpbiBhP2RbIkVQU0c6IithLkVQU0ddPWE6IkVTUkkiaW4gYT9kWyJFU1JJOiIrYS5FU1JJXT1hOiJJQVUyMDAwImluIGE/ZFsiSUFVMjAwMDoiK2EuSUFVMjAwMF09YTpjb25zb2xlLmxvZyhhKTtyZXR1cm59fXZhciBlPWEoIi4vZ2xvYmFsIiksZj1hKCIuL3Byb2pTdHJpbmciKSxnPWEoIi4vd2t0Iik7ZShkKSxiLmV4cG9ydHM9ZH0seyIuL2dsb2JhbCI6MzUsIi4vcHJvalN0cmluZyI6MzgsIi4vd2t0Ijo2Nn1dLDMzOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi9jb25zdGFudHMvRGF0dW0iKSxlPWEoIi4vY29uc3RhbnRzL0VsbGlwc29pZCIpLGY9YSgiLi9leHRlbmQiKSxnPWEoIi4vZGF0dW0iKSxoPTFlLTEwLGk9LjE2NjY2NjY2NjY2NjY2NjY2LGo9LjA0NzIyMjIyMjIyMjIyMjIyLGs9LjAyMjE1NjA4NDY1NjA4NDY1NTtiLmV4cG9ydHM9ZnVuY3Rpb24oYSl7aWYoYS5kYXR1bUNvZGUmJiJub25lIiE9PWEuZGF0dW1Db2RlKXt2YXIgYj1kW2EuZGF0dW1Db2RlXTtiJiYoYS5kYXR1bV9wYXJhbXM9Yi50b3dnczg0P2IudG93Z3M4NC5zcGxpdCgiLCIpOm51bGwsYS5lbGxwcz1iLmVsbGlwc2UsYS5kYXR1bU5hbWU9Yi5kYXR1bU5hbWU/Yi5kYXR1bU5hbWU6YS5kYXR1bUNvZGUpfWlmKCFhLmEpe3ZhciBjPWVbYS5lbGxwc10/ZVthLmVsbHBzXTplLldHUzg0O2YoYSxjKX1yZXR1cm4gYS5yZiYmIWEuYiYmKGEuYj0oMS0xL2EucmYpKmEuYSksKDA9PT1hLnJmfHxNYXRoLmFicyhhLmEtYS5iKTxoKSYmKGEuc3BoZXJlPSEwLGEuYj1hLmEpLGEuYTI9YS5hKmEuYSxhLmIyPWEuYiphLmIsYS5lcz0oYS5hMi1hLmIyKS9hLmEyLGEuZT1NYXRoLnNxcnQoYS5lcyksYS5SX0EmJihhLmEqPTEtYS5lcyooaSthLmVzKihqK2EuZXMqaykpLGEuYTI9YS5hKmEuYSxhLmIyPWEuYiphLmIsYS5lcz0wKSxhLmVwMj0oYS5hMi1hLmIyKS9hLmIyLGEuazB8fChhLmswPTEpLGEuYXhpc3x8KGEuYXhpcz0iZW51IiksYS5kYXR1bXx8KGEuZGF0dW09ZyhhKSksYX19LHsiLi9jb25zdGFudHMvRGF0dW0iOjI1LCIuL2NvbnN0YW50cy9FbGxpcHNvaWQiOjI2LCIuL2RhdHVtIjozMCwiLi9leHRlbmQiOjM0fV0sMzQ6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiKXthPWF8fHt9O3ZhciBjLGQ7aWYoIWIpcmV0dXJuIGE7Zm9yKGQgaW4gYiljPWJbZF0sdm9pZCAwIT09YyYmKGFbZF09Yyk7cmV0dXJuIGF9fSx7fV0sMzU6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSl7YSgiRVBTRzo0MzI2IiwiK3RpdGxlPVdHUyA4NCAobG9uZy9sYXQpICtwcm9qPWxvbmdsYXQgK2VsbHBzPVdHUzg0ICtkYXR1bT1XR1M4NCArdW5pdHM9ZGVncmVlcyIpLGEoIkVQU0c6NDI2OSIsIit0aXRsZT1OQUQ4MyAobG9uZy9sYXQpICtwcm9qPWxvbmdsYXQgK2E9NjM3ODEzNy4wICtiPTYzNTY3NTIuMzE0MTQwMzYgK2VsbHBzPUdSUzgwICtkYXR1bT1OQUQ4MyArdW5pdHM9ZGVncmVlcyIpLGEoIkVQU0c6Mzg1NyIsIit0aXRsZT1XR1MgODQgLyBQc2V1ZG8tTWVyY2F0b3IgK3Byb2o9bWVyYyArYT02Mzc4MTM3ICtiPTYzNzgxMzcgK2xhdF90cz0wLjAgK2xvbl8wPTAuMCAreF8wPTAuMCAreV8wPTAgK2s9MS4wICt1bml0cz1tICtuYWRncmlkcz1AbnVsbCArbm9fZGVmcyIpLGEuV0dTODQ9YVsiRVBTRzo0MzI2Il0sYVsiRVBTRzozNzg1Il09YVsiRVBTRzozODU3Il0sYS5HT09HTEU9YVsiRVBTRzozODU3Il0sYVsiRVBTRzo5MDA5MTMiXT1hWyJFUFNHOjM4NTciXSxhWyJFUFNHOjEwMjExMyJdPWFbIkVQU0c6Mzg1NyJdfX0se31dLDM2OltmdW5jdGlvbihhLGIsYyl7dmFyIHByb2o0PWEoIi4vY29yZSIpO3Byb2o0LmRlZmF1bHREYXR1bT0iV0dTODQiLHByb2o0LlByb2o9YSgiLi9Qcm9qIikscHJvajQuV0dTODQ9bmV3IHByb2o0LlByb2ooIldHUzg0IikscHJvajQuUG9pbnQ9YSgiLi9Qb2ludCIpLHByb2o0LnRvUG9pbnQ9YSgiLi9jb21tb24vdG9Qb2ludCIpLHByb2o0LmRlZnM9YSgiLi9kZWZzIikscHJvajQudHJhbnNmb3JtPWEoIi4vdHJhbnNmb3JtIikscHJvajQubWdycz1hKCJtZ3JzIikscHJvajQudmVyc2lvbj1hKCIuLi9wYWNrYWdlLmpzb24iKS52ZXJzaW9uLGEoIi4vaW5jbHVkZWRQcm9qZWN0aW9ucyIpKHByb2o0KSxiLmV4cG9ydHM9cHJvajR9LHsiLi4vcGFja2FnZS5qc29uIjo2OCwiLi9Qb2ludCI6MSwiLi9Qcm9qIjoyLCIuL2NvbW1vbi90b1BvaW50IjoyMywiLi9jb3JlIjoyOSwiLi9kZWZzIjozMiwiLi9pbmNsdWRlZFByb2plY3Rpb25zIjoiaFRFRHBuIiwiLi90cmFuc2Zvcm0iOjY1LG1ncnM6Njd9XSwzNzpbZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhfWZ1bmN0aW9uIGUoYSl7cmV0dXJuIGEgaW4gaX1mdW5jdGlvbiBmKGEpe3ZhciBiPVsiR0VPR0NTIiwiR0VPQ0NTIiwiUFJPSkNTIiwiTE9DQUxfQ1MiXTtyZXR1cm4gYi5yZWR1Y2UoZnVuY3Rpb24oYixjKXtyZXR1cm4gYisxK2EuaW5kZXhPZihjKX0sMCl9ZnVuY3Rpb24gZyhhKXtyZXR1cm4iKyI9PT1hWzBdfWZ1bmN0aW9uIGgoYSl7cmV0dXJuIGQoYSk/ZShhKT9pW2FdOmYoYSk/aihhKTpnKGEpP2soYSk6dm9pZCAwOmF9dmFyIGk9YSgiLi9kZWZzIiksaj1hKCIuL3drdCIpLGs9YSgiLi9wcm9qU3RyaW5nIik7Yi5leHBvcnRzPWh9LHsiLi9kZWZzIjozMiwiLi9wcm9qU3RyaW5nIjozOCwiLi93a3QiOjY2fV0sMzg6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD0uMDE3NDUzMjkyNTE5OTQzMjk1LGU9YSgiLi9jb25zdGFudHMvUHJpbWVNZXJpZGlhbiIpLGY9YSgiLi9jb25zdGFudHMvdW5pdHMiKTtiLmV4cG9ydHM9ZnVuY3Rpb24oYSl7dmFyIGI9e30sYz17fTthLnNwbGl0KCIrIikubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnRyaW0oKX0pLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYX0pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGI9YS5zcGxpdCgiPSIpO2IucHVzaCghMCksY1tiWzBdLnRvTG93ZXJDYXNlKCldPWJbMV19KTt2YXIgZyxoLGksaj17cHJvajoicHJvak5hbWUiLGRhdHVtOiJkYXR1bUNvZGUiLHJmOmZ1bmN0aW9uKGEpe2IucmY9cGFyc2VGbG9hdChhKX0sbGF0XzA6ZnVuY3Rpb24oYSl7Yi5sYXQwPWEqZH0sbGF0XzE6ZnVuY3Rpb24oYSl7Yi5sYXQxPWEqZH0sbGF0XzI6ZnVuY3Rpb24oYSl7Yi5sYXQyPWEqZH0sbGF0X3RzOmZ1bmN0aW9uKGEpe2IubGF0X3RzPWEqZH0sbG9uXzA6ZnVuY3Rpb24oYSl7Yi5sb25nMD1hKmR9LGxvbl8xOmZ1bmN0aW9uKGEpe2IubG9uZzE9YSpkfSxsb25fMjpmdW5jdGlvbihhKXtiLmxvbmcyPWEqZH0sYWxwaGE6ZnVuY3Rpb24oYSl7Yi5hbHBoYT1wYXJzZUZsb2F0KGEpKmR9LGxvbmM6ZnVuY3Rpb24oYSl7Yi5sb25nYz1hKmR9LHhfMDpmdW5jdGlvbihhKXtiLngwPXBhcnNlRmxvYXQoYSl9LHlfMDpmdW5jdGlvbihhKXtiLnkwPXBhcnNlRmxvYXQoYSl9LGtfMDpmdW5jdGlvbihhKXtiLmswPXBhcnNlRmxvYXQoYSl9LGs6ZnVuY3Rpb24oYSl7Yi5rMD1wYXJzZUZsb2F0KGEpfSxhOmZ1bmN0aW9uKGEpe2IuYT1wYXJzZUZsb2F0KGEpfSxiOmZ1bmN0aW9uKGEpe2IuYj1wYXJzZUZsb2F0KGEpfSxyX2E6ZnVuY3Rpb24oKXtiLlJfQT0hMH0sem9uZTpmdW5jdGlvbihhKXtiLnpvbmU9cGFyc2VJbnQoYSwxMCl9LHNvdXRoOmZ1bmN0aW9uKCl7Yi51dG1Tb3V0aD0hMH0sdG93Z3M4NDpmdW5jdGlvbihhKXtiLmRhdHVtX3BhcmFtcz1hLnNwbGl0KCIsIikubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBwYXJzZUZsb2F0KGEpfSl9LHRvX21ldGVyOmZ1bmN0aW9uKGEpe2IudG9fbWV0ZXI9cGFyc2VGbG9hdChhKX0sdW5pdHM6ZnVuY3Rpb24oYSl7Yi51bml0cz1hLGZbYV0mJihiLnRvX21ldGVyPWZbYV0udG9fbWV0ZXIpfSxmcm9tX2dyZWVud2ljaDpmdW5jdGlvbihhKXtiLmZyb21fZ3JlZW53aWNoPWEqZH0scG06ZnVuY3Rpb24oYSl7Yi5mcm9tX2dyZWVud2ljaD0oZVthXT9lW2FdOnBhcnNlRmxvYXQoYSkpKmR9LG5hZGdyaWRzOmZ1bmN0aW9uKGEpeyJAbnVsbCI9PT1hP2IuZGF0dW1Db2RlPSJub25lIjpiLm5hZGdyaWRzPWF9LGF4aXM6ZnVuY3Rpb24oYSl7dmFyIGM9ImV3bnN1ZCI7Mz09PWEubGVuZ3RoJiYtMSE9PWMuaW5kZXhPZihhLnN1YnN0cigwLDEpKSYmLTEhPT1jLmluZGV4T2YoYS5zdWJzdHIoMSwxKSkmJi0xIT09Yy5pbmRleE9mKGEuc3Vic3RyKDIsMSkpJiYoYi5heGlzPWEpfX07Zm9yKGcgaW4gYyloPWNbZ10sZyBpbiBqPyhpPWpbZ10sImZ1bmN0aW9uIj09dHlwZW9mIGk/aShoKTpiW2ldPWgpOmJbZ109aDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGIuZGF0dW1Db2RlJiYiV0dTODQiIT09Yi5kYXR1bUNvZGUmJihiLmRhdHVtQ29kZT1iLmRhdHVtQ29kZS50b0xvd2VyQ2FzZSgpKSxifX0seyIuL2NvbnN0YW50cy9QcmltZU1lcmlkaWFuIjoyNywiLi9jb25zdGFudHMvdW5pdHMiOjI4fV0sMzk6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYil7dmFyIGM9Zy5sZW5ndGg7cmV0dXJuIGEubmFtZXM/KGdbY109YSxhLm5hbWVzLmZvckVhY2goZnVuY3Rpb24oYSl7ZlthLnRvTG93ZXJDYXNlKCldPWN9KSx0aGlzKTooY29uc29sZS5sb2coYiksITApfXZhciBlPVthKCIuL3Byb2plY3Rpb25zL21lcmMiKSxhKCIuL3Byb2plY3Rpb25zL2xvbmdsYXQiKV0sZj17fSxnPVtdO2MuYWRkPWQsYy5nZXQ9ZnVuY3Rpb24oYSl7aWYoIWEpcmV0dXJuITE7dmFyIGI9YS50b0xvd2VyQ2FzZSgpO3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgZltiXSYmZ1tmW2JdXT9nW2ZbYl1dOnZvaWQgMH0sYy5zdGFydD1mdW5jdGlvbigpe2UuZm9yRWFjaChkKX19LHsiLi9wcm9qZWN0aW9ucy9sb25nbGF0Ijo1MSwiLi9wcm9qZWN0aW9ucy9tZXJjIjo1Mn1dLDQwOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MWUtMTAsZT1hKCIuLi9jb21tb24vbXNmbnoiKSxmPWEoIi4uL2NvbW1vbi9xc2ZueiIpLGc9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKSxoPWEoIi4uL2NvbW1vbi9hc2lueiIpO2MuaW5pdD1mdW5jdGlvbigpe01hdGguYWJzKHRoaXMubGF0MSt0aGlzLmxhdDIpPGR8fCh0aGlzLnRlbXA9dGhpcy5iL3RoaXMuYSx0aGlzLmVzPTEtTWF0aC5wb3codGhpcy50ZW1wLDIpLHRoaXMuZTM9TWF0aC5zcXJ0KHRoaXMuZXMpLHRoaXMuc2luX3BvPU1hdGguc2luKHRoaXMubGF0MSksdGhpcy5jb3NfcG89TWF0aC5jb3ModGhpcy5sYXQxKSx0aGlzLnQxPXRoaXMuc2luX3BvLHRoaXMuY29uPXRoaXMuc2luX3BvLHRoaXMubXMxPWUodGhpcy5lMyx0aGlzLnNpbl9wbyx0aGlzLmNvc19wbyksdGhpcy5xczE9Zih0aGlzLmUzLHRoaXMuc2luX3BvLHRoaXMuY29zX3BvKSx0aGlzLnNpbl9wbz1NYXRoLnNpbih0aGlzLmxhdDIpLHRoaXMuY29zX3BvPU1hdGguY29zKHRoaXMubGF0MiksdGhpcy50Mj10aGlzLnNpbl9wbyx0aGlzLm1zMj1lKHRoaXMuZTMsdGhpcy5zaW5fcG8sdGhpcy5jb3NfcG8pLHRoaXMucXMyPWYodGhpcy5lMyx0aGlzLnNpbl9wbyx0aGlzLmNvc19wbyksdGhpcy5zaW5fcG89TWF0aC5zaW4odGhpcy5sYXQwKSx0aGlzLmNvc19wbz1NYXRoLmNvcyh0aGlzLmxhdDApLHRoaXMudDM9dGhpcy5zaW5fcG8sdGhpcy5xczA9Zih0aGlzLmUzLHRoaXMuc2luX3BvLHRoaXMuY29zX3BvKSxNYXRoLmFicyh0aGlzLmxhdDEtdGhpcy5sYXQyKT5kP3RoaXMubnMwPSh0aGlzLm1zMSp0aGlzLm1zMS10aGlzLm1zMip0aGlzLm1zMikvKHRoaXMucXMyLXRoaXMucXMxKTp0aGlzLm5zMD10aGlzLmNvbix0aGlzLmM9dGhpcy5tczEqdGhpcy5tczErdGhpcy5uczAqdGhpcy5xczEsdGhpcy5yaD10aGlzLmEqTWF0aC5zcXJ0KHRoaXMuYy10aGlzLm5zMCp0aGlzLnFzMCkvdGhpcy5uczApfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS54LGM9YS55O3RoaXMuc2luX3BoaT1NYXRoLnNpbihjKSx0aGlzLmNvc19waGk9TWF0aC5jb3MoYyk7dmFyIGQ9Zih0aGlzLmUzLHRoaXMuc2luX3BoaSx0aGlzLmNvc19waGkpLGU9dGhpcy5hKk1hdGguc3FydCh0aGlzLmMtdGhpcy5uczAqZCkvdGhpcy5uczAsaD10aGlzLm5zMCpnKGItdGhpcy5sb25nMCksaT1lKk1hdGguc2luKGgpK3RoaXMueDAsaj10aGlzLnJoLWUqTWF0aC5jb3MoaCkrdGhpcy55MDtyZXR1cm4gYS54PWksYS55PWosYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsaDtyZXR1cm4gYS54LT10aGlzLngwLGEueT10aGlzLnJoLWEueSt0aGlzLnkwLHRoaXMubnMwPj0wPyhiPU1hdGguc3FydChhLngqYS54K2EueSphLnkpLGQ9MSk6KGI9LU1hdGguc3FydChhLngqYS54K2EueSphLnkpLGQ9LTEpLGU9MCwwIT09YiYmKGU9TWF0aC5hdGFuMihkKmEueCxkKmEueSkpLGQ9Yip0aGlzLm5zMC90aGlzLmEsdGhpcy5zcGhlcmU/aD1NYXRoLmFzaW4oKHRoaXMuYy1kKmQpLygyKnRoaXMubnMwKSk6KGM9KHRoaXMuYy1kKmQpL3RoaXMubnMwLGg9dGhpcy5waGkxeih0aGlzLmUzLGMpKSxmPWcoZS90aGlzLm5zMCt0aGlzLmxvbmcwKSxhLng9ZixhLnk9aCxhfSxjLnBoaTF6PWZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaSxqPWgoLjUqYik7aWYoZD5hKXJldHVybiBqO2Zvcih2YXIgaz1hKmEsbD0xOzI1Pj1sO2wrKylpZihjPU1hdGguc2luKGopLGU9TWF0aC5jb3MoaiksZj1hKmMsZz0xLWYqZixpPS41KmcqZy9lKihiLygxLWspLWMvZysuNS9hKk1hdGgubG9nKCgxLWYpLygxK2YpKSksais9aSxNYXRoLmFicyhpKTw9MWUtNylyZXR1cm4gajtyZXR1cm4gbnVsbH0sYy5uYW1lcz1bIkFsYmVyc19Db25pY19FcXVhbF9BcmVhIiwiQWxiZXJzIiwiYWVhIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9hc2lueiI6NiwiLi4vY29tbW9uL21zZm56IjoxNSwiLi4vY29tbW9uL3FzZm56IjoyMH1dLDQxOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKSxlPU1hdGguUEkvMixmPTFlLTEwLGc9YSgiLi4vY29tbW9uL21sZm4iKSxoPWEoIi4uL2NvbW1vbi9lMGZuIiksaT1hKCIuLi9jb21tb24vZTFmbiIpLGo9YSgiLi4vY29tbW9uL2UyZm4iKSxrPWEoIi4uL2NvbW1vbi9lM2ZuIiksbD1hKCIuLi9jb21tb24vZ04iKSxtPWEoIi4uL2NvbW1vbi9hc2lueiIpLG49YSgiLi4vY29tbW9uL2ltbGZuIik7Yy5pbml0PWZ1bmN0aW9uKCl7dGhpcy5zaW5fcDEyPU1hdGguc2luKHRoaXMubGF0MCksdGhpcy5jb3NfcDEyPU1hdGguY29zKHRoaXMubGF0MCl9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYixjLG0sbixvLHAscSxyLHMsdCx1LHYsdyx4LHkseixBLEIsQyxELEUsRixHLEg9YS54LEk9YS55LEo9TWF0aC5zaW4oYS55KSxLPU1hdGguY29zKGEueSksTD1kKEgtdGhpcy5sb25nMCk7cmV0dXJuIHRoaXMuc3BoZXJlP01hdGguYWJzKHRoaXMuc2luX3AxMi0xKTw9Zj8oYS54PXRoaXMueDArdGhpcy5hKihlLUkpKk1hdGguc2luKEwpLGEueT10aGlzLnkwLXRoaXMuYSooZS1JKSpNYXRoLmNvcyhMKSxhKTpNYXRoLmFicyh0aGlzLnNpbl9wMTIrMSk8PWY/KGEueD10aGlzLngwK3RoaXMuYSooZStJKSpNYXRoLnNpbihMKSxhLnk9dGhpcy55MCt0aGlzLmEqKGUrSSkqTWF0aC5jb3MoTCksYSk6KEI9dGhpcy5zaW5fcDEyKkordGhpcy5jb3NfcDEyKksqTWF0aC5jb3MoTCksej1NYXRoLmFjb3MoQiksQT16L01hdGguc2luKHopLGEueD10aGlzLngwK3RoaXMuYSpBKksqTWF0aC5zaW4oTCksYS55PXRoaXMueTArdGhpcy5hKkEqKHRoaXMuY29zX3AxMipKLXRoaXMuc2luX3AxMipLKk1hdGguY29zKEwpKSxhKTooYj1oKHRoaXMuZXMpLGM9aSh0aGlzLmVzKSxtPWoodGhpcy5lcyksbj1rKHRoaXMuZXMpLE1hdGguYWJzKHRoaXMuc2luX3AxMi0xKTw9Zj8obz10aGlzLmEqZyhiLGMsbSxuLGUpLHA9dGhpcy5hKmcoYixjLG0sbixJKSxhLng9dGhpcy54MCsoby1wKSpNYXRoLnNpbihMKSxhLnk9dGhpcy55MC0oby1wKSpNYXRoLmNvcyhMKSxhKTpNYXRoLmFicyh0aGlzLnNpbl9wMTIrMSk8PWY/KG89dGhpcy5hKmcoYixjLG0sbixlKSxwPXRoaXMuYSpnKGIsYyxtLG4sSSksYS54PXRoaXMueDArKG8rcCkqTWF0aC5zaW4oTCksYS55PXRoaXMueTArKG8rcCkqTWF0aC5jb3MoTCksYSk6KHE9Si9LLHI9bCh0aGlzLmEsdGhpcy5lLHRoaXMuc2luX3AxMikscz1sKHRoaXMuYSx0aGlzLmUsSiksdD1NYXRoLmF0YW4oKDEtdGhpcy5lcykqcSt0aGlzLmVzKnIqdGhpcy5zaW5fcDEyLyhzKkspKSx1PU1hdGguYXRhbjIoTWF0aC5zaW4oTCksdGhpcy5jb3NfcDEyKk1hdGgudGFuKHQpLXRoaXMuc2luX3AxMipNYXRoLmNvcyhMKSksQz0wPT09dT9NYXRoLmFzaW4odGhpcy5jb3NfcDEyKk1hdGguc2luKHQpLXRoaXMuc2luX3AxMipNYXRoLmNvcyh0KSk6TWF0aC5hYnMoTWF0aC5hYnModSktTWF0aC5QSSk8PWY/LU1hdGguYXNpbih0aGlzLmNvc19wMTIqTWF0aC5zaW4odCktdGhpcy5zaW5fcDEyKk1hdGguY29zKHQpKTpNYXRoLmFzaW4oTWF0aC5zaW4oTCkqTWF0aC5jb3ModCkvTWF0aC5zaW4odSkpLHY9dGhpcy5lKnRoaXMuc2luX3AxMi9NYXRoLnNxcnQoMS10aGlzLmVzKSx3PXRoaXMuZSp0aGlzLmNvc19wMTIqTWF0aC5jb3ModSkvTWF0aC5zcXJ0KDEtdGhpcy5lcykseD12KncseT13KncsRD1DKkMsRT1EKkMsRj1FKkMsRz1GKkMsej1yKkMqKDEtRCp5KigxLXkpLzYrRS84KngqKDEtMip5KStGLzEyMCooeSooNC03KnkpLTMqdip2KigxLTcqeSkpLUcvNDgqeCksYS54PXRoaXMueDAreipNYXRoLnNpbih1KSxhLnk9dGhpcy55MCt6Kk1hdGguY29zKHUpLGEpKX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe2EueC09dGhpcy54MCxhLnktPXRoaXMueTA7dmFyIGIsYyxvLHAscSxyLHMsdCx1LHYsdyx4LHkseixBLEIsQyxELEUsRixHLEgsSTtpZih0aGlzLnNwaGVyZSl7aWYoYj1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSxiPjIqZSp0aGlzLmEpcmV0dXJuO3JldHVybiBjPWIvdGhpcy5hLG89TWF0aC5zaW4oYykscD1NYXRoLmNvcyhjKSxxPXRoaXMubG9uZzAsTWF0aC5hYnMoYik8PWY/cj10aGlzLmxhdDA6KHI9bShwKnRoaXMuc2luX3AxMithLnkqbyp0aGlzLmNvc19wMTIvYikscz1NYXRoLmFicyh0aGlzLmxhdDApLWUscT1kKE1hdGguYWJzKHMpPD1mP3RoaXMubGF0MD49MD90aGlzLmxvbmcwK01hdGguYXRhbjIoYS54LC1hLnkpOnRoaXMubG9uZzAtTWF0aC5hdGFuMigtYS54LGEueSk6dGhpcy5sb25nMCtNYXRoLmF0YW4yKGEueCpvLGIqdGhpcy5jb3NfcDEyKnAtYS55KnRoaXMuc2luX3AxMipvKSkpLGEueD1xLGEueT1yLGF9cmV0dXJuIHQ9aCh0aGlzLmVzKSx1PWkodGhpcy5lcyksdj1qKHRoaXMuZXMpLHc9ayh0aGlzLmVzKSxNYXRoLmFicyh0aGlzLnNpbl9wMTItMSk8PWY/KHg9dGhpcy5hKmcodCx1LHYsdyxlKSxiPU1hdGguc3FydChhLngqYS54K2EueSphLnkpLHk9eC1iLHI9bih5L3RoaXMuYSx0LHUsdix3KSxxPWQodGhpcy5sb25nMCtNYXRoLmF0YW4yKGEueCwtMSphLnkpKSxhLng9cSxhLnk9cixhKTpNYXRoLmFicyh0aGlzLnNpbl9wMTIrMSk8PWY/KHg9dGhpcy5hKmcodCx1LHYsdyxlKSxiPU1hdGguc3FydChhLngqYS54K2EueSphLnkpLHk9Yi14LHI9bih5L3RoaXMuYSx0LHUsdix3KSxxPWQodGhpcy5sb25nMCtNYXRoLmF0YW4yKGEueCxhLnkpKSxhLng9cSxhLnk9cixhKTooYj1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSxCPU1hdGguYXRhbjIoYS54LGEueSksej1sKHRoaXMuYSx0aGlzLmUsdGhpcy5zaW5fcDEyKSxDPU1hdGguY29zKEIpLEQ9dGhpcy5lKnRoaXMuY29zX3AxMipDLEU9LUQqRC8oMS10aGlzLmVzKSxGPTMqdGhpcy5lcyooMS1FKSp0aGlzLnNpbl9wMTIqdGhpcy5jb3NfcDEyKkMvKDEtdGhpcy5lcyksRz1iL3osSD1HLUUqKDErRSkqTWF0aC5wb3coRywzKS82LUYqKDErMypFKSpNYXRoLnBvdyhHLDQpLzI0LEk9MS1FKkgqSC8yLUcqSCpIKkgvNixBPU1hdGguYXNpbih0aGlzLnNpbl9wMTIqTWF0aC5jb3MoSCkrdGhpcy5jb3NfcDEyKk1hdGguc2luKEgpKkMpLHE9ZCh0aGlzLmxvbmcwK01hdGguYXNpbihNYXRoLnNpbihCKSpNYXRoLnNpbihIKS9NYXRoLmNvcyhBKSkpLHI9TWF0aC5hdGFuKCgxLXRoaXMuZXMqSSp0aGlzLnNpbl9wMTIvTWF0aC5zaW4oQSkpKk1hdGgudGFuKEEpLygxLXRoaXMuZXMpKSxhLng9cSxhLnk9cixhKX0sYy5uYW1lcz1bIkF6aW11dGhhbF9FcXVpZGlzdGFudCIsImFlcWQiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL2FzaW56Ijo2LCIuLi9jb21tb24vZTBmbiI6NywiLi4vY29tbW9uL2UxZm4iOjgsIi4uL2NvbW1vbi9lMmZuIjo5LCIuLi9jb21tb24vZTNmbiI6MTAsIi4uL2NvbW1vbi9nTiI6MTEsIi4uL2NvbW1vbi9pbWxmbiI6MTIsIi4uL2NvbW1vbi9tbGZuIjoxNH1dLDQyOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL21sZm4iKSxlPWEoIi4uL2NvbW1vbi9lMGZuIiksZj1hKCIuLi9jb21tb24vZTFmbiIpLGc9YSgiLi4vY29tbW9uL2UyZm4iKSxoPWEoIi4uL2NvbW1vbi9lM2ZuIiksaT1hKCIuLi9jb21tb24vZ04iKSxqPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksaz1hKCIuLi9jb21tb24vYWRqdXN0X2xhdCIpLGw9YSgiLi4vY29tbW9uL2ltbGZuIiksbT1NYXRoLlBJLzIsbj0xZS0xMDtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnNwaGVyZXx8KHRoaXMuZTA9ZSh0aGlzLmVzKSx0aGlzLmUxPWYodGhpcy5lcyksdGhpcy5lMj1nKHRoaXMuZXMpLHRoaXMuZTM9aCh0aGlzLmVzKSx0aGlzLm1sMD10aGlzLmEqZCh0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLHRoaXMubGF0MCkpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlPWEueCxmPWEueTtpZihlPWooZS10aGlzLmxvbmcwKSx0aGlzLnNwaGVyZSliPXRoaXMuYSpNYXRoLmFzaW4oTWF0aC5jb3MoZikqTWF0aC5zaW4oZSkpLGM9dGhpcy5hKihNYXRoLmF0YW4yKE1hdGgudGFuKGYpLE1hdGguY29zKGUpKS10aGlzLmxhdDApO2Vsc2V7dmFyIGc9TWF0aC5zaW4oZiksaD1NYXRoLmNvcyhmKSxrPWkodGhpcy5hLHRoaXMuZSxnKSxsPU1hdGgudGFuKGYpKk1hdGgudGFuKGYpLG09ZSpNYXRoLmNvcyhmKSxuPW0qbSxvPXRoaXMuZXMqaCpoLygxLXRoaXMuZXMpLHA9dGhpcy5hKmQodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyxmKTtiPWsqbSooMS1uKmwqKDEvNi0oOC1sKzgqbykqbi8xMjApKSxjPXAtdGhpcy5tbDAraypnL2gqbiooLjUrKDUtbCs2Km8pKm4vMjQpfXJldHVybiBhLng9Yit0aGlzLngwLGEueT1jK3RoaXMueTAsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe2EueC09dGhpcy54MCxhLnktPXRoaXMueTA7dmFyIGIsYyxkPWEueC90aGlzLmEsZT1hLnkvdGhpcy5hO2lmKHRoaXMuc3BoZXJlKXt2YXIgZj1lK3RoaXMubGF0MDtiPU1hdGguYXNpbihNYXRoLnNpbihmKSpNYXRoLmNvcyhkKSksYz1NYXRoLmF0YW4yKE1hdGgudGFuKGQpLE1hdGguY29zKGYpKX1lbHNle3ZhciBnPXRoaXMubWwwL3RoaXMuYStlLGg9bChnLHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMpO2lmKE1hdGguYWJzKE1hdGguYWJzKGgpLW0pPD1uKXJldHVybiBhLng9dGhpcy5sb25nMCxhLnk9bSwwPmUmJihhLnkqPS0xKSxhO3ZhciBvPWkodGhpcy5hLHRoaXMuZSxNYXRoLnNpbihoKSkscD1vKm8qby90aGlzLmEvdGhpcy5hKigxLXRoaXMuZXMpLHE9TWF0aC5wb3coTWF0aC50YW4oaCksMikscj1kKnRoaXMuYS9vLHM9cipyO2I9aC1vKk1hdGgudGFuKGgpL3AqcipyKiguNS0oMSszKnEpKnIqci8yNCksYz1yKigxLXMqKHEvMysoMSszKnEpKnEqcy8xNSkpL01hdGguY29zKGgpfXJldHVybiBhLng9aihjK3RoaXMubG9uZzApLGEueT1rKGIpLGF9LGMubmFtZXM9WyJDYXNzaW5pIiwiQ2Fzc2luaV9Tb2xkbmVyIiwiY2FzcyJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbGF0Ijo0LCIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL2UwZm4iOjcsIi4uL2NvbW1vbi9lMWZuIjo4LCIuLi9jb21tb24vZTJmbiI6OSwiLi4vY29tbW9uL2UzZm4iOjEwLCIuLi9jb21tb24vZ04iOjExLCIuLi9jb21tb24vaW1sZm4iOjEyLCIuLi9jb21tb24vbWxmbiI6MTR9XSw0MzpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksZT1hKCIuLi9jb21tb24vcXNmbnoiKSxmPWEoIi4uL2NvbW1vbi9tc2ZueiIpLGc9YSgiLi4vY29tbW9uL2lxc2ZueiIpO2MuaW5pdD1mdW5jdGlvbigpe3RoaXMuc3BoZXJlfHwodGhpcy5rMD1mKHRoaXMuZSxNYXRoLnNpbih0aGlzLmxhdF90cyksTWF0aC5jb3ModGhpcy5sYXRfdHMpKSl9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYixjLGY9YS54LGc9YS55LGg9ZChmLXRoaXMubG9uZzApO2lmKHRoaXMuc3BoZXJlKWI9dGhpcy54MCt0aGlzLmEqaCpNYXRoLmNvcyh0aGlzLmxhdF90cyksYz10aGlzLnkwK3RoaXMuYSpNYXRoLnNpbihnKS9NYXRoLmNvcyh0aGlzLmxhdF90cyk7ZWxzZXt2YXIgaT1lKHRoaXMuZSxNYXRoLnNpbihnKSk7Yj10aGlzLngwK3RoaXMuYSp0aGlzLmswKmgsYz10aGlzLnkwK3RoaXMuYSppKi41L3RoaXMuazB9cmV0dXJuIGEueD1iLGEueT1jLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXthLngtPXRoaXMueDAsYS55LT10aGlzLnkwO3ZhciBiLGM7cmV0dXJuIHRoaXMuc3BoZXJlPyhiPWQodGhpcy5sb25nMCthLngvdGhpcy5hL01hdGguY29zKHRoaXMubGF0X3RzKSksYz1NYXRoLmFzaW4oYS55L3RoaXMuYSpNYXRoLmNvcyh0aGlzLmxhdF90cykpKTooYz1nKHRoaXMuZSwyKmEueSp0aGlzLmswL3RoaXMuYSksYj1kKHRoaXMubG9uZzArYS54Lyh0aGlzLmEqdGhpcy5rMCkpKSxhLng9YixhLnk9YyxhfSxjLm5hbWVzPVsiY2VhIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9pcXNmbnoiOjEzLCIuLi9jb21tb24vbXNmbnoiOjE1LCIuLi9jb21tb24vcXNmbnoiOjIwfV0sNDQ6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGU9YSgiLi4vY29tbW9uL2FkanVzdF9sYXQiKTtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLngwPXRoaXMueDB8fDAsdGhpcy55MD10aGlzLnkwfHwwLHRoaXMubGF0MD10aGlzLmxhdDB8fDAsdGhpcy5sb25nMD10aGlzLmxvbmcwfHwwLHRoaXMubGF0X3RzPXRoaXMubGF0X3RzfHwwLHRoaXMudGl0bGU9dGhpcy50aXRsZXx8IkVxdWlkaXN0YW50IEN5bGluZHJpY2FsIChQbGF0ZSBDYXJyZSkiLHRoaXMucmM9TWF0aC5jb3ModGhpcy5sYXRfdHMpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS54LGM9YS55LGY9ZChiLXRoaXMubG9uZzApLGc9ZShjLXRoaXMubGF0MCk7cmV0dXJuIGEueD10aGlzLngwK3RoaXMuYSpmKnRoaXMucmMsYS55PXRoaXMueTArdGhpcy5hKmcsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiPWEueCxjPWEueTtyZXR1cm4gYS54PWQodGhpcy5sb25nMCsoYi10aGlzLngwKS8odGhpcy5hKnRoaXMucmMpKSxhLnk9ZSh0aGlzLmxhdDArKGMtdGhpcy55MCkvdGhpcy5hKSxhfSxjLm5hbWVzPVsiRXF1aXJlY3Rhbmd1bGFyIiwiRXF1aWRpc3RhbnRfQ3lsaW5kcmljYWwiLCJlcWMiXX0seyIuLi9jb21tb24vYWRqdXN0X2xhdCI6NCwiLi4vY29tbW9uL2FkanVzdF9sb24iOjV9XSw0NTpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9lMGZuIiksZT1hKCIuLi9jb21tb24vZTFmbiIpLGY9YSgiLi4vY29tbW9uL2UyZm4iKSxnPWEoIi4uL2NvbW1vbi9lM2ZuIiksaD1hKCIuLi9jb21tb24vbXNmbnoiKSxpPWEoIi4uL2NvbW1vbi9tbGZuIiksaj1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGs9YSgiLi4vY29tbW9uL2FkanVzdF9sYXQiKSxsPWEoIi4uL2NvbW1vbi9pbWxmbiIpLG09MWUtMTA7Yy5pbml0PWZ1bmN0aW9uKCl7TWF0aC5hYnModGhpcy5sYXQxK3RoaXMubGF0Mik8bXx8KHRoaXMubGF0Mj10aGlzLmxhdDJ8fHRoaXMubGF0MSx0aGlzLnRlbXA9dGhpcy5iL3RoaXMuYSx0aGlzLmVzPTEtTWF0aC5wb3codGhpcy50ZW1wLDIpLHRoaXMuZT1NYXRoLnNxcnQodGhpcy5lcyksdGhpcy5lMD1kKHRoaXMuZXMpLHRoaXMuZTE9ZSh0aGlzLmVzKSx0aGlzLmUyPWYodGhpcy5lcyksdGhpcy5lMz1nKHRoaXMuZXMpLHRoaXMuc2lucGhpPU1hdGguc2luKHRoaXMubGF0MSksdGhpcy5jb3NwaGk9TWF0aC5jb3ModGhpcy5sYXQxKSx0aGlzLm1zMT1oKHRoaXMuZSx0aGlzLnNpbnBoaSx0aGlzLmNvc3BoaSksdGhpcy5tbDE9aSh0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLHRoaXMubGF0MSksTWF0aC5hYnModGhpcy5sYXQxLXRoaXMubGF0Mik8bT90aGlzLm5zPXRoaXMuc2lucGhpOih0aGlzLnNpbnBoaT1NYXRoLnNpbih0aGlzLmxhdDIpLHRoaXMuY29zcGhpPU1hdGguY29zKHRoaXMubGF0MiksdGhpcy5tczI9aCh0aGlzLmUsdGhpcy5zaW5waGksdGhpcy5jb3NwaGkpLHRoaXMubWwyPWkodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyx0aGlzLmxhdDIpLHRoaXMubnM9KHRoaXMubXMxLXRoaXMubXMyKS8odGhpcy5tbDItdGhpcy5tbDEpKSx0aGlzLmc9dGhpcy5tbDErdGhpcy5tczEvdGhpcy5ucyx0aGlzLm1sMD1pKHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsdGhpcy5sYXQwKSx0aGlzLnJoPXRoaXMuYSoodGhpcy5nLXRoaXMubWwwKSl9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYixjPWEueCxkPWEueTtpZih0aGlzLnNwaGVyZSliPXRoaXMuYSoodGhpcy5nLWQpO2Vsc2V7dmFyIGU9aSh0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLGQpO2I9dGhpcy5hKih0aGlzLmctZSl9dmFyIGY9dGhpcy5ucypqKGMtdGhpcy5sb25nMCksZz10aGlzLngwK2IqTWF0aC5zaW4oZiksaD10aGlzLnkwK3RoaXMucmgtYipNYXRoLmNvcyhmKTtyZXR1cm4gYS54PWcsYS55PWgsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe2EueC09dGhpcy54MCxhLnk9dGhpcy5yaC1hLnkrdGhpcy55MDt2YXIgYixjLGQsZTt0aGlzLm5zPj0wPyhjPU1hdGguc3FydChhLngqYS54K2EueSphLnkpLGI9MSk6KGM9LU1hdGguc3FydChhLngqYS54K2EueSphLnkpLGI9LTEpO3ZhciBmPTA7aWYoMCE9PWMmJihmPU1hdGguYXRhbjIoYiphLngsYiphLnkpKSx0aGlzLnNwaGVyZSlyZXR1cm4gZT1qKHRoaXMubG9uZzArZi90aGlzLm5zKSxkPWsodGhpcy5nLWMvdGhpcy5hKSxhLng9ZSxhLnk9ZCxhO3ZhciBnPXRoaXMuZy1jL3RoaXMuYTtyZXR1cm4gZD1sKGcsdGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksZT1qKHRoaXMubG9uZzArZi90aGlzLm5zKSxhLng9ZSxhLnk9ZCxhfSxjLm5hbWVzPVsiRXF1aWRpc3RhbnRfQ29uaWMiLCJlcWRjIl19LHsiLi4vY29tbW9uL2FkanVzdF9sYXQiOjQsIi4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vZTBmbiI6NywiLi4vY29tbW9uL2UxZm4iOjgsIi4uL2NvbW1vbi9lMmZuIjo5LCIuLi9jb21tb24vZTNmbiI6MTAsIi4uL2NvbW1vbi9pbWxmbiI6MTIsIi4uL2NvbW1vbi9tbGZuIjoxNCwiLi4vY29tbW9uL21zZm56IjoxNX1dLDQ2OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9TWF0aC5QSS80LGU9YSgiLi4vY29tbW9uL3NyYXQiKSxmPU1hdGguUEkvMixnPTIwO2MuaW5pdD1mdW5jdGlvbigpe3ZhciBhPU1hdGguc2luKHRoaXMubGF0MCksYj1NYXRoLmNvcyh0aGlzLmxhdDApO2IqPWIsdGhpcy5yYz1NYXRoLnNxcnQoMS10aGlzLmVzKS8oMS10aGlzLmVzKmEqYSksdGhpcy5DPU1hdGguc3FydCgxK3RoaXMuZXMqYipiLygxLXRoaXMuZXMpKSx0aGlzLnBoaWMwPU1hdGguYXNpbihhL3RoaXMuQyksdGhpcy5yYXRleHA9LjUqdGhpcy5DKnRoaXMuZSx0aGlzLks9TWF0aC50YW4oLjUqdGhpcy5waGljMCtkKS8oTWF0aC5wb3coTWF0aC50YW4oLjUqdGhpcy5sYXQwK2QpLHRoaXMuQykqZSh0aGlzLmUqYSx0aGlzLnJhdGV4cCkpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS54LGM9YS55O3JldHVybiBhLnk9MipNYXRoLmF0YW4odGhpcy5LKk1hdGgucG93KE1hdGgudGFuKC41KmMrZCksdGhpcy5DKSplKHRoaXMuZSpNYXRoLnNpbihjKSx0aGlzLnJhdGV4cCkpLWYsYS54PXRoaXMuQypiLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9MWUtMTQsYz1hLngvdGhpcy5DLGg9YS55LGk9TWF0aC5wb3coTWF0aC50YW4oLjUqaCtkKS90aGlzLkssMS90aGlzLkMpLGo9ZztqPjAmJihoPTIqTWF0aC5hdGFuKGkqZSh0aGlzLmUqTWF0aC5zaW4oYS55KSwtLjUqdGhpcy5lKSktZiwhKE1hdGguYWJzKGgtYS55KTxiKSk7LS1qKWEueT1oO3JldHVybiBqPyhhLng9YyxhLnk9aCxhKTpudWxsfSxjLm5hbWVzPVsiZ2F1c3MiXX0seyIuLi9jb21tb24vc3JhdCI6MjJ9XSw0NzpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksZT0xZS0xMCxmPWEoIi4uL2NvbW1vbi9hc2lueiIpO2MuaW5pdD1mdW5jdGlvbigpe3RoaXMuc2luX3AxND1NYXRoLnNpbih0aGlzLmxhdDApLHRoaXMuY29zX3AxND1NYXRoLmNvcyh0aGlzLmxhdDApLAp0aGlzLmluZmluaXR5X2Rpc3Q9MWUzKnRoaXMuYSx0aGlzLnJjPTF9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYixjLGYsZyxoLGksaixrLGw9YS54LG09YS55O3JldHVybiBmPWQobC10aGlzLmxvbmcwKSxiPU1hdGguc2luKG0pLGM9TWF0aC5jb3MobSksZz1NYXRoLmNvcyhmKSxpPXRoaXMuc2luX3AxNCpiK3RoaXMuY29zX3AxNCpjKmcsaD0xLGk+MHx8TWF0aC5hYnMoaSk8PWU/KGo9dGhpcy54MCt0aGlzLmEqaCpjKk1hdGguc2luKGYpL2ksaz10aGlzLnkwK3RoaXMuYSpoKih0aGlzLmNvc19wMTQqYi10aGlzLnNpbl9wMTQqYypnKS9pKTooaj10aGlzLngwK3RoaXMuaW5maW5pdHlfZGlzdCpjKk1hdGguc2luKGYpLGs9dGhpcy55MCt0aGlzLmluZmluaXR5X2Rpc3QqKHRoaXMuY29zX3AxNCpiLXRoaXMuc2luX3AxNCpjKmcpKSxhLng9aixhLnk9ayxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGcsaCxpO3JldHVybiBhLng9KGEueC10aGlzLngwKS90aGlzLmEsYS55PShhLnktdGhpcy55MCkvdGhpcy5hLGEueC89dGhpcy5rMCxhLnkvPXRoaXMuazAsKGI9TWF0aC5zcXJ0KGEueCphLngrYS55KmEueSkpPyhnPU1hdGguYXRhbjIoYix0aGlzLnJjKSxjPU1hdGguc2luKGcpLGU9TWF0aC5jb3MoZyksaT1mKGUqdGhpcy5zaW5fcDE0K2EueSpjKnRoaXMuY29zX3AxNC9iKSxoPU1hdGguYXRhbjIoYS54KmMsYip0aGlzLmNvc19wMTQqZS1hLnkqdGhpcy5zaW5fcDE0KmMpLGg9ZCh0aGlzLmxvbmcwK2gpKTooaT10aGlzLnBoaWMwLGg9MCksYS54PWgsYS55PWksYX0sYy5uYW1lcz1bImdub20iXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL2FzaW56Ijo2fV0sNDg6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpO2MuaW5pdD1mdW5jdGlvbigpe3RoaXMuYT02Mzc3Mzk3LjE1NSx0aGlzLmVzPS4wMDY2NzQzNzIyMzA2MTQsdGhpcy5lPU1hdGguc3FydCh0aGlzLmVzKSx0aGlzLmxhdDB8fCh0aGlzLmxhdDA9Ljg2MzkzNzk3OTczNzE5MyksdGhpcy5sb25nMHx8KHRoaXMubG9uZzA9LjQzMzQyMzQzMDkxMTkyNTEpLHRoaXMuazB8fCh0aGlzLmswPS45OTk5KSx0aGlzLnM0NT0uNzg1Mzk4MTYzMzk3NDQ4LHRoaXMuczkwPTIqdGhpcy5zNDUsdGhpcy5maTA9dGhpcy5sYXQwLHRoaXMuZTI9dGhpcy5lcyx0aGlzLmU9TWF0aC5zcXJ0KHRoaXMuZTIpLHRoaXMuYWxmYT1NYXRoLnNxcnQoMSt0aGlzLmUyKk1hdGgucG93KE1hdGguY29zKHRoaXMuZmkwKSw0KS8oMS10aGlzLmUyKSksdGhpcy51cT0xLjA0MjE2ODU2MzgwNDc0LHRoaXMudTA9TWF0aC5hc2luKE1hdGguc2luKHRoaXMuZmkwKS90aGlzLmFsZmEpLHRoaXMuZz1NYXRoLnBvdygoMSt0aGlzLmUqTWF0aC5zaW4odGhpcy5maTApKS8oMS10aGlzLmUqTWF0aC5zaW4odGhpcy5maTApKSx0aGlzLmFsZmEqdGhpcy5lLzIpLHRoaXMuaz1NYXRoLnRhbih0aGlzLnUwLzIrdGhpcy5zNDUpL01hdGgucG93KE1hdGgudGFuKHRoaXMuZmkwLzIrdGhpcy5zNDUpLHRoaXMuYWxmYSkqdGhpcy5nLHRoaXMuazE9dGhpcy5rMCx0aGlzLm4wPXRoaXMuYSpNYXRoLnNxcnQoMS10aGlzLmUyKS8oMS10aGlzLmUyKk1hdGgucG93KE1hdGguc2luKHRoaXMuZmkwKSwyKSksdGhpcy5zMD0xLjM3MDA4MzQ2MjgxNTU1LHRoaXMubj1NYXRoLnNpbih0aGlzLnMwKSx0aGlzLnJvMD10aGlzLmsxKnRoaXMubjAvTWF0aC50YW4odGhpcy5zMCksdGhpcy5hZD10aGlzLnM5MC10aGlzLnVxfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGYsZyxoLGksaj1hLngsaz1hLnksbD1kKGotdGhpcy5sb25nMCk7cmV0dXJuIGI9TWF0aC5wb3coKDErdGhpcy5lKk1hdGguc2luKGspKS8oMS10aGlzLmUqTWF0aC5zaW4oaykpLHRoaXMuYWxmYSp0aGlzLmUvMiksYz0yKihNYXRoLmF0YW4odGhpcy5rKk1hdGgucG93KE1hdGgudGFuKGsvMit0aGlzLnM0NSksdGhpcy5hbGZhKS9iKS10aGlzLnM0NSksZT0tbCp0aGlzLmFsZmEsZj1NYXRoLmFzaW4oTWF0aC5jb3ModGhpcy5hZCkqTWF0aC5zaW4oYykrTWF0aC5zaW4odGhpcy5hZCkqTWF0aC5jb3MoYykqTWF0aC5jb3MoZSkpLGc9TWF0aC5hc2luKE1hdGguY29zKGMpKk1hdGguc2luKGUpL01hdGguY29zKGYpKSxoPXRoaXMubipnLGk9dGhpcy5ybzAqTWF0aC5wb3coTWF0aC50YW4odGhpcy5zMC8yK3RoaXMuczQ1KSx0aGlzLm4pL01hdGgucG93KE1hdGgudGFuKGYvMit0aGlzLnM0NSksdGhpcy5uKSxhLnk9aSpNYXRoLmNvcyhoKS8xLGEueD1pKk1hdGguc2luKGgpLzEsdGhpcy5jemVjaHx8KGEueSo9LTEsYS54Kj0tMSksYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaj1hLng7YS54PWEueSxhLnk9aix0aGlzLmN6ZWNofHwoYS55Kj0tMSxhLngqPS0xKSxnPU1hdGguc3FydChhLngqYS54K2EueSphLnkpLGY9TWF0aC5hdGFuMihhLnksYS54KSxlPWYvTWF0aC5zaW4odGhpcy5zMCksZD0yKihNYXRoLmF0YW4oTWF0aC5wb3codGhpcy5ybzAvZywxL3RoaXMubikqTWF0aC50YW4odGhpcy5zMC8yK3RoaXMuczQ1KSktdGhpcy5zNDUpLGI9TWF0aC5hc2luKE1hdGguY29zKHRoaXMuYWQpKk1hdGguc2luKGQpLU1hdGguc2luKHRoaXMuYWQpKk1hdGguY29zKGQpKk1hdGguY29zKGUpKSxjPU1hdGguYXNpbihNYXRoLmNvcyhkKSpNYXRoLnNpbihlKS9NYXRoLmNvcyhiKSksYS54PXRoaXMubG9uZzAtYy90aGlzLmFsZmEsaD1iLGk9MDt2YXIgaz0wO2RvIGEueT0yKihNYXRoLmF0YW4oTWF0aC5wb3codGhpcy5rLC0xL3RoaXMuYWxmYSkqTWF0aC5wb3coTWF0aC50YW4oYi8yK3RoaXMuczQ1KSwxL3RoaXMuYWxmYSkqTWF0aC5wb3coKDErdGhpcy5lKk1hdGguc2luKGgpKS8oMS10aGlzLmUqTWF0aC5zaW4oaCkpLHRoaXMuZS8yKSktdGhpcy5zNDUpLE1hdGguYWJzKGgtYS55KTwxZS0xMCYmKGk9MSksaD1hLnksays9MTt3aGlsZSgwPT09aSYmMTU+ayk7cmV0dXJuIGs+PTE1P251bGw6YX0sYy5uYW1lcz1bIktyb3ZhayIsImtyb3ZhayJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1fV0sNDk6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLlBJLzIsZT1NYXRoLlBJLzQsZj0xZS0xMCxnPWEoIi4uL2NvbW1vbi9xc2ZueiIpLGg9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKTtjLlNfUE9MRT0xLGMuTl9QT0xFPTIsYy5FUVVJVD0zLGMuT0JMSVE9NCxjLmluaXQ9ZnVuY3Rpb24oKXt2YXIgYT1NYXRoLmFicyh0aGlzLmxhdDApO2lmKE1hdGguYWJzKGEtZCk8Zj90aGlzLm1vZGU9dGhpcy5sYXQwPDA/dGhpcy5TX1BPTEU6dGhpcy5OX1BPTEU6TWF0aC5hYnMoYSk8Zj90aGlzLm1vZGU9dGhpcy5FUVVJVDp0aGlzLm1vZGU9dGhpcy5PQkxJUSx0aGlzLmVzPjApe3ZhciBiO3N3aXRjaCh0aGlzLnFwPWcodGhpcy5lLDEpLHRoaXMubW1mPS41LygxLXRoaXMuZXMpLHRoaXMuYXBhPXRoaXMuYXV0aHNldCh0aGlzLmVzKSx0aGlzLm1vZGUpe2Nhc2UgdGhpcy5OX1BPTEU6dGhpcy5kZD0xO2JyZWFrO2Nhc2UgdGhpcy5TX1BPTEU6dGhpcy5kZD0xO2JyZWFrO2Nhc2UgdGhpcy5FUVVJVDp0aGlzLnJxPU1hdGguc3FydCguNSp0aGlzLnFwKSx0aGlzLmRkPTEvdGhpcy5ycSx0aGlzLnhtZj0xLHRoaXMueW1mPS41KnRoaXMucXA7YnJlYWs7Y2FzZSB0aGlzLk9CTElROnRoaXMucnE9TWF0aC5zcXJ0KC41KnRoaXMucXApLGI9TWF0aC5zaW4odGhpcy5sYXQwKSx0aGlzLnNpbmIxPWcodGhpcy5lLGIpL3RoaXMucXAsdGhpcy5jb3NiMT1NYXRoLnNxcnQoMS10aGlzLnNpbmIxKnRoaXMuc2luYjEpLHRoaXMuZGQ9TWF0aC5jb3ModGhpcy5sYXQwKS8oTWF0aC5zcXJ0KDEtdGhpcy5lcypiKmIpKnRoaXMucnEqdGhpcy5jb3NiMSksdGhpcy55bWY9KHRoaXMueG1mPXRoaXMucnEpL3RoaXMuZGQsdGhpcy54bWYqPXRoaXMuZGR9fWVsc2UgdGhpcy5tb2RlPT09dGhpcy5PQkxJUSYmKHRoaXMuc2lucGgwPU1hdGguc2luKHRoaXMubGF0MCksdGhpcy5jb3NwaDA9TWF0aC5jb3ModGhpcy5sYXQwKSl9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYixjLGksaixrLGwsbSxuLG8scCxxPWEueCxyPWEueTtpZihxPWgocS10aGlzLmxvbmcwKSx0aGlzLnNwaGVyZSl7aWYoaz1NYXRoLnNpbihyKSxwPU1hdGguY29zKHIpLGk9TWF0aC5jb3MocSksdGhpcy5tb2RlPT09dGhpcy5PQkxJUXx8dGhpcy5tb2RlPT09dGhpcy5FUVVJVCl7aWYoYz10aGlzLm1vZGU9PT10aGlzLkVRVUlUPzErcCppOjErdGhpcy5zaW5waDAqayt0aGlzLmNvc3BoMCpwKmksZj49YylyZXR1cm4gbnVsbDtjPU1hdGguc3FydCgyL2MpLGI9YypwKk1hdGguc2luKHEpLGMqPXRoaXMubW9kZT09PXRoaXMuRVFVSVQ/azp0aGlzLmNvc3BoMCprLXRoaXMuc2lucGgwKnAqaX1lbHNlIGlmKHRoaXMubW9kZT09PXRoaXMuTl9QT0xFfHx0aGlzLm1vZGU9PT10aGlzLlNfUE9MRSl7aWYodGhpcy5tb2RlPT09dGhpcy5OX1BPTEUmJihpPS1pKSxNYXRoLmFicyhyK3RoaXMucGhpMCk8ZilyZXR1cm4gbnVsbDtjPWUtLjUqcixjPTIqKHRoaXMubW9kZT09PXRoaXMuU19QT0xFP01hdGguY29zKGMpOk1hdGguc2luKGMpKSxiPWMqTWF0aC5zaW4ocSksYyo9aX19ZWxzZXtzd2l0Y2gobT0wLG49MCxvPTAsaT1NYXRoLmNvcyhxKSxqPU1hdGguc2luKHEpLGs9TWF0aC5zaW4ociksbD1nKHRoaXMuZSxrKSwodGhpcy5tb2RlPT09dGhpcy5PQkxJUXx8dGhpcy5tb2RlPT09dGhpcy5FUVVJVCkmJihtPWwvdGhpcy5xcCxuPU1hdGguc3FydCgxLW0qbSkpLHRoaXMubW9kZSl7Y2FzZSB0aGlzLk9CTElROm89MSt0aGlzLnNpbmIxKm0rdGhpcy5jb3NiMSpuKmk7YnJlYWs7Y2FzZSB0aGlzLkVRVUlUOm89MStuKmk7YnJlYWs7Y2FzZSB0aGlzLk5fUE9MRTpvPWQrcixsPXRoaXMucXAtbDticmVhaztjYXNlIHRoaXMuU19QT0xFOm89ci1kLGw9dGhpcy5xcCtsfWlmKE1hdGguYWJzKG8pPGYpcmV0dXJuIG51bGw7c3dpdGNoKHRoaXMubW9kZSl7Y2FzZSB0aGlzLk9CTElROmNhc2UgdGhpcy5FUVVJVDpvPU1hdGguc3FydCgyL28pLGM9dGhpcy5tb2RlPT09dGhpcy5PQkxJUT90aGlzLnltZipvKih0aGlzLmNvc2IxKm0tdGhpcy5zaW5iMSpuKmkpOihvPU1hdGguc3FydCgyLygxK24qaSkpKSptKnRoaXMueW1mLGI9dGhpcy54bWYqbypuKmo7YnJlYWs7Y2FzZSB0aGlzLk5fUE9MRTpjYXNlIHRoaXMuU19QT0xFOmw+PTA/KGI9KG89TWF0aC5zcXJ0KGwpKSpqLGM9aSoodGhpcy5tb2RlPT09dGhpcy5TX1BPTEU/bzotbykpOmI9Yz0wfX1yZXR1cm4gYS54PXRoaXMuYSpiK3RoaXMueDAsYS55PXRoaXMuYSpjK3RoaXMueTAsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe2EueC09dGhpcy54MCxhLnktPXRoaXMueTA7dmFyIGIsYyxlLGcsaSxqLGssbD1hLngvdGhpcy5hLG09YS55L3RoaXMuYTtpZih0aGlzLnNwaGVyZSl7dmFyIG4sbz0wLHA9MDtpZihuPU1hdGguc3FydChsKmwrbSptKSxjPS41Km4sYz4xKXJldHVybiBudWxsO3N3aXRjaChjPTIqTWF0aC5hc2luKGMpLCh0aGlzLm1vZGU9PT10aGlzLk9CTElRfHx0aGlzLm1vZGU9PT10aGlzLkVRVUlUKSYmKHA9TWF0aC5zaW4oYyksbz1NYXRoLmNvcyhjKSksdGhpcy5tb2RlKXtjYXNlIHRoaXMuRVFVSVQ6Yz1NYXRoLmFicyhuKTw9Zj8wOk1hdGguYXNpbihtKnAvbiksbCo9cCxtPW8qbjticmVhaztjYXNlIHRoaXMuT0JMSVE6Yz1NYXRoLmFicyhuKTw9Zj90aGlzLnBoaTA6TWF0aC5hc2luKG8qdGhpcy5zaW5waDArbSpwKnRoaXMuY29zcGgwL24pLGwqPXAqdGhpcy5jb3NwaDAsbT0oby1NYXRoLnNpbihjKSp0aGlzLnNpbnBoMCkqbjticmVhaztjYXNlIHRoaXMuTl9QT0xFOm09LW0sYz1kLWM7YnJlYWs7Y2FzZSB0aGlzLlNfUE9MRTpjLT1kfWI9MCE9PW18fHRoaXMubW9kZSE9PXRoaXMuRVFVSVQmJnRoaXMubW9kZSE9PXRoaXMuT0JMSVE/TWF0aC5hdGFuMihsLG0pOjB9ZWxzZXtpZihrPTAsdGhpcy5tb2RlPT09dGhpcy5PQkxJUXx8dGhpcy5tb2RlPT09dGhpcy5FUVVJVCl7aWYobC89dGhpcy5kZCxtKj10aGlzLmRkLGo9TWF0aC5zcXJ0KGwqbCttKm0pLGY+ailyZXR1cm4gYS54PTAsYS55PXRoaXMucGhpMCxhO2c9MipNYXRoLmFzaW4oLjUqai90aGlzLnJxKSxlPU1hdGguY29zKGcpLGwqPWc9TWF0aC5zaW4oZyksdGhpcy5tb2RlPT09dGhpcy5PQkxJUT8oaz1lKnRoaXMuc2luYjErbSpnKnRoaXMuY29zYjEvaixpPXRoaXMucXAqayxtPWoqdGhpcy5jb3NiMSplLW0qdGhpcy5zaW5iMSpnKTooaz1tKmcvaixpPXRoaXMucXAqayxtPWoqZSl9ZWxzZSBpZih0aGlzLm1vZGU9PT10aGlzLk5fUE9MRXx8dGhpcy5tb2RlPT09dGhpcy5TX1BPTEUpe2lmKHRoaXMubW9kZT09PXRoaXMuTl9QT0xFJiYobT0tbSksaT1sKmwrbSptLCFpKXJldHVybiBhLng9MCxhLnk9dGhpcy5waGkwLGE7az0xLWkvdGhpcy5xcCx0aGlzLm1vZGU9PT10aGlzLlNfUE9MRSYmKGs9LWspfWI9TWF0aC5hdGFuMihsLG0pLGM9dGhpcy5hdXRobGF0KE1hdGguYXNpbihrKSx0aGlzLmFwYSl9cmV0dXJuIGEueD1oKHRoaXMubG9uZzArYiksYS55PWMsYX0sYy5QMDA9LjMzMzMzMzMzMzMzMzMzMzMsYy5QMDE9LjE3MjIyMjIyMjIyMjIyMjIyLGMuUDAyPS4xMDI1NzkzNjUwNzkzNjUwOCxjLlAxMD0uMDYzODg4ODg4ODg4ODg4ODgsYy5QMTE9LjA2NjQwMjExNjQwMjExNjQsYy5QMjA9LjAxNjQxNTAxMjk0MjE5MTU0MyxjLmF1dGhzZXQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXTtyZXR1cm4gY1swXT1hKnRoaXMuUDAwLGI9YSphLGNbMF0rPWIqdGhpcy5QMDEsY1sxXT1iKnRoaXMuUDEwLGIqPWEsY1swXSs9Yip0aGlzLlAwMixjWzFdKz1iKnRoaXMuUDExLGNbMl09Yip0aGlzLlAyMCxjfSxjLmF1dGhsYXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hK2E7cmV0dXJuIGErYlswXSpNYXRoLnNpbihjKStiWzFdKk1hdGguc2luKGMrYykrYlsyXSpNYXRoLnNpbihjK2MrYyl9LGMubmFtZXM9WyJMYW1iZXJ0IEF6aW11dGhhbCBFcXVhbCBBcmVhIiwiTGFtYmVydF9BemltdXRoYWxfRXF1YWxfQXJlYSIsImxhZWEiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL3FzZm56IjoyMH1dLDUwOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MWUtMTAsZT1hKCIuLi9jb21tb24vbXNmbnoiKSxmPWEoIi4uL2NvbW1vbi90c2ZueiIpLGc9TWF0aC5QSS8yLGg9YSgiLi4vY29tbW9uL3NpZ24iKSxpPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksaj1hKCIuLi9jb21tb24vcGhpMnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmxhdDJ8fCh0aGlzLmxhdDI9dGhpcy5sYXQxKSx0aGlzLmswfHwodGhpcy5rMD0xKSx0aGlzLngwPXRoaXMueDB8fDAsdGhpcy55MD10aGlzLnkwfHwwLCEoTWF0aC5hYnModGhpcy5sYXQxK3RoaXMubGF0Mik8ZCkpe3ZhciBhPXRoaXMuYi90aGlzLmE7dGhpcy5lPU1hdGguc3FydCgxLWEqYSk7dmFyIGI9TWF0aC5zaW4odGhpcy5sYXQxKSxjPU1hdGguY29zKHRoaXMubGF0MSksZz1lKHRoaXMuZSxiLGMpLGg9Zih0aGlzLmUsdGhpcy5sYXQxLGIpLGk9TWF0aC5zaW4odGhpcy5sYXQyKSxqPU1hdGguY29zKHRoaXMubGF0Miksaz1lKHRoaXMuZSxpLGopLGw9Zih0aGlzLmUsdGhpcy5sYXQyLGkpLG09Zih0aGlzLmUsdGhpcy5sYXQwLE1hdGguc2luKHRoaXMubGF0MCkpO01hdGguYWJzKHRoaXMubGF0MS10aGlzLmxhdDIpPmQ/dGhpcy5ucz1NYXRoLmxvZyhnL2spL01hdGgubG9nKGgvbCk6dGhpcy5ucz1iLGlzTmFOKHRoaXMubnMpJiYodGhpcy5ucz1iKSx0aGlzLmYwPWcvKHRoaXMubnMqTWF0aC5wb3coaCx0aGlzLm5zKSksdGhpcy5yaD10aGlzLmEqdGhpcy5mMCpNYXRoLnBvdyhtLHRoaXMubnMpLHRoaXMudGl0bGV8fCh0aGlzLnRpdGxlPSJMYW1iZXJ0IENvbmZvcm1hbCBDb25pYyIpfX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEueCxjPWEueTtNYXRoLmFicygyKk1hdGguYWJzKGMpLU1hdGguUEkpPD1kJiYoYz1oKGMpKihnLTIqZCkpO3ZhciBlLGosaz1NYXRoLmFicyhNYXRoLmFicyhjKS1nKTtpZihrPmQpZT1mKHRoaXMuZSxjLE1hdGguc2luKGMpKSxqPXRoaXMuYSp0aGlzLmYwKk1hdGgucG93KGUsdGhpcy5ucyk7ZWxzZXtpZihrPWMqdGhpcy5ucywwPj1rKXJldHVybiBudWxsO2o9MH12YXIgbD10aGlzLm5zKmkoYi10aGlzLmxvbmcwKTtyZXR1cm4gYS54PXRoaXMuazAqKGoqTWF0aC5zaW4obCkpK3RoaXMueDAsYS55PXRoaXMuazAqKHRoaXMucmgtaipNYXRoLmNvcyhsKSkrdGhpcy55MCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixoPShhLngtdGhpcy54MCkvdGhpcy5rMCxrPXRoaXMucmgtKGEueS10aGlzLnkwKS90aGlzLmswO3RoaXMubnM+MD8oYj1NYXRoLnNxcnQoaCpoK2sqayksYz0xKTooYj0tTWF0aC5zcXJ0KGgqaCtrKmspLGM9LTEpO3ZhciBsPTA7aWYoMCE9PWImJihsPU1hdGguYXRhbjIoYypoLGMqaykpLDAhPT1ifHx0aGlzLm5zPjApe2lmKGM9MS90aGlzLm5zLGQ9TWF0aC5wb3coYi8odGhpcy5hKnRoaXMuZjApLGMpLGU9aih0aGlzLmUsZCksLTk5OTk9PT1lKXJldHVybiBudWxsfWVsc2UgZT0tZztyZXR1cm4gZj1pKGwvdGhpcy5ucyt0aGlzLmxvbmcwKSxhLng9ZixhLnk9ZSxhfSxjLm5hbWVzPVsiTGFtYmVydCBUYW5nZW50aWFsIENvbmZvcm1hbCBDb25pYyBQcm9qZWN0aW9uIiwiTGFtYmVydF9Db25mb3JtYWxfQ29uaWMiLCJMYW1iZXJ0X0NvbmZvcm1hbF9Db25pY18yU1AiLCJsY2MiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL21zZm56IjoxNSwiLi4vY29tbW9uL3BoaTJ6IjoxNiwiLi4vY29tbW9uL3NpZ24iOjIxLCIuLi9jb21tb24vdHNmbnoiOjI0fV0sNTE6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhfWMuaW5pdD1mdW5jdGlvbigpe30sYy5mb3J3YXJkPWQsYy5pbnZlcnNlPWQsYy5uYW1lcz1bImxvbmdsYXQiLCJpZGVudGl0eSJdfSx7fV0sNTI6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vbXNmbnoiKSxlPU1hdGguUEkvMixmPTFlLTEwLGc9NTcuMjk1Nzc5NTEzMDgyMzIsaD1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGk9TWF0aC5QSS80LGo9YSgiLi4vY29tbW9uL3RzZm56Iiksaz1hKCIuLi9jb21tb24vcGhpMnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmIvdGhpcy5hO3RoaXMuZXM9MS1hKmEsIngwImluIHRoaXN8fCh0aGlzLngwPTApLCJ5MCJpbiB0aGlzfHwodGhpcy55MD0wKSx0aGlzLmU9TWF0aC5zcXJ0KHRoaXMuZXMpLHRoaXMubGF0X3RzP3RoaXMuc3BoZXJlP3RoaXMuazA9TWF0aC5jb3ModGhpcy5sYXRfdHMpOnRoaXMuazA9ZCh0aGlzLmUsTWF0aC5zaW4odGhpcy5sYXRfdHMpLE1hdGguY29zKHRoaXMubGF0X3RzKSk6dGhpcy5rMHx8KHRoaXMuaz90aGlzLmswPXRoaXMuazp0aGlzLmswPTEpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS54LGM9YS55O2lmKGMqZz45MCYmLTkwPmMqZyYmYipnPjE4MCYmLTE4MD5iKmcpcmV0dXJuIG51bGw7dmFyIGQsaztpZihNYXRoLmFicyhNYXRoLmFicyhjKS1lKTw9ZilyZXR1cm4gbnVsbDtpZih0aGlzLnNwaGVyZSlkPXRoaXMueDArdGhpcy5hKnRoaXMuazAqaChiLXRoaXMubG9uZzApLGs9dGhpcy55MCt0aGlzLmEqdGhpcy5rMCpNYXRoLmxvZyhNYXRoLnRhbihpKy41KmMpKTtlbHNle3ZhciBsPU1hdGguc2luKGMpLG09aih0aGlzLmUsYyxsKTtkPXRoaXMueDArdGhpcy5hKnRoaXMuazAqaChiLXRoaXMubG9uZzApLGs9dGhpcy55MC10aGlzLmEqdGhpcy5rMCpNYXRoLmxvZyhtKX1yZXR1cm4gYS54PWQsYS55PWssYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hLngtdGhpcy54MCxmPWEueS10aGlzLnkwO2lmKHRoaXMuc3BoZXJlKWM9ZS0yKk1hdGguYXRhbihNYXRoLmV4cCgtZi8odGhpcy5hKnRoaXMuazApKSk7ZWxzZXt2YXIgZz1NYXRoLmV4cCgtZi8odGhpcy5hKnRoaXMuazApKTtpZihjPWsodGhpcy5lLGcpLC05OTk5PT09YylyZXR1cm4gbnVsbH1yZXR1cm4gYj1oKHRoaXMubG9uZzArZC8odGhpcy5hKnRoaXMuazApKSxhLng9YixhLnk9YyxhfSxjLm5hbWVzPVsiTWVyY2F0b3IiLCJQb3B1bGFyIFZpc3VhbGlzYXRpb24gUHNldWRvIE1lcmNhdG9yIiwiTWVyY2F0b3JfMVNQIiwiTWVyY2F0b3JfQXV4aWxpYXJ5X1NwaGVyZSIsIm1lcmMiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL21zZm56IjoxNSwiLi4vY29tbW9uL3BoaTJ6IjoxNiwiLi4vY29tbW9uL3RzZm56IjoyNH1dLDUzOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKTtjLmluaXQ9ZnVuY3Rpb24oKXt9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYj1hLngsYz1hLnksZT1kKGItdGhpcy5sb25nMCksZj10aGlzLngwK3RoaXMuYSplLGc9dGhpcy55MCt0aGlzLmEqTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K2MvMi41KSkqMS4yNTtyZXR1cm4gYS54PWYsYS55PWcsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe2EueC09dGhpcy54MCxhLnktPXRoaXMueTA7dmFyIGI9ZCh0aGlzLmxvbmcwK2EueC90aGlzLmEpLGM9Mi41KihNYXRoLmF0YW4oTWF0aC5leHAoLjgqYS55L3RoaXMuYSkpLU1hdGguUEkvNCk7cmV0dXJuIGEueD1iLGEueT1jLGF9LGMubmFtZXM9WyJNaWxsZXJfQ3lsaW5kcmljYWwiLCJtaWxsIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjV9XSw1NDpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksZT0xZS0xMDtjLmluaXQ9ZnVuY3Rpb24oKXt9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXtmb3IodmFyIGI9YS54LGM9YS55LGY9ZChiLXRoaXMubG9uZzApLGc9YyxoPU1hdGguUEkqTWF0aC5zaW4oYyksaT0wOyEwO2krKyl7dmFyIGo9LShnK01hdGguc2luKGcpLWgpLygxK01hdGguY29zKGcpKTtpZihnKz1qLE1hdGguYWJzKGopPGUpYnJlYWt9Zy89MixNYXRoLlBJLzItTWF0aC5hYnMoYyk8ZSYmKGY9MCk7dmFyIGs9LjkwMDMxNjMxNjE1OCp0aGlzLmEqZipNYXRoLmNvcyhnKSt0aGlzLngwLGw9MS40MTQyMTM1NjIzNzMxKnRoaXMuYSpNYXRoLnNpbihnKSt0aGlzLnkwO3JldHVybiBhLng9ayxhLnk9bCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYzthLngtPXRoaXMueDAsYS55LT10aGlzLnkwLGM9YS55LygxLjQxNDIxMzU2MjM3MzEqdGhpcy5hKSxNYXRoLmFicyhjKT4uOTk5OTk5OTk5OTk5JiYoYz0uOTk5OTk5OTk5OTk5KSxiPU1hdGguYXNpbihjKTt2YXIgZT1kKHRoaXMubG9uZzArYS54LyguOTAwMzE2MzE2MTU4KnRoaXMuYSpNYXRoLmNvcyhiKSkpO2U8LU1hdGguUEkmJihlPS1NYXRoLlBJKSxlPk1hdGguUEkmJihlPU1hdGguUEkpLGM9KDIqYitNYXRoLnNpbigyKmIpKS9NYXRoLlBJLE1hdGguYWJzKGMpPjEmJihjPTEpO3ZhciBmPU1hdGguYXNpbihjKTtyZXR1cm4gYS54PWUsYS55PWYsYX0sYy5uYW1lcz1bIk1vbGx3ZWlkZSIsIm1vbGwiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NX1dLDU1OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9NDg0ODEzNjgxMTA5NTM2ZS0yMDtjLml0ZXJhdGlvbnM9MSxjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLkE9W10sdGhpcy5BWzFdPS42Mzk5MTc1MDczLHRoaXMuQVsyXT0tLjEzNTg3OTc2MTMsdGhpcy5BWzNdPS4wNjMyOTQ0MDksdGhpcy5BWzRdPS0uMDI1MjY4NTMsdGhpcy5BWzVdPS4wMTE3ODc5LHRoaXMuQVs2XT0tLjAwNTUxNjEsdGhpcy5BWzddPS4wMDI2OTA2LHRoaXMuQVs4XT0tLjAwMTMzMyx0aGlzLkFbOV09NjdlLTUsdGhpcy5BWzEwXT0tMzRlLTUsdGhpcy5CX3JlPVtdLHRoaXMuQl9pbT1bXSx0aGlzLkJfcmVbMV09Ljc1NTc4NTMyMjgsdGhpcy5CX2ltWzFdPTAsdGhpcy5CX3JlWzJdPS4yNDkyMDQ2NDYsdGhpcy5CX2ltWzJdPS4wMDMzNzE1MDcsdGhpcy5CX3JlWzNdPS0uMDAxNTQxNzM5LHRoaXMuQl9pbVszXT0uMDQxMDU4NTYsdGhpcy5CX3JlWzRdPS0uMTAxNjI5MDcsdGhpcy5CX2ltWzRdPS4wMTcyNzYwOSx0aGlzLkJfcmVbNV09LS4yNjYyMzQ4OSx0aGlzLkJfaW1bNV09LS4zNjI0OTIxOCx0aGlzLkJfcmVbNl09LS42ODcwOTgzLHRoaXMuQl9pbVs2XT0tMS4xNjUxOTY3LHRoaXMuQ19yZT1bXSx0aGlzLkNfaW09W10sdGhpcy5DX3JlWzFdPTEuMzIzMTI3MDQzOSx0aGlzLkNfaW1bMV09MCx0aGlzLkNfcmVbMl09LS41NzcyNDU3ODksdGhpcy5DX2ltWzJdPS0uMDA3ODA5NTk4LHRoaXMuQ19yZVszXT0uNTA4MzA3NTEzLHRoaXMuQ19pbVszXT0tLjExMjIwODk1Mix0aGlzLkNfcmVbNF09LS4xNTA5NDc2Mix0aGlzLkNfaW1bNF09LjE4MjAwNjAyLHRoaXMuQ19yZVs1XT0xLjAxNDE4MTc5LHRoaXMuQ19pbVs1XT0xLjY0NDk3Njk2LHRoaXMuQ19yZVs2XT0xLjk2NjA1NDksdGhpcy5DX2ltWzZdPTIuNTEyNzY0NSx0aGlzLkQ9W10sdGhpcy5EWzFdPTEuNTYyNzAxNDI0Myx0aGlzLkRbMl09LjUxODU0MDYzOTgsdGhpcy5EWzNdPS0uMDMzMzMwOTgsdGhpcy5EWzRdPS0uMTA1MjkwNix0aGlzLkRbNV09LS4wMzY4NTk0LHRoaXMuRFs2XT0uMDA3MzE3LHRoaXMuRFs3XT0uMDEyMix0aGlzLkRbOF09LjAwMzk0LHRoaXMuRFs5XT0tLjAwMTN9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYixjPWEueCxlPWEueSxmPWUtdGhpcy5sYXQwLGc9Yy10aGlzLmxvbmcwLGg9Zi9kKjFlLTUsaT1nLGo9MSxrPTA7Zm9yKGI9MTsxMD49YjtiKyspaio9aCxrKz10aGlzLkFbYl0qajt2YXIgbCxtLG49ayxvPWkscD0xLHE9MCxyPTAscz0wO2ZvcihiPTE7Nj49YjtiKyspbD1wKm4tcSpvLG09cSpuK3AqbyxwPWwscT1tLHI9cit0aGlzLkJfcmVbYl0qcC10aGlzLkJfaW1bYl0qcSxzPXMrdGhpcy5CX2ltW2JdKnArdGhpcy5CX3JlW2JdKnE7cmV0dXJuIGEueD1zKnRoaXMuYSt0aGlzLngwLGEueT1yKnRoaXMuYSt0aGlzLnkwLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGUsZj1hLngsZz1hLnksaD1mLXRoaXMueDAsaT1nLXRoaXMueTAsaj1pL3RoaXMuYSxrPWgvdGhpcy5hLGw9MSxtPTAsbj0wLG89MDtmb3IoYj0xOzY+PWI7YisrKWM9bCpqLW0qayxlPW0qaitsKmssbD1jLG09ZSxuPW4rdGhpcy5DX3JlW2JdKmwtdGhpcy5DX2ltW2JdKm0sbz1vK3RoaXMuQ19pbVtiXSpsK3RoaXMuQ19yZVtiXSptO2Zvcih2YXIgcD0wO3A8dGhpcy5pdGVyYXRpb25zO3ArKyl7dmFyIHEscixzPW4sdD1vLHU9aix2PWs7Zm9yKGI9Mjs2Pj1iO2IrKylxPXMqbi10Km8scj10Km4rcypvLHM9cSx0PXIsdSs9KGItMSkqKHRoaXMuQl9yZVtiXSpzLXRoaXMuQl9pbVtiXSp0KSx2Kz0oYi0xKSoodGhpcy5CX2ltW2JdKnMrdGhpcy5CX3JlW2JdKnQpO3M9MSx0PTA7dmFyIHc9dGhpcy5CX3JlWzFdLHg9dGhpcy5CX2ltWzFdO2ZvcihiPTI7Nj49YjtiKyspcT1zKm4tdCpvLHI9dCpuK3MqbyxzPXEsdD1yLHcrPWIqKHRoaXMuQl9yZVtiXSpzLXRoaXMuQl9pbVtiXSp0KSx4Kz1iKih0aGlzLkJfaW1bYl0qcyt0aGlzLkJfcmVbYl0qdCk7dmFyIHk9dyp3K3gqeDtuPSh1Kncrdip4KS95LG89KHYqdy11KngpL3l9dmFyIHo9bixBPW8sQj0xLEM9MDtmb3IoYj0xOzk+PWI7YisrKUIqPXosQys9dGhpcy5EW2JdKkI7dmFyIEQ9dGhpcy5sYXQwK0MqZCoxZTUsRT10aGlzLmxvbmcwK0E7cmV0dXJuIGEueD1FLGEueT1ELGF9LGMubmFtZXM9WyJOZXdfWmVhbGFuZF9NYXBfR3JpZCIsIm56bWciXX0se31dLDU2OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL3RzZm56IiksZT1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGY9YSgiLi4vY29tbW9uL3BoaTJ6IiksZz1NYXRoLlBJLzIsaD1NYXRoLlBJLzQsaT0xZS0xMDtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLm5vX29mZj10aGlzLm5vX29mZnx8ITEsdGhpcy5ub19yb3Q9dGhpcy5ub19yb3R8fCExLGlzTmFOKHRoaXMuazApJiYodGhpcy5rMD0xKTt2YXIgYT1NYXRoLnNpbih0aGlzLmxhdDApLGI9TWF0aC5jb3ModGhpcy5sYXQwKSxjPXRoaXMuZSphO3RoaXMuYmw9TWF0aC5zcXJ0KDErdGhpcy5lcy8oMS10aGlzLmVzKSpNYXRoLnBvdyhiLDQpKSx0aGlzLmFsPXRoaXMuYSp0aGlzLmJsKnRoaXMuazAqTWF0aC5zcXJ0KDEtdGhpcy5lcykvKDEtYypjKTt2YXIgZj1kKHRoaXMuZSx0aGlzLmxhdDAsYSksZz10aGlzLmJsL2IqTWF0aC5zcXJ0KCgxLXRoaXMuZXMpLygxLWMqYykpOzE+ZypnJiYoZz0xKTt2YXIgaCxpO2lmKGlzTmFOKHRoaXMubG9uZ2MpKXt2YXIgaj1kKHRoaXMuZSx0aGlzLmxhdDEsTWF0aC5zaW4odGhpcy5sYXQxKSksaz1kKHRoaXMuZSx0aGlzLmxhdDIsTWF0aC5zaW4odGhpcy5sYXQyKSk7dGhpcy5sYXQwPj0wP3RoaXMuZWw9KGcrTWF0aC5zcXJ0KGcqZy0xKSkqTWF0aC5wb3coZix0aGlzLmJsKTp0aGlzLmVsPShnLU1hdGguc3FydChnKmctMSkpKk1hdGgucG93KGYsdGhpcy5ibCk7dmFyIGw9TWF0aC5wb3coaix0aGlzLmJsKSxtPU1hdGgucG93KGssdGhpcy5ibCk7aD10aGlzLmVsL2wsaT0uNSooaC0xL2gpO3ZhciBuPSh0aGlzLmVsKnRoaXMuZWwtbSpsKS8odGhpcy5lbCp0aGlzLmVsK20qbCksbz0obS1sKS8obStsKSxwPWUodGhpcy5sb25nMS10aGlzLmxvbmcyKTt0aGlzLmxvbmcwPS41Kih0aGlzLmxvbmcxK3RoaXMubG9uZzIpLU1hdGguYXRhbihuKk1hdGgudGFuKC41KnRoaXMuYmwqcCkvbykvdGhpcy5ibCx0aGlzLmxvbmcwPWUodGhpcy5sb25nMCk7dmFyIHE9ZSh0aGlzLmxvbmcxLXRoaXMubG9uZzApO3RoaXMuZ2FtbWEwPU1hdGguYXRhbihNYXRoLnNpbih0aGlzLmJsKnEpL2kpLHRoaXMuYWxwaGE9TWF0aC5hc2luKGcqTWF0aC5zaW4odGhpcy5nYW1tYTApKX1lbHNlIGg9dGhpcy5sYXQwPj0wP2crTWF0aC5zcXJ0KGcqZy0xKTpnLU1hdGguc3FydChnKmctMSksdGhpcy5lbD1oKk1hdGgucG93KGYsdGhpcy5ibCksaT0uNSooaC0xL2gpLHRoaXMuZ2FtbWEwPU1hdGguYXNpbihNYXRoLnNpbih0aGlzLmFscGhhKS9nKSx0aGlzLmxvbmcwPXRoaXMubG9uZ2MtTWF0aC5hc2luKGkqTWF0aC50YW4odGhpcy5nYW1tYTApKS90aGlzLmJsO3RoaXMubm9fb2ZmP3RoaXMudWM9MDp0aGlzLmxhdDA+PTA/dGhpcy51Yz10aGlzLmFsL3RoaXMuYmwqTWF0aC5hdGFuMihNYXRoLnNxcnQoZypnLTEpLE1hdGguY29zKHRoaXMuYWxwaGEpKTp0aGlzLnVjPS0xKnRoaXMuYWwvdGhpcy5ibCpNYXRoLmF0YW4yKE1hdGguc3FydChnKmctMSksTWF0aC5jb3ModGhpcy5hbHBoYSkpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxmLGo9YS54LGs9YS55LGw9ZShqLXRoaXMubG9uZzApO2lmKE1hdGguYWJzKE1hdGguYWJzKGspLWcpPD1pKWY9az4wPy0xOjEsYz10aGlzLmFsL3RoaXMuYmwqTWF0aC5sb2coTWF0aC50YW4oaCtmKnRoaXMuZ2FtbWEwKi41KSksYj0tMSpmKmcqdGhpcy5hbC90aGlzLmJsO2Vsc2V7dmFyIG09ZCh0aGlzLmUsayxNYXRoLnNpbihrKSksbj10aGlzLmVsL01hdGgucG93KG0sdGhpcy5ibCksbz0uNSoobi0xL24pLHA9LjUqKG4rMS9uKSxxPU1hdGguc2luKHRoaXMuYmwqbCkscj0obypNYXRoLnNpbih0aGlzLmdhbW1hMCktcSpNYXRoLmNvcyh0aGlzLmdhbW1hMCkpL3A7Yz1NYXRoLmFicyhNYXRoLmFicyhyKS0xKTw9aT9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk6LjUqdGhpcy5hbCpNYXRoLmxvZygoMS1yKS8oMStyKSkvdGhpcy5ibCxiPU1hdGguYWJzKE1hdGguY29zKHRoaXMuYmwqbCkpPD1pP3RoaXMuYWwqdGhpcy5ibCpsOnRoaXMuYWwqTWF0aC5hdGFuMihvKk1hdGguY29zKHRoaXMuZ2FtbWEwKStxKk1hdGguc2luKHRoaXMuZ2FtbWEwKSxNYXRoLmNvcyh0aGlzLmJsKmwpKS90aGlzLmJsfXJldHVybiB0aGlzLm5vX3JvdD8oYS54PXRoaXMueDArYixhLnk9dGhpcy55MCtjKTooYi09dGhpcy51YyxhLng9dGhpcy54MCtjKk1hdGguY29zKHRoaXMuYWxwaGEpK2IqTWF0aC5zaW4odGhpcy5hbHBoYSksYS55PXRoaXMueTArYipNYXRoLmNvcyh0aGlzLmFscGhhKS1jKk1hdGguc2luKHRoaXMuYWxwaGEpKSxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYzt0aGlzLm5vX3JvdD8oYz1hLnktdGhpcy55MCxiPWEueC10aGlzLngwKTooYz0oYS54LXRoaXMueDApKk1hdGguY29zKHRoaXMuYWxwaGEpLShhLnktdGhpcy55MCkqTWF0aC5zaW4odGhpcy5hbHBoYSksYj0oYS55LXRoaXMueTApKk1hdGguY29zKHRoaXMuYWxwaGEpKyhhLngtdGhpcy54MCkqTWF0aC5zaW4odGhpcy5hbHBoYSksYis9dGhpcy51Yyk7dmFyIGQ9TWF0aC5leHAoLTEqdGhpcy5ibCpjL3RoaXMuYWwpLGg9LjUqKGQtMS9kKSxqPS41KihkKzEvZCksaz1NYXRoLnNpbih0aGlzLmJsKmIvdGhpcy5hbCksbD0oaypNYXRoLmNvcyh0aGlzLmdhbW1hMCkraCpNYXRoLnNpbih0aGlzLmdhbW1hMCkpL2osbT1NYXRoLnBvdyh0aGlzLmVsL01hdGguc3FydCgoMStsKS8oMS1sKSksMS90aGlzLmJsKTtyZXR1cm4gTWF0aC5hYnMobC0xKTxpPyhhLng9dGhpcy5sb25nMCxhLnk9Zyk6TWF0aC5hYnMobCsxKTxpPyhhLng9dGhpcy5sb25nMCxhLnk9LTEqZyk6KGEueT1mKHRoaXMuZSxtKSxhLng9ZSh0aGlzLmxvbmcwLU1hdGguYXRhbjIoaCpNYXRoLmNvcyh0aGlzLmdhbW1hMCktaypNYXRoLnNpbih0aGlzLmdhbW1hMCksTWF0aC5jb3ModGhpcy5ibCpiL3RoaXMuYWwpKS90aGlzLmJsKSksYX0sYy5uYW1lcz1bIkhvdGluZV9PYmxpcXVlX01lcmNhdG9yIiwiSG90aW5lIE9ibGlxdWUgTWVyY2F0b3IiLCJIb3RpbmVfT2JsaXF1ZV9NZXJjYXRvcl9BemltdXRoX05hdHVyYWxfT3JpZ2luIiwiSG90aW5lX09ibGlxdWVfTWVyY2F0b3JfQXppbXV0aF9DZW50ZXIiLCJvbWVyYyJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vcGhpMnoiOjE2LCIuLi9jb21tb24vdHNmbnoiOjI0fV0sNTc6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vZTBmbiIpLGU9YSgiLi4vY29tbW9uL2UxZm4iKSxmPWEoIi4uL2NvbW1vbi9lMmZuIiksZz1hKCIuLi9jb21tb24vZTNmbiIpLGg9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKSxpPWEoIi4uL2NvbW1vbi9hZGp1c3RfbGF0Iiksaj1hKCIuLi9jb21tb24vbWxmbiIpLGs9MWUtMTAsbD1hKCIuLi9jb21tb24vZ04iKSxtPTIwO2MuaW5pdD1mdW5jdGlvbigpe3RoaXMudGVtcD10aGlzLmIvdGhpcy5hLHRoaXMuZXM9MS1NYXRoLnBvdyh0aGlzLnRlbXAsMiksdGhpcy5lPU1hdGguc3FydCh0aGlzLmVzKSx0aGlzLmUwPWQodGhpcy5lcyksdGhpcy5lMT1lKHRoaXMuZXMpLHRoaXMuZTI9Zih0aGlzLmVzKSx0aGlzLmUzPWcodGhpcy5lcyksdGhpcy5tbDA9dGhpcy5hKmoodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyx0aGlzLmxhdDApfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9YS54LGY9YS55LGc9aChlLXRoaXMubG9uZzApO2lmKGQ9ZypNYXRoLnNpbihmKSx0aGlzLnNwaGVyZSlNYXRoLmFicyhmKTw9az8oYj10aGlzLmEqZyxjPS0xKnRoaXMuYSp0aGlzLmxhdDApOihiPXRoaXMuYSpNYXRoLnNpbihkKS9NYXRoLnRhbihmKSxjPXRoaXMuYSooaShmLXRoaXMubGF0MCkrKDEtTWF0aC5jb3MoZCkpL01hdGgudGFuKGYpKSk7ZWxzZSBpZihNYXRoLmFicyhmKTw9ayliPXRoaXMuYSpnLGM9LTEqdGhpcy5tbDA7ZWxzZXt2YXIgbT1sKHRoaXMuYSx0aGlzLmUsTWF0aC5zaW4oZikpL01hdGgudGFuKGYpO2I9bSpNYXRoLnNpbihkKSxjPXRoaXMuYSpqKHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsZiktdGhpcy5tbDArbSooMS1NYXRoLmNvcyhkKSl9cmV0dXJuIGEueD1iK3RoaXMueDAsYS55PWMrdGhpcy55MCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGksbCxuO2lmKGQ9YS54LXRoaXMueDAsZT1hLnktdGhpcy55MCx0aGlzLnNwaGVyZSlpZihNYXRoLmFicyhlK3RoaXMuYSp0aGlzLmxhdDApPD1rKWI9aChkL3RoaXMuYSt0aGlzLmxvbmcwKSxjPTA7ZWxzZXtnPXRoaXMubGF0MCtlL3RoaXMuYSxpPWQqZC90aGlzLmEvdGhpcy5hK2cqZyxsPWc7dmFyIG87Zm9yKGY9bTtmOy0tZilpZihvPU1hdGgudGFuKGwpLG49LTEqKGcqKGwqbysxKS1sLS41KihsKmwraSkqbykvKChsLWcpL28tMSksbCs9bixNYXRoLmFicyhuKTw9ayl7Yz1sO2JyZWFrfWI9aCh0aGlzLmxvbmcwK01hdGguYXNpbihkKk1hdGgudGFuKGwpL3RoaXMuYSkvTWF0aC5zaW4oYykpfWVsc2UgaWYoTWF0aC5hYnMoZSt0aGlzLm1sMCk8PWspYz0wLGI9aCh0aGlzLmxvbmcwK2QvdGhpcy5hKTtlbHNle2c9KHRoaXMubWwwK2UpL3RoaXMuYSxpPWQqZC90aGlzLmEvdGhpcy5hK2cqZyxsPWc7dmFyIHAscSxyLHMsdDtmb3IoZj1tO2Y7LS1mKWlmKHQ9dGhpcy5lKk1hdGguc2luKGwpLHA9TWF0aC5zcXJ0KDEtdCp0KSpNYXRoLnRhbihsKSxxPXRoaXMuYSpqKHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsbCkscj10aGlzLmUwLTIqdGhpcy5lMSpNYXRoLmNvcygyKmwpKzQqdGhpcy5lMipNYXRoLmNvcyg0KmwpLTYqdGhpcy5lMypNYXRoLmNvcyg2KmwpLHM9cS90aGlzLmEsbj0oZyoocCpzKzEpLXMtLjUqcCoocypzK2kpKS8odGhpcy5lcypNYXRoLnNpbigyKmwpKihzKnMraS0yKmcqcykvKDQqcCkrKGctcykqKHAqci0yL01hdGguc2luKDIqbCkpLXIpLGwtPW4sTWF0aC5hYnMobik8PWspe2M9bDticmVha31wPU1hdGguc3FydCgxLXRoaXMuZXMqTWF0aC5wb3coTWF0aC5zaW4oYyksMikpKk1hdGgudGFuKGMpLGI9aCh0aGlzLmxvbmcwK01hdGguYXNpbihkKnAvdGhpcy5hKS9NYXRoLnNpbihjKSl9cmV0dXJuIGEueD1iLGEueT1jLGF9LGMubmFtZXM9WyJQb2x5Y29uaWMiLCJwb2x5Il19LHsiLi4vY29tbW9uL2FkanVzdF9sYXQiOjQsIi4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vZTBmbiI6NywiLi4vY29tbW9uL2UxZm4iOjgsIi4uL2NvbW1vbi9lMmZuIjo5LCIuLi9jb21tb24vZTNmbiI6MTAsIi4uL2NvbW1vbi9nTiI6MTEsIi4uL2NvbW1vbi9tbGZuIjoxNH1dLDU4OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKSxlPWEoIi4uL2NvbW1vbi9hZGp1c3RfbGF0IiksZj1hKCIuLi9jb21tb24vcGpfZW5mbiIpLGc9MjAsaD1hKCIuLi9jb21tb24vcGpfbWxmbiIpLGk9YSgiLi4vY29tbW9uL3BqX2ludl9tbGZuIiksaj1NYXRoLlBJLzIsaz0xZS0xMCxsPWEoIi4uL2NvbW1vbi9hc2lueiIpO2MuaW5pdD1mdW5jdGlvbigpe3RoaXMuc3BoZXJlPyh0aGlzLm49MSx0aGlzLm09MCx0aGlzLmVzPTAsdGhpcy5DX3k9TWF0aC5zcXJ0KCh0aGlzLm0rMSkvdGhpcy5uKSx0aGlzLkNfeD10aGlzLkNfeS8odGhpcy5tKzEpKTp0aGlzLmVuPWYodGhpcy5lcyl9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYixjLGU9YS54LGY9YS55O2lmKGU9ZChlLXRoaXMubG9uZzApLHRoaXMuc3BoZXJlKXtpZih0aGlzLm0pZm9yKHZhciBpPXRoaXMubipNYXRoLnNpbihmKSxqPWc7ajstLWope3ZhciBsPSh0aGlzLm0qZitNYXRoLnNpbihmKS1pKS8odGhpcy5tK01hdGguY29zKGYpKTtpZihmLT1sLE1hdGguYWJzKGwpPGspYnJlYWt9ZWxzZSBmPTEhPT10aGlzLm4/TWF0aC5hc2luKHRoaXMubipNYXRoLnNpbihmKSk6ZjtiPXRoaXMuYSp0aGlzLkNfeCplKih0aGlzLm0rTWF0aC5jb3MoZikpLGM9dGhpcy5hKnRoaXMuQ195KmZ9ZWxzZXt2YXIgbT1NYXRoLnNpbihmKSxuPU1hdGguY29zKGYpO2M9dGhpcy5hKmgoZixtLG4sdGhpcy5lbiksYj10aGlzLmEqZSpuL01hdGguc3FydCgxLXRoaXMuZXMqbSptKX1yZXR1cm4gYS54PWIsYS55PWMsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZixnO3JldHVybiBhLngtPXRoaXMueDAsZj1hLngvdGhpcy5hLGEueS09dGhpcy55MCxiPWEueS90aGlzLmEsdGhpcy5zcGhlcmU/KGIvPXRoaXMuQ195LGYvPXRoaXMuQ194Kih0aGlzLm0rTWF0aC5jb3MoYikpLHRoaXMubT9iPWwoKHRoaXMubSpiK01hdGguc2luKGIpKS90aGlzLm4pOjEhPT10aGlzLm4mJihiPWwoTWF0aC5zaW4oYikvdGhpcy5uKSksZj1kKGYrdGhpcy5sb25nMCksYj1lKGIpKTooYj1pKGEueS90aGlzLmEsdGhpcy5lcyx0aGlzLmVuKSxnPU1hdGguYWJzKGIpLGo+Zz8oZz1NYXRoLnNpbihiKSxjPXRoaXMubG9uZzArYS54Kk1hdGguc3FydCgxLXRoaXMuZXMqZypnKS8odGhpcy5hKk1hdGguY29zKGIpKSxmPWQoYykpOmo+Zy1rJiYoZj10aGlzLmxvbmcwKSksYS54PWYsYS55PWIsYX0sYy5uYW1lcz1bIlNpbnVzb2lkYWwiLCJzaW51Il19LHsiLi4vY29tbW9uL2FkanVzdF9sYXQiOjQsIi4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vYXNpbnoiOjYsIi4uL2NvbW1vbi9wal9lbmZuIjoxNywiLi4vY29tbW9uL3BqX2ludl9tbGZuIjoxOCwiLi4vY29tbW9uL3BqX21sZm4iOjE5fV0sNTk6W2Z1bmN0aW9uKGEsYixjKXtjLmluaXQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmxhdDA7dGhpcy5sYW1iZGEwPXRoaXMubG9uZzA7dmFyIGI9TWF0aC5zaW4oYSksYz10aGlzLmEsZD10aGlzLnJmLGU9MS9kLGY9MiplLU1hdGgucG93KGUsMiksZz10aGlzLmU9TWF0aC5zcXJ0KGYpO3RoaXMuUj10aGlzLmswKmMqTWF0aC5zcXJ0KDEtZikvKDEtZipNYXRoLnBvdyhiLDIpKSx0aGlzLmFscGhhPU1hdGguc3FydCgxK2YvKDEtZikqTWF0aC5wb3coTWF0aC5jb3MoYSksNCkpLHRoaXMuYjA9TWF0aC5hc2luKGIvdGhpcy5hbHBoYSk7dmFyIGg9TWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K3RoaXMuYjAvMikpLGk9TWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K2EvMikpLGo9TWF0aC5sb2coKDErZypiKS8oMS1nKmIpKTt0aGlzLks9aC10aGlzLmFscGhhKmkrdGhpcy5hbHBoYSpnLzIqan0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPU1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNC1hLnkvMikpLGM9dGhpcy5lLzIqTWF0aC5sb2coKDErdGhpcy5lKk1hdGguc2luKGEueSkpLygxLXRoaXMuZSpNYXRoLnNpbihhLnkpKSksZD0tdGhpcy5hbHBoYSooYitjKSt0aGlzLkssZT0yKihNYXRoLmF0YW4oTWF0aC5leHAoZCkpLU1hdGguUEkvNCksZj10aGlzLmFscGhhKihhLngtdGhpcy5sYW1iZGEwKSxnPU1hdGguYXRhbihNYXRoLnNpbihmKS8oTWF0aC5zaW4odGhpcy5iMCkqTWF0aC50YW4oZSkrTWF0aC5jb3ModGhpcy5iMCkqTWF0aC5jb3MoZikpKSxoPU1hdGguYXNpbihNYXRoLmNvcyh0aGlzLmIwKSpNYXRoLnNpbihlKS1NYXRoLnNpbih0aGlzLmIwKSpNYXRoLmNvcyhlKSpNYXRoLmNvcyhmKSk7cmV0dXJuIGEueT10aGlzLlIvMipNYXRoLmxvZygoMStNYXRoLnNpbihoKSkvKDEtTWF0aC5zaW4oaCkpKSt0aGlzLnkwLGEueD10aGlzLlIqZyt0aGlzLngwLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9YS54LXRoaXMueDAsYz1hLnktdGhpcy55MCxkPWIvdGhpcy5SLGU9MiooTWF0aC5hdGFuKE1hdGguZXhwKGMvdGhpcy5SKSktTWF0aC5QSS80KSxmPU1hdGguYXNpbihNYXRoLmNvcyh0aGlzLmIwKSpNYXRoLnNpbihlKStNYXRoLnNpbih0aGlzLmIwKSpNYXRoLmNvcyhlKSpNYXRoLmNvcyhkKSksZz1NYXRoLmF0YW4oTWF0aC5zaW4oZCkvKE1hdGguY29zKHRoaXMuYjApKk1hdGguY29zKGQpLU1hdGguc2luKHRoaXMuYjApKk1hdGgudGFuKGUpKSksaD10aGlzLmxhbWJkYTArZy90aGlzLmFscGhhLGk9MCxqPWYsaz0tMWUzLGw9MDtNYXRoLmFicyhqLWspPjFlLTc7KXtpZigrK2w+MjApcmV0dXJuO2k9MS90aGlzLmFscGhhKihNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJLzQrZi8yKSktdGhpcy5LKSt0aGlzLmUqTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K01hdGguYXNpbih0aGlzLmUqTWF0aC5zaW4oaikpLzIpKSxrPWosaj0yKk1hdGguYXRhbihNYXRoLmV4cChpKSktTWF0aC5QSS8yfXJldHVybiBhLng9aCxhLnk9aixhfSxjLm5hbWVzPVsic29tZXJjIl19LHt9XSw2MDpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPU1hdGguUEkvMixlPTFlLTEwLGY9YSgiLi4vY29tbW9uL3NpZ24iKSxnPWEoIi4uL2NvbW1vbi9tc2ZueiIpLGg9YSgiLi4vY29tbW9uL3RzZm56IiksaT1hKCIuLi9jb21tb24vcGhpMnoiKSxqPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIik7Yy5zc2ZuXz1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGIqPWMsTWF0aC50YW4oLjUqKGQrYSkpKk1hdGgucG93KCgxLWIpLygxK2IpLC41KmMpfSxjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLmNvc2xhdDA9TWF0aC5jb3ModGhpcy5sYXQwKSx0aGlzLnNpbmxhdDA9TWF0aC5zaW4odGhpcy5sYXQwKSx0aGlzLnNwaGVyZT8xPT09dGhpcy5rMCYmIWlzTmFOKHRoaXMubGF0X3RzKSYmTWF0aC5hYnModGhpcy5jb3NsYXQwKTw9ZSYmKHRoaXMuazA9LjUqKDErZih0aGlzLmxhdDApKk1hdGguc2luKHRoaXMubGF0X3RzKSkpOihNYXRoLmFicyh0aGlzLmNvc2xhdDApPD1lJiYodGhpcy5sYXQwPjA/dGhpcy5jb249MTp0aGlzLmNvbj0tMSksdGhpcy5jb25zPU1hdGguc3FydChNYXRoLnBvdygxK3RoaXMuZSwxK3RoaXMuZSkqTWF0aC5wb3coMS10aGlzLmUsMS10aGlzLmUpKSwxPT09dGhpcy5rMCYmIWlzTmFOKHRoaXMubGF0X3RzKSYmTWF0aC5hYnModGhpcy5jb3NsYXQwKTw9ZSYmKHRoaXMuazA9LjUqdGhpcy5jb25zKmcodGhpcy5lLE1hdGguc2luKHRoaXMubGF0X3RzKSxNYXRoLmNvcyh0aGlzLmxhdF90cykpL2godGhpcy5lLHRoaXMuY29uKnRoaXMubGF0X3RzLHRoaXMuY29uKk1hdGguc2luKHRoaXMubGF0X3RzKSkpLHRoaXMubXMxPWcodGhpcy5lLHRoaXMuc2lubGF0MCx0aGlzLmNvc2xhdDApLHRoaXMuWDA9MipNYXRoLmF0YW4odGhpcy5zc2ZuXyh0aGlzLmxhdDAsdGhpcy5zaW5sYXQwLHRoaXMuZSkpLWQsdGhpcy5jb3NYMD1NYXRoLmNvcyh0aGlzLlgwKSx0aGlzLnNpblgwPU1hdGguc2luKHRoaXMuWDApKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZixnLGksayxsPWEueCxtPWEueSxuPU1hdGguc2luKG0pLG89TWF0aC5jb3MobSkscD1qKGwtdGhpcy5sb25nMCk7cmV0dXJuIE1hdGguYWJzKE1hdGguYWJzKGwtdGhpcy5sb25nMCktTWF0aC5QSSk8PWUmJk1hdGguYWJzKG0rdGhpcy5sYXQwKTw9ZT8oYS54PU5hTixhLnk9TmFOLGEpOnRoaXMuc3BoZXJlPyhiPTIqdGhpcy5rMC8oMSt0aGlzLnNpbmxhdDAqbit0aGlzLmNvc2xhdDAqbypNYXRoLmNvcyhwKSksYS54PXRoaXMuYSpiKm8qTWF0aC5zaW4ocCkrdGhpcy54MCxhLnk9dGhpcy5hKmIqKHRoaXMuY29zbGF0MCpuLXRoaXMuc2lubGF0MCpvKk1hdGguY29zKHApKSt0aGlzLnkwLGEpOihjPTIqTWF0aC5hdGFuKHRoaXMuc3Nmbl8obSxuLHRoaXMuZSkpLWQsZz1NYXRoLmNvcyhjKSxmPU1hdGguc2luKGMpLE1hdGguYWJzKHRoaXMuY29zbGF0MCk8PWU/KGk9aCh0aGlzLmUsbSp0aGlzLmNvbix0aGlzLmNvbipuKSxrPTIqdGhpcy5hKnRoaXMuazAqaS90aGlzLmNvbnMsYS54PXRoaXMueDAraypNYXRoLnNpbihsLXRoaXMubG9uZzApLGEueT10aGlzLnkwLXRoaXMuY29uKmsqTWF0aC5jb3MobC10aGlzLmxvbmcwKSxhKTooTWF0aC5hYnModGhpcy5zaW5sYXQwKTxlPyhiPTIqdGhpcy5hKnRoaXMuazAvKDErZypNYXRoLmNvcyhwKSksYS55PWIqZik6KGI9Mip0aGlzLmEqdGhpcy5rMCp0aGlzLm1zMS8odGhpcy5jb3NYMCooMSt0aGlzLnNpblgwKmYrdGhpcy5jb3NYMCpnKk1hdGguY29zKHApKSksYS55PWIqKHRoaXMuY29zWDAqZi10aGlzLnNpblgwKmcqTWF0aC5jb3MocCkpK3RoaXMueTApLGEueD1iKmcqTWF0aC5zaW4ocCkrdGhpcy54MCxhKSl9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXthLngtPXRoaXMueDAsYS55LT10aGlzLnkwO3ZhciBiLGMsZixnLGgsaz1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KTtpZih0aGlzLnNwaGVyZSl7dmFyIGw9MipNYXRoLmF0YW4oay8oLjUqdGhpcy5hKnRoaXMuazApKTtyZXR1cm4gYj10aGlzLmxvbmcwLGM9dGhpcy5sYXQwLGU+PWs/KGEueD1iLGEueT1jLGEpOihjPU1hdGguYXNpbihNYXRoLmNvcyhsKSp0aGlzLnNpbmxhdDArYS55Kk1hdGguc2luKGwpKnRoaXMuY29zbGF0MC9rKSxiPWooTWF0aC5hYnModGhpcy5jb3NsYXQwKTxlP3RoaXMubGF0MD4wP3RoaXMubG9uZzArTWF0aC5hdGFuMihhLngsLTEqYS55KTp0aGlzLmxvbmcwK01hdGguYXRhbjIoYS54LGEueSk6dGhpcy5sb25nMCtNYXRoLmF0YW4yKGEueCpNYXRoLnNpbihsKSxrKnRoaXMuY29zbGF0MCpNYXRoLmNvcyhsKS1hLnkqdGhpcy5zaW5sYXQwKk1hdGguc2luKGwpKSksYS54PWIsYS55PWMsYSl9aWYoTWF0aC5hYnModGhpcy5jb3NsYXQwKTw9ZSl7aWYoZT49aylyZXR1cm4gYz10aGlzLmxhdDAsYj10aGlzLmxvbmcwLGEueD1iLGEueT1jLGE7YS54Kj10aGlzLmNvbixhLnkqPXRoaXMuY29uLGY9ayp0aGlzLmNvbnMvKDIqdGhpcy5hKnRoaXMuazApLGM9dGhpcy5jb24qaSh0aGlzLmUsZiksYj10aGlzLmNvbipqKHRoaXMuY29uKnRoaXMubG9uZzArTWF0aC5hdGFuMihhLngsLTEqYS55KSl9ZWxzZSBnPTIqTWF0aC5hdGFuKGsqdGhpcy5jb3NYMC8oMip0aGlzLmEqdGhpcy5rMCp0aGlzLm1zMSkpLGI9dGhpcy5sb25nMCxlPj1rP2g9dGhpcy5YMDooaD1NYXRoLmFzaW4oTWF0aC5jb3MoZykqdGhpcy5zaW5YMCthLnkqTWF0aC5zaW4oZykqdGhpcy5jb3NYMC9rKSxiPWoodGhpcy5sb25nMCtNYXRoLmF0YW4yKGEueCpNYXRoLnNpbihnKSxrKnRoaXMuY29zWDAqTWF0aC5jb3MoZyktYS55KnRoaXMuc2luWDAqTWF0aC5zaW4oZykpKSksYz0tMSppKHRoaXMuZSxNYXRoLnRhbiguNSooZCtoKSkpO3JldHVybiBhLng9YixhLnk9YyxhfSxjLm5hbWVzPVsic3RlcmUiLCJTdGVyZW9ncmFwaGljX1NvdXRoX1BvbGUiLCJQb2xhciBTdGVyZW9ncmFwaGljICh2YXJpYW50IEIpIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9tc2ZueiI6MTUsIi4uL2NvbW1vbi9waGkyeiI6MTYsIi4uL2NvbW1vbi9zaWduIjoyMSwiLi4vY29tbW9uL3RzZm56IjoyNH1dLDYxOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi9nYXVzcyIpLGU9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKTtjLmluaXQ9ZnVuY3Rpb24oKXtkLmluaXQuYXBwbHkodGhpcyksdGhpcy5yYyYmKHRoaXMuc2luYzA9TWF0aC5zaW4odGhpcy5waGljMCksdGhpcy5jb3NjMD1NYXRoLmNvcyh0aGlzLnBoaWMwKSx0aGlzLlIyPTIqdGhpcy5yYyx0aGlzLnRpdGxlfHwodGhpcy50aXRsZT0iT2JsaXF1ZSBTdGVyZW9ncmFwaGljIEFsdGVybmF0aXZlIikpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxmLGc7cmV0dXJuIGEueD1lKGEueC10aGlzLmxvbmcwKSxkLmZvcndhcmQuYXBwbHkodGhpcyxbYV0pLGI9TWF0aC5zaW4oYS55KSxjPU1hdGguY29zKGEueSksZj1NYXRoLmNvcyhhLngpLGc9dGhpcy5rMCp0aGlzLlIyLygxK3RoaXMuc2luYzAqYit0aGlzLmNvc2MwKmMqZiksYS54PWcqYypNYXRoLnNpbihhLngpLGEueT1nKih0aGlzLmNvc2MwKmItdGhpcy5zaW5jMCpjKmYpLGEueD10aGlzLmEqYS54K3RoaXMueDAsYS55PXRoaXMuYSphLnkrdGhpcy55MCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxmLGcsaDtpZihhLng9KGEueC10aGlzLngwKS90aGlzLmEsYS55PShhLnktdGhpcy55MCkvdGhpcy5hLGEueC89dGhpcy5rMCxhLnkvPXRoaXMuazAsaD1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSl7dmFyIGk9MipNYXRoLmF0YW4yKGgsdGhpcy5SMik7Yj1NYXRoLnNpbihpKSxjPU1hdGguY29zKGkpLGc9TWF0aC5hc2luKGMqdGhpcy5zaW5jMCthLnkqYip0aGlzLmNvc2MwL2gpLGY9TWF0aC5hdGFuMihhLngqYixoKnRoaXMuY29zYzAqYy1hLnkqdGhpcy5zaW5jMCpiKX1lbHNlIGc9dGhpcy5waGljMCxmPTA7cmV0dXJuIGEueD1mLGEueT1nLGQuaW52ZXJzZS5hcHBseSh0aGlzLFthXSksYS54PWUoYS54K3RoaXMubG9uZzApLGF9LGMubmFtZXM9WyJTdGVyZW9ncmFwaGljX05vcnRoX1BvbGUiLCJPYmxpcXVlX1N0ZXJlb2dyYXBoaWMiLCJQb2xhcl9TdGVyZW9ncmFwaGljIiwic3RlcmVhIiwiT2JsaXF1ZSBTdGVyZW9ncmFwaGljIEFsdGVybmF0aXZlIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4vZ2F1c3MiOjQ2fV0sNjI6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vZTBmbiIpLGU9YSgiLi4vY29tbW9uL2UxZm4iKSxmPWEoIi4uL2NvbW1vbi9lMmZuIiksZz1hKCIuLi9jb21tb24vZTNmbiIpLGg9YSgiLi4vY29tbW9uL21sZm4iKSxpPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksaj1NYXRoLlBJLzIsaz0xZS0xMCxsPWEoIi4uL2NvbW1vbi9zaWduIiksbT1hKCIuLi9jb21tb24vYXNpbnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLmUwPWQodGhpcy5lcyksdGhpcy5lMT1lKHRoaXMuZXMpLHRoaXMuZTI9Zih0aGlzLmVzKSx0aGlzLmUzPWcodGhpcy5lcyksdGhpcy5tbDA9dGhpcy5hKmgodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyx0aGlzLmxhdDApfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9YS54LGY9YS55LGc9aShlLXRoaXMubG9uZzApLGo9TWF0aC5zaW4oZiksaz1NYXRoLmNvcyhmKTtpZih0aGlzLnNwaGVyZSl7dmFyIGw9aypNYXRoLnNpbihnKTtpZihNYXRoLmFicyhNYXRoLmFicyhsKS0xKTwxZS0xMClyZXR1cm4gOTM7Yz0uNSp0aGlzLmEqdGhpcy5rMCpNYXRoLmxvZygoMStsKS8oMS1sKSksYj1NYXRoLmFjb3MoaypNYXRoLmNvcyhnKS9NYXRoLnNxcnQoMS1sKmwpKSwwPmYmJihiPS1iKSxkPXRoaXMuYSp0aGlzLmswKihiLXRoaXMubGF0MCl9ZWxzZXt2YXIgbT1rKmcsbj1NYXRoLnBvdyhtLDIpLG89dGhpcy5lcDIqTWF0aC5wb3coaywyKSxwPU1hdGgudGFuKGYpLHE9TWF0aC5wb3cocCwyKTtiPTEtdGhpcy5lcypNYXRoLnBvdyhqLDIpO3ZhciByPXRoaXMuYS9NYXRoLnNxcnQoYikscz10aGlzLmEqaCh0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLGYpO2M9dGhpcy5rMCpyKm0qKDErbi82KigxLXErbytuLzIwKig1LTE4KnErTWF0aC5wb3cocSwyKSs3MipvLTU4KnRoaXMuZXAyKSkpK3RoaXMueDAsZD10aGlzLmswKihzLXRoaXMubWwwK3IqcCoobiooLjUrbi8yNCooNS1xKzkqbys0Kk1hdGgucG93KG8sMikrbi8zMCooNjEtNTgqcStNYXRoLnBvdyhxLDIpKzYwMCpvLTMzMCp0aGlzLmVwMikpKSkpK3RoaXMueTB9cmV0dXJuIGEueD1jLGEueT1kLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaD02O2lmKHRoaXMuc3BoZXJlKXt2YXIgbj1NYXRoLmV4cChhLngvKHRoaXMuYSp0aGlzLmswKSksbz0uNSoobi0xL24pLHA9dGhpcy5sYXQwK2EueS8odGhpcy5hKnRoaXMuazApLHE9TWF0aC5jb3MocCk7Yj1NYXRoLnNxcnQoKDEtcSpxKS8oMStvKm8pKSxmPW0oYiksMD5wJiYoZj0tZiksZz0wPT09byYmMD09PXE/dGhpcy5sb25nMDppKE1hdGguYXRhbjIobyxxKSt0aGlzLmxvbmcwKX1lbHNle3ZhciByPWEueC10aGlzLngwLHM9YS55LXRoaXMueTA7Zm9yKGI9KHRoaXMubWwwK3MvdGhpcy5rMCkvdGhpcy5hLGM9YixlPTA7ITAmJihkPShiK3RoaXMuZTEqTWF0aC5zaW4oMipjKS10aGlzLmUyKk1hdGguc2luKDQqYykrdGhpcy5lMypNYXRoLnNpbig2KmMpKS90aGlzLmUwLWMsYys9ZCwhKE1hdGguYWJzKGQpPD1rKSk7ZSsrKWlmKGU+PWgpcmV0dXJuIDk1O2lmKE1hdGguYWJzKGMpPGope3ZhciB0PU1hdGguc2luKGMpLHU9TWF0aC5jb3MoYyksdj1NYXRoLnRhbihjKSx3PXRoaXMuZXAyKk1hdGgucG93KHUsMikseD1NYXRoLnBvdyh3LDIpLHk9TWF0aC5wb3codiwyKSx6PU1hdGgucG93KHksMik7Yj0xLXRoaXMuZXMqTWF0aC5wb3codCwyKTt2YXIgQT10aGlzLmEvTWF0aC5zcXJ0KGIpLEI9QSooMS10aGlzLmVzKS9iLEM9ci8oQSp0aGlzLmswKSxEPU1hdGgucG93KEMsMik7Zj1jLUEqdipEL0IqKC41LUQvMjQqKDUrMyp5KzEwKnctNCp4LTkqdGhpcy5lcDItRC8zMCooNjErOTAqeSsyOTgqdys0NSp6LTI1Mip0aGlzLmVwMi0zKngpKSksZz1pKHRoaXMubG9uZzArQyooMS1ELzYqKDErMip5K3ctRC8yMCooNS0yKncrMjgqeS0zKngrOCp0aGlzLmVwMisyNCp6KSkpL3UpfWVsc2UgZj1qKmwocyksZz10aGlzLmxvbmcwfXJldHVybiBhLng9ZyxhLnk9ZixhfSxjLm5hbWVzPVsiVHJhbnN2ZXJzZV9NZXJjYXRvciIsIlRyYW5zdmVyc2UgTWVyY2F0b3IiLCJ0bWVyYyJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vYXNpbnoiOjYsIi4uL2NvbW1vbi9lMGZuIjo3LCIuLi9jb21tb24vZTFmbiI6OCwiLi4vY29tbW9uL2UyZm4iOjksIi4uL2NvbW1vbi9lM2ZuIjoxMCwiLi4vY29tbW9uL21sZm4iOjE0LCIuLi9jb21tb24vc2lnbiI6MjF9XSw2MzpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPS4wMTc0NTMyOTI1MTk5NDMyOTUsZT1hKCIuL3RtZXJjIik7Yy5kZXBlbmRzT249InRtZXJjIixjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnpvbmUmJih0aGlzLmxhdDA9MCx0aGlzLmxvbmcwPSg2Kk1hdGguYWJzKHRoaXMuem9uZSktMTgzKSpkLHRoaXMueDA9NWU1LHRoaXMueTA9dGhpcy51dG1Tb3V0aD8xZTc6MCx0aGlzLmswPS45OTk2LGUuaW5pdC5hcHBseSh0aGlzKSx0aGlzLmZvcndhcmQ9ZS5mb3J3YXJkLHRoaXMuaW52ZXJzZT1lLmludmVyc2UpfSxjLm5hbWVzPVsiVW5pdmVyc2FsIFRyYW5zdmVyc2UgTWVyY2F0b3IgU3lzdGVtIiwidXRtIl19LHsiLi90bWVyYyI6NjJ9XSw2NDpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksZT1NYXRoLlBJLzIsZj0xZS0xMCxnPWEoIi4uL2NvbW1vbi9hc2lueiIpO2MuaW5pdD1mdW5jdGlvbigpe3RoaXMuUj10aGlzLmF9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYixjLGg9YS54LGk9YS55LGo9ZChoLXRoaXMubG9uZzApO01hdGguYWJzKGkpPD1mJiYoYj10aGlzLngwK3RoaXMuUipqLGM9dGhpcy55MCk7dmFyIGs9ZygyKk1hdGguYWJzKGkvTWF0aC5QSSkpOyhNYXRoLmFicyhqKTw9Znx8TWF0aC5hYnMoTWF0aC5hYnMoaSktZSk8PWYpJiYoYj10aGlzLngwLGM9aT49MD90aGlzLnkwK01hdGguUEkqdGhpcy5SKk1hdGgudGFuKC41KmspOnRoaXMueTArTWF0aC5QSSp0aGlzLlIqLU1hdGgudGFuKC41KmspKTt2YXIgbD0uNSpNYXRoLmFicyhNYXRoLlBJL2otai9NYXRoLlBJKSxtPWwqbCxuPU1hdGguc2luKGspLG89TWF0aC5jb3MoaykscD1vLyhuK28tMSkscT1wKnAscj1wKigyL24tMSkscz1yKnIsdD1NYXRoLlBJKnRoaXMuUioobCoocC1zKStNYXRoLnNxcnQobSoocC1zKSoocC1zKS0ocyttKSoocS1zKSkpLyhzK20pOzA+aiYmKHQ9LXQpLGI9dGhpcy54MCt0O3ZhciB1PW0rcDtyZXR1cm4gdD1NYXRoLlBJKnRoaXMuUioocip1LWwqTWF0aC5zcXJ0KChzK20pKihtKzEpLXUqdSkpLyhzK20pLGM9aT49MD90aGlzLnkwK3Q6dGhpcy55MC10LGEueD1iLGEueT1jLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGUsZyxoLGksaixrLGwsbSxuLG8scDtyZXR1cm4gYS54LT10aGlzLngwLGEueS09dGhpcy55MCxuPU1hdGguUEkqdGhpcy5SLGU9YS54L24sZz1hLnkvbixoPWUqZStnKmcsaT0tTWF0aC5hYnMoZykqKDEraCksaj1pLTIqZypnK2UqZSxrPS0yKmkrMSsyKmcqZytoKmgscD1nKmcvaysoMipqKmoqai9rL2svay05Kmkqai9rL2spLzI3LGw9KGktaipqLzMvaykvayxtPTIqTWF0aC5zcXJ0KC1sLzMpLG49MypwL2wvbSxNYXRoLmFicyhuKT4xJiYobj1uPj0wPzE6LTEpLG89TWF0aC5hY29zKG4pLzMsYz1hLnk+PTA/KC1tKk1hdGguY29zKG8rTWF0aC5QSS8zKS1qLzMvaykqTWF0aC5QSTotKC1tKk1hdGguY29zKG8rTWF0aC5QSS8zKS1qLzMvaykqTWF0aC5QSSxiPU1hdGguYWJzKGUpPGY/dGhpcy5sb25nMDpkKHRoaXMubG9uZzArTWF0aC5QSSooaC0xK01hdGguc3FydCgxKzIqKGUqZS1nKmcpK2gqaCkpLzIvZSksYS54PWIsYS55PWMsYX0sYy5uYW1lcz1bIlZhbl9kZXJfR3JpbnRlbl9JIiwiVmFuRGVyR3JpbnRlbiIsInZhbmRnIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9hc2lueiI6Nn1dLDY1OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9LjAxNzQ1MzI5MjUxOTk0MzI5NSxlPTU3LjI5NTc3OTUxMzA4MjMyLGY9MSxnPTIsaD1hKCIuL2RhdHVtX3RyYW5zZm9ybSIpLGk9YSgiLi9hZGp1c3RfYXhpcyIpLGo9YSgiLi9Qcm9qIiksaz1hKCIuL2NvbW1vbi90b1BvaW50Iik7Yi5leHBvcnRzPWZ1bmN0aW9uIGwoYSxiLGMpe2Z1bmN0aW9uIG0oYSxiKXtyZXR1cm4oYS5kYXR1bS5kYXR1bV90eXBlPT09Znx8YS5kYXR1bS5kYXR1bV90eXBlPT09ZykmJiJXR1M4NCIhPT1iLmRhdHVtQ29kZX12YXIgbjtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmKGM9ayhjKSksYS5kYXR1bSYmYi5kYXR1bSYmKG0oYSxiKXx8bShiLGEpKSYmKG49bmV3IGooIldHUzg0IiksbChhLG4sYyksYT1uKSwiZW51IiE9PWEuYXhpcyYmaShhLCExLGMpLCJsb25nbGF0Ij09PWEucHJvak5hbWU/KGMueCo9ZCxjLnkqPWQpOihhLnRvX21ldGVyJiYoYy54Kj1hLnRvX21ldGVyLGMueSo9YS50b19tZXRlciksYS5pbnZlcnNlKGMpKSxhLmZyb21fZ3JlZW53aWNoJiYoYy54Kz1hLmZyb21fZ3JlZW53aWNoKSxjPWgoYS5kYXR1bSxiLmRhdHVtLGMpLGIuZnJvbV9ncmVlbndpY2gmJihjLngtPWIuZnJvbV9ncmVlbndpY2gpLCJsb25nbGF0Ij09PWIucHJvak5hbWU/KGMueCo9ZSxjLnkqPWUpOihiLmZvcndhcmQoYyksYi50b19tZXRlciYmKGMueC89Yi50b19tZXRlcixjLnkvPWIudG9fbWV0ZXIpKSwiZW51IiE9PWIuYXhpcyYmaShiLCEwLGMpLGN9fSx7Ii4vUHJvaiI6MiwiLi9hZGp1c3RfYXhpcyI6MywiLi9jb21tb24vdG9Qb2ludCI6MjMsIi4vZGF0dW1fdHJhbnNmb3JtIjozMX1dLDY2OltmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhLGIsYyl7YVtiXT1jLm1hcChmdW5jdGlvbihhKXt2YXIgYj17fTtyZXR1cm4gZShhLGIpLGJ9KS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXtyZXR1cm4gaihhLGIpfSx7fSl9ZnVuY3Rpb24gZShhLGIpe3ZhciBjO3JldHVybiBBcnJheS5pc0FycmF5KGEpPyhjPWEuc2hpZnQoKSwiUEFSQU1FVEVSIj09PWMmJihjPWEuc2hpZnQoKSksMT09PWEubGVuZ3RoP0FycmF5LmlzQXJyYXkoYVswXSk/KGJbY109e30sZShhWzBdLGJbY10pKTpiW2NdPWFbMF06YS5sZW5ndGg/IlRPV0dTODQiPT09Yz9iW2NdPWE6KGJbY109e30sWyJVTklUIiwiUFJJTUVNIiwiVkVSVF9EQVRVTSJdLmluZGV4T2YoYyk+LTE/KGJbY109e25hbWU6YVswXS50b0xvd2VyQ2FzZSgpLGNvbnZlcnQ6YVsxXX0sMz09PWEubGVuZ3RoJiYoYltjXS5hdXRoPWFbMl0pKToiU1BIRVJPSUQiPT09Yz8oYltjXT17bmFtZTphWzBdLGE6YVsxXSxyZjphWzJdfSw0PT09YS5sZW5ndGgmJihiW2NdLmF1dGg9YVszXSkpOlsiR0VPR0NTIiwiR0VPQ0NTIiwiREFUVU0iLCJWRVJUX0NTIiwiQ09NUERfQ1MiLCJMT0NBTF9DUyIsIkZJVFRFRF9DUyIsIkxPQ0FMX0RBVFVNIl0uaW5kZXhPZihjKT4tMT8oYVswXT1bIm5hbWUiLGFbMF1dLGQoYixjLGEpKTphLmV2ZXJ5KGZ1bmN0aW9uKGEpe3JldHVybiBBcnJheS5pc0FycmF5KGEpfSk/ZChiLGMsYSk6ZShhLGJbY10pKTpiW2NdPSEwLHZvaWQgMCk6dm9pZChiW2FdPSEwKX1mdW5jdGlvbiBmKGEsYil7dmFyIGM9YlswXSxkPWJbMV07IShjIGluIGEpJiZkIGluIGEmJihhW2NdPWFbZF0sMz09PWIubGVuZ3RoJiYoYVtjXT1iWzJdKGFbY10pKSl9ZnVuY3Rpb24gZyhhKXtyZXR1cm4gYSppfWZ1bmN0aW9uIGgoYSl7ZnVuY3Rpb24gYihiKXt2YXIgYz1hLnRvX21ldGVyfHwxO3JldHVybiBwYXJzZUZsb2F0KGIsMTApKmN9IkdFT0dDUyI9PT1hLnR5cGU/YS5wcm9qTmFtZT0ibG9uZ2xhdCI6IkxPQ0FMX0NTIj09PWEudHlwZT8oYS5wcm9qTmFtZT0iaWRlbnRpdHkiLGEubG9jYWw9ITApOiJvYmplY3QiPT10eXBlb2YgYS5QUk9KRUNUSU9OP2EucHJvak5hbWU9T2JqZWN0LmtleXMoYS5QUk9KRUNUSU9OKVswXTphLnByb2pOYW1lPWEuUFJPSkVDVElPTixhLlVOSVQmJihhLnVuaXRzPWEuVU5JVC5uYW1lLnRvTG93ZXJDYXNlKCksIm1ldHJlIj09PWEudW5pdHMmJihhLnVuaXRzPSJtZXRlciIpLAphLlVOSVQuY29udmVydCYmKCJHRU9HQ1MiPT09YS50eXBlP2EuREFUVU0mJmEuREFUVU0uU1BIRVJPSUQmJihhLnRvX21ldGVyPXBhcnNlRmxvYXQoYS5VTklULmNvbnZlcnQsMTApKmEuREFUVU0uU1BIRVJPSUQuYSk6YS50b19tZXRlcj1wYXJzZUZsb2F0KGEuVU5JVC5jb252ZXJ0LDEwKSkpLGEuR0VPR0NTJiYoYS5HRU9HQ1MuREFUVU0/YS5kYXR1bUNvZGU9YS5HRU9HQ1MuREFUVU0ubmFtZS50b0xvd2VyQ2FzZSgpOmEuZGF0dW1Db2RlPWEuR0VPR0NTLm5hbWUudG9Mb3dlckNhc2UoKSwiZF8iPT09YS5kYXR1bUNvZGUuc2xpY2UoMCwyKSYmKGEuZGF0dW1Db2RlPWEuZGF0dW1Db2RlLnNsaWNlKDIpKSwoIm5ld196ZWFsYW5kX2dlb2RldGljX2RhdHVtXzE5NDkiPT09YS5kYXR1bUNvZGV8fCJuZXdfemVhbGFuZF8xOTQ5Ij09PWEuZGF0dW1Db2RlKSYmKGEuZGF0dW1Db2RlPSJuemdkNDkiKSwid2dzXzE5ODQiPT09YS5kYXR1bUNvZGUmJigiTWVyY2F0b3JfQXV4aWxpYXJ5X1NwaGVyZSI9PT1hLlBST0pFQ1RJT04mJihhLnNwaGVyZT0hMCksYS5kYXR1bUNvZGU9Indnczg0IiksIl9mZXJybyI9PT1hLmRhdHVtQ29kZS5zbGljZSgtNikmJihhLmRhdHVtQ29kZT1hLmRhdHVtQ29kZS5zbGljZSgwLC02KSksIl9qYWthcnRhIj09PWEuZGF0dW1Db2RlLnNsaWNlKC04KSYmKGEuZGF0dW1Db2RlPWEuZGF0dW1Db2RlLnNsaWNlKDAsLTgpKSx+YS5kYXR1bUNvZGUuaW5kZXhPZigiYmVsZ2UiKSYmKGEuZGF0dW1Db2RlPSJybmI3MiIpLGEuR0VPR0NTLkRBVFVNJiZhLkdFT0dDUy5EQVRVTS5TUEhFUk9JRCYmKGEuZWxscHM9YS5HRU9HQ1MuREFUVU0uU1BIRVJPSUQubmFtZS5yZXBsYWNlKCJfMTkiLCIiKS5yZXBsYWNlKC9bQ2NdbGFya2VcXzE4LywiY2xyayIpLCJpbnRlcm5hdGlvbmFsIj09PWEuZWxscHMudG9Mb3dlckNhc2UoKS5zbGljZSgwLDEzKSYmKGEuZWxscHM9ImludGwiKSxhLmE9YS5HRU9HQ1MuREFUVU0uU1BIRVJPSUQuYSxhLnJmPXBhcnNlRmxvYXQoYS5HRU9HQ1MuREFUVU0uU1BIRVJPSUQucmYsMTApKSx+YS5kYXR1bUNvZGUuaW5kZXhPZigib3NnYl8xOTM2IikmJihhLmRhdHVtQ29kZT0ib3NnYjM2IikpLGEuYiYmIWlzRmluaXRlKGEuYikmJihhLmI9YS5hKTt2YXIgYz1mdW5jdGlvbihiKXtyZXR1cm4gZihhLGIpfSxkPVtbInN0YW5kYXJkX3BhcmFsbGVsXzEiLCJTdGFuZGFyZF9QYXJhbGxlbF8xIl0sWyJzdGFuZGFyZF9wYXJhbGxlbF8yIiwiU3RhbmRhcmRfUGFyYWxsZWxfMiJdLFsiZmFsc2VfZWFzdGluZyIsIkZhbHNlX0Vhc3RpbmciXSxbImZhbHNlX25vcnRoaW5nIiwiRmFsc2VfTm9ydGhpbmciXSxbImNlbnRyYWxfbWVyaWRpYW4iLCJDZW50cmFsX01lcmlkaWFuIl0sWyJsYXRpdHVkZV9vZl9vcmlnaW4iLCJMYXRpdHVkZV9PZl9PcmlnaW4iXSxbImxhdGl0dWRlX29mX29yaWdpbiIsIkNlbnRyYWxfUGFyYWxsZWwiXSxbInNjYWxlX2ZhY3RvciIsIlNjYWxlX0ZhY3RvciJdLFsiazAiLCJzY2FsZV9mYWN0b3IiXSxbImxhdGl0dWRlX29mX2NlbnRlciIsIkxhdGl0dWRlX29mX2NlbnRlciJdLFsibGF0MCIsImxhdGl0dWRlX29mX2NlbnRlciIsZ10sWyJsb25naXR1ZGVfb2ZfY2VudGVyIiwiTG9uZ2l0dWRlX09mX0NlbnRlciJdLFsibG9uZ2MiLCJsb25naXR1ZGVfb2ZfY2VudGVyIixnXSxbIngwIiwiZmFsc2VfZWFzdGluZyIsYl0sWyJ5MCIsImZhbHNlX25vcnRoaW5nIixiXSxbImxvbmcwIiwiY2VudHJhbF9tZXJpZGlhbiIsZ10sWyJsYXQwIiwibGF0aXR1ZGVfb2Zfb3JpZ2luIixnXSxbImxhdDAiLCJzdGFuZGFyZF9wYXJhbGxlbF8xIixnXSxbImxhdDEiLCJzdGFuZGFyZF9wYXJhbGxlbF8xIixnXSxbImxhdDIiLCJzdGFuZGFyZF9wYXJhbGxlbF8yIixnXSxbImFscGhhIiwiYXppbXV0aCIsZ10sWyJzcnNDb2RlIiwibmFtZSJdXTtkLmZvckVhY2goYyksYS5sb25nMHx8IWEubG9uZ2N8fCJBbGJlcnNfQ29uaWNfRXF1YWxfQXJlYSIhPT1hLnByb2pOYW1lJiYiTGFtYmVydF9BemltdXRoYWxfRXF1YWxfQXJlYSIhPT1hLnByb2pOYW1lfHwoYS5sb25nMD1hLmxvbmdjKSxhLmxhdF90c3x8IWEubGF0MXx8IlN0ZXJlb2dyYXBoaWNfU291dGhfUG9sZSIhPT1hLnByb2pOYW1lJiYiUG9sYXIgU3RlcmVvZ3JhcGhpYyAodmFyaWFudCBCKSIhPT1hLnByb2pOYW1lfHwoYS5sYXQwPWcoYS5sYXQxPjA/OTA6LTkwKSxhLmxhdF90cz1hLmxhdDEpfXZhciBpPS4wMTc0NTMyOTI1MTk5NDMyOTUsaj1hKCIuL2V4dGVuZCIpO2IuZXhwb3J0cz1mdW5jdGlvbihhLGIpe3ZhciBjPUpTT04ucGFyc2UoKCIsIithKS5yZXBsYWNlKC9ccypcLFxzKihbQS1aXzAtOV0rPykoXFspL2csJyxbIiQxIiwnKS5zbGljZSgxKS5yZXBsYWNlKC9ccypcLFxzKihbQS1aXzAtOV0rPylcXS9nLCcsIiQxIl0nKS5yZXBsYWNlKC8sXFsiVkVSVENTIi4rLywiIikpLGQ9Yy5zaGlmdCgpLGY9Yy5zaGlmdCgpO2MudW5zaGlmdChbIm5hbWUiLGZdKSxjLnVuc2hpZnQoWyJ0eXBlIixkXSksYy51bnNoaWZ0KCJvdXRwdXQiKTt2YXIgZz17fTtyZXR1cm4gZShjLGcpLGgoZy5vdXRwdXQpLGooYixnLm91dHB1dCl9fSx7Ii4vZXh0ZW5kIjozNH1dLDY3OltmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXtyZXR1cm4gYSooTWF0aC5QSS8xODApfWZ1bmN0aW9uIGUoYSl7cmV0dXJuIDE4MCooYS9NYXRoLlBJKX1mdW5jdGlvbiBmKGEpe3ZhciBiLGMsZSxmLGcsaSxqLGssbCxtPWEubGF0LG49YS5sb24sbz02Mzc4MTM3LHA9LjAwNjY5NDM4LHE9Ljk5OTYscj1kKG0pLHM9ZChuKTtsPU1hdGguZmxvb3IoKG4rMTgwKS82KSsxLDE4MD09PW4mJihsPTYwKSxtPj01NiYmNjQ+bSYmbj49MyYmMTI+biYmKGw9MzIpLG0+PTcyJiY4ND5tJiYobj49MCYmOT5uP2w9MzE6bj49OSYmMjE+bj9sPTMzOm4+PTIxJiYzMz5uP2w9MzU6bj49MzMmJjQyPm4mJihsPTM3KSksYj02KihsLTEpLTE4MCszLGs9ZChiKSxjPXAvKDEtcCksZT1vL01hdGguc3FydCgxLXAqTWF0aC5zaW4ocikqTWF0aC5zaW4ocikpLGY9TWF0aC50YW4ocikqTWF0aC50YW4ociksZz1jKk1hdGguY29zKHIpKk1hdGguY29zKHIpLGk9TWF0aC5jb3MocikqKHMtayksaj1vKigoMS1wLzQtMypwKnAvNjQtNSpwKnAqcC8yNTYpKnItKDMqcC84KzMqcCpwLzMyKzQ1KnAqcCpwLzEwMjQpKk1hdGguc2luKDIqcikrKDE1KnAqcC8yNTYrNDUqcCpwKnAvMTAyNCkqTWF0aC5zaW4oNCpyKS0zNSpwKnAqcC8zMDcyKk1hdGguc2luKDYqcikpO3ZhciB0PXEqZSooaSsoMS1mK2cpKmkqaSppLzYrKDUtMTgqZitmKmYrNzIqZy01OCpjKSppKmkqaSppKmkvMTIwKSs1ZTUsdT1xKihqK2UqTWF0aC50YW4ocikqKGkqaS8yKyg1LWYrOSpnKzQqZypnKSppKmkqaSppLzI0Kyg2MS01OCpmK2YqZis2MDAqZy0zMzAqYykqaSppKmkqaSppKmkvNzIwKSk7cmV0dXJuIDA+bSYmKHUrPTFlNykse25vcnRoaW5nOk1hdGgucm91bmQodSksZWFzdGluZzpNYXRoLnJvdW5kKHQpLHpvbmVOdW1iZXI6bCx6b25lTGV0dGVyOmgobSl9fWZ1bmN0aW9uIGcoYSl7dmFyIGI9YS5ub3J0aGluZyxjPWEuZWFzdGluZyxkPWEuem9uZUxldHRlcixmPWEuem9uZU51bWJlcjtpZigwPmZ8fGY+NjApcmV0dXJuIG51bGw7dmFyIGgsaSxqLGssbCxtLG4sbyxwLHEscj0uOTk5NixzPTYzNzgxMzcsdD0uMDA2Njk0MzgsdT0oMS1NYXRoLnNxcnQoMS10KSkvKDErTWF0aC5zcXJ0KDEtdCkpLHY9Yy01ZTUsdz1iOyJOIj5kJiYody09MWU3KSxvPTYqKGYtMSktMTgwKzMsaD10LygxLXQpLG49dy9yLHA9bi8ocyooMS10LzQtMyp0KnQvNjQtNSp0KnQqdC8yNTYpKSxxPXArKDMqdS8yLTI3KnUqdSp1LzMyKSpNYXRoLnNpbigyKnApKygyMSp1KnUvMTYtNTUqdSp1KnUqdS8zMikqTWF0aC5zaW4oNCpwKSsxNTEqdSp1KnUvOTYqTWF0aC5zaW4oNipwKSxpPXMvTWF0aC5zcXJ0KDEtdCpNYXRoLnNpbihxKSpNYXRoLnNpbihxKSksaj1NYXRoLnRhbihxKSpNYXRoLnRhbihxKSxrPWgqTWF0aC5jb3MocSkqTWF0aC5jb3MocSksbD1zKigxLXQpL01hdGgucG93KDEtdCpNYXRoLnNpbihxKSpNYXRoLnNpbihxKSwxLjUpLG09di8oaSpyKTt2YXIgeD1xLWkqTWF0aC50YW4ocSkvbCoobSptLzItKDUrMypqKzEwKmstNCprKmstOSpoKSptKm0qbSptLzI0Kyg2MSs5MCpqKzI5OCprKzQ1Kmoqai0yNTIqaC0zKmsqaykqbSptKm0qbSptKm0vNzIwKTt4PWUoeCk7dmFyIHk9KG0tKDErMipqK2spKm0qbSptLzYrKDUtMiprKzI4KmotMyprKmsrOCpoKzI0KmoqaikqbSptKm0qbSptLzEyMCkvTWF0aC5jb3MocSk7eT1vK2UoeSk7dmFyIHo7aWYoYS5hY2N1cmFjeSl7dmFyIEE9Zyh7bm9ydGhpbmc6YS5ub3J0aGluZythLmFjY3VyYWN5LGVhc3Rpbmc6YS5lYXN0aW5nK2EuYWNjdXJhY3ksem9uZUxldHRlcjphLnpvbmVMZXR0ZXIsem9uZU51bWJlcjphLnpvbmVOdW1iZXJ9KTt6PXt0b3A6QS5sYXQscmlnaHQ6QS5sb24sYm90dG9tOngsbGVmdDp5fX1lbHNlIHo9e2xhdDp4LGxvbjp5fTtyZXR1cm4gen1mdW5jdGlvbiBoKGEpe3ZhciBiPSJaIjtyZXR1cm4gODQ+PWEmJmE+PTcyP2I9IlgiOjcyPmEmJmE+PTY0P2I9IlciOjY0PmEmJmE+PTU2P2I9IlYiOjU2PmEmJmE+PTQ4P2I9IlUiOjQ4PmEmJmE+PTQwP2I9IlQiOjQwPmEmJmE+PTMyP2I9IlMiOjMyPmEmJmE+PTI0P2I9IlIiOjI0PmEmJmE+PTE2P2I9IlEiOjE2PmEmJmE+PTg/Yj0iUCI6OD5hJiZhPj0wP2I9Ik4iOjA+YSYmYT49LTg/Yj0iTSI6LTg+YSYmYT49LTE2P2I9IkwiOi0xNj5hJiZhPj0tMjQ/Yj0iSyI6LTI0PmEmJmE+PS0zMj9iPSJKIjotMzI+YSYmYT49LTQwP2I9IkgiOi00MD5hJiZhPj0tNDg/Yj0iRyI6LTQ4PmEmJmE+PS01Nj9iPSJGIjotNTY+YSYmYT49LTY0P2I9IkUiOi02ND5hJiZhPj0tNzI/Yj0iRCI6LTcyPmEmJmE+PS04MCYmKGI9IkMiKSxifWZ1bmN0aW9uIGkoYSxiKXt2YXIgYz0iMDAwMDAiK2EuZWFzdGluZyxkPSIwMDAwMCIrYS5ub3J0aGluZztyZXR1cm4gYS56b25lTnVtYmVyK2Euem9uZUxldHRlcitqKGEuZWFzdGluZyxhLm5vcnRoaW5nLGEuem9uZU51bWJlcikrYy5zdWJzdHIoYy5sZW5ndGgtNSxiKStkLnN1YnN0cihkLmxlbmd0aC01LGIpfWZ1bmN0aW9uIGooYSxiLGMpe3ZhciBkPWsoYyksZT1NYXRoLmZsb29yKGEvMWU1KSxmPU1hdGguZmxvb3IoYi8xZTUpJTIwO3JldHVybiBsKGUsZixkKX1mdW5jdGlvbiBrKGEpe3ZhciBiPWElcTtyZXR1cm4gMD09PWImJihiPXEpLGJ9ZnVuY3Rpb24gbChhLGIsYyl7dmFyIGQ9Yy0xLGU9ci5jaGFyQ29kZUF0KGQpLGY9cy5jaGFyQ29kZUF0KGQpLGc9ZSthLTEsaD1mK2IsaT0hMTtnPngmJihnPWcteCt0LTEsaT0hMCksKGc9PT11fHx1PmUmJmc+dXx8KGc+dXx8dT5lKSYmaSkmJmcrKywoZz09PXZ8fHY+ZSYmZz52fHwoZz52fHx2PmUpJiZpKSYmKGcrKyxnPT09dSYmZysrKSxnPngmJihnPWcteCt0LTEpLGg+dz8oaD1oLXcrdC0xLGk9ITApOmk9ITEsKGg9PT11fHx1PmYmJmg+dXx8KGg+dXx8dT5mKSYmaSkmJmgrKywoaD09PXZ8fHY+ZiYmaD52fHwoaD52fHx2PmYpJiZpKSYmKGgrKyxoPT09dSYmaCsrKSxoPncmJihoPWgtdyt0LTEpO3ZhciBqPVN0cmluZy5mcm9tQ2hhckNvZGUoZykrU3RyaW5nLmZyb21DaGFyQ29kZShoKTtyZXR1cm4gan1mdW5jdGlvbiBtKGEpe2lmKGEmJjA9PT1hLmxlbmd0aCl0aHJvdyJNR1JTUG9pbnQgY292ZXJ0aW5nIGZyb20gbm90aGluZyI7Zm9yKHZhciBiLGM9YS5sZW5ndGgsZD1udWxsLGU9IiIsZj0wOyEvW0EtWl0vLnRlc3QoYj1hLmNoYXJBdChmKSk7KXtpZihmPj0yKXRocm93Ik1HUlNQb2ludCBiYWQgY29udmVyc2lvbiBmcm9tOiAiK2E7ZSs9YixmKyt9dmFyIGc9cGFyc2VJbnQoZSwxMCk7aWYoMD09PWZ8fGYrMz5jKXRocm93Ik1HUlNQb2ludCBiYWQgY29udmVyc2lvbiBmcm9tOiAiK2E7dmFyIGg9YS5jaGFyQXQoZisrKTtpZigiQSI+PWh8fCJCIj09PWh8fCJZIj09PWh8fGg+PSJaInx8IkkiPT09aHx8Ik8iPT09aCl0aHJvdyJNR1JTUG9pbnQgem9uZSBsZXR0ZXIgIitoKyIgbm90IGhhbmRsZWQ6ICIrYTtkPWEuc3Vic3RyaW5nKGYsZis9Mik7Zm9yKHZhciBpPWsoZyksaj1uKGQuY2hhckF0KDApLGkpLGw9byhkLmNoYXJBdCgxKSxpKTtsPHAoaCk7KWwrPTJlNjt2YXIgbT1jLWY7aWYobSUyIT09MCl0aHJvdyJNR1JTUG9pbnQgaGFzIHRvIGhhdmUgYW4gZXZlbiBudW1iZXIgXG5vZiBkaWdpdHMgYWZ0ZXIgdGhlIHpvbmUgbGV0dGVyIGFuZCB0d28gMTAwa20gbGV0dGVycyAtIGZyb250IFxuaGFsZiBmb3IgZWFzdGluZyBtZXRlcnMsIHNlY29uZCBoYWxmIGZvciBcbm5vcnRoaW5nIG1ldGVycyIrYTt2YXIgcSxyLHMsdCx1LHY9bS8yLHc9MCx4PTA7cmV0dXJuIHY+MCYmKHE9MWU1L01hdGgucG93KDEwLHYpLHI9YS5zdWJzdHJpbmcoZixmK3YpLHc9cGFyc2VGbG9hdChyKSpxLHM9YS5zdWJzdHJpbmcoZit2KSx4PXBhcnNlRmxvYXQocykqcSksdD13K2osdT14K2wse2Vhc3Rpbmc6dCxub3J0aGluZzp1LHpvbmVMZXR0ZXI6aCx6b25lTnVtYmVyOmcsYWNjdXJhY3k6cX19ZnVuY3Rpb24gbihhLGIpe2Zvcih2YXIgYz1yLmNoYXJDb2RlQXQoYi0xKSxkPTFlNSxlPSExO2MhPT1hLmNoYXJDb2RlQXQoMCk7KXtpZihjKyssYz09PXUmJmMrKyxjPT09diYmYysrLGM+eCl7aWYoZSl0aHJvdyJCYWQgY2hhcmFjdGVyOiAiK2E7Yz10LGU9ITB9ZCs9MWU1fXJldHVybiBkfWZ1bmN0aW9uIG8oYSxiKXtpZihhPiJWIil0aHJvdyJNR1JTUG9pbnQgZ2l2ZW4gaW52YWxpZCBOb3J0aGluZyAiK2E7Zm9yKHZhciBjPXMuY2hhckNvZGVBdChiLTEpLGQ9MCxlPSExO2MhPT1hLmNoYXJDb2RlQXQoMCk7KXtpZihjKyssYz09PXUmJmMrKyxjPT09diYmYysrLGM+dyl7aWYoZSl0aHJvdyJCYWQgY2hhcmFjdGVyOiAiK2E7Yz10LGU9ITB9ZCs9MWU1fXJldHVybiBkfWZ1bmN0aW9uIHAoYSl7dmFyIGI7c3dpdGNoKGEpe2Nhc2UiQyI6Yj0xMWU1O2JyZWFrO2Nhc2UiRCI6Yj0yZTY7YnJlYWs7Y2FzZSJFIjpiPTI4ZTU7YnJlYWs7Y2FzZSJGIjpiPTM3ZTU7YnJlYWs7Y2FzZSJHIjpiPTQ2ZTU7YnJlYWs7Y2FzZSJIIjpiPTU1ZTU7YnJlYWs7Y2FzZSJKIjpiPTY0ZTU7YnJlYWs7Y2FzZSJLIjpiPTczZTU7YnJlYWs7Y2FzZSJMIjpiPTgyZTU7YnJlYWs7Y2FzZSJNIjpiPTkxZTU7YnJlYWs7Y2FzZSJOIjpiPTA7YnJlYWs7Y2FzZSJQIjpiPThlNTticmVhaztjYXNlIlEiOmI9MTdlNTticmVhaztjYXNlIlIiOmI9MjZlNTticmVhaztjYXNlIlMiOmI9MzVlNTticmVhaztjYXNlIlQiOmI9NDRlNTticmVhaztjYXNlIlUiOmI9NTNlNTticmVhaztjYXNlIlYiOmI9NjJlNTticmVhaztjYXNlIlciOmI9N2U2O2JyZWFrO2Nhc2UiWCI6Yj03OWU1O2JyZWFrO2RlZmF1bHQ6Yj0tMX1pZihiPj0wKXJldHVybiBiO3Rocm93IkludmFsaWQgem9uZSBsZXR0ZXI6ICIrYX12YXIgcT02LHI9IkFKU0FKUyIscz0iQUZBRkFGIix0PTY1LHU9NzMsdj03OSx3PTg2LHg9OTA7Yy5mb3J3YXJkPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9Ynx8NSxpKGYoe2xhdDphWzFdLGxvbjphWzBdfSksYil9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYj1nKG0oYS50b1VwcGVyQ2FzZSgpKSk7cmV0dXJuIGIubGF0JiZiLmxvbj9bYi5sb24sYi5sYXQsYi5sb24sYi5sYXRdOltiLmxlZnQsYi5ib3R0b20sYi5yaWdodCxiLnRvcF19LGMudG9Qb2ludD1mdW5jdGlvbihhKXt2YXIgYj1nKG0oYS50b1VwcGVyQ2FzZSgpKSk7cmV0dXJuIGIubGF0JiZiLmxvbj9bYi5sb24sYi5sYXRdOlsoYi5sZWZ0K2IucmlnaHQpLzIsKGIudG9wK2IuYm90dG9tKS8yXX19LHt9XSw2ODpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz17bmFtZToicHJvajQiLHZlcnNpb246IjIuMy4xNCIsZGVzY3JpcHRpb246IlByb2o0anMgaXMgYSBKYXZhU2NyaXB0IGxpYnJhcnkgdG8gdHJhbnNmb3JtIHBvaW50IGNvb3JkaW5hdGVzIGZyb20gb25lIGNvb3JkaW5hdGUgc3lzdGVtIHRvIGFub3RoZXIsIGluY2x1ZGluZyBkYXR1bSB0cmFuc2Zvcm1hdGlvbnMuIixtYWluOiJsaWIvaW5kZXguanMiLGRpcmVjdG9yaWVzOnt0ZXN0OiJ0ZXN0Iixkb2M6ImRvY3MifSxzY3JpcHRzOnt0ZXN0OiIuL25vZGVfbW9kdWxlcy9pc3RhbmJ1bC9saWIvY2xpLmpzIHRlc3QgLi9ub2RlX21vZHVsZXMvbW9jaGEvYmluL19tb2NoYSB0ZXN0L3Rlc3QuanMifSxyZXBvc2l0b3J5Ont0eXBlOiJnaXQiLHVybDoiZ2l0Oi8vZ2l0aHViLmNvbS9wcm9qNGpzL3Byb2o0anMuZ2l0In0sYXV0aG9yOiIiLGxpY2Vuc2U6Ik1JVCIsamFtOnttYWluOiJkaXN0L3Byb2o0LmpzIixpbmNsdWRlOlsiZGlzdC9wcm9qNC5qcyIsIlJFQURNRS5tZCIsIkFVVEhPUlMiLCJMSUNFTlNFLm1kIl19LGRldkRlcGVuZGVuY2llczp7ImdydW50LWNsaSI6In4wLjEuMTMiLGdydW50OiJ+MC40LjIiLCJncnVudC1jb250cmliLWNvbm5lY3QiOiJ+MC42LjAiLCJncnVudC1jb250cmliLWpzaGludCI6In4wLjguMCIsY2hhaToifjEuOC4xIixtb2NoYToifjEuMTcuMSIsImdydW50LW1vY2hhLXBoYW50b21qcyI6In4wLjQuMCIsYnJvd3NlcmlmeToifjEyLjAuMSIsImdydW50LWJyb3dzZXJpZnkiOiJ+NC4wLjEiLCJncnVudC1jb250cmliLXVnbGlmeSI6In4wLjExLjEiLGN1cmw6ImdpdDovL2dpdGh1Yi5jb20vY3Vqb2pzL2N1cmwuZ2l0Iixpc3RhbmJ1bDoifjAuMi40Iix0aW46In4wLjQuMCJ9LGRlcGVuZGVuY2llczp7bWdyczoifjAuMC4yIn19fSx7fV0sIi4vaW5jbHVkZWRQcm9qZWN0aW9ucyI6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9YSgiaFRFRHBuIil9LHt9XSxoVEVEcG46W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1bYSgiLi9saWIvcHJvamVjdGlvbnMvdG1lcmMiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy91dG0iKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9zdGVyZWEiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9zdGVyZSIpLGEoIi4vbGliL3Byb2plY3Rpb25zL3NvbWVyYyIpLGEoIi4vbGliL3Byb2plY3Rpb25zL29tZXJjIiksYSgiLi9saWIvcHJvamVjdGlvbnMvbGNjIiksYSgiLi9saWIvcHJvamVjdGlvbnMva3JvdmFrIiksYSgiLi9saWIvcHJvamVjdGlvbnMvY2FzcyIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2xhZWEiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9hZWEiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9nbm9tIiksYSgiLi9saWIvcHJvamVjdGlvbnMvY2VhIiksYSgiLi9saWIvcHJvamVjdGlvbnMvZXFjIiksYSgiLi9saWIvcHJvamVjdGlvbnMvcG9seSIpLGEoIi4vbGliL3Byb2plY3Rpb25zL256bWciKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9taWxsIiksYSgiLi9saWIvcHJvamVjdGlvbnMvc2ludSIpLGEoIi4vbGliL3Byb2plY3Rpb25zL21vbGwiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9lcWRjIiksYSgiLi9saWIvcHJvamVjdGlvbnMvdmFuZGciKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9hZXFkIildO2IuZXhwb3J0cz1mdW5jdGlvbihwcm9qNCl7ZC5mb3JFYWNoKGZ1bmN0aW9uKGEpe3Byb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGEpfSl9fSx7Ii4vbGliL3Byb2plY3Rpb25zL2FlYSI6NDAsIi4vbGliL3Byb2plY3Rpb25zL2FlcWQiOjQxLCIuL2xpYi9wcm9qZWN0aW9ucy9jYXNzIjo0MiwiLi9saWIvcHJvamVjdGlvbnMvY2VhIjo0MywiLi9saWIvcHJvamVjdGlvbnMvZXFjIjo0NCwiLi9saWIvcHJvamVjdGlvbnMvZXFkYyI6NDUsIi4vbGliL3Byb2plY3Rpb25zL2dub20iOjQ3LCIuL2xpYi9wcm9qZWN0aW9ucy9rcm92YWsiOjQ4LCIuL2xpYi9wcm9qZWN0aW9ucy9sYWVhIjo0OSwiLi9saWIvcHJvamVjdGlvbnMvbGNjIjo1MCwiLi9saWIvcHJvamVjdGlvbnMvbWlsbCI6NTMsIi4vbGliL3Byb2plY3Rpb25zL21vbGwiOjU0LCIuL2xpYi9wcm9qZWN0aW9ucy9uem1nIjo1NSwiLi9saWIvcHJvamVjdGlvbnMvb21lcmMiOjU2LCIuL2xpYi9wcm9qZWN0aW9ucy9wb2x5Ijo1NywiLi9saWIvcHJvamVjdGlvbnMvc2ludSI6NTgsIi4vbGliL3Byb2plY3Rpb25zL3NvbWVyYyI6NTksIi4vbGliL3Byb2plY3Rpb25zL3N0ZXJlIjo2MCwiLi9saWIvcHJvamVjdGlvbnMvc3RlcmVhIjo2MSwiLi9saWIvcHJvamVjdGlvbnMvdG1lcmMiOjYyLCIuL2xpYi9wcm9qZWN0aW9ucy91dG0iOjYzLCIuL2xpYi9wcm9qZWN0aW9ucy92YW5kZyI6NjR9XX0se30sWzM2XSkoMzYpfSk7"></script>
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uIChmYWN0b3J5KSB7DQoJdmFyIEwsIHByb2o0Ow0KCWlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsNCgkJLy8gQU1EDQoJCWRlZmluZShbJ2xlYWZsZXQnLCAncHJvajQnXSwgZmFjdG9yeSk7DQoJfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICJvYmplY3QiKSB7DQoJCS8vIE5vZGUvQ29tbW9uSlMNCgkJTCA9IHJlcXVpcmUoJ2xlYWZsZXQnKTsNCgkJcHJvajQgPSByZXF1aXJlKCdwcm9qNCcpOw0KCQltb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoTCwgcHJvajQpOw0KCX0gZWxzZSB7DQoJCS8vIEJyb3dzZXIgZ2xvYmFscw0KCQlpZiAodHlwZW9mIHdpbmRvdy5MID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2Ygd2luZG93LnByb2o0ID09PSAndW5kZWZpbmVkJykNCgkJCXRocm93ICdMZWFmbGV0IGFuZCBwcm9qNCBtdXN0IGJlIGxvYWRlZCBmaXJzdCc7DQoJCWZhY3Rvcnkod2luZG93LkwsIHdpbmRvdy5wcm9qNCk7DQoJfQ0KfShmdW5jdGlvbiAoTCwgcHJvajQpIHsNCg0KCUwuUHJvaiA9IHt9Ow0KDQoJTC5Qcm9qLl9pc1Byb2o0T2JqID0gZnVuY3Rpb24oYSkgew0KCQlyZXR1cm4gKHR5cGVvZiBhLmludmVyc2UgIT09ICd1bmRlZmluZWQnICYmDQoJCQl0eXBlb2YgYS5mb3J3YXJkICE9PSAndW5kZWZpbmVkJyk7DQoJfTsNCg0KCUwuUHJvai5Qcm9qZWN0aW9uID0gTC5DbGFzcy5leHRlbmQoew0KCQlpbml0aWFsaXplOiBmdW5jdGlvbihjb2RlLCBkZWYsIGJvdW5kcykgew0KCQkJdmFyIGlzUDQgPSBMLlByb2ouX2lzUHJvajRPYmooY29kZSk7DQoJCQl0aGlzLl9wcm9qID0gaXNQNCA/IGNvZGUgOiB0aGlzLl9wcm9qRnJvbUNvZGVEZWYoY29kZSwgZGVmKTsNCgkJCXRoaXMuYm91bmRzID0gaXNQNCA/IGRlZiA6IGJvdW5kczsNCgkJfSwNCg0KCQlwcm9qZWN0OiBmdW5jdGlvbiAobGF0bG5nKSB7DQoJCQl2YXIgcG9pbnQgPSB0aGlzLl9wcm9qLmZvcndhcmQoW2xhdGxuZy5sbmcsIGxhdGxuZy5sYXRdKTsNCgkJCXJldHVybiBuZXcgTC5Qb2ludChwb2ludFswXSwgcG9pbnRbMV0pOw0KCQl9LA0KDQoJCXVucHJvamVjdDogZnVuY3Rpb24gKHBvaW50LCB1bmJvdW5kZWQpIHsNCgkJCXZhciBwb2ludDIgPSB0aGlzLl9wcm9qLmludmVyc2UoW3BvaW50LngsIHBvaW50LnldKTsNCgkJCXJldHVybiBuZXcgTC5MYXRMbmcocG9pbnQyWzFdLCBwb2ludDJbMF0sIHVuYm91bmRlZCk7DQoJCX0sDQoNCgkJX3Byb2pGcm9tQ29kZURlZjogZnVuY3Rpb24oY29kZSwgZGVmKSB7DQoJCQlpZiAoZGVmKSB7DQoJCQkJcHJvajQuZGVmcyhjb2RlLCBkZWYpOw0KCQkJfSBlbHNlIGlmIChwcm9qNC5kZWZzW2NvZGVdID09PSB1bmRlZmluZWQpIHsNCgkJCQl2YXIgdXJuID0gY29kZS5zcGxpdCgnOicpOw0KCQkJCWlmICh1cm4ubGVuZ3RoID4gMykgew0KCQkJCQljb2RlID0gdXJuW3Vybi5sZW5ndGggLSAzXSArICc6JyArIHVyblt1cm4ubGVuZ3RoIC0gMV07DQoJCQkJfQ0KCQkJCWlmIChwcm9qNC5kZWZzW2NvZGVdID09PSB1bmRlZmluZWQpIHsNCgkJCQkJdGhyb3cgJ05vIHByb2plY3Rpb24gZGVmaW5pdGlvbiBmb3IgY29kZSAnICsgY29kZTsNCgkJCQl9DQoJCQl9DQoNCgkJCXJldHVybiBwcm9qNChjb2RlKTsNCgkJfQ0KCX0pOw0KDQoJTC5Qcm9qLkNSUyA9IEwuQ2xhc3MuZXh0ZW5kKHsNCgkJaW5jbHVkZXM6IEwuQ1JTLA0KDQoJCW9wdGlvbnM6IHsNCgkJCXRyYW5zZm9ybWF0aW9uOiBuZXcgTC5UcmFuc2Zvcm1hdGlvbigxLCAwLCAtMSwgMCkNCgkJfSwNCg0KCQlpbml0aWFsaXplOiBmdW5jdGlvbihhLCBiLCBjKSB7DQoJCQl2YXIgY29kZSwNCgkJCSAgICBwcm9qLA0KCQkJICAgIGRlZiwNCgkJCSAgICBvcHRpb25zOw0KDQoJCQlpZiAoTC5Qcm9qLl9pc1Byb2o0T2JqKGEpKSB7DQoJCQkJcHJvaiA9IGE7DQoJCQkJY29kZSA9IHByb2ouc3JzQ29kZTsNCgkJCQlvcHRpb25zID0gYiB8fCB7fTsNCg0KCQkJCXRoaXMucHJvamVjdGlvbiA9IG5ldyBMLlByb2ouUHJvamVjdGlvbihwcm9qLCBvcHRpb25zLmJvdW5kcyk7DQoJCQl9IGVsc2Ugew0KCQkJCWNvZGUgPSBhOw0KCQkJCWRlZiA9IGI7DQoJCQkJb3B0aW9ucyA9IGMgfHwge307DQoJCQkJdGhpcy5wcm9qZWN0aW9uID0gbmV3IEwuUHJvai5Qcm9qZWN0aW9uKGNvZGUsIGRlZiwgb3B0aW9ucy5ib3VuZHMpOw0KCQkJfQ0KDQoJCQlMLlV0aWwuc2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTsNCgkJCXRoaXMuY29kZSA9IGNvZGU7DQoJCQl0aGlzLnRyYW5zZm9ybWF0aW9uID0gdGhpcy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uOw0KDQoJCQlpZiAodGhpcy5vcHRpb25zLm9yaWdpbikgew0KCQkJCXRoaXMudHJhbnNmb3JtYXRpb24gPQ0KCQkJCQluZXcgTC5UcmFuc2Zvcm1hdGlvbigxLCAtdGhpcy5vcHRpb25zLm9yaWdpblswXSwNCgkJCQkJCS0xLCB0aGlzLm9wdGlvbnMub3JpZ2luWzFdKTsNCgkJCX0NCg0KCQkJaWYgKHRoaXMub3B0aW9ucy5zY2FsZXMpIHsNCgkJCQl0aGlzLl9zY2FsZXMgPSB0aGlzLm9wdGlvbnMuc2NhbGVzOw0KCQkJfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMucmVzb2x1dGlvbnMpIHsNCgkJCQl0aGlzLl9zY2FsZXMgPSBbXTsNCgkJCQlmb3IgKHZhciBpID0gdGhpcy5vcHRpb25zLnJlc29sdXRpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7DQoJCQkJCWlmICh0aGlzLm9wdGlvbnMucmVzb2x1dGlvbnNbaV0pIHsNCgkJCQkJCXRoaXMuX3NjYWxlc1tpXSA9IDEgLyB0aGlzLm9wdGlvbnMucmVzb2x1dGlvbnNbaV07DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJCXRoaXMuaW5maW5pdGUgPSAhdGhpcy5vcHRpb25zLmJvdW5kczsNCg0KCQl9LA0KDQoJCXNjYWxlOiBmdW5jdGlvbih6b29tKSB7DQoJCQl2YXIgaVpvb20gPSBNYXRoLmZsb29yKHpvb20pLA0KCQkJCWJhc2VTY2FsZSwNCgkJCQluZXh0U2NhbGUsDQoJCQkJc2NhbGVEaWZmLA0KCQkJCXpEaWZmOw0KCQkJaWYgKHpvb20gPT09IGlab29tKSB7DQoJCQkJcmV0dXJuIHRoaXMuX3NjYWxlc1t6b29tXTsNCgkJCX0gZWxzZSB7DQoJCQkJLy8gTm9uLWludGVnZXIgem9vbSwgaW50ZXJwb2xhdGUNCgkJCQliYXNlU2NhbGUgPSB0aGlzLl9zY2FsZXNbaVpvb21dOw0KCQkJCW5leHRTY2FsZSA9IHRoaXMuX3NjYWxlc1tpWm9vbSArIDFdOw0KCQkJCXNjYWxlRGlmZiA9IG5leHRTY2FsZSAtIGJhc2VTY2FsZTsNCgkJCQl6RGlmZiA9ICh6b29tIC0gaVpvb20pOw0KCQkJCXJldHVybiBiYXNlU2NhbGUgKyBzY2FsZURpZmYgKiB6RGlmZjsNCgkJCX0NCgkJfSwNCg0KCQl6b29tOiBmdW5jdGlvbihzY2FsZSkgew0KCQkJLy8gRmluZCBjbG9zZXN0IG51bWJlciBpbiB0aGlzLl9zY2FsZXMsIGRvd24NCgkJCXZhciBkb3duU2NhbGUgPSB0aGlzLl9jbG9zZXN0RWxlbWVudCh0aGlzLl9zY2FsZXMsIHNjYWxlKSwNCgkJCQlkb3duWm9vbSA9IHRoaXMuX3NjYWxlcy5pbmRleE9mKGRvd25TY2FsZSksDQoJCQkJbmV4dFNjYWxlLA0KCQkJCW5leHRab29tLA0KCQkJCXNjYWxlRGlmZjsNCgkJCS8vIENoZWNrIGlmIHNjYWxlIGlzIGRvd25TY2FsZSA9PiByZXR1cm4gYXJyYXkgaW5kZXgNCgkJCWlmIChzY2FsZSA9PT0gZG93blNjYWxlKSB7DQoJCQkJcmV0dXJuIGRvd25ab29tOw0KCQkJfQ0KCQkJLy8gSW50ZXJwb2xhdGUNCgkJCW5leHRab29tID0gZG93blpvb20gKyAxOw0KCQkJbmV4dFNjYWxlID0gdGhpcy5fc2NhbGVzW25leHRab29tXTsNCgkJCWlmIChuZXh0U2NhbGUgPT09IHVuZGVmaW5lZCkgew0KCQkJCXJldHVybiBJbmZpbml0eTsNCgkJCX0NCgkJCXNjYWxlRGlmZiA9IG5leHRTY2FsZSAtIGRvd25TY2FsZTsNCgkJCXJldHVybiAoc2NhbGUgLSBkb3duU2NhbGUpIC8gc2NhbGVEaWZmICsgZG93blpvb207DQoJCX0sDQoNCgkJZGlzdGFuY2U6IEwuQ1JTLkVhcnRoLmRpc3RhbmNlLA0KDQoJCVI6IEwuQ1JTLkVhcnRoLlIsDQoNCgkJLyogR2V0IHRoZSBjbG9zZXN0IGxvd2VzdCBlbGVtZW50IGluIGFuIGFycmF5ICovDQoJCV9jbG9zZXN0RWxlbWVudDogZnVuY3Rpb24oYXJyYXksIGVsZW1lbnQpIHsNCgkJCXZhciBsb3c7DQoJCQlmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoOyBpLS07KSB7DQoJCQkJaWYgKGFycmF5W2ldIDw9IGVsZW1lbnQgJiYgKGxvdyA9PT0gdW5kZWZpbmVkIHx8IGxvdyA8IGFycmF5W2ldKSkgew0KCQkJCQlsb3cgPSBhcnJheVtpXTsNCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gbG93Ow0KCQl9DQoJfSk7DQoNCglMLlByb2ouR2VvSlNPTiA9IEwuR2VvSlNPTi5leHRlbmQoew0KCQlpbml0aWFsaXplOiBmdW5jdGlvbihnZW9qc29uLCBvcHRpb25zKSB7DQoJCQl0aGlzLl9jYWxsTGV2ZWwgPSAwOw0KCQkJTC5HZW9KU09OLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcywgZ2VvanNvbiwgb3B0aW9ucyk7DQoJCX0sDQoNCgkJYWRkRGF0YTogZnVuY3Rpb24oZ2VvanNvbikgew0KCQkJdmFyIGNyczsNCg0KCQkJaWYgKGdlb2pzb24pIHsNCgkJCQlpZiAoZ2VvanNvbi5jcnMgJiYgZ2VvanNvbi5jcnMudHlwZSA9PT0gJ25hbWUnKSB7DQoJCQkJCWNycyA9IG5ldyBMLlByb2ouQ1JTKGdlb2pzb24uY3JzLnByb3BlcnRpZXMubmFtZSk7DQoJCQkJfSBlbHNlIGlmIChnZW9qc29uLmNycyAmJiBnZW9qc29uLmNycy50eXBlKSB7DQoJCQkJCWNycyA9IG5ldyBMLlByb2ouQ1JTKGdlb2pzb24uY3JzLnR5cGUgKyAnOicgKyBnZW9qc29uLmNycy5wcm9wZXJ0aWVzLmNvZGUpOw0KCQkJCX0NCg0KCQkJCWlmIChjcnMgIT09IHVuZGVmaW5lZCkgew0KCQkJCQl0aGlzLm9wdGlvbnMuY29vcmRzVG9MYXRMbmcgPSBmdW5jdGlvbihjb29yZHMpIHsNCgkJCQkJCXZhciBwb2ludCA9IEwucG9pbnQoY29vcmRzWzBdLCBjb29yZHNbMV0pOw0KCQkJCQkJcmV0dXJuIGNycy5wcm9qZWN0aW9uLnVucHJvamVjdChwb2ludCk7DQoJCQkJCX07DQoJCQkJfQ0KCQkJfQ0KDQoJCQkvLyBCYXNlIGNsYXNzJyBhZGREYXRhIG1pZ2h0IGNhbGwgdXMgcmVjdXJzaXZlbHksIGJ1dA0KCQkJLy8gQ1JTIHNob3VsZG4ndCBiZSBjbGVhcmVkIGluIHRoYXQgY2FzZSwgc2luY2UgQ1JTIGFwcGxpZXMNCgkJCS8vIHRvIHRoZSB3aG9sZSBHZW9KU09OLCBpbmx1ZGluZyBzdWItZmVhdHVyZXMuDQoJCQl0aGlzLl9jYWxsTGV2ZWwrKzsNCgkJCXRyeSB7DQoJCQkJTC5HZW9KU09OLnByb3RvdHlwZS5hZGREYXRhLmNhbGwodGhpcywgZ2VvanNvbik7DQoJCQl9IGZpbmFsbHkgew0KCQkJCXRoaXMuX2NhbGxMZXZlbC0tOw0KCQkJCWlmICh0aGlzLl9jYWxsTGV2ZWwgPT09IDApIHsNCgkJCQkJZGVsZXRlIHRoaXMub3B0aW9ucy5jb29yZHNUb0xhdExuZzsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9KTsNCg0KCUwuUHJvai5nZW9Kc29uID0gZnVuY3Rpb24oZ2VvanNvbiwgb3B0aW9ucykgew0KCQlyZXR1cm4gbmV3IEwuUHJvai5HZW9KU09OKGdlb2pzb24sIG9wdGlvbnMpOw0KCX07DQoNCglMLlByb2ouSW1hZ2VPdmVybGF5ID0gTC5JbWFnZU92ZXJsYXkuZXh0ZW5kKHsNCgkJaW5pdGlhbGl6ZTogZnVuY3Rpb24gKHVybCwgYm91bmRzLCBvcHRpb25zKSB7DQoJCQlMLkltYWdlT3ZlcmxheS5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsIHVybCwgbnVsbCwgb3B0aW9ucyk7DQoJCQl0aGlzLl9wcm9qZWN0ZWRCb3VuZHMgPSBib3VuZHM7DQoJCX0sDQoNCgkJLy8gRGFuZ2VyIGFoZWFkOiBPdmVycmlkaW5nIGludGVybmFsIG1ldGhvZHMgaW4gTGVhZmxldC4NCgkJLy8gRGVjaWRlZCB0byBkbyB0aGlzIHJhdGhlciB0aGFuIG1ha2luZyBhIGNvcHkgb2YgTC5JbWFnZU92ZXJsYXkNCgkJLy8gYW5kIGRvaW5nIHZlcnkgdGlueSBtb2RpZmljYXRpb25zIHRvIGl0Lg0KCQkvLyBGdXR1cmUgd2lsbCB0ZWxsIGlmIHRoaXMgd2FzIHdpc2Ugb3Igbm90Lg0KCQlfYW5pbWF0ZVpvb206IGZ1bmN0aW9uIChldmVudCkgew0KCQkJdmFyIHNjYWxlID0gdGhpcy5fbWFwLmdldFpvb21TY2FsZShldmVudC56b29tKTsNCgkJCXZhciBub3J0aFdlc3QgPSBMLnBvaW50KHRoaXMuX3Byb2plY3RlZEJvdW5kcy5taW4ueCwgdGhpcy5fcHJvamVjdGVkQm91bmRzLm1heC55KTsNCgkJCXZhciBvZmZzZXQgPSB0aGlzLl9wcm9qZWN0ZWRUb05ld0xheWVyUG9pbnQobm9ydGhXZXN0LCBldmVudC56b29tLCBldmVudC5jZW50ZXIpOw0KDQoJCQlMLkRvbVV0aWwuc2V0VHJhbnNmb3JtKHRoaXMuX2ltYWdlLCBvZmZzZXQsIHNjYWxlKTsNCgkJfSwNCg0KCQlfcmVzZXQ6IGZ1bmN0aW9uICgpIHsNCgkJCXZhciB6b29tID0gdGhpcy5fbWFwLmdldFpvb20oKTsNCgkJCXZhciBwaXhlbE9yaWdpbiA9IHRoaXMuX21hcC5nZXRQaXhlbE9yaWdpbigpOw0KCQkJdmFyIGJvdW5kcyA9IEwuYm91bmRzKA0KCQkJCXRoaXMuX3RyYW5zZm9ybSh0aGlzLl9wcm9qZWN0ZWRCb3VuZHMubWluLCB6b29tKS5fc3VidHJhY3QocGl4ZWxPcmlnaW4pLA0KCQkJCXRoaXMuX3RyYW5zZm9ybSh0aGlzLl9wcm9qZWN0ZWRCb3VuZHMubWF4LCB6b29tKS5fc3VidHJhY3QocGl4ZWxPcmlnaW4pDQoJCQkpOw0KCQkJdmFyIHNpemUgPSBib3VuZHMuZ2V0U2l6ZSgpOw0KDQoJCQlMLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5faW1hZ2UsIGJvdW5kcy5taW4pOw0KCQkJdGhpcy5faW1hZ2Uuc3R5bGUud2lkdGggPSBzaXplLnggKyAncHgnOw0KCQkJdGhpcy5faW1hZ2Uuc3R5bGUuaGVpZ2h0ID0gc2l6ZS55ICsgJ3B4JzsNCgkJfSwNCg0KCQlfcHJvamVjdGVkVG9OZXdMYXllclBvaW50OiBmdW5jdGlvbiAocG9pbnQsIHpvb20sIGNlbnRlcikgew0KCQkJdmFyIHZpZXdIYWxmID0gdGhpcy5fbWFwLmdldFNpemUoKS5fZGl2aWRlQnkoMik7DQoJCQl2YXIgbmV3VG9wTGVmdCA9IHRoaXMuX21hcC5wcm9qZWN0KGNlbnRlciwgem9vbSkuX3N1YnRyYWN0KHZpZXdIYWxmKS5fcm91bmQoKTsNCgkJCXZhciB0b3BMZWZ0ID0gbmV3VG9wTGVmdC5hZGQodGhpcy5fbWFwLl9nZXRNYXBQYW5lUG9zKCkpOw0KDQoJCQlyZXR1cm4gdGhpcy5fdHJhbnNmb3JtKHBvaW50LCB6b29tKS5fc3VidHJhY3QodG9wTGVmdCk7DQoJCX0sDQoNCgkJX3RyYW5zZm9ybTogZnVuY3Rpb24gKHBvaW50LCB6b29tKSB7DQoJCQl2YXIgY3JzID0gdGhpcy5fbWFwLm9wdGlvbnMuY3JzOw0KCQkJdmFyIHRyYW5zZm9ybWF0aW9uID0gY3JzLnRyYW5zZm9ybWF0aW9uOw0KCQkJdmFyIHNjYWxlID0gY3JzLnNjYWxlKHpvb20pOw0KDQoJCQlyZXR1cm4gdHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKHBvaW50LCBzY2FsZSk7DQoJCX0NCgl9KTsNCg0KCUwuUHJvai5pbWFnZU92ZXJsYXkgPSBmdW5jdGlvbiAodXJsLCBib3VuZHMsIG9wdGlvbnMpIHsNCgkJcmV0dXJuIG5ldyBMLlByb2ouSW1hZ2VPdmVybGF5KHVybCwgYm91bmRzLCBvcHRpb25zKTsNCgl9Ow0KDQoJcmV0dXJuIEwuUHJvajsNCn0pKTsNCg=="></script>
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbysiJyIpO3Rocm93IGYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSh7MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKCnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpOwoKdmFyIF91dGlsID0gcmVxdWlyZSgiLi91dGlsIik7CgpmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KCnZhciBDbHVzdGVyTGF5ZXJTdG9yZSA9IGZ1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBDbHVzdGVyTGF5ZXJTdG9yZShncm91cCkgewogICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENsdXN0ZXJMYXllclN0b3JlKTsKCiAgICB0aGlzLl9sYXllcnMgPSB7fTsKICAgIHRoaXMuX2dyb3VwID0gZ3JvdXA7CiAgfQoKICBfY3JlYXRlQ2xhc3MoQ2x1c3RlckxheWVyU3RvcmUsIFt7CiAgICBrZXk6ICJhZGQiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGFkZChsYXllciwgaWQpIHsKICAgICAgaWYgKHR5cGVvZiBpZCAhPT0gInVuZGVmaW5lZCIgJiYgaWQgIT09IG51bGwpIHsKICAgICAgICBpZiAodGhpcy5fbGF5ZXJzW2lkXSkgewogICAgICAgICAgdGhpcy5fZ3JvdXAucmVtb3ZlTGF5ZXIodGhpcy5fbGF5ZXJzW2lkXSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2xheWVyc1tpZF0gPSBsYXllcjsKICAgICAgfQogICAgICB0aGlzLl9ncm91cC5hZGRMYXllcihsYXllcik7CiAgICB9CiAgfSwgewogICAga2V5OiAicmVtb3ZlIiwKICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmUoaWQpIHsKICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gInVuZGVmaW5lZCIgfHwgaWQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlkID0gKDAsIF91dGlsLmFzQXJyYXkpKGlkKTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh0aGlzLl9sYXllcnNbaWRbaV1dKSB7CiAgICAgICAgICB0aGlzLl9ncm91cC5yZW1vdmVMYXllcih0aGlzLl9sYXllcnNbaWRbaV1dKTsKICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sYXllcnNbaWRbaV1dOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogImNsZWFyIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHsKICAgICAgdGhpcy5fbGF5ZXJzID0ge307CiAgICAgIHRoaXMuX2dyb3VwLmNsZWFyTGF5ZXJzKCk7CiAgICB9CiAgfV0pOwoKICByZXR1cm4gQ2x1c3RlckxheWVyU3RvcmU7Cn0oKTsKCmV4cG9ydHMuZGVmYXVsdCA9IENsdXN0ZXJMYXllclN0b3JlOwoKCn0seyIuL3V0aWwiOjE1fV0sMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKCnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpOwoKZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9Cgp2YXIgQ29udHJvbFN0b3JlID0gZnVuY3Rpb24gKCkgewogIGZ1bmN0aW9uIENvbnRyb2xTdG9yZShtYXApIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb250cm9sU3RvcmUpOwoKICAgIHRoaXMuX2NvbnRyb2xzTm9JZCA9IFtdOwogICAgdGhpcy5fY29udHJvbHNCeUlkID0ge307CiAgICB0aGlzLl9tYXAgPSBtYXA7CiAgfQoKICBfY3JlYXRlQ2xhc3MoQ29udHJvbFN0b3JlLCBbewogICAga2V5OiAiYWRkIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBhZGQoY29udHJvbCwgaWQsIGh0bWwpIHsKICAgICAgaWYgKHR5cGVvZiBpZCAhPT0gInVuZGVmaW5lZCIgJiYgaWQgIT09IG51bGwpIHsKICAgICAgICBpZiAodGhpcy5fY29udHJvbHNCeUlkW2lkXSkgewogICAgICAgICAgdGhpcy5fbWFwLnJlbW92ZUNvbnRyb2wodGhpcy5fY29udHJvbHNCeUlkW2lkXSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2NvbnRyb2xzQnlJZFtpZF0gPSBjb250cm9sOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuX2NvbnRyb2xzTm9JZC5wdXNoKGNvbnRyb2wpOwogICAgICB9CiAgICAgIHRoaXMuX21hcC5hZGRDb250cm9sKGNvbnRyb2wpOwogICAgfQogIH0sIHsKICAgIGtleTogInJlbW92ZSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlKGlkKSB7CiAgICAgIGlmICh0aGlzLl9jb250cm9sc0J5SWRbaWRdKSB7CiAgICAgICAgdmFyIGNvbnRyb2wgPSB0aGlzLl9jb250cm9sc0J5SWRbaWRdOwogICAgICAgIHRoaXMuX21hcC5yZW1vdmVDb250cm9sKGNvbnRyb2wpOwogICAgICAgIGRlbGV0ZSB0aGlzLl9jb250cm9sc0J5SWRbaWRdOwogICAgICB9CiAgICB9CiAgfSwgewogICAga2V5OiAiY2xlYXIiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyKCkgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NvbnRyb2xzTm9JZC5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBjb250cm9sID0gdGhpcy5fY29udHJvbHNOb0lkW2ldOwogICAgICAgIHRoaXMuX21hcC5yZW1vdmVDb250cm9sKGNvbnRyb2wpOwogICAgICB9CiAgICAgIHRoaXMuX2NvbnRyb2xzTm9JZCA9IFtdOwoKICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuX2NvbnRyb2xzQnlJZCkgewogICAgICAgIHZhciBfY29udHJvbCA9IHRoaXMuX2NvbnRyb2xzQnlJZFtrZXldOwogICAgICAgIHRoaXMuX21hcC5yZW1vdmVDb250cm9sKF9jb250cm9sKTsKICAgICAgfQogICAgICB0aGlzLl9jb250cm9sc0J5SWQgPSB7fTsKICAgIH0KICB9XSk7CgogIHJldHVybiBDb250cm9sU3RvcmU7Cn0oKTsKCmV4cG9ydHMuZGVmYXVsdCA9IENvbnRyb2xTdG9yZTsKCgp9LHt9XSwzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzLmdldENSUyA9IGdldENSUzsKCnZhciBfbGVhZmxldCA9IHJlcXVpcmUoIi4vZ2xvYmFsL2xlYWZsZXQiKTsKCnZhciBfbGVhZmxldDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sZWFmbGV0KTsKCnZhciBfcHJvajRsZWFmbGV0ID0gcmVxdWlyZSgiLi9nbG9iYWwvcHJvajRsZWFmbGV0Iik7Cgp2YXIgX3Byb2o0bGVhZmxldDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9qNGxlYWZsZXQpOwoKZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KCi8vIEhlbHBlciBmdW5jdGlvbiB0byBpbnN0YW5jaWF0ZSBhIElDUlMgaW5zdGFuY2UuCmZ1bmN0aW9uIGdldENSUyhjcnNPcHRpb25zKSB7CiAgdmFyIGNycyA9IF9sZWFmbGV0Mi5kZWZhdWx0LkNSUy5FUFNHMzg1NzsgLy8gRGVmYXVsdCBTcGhlcmljYWwgTWVyY2F0b3IKCiAgc3dpdGNoIChjcnNPcHRpb25zLmNyc0NsYXNzKSB7CiAgICBjYXNlICJMLkNSUy5FUFNHMzg1NyI6CiAgICAgIGNycyA9IF9sZWFmbGV0Mi5kZWZhdWx0LkNSUy5FUFNHMzg1NzsKICAgICAgYnJlYWs7CiAgICBjYXNlICJMLkNSUy5FUFNHNDMyNiI6CiAgICAgIGNycyA9IF9sZWFmbGV0Mi5kZWZhdWx0LkNSUy5FUFNHNDMyNjsKICAgICAgYnJlYWs7CiAgICBjYXNlICJMLkNSUy5FUFNHMzM5NSI6CiAgICAgIGNycyA9IF9sZWFmbGV0Mi5kZWZhdWx0LkNSUy5FUFNHMzM5NTsKICAgICAgYnJlYWs7CiAgICBjYXNlICJMLkNSUy5TaW1wbGUiOgogICAgICBjcnMgPSBfbGVhZmxldDIuZGVmYXVsdC5DUlMuU2ltcGxlOwogICAgICBicmVhazsKICAgIGNhc2UgIkwuUHJvai5DUlMiOgogICAgICBpZiAoY3JzT3B0aW9ucy5vcHRpb25zICYmIGNyc09wdGlvbnMub3B0aW9ucy5ib3VuZHMpIHsKICAgICAgICBjcnNPcHRpb25zLm9wdGlvbnMuYm91bmRzID0gX2xlYWZsZXQyLmRlZmF1bHQuYm91bmRzKGNyc09wdGlvbnMub3B0aW9ucy5ib3VuZHMpOwogICAgICB9CiAgICAgIGlmIChjcnNPcHRpb25zLm9wdGlvbnMgJiYgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uKSB7CiAgICAgICAgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uID0gX2xlYWZsZXQyLmRlZmF1bHQuVHJhbnNmb3JtYXRpb24oY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uWzBdLCBjcnNPcHRpb25zLm9wdGlvbnMudHJhbnNmb3JtYXRpb25bMV0sIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvblsyXSwgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uWzNdKTsKICAgICAgfQogICAgICBjcnMgPSBuZXcgX3Byb2o0bGVhZmxldDIuZGVmYXVsdC5DUlMoY3JzT3B0aW9ucy5jb2RlLCBjcnNPcHRpb25zLnByb2o0ZGVmLCBjcnNPcHRpb25zLm9wdGlvbnMpOwogICAgICBicmVhazsKICAgIGNhc2UgIkwuUHJvai5DUlMuVE1TIjoKICAgICAgaWYgKGNyc09wdGlvbnMub3B0aW9ucyAmJiBjcnNPcHRpb25zLm9wdGlvbnMuYm91bmRzKSB7CiAgICAgICAgY3JzT3B0aW9ucy5vcHRpb25zLmJvdW5kcyA9IF9sZWFmbGV0Mi5kZWZhdWx0LmJvdW5kcyhjcnNPcHRpb25zLm9wdGlvbnMuYm91bmRzKTsKICAgICAgfQogICAgICBpZiAoY3JzT3B0aW9ucy5vcHRpb25zICYmIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvbikgewogICAgICAgIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvbiA9IF9sZWFmbGV0Mi5kZWZhdWx0LlRyYW5zZm9ybWF0aW9uKGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvblswXSwgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uWzFdLCBjcnNPcHRpb25zLm9wdGlvbnMudHJhbnNmb3JtYXRpb25bMl0sIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvblszXSk7CiAgICAgIH0KICAgICAgY3JzID0gbmV3IF9wcm9qNGxlYWZsZXQyLmRlZmF1bHQuQ1JTLlRNUyhjcnNPcHRpb25zLmNvZGUsIGNyc09wdGlvbnMucHJvajRkZWYsIGNyc09wdGlvbnMucHJvamVjdGVkQm91bmRzLCBjcnNPcHRpb25zLm9wdGlvbnMpOwogICAgICBicmVhazsKICB9CiAgcmV0dXJuIGNyczsKfQoKCn0seyIuL2dsb2JhbC9sZWFmbGV0Ijo4LCIuL2dsb2JhbC9wcm9qNGxlYWZsZXQiOjl9XSw0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwoKdmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gInN5bWJvbCIgOiB0eXBlb2Ygb2JqOyB9OwoKdmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7Cgp2YXIgX3V0aWwgPSByZXF1aXJlKCIuL3V0aWwiKTsKCmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQoKdmFyIERhdGFGcmFtZSA9IGZ1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBEYXRhRnJhbWUoKSB7CiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGF0YUZyYW1lKTsKCiAgICB0aGlzLmNvbHVtbnMgPSBbXTsKICAgIHRoaXMuY29sbmFtZXMgPSBbXTsKICAgIHRoaXMuY29sc3RyaWN0ID0gW107CgogICAgdGhpcy5lZmZlY3RpdmVMZW5ndGggPSAwOwogICAgdGhpcy5jb2xpbmRpY2VzID0ge307CiAgfQoKICBfY3JlYXRlQ2xhc3MoRGF0YUZyYW1lLCBbewogICAga2V5OiAiX3VwZGF0ZUNhY2hlZFByb3BlcnRpZXMiLAogICAgdmFsdWU6IGZ1bmN0aW9uIF91cGRhdGVDYWNoZWRQcm9wZXJ0aWVzKCkgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgdGhpcy5lZmZlY3RpdmVMZW5ndGggPSAwOwogICAgICB0aGlzLmNvbGluZGljZXMgPSB7fTsKCiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGkpIHsKICAgICAgICBfdGhpcy5lZmZlY3RpdmVMZW5ndGggPSBNYXRoLm1heChfdGhpcy5lZmZlY3RpdmVMZW5ndGgsIGNvbHVtbi5sZW5ndGgpOwogICAgICAgIF90aGlzLmNvbGluZGljZXNbX3RoaXMuY29sbmFtZXNbaV1dID0gaTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAiX2NvbEluZGV4IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBfY29sSW5kZXgoY29sbmFtZSkgewogICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbGluZGljZXNbY29sbmFtZV07CiAgICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICJ1bmRlZmluZWQiKSByZXR1cm4gLTE7CiAgICAgIHJldHVybiBpbmRleDsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJjb2wiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNvbChuYW1lLCB2YWx1ZXMsIHN0cmljdCkgewogICAgICBpZiAodHlwZW9mIG5hbWUgIT09ICJzdHJpbmciKSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29sdW1uIG5hbWUgXCIiICsgbmFtZSArICJcIiIpOwoKICAgICAgdmFyIGluZGV4ID0gdGhpcy5fY29sSW5kZXgobmFtZSk7CgogICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIGlmIChpbmRleCA8IDApIHJldHVybiBudWxsO2Vsc2UgcmV0dXJuICgwLCBfdXRpbC5yZWN5Y2xlKSh0aGlzLmNvbHVtbnNbaW5kZXhdLCB0aGlzLmVmZmVjdGl2ZUxlbmd0aCk7CiAgICAgIH0KCiAgICAgIGlmIChpbmRleCA8IDApIHsKICAgICAgICBpbmRleCA9IHRoaXMuY29sbmFtZXMubGVuZ3RoOwogICAgICAgIHRoaXMuY29sbmFtZXMucHVzaChuYW1lKTsKICAgICAgfQogICAgICB0aGlzLmNvbHVtbnNbaW5kZXhdID0gKDAsIF91dGlsLmFzQXJyYXkpKHZhbHVlcyk7CiAgICAgIHRoaXMuY29sc3RyaWN0W2luZGV4XSA9ICEhc3RyaWN0OwoKICAgICAgLy8gVE9ETzogVmFsaWRhdGUgc3RyaWN0bmVzcyAoZW5zdXJlIGxlbmd0aHMgbWF0Y2ggdXAgd2l0aCBvdGhlciBzdHJpY3RzKQoKICAgICAgdGhpcy5fdXBkYXRlQ2FjaGVkUHJvcGVydGllcygpOwoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgfSwgewogICAga2V5OiAiY2JpbmQiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNiaW5kKG9iaiwgc3RyaWN0KSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwoKICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgdmFyIGNvbGRhdGEgPSBvYmpbbmFtZV07CiAgICAgICAgX3RoaXMyLmNvbChuYW1lLCBjb2xkYXRhKTsKICAgICAgfSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogIH0sIHsKICAgIGtleTogImdldCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0KHJvdywgY29sLCBtaXNzaW5nT0spIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CgogICAgICBpZiAocm93ID4gdGhpcy5lZmZlY3RpdmVMZW5ndGgpIHRocm93IG5ldyBFcnJvcigiUm93IGFyZ3VtZW50IHdhcyBvdXQgb2YgYm91bmRzOiAiICsgcm93ICsgIiA+ICIgKyB0aGlzLmVmZmVjdGl2ZUxlbmd0aCk7CgogICAgICB2YXIgY29sSW5kZXggPSAtMTsKICAgICAgaWYgKHR5cGVvZiBjb2wgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgdmFyIF9yZXQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgcm93RGF0YSA9IHt9OwogICAgICAgICAgX3RoaXMzLmNvbG5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUsIGkpIHsKICAgICAgICAgICAgcm93RGF0YVtuYW1lXSA9IF90aGlzMy5jb2x1bW5zW2ldW3JvdyAlIF90aGlzMy5jb2x1bW5zW2ldLmxlbmd0aF07CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHY6IHJvd0RhdGEKICAgICAgICAgIH07CiAgICAgICAgfSgpOwoKICAgICAgICBpZiAoKHR5cGVvZiBfcmV0ID09PSAidW5kZWZpbmVkIiA/ICJ1bmRlZmluZWQiIDogX3R5cGVvZihfcmV0KSkgPT09ICJvYmplY3QiKSByZXR1cm4gX3JldC52OwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2wgPT09ICJzdHJpbmciKSB7CiAgICAgICAgY29sSW5kZXggPSB0aGlzLl9jb2xJbmRleChjb2wpOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2wgPT09ICJudW1iZXIiKSB7CiAgICAgICAgY29sSW5kZXggPSBjb2w7CiAgICAgIH0KICAgICAgaWYgKGNvbEluZGV4IDwgMCB8fCBjb2xJbmRleCA+IHRoaXMuY29sdW1ucy5sZW5ndGgpIHsKICAgICAgICBpZiAobWlzc2luZ09LKSByZXR1cm4gdm9pZCAwO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvbHVtbiBpbmRleDogIiArIGNvbCk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbY29sSW5kZXhdW3JvdyAlIHRoaXMuY29sdW1uc1tjb2xJbmRleF0ubGVuZ3RoXTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJucm93IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBucm93KCkgewogICAgICByZXR1cm4gdGhpcy5lZmZlY3RpdmVMZW5ndGg7CiAgICB9CiAgfV0pOwoKICByZXR1cm4gRGF0YUZyYW1lOwp9KCk7CgpleHBvcnRzLmRlZmF1bHQgPSBEYXRhRnJhbWU7CgoKfSx7Ii4vdXRpbCI6MTV9XSw1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKdmFyIF9sZWFmbGV0ID0gcmVxdWlyZSgiLi9nbG9iYWwvbGVhZmxldCIpOwoKdmFyIF9sZWFmbGV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xlYWZsZXQpOwoKZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KCi8vIEluIFJNYXJrZG93bidzIHNlbGYtY29udGFpbmVkIG1vZGUsIHdlIGRvbid0IGhhdmUgYSB3YXkgdG8gY2FycnkgYXJvdW5kIHRoZQovLyBpbWFnZXMgdGhhdCBMZWFmbGV0IG5lZWRzIGJ1dCBkb2Vzbid0IGxvYWQgaW50byB0aGUgcGFnZS4gSW5zdGVhZCwgd2UnbGwgc2V0Ci8vIGRhdGEgVVJJcyBmb3IgdGhlIGRlZmF1bHQgbWFya2VyLCBhbmQgbGV0IGFueSBvdGhlcnMgYmUgbG9hZGVkIHZpYSBDRE4uCmlmICh0eXBlb2YgX2xlYWZsZXQyLmRlZmF1bHQuSWNvbi5EZWZhdWx0LmltYWdlUGF0aCA9PT0gInVuZGVmaW5lZCIpIHsKICBfbGVhZmxldDIuZGVmYXVsdC5JY29uLkRlZmF1bHQuaW1hZ2VQYXRoID0gIi8vY2RuLmxlYWZsZXRqcy5jb20vbGVhZmxldC92MS4wLjMvaW1hZ2VzLyI7CiAgLy8gZG9uJ3Qga25vdyBob3cgdG8gbWFrZSB0aGlzIGRhdGFVUkkgd29yayBzaW5jZQogIC8vICB3aWxsIGJlIGFwcGVuZGVkIHRvIERlZmF1bC5pbWFnZVBhdGggYWJvdmUKICAvKg0KICBpZiAoTC5Ccm93c2VyLnJldGluYSkgew0KICAgIEwuSWNvbi5EZWZhdWx0LnByb3RvdHlwZS5vcHRpb25zLmljb25VcmwgPSAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFESUFBQUJTQ0FZQUFBQVd5NGZyQUFBUGlFbEVRVlI0MnQxYkNWQ1U1eGttYmFidFpKSk9PK2wwbWhnVDB5UWUwV1haZ3oyNTcwTkI4STZKNlV6YVRCb09SUkZFcnVWR0RoV1VQUkFRUkZGUkVEblZ4Q3RFQlJiMjREQk5FM1dhYWF0cGttbHVvNG0rZmQ5djk5OW9sR1ZCRHUzT1BMaisvL3MrNy9XOTMvZjkvLzYvRXdBNC9UOWczQWxGT1VlZVVHUjJ1TXF6T3lKazJSMngwcXlPQW1ubWtTM1NyQ1ByWkpsSGxzcXpqeXBjczQ5T1gxSmYvL1A3S2hEODg1QTB1MTBteTJvdlFzY3Z5Ykk2d0VGOGl2STdwRm50QVY2cWt3OVBXU0JLMWJFblpSbHRtMldaN1I4aDRGYkkwVkczM0dQZ1hYZ0NBcmErQTRFSW44S1Q0SkgvRmlnb2lKL0lJejZUWmJWVktMTGFuNXUwUUVTcWxrY2tXVzNwMHN5MmJ4REFnWndPMTNURHl0b0IrTlBlOSt6aWxkMkRFRkd1QjcvTnB6RG9kcmlGNTVvMG83WElSWFhvTnhNYWlDU2o5VlUwOUM4RUVOeHlqMEM0dGh0ZXJoMkVWK3ZldXdPcjZzN0R5M3Nzb085M2szbGx6eEJFNlBUZ2tYY01PRjdFSjlLTXRxalI5SkZEUW5OVjliK1FxbHFxRUVDUVo3VEJndTFuWWRYdUlYZ1ZuZVN3WXRjZ1JGYjFRMWlGR1VMTHpSQ3NNOTBHT3JaZ2h4a2lLdnRoZWMwZ3JMcEZseEN1NmNLaDF3NmNIVVNiY3RQaHg4WWxFRWx1NCtOU1ZmTnBCQkFDdHB5R2xic0dtQk9FbFJoTUJEb2ZnazRHb2JPalFYQzVDUlppVUMvVkR0bjRxTHJCSlozQTJjTmcrbkU0UDMxUGdTREJiSW1xNVVOSmVqTVFGcWk3Y0NpY1ozaVpCVEFBUVZvVEJJNERLS0NWR0JESEg2bnJCUmxXeFdyN3NsalZJaGxUSURMVm9Sa1MxZUgvU05JUGd6eXpGUlpWOU5uRysrTHFRY3lvR1FMUWdmRkVJRllwY3VlQXpjNlNTaU1PdFRZZ0g5Q1hyK1dwVGJ4UkJlS2xxbjlVa3Raa1JvQUNaNVBsTzgxWWdmTU00Ulg5RUtBeFRTakNkdlRqRUxQWVcxN2REOHJzZGlCZkVCY2xTWTJQT3hRSUhubElrbnJvRUFKazZVMndwTUxJU0YvYU5RU2hXQVYvdFdsU0VJSzJWcUJOc3IyMDBnUnlHbUxva3lTMThjVGRGdEE3QW5GTmJjeEFBQ0dNclF0RExBanFCVCsxY1ZKQk5zazIrYkJRMXdPY1g1SzB4czEyQThHeXpYUk5hZmdlQVlGYjNtRWtyQkk0SS9tV0dVZU5RSTFseXAyUG9POWo0YURLY0g0RWJlMEU4ZzN4Z3l5bGNjNndnYmltTmpTU29GdFdLMXNUcUxSaDJCTStTT2dJZkRHTEpMOElHM1paalVYL1ZpeXZHWUxGT3dkWm4vbGpZSTd5enNlZTRUamNzVi9JUjNGcVErdGRBeEVuTlNqRnlRZUJFSzdwZ1JWb2RFblZJUGhzTnpxRVlLMFpsdUZzUm5xM1lqSDIyS0p5QTZ6NHlUbVNwWjV6bEg4UlR2V2t0MUNyQjg1UFlVcWp6eDJCdUc2c1B5ZmVlQUE4c2p0d3BoaGlDRlNid1h1YjBTN0lTUGlPQVp2TzRoMDQ4eFNmQk0rY0RwRGllQ1pPZ2dTejZKSGRCdjVGSjNDTjZMUEpSMVFNZ085MjA0aDJhQUxnZER4empscDRrdzhZYUhLeUJTSkpQaWdXYjZ3SFFpUm1ieGtLTDBRRFhraGdEOTRZeEdLc0dza1RRa3ZmeFZubElIQmNCTmZrZWd6aXdCM0hBbkhEdUd5blJYY3AvdXRYWmhyUkhpV001Q1BMamJkd0hWRFlBaEZ0M0o4clR0b1BicGt0U0RyRTRJTlo4aXcxMmtVWUVwUHM0a296ZU9XMEEzRVFJb3ZiWWNmeElUajc5OHZ3eGJmWDRPcjFIOEI0NlJPbzdmd2J2S1k5YnBOenkyaG1pU09PeU1yQkVlMlJUNXgvN3RqSHhDRksybC80WXlCSis5NUhRQUJtaWJLekVKdlJzOVJnRjRGcUU1TWxlR1MzQXVtTE4rNkQ0bFlqZkllT0QvZTVlUk9nN3N6N29FZzd3SFJrNlkzWWkvMk1Kd1Q3YkNTNzVCdkpCdUdzU3ZxSUQxZ2dhSHllYUFNZVFFUmd5YWpCZzNCRzhTZ3hEQXN2SkZ4VU9jQmtnN2QwTWwzWGpmdWhDeXZnNk9maXgxK0FsNnFCNmZwdWVvdHhzY2tGaDVBOTIrUWJ5ZEh3NHZ5bUdKeEVHK3JXaVJMM2dvSldjU3d2d2JQRUNPNWJEY01pUkdObWNoUzRhMUk5a1A2MkRoT005dFBhZDRucEVoYVVkVFBPc1BKK3U3YkpOODVQcGFxSjZZb1Q2eEtjUklsMXBRand4SXVreFhoeUlZNTdOMVN3aDdEeUFTYnJtMzhNU0hkUlVTdGMrLzRHak9VVFYzMmFjYmhsTmpOTzZwV1I3RlBUazZ4WDNsR21LMHlzMHpyaG4wWmh3aDd3SzNpYm5WeWc2d2UzTFFhN1dGUXh5R1NwaXFSYmUvbzhqUFhUZStFSzR4RGpFQ0hPeGRZUlljOCsrVWh5ZmdYSG1hNXcvWjVtSitINjNUM0NoTjNZNk8vZ3VNY3hqOE5HaWNMRGdZeVEzQ0tjbnNVYk1CdW9hN2o0OFpnRCtlcnFkY3pxYnNZVHB1bGozTFN1MlBPQmZDUTU4cG4wRUgxT3dvVGFmd3ZYMStKVjJWbUl4RXdIbEpsQnNka3dMSHkybVpqY2dqSTlrSjRZbmJoNi9YdTRsMDlZZmhQakNzU0pnN2hwSWJibmcvOTJNNU1qbjBrUGNkbEpHRi83SlFKQ1Nyc2dBc2VlSHpvcUwrNGJGblNlNUVKS3pnSHBlYVRzZzN2OXJDcnRZRnoraFNjWmR6QUdZczhIWDg0SDlKbjBLQVluUWZ5dUlRVDRZNW1vMGFraU1oUWVEaDQ0dEVndVhHY0UwaVA4NDVNdnh4ekVqUnMzUVo1VXgzaEN0blV4YnFxNlBSLzhjUmRBY3VTejFZZnpHRWhObTJCZERmamt2dzBMY1RZS29rQ0srb2FGQW9sSWppREZCWWwwMi9vdWpEbVFDMWMrWnh6QytCb0lwMnQzNUhYSFByRG5BL2xJY3VRejZTS09PQW5XVnFzUmJIc2NqaWRETmYwZ1JXRjdDTlgyTTFsM1ZUT1FibXBkNTVnRHFUMDF4RGhrbUJUaUpNaEdzQitpc2RyUGJHZTZ3clUxNVJqSXprUUV5SEIzR3FZYllDQWlTZUh3Q01CbUk3bUFZaXd0NmdyWDdRVDloNWRISGNRL1Avc0tsRW03R1lkMzdsSEdHYUx1dDJ0YmlyRDVpVDZUcmlDdUtzVkpzTHJDd3lXdWloMllqL3VuTUMyVkZsZnNncjVob2R4c1pISUVaVm9Ua1A3ODdBUHc3VFhIWnkvYWMvMjVySjNwU3BQMjR0UnJabnllVzAxMmJidFpiUzlBZWZLWitiNm1NdGpKUzZWNkdQL3pPUjN3Sytwa1FuN2J6SGJKQ0NSRHNxRmxCcHorZGpIQ1Y3YTJ3TVVyL3gweGlNKyt1Z3BycTQ1Ym5GaGJoZE5vRitNS0xPdDMyQzc1U3ZxSWI3eFVPMy9GZHIvOHVNcURMbXNxd1UzVmlwSDJRekEyazNoVHIxMUlDbnFaSE1uN0YrSENGSWZaUVE1SmZEVlV2VzFtenY3MDgvVjMxNkZWL3dGNEplOWhzZ1N2M0dPTVl6NzFKZzZia2V6UzBDTjVOMVdMaFNPdXNzVzJqUmVzcm56TlpYVUZtNVBuVzBubDJDY2lWTFFIZWJIQkpoOVUwZzFTM0dZUUQ0ZVFqSDJRV0gwQzB1dHcxNURYQUVJeWJEMG54b1VzWVBNWm16NE41OUhZRStLMFN6eUMyTW8zYklIdzR6VFQrS3QzM0VTQVgvRlpDTVdvdlV0TUlNenZIUkZLSkE5RytWQUd2SjdJUHNLR0MzSGREWUk0cW53emhKUVptUTVsMkFPRGNNU1diNm1KNmZnV24rSDRic3hiV3pYOXRtdDJsOVhsN2Z6WWNwd0pHaGw1TUk1WEVTb0w4a2FHS0I5WFd3dzh4T29ZSVhCckQzaHZPZ25LOUJiRVlkeXBIc2N0U0JjR1lMYkorRk12YnVwejJBYW5KMDF1QVBMVkphYjg4QjAzSDF4aWRLSDhXQjBUQ0NxMUtORU00WWdSRG03RlJseXMrbThMNkc2Z0pMbVBrcHVxeGhKVTBzdDhKRjhGTWVWK2R3VGlwRkw5ekRsR2V3bUIxd1lkekpoL3FSbGNjbnRIRGNxZXZCQ3Y2TkJaM3hJeitDR1A1eFlUS0lvTUlNWnpvK1VUSUFLM1dSS2dVTFVCK2VnY3JUcy83QTA2WHBRMjBUbGFpK080bW0wREtMdVNBZ1B3a1dncUljT2trQytCT0JSZFZsY0MrY2lMMGtVTkc0am9kZDN2bktNMTN5SEFLLzhVQkc2blRCckJPVWMvcGZEQlJaSjg4Y2c5RHVRYkwxcnp4ZHczeXg2MWV4UGJPVWF6aTRSZDhWcVlNaEJJd3l1bkY1eXo5Vk1DVVY2dnhRK0VDSmNIOHMwNVNsTXk0dDE0NXhpMWpBa2pmSXU3R0lFU3h6WVBTYWNDMUdma2czZmhHYkQ2ZGRNbFZ2dUNRei8wb0hBZktjbFNtaUFBSzBKTjc1emRDL095OUpNS2FuS3lUeEJ2T0dBSkpFYmQ0ZkF2VnJ4bzlVdWt4TWZad2J1NGh3V2lLRExDWENTZlROQVVUYmE5Q3M1eDFTRDRPQndJbTRxak5RT2tLRTF1QkgrYVFrc3NWWm1icVo4VUNMQXZ5UzVCbkxEZjJodmFFNlArTVpRZnBZbmdzdUJkMkExK1c3RXFCVVo0TVVNL0tYQXZNakdiSHZtMjNnQ1hhSTF5VEQ5UG83S2V6V0JKQjhFWHAwQUNEMHMrSjZOblFrR3pKR2RQbEZESEJkSSs1dC9aK2RHYVFDNGJIcHZPZ2crdXpuSmNJR2VyZWlZVXlrSWpzK1dXMjJtckJpOVdMYnFuSng5d2x1Z2tJbEhpZnZCR2NnTE5LTFBRNEVTQStwQ3pJNGpmd3kyQWpmZjhDQWR1V3p5NHJMam5uV0VHcUZkbXBmZE1DS2dhWkVPWmM1cXJ4ZzNuV00yOGNYbW9oaGV0UGNxcXNuNHZlRzAyTWN6RG1XVm1Xcys0d2ptcjE4WXZXRmZMQlZJM2JrOEh1YnhaNXNwVlJaSFR5UXpKc1Nvdm9QSHhoQUtyUWR5S3JGTmNFRC93bzhwbmp1dnpXcmdIYXlKeUlZNWJ6MklUdzF5Y0pwOVA3UjRYOExEQ0hLL0wybDBzRUg2MHRtcmNIenpqUmV0NHRNOWhWY2sreFF6S054bkdMUkRxTytLVVpaN2dxbkhkWlkxbXhvUThRVWZqbFl3STF0YUNCeTVZQktyS2N5bmQ5d1RxTnd1ZkVmaHJxcTE3S28xNndoNEZwUEZLNDVadEtETk9nbnNoWmpEZkFIOU03cjRueVBPTmpFdWEvaFpYamF2OE56VFRKdlRoVEY2VXBwSnRGK0pxd0EyTkUxNVU2ZUZaZEdnc21KdlJ5emlVZUJYSVg3UFQyaHVhelJQK2xLa2dhdnN6ZU0xOGpXMG9WY2ZCcllDcVlvUm5OM2FQR2x3MWlNTTE3YWkxR3Rxdm5kL1EvSDVTbnZ2RjdmMTJsamtjejBwc1VtV0JwU296MExuUmdLcEJ1Z3E2TDhDdXhTa1FkZTZrUGNBc1dxTjdBbzEreXphVWFjZEFzY2tJMGp3RFBKUFU1VEJtYk94aS9VVzY0cFFPcmpjKzUvMVYvZHRKZlJJYnJ3MEtXRlZXVitIdzZHTkRaRTZhSHA3ZTBPVVE1cVRybVk0OHJ3LzRzUldXM29qU3BrMzZJK1d6bzdZLzdoeWwrWkp0WFZJN1dKKzQ1aHJnYWN6MjlBMzJRVElTckNEcGlKTGJ1V3A4T2l1aDhqR1lpb2Y4ZVRIcURFdFZLa0NHbVpWWnF6STlzY3N1U0laa1pYVGZLbllIdDhOTm1MSzNGYVF4cGI5R0p6NWpWY0hNY2xXaHJEK1ZlSGZRc0pMa1dxb2hUR3JscW5GWjlMcnVrU2w5N1lJWHBVNWtWY0hNU3ZES1RwcG5oTm1ZOFdrSlhYY0ZuU01aU1k2ZTNjTzFydUt4VS83K0NHVVNuYm5DdGk0YldqSGJPQXZsR09BcGRQcko5YmVEanRFNWtoRnNhT2FxOGRIek1hVy92Qy9lNktHTVdtNGZsWU1rdTRjTm5WbXBQZWo4dWR0QTFhQnpybGw0N1JHanMvYUcrdlg3NXRVa3lpaGwxbEtWWm5ERnJJdXkrMkFhT3Y5RXZBWDBuWTdST1plRUpxNGFGK2czelB2cUhTdGVqT1l2bHZHdUExRm1OeHRDTTFQMThBY01nakFMdjlNeFlXYVg5V2NCa3RXdXV1OWVGcVBNNG1idkF6YkVFZzVoOXRIcExJT3RQK2c3SGVNbk5ITFZlRy9Ka3ZGN1lXeGMzM2pEcXF5MFpob0VLb3Z6TTFQMERQU2RqdEZ2RzVaVlhMUDB2bjE5ejNLclZUdklIRjNmWUhIZUN2cnVITi9BYmROTjNQTzY5KzE3aUxnempyUnV4OEVsL1N3SU1nME05UDNIRzlIcXNQditoVXJySlhFdmN6aitBQWJSeCtBY1g4OEYwdjFBdkJuS0FubFRHOFJsbjUvNkx1TEhXNS96b3JUK0Qwd2cxcXE4eTV4ZnU4OENTeUNuSDVoM2RXL1pHWHZlOHVPTVpSV1Awbm84Y0lGWTcrWWZzd1VSclQzNlFMMDlmZnNNcHBIWWVnVy9QN0NCV0h2bE1PR0JlNS85anRkalk3Ujh3a1RiK1I5bWVaQTZuMm9KV0FBQUFBQkpSVTVFcmtKZ2dnPT0iOw0KICB9IGVsc2Ugew0KICAgIEwuSWNvbi5EZWZhdWx0LnByb3RvdHlwZS5vcHRpb25zLmljb25VcmwgPSAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCa0FBQUFwQ0FZQUFBREFrNExPQUFBR21rbEVRVlJZdzdWWGVVeVRaeGp2Tm5mRUxGdXlJek9hYmVybU1aRWVRQy9PY2xrTzQ5Q3BPSFhPTEpsL0NBVVJ1WWJRaTNLTGdFaGJyaFoxYUR3bWFvR3FLSUk2b2RBVG1IL3NjREZiZEM3THZGcU9DYytlOTVzMlZHNTBYL0xMbS9mNC9aN25lWS9uZTE4YUFOQ21BcjVFL3haZjF1RE9rVGNHY1dSNmhsOTI0N3RUNVU3WTZTTnZXc0tUNjNQNThxYmZlTEpHOE01cWNnVGtucnZ2cmREYnNUN01sK3R2ODJYNnZWeEpFMzNhUm1nU3lZdGNXVk1xWDk3WXYySnZXMzlVaFJFMkh1eUJMK3QrZ0sxMTE2bHkwNkVlV0ZObEFtSHhsUUUwT01pVjZtUUNTY3VzS1JsaFMzUUxlVkpkbDErMjNoNWRZNEZOQjN0aHJiWWJvcXB0RUZscGhUQzFoU3BKbmJSdnhQNE5XZ3NFNUp5ejg2UU5OaS81cVNVVEd1RmsxZ3U1NHROOXd1SzJ3YzNvK1djMTNSQ21zb0J3RXF6R2Nac3hzdkNTeS85d0pLZjdVV2YxbUVZOEpXZmV3YzY3VVVvRGJEalFDK0ZxSzRRcUxWTUdHUjlkMnd1ckt6cUJrM25xSVQvOXpMeFJSamdaOWJxUWd1YitEZG9lQ0MwM1E4aiswUWhGaEJIUi9lUDNVL3pDbG43VXUraGloSjErYkJOZmZMSXZta3lQMGdwQlpXWVhoS3Vzc0s2bUJ6NUhUNk0xTnFwY3ArbUJDUFhvc1lRZnJla0d2cmpld2Q1OS9HdktDRTdUYksvMDQvWlY1UVpZVldtRHdIMW1GM3hhMlEzcmEzREJDNXZCVDFvUDdQVGo0QzArQ2NMOGM3QzJDdGVqcWh1Q251SVFIYUtIenZjUmZacG55bEZmWHNZSngzcE5Md2hLelJBd0FoRXFHMFNwdXNCSGZBS2t4dzN3NDYyN01QaG9DSDc5OHo3czBabkJKL01FSmJaU2JYUGhFUjJpaDdwMm9rL3pTajJjRUpEZDRDQWUrNVdZbkJDZ1IydXJ1eUV3NnpSb1c2L0RXSi9PZUFQOHBkL0JHdHpPWktwRzhva2UwU1g2R01tUms2R0ZseUFjNTlLMzJPVEVpbklMUkpSY2hhaDhIUXdORDhONDM1WjlaMEZZMUVxdHhVZyswU082UkovbW1YejRWdVMrRHB4WEMzZ1htWndJTDdkQlNINHpLRTUwd0VTZjhxd1ZnclAxRUlsVE81SlA5SWd1MGFleGRoMjhGMWxtQUVHSkdmaDdqRTZFbHlNNVJ3L0ZEY1lKaldoYmVpQllvWU5JcGMyRlQvU0lMaXZwMEYxaXBEV2s0QklFbzJWdW9kRUpVaWZoYmlsdG5OQklYUFVGQ01wdGh0QXlxd3MvQlBsRUYvVmJhSXhFcmR4UHBoc1U3cmNDcDhEb2hDK0d2QklQSlMvdFcyanR2VG1tQWV1Tk84Qk5PWVFlRzhHLzJPekNKM3Erc29ZQjVpNk5oTWFLcjE3RlNhbDdHSUhoZXVWM3VTQ1k4cVlWdUVtMWNPenFkV3I3a3UvUjBCRG9UVCtEVCtvaENNNi9DQ3ZLTEtPNFJJK2RYUGVBdWFNcWtzYUtyWjdMM0ZFNUZJRmJrSWNlZU9aMk9jSE82d0loVGtObzBmZmdqUkd4RXFvZ1hIWVVQSGZXQUMvbEFEcHdHY0xSWTNhZUs0L29SR0NLWWNaWFBWb2VYL2tlbFZZWThkVUdmOFY1RUJSYmdKWFQ1UUlQaFA5ZVBKaTQyOEpLT2lFWWhZWEZCcW91Mkd1aCtwL21FQjEvUmZNdzZyWTdjeGNqVHJuZUkxRnJEeXV6VVNSbTltaXdFSng4RS9nVW1xbHl2SEdrbmVpd0VyUjIxRjN0Tk9LNVRmMHlYYVQrTzdEZ0N2QUxUVUJYZE00WWhDL0lhd1BVKzJQZHVxTXZ1YVI2ZW94U3dVazc1Z2dxc1lKN1ZpY3Nud0dJa1pCU1hLT1V3dzczV0dYeXFQK0oyL2I5YytnaTFZQWcveHB3Y2szZ0p1dWNOcmg1SnZEUHZRcjBXRlhmMHBpeXQ4ZjgvV0kwaFY0cFJ4eGtRWmRKRGZESk5PQW1NMEFnOGp5VDZoejBXR1hXdVA5NFloMmpjZmptWEFHdkhDTXNsUmltREhZdUh1RHN5MlF0SHVJYXZ6bmhiWVVScTVSNTdLcHpCQlJaS1BKaThlUWc0OGg0ajhTRGRvd2lmZElyRVZkVStnYk82UU52UlJ0NFpCdGhVYVpoVW5qbFlPYk5hZ1Yza2VvZXJ1M3JVN3JjdWNlcVUxbUpCeHkrQldaWWxORUJIKzBlSDR2UmlCK09ZeWJVMmhuYmxZbFR2a0hpbk00bTU0WW54U3lhWllTRjZSM2p3Z1A3dWRLTEdJWDZyL2xiTmE5TjZ5NU1GeW5qV0R0ckhkNzVadlRZQVBPLzZSZ0Ywazc2bVFsYTNGR3E3ZE8rY0g4c0tuMFZvN25EbGx3QWhxd0xQa3hySHdXbUhKT28rQUtKNHJhYjVPZ3JNN3JWdThlV2IyUHUwRGg0ZURnWG9PZnZwN1k3UWVxa25SbXZjVEJFeXE5bS9IUVFTQ1N6NkxIcTN6MHl6c055U1JmTVMyNTN3bDJLeVJEYmNaUGNmSktqWm1TRU9qY3h5aStZOGRVT3RzSUVINlIyd055a2RxcmtZSjBSVjkySDBXNThwa2ZRazdjS2V2c0xLMTBQeThTZE1HZlhOWEFUWStwUGJ5SlIvRVQ2bjluSWZ6dE50WllSVjlYbmlRdTlJQTJ2T1ZneTRpcjdHQ0xWbW1kK3pqa0gwZUFGOVBvNks2MXBtQ1hIeFU1ckhNWWQxZnRjM293andSU1ZSekxqS3ZxWkV0eTZjUlVEN2pHcWlPZHU1SEc2TWRIak5jTllHcWZEbTVZUnpMQkJDQ0RsLzJiazhhOGdkYnFjZndFQ3U2MkZnL0hyZ2dBQUFBQkpSVTVFcmtKZ2dnPT0iOw0KICB9DQogICovCn0KCgp9LHsiLi9nbG9iYWwvbGVhZmxldCI6OH1dLDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewooZnVuY3Rpb24gKGdsb2JhbCl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKZXhwb3J0cy5kZWZhdWx0ID0gZ2xvYmFsLkhUTUxXaWRnZXRzOwoKCn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9KQp9LHt9XSw3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMuZGVmYXVsdCA9IGdsb2JhbC5qUXVlcnk7CgoKfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09ICJ1bmRlZmluZWQiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDoge30pCn0se31dLDg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewooZnVuY3Rpb24gKGdsb2JhbCl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKZXhwb3J0cy5kZWZhdWx0ID0gZ2xvYmFsLkw7CgoKfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09ICJ1bmRlZmluZWQiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDoge30pCn0se31dLDk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewooZnVuY3Rpb24gKGdsb2JhbCl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKZXhwb3J0cy5kZWZhdWx0ID0gZ2xvYmFsLkwuUHJvajsKCgp9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fSkKfSx7fV0sMTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewooZnVuY3Rpb24gKGdsb2JhbCl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKZXhwb3J0cy5kZWZhdWx0ID0gZ2xvYmFsLlNoaW55OwoKCn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9KQp9LHt9XSwxMTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCnZhciBfanF1ZXJ5ID0gcmVxdWlyZSgiLi9nbG9iYWwvanF1ZXJ5Iik7Cgp2YXIgX2pxdWVyeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9qcXVlcnkpOwoKdmFyIF9sZWFmbGV0ID0gcmVxdWlyZSgiLi9nbG9iYWwvbGVhZmxldCIpOwoKdmFyIF9sZWFmbGV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xlYWZsZXQpOwoKdmFyIF9zaGlueSA9IHJlcXVpcmUoIi4vZ2xvYmFsL3NoaW55Iik7Cgp2YXIgX3NoaW55MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NoaW55KTsKCnZhciBfaHRtbHdpZGdldHMgPSByZXF1aXJlKCIuL2dsb2JhbC9odG1sd2lkZ2V0cyIpOwoKdmFyIF9odG1sd2lkZ2V0czIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9odG1sd2lkZ2V0cyk7Cgp2YXIgX3V0aWwgPSByZXF1aXJlKCIuL3V0aWwiKTsKCnZhciBfY3JzX3V0aWxzID0gcmVxdWlyZSgiLi9jcnNfdXRpbHMiKTsKCnZhciBfY29udHJvbFN0b3JlID0gcmVxdWlyZSgiLi9jb250cm9sLXN0b3JlIik7Cgp2YXIgX2NvbnRyb2xTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb250cm9sU3RvcmUpOwoKdmFyIF9sYXllck1hbmFnZXIgPSByZXF1aXJlKCIuL2xheWVyLW1hbmFnZXIiKTsKCnZhciBfbGF5ZXJNYW5hZ2VyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xheWVyTWFuYWdlcik7Cgp2YXIgX21ldGhvZHMgPSByZXF1aXJlKCIuL21ldGhvZHMiKTsKCnZhciBfbWV0aG9kczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tZXRob2RzKTsKCnJlcXVpcmUoIi4vZml4dXAtZGVmYXVsdC1pY29uIik7Cgp2YXIgX2RhdGFmcmFtZSA9IHJlcXVpcmUoIi4vZGF0YWZyYW1lIik7Cgp2YXIgX2RhdGFmcmFtZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kYXRhZnJhbWUpOwoKdmFyIF9jbHVzdGVyTGF5ZXJTdG9yZSA9IHJlcXVpcmUoIi4vY2x1c3Rlci1sYXllci1zdG9yZSIpOwoKdmFyIF9jbHVzdGVyTGF5ZXJTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbHVzdGVyTGF5ZXJTdG9yZSk7CgpmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfQoKd2luZG93LkxlYWZsZXRXaWRnZXQgPSB7fTsKd2luZG93LkxlYWZsZXRXaWRnZXQudXRpbHMgPSB7fTsKdmFyIG1ldGhvZHMgPSB3aW5kb3cuTGVhZmxldFdpZGdldC5tZXRob2RzID0gX2pxdWVyeTIuZGVmYXVsdC5leHRlbmQoe30sIF9tZXRob2RzMi5kZWZhdWx0KTsKd2luZG93LkxlYWZsZXRXaWRnZXQuRGF0YUZyYW1lID0gX2RhdGFmcmFtZTIuZGVmYXVsdDsKd2luZG93LkxlYWZsZXRXaWRnZXQuQ2x1c3RlckxheWVyU3RvcmUgPSBfY2x1c3RlckxheWVyU3RvcmUyLmRlZmF1bHQ7CndpbmRvdy5MZWFmbGV0V2lkZ2V0LnV0aWxzLmdldENSUyA9IF9jcnNfdXRpbHMuZ2V0Q1JTOwoKLy8gU2VuZCB1cGRhdGVkIGJvdW5kcyBiYWNrIHRvIGFwcC4gVGFrZXMgYSBsZWFmbGV0IGV2ZW50IG9iamVjdCBhcyBpbnB1dC4KZnVuY3Rpb24gdXBkYXRlQm91bmRzKG1hcCkgewogIHZhciBpZCA9IG1hcC5nZXRDb250YWluZXIoKS5pZDsKICB2YXIgYm91bmRzID0gbWFwLmdldEJvdW5kcygpOwoKICBfc2hpbnkyLmRlZmF1bHQub25JbnB1dENoYW5nZShpZCArICJfYm91bmRzIiwgewogICAgbm9ydGg6IGJvdW5kcy5nZXROb3J0aEVhc3QoKS5sYXQsCiAgICBlYXN0OiBib3VuZHMuZ2V0Tm9ydGhFYXN0KCkubG5nLAogICAgc291dGg6IGJvdW5kcy5nZXRTb3V0aFdlc3QoKS5sYXQsCiAgICB3ZXN0OiBib3VuZHMuZ2V0U291dGhXZXN0KCkubG5nCiAgfSk7CiAgX3NoaW55Mi5kZWZhdWx0Lm9uSW5wdXRDaGFuZ2UoaWQgKyAiX2NlbnRlciIsIHsKICAgIGxuZzogbWFwLmdldENlbnRlcigpLmxuZywKICAgIGxhdDogbWFwLmdldENlbnRlcigpLmxhdAogIH0pOwogIF9zaGlueTIuZGVmYXVsdC5vbklucHV0Q2hhbmdlKGlkICsgIl96b29tIiwgbWFwLmdldFpvb20oKSk7Cn0KCmZ1bmN0aW9uIHByZXZlbnRVbmludGVuZGVkWm9vbU9uU2Nyb2xsKG1hcCkgewogIC8vIFByZXZlbnQgdW53YW50ZWQgc2Nyb2xsIGNhcHR1cmluZy4gU2ltaWxhciBpbiBwdXJwb3NlIHRvCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0NsaWZmQ2xvdWQvTGVhZmxldC5TbGVlcCBidXQgd2l0aCBhCiAgLy8gZGlmZmVyZW50IHNldCBvZiBoZXVyaXN0aWNzLgoKICAvLyBUaGUgYmFzaWMgaWRlYSBpcyB0aGF0IHdoZW4gYSBtb3VzZXdoZWVsL0RPTU1vdXNlU2Nyb2xsCiAgLy8gZXZlbnQgaXMgc2Vlbiwgd2UgZGlzYWJsZSBzY3JvbGwgd2hlZWwgem9vbWluZyB1bnRpbCB0aGUKICAvLyB1c2VyIG1vdmVzIHRoZWlyIG1vdXNlIGN1cnNvciBvciBjbGlja3Mgb24gdGhlIG1hcC4gVGhpcwogIC8vIGlzIHNsaWdodGx5IHRyaWNraWVyIHRoYW4ganVzdCBsaXN0ZW5pbmcgZm9yIG1vdXNlbW92ZSwKICAvLyBiZWNhdXNlIG1vdXNlbW92ZSBpcyBmaXJlZCB3aGVuIHRoZSBwYWdlIGlzIHNjcm9sbGVkLAogIC8vIGV2ZW4gaWYgdGhlIHVzZXIgZGlkIG5vdCBwaHlzaWNhbGx5IG1vdmUgdGhlIG1vdXNlLiBXZQogIC8vIGhhbmRsZSB0aGlzIGJ5IGV4YW1pbmluZyB0aGUgbW91c2Vtb3ZlIGV2ZW50J3Mgc2NyZWVuWAogIC8vIGFuZCBzY3JlZW5ZIHByb3BlcnRpZXM7IGlmIHRoZXkgY2hhbmdlLCB3ZSBrbm93IGl0J3MgYQogIC8vICJ0cnVlIiBtb3ZlLgoKICAvLyBsYXN0U2NyZWVuIGNhbiBuZXZlciBiZSBudWxsLCBidXQgaXRzIHggYW5kIHkgY2FuLgogIHZhciBsYXN0U2NyZWVuID0geyB4OiBudWxsLCB5OiBudWxsIH07CiAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGRvY3VtZW50KS5vbigibW91c2V3aGVlbCBET01Nb3VzZVNjcm9sbCIsICIqIiwgZnVuY3Rpb24gKGUpIHsKICAgIC8vIERpc2FibGUgem9vbWluZyAodW50aWwgdGhlIG1vdXNlIG1vdmVzIG9yIGNsaWNrKQogICAgbWFwLnNjcm9sbFdoZWVsWm9vbS5kaXNhYmxlKCk7CiAgICAvLyBBbnkgbW91c2Vtb3ZlIGV2ZW50cyBhdCB0aGlzIHNjcmVlbiBwb3NpdGlvbiB3aWxsIGJlIGlnbm9yZWQuCiAgICBsYXN0U2NyZWVuID0geyB4OiBlLm9yaWdpbmFsRXZlbnQuc2NyZWVuWCwgeTogZS5vcmlnaW5hbEV2ZW50LnNjcmVlblkgfTsKICB9KTsKICAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoZG9jdW1lbnQpLm9uKCJtb3VzZW1vdmUiLCAiKiIsIGZ1bmN0aW9uIChlKSB7CiAgICAvLyBEaWQgdGhlIG1vdXNlIHJlYWxseSBtb3ZlPwogICAgaWYgKGxhc3RTY3JlZW4ueCAhPT0gbnVsbCAmJiBlLnNjcmVlblggIT09IGxhc3RTY3JlZW4ueCB8fCBlLnNjcmVlblkgIT09IGxhc3RTY3JlZW4ueSkgewogICAgICAvLyBJdCByZWFsbHkgbW92ZWQuIEVuYWJsZSB6b29taW5nLgogICAgICBtYXAuc2Nyb2xsV2hlZWxab29tLmVuYWJsZSgpOwogICAgICBsYXN0U2NyZWVuID0geyB4OiBudWxsLCB5OiBudWxsIH07CiAgICB9CiAgfSk7CiAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGRvY3VtZW50KS5vbigibW91c2Vkb3duIiwgIi5sZWFmbGV0IiwgZnVuY3Rpb24gKGUpIHsKICAgIC8vIENsaWNraW5nIGFsd2F5cyBlbmFibGVzIHpvb21pbmcuCiAgICBtYXAuc2Nyb2xsV2hlZWxab29tLmVuYWJsZSgpOwogICAgbGFzdFNjcmVlbiA9IHsgeDogbnVsbCwgeTogbnVsbCB9OwogIH0pOwp9CgpfaHRtbHdpZGdldHMyLmRlZmF1bHQud2lkZ2V0KHsKCiAgbmFtZTogImxlYWZsZXQiLAogIHR5cGU6ICJvdXRwdXQiLAogIGZhY3Rvcnk6IGZ1bmN0aW9uIGZhY3RvcnkoZWwsIHdpZHRoLCBoZWlnaHQpIHsKCiAgICB2YXIgbWFwID0gbnVsbDsKCiAgICByZXR1cm4gewoKICAgICAgLy8gd2UgbmVlZCB0byBzdG9yZSBvdXIgbWFwIGluIG91ciByZXR1cm5lZCBvYmplY3QuCiAgICAgIGdldE1hcDogZnVuY3Rpb24gZ2V0TWFwKCkgewogICAgICAgIHJldHVybiBtYXA7CiAgICAgIH0sCgogICAgICByZW5kZXJWYWx1ZTogZnVuY3Rpb24gcmVuZGVyVmFsdWUoZGF0YSkgewoKICAgICAgICAvLyBDcmVhdGUgYW4gYXBwcm9wcmlhdGUgQ1JTIE9iamVjdCBpZiBzcGVjaWZpZWQKCiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5vcHRpb25zICYmIGRhdGEub3B0aW9ucy5jcnMpIHsKICAgICAgICAgIGRhdGEub3B0aW9ucy5jcnMgPSAoMCwgX2Nyc191dGlscy5nZXRDUlMpKGRhdGEub3B0aW9ucy5jcnMpOwogICAgICAgIH0KCiAgICAgICAgLy8gQXMgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL2xlYWZsZXQvcHVsbC8yOTQjZGlzY3Vzc2lvbl9yNzk1ODQ4MTAKICAgICAgICBpZiAobWFwKSB7CiAgICAgICAgICBtYXAucmVtb3ZlKCk7CiAgICAgICAgICBtYXAgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0oKTsgLy8gdW5kZWZpbmUgbWFwCiAgICAgICAgfQoKICAgICAgICBpZiAoZGF0YS5vcHRpb25zLm1hcEZhY3RvcnkgJiYgdHlwZW9mIGRhdGEub3B0aW9ucy5tYXBGYWN0b3J5ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBtYXAgPSBkYXRhLm9wdGlvbnMubWFwRmFjdG9yeShlbCwgZGF0YS5vcHRpb25zKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWFwID0gX2xlYWZsZXQyLmRlZmF1bHQubWFwKGVsLCBkYXRhLm9wdGlvbnMpOwogICAgICAgIH0KCiAgICAgICAgcHJldmVudFVuaW50ZW5kZWRab29tT25TY3JvbGwobWFwKTsKCiAgICAgICAgLy8gU3RvcmUgc29tZSBzdGF0ZSBpbiB0aGUgbWFwIG9iamVjdAogICAgICAgIG1hcC5sZWFmbGV0ciA9IHsKICAgICAgICAgIC8vIEhhcyB0aGUgbWFwIGV2ZXIgcmVuZGVyZWQgc3VjY2Vzc2Z1bGx5PwogICAgICAgICAgaGFzUmVuZGVyZWQ6IGZhbHNlLAogICAgICAgICAgLy8gRGF0YSB0byBiZSByZW5kZXJlZCB3aGVuIHJlc2l6ZSBpcyBjYWxsZWQgd2l0aCBhcmVhICE9IDAKICAgICAgICAgIHBlbmRpbmdSZW5kZXJEYXRhOiBudWxsCiAgICAgICAgfTsKCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG1hcCBpcyByZW5kZXJlZCBzdGF0aWNhbGx5IChubyBvdXRwdXQgYmluZGluZykKICAgICAgICBpZiAoX2h0bWx3aWRnZXRzMi5kZWZhdWx0LnNoaW55TW9kZSAmJiAvXGJzaGlueS1ib3VuZC1vdXRwdXRcYi8udGVzdChlbC5jbGFzc05hbWUpKSB7CiAgICAgICAgICAoZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgbWFwLmlkID0gZWwuaWQ7CgogICAgICAgICAgICAvLyBTdG9yZSB0aGUgbWFwIG9uIHRoZSBlbGVtZW50IHNvIHdlIGNhbiBmaW5kIGl0IGxhdGVyIGJ5IElECiAgICAgICAgICAgICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShlbCkuZGF0YSgibGVhZmxldC1tYXAiLCBtYXApOwoKICAgICAgICAgICAgLy8gV2hlbiB0aGUgbWFwIGlzIGNsaWNrZWQsIHNlbmQgdGhlIGNvb3JkaW5hdGVzIGJhY2sgdG8gdGhlIGFwcAogICAgICAgICAgICBtYXAub24oImNsaWNrIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICBfc2hpbnkyLmRlZmF1bHQub25JbnB1dENoYW5nZShtYXAuaWQgKyAiX2NsaWNrIiwgewogICAgICAgICAgICAgICAgbGF0OiBlLmxhdGxuZy5sYXQsCiAgICAgICAgICAgICAgICBsbmc6IGUubGF0bG5nLmxuZywKICAgICAgICAgICAgICAgICIubm9uY2UiOiBNYXRoLnJhbmRvbSgpIC8vIEZvcmNlIHJlYWN0aXZpdHkgaWYgbGF0L2xuZyBoYXNuJ3QgY2hhbmdlZAogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIHZhciBncm91cFRpbWVySWQgPSBudWxsOwoKICAgICAgICAgICAgbWFwLm9uKCJtb3ZlZW5kIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICB1cGRhdGVCb3VuZHMoZS50YXJnZXQpOwogICAgICAgICAgICB9KS5vbigibGF5ZXJhZGQgbGF5ZXJyZW1vdmUiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIC8vIElmIHRoZSBsYXllciB0aGF0J3MgY29taW5nIG9yIGdvaW5nIGlzIGEgZ3JvdXAgd2UgY3JlYXRlZCwgdGVsbAogICAgICAgICAgICAgIC8vIHRoZSBzZXJ2ZXIuCiAgICAgICAgICAgICAgaWYgKG1hcC5sYXllck1hbmFnZXIuZ2V0R3JvdXBOYW1lRnJvbUxheWVyR3JvdXAoZS5sYXllcikpIHsKICAgICAgICAgICAgICAgIC8vIEJ1dCB0byBhdm9pZCBjaGF0dGluZXNzLCBjb2FsZXNjZSBldmVudHMKICAgICAgICAgICAgICAgIGlmIChncm91cFRpbWVySWQpIHsKICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGdyb3VwVGltZXJJZCk7CiAgICAgICAgICAgICAgICAgIGdyb3VwVGltZXJJZCA9IG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBncm91cFRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgZ3JvdXBUaW1lcklkID0gbnVsbDsKICAgICAgICAgICAgICAgICAgX3NoaW55Mi5kZWZhdWx0Lm9uSW5wdXRDaGFuZ2UobWFwLmlkICsgIl9ncm91cHMiLCBtYXAubGF5ZXJNYW5hZ2VyLmdldFZpc2libGVHcm91cHMoKSk7CiAgICAgICAgICAgICAgICB9LCAxMDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KSgpOwogICAgICAgIH0KICAgICAgICB0aGlzLmRvUmVuZGVyVmFsdWUoZGF0YSwgbWFwKTsKICAgICAgfSwKICAgICAgZG9SZW5kZXJWYWx1ZTogZnVuY3Rpb24gZG9SZW5kZXJWYWx1ZShkYXRhLCBtYXApIHsKICAgICAgICAvLyBMZWFmbGV0IGRvZXMgbm90IGJlaGF2ZSB3ZWxsIHdoZW4geW91IHNldCB1cCBhIGJ1bmNoIG9mIGxheWVycyB3aGVuCiAgICAgICAgLy8gdGhlIG1hcCBpcyBub3QgdmlzaWJsZSAod2lkdGgvaGVpZ2h0ID09IDApLiBQb3B1cHMgZ2V0IG1pc2FsaWduZWQKICAgICAgICAvLyByZWxhdGl2ZSB0byB0aGVpciBvd25pbmcgbWFya2VycywgYW5kIHRoZSBmaXRCb3VuZHMgY2FsY3VsYXRpb25zCiAgICAgICAgLy8gYXJlIG9mZi4gVGhlcmVmb3JlIHdlIHdhaXQgdW50aWwgdGhlIG1hcCBpcyBhY3R1YWxseSBzaG93aW5nIHRvCiAgICAgICAgLy8gcmVuZGVyIHRoZSB2YWx1ZSAod2UgcmVseSBvbiB0aGUgcmVzaXplKCkgY2FsbGJhY2sgYmVpbmcgaW52b2tlZAogICAgICAgIC8vIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lKS4KICAgICAgICAvLwogICAgICAgIC8vIFRoZXJlIG1heSBiZSBhbiBpc3N1ZSB3aXRoIGxlYWZsZXRQcm94eSgpIGNhbGxzIGJlaW5nIG1hZGUgd2hpbGUKICAgICAgICAvLyB0aGUgbWFwIGlzIG5vdCBiZWluZyB2aWV3ZWQtLW5vdCBzdXJlIHdoYXQgdGhlIHJpZ2h0IHNvbHV0aW9uIGlzCiAgICAgICAgLy8gdGhlcmUuCiAgICAgICAgaWYgKGVsLm9mZnNldFdpZHRoID09PSAwIHx8IGVsLm9mZnNldEhlaWdodCA9PT0gMCkgewogICAgICAgICAgbWFwLmxlYWZsZXRyLnBlbmRpbmdSZW5kZXJEYXRhID0gZGF0YTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgbWFwLmxlYWZsZXRyLnBlbmRpbmdSZW5kZXJEYXRhID0gbnVsbDsKCiAgICAgICAgLy8gTWVyZ2UgZGF0YSBvcHRpb25zIGludG8gZGVmYXVsdHMKICAgICAgICB2YXIgb3B0aW9ucyA9IF9qcXVlcnkyLmRlZmF1bHQuZXh0ZW5kKHsgem9vbVRvTGltaXRzOiAiYWx3YXlzIiB9LCBkYXRhLm9wdGlvbnMpOwoKICAgICAgICBpZiAoIW1hcC5sYXllck1hbmFnZXIpIHsKICAgICAgICAgIG1hcC5jb250cm9scyA9IG5ldyBfY29udHJvbFN0b3JlMi5kZWZhdWx0KG1hcCk7CiAgICAgICAgICBtYXAubGF5ZXJNYW5hZ2VyID0gbmV3IF9sYXllck1hbmFnZXIyLmRlZmF1bHQobWFwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWFwLmNvbnRyb2xzLmNsZWFyKCk7CiAgICAgICAgICBtYXAubGF5ZXJNYW5hZ2VyLmNsZWFyKCk7CiAgICAgICAgfQoKICAgICAgICB2YXIgZXhwbGljaXRWaWV3ID0gZmFsc2U7CiAgICAgICAgaWYgKGRhdGEuc2V0VmlldykgewogICAgICAgICAgZXhwbGljaXRWaWV3ID0gdHJ1ZTsKICAgICAgICAgIG1hcC5zZXRWaWV3LmFwcGx5KG1hcCwgZGF0YS5zZXRWaWV3KTsKICAgICAgICB9CiAgICAgICAgaWYgKGRhdGEuZml0Qm91bmRzKSB7CiAgICAgICAgICBleHBsaWNpdFZpZXcgPSB0cnVlOwogICAgICAgICAgbWV0aG9kcy5maXRCb3VuZHMuYXBwbHkobWFwLCBkYXRhLmZpdEJvdW5kcyk7CiAgICAgICAgfQogICAgICAgIGlmIChkYXRhLm9wdGlvbnMuY2VudGVyKSB7CiAgICAgICAgICBleHBsaWNpdFZpZXcgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB6b29tVG9MaW1pdHMgb3B0aW9uIHNheXMgdGhhdCB0aGUgbWFwIHNob3VsZCBiZQogICAgICAgIC8vIHpvb21lZCB0byBtYXAgZWxlbWVudHMuCiAgICAgICAgZnVuY3Rpb24gbmVlZHNab29tKCkgewogICAgICAgICAgcmV0dXJuIG9wdGlvbnMuem9vbVRvTGltaXRzID09PSAiYWx3YXlzIiB8fCBvcHRpb25zLnpvb21Ub0xpbWl0cyA9PT0gImZpcnN0IiAmJiAhbWFwLmxlYWZsZXRyLmhhc1JlbmRlcmVkOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFleHBsaWNpdFZpZXcgJiYgbmVlZHNab29tKCkgJiYgIW1hcC5nZXRab29tKCkpIHsKICAgICAgICAgIGlmIChkYXRhLmxpbWl0cyAmJiAhX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGRhdGEubGltaXRzKSkgewogICAgICAgICAgICAvLyBVc2UgdGhlIG5hdHVyYWwgbGltaXRzIG9mIHdoYXQncyBiZWluZyBkcmF3biBvbiB0aGUgbWFwCiAgICAgICAgICAgIC8vIElmIHRoZSBzaXplIG9mIHRoZSBib3VuZGluZyBib3ggaXMgMCwgbGVhZmxldCBnZXRzIGFsbCB3ZWlyZAogICAgICAgICAgICB2YXIgcGFkID0gMC4wMDY7CiAgICAgICAgICAgIGlmIChkYXRhLmxpbWl0cy5sYXRbMF0gPT09IGRhdGEubGltaXRzLmxhdFsxXSkgewogICAgICAgICAgICAgIGRhdGEubGltaXRzLmxhdFswXSA9IGRhdGEubGltaXRzLmxhdFswXSAtIHBhZDsKICAgICAgICAgICAgICBkYXRhLmxpbWl0cy5sYXRbMV0gPSBkYXRhLmxpbWl0cy5sYXRbMV0gKyBwYWQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGRhdGEubGltaXRzLmxuZ1swXSA9PT0gZGF0YS5saW1pdHMubG5nWzFdKSB7CiAgICAgICAgICAgICAgZGF0YS5saW1pdHMubG5nWzBdID0gZGF0YS5saW1pdHMubG5nWzBdIC0gcGFkOwogICAgICAgICAgICAgIGRhdGEubGltaXRzLmxuZ1sxXSA9IGRhdGEubGltaXRzLmxuZ1sxXSArIHBhZDsKICAgICAgICAgICAgfQogICAgICAgICAgICBtYXAuZml0Qm91bmRzKFtbZGF0YS5saW1pdHMubGF0WzBdLCBkYXRhLmxpbWl0cy5sbmdbMF1dLCBbZGF0YS5saW1pdHMubGF0WzFdLCBkYXRhLmxpbWl0cy5sbmdbMV1dXSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtYXAuZml0V29ybGQoKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBkYXRhLmNhbGxzICYmIGkgPCBkYXRhLmNhbGxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgY2FsbCA9IGRhdGEuY2FsbHNbaV07CiAgICAgICAgICBpZiAobWV0aG9kc1tjYWxsLm1ldGhvZF0pIG1ldGhvZHNbY2FsbC5tZXRob2RdLmFwcGx5KG1hcCwgY2FsbC5hcmdzKTtlbHNlICgwLCBfdXRpbC5sb2cpKCJVbmtub3duIG1ldGhvZCAiICsgY2FsbC5tZXRob2QpOwogICAgICAgIH0KCiAgICAgICAgbWFwLmxlYWZsZXRyLmhhc1JlbmRlcmVkID0gdHJ1ZTsKCiAgICAgICAgaWYgKF9odG1sd2lkZ2V0czIuZGVmYXVsdC5zaGlueU1vZGUpIHsKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICB1cGRhdGVCb3VuZHMobWFwKTsKICAgICAgICAgIH0sIDEpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbiByZXNpemUod2lkdGgsIGhlaWdodCkgewogICAgICAgIGlmIChtYXApIHsKICAgICAgICAgIG1hcC5pbnZhbGlkYXRlU2l6ZSgpOwogICAgICAgICAgaWYgKG1hcC5sZWFmbGV0ci5wZW5kaW5nUmVuZGVyRGF0YSkgewogICAgICAgICAgICB0aGlzLmRvUmVuZGVyVmFsdWUobWFwLmxlYWZsZXRyLnBlbmRpbmdSZW5kZXJEYXRhLCBtYXApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKaWYgKF9odG1sd2lkZ2V0czIuZGVmYXVsdC5zaGlueU1vZGUpIHsKICBfc2hpbnkyLmRlZmF1bHQuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIoImxlYWZsZXQtY2FsbHMiLCBmdW5jdGlvbiAoZGF0YSkgewogICAgdmFyIGlkID0gZGF0YS5pZDsKICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICAgIHZhciBtYXAgPSBlbCA/ICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShlbCkuZGF0YSgibGVhZmxldC1tYXAiKSA6IG51bGw7CiAgICBpZiAoIW1hcCkgewogICAgICAoMCwgX3V0aWwubG9nKSgiQ291bGRuJ3QgZmluZCBtYXAgd2l0aCBpZCAiICsgaWQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmNhbGxzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjYWxsID0gZGF0YS5jYWxsc1tpXTsKICAgICAgaWYgKGNhbGwuZGVwZW5kZW5jaWVzKSB7CiAgICAgICAgX3NoaW55Mi5kZWZhdWx0LnJlbmRlckRlcGVuZGVuY2llcyhjYWxsLmRlcGVuZGVuY2llcyk7CiAgICAgIH0KICAgICAgaWYgKG1ldGhvZHNbY2FsbC5tZXRob2RdKSBtZXRob2RzW2NhbGwubWV0aG9kXS5hcHBseShtYXAsIGNhbGwuYXJncyk7ZWxzZSAoMCwgX3V0aWwubG9nKSgiVW5rbm93biBtZXRob2QgIiArIGNhbGwubWV0aG9kKTsKICAgIH0KICB9KTsKfQoKCn0seyIuL2NsdXN0ZXItbGF5ZXItc3RvcmUiOjEsIi4vY29udHJvbC1zdG9yZSI6MiwiLi9jcnNfdXRpbHMiOjMsIi4vZGF0YWZyYW1lIjo0LCIuL2ZpeHVwLWRlZmF1bHQtaWNvbiI6NSwiLi9nbG9iYWwvaHRtbHdpZGdldHMiOjYsIi4vZ2xvYmFsL2pxdWVyeSI6NywiLi9nbG9iYWwvbGVhZmxldCI6OCwiLi9nbG9iYWwvc2hpbnkiOjEwLCIuL2xheWVyLW1hbmFnZXIiOjEyLCIuL21ldGhvZHMiOjEzLCIuL3V0aWwiOjE1fV0sMTI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewooZnVuY3Rpb24gKGdsb2JhbCl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKCnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpOwoKdmFyIF9qcXVlcnkgPSByZXF1aXJlKCIuL2dsb2JhbC9qcXVlcnkiKTsKCnZhciBfanF1ZXJ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2pxdWVyeSk7Cgp2YXIgX2xlYWZsZXQgPSByZXF1aXJlKCIuL2dsb2JhbC9sZWFmbGV0Iik7Cgp2YXIgX2xlYWZsZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbGVhZmxldCk7Cgp2YXIgX3V0aWwgPSByZXF1aXJlKCIuL3V0aWwiKTsKCmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9CgpmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KCnZhciBMYXllck1hbmFnZXIgPSBmdW5jdGlvbiAoKSB7CiAgZnVuY3Rpb24gTGF5ZXJNYW5hZ2VyKG1hcCkgewogICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExheWVyTWFuYWdlcik7CgogICAgdGhpcy5fbWFwID0gbWFwOwoKICAgIC8vIEJFR0lOIGxheWVyIGluZGljZXMKCiAgICAvLyB7PGdyb3VwbmFtZT46IHs8c3RhbXA+OiBsYXllcn19CiAgICB0aGlzLl9ieUdyb3VwID0ge307CiAgICAvLyB7PGNhdGVnb3J5TmFtZT46IHs8c3RhbXA+OiBsYXllcn19CiAgICB0aGlzLl9ieUNhdGVnb3J5ID0ge307CiAgICAvLyB7PGNhdGVnb3J5TmFtZV9sYXllcklkPjogbGF5ZXJ9CiAgICB0aGlzLl9ieUxheWVySWQgPSB7fTsKICAgIC8vIHs8c3RhbXA+OiB7CiAgICAvLyAgICAgICAgICAgICAiZ3JvdXAiOiA8Z3JvdXBuYW1lPiwKICAgIC8vICAgICAgICAgICAgICJsYXllcklkIjogPGxheWVySWQ+LAogICAgLy8gICAgICAgICAgICAgImNhdGVnb3J5IjogPGNhdGVnb3J5PiwKICAgIC8vICAgICAgICAgICAgICJjb250YWluZXIiOiA8Y29udGFpbmVyPgogICAgLy8gICAgICAgICAgIH0KICAgIC8vIH0KICAgIHRoaXMuX2J5U3RhbXAgPSB7fTsKICAgIC8vIHs8Y3Jvc3N0YWxrR3JvdXBOYW1lPjogezxrZXk+OiBbPHN0YW1wPiwgPHN0YW1wPiwgLi4uXSwgLi4ufX0KICAgIHRoaXMuX2J5Q3Jvc3N0YWxrR3JvdXAgPSB7fTsKCiAgICAvLyBFTkQgbGF5ZXIgaW5kaWNlcwoKICAgIC8vIHs8Y2F0ZWdvcnlOYW1lPjogTC5sYXllckdyb3VwfQogICAgdGhpcy5fY2F0ZWdvcnlDb250YWluZXJzID0ge307CiAgICAvLyB7PGdyb3VwTmFtZT46IEwubGF5ZXJHcm91cH0KICAgIHRoaXMuX2dyb3VwQ29udGFpbmVycyA9IHt9OwogIH0KCiAgX2NyZWF0ZUNsYXNzKExheWVyTWFuYWdlciwgW3sKICAgIGtleTogImFkZExheWVyIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRMYXllcihsYXllciwgY2F0ZWdvcnksIGxheWVySWQsIGdyb3VwLCBjdEdyb3VwLCBjdEtleSkgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgLy8gV2FzIGEgZ3JvdXAgcHJvdmlkZWQ/CiAgICAgIHZhciBoYXNJZCA9IHR5cGVvZiBsYXllcklkID09PSAic3RyaW5nIjsKICAgICAgdmFyIGdyb3VwZWQgPSB0eXBlb2YgZ3JvdXAgPT09ICJzdHJpbmciOwoKICAgICAgdmFyIHN0YW1wID0gX2xlYWZsZXQyLmRlZmF1bHQuVXRpbC5zdGFtcChsYXllcik7CgogICAgICAvLyBUaGlzIHdpbGwgYmUgdGhlIGRlZmF1bHQgbGF5ZXIgZ3JvdXAgdG8gYWRkIHRoZSBsYXllciB0by4KICAgICAgLy8gV2UgbWF5IG92ZXJ3cml0ZSB0aGlzIGxldCBiZWZvcmUgdXNpbmcgaXQgKGkuZS4gaWYgYSBncm91cCBpcyBhc3NpZ25lZCkuCiAgICAgIC8vIFRoaXMgb25lIGxpbmVyIGNyZWF0ZXMgdGhlIF9jYXRlZ29yeUNvbnRhaW5lcnNbY2F0ZWdvcnldIGVudHJ5IGlmIGl0CiAgICAgIC8vIGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4KICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMuX2NhdGVnb3J5Q29udGFpbmVyc1tjYXRlZ29yeV0gPSB0aGlzLl9jYXRlZ29yeUNvbnRhaW5lcnNbY2F0ZWdvcnldIHx8IF9sZWFmbGV0Mi5kZWZhdWx0LmxheWVyR3JvdXAoKS5hZGRUbyh0aGlzLl9tYXApOwoKICAgICAgdmFyIG9sZExheWVyID0gbnVsbDsKICAgICAgaWYgKGhhc0lkKSB7CiAgICAgICAgLy8gRmlyc3QsIHJlbW92ZSBhbnkgbGF5ZXIgd2l0aCB0aGUgc2FtZSBjYXRlZ29yeSBhbmQgbGF5ZXJJZAogICAgICAgIHZhciBwcmVmaXhlZExheWVySWQgPSB0aGlzLl9sYXllcklkS2V5KGNhdGVnb3J5LCBsYXllcklkKTsKICAgICAgICBvbGRMYXllciA9IHRoaXMuX2J5TGF5ZXJJZFtwcmVmaXhlZExheWVySWRdOwogICAgICAgIGlmIChvbGRMYXllcikgewogICAgICAgICAgdGhpcy5fcmVtb3ZlTGF5ZXIob2xkTGF5ZXIpOwogICAgICAgIH0KCiAgICAgICAgLy8gVXBkYXRlIGxheWVySWQgaW5kZXgKICAgICAgICB0aGlzLl9ieUxheWVySWRbcHJlZml4ZWRMYXllcklkXSA9IGxheWVyOwogICAgICB9CgogICAgICAvLyBVcGRhdGUgZ3JvdXAgaW5kZXgKICAgICAgaWYgKGdyb3VwZWQpIHsKICAgICAgICB0aGlzLl9ieUdyb3VwW2dyb3VwXSA9IHRoaXMuX2J5R3JvdXBbZ3JvdXBdIHx8IHt9OwogICAgICAgIHRoaXMuX2J5R3JvdXBbZ3JvdXBdW3N0YW1wXSA9IGxheWVyOwoKICAgICAgICAvLyBTaW5jZSBhIGdyb3VwIGlzIGFzc2lnbmVkLCBkb24ndCBhZGQgdGhlIGxheWVyIHRvIHRoZSBjYXRlZ29yeSdzIGxheWVyCiAgICAgICAgLy8gZ3JvdXA7IGluc3RlYWQsIHVzZSB0aGUgZ3JvdXAncyBsYXllciBncm91cC4KICAgICAgICAvLyBUaGlzIG9uZSBsaW5lciBjcmVhdGVzIHRoZSBfZ3JvdXBDb250YWluZXJzW2dyb3VwXSBlbnRyeSBpZiBpdCBkb2Vzbid0CiAgICAgICAgLy8gYWxyZWFkeSBleGlzdC4KICAgICAgICBjb250YWluZXIgPSB0aGlzLmdldExheWVyR3JvdXAoZ3JvdXAsIHRydWUpOwogICAgICB9CgogICAgICAvLyBVcGRhdGUgY2F0ZWdvcnkgaW5kZXgKICAgICAgdGhpcy5fYnlDYXRlZ29yeVtjYXRlZ29yeV0gPSB0aGlzLl9ieUNhdGVnb3J5W2NhdGVnb3J5XSB8fCB7fTsKICAgICAgdGhpcy5fYnlDYXRlZ29yeVtjYXRlZ29yeV1bc3RhbXBdID0gbGF5ZXI7CgogICAgICAvLyBVcGRhdGUgc3RhbXAgaW5kZXgKICAgICAgdmFyIGxheWVySW5mbyA9IHRoaXMuX2J5U3RhbXBbc3RhbXBdID0gewogICAgICAgIGxheWVyOiBsYXllciwKICAgICAgICBncm91cDogZ3JvdXAsCiAgICAgICAgY3RHcm91cDogY3RHcm91cCwKICAgICAgICBjdEtleTogY3RLZXksCiAgICAgICAgbGF5ZXJJZDogbGF5ZXJJZCwKICAgICAgICBjYXRlZ29yeTogY2F0ZWdvcnksCiAgICAgICAgY29udGFpbmVyOiBjb250YWluZXIsCiAgICAgICAgaGlkZGVuOiBmYWxzZQogICAgICB9OwoKICAgICAgLy8gVXBkYXRlIGNyb3NzdGFsayBncm91cCBpbmRleAogICAgICBpZiAoY3RHcm91cCkgewogICAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAobGF5ZXIuc2V0U3R5bGUpIHsKICAgICAgICAgICAgLy8gTmVlZCB0byBzYXZlIHRoaXMgaW5mbyBzbyB3ZSBrbm93IHdoYXQgdG8gc2V0IG9wYWNpdHkgdG8gbGF0ZXIKICAgICAgICAgICAgbGF5ZXIub3B0aW9ucy5vcmlnT3BhY2l0eSA9IHR5cGVvZiBsYXllci5vcHRpb25zLm9wYWNpdHkgIT09ICJ1bmRlZmluZWQiID8gbGF5ZXIub3B0aW9ucy5vcGFjaXR5IDogMC41OwogICAgICAgICAgICBsYXllci5vcHRpb25zLm9yaWdGaWxsT3BhY2l0eSA9IHR5cGVvZiBsYXllci5vcHRpb25zLmZpbGxPcGFjaXR5ICE9PSAidW5kZWZpbmVkIiA/IGxheWVyLm9wdGlvbnMuZmlsbE9wYWNpdHkgOiAwLjI7CiAgICAgICAgICB9CgogICAgICAgICAgdmFyIGN0ZyA9IF90aGlzLl9ieUNyb3NzdGFsa0dyb3VwW2N0R3JvdXBdOwogICAgICAgICAgaWYgKCFjdGcpIHsKICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICBjdGcgPSBfdGhpcy5fYnlDcm9zc3RhbGtHcm91cFtjdEdyb3VwXSA9IHt9OwogICAgICAgICAgICAgIHZhciBjcm9zc3RhbGsgPSBnbG9iYWwuY3Jvc3N0YWxrOwoKICAgICAgICAgICAgICB2YXIgaGFuZGxlRmlsdGVyID0gZnVuY3Rpb24gaGFuZGxlRmlsdGVyKGUpIHsKICAgICAgICAgICAgICAgIGlmICghZS52YWx1ZSkgewogICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBLZXlzID0gT2JqZWN0LmtleXMoY3RnKTsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cEtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gZ3JvdXBLZXlzW2ldOwogICAgICAgICAgICAgICAgICAgIHZhciBfbGF5ZXJJbmZvID0gX3RoaXMuX2J5U3RhbXBbY3RnW2tleV1dOwogICAgICAgICAgICAgICAgICAgIF90aGlzLl9zZXRWaXNpYmlsaXR5KF9sYXllckluZm8sIHRydWUpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXlzID0ge307CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBlLnZhbHVlLmxlbmd0aDsgX2krKykgewogICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkS2V5c1tlLnZhbHVlW19pXV0gPSB0cnVlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHZhciBfZ3JvdXBLZXlzID0gT2JqZWN0LmtleXMoY3RnKTsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgX2dyb3VwS2V5cy5sZW5ndGg7IF9pMisrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIF9rZXkgPSBfZ3JvdXBLZXlzW19pMl07CiAgICAgICAgICAgICAgICAgICAgdmFyIF9sYXllckluZm8yID0gX3RoaXMuX2J5U3RhbXBbY3RnW19rZXldXTsKICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc2V0VmlzaWJpbGl0eShfbGF5ZXJJbmZvMiwgc2VsZWN0ZWRLZXlzW19ncm91cEtleXNbX2kyXV0pOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB2YXIgZmlsdGVySGFuZGxlID0gbmV3IGNyb3NzdGFsay5GaWx0ZXJIYW5kbGUoY3RHcm91cCk7CiAgICAgICAgICAgICAgZmlsdGVySGFuZGxlLm9uKCJjaGFuZ2UiLCBoYW5kbGVGaWx0ZXIpOwoKICAgICAgICAgICAgICB2YXIgaGFuZGxlU2VsZWN0aW9uID0gZnVuY3Rpb24gaGFuZGxlU2VsZWN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIGlmICghZS52YWx1ZSB8fCAhZS52YWx1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwS2V5cyA9IE9iamVjdC5rZXlzKGN0Zyk7CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBLZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGdyb3VwS2V5c1tpXTsKICAgICAgICAgICAgICAgICAgICB2YXIgX2xheWVySW5mbzMgPSBfdGhpcy5fYnlTdGFtcFtjdGdba2V5XV07CiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3NldE9wYWNpdHkoX2xheWVySW5mbzMsIDEuMCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZEtleXMgPSB7fTsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgZS52YWx1ZS5sZW5ndGg7IF9pMysrKSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRLZXlzW2UudmFsdWVbX2kzXV0gPSB0cnVlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIHZhciBfZ3JvdXBLZXlzMiA9IE9iamVjdC5rZXlzKGN0Zyk7CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IF9ncm91cEtleXMyLmxlbmd0aDsgX2k0KyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgX2tleTIgPSBfZ3JvdXBLZXlzMltfaTRdOwogICAgICAgICAgICAgICAgICAgIHZhciBfbGF5ZXJJbmZvNCA9IF90aGlzLl9ieVN0YW1wW2N0Z1tfa2V5Ml1dOwogICAgICAgICAgICAgICAgICAgIF90aGlzLl9zZXRPcGFjaXR5KF9sYXllckluZm80LCBzZWxlY3RlZEtleXNbX2dyb3VwS2V5czJbX2k0XV0gPyAxLjAgOiAwLjIpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB2YXIgc2VsSGFuZGxlID0gbmV3IGNyb3NzdGFsay5TZWxlY3Rpb25IYW5kbGUoY3RHcm91cCk7CiAgICAgICAgICAgICAgc2VsSGFuZGxlLm9uKCJjaGFuZ2UiLCBoYW5kbGVTZWxlY3Rpb24pOwoKICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGhhbmRsZUZpbHRlcih7IHZhbHVlOiBmaWx0ZXJIYW5kbGUuZmlsdGVyZWRLZXlzIH0pOwogICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0aW9uKHsgdmFsdWU6IHNlbEhhbmRsZS52YWx1ZSB9KTsKICAgICAgICAgICAgICB9LCAxMDApOwogICAgICAgICAgICB9KSgpOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICghY3RnW2N0S2V5XSkgY3RnW2N0S2V5XSA9IFtdOwogICAgICAgICAgY3RnW2N0S2V5XS5wdXNoKHN0YW1wKTsKICAgICAgICB9KSgpOwogICAgICB9CgogICAgICAvLyBBZGQgdG8gY29udGFpbmVyCiAgICAgIGlmICghbGF5ZXJJbmZvLmhpZGRlbikgY29udGFpbmVyLmFkZExheWVyKGxheWVyKTsKCiAgICAgIHJldHVybiBvbGRMYXllcjsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJicnVzaCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gYnJ1c2goYm91bmRzLCBleHRyYUluZm8pIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CgogICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovCgogICAgICAvLyBGb3IgZWFjaCBDcm9zc3RhbGsgZ3JvdXAuLi4KICAgICAgT2JqZWN0LmtleXModGhpcy5fYnlDcm9zc3RhbGtHcm91cCkuZm9yRWFjaChmdW5jdGlvbiAoY3RHcm91cE5hbWUpIHsKICAgICAgICB2YXIgY3RnID0gX3RoaXMyLl9ieUNyb3NzdGFsa0dyb3VwW2N0R3JvdXBOYW1lXTsKICAgICAgICB2YXIgc2VsZWN0aW9uID0gW107CiAgICAgICAgLy8gLi4uaXRlcmF0ZSBvdmVyIGVhY2ggQ3Jvc3N0YWxrIGtleSAoZWFjaCBvZiB3aGljaCBtYXkgaGF2ZSBtdWx0aXBsZQogICAgICAgIC8vIGxheWVycykuLi4KICAgICAgICBPYmplY3Qua2V5cyhjdGcpLmZvckVhY2goZnVuY3Rpb24gKGN0S2V5KSB7CiAgICAgICAgICAvLyAuLi5hbmQgZm9yIGVhY2ggbGF5ZXIuLi4KICAgICAgICAgIGN0Z1tjdEtleV0uZm9yRWFjaChmdW5jdGlvbiAoc3RhbXApIHsKICAgICAgICAgICAgdmFyIGxheWVySW5mbyA9IF90aGlzMi5fYnlTdGFtcFtzdGFtcF07CiAgICAgICAgICAgIC8vIC4uLmlmIGl0J3Mgc29tZXRoaW5nIHdpdGggYSBwb2ludC4uLgogICAgICAgICAgICBpZiAobGF5ZXJJbmZvLmxheWVyLmdldExhdExuZykgewogICAgICAgICAgICAgIC8vIC4uLiBhbmQgaXQncyBpbnNpZGUgdGhlIHNlbGVjdGlvbiBib3VuZHMuLi4KICAgICAgICAgICAgICAvLyBUT0RPOiBVc2UgcGl4ZWwgY29udGFpbm1lbnQsIG5vdCBsYXQvbG5nIGNvbnRhaW5tZW50CiAgICAgICAgICAgICAgaWYgKGJvdW5kcy5jb250YWlucyhsYXllckluZm8ubGF5ZXIuZ2V0TGF0TG5nKCkpKSB7CiAgICAgICAgICAgICAgICAvLyAuLi5hZGQgdGhlIGtleSB0byB0aGUgc2VsZWN0aW9uLgogICAgICAgICAgICAgICAgc2VsZWN0aW9uLnB1c2goY3RLZXkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgbmV3IGdsb2JhbC5jcm9zc3RhbGsuU2VsZWN0aW9uSGFuZGxlKGN0R3JvdXBOYW1lKS5zZXQoc2VsZWN0aW9uLCBleHRyYUluZm8pOwogICAgICB9KTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJ1bmJydXNoIiwKICAgIHZhbHVlOiBmdW5jdGlvbiB1bmJydXNoKGV4dHJhSW5mbykgewogICAgICBPYmplY3Qua2V5cyh0aGlzLl9ieUNyb3NzdGFsa0dyb3VwKS5mb3JFYWNoKGZ1bmN0aW9uIChjdEdyb3VwTmFtZSkgewogICAgICAgIG5ldyBnbG9iYWwuY3Jvc3N0YWxrLlNlbGVjdGlvbkhhbmRsZShjdEdyb3VwTmFtZSkuY2xlYXIoZXh0cmFJbmZvKTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAiX3NldFZpc2liaWxpdHkiLAogICAgdmFsdWU6IGZ1bmN0aW9uIF9zZXRWaXNpYmlsaXR5KGxheWVySW5mbywgdmlzaWJsZSkgewogICAgICBpZiAobGF5ZXJJbmZvLmhpZGRlbiBeIHZpc2libGUpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0gZWxzZSBpZiAodmlzaWJsZSkgewogICAgICAgIGxheWVySW5mby5jb250YWluZXIuYWRkTGF5ZXIobGF5ZXJJbmZvLmxheWVyKTsKICAgICAgICBsYXllckluZm8uaGlkZGVuID0gZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGF5ZXJJbmZvLmNvbnRhaW5lci5yZW1vdmVMYXllcihsYXllckluZm8ubGF5ZXIpOwogICAgICAgIGxheWVySW5mby5oaWRkZW4gPSB0cnVlOwogICAgICB9CiAgICB9CiAgfSwgewogICAga2V5OiAiX3NldE9wYWNpdHkiLAogICAgdmFsdWU6IGZ1bmN0aW9uIF9zZXRPcGFjaXR5KGxheWVySW5mbywgb3BhY2l0eSkgewogICAgICBpZiAobGF5ZXJJbmZvLmxheWVyLnNldE9wYWNpdHkpIHsKICAgICAgICBsYXllckluZm8ubGF5ZXIuc2V0T3BhY2l0eShvcGFjaXR5KTsKICAgICAgfSBlbHNlIGlmIChsYXllckluZm8ubGF5ZXIuc2V0U3R5bGUpIHsKICAgICAgICBsYXllckluZm8ubGF5ZXIuc2V0U3R5bGUoewogICAgICAgICAgb3BhY2l0eTogb3BhY2l0eSAqIGxheWVySW5mby5sYXllci5vcHRpb25zLm9yaWdPcGFjaXR5LAogICAgICAgICAgZmlsbE9wYWNpdHk6IG9wYWNpdHkgKiBsYXllckluZm8ubGF5ZXIub3B0aW9ucy5vcmlnRmlsbE9wYWNpdHkKICAgICAgICB9KTsKICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogImdldExheWVyIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRMYXllcihjYXRlZ29yeSwgbGF5ZXJJZCkgewogICAgICByZXR1cm4gdGhpcy5fYnlMYXllcklkW3RoaXMuX2xheWVySWRLZXkoY2F0ZWdvcnksIGxheWVySWQpXTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJyZW1vdmVMYXllciIsCiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlTGF5ZXIoY2F0ZWdvcnksIGxheWVySWRzKSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwoKICAgICAgLy8gRmluZCBsYXllciBpbmZvCiAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaCgoMCwgX3V0aWwuYXNBcnJheSkobGF5ZXJJZHMpLCBmdW5jdGlvbiAoaSwgbGF5ZXJJZCkgewogICAgICAgIHZhciBsYXllciA9IF90aGlzMy5fYnlMYXllcklkW190aGlzMy5fbGF5ZXJJZEtleShjYXRlZ29yeSwgbGF5ZXJJZCldOwogICAgICAgIGlmIChsYXllcikgewogICAgICAgICAgX3RoaXMzLl9yZW1vdmVMYXllcihsYXllcik7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJjbGVhckxheWVycyIsCiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXJMYXllcnMoY2F0ZWdvcnkpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CgogICAgICAvLyBGaW5kIGFsbCBsYXllcnMgaW4gX2J5Q2F0ZWdvcnlbY2F0ZWdvcnldCiAgICAgIHZhciBjYXRUYWJsZSA9IHRoaXMuX2J5Q2F0ZWdvcnlbY2F0ZWdvcnldOwogICAgICBpZiAoIWNhdFRhYmxlKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICAvLyBSZW1vdmUgYWxsIGxheWVycy4gTWFrZSBjb3B5IG9mIGtleXMgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIGNvbGxlY3Rpb24KICAgICAgLy8gYmVoaW5kIHRoZSBpdGVyYXRvciB5b3UncmUgYWNjZXNzaW5nLgogICAgICB2YXIgc3RhbXBzID0gW107CiAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaChjYXRUYWJsZSwgZnVuY3Rpb24gKGssIHYpIHsKICAgICAgICBzdGFtcHMucHVzaChrKTsKICAgICAgfSk7CiAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaChzdGFtcHMsIGZ1bmN0aW9uIChpLCBzdGFtcCkgewogICAgICAgIF90aGlzNC5fcmVtb3ZlTGF5ZXIoc3RhbXApOwogICAgICB9KTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJnZXRMYXllckdyb3VwIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRMYXllckdyb3VwKGdyb3VwLCBlbnN1cmVFeGlzdHMpIHsKICAgICAgdmFyIGcgPSB0aGlzLl9ncm91cENvbnRhaW5lcnNbZ3JvdXBdOwogICAgICBpZiAoZW5zdXJlRXhpc3RzICYmICFnKSB7CiAgICAgICAgdGhpcy5fYnlHcm91cFtncm91cF0gPSB0aGlzLl9ieUdyb3VwW2dyb3VwXSB8fCB7fTsKICAgICAgICBnID0gdGhpcy5fZ3JvdXBDb250YWluZXJzW2dyb3VwXSA9IF9sZWFmbGV0Mi5kZWZhdWx0LmZlYXR1cmVHcm91cCgpOwogICAgICAgIGcuZ3JvdXBuYW1lID0gZ3JvdXA7CiAgICAgICAgZy5hZGRUbyh0aGlzLl9tYXApOwogICAgICB9CiAgICAgIHJldHVybiBnOwogICAgfQogIH0sIHsKICAgIGtleTogImdldEdyb3VwTmFtZUZyb21MYXllckdyb3VwIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRHcm91cE5hbWVGcm9tTGF5ZXJHcm91cChsYXllckdyb3VwKSB7CiAgICAgIHJldHVybiBsYXllckdyb3VwLmdyb3VwbmFtZTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJnZXRWaXNpYmxlR3JvdXBzIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWaXNpYmxlR3JvdXBzKCkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKCiAgICAgIHZhciByZXN1bHQgPSBbXTsKICAgICAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKHRoaXMuX2dyb3VwQ29udGFpbmVycywgZnVuY3Rpb24gKGssIHYpIHsKICAgICAgICBpZiAoX3RoaXM1Ll9tYXAuaGFzTGF5ZXIodikpIHsKICAgICAgICAgIHJlc3VsdC5wdXNoKGspOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgfSwgewogICAga2V5OiAiZ2V0QWxsR3JvdXBOYW1lcyIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QWxsR3JvdXBOYW1lcygpIHsKICAgICAgdmFyIHJlc3VsdCA9IFtdOwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2godGhpcy5fZ3JvdXBDb250YWluZXJzLCBmdW5jdGlvbiAoaywgdikgewogICAgICAgIHJlc3VsdC5wdXNoKGspOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJjbGVhckdyb3VwIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhckdyb3VwKGdyb3VwKSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwoKICAgICAgLy8gRmluZCBhbGwgbGF5ZXJzIGluIF9ieUdyb3VwW2dyb3VwXQogICAgICB2YXIgZ3JvdXBUYWJsZSA9IHRoaXMuX2J5R3JvdXBbZ3JvdXBdOwogICAgICBpZiAoIWdyb3VwVGFibGUpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIC8vIFJlbW92ZSBhbGwgbGF5ZXJzLiBNYWtlIGNvcHkgb2Yga2V5cyB0byBhdm9pZCBtdXRhdGluZyB0aGUgY29sbGVjdGlvbgogICAgICAvLyBiZWhpbmQgdGhlIGl0ZXJhdG9yIHlvdSdyZSBhY2Nlc3NpbmcuCiAgICAgIHZhciBzdGFtcHMgPSBbXTsKICAgICAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKGdyb3VwVGFibGUsIGZ1bmN0aW9uIChrLCB2KSB7CiAgICAgICAgc3RhbXBzLnB1c2goayk7CiAgICAgIH0pOwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goc3RhbXBzLCBmdW5jdGlvbiAoaSwgc3RhbXApIHsKICAgICAgICBfdGhpczYuX3JlbW92ZUxheWVyKHN0YW1wKTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAiY2xlYXIiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyKCkgewogICAgICBmdW5jdGlvbiBjbGVhckxheWVyR3JvdXAoa2V5LCBsYXllckdyb3VwKSB7CiAgICAgICAgbGF5ZXJHcm91cC5jbGVhckxheWVycygpOwogICAgICB9CiAgICAgIC8vIENsZWFyIGFsbCBpbmRpY2VzIGFuZCBsYXllckdyb3VwcwogICAgICB0aGlzLl9ieUdyb3VwID0ge307CiAgICAgIHRoaXMuX2J5Q2F0ZWdvcnkgPSB7fTsKICAgICAgdGhpcy5fYnlMYXllcklkID0ge307CiAgICAgIHRoaXMuX2J5U3RhbXAgPSB7fTsKICAgICAgdGhpcy5fYnlDcm9zc3RhbGtHcm91cCA9IHt9OwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2godGhpcy5fY2F0ZWdvcnlDb250YWluZXJzLCBjbGVhckxheWVyR3JvdXApOwogICAgICB0aGlzLl9jYXRlZ29yeUNvbnRhaW5lcnMgPSB7fTsKICAgICAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKHRoaXMuX2dyb3VwQ29udGFpbmVycywgY2xlYXJMYXllckdyb3VwKTsKICAgICAgdGhpcy5fZ3JvdXBDb250YWluZXJzID0ge307CiAgICB9CiAgfSwgewogICAga2V5OiAiX3JlbW92ZUxheWVyIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVtb3ZlTGF5ZXIobGF5ZXIpIHsKICAgICAgdmFyIHN0YW1wID0gdm9pZCAwOwogICAgICBpZiAodHlwZW9mIGxheWVyID09PSAic3RyaW5nIikgewogICAgICAgIHN0YW1wID0gbGF5ZXI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RhbXAgPSBfbGVhZmxldDIuZGVmYXVsdC5VdGlsLnN0YW1wKGxheWVyKTsKICAgICAgfQoKICAgICAgdmFyIGxheWVySW5mbyA9IHRoaXMuX2J5U3RhbXBbc3RhbXBdOwogICAgICBpZiAoIWxheWVySW5mbykgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgbGF5ZXJJbmZvLmNvbnRhaW5lci5yZW1vdmVMYXllcihzdGFtcCk7CiAgICAgIGlmICh0eXBlb2YgbGF5ZXJJbmZvLmdyb3VwID09PSAic3RyaW5nIikgewogICAgICAgIGRlbGV0ZSB0aGlzLl9ieUdyb3VwW2xheWVySW5mby5ncm91cF1bc3RhbXBdOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgbGF5ZXJJbmZvLmxheWVySWQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgZGVsZXRlIHRoaXMuX2J5TGF5ZXJJZFt0aGlzLl9sYXllcklkS2V5KGxheWVySW5mby5jYXRlZ29yeSwgbGF5ZXJJbmZvLmxheWVySWQpXTsKICAgICAgfQogICAgICBkZWxldGUgdGhpcy5fYnlDYXRlZ29yeVtsYXllckluZm8uY2F0ZWdvcnldW3N0YW1wXTsKICAgICAgZGVsZXRlIHRoaXMuX2J5U3RhbXBbc3RhbXBdOwogICAgICBpZiAobGF5ZXJJbmZvLmN0R3JvdXApIHsKICAgICAgICB2YXIgY3RHcm91cCA9IHRoaXMuX2J5Q3Jvc3N0YWxrR3JvdXBbbGF5ZXJJbmZvLmN0R3JvdXBdOwogICAgICAgIHZhciBsYXllcnNGb3JLZXkgPSBjdEdyb3VwW2xheWVySW5mby5jdEtleV07CiAgICAgICAgdmFyIGlkeCA9IGxheWVyc0ZvcktleSA/IGxheWVyc0ZvcktleS5pbmRleE9mKHN0YW1wKSA6IC0xOwogICAgICAgIGlmIChpZHggPj0gMCkgewogICAgICAgICAgaWYgKGxheWVyc0ZvcktleS5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgZGVsZXRlIGN0R3JvdXBbbGF5ZXJJbmZvLmN0S2V5XTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxheWVyc0ZvcktleS5zcGxpY2UoaWR4LCAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LCB7CiAgICBrZXk6ICJfbGF5ZXJJZEtleSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gX2xheWVySWRLZXkoY2F0ZWdvcnksIGxheWVySWQpIHsKICAgICAgcmV0dXJuIGNhdGVnb3J5ICsgIlxuIiArIGxheWVySWQ7CiAgICB9CiAgfV0pOwoKICByZXR1cm4gTGF5ZXJNYW5hZ2VyOwp9KCk7CgpleHBvcnRzLmRlZmF1bHQgPSBMYXllck1hbmFnZXI7CgoKfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09ICJ1bmRlZmluZWQiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDoge30pCn0seyIuL2dsb2JhbC9qcXVlcnkiOjcsIi4vZ2xvYmFsL2xlYWZsZXQiOjgsIi4vdXRpbCI6MTV9XSwxMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CihmdW5jdGlvbiAoZ2xvYmFsKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwoKdmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gInN5bWJvbCIgOiB0eXBlb2Ygb2JqOyB9OwoKdmFyIF9qcXVlcnkgPSByZXF1aXJlKCIuL2dsb2JhbC9qcXVlcnkiKTsKCnZhciBfanF1ZXJ5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2pxdWVyeSk7Cgp2YXIgX2xlYWZsZXQgPSByZXF1aXJlKCIuL2dsb2JhbC9sZWFmbGV0Iik7Cgp2YXIgX2xlYWZsZXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbGVhZmxldCk7Cgp2YXIgX3NoaW55ID0gcmVxdWlyZSgiLi9nbG9iYWwvc2hpbnkiKTsKCnZhciBfc2hpbnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2hpbnkpOwoKdmFyIF9odG1sd2lkZ2V0cyA9IHJlcXVpcmUoIi4vZ2xvYmFsL2h0bWx3aWRnZXRzIik7Cgp2YXIgX2h0bWx3aWRnZXRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2h0bWx3aWRnZXRzKTsKCnZhciBfdXRpbCA9IHJlcXVpcmUoIi4vdXRpbCIpOwoKdmFyIF9jcnNfdXRpbHMgPSByZXF1aXJlKCIuL2Nyc191dGlscyIpOwoKdmFyIF9kYXRhZnJhbWUgPSByZXF1aXJlKCIuL2RhdGFmcmFtZSIpOwoKdmFyIF9kYXRhZnJhbWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGF0YWZyYW1lKTsKCnZhciBfY2x1c3RlckxheWVyU3RvcmUgPSByZXF1aXJlKCIuL2NsdXN0ZXItbGF5ZXItc3RvcmUiKTsKCnZhciBfY2x1c3RlckxheWVyU3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2x1c3RlckxheWVyU3RvcmUpOwoKdmFyIF9taXBtYXBwZXIgPSByZXF1aXJlKCIuL21pcG1hcHBlciIpOwoKdmFyIF9taXBtYXBwZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWlwbWFwcGVyKTsKCmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9Cgp2YXIgbWV0aG9kcyA9IHt9OwpleHBvcnRzLmRlZmF1bHQgPSBtZXRob2RzOwoKCmZ1bmN0aW9uIG1vdXNlSGFuZGxlcihtYXBJZCwgbGF5ZXJJZCwgZ3JvdXAsIGV2ZW50TmFtZSwgZXh0cmFJbmZvKSB7CiAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7CiAgICBpZiAoIV9odG1sd2lkZ2V0czIuZGVmYXVsdC5zaGlueU1vZGUpIHJldHVybjsKCiAgICB2YXIgZXZlbnRJbmZvID0gX2pxdWVyeTIuZGVmYXVsdC5leHRlbmQoewogICAgICBpZDogbGF5ZXJJZCwKICAgICAgIi5ub25jZSI6IE1hdGgucmFuZG9tKCkgLy8gZm9yY2UgcmVhY3Rpdml0eQogICAgfSwgZ3JvdXAgIT09IG51bGwgPyB7IGdyb3VwOiBncm91cCB9IDogbnVsbCwgZS50YXJnZXQuZ2V0TGF0TG5nID8gZS50YXJnZXQuZ2V0TGF0TG5nKCkgOiBlLmxhdGxuZywgZXh0cmFJbmZvKTsKCiAgICBfc2hpbnkyLmRlZmF1bHQub25JbnB1dENoYW5nZShtYXBJZCArICJfIiArIGV2ZW50TmFtZSwgZXZlbnRJbmZvKTsKICB9Owp9CgptZXRob2RzLm1vdXNlSGFuZGxlciA9IG1vdXNlSGFuZGxlcjsKCm1ldGhvZHMuY2xlYXJHcm91cCA9IGZ1bmN0aW9uIChncm91cCkgewogIHZhciBfdGhpcyA9IHRoaXM7CgogIF9qcXVlcnkyLmRlZmF1bHQuZWFjaCgoMCwgX3V0aWwuYXNBcnJheSkoZ3JvdXApLCBmdW5jdGlvbiAoaSwgdikgewogICAgX3RoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyR3JvdXAodik7CiAgfSk7Cn07CgptZXRob2RzLnNldFZpZXcgPSBmdW5jdGlvbiAoY2VudGVyLCB6b29tLCBvcHRpb25zKSB7CiAgdGhpcy5zZXRWaWV3KGNlbnRlciwgem9vbSwgb3B0aW9ucyk7Cn07CgptZXRob2RzLmZpdEJvdW5kcyA9IGZ1bmN0aW9uIChsYXQxLCBsbmcxLCBsYXQyLCBsbmcyKSB7CiAgdGhpcy5maXRCb3VuZHMoW1tsYXQxLCBsbmcxXSwgW2xhdDIsIGxuZzJdXSk7Cn07CgptZXRob2RzLnNldE1heEJvdW5kcyA9IGZ1bmN0aW9uIChsYXQxLCBsbmcxLCBsYXQyLCBsbmcyKSB7CiAgdGhpcy5zZXRNYXhCb3VuZHMoW1tsYXQxLCBsbmcxXSwgW2xhdDIsIGxuZzJdXSk7Cn07CgptZXRob2RzLmFkZFBvcHVwcyA9IGZ1bmN0aW9uIChsYXQsIGxuZywgcG9wdXAsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zKSB7CiAgdmFyIF90aGlzMiA9IHRoaXM7CgogIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY29sKCJsYXQiLCBsYXQpLmNvbCgibG5nIiwgbG5nKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgibGF5ZXJJZCIsIGxheWVySWQpLmNvbCgiZ3JvdXAiLCBncm91cCkuY2JpbmQob3B0aW9ucyk7CgogIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGkpIHsKICAgIGlmIChfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhkZi5nZXQoaSwgImxhdCIpKSAmJiBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhkZi5nZXQoaSwgImxuZyIpKSkgewogICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBwb3B1cCA9IF9sZWFmbGV0Mi5kZWZhdWx0LnBvcHVwKGRmLmdldChpKSkuc2V0TGF0TG5nKFtkZi5nZXQoaSwgImxhdCIpLCBkZi5nZXQoaSwgImxuZyIpXSkuc2V0Q29udGVudChkZi5nZXQoaSwgInBvcHVwIikpOwogICAgICAgIHZhciB0aGlzSWQgPSBkZi5nZXQoaSwgImxheWVySWQiKTsKICAgICAgICB2YXIgdGhpc0dyb3VwID0gZGYuZ2V0KGksICJncm91cCIpOwogICAgICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKHBvcHVwLCAicG9wdXAiLCB0aGlzSWQsIHRoaXNHcm91cCk7CiAgICAgIH0pLmNhbGwoX3RoaXMyKTsKICAgIH0KICB9OwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGRmLm5yb3coKTsgaSsrKSB7CiAgICBfbG9vcChpKTsKICB9Cn07CgptZXRob2RzLnJlbW92ZVBvcHVwID0gZnVuY3Rpb24gKGxheWVySWQpIHsKICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigicG9wdXAiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJQb3B1cHMgPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoInBvcHVwIik7Cn07CgptZXRob2RzLmFkZFRpbGVzID0gZnVuY3Rpb24gKHVybFRlbXBsYXRlLCBsYXllcklkLCBncm91cCwgb3B0aW9ucykgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKF9sZWFmbGV0Mi5kZWZhdWx0LnRpbGVMYXllcih1cmxUZW1wbGF0ZSwgb3B0aW9ucyksICJ0aWxlIiwgbGF5ZXJJZCwgZ3JvdXApOwp9OwoKbWV0aG9kcy5yZW1vdmVUaWxlcyA9IGZ1bmN0aW9uIChsYXllcklkKSB7CiAgdGhpcy5sYXllck1hbmFnZXIucmVtb3ZlTGF5ZXIoInRpbGUiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJUaWxlcyA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygidGlsZSIpOwp9OwoKbWV0aG9kcy5hZGRXTVNUaWxlcyA9IGZ1bmN0aW9uIChiYXNlVXJsLCBsYXllcklkLCBncm91cCwgb3B0aW9ucykgewogIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY3JzKSB7CiAgICBvcHRpb25zLmNycyA9ICgwLCBfY3JzX3V0aWxzLmdldENSUykob3B0aW9ucy5jcnMpOwogIH0KICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihfbGVhZmxldDIuZGVmYXVsdC50aWxlTGF5ZXIud21zKGJhc2VVcmwsIG9wdGlvbnMpLCAidGlsZSIsIGxheWVySWQsIGdyb3VwKTsKfTsKCi8vIEdpdmVuOgovLyAgIHtkYXRhOiBbImEiLCAiYiIsICJjIl0sIGluZGV4OiBbMCwgMSwgMCwgMl19Ci8vIHJldHVybnM6Ci8vICAgWyJhIiwgImIiLCAiYSIsICJjIl0KZnVuY3Rpb24gdW5wYWNrU3RyaW5ncyhpY29uc2V0KSB7CiAgaWYgKCFpY29uc2V0KSB7CiAgICByZXR1cm4gaWNvbnNldDsKICB9CiAgaWYgKHR5cGVvZiBpY29uc2V0LmluZGV4ID09PSAidW5kZWZpbmVkIikgewogICAgcmV0dXJuIGljb25zZXQ7CiAgfQoKICBpY29uc2V0LmRhdGEgPSAoMCwgX3V0aWwuYXNBcnJheSkoaWNvbnNldC5kYXRhKTsKICBpY29uc2V0LmluZGV4ID0gKDAsIF91dGlsLmFzQXJyYXkpKGljb25zZXQuaW5kZXgpOwoKICByZXR1cm4gX2pxdWVyeTIuZGVmYXVsdC5tYXAoaWNvbnNldC5pbmRleCwgZnVuY3Rpb24gKGUsIGkpIHsKICAgIHJldHVybiBpY29uc2V0LmRhdGFbZV07CiAgfSk7Cn0KCmZ1bmN0aW9uIGFkZE1hcmtlcnMobWFwLCBkZiwgZ3JvdXAsIGNsdXN0ZXJPcHRpb25zLCBjbHVzdGVySWQsIG1hcmtlckZ1bmMpIHsKICAoZnVuY3Rpb24gKCkgewogICAgdmFyIF90aGlzMyA9IHRoaXM7CgogICAgdmFyIGNsdXN0ZXJHcm91cCA9IHRoaXMubGF5ZXJNYW5hZ2VyLmdldExheWVyKCJjbHVzdGVyIiwgY2x1c3RlcklkKSwKICAgICAgICBjbHVzdGVyID0gY2x1c3Rlck9wdGlvbnMgIT09IG51bGw7CiAgICBpZiAoY2x1c3RlciAmJiAhY2x1c3Rlckdyb3VwKSB7CiAgICAgIGNsdXN0ZXJHcm91cCA9IF9sZWFmbGV0Mi5kZWZhdWx0Lm1hcmtlckNsdXN0ZXJHcm91cC5sYXllclN1cHBvcnQoY2x1c3Rlck9wdGlvbnMpOwogICAgICBpZiAoY2x1c3Rlck9wdGlvbnMuZnJlZXplQXRab29tKSB7CiAgICAgICAgdmFyIGZyZWV6ZUF0Wm9vbSA9IGNsdXN0ZXJPcHRpb25zLmZyZWV6ZUF0Wm9vbTsKICAgICAgICBkZWxldGUgY2x1c3Rlck9wdGlvbnMuZnJlZXplQXRab29tOwogICAgICAgIGNsdXN0ZXJHcm91cC5mcmVlemVBdFpvb20oZnJlZXplQXRab29tKTsKICAgICAgfQogICAgICBjbHVzdGVyR3JvdXAuY2x1c3RlckxheWVyU3RvcmUgPSBuZXcgX2NsdXN0ZXJMYXllclN0b3JlMi5kZWZhdWx0KGNsdXN0ZXJHcm91cCk7CiAgICB9CiAgICB2YXIgZXh0cmFJbmZvID0gY2x1c3RlciA/IHsgY2x1c3RlcklkOiBjbHVzdGVySWQgfSA6IHt9OwoKICAgIHZhciBfbG9vcDIgPSBmdW5jdGlvbiBfbG9vcDIoaSkgewogICAgICBpZiAoX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJsYXQiKSkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJsbmciKSkpIHsKICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIG1hcmtlciA9IG1hcmtlckZ1bmMoZGYsIGkpOwogICAgICAgICAgdmFyIHRoaXNJZCA9IGRmLmdldChpLCAibGF5ZXJJZCIpOwogICAgICAgICAgdmFyIHRoaXNHcm91cCA9IGNsdXN0ZXIgPyBudWxsIDogZGYuZ2V0KGksICJncm91cCIpOwogICAgICAgICAgaWYgKGNsdXN0ZXIpIHsKICAgICAgICAgICAgY2x1c3Rlckdyb3VwLmNsdXN0ZXJMYXllclN0b3JlLmFkZChtYXJrZXIsIHRoaXNJZCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihtYXJrZXIsICJtYXJrZXIiLCB0aGlzSWQsIHRoaXNHcm91cCwgZGYuZ2V0KGksICJjdEdyb3VwIiwgdHJ1ZSksIGRmLmdldChpLCAiY3RLZXkiLCB0cnVlKSk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgcG9wdXAgPSBkZi5nZXQoaSwgInBvcHVwIik7CiAgICAgICAgICB2YXIgcG9wdXBPcHRpb25zID0gZGYuZ2V0KGksICJwb3B1cE9wdGlvbnMiKTsKICAgICAgICAgIGlmIChwb3B1cCAhPT0gbnVsbCkgewogICAgICAgICAgICBpZiAocG9wdXBPcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgbWFya2VyLmJpbmRQb3B1cChwb3B1cCwgcG9wdXBPcHRpb25zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBtYXJrZXIuYmluZFBvcHVwKHBvcHVwKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdmFyIGxhYmVsID0gZGYuZ2V0KGksICJsYWJlbCIpOwogICAgICAgICAgdmFyIGxhYmVsT3B0aW9ucyA9IGRmLmdldChpLCAibGFiZWxPcHRpb25zIik7CiAgICAgICAgICBpZiAobGFiZWwgIT09IG51bGwpIHsKICAgICAgICAgICAgaWYgKGxhYmVsT3B0aW9ucyAhPT0gbnVsbCkgewogICAgICAgICAgICAgIGlmIChsYWJlbE9wdGlvbnMucGVybWFuZW50KSB7CiAgICAgICAgICAgICAgICBtYXJrZXIuYmluZFRvb2x0aXAobGFiZWwsIGxhYmVsT3B0aW9ucykub3BlblRvb2x0aXAoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbWFya2VyLmJpbmRUb29sdGlwKGxhYmVsLCBsYWJlbE9wdGlvbnMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBtYXJrZXIuYmluZFRvb2x0aXAobGFiZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBtYXJrZXIub24oImNsaWNrIiwgbW91c2VIYW5kbGVyKHRoaXMuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCAibWFya2VyX2NsaWNrIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgICAgICBtYXJrZXIub24oIm1vdXNlb3ZlciIsIG1vdXNlSGFuZGxlcih0aGlzLmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgIm1hcmtlcl9tb3VzZW92ZXIiLCBleHRyYUluZm8pLCB0aGlzKTsKICAgICAgICAgIG1hcmtlci5vbigibW91c2VvdXQiLCBtb3VzZUhhbmRsZXIodGhpcy5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsICJtYXJrZXJfbW91c2VvdXQiLCBleHRyYUluZm8pLCB0aGlzKTsKICAgICAgICB9KS5jYWxsKF90aGlzMyk7CiAgICAgIH0KICAgIH07CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZi5ucm93KCk7IGkrKykgewogICAgICBfbG9vcDIoaSk7CiAgICB9CgogICAgaWYgKGNsdXN0ZXIpIHsKICAgICAgdGhpcy5sYXllck1hbmFnZXIuYWRkTGF5ZXIoY2x1c3Rlckdyb3VwLCAiY2x1c3RlciIsIGNsdXN0ZXJJZCwgZ3JvdXApOwogICAgfQogIH0pLmNhbGwobWFwKTsKfQoKbWV0aG9kcy5hZGRHZW5lcmljTWFya2VycyA9IGFkZE1hcmtlcnM7CgptZXRob2RzLmFkZE1hcmtlcnMgPSBmdW5jdGlvbiAobGF0LCBsbmcsIGljb24sIGxheWVySWQsIGdyb3VwLCBvcHRpb25zLCBwb3B1cCwgcG9wdXBPcHRpb25zLCBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBsYWJlbCwgbGFiZWxPcHRpb25zLCBjcm9zc3RhbGtPcHRpb25zKSB7CiAgdmFyIGljb25kZiA9IHZvaWQgMDsKICB2YXIgZ2V0SWNvbiA9IHZvaWQgMDsKCiAgaWYgKGljb24pIHsKICAgIC8vIFVucGFjayBpY29ucwogICAgaWNvbi5pY29uVXJsID0gdW5wYWNrU3RyaW5ncyhpY29uLmljb25VcmwpOwogICAgaWNvbi5pY29uUmV0aW5hVXJsID0gdW5wYWNrU3RyaW5ncyhpY29uLmljb25SZXRpbmFVcmwpOwogICAgaWNvbi5zaGFkb3dVcmwgPSB1bnBhY2tTdHJpbmdzKGljb24uc2hhZG93VXJsKTsKICAgIGljb24uc2hhZG93UmV0aW5hVXJsID0gdW5wYWNrU3RyaW5ncyhpY29uLnNoYWRvd1JldGluYVVybCk7CgogICAgLy8gVGhpcyBjYmluZHMgdGhlIGljb24gVVJMcyBhbmQgYW55IG90aGVyIGljb24gb3B0aW9uczsgdGhleSdyZSBhbGwKICAgIC8vIHByZXNlbnQgb24gdGhlIGljb24gb2JqZWN0LgogICAgaWNvbmRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jYmluZChpY29uKTsKCiAgICAvLyBDb25zdHJ1Y3RzIGFuIGljb24gZnJvbSBhIHNwZWNpZmllZCByb3cgb2YgdGhlIGljb24gZGF0YWZyYW1lLgogICAgZ2V0SWNvbiA9IGZ1bmN0aW9uIGdldEljb24oaSkgewogICAgICB2YXIgb3B0cyA9IGljb25kZi5nZXQoaSk7CiAgICAgIGlmICghb3B0cy5pY29uVXJsKSB7CiAgICAgICAgcmV0dXJuIG5ldyBfbGVhZmxldDIuZGVmYXVsdC5JY29uLkRlZmF1bHQoKTsKICAgICAgfQoKICAgICAgLy8gQ29tcG9zaXRlIG9wdGlvbnMgKGxpa2UgcG9pbnRzIG9yIHNpemVzKSBhcmUgcGFzc2VkIGZyb20gUiB3aXRoIGVhY2gKICAgICAgLy8gaW5kaXZpZHVhbCBjb21wb25lbnQgYXMgaXRzIG93biBvcHRpb24uIFdlIG5lZWQgdG8gY29tYmluZSB0aGVtIG5vdwogICAgICAvLyBpbnRvIHRoZWlyIGNvbXBvc2l0ZSBmb3JtLgogICAgICBpZiAob3B0cy5pY29uV2lkdGgpIHsKICAgICAgICBvcHRzLmljb25TaXplID0gW29wdHMuaWNvbldpZHRoLCBvcHRzLmljb25IZWlnaHRdOwogICAgICB9CiAgICAgIGlmIChvcHRzLnNoYWRvd1dpZHRoKSB7CiAgICAgICAgb3B0cy5zaGFkb3dTaXplID0gW29wdHMuc2hhZG93V2lkdGgsIG9wdHMuc2hhZG93SGVpZ2h0XTsKICAgICAgfQogICAgICBpZiAob3B0cy5pY29uQW5jaG9yWCkgewogICAgICAgIG9wdHMuaWNvbkFuY2hvciA9IFtvcHRzLmljb25BbmNob3JYLCBvcHRzLmljb25BbmNob3JZXTsKICAgICAgfQogICAgICBpZiAob3B0cy5zaGFkb3dBbmNob3JYKSB7CiAgICAgICAgb3B0cy5zaGFkb3dBbmNob3IgPSBbb3B0cy5zaGFkb3dBbmNob3JYLCBvcHRzLnNoYWRvd0FuY2hvclldOwogICAgICB9CiAgICAgIGlmIChvcHRzLnBvcHVwQW5jaG9yWCkgewogICAgICAgIG9wdHMucG9wdXBBbmNob3IgPSBbb3B0cy5wb3B1cEFuY2hvclgsIG9wdHMucG9wdXBBbmNob3JZXTsKICAgICAgfQoKICAgICAgcmV0dXJuIG5ldyBfbGVhZmxldDIuZGVmYXVsdC5JY29uKG9wdHMpOwogICAgfTsKICB9CgogIGlmICghKF9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChsYXQpIHx8IF9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChsbmcpKSB8fCBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhsYXQpICYmIF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGxuZykpIHsKCiAgICB2YXIgZGYgPSBuZXcgX2RhdGFmcmFtZTIuZGVmYXVsdCgpLmNvbCgibGF0IiwgbGF0KS5jb2woImxuZyIsIGxuZykuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jYmluZChvcHRpb25zKS5jYmluZChjcm9zc3RhbGtPcHRpb25zIHx8IHt9KTsKCiAgICBpZiAoaWNvbikgaWNvbmRmLmVmZmVjdGl2ZUxlbmd0aCA9IGRmLm5yb3coKTsKCiAgICBhZGRNYXJrZXJzKHRoaXMsIGRmLCBncm91cCwgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgZnVuY3Rpb24gKGRmLCBpKSB7CiAgICAgIHZhciBvcHRpb25zID0gZGYuZ2V0KGkpOwogICAgICBpZiAoaWNvbikgb3B0aW9ucy5pY29uID0gZ2V0SWNvbihpKTsKICAgICAgcmV0dXJuIF9sZWFmbGV0Mi5kZWZhdWx0Lm1hcmtlcihbZGYuZ2V0KGksICJsYXQiKSwgZGYuZ2V0KGksICJsbmciKV0sIG9wdGlvbnMpOwogICAgfSk7CiAgfQp9OwoKbWV0aG9kcy5hZGRBd2Vzb21lTWFya2VycyA9IGZ1bmN0aW9uIChsYXQsIGxuZywgaWNvbiwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMsIHBvcHVwLCBwb3B1cE9wdGlvbnMsIGNsdXN0ZXJPcHRpb25zLCBjbHVzdGVySWQsIGxhYmVsLCBsYWJlbE9wdGlvbnMsIGNyb3NzdGFsa09wdGlvbnMpIHsKICB2YXIgaWNvbmRmID0gdm9pZCAwOwogIHZhciBnZXRJY29uID0gdm9pZCAwOwogIGlmIChpY29uKSB7CgogICAgLy8gVGhpcyBjYmluZHMgdGhlIGljb24gVVJMcyBhbmQgYW55IG90aGVyIGljb24gb3B0aW9uczsgdGhleSdyZSBhbGwKICAgIC8vIHByZXNlbnQgb24gdGhlIGljb24gb2JqZWN0LgogICAgaWNvbmRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jYmluZChpY29uKTsKCiAgICAvLyBDb25zdHJ1Y3RzIGFuIGljb24gZnJvbSBhIHNwZWNpZmllZCByb3cgb2YgdGhlIGljb24gZGF0YWZyYW1lLgogICAgZ2V0SWNvbiA9IGZ1bmN0aW9uIGdldEljb24oaSkgewogICAgICB2YXIgb3B0cyA9IGljb25kZi5nZXQoaSk7CiAgICAgIGlmICghb3B0cykgewogICAgICAgIHJldHVybiBuZXcgX2xlYWZsZXQyLmRlZmF1bHQuQXdlc29tZU1hcmtlcnMuaWNvbigpOwogICAgICB9CgogICAgICBpZiAob3B0cy5zcXVhcmVNYXJrZXIpIHsKICAgICAgICBvcHRzLmNsYXNzTmFtZSA9ICJhd2Vzb21lLW1hcmtlciBhd2Vzb21lLW1hcmtlci1zcXVhcmUiOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgX2xlYWZsZXQyLmRlZmF1bHQuQXdlc29tZU1hcmtlcnMuaWNvbihvcHRzKTsKICAgIH07CiAgfQoKICBpZiAoIShfanF1ZXJ5Mi5kZWZhdWx0LmlzRW1wdHlPYmplY3QobGF0KSB8fCBfanF1ZXJ5Mi5kZWZhdWx0LmlzRW1wdHlPYmplY3QobG5nKSkgfHwgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMobGF0KSAmJiBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhsbmcpKSB7CgogICAgdmFyIGRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jb2woImxhdCIsIGxhdCkuY29sKCJsbmciLCBsbmcpLmNvbCgibGF5ZXJJZCIsIGxheWVySWQpLmNvbCgiZ3JvdXAiLCBncm91cCkuY29sKCJwb3B1cCIsIHBvcHVwKS5jb2woInBvcHVwT3B0aW9ucyIsIHBvcHVwT3B0aW9ucykuY29sKCJsYWJlbCIsIGxhYmVsKS5jb2woImxhYmVsT3B0aW9ucyIsIGxhYmVsT3B0aW9ucykuY2JpbmQob3B0aW9ucykuY2JpbmQoY3Jvc3N0YWxrT3B0aW9ucyB8fCB7fSk7CgogICAgaWYgKGljb24pIGljb25kZi5lZmZlY3RpdmVMZW5ndGggPSBkZi5ucm93KCk7CgogICAgYWRkTWFya2Vycyh0aGlzLCBkZiwgZ3JvdXAsIGNsdXN0ZXJPcHRpb25zLCBjbHVzdGVySWQsIGZ1bmN0aW9uIChkZiwgaSkgewogICAgICB2YXIgb3B0aW9ucyA9IGRmLmdldChpKTsKICAgICAgaWYgKGljb24pIG9wdGlvbnMuaWNvbiA9IGdldEljb24oaSk7CiAgICAgIHJldHVybiBfbGVhZmxldDIuZGVmYXVsdC5tYXJrZXIoW2RmLmdldChpLCAibGF0IiksIGRmLmdldChpLCAibG5nIildLCBvcHRpb25zKTsKICAgIH0pOwogIH0KfTsKCmZ1bmN0aW9uIGFkZExheWVycyhtYXAsIGNhdGVnb3J5LCBkZiwgbGF5ZXJGdW5jKSB7CiAgdmFyIF9sb29wMyA9IGZ1bmN0aW9uIF9sb29wMyhpKSB7CiAgICAoZnVuY3Rpb24gKCkgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKCiAgICAgIHZhciBsYXllciA9IGxheWVyRnVuYyhkZiwgaSk7CiAgICAgIGlmICghX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGxheWVyKSkgewogICAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgdGhpc0lkID0gZGYuZ2V0KGksICJsYXllcklkIik7CiAgICAgICAgICB2YXIgdGhpc0dyb3VwID0gZGYuZ2V0KGksICJncm91cCIpOwogICAgICAgICAgX3RoaXM0LmxheWVyTWFuYWdlci5hZGRMYXllcihsYXllciwgY2F0ZWdvcnksIHRoaXNJZCwgdGhpc0dyb3VwLCBkZi5nZXQoaSwgImN0R3JvdXAiLCB0cnVlKSwgZGYuZ2V0KGksICJjdEtleSIsIHRydWUpKTsKICAgICAgICAgIGlmIChsYXllci5iaW5kUG9wdXApIHsKICAgICAgICAgICAgdmFyIHBvcHVwID0gZGYuZ2V0KGksICJwb3B1cCIpOwogICAgICAgICAgICB2YXIgcG9wdXBPcHRpb25zID0gZGYuZ2V0KGksICJwb3B1cE9wdGlvbnMiKTsKICAgICAgICAgICAgaWYgKHBvcHVwICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgaWYgKHBvcHVwT3B0aW9ucyAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgbGF5ZXIuYmluZFBvcHVwKHBvcHVwLCBwb3B1cE9wdGlvbnMpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBsYXllci5iaW5kUG9wdXAocG9wdXApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGxheWVyLmJpbmRUb29sdGlwKSB7CiAgICAgICAgICAgIHZhciBsYWJlbCA9IGRmLmdldChpLCAibGFiZWwiKTsKICAgICAgICAgICAgdmFyIGxhYmVsT3B0aW9ucyA9IGRmLmdldChpLCAibGFiZWxPcHRpb25zIik7CiAgICAgICAgICAgIGlmIChsYWJlbCAhPT0gbnVsbCkgewogICAgICAgICAgICAgIGlmIChsYWJlbE9wdGlvbnMgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIGxheWVyLmJpbmRUb29sdGlwKGxhYmVsLCBsYWJlbE9wdGlvbnMpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBsYXllci5iaW5kVG9vbHRpcChsYWJlbCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBsYXllci5vbigiY2xpY2siLCBtb3VzZUhhbmRsZXIoX3RoaXM0LmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgY2F0ZWdvcnkgKyAiX2NsaWNrIiksIF90aGlzNCk7CiAgICAgICAgICBsYXllci5vbigibW91c2VvdmVyIiwgbW91c2VIYW5kbGVyKF90aGlzNC5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsIGNhdGVnb3J5ICsgIl9tb3VzZW92ZXIiKSwgX3RoaXM0KTsKICAgICAgICAgIGxheWVyLm9uKCJtb3VzZW91dCIsIG1vdXNlSGFuZGxlcihfdGhpczQuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCBjYXRlZ29yeSArICJfbW91c2VvdXQiKSwgX3RoaXM0KTsKICAgICAgICAgIHZhciBoaWdobGlnaHRTdHlsZSA9IGRmLmdldChpLCAiaGlnaGxpZ2h0T3B0aW9ucyIpOwoKICAgICAgICAgIGlmICghX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGhpZ2hsaWdodFN0eWxlKSkgewogICAgICAgICAgICAoZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICB2YXIgZGVmYXVsdFN0eWxlID0ge307CiAgICAgICAgICAgICAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKGhpZ2hsaWdodFN0eWxlLCBmdW5jdGlvbiAoaywgdikgewogICAgICAgICAgICAgICAgaWYgKGsgIT0gImJyaW5nVG9Gcm9udCIgJiYgayAhPSAic2VuZFRvQmFjayIpIHsKICAgICAgICAgICAgICAgICAgaWYgKGRmLmdldChpLCBrKSkgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTdHlsZVtrXSA9IGRmLmdldChpLCBrKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICBsYXllci5vbigibW91c2VvdmVyIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIHRoaXMuc2V0U3R5bGUoaGlnaGxpZ2h0U3R5bGUpOwogICAgICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFN0eWxlLmJyaW5nVG9Gcm9udCkgewogICAgICAgICAgICAgICAgICB0aGlzLmJyaW5nVG9Gcm9udCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGxheWVyLm9uKCJtb3VzZW91dCIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNldFN0eWxlKGRlZmF1bHRTdHlsZSk7CiAgICAgICAgICAgICAgICBpZiAoaGlnaGxpZ2h0U3R5bGUuc2VuZFRvQmFjaykgewogICAgICAgICAgICAgICAgICB0aGlzLmJyaW5nVG9CYWNrKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICB9CiAgICAgICAgfSkoKTsKICAgICAgfQogICAgfSkuY2FsbChtYXApOwogIH07CgogIGZvciAodmFyIGkgPSAwOyBpIDwgZGYubnJvdygpOyBpKyspIHsKICAgIF9sb29wMyhpKTsKICB9Cn0KCm1ldGhvZHMuYWRkR2VuZXJpY0xheWVycyA9IGFkZExheWVyczsKCm1ldGhvZHMuYWRkQ2lyY2xlcyA9IGZ1bmN0aW9uIChsYXQsIGxuZywgcmFkaXVzLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXAsIHBvcHVwT3B0aW9ucywgbGFiZWwsIGxhYmVsT3B0aW9ucywgaGlnaGxpZ2h0T3B0aW9ucywgY3Jvc3N0YWxrT3B0aW9ucykgewogIGlmICghKF9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChsYXQpIHx8IF9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChsbmcpKSB8fCBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhsYXQpICYmIF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGxuZykpIHsKICAgIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY29sKCJsYXQiLCBsYXQpLmNvbCgibG5nIiwgbG5nKS5jb2woInJhZGl1cyIsIHJhZGl1cykuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jb2woImhpZ2hsaWdodE9wdGlvbnMiLCBoaWdobGlnaHRPcHRpb25zKS5jYmluZChvcHRpb25zKS5jYmluZChjcm9zc3RhbGtPcHRpb25zIHx8IHt9KTsKCiAgICBhZGRMYXllcnModGhpcywgInNoYXBlIiwgZGYsIGZ1bmN0aW9uIChkZiwgaSkgewogICAgICBpZiAoX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJsYXQiKSkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJsbmciKSkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJyYWRpdXMiKSkpIHsKICAgICAgICByZXR1cm4gX2xlYWZsZXQyLmRlZmF1bHQuY2lyY2xlKFtkZi5nZXQoaSwgImxhdCIpLCBkZi5nZXQoaSwgImxuZyIpXSwgZGYuZ2V0KGksICJyYWRpdXMiKSwgZGYuZ2V0KGkpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfSk7CiAgfQp9OwoKbWV0aG9kcy5hZGRDaXJjbGVNYXJrZXJzID0gZnVuY3Rpb24gKGxhdCwgbG5nLCByYWRpdXMsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zLCBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBwb3B1cCwgcG9wdXBPcHRpb25zLCBsYWJlbCwgbGFiZWxPcHRpb25zLCBjcm9zc3RhbGtPcHRpb25zKSB7CiAgaWYgKCEoX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGxhdCkgfHwgX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGxuZykpIHx8IF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGxhdCkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMobG5nKSkgewogICAgdmFyIGRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jb2woImxhdCIsIGxhdCkuY29sKCJsbmciLCBsbmcpLmNvbCgicmFkaXVzIiwgcmFkaXVzKS5jb2woImxheWVySWQiLCBsYXllcklkKS5jb2woImdyb3VwIiwgZ3JvdXApLmNvbCgicG9wdXAiLCBwb3B1cCkuY29sKCJwb3B1cE9wdGlvbnMiLCBwb3B1cE9wdGlvbnMpLmNvbCgibGFiZWwiLCBsYWJlbCkuY29sKCJsYWJlbE9wdGlvbnMiLCBsYWJlbE9wdGlvbnMpLmNiaW5kKGNyb3NzdGFsa09wdGlvbnMgfHwge30pLmNiaW5kKG9wdGlvbnMpOwoKICAgIGFkZE1hcmtlcnModGhpcywgZGYsIGdyb3VwLCBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBmdW5jdGlvbiAoZGYsIGkpIHsKICAgICAgcmV0dXJuIF9sZWFmbGV0Mi5kZWZhdWx0LmNpcmNsZU1hcmtlcihbZGYuZ2V0KGksICJsYXQiKSwgZGYuZ2V0KGksICJsbmciKV0sIGRmLmdldChpKSk7CiAgICB9KTsKICB9Cn07CgovKg0KICogQHBhcmFtIGxhdCBBcnJheSBvZiBhcnJheXMgb2YgbGF0aXR1ZGUgY29vcmRpbmF0ZXMgZm9yIHBvbHlsaW5lcw0KICogQHBhcmFtIGxuZyBBcnJheSBvZiBhcnJheXMgb2YgbG9uZ2l0dWRlIGNvb3JkaW5hdGVzIGZvciBwb2x5bGluZXMNCiAqLwptZXRob2RzLmFkZFBvbHlsaW5lcyA9IGZ1bmN0aW9uIChwb2x5Z29ucywgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMsIHBvcHVwLCBwb3B1cE9wdGlvbnMsIGxhYmVsLCBsYWJlbE9wdGlvbnMsIGhpZ2hsaWdodE9wdGlvbnMpIHsKICBpZiAocG9seWdvbnMubGVuZ3RoID4gMCkgewogICAgdmFyIGRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jb2woInNoYXBlcyIsIHBvbHlnb25zKS5jb2woImxheWVySWQiLCBsYXllcklkKS5jb2woImdyb3VwIiwgZ3JvdXApLmNvbCgicG9wdXAiLCBwb3B1cCkuY29sKCJwb3B1cE9wdGlvbnMiLCBwb3B1cE9wdGlvbnMpLmNvbCgibGFiZWwiLCBsYWJlbCkuY29sKCJsYWJlbE9wdGlvbnMiLCBsYWJlbE9wdGlvbnMpLmNvbCgiaGlnaGxpZ2h0T3B0aW9ucyIsIGhpZ2hsaWdodE9wdGlvbnMpLmNiaW5kKG9wdGlvbnMpOwoKICAgIGFkZExheWVycyh0aGlzLCAic2hhcGUiLCBkZiwgZnVuY3Rpb24gKGRmLCBpKSB7CiAgICAgIHZhciBzaGFwZXMgPSBkZi5nZXQoaSwgInNoYXBlcyIpOwogICAgICBzaGFwZXMgPSBzaGFwZXMubWFwKGZ1bmN0aW9uIChzaGFwZSkgewogICAgICAgIHJldHVybiBfaHRtbHdpZGdldHMyLmRlZmF1bHQuZGF0YWZyYW1lVG9EMyhzaGFwZVswXSk7CiAgICAgIH0pOwogICAgICBpZiAoc2hhcGVzLmxlbmd0aCA+IDEpIHsKICAgICAgICByZXR1cm4gX2xlYWZsZXQyLmRlZmF1bHQubXVsdGlQb2x5bGluZShzaGFwZXMsIGRmLmdldChpKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIF9sZWFmbGV0Mi5kZWZhdWx0LnBvbHlsaW5lKHNoYXBlc1swXSwgZGYuZ2V0KGkpKTsKICAgICAgfQogICAgfSk7CiAgfQp9OwoKbWV0aG9kcy5yZW1vdmVNYXJrZXIgPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJtYXJrZXIiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJNYXJrZXJzID0gZnVuY3Rpb24gKCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJtYXJrZXIiKTsKfTsKCm1ldGhvZHMucmVtb3ZlTWFya2VyQ2x1c3RlciA9IGZ1bmN0aW9uIChsYXllcklkKSB7CiAgdGhpcy5sYXllck1hbmFnZXIucmVtb3ZlTGF5ZXIoImNsdXN0ZXIiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMucmVtb3ZlTWFya2VyRnJvbUNsdXN0ZXIgPSBmdW5jdGlvbiAobGF5ZXJJZCwgY2x1c3RlcklkKSB7CiAgdmFyIGNsdXN0ZXIgPSB0aGlzLmxheWVyTWFuYWdlci5nZXRMYXllcigiY2x1c3RlciIsIGNsdXN0ZXJJZCk7CiAgaWYgKCFjbHVzdGVyKSByZXR1cm47CiAgY2x1c3Rlci5jbHVzdGVyTGF5ZXJTdG9yZS5yZW1vdmUobGF5ZXJJZCk7Cn07CgptZXRob2RzLmNsZWFyTWFya2VyQ2x1c3RlcnMgPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoImNsdXN0ZXIiKTsKfTsKCm1ldGhvZHMucmVtb3ZlU2hhcGUgPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJzaGFwZSIsIGxheWVySWQpOwp9OwoKbWV0aG9kcy5jbGVhclNoYXBlcyA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygic2hhcGUiKTsKfTsKCm1ldGhvZHMuYWRkUmVjdGFuZ2xlcyA9IGZ1bmN0aW9uIChsYXQxLCBsbmcxLCBsYXQyLCBsbmcyLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXAsIHBvcHVwT3B0aW9ucywgbGFiZWwsIGxhYmVsT3B0aW9ucywgaGlnaGxpZ2h0T3B0aW9ucykgewogIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY29sKCJsYXQxIiwgbGF0MSkuY29sKCJsbmcxIiwgbG5nMSkuY29sKCJsYXQyIiwgbGF0MikuY29sKCJsbmcyIiwgbG5nMikuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jb2woImhpZ2hsaWdodE9wdGlvbnMiLCBoaWdobGlnaHRPcHRpb25zKS5jYmluZChvcHRpb25zKTsKCiAgYWRkTGF5ZXJzKHRoaXMsICJzaGFwZSIsIGRmLCBmdW5jdGlvbiAoZGYsIGkpIHsKICAgIGlmIChfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhkZi5nZXQoaSwgImxhdDEiKSkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJsbmcxIikpICYmIF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGRmLmdldChpLCAibGF0MiIpKSAmJiBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhkZi5nZXQoaSwgImxuZzIiKSkpIHsKICAgICAgcmV0dXJuIF9sZWFmbGV0Mi5kZWZhdWx0LnJlY3RhbmdsZShbW2RmLmdldChpLCAibGF0MSIpLCBkZi5nZXQoaSwgImxuZzEiKV0sIFtkZi5nZXQoaSwgImxhdDIiKSwgZGYuZ2V0KGksICJsbmcyIildXSwgZGYuZ2V0KGkpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0pOwp9OwoKLyoNCiAqIEBwYXJhbSBsYXQgQXJyYXkgb2YgYXJyYXlzIG9mIGxhdGl0dWRlIGNvb3JkaW5hdGVzIGZvciBwb2x5Z29ucw0KICogQHBhcmFtIGxuZyBBcnJheSBvZiBhcnJheXMgb2YgbG9uZ2l0dWRlIGNvb3JkaW5hdGVzIGZvciBwb2x5Z29ucw0KICovCm1ldGhvZHMuYWRkUG9seWdvbnMgPSBmdW5jdGlvbiAocG9seWdvbnMsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zLCBwb3B1cCwgcG9wdXBPcHRpb25zLCBsYWJlbCwgbGFiZWxPcHRpb25zLCBoaWdobGlnaHRPcHRpb25zKSB7CiAgaWYgKHBvbHlnb25zLmxlbmd0aCA+IDApIHsKICAgIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY29sKCJzaGFwZXMiLCBwb2x5Z29ucykuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jb2woImhpZ2hsaWdodE9wdGlvbnMiLCBoaWdobGlnaHRPcHRpb25zKS5jYmluZChvcHRpb25zKTsKCiAgICBhZGRMYXllcnModGhpcywgInNoYXBlIiwgZGYsIGZ1bmN0aW9uIChkZiwgaSkgewogICAgICAvLyBUaGlzIGNvZGUgdXNlZCB0byB1c2UgTC5tdWx0aVBvbHlnb24sIGJ1dCB0aGF0IGNhdXNlZAogICAgICAvLyBkb3VibGUtY2xpY2sgb24gYSBtdWx0aXBvbHlnb24gdG8gZmFpbCB0byB6b29tIGluIG9uIHRoZQogICAgICAvLyBtYXAuIFN1cnByaXNpbmdseSwgcHV0dGluZyBhbGwgdGhlIHJpbmdzIGluIGEgc2luZ2xlCiAgICAgIC8vIHBvbHlnb24gc2VlbXMgdG8gc3RpbGwgd29yazsgY29tcGxpY2F0ZWQgbXVsdGlwb2x5Z29ucwogICAgICAvLyBhcmUgc3RpbGwgcmVuZGVyZWQgY29ycmVjdGx5LgogICAgICB2YXIgc2hhcGVzID0gZGYuZ2V0KGksICJzaGFwZXMiKS5tYXAoZnVuY3Rpb24gKHBvbHlnb24pIHsKICAgICAgICByZXR1cm4gcG9seWdvbi5tYXAoX2h0bWx3aWRnZXRzMi5kZWZhdWx0LmRhdGFmcmFtZVRvRDMpOwogICAgICB9KS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgdmFsKSB7CiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQodmFsKTsKICAgICAgfSwgW10pOwogICAgICByZXR1cm4gX2xlYWZsZXQyLmRlZmF1bHQucG9seWdvbihzaGFwZXMsIGRmLmdldChpKSk7CiAgICB9KTsKICB9Cn07CgptZXRob2RzLmFkZEdlb0pTT04gPSBmdW5jdGlvbiAoZGF0YSwgbGF5ZXJJZCwgZ3JvdXAsIHN0eWxlKSB7CiAgLy8gVGhpcyB0aW1lLCBzZWxmIGlzIGFjdHVhbGx5IG5lZWRlZCBiZWNhdXNlIHRoZSBjYWxsYmFja3MgYmVsb3cgbmVlZAogIC8vIHRvIGFjY2VzcyBib3RoIHRoZSBpbm5lciBhbmQgb3V0ZXIgc2Vuc2VzIG9mICJ0aGlzIgogIHZhciBzZWxmID0gdGhpczsKICBpZiAodHlwZW9mIGRhdGEgPT09ICJzdHJpbmciKSB7CiAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTsKICB9CgogIHZhciBnbG9iYWxTdHlsZSA9IF9qcXVlcnkyLmRlZmF1bHQuZXh0ZW5kKHt9LCBzdHlsZSwgZGF0YS5zdHlsZSB8fCB7fSk7CgogIHZhciBnamxheWVyID0gX2xlYWZsZXQyLmRlZmF1bHQuZ2VvSnNvbihkYXRhLCB7CiAgICBzdHlsZTogZnVuY3Rpb24gc3R5bGUoZmVhdHVyZSkgewogICAgICBpZiAoZmVhdHVyZS5zdHlsZSB8fCBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGUpIHsKICAgICAgICByZXR1cm4gX2pxdWVyeTIuZGVmYXVsdC5leHRlbmQoe30sIGdsb2JhbFN0eWxlLCBmZWF0dXJlLnN0eWxlLCBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGUpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBnbG9iYWxTdHlsZTsKICAgICAgfQogICAgfSwKICAgIG9uRWFjaEZlYXR1cmU6IGZ1bmN0aW9uIG9uRWFjaEZlYXR1cmUoZmVhdHVyZSwgbGF5ZXIpIHsKICAgICAgdmFyIGV4dHJhSW5mbyA9IHsKICAgICAgICBmZWF0dXJlSWQ6IGZlYXR1cmUuaWQsCiAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzCiAgICAgIH07CiAgICAgIHZhciBwb3B1cCA9IGZlYXR1cmUucHJvcGVydGllcy5wb3B1cDsKICAgICAgaWYgKHR5cGVvZiBwb3B1cCAhPT0gInVuZGVmaW5lZCIgJiYgcG9wdXAgIT09IG51bGwpIGxheWVyLmJpbmRQb3B1cChwb3B1cCk7CiAgICAgIGxheWVyLm9uKCJjbGljayIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgImdlb2pzb25fY2xpY2siLCBleHRyYUluZm8pLCB0aGlzKTsKICAgICAgbGF5ZXIub24oIm1vdXNlb3ZlciIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgImdlb2pzb25fbW91c2VvdmVyIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgIGxheWVyLm9uKCJtb3VzZW91dCIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgImdlb2pzb25fbW91c2VvdXQiLCBleHRyYUluZm8pLCB0aGlzKTsKICAgIH0KICB9KTsKICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihnamxheWVyLCAiZ2VvanNvbiIsIGxheWVySWQsIGdyb3VwKTsKfTsKCm1ldGhvZHMucmVtb3ZlR2VvSlNPTiA9IGZ1bmN0aW9uIChsYXllcklkKSB7CiAgdGhpcy5sYXllck1hbmFnZXIucmVtb3ZlTGF5ZXIoImdlb2pzb24iLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJHZW9KU09OID0gZnVuY3Rpb24gKCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJnZW9qc29uIik7Cn07CgptZXRob2RzLmFkZFRvcG9KU09OID0gZnVuY3Rpb24gKGRhdGEsIGxheWVySWQsIGdyb3VwLCBzdHlsZSkgewogIC8vIFRoaXMgdGltZSwgc2VsZiBpcyBhY3R1YWxseSBuZWVkZWQgYmVjYXVzZSB0aGUgY2FsbGJhY2tzIGJlbG93IG5lZWQKICAvLyB0byBhY2Nlc3MgYm90aCB0aGUgaW5uZXIgYW5kIG91dGVyIHNlbnNlcyBvZiAidGhpcyIKICB2YXIgc2VsZiA9IHRoaXM7CiAgaWYgKHR5cGVvZiBkYXRhID09PSAic3RyaW5nIikgewogICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7CiAgfQoKICB2YXIgZ2xvYmFsU3R5bGUgPSBfanF1ZXJ5Mi5kZWZhdWx0LmV4dGVuZCh7fSwgc3R5bGUsIGRhdGEuc3R5bGUgfHwge30pOwoKICB2YXIgZ2psYXllciA9IF9sZWFmbGV0Mi5kZWZhdWx0Lmdlb0pzb24obnVsbCwgewogICAgc3R5bGU6IGZ1bmN0aW9uIHN0eWxlKGZlYXR1cmUpIHsKICAgICAgaWYgKGZlYXR1cmUuc3R5bGUgfHwgZmVhdHVyZS5wcm9wZXJ0aWVzLnN0eWxlKSB7CiAgICAgICAgcmV0dXJuIF9qcXVlcnkyLmRlZmF1bHQuZXh0ZW5kKHt9LCBnbG9iYWxTdHlsZSwgZmVhdHVyZS5zdHlsZSwgZmVhdHVyZS5wcm9wZXJ0aWVzLnN0eWxlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZ2xvYmFsU3R5bGU7CiAgICAgIH0KICAgIH0sCiAgICBvbkVhY2hGZWF0dXJlOiBmdW5jdGlvbiBvbkVhY2hGZWF0dXJlKGZlYXR1cmUsIGxheWVyKSB7CiAgICAgIHZhciBleHRyYUluZm8gPSB7CiAgICAgICAgZmVhdHVyZUlkOiBmZWF0dXJlLmlkLAogICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcwogICAgICB9OwogICAgICB2YXIgcG9wdXAgPSBmZWF0dXJlLnByb3BlcnRpZXMucG9wdXA7CiAgICAgIGlmICh0eXBlb2YgcG9wdXAgIT09ICJ1bmRlZmluZWQiICYmIHBvcHVwICE9PSBudWxsKSBsYXllci5iaW5kUG9wdXAocG9wdXApOwogICAgICBsYXllci5vbigiY2xpY2siLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJ0b3BvanNvbl9jbGljayIsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgICBsYXllci5vbigibW91c2VvdmVyIiwgbW91c2VIYW5kbGVyKHNlbGYuaWQsIGxheWVySWQsIGdyb3VwLCAidG9wb2pzb25fbW91c2VvdmVyIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgIGxheWVyLm9uKCJtb3VzZW91dCIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgInRvcG9qc29uX21vdXNlb3V0IiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICB9CiAgfSk7CiAgZ2xvYmFsLm9tbml2b3JlLnRvcG9qc29uLnBhcnNlKGRhdGEsIG51bGwsIGdqbGF5ZXIpOwogIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKGdqbGF5ZXIsICJ0b3BvanNvbiIsIGxheWVySWQsIGdyb3VwKTsKfTsKCm1ldGhvZHMucmVtb3ZlVG9wb0pTT04gPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJ0b3BvanNvbiIsIGxheWVySWQpOwp9OwoKbWV0aG9kcy5jbGVhclRvcG9KU09OID0gZnVuY3Rpb24gKCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJ0b3BvanNvbiIpOwp9OwoKbWV0aG9kcy5hZGRDb250cm9sID0gZnVuY3Rpb24gKGh0bWwsIHBvc2l0aW9uLCBsYXllcklkLCBjbGFzc2VzKSB7CiAgZnVuY3Rpb24gb25BZGQobWFwKSB7CiAgICB2YXIgZGl2ID0gX2xlYWZsZXQyLmRlZmF1bHQuRG9tVXRpbC5jcmVhdGUoImRpdiIsIGNsYXNzZXMpOwogICAgaWYgKHR5cGVvZiBsYXllcklkICE9PSAidW5kZWZpbmVkIiAmJiBsYXllcklkICE9PSBudWxsKSB7CiAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoImlkIiwgbGF5ZXJJZCk7CiAgICB9CiAgICB0aGlzLl9kaXYgPSBkaXY7CgogICAgLy8gSXQncyBwb3NzaWJsZSBmb3Igd2luZG93LlNoaW55IHRvIGJlIHRydWUgYnV0IFNoaW55LmluaXRpYWxpemVJbnB1dHMgdG8KICAgIC8vIG5vdCBiZSwgd2hlbiBhIHN0YXRpYyBsZWFmbGV0IHdpZGdldCBpcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBzaGlueQogICAgLy8gVUkgZGlyZWN0bHkgKG5vdCB0aHJvdWdoIGxlYWZsZXRPdXRwdXQgb3IgdWlPdXRwdXQpLiBJbiB0aGlzIGNhc2Ugd2UKICAgIC8vIGRvbid0IGRvIHRoZSBub3JtYWwgU2hpbnkgc3R1ZmYgYXMgdGhhdCB3aWxsIGFsbCBoYXBwZW4gd2hlbiBTaGlueQogICAgLy8gaXRzZWxmIGxvYWRzIGFuZCBiaW5kcyB0aGUgZW50aXJlIGRvYy4KCiAgICBpZiAod2luZG93LlNoaW55ICYmIF9zaGlueTIuZGVmYXVsdC5pbml0aWFsaXplSW5wdXRzKSB7CiAgICAgIF9zaGlueTIuZGVmYXVsdC5yZW5kZXJIdG1sKGh0bWwsIHRoaXMuX2Rpdik7CiAgICAgIF9zaGlueTIuZGVmYXVsdC5pbml0aWFsaXplSW5wdXRzKHRoaXMuX2Rpdik7CiAgICAgIF9zaGlueTIuZGVmYXVsdC5iaW5kQWxsKHRoaXMuX2Rpdik7CiAgICB9IGVsc2UgewogICAgICB0aGlzLl9kaXYuaW5uZXJIVE1MID0gaHRtbDsKICAgIH0KCiAgICByZXR1cm4gdGhpcy5fZGl2OwogIH0KICBmdW5jdGlvbiBvblJlbW92ZShtYXApIHsKICAgIGlmICh3aW5kb3cuU2hpbnkgJiYgX3NoaW55Mi5kZWZhdWx0LnVuYmluZEFsbCkgewogICAgICBfc2hpbnkyLmRlZmF1bHQudW5iaW5kQWxsKHRoaXMuX2Rpdik7CiAgICB9CiAgfQogIHZhciBDb250cm9sID0gX2xlYWZsZXQyLmRlZmF1bHQuQ29udHJvbC5leHRlbmQoewogICAgb3B0aW9uczogeyBwb3NpdGlvbjogcG9zaXRpb24gfSwKICAgIG9uQWRkOiBvbkFkZCwKICAgIG9uUmVtb3ZlOiBvblJlbW92ZQogIH0pOwogIHRoaXMuY29udHJvbHMuYWRkKG5ldyBDb250cm9sKCksIGxheWVySWQsIGh0bWwpOwp9OwoKbWV0aG9kcy5hZGRDdXN0b21Db250cm9sID0gZnVuY3Rpb24gKGNvbnRyb2wsIGxheWVySWQpIHsKICB0aGlzLmNvbnRyb2xzLmFkZChjb250cm9sLCBsYXllcklkKTsKfTsKCm1ldGhvZHMucmVtb3ZlQ29udHJvbCA9IGZ1bmN0aW9uIChsYXllcklkKSB7CiAgdGhpcy5jb250cm9scy5yZW1vdmUobGF5ZXJJZCk7Cn07CgptZXRob2RzLmNsZWFyQ29udHJvbHMgPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5jb250cm9scy5jbGVhcigpOwp9OwoKbWV0aG9kcy5hZGRMZWdlbmQgPSBmdW5jdGlvbiAob3B0aW9ucykgewogIHZhciBsZWdlbmQgPSBfbGVhZmxldDIuZGVmYXVsdC5jb250cm9sKHsgcG9zaXRpb246IG9wdGlvbnMucG9zaXRpb24gfSk7CiAgdmFyIGdyYWRTcGFuID0gdm9pZCAwOwoKICBsZWdlbmQub25BZGQgPSBmdW5jdGlvbiAobWFwKSB7CiAgICB2YXIgZGl2ID0gX2xlYWZsZXQyLmRlZmF1bHQuRG9tVXRpbC5jcmVhdGUoImRpdiIsIG9wdGlvbnMuY2xhc3NOYW1lKSwKICAgICAgICBjb2xvcnMgPSBvcHRpb25zLmNvbG9ycywKICAgICAgICBsYWJlbHMgPSBvcHRpb25zLmxhYmVscywKICAgICAgICBsZWdlbmRIVE1MID0gIiI7CiAgICBpZiAob3B0aW9ucy50eXBlID09PSAibnVtZXJpYyIpIHsKICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyAjIEZvcm1hdHRpbmcgY29uc3RhbnRzLgogICAgICAgIHZhciBzaW5nbGVCaW5IZWlnaHQgPSAyMDsgLy8gVGhlIGRpc3RhbmNlIGJldHdlZW4gdGljayBtYXJrcywgaW4gcHgKICAgICAgICB2YXIgdk1hcmdpbiA9IDg7IC8vIElmIDFzdCB0aWNrIG1hcmsgc3RhcnRzIGF0IHRvcCBvZiBncmFkaWVudCwgaG93CiAgICAgICAgLy8gbWFueSBleHRyYSBweCBhcmUgbmVlZGVkIGZvciB0aGUgdG9wIGhhbGYgb2YgdGhlCiAgICAgICAgLy8gMXN0IGxhYmVsPyAoZGl0dG8gZm9yIGxhc3QgdGljayBtYXJrL2xhYmVsKQogICAgICAgIHZhciB0aWNrV2lkdGggPSA0OyAvLyBIb3cgd2lkZSBzaG91bGQgdGljayBtYXJrcyBiZSwgaW4gcHg/CiAgICAgICAgdmFyIGxhYmVsUGFkZGluZyA9IDY7IC8vIEhvdyBtdWNoIGRpc3RhbmNlIHRvIHJlc2VydmUgZm9yIHRpY2sgbWFyaz8KICAgICAgICAvLyAoTXVzdCBiZSA+PSB0aWNrV2lkdGgpCgogICAgICAgIC8vICMgRGVyaXZlZCBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCgogICAgICAgIC8vIFdoYXQncyB0aGUgaGVpZ2h0IG9mIGEgc2luZ2xlIGJpbiwgaW4gcGVyY2VudGFnZSAob2YgZ3JhZGllbnQgaGVpZ2h0KT8KICAgICAgICAvLyBJdCBtaWdodCBub3QganVzdCBiZSAxLyhuLTEpLCBpZiB0aGUgZ3JhZGllbnQgZXh0ZW5kcyBwYXN0IHRoZSB0aWNrCiAgICAgICAgLy8gbWFya3MgKHdoaWNoIGNhbiBiZSB0aGUgY2FzZSBmb3IgcHJldHR5IGN1dCBwb2ludHMpLgogICAgICAgIHZhciBzaW5nbGVCaW5QY3QgPSAob3B0aW9ucy5leHRyYS5wX24gLSBvcHRpb25zLmV4dHJhLnBfMSkgLyAobGFiZWxzLmxlbmd0aCAtIDEpOwogICAgICAgIC8vIEVhY2ggYmluIGlzIGBzaW5nbGVCaW5IZWlnaHRgIGhpZ2guIEhvdyB0YWxsIGlzIHRoZSBncmFkaWVudD8KICAgICAgICB2YXIgdG90YWxIZWlnaHQgPSAxIC8gc2luZ2xlQmluUGN0ICogc2luZ2xlQmluSGVpZ2h0ICsgMTsKICAgICAgICAvLyBIb3cgZmFyIHNob3VsZCB0aGUgZmlyc3QgdGljayBiZSBzaGlmdGVkIGRvd24sIHJlbGF0aXZlIHRvIHRoZSB0b3AKICAgICAgICAvLyBvZiB0aGUgZ3JhZGllbnQ/CiAgICAgICAgdmFyIHRpY2tPZmZzZXQgPSBzaW5nbGVCaW5IZWlnaHQgLyBzaW5nbGVCaW5QY3QgKiBvcHRpb25zLmV4dHJhLnBfMTsKCiAgICAgICAgZ3JhZFNwYW4gPSAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoIjxzcGFuLz4iKS5jc3MoewogICAgICAgICAgImJhY2tncm91bmQiOiAibGluZWFyLWdyYWRpZW50KCIgKyBjb2xvcnMgKyAiKSIsCiAgICAgICAgICAib3BhY2l0eSI6IG9wdGlvbnMub3BhY2l0eSwKICAgICAgICAgICJoZWlnaHQiOiB0b3RhbEhlaWdodCArICJweCIsCiAgICAgICAgICAid2lkdGgiOiAiMThweCIsCiAgICAgICAgICAiZGlzcGxheSI6ICJibG9jayIsCiAgICAgICAgICAibWFyZ2luLXRvcCI6IHZNYXJnaW4gKyAicHgiCiAgICAgICAgfSk7CiAgICAgICAgdmFyIGxlZnREaXYgPSAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoIjxkaXYvPiIpLmNzcygiZmxvYXQiLCAibGVmdCIpLAogICAgICAgICAgICByaWdodERpdiA9ICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KSgiPGRpdi8+IikuY3NzKCJmbG9hdCIsICJsZWZ0Iik7CiAgICAgICAgbGVmdERpdi5hcHBlbmQoZ3JhZFNwYW4pOwogICAgICAgICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShkaXYpLmFwcGVuZChsZWZ0RGl2KS5hcHBlbmQocmlnaHREaXYpLmFwcGVuZCgoMCwgX2pxdWVyeTIuZGVmYXVsdCkoIjxiciBjbGVhcj1cImJvdGhcIi8+IikpOwoKICAgICAgICAvLyBIYXZlIHRvIGF0dGFjaCB0aGUgZGl2IHRvIHRoZSBib2R5IGF0IHRoaXMgZWFybHkgcG9pbnQsIHNvIHRoYXQgdGhlCiAgICAgICAgLy8gc3ZnIHRleHQgZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCkgYWN0dWFsbHkgd29ya3MsIGJlbG93LgogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKCiAgICAgICAgdmFyIG5zID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjsKICAgICAgICB2YXIgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAic3ZnIik7CiAgICAgICAgcmlnaHREaXYuYXBwZW5kKHN2Zyk7CiAgICAgICAgdmFyIGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMsICJnIik7CiAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGcpLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoMCwgIiArIHZNYXJnaW4gKyAiKSIpOwogICAgICAgIHN2Zy5hcHBlbmRDaGlsZChnKTsKCiAgICAgICAgLy8gbWF4IGxhYmVsIHdpZHRoIG5lZWRlZCB0byBzZXQgd2lkdGggb2Ygc3ZnLCBhbmQgcmlnaHQtanVzdGlmeSB0ZXh0CiAgICAgICAgdmFyIG1heExibFdpZHRoID0gMDsKCiAgICAgICAgLy8gQ3JlYXRlIHRpY2sgbWFya3MgYW5kIGxhYmVscwogICAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaChsYWJlbHMsIGZ1bmN0aW9uIChpLCBsYWJlbCkgewogICAgICAgICAgdmFyIHkgPSB0aWNrT2Zmc2V0ICsgaSAqIHNpbmdsZUJpbkhlaWdodCArIDAuNTsKCiAgICAgICAgICB2YXIgdGhpc0xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAidGV4dCIpOwogICAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXNMYWJlbCkudGV4dChsYWJlbHNbaV0pLmF0dHIoInkiLCB5KS5hdHRyKCJkeCIsIGxhYmVsUGFkZGluZykuYXR0cigiZHkiLCAiMC41ZXgiKTsKICAgICAgICAgIGcuYXBwZW5kQ2hpbGQodGhpc0xhYmVsKTsKICAgICAgICAgIG1heExibFdpZHRoID0gTWF0aC5tYXgobWF4TGJsV2lkdGgsIHRoaXNMYWJlbC5nZXRDb21wdXRlZFRleHRMZW5ndGgoKSk7CgogICAgICAgICAgdmFyIHRoaXNUaWNrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAibGluZSIpOwogICAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXNUaWNrKS5hdHRyKCJ4MSIsIDApLmF0dHIoIngyIiwgdGlja1dpZHRoKS5hdHRyKCJ5MSIsIHkpLmF0dHIoInkyIiwgeSkuYXR0cigic3Ryb2tlLXdpZHRoIiwgMSk7CiAgICAgICAgICBnLmFwcGVuZENoaWxkKHRoaXNUaWNrKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gTm93IHRoYXQgd2Uga25vdyB0aGUgbWF4IGxhYmVsIHdpZHRoLCB3ZSBjYW4gcmlnaHQtanVzdGlmeQogICAgICAgICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShzdmcpLmZpbmQoInRleHQiKS5hdHRyKCJkeCIsIGxhYmVsUGFkZGluZyArIG1heExibFdpZHRoKS5hdHRyKCJ0ZXh0LWFuY2hvciIsICJlbmQiKTsKICAgICAgICAvLyBGaW5hbCBzaXplIGZvciA8c3ZnPgogICAgICAgICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShzdmcpLmNzcyh7CiAgICAgICAgICB3aWR0aDogbWF4TGJsV2lkdGggKyBsYWJlbFBhZGRpbmcgKyAicHgiLAogICAgICAgICAgaGVpZ2h0OiB0b3RhbEhlaWdodCArIHZNYXJnaW4gKiAyICsgInB4IgogICAgICAgIH0pOwoKICAgICAgICBpZiAob3B0aW9ucy5uYV9jb2xvcikgewogICAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGRpdikuYXBwZW5kKCI8ZGl2PjxpIHN0eWxlPVwiYmFja2dyb3VuZDoiICsgb3B0aW9ucy5uYV9jb2xvciArICJcIj48L2k+ICIgKyBvcHRpb25zLm5hX2xhYmVsICsgIjwvZGl2PiIpOwogICAgICAgIH0KICAgICAgfSkoKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChvcHRpb25zLm5hX2NvbG9yKSB7CiAgICAgICAgY29sb3JzLnB1c2gob3B0aW9ucy5uYV9jb2xvcik7CiAgICAgICAgbGFiZWxzLnB1c2gob3B0aW9ucy5uYV9sYWJlbCk7CiAgICAgIH0KICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBsZWdlbmRIVE1MICs9ICI8aSBzdHlsZT1cImJhY2tncm91bmQ6IiArIGNvbG9yc1tpXSArICI7b3BhY2l0eToiICsgb3B0aW9ucy5vcGFjaXR5ICsgIlwiPjwvaT4gIiArIGxhYmVsc1tpXSArICI8YnIvPiI7CiAgICAgIH0KICAgICAgZGl2LmlubmVySFRNTCA9IGxlZ2VuZEhUTUw7CiAgICB9CiAgICBpZiAob3B0aW9ucy50aXRsZSkgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGRpdikucHJlcGVuZCgiPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206M3B4XCI+PHN0cm9uZz4iICsgb3B0aW9ucy50aXRsZSArICI8L3N0cm9uZz48L2Rpdj4iKTsKICAgIHJldHVybiBkaXY7CiAgfTsKCiAgdGhpcy5jb250cm9scy5hZGQobGVnZW5kLCBvcHRpb25zLmxheWVySWQpOwp9OwoKbWV0aG9kcy5hZGRMYXllcnNDb250cm9sID0gZnVuY3Rpb24gKGJhc2VHcm91cHMsIG92ZXJsYXlHcm91cHMsIG9wdGlvbnMpIHsKICB2YXIgX3RoaXM1ID0gdGhpczsKCiAgLy8gT25seSBhbGxvdyBvbmUgbGF5ZXJzIGNvbnRyb2wgYXQgYSB0aW1lCiAgbWV0aG9kcy5yZW1vdmVMYXllcnNDb250cm9sLmNhbGwodGhpcyk7CgogIHZhciBmaXJzdExheWVyID0gdHJ1ZTsKICB2YXIgYmFzZSA9IHt9OwogIF9qcXVlcnkyLmRlZmF1bHQuZWFjaCgoMCwgX3V0aWwuYXNBcnJheSkoYmFzZUdyb3VwcyksIGZ1bmN0aW9uIChpLCBnKSB7CiAgICB2YXIgbGF5ZXIgPSBfdGhpczUubGF5ZXJNYW5hZ2VyLmdldExheWVyR3JvdXAoZywgdHJ1ZSk7CiAgICBpZiAobGF5ZXIpIHsKICAgICAgYmFzZVtnXSA9IGxheWVyOwoKICAgICAgLy8gQ2hlY2sgaWYgPjEgYmFzZSBsYXllcnMgYXJlIHZpc2libGU7IGlmIHNvLCBoaWRlIGFsbCBidXQgdGhlIGZpcnN0IG9uZQogICAgICBpZiAoX3RoaXM1Lmhhc0xheWVyKGxheWVyKSkgewogICAgICAgIGlmIChmaXJzdExheWVyKSB7CiAgICAgICAgICBmaXJzdExheWVyID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzNS5yZW1vdmVMYXllcihsYXllcik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSk7CiAgdmFyIG92ZXJsYXkgPSB7fTsKICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goKDAsIF91dGlsLmFzQXJyYXkpKG92ZXJsYXlHcm91cHMpLCBmdW5jdGlvbiAoaSwgZykgewogICAgdmFyIGxheWVyID0gX3RoaXM1LmxheWVyTWFuYWdlci5nZXRMYXllckdyb3VwKGcsIHRydWUpOwogICAgaWYgKGxheWVyKSB7CiAgICAgIG92ZXJsYXlbZ10gPSBsYXllcjsKICAgIH0KICB9KTsKCiAgdGhpcy5jdXJyZW50TGF5ZXJzQ29udHJvbCA9IF9sZWFmbGV0Mi5kZWZhdWx0LmNvbnRyb2wubGF5ZXJzKGJhc2UsIG92ZXJsYXksIG9wdGlvbnMpOwogIHRoaXMuYWRkQ29udHJvbCh0aGlzLmN1cnJlbnRMYXllcnNDb250cm9sKTsKfTsKCm1ldGhvZHMucmVtb3ZlTGF5ZXJzQ29udHJvbCA9IGZ1bmN0aW9uICgpIHsKICBpZiAodGhpcy5jdXJyZW50TGF5ZXJzQ29udHJvbCkgewogICAgdGhpcy5yZW1vdmVDb250cm9sKHRoaXMuY3VycmVudExheWVyc0NvbnRyb2wpOwogICAgdGhpcy5jdXJyZW50TGF5ZXJzQ29udHJvbCA9IG51bGw7CiAgfQp9OwoKbWV0aG9kcy5hZGRTY2FsZUJhciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CgogIC8vIE9ubHkgYWxsb3cgb25lIHNjYWxlIGJhciBhdCBhIHRpbWUKICBtZXRob2RzLnJlbW92ZVNjYWxlQmFyLmNhbGwodGhpcyk7CgogIHZhciBzY2FsZUJhciA9IF9sZWFmbGV0Mi5kZWZhdWx0LmNvbnRyb2wuc2NhbGUob3B0aW9ucykuYWRkVG8odGhpcyk7CiAgdGhpcy5jdXJyZW50U2NhbGVCYXIgPSBzY2FsZUJhcjsKfTsKCm1ldGhvZHMucmVtb3ZlU2NhbGVCYXIgPSBmdW5jdGlvbiAoKSB7CiAgaWYgKHRoaXMuY3VycmVudFNjYWxlQmFyKSB7CiAgICB0aGlzLmN1cnJlbnRTY2FsZUJhci5yZW1vdmVGcm9tKHRoaXMpOwogICAgdGhpcy5jdXJyZW50U2NhbGVCYXIgPSBudWxsOwogIH0KfTsKCm1ldGhvZHMuaGlkZUdyb3VwID0gZnVuY3Rpb24gKGdyb3VwKSB7CiAgdmFyIF90aGlzNiA9IHRoaXM7CgogIF9qcXVlcnkyLmRlZmF1bHQuZWFjaCgoMCwgX3V0aWwuYXNBcnJheSkoZ3JvdXApLCBmdW5jdGlvbiAoaSwgZykgewogICAgdmFyIGxheWVyID0gX3RoaXM2LmxheWVyTWFuYWdlci5nZXRMYXllckdyb3VwKGcsIHRydWUpOwogICAgaWYgKGxheWVyKSB7CiAgICAgIF90aGlzNi5yZW1vdmVMYXllcihsYXllcik7CiAgICB9CiAgfSk7Cn07CgptZXRob2RzLnNob3dHcm91cCA9IGZ1bmN0aW9uIChncm91cCkgewogIHZhciBfdGhpczcgPSB0aGlzOwoKICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goKDAsIF91dGlsLmFzQXJyYXkpKGdyb3VwKSwgZnVuY3Rpb24gKGksIGcpIHsKICAgIHZhciBsYXllciA9IF90aGlzNy5sYXllck1hbmFnZXIuZ2V0TGF5ZXJHcm91cChnLCB0cnVlKTsKICAgIGlmIChsYXllcikgewogICAgICBfdGhpczcuYWRkTGF5ZXIobGF5ZXIpOwogICAgfQogIH0pOwp9OwoKZnVuY3Rpb24gc2V0dXBTaG93SGlkZUdyb3Vwc09uWm9vbShtYXApIHsKICBpZiAobWFwLmxlYWZsZXRyLl9oYXNJbml0aWFsaXplZFNob3dIaWRlR3JvdXBzKSB7CiAgICByZXR1cm47CiAgfQogIG1hcC5sZWFmbGV0ci5faGFzSW5pdGlhbGl6ZWRTaG93SGlkZUdyb3VwcyA9IHRydWU7CgogIGZ1bmN0aW9uIHNldFZpc2liaWxpdHkobGF5ZXIsIHZpc2libGUpIHsKICAgIGlmICh2aXNpYmxlICE9PSBtYXAuaGFzTGF5ZXIobGF5ZXIpKSB7CiAgICAgIGlmICh2aXNpYmxlKSBtYXAuYWRkTGF5ZXIobGF5ZXIpO2Vsc2UgbWFwLnJlbW92ZUxheWVyKGxheWVyKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHNob3dIaWRlR3JvdXBzT25ab29tKCkgewogICAgaWYgKCFtYXAubGF5ZXJNYW5hZ2VyKSByZXR1cm47CgogICAgdmFyIHpvb20gPSBtYXAuZ2V0Wm9vbSgpOwogICAgbWFwLmxheWVyTWFuYWdlci5nZXRBbGxHcm91cE5hbWVzKCkuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXApIHsKICAgICAgdmFyIGxheWVyID0gbWFwLmxheWVyTWFuYWdlci5nZXRMYXllckdyb3VwKGdyb3VwLCBmYWxzZSk7CiAgICAgIGlmIChsYXllciAmJiB0eXBlb2YgbGF5ZXIuem9vbUxldmVscyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICBzZXRWaXNpYmlsaXR5KGxheWVyLCBsYXllci56b29tTGV2ZWxzID09PSB0cnVlIHx8IGxheWVyLnpvb21MZXZlbHMuaW5kZXhPZih6b29tKSA+PSAwKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBtYXAuc2hvd0hpZGVHcm91cHNPblpvb20gPSBzaG93SGlkZUdyb3Vwc09uWm9vbTsKICBtYXAub24oInpvb21lbmQiLCBzaG93SGlkZUdyb3Vwc09uWm9vbSk7Cn0KCm1ldGhvZHMuc2V0R3JvdXBPcHRpb25zID0gZnVuY3Rpb24gKGdyb3VwLCBvcHRpb25zKSB7CiAgdmFyIF90aGlzOCA9IHRoaXM7CgogIF9qcXVlcnkyLmRlZmF1bHQuZWFjaCgoMCwgX3V0aWwuYXNBcnJheSkoZ3JvdXApLCBmdW5jdGlvbiAoaSwgZykgewogICAgdmFyIGxheWVyID0gX3RoaXM4LmxheWVyTWFuYWdlci5nZXRMYXllckdyb3VwKGcsIHRydWUpOwogICAgLy8gVGhpcyBzbGlnaHRseSB0b3J0dXJlZCBjaGVjayBpcyBiZWNhdXNlIDAgaXMgYSB2YWxpZCB2YWx1ZSBmb3Igem9vbUxldmVscwogICAgaWYgKHR5cGVvZiBvcHRpb25zLnpvb21MZXZlbHMgIT09ICJ1bmRlZmluZWQiICYmIG9wdGlvbnMuem9vbUxldmVscyAhPT0gbnVsbCkgewogICAgICBsYXllci56b29tTGV2ZWxzID0gKDAsIF91dGlsLmFzQXJyYXkpKG9wdGlvbnMuem9vbUxldmVscyk7CiAgICB9CiAgfSk7CgogIHNldHVwU2hvd0hpZGVHcm91cHNPblpvb20odGhpcyk7CiAgdGhpcy5zaG93SGlkZUdyb3Vwc09uWm9vbSgpOwp9OwoKbWV0aG9kcy5hZGRSYXN0ZXJJbWFnZSA9IGZ1bmN0aW9uICh1cmksIGJvdW5kcywgb3BhY2l0eSwgYXR0cmlidXRpb24sIGxheWVySWQsIGdyb3VwKSB7CiAgLy8gdXJpIGlzIGEgZGF0YSBVUkkgY29udGFpbmluZyBhbiBpbWFnZS4gV2Ugd2FudCB0byBwYWludCB0aGlzIGltYWdlIGFzIGEKICAvLyBsYXllciBhdCAodG9wLWxlZnQpIGJvdW5kc1swXSB0byAoYm90dG9tLXJpZ2h0KSBib3VuZHNbMV0uCgogIC8vIFdlIGNhbid0IHNpbXBseSB1c2UgSW1hZ2VPdmVybGF5LCBhcyBpdCB1c2VzIGJpbGluZWFyIHNjYWxpbmcgd2hpY2ggbG9va3MKICAvLyBhd2Z1bCBhcyB5b3Ugem9vbSBpbiAoYW5kIHNvbWV0aW1lcyBzaGlmdHMgcG9zaXRpb25zIG9yIGRpc2FwcGVhcnMpLgogIC8vIEluc3RlYWQsIHdlJ2xsIHVzZSBhIFRpbGVMYXllci5DYW52YXMgdG8gZHJhdyBwaWVjZXMgb2YgdGhlIGltYWdlLgoKICAvLyBGaXJzdCwgc29tZSBoZWxwZXIgZnVuY3Rpb25zLgoKICAvLyBkZWdyZWUydGlsZSBjb252ZXJ0cyBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhbmQgem9vbSB0byB4IGFuZCB5IHRpbGUKICAvLyBudW1iZXJzLiBUaGUgdGlsZSBudW1iZXJzIHJldHVybmVkIGNhbiBiZSBub24taW50ZWdyYWwsIGFzIHRoZXJlJ3Mgbm8KICAvLyByZWFzb24gdG8gZXhwZWN0IHRoYXQgdGhlIGxhdC9sbmcgaW5wdXRzIGFyZSBleGFjdGx5IG9uIHRoZSBib3JkZXIgb2YgdHdvCiAgLy8gdGlsZXMuCiAgLy8KICAvLyBXZSdsbCB1c2UgdGhpcyB0byBjb252ZXJ0IHRoZSBib3VuZHMgd2UgZ290IGZyb20gdGhlIHNlcnZlciwgaW50byBjb29yZHMKICAvLyBpbiB0aWxlLXNwYWNlIGF0IGEgZ2l2ZW4gem9vbSBsZXZlbC4gTm90ZSB0aGF0IG9uY2Ugd2UgZG8gdGhlIGNvbnZlcnNpb24sCiAgLy8gd2UgZG9uJ3QgdG8gZG8gYW55IG1vcmUgdHJpZ29ub21ldHJ5IHRvIGNvbnZlcnQgYmV0d2VlbiBwaXhlbCBjb29yZGluYXRlcwogIC8vIGFuZCB0aWxlIGNvb3JkaW5hdGVzOyB0aGUgc291cmNlIGltYWdlIHBpeGVsIGNvb3JkcywgZGVzdGluYXRpb24gY2FudmFzCiAgLy8gcGl4ZWwgY29vcmRzLCBhbmQgdGlsZSBjb29yZHMgYWxsIGNhbiBiZSBzY2FsZWQgbGluZWFybHkuCiAgZnVuY3Rpb24gZGVncmVlMnRpbGUobGF0LCBsbmcsIHpvb20pIHsKICAgIC8vIFNlZSBodHRwOi8vd2lraS5vcGVuc3RyZWV0bWFwLm9yZy93aWtpL1NsaXBweV9tYXBfdGlsZW5hbWVzCiAgICB2YXIgbGF0UmFkID0gbGF0ICogTWF0aC5QSSAvIDE4MDsKICAgIHZhciBuID0gTWF0aC5wb3coMiwgem9vbSk7CiAgICB2YXIgeCA9IChsbmcgKyAxODApIC8gMzYwICogbjsKICAgIHZhciB5ID0gKDEgLSBNYXRoLmxvZyhNYXRoLnRhbihsYXRSYWQpICsgMSAvIE1hdGguY29zKGxhdFJhZCkpIC8gTWF0aC5QSSkgLyAyICogbjsKICAgIHJldHVybiB7IHg6IHgsIHk6IHkgfTsKICB9CgogIC8vIEdpdmVuIGEgcmFuZ2UgW2Zyb20sdG8pIGFuZCBlaXRoZXIgb25lIG9yIHR3byBudW1iZXJzLCByZXR1cm5zIHRydWUgaWYKICAvLyB0aGVyZSBpcyBhbnkgb3ZlcmxhcCBiZXR3ZWVuIFt4LHgxKSBhbmQgdGhlIHJhbmdlLS1vciBpZiB4MSBpcyBvbWl0dGVkLAogIC8vIHRoZW4gcmV0dXJucyB0cnVlIGlmIHggaXMgd2l0aGluIFtmcm9tLHRvKS4KICBmdW5jdGlvbiBvdmVybGFwKGZyb20sIHRvLCB4LCAvKiBvcHRpb25hbCAqL3gxKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAzKSB4MSA9IHg7CiAgICByZXR1cm4geCA8IHRvICYmIHgxID49IGZyb207CiAgfQoKICBmdW5jdGlvbiBnZXRDYW52YXNTbW9vdGhpbmdQcm9wZXJ0eShjdHgpIHsKICAgIHZhciBjYW5kaWRhdGVzID0gWyJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCAibW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwgIndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCIsICJtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCJdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYW5kaWRhdGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0eXBlb2YgY3R4W2NhbmRpZGF0ZXNbaV1dICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIHJldHVybiBjYW5kaWRhdGVzW2ldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIE91ciBnZW5lcmFsIHN0cmF0ZWd5IGlzIHRvOgogIC8vIDEuIExvYWQgdGhlIGRhdGEgVVJJIGluIGFuIEltYWdlKCkgb2JqZWN0LCBzbyB3ZSBjYW4gZ2V0IGl0cyBwaXhlbAogIC8vICAgIGRpbWVuc2lvbnMgYW5kIHRoZSB1bmRlcmx5aW5nIGltYWdlIGRhdGEuIChXZSBjb3VsZCBoYXZlIGRvbmUgdGhpcwogIC8vICAgIGJ5IG5vdCBlbmNvZGluZyBhcyBQTkcgYXQgYWxsIGJ1dCBqdXN0IHNlbmQgYW4gYXJyYXkgb2YgUkdCQSB2YWx1ZXMKICAvLyAgICBmcm9tIHRoZSBzZXJ2ZXIsIGJ1dCB0aGF0IHdvdWxkIGluZmxhdGUgdGhlIEpTT04gdG9vIG11Y2guKQogIC8vIDIuIENyZWF0ZSBhIGhpZGRlbiBjYW52YXMgdGhhdCB3ZSB1c2UganVzdCB0byBleHRyYWN0IHRoZSBpbWFnZSBkYXRhCiAgLy8gICAgZnJvbSB0aGUgSW1hZ2UgKHVzaW5nIENvbnRleHQyRC5nZXRJbWFnZURhdGEoKSkuCiAgLy8gMy4gQ3JlYXRlIGEgVGlsZUxheWVyLkNhbnZhcyBhbmQgYWRkIGl0IHRvIHRoZSBtYXAuCgogIC8vIFdlIHdhbnQgdG8gc3luY2hyb25vdXNseSBjcmVhdGUgYW5kIGF0dGFjaCB0aGUgVGlsZUxheWVyLkNhbnZhcyAoc28gYW4KICAvLyBpbW1lZGlhdGUgY2FsbCB0byBjbGVhclJhc3RlcnMoKSB3aWxsIGJlIHJlc3BlY3RlZCwgZm9yIGV4YW1wbGUpLCBidXQKICAvLyBJbWFnZSBsb2FkcyBpdHMgZGF0YSBhc3luY2hyb25vdXNseS4gRm9ydHVuYXRlbHkgd2UgY2FuIHJlc29sdmUgdGhpcwogIC8vIGJ5IHB1dHRpbmcgVGlsZUxheWVyLkNhbnZhcyBpbnRvIGFzeW5jIG1vZGUsIHdoaWNoIHdpbGwgbGV0IHVzIGNyZWF0ZQogIC8vIGFuZCBhdHRhY2ggdGhlIGxheWVyIGJ1dCBoYXZlIGl0IHdhaXQgdW50aWwgdGhlIGltYWdlIGlzIGxvYWRlZCBiZWZvcmUKICAvLyBpdCBhY3R1YWxseSBkcmF3cyBhbnl0aGluZy4KCiAgLy8gVGhlc2UgYXJlIHRoZSB2YXJpYWJsZXMgdGhhdCB3ZSB3aWxsIHBvcHVsYXRlIG9uY2UgdGhlIGltYWdlIGlzIGxvYWRlZC4KICB2YXIgaW1nRGF0YSA9IG51bGw7IC8vIDFkIHJvdy1tYWpvciBhcnJheSwgZm91ciBbMC0yNTVdIGludGVnZXJzIHBlciBwaXhlbAogIHZhciBpbWdEYXRhTWlwTWFwcGVyID0gbnVsbDsKICB2YXIgdyA9IG51bGw7IC8vIGltYWdlIHdpZHRoIGluIHBpeGVscwogIHZhciBoID0gbnVsbDsgLy8gaW1hZ2UgaGVpZ2h0IGluIHBpeGVscwoKICAvLyBXZSdsbCB1c2UgdGhpcyBhcnJheSB0byBzdG9yZSBjYWxsYmFja3MgdGhhdCBuZWVkIHRvIGJlIGludm9rZWQgb25jZQogIC8vIGltZ0RhdGEsIHcsIGFuZCBoIGhhdmUgYmVlbiByZXNvbHZlZC4KICB2YXIgaW1nRGF0YUNhbGxiYWNrcyA9IFtdOwoKICAvLyBDb25zdW1lcnMgb2YgaW1nRGF0YSwgdywgYW5kIGggY2FuIGNhbGwgdGhpcyB0byBiZSBub3RpZmllZCB3aGVuIGRhdGEKICAvLyBpcyBhdmFpbGFibGUuIFVubGlrZSBtb3N0IGFzeW5jL3Byb21pc2UtYmFzZWQgQVBJcywgdGhlIGNhbGxiYWNrIHdpbGwKICAvLyBiZSBpbnZva2VkIGltbWVkaWF0ZWx5L3N5bmNocm9ub3VzbHkgaWYgdGhlIGRhdGEgaXMgYWxyZWFkeSBhdmFpbGFibGUuCiAgZnVuY3Rpb24gZ2V0SW1hZ2VEYXRhKGNhbGxiYWNrKSB7CiAgICBpZiAoaW1nRGF0YSAhPSBudWxsKSB7CiAgICAgIGNhbGxiYWNrKGltZ0RhdGEsIHcsIGgsIGltZ0RhdGFNaXBNYXBwZXIpOwogICAgfSBlbHNlIHsKICAgICAgaW1nRGF0YUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKICAgIH0KICB9CgogIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgLy8gU2F2ZSBzaXplCiAgICB3ID0gaW1nLndpZHRoOwogICAgaCA9IGltZy5oZWlnaHQ7CgogICAgLy8gQ3JlYXRlIGEgZHVtbXkgY2FudmFzIHRvIGV4dHJhY3QgdGhlIGltYWdlIGRhdGEKICAgIHZhciBpbWdEYXRhQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgICBpbWdEYXRhQ2FudmFzLndpZHRoID0gdzsKICAgIGltZ0RhdGFDYW52YXMuaGVpZ2h0ID0gaDsKICAgIGltZ0RhdGFDYW52YXMuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nRGF0YUNhbnZhcyk7CgogICAgdmFyIGltZ0RhdGFDdHggPSBpbWdEYXRhQ2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICBpbWdEYXRhQ3R4LmRyYXdJbWFnZShpbWcsIDAsIDApOwoKICAgIC8vIFNhdmUgdGhlIGltYWdlIGRhdGEuCiAgICBpbWdEYXRhID0gaW1nRGF0YUN0eC5nZXRJbWFnZURhdGEoMCwgMCwgdywgaCkuZGF0YTsKICAgIGltZ0RhdGFNaXBNYXBwZXIgPSBuZXcgX21pcG1hcHBlcjIuZGVmYXVsdChpbWcpOwoKICAgIC8vIERvbmUgd2l0aCB0aGUgY2FudmFzLCByZW1vdmUgaXQgZnJvbSB0aGUgcGFnZSBzbyBpdCBjYW4gYmUgZ2MnZC4KICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW1nRGF0YUNhbnZhcyk7CgogICAgLy8gQWxlcnQgYW55IGdldEltYWdlRGF0YSBjYWxsZXJzIHdobyBhcmUgd2FpdGluZy4KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1nRGF0YUNhbGxiYWNrcy5sZW5ndGg7IGkrKykgewogICAgICBpbWdEYXRhQ2FsbGJhY2tzW2ldKGltZ0RhdGEsIHcsIGgsIGltZ0RhdGFNaXBNYXBwZXIpOwogICAgfQogICAgaW1nRGF0YUNhbGxiYWNrcyA9IFtdOwogIH07CiAgaW1nLnNyYyA9IHVyaTsKCiAgdmFyIGNhbnZhc1RpbGVzID0gX2xlYWZsZXQyLmRlZmF1bHQuZ3JpZExheWVyKHsKICAgIG9wYWNpdHk6IG9wYWNpdHksCiAgICBhdHRyaWJ1dGlvbjogYXR0cmlidXRpb24sCiAgICBkZXRlY3RSZXRpbmE6IHRydWUsCiAgICBhc3luYzogdHJ1ZQogIH0pOwoKICBjYW52YXNUaWxlcy5jcmVhdGVUaWxlID0gZnVuY3Rpb24gKHRpbGVQb2ludCwgZG9uZSkgewogICAgdmFyIHpvb20gPSB0aWxlUG9pbnQuejsKICAgIHZhciBjYW52YXMgPSBfbGVhZmxldDIuZGVmYXVsdC5Eb21VdGlsLmNyZWF0ZSgiY2FudmFzIiwgImxlYWZsZXQtdGlsZSIpOwogICAgdmFyIGVycm9yID0gdm9pZCAwOwoKICAgIC8vIHNldHVwIHRpbGUgd2lkdGggYW5kIGhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnMKICAgIHZhciBzaXplID0gdGhpcy5nZXRUaWxlU2l6ZSgpOwogICAgY2FudmFzLndpZHRoID0gc2l6ZS54OwogICAgY2FudmFzLmhlaWdodCA9IHNpemUueTsKCiAgICBnZXRJbWFnZURhdGEoZnVuY3Rpb24gKGltZ0RhdGEsIHcsIGgsIG1pcG1hcHBlcikgewogICAgICB0cnkgewogICAgICAgIHZhciBfcmV0NyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIFRoZSBDb250ZXh0MkQgd2UnbGwgYmVpbmcgZHJhd2luZyBvbnRvLiBJdCdzIGFsd2F5cyAyNTZ4MjU2LgogICAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwoKICAgICAgICAgIC8vIENvbnZlcnQgb3VyIGltYWdlIGRhdGEncyB0b3AtbGVmdCBhbmQgYm90dG9tLXJpZ2h0IGxvY2F0aW9ucyBpbnRvCiAgICAgICAgICAvLyB4L3kgdGlsZSBjb29yZGluYXRlcy4gVGhpcyBpcyBlc3NlbnRpYWxseSBkb2luZyBhIHNwaGVyaWNhbCBtZXJjYXRvcgogICAgICAgICAgLy8gcHJvamVjdGlvbiwgdGhlbiBtdWx0aXBseWluZyBieSAyXnpvb20uCiAgICAgICAgICB2YXIgdG9wTGVmdCA9IGRlZ3JlZTJ0aWxlKGJvdW5kc1swXVswXSwgYm91bmRzWzBdWzFdLCB6b29tKTsKICAgICAgICAgIHZhciBib3R0b21SaWdodCA9IGRlZ3JlZTJ0aWxlKGJvdW5kc1sxXVswXSwgYm91bmRzWzFdWzFdLCB6b29tKTsKICAgICAgICAgIC8vIFRoZSBzaXplIG9mIHRoZSBpbWFnZSBpbiB4L3kgdGlsZSBjb29yZGluYXRlcy4KICAgICAgICAgIHZhciBleHRlbnQgPSB7IHg6IGJvdHRvbVJpZ2h0LnggLSB0b3BMZWZ0LngsIHk6IGJvdHRvbVJpZ2h0LnkgLSB0b3BMZWZ0LnkgfTsKCiAgICAgICAgICAvLyBTaG9ydCBjaXJjdWl0IGlmIHRpbGUgaXMgdG90YWxseSBkaXNqb2ludCBmcm9tIGltYWdlLgogICAgICAgICAgaWYgKCFvdmVybGFwKHRpbGVQb2ludC54LCB0aWxlUG9pbnQueCArIDEsIHRvcExlZnQueCwgYm90dG9tUmlnaHQueCkpIHJldHVybiB7CiAgICAgICAgICAgICAgdjogdm9pZCAwCiAgICAgICAgICAgIH07CiAgICAgICAgICBpZiAoIW92ZXJsYXAodGlsZVBvaW50LnksIHRpbGVQb2ludC55ICsgMSwgdG9wTGVmdC55LCBib3R0b21SaWdodC55KSkgcmV0dXJuIHsKICAgICAgICAgICAgICB2OiB2b2lkIDAKICAgICAgICAgICAgfTsKCiAgICAgICAgICAvLyBUaGUgbGluZWFyIHJlc29sdXRpb24gb2YgdGhlIHRpbGUgd2UncmUgZHJhd2luZyBpcyBhbHdheXMgMjU2cHggcGVyIHRpbGUgdW5pdC4KICAgICAgICAgIC8vIElmIHRoZSBsaW5lYXIgcmVzb2x1dGlvbiAoaW4gZWl0aGVyIGRpcmVjdGlvbikgb2YgdGhlIGltYWdlIGlzIGxlc3MgdGhhbiAyNTZweAogICAgICAgICAgLy8gcGVyIHRpbGUgdW5pdCwgdGhlbiB1c2UgbmVhcmVzdCBuZWlnaGJvcjsgb3RoZXJ3aXNlLCB1c2UgdGhlIGNhbnZhcydzIGJ1aWx0LWluCiAgICAgICAgICAvLyBzY2FsaW5nLgogICAgICAgICAgdmFyIGltZ1JlcyA9IHsKICAgICAgICAgICAgeDogdyAvIGV4dGVudC54LAogICAgICAgICAgICB5OiBoIC8gZXh0ZW50LnkKICAgICAgICAgIH07CgogICAgICAgICAgLy8gV2UgY2FuIGRvIHRoZSBhY3R1YWwgZHJhd2luZyBpbiBvbmUgb2YgdGhyZWUgd2F5czoKICAgICAgICAgIC8vIC0gQ2FsbCBkcmF3SW1hZ2UoKS4gVGhpcyBpcyBlYXN5IGFuZCBmYXN0LCBhbmQgcmVzdWx0cyBpbiBzbW9vdGgKICAgICAgICAgIC8vICAgaW50ZXJwb2xhdGlvbiAoYmlsaW5lYXI/KS4gVGhpcyBpcyB3aGF0IHdlIHdhbnQgd2hlbiB3ZSBhcmUKICAgICAgICAgIC8vICAgcmVkdWNpbmcgdGhlIGltYWdlIGZyb20gaXRzIG5hdGl2ZSBzaXplLgogICAgICAgICAgLy8gLSBDYWxsIGRyYXdJbWFnZSgpIHdpdGggaW1hZ2VTbW9vdGhpbmdFbmFibGVkPWZhbHNlLiBUaGlzIGlzIGVhc3kKICAgICAgICAgIC8vICAgYW5kIGZhc3QgYW5kIGdpdmVzIHVzIG5lYXJlc3QtbmVpZ2hib3IgaW50ZXJwb2xhdGlvbiwgd2hpY2ggaXMgd2hhdAogICAgICAgICAgLy8gICB3ZSB3YW50IHdoZW4gZW5sYXJnaW5nIHRoZSBpbWFnZS4gSG93ZXZlciwgaXQncyB1bnN1cHBvcnRlZCBvbiBtYW55CiAgICAgICAgICAvLyAgIGJyb3dzZXJzIChpbmNsdWRpbmcgUXRXZWJraXQpLgogICAgICAgICAgLy8gLSBEbyBhIG1hbnVhbCBuZWFyZXN0LW5laWdoYm9yIGludGVycG9sYXRpb24uIFRoaXMgaXMgd2hhdCB3ZSdsbCBmYWxsCiAgICAgICAgICAvLyAgIGJhY2sgdG8gd2hlbiBlbmxhcmdpbmcsIGFuZCBpbWFnZVNtb290aGluZ0VuYWJsZWQgaXNuJ3Qgc3VwcG9ydGVkLgogICAgICAgICAgLy8gICBJbiB0aGVvcnkgaXQncyBzbG93ZXIsIGJ1dCBzdGlsbCBwcmV0dHkgZmFzdCBvbiBteSBtYWNoaW5lLCBhbmQgdGhlCiAgICAgICAgICAvLyAgIHJlc3VsdHMgbG9vayB0aGUgc2FtZSBBRkFJQ1QuCgogICAgICAgICAgLy8gSXMgaW1hZ2VTbW9vdGhpbmdFbmFibGVkIHN1cHBvcnRlZD8gSWYgc28sIHdlIGNhbiBsZXQgY2FudmFzIGRvCiAgICAgICAgICAvLyBuZWFyZXN0LW5laWdoYm9yIGludGVycG9sYXRpb24gZm9yIHVzLgogICAgICAgICAgdmFyIHNtb290aGluZ1Byb3BlcnR5ID0gZ2V0Q2FudmFzU21vb3RoaW5nUHJvcGVydHkoY3R4KTsKCiAgICAgICAgICBpZiAoc21vb3RoaW5nUHJvcGVydHkgfHwgaW1nUmVzLnggPj0gMjU2ICYmIGltZ1Jlcy55ID49IDI1NikgewogICAgICAgICAgICAvLyBVc2UgYnVpbHQtaW4gc2NhbGluZwoKICAgICAgICAgICAgLy8gVHVybiBvZmYgYW50aS1hbGlhc2luZyBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgaWYgKHNtb290aGluZ1Byb3BlcnR5KSB7CiAgICAgICAgICAgICAgY3R4W3Ntb290aGluZ1Byb3BlcnR5XSA9IGltZ1Jlcy54ID49IDI1NiAmJiBpbWdSZXMueSA+PSAyNTY7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIERvbid0IG5lY2Vzc2FyaWx5IGRyYXcgd2l0aCB0aGUgZnVsbC1zaXplIGltYWdlOyBpZiB3ZSdyZQogICAgICAgICAgICAvLyBkb3duc2NhbGluZywgdXNlIHRoZSBtaXBtYXBwZXIgdG8gZ2V0IGEgcHJlLWRvd25zY2FsZWQgaW1hZ2UKICAgICAgICAgICAgLy8gKHNlZSBjb21tZW50cyBvbiBNaXBtYXBwZXIgY2xhc3MgZm9yIHdoeSB0aGlzIG1hdHRlcnMpLgogICAgICAgICAgICBtaXBtYXBwZXIuZ2V0QnlTaXplKGV4dGVudC54ICogMjU2LCBleHRlbnQueSAqIDI1NiwgZnVuY3Rpb24gKG1pcCkgewogICAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgaW1hZ2Ugd2lsbCBnbyBvZmYgdGhlIGVkZ2Ugb2YgdGhlIGNhbnZhcy0tCiAgICAgICAgICAgICAgLy8gdGhhdCdzIE9LLCB0aGUgY2FudmFzIHNob3VsZCBjbGlwIGFwcHJvcHJpYXRlbHkuCiAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShtaXAsCiAgICAgICAgICAgICAgLy8gQ29udmVydCBhYnMgdGlsZSBjb29yZHMgdG8gcmVsIHRpbGUgY29vcmRzLCB0aGVuICoyNTYgdG8gY29udmVydAogICAgICAgICAgICAgIC8vIHRvIHJlbCBwaXhlbCBjb29yZHMKICAgICAgICAgICAgICAodG9wTGVmdC54IC0gdGlsZVBvaW50LngpICogMjU2LCAodG9wTGVmdC55IC0gdGlsZVBvaW50LnkpICogMjU2LAogICAgICAgICAgICAgIC8vIEFsd2F5cyBkcmF3IHRoZSB3aG9sZSB0aGluZyBhbmQgbGV0IGNhbnZhcyBjbGlwOyBzbyB3ZSBjYW4ganVzdAogICAgICAgICAgICAgIC8vIGNvbnZlcnQgZnJvbSBzaXplIGluIHRpbGUgY29vcmRzIHN0cmFpZ2h0IHRvIHBpeGVscwogICAgICAgICAgICAgIGV4dGVudC54ICogMjU2LCBleHRlbnQueSAqIDI1Nik7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gVXNlIG1hbnVhbCBuZWFyZXN0LW5laWdoYm9yIGludGVycG9sYXRpb24KCiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgc291cmNlIGltYWdlIHBpeGVsIGNvb3JkaW5hdGVzIHRoYXQgY29ycmVzcG9uZCB3aXRoCiAgICAgICAgICAgIC8vIHRoZSB0b3AtbGVmdCBhbmQgYm90dG9tLXJpZ2h0IG9mIHRoaXMgdGlsZS4gKElmIHRoZSBzb3VyY2UgaW1hZ2UKICAgICAgICAgICAgLy8gb25seSBwYXJ0aWFsbHkgb3ZlcmxhcHMgdGhlIHRpbGUsIHdlIHVzZSBtYXgvbWluIHRvIGxpbWl0IHRoZQogICAgICAgICAgICAvLyBzb3VyY2VTdGFydC9FbmQgdG8gb25seSByZWZsZWN0IHRoZSBvdmVybGFwcGluZyBwb3J0aW9uLikKICAgICAgICAgICAgdmFyIHNvdXJjZVN0YXJ0ID0gewogICAgICAgICAgICAgIHg6IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKHRpbGVQb2ludC54IC0gdG9wTGVmdC54KSAqIGltZ1Jlcy54KSksCiAgICAgICAgICAgICAgeTogTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigodGlsZVBvaW50LnkgLSB0b3BMZWZ0LnkpICogaW1nUmVzLnkpKQogICAgICAgICAgICB9OwogICAgICAgICAgICB2YXIgc291cmNlRW5kID0gewogICAgICAgICAgICAgIHg6IE1hdGgubWluKHcsIE1hdGguY2VpbCgodGlsZVBvaW50LnggKyAxIC0gdG9wTGVmdC54KSAqIGltZ1Jlcy54KSksCiAgICAgICAgICAgICAgeTogTWF0aC5taW4oaCwgTWF0aC5jZWlsKCh0aWxlUG9pbnQueSArIDEgLSB0b3BMZWZ0LnkpICogaW1nUmVzLnkpKQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgLy8gVGhlIHNpemUsIGluIGRlc3QgcGl4ZWxzLCB0aGF0IGVhY2ggc291cmNlIHBpeGVsIHNob3VsZCBvY2N1cHkuCiAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgYmUgZ3JlYXRlciBvciBsZXNzIHRoYW4gMSAoZS5nLiBpZiB4IGFuZCB5IHJlc29sdXRpb24KICAgICAgICAgICAgLy8gYXJlIHZlcnkgZGlmZmVyZW50KS4KICAgICAgICAgICAgdmFyIHBpeGVsU2l6ZSA9IHsKICAgICAgICAgICAgICB4OiAyNTYgLyBpbWdSZXMueCwKICAgICAgICAgICAgICB5OiAyNTYgLyBpbWdSZXMueQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgLy8gRm9yIGVhY2ggcGl4ZWwgaW4gdGhlIHNvdXJjZSBpbWFnZSB0aGF0IG92ZXJsYXBzIHRoZSB0aWxlLi4uCiAgICAgICAgICAgIGZvciAodmFyIHJvdyA9IHNvdXJjZVN0YXJ0Lnk7IHJvdyA8IHNvdXJjZUVuZC55OyByb3crKykgewogICAgICAgICAgICAgIGZvciAodmFyIGNvbCA9IHNvdXJjZVN0YXJ0Lng7IGNvbCA8IHNvdXJjZUVuZC54OyBjb2wrKykgewogICAgICAgICAgICAgICAgLy8gLi4uZXh0cmFjdCB0aGUgcGl4ZWwgZGF0YS4uLgogICAgICAgICAgICAgICAgdmFyIGkgPSAocm93ICogdyArIGNvbCkgKiA0OwogICAgICAgICAgICAgICAgdmFyIHIgPSBpbWdEYXRhW2ldOwogICAgICAgICAgICAgICAgdmFyIGcgPSBpbWdEYXRhW2kgKyAxXTsKICAgICAgICAgICAgICAgIHZhciBiID0gaW1nRGF0YVtpICsgMl07CiAgICAgICAgICAgICAgICB2YXIgYSA9IGltZ0RhdGFbaSArIDNdOwogICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICJyZ2JhKCIgKyBbciwgZywgYiwgYSAvIDI1NV0uam9pbigiLCIpICsgIikiOwoKICAgICAgICAgICAgICAgIC8vIC4uLmNhbGN1bGF0ZSB0aGUgY29ycmVzcG9uZGluZyBwaXhlbCBjb29yZCBpbiB0aGUgZGVzdCBpbWFnZQogICAgICAgICAgICAgICAgLy8gd2hlcmUgaXQgc2hvdWxkIGJlIGRyYXduLi4uCiAgICAgICAgICAgICAgICB2YXIgcGl4ZWxQb3MgPSB7CiAgICAgICAgICAgICAgICAgIHg6IChjb2wgLyBpbWdSZXMueCArIHRvcExlZnQueCAtIHRpbGVQb2ludC54KSAqIDI1NiwKICAgICAgICAgICAgICAgICAgeTogKHJvdyAvIGltZ1Jlcy55ICsgdG9wTGVmdC55IC0gdGlsZVBvaW50LnkpICogMjU2CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIC8vIC4uLmFuZCBkcmF3IGEgcmVjdGFuZ2xlIHRoZXJlLgogICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KE1hdGgucm91bmQocGl4ZWxQb3MueCksIE1hdGgucm91bmQocGl4ZWxQb3MueSksCiAgICAgICAgICAgICAgICAvLyBMb29rcyBjcmF6eSwgYnV0IHRoaXMgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgcm91bmRpbmcgZnJvbQogICAgICAgICAgICAgICAgLy8gY2F1c2luZyBvdmVybGFwIGJldHdlZW4gdGhpcyByZWN0IGFuZCBpdHMgbmVpZ2hib3JzLiBUaGUKICAgICAgICAgICAgICAgIC8vIG1pbnVlbmQgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBuZXh0IHBpeGVsLCB3aGlsZSB0aGUKICAgICAgICAgICAgICAgIC8vIHN1YnRyYWhlbmQgaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHBpeGVsICh0byB0dXJuIGFuCiAgICAgICAgICAgICAgICAvLyBhYnNvbHV0ZSBjb29yZGluYXRlIHRvIGEgd2lkdGgvaGVpZ2h0KS4gWWVzLCBJIGhhZCB0byBsb29rCiAgICAgICAgICAgICAgICAvLyB1cCBtaW51ZW5kIGFuZCBzdWJ0cmFoZW5kLgogICAgICAgICAgICAgICAgTWF0aC5yb3VuZChwaXhlbFBvcy54ICsgcGl4ZWxTaXplLngpIC0gTWF0aC5yb3VuZChwaXhlbFBvcy54KSwgTWF0aC5yb3VuZChwaXhlbFBvcy55ICsgcGl4ZWxTaXplLnkpIC0gTWF0aC5yb3VuZChwaXhlbFBvcy55KSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSgpOwoKICAgICAgICBpZiAoKHR5cGVvZiBfcmV0NyA9PT0gInVuZGVmaW5lZCIgPyAidW5kZWZpbmVkIiA6IF90eXBlb2YoX3JldDcpKSA9PT0gIm9iamVjdCIpIHJldHVybiBfcmV0Ny52OwogICAgICB9IGZpbmFsbHkgewogICAgICAgIGRvbmUoZXJyb3IsIGNhbnZhcyk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIGNhbnZhczsKICB9OwoKICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihjYW52YXNUaWxlcywgImltYWdlIiwgbGF5ZXJJZCwgZ3JvdXApOwp9OwoKbWV0aG9kcy5yZW1vdmVJbWFnZSA9IGZ1bmN0aW9uIChsYXllcklkKSB7CiAgdGhpcy5sYXllck1hbmFnZXIucmVtb3ZlTGF5ZXIoImltYWdlIiwgbGF5ZXJJZCk7Cn07CgptZXRob2RzLmNsZWFySW1hZ2VzID0gZnVuY3Rpb24gKCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJpbWFnZSIpOwp9OwoKbWV0aG9kcy5hZGRNZWFzdXJlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAvLyBpZiBhIG1lYXN1cmVDb250cm9sIGFscmVhZHkgZXhpc3RzLCB0aGVuIHJlbW92ZSBpdCBhbmQKICAvLyAgIHJlcGxhY2Ugd2l0aCBhIG5ldyBvbmUKICBtZXRob2RzLnJlbW92ZU1lYXN1cmUuY2FsbCh0aGlzKTsKICB0aGlzLm1lYXN1cmVDb250cm9sID0gX2xlYWZsZXQyLmRlZmF1bHQuY29udHJvbC5tZWFzdXJlKG9wdGlvbnMpOwogIHRoaXMuYWRkQ29udHJvbCh0aGlzLm1lYXN1cmVDb250cm9sKTsKfTsKCm1ldGhvZHMucmVtb3ZlTWVhc3VyZSA9IGZ1bmN0aW9uICgpIHsKICBpZiAodGhpcy5tZWFzdXJlQ29udHJvbCkgewogICAgdGhpcy5yZW1vdmVDb250cm9sKHRoaXMubWVhc3VyZUNvbnRyb2wpOwogICAgdGhpcy5tZWFzdXJlQ29udHJvbCA9IG51bGw7CiAgfQp9OwoKbWV0aG9kcy5hZGRTZWxlY3QgPSBmdW5jdGlvbiAoY3RHcm91cCkgewogIHZhciBfdGhpczkgPSB0aGlzOwoKICBtZXRob2RzLnJlbW92ZVNlbGVjdC5jYWxsKHRoaXMpOwoKICB0aGlzLl9zZWxlY3RCdXR0b24gPSBfbGVhZmxldDIuZGVmYXVsdC5lYXN5QnV0dG9uKHsKICAgIHN0YXRlczogW3sKICAgICAgc3RhdGVOYW1lOiAic2VsZWN0LWluYWN0aXZlIiwKICAgICAgaWNvbjogImlvbi1xci1zY2FubmVyIiwKICAgICAgdGl0bGU6ICJNYWtlIGEgc2VsZWN0aW9uIiwKICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhidG4sIG1hcCkgewogICAgICAgIGJ0bi5zdGF0ZSgic2VsZWN0LWFjdGl2ZSIpOwogICAgICAgIF90aGlzOS5fbG9jYXRpb25GaWx0ZXIgPSBuZXcgX2xlYWZsZXQyLmRlZmF1bHQuTG9jYXRpb25GaWx0ZXIyKCk7CgogICAgICAgIGlmIChjdEdyb3VwKSB7CiAgICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgc2VsZWN0aW9uSGFuZGxlID0gbmV3IGdsb2JhbC5jcm9zc3RhbGsuU2VsZWN0aW9uSGFuZGxlKGN0R3JvdXApOwogICAgICAgICAgICBzZWxlY3Rpb25IYW5kbGUub24oImNoYW5nZSIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgaWYgKGUuc2VuZGVyICE9PSBzZWxlY3Rpb25IYW5kbGUpIHsKICAgICAgICAgICAgICAgIGlmIChfdGhpczkuX2xvY2F0aW9uRmlsdGVyKSB7CiAgICAgICAgICAgICAgICAgIF90aGlzOS5fbG9jYXRpb25GaWx0ZXIuZGlzYWJsZSgpOwogICAgICAgICAgICAgICAgICBidG4uc3RhdGUoInNlbGVjdC1pbmFjdGl2ZSIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcihlKSB7CiAgICAgICAgICAgICAgX3RoaXM5LmxheWVyTWFuYWdlci5icnVzaChfdGhpczkuX2xvY2F0aW9uRmlsdGVyLmdldEJvdW5kcygpLCB7IHNlbmRlcjogc2VsZWN0aW9uSGFuZGxlIH0pOwogICAgICAgICAgICB9OwogICAgICAgICAgICBfdGhpczkuX2xvY2F0aW9uRmlsdGVyLm9uKCJlbmFibGVkIiwgaGFuZGxlcik7CiAgICAgICAgICAgIF90aGlzOS5fbG9jYXRpb25GaWx0ZXIub24oImNoYW5nZSIsIGhhbmRsZXIpOwogICAgICAgICAgICBfdGhpczkuX2xvY2F0aW9uRmlsdGVyLm9uKCJkaXNhYmxlZCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICBzZWxlY3Rpb25IYW5kbGUuY2xvc2UoKTsKICAgICAgICAgICAgICBfdGhpczkuX2xvY2F0aW9uRmlsdGVyID0gbnVsbDsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KSgpOwogICAgICAgIH0KCiAgICAgICAgX3RoaXM5Ll9sb2NhdGlvbkZpbHRlci5hZGRUbyhtYXApOwogICAgICB9CiAgICB9LCB7CiAgICAgIHN0YXRlTmFtZTogInNlbGVjdC1hY3RpdmUiLAogICAgICBpY29uOiAiaW9uLWNsb3NlLXJvdW5kIiwKICAgICAgdGl0bGU6ICJEaXNtaXNzIHNlbGVjdGlvbiIsCiAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soYnRuLCBtYXApIHsKICAgICAgICBidG4uc3RhdGUoInNlbGVjdC1pbmFjdGl2ZSIpOwogICAgICAgIF90aGlzOS5fbG9jYXRpb25GaWx0ZXIuZGlzYWJsZSgpOwogICAgICAgIC8vIElmIGV4cGxpY2l0bHkgZGlzbWlzc2VkLCBjbGVhciB0aGUgY3Jvc3N0YWxrIHNlbGVjdGlvbnMKICAgICAgICBfdGhpczkubGF5ZXJNYW5hZ2VyLnVuYnJ1c2goKTsKICAgICAgfQogICAgfV0KICB9KTsKCiAgdGhpcy5fc2VsZWN0QnV0dG9uLmFkZFRvKHRoaXMpOwp9OwoKbWV0aG9kcy5yZW1vdmVTZWxlY3QgPSBmdW5jdGlvbiAoKSB7CiAgaWYgKHRoaXMuX2xvY2F0aW9uRmlsdGVyKSB7CiAgICB0aGlzLl9sb2NhdGlvbkZpbHRlci5kaXNhYmxlKCk7CiAgfQoKICBpZiAodGhpcy5fc2VsZWN0QnV0dG9uKSB7CiAgICB0aGlzLnJlbW92ZUNvbnRyb2wodGhpcy5fc2VsZWN0QnV0dG9uKTsKICAgIHRoaXMuX3NlbGVjdEJ1dHRvbiA9IG51bGw7CiAgfQp9OwoKCn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9KQp9LHsiLi9jbHVzdGVyLWxheWVyLXN0b3JlIjoxLCIuL2Nyc191dGlscyI6MywiLi9kYXRhZnJhbWUiOjQsIi4vZ2xvYmFsL2h0bWx3aWRnZXRzIjo2LCIuL2dsb2JhbC9qcXVlcnkiOjcsIi4vZ2xvYmFsL2xlYWZsZXQiOjgsIi4vZ2xvYmFsL3NoaW55IjoxMCwiLi9taXBtYXBwZXIiOjE0LCIuL3V0aWwiOjE1fV0sMTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7Cgp2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTsKCmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQoKLy8gVGhpcyBjbGFzcyBzaW11bGF0ZXMgYSBtaXBtYXAsIHdoaWNoIHNocmlua3MgaW1hZ2VzIGJ5IHBvd2VycyBvZiB0d28uIFRoaXMKLy8gc3RlcHdpc2UgcmVkdWN0aW9uIHJlc3VsdHMgaW4gInBpeGVsLXBlcmZlY3QgZG93bnNjYWxpbmciICh3aGVyZSBldmVyeQovLyBwaXhlbCBvZiB0aGUgb3JpZ2luYWwgaW1hZ2UgaGFzIHNvbWUgY29udHJpYnV0aW9uIHRvIHRoZSBkb3duc2NhbGVkIGltYWdlKQovLyBhcyBvcHBvc2VkIHRvIGEgc2luZ2xlLXN0ZXAgZG93bnNjYWxpbmcgd2hpY2ggd2lsbCBkaXNjYXJkIGEgbG90IG9mIGRhdGEKLy8gKGFuZCB3aXRoIHNwYXJzZSBpbWFnZXMgYXQgc21hbGwgc2NhbGVzIGNhbiBnaXZlIHZlcnkgc3VycHJpc2luZyByZXN1bHRzKS4KCnZhciBNaXBtYXBwZXIgPSBmdW5jdGlvbiAoKSB7CiAgZnVuY3Rpb24gTWlwbWFwcGVyKGltZykgewogICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1pcG1hcHBlcik7CgogICAgdGhpcy5fbGF5ZXJzID0gW2ltZ107CiAgfQoKICAvLyBUaGUgdmFyaW91cyBmdW5jdGlvbnMgb24gdGhpcyBjbGFzcyB0YWtlIGEgY2FsbGJhY2sgZnVuY3Rpb24gQlVUIE1BWSBPUiBNQVkKICAvLyBOT1QgYWN0dWFsbHkgYmVoYXZlIGFzeW5jaHJvbm91c2x5LgoKCiAgX2NyZWF0ZUNsYXNzKE1pcG1hcHBlciwgW3sKICAgIGtleTogImdldEJ5U2l6ZSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QnlTaXplKGRlc2lyZWRXaWR0aCwgZGVzaXJlZEhlaWdodCwgY2FsbGJhY2spIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKCiAgICAgIHZhciBpID0gMDsKICAgICAgdmFyIGxhc3RJbWcgPSB0aGlzLl9sYXllcnNbMF07CiAgICAgIHZhciB0ZXN0TmV4dCA9IGZ1bmN0aW9uIHRlc3ROZXh0KCkgewogICAgICAgIF90aGlzLmdldEJ5SW5kZXgoaSwgZnVuY3Rpb24gKGltZykgewogICAgICAgICAgLy8gSWYgY3VycmVudCBpbWFnZSBpcyBpbnZhbGlkIChpLmUuIHRvbyBzbWFsbCB0byBiZSByZW5kZXJlZCkgb3IKICAgICAgICAgIC8vIGl0J3Mgc21hbGxlciB0aGFuIHdoYXQgd2Ugd2FudGVkLCByZXR1cm4gdGhlIGxhc3Qga25vd24gZ29vZCBpbWFnZS4KICAgICAgICAgIGlmICghaW1nIHx8IGltZy53aWR0aCA8IGRlc2lyZWRXaWR0aCB8fCBpbWcuaGVpZ2h0IDwgZGVzaXJlZEhlaWdodCkgewogICAgICAgICAgICBjYWxsYmFjayhsYXN0SW1nKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGFzdEltZyA9IGltZzsKICAgICAgICAgICAgaSsrOwogICAgICAgICAgICB0ZXN0TmV4dCgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIHRlc3ROZXh0KCk7CiAgICB9CiAgfSwgewogICAga2V5OiAiZ2V0QnlJbmRleCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QnlJbmRleChpLCBjYWxsYmFjaykgewogICAgICB2YXIgX3RoaXMyID0gdGhpczsKCiAgICAgIGlmICh0aGlzLl9sYXllcnNbaV0pIHsKICAgICAgICBjYWxsYmFjayh0aGlzLl9sYXllcnNbaV0pOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgdGhpcy5nZXRCeUluZGV4KGkgLSAxLCBmdW5jdGlvbiAocHJldkltZykgewogICAgICAgIGlmICghcHJldkltZykgewogICAgICAgICAgLy8gcHJldkltZyBjb3VsZCBub3QgYmUgY2FsY3VsYXRlZCAodG9vIHNtYWxsLCBwb3NzaWJseSkKICAgICAgICAgIGNhbGxiYWNrKG51bGwpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAocHJldkltZy53aWR0aCA8IDIgfHwgcHJldkltZy5oZWlnaHQgPCAyKSB7CiAgICAgICAgICAvLyBDYW4ndCByZWR1Y2UgdGhpcyBpbWFnZSBhbnkgZnVydGhlcgogICAgICAgICAgY2FsbGJhY2sobnVsbCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC8vIElmIHJlZHVjZSBldmVyIGJlY29tZXMgdHJ1bHkgYXN5bmNocm9ub3VzLCB3ZSBzaG91bGQgc3R1ZmYgYSBwcm9taXNlIG9yCiAgICAgICAgLy8gc29tZXRoaW5nIGludG8gdGhpcy5fbGF5ZXJzW2ldIGJlZm9yZSBjYWxsaW5nIHRoaXMucmVkdWNlKCksIHRvIHByZXZlbnQKICAgICAgICAvLyByZWR1bmRhbnQgcmVkdWNlIG9wZXJhdGlvbnMgZnJvbSBoYXBwZW5pbmcuCiAgICAgICAgX3RoaXMyLnJlZHVjZShwcmV2SW1nLCBmdW5jdGlvbiAocmVkdWNlZEltZykgewogICAgICAgICAgX3RoaXMyLl9sYXllcnNbaV0gPSByZWR1Y2VkSW1nOwogICAgICAgICAgY2FsbGJhY2socmVkdWNlZEltZyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfQogIH0sIHsKICAgIGtleTogInJlZHVjZSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gcmVkdWNlKGltZywgY2FsbGJhY2spIHsKICAgICAgdmFyIGltZ0RhdGFDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKICAgICAgaW1nRGF0YUNhbnZhcy53aWR0aCA9IE1hdGguY2VpbChpbWcud2lkdGggLyAyKTsKICAgICAgaW1nRGF0YUNhbnZhcy5oZWlnaHQgPSBNYXRoLmNlaWwoaW1nLmhlaWdodCAvIDIpOwogICAgICBpbWdEYXRhQ2FudmFzLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nRGF0YUNhbnZhcyk7CiAgICAgIHRyeSB7CiAgICAgICAgdmFyIGltZ0RhdGFDdHggPSBpbWdEYXRhQ2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICAgICAgaW1nRGF0YUN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBpbWcud2lkdGggLyAyLCBpbWcuaGVpZ2h0IC8gMik7CiAgICAgICAgY2FsbGJhY2soaW1nRGF0YUNhbnZhcyk7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbWdEYXRhQ2FudmFzKTsKICAgICAgfQogICAgfQogIH1dKTsKCiAgcmV0dXJuIE1pcG1hcHBlcjsKfSgpOwoKZXhwb3J0cy5kZWZhdWx0ID0gTWlwbWFwcGVyOwoKCn0se31dLDE1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzLmxvZyA9IGxvZzsKZXhwb3J0cy5yZWN5Y2xlID0gcmVjeWNsZTsKZXhwb3J0cy5hc0FycmF5ID0gYXNBcnJheTsKZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHsKICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovCiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS5sb2cpIGNvbnNvbGUubG9nKG1lc3NhZ2UpOwogIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqLwp9CgpmdW5jdGlvbiByZWN5Y2xlKHZhbHVlcywgbGVuZ3RoLCBpblBsYWNlKSB7CiAgaWYgKGxlbmd0aCA9PT0gMCAmJiAhaW5QbGFjZSkgcmV0dXJuIFtdOwoKICBpZiAoISh2YWx1ZXMgaW5zdGFuY2VvZiBBcnJheSkpIHsKICAgIGlmIChpblBsYWNlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQ2FuJ3QgZG8gaW4tcGxhY2UgcmVjeWNsaW5nIG9mIGEgbm9uLUFycmF5IHZhbHVlIik7CiAgICB9CiAgICB2YWx1ZXMgPSBbdmFsdWVzXTsKICB9CiAgaWYgKHR5cGVvZiBsZW5ndGggPT09ICJ1bmRlZmluZWQiKSBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoOwoKICB2YXIgZGVzdCA9IGluUGxhY2UgPyB2YWx1ZXMgOiBbXTsKICB2YXIgb3JpZ0xlbmd0aCA9IHZhbHVlcy5sZW5ndGg7CiAgd2hpbGUgKGRlc3QubGVuZ3RoIDwgbGVuZ3RoKSB7CiAgICBkZXN0LnB1c2godmFsdWVzW2Rlc3QubGVuZ3RoICUgb3JpZ0xlbmd0aF0pOwogIH0KICBpZiAoZGVzdC5sZW5ndGggPiBsZW5ndGgpIHsKICAgIGRlc3Quc3BsaWNlKGxlbmd0aCwgZGVzdC5sZW5ndGggLSBsZW5ndGgpOwogIH0KICByZXR1cm4gZGVzdDsKfQoKZnVuY3Rpb24gYXNBcnJheSh2YWx1ZSkgewogIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSByZXR1cm4gdmFsdWU7ZWxzZSByZXR1cm4gW3ZhbHVlXTsKfQoKCn0se31dfSx7fSxbMTFdKTsK"></script>
<link href="data:text/css;charset=utf-8,div%2Ejsoneditor%2Cdiv%2Ejsoneditor%2Douter%7B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%7Ddiv%2Ejsoneditor%20input%7Bheight%3Aauto%3Bborder%3Ainherit%7Ddiv%2Ejsoneditor%20input%3Afocus%7Bborder%3Anone%21important%3Bbox%2Dshadow%3Anone%21important%7Ddiv%2Ejsoneditor%20table%7Bborder%2Dcollapse%3Acollapse%3Bwidth%3Aauto%7Ddiv%2Ejsoneditor%20td%2Cdiv%2Ejsoneditor%20th%7Bpadding%3A0%3Bdisplay%3Atable%2Dcell%3Btext%2Dalign%3Aleft%3Bvertical%2Dalign%3Ainherit%3Bborder%2Dradius%3Ainherit%7Ddiv%2Ejsoneditor%2Dfield%2Cdiv%2Ejsoneditor%2Dreadonly%2Cdiv%2Ejsoneditor%2Dvalue%7Bborder%3A1px%20solid%20transparent%3Bmin%2Dheight%3A16px%3Bmin%2Dwidth%3A32px%3Bpadding%3A2px%3Bmargin%3A1px%3Bword%2Dwrap%3Abreak%2Dword%3Bfloat%3Aleft%7Ddiv%2Ejsoneditor%2Dfield%20p%2Cdiv%2Ejsoneditor%2Dvalue%20p%7Bmargin%3A0%7Ddiv%2Ejsoneditor%2Dvalue%7Bword%2Dbreak%3Abreak%2Dword%7Ddiv%2Ejsoneditor%2Dreadonly%7Bmin%2Dwidth%3A16px%3Bcolor%3Agray%7Ddiv%2Ejsoneditor%2Dempty%7Bborder%2Dcolor%3A%23d3d3d3%3Bborder%2Dstyle%3Adashed%3Bborder%2Dradius%3A2px%7Ddiv%2Ejsoneditor%2Dfield%2Ejsoneditor%2Dempty%3A%3Aafter%2Cdiv%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Dempty%3A%3Aafter%7Bpointer%2Devents%3Anone%3Bcolor%3A%23d3d3d3%3Bfont%2Dsize%3A8pt%7Ddiv%2Ejsoneditor%2Dfield%2Ejsoneditor%2Dempty%3A%3Aafter%7Bcontent%3A%22field%22%7Ddiv%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Dempty%3A%3Aafter%7Bcontent%3A%22value%22%7Da%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Durl%2Cdiv%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Durl%7Bcolor%3Agreen%3Btext%2Ddecoration%3Aunderline%7Da%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Durl%7Bdisplay%3Ainline%2Dblock%3Bpadding%3A2px%3Bmargin%3A2px%7Da%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Durl%3Afocus%2Ca%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Durl%3Ahover%7Bcolor%3A%23ee422e%7Ddiv%2Ejsoneditor%20td%2Ejsoneditor%2Dseparator%7Bpadding%3A3px%200%3Bvertical%2Dalign%3Atop%3Bcolor%3Agray%7Ddiv%2Ejsoneditor%2Dfield%2Ejsoneditor%2Dhighlight%2Cdiv%2Ejsoneditor%2Dfield%5Bcontenteditable%3Dtrue%5D%3Afocus%2Cdiv%2Ejsoneditor%2Dfield%5Bcontenteditable%3Dtrue%5D%3Ahover%2Cdiv%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Dhighlight%2Cdiv%2Ejsoneditor%2Dvalue%5Bcontenteditable%3Dtrue%5D%3Afocus%2Cdiv%2Ejsoneditor%2Dvalue%5Bcontenteditable%3Dtrue%5D%3Ahover%7Bbackground%2Dcolor%3A%23FFFFAB%3Bborder%3A1px%20solid%20%23ff0%3Bborder%2Dradius%3A2px%7Ddiv%2Ejsoneditor%2Dfield%2Ejsoneditor%2Dhighlight%2Dactive%2Cdiv%2Ejsoneditor%2Dfield%2Ejsoneditor%2Dhighlight%2Dactive%3Afocus%2Cdiv%2Ejsoneditor%2Dfield%2Ejsoneditor%2Dhighlight%2Dactive%3Ahover%2Cdiv%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Dhighlight%2Dactive%2Cdiv%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Dhighlight%2Dactive%3Afocus%2Cdiv%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Dhighlight%2Dactive%3Ahover%7Bbackground%2Dcolor%3A%23fe0%3Bborder%3A1px%20solid%20%23ffc700%3Bborder%2Dradius%3A2px%7Ddiv%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Dstring%7Bcolor%3Agreen%7Ddiv%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Darray%2Cdiv%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Dobject%7Bmin%2Dwidth%3A16px%3Bcolor%3Agrey%7Ddiv%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Dnumber%7Bcolor%3A%23ee422e%7Ddiv%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Dboolean%7Bcolor%3A%23ff8c00%7Ddiv%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Dnull%7Bcolor%3A%23004ED0%7Ddiv%2Ejsoneditor%2Dvalue%2Ejsoneditor%2Dinvalid%7Bcolor%3A%23000%7Ddiv%2Ejsoneditor%2Dtree%20button%7Bwidth%3A24px%3Bheight%3A24px%3Bpadding%3A0%3Bmargin%3A0%3Bborder%3Anone%3Bcursor%3Apointer%3Bbackground%3Aurl%28data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8%2BDQo8c3ZnDQogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iDQogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIg0KICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIg0KICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCINCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIg0KICAgd2lkdGg9IjIxNiINCiAgIGhlaWdodD0iMTQ0Ig0KICAgaWQ9InN2ZzQxMzYiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJqc29uZWRpdG9yLWljb25zLnN2ZyI%2BDQogIDx0aXRsZQ0KICAgICBpZD0idGl0bGU2NTEyIj5KU09OIEVkaXRvciBJY29uczwvdGl0bGU%2BDQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE0MTQ4Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI%2BDQogICAgICAgIDxkYzpmb3JtYXQ%2BaW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU%2BSlNPTiBFZGl0b3IgSWNvbnM8L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0MTQ2IiAvPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMjgiDQogICAgIGlkPSJuYW1lZHZpZXc0MTQ0Ig0KICAgICBzaG93Z3JpZD0idHJ1ZSINCiAgICAgaW5rc2NhcGU6em9vbT0iNCINCiAgICAgaW5rc2NhcGU6Y3g9Ijk3LjIxNzI0OCINCiAgICAgaW5rc2NhcGU6Y3k9IjU5Ljk1MDIyNyINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmc0MTM2Ig0KICAgICBzaG93Z3VpZGVzPSJmYWxzZSINCiAgICAgYm9yZGVybGF5ZXI9ImZhbHNlIg0KICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0idHJ1ZSINCiAgICAgc2hvd2JvcmRlcj0idHJ1ZSI%2BDQogICAgPGlua3NjYXBlOmdyaWQNCiAgICAgICB0eXBlPSJ4eWdyaWQiDQogICAgICAgaWQ9ImdyaWQ0NjQwIg0KICAgICAgIGVtcHNwYWNpbmc9IjI0IiAvPg0KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4NCiAgPCEtLSBDcmVhdGVkIHdpdGggU1ZHLWVkaXQgLSBodHRwOi8vc3ZnLWVkaXQuZ29vZ2xlY29kZS5jb20vIC0tPg0KICA8Zw0KICAgICBpZD0iZzQzOTQiPg0KICAgIDxyZWN0DQogICAgICAgeD0iNCINCiAgICAgICB5PSI0Ig0KICAgICAgIHdpZHRoPSIxNiINCiAgICAgICBoZWlnaHQ9IjE2Ig0KICAgICAgIGlkPSJzdmdfMSINCiAgICAgICBzdHlsZT0iZmlsbDojMWFhZTFjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2VjM2YyOTtmaWxsLW9wYWNpdHk6MC45NDExNzY0NztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIyOC4wMDAwMDYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InN2Z18xLTciIC8%2BDQogICAgPHJlY3QNCiAgICAgICBpZD0icmVjdDQxNjUiDQogICAgICAgaGVpZ2h0PSIxNiINCiAgICAgICB3aWR0aD0iMTYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgeD0iNTIuMDAwMDA0Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIHg9IjE3Mi4wMDAwMiINCiAgICAgICB5PSIzLjk5OTk4NTIiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InJlY3Q0MTc1IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InJlY3Q0MTc1LTMiIC8%2BDQogICAgPGcNCiAgICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiDQogICAgICAgaWQ9Imc0Mjk5Ij4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEiDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk4NiINCiAgICAgICAgIHdpZHRoPSI5Ljk5OTk5MjQiDQogICAgICAgICB5PSIxMC45OTk5OTgiDQogICAgICAgICB4PSI3LjAwMDAwNDgiIC8%2BDQogICAgICA8cmVjdA0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICAgIGlkPSJzdmdfMS0xLTEiDQogICAgICAgICBoZWlnaHQ9IjkuOTk5OTgzOCINCiAgICAgICAgIHdpZHRoPSIxLjk5OTk5NTUiDQogICAgICAgICB5PSI3LjAwMDAxMTQiDQogICAgICAgICB4PSIxMS4wMDAwMDUiIC8%2BDQogICAgPC9nPg0KICAgIDxnDQogICAgICAgc3R5bGU9InN0cm9rZTpub25lIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLjcwNzEwNjc4LDE5LjAyOTQzNSwxMi4wMDAwMDEpIg0KICAgICAgIGlkPSJnNDI5OS0zIj4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEtMCINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTg2Ig0KICAgICAgICAgd2lkdGg9IjkuOTk5OTkyNCINCiAgICAgICAgIHk9IjEwLjk5OTk5OCINCiAgICAgICAgIHg9IjcuMDAwMDA0OCIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEtMS05Ig0KICAgICAgICAgaGVpZ2h0PSI5Ljk5OTk4MzgiDQogICAgICAgICB3aWR0aD0iMS45OTk5OTU1Ig0KICAgICAgICAgeT0iNy4wMDAwMTE0Ig0KICAgICAgICAgeD0iMTEuMDAwMDA1IiAvPg0KICAgIDwvZz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgeD0iNTUuMDAwMDA0Ig0KICAgICAgIHk9IjcuMDAwMDA0OCINCiAgICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICAgIGlkPSJzdmdfMS03LTUiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBpZD0icmVjdDQzNTQiDQogICAgICAgaGVpZ2h0PSI2Ljk5OTk5MDUiDQogICAgICAgd2lkdGg9IjYuOTk5OTkwOSINCiAgICAgICB5PSIxMC4wMDAwMSINCiAgICAgICB4PSI1OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojNGM0YzRjO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojM2M4MGRmO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAuOTQxMTc2NDciDQogICAgICAgeD0iNTguMDAwMDA0Ig0KICAgICAgIHk9IjEwLjAwMDAwNSINCiAgICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICAgIGlkPSJzdmdfMS03LTUtNyIgLz4NCiAgICA8Zw0KICAgICAgIGlkPSJnNDM3OCI%2BDQogICAgICA8cmVjdA0KICAgICAgICAgaWQ9InN2Z18xLTctNS0zIg0KICAgICAgICAgaGVpZ2h0PSIxLjk5OTk5NjUiDQogICAgICAgICB3aWR0aD0iNy45OTk5OTA5Ig0KICAgICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgICAgeD0iMTk4Ig0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgeD0iMTk4Ig0KICAgICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgICAgd2lkdGg9IjExLjk5OTk5NSINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTQ2Ig0KICAgICAgICAgaWQ9InJlY3Q0Mzc0IiAvPg0KICAgICAgPHJlY3QNCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgICB4PSIxOTgiDQogICAgICAgICB5PSIxNC45OTk5OTYiDQogICAgICAgICB3aWR0aD0iMy45OTk5OTI4Ig0KICAgICAgICAgaGVpZ2h0PSIxLjk5OTk5OTUiDQogICAgICAgICBpZD0icmVjdDQzNzYiIC8%2BDQogICAgPC9nPg0KICAgIDxnDQogICAgICAgaWQ9Imc0MzgzIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLC0yMy45OTk5OTUsMjMuOTk5OTk1KSI%2BDQogICAgICA8cmVjdA0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICAgIHg9IjE5OCINCiAgICAgICAgIHk9IjEwLjk5OTk5OSINCiAgICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk2NSINCiAgICAgICAgIGlkPSJyZWN0NDM4NSIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBpZD0icmVjdDQzODciDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk0NiINCiAgICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgICB5PSI3LjAwMDAwMDUiDQogICAgICAgICB4PSIxOTgiDQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgICAgPHJlY3QNCiAgICAgICAgIGlkPSJyZWN0NDM4OSINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTk1Ig0KICAgICAgICAgd2lkdGg9IjMuOTk5OTkyOCINCiAgICAgICAgIHk9IjE0Ljk5OTk5NiINCiAgICAgICAgIHg9IjE5OCINCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogICAgPC9nPg0KICAgIDxyZWN0DQogICAgICAgeT0iMy45OTk5MTk5Ig0KICAgICAgIHg9Ijc2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC00Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg0MzUxIg0KICAgICAgIGQ9Im0gODUuMTA0NDcsNi4wMTU3Mzg0IC0wLjAxNTYsMS40MDYzIGMgMy4wMjY2OSwtMC4yNDAyIDAuMzMwMDgsMy42NTA3OTk2IDIuNDg0MzgsNC41NzgwOTk2IC0yLjE4Njk0LDEuMDkzOCAwLjQ5MTkxLDQuOTA2OSAtMi40NTMxMyw0LjU3ODEgbCAtMC4wMTU2LDEuNDIxOSBjIDUuNzA4MjgsMC41NTkgMS4wMzI2NCwtNS4xMDA1IDQuNzAzMTMsLTUuMjY1NiBsIDAsLTEuNDA2MyBjIC0zLjYxMzAzLC0wLjAyNyAxLjExODkzLC01LjcwNjk5OTYgLTQuNzAzMTMsLTUuMzEyNDk5NiB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuMjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNDM1MS05Ig0KICAgICAgIGQ9Im0gODIuNzgxMjUsNS45OTg0Mzg0IDAuMDE1NiwxLjQwNjMgYyAtMy4wMjY2OCwtMC4yNDAyIC0wLjMzMDA3LDMuNjUwNjk5NiAtMi40ODQzNyw0LjU3ODA5OTYgMi4xODY5NCwxLjA5MzggLTAuNDkxOTIsNC45MDY5IDIuNDUzMTIsNC41NzgxIGwgMC4wMTU2LDEuNDIxOSBjIC01LjcwODI3LDAuNTU5IC0xLjAzMjYzLC01LjEwMDQgLTQuNzAzMTIsLTUuMjY1NiBsIDAsLTEuNDA2MyBjIDMuNjEzMDMsLTAuMDI3IC0xLjExODk0LC01LjcwNzA5OTYgNC43MDMxMiwtNS4zMTI0OTk2IHoiDQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogICAgPHJlY3QNCiAgICAgICB5PSIzLjk5OTkxOTkiDQogICAgICAgeD0iMTAwIg0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC0yNSINCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDI5ODciDQogICAgICAgZD0ibSAxMDMuNzE5LDUuNjcxOTM4NCAwLDEyLjcxODc5OTYgMy4wMzEyNSwwIDAsLTEuNTMxMyAtMS4zNDM3NSwwIDAsLTkuNjI0OTk5NiAxLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoMjk4Ny0xIg0KICAgICAgIGQ9Im0gMTEyLjIxODUsNS42NzIxOTg0IDAsMTIuNzE4Nzk5NiAtMy4wMzEyNSwwIDAsLTEuNTMxMyAxLjM0Mzc1LDAgMCwtOS42MjQ5OTk2IC0xLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHJlY3QNCiAgICAgICB5PSIzLjk5OTkxOTkiDQogICAgICAgeD0iMTI0Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC03MyINCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2MiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDM3ODAiDQogICAgICAgZD0ibSAxMjYuMjgyNCwxNy42MDI5MzggMS43ODk1NywwIDEuMTQxNDMsLTIuODY0MSA1LjY1MzY0LDAgMS4xNDg1NiwyLjg2NDEgMS43NjU2NSwwIC00Ljc4Njg3LC0xMS4xNjEwOTk2IC0xLjkxOTAzLDAgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDM3ODIiDQogICAgICAgZD0ibSAxMjkuNzI3MDQsMTMuNDc4ODM4IDQuNjA4NTIsMC4wMSAtMi4zMDQyNiwtNS41NDk3OTk2IHoiDQogICAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4NCiAgICA8cmVjdA0KICAgICAgIHk9IjMuOTk5OTE5OSINCiAgICAgICB4PSIxNDgiDQogICAgICAgaGVpZ2h0PSIxNiINCiAgICAgICB3aWR0aD0iMTYiDQogICAgICAgaWQ9InJlY3QzNzU0LTM1Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDUwMDgtMiINCiAgICAgICBkPSJtIDE1Ni40NzY1NSw1Ljg5MTczODQgMCwyLjE3OTcgMC40NjA5MywyLjM5ODM5OTYgMS44MjgxMywwIDAuMzk4NDQsLTIuMzk4Mzk5NiAwLC0yLjE3OTcgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1MDA4LTItOCINCiAgICAgICBkPSJtIDE1Mi41MTU2MSw1Ljg5MDYzODQgMCwyLjE3OTcgMC40NjA5NCwyLjM5ODM5OTYgMS44MjgxMiwwIDAuMzk4NDQsLTIuMzk4Mzk5NiAwLC0yLjE3OTcgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICA8L2c%2BDQogIDxyZWN0DQogICAgIHg9IjQiDQogICAgIHk9IjI3Ljk5OTk5NCINCiAgICAgd2lkdGg9IjE2Ig0KICAgICBoZWlnaHQ9IjE2Ig0KICAgICBpZD0icmVjdDQ0MzIiDQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjI4LjAwMDAwNiINCiAgICAgeT0iMjcuOTk5OTkiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgaWQ9InJlY3Q0NDM0IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ0MzYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIHdpZHRoPSIxNiINCiAgICAgeT0iMjcuOTk5OTkiDQogICAgIHg9IjUyLjAwMDAwNCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgeD0iMTcyLjAwMDAyIg0KICAgICB5PSIyNy45OTk5ODEiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgaWQ9InJlY3Q0NDQ2IiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSIxOTYiDQogICAgIHk9IjI3Ljk5OTk5Ig0KICAgICB3aWR0aD0iMTYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIGlkPSJyZWN0NDQ0OCIgLz4NCiAgPGcNCiAgICAgaWQ9Imc0NDY2Ig0KICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjMuOTk5OTk1KSI%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIGlkPSJyZWN0NDQ2OCINCiAgICAgICBoZWlnaHQ9IjEuOTk5OTk4NiINCiAgICAgICB3aWR0aD0iOS45OTk5OTI0Ig0KICAgICAgIHk9IjEwLjk5OTk5OCINCiAgICAgICB4PSI3LjAwMDAwNDgiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIGlkPSJyZWN0NDQ3MCINCiAgICAgICBoZWlnaHQ9IjkuOTk5OTgzOCINCiAgICAgICB3aWR0aD0iMS45OTk5OTU1Ig0KICAgICAgIHk9IjcuMDAwMDExNCINCiAgICAgICB4PSIxMS4wMDAwMDUiIC8%2BDQogIDwvZz4NCiAgPGcNCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC43MDcxMDY3OCwtMC43MDcxMDY3OCwwLjcwNzEwNjc4LDAuNzA3MTA2NzgsMTkuMDI5NDM1LDM1Ljk5OTk5NikiDQogICAgIGlkPSJnNDQ3MiINCiAgICAgc3R5bGU9InN0cm9rZTpub25lIj4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgaWQ9InJlY3Q0NDc0Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTg2Ig0KICAgICAgIHdpZHRoPSI5Ljk5OTk5MjQiDQogICAgICAgeT0iMTAuOTk5OTk4Ig0KICAgICAgIHg9IjcuMDAwMDA0OCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgaWQ9InJlY3Q0NDc2Ig0KICAgICAgIGhlaWdodD0iOS45OTk5ODM4Ig0KICAgICAgIHdpZHRoPSIxLjk5OTk5NTUiDQogICAgICAgeT0iNy4wMDAwMTE0Ig0KICAgICAgIHg9IjExLjAwMDAwNSIgLz4NCiAgPC9nPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSI1NS4wMDAwMDQiDQogICAgIHk9IjMxIg0KICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICBoZWlnaHQ9IjYuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NDc4IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ0ODAiDQogICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICB5PSIzNC4wMDAwMDgiDQogICAgIHg9IjU4Ig0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICB4PSI1OC4wMDAwMDQiDQogICAgIHk9IjM0LjAwMDAwNCINCiAgICAgd2lkdGg9IjYuOTk5OTkwOSINCiAgICAgaGVpZ2h0PSI2Ljk5OTk5MDUiDQogICAgIGlkPSJyZWN0NDQ4MiIgLz4NCiAgPGcNCiAgICAgaWQ9Imc0NDg0Ig0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDIzLjk5OTk5NSkiPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDg2Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTY1Ig0KICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5NDYiDQogICAgICAgaWQ9InJlY3Q0NDg4IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iMTQuOTk5OTk2Ig0KICAgICAgIHdpZHRoPSIzLjk5OTk5MjgiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q0NDkwIiAvPg0KICA8L2c%2BDQogIDxnDQogICAgIGlkPSJnNDQ5MiINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsLTIzLjk5OTk5NSw0Ny45OTk5OSkiPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5NjUiDQogICAgICAgaWQ9InJlY3Q0NDk0IiAvPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDk2Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTQ2Ig0KICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDk4Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSIzLjk5OTk5MjgiDQogICAgICAgeT0iMTQuOTk5OTk2Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICA8L2c%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiDQogICAgIGlkPSJyZWN0Mzc1NC04Ig0KICAgICB3aWR0aD0iMTYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIHg9Ijc2Ig0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gODUuMTA0NDgsMzAuMDE1NTM3IC0wLjAxNTYsMS40MDYzIGMgMy4wMjY2OCwtMC4yNDAyIDAuMzMwMDcsMy42NTA4IDIuNDg0MzgsNC41NzgxIC0yLjE4Njk1LDEuMDkzOCAwLjQ5MTkxLDQuOTA2ODggLTIuNDUzMTMsNC41NzgwOCBsIC0wLjAxNTYsMS40MjE5IGMgNS43MDgyNywwLjU1OSAxLjAzMjYzLC01LjEwMDQ4IDQuNzAzMTMsLTUuMjY1NTggbCAwLC0xLjQwNjMgYyAtMy42MTMwNCwtMC4wMjcgMS4xMTg5MywtNS43MDcgLTQuNzAzMTMsLTUuMzEyNSB6Ig0KICAgICBpZD0icGF0aDQzNTEtMSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gODIuNzgxMjYsMjkuOTk4MjM3IDAuMDE1NiwxLjQwNjMgYyAtMy4wMjY2OCwtMC4yNDAyIC0wLjMzMDA4LDMuNjUwNyAtMi40ODQzOCw0LjU3ODEgMi4xODY5NCwxLjA5MzggLTAuNDkxOTEsNC45MDY4OCAyLjQ1MzEzLDQuNTc4MDggbCAwLjAxNTYsMS40MjE5IGMgLTUuNzA4MjgsMC41NTkgLTEuMDMyNjQsLTUuMTAwMzggLTQuNzAzMTMsLTUuMjY1NTggbCAwLC0xLjQwNjMgYyAzLjYxMzAzLC0wLjAyNyAtMS4xMTg5MywtNS43MDcxIDQuNzAzMTMsLTUuMzEyNSB6Ig0KICAgICBpZD0icGF0aDQzNTEtOS01Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBpZD0icmVjdDM3NTQtNjUiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgeD0iMTAwIg0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSINCiAgICAgZD0ibSAxMDMuNzE5LDI5LjY3MTkzNyAwLDEyLjcxODc4IDMuMDMxMjUsMCAwLC0xLjUzMTMgLTEuMzQzNzUsMCAwLC05LjYyNDk4IDEuMzc1LDAgMCwtMS41NjI1IHoiDQogICAgIGlkPSJwYXRoMjk4Ny04Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDExMi4yMTg1LDI5LjY3MTkzNyAwLDEyLjcxODc4IC0zLjAzMTI1LDAgMCwtMS41MzEzIDEuMzQzNzUsMCAwLC05LjYyNDk4IC0xLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICBpZD0icGF0aDI5ODctMS05Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBpZD0icmVjdDM3NTQtOTIiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgeD0iMTI0Ig0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSINCiAgICAgZD0ibSAxMjYuMjgyNCw0MS42MDI5MTcgMS43ODk1NywwIDEuMTQxNDMsLTIuODY0MDggNS42NTM2NCwwIDEuMTQ4NTYsMi44NjQwOCAxLjc2NTY1LDAgLTQuNzg2ODcsLTExLjE2MTA4IC0xLjkxOTAyLDAgeiINCiAgICAgaWQ9InBhdGgzNzgwLTkiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDEyOS43MjcwNCwzNy40Nzg4MzcgNC42MDg1MiwwLjAxIC0yLjMwNDI2LC01LjU0OTggeiINCiAgICAgaWQ9InBhdGgzNzgyLTIiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiDQogICAgIGlkPSJyZWN0Mzc1NC00NyINCiAgICAgd2lkdGg9IjE2Ig0KICAgICBoZWlnaHQ9IjE2Ig0KICAgICB4PSIxNDgiDQogICAgIHk9IjI3Ljk5OTkyIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDE1Ni40NzY1NiwyOS44OTE3MzcgMCwyLjE3OTcgMC40NjA5MywyLjM5ODQgMS44MjgxMywwIDAuMzk4NDQsLTIuMzk4NCAwLC0yLjE3OTcgeiINCiAgICAgaWQ9InBhdGg1MDA4LTItMSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDE1Mi41MTU2MiwyOS44OTA2MzcgMCwyLjE3OTcgMC40NjA5NCwyLjM5ODQgMS44MjgxMiwwIDAuMzk4NDQsLTIuMzk4NCAwLC0yLjE3OTcgeiINCiAgICAgaWQ9InBhdGg1MDA4LTItOC04Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTIiDQogICAgIGhlaWdodD0iMS45OTk5OTYxIg0KICAgICB3aWR0aD0iMTEuOTk5OTk2Ig0KICAgICB5PSI2NCINCiAgICAgeD0iNTQiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTItMiINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjUyIg0KICAgICB4PSI4MC4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iNTIiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjEiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iNTgiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjMiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDU2NSINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjU4Ig0KICAgICB4PSI4NS4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDU2NyINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjY0Ig0KICAgICB4PSI4MC4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iNjQiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjkiIC8%2BDQogIDxjaXJjbGUNCiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM0YzRjNGM7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpZD0icGF0aDQ1NzEiDQogICAgIGN4PSIxMTAuMDYwODEiDQogICAgIGN5PSI1Ny45MzkyMDkiDQogICAgIHI9IjQuNzQzODgzNiIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MC45ODQzMTM3MztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgeD0iMTE2LjY0NTY2Ig0KICAgICB5PSItMzEuNzk3NTIiDQogICAgIHdpZHRoPSI0LjIyOTcxMyINCiAgICAgaGVpZ2h0PSI2LjQwNTM4ODQiDQogICAgIGlkPSJyZWN0NDU2My0yIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Ik0gMTI1LDU2IDEzOC43NzAyNyw1Ni4wOTUgMTMyLDY0IFoiDQogICAgIGlkPSJwYXRoNDYxMyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIGlkPSJwYXRoNDYxNSINCiAgICAgZD0iTSAxNDksNjQgMTYyLjc3MDI3LDYzLjkwNSAxNTYsNTYgWiINCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eTowLjk4NDMxMzczO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSI1NCINCiAgICAgeT0iNTMiDQogICAgIHdpZHRoPSIxMS45OTk5OTYiDQogICAgIGhlaWdodD0iMS45OTk5OTYxIg0KICAgICBpZD0icmVjdDQ2MzgiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTItMjQiDQogICAgIGhlaWdodD0iMS45OTk5OTU3Ig0KICAgICB3aWR0aD0iMTIuOTk5OTkiDQogICAgIHk9Ii01NiINCiAgICAgeD0iNTMiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiIC8%2BDQogIDxyZWN0DQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjUzIg0KICAgICB5PSItNjYiDQogICAgIHdpZHRoPSIxMi45OTk5OSINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NTciDQogICAgIGlkPSJyZWN0NDY1NyIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NjU5Ig0KICAgICBoZWlnaHQ9IjAuOTk5OTkyOTEiDQogICAgIHdpZHRoPSIxMS45OTk5OTkiDQogICAgIHk9IjU3Ig0KICAgICB4PSI1NCINCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MC45ODQzMTM3MztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICB4PSI1NCINCiAgICAgeT0iODguMDAwMTIyIg0KICAgICB3aWR0aD0iMTEuOTk5OTk2Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk2MSINCiAgICAgaWQ9InJlY3Q0NjYxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iNzYuMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjYzIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NjUiDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI3Ni4wMDAxMjIiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NjciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI4Mi4wMDAxMjIiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iODIuMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjY5IiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iODguMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjcxIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NzMiDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI4OC4wMDAxMjIiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8Y2lyY2xlDQogICAgIHI9IjQuNzQzODgzNiINCiAgICAgY3k9IjgxLjkzOTMzMSINCiAgICAgY3g9IjExMC4wNjA4MSINCiAgICAgaWQ9ImNpcmNsZTQ2NzUiDQogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIg0KICAgICBpZD0icmVjdDQ2NzciDQogICAgIGhlaWdodD0iNi40MDUzODg0Ig0KICAgICB3aWR0aD0iNC4yMjk3MTMiDQogICAgIHk9Ii0xNC44MjY4MTYiDQogICAgIHg9IjEzMy42MTYzIg0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogIDxwYXRoDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgaWQ9InBhdGg0Njc5Ig0KICAgICBkPSJtIDEyNSw4MC4wMDAwMDUgMTMuNzcwMjcsMC4wOTQ5OSBMIDEzMiw4Ny45OTk5OTIgWiINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Ik0gMTQ5LDg4LjAwMDIgMTYyLjc3MDI3LDg3LjkwNTIgMTU2LDgwLjAwMDIgWiINCiAgICAgaWQ9InBhdGg0NjgxIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDY4MyINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NjEiDQogICAgIHdpZHRoPSIxMS45OTk5OTYiDQogICAgIHk9Ijc3LjAwMDEyMiINCiAgICAgeD0iNTQiDQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4NCiAgPHJlY3QNCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCwxLC0xLDAsMCwwKSINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICB4PSI3Ny4wMDAxMjIiDQogICAgIHk9Ii01NiINCiAgICAgd2lkdGg9IjEyLjk5OTk5Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk1NyINCiAgICAgaWQ9InJlY3Q0Njg1IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2ODciDQogICAgIGhlaWdodD0iMS45OTk5OTU3Ig0KICAgICB3aWR0aD0iMTIuOTk5OTkiDQogICAgIHk9Ii02NiINCiAgICAgeD0iNzcuMDAwMTIyIg0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgeD0iNTQiDQogICAgIHk9IjgxLjAwMDEyMiINCiAgICAgd2lkdGg9IjExLjk5OTk5OSINCiAgICAgaGVpZ2h0PSIwLjk5OTk5MjkxIg0KICAgICBpZD0icmVjdDQ2ODkiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xIg0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjE1Ljk5OTk5Ig0KICAgICB5PSIxMDEiDQogICAgIHg9Ijc2LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MC44MDAwMDAwNztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NzYxLTAiDQogICAgIGhlaWdodD0iMS45OTk5OTQ1Ig0KICAgICB3aWR0aD0iMTUuOTk5OTkiDQogICAgIHk9IjEwNSINCiAgICAgeD0iNzYuMDAwMDA4Ig0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eTowLjgwMDAwMDA3O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ3NjEtNyINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSI5Ig0KICAgICB5PSIxMDkiDQogICAgIHg9Ijc2LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MC44MDAwMDAwNztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NzYxLTEtMSINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSIxMiINCiAgICAgeT0iMTI1Ig0KICAgICB4PSI3Ni4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xLTEtNCINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSIxMCINCiAgICAgeT0iMTM3Ig0KICAgICB4PSI3Ni4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xLTEtNC00Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjEwIg0KICAgICB5PSIxMjkiDQogICAgIHg9IjgyIg0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eTowLjgwMDAwMDA3O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ3NjEtMS0xLTQtNC0zIg0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjkiDQogICAgIHk9IjEzMyINCiAgICAgeD0iODIiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjg7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDM2LjM5ODQzOCwxMDAuMDI1NCBjIC0wLjQyMzM2MiwtMC4wMTMgLTAuODQ2ODQ3LDAuMDEgLTEuMjY1NjI2LDAuMDYyIC0xLjY1NjU2MiwwLjIxOTYgLTMuMjQ0NTY3LDAuOTczOSAtNC41MDc4MTIsMi4yMjY2IEwgMjksMTAwLjU5OTEgbCAtMi4zMjQyMTksNy43MTI5IDcuODI2MTcyLC0xLjkwNjIgLTEuODA0Njg3LC0xLjkwNjMgYyAxLjU5NzcwMiwtMS41MzA4IDQuMDQ4NzA2LC0xLjg0NTMgNS45ODQzNzUsLTAuNzIwNyAxLjk3MTE2MiwxLjE0NTIgMi44ODE5NTQsMy4zOTc1IDIuMzA4NTkzLDUuNTUwOCAtMC41NzMzNjEsMi4xNTMzIC0yLjUzMzg2NSwzLjY5NTMgLTQuODMwMDc4LDMuNjk1MyBsIDAsMy4wNzQyIGMgMy41NTA3NTYsMCA2LjcxMDQ0MiwtMi40MTEzIDcuNjUwMzkxLC01Ljk0MTQgMC45Mzk5NDksLTMuNTMwMSAtMC42MTg0NjMsLTcuMjczNiAtMy43MTA5MzgsLTkuMDcwMyAtMS4xNTk2NzgsLTAuNjczOCAtMi40MzEwODcsLTEuMDIzMSAtMy43MDExNzEsLTEuMDYyNSB6Ig0KICAgICBpZD0icGF0aDQxMzgiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjg7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDU5LjcyMjY1Niw5OS45NjI5IGMgLTEuMjcwMDg0LDAuMDM5IC0yLjU0MTQ5MywwLjM4ODcgLTMuNzAxMTcyLDEuMDYyNSAtMy4wOTI0NzUsMS43OTY3IC00LjY1MDg4Niw1LjU0MDIgLTMuNzEwOTM3LDkuMDcwMyAwLjkzOTk0OSwzLjUzMDEgNC4wOTc2OCw1Ljk0MTQgNy42NDg0MzcsNS45NDE0IGwgMCwtMy4wNzQyIGMgLTIuMjk2MjE0LDAgLTQuMjU2NzE3LC0xLjU0MiAtNC44MzAwNzgsLTMuNjk1MyAtMC41NzMzNjEsLTIuMTUzMyAwLjMzNzQzMiwtNC40MDU2IDIuMzA4NTk0LC01LjU1MDggMS45MzU3MzEsLTEuMTI0NiA0LjM4ODYzLC0wLjgxMDIgNS45ODYzMjYsMC43MjA3IGwgLTEuODA2NjM4LDEuOTA2MyA3LjgyODEyOCwxLjkwNjIgLTIuMzI0MjIsLTcuNzEyOSAtMS42MjY5NiwxLjcxNjggYyAtMS4yNjMzOCwtMS4yNTMxIC0yLjg0ODkxNywtMi4wMDg4IC00LjUwNTg1NSwtMi4yMjg1IC0wLjQxODc3OCwtMC4wNTUgLTAuODQyMjYzLC0wLjA3NiAtMS4yNjU2MjUsLTAuMDYyIHoiDQogICAgIGlkPSJwYXRoNDEzOC0xIiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgZD0ibSAxMC41LDEwMCAwLDIgLTIuNDk5OTk5NiwwIEwgMTIsMTA3IGwgNCwtNSAtMi41LDAgMCwtMiAtMywwIHoiDQogICAgIGlkPSJwYXRoMzA1NS0wLTc3IiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDpub25lO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gNC45ODUwNTc0LDEwOC4wMTUgMTQuMDI5ODg1NiwtMC4wMyINCiAgICAgaWQ9InBhdGg1MjQ0LTUtMC01Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDpub25lO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gNC45ODQ5ODc0LDEzMi4wMTUgMTQuMDI5ODg2NiwtMC4wMyINCiAgICAgaWQ9InBhdGg1MjQ0LTUtMC01LTgiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjQ7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDM2LjM5ODQzOCwxMjMuOTYyOSBjIC0wLjQyMzM2MiwtMC4wMTMgLTAuODQ2ODQ3LDAuMDEgLTEuMjY1NjI2LDAuMDYyIC0xLjY1NjU2MiwwLjIxOTYgLTMuMjQ0NTY3LDAuOTczOSAtNC41MDc4MTIsMi4yMjY2IEwgMjksMTI0LjUzNjYgbCAtMi4zMjQyMTksNy43MTI5IDcuODI2MTcyLC0xLjkwNjIgLTEuODA0Njg3LC0xLjkwNjMgYyAxLjU5NzcwMiwtMS41MzA4IDQuMDQ4NzA2LC0xLjg0NTMgNS45ODQzNzUsLTAuNzIwNyAxLjk3MTE2MiwxLjE0NTMgMi44ODE5NTQsMy4zOTc1IDIuMzA4NTkzLDUuNTUwOCAtMC41NzMzNjEsMi4xNTMzIC0yLjUzMzg2NCwzLjY5NTMgLTQuODMwMDc4LDMuNjk1MyBsIDAsMy4wNzQyIGMgMy41NTA3NTcsMCA2LjcxMDQ0MiwtMi40MDkzIDcuNjUwMzkxLC01LjkzOTQgMC45Mzk5NDksLTMuNTMwMSAtMC42MTg0NjMsLTcuMjc1NiAtMy43MTA5MzgsLTkuMDcyMyAtMS4xNTk2NzgsLTAuNjczNyAtMi40MzEwODcsLTEuMDIzMSAtMy43MDExNzEsLTEuMDYyNSB6Ig0KICAgICBpZD0icGF0aDQxMzgtMTIiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjQ7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDU5LjcyMjY1NiwxMjMuOTYyOSBjIC0xLjI3MDA4NCwwLjAzOSAtMi41NDE0OTMsMC4zODg4IC0zLjcwMTE3MiwxLjA2MjUgLTMuMDkyNDc1LDEuNzk2NyAtNC42NTA4ODYsNS41NDIyIC0zLjcxMDkzNyw5LjA3MjMgMC45Mzk5NDksMy41MzAxIDQuMDk3NjgsNS45Mzk0IDcuNjQ4NDM3LDUuOTM5NCBsIDAsLTMuMDc0MiBjIC0yLjI5NjIxNCwwIC00LjI1NjcxNywtMS41NDIgLTQuODMwMDc4LC0zLjY5NTMgLTAuNTczMzYxLC0yLjE1MzMgMC4zMzc0MzIsLTQuNDA1NSAyLjMwODU5NCwtNS41NTA4IDEuOTM1NzMxLC0xLjEyNDYgNC4zODg2MywtMC44MTAyIDUuOTg2MzI2LDAuNzIwNyBsIC0xLjgwNjYzOCwxLjkwNjMgNy44MjgxMjgsMS45MDYyIC0yLjMyNDIyLC03LjcxMjkgLTEuNjI2OTYsMS43MTY4IGMgLTEuMjYzMzgsLTEuMjUzMSAtMi44NDg5MTcsLTIuMDA4OCAtNC41MDU4NTUsLTIuMjI4NSAtMC40MTg3NzgsLTAuMDU1IC0wLjg0MjI2MywtMC4wNzYgLTEuMjY1NjI1LC0wLjA2MiB6Ig0KICAgICBpZD0icGF0aDQxMzgtMS0zIiAvPg0KICA8cGF0aA0KICAgICBpZD0icGF0aDYxOTEiDQogICAgIGQ9Im0gMTAuNSwxMTYgMCwtMiAtMi40OTk5OTk2LDAgTCAxMiwxMDkgbCA0LDUgLTIuNSwwIDAsMiAtMywwIHoiDQogICAgIHN0eWxlPSJvcGFjaXR5OjAuODtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuOTY2O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgZD0ibSAxMC41LDEyOSAwLC0yIC0yLjQ5OTk5OTYsMCBMIDEyLDEyMiBsIDQsNSAtMi41LDAgMCwyIC0zLDAgeiINCiAgICAgaWQ9InBhdGg2MTkzIiAvPg0KICA8cGF0aA0KICAgICBpZD0icGF0aDYxOTUiDQogICAgIGQ9Im0gMTAuNSwxMzUgMCwyIC0yLjQ5OTk5OTYsMCBMIDEyLDE0MiBsIDQsLTUgLTIuNSwwIDAsLTIgLTMsMCB6Ig0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgPHBhdGgNCiAgICAgc29kaXBvZGk6dHlwZT0ic3RhciINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIGlkPSJwYXRoNDUwMCINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIHNvZGlwb2RpOmN4PSIxMS41NTU4MSINCiAgICAgc29kaXBvZGk6Y3k9IjYwLjA3MzI0MiINCiAgICAgc29kaXBvZGk6cjE9IjUuMTExNjEwNCINCiAgICAgc29kaXBvZGk6cjI9IjIuNTU1ODA1MiINCiAgICAgc29kaXBvZGk6YXJnMT0iMCINCiAgICAgc29kaXBvZGk6YXJnMj0iMS4wNDcxOTc2Ig0KICAgICBpbmtzY2FwZTpmbGF0c2lkZWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTpyb3VuZGVkPSIwIg0KICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIg0KICAgICBkPSJtIDE2LjY2NzQyLDYwLjA3MzI0MiAtMy44MzM3MDgsMi4yMTMzOTIgLTMuODMzNzA3MiwyLjIxMzM5MyAwLC00LjQyNjc4NSAwLC00LjQyNjc4NCAzLjgzMzcwODIsMi4yMTMzOTIgeiINCiAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSItMS4yNzc5MDI2IiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEuMjc3OTAyIg0KICAgICBkPSJtIC0zMS41MDAwMDQsNjAuMDczMjQyIC0zLjgzMzcwOCwyLjIxMzM5MiAtMy44MzM3MDcsMi4yMTMzOTMgMCwtNC40MjY3ODUgMCwtNC40MjY3ODQgMy44MzM3MDcsMi4yMTMzOTIgeiINCiAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgaW5rc2NhcGU6cm91bmRlZD0iMCINCiAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJmYWxzZSINCiAgICAgc29kaXBvZGk6YXJnMj0iMS4wNDcxOTc2Ig0KICAgICBzb2RpcG9kaTphcmcxPSIwIg0KICAgICBzb2RpcG9kaTpyMj0iMi41NTU4MDUyIg0KICAgICBzb2RpcG9kaTpyMT0iNS4xMTE2MTA0Ig0KICAgICBzb2RpcG9kaTpjeT0iNjAuMDczMjQyIg0KICAgICBzb2RpcG9kaTpjeD0iLTM2LjYxMTYxNCINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIGlkPSJwYXRoNDUwMiINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiIC8%2BDQogIDxwYXRoDQogICAgIGQ9Im0gMTYuNjY3NDIsNjAuMDczMjEyIC0zLjgzMzcwOCwyLjIxMzM5MiAtMy44MzM3MDcyLDIuMjEzMzkyIDAsLTQuNDI2Nzg0IDAsLTQuNDI2Nzg1IDMuODMzNzA4MiwyLjIxMzM5MiB6Ig0KICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIg0KICAgICBpbmtzY2FwZTpyb3VuZGVkPSIwIg0KICAgICBpbmtzY2FwZTpmbGF0c2lkZWQ9ImZhbHNlIg0KICAgICBzb2RpcG9kaTphcmcyPSIxLjA0NzE5NzYiDQogICAgIHNvZGlwb2RpOmFyZzE9IjAiDQogICAgIHNvZGlwb2RpOnIyPSIyLjU1NTgwNTIiDQogICAgIHNvZGlwb2RpOnIxPSI1LjExMTYxMDQiDQogICAgIHNvZGlwb2RpOmN5PSI2MC4wNzMyMTIiDQogICAgIHNvZGlwb2RpOmN4PSIxMS41NTU4MSINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIGlkPSJwYXRoNDUwNCINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDcyLjAwNzQsNzEuNzg3NykiDQogICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMS4yNzc5MDI5IiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii0xLjI3NzkwMjYiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsLTEsLTEsMCw5Niw5NikiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHN0eWxlPSJmaWxsOiM0ZDRkNGQ7ZmlsbC1vcGFjaXR5OjAuOTAxOTYwNzg7c3Ryb2tlOiNkM2QzZDM7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpZD0icGF0aDQ1MDYiDQogICAgIHNvZGlwb2RpOnNpZGVzPSIzIg0KICAgICBzb2RpcG9kaTpjeD0iMTEuNTU1ODEiDQogICAgIHNvZGlwb2RpOmN5PSI2MC4wNzMyMTIiDQogICAgIHNvZGlwb2RpOnIxPSI1LjExMTYxMDQiDQogICAgIHNvZGlwb2RpOnIyPSIyLjU1NTgwNTIiDQogICAgIHNvZGlwb2RpOmFyZzE9IjAiDQogICAgIHNvZGlwb2RpOmFyZzI9IjEuMDQ3MTk3NiINCiAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6cm91bmRlZD0iMCINCiAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgZD0ibSAxNi42Njc0Miw2MC4wNzMyMTIgLTMuODMzNzA4LDIuMjEzMzkyIC0zLjgzMzcwNzIsMi4yMTMzOTIgMCwtNC40MjY3ODQgMCwtNC40MjY3ODUgMy44MzM3MDgyLDIuMjEzMzkyIHoiIC8%2BDQogIDxwYXRoDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgaWQ9InBhdGg0NjE1LTUiDQogICAgIGQ9Im0gMTcxLjgyNTc0LDY1LjE3NDE5MyAxNi4zNDg1NCwwIC04LjE3NDI3LC0xMy4zNDg0NTQgeiINCiAgICAgc3R5bGU9ImZpbGw6I2ZiYjkxNztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZiYjkxNztzdHJva2Utd2lkdGg6MS42NTE2MTM5NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gMTc5LDU1IDAsNiAyLDAgMCwtNiINCiAgICAgaWQ9InBhdGg0MzAwIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiIC8%2BDQogIDxwYXRoDQogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgZD0ibSAxNzksNjIgMCwyIDIsMCAwLC0yIg0KICAgICBpZD0icGF0aDQzMDAtNiINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjIiAvPg0KPC9zdmc%2BDQo%3D%29%7Ddiv%2Ejsoneditor%2Dmode%2Dform%20tr%2Ejsoneditor%2Dexpandable%20td%2Ejsoneditor%2Dtree%2Cdiv%2Ejsoneditor%2Dmode%2Dview%20tr%2Ejsoneditor%2Dexpandable%20td%2Ejsoneditor%2Dtree%7Bcursor%3Apointer%7Ddiv%2Ejsoneditor%2Dtree%20button%2Ejsoneditor%2Dcollapsed%7Bbackground%2Dposition%3A0%20%2D48px%7Ddiv%2Ejsoneditor%2Dtree%20button%2Ejsoneditor%2Dexpanded%7Bbackground%2Dposition%3A0%20%2D72px%7Ddiv%2Ejsoneditor%2Dtree%20button%2Ejsoneditor%2Dcontextmenu%7Bbackground%2Dposition%3A%2D48px%20%2D72px%7Ddiv%2Ejsoneditor%2Dtree%20button%2Ejsoneditor%2Dcontextmenu%2Ejsoneditor%2Dselected%2Cdiv%2Ejsoneditor%2Dtree%20button%2Ejsoneditor%2Dcontextmenu%3Afocus%2Cdiv%2Ejsoneditor%2Dtree%20button%2Ejsoneditor%2Dcontextmenu%3Ahover%2Ctr%2Ejsoneditor%2Dselected%2Ejsoneditor%2Dfirst%20button%2Ejsoneditor%2Dcontextmenu%7Bbackground%2Dposition%3A%2D48px%20%2D48px%7Ddiv%2Ejsoneditor%2Dtree%20%3Afocus%7Boutline%3A0%7Ddiv%2Ejsoneditor%2Dtree%20button%3Afocus%7Bbackground%2Dcolor%3A%23f5f5f5%3Boutline%3A%23e5e5e5%20solid%201px%7Ddiv%2Ejsoneditor%2Dtree%20button%2Ejsoneditor%2Dinvisible%7Bvisibility%3Ahidden%3Bbackground%3A0%200%7Ddiv%2Ejsoneditor%7Bcolor%3A%231A1A1A%3Bborder%3A1px%20solid%20%233883fa%3Bbox%2Dsizing%3Aborder%2Dbox%3Bwidth%3A100%25%3Bheight%3A100%25%3Boverflow%3Ahidden%3Bposition%3Arelative%3Bpadding%3A0%3Bline%2Dheight%3A100%25%7Ddiv%2Ejsoneditor%2Dtree%20table%2Ejsoneditor%2Dtree%7Bborder%2Dcollapse%3Acollapse%3Bborder%2Dspacing%3A0%3Bwidth%3A100%25%3Bmargin%3A0%7Ddiv%2Ejsoneditor%2Douter%7Bwidth%3A100%25%3Bheight%3A100%25%3Bmargin%3A%2D35px%200%200%3Bpadding%3A35px%200%200%3Bbox%2Dsizing%3Aborder%2Dbox%7Ddiv%2Ejsoneditor%2Dtree%7Bwidth%3A100%25%3Bheight%3A100%25%3Bposition%3Arelative%3Boverflow%3Aauto%7Dtextarea%2Ejsoneditor%2Dtext%7Bwidth%3A100%25%3Bheight%3A100%25%3Bmargin%3A0%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%3Boutline%2Dwidth%3A0%3Bborder%3Anone%3Bbackground%2Dcolor%3A%23fff%3Bresize%3Anone%7Dtr%2Ejsoneditor%2Dhighlight%2Ctr%2Ejsoneditor%2Dselected%7Bbackground%2Dcolor%3A%23e6e6e6%7Dtr%2Ejsoneditor%2Dselected%20button%2Ejsoneditor%2Dcontextmenu%2Ctr%2Ejsoneditor%2Dselected%20button%2Ejsoneditor%2Ddragarea%7Bvisibility%3Ahidden%7Dtr%2Ejsoneditor%2Dselected%2Ejsoneditor%2Dfirst%20button%2Ejsoneditor%2Dcontextmenu%2Ctr%2Ejsoneditor%2Dselected%2Ejsoneditor%2Dfirst%20button%2Ejsoneditor%2Ddragarea%7Bvisibility%3Avisible%7Ddiv%2Ejsoneditor%2Dtree%20button%2Ejsoneditor%2Ddragarea%7Bbackground%3Aurl%28data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8%2BDQo8c3ZnDQogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iDQogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIg0KICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIg0KICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCINCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIg0KICAgd2lkdGg9IjIxNiINCiAgIGhlaWdodD0iMTQ0Ig0KICAgaWQ9InN2ZzQxMzYiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJqc29uZWRpdG9yLWljb25zLnN2ZyI%2BDQogIDx0aXRsZQ0KICAgICBpZD0idGl0bGU2NTEyIj5KU09OIEVkaXRvciBJY29uczwvdGl0bGU%2BDQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE0MTQ4Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI%2BDQogICAgICAgIDxkYzpmb3JtYXQ%2BaW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU%2BSlNPTiBFZGl0b3IgSWNvbnM8L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0MTQ2IiAvPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMjgiDQogICAgIGlkPSJuYW1lZHZpZXc0MTQ0Ig0KICAgICBzaG93Z3JpZD0idHJ1ZSINCiAgICAgaW5rc2NhcGU6em9vbT0iNCINCiAgICAgaW5rc2NhcGU6Y3g9Ijk3LjIxNzI0OCINCiAgICAgaW5rc2NhcGU6Y3k9IjU5Ljk1MDIyNyINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmc0MTM2Ig0KICAgICBzaG93Z3VpZGVzPSJmYWxzZSINCiAgICAgYm9yZGVybGF5ZXI9ImZhbHNlIg0KICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0idHJ1ZSINCiAgICAgc2hvd2JvcmRlcj0idHJ1ZSI%2BDQogICAgPGlua3NjYXBlOmdyaWQNCiAgICAgICB0eXBlPSJ4eWdyaWQiDQogICAgICAgaWQ9ImdyaWQ0NjQwIg0KICAgICAgIGVtcHNwYWNpbmc9IjI0IiAvPg0KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4NCiAgPCEtLSBDcmVhdGVkIHdpdGggU1ZHLWVkaXQgLSBodHRwOi8vc3ZnLWVkaXQuZ29vZ2xlY29kZS5jb20vIC0tPg0KICA8Zw0KICAgICBpZD0iZzQzOTQiPg0KICAgIDxyZWN0DQogICAgICAgeD0iNCINCiAgICAgICB5PSI0Ig0KICAgICAgIHdpZHRoPSIxNiINCiAgICAgICBoZWlnaHQ9IjE2Ig0KICAgICAgIGlkPSJzdmdfMSINCiAgICAgICBzdHlsZT0iZmlsbDojMWFhZTFjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2VjM2YyOTtmaWxsLW9wYWNpdHk6MC45NDExNzY0NztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIyOC4wMDAwMDYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InN2Z18xLTciIC8%2BDQogICAgPHJlY3QNCiAgICAgICBpZD0icmVjdDQxNjUiDQogICAgICAgaGVpZ2h0PSIxNiINCiAgICAgICB3aWR0aD0iMTYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgeD0iNTIuMDAwMDA0Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIHg9IjE3Mi4wMDAwMiINCiAgICAgICB5PSIzLjk5OTk4NTIiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InJlY3Q0MTc1IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InJlY3Q0MTc1LTMiIC8%2BDQogICAgPGcNCiAgICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiDQogICAgICAgaWQ9Imc0Mjk5Ij4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEiDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk4NiINCiAgICAgICAgIHdpZHRoPSI5Ljk5OTk5MjQiDQogICAgICAgICB5PSIxMC45OTk5OTgiDQogICAgICAgICB4PSI3LjAwMDAwNDgiIC8%2BDQogICAgICA8cmVjdA0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICAgIGlkPSJzdmdfMS0xLTEiDQogICAgICAgICBoZWlnaHQ9IjkuOTk5OTgzOCINCiAgICAgICAgIHdpZHRoPSIxLjk5OTk5NTUiDQogICAgICAgICB5PSI3LjAwMDAxMTQiDQogICAgICAgICB4PSIxMS4wMDAwMDUiIC8%2BDQogICAgPC9nPg0KICAgIDxnDQogICAgICAgc3R5bGU9InN0cm9rZTpub25lIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLjcwNzEwNjc4LDE5LjAyOTQzNSwxMi4wMDAwMDEpIg0KICAgICAgIGlkPSJnNDI5OS0zIj4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEtMCINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTg2Ig0KICAgICAgICAgd2lkdGg9IjkuOTk5OTkyNCINCiAgICAgICAgIHk9IjEwLjk5OTk5OCINCiAgICAgICAgIHg9IjcuMDAwMDA0OCIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEtMS05Ig0KICAgICAgICAgaGVpZ2h0PSI5Ljk5OTk4MzgiDQogICAgICAgICB3aWR0aD0iMS45OTk5OTU1Ig0KICAgICAgICAgeT0iNy4wMDAwMTE0Ig0KICAgICAgICAgeD0iMTEuMDAwMDA1IiAvPg0KICAgIDwvZz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgeD0iNTUuMDAwMDA0Ig0KICAgICAgIHk9IjcuMDAwMDA0OCINCiAgICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICAgIGlkPSJzdmdfMS03LTUiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBpZD0icmVjdDQzNTQiDQogICAgICAgaGVpZ2h0PSI2Ljk5OTk5MDUiDQogICAgICAgd2lkdGg9IjYuOTk5OTkwOSINCiAgICAgICB5PSIxMC4wMDAwMSINCiAgICAgICB4PSI1OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojNGM0YzRjO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojM2M4MGRmO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAuOTQxMTc2NDciDQogICAgICAgeD0iNTguMDAwMDA0Ig0KICAgICAgIHk9IjEwLjAwMDAwNSINCiAgICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICAgIGlkPSJzdmdfMS03LTUtNyIgLz4NCiAgICA8Zw0KICAgICAgIGlkPSJnNDM3OCI%2BDQogICAgICA8cmVjdA0KICAgICAgICAgaWQ9InN2Z18xLTctNS0zIg0KICAgICAgICAgaGVpZ2h0PSIxLjk5OTk5NjUiDQogICAgICAgICB3aWR0aD0iNy45OTk5OTA5Ig0KICAgICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgICAgeD0iMTk4Ig0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgeD0iMTk4Ig0KICAgICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgICAgd2lkdGg9IjExLjk5OTk5NSINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTQ2Ig0KICAgICAgICAgaWQ9InJlY3Q0Mzc0IiAvPg0KICAgICAgPHJlY3QNCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgICB4PSIxOTgiDQogICAgICAgICB5PSIxNC45OTk5OTYiDQogICAgICAgICB3aWR0aD0iMy45OTk5OTI4Ig0KICAgICAgICAgaGVpZ2h0PSIxLjk5OTk5OTUiDQogICAgICAgICBpZD0icmVjdDQzNzYiIC8%2BDQogICAgPC9nPg0KICAgIDxnDQogICAgICAgaWQ9Imc0MzgzIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLC0yMy45OTk5OTUsMjMuOTk5OTk1KSI%2BDQogICAgICA8cmVjdA0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICAgIHg9IjE5OCINCiAgICAgICAgIHk9IjEwLjk5OTk5OSINCiAgICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk2NSINCiAgICAgICAgIGlkPSJyZWN0NDM4NSIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBpZD0icmVjdDQzODciDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk0NiINCiAgICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgICB5PSI3LjAwMDAwMDUiDQogICAgICAgICB4PSIxOTgiDQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgICAgPHJlY3QNCiAgICAgICAgIGlkPSJyZWN0NDM4OSINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTk1Ig0KICAgICAgICAgd2lkdGg9IjMuOTk5OTkyOCINCiAgICAgICAgIHk9IjE0Ljk5OTk5NiINCiAgICAgICAgIHg9IjE5OCINCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogICAgPC9nPg0KICAgIDxyZWN0DQogICAgICAgeT0iMy45OTk5MTk5Ig0KICAgICAgIHg9Ijc2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC00Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg0MzUxIg0KICAgICAgIGQ9Im0gODUuMTA0NDcsNi4wMTU3Mzg0IC0wLjAxNTYsMS40MDYzIGMgMy4wMjY2OSwtMC4yNDAyIDAuMzMwMDgsMy42NTA3OTk2IDIuNDg0MzgsNC41NzgwOTk2IC0yLjE4Njk0LDEuMDkzOCAwLjQ5MTkxLDQuOTA2OSAtMi40NTMxMyw0LjU3ODEgbCAtMC4wMTU2LDEuNDIxOSBjIDUuNzA4MjgsMC41NTkgMS4wMzI2NCwtNS4xMDA1IDQuNzAzMTMsLTUuMjY1NiBsIDAsLTEuNDA2MyBjIC0zLjYxMzAzLC0wLjAyNyAxLjExODkzLC01LjcwNjk5OTYgLTQuNzAzMTMsLTUuMzEyNDk5NiB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuMjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNDM1MS05Ig0KICAgICAgIGQ9Im0gODIuNzgxMjUsNS45OTg0Mzg0IDAuMDE1NiwxLjQwNjMgYyAtMy4wMjY2OCwtMC4yNDAyIC0wLjMzMDA3LDMuNjUwNjk5NiAtMi40ODQzNyw0LjU3ODA5OTYgMi4xODY5NCwxLjA5MzggLTAuNDkxOTIsNC45MDY5IDIuNDUzMTIsNC41NzgxIGwgMC4wMTU2LDEuNDIxOSBjIC01LjcwODI3LDAuNTU5IC0xLjAzMjYzLC01LjEwMDQgLTQuNzAzMTIsLTUuMjY1NiBsIDAsLTEuNDA2MyBjIDMuNjEzMDMsLTAuMDI3IC0xLjExODk0LC01LjcwNzA5OTYgNC43MDMxMiwtNS4zMTI0OTk2IHoiDQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogICAgPHJlY3QNCiAgICAgICB5PSIzLjk5OTkxOTkiDQogICAgICAgeD0iMTAwIg0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC0yNSINCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDI5ODciDQogICAgICAgZD0ibSAxMDMuNzE5LDUuNjcxOTM4NCAwLDEyLjcxODc5OTYgMy4wMzEyNSwwIDAsLTEuNTMxMyAtMS4zNDM3NSwwIDAsLTkuNjI0OTk5NiAxLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoMjk4Ny0xIg0KICAgICAgIGQ9Im0gMTEyLjIxODUsNS42NzIxOTg0IDAsMTIuNzE4Nzk5NiAtMy4wMzEyNSwwIDAsLTEuNTMxMyAxLjM0Mzc1LDAgMCwtOS42MjQ5OTk2IC0xLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHJlY3QNCiAgICAgICB5PSIzLjk5OTkxOTkiDQogICAgICAgeD0iMTI0Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC03MyINCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2MiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDM3ODAiDQogICAgICAgZD0ibSAxMjYuMjgyNCwxNy42MDI5MzggMS43ODk1NywwIDEuMTQxNDMsLTIuODY0MSA1LjY1MzY0LDAgMS4xNDg1NiwyLjg2NDEgMS43NjU2NSwwIC00Ljc4Njg3LC0xMS4xNjEwOTk2IC0xLjkxOTAzLDAgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDM3ODIiDQogICAgICAgZD0ibSAxMjkuNzI3MDQsMTMuNDc4ODM4IDQuNjA4NTIsMC4wMSAtMi4zMDQyNiwtNS41NDk3OTk2IHoiDQogICAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4NCiAgICA8cmVjdA0KICAgICAgIHk9IjMuOTk5OTE5OSINCiAgICAgICB4PSIxNDgiDQogICAgICAgaGVpZ2h0PSIxNiINCiAgICAgICB3aWR0aD0iMTYiDQogICAgICAgaWQ9InJlY3QzNzU0LTM1Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDUwMDgtMiINCiAgICAgICBkPSJtIDE1Ni40NzY1NSw1Ljg5MTczODQgMCwyLjE3OTcgMC40NjA5MywyLjM5ODM5OTYgMS44MjgxMywwIDAuMzk4NDQsLTIuMzk4Mzk5NiAwLC0yLjE3OTcgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1MDA4LTItOCINCiAgICAgICBkPSJtIDE1Mi41MTU2MSw1Ljg5MDYzODQgMCwyLjE3OTcgMC40NjA5NCwyLjM5ODM5OTYgMS44MjgxMiwwIDAuMzk4NDQsLTIuMzk4Mzk5NiAwLC0yLjE3OTcgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICA8L2c%2BDQogIDxyZWN0DQogICAgIHg9IjQiDQogICAgIHk9IjI3Ljk5OTk5NCINCiAgICAgd2lkdGg9IjE2Ig0KICAgICBoZWlnaHQ9IjE2Ig0KICAgICBpZD0icmVjdDQ0MzIiDQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjI4LjAwMDAwNiINCiAgICAgeT0iMjcuOTk5OTkiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgaWQ9InJlY3Q0NDM0IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ0MzYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIHdpZHRoPSIxNiINCiAgICAgeT0iMjcuOTk5OTkiDQogICAgIHg9IjUyLjAwMDAwNCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgeD0iMTcyLjAwMDAyIg0KICAgICB5PSIyNy45OTk5ODEiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgaWQ9InJlY3Q0NDQ2IiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSIxOTYiDQogICAgIHk9IjI3Ljk5OTk5Ig0KICAgICB3aWR0aD0iMTYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIGlkPSJyZWN0NDQ0OCIgLz4NCiAgPGcNCiAgICAgaWQ9Imc0NDY2Ig0KICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjMuOTk5OTk1KSI%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIGlkPSJyZWN0NDQ2OCINCiAgICAgICBoZWlnaHQ9IjEuOTk5OTk4NiINCiAgICAgICB3aWR0aD0iOS45OTk5OTI0Ig0KICAgICAgIHk9IjEwLjk5OTk5OCINCiAgICAgICB4PSI3LjAwMDAwNDgiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIGlkPSJyZWN0NDQ3MCINCiAgICAgICBoZWlnaHQ9IjkuOTk5OTgzOCINCiAgICAgICB3aWR0aD0iMS45OTk5OTU1Ig0KICAgICAgIHk9IjcuMDAwMDExNCINCiAgICAgICB4PSIxMS4wMDAwMDUiIC8%2BDQogIDwvZz4NCiAgPGcNCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC43MDcxMDY3OCwtMC43MDcxMDY3OCwwLjcwNzEwNjc4LDAuNzA3MTA2NzgsMTkuMDI5NDM1LDM1Ljk5OTk5NikiDQogICAgIGlkPSJnNDQ3MiINCiAgICAgc3R5bGU9InN0cm9rZTpub25lIj4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgaWQ9InJlY3Q0NDc0Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTg2Ig0KICAgICAgIHdpZHRoPSI5Ljk5OTk5MjQiDQogICAgICAgeT0iMTAuOTk5OTk4Ig0KICAgICAgIHg9IjcuMDAwMDA0OCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgaWQ9InJlY3Q0NDc2Ig0KICAgICAgIGhlaWdodD0iOS45OTk5ODM4Ig0KICAgICAgIHdpZHRoPSIxLjk5OTk5NTUiDQogICAgICAgeT0iNy4wMDAwMTE0Ig0KICAgICAgIHg9IjExLjAwMDAwNSIgLz4NCiAgPC9nPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSI1NS4wMDAwMDQiDQogICAgIHk9IjMxIg0KICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICBoZWlnaHQ9IjYuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NDc4IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ0ODAiDQogICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICB5PSIzNC4wMDAwMDgiDQogICAgIHg9IjU4Ig0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICB4PSI1OC4wMDAwMDQiDQogICAgIHk9IjM0LjAwMDAwNCINCiAgICAgd2lkdGg9IjYuOTk5OTkwOSINCiAgICAgaGVpZ2h0PSI2Ljk5OTk5MDUiDQogICAgIGlkPSJyZWN0NDQ4MiIgLz4NCiAgPGcNCiAgICAgaWQ9Imc0NDg0Ig0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDIzLjk5OTk5NSkiPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDg2Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTY1Ig0KICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5NDYiDQogICAgICAgaWQ9InJlY3Q0NDg4IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iMTQuOTk5OTk2Ig0KICAgICAgIHdpZHRoPSIzLjk5OTk5MjgiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q0NDkwIiAvPg0KICA8L2c%2BDQogIDxnDQogICAgIGlkPSJnNDQ5MiINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsLTIzLjk5OTk5NSw0Ny45OTk5OSkiPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5NjUiDQogICAgICAgaWQ9InJlY3Q0NDk0IiAvPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDk2Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTQ2Ig0KICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDk4Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSIzLjk5OTk5MjgiDQogICAgICAgeT0iMTQuOTk5OTk2Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICA8L2c%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiDQogICAgIGlkPSJyZWN0Mzc1NC04Ig0KICAgICB3aWR0aD0iMTYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIHg9Ijc2Ig0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gODUuMTA0NDgsMzAuMDE1NTM3IC0wLjAxNTYsMS40MDYzIGMgMy4wMjY2OCwtMC4yNDAyIDAuMzMwMDcsMy42NTA4IDIuNDg0MzgsNC41NzgxIC0yLjE4Njk1LDEuMDkzOCAwLjQ5MTkxLDQuOTA2ODggLTIuNDUzMTMsNC41NzgwOCBsIC0wLjAxNTYsMS40MjE5IGMgNS43MDgyNywwLjU1OSAxLjAzMjYzLC01LjEwMDQ4IDQuNzAzMTMsLTUuMjY1NTggbCAwLC0xLjQwNjMgYyAtMy42MTMwNCwtMC4wMjcgMS4xMTg5MywtNS43MDcgLTQuNzAzMTMsLTUuMzEyNSB6Ig0KICAgICBpZD0icGF0aDQzNTEtMSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gODIuNzgxMjYsMjkuOTk4MjM3IDAuMDE1NiwxLjQwNjMgYyAtMy4wMjY2OCwtMC4yNDAyIC0wLjMzMDA4LDMuNjUwNyAtMi40ODQzOCw0LjU3ODEgMi4xODY5NCwxLjA5MzggLTAuNDkxOTEsNC45MDY4OCAyLjQ1MzEzLDQuNTc4MDggbCAwLjAxNTYsMS40MjE5IGMgLTUuNzA4MjgsMC41NTkgLTEuMDMyNjQsLTUuMTAwMzggLTQuNzAzMTMsLTUuMjY1NTggbCAwLC0xLjQwNjMgYyAzLjYxMzAzLC0wLjAyNyAtMS4xMTg5MywtNS43MDcxIDQuNzAzMTMsLTUuMzEyNSB6Ig0KICAgICBpZD0icGF0aDQzNTEtOS01Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBpZD0icmVjdDM3NTQtNjUiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgeD0iMTAwIg0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSINCiAgICAgZD0ibSAxMDMuNzE5LDI5LjY3MTkzNyAwLDEyLjcxODc4IDMuMDMxMjUsMCAwLC0xLjUzMTMgLTEuMzQzNzUsMCAwLC05LjYyNDk4IDEuMzc1LDAgMCwtMS41NjI1IHoiDQogICAgIGlkPSJwYXRoMjk4Ny04Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDExMi4yMTg1LDI5LjY3MTkzNyAwLDEyLjcxODc4IC0zLjAzMTI1LDAgMCwtMS41MzEzIDEuMzQzNzUsMCAwLC05LjYyNDk4IC0xLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICBpZD0icGF0aDI5ODctMS05Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBpZD0icmVjdDM3NTQtOTIiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgeD0iMTI0Ig0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSINCiAgICAgZD0ibSAxMjYuMjgyNCw0MS42MDI5MTcgMS43ODk1NywwIDEuMTQxNDMsLTIuODY0MDggNS42NTM2NCwwIDEuMTQ4NTYsMi44NjQwOCAxLjc2NTY1LDAgLTQuNzg2ODcsLTExLjE2MTA4IC0xLjkxOTAyLDAgeiINCiAgICAgaWQ9InBhdGgzNzgwLTkiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDEyOS43MjcwNCwzNy40Nzg4MzcgNC42MDg1MiwwLjAxIC0yLjMwNDI2LC01LjU0OTggeiINCiAgICAgaWQ9InBhdGgzNzgyLTIiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiDQogICAgIGlkPSJyZWN0Mzc1NC00NyINCiAgICAgd2lkdGg9IjE2Ig0KICAgICBoZWlnaHQ9IjE2Ig0KICAgICB4PSIxNDgiDQogICAgIHk9IjI3Ljk5OTkyIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDE1Ni40NzY1NiwyOS44OTE3MzcgMCwyLjE3OTcgMC40NjA5MywyLjM5ODQgMS44MjgxMywwIDAuMzk4NDQsLTIuMzk4NCAwLC0yLjE3OTcgeiINCiAgICAgaWQ9InBhdGg1MDA4LTItMSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDE1Mi41MTU2MiwyOS44OTA2MzcgMCwyLjE3OTcgMC40NjA5NCwyLjM5ODQgMS44MjgxMiwwIDAuMzk4NDQsLTIuMzk4NCAwLC0yLjE3OTcgeiINCiAgICAgaWQ9InBhdGg1MDA4LTItOC04Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTIiDQogICAgIGhlaWdodD0iMS45OTk5OTYxIg0KICAgICB3aWR0aD0iMTEuOTk5OTk2Ig0KICAgICB5PSI2NCINCiAgICAgeD0iNTQiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTItMiINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjUyIg0KICAgICB4PSI4MC4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iNTIiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjEiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iNTgiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjMiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDU2NSINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjU4Ig0KICAgICB4PSI4NS4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDU2NyINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjY0Ig0KICAgICB4PSI4MC4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iNjQiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjkiIC8%2BDQogIDxjaXJjbGUNCiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM0YzRjNGM7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpZD0icGF0aDQ1NzEiDQogICAgIGN4PSIxMTAuMDYwODEiDQogICAgIGN5PSI1Ny45MzkyMDkiDQogICAgIHI9IjQuNzQzODgzNiIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MC45ODQzMTM3MztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgeD0iMTE2LjY0NTY2Ig0KICAgICB5PSItMzEuNzk3NTIiDQogICAgIHdpZHRoPSI0LjIyOTcxMyINCiAgICAgaGVpZ2h0PSI2LjQwNTM4ODQiDQogICAgIGlkPSJyZWN0NDU2My0yIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Ik0gMTI1LDU2IDEzOC43NzAyNyw1Ni4wOTUgMTMyLDY0IFoiDQogICAgIGlkPSJwYXRoNDYxMyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIGlkPSJwYXRoNDYxNSINCiAgICAgZD0iTSAxNDksNjQgMTYyLjc3MDI3LDYzLjkwNSAxNTYsNTYgWiINCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eTowLjk4NDMxMzczO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSI1NCINCiAgICAgeT0iNTMiDQogICAgIHdpZHRoPSIxMS45OTk5OTYiDQogICAgIGhlaWdodD0iMS45OTk5OTYxIg0KICAgICBpZD0icmVjdDQ2MzgiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTItMjQiDQogICAgIGhlaWdodD0iMS45OTk5OTU3Ig0KICAgICB3aWR0aD0iMTIuOTk5OTkiDQogICAgIHk9Ii01NiINCiAgICAgeD0iNTMiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiIC8%2BDQogIDxyZWN0DQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjUzIg0KICAgICB5PSItNjYiDQogICAgIHdpZHRoPSIxMi45OTk5OSINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NTciDQogICAgIGlkPSJyZWN0NDY1NyIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NjU5Ig0KICAgICBoZWlnaHQ9IjAuOTk5OTkyOTEiDQogICAgIHdpZHRoPSIxMS45OTk5OTkiDQogICAgIHk9IjU3Ig0KICAgICB4PSI1NCINCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MC45ODQzMTM3MztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICB4PSI1NCINCiAgICAgeT0iODguMDAwMTIyIg0KICAgICB3aWR0aD0iMTEuOTk5OTk2Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk2MSINCiAgICAgaWQ9InJlY3Q0NjYxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iNzYuMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjYzIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NjUiDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI3Ni4wMDAxMjIiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NjciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI4Mi4wMDAxMjIiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iODIuMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjY5IiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iODguMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjcxIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NzMiDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI4OC4wMDAxMjIiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8Y2lyY2xlDQogICAgIHI9IjQuNzQzODgzNiINCiAgICAgY3k9IjgxLjkzOTMzMSINCiAgICAgY3g9IjExMC4wNjA4MSINCiAgICAgaWQ9ImNpcmNsZTQ2NzUiDQogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIg0KICAgICBpZD0icmVjdDQ2NzciDQogICAgIGhlaWdodD0iNi40MDUzODg0Ig0KICAgICB3aWR0aD0iNC4yMjk3MTMiDQogICAgIHk9Ii0xNC44MjY4MTYiDQogICAgIHg9IjEzMy42MTYzIg0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogIDxwYXRoDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgaWQ9InBhdGg0Njc5Ig0KICAgICBkPSJtIDEyNSw4MC4wMDAwMDUgMTMuNzcwMjcsMC4wOTQ5OSBMIDEzMiw4Ny45OTk5OTIgWiINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Ik0gMTQ5LDg4LjAwMDIgMTYyLjc3MDI3LDg3LjkwNTIgMTU2LDgwLjAwMDIgWiINCiAgICAgaWQ9InBhdGg0NjgxIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDY4MyINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NjEiDQogICAgIHdpZHRoPSIxMS45OTk5OTYiDQogICAgIHk9Ijc3LjAwMDEyMiINCiAgICAgeD0iNTQiDQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4NCiAgPHJlY3QNCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCwxLC0xLDAsMCwwKSINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICB4PSI3Ny4wMDAxMjIiDQogICAgIHk9Ii01NiINCiAgICAgd2lkdGg9IjEyLjk5OTk5Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk1NyINCiAgICAgaWQ9InJlY3Q0Njg1IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2ODciDQogICAgIGhlaWdodD0iMS45OTk5OTU3Ig0KICAgICB3aWR0aD0iMTIuOTk5OTkiDQogICAgIHk9Ii02NiINCiAgICAgeD0iNzcuMDAwMTIyIg0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgeD0iNTQiDQogICAgIHk9IjgxLjAwMDEyMiINCiAgICAgd2lkdGg9IjExLjk5OTk5OSINCiAgICAgaGVpZ2h0PSIwLjk5OTk5MjkxIg0KICAgICBpZD0icmVjdDQ2ODkiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xIg0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjE1Ljk5OTk5Ig0KICAgICB5PSIxMDEiDQogICAgIHg9Ijc2LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MC44MDAwMDAwNztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NzYxLTAiDQogICAgIGhlaWdodD0iMS45OTk5OTQ1Ig0KICAgICB3aWR0aD0iMTUuOTk5OTkiDQogICAgIHk9IjEwNSINCiAgICAgeD0iNzYuMDAwMDA4Ig0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eTowLjgwMDAwMDA3O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ3NjEtNyINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSI5Ig0KICAgICB5PSIxMDkiDQogICAgIHg9Ijc2LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MC44MDAwMDAwNztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NzYxLTEtMSINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSIxMiINCiAgICAgeT0iMTI1Ig0KICAgICB4PSI3Ni4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xLTEtNCINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSIxMCINCiAgICAgeT0iMTM3Ig0KICAgICB4PSI3Ni4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xLTEtNC00Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjEwIg0KICAgICB5PSIxMjkiDQogICAgIHg9IjgyIg0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eTowLjgwMDAwMDA3O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ3NjEtMS0xLTQtNC0zIg0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjkiDQogICAgIHk9IjEzMyINCiAgICAgeD0iODIiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjg7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDM2LjM5ODQzOCwxMDAuMDI1NCBjIC0wLjQyMzM2MiwtMC4wMTMgLTAuODQ2ODQ3LDAuMDEgLTEuMjY1NjI2LDAuMDYyIC0xLjY1NjU2MiwwLjIxOTYgLTMuMjQ0NTY3LDAuOTczOSAtNC41MDc4MTIsMi4yMjY2IEwgMjksMTAwLjU5OTEgbCAtMi4zMjQyMTksNy43MTI5IDcuODI2MTcyLC0xLjkwNjIgLTEuODA0Njg3LC0xLjkwNjMgYyAxLjU5NzcwMiwtMS41MzA4IDQuMDQ4NzA2LC0xLjg0NTMgNS45ODQzNzUsLTAuNzIwNyAxLjk3MTE2MiwxLjE0NTIgMi44ODE5NTQsMy4zOTc1IDIuMzA4NTkzLDUuNTUwOCAtMC41NzMzNjEsMi4xNTMzIC0yLjUzMzg2NSwzLjY5NTMgLTQuODMwMDc4LDMuNjk1MyBsIDAsMy4wNzQyIGMgMy41NTA3NTYsMCA2LjcxMDQ0MiwtMi40MTEzIDcuNjUwMzkxLC01Ljk0MTQgMC45Mzk5NDksLTMuNTMwMSAtMC42MTg0NjMsLTcuMjczNiAtMy43MTA5MzgsLTkuMDcwMyAtMS4xNTk2NzgsLTAuNjczOCAtMi40MzEwODcsLTEuMDIzMSAtMy43MDExNzEsLTEuMDYyNSB6Ig0KICAgICBpZD0icGF0aDQxMzgiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjg7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDU5LjcyMjY1Niw5OS45NjI5IGMgLTEuMjcwMDg0LDAuMDM5IC0yLjU0MTQ5MywwLjM4ODcgLTMuNzAxMTcyLDEuMDYyNSAtMy4wOTI0NzUsMS43OTY3IC00LjY1MDg4Niw1LjU0MDIgLTMuNzEwOTM3LDkuMDcwMyAwLjkzOTk0OSwzLjUzMDEgNC4wOTc2OCw1Ljk0MTQgNy42NDg0MzcsNS45NDE0IGwgMCwtMy4wNzQyIGMgLTIuMjk2MjE0LDAgLTQuMjU2NzE3LC0xLjU0MiAtNC44MzAwNzgsLTMuNjk1MyAtMC41NzMzNjEsLTIuMTUzMyAwLjMzNzQzMiwtNC40MDU2IDIuMzA4NTk0LC01LjU1MDggMS45MzU3MzEsLTEuMTI0NiA0LjM4ODYzLC0wLjgxMDIgNS45ODYzMjYsMC43MjA3IGwgLTEuODA2NjM4LDEuOTA2MyA3LjgyODEyOCwxLjkwNjIgLTIuMzI0MjIsLTcuNzEyOSAtMS42MjY5NiwxLjcxNjggYyAtMS4yNjMzOCwtMS4yNTMxIC0yLjg0ODkxNywtMi4wMDg4IC00LjUwNTg1NSwtMi4yMjg1IC0wLjQxODc3OCwtMC4wNTUgLTAuODQyMjYzLC0wLjA3NiAtMS4yNjU2MjUsLTAuMDYyIHoiDQogICAgIGlkPSJwYXRoNDEzOC0xIiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgZD0ibSAxMC41LDEwMCAwLDIgLTIuNDk5OTk5NiwwIEwgMTIsMTA3IGwgNCwtNSAtMi41LDAgMCwtMiAtMywwIHoiDQogICAgIGlkPSJwYXRoMzA1NS0wLTc3IiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDpub25lO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gNC45ODUwNTc0LDEwOC4wMTUgMTQuMDI5ODg1NiwtMC4wMyINCiAgICAgaWQ9InBhdGg1MjQ0LTUtMC01Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDpub25lO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gNC45ODQ5ODc0LDEzMi4wMTUgMTQuMDI5ODg2NiwtMC4wMyINCiAgICAgaWQ9InBhdGg1MjQ0LTUtMC01LTgiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjQ7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDM2LjM5ODQzOCwxMjMuOTYyOSBjIC0wLjQyMzM2MiwtMC4wMTMgLTAuODQ2ODQ3LDAuMDEgLTEuMjY1NjI2LDAuMDYyIC0xLjY1NjU2MiwwLjIxOTYgLTMuMjQ0NTY3LDAuOTczOSAtNC41MDc4MTIsMi4yMjY2IEwgMjksMTI0LjUzNjYgbCAtMi4zMjQyMTksNy43MTI5IDcuODI2MTcyLC0xLjkwNjIgLTEuODA0Njg3LC0xLjkwNjMgYyAxLjU5NzcwMiwtMS41MzA4IDQuMDQ4NzA2LC0xLjg0NTMgNS45ODQzNzUsLTAuNzIwNyAxLjk3MTE2MiwxLjE0NTMgMi44ODE5NTQsMy4zOTc1IDIuMzA4NTkzLDUuNTUwOCAtMC41NzMzNjEsMi4xNTMzIC0yLjUzMzg2NCwzLjY5NTMgLTQuODMwMDc4LDMuNjk1MyBsIDAsMy4wNzQyIGMgMy41NTA3NTcsMCA2LjcxMDQ0MiwtMi40MDkzIDcuNjUwMzkxLC01LjkzOTQgMC45Mzk5NDksLTMuNTMwMSAtMC42MTg0NjMsLTcuMjc1NiAtMy43MTA5MzgsLTkuMDcyMyAtMS4xNTk2NzgsLTAuNjczNyAtMi40MzEwODcsLTEuMDIzMSAtMy43MDExNzEsLTEuMDYyNSB6Ig0KICAgICBpZD0icGF0aDQxMzgtMTIiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjQ7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDU5LjcyMjY1NiwxMjMuOTYyOSBjIC0xLjI3MDA4NCwwLjAzOSAtMi41NDE0OTMsMC4zODg4IC0zLjcwMTE3MiwxLjA2MjUgLTMuMDkyNDc1LDEuNzk2NyAtNC42NTA4ODYsNS41NDIyIC0zLjcxMDkzNyw5LjA3MjMgMC45Mzk5NDksMy41MzAxIDQuMDk3NjgsNS45Mzk0IDcuNjQ4NDM3LDUuOTM5NCBsIDAsLTMuMDc0MiBjIC0yLjI5NjIxNCwwIC00LjI1NjcxNywtMS41NDIgLTQuODMwMDc4LC0zLjY5NTMgLTAuNTczMzYxLC0yLjE1MzMgMC4zMzc0MzIsLTQuNDA1NSAyLjMwODU5NCwtNS41NTA4IDEuOTM1NzMxLC0xLjEyNDYgNC4zODg2MywtMC44MTAyIDUuOTg2MzI2LDAuNzIwNyBsIC0xLjgwNjYzOCwxLjkwNjMgNy44MjgxMjgsMS45MDYyIC0yLjMyNDIyLC03LjcxMjkgLTEuNjI2OTYsMS43MTY4IGMgLTEuMjYzMzgsLTEuMjUzMSAtMi44NDg5MTcsLTIuMDA4OCAtNC41MDU4NTUsLTIuMjI4NSAtMC40MTg3NzgsLTAuMDU1IC0wLjg0MjI2MywtMC4wNzYgLTEuMjY1NjI1LC0wLjA2MiB6Ig0KICAgICBpZD0icGF0aDQxMzgtMS0zIiAvPg0KICA8cGF0aA0KICAgICBpZD0icGF0aDYxOTEiDQogICAgIGQ9Im0gMTAuNSwxMTYgMCwtMiAtMi40OTk5OTk2LDAgTCAxMiwxMDkgbCA0LDUgLTIuNSwwIDAsMiAtMywwIHoiDQogICAgIHN0eWxlPSJvcGFjaXR5OjAuODtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuOTY2O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgZD0ibSAxMC41LDEyOSAwLC0yIC0yLjQ5OTk5OTYsMCBMIDEyLDEyMiBsIDQsNSAtMi41LDAgMCwyIC0zLDAgeiINCiAgICAgaWQ9InBhdGg2MTkzIiAvPg0KICA8cGF0aA0KICAgICBpZD0icGF0aDYxOTUiDQogICAgIGQ9Im0gMTAuNSwxMzUgMCwyIC0yLjQ5OTk5OTYsMCBMIDEyLDE0MiBsIDQsLTUgLTIuNSwwIDAsLTIgLTMsMCB6Ig0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgPHBhdGgNCiAgICAgc29kaXBvZGk6dHlwZT0ic3RhciINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIGlkPSJwYXRoNDUwMCINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIHNvZGlwb2RpOmN4PSIxMS41NTU4MSINCiAgICAgc29kaXBvZGk6Y3k9IjYwLjA3MzI0MiINCiAgICAgc29kaXBvZGk6cjE9IjUuMTExNjEwNCINCiAgICAgc29kaXBvZGk6cjI9IjIuNTU1ODA1MiINCiAgICAgc29kaXBvZGk6YXJnMT0iMCINCiAgICAgc29kaXBvZGk6YXJnMj0iMS4wNDcxOTc2Ig0KICAgICBpbmtzY2FwZTpmbGF0c2lkZWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTpyb3VuZGVkPSIwIg0KICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIg0KICAgICBkPSJtIDE2LjY2NzQyLDYwLjA3MzI0MiAtMy44MzM3MDgsMi4yMTMzOTIgLTMuODMzNzA3MiwyLjIxMzM5MyAwLC00LjQyNjc4NSAwLC00LjQyNjc4NCAzLjgzMzcwODIsMi4yMTMzOTIgeiINCiAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSItMS4yNzc5MDI2IiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEuMjc3OTAyIg0KICAgICBkPSJtIC0zMS41MDAwMDQsNjAuMDczMjQyIC0zLjgzMzcwOCwyLjIxMzM5MiAtMy44MzM3MDcsMi4yMTMzOTMgMCwtNC40MjY3ODUgMCwtNC40MjY3ODQgMy44MzM3MDcsMi4yMTMzOTIgeiINCiAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgaW5rc2NhcGU6cm91bmRlZD0iMCINCiAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJmYWxzZSINCiAgICAgc29kaXBvZGk6YXJnMj0iMS4wNDcxOTc2Ig0KICAgICBzb2RpcG9kaTphcmcxPSIwIg0KICAgICBzb2RpcG9kaTpyMj0iMi41NTU4MDUyIg0KICAgICBzb2RpcG9kaTpyMT0iNS4xMTE2MTA0Ig0KICAgICBzb2RpcG9kaTpjeT0iNjAuMDczMjQyIg0KICAgICBzb2RpcG9kaTpjeD0iLTM2LjYxMTYxNCINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIGlkPSJwYXRoNDUwMiINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiIC8%2BDQogIDxwYXRoDQogICAgIGQ9Im0gMTYuNjY3NDIsNjAuMDczMjEyIC0zLjgzMzcwOCwyLjIxMzM5MiAtMy44MzM3MDcyLDIuMjEzMzkyIDAsLTQuNDI2Nzg0IDAsLTQuNDI2Nzg1IDMuODMzNzA4MiwyLjIxMzM5MiB6Ig0KICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIg0KICAgICBpbmtzY2FwZTpyb3VuZGVkPSIwIg0KICAgICBpbmtzY2FwZTpmbGF0c2lkZWQ9ImZhbHNlIg0KICAgICBzb2RpcG9kaTphcmcyPSIxLjA0NzE5NzYiDQogICAgIHNvZGlwb2RpOmFyZzE9IjAiDQogICAgIHNvZGlwb2RpOnIyPSIyLjU1NTgwNTIiDQogICAgIHNvZGlwb2RpOnIxPSI1LjExMTYxMDQiDQogICAgIHNvZGlwb2RpOmN5PSI2MC4wNzMyMTIiDQogICAgIHNvZGlwb2RpOmN4PSIxMS41NTU4MSINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIGlkPSJwYXRoNDUwNCINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDcyLjAwNzQsNzEuNzg3NykiDQogICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMS4yNzc5MDI5IiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii0xLjI3NzkwMjYiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsLTEsLTEsMCw5Niw5NikiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHN0eWxlPSJmaWxsOiM0ZDRkNGQ7ZmlsbC1vcGFjaXR5OjAuOTAxOTYwNzg7c3Ryb2tlOiNkM2QzZDM7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpZD0icGF0aDQ1MDYiDQogICAgIHNvZGlwb2RpOnNpZGVzPSIzIg0KICAgICBzb2RpcG9kaTpjeD0iMTEuNTU1ODEiDQogICAgIHNvZGlwb2RpOmN5PSI2MC4wNzMyMTIiDQogICAgIHNvZGlwb2RpOnIxPSI1LjExMTYxMDQiDQogICAgIHNvZGlwb2RpOnIyPSIyLjU1NTgwNTIiDQogICAgIHNvZGlwb2RpOmFyZzE9IjAiDQogICAgIHNvZGlwb2RpOmFyZzI9IjEuMDQ3MTk3NiINCiAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6cm91bmRlZD0iMCINCiAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgZD0ibSAxNi42Njc0Miw2MC4wNzMyMTIgLTMuODMzNzA4LDIuMjEzMzkyIC0zLjgzMzcwNzIsMi4yMTMzOTIgMCwtNC40MjY3ODQgMCwtNC40MjY3ODUgMy44MzM3MDgyLDIuMjEzMzkyIHoiIC8%2BDQogIDxwYXRoDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgaWQ9InBhdGg0NjE1LTUiDQogICAgIGQ9Im0gMTcxLjgyNTc0LDY1LjE3NDE5MyAxNi4zNDg1NCwwIC04LjE3NDI3LC0xMy4zNDg0NTQgeiINCiAgICAgc3R5bGU9ImZpbGw6I2ZiYjkxNztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZiYjkxNztzdHJva2Utd2lkdGg6MS42NTE2MTM5NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gMTc5LDU1IDAsNiAyLDAgMCwtNiINCiAgICAgaWQ9InBhdGg0MzAwIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiIC8%2BDQogIDxwYXRoDQogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgZD0ibSAxNzksNjIgMCwyIDIsMCAwLC0yIg0KICAgICBpZD0icGF0aDQzMDAtNiINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjIiAvPg0KPC9zdmc%2BDQo%3D%29%20%2D72px%20%2D72px%3Bcursor%3Amove%7Ddiv%2Ejsoneditor%2Dtree%20button%2Ejsoneditor%2Ddragarea%3Afocus%2Cdiv%2Ejsoneditor%2Dtree%20button%2Ejsoneditor%2Ddragarea%3Ahover%2Ctr%2Ejsoneditor%2Dselected%2Ejsoneditor%2Dfirst%20button%2Ejsoneditor%2Ddragarea%7Bbackground%2Dposition%3A%2D72px%20%2D48px%7Ddiv%2Ejsoneditor%20td%2Cdiv%2Ejsoneditor%20th%2Cdiv%2Ejsoneditor%20tr%7Bpadding%3A0%3Bmargin%3A0%7Ddiv%2Ejsoneditor%20td%2Cdiv%2Ejsoneditor%20td%2Ejsoneditor%2Dtree%7Bvertical%2Dalign%3Atop%7D%2Ejsoneditor%2Dschema%2Derror%2Cdiv%2Ejsoneditor%20td%2Cdiv%2Ejsoneditor%20textarea%2Cdiv%2Ejsoneditor%20th%2Cdiv%2Ejsoneditor%2Dfield%2Cdiv%2Ejsoneditor%2Dvalue%7Bfont%2Dfamily%3Adroid%20sans%20mono%2Cconsolas%2Cmonospace%2Ccourier%20new%2Ccourier%2Csans%2Dserif%3Bfont%2Dsize%3A10pt%3Bcolor%3A%231A1A1A%7D%2Ejsoneditor%2Dschema%2Derror%7Bcursor%3Adefault%3Bdisplay%3Ainline%2Dblock%3Bheight%3A24px%3Bline%2Dheight%3A24px%3Bposition%3Arelative%3Btext%2Dalign%3Acenter%3Bwidth%3A24px%7Ddiv%2Ejsoneditor%2Dtree%20%2Ejsoneditor%2Dschema%2Derror%7Bwidth%3A24px%3Bheight%3A24px%3Bpadding%3A0%3Bmargin%3A0%204px%200%200%3Bbackground%3Aurl%28data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8%2BDQo8c3ZnDQogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iDQogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIg0KICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIg0KICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCINCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIg0KICAgd2lkdGg9IjIxNiINCiAgIGhlaWdodD0iMTQ0Ig0KICAgaWQ9InN2ZzQxMzYiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJqc29uZWRpdG9yLWljb25zLnN2ZyI%2BDQogIDx0aXRsZQ0KICAgICBpZD0idGl0bGU2NTEyIj5KU09OIEVkaXRvciBJY29uczwvdGl0bGU%2BDQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE0MTQ4Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI%2BDQogICAgICAgIDxkYzpmb3JtYXQ%2BaW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU%2BSlNPTiBFZGl0b3IgSWNvbnM8L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0MTQ2IiAvPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMjgiDQogICAgIGlkPSJuYW1lZHZpZXc0MTQ0Ig0KICAgICBzaG93Z3JpZD0idHJ1ZSINCiAgICAgaW5rc2NhcGU6em9vbT0iNCINCiAgICAgaW5rc2NhcGU6Y3g9Ijk3LjIxNzI0OCINCiAgICAgaW5rc2NhcGU6Y3k9IjU5Ljk1MDIyNyINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmc0MTM2Ig0KICAgICBzaG93Z3VpZGVzPSJmYWxzZSINCiAgICAgYm9yZGVybGF5ZXI9ImZhbHNlIg0KICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0idHJ1ZSINCiAgICAgc2hvd2JvcmRlcj0idHJ1ZSI%2BDQogICAgPGlua3NjYXBlOmdyaWQNCiAgICAgICB0eXBlPSJ4eWdyaWQiDQogICAgICAgaWQ9ImdyaWQ0NjQwIg0KICAgICAgIGVtcHNwYWNpbmc9IjI0IiAvPg0KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4NCiAgPCEtLSBDcmVhdGVkIHdpdGggU1ZHLWVkaXQgLSBodHRwOi8vc3ZnLWVkaXQuZ29vZ2xlY29kZS5jb20vIC0tPg0KICA8Zw0KICAgICBpZD0iZzQzOTQiPg0KICAgIDxyZWN0DQogICAgICAgeD0iNCINCiAgICAgICB5PSI0Ig0KICAgICAgIHdpZHRoPSIxNiINCiAgICAgICBoZWlnaHQ9IjE2Ig0KICAgICAgIGlkPSJzdmdfMSINCiAgICAgICBzdHlsZT0iZmlsbDojMWFhZTFjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2VjM2YyOTtmaWxsLW9wYWNpdHk6MC45NDExNzY0NztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIyOC4wMDAwMDYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InN2Z18xLTciIC8%2BDQogICAgPHJlY3QNCiAgICAgICBpZD0icmVjdDQxNjUiDQogICAgICAgaGVpZ2h0PSIxNiINCiAgICAgICB3aWR0aD0iMTYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgeD0iNTIuMDAwMDA0Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIHg9IjE3Mi4wMDAwMiINCiAgICAgICB5PSIzLjk5OTk4NTIiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InJlY3Q0MTc1IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InJlY3Q0MTc1LTMiIC8%2BDQogICAgPGcNCiAgICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiDQogICAgICAgaWQ9Imc0Mjk5Ij4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEiDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk4NiINCiAgICAgICAgIHdpZHRoPSI5Ljk5OTk5MjQiDQogICAgICAgICB5PSIxMC45OTk5OTgiDQogICAgICAgICB4PSI3LjAwMDAwNDgiIC8%2BDQogICAgICA8cmVjdA0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICAgIGlkPSJzdmdfMS0xLTEiDQogICAgICAgICBoZWlnaHQ9IjkuOTk5OTgzOCINCiAgICAgICAgIHdpZHRoPSIxLjk5OTk5NTUiDQogICAgICAgICB5PSI3LjAwMDAxMTQiDQogICAgICAgICB4PSIxMS4wMDAwMDUiIC8%2BDQogICAgPC9nPg0KICAgIDxnDQogICAgICAgc3R5bGU9InN0cm9rZTpub25lIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLjcwNzEwNjc4LDE5LjAyOTQzNSwxMi4wMDAwMDEpIg0KICAgICAgIGlkPSJnNDI5OS0zIj4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEtMCINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTg2Ig0KICAgICAgICAgd2lkdGg9IjkuOTk5OTkyNCINCiAgICAgICAgIHk9IjEwLjk5OTk5OCINCiAgICAgICAgIHg9IjcuMDAwMDA0OCIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEtMS05Ig0KICAgICAgICAgaGVpZ2h0PSI5Ljk5OTk4MzgiDQogICAgICAgICB3aWR0aD0iMS45OTk5OTU1Ig0KICAgICAgICAgeT0iNy4wMDAwMTE0Ig0KICAgICAgICAgeD0iMTEuMDAwMDA1IiAvPg0KICAgIDwvZz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgeD0iNTUuMDAwMDA0Ig0KICAgICAgIHk9IjcuMDAwMDA0OCINCiAgICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICAgIGlkPSJzdmdfMS03LTUiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBpZD0icmVjdDQzNTQiDQogICAgICAgaGVpZ2h0PSI2Ljk5OTk5MDUiDQogICAgICAgd2lkdGg9IjYuOTk5OTkwOSINCiAgICAgICB5PSIxMC4wMDAwMSINCiAgICAgICB4PSI1OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojNGM0YzRjO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojM2M4MGRmO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAuOTQxMTc2NDciDQogICAgICAgeD0iNTguMDAwMDA0Ig0KICAgICAgIHk9IjEwLjAwMDAwNSINCiAgICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICAgIGlkPSJzdmdfMS03LTUtNyIgLz4NCiAgICA8Zw0KICAgICAgIGlkPSJnNDM3OCI%2BDQogICAgICA8cmVjdA0KICAgICAgICAgaWQ9InN2Z18xLTctNS0zIg0KICAgICAgICAgaGVpZ2h0PSIxLjk5OTk5NjUiDQogICAgICAgICB3aWR0aD0iNy45OTk5OTA5Ig0KICAgICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgICAgeD0iMTk4Ig0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgeD0iMTk4Ig0KICAgICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgICAgd2lkdGg9IjExLjk5OTk5NSINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTQ2Ig0KICAgICAgICAgaWQ9InJlY3Q0Mzc0IiAvPg0KICAgICAgPHJlY3QNCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgICB4PSIxOTgiDQogICAgICAgICB5PSIxNC45OTk5OTYiDQogICAgICAgICB3aWR0aD0iMy45OTk5OTI4Ig0KICAgICAgICAgaGVpZ2h0PSIxLjk5OTk5OTUiDQogICAgICAgICBpZD0icmVjdDQzNzYiIC8%2BDQogICAgPC9nPg0KICAgIDxnDQogICAgICAgaWQ9Imc0MzgzIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLC0yMy45OTk5OTUsMjMuOTk5OTk1KSI%2BDQogICAgICA8cmVjdA0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICAgIHg9IjE5OCINCiAgICAgICAgIHk9IjEwLjk5OTk5OSINCiAgICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk2NSINCiAgICAgICAgIGlkPSJyZWN0NDM4NSIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBpZD0icmVjdDQzODciDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk0NiINCiAgICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgICB5PSI3LjAwMDAwMDUiDQogICAgICAgICB4PSIxOTgiDQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgICAgPHJlY3QNCiAgICAgICAgIGlkPSJyZWN0NDM4OSINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTk1Ig0KICAgICAgICAgd2lkdGg9IjMuOTk5OTkyOCINCiAgICAgICAgIHk9IjE0Ljk5OTk5NiINCiAgICAgICAgIHg9IjE5OCINCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogICAgPC9nPg0KICAgIDxyZWN0DQogICAgICAgeT0iMy45OTk5MTk5Ig0KICAgICAgIHg9Ijc2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC00Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg0MzUxIg0KICAgICAgIGQ9Im0gODUuMTA0NDcsNi4wMTU3Mzg0IC0wLjAxNTYsMS40MDYzIGMgMy4wMjY2OSwtMC4yNDAyIDAuMzMwMDgsMy42NTA3OTk2IDIuNDg0MzgsNC41NzgwOTk2IC0yLjE4Njk0LDEuMDkzOCAwLjQ5MTkxLDQuOTA2OSAtMi40NTMxMyw0LjU3ODEgbCAtMC4wMTU2LDEuNDIxOSBjIDUuNzA4MjgsMC41NTkgMS4wMzI2NCwtNS4xMDA1IDQuNzAzMTMsLTUuMjY1NiBsIDAsLTEuNDA2MyBjIC0zLjYxMzAzLC0wLjAyNyAxLjExODkzLC01LjcwNjk5OTYgLTQuNzAzMTMsLTUuMzEyNDk5NiB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuMjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNDM1MS05Ig0KICAgICAgIGQ9Im0gODIuNzgxMjUsNS45OTg0Mzg0IDAuMDE1NiwxLjQwNjMgYyAtMy4wMjY2OCwtMC4yNDAyIC0wLjMzMDA3LDMuNjUwNjk5NiAtMi40ODQzNyw0LjU3ODA5OTYgMi4xODY5NCwxLjA5MzggLTAuNDkxOTIsNC45MDY5IDIuNDUzMTIsNC41NzgxIGwgMC4wMTU2LDEuNDIxOSBjIC01LjcwODI3LDAuNTU5IC0xLjAzMjYzLC01LjEwMDQgLTQuNzAzMTIsLTUuMjY1NiBsIDAsLTEuNDA2MyBjIDMuNjEzMDMsLTAuMDI3IC0xLjExODk0LC01LjcwNzA5OTYgNC43MDMxMiwtNS4zMTI0OTk2IHoiDQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogICAgPHJlY3QNCiAgICAgICB5PSIzLjk5OTkxOTkiDQogICAgICAgeD0iMTAwIg0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC0yNSINCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDI5ODciDQogICAgICAgZD0ibSAxMDMuNzE5LDUuNjcxOTM4NCAwLDEyLjcxODc5OTYgMy4wMzEyNSwwIDAsLTEuNTMxMyAtMS4zNDM3NSwwIDAsLTkuNjI0OTk5NiAxLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoMjk4Ny0xIg0KICAgICAgIGQ9Im0gMTEyLjIxODUsNS42NzIxOTg0IDAsMTIuNzE4Nzk5NiAtMy4wMzEyNSwwIDAsLTEuNTMxMyAxLjM0Mzc1LDAgMCwtOS42MjQ5OTk2IC0xLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHJlY3QNCiAgICAgICB5PSIzLjk5OTkxOTkiDQogICAgICAgeD0iMTI0Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC03MyINCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2MiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDM3ODAiDQogICAgICAgZD0ibSAxMjYuMjgyNCwxNy42MDI5MzggMS43ODk1NywwIDEuMTQxNDMsLTIuODY0MSA1LjY1MzY0LDAgMS4xNDg1NiwyLjg2NDEgMS43NjU2NSwwIC00Ljc4Njg3LC0xMS4xNjEwOTk2IC0xLjkxOTAzLDAgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDM3ODIiDQogICAgICAgZD0ibSAxMjkuNzI3MDQsMTMuNDc4ODM4IDQuNjA4NTIsMC4wMSAtMi4zMDQyNiwtNS41NDk3OTk2IHoiDQogICAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4NCiAgICA8cmVjdA0KICAgICAgIHk9IjMuOTk5OTE5OSINCiAgICAgICB4PSIxNDgiDQogICAgICAgaGVpZ2h0PSIxNiINCiAgICAgICB3aWR0aD0iMTYiDQogICAgICAgaWQ9InJlY3QzNzU0LTM1Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDUwMDgtMiINCiAgICAgICBkPSJtIDE1Ni40NzY1NSw1Ljg5MTczODQgMCwyLjE3OTcgMC40NjA5MywyLjM5ODM5OTYgMS44MjgxMywwIDAuMzk4NDQsLTIuMzk4Mzk5NiAwLC0yLjE3OTcgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1MDA4LTItOCINCiAgICAgICBkPSJtIDE1Mi41MTU2MSw1Ljg5MDYzODQgMCwyLjE3OTcgMC40NjA5NCwyLjM5ODM5OTYgMS44MjgxMiwwIDAuMzk4NDQsLTIuMzk4Mzk5NiAwLC0yLjE3OTcgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICA8L2c%2BDQogIDxyZWN0DQogICAgIHg9IjQiDQogICAgIHk9IjI3Ljk5OTk5NCINCiAgICAgd2lkdGg9IjE2Ig0KICAgICBoZWlnaHQ9IjE2Ig0KICAgICBpZD0icmVjdDQ0MzIiDQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjI4LjAwMDAwNiINCiAgICAgeT0iMjcuOTk5OTkiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgaWQ9InJlY3Q0NDM0IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ0MzYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIHdpZHRoPSIxNiINCiAgICAgeT0iMjcuOTk5OTkiDQogICAgIHg9IjUyLjAwMDAwNCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgeD0iMTcyLjAwMDAyIg0KICAgICB5PSIyNy45OTk5ODEiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgaWQ9InJlY3Q0NDQ2IiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSIxOTYiDQogICAgIHk9IjI3Ljk5OTk5Ig0KICAgICB3aWR0aD0iMTYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIGlkPSJyZWN0NDQ0OCIgLz4NCiAgPGcNCiAgICAgaWQ9Imc0NDY2Ig0KICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjMuOTk5OTk1KSI%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIGlkPSJyZWN0NDQ2OCINCiAgICAgICBoZWlnaHQ9IjEuOTk5OTk4NiINCiAgICAgICB3aWR0aD0iOS45OTk5OTI0Ig0KICAgICAgIHk9IjEwLjk5OTk5OCINCiAgICAgICB4PSI3LjAwMDAwNDgiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIGlkPSJyZWN0NDQ3MCINCiAgICAgICBoZWlnaHQ9IjkuOTk5OTgzOCINCiAgICAgICB3aWR0aD0iMS45OTk5OTU1Ig0KICAgICAgIHk9IjcuMDAwMDExNCINCiAgICAgICB4PSIxMS4wMDAwMDUiIC8%2BDQogIDwvZz4NCiAgPGcNCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC43MDcxMDY3OCwtMC43MDcxMDY3OCwwLjcwNzEwNjc4LDAuNzA3MTA2NzgsMTkuMDI5NDM1LDM1Ljk5OTk5NikiDQogICAgIGlkPSJnNDQ3MiINCiAgICAgc3R5bGU9InN0cm9rZTpub25lIj4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgaWQ9InJlY3Q0NDc0Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTg2Ig0KICAgICAgIHdpZHRoPSI5Ljk5OTk5MjQiDQogICAgICAgeT0iMTAuOTk5OTk4Ig0KICAgICAgIHg9IjcuMDAwMDA0OCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgaWQ9InJlY3Q0NDc2Ig0KICAgICAgIGhlaWdodD0iOS45OTk5ODM4Ig0KICAgICAgIHdpZHRoPSIxLjk5OTk5NTUiDQogICAgICAgeT0iNy4wMDAwMTE0Ig0KICAgICAgIHg9IjExLjAwMDAwNSIgLz4NCiAgPC9nPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSI1NS4wMDAwMDQiDQogICAgIHk9IjMxIg0KICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICBoZWlnaHQ9IjYuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NDc4IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ0ODAiDQogICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICB5PSIzNC4wMDAwMDgiDQogICAgIHg9IjU4Ig0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICB4PSI1OC4wMDAwMDQiDQogICAgIHk9IjM0LjAwMDAwNCINCiAgICAgd2lkdGg9IjYuOTk5OTkwOSINCiAgICAgaGVpZ2h0PSI2Ljk5OTk5MDUiDQogICAgIGlkPSJyZWN0NDQ4MiIgLz4NCiAgPGcNCiAgICAgaWQ9Imc0NDg0Ig0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDIzLjk5OTk5NSkiPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDg2Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTY1Ig0KICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5NDYiDQogICAgICAgaWQ9InJlY3Q0NDg4IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iMTQuOTk5OTk2Ig0KICAgICAgIHdpZHRoPSIzLjk5OTk5MjgiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q0NDkwIiAvPg0KICA8L2c%2BDQogIDxnDQogICAgIGlkPSJnNDQ5MiINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsLTIzLjk5OTk5NSw0Ny45OTk5OSkiPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5NjUiDQogICAgICAgaWQ9InJlY3Q0NDk0IiAvPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDk2Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTQ2Ig0KICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDk4Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSIzLjk5OTk5MjgiDQogICAgICAgeT0iMTQuOTk5OTk2Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICA8L2c%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiDQogICAgIGlkPSJyZWN0Mzc1NC04Ig0KICAgICB3aWR0aD0iMTYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIHg9Ijc2Ig0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gODUuMTA0NDgsMzAuMDE1NTM3IC0wLjAxNTYsMS40MDYzIGMgMy4wMjY2OCwtMC4yNDAyIDAuMzMwMDcsMy42NTA4IDIuNDg0MzgsNC41NzgxIC0yLjE4Njk1LDEuMDkzOCAwLjQ5MTkxLDQuOTA2ODggLTIuNDUzMTMsNC41NzgwOCBsIC0wLjAxNTYsMS40MjE5IGMgNS43MDgyNywwLjU1OSAxLjAzMjYzLC01LjEwMDQ4IDQuNzAzMTMsLTUuMjY1NTggbCAwLC0xLjQwNjMgYyAtMy42MTMwNCwtMC4wMjcgMS4xMTg5MywtNS43MDcgLTQuNzAzMTMsLTUuMzEyNSB6Ig0KICAgICBpZD0icGF0aDQzNTEtMSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gODIuNzgxMjYsMjkuOTk4MjM3IDAuMDE1NiwxLjQwNjMgYyAtMy4wMjY2OCwtMC4yNDAyIC0wLjMzMDA4LDMuNjUwNyAtMi40ODQzOCw0LjU3ODEgMi4xODY5NCwxLjA5MzggLTAuNDkxOTEsNC45MDY4OCAyLjQ1MzEzLDQuNTc4MDggbCAwLjAxNTYsMS40MjE5IGMgLTUuNzA4MjgsMC41NTkgLTEuMDMyNjQsLTUuMTAwMzggLTQuNzAzMTMsLTUuMjY1NTggbCAwLC0xLjQwNjMgYyAzLjYxMzAzLC0wLjAyNyAtMS4xMTg5MywtNS43MDcxIDQuNzAzMTMsLTUuMzEyNSB6Ig0KICAgICBpZD0icGF0aDQzNTEtOS01Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBpZD0icmVjdDM3NTQtNjUiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgeD0iMTAwIg0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSINCiAgICAgZD0ibSAxMDMuNzE5LDI5LjY3MTkzNyAwLDEyLjcxODc4IDMuMDMxMjUsMCAwLC0xLjUzMTMgLTEuMzQzNzUsMCAwLC05LjYyNDk4IDEuMzc1LDAgMCwtMS41NjI1IHoiDQogICAgIGlkPSJwYXRoMjk4Ny04Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDExMi4yMTg1LDI5LjY3MTkzNyAwLDEyLjcxODc4IC0zLjAzMTI1LDAgMCwtMS41MzEzIDEuMzQzNzUsMCAwLC05LjYyNDk4IC0xLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICBpZD0icGF0aDI5ODctMS05Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBpZD0icmVjdDM3NTQtOTIiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgeD0iMTI0Ig0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSINCiAgICAgZD0ibSAxMjYuMjgyNCw0MS42MDI5MTcgMS43ODk1NywwIDEuMTQxNDMsLTIuODY0MDggNS42NTM2NCwwIDEuMTQ4NTYsMi44NjQwOCAxLjc2NTY1LDAgLTQuNzg2ODcsLTExLjE2MTA4IC0xLjkxOTAyLDAgeiINCiAgICAgaWQ9InBhdGgzNzgwLTkiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDEyOS43MjcwNCwzNy40Nzg4MzcgNC42MDg1MiwwLjAxIC0yLjMwNDI2LC01LjU0OTggeiINCiAgICAgaWQ9InBhdGgzNzgyLTIiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiDQogICAgIGlkPSJyZWN0Mzc1NC00NyINCiAgICAgd2lkdGg9IjE2Ig0KICAgICBoZWlnaHQ9IjE2Ig0KICAgICB4PSIxNDgiDQogICAgIHk9IjI3Ljk5OTkyIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDE1Ni40NzY1NiwyOS44OTE3MzcgMCwyLjE3OTcgMC40NjA5MywyLjM5ODQgMS44MjgxMywwIDAuMzk4NDQsLTIuMzk4NCAwLC0yLjE3OTcgeiINCiAgICAgaWQ9InBhdGg1MDA4LTItMSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDE1Mi41MTU2MiwyOS44OTA2MzcgMCwyLjE3OTcgMC40NjA5NCwyLjM5ODQgMS44MjgxMiwwIDAuMzk4NDQsLTIuMzk4NCAwLC0yLjE3OTcgeiINCiAgICAgaWQ9InBhdGg1MDA4LTItOC04Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTIiDQogICAgIGhlaWdodD0iMS45OTk5OTYxIg0KICAgICB3aWR0aD0iMTEuOTk5OTk2Ig0KICAgICB5PSI2NCINCiAgICAgeD0iNTQiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTItMiINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjUyIg0KICAgICB4PSI4MC4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iNTIiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjEiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iNTgiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjMiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDU2NSINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjU4Ig0KICAgICB4PSI4NS4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDU2NyINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjY0Ig0KICAgICB4PSI4MC4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iNjQiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjkiIC8%2BDQogIDxjaXJjbGUNCiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM0YzRjNGM7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpZD0icGF0aDQ1NzEiDQogICAgIGN4PSIxMTAuMDYwODEiDQogICAgIGN5PSI1Ny45MzkyMDkiDQogICAgIHI9IjQuNzQzODgzNiIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MC45ODQzMTM3MztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgeD0iMTE2LjY0NTY2Ig0KICAgICB5PSItMzEuNzk3NTIiDQogICAgIHdpZHRoPSI0LjIyOTcxMyINCiAgICAgaGVpZ2h0PSI2LjQwNTM4ODQiDQogICAgIGlkPSJyZWN0NDU2My0yIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Ik0gMTI1LDU2IDEzOC43NzAyNyw1Ni4wOTUgMTMyLDY0IFoiDQogICAgIGlkPSJwYXRoNDYxMyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIGlkPSJwYXRoNDYxNSINCiAgICAgZD0iTSAxNDksNjQgMTYyLjc3MDI3LDYzLjkwNSAxNTYsNTYgWiINCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eTowLjk4NDMxMzczO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSI1NCINCiAgICAgeT0iNTMiDQogICAgIHdpZHRoPSIxMS45OTk5OTYiDQogICAgIGhlaWdodD0iMS45OTk5OTYxIg0KICAgICBpZD0icmVjdDQ2MzgiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTItMjQiDQogICAgIGhlaWdodD0iMS45OTk5OTU3Ig0KICAgICB3aWR0aD0iMTIuOTk5OTkiDQogICAgIHk9Ii01NiINCiAgICAgeD0iNTMiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiIC8%2BDQogIDxyZWN0DQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjUzIg0KICAgICB5PSItNjYiDQogICAgIHdpZHRoPSIxMi45OTk5OSINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NTciDQogICAgIGlkPSJyZWN0NDY1NyIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NjU5Ig0KICAgICBoZWlnaHQ9IjAuOTk5OTkyOTEiDQogICAgIHdpZHRoPSIxMS45OTk5OTkiDQogICAgIHk9IjU3Ig0KICAgICB4PSI1NCINCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MC45ODQzMTM3MztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICB4PSI1NCINCiAgICAgeT0iODguMDAwMTIyIg0KICAgICB3aWR0aD0iMTEuOTk5OTk2Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk2MSINCiAgICAgaWQ9InJlY3Q0NjYxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iNzYuMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjYzIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NjUiDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI3Ni4wMDAxMjIiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NjciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI4Mi4wMDAxMjIiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iODIuMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjY5IiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iODguMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjcxIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NzMiDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI4OC4wMDAxMjIiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8Y2lyY2xlDQogICAgIHI9IjQuNzQzODgzNiINCiAgICAgY3k9IjgxLjkzOTMzMSINCiAgICAgY3g9IjExMC4wNjA4MSINCiAgICAgaWQ9ImNpcmNsZTQ2NzUiDQogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIg0KICAgICBpZD0icmVjdDQ2NzciDQogICAgIGhlaWdodD0iNi40MDUzODg0Ig0KICAgICB3aWR0aD0iNC4yMjk3MTMiDQogICAgIHk9Ii0xNC44MjY4MTYiDQogICAgIHg9IjEzMy42MTYzIg0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogIDxwYXRoDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgaWQ9InBhdGg0Njc5Ig0KICAgICBkPSJtIDEyNSw4MC4wMDAwMDUgMTMuNzcwMjcsMC4wOTQ5OSBMIDEzMiw4Ny45OTk5OTIgWiINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Ik0gMTQ5LDg4LjAwMDIgMTYyLjc3MDI3LDg3LjkwNTIgMTU2LDgwLjAwMDIgWiINCiAgICAgaWQ9InBhdGg0NjgxIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDY4MyINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NjEiDQogICAgIHdpZHRoPSIxMS45OTk5OTYiDQogICAgIHk9Ijc3LjAwMDEyMiINCiAgICAgeD0iNTQiDQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4NCiAgPHJlY3QNCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCwxLC0xLDAsMCwwKSINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICB4PSI3Ny4wMDAxMjIiDQogICAgIHk9Ii01NiINCiAgICAgd2lkdGg9IjEyLjk5OTk5Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk1NyINCiAgICAgaWQ9InJlY3Q0Njg1IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2ODciDQogICAgIGhlaWdodD0iMS45OTk5OTU3Ig0KICAgICB3aWR0aD0iMTIuOTk5OTkiDQogICAgIHk9Ii02NiINCiAgICAgeD0iNzcuMDAwMTIyIg0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgeD0iNTQiDQogICAgIHk9IjgxLjAwMDEyMiINCiAgICAgd2lkdGg9IjExLjk5OTk5OSINCiAgICAgaGVpZ2h0PSIwLjk5OTk5MjkxIg0KICAgICBpZD0icmVjdDQ2ODkiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xIg0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjE1Ljk5OTk5Ig0KICAgICB5PSIxMDEiDQogICAgIHg9Ijc2LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MC44MDAwMDAwNztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NzYxLTAiDQogICAgIGhlaWdodD0iMS45OTk5OTQ1Ig0KICAgICB3aWR0aD0iMTUuOTk5OTkiDQogICAgIHk9IjEwNSINCiAgICAgeD0iNzYuMDAwMDA4Ig0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eTowLjgwMDAwMDA3O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ3NjEtNyINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSI5Ig0KICAgICB5PSIxMDkiDQogICAgIHg9Ijc2LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MC44MDAwMDAwNztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NzYxLTEtMSINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSIxMiINCiAgICAgeT0iMTI1Ig0KICAgICB4PSI3Ni4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xLTEtNCINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSIxMCINCiAgICAgeT0iMTM3Ig0KICAgICB4PSI3Ni4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xLTEtNC00Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjEwIg0KICAgICB5PSIxMjkiDQogICAgIHg9IjgyIg0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eTowLjgwMDAwMDA3O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ3NjEtMS0xLTQtNC0zIg0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjkiDQogICAgIHk9IjEzMyINCiAgICAgeD0iODIiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjg7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDM2LjM5ODQzOCwxMDAuMDI1NCBjIC0wLjQyMzM2MiwtMC4wMTMgLTAuODQ2ODQ3LDAuMDEgLTEuMjY1NjI2LDAuMDYyIC0xLjY1NjU2MiwwLjIxOTYgLTMuMjQ0NTY3LDAuOTczOSAtNC41MDc4MTIsMi4yMjY2IEwgMjksMTAwLjU5OTEgbCAtMi4zMjQyMTksNy43MTI5IDcuODI2MTcyLC0xLjkwNjIgLTEuODA0Njg3LC0xLjkwNjMgYyAxLjU5NzcwMiwtMS41MzA4IDQuMDQ4NzA2LC0xLjg0NTMgNS45ODQzNzUsLTAuNzIwNyAxLjk3MTE2MiwxLjE0NTIgMi44ODE5NTQsMy4zOTc1IDIuMzA4NTkzLDUuNTUwOCAtMC41NzMzNjEsMi4xNTMzIC0yLjUzMzg2NSwzLjY5NTMgLTQuODMwMDc4LDMuNjk1MyBsIDAsMy4wNzQyIGMgMy41NTA3NTYsMCA2LjcxMDQ0MiwtMi40MTEzIDcuNjUwMzkxLC01Ljk0MTQgMC45Mzk5NDksLTMuNTMwMSAtMC42MTg0NjMsLTcuMjczNiAtMy43MTA5MzgsLTkuMDcwMyAtMS4xNTk2NzgsLTAuNjczOCAtMi40MzEwODcsLTEuMDIzMSAtMy43MDExNzEsLTEuMDYyNSB6Ig0KICAgICBpZD0icGF0aDQxMzgiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjg7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDU5LjcyMjY1Niw5OS45NjI5IGMgLTEuMjcwMDg0LDAuMDM5IC0yLjU0MTQ5MywwLjM4ODcgLTMuNzAxMTcyLDEuMDYyNSAtMy4wOTI0NzUsMS43OTY3IC00LjY1MDg4Niw1LjU0MDIgLTMuNzEwOTM3LDkuMDcwMyAwLjkzOTk0OSwzLjUzMDEgNC4wOTc2OCw1Ljk0MTQgNy42NDg0MzcsNS45NDE0IGwgMCwtMy4wNzQyIGMgLTIuMjk2MjE0LDAgLTQuMjU2NzE3LC0xLjU0MiAtNC44MzAwNzgsLTMuNjk1MyAtMC41NzMzNjEsLTIuMTUzMyAwLjMzNzQzMiwtNC40MDU2IDIuMzA4NTk0LC01LjU1MDggMS45MzU3MzEsLTEuMTI0NiA0LjM4ODYzLC0wLjgxMDIgNS45ODYzMjYsMC43MjA3IGwgLTEuODA2NjM4LDEuOTA2MyA3LjgyODEyOCwxLjkwNjIgLTIuMzI0MjIsLTcuNzEyOSAtMS42MjY5NiwxLjcxNjggYyAtMS4yNjMzOCwtMS4yNTMxIC0yLjg0ODkxNywtMi4wMDg4IC00LjUwNTg1NSwtMi4yMjg1IC0wLjQxODc3OCwtMC4wNTUgLTAuODQyMjYzLC0wLjA3NiAtMS4yNjU2MjUsLTAuMDYyIHoiDQogICAgIGlkPSJwYXRoNDEzOC0xIiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgZD0ibSAxMC41LDEwMCAwLDIgLTIuNDk5OTk5NiwwIEwgMTIsMTA3IGwgNCwtNSAtMi41LDAgMCwtMiAtMywwIHoiDQogICAgIGlkPSJwYXRoMzA1NS0wLTc3IiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDpub25lO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gNC45ODUwNTc0LDEwOC4wMTUgMTQuMDI5ODg1NiwtMC4wMyINCiAgICAgaWQ9InBhdGg1MjQ0LTUtMC01Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDpub25lO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gNC45ODQ5ODc0LDEzMi4wMTUgMTQuMDI5ODg2NiwtMC4wMyINCiAgICAgaWQ9InBhdGg1MjQ0LTUtMC01LTgiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjQ7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDM2LjM5ODQzOCwxMjMuOTYyOSBjIC0wLjQyMzM2MiwtMC4wMTMgLTAuODQ2ODQ3LDAuMDEgLTEuMjY1NjI2LDAuMDYyIC0xLjY1NjU2MiwwLjIxOTYgLTMuMjQ0NTY3LDAuOTczOSAtNC41MDc4MTIsMi4yMjY2IEwgMjksMTI0LjUzNjYgbCAtMi4zMjQyMTksNy43MTI5IDcuODI2MTcyLC0xLjkwNjIgLTEuODA0Njg3LC0xLjkwNjMgYyAxLjU5NzcwMiwtMS41MzA4IDQuMDQ4NzA2LC0xLjg0NTMgNS45ODQzNzUsLTAuNzIwNyAxLjk3MTE2MiwxLjE0NTMgMi44ODE5NTQsMy4zOTc1IDIuMzA4NTkzLDUuNTUwOCAtMC41NzMzNjEsMi4xNTMzIC0yLjUzMzg2NCwzLjY5NTMgLTQuODMwMDc4LDMuNjk1MyBsIDAsMy4wNzQyIGMgMy41NTA3NTcsMCA2LjcxMDQ0MiwtMi40MDkzIDcuNjUwMzkxLC01LjkzOTQgMC45Mzk5NDksLTMuNTMwMSAtMC42MTg0NjMsLTcuMjc1NiAtMy43MTA5MzgsLTkuMDcyMyAtMS4xNTk2NzgsLTAuNjczNyAtMi40MzEwODcsLTEuMDIzMSAtMy43MDExNzEsLTEuMDYyNSB6Ig0KICAgICBpZD0icGF0aDQxMzgtMTIiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjQ7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDU5LjcyMjY1NiwxMjMuOTYyOSBjIC0xLjI3MDA4NCwwLjAzOSAtMi41NDE0OTMsMC4zODg4IC0zLjcwMTE3MiwxLjA2MjUgLTMuMDkyNDc1LDEuNzk2NyAtNC42NTA4ODYsNS41NDIyIC0zLjcxMDkzNyw5LjA3MjMgMC45Mzk5NDksMy41MzAxIDQuMDk3NjgsNS45Mzk0IDcuNjQ4NDM3LDUuOTM5NCBsIDAsLTMuMDc0MiBjIC0yLjI5NjIxNCwwIC00LjI1NjcxNywtMS41NDIgLTQuODMwMDc4LC0zLjY5NTMgLTAuNTczMzYxLC0yLjE1MzMgMC4zMzc0MzIsLTQuNDA1NSAyLjMwODU5NCwtNS41NTA4IDEuOTM1NzMxLC0xLjEyNDYgNC4zODg2MywtMC44MTAyIDUuOTg2MzI2LDAuNzIwNyBsIC0xLjgwNjYzOCwxLjkwNjMgNy44MjgxMjgsMS45MDYyIC0yLjMyNDIyLC03LjcxMjkgLTEuNjI2OTYsMS43MTY4IGMgLTEuMjYzMzgsLTEuMjUzMSAtMi44NDg5MTcsLTIuMDA4OCAtNC41MDU4NTUsLTIuMjI4NSAtMC40MTg3NzgsLTAuMDU1IC0wLjg0MjI2MywtMC4wNzYgLTEuMjY1NjI1LC0wLjA2MiB6Ig0KICAgICBpZD0icGF0aDQxMzgtMS0zIiAvPg0KICA8cGF0aA0KICAgICBpZD0icGF0aDYxOTEiDQogICAgIGQ9Im0gMTAuNSwxMTYgMCwtMiAtMi40OTk5OTk2LDAgTCAxMiwxMDkgbCA0LDUgLTIuNSwwIDAsMiAtMywwIHoiDQogICAgIHN0eWxlPSJvcGFjaXR5OjAuODtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuOTY2O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgZD0ibSAxMC41LDEyOSAwLC0yIC0yLjQ5OTk5OTYsMCBMIDEyLDEyMiBsIDQsNSAtMi41LDAgMCwyIC0zLDAgeiINCiAgICAgaWQ9InBhdGg2MTkzIiAvPg0KICA8cGF0aA0KICAgICBpZD0icGF0aDYxOTUiDQogICAgIGQ9Im0gMTAuNSwxMzUgMCwyIC0yLjQ5OTk5OTYsMCBMIDEyLDE0MiBsIDQsLTUgLTIuNSwwIDAsLTIgLTMsMCB6Ig0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgPHBhdGgNCiAgICAgc29kaXBvZGk6dHlwZT0ic3RhciINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIGlkPSJwYXRoNDUwMCINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIHNvZGlwb2RpOmN4PSIxMS41NTU4MSINCiAgICAgc29kaXBvZGk6Y3k9IjYwLjA3MzI0MiINCiAgICAgc29kaXBvZGk6cjE9IjUuMTExNjEwNCINCiAgICAgc29kaXBvZGk6cjI9IjIuNTU1ODA1MiINCiAgICAgc29kaXBvZGk6YXJnMT0iMCINCiAgICAgc29kaXBvZGk6YXJnMj0iMS4wNDcxOTc2Ig0KICAgICBpbmtzY2FwZTpmbGF0c2lkZWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTpyb3VuZGVkPSIwIg0KICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIg0KICAgICBkPSJtIDE2LjY2NzQyLDYwLjA3MzI0MiAtMy44MzM3MDgsMi4yMTMzOTIgLTMuODMzNzA3MiwyLjIxMzM5MyAwLC00LjQyNjc4NSAwLC00LjQyNjc4NCAzLjgzMzcwODIsMi4yMTMzOTIgeiINCiAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSItMS4yNzc5MDI2IiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEuMjc3OTAyIg0KICAgICBkPSJtIC0zMS41MDAwMDQsNjAuMDczMjQyIC0zLjgzMzcwOCwyLjIxMzM5MiAtMy44MzM3MDcsMi4yMTMzOTMgMCwtNC40MjY3ODUgMCwtNC40MjY3ODQgMy44MzM3MDcsMi4yMTMzOTIgeiINCiAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgaW5rc2NhcGU6cm91bmRlZD0iMCINCiAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJmYWxzZSINCiAgICAgc29kaXBvZGk6YXJnMj0iMS4wNDcxOTc2Ig0KICAgICBzb2RpcG9kaTphcmcxPSIwIg0KICAgICBzb2RpcG9kaTpyMj0iMi41NTU4MDUyIg0KICAgICBzb2RpcG9kaTpyMT0iNS4xMTE2MTA0Ig0KICAgICBzb2RpcG9kaTpjeT0iNjAuMDczMjQyIg0KICAgICBzb2RpcG9kaTpjeD0iLTM2LjYxMTYxNCINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIGlkPSJwYXRoNDUwMiINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiIC8%2BDQogIDxwYXRoDQogICAgIGQ9Im0gMTYuNjY3NDIsNjAuMDczMjEyIC0zLjgzMzcwOCwyLjIxMzM5MiAtMy44MzM3MDcyLDIuMjEzMzkyIDAsLTQuNDI2Nzg0IDAsLTQuNDI2Nzg1IDMuODMzNzA4MiwyLjIxMzM5MiB6Ig0KICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIg0KICAgICBpbmtzY2FwZTpyb3VuZGVkPSIwIg0KICAgICBpbmtzY2FwZTpmbGF0c2lkZWQ9ImZhbHNlIg0KICAgICBzb2RpcG9kaTphcmcyPSIxLjA0NzE5NzYiDQogICAgIHNvZGlwb2RpOmFyZzE9IjAiDQogICAgIHNvZGlwb2RpOnIyPSIyLjU1NTgwNTIiDQogICAgIHNvZGlwb2RpOnIxPSI1LjExMTYxMDQiDQogICAgIHNvZGlwb2RpOmN5PSI2MC4wNzMyMTIiDQogICAgIHNvZGlwb2RpOmN4PSIxMS41NTU4MSINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIGlkPSJwYXRoNDUwNCINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDcyLjAwNzQsNzEuNzg3NykiDQogICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMS4yNzc5MDI5IiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii0xLjI3NzkwMjYiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsLTEsLTEsMCw5Niw5NikiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHN0eWxlPSJmaWxsOiM0ZDRkNGQ7ZmlsbC1vcGFjaXR5OjAuOTAxOTYwNzg7c3Ryb2tlOiNkM2QzZDM7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpZD0icGF0aDQ1MDYiDQogICAgIHNvZGlwb2RpOnNpZGVzPSIzIg0KICAgICBzb2RpcG9kaTpjeD0iMTEuNTU1ODEiDQogICAgIHNvZGlwb2RpOmN5PSI2MC4wNzMyMTIiDQogICAgIHNvZGlwb2RpOnIxPSI1LjExMTYxMDQiDQogICAgIHNvZGlwb2RpOnIyPSIyLjU1NTgwNTIiDQogICAgIHNvZGlwb2RpOmFyZzE9IjAiDQogICAgIHNvZGlwb2RpOmFyZzI9IjEuMDQ3MTk3NiINCiAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6cm91bmRlZD0iMCINCiAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgZD0ibSAxNi42Njc0Miw2MC4wNzMyMTIgLTMuODMzNzA4LDIuMjEzMzkyIC0zLjgzMzcwNzIsMi4yMTMzOTIgMCwtNC40MjY3ODQgMCwtNC40MjY3ODUgMy44MzM3MDgyLDIuMjEzMzkyIHoiIC8%2BDQogIDxwYXRoDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgaWQ9InBhdGg0NjE1LTUiDQogICAgIGQ9Im0gMTcxLjgyNTc0LDY1LjE3NDE5MyAxNi4zNDg1NCwwIC04LjE3NDI3LC0xMy4zNDg0NTQgeiINCiAgICAgc3R5bGU9ImZpbGw6I2ZiYjkxNztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZiYjkxNztzdHJva2Utd2lkdGg6MS42NTE2MTM5NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gMTc5LDU1IDAsNiAyLDAgMCwtNiINCiAgICAgaWQ9InBhdGg0MzAwIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiIC8%2BDQogIDxwYXRoDQogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgZD0ibSAxNzksNjIgMCwyIDIsMCAwLC0yIg0KICAgICBpZD0icGF0aDQzMDAtNiINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjIiAvPg0KPC9zdmc%2BDQo%3D%29%20%2D168px%20%2D48px%7D%2Ejsoneditor%2Dschema%2Derror%20%2Ejsoneditor%2Dpopover%7Bbackground%2Dcolor%3A%234c4c4c%3Bborder%2Dradius%3A3px%3Bbox%2Dshadow%3A0%200%205px%20rgba%280%2C0%2C0%2C%2E4%29%3Bcolor%3A%23fff%3Bdisplay%3Anone%3Bpadding%3A7px%2010px%3Bposition%3Aabsolute%3Bwidth%3A200px%3Bz%2Dindex%3A4%7D%2Ejsoneditor%2Dschema%2Derror%20%2Ejsoneditor%2Dpopover%2Ejsoneditor%2Dabove%7Bbottom%3A32px%3Bleft%3A%2D98px%7D%2Ejsoneditor%2Dschema%2Derror%20%2Ejsoneditor%2Dpopover%2Ejsoneditor%2Dbelow%7Btop%3A32px%3Bleft%3A%2D98px%7D%2Ejsoneditor%2Dschema%2Derror%20%2Ejsoneditor%2Dpopover%2Ejsoneditor%2Dleft%7Btop%3A%2D7px%3Bright%3A32px%7D%2Ejsoneditor%2Dschema%2Derror%20%2Ejsoneditor%2Dpopover%2Ejsoneditor%2Dright%7Btop%3A%2D7px%3Bleft%3A32px%7D%2Ejsoneditor%2Dschema%2Derror%20%2Ejsoneditor%2Dpopover%3Abefore%7Bborder%2Dright%3A7px%20solid%20transparent%3Bborder%2Dleft%3A7px%20solid%20transparent%3Bcontent%3A%27%27%3Bdisplay%3Ablock%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D7px%3Bposition%3Aabsolute%7D%2Ejsoneditor%2Dschema%2Derror%20%2Ejsoneditor%2Dpopover%2Ejsoneditor%2Dabove%3Abefore%7Bborder%2Dtop%3A7px%20solid%20%234c4c4c%3Bbottom%3A%2D7px%7D%2Ejsoneditor%2Dschema%2Derror%20%2Ejsoneditor%2Dpopover%2Ejsoneditor%2Dbelow%3Abefore%7Bborder%2Dbottom%3A7px%20solid%20%234c4c4c%3Btop%3A%2D7px%7D%2Ejsoneditor%2Dschema%2Derror%20%2Ejsoneditor%2Dpopover%2Ejsoneditor%2Dleft%3Abefore%2C%2Ejsoneditor%2Dschema%2Derror%20%2Ejsoneditor%2Dpopover%2Ejsoneditor%2Dright%3Abefore%7Bborder%2Dtop%3A7px%20solid%20transparent%3Bborder%2Dbottom%3A7px%20solid%20transparent%3Bcontent%3A%27%27%3Btop%3A19px%3Bmargin%2Dleft%3Ainherit%3Bmargin%2Dtop%3A%2D7px%3Bposition%3Aabsolute%7D%2Ejsoneditor%2Dschema%2Derror%20%2Ejsoneditor%2Dpopover%2Ejsoneditor%2Dleft%3Abefore%7Bborder%2Dleft%3A7px%20solid%20%234c4c4c%3Bright%3A%2D14px%3Bleft%3Ainherit%7D%2Ejsoneditor%2Dschema%2Derror%20%2Ejsoneditor%2Dpopover%2Ejsoneditor%2Dright%3Abefore%7Bborder%2Dright%3A7px%20solid%20%234c4c4c%3Bleft%3A%2D14px%7D%2Ejsoneditor%2Dschema%2Derror%3Afocus%20%2Ejsoneditor%2Dpopover%2C%2Ejsoneditor%2Dschema%2Derror%3Ahover%20%2Ejsoneditor%2Dpopover%7Bdisplay%3Ablock%3B%2Dwebkit%2Danimation%3Afade%2Din%20%2E3s%20linear%201%2Cmove%2Dup%20%2E3s%20linear%201%3B%2Dmoz%2Danimation%3Afade%2Din%20%2E3s%20linear%201%2Cmove%2Dup%20%2E3s%20linear%201%3B%2Dms%2Danimation%3Afade%2Din%20%2E3s%20linear%201%2Cmove%2Dup%20%2E3s%20linear%201%7D%40%2Dwebkit%2Dkeyframes%20fade%2Din%7Bfrom%7Bopacity%3A0%7Dto%7Bopacity%3A1%7D%7D%40%2Dmoz%2Dkeyframes%20fade%2Din%7Bfrom%7Bopacity%3A0%7Dto%7Bopacity%3A1%7D%7D%40%2Dms%2Dkeyframes%20fade%2Din%7Bfrom%7Bopacity%3A0%7Dto%7Bopacity%3A1%7D%7D%2Ejsoneditor%20%2Ejsoneditor%2Dtext%2Derrors%7Bwidth%3A100%25%3Bborder%2Dcollapse%3Acollapse%3Bbackground%2Dcolor%3A%23ffef8b%3Bborder%2Dtop%3A1px%20solid%20gold%7D%2Ejsoneditor%20%2Ejsoneditor%2Dtext%2Derrors%20td%7Bpadding%3A3px%206px%3Bvertical%2Dalign%3Amiddle%7D%2Ejsoneditor%2Dtext%2Derrors%20%2Ejsoneditor%2Dschema%2Derror%7Bborder%3Anone%3Bwidth%3A24px%3Bheight%3A24px%3Bpadding%3A0%3Bmargin%3A0%204px%200%200%3Bbackground%3Aurl%28data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8%2BDQo8c3ZnDQogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iDQogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIg0KICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIg0KICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCINCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIg0KICAgd2lkdGg9IjIxNiINCiAgIGhlaWdodD0iMTQ0Ig0KICAgaWQ9InN2ZzQxMzYiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJqc29uZWRpdG9yLWljb25zLnN2ZyI%2BDQogIDx0aXRsZQ0KICAgICBpZD0idGl0bGU2NTEyIj5KU09OIEVkaXRvciBJY29uczwvdGl0bGU%2BDQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE0MTQ4Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI%2BDQogICAgICAgIDxkYzpmb3JtYXQ%2BaW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU%2BSlNPTiBFZGl0b3IgSWNvbnM8L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0MTQ2IiAvPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMjgiDQogICAgIGlkPSJuYW1lZHZpZXc0MTQ0Ig0KICAgICBzaG93Z3JpZD0idHJ1ZSINCiAgICAgaW5rc2NhcGU6em9vbT0iNCINCiAgICAgaW5rc2NhcGU6Y3g9Ijk3LjIxNzI0OCINCiAgICAgaW5rc2NhcGU6Y3k9IjU5Ljk1MDIyNyINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmc0MTM2Ig0KICAgICBzaG93Z3VpZGVzPSJmYWxzZSINCiAgICAgYm9yZGVybGF5ZXI9ImZhbHNlIg0KICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0idHJ1ZSINCiAgICAgc2hvd2JvcmRlcj0idHJ1ZSI%2BDQogICAgPGlua3NjYXBlOmdyaWQNCiAgICAgICB0eXBlPSJ4eWdyaWQiDQogICAgICAgaWQ9ImdyaWQ0NjQwIg0KICAgICAgIGVtcHNwYWNpbmc9IjI0IiAvPg0KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4NCiAgPCEtLSBDcmVhdGVkIHdpdGggU1ZHLWVkaXQgLSBodHRwOi8vc3ZnLWVkaXQuZ29vZ2xlY29kZS5jb20vIC0tPg0KICA8Zw0KICAgICBpZD0iZzQzOTQiPg0KICAgIDxyZWN0DQogICAgICAgeD0iNCINCiAgICAgICB5PSI0Ig0KICAgICAgIHdpZHRoPSIxNiINCiAgICAgICBoZWlnaHQ9IjE2Ig0KICAgICAgIGlkPSJzdmdfMSINCiAgICAgICBzdHlsZT0iZmlsbDojMWFhZTFjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2VjM2YyOTtmaWxsLW9wYWNpdHk6MC45NDExNzY0NztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIyOC4wMDAwMDYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InN2Z18xLTciIC8%2BDQogICAgPHJlY3QNCiAgICAgICBpZD0icmVjdDQxNjUiDQogICAgICAgaGVpZ2h0PSIxNiINCiAgICAgICB3aWR0aD0iMTYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgeD0iNTIuMDAwMDA0Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIHg9IjE3Mi4wMDAwMiINCiAgICAgICB5PSIzLjk5OTk4NTIiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InJlY3Q0MTc1IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InJlY3Q0MTc1LTMiIC8%2BDQogICAgPGcNCiAgICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiDQogICAgICAgaWQ9Imc0Mjk5Ij4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEiDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk4NiINCiAgICAgICAgIHdpZHRoPSI5Ljk5OTk5MjQiDQogICAgICAgICB5PSIxMC45OTk5OTgiDQogICAgICAgICB4PSI3LjAwMDAwNDgiIC8%2BDQogICAgICA8cmVjdA0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICAgIGlkPSJzdmdfMS0xLTEiDQogICAgICAgICBoZWlnaHQ9IjkuOTk5OTgzOCINCiAgICAgICAgIHdpZHRoPSIxLjk5OTk5NTUiDQogICAgICAgICB5PSI3LjAwMDAxMTQiDQogICAgICAgICB4PSIxMS4wMDAwMDUiIC8%2BDQogICAgPC9nPg0KICAgIDxnDQogICAgICAgc3R5bGU9InN0cm9rZTpub25lIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLjcwNzEwNjc4LDE5LjAyOTQzNSwxMi4wMDAwMDEpIg0KICAgICAgIGlkPSJnNDI5OS0zIj4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEtMCINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTg2Ig0KICAgICAgICAgd2lkdGg9IjkuOTk5OTkyNCINCiAgICAgICAgIHk9IjEwLjk5OTk5OCINCiAgICAgICAgIHg9IjcuMDAwMDA0OCIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEtMS05Ig0KICAgICAgICAgaGVpZ2h0PSI5Ljk5OTk4MzgiDQogICAgICAgICB3aWR0aD0iMS45OTk5OTU1Ig0KICAgICAgICAgeT0iNy4wMDAwMTE0Ig0KICAgICAgICAgeD0iMTEuMDAwMDA1IiAvPg0KICAgIDwvZz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgeD0iNTUuMDAwMDA0Ig0KICAgICAgIHk9IjcuMDAwMDA0OCINCiAgICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICAgIGlkPSJzdmdfMS03LTUiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBpZD0icmVjdDQzNTQiDQogICAgICAgaGVpZ2h0PSI2Ljk5OTk5MDUiDQogICAgICAgd2lkdGg9IjYuOTk5OTkwOSINCiAgICAgICB5PSIxMC4wMDAwMSINCiAgICAgICB4PSI1OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojNGM0YzRjO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojM2M4MGRmO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAuOTQxMTc2NDciDQogICAgICAgeD0iNTguMDAwMDA0Ig0KICAgICAgIHk9IjEwLjAwMDAwNSINCiAgICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICAgIGlkPSJzdmdfMS03LTUtNyIgLz4NCiAgICA8Zw0KICAgICAgIGlkPSJnNDM3OCI%2BDQogICAgICA8cmVjdA0KICAgICAgICAgaWQ9InN2Z18xLTctNS0zIg0KICAgICAgICAgaGVpZ2h0PSIxLjk5OTk5NjUiDQogICAgICAgICB3aWR0aD0iNy45OTk5OTA5Ig0KICAgICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgICAgeD0iMTk4Ig0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgeD0iMTk4Ig0KICAgICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgICAgd2lkdGg9IjExLjk5OTk5NSINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTQ2Ig0KICAgICAgICAgaWQ9InJlY3Q0Mzc0IiAvPg0KICAgICAgPHJlY3QNCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgICB4PSIxOTgiDQogICAgICAgICB5PSIxNC45OTk5OTYiDQogICAgICAgICB3aWR0aD0iMy45OTk5OTI4Ig0KICAgICAgICAgaGVpZ2h0PSIxLjk5OTk5OTUiDQogICAgICAgICBpZD0icmVjdDQzNzYiIC8%2BDQogICAgPC9nPg0KICAgIDxnDQogICAgICAgaWQ9Imc0MzgzIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLC0yMy45OTk5OTUsMjMuOTk5OTk1KSI%2BDQogICAgICA8cmVjdA0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICAgIHg9IjE5OCINCiAgICAgICAgIHk9IjEwLjk5OTk5OSINCiAgICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk2NSINCiAgICAgICAgIGlkPSJyZWN0NDM4NSIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBpZD0icmVjdDQzODciDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk0NiINCiAgICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgICB5PSI3LjAwMDAwMDUiDQogICAgICAgICB4PSIxOTgiDQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgICAgPHJlY3QNCiAgICAgICAgIGlkPSJyZWN0NDM4OSINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTk1Ig0KICAgICAgICAgd2lkdGg9IjMuOTk5OTkyOCINCiAgICAgICAgIHk9IjE0Ljk5OTk5NiINCiAgICAgICAgIHg9IjE5OCINCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogICAgPC9nPg0KICAgIDxyZWN0DQogICAgICAgeT0iMy45OTk5MTk5Ig0KICAgICAgIHg9Ijc2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC00Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg0MzUxIg0KICAgICAgIGQ9Im0gODUuMTA0NDcsNi4wMTU3Mzg0IC0wLjAxNTYsMS40MDYzIGMgMy4wMjY2OSwtMC4yNDAyIDAuMzMwMDgsMy42NTA3OTk2IDIuNDg0MzgsNC41NzgwOTk2IC0yLjE4Njk0LDEuMDkzOCAwLjQ5MTkxLDQuOTA2OSAtMi40NTMxMyw0LjU3ODEgbCAtMC4wMTU2LDEuNDIxOSBjIDUuNzA4MjgsMC41NTkgMS4wMzI2NCwtNS4xMDA1IDQuNzAzMTMsLTUuMjY1NiBsIDAsLTEuNDA2MyBjIC0zLjYxMzAzLC0wLjAyNyAxLjExODkzLC01LjcwNjk5OTYgLTQuNzAzMTMsLTUuMzEyNDk5NiB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuMjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNDM1MS05Ig0KICAgICAgIGQ9Im0gODIuNzgxMjUsNS45OTg0Mzg0IDAuMDE1NiwxLjQwNjMgYyAtMy4wMjY2OCwtMC4yNDAyIC0wLjMzMDA3LDMuNjUwNjk5NiAtMi40ODQzNyw0LjU3ODA5OTYgMi4xODY5NCwxLjA5MzggLTAuNDkxOTIsNC45MDY5IDIuNDUzMTIsNC41NzgxIGwgMC4wMTU2LDEuNDIxOSBjIC01LjcwODI3LDAuNTU5IC0xLjAzMjYzLC01LjEwMDQgLTQuNzAzMTIsLTUuMjY1NiBsIDAsLTEuNDA2MyBjIDMuNjEzMDMsLTAuMDI3IC0xLjExODk0LC01LjcwNzA5OTYgNC43MDMxMiwtNS4zMTI0OTk2IHoiDQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogICAgPHJlY3QNCiAgICAgICB5PSIzLjk5OTkxOTkiDQogICAgICAgeD0iMTAwIg0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC0yNSINCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDI5ODciDQogICAgICAgZD0ibSAxMDMuNzE5LDUuNjcxOTM4NCAwLDEyLjcxODc5OTYgMy4wMzEyNSwwIDAsLTEuNTMxMyAtMS4zNDM3NSwwIDAsLTkuNjI0OTk5NiAxLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoMjk4Ny0xIg0KICAgICAgIGQ9Im0gMTEyLjIxODUsNS42NzIxOTg0IDAsMTIuNzE4Nzk5NiAtMy4wMzEyNSwwIDAsLTEuNTMxMyAxLjM0Mzc1LDAgMCwtOS42MjQ5OTk2IC0xLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHJlY3QNCiAgICAgICB5PSIzLjk5OTkxOTkiDQogICAgICAgeD0iMTI0Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC03MyINCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2MiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDM3ODAiDQogICAgICAgZD0ibSAxMjYuMjgyNCwxNy42MDI5MzggMS43ODk1NywwIDEuMTQxNDMsLTIuODY0MSA1LjY1MzY0LDAgMS4xNDg1NiwyLjg2NDEgMS43NjU2NSwwIC00Ljc4Njg3LC0xMS4xNjEwOTk2IC0xLjkxOTAzLDAgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDM3ODIiDQogICAgICAgZD0ibSAxMjkuNzI3MDQsMTMuNDc4ODM4IDQuNjA4NTIsMC4wMSAtMi4zMDQyNiwtNS41NDk3OTk2IHoiDQogICAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4NCiAgICA8cmVjdA0KICAgICAgIHk9IjMuOTk5OTE5OSINCiAgICAgICB4PSIxNDgiDQogICAgICAgaGVpZ2h0PSIxNiINCiAgICAgICB3aWR0aD0iMTYiDQogICAgICAgaWQ9InJlY3QzNzU0LTM1Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDUwMDgtMiINCiAgICAgICBkPSJtIDE1Ni40NzY1NSw1Ljg5MTczODQgMCwyLjE3OTcgMC40NjA5MywyLjM5ODM5OTYgMS44MjgxMywwIDAuMzk4NDQsLTIuMzk4Mzk5NiAwLC0yLjE3OTcgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1MDA4LTItOCINCiAgICAgICBkPSJtIDE1Mi41MTU2MSw1Ljg5MDYzODQgMCwyLjE3OTcgMC40NjA5NCwyLjM5ODM5OTYgMS44MjgxMiwwIDAuMzk4NDQsLTIuMzk4Mzk5NiAwLC0yLjE3OTcgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICA8L2c%2BDQogIDxyZWN0DQogICAgIHg9IjQiDQogICAgIHk9IjI3Ljk5OTk5NCINCiAgICAgd2lkdGg9IjE2Ig0KICAgICBoZWlnaHQ9IjE2Ig0KICAgICBpZD0icmVjdDQ0MzIiDQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjI4LjAwMDAwNiINCiAgICAgeT0iMjcuOTk5OTkiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgaWQ9InJlY3Q0NDM0IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ0MzYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIHdpZHRoPSIxNiINCiAgICAgeT0iMjcuOTk5OTkiDQogICAgIHg9IjUyLjAwMDAwNCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgeD0iMTcyLjAwMDAyIg0KICAgICB5PSIyNy45OTk5ODEiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgaWQ9InJlY3Q0NDQ2IiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSIxOTYiDQogICAgIHk9IjI3Ljk5OTk5Ig0KICAgICB3aWR0aD0iMTYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIGlkPSJyZWN0NDQ0OCIgLz4NCiAgPGcNCiAgICAgaWQ9Imc0NDY2Ig0KICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjMuOTk5OTk1KSI%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIGlkPSJyZWN0NDQ2OCINCiAgICAgICBoZWlnaHQ9IjEuOTk5OTk4NiINCiAgICAgICB3aWR0aD0iOS45OTk5OTI0Ig0KICAgICAgIHk9IjEwLjk5OTk5OCINCiAgICAgICB4PSI3LjAwMDAwNDgiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIGlkPSJyZWN0NDQ3MCINCiAgICAgICBoZWlnaHQ9IjkuOTk5OTgzOCINCiAgICAgICB3aWR0aD0iMS45OTk5OTU1Ig0KICAgICAgIHk9IjcuMDAwMDExNCINCiAgICAgICB4PSIxMS4wMDAwMDUiIC8%2BDQogIDwvZz4NCiAgPGcNCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC43MDcxMDY3OCwtMC43MDcxMDY3OCwwLjcwNzEwNjc4LDAuNzA3MTA2NzgsMTkuMDI5NDM1LDM1Ljk5OTk5NikiDQogICAgIGlkPSJnNDQ3MiINCiAgICAgc3R5bGU9InN0cm9rZTpub25lIj4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgaWQ9InJlY3Q0NDc0Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTg2Ig0KICAgICAgIHdpZHRoPSI5Ljk5OTk5MjQiDQogICAgICAgeT0iMTAuOTk5OTk4Ig0KICAgICAgIHg9IjcuMDAwMDA0OCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgaWQ9InJlY3Q0NDc2Ig0KICAgICAgIGhlaWdodD0iOS45OTk5ODM4Ig0KICAgICAgIHdpZHRoPSIxLjk5OTk5NTUiDQogICAgICAgeT0iNy4wMDAwMTE0Ig0KICAgICAgIHg9IjExLjAwMDAwNSIgLz4NCiAgPC9nPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSI1NS4wMDAwMDQiDQogICAgIHk9IjMxIg0KICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICBoZWlnaHQ9IjYuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NDc4IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ0ODAiDQogICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICB5PSIzNC4wMDAwMDgiDQogICAgIHg9IjU4Ig0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICB4PSI1OC4wMDAwMDQiDQogICAgIHk9IjM0LjAwMDAwNCINCiAgICAgd2lkdGg9IjYuOTk5OTkwOSINCiAgICAgaGVpZ2h0PSI2Ljk5OTk5MDUiDQogICAgIGlkPSJyZWN0NDQ4MiIgLz4NCiAgPGcNCiAgICAgaWQ9Imc0NDg0Ig0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDIzLjk5OTk5NSkiPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDg2Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTY1Ig0KICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5NDYiDQogICAgICAgaWQ9InJlY3Q0NDg4IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iMTQuOTk5OTk2Ig0KICAgICAgIHdpZHRoPSIzLjk5OTk5MjgiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q0NDkwIiAvPg0KICA8L2c%2BDQogIDxnDQogICAgIGlkPSJnNDQ5MiINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsLTIzLjk5OTk5NSw0Ny45OTk5OSkiPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5NjUiDQogICAgICAgaWQ9InJlY3Q0NDk0IiAvPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDk2Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTQ2Ig0KICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDk4Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSIzLjk5OTk5MjgiDQogICAgICAgeT0iMTQuOTk5OTk2Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICA8L2c%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiDQogICAgIGlkPSJyZWN0Mzc1NC04Ig0KICAgICB3aWR0aD0iMTYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIHg9Ijc2Ig0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gODUuMTA0NDgsMzAuMDE1NTM3IC0wLjAxNTYsMS40MDYzIGMgMy4wMjY2OCwtMC4yNDAyIDAuMzMwMDcsMy42NTA4IDIuNDg0MzgsNC41NzgxIC0yLjE4Njk1LDEuMDkzOCAwLjQ5MTkxLDQuOTA2ODggLTIuNDUzMTMsNC41NzgwOCBsIC0wLjAxNTYsMS40MjE5IGMgNS43MDgyNywwLjU1OSAxLjAzMjYzLC01LjEwMDQ4IDQuNzAzMTMsLTUuMjY1NTggbCAwLC0xLjQwNjMgYyAtMy42MTMwNCwtMC4wMjcgMS4xMTg5MywtNS43MDcgLTQuNzAzMTMsLTUuMzEyNSB6Ig0KICAgICBpZD0icGF0aDQzNTEtMSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gODIuNzgxMjYsMjkuOTk4MjM3IDAuMDE1NiwxLjQwNjMgYyAtMy4wMjY2OCwtMC4yNDAyIC0wLjMzMDA4LDMuNjUwNyAtMi40ODQzOCw0LjU3ODEgMi4xODY5NCwxLjA5MzggLTAuNDkxOTEsNC45MDY4OCAyLjQ1MzEzLDQuNTc4MDggbCAwLjAxNTYsMS40MjE5IGMgLTUuNzA4MjgsMC41NTkgLTEuMDMyNjQsLTUuMTAwMzggLTQuNzAzMTMsLTUuMjY1NTggbCAwLC0xLjQwNjMgYyAzLjYxMzAzLC0wLjAyNyAtMS4xMTg5MywtNS43MDcxIDQuNzAzMTMsLTUuMzEyNSB6Ig0KICAgICBpZD0icGF0aDQzNTEtOS01Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBpZD0icmVjdDM3NTQtNjUiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgeD0iMTAwIg0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSINCiAgICAgZD0ibSAxMDMuNzE5LDI5LjY3MTkzNyAwLDEyLjcxODc4IDMuMDMxMjUsMCAwLC0xLjUzMTMgLTEuMzQzNzUsMCAwLC05LjYyNDk4IDEuMzc1LDAgMCwtMS41NjI1IHoiDQogICAgIGlkPSJwYXRoMjk4Ny04Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDExMi4yMTg1LDI5LjY3MTkzNyAwLDEyLjcxODc4IC0zLjAzMTI1LDAgMCwtMS41MzEzIDEuMzQzNzUsMCAwLC05LjYyNDk4IC0xLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICBpZD0icGF0aDI5ODctMS05Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBpZD0icmVjdDM3NTQtOTIiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgeD0iMTI0Ig0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSINCiAgICAgZD0ibSAxMjYuMjgyNCw0MS42MDI5MTcgMS43ODk1NywwIDEuMTQxNDMsLTIuODY0MDggNS42NTM2NCwwIDEuMTQ4NTYsMi44NjQwOCAxLjc2NTY1LDAgLTQuNzg2ODcsLTExLjE2MTA4IC0xLjkxOTAyLDAgeiINCiAgICAgaWQ9InBhdGgzNzgwLTkiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDEyOS43MjcwNCwzNy40Nzg4MzcgNC42MDg1MiwwLjAxIC0yLjMwNDI2LC01LjU0OTggeiINCiAgICAgaWQ9InBhdGgzNzgyLTIiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiDQogICAgIGlkPSJyZWN0Mzc1NC00NyINCiAgICAgd2lkdGg9IjE2Ig0KICAgICBoZWlnaHQ9IjE2Ig0KICAgICB4PSIxNDgiDQogICAgIHk9IjI3Ljk5OTkyIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDE1Ni40NzY1NiwyOS44OTE3MzcgMCwyLjE3OTcgMC40NjA5MywyLjM5ODQgMS44MjgxMywwIDAuMzk4NDQsLTIuMzk4NCAwLC0yLjE3OTcgeiINCiAgICAgaWQ9InBhdGg1MDA4LTItMSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDE1Mi41MTU2MiwyOS44OTA2MzcgMCwyLjE3OTcgMC40NjA5NCwyLjM5ODQgMS44MjgxMiwwIDAuMzk4NDQsLTIuMzk4NCAwLC0yLjE3OTcgeiINCiAgICAgaWQ9InBhdGg1MDA4LTItOC04Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTIiDQogICAgIGhlaWdodD0iMS45OTk5OTYxIg0KICAgICB3aWR0aD0iMTEuOTk5OTk2Ig0KICAgICB5PSI2NCINCiAgICAgeD0iNTQiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTItMiINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjUyIg0KICAgICB4PSI4MC4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iNTIiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjEiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iNTgiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjMiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDU2NSINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjU4Ig0KICAgICB4PSI4NS4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDU2NyINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjY0Ig0KICAgICB4PSI4MC4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iNjQiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjkiIC8%2BDQogIDxjaXJjbGUNCiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM0YzRjNGM7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpZD0icGF0aDQ1NzEiDQogICAgIGN4PSIxMTAuMDYwODEiDQogICAgIGN5PSI1Ny45MzkyMDkiDQogICAgIHI9IjQuNzQzODgzNiIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MC45ODQzMTM3MztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgeD0iMTE2LjY0NTY2Ig0KICAgICB5PSItMzEuNzk3NTIiDQogICAgIHdpZHRoPSI0LjIyOTcxMyINCiAgICAgaGVpZ2h0PSI2LjQwNTM4ODQiDQogICAgIGlkPSJyZWN0NDU2My0yIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Ik0gMTI1LDU2IDEzOC43NzAyNyw1Ni4wOTUgMTMyLDY0IFoiDQogICAgIGlkPSJwYXRoNDYxMyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIGlkPSJwYXRoNDYxNSINCiAgICAgZD0iTSAxNDksNjQgMTYyLjc3MDI3LDYzLjkwNSAxNTYsNTYgWiINCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eTowLjk4NDMxMzczO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSI1NCINCiAgICAgeT0iNTMiDQogICAgIHdpZHRoPSIxMS45OTk5OTYiDQogICAgIGhlaWdodD0iMS45OTk5OTYxIg0KICAgICBpZD0icmVjdDQ2MzgiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTItMjQiDQogICAgIGhlaWdodD0iMS45OTk5OTU3Ig0KICAgICB3aWR0aD0iMTIuOTk5OTkiDQogICAgIHk9Ii01NiINCiAgICAgeD0iNTMiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiIC8%2BDQogIDxyZWN0DQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjUzIg0KICAgICB5PSItNjYiDQogICAgIHdpZHRoPSIxMi45OTk5OSINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NTciDQogICAgIGlkPSJyZWN0NDY1NyIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NjU5Ig0KICAgICBoZWlnaHQ9IjAuOTk5OTkyOTEiDQogICAgIHdpZHRoPSIxMS45OTk5OTkiDQogICAgIHk9IjU3Ig0KICAgICB4PSI1NCINCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MC45ODQzMTM3MztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICB4PSI1NCINCiAgICAgeT0iODguMDAwMTIyIg0KICAgICB3aWR0aD0iMTEuOTk5OTk2Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk2MSINCiAgICAgaWQ9InJlY3Q0NjYxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iNzYuMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjYzIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NjUiDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI3Ni4wMDAxMjIiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NjciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI4Mi4wMDAxMjIiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iODIuMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjY5IiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iODguMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjcxIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NzMiDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI4OC4wMDAxMjIiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8Y2lyY2xlDQogICAgIHI9IjQuNzQzODgzNiINCiAgICAgY3k9IjgxLjkzOTMzMSINCiAgICAgY3g9IjExMC4wNjA4MSINCiAgICAgaWQ9ImNpcmNsZTQ2NzUiDQogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIg0KICAgICBpZD0icmVjdDQ2NzciDQogICAgIGhlaWdodD0iNi40MDUzODg0Ig0KICAgICB3aWR0aD0iNC4yMjk3MTMiDQogICAgIHk9Ii0xNC44MjY4MTYiDQogICAgIHg9IjEzMy42MTYzIg0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogIDxwYXRoDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgaWQ9InBhdGg0Njc5Ig0KICAgICBkPSJtIDEyNSw4MC4wMDAwMDUgMTMuNzcwMjcsMC4wOTQ5OSBMIDEzMiw4Ny45OTk5OTIgWiINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Ik0gMTQ5LDg4LjAwMDIgMTYyLjc3MDI3LDg3LjkwNTIgMTU2LDgwLjAwMDIgWiINCiAgICAgaWQ9InBhdGg0NjgxIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDY4MyINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NjEiDQogICAgIHdpZHRoPSIxMS45OTk5OTYiDQogICAgIHk9Ijc3LjAwMDEyMiINCiAgICAgeD0iNTQiDQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4NCiAgPHJlY3QNCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCwxLC0xLDAsMCwwKSINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICB4PSI3Ny4wMDAxMjIiDQogICAgIHk9Ii01NiINCiAgICAgd2lkdGg9IjEyLjk5OTk5Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk1NyINCiAgICAgaWQ9InJlY3Q0Njg1IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2ODciDQogICAgIGhlaWdodD0iMS45OTk5OTU3Ig0KICAgICB3aWR0aD0iMTIuOTk5OTkiDQogICAgIHk9Ii02NiINCiAgICAgeD0iNzcuMDAwMTIyIg0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgeD0iNTQiDQogICAgIHk9IjgxLjAwMDEyMiINCiAgICAgd2lkdGg9IjExLjk5OTk5OSINCiAgICAgaGVpZ2h0PSIwLjk5OTk5MjkxIg0KICAgICBpZD0icmVjdDQ2ODkiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xIg0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjE1Ljk5OTk5Ig0KICAgICB5PSIxMDEiDQogICAgIHg9Ijc2LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MC44MDAwMDAwNztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NzYxLTAiDQogICAgIGhlaWdodD0iMS45OTk5OTQ1Ig0KICAgICB3aWR0aD0iMTUuOTk5OTkiDQogICAgIHk9IjEwNSINCiAgICAgeD0iNzYuMDAwMDA4Ig0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eTowLjgwMDAwMDA3O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ3NjEtNyINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSI5Ig0KICAgICB5PSIxMDkiDQogICAgIHg9Ijc2LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MC44MDAwMDAwNztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NzYxLTEtMSINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSIxMiINCiAgICAgeT0iMTI1Ig0KICAgICB4PSI3Ni4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xLTEtNCINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSIxMCINCiAgICAgeT0iMTM3Ig0KICAgICB4PSI3Ni4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xLTEtNC00Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjEwIg0KICAgICB5PSIxMjkiDQogICAgIHg9IjgyIg0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eTowLjgwMDAwMDA3O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ3NjEtMS0xLTQtNC0zIg0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjkiDQogICAgIHk9IjEzMyINCiAgICAgeD0iODIiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjg7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDM2LjM5ODQzOCwxMDAuMDI1NCBjIC0wLjQyMzM2MiwtMC4wMTMgLTAuODQ2ODQ3LDAuMDEgLTEuMjY1NjI2LDAuMDYyIC0xLjY1NjU2MiwwLjIxOTYgLTMuMjQ0NTY3LDAuOTczOSAtNC41MDc4MTIsMi4yMjY2IEwgMjksMTAwLjU5OTEgbCAtMi4zMjQyMTksNy43MTI5IDcuODI2MTcyLC0xLjkwNjIgLTEuODA0Njg3LC0xLjkwNjMgYyAxLjU5NzcwMiwtMS41MzA4IDQuMDQ4NzA2LC0xLjg0NTMgNS45ODQzNzUsLTAuNzIwNyAxLjk3MTE2MiwxLjE0NTIgMi44ODE5NTQsMy4zOTc1IDIuMzA4NTkzLDUuNTUwOCAtMC41NzMzNjEsMi4xNTMzIC0yLjUzMzg2NSwzLjY5NTMgLTQuODMwMDc4LDMuNjk1MyBsIDAsMy4wNzQyIGMgMy41NTA3NTYsMCA2LjcxMDQ0MiwtMi40MTEzIDcuNjUwMzkxLC01Ljk0MTQgMC45Mzk5NDksLTMuNTMwMSAtMC42MTg0NjMsLTcuMjczNiAtMy43MTA5MzgsLTkuMDcwMyAtMS4xNTk2NzgsLTAuNjczOCAtMi40MzEwODcsLTEuMDIzMSAtMy43MDExNzEsLTEuMDYyNSB6Ig0KICAgICBpZD0icGF0aDQxMzgiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjg7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDU5LjcyMjY1Niw5OS45NjI5IGMgLTEuMjcwMDg0LDAuMDM5IC0yLjU0MTQ5MywwLjM4ODcgLTMuNzAxMTcyLDEuMDYyNSAtMy4wOTI0NzUsMS43OTY3IC00LjY1MDg4Niw1LjU0MDIgLTMuNzEwOTM3LDkuMDcwMyAwLjkzOTk0OSwzLjUzMDEgNC4wOTc2OCw1Ljk0MTQgNy42NDg0MzcsNS45NDE0IGwgMCwtMy4wNzQyIGMgLTIuMjk2MjE0LDAgLTQuMjU2NzE3LC0xLjU0MiAtNC44MzAwNzgsLTMuNjk1MyAtMC41NzMzNjEsLTIuMTUzMyAwLjMzNzQzMiwtNC40MDU2IDIuMzA4NTk0LC01LjU1MDggMS45MzU3MzEsLTEuMTI0NiA0LjM4ODYzLC0wLjgxMDIgNS45ODYzMjYsMC43MjA3IGwgLTEuODA2NjM4LDEuOTA2MyA3LjgyODEyOCwxLjkwNjIgLTIuMzI0MjIsLTcuNzEyOSAtMS42MjY5NiwxLjcxNjggYyAtMS4yNjMzOCwtMS4yNTMxIC0yLjg0ODkxNywtMi4wMDg4IC00LjUwNTg1NSwtMi4yMjg1IC0wLjQxODc3OCwtMC4wNTUgLTAuODQyMjYzLC0wLjA3NiAtMS4yNjU2MjUsLTAuMDYyIHoiDQogICAgIGlkPSJwYXRoNDEzOC0xIiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgZD0ibSAxMC41LDEwMCAwLDIgLTIuNDk5OTk5NiwwIEwgMTIsMTA3IGwgNCwtNSAtMi41LDAgMCwtMiAtMywwIHoiDQogICAgIGlkPSJwYXRoMzA1NS0wLTc3IiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDpub25lO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gNC45ODUwNTc0LDEwOC4wMTUgMTQuMDI5ODg1NiwtMC4wMyINCiAgICAgaWQ9InBhdGg1MjQ0LTUtMC01Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDpub25lO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gNC45ODQ5ODc0LDEzMi4wMTUgMTQuMDI5ODg2NiwtMC4wMyINCiAgICAgaWQ9InBhdGg1MjQ0LTUtMC01LTgiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjQ7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDM2LjM5ODQzOCwxMjMuOTYyOSBjIC0wLjQyMzM2MiwtMC4wMTMgLTAuODQ2ODQ3LDAuMDEgLTEuMjY1NjI2LDAuMDYyIC0xLjY1NjU2MiwwLjIxOTYgLTMuMjQ0NTY3LDAuOTczOSAtNC41MDc4MTIsMi4yMjY2IEwgMjksMTI0LjUzNjYgbCAtMi4zMjQyMTksNy43MTI5IDcuODI2MTcyLC0xLjkwNjIgLTEuODA0Njg3LC0xLjkwNjMgYyAxLjU5NzcwMiwtMS41MzA4IDQuMDQ4NzA2LC0xLjg0NTMgNS45ODQzNzUsLTAuNzIwNyAxLjk3MTE2MiwxLjE0NTMgMi44ODE5NTQsMy4zOTc1IDIuMzA4NTkzLDUuNTUwOCAtMC41NzMzNjEsMi4xNTMzIC0yLjUzMzg2NCwzLjY5NTMgLTQuODMwMDc4LDMuNjk1MyBsIDAsMy4wNzQyIGMgMy41NTA3NTcsMCA2LjcxMDQ0MiwtMi40MDkzIDcuNjUwMzkxLC01LjkzOTQgMC45Mzk5NDksLTMuNTMwMSAtMC42MTg0NjMsLTcuMjc1NiAtMy43MTA5MzgsLTkuMDcyMyAtMS4xNTk2NzgsLTAuNjczNyAtMi40MzEwODcsLTEuMDIzMSAtMy43MDExNzEsLTEuMDYyNSB6Ig0KICAgICBpZD0icGF0aDQxMzgtMTIiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjQ7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDU5LjcyMjY1NiwxMjMuOTYyOSBjIC0xLjI3MDA4NCwwLjAzOSAtMi41NDE0OTMsMC4zODg4IC0zLjcwMTE3MiwxLjA2MjUgLTMuMDkyNDc1LDEuNzk2NyAtNC42NTA4ODYsNS41NDIyIC0zLjcxMDkzNyw5LjA3MjMgMC45Mzk5NDksMy41MzAxIDQuMDk3NjgsNS45Mzk0IDcuNjQ4NDM3LDUuOTM5NCBsIDAsLTMuMDc0MiBjIC0yLjI5NjIxNCwwIC00LjI1NjcxNywtMS41NDIgLTQuODMwMDc4LC0zLjY5NTMgLTAuNTczMzYxLC0yLjE1MzMgMC4zMzc0MzIsLTQuNDA1NSAyLjMwODU5NCwtNS41NTA4IDEuOTM1NzMxLC0xLjEyNDYgNC4zODg2MywtMC44MTAyIDUuOTg2MzI2LDAuNzIwNyBsIC0xLjgwNjYzOCwxLjkwNjMgNy44MjgxMjgsMS45MDYyIC0yLjMyNDIyLC03LjcxMjkgLTEuNjI2OTYsMS43MTY4IGMgLTEuMjYzMzgsLTEuMjUzMSAtMi44NDg5MTcsLTIuMDA4OCAtNC41MDU4NTUsLTIuMjI4NSAtMC40MTg3NzgsLTAuMDU1IC0wLjg0MjI2MywtMC4wNzYgLTEuMjY1NjI1LC0wLjA2MiB6Ig0KICAgICBpZD0icGF0aDQxMzgtMS0zIiAvPg0KICA8cGF0aA0KICAgICBpZD0icGF0aDYxOTEiDQogICAgIGQ9Im0gMTAuNSwxMTYgMCwtMiAtMi40OTk5OTk2LDAgTCAxMiwxMDkgbCA0LDUgLTIuNSwwIDAsMiAtMywwIHoiDQogICAgIHN0eWxlPSJvcGFjaXR5OjAuODtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuOTY2O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgZD0ibSAxMC41LDEyOSAwLC0yIC0yLjQ5OTk5OTYsMCBMIDEyLDEyMiBsIDQsNSAtMi41LDAgMCwyIC0zLDAgeiINCiAgICAgaWQ9InBhdGg2MTkzIiAvPg0KICA8cGF0aA0KICAgICBpZD0icGF0aDYxOTUiDQogICAgIGQ9Im0gMTAuNSwxMzUgMCwyIC0yLjQ5OTk5OTYsMCBMIDEyLDE0MiBsIDQsLTUgLTIuNSwwIDAsLTIgLTMsMCB6Ig0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgPHBhdGgNCiAgICAgc29kaXBvZGk6dHlwZT0ic3RhciINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIGlkPSJwYXRoNDUwMCINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIHNvZGlwb2RpOmN4PSIxMS41NTU4MSINCiAgICAgc29kaXBvZGk6Y3k9IjYwLjA3MzI0MiINCiAgICAgc29kaXBvZGk6cjE9IjUuMTExNjEwNCINCiAgICAgc29kaXBvZGk6cjI9IjIuNTU1ODA1MiINCiAgICAgc29kaXBvZGk6YXJnMT0iMCINCiAgICAgc29kaXBvZGk6YXJnMj0iMS4wNDcxOTc2Ig0KICAgICBpbmtzY2FwZTpmbGF0c2lkZWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTpyb3VuZGVkPSIwIg0KICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIg0KICAgICBkPSJtIDE2LjY2NzQyLDYwLjA3MzI0MiAtMy44MzM3MDgsMi4yMTMzOTIgLTMuODMzNzA3MiwyLjIxMzM5MyAwLC00LjQyNjc4NSAwLC00LjQyNjc4NCAzLjgzMzcwODIsMi4yMTMzOTIgeiINCiAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSItMS4yNzc5MDI2IiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEuMjc3OTAyIg0KICAgICBkPSJtIC0zMS41MDAwMDQsNjAuMDczMjQyIC0zLjgzMzcwOCwyLjIxMzM5MiAtMy44MzM3MDcsMi4yMTMzOTMgMCwtNC40MjY3ODUgMCwtNC40MjY3ODQgMy44MzM3MDcsMi4yMTMzOTIgeiINCiAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgaW5rc2NhcGU6cm91bmRlZD0iMCINCiAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJmYWxzZSINCiAgICAgc29kaXBvZGk6YXJnMj0iMS4wNDcxOTc2Ig0KICAgICBzb2RpcG9kaTphcmcxPSIwIg0KICAgICBzb2RpcG9kaTpyMj0iMi41NTU4MDUyIg0KICAgICBzb2RpcG9kaTpyMT0iNS4xMTE2MTA0Ig0KICAgICBzb2RpcG9kaTpjeT0iNjAuMDczMjQyIg0KICAgICBzb2RpcG9kaTpjeD0iLTM2LjYxMTYxNCINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIGlkPSJwYXRoNDUwMiINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiIC8%2BDQogIDxwYXRoDQogICAgIGQ9Im0gMTYuNjY3NDIsNjAuMDczMjEyIC0zLjgzMzcwOCwyLjIxMzM5MiAtMy44MzM3MDcyLDIuMjEzMzkyIDAsLTQuNDI2Nzg0IDAsLTQuNDI2Nzg1IDMuODMzNzA4MiwyLjIxMzM5MiB6Ig0KICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIg0KICAgICBpbmtzY2FwZTpyb3VuZGVkPSIwIg0KICAgICBpbmtzY2FwZTpmbGF0c2lkZWQ9ImZhbHNlIg0KICAgICBzb2RpcG9kaTphcmcyPSIxLjA0NzE5NzYiDQogICAgIHNvZGlwb2RpOmFyZzE9IjAiDQogICAgIHNvZGlwb2RpOnIyPSIyLjU1NTgwNTIiDQogICAgIHNvZGlwb2RpOnIxPSI1LjExMTYxMDQiDQogICAgIHNvZGlwb2RpOmN5PSI2MC4wNzMyMTIiDQogICAgIHNvZGlwb2RpOmN4PSIxMS41NTU4MSINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIGlkPSJwYXRoNDUwNCINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDcyLjAwNzQsNzEuNzg3NykiDQogICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMS4yNzc5MDI5IiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii0xLjI3NzkwMjYiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsLTEsLTEsMCw5Niw5NikiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHN0eWxlPSJmaWxsOiM0ZDRkNGQ7ZmlsbC1vcGFjaXR5OjAuOTAxOTYwNzg7c3Ryb2tlOiNkM2QzZDM7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpZD0icGF0aDQ1MDYiDQogICAgIHNvZGlwb2RpOnNpZGVzPSIzIg0KICAgICBzb2RpcG9kaTpjeD0iMTEuNTU1ODEiDQogICAgIHNvZGlwb2RpOmN5PSI2MC4wNzMyMTIiDQogICAgIHNvZGlwb2RpOnIxPSI1LjExMTYxMDQiDQogICAgIHNvZGlwb2RpOnIyPSIyLjU1NTgwNTIiDQogICAgIHNvZGlwb2RpOmFyZzE9IjAiDQogICAgIHNvZGlwb2RpOmFyZzI9IjEuMDQ3MTk3NiINCiAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6cm91bmRlZD0iMCINCiAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgZD0ibSAxNi42Njc0Miw2MC4wNzMyMTIgLTMuODMzNzA4LDIuMjEzMzkyIC0zLjgzMzcwNzIsMi4yMTMzOTIgMCwtNC40MjY3ODQgMCwtNC40MjY3ODUgMy44MzM3MDgyLDIuMjEzMzkyIHoiIC8%2BDQogIDxwYXRoDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgaWQ9InBhdGg0NjE1LTUiDQogICAgIGQ9Im0gMTcxLjgyNTc0LDY1LjE3NDE5MyAxNi4zNDg1NCwwIC04LjE3NDI3LC0xMy4zNDg0NTQgeiINCiAgICAgc3R5bGU9ImZpbGw6I2ZiYjkxNztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZiYjkxNztzdHJva2Utd2lkdGg6MS42NTE2MTM5NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gMTc5LDU1IDAsNiAyLDAgMCwtNiINCiAgICAgaWQ9InBhdGg0MzAwIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiIC8%2BDQogIDxwYXRoDQogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgZD0ibSAxNzksNjIgMCwyIDIsMCAwLC0yIg0KICAgICBpZD0icGF0aDQzMDAtNiINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjIiAvPg0KPC9zdmc%2BDQo%3D%29%20%2D168px%20%2D48px%7Ddiv%2Ejsoneditor%2Dcontextmenu%2Droot%7Bposition%3Arelative%3Bwidth%3A0%3Bheight%3A0%7Ddiv%2Ejsoneditor%2Dcontextmenu%7Bposition%3Aabsolute%3Bbox%2Dsizing%3Acontent%2Dbox%3Bz%2Dindex%3A99999%7Ddiv%2Ejsoneditor%2Dcontextmenu%20li%2Cdiv%2Ejsoneditor%2Dcontextmenu%20ul%7Bbox%2Dsizing%3Acontent%2Dbox%7Ddiv%2Ejsoneditor%2Dcontextmenu%20ul%7Bposition%3Arelative%3Bleft%3A0%3Btop%3A0%3Bwidth%3A124px%3Bbackground%3A%23fff%3Bborder%3A1px%20solid%20%23d3d3d3%3Bbox%2Dshadow%3A2px%202px%2012px%20rgba%28128%2C128%2C128%2C%2E3%29%3Blist%2Dstyle%3Anone%3Bmargin%3A0%3Bpadding%3A0%7Ddiv%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%7Bpadding%3A0%3Bmargin%3A0%3Bwidth%3A124px%3Bheight%3A24px%3Bborder%3Anone%3Bcursor%3Apointer%3Bcolor%3A%234d4d4d%3Bbackground%3A0%200%3Bfont%2Dsize%3A10pt%3Bfont%2Dfamily%3Aarial%2Csans%2Dserif%3Bbox%2Dsizing%3Aborder%2Dbox%3Bline%2Dheight%3A26px%3Btext%2Dalign%3Aleft%7Ddiv%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%3A%3A%2Dmoz%2Dfocus%2Dinner%7Bpadding%3A0%3Bborder%3A0%7Ddiv%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%3Afocus%2Cdiv%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%3Ahover%7Bcolor%3A%231a1a1a%3Bbackground%2Dcolor%3A%23f5f5f5%3Boutline%3A0%7Ddiv%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%2Ejsoneditor%2Ddefault%7Bwidth%3A92px%7Ddiv%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%2Ejsoneditor%2Dexpand%7Bfloat%3Aright%3Bwidth%3A32px%3Bheight%3A24px%3Bborder%2Dleft%3A1px%20solid%20%23e5e5e5%7Ddiv%2Ejsoneditor%2Dcontextmenu%20div%2Ejsoneditor%2Dicon%7Bfloat%3Aleft%3Bwidth%3A24px%3Bheight%3A24px%3Bborder%3Anone%3Bpadding%3A0%3Bmargin%3A0%3Bbackground%2Dimage%3Aurl%28data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8%2BDQo8c3ZnDQogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iDQogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIg0KICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIg0KICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCINCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIg0KICAgd2lkdGg9IjIxNiINCiAgIGhlaWdodD0iMTQ0Ig0KICAgaWQ9InN2ZzQxMzYiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJqc29uZWRpdG9yLWljb25zLnN2ZyI%2BDQogIDx0aXRsZQ0KICAgICBpZD0idGl0bGU2NTEyIj5KU09OIEVkaXRvciBJY29uczwvdGl0bGU%2BDQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE0MTQ4Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI%2BDQogICAgICAgIDxkYzpmb3JtYXQ%2BaW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU%2BSlNPTiBFZGl0b3IgSWNvbnM8L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0MTQ2IiAvPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMjgiDQogICAgIGlkPSJuYW1lZHZpZXc0MTQ0Ig0KICAgICBzaG93Z3JpZD0idHJ1ZSINCiAgICAgaW5rc2NhcGU6em9vbT0iNCINCiAgICAgaW5rc2NhcGU6Y3g9Ijk3LjIxNzI0OCINCiAgICAgaW5rc2NhcGU6Y3k9IjU5Ljk1MDIyNyINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmc0MTM2Ig0KICAgICBzaG93Z3VpZGVzPSJmYWxzZSINCiAgICAgYm9yZGVybGF5ZXI9ImZhbHNlIg0KICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0idHJ1ZSINCiAgICAgc2hvd2JvcmRlcj0idHJ1ZSI%2BDQogICAgPGlua3NjYXBlOmdyaWQNCiAgICAgICB0eXBlPSJ4eWdyaWQiDQogICAgICAgaWQ9ImdyaWQ0NjQwIg0KICAgICAgIGVtcHNwYWNpbmc9IjI0IiAvPg0KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4NCiAgPCEtLSBDcmVhdGVkIHdpdGggU1ZHLWVkaXQgLSBodHRwOi8vc3ZnLWVkaXQuZ29vZ2xlY29kZS5jb20vIC0tPg0KICA8Zw0KICAgICBpZD0iZzQzOTQiPg0KICAgIDxyZWN0DQogICAgICAgeD0iNCINCiAgICAgICB5PSI0Ig0KICAgICAgIHdpZHRoPSIxNiINCiAgICAgICBoZWlnaHQ9IjE2Ig0KICAgICAgIGlkPSJzdmdfMSINCiAgICAgICBzdHlsZT0iZmlsbDojMWFhZTFjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2VjM2YyOTtmaWxsLW9wYWNpdHk6MC45NDExNzY0NztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIyOC4wMDAwMDYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InN2Z18xLTciIC8%2BDQogICAgPHJlY3QNCiAgICAgICBpZD0icmVjdDQxNjUiDQogICAgICAgaGVpZ2h0PSIxNiINCiAgICAgICB3aWR0aD0iMTYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgeD0iNTIuMDAwMDA0Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIHg9IjE3Mi4wMDAwMiINCiAgICAgICB5PSIzLjk5OTk4NTIiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InJlY3Q0MTc1IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InJlY3Q0MTc1LTMiIC8%2BDQogICAgPGcNCiAgICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiDQogICAgICAgaWQ9Imc0Mjk5Ij4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEiDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk4NiINCiAgICAgICAgIHdpZHRoPSI5Ljk5OTk5MjQiDQogICAgICAgICB5PSIxMC45OTk5OTgiDQogICAgICAgICB4PSI3LjAwMDAwNDgiIC8%2BDQogICAgICA8cmVjdA0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICAgIGlkPSJzdmdfMS0xLTEiDQogICAgICAgICBoZWlnaHQ9IjkuOTk5OTgzOCINCiAgICAgICAgIHdpZHRoPSIxLjk5OTk5NTUiDQogICAgICAgICB5PSI3LjAwMDAxMTQiDQogICAgICAgICB4PSIxMS4wMDAwMDUiIC8%2BDQogICAgPC9nPg0KICAgIDxnDQogICAgICAgc3R5bGU9InN0cm9rZTpub25lIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLjcwNzEwNjc4LDE5LjAyOTQzNSwxMi4wMDAwMDEpIg0KICAgICAgIGlkPSJnNDI5OS0zIj4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEtMCINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTg2Ig0KICAgICAgICAgd2lkdGg9IjkuOTk5OTkyNCINCiAgICAgICAgIHk9IjEwLjk5OTk5OCINCiAgICAgICAgIHg9IjcuMDAwMDA0OCIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEtMS05Ig0KICAgICAgICAgaGVpZ2h0PSI5Ljk5OTk4MzgiDQogICAgICAgICB3aWR0aD0iMS45OTk5OTU1Ig0KICAgICAgICAgeT0iNy4wMDAwMTE0Ig0KICAgICAgICAgeD0iMTEuMDAwMDA1IiAvPg0KICAgIDwvZz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgeD0iNTUuMDAwMDA0Ig0KICAgICAgIHk9IjcuMDAwMDA0OCINCiAgICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICAgIGlkPSJzdmdfMS03LTUiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBpZD0icmVjdDQzNTQiDQogICAgICAgaGVpZ2h0PSI2Ljk5OTk5MDUiDQogICAgICAgd2lkdGg9IjYuOTk5OTkwOSINCiAgICAgICB5PSIxMC4wMDAwMSINCiAgICAgICB4PSI1OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojNGM0YzRjO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojM2M4MGRmO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAuOTQxMTc2NDciDQogICAgICAgeD0iNTguMDAwMDA0Ig0KICAgICAgIHk9IjEwLjAwMDAwNSINCiAgICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICAgIGlkPSJzdmdfMS03LTUtNyIgLz4NCiAgICA8Zw0KICAgICAgIGlkPSJnNDM3OCI%2BDQogICAgICA8cmVjdA0KICAgICAgICAgaWQ9InN2Z18xLTctNS0zIg0KICAgICAgICAgaGVpZ2h0PSIxLjk5OTk5NjUiDQogICAgICAgICB3aWR0aD0iNy45OTk5OTA5Ig0KICAgICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgICAgeD0iMTk4Ig0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgeD0iMTk4Ig0KICAgICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgICAgd2lkdGg9IjExLjk5OTk5NSINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTQ2Ig0KICAgICAgICAgaWQ9InJlY3Q0Mzc0IiAvPg0KICAgICAgPHJlY3QNCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgICB4PSIxOTgiDQogICAgICAgICB5PSIxNC45OTk5OTYiDQogICAgICAgICB3aWR0aD0iMy45OTk5OTI4Ig0KICAgICAgICAgaGVpZ2h0PSIxLjk5OTk5OTUiDQogICAgICAgICBpZD0icmVjdDQzNzYiIC8%2BDQogICAgPC9nPg0KICAgIDxnDQogICAgICAgaWQ9Imc0MzgzIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLC0yMy45OTk5OTUsMjMuOTk5OTk1KSI%2BDQogICAgICA8cmVjdA0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICAgIHg9IjE5OCINCiAgICAgICAgIHk9IjEwLjk5OTk5OSINCiAgICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk2NSINCiAgICAgICAgIGlkPSJyZWN0NDM4NSIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBpZD0icmVjdDQzODciDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk0NiINCiAgICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgICB5PSI3LjAwMDAwMDUiDQogICAgICAgICB4PSIxOTgiDQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgICAgPHJlY3QNCiAgICAgICAgIGlkPSJyZWN0NDM4OSINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTk1Ig0KICAgICAgICAgd2lkdGg9IjMuOTk5OTkyOCINCiAgICAgICAgIHk9IjE0Ljk5OTk5NiINCiAgICAgICAgIHg9IjE5OCINCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogICAgPC9nPg0KICAgIDxyZWN0DQogICAgICAgeT0iMy45OTk5MTk5Ig0KICAgICAgIHg9Ijc2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC00Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg0MzUxIg0KICAgICAgIGQ9Im0gODUuMTA0NDcsNi4wMTU3Mzg0IC0wLjAxNTYsMS40MDYzIGMgMy4wMjY2OSwtMC4yNDAyIDAuMzMwMDgsMy42NTA3OTk2IDIuNDg0MzgsNC41NzgwOTk2IC0yLjE4Njk0LDEuMDkzOCAwLjQ5MTkxLDQuOTA2OSAtMi40NTMxMyw0LjU3ODEgbCAtMC4wMTU2LDEuNDIxOSBjIDUuNzA4MjgsMC41NTkgMS4wMzI2NCwtNS4xMDA1IDQuNzAzMTMsLTUuMjY1NiBsIDAsLTEuNDA2MyBjIC0zLjYxMzAzLC0wLjAyNyAxLjExODkzLC01LjcwNjk5OTYgLTQuNzAzMTMsLTUuMzEyNDk5NiB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuMjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNDM1MS05Ig0KICAgICAgIGQ9Im0gODIuNzgxMjUsNS45OTg0Mzg0IDAuMDE1NiwxLjQwNjMgYyAtMy4wMjY2OCwtMC4yNDAyIC0wLjMzMDA3LDMuNjUwNjk5NiAtMi40ODQzNyw0LjU3ODA5OTYgMi4xODY5NCwxLjA5MzggLTAuNDkxOTIsNC45MDY5IDIuNDUzMTIsNC41NzgxIGwgMC4wMTU2LDEuNDIxOSBjIC01LjcwODI3LDAuNTU5IC0xLjAzMjYzLC01LjEwMDQgLTQuNzAzMTIsLTUuMjY1NiBsIDAsLTEuNDA2MyBjIDMuNjEzMDMsLTAuMDI3IC0xLjExODk0LC01LjcwNzA5OTYgNC43MDMxMiwtNS4zMTI0OTk2IHoiDQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogICAgPHJlY3QNCiAgICAgICB5PSIzLjk5OTkxOTkiDQogICAgICAgeD0iMTAwIg0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC0yNSINCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDI5ODciDQogICAgICAgZD0ibSAxMDMuNzE5LDUuNjcxOTM4NCAwLDEyLjcxODc5OTYgMy4wMzEyNSwwIDAsLTEuNTMxMyAtMS4zNDM3NSwwIDAsLTkuNjI0OTk5NiAxLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoMjk4Ny0xIg0KICAgICAgIGQ9Im0gMTEyLjIxODUsNS42NzIxOTg0IDAsMTIuNzE4Nzk5NiAtMy4wMzEyNSwwIDAsLTEuNTMxMyAxLjM0Mzc1LDAgMCwtOS42MjQ5OTk2IC0xLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHJlY3QNCiAgICAgICB5PSIzLjk5OTkxOTkiDQogICAgICAgeD0iMTI0Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC03MyINCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2MiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDM3ODAiDQogICAgICAgZD0ibSAxMjYuMjgyNCwxNy42MDI5MzggMS43ODk1NywwIDEuMTQxNDMsLTIuODY0MSA1LjY1MzY0LDAgMS4xNDg1NiwyLjg2NDEgMS43NjU2NSwwIC00Ljc4Njg3LC0xMS4xNjEwOTk2IC0xLjkxOTAzLDAgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDM3ODIiDQogICAgICAgZD0ibSAxMjkuNzI3MDQsMTMuNDc4ODM4IDQuNjA4NTIsMC4wMSAtMi4zMDQyNiwtNS41NDk3OTk2IHoiDQogICAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4NCiAgICA8cmVjdA0KICAgICAgIHk9IjMuOTk5OTE5OSINCiAgICAgICB4PSIxNDgiDQogICAgICAgaGVpZ2h0PSIxNiINCiAgICAgICB3aWR0aD0iMTYiDQogICAgICAgaWQ9InJlY3QzNzU0LTM1Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDUwMDgtMiINCiAgICAgICBkPSJtIDE1Ni40NzY1NSw1Ljg5MTczODQgMCwyLjE3OTcgMC40NjA5MywyLjM5ODM5OTYgMS44MjgxMywwIDAuMzk4NDQsLTIuMzk4Mzk5NiAwLC0yLjE3OTcgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1MDA4LTItOCINCiAgICAgICBkPSJtIDE1Mi41MTU2MSw1Ljg5MDYzODQgMCwyLjE3OTcgMC40NjA5NCwyLjM5ODM5OTYgMS44MjgxMiwwIDAuMzk4NDQsLTIuMzk4Mzk5NiAwLC0yLjE3OTcgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICA8L2c%2BDQogIDxyZWN0DQogICAgIHg9IjQiDQogICAgIHk9IjI3Ljk5OTk5NCINCiAgICAgd2lkdGg9IjE2Ig0KICAgICBoZWlnaHQ9IjE2Ig0KICAgICBpZD0icmVjdDQ0MzIiDQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjI4LjAwMDAwNiINCiAgICAgeT0iMjcuOTk5OTkiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgaWQ9InJlY3Q0NDM0IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ0MzYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIHdpZHRoPSIxNiINCiAgICAgeT0iMjcuOTk5OTkiDQogICAgIHg9IjUyLjAwMDAwNCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgeD0iMTcyLjAwMDAyIg0KICAgICB5PSIyNy45OTk5ODEiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgaWQ9InJlY3Q0NDQ2IiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSIxOTYiDQogICAgIHk9IjI3Ljk5OTk5Ig0KICAgICB3aWR0aD0iMTYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIGlkPSJyZWN0NDQ0OCIgLz4NCiAgPGcNCiAgICAgaWQ9Imc0NDY2Ig0KICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjMuOTk5OTk1KSI%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIGlkPSJyZWN0NDQ2OCINCiAgICAgICBoZWlnaHQ9IjEuOTk5OTk4NiINCiAgICAgICB3aWR0aD0iOS45OTk5OTI0Ig0KICAgICAgIHk9IjEwLjk5OTk5OCINCiAgICAgICB4PSI3LjAwMDAwNDgiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIGlkPSJyZWN0NDQ3MCINCiAgICAgICBoZWlnaHQ9IjkuOTk5OTgzOCINCiAgICAgICB3aWR0aD0iMS45OTk5OTU1Ig0KICAgICAgIHk9IjcuMDAwMDExNCINCiAgICAgICB4PSIxMS4wMDAwMDUiIC8%2BDQogIDwvZz4NCiAgPGcNCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC43MDcxMDY3OCwtMC43MDcxMDY3OCwwLjcwNzEwNjc4LDAuNzA3MTA2NzgsMTkuMDI5NDM1LDM1Ljk5OTk5NikiDQogICAgIGlkPSJnNDQ3MiINCiAgICAgc3R5bGU9InN0cm9rZTpub25lIj4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgaWQ9InJlY3Q0NDc0Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTg2Ig0KICAgICAgIHdpZHRoPSI5Ljk5OTk5MjQiDQogICAgICAgeT0iMTAuOTk5OTk4Ig0KICAgICAgIHg9IjcuMDAwMDA0OCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgaWQ9InJlY3Q0NDc2Ig0KICAgICAgIGhlaWdodD0iOS45OTk5ODM4Ig0KICAgICAgIHdpZHRoPSIxLjk5OTk5NTUiDQogICAgICAgeT0iNy4wMDAwMTE0Ig0KICAgICAgIHg9IjExLjAwMDAwNSIgLz4NCiAgPC9nPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSI1NS4wMDAwMDQiDQogICAgIHk9IjMxIg0KICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICBoZWlnaHQ9IjYuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NDc4IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ0ODAiDQogICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICB5PSIzNC4wMDAwMDgiDQogICAgIHg9IjU4Ig0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICB4PSI1OC4wMDAwMDQiDQogICAgIHk9IjM0LjAwMDAwNCINCiAgICAgd2lkdGg9IjYuOTk5OTkwOSINCiAgICAgaGVpZ2h0PSI2Ljk5OTk5MDUiDQogICAgIGlkPSJyZWN0NDQ4MiIgLz4NCiAgPGcNCiAgICAgaWQ9Imc0NDg0Ig0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDIzLjk5OTk5NSkiPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDg2Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTY1Ig0KICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5NDYiDQogICAgICAgaWQ9InJlY3Q0NDg4IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iMTQuOTk5OTk2Ig0KICAgICAgIHdpZHRoPSIzLjk5OTk5MjgiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q0NDkwIiAvPg0KICA8L2c%2BDQogIDxnDQogICAgIGlkPSJnNDQ5MiINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsLTIzLjk5OTk5NSw0Ny45OTk5OSkiPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5NjUiDQogICAgICAgaWQ9InJlY3Q0NDk0IiAvPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDk2Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTQ2Ig0KICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDk4Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSIzLjk5OTk5MjgiDQogICAgICAgeT0iMTQuOTk5OTk2Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICA8L2c%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiDQogICAgIGlkPSJyZWN0Mzc1NC04Ig0KICAgICB3aWR0aD0iMTYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIHg9Ijc2Ig0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gODUuMTA0NDgsMzAuMDE1NTM3IC0wLjAxNTYsMS40MDYzIGMgMy4wMjY2OCwtMC4yNDAyIDAuMzMwMDcsMy42NTA4IDIuNDg0MzgsNC41NzgxIC0yLjE4Njk1LDEuMDkzOCAwLjQ5MTkxLDQuOTA2ODggLTIuNDUzMTMsNC41NzgwOCBsIC0wLjAxNTYsMS40MjE5IGMgNS43MDgyNywwLjU1OSAxLjAzMjYzLC01LjEwMDQ4IDQuNzAzMTMsLTUuMjY1NTggbCAwLC0xLjQwNjMgYyAtMy42MTMwNCwtMC4wMjcgMS4xMTg5MywtNS43MDcgLTQuNzAzMTMsLTUuMzEyNSB6Ig0KICAgICBpZD0icGF0aDQzNTEtMSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gODIuNzgxMjYsMjkuOTk4MjM3IDAuMDE1NiwxLjQwNjMgYyAtMy4wMjY2OCwtMC4yNDAyIC0wLjMzMDA4LDMuNjUwNyAtMi40ODQzOCw0LjU3ODEgMi4xODY5NCwxLjA5MzggLTAuNDkxOTEsNC45MDY4OCAyLjQ1MzEzLDQuNTc4MDggbCAwLjAxNTYsMS40MjE5IGMgLTUuNzA4MjgsMC41NTkgLTEuMDMyNjQsLTUuMTAwMzggLTQuNzAzMTMsLTUuMjY1NTggbCAwLC0xLjQwNjMgYyAzLjYxMzAzLC0wLjAyNyAtMS4xMTg5MywtNS43MDcxIDQuNzAzMTMsLTUuMzEyNSB6Ig0KICAgICBpZD0icGF0aDQzNTEtOS01Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBpZD0icmVjdDM3NTQtNjUiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgeD0iMTAwIg0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSINCiAgICAgZD0ibSAxMDMuNzE5LDI5LjY3MTkzNyAwLDEyLjcxODc4IDMuMDMxMjUsMCAwLC0xLjUzMTMgLTEuMzQzNzUsMCAwLC05LjYyNDk4IDEuMzc1LDAgMCwtMS41NjI1IHoiDQogICAgIGlkPSJwYXRoMjk4Ny04Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDExMi4yMTg1LDI5LjY3MTkzNyAwLDEyLjcxODc4IC0zLjAzMTI1LDAgMCwtMS41MzEzIDEuMzQzNzUsMCAwLC05LjYyNDk4IC0xLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICBpZD0icGF0aDI5ODctMS05Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBpZD0icmVjdDM3NTQtOTIiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgeD0iMTI0Ig0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSINCiAgICAgZD0ibSAxMjYuMjgyNCw0MS42MDI5MTcgMS43ODk1NywwIDEuMTQxNDMsLTIuODY0MDggNS42NTM2NCwwIDEuMTQ4NTYsMi44NjQwOCAxLjc2NTY1LDAgLTQuNzg2ODcsLTExLjE2MTA4IC0xLjkxOTAyLDAgeiINCiAgICAgaWQ9InBhdGgzNzgwLTkiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDEyOS43MjcwNCwzNy40Nzg4MzcgNC42MDg1MiwwLjAxIC0yLjMwNDI2LC01LjU0OTggeiINCiAgICAgaWQ9InBhdGgzNzgyLTIiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiDQogICAgIGlkPSJyZWN0Mzc1NC00NyINCiAgICAgd2lkdGg9IjE2Ig0KICAgICBoZWlnaHQ9IjE2Ig0KICAgICB4PSIxNDgiDQogICAgIHk9IjI3Ljk5OTkyIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDE1Ni40NzY1NiwyOS44OTE3MzcgMCwyLjE3OTcgMC40NjA5MywyLjM5ODQgMS44MjgxMywwIDAuMzk4NDQsLTIuMzk4NCAwLC0yLjE3OTcgeiINCiAgICAgaWQ9InBhdGg1MDA4LTItMSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDE1Mi41MTU2MiwyOS44OTA2MzcgMCwyLjE3OTcgMC40NjA5NCwyLjM5ODQgMS44MjgxMiwwIDAuMzk4NDQsLTIuMzk4NCAwLC0yLjE3OTcgeiINCiAgICAgaWQ9InBhdGg1MDA4LTItOC04Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTIiDQogICAgIGhlaWdodD0iMS45OTk5OTYxIg0KICAgICB3aWR0aD0iMTEuOTk5OTk2Ig0KICAgICB5PSI2NCINCiAgICAgeD0iNTQiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTItMiINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjUyIg0KICAgICB4PSI4MC4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iNTIiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjEiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iNTgiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjMiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDU2NSINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjU4Ig0KICAgICB4PSI4NS4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDU2NyINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjY0Ig0KICAgICB4PSI4MC4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iNjQiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjkiIC8%2BDQogIDxjaXJjbGUNCiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM0YzRjNGM7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpZD0icGF0aDQ1NzEiDQogICAgIGN4PSIxMTAuMDYwODEiDQogICAgIGN5PSI1Ny45MzkyMDkiDQogICAgIHI9IjQuNzQzODgzNiIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MC45ODQzMTM3MztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgeD0iMTE2LjY0NTY2Ig0KICAgICB5PSItMzEuNzk3NTIiDQogICAgIHdpZHRoPSI0LjIyOTcxMyINCiAgICAgaGVpZ2h0PSI2LjQwNTM4ODQiDQogICAgIGlkPSJyZWN0NDU2My0yIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Ik0gMTI1LDU2IDEzOC43NzAyNyw1Ni4wOTUgMTMyLDY0IFoiDQogICAgIGlkPSJwYXRoNDYxMyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIGlkPSJwYXRoNDYxNSINCiAgICAgZD0iTSAxNDksNjQgMTYyLjc3MDI3LDYzLjkwNSAxNTYsNTYgWiINCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eTowLjk4NDMxMzczO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSI1NCINCiAgICAgeT0iNTMiDQogICAgIHdpZHRoPSIxMS45OTk5OTYiDQogICAgIGhlaWdodD0iMS45OTk5OTYxIg0KICAgICBpZD0icmVjdDQ2MzgiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTItMjQiDQogICAgIGhlaWdodD0iMS45OTk5OTU3Ig0KICAgICB3aWR0aD0iMTIuOTk5OTkiDQogICAgIHk9Ii01NiINCiAgICAgeD0iNTMiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiIC8%2BDQogIDxyZWN0DQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjUzIg0KICAgICB5PSItNjYiDQogICAgIHdpZHRoPSIxMi45OTk5OSINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NTciDQogICAgIGlkPSJyZWN0NDY1NyIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NjU5Ig0KICAgICBoZWlnaHQ9IjAuOTk5OTkyOTEiDQogICAgIHdpZHRoPSIxMS45OTk5OTkiDQogICAgIHk9IjU3Ig0KICAgICB4PSI1NCINCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MC45ODQzMTM3MztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICB4PSI1NCINCiAgICAgeT0iODguMDAwMTIyIg0KICAgICB3aWR0aD0iMTEuOTk5OTk2Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk2MSINCiAgICAgaWQ9InJlY3Q0NjYxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iNzYuMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjYzIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NjUiDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI3Ni4wMDAxMjIiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NjciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI4Mi4wMDAxMjIiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iODIuMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjY5IiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iODguMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjcxIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NzMiDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI4OC4wMDAxMjIiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8Y2lyY2xlDQogICAgIHI9IjQuNzQzODgzNiINCiAgICAgY3k9IjgxLjkzOTMzMSINCiAgICAgY3g9IjExMC4wNjA4MSINCiAgICAgaWQ9ImNpcmNsZTQ2NzUiDQogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIg0KICAgICBpZD0icmVjdDQ2NzciDQogICAgIGhlaWdodD0iNi40MDUzODg0Ig0KICAgICB3aWR0aD0iNC4yMjk3MTMiDQogICAgIHk9Ii0xNC44MjY4MTYiDQogICAgIHg9IjEzMy42MTYzIg0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogIDxwYXRoDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgaWQ9InBhdGg0Njc5Ig0KICAgICBkPSJtIDEyNSw4MC4wMDAwMDUgMTMuNzcwMjcsMC4wOTQ5OSBMIDEzMiw4Ny45OTk5OTIgWiINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Ik0gMTQ5LDg4LjAwMDIgMTYyLjc3MDI3LDg3LjkwNTIgMTU2LDgwLjAwMDIgWiINCiAgICAgaWQ9InBhdGg0NjgxIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDY4MyINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NjEiDQogICAgIHdpZHRoPSIxMS45OTk5OTYiDQogICAgIHk9Ijc3LjAwMDEyMiINCiAgICAgeD0iNTQiDQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4NCiAgPHJlY3QNCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCwxLC0xLDAsMCwwKSINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICB4PSI3Ny4wMDAxMjIiDQogICAgIHk9Ii01NiINCiAgICAgd2lkdGg9IjEyLjk5OTk5Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk1NyINCiAgICAgaWQ9InJlY3Q0Njg1IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2ODciDQogICAgIGhlaWdodD0iMS45OTk5OTU3Ig0KICAgICB3aWR0aD0iMTIuOTk5OTkiDQogICAgIHk9Ii02NiINCiAgICAgeD0iNzcuMDAwMTIyIg0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgeD0iNTQiDQogICAgIHk9IjgxLjAwMDEyMiINCiAgICAgd2lkdGg9IjExLjk5OTk5OSINCiAgICAgaGVpZ2h0PSIwLjk5OTk5MjkxIg0KICAgICBpZD0icmVjdDQ2ODkiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xIg0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjE1Ljk5OTk5Ig0KICAgICB5PSIxMDEiDQogICAgIHg9Ijc2LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MC44MDAwMDAwNztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NzYxLTAiDQogICAgIGhlaWdodD0iMS45OTk5OTQ1Ig0KICAgICB3aWR0aD0iMTUuOTk5OTkiDQogICAgIHk9IjEwNSINCiAgICAgeD0iNzYuMDAwMDA4Ig0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eTowLjgwMDAwMDA3O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ3NjEtNyINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSI5Ig0KICAgICB5PSIxMDkiDQogICAgIHg9Ijc2LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MC44MDAwMDAwNztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NzYxLTEtMSINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSIxMiINCiAgICAgeT0iMTI1Ig0KICAgICB4PSI3Ni4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xLTEtNCINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NDUiDQogICAgIHdpZHRoPSIxMCINCiAgICAgeT0iMTM3Ig0KICAgICB4PSI3Ni4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xLTEtNC00Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjEwIg0KICAgICB5PSIxMjkiDQogICAgIHg9IjgyIg0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eTowLjgwMDAwMDA3O3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ3NjEtMS0xLTQtNC0zIg0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjkiDQogICAgIHk9IjEzMyINCiAgICAgeD0iODIiDQogICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjAuODAwMDAwMDc7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjg7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDM2LjM5ODQzOCwxMDAuMDI1NCBjIC0wLjQyMzM2MiwtMC4wMTMgLTAuODQ2ODQ3LDAuMDEgLTEuMjY1NjI2LDAuMDYyIC0xLjY1NjU2MiwwLjIxOTYgLTMuMjQ0NTY3LDAuOTczOSAtNC41MDc4MTIsMi4yMjY2IEwgMjksMTAwLjU5OTEgbCAtMi4zMjQyMTksNy43MTI5IDcuODI2MTcyLC0xLjkwNjIgLTEuODA0Njg3LC0xLjkwNjMgYyAxLjU5NzcwMiwtMS41MzA4IDQuMDQ4NzA2LC0xLjg0NTMgNS45ODQzNzUsLTAuNzIwNyAxLjk3MTE2MiwxLjE0NTIgMi44ODE5NTQsMy4zOTc1IDIuMzA4NTkzLDUuNTUwOCAtMC41NzMzNjEsMi4xNTMzIC0yLjUzMzg2NSwzLjY5NTMgLTQuODMwMDc4LDMuNjk1MyBsIDAsMy4wNzQyIGMgMy41NTA3NTYsMCA2LjcxMDQ0MiwtMi40MTEzIDcuNjUwMzkxLC01Ljk0MTQgMC45Mzk5NDksLTMuNTMwMSAtMC42MTg0NjMsLTcuMjczNiAtMy43MTA5MzgsLTkuMDcwMyAtMS4xNTk2NzgsLTAuNjczOCAtMi40MzEwODcsLTEuMDIzMSAtMy43MDExNzEsLTEuMDYyNSB6Ig0KICAgICBpZD0icGF0aDQxMzgiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjg7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDU5LjcyMjY1Niw5OS45NjI5IGMgLTEuMjcwMDg0LDAuMDM5IC0yLjU0MTQ5MywwLjM4ODcgLTMuNzAxMTcyLDEuMDYyNSAtMy4wOTI0NzUsMS43OTY3IC00LjY1MDg4Niw1LjU0MDIgLTMuNzEwOTM3LDkuMDcwMyAwLjkzOTk0OSwzLjUzMDEgNC4wOTc2OCw1Ljk0MTQgNy42NDg0MzcsNS45NDE0IGwgMCwtMy4wNzQyIGMgLTIuMjk2MjE0LDAgLTQuMjU2NzE3LC0xLjU0MiAtNC44MzAwNzgsLTMuNjk1MyAtMC41NzMzNjEsLTIuMTUzMyAwLjMzNzQzMiwtNC40MDU2IDIuMzA4NTk0LC01LjU1MDggMS45MzU3MzEsLTEuMTI0NiA0LjM4ODYzLC0wLjgxMDIgNS45ODYzMjYsMC43MjA3IGwgLTEuODA2NjM4LDEuOTA2MyA3LjgyODEyOCwxLjkwNjIgLTIuMzI0MjIsLTcuNzEyOSAtMS42MjY5NiwxLjcxNjggYyAtMS4yNjMzOCwtMS4yNTMxIC0yLjg0ODkxNywtMi4wMDg4IC00LjUwNTg1NSwtMi4yMjg1IC0wLjQxODc3OCwtMC4wNTUgLTAuODQyMjYzLC0wLjA3NiAtMS4yNjU2MjUsLTAuMDYyIHoiDQogICAgIGlkPSJwYXRoNDEzOC0xIiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgZD0ibSAxMC41LDEwMCAwLDIgLTIuNDk5OTk5NiwwIEwgMTIsMTA3IGwgNCwtNSAtMi41LDAgMCwtMiAtMywwIHoiDQogICAgIGlkPSJwYXRoMzA1NS0wLTc3IiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDpub25lO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gNC45ODUwNTc0LDEwOC4wMTUgMTQuMDI5ODg1NiwtMC4wMyINCiAgICAgaWQ9InBhdGg1MjQ0LTUtMC01Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDpub25lO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gNC45ODQ5ODc0LDEzMi4wMTUgMTQuMDI5ODg2NiwtMC4wMyINCiAgICAgaWQ9InBhdGg1MjQ0LTUtMC01LTgiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjQ7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDM2LjM5ODQzOCwxMjMuOTYyOSBjIC0wLjQyMzM2MiwtMC4wMTMgLTAuODQ2ODQ3LDAuMDEgLTEuMjY1NjI2LDAuMDYyIC0xLjY1NjU2MiwwLjIxOTYgLTMuMjQ0NTY3LDAuOTczOSAtNC41MDc4MTIsMi4yMjY2IEwgMjksMTI0LjUzNjYgbCAtMi4zMjQyMTksNy43MTI5IDcuODI2MTcyLC0xLjkwNjIgLTEuODA0Njg3LC0xLjkwNjMgYyAxLjU5NzcwMiwtMS41MzA4IDQuMDQ4NzA2LC0xLjg0NTMgNS45ODQzNzUsLTAuNzIwNyAxLjk3MTE2MiwxLjE0NTMgMi44ODE5NTQsMy4zOTc1IDIuMzA4NTkzLDUuNTUwOCAtMC41NzMzNjEsMi4xNTMzIC0yLjUzMzg2NCwzLjY5NTMgLTQuODMwMDc4LDMuNjk1MyBsIDAsMy4wNzQyIGMgMy41NTA3NTcsMCA2LjcxMDQ0MiwtMi40MDkzIDcuNjUwMzkxLC01LjkzOTQgMC45Mzk5NDksLTMuNTMwMSAtMC42MTg0NjMsLTcuMjc1NiAtMy43MTA5MzgsLTkuMDcyMyAtMS4xNTk2NzgsLTAuNjczNyAtMi40MzEwODcsLTEuMDIzMSAtMy43MDExNzEsLTEuMDYyNSB6Ig0KICAgICBpZD0icGF0aDQxMzgtMTIiIC8%2BDQogIDxwYXRoDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHN0eWxlPSJjb2xvcjojMDAwMDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7Zm9udC1zaXplOm1lZGl1bTtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1kZWNvcmF0aW9uLWxpbmU6bm9uZTt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uLWNvbG9yOiMwMDAwMDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dGV4dC10cmFuc2Zvcm06bm9uZTtkaXJlY3Rpb246bHRyO2Jsb2NrLXByb2dyZXNzaW9uOnRiO3dyaXRpbmctbW9kZTpsci10YjtiYXNlbGluZS1zaGlmdDpiYXNlbGluZTt0ZXh0LWFuY2hvcjpzdGFydDt3aGl0ZS1zcGFjZTpub3JtYWw7Y2xpcC1ydWxlOm5vbnplcm87ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7b3BhY2l0eTowLjQ7aXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO2NvbG9yLWludGVycG9sYXRpb246c1JHQjtjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM6bGluZWFyUkdCO3NvbGlkLWNvbG9yOiMwMDAwMDA7c29saWQtb3BhY2l0eToxO2ZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6Mi42NjE1Nzg2NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjE7Y29sb3ItcmVuZGVyaW5nOmF1dG87aW1hZ2UtcmVuZGVyaW5nOmF1dG87c2hhcGUtcmVuZGVyaW5nOmF1dG87dGV4dC1yZW5kZXJpbmc6YXV0bztlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIg0KICAgICBkPSJtIDU5LjcyMjY1NiwxMjMuOTYyOSBjIC0xLjI3MDA4NCwwLjAzOSAtMi41NDE0OTMsMC4zODg4IC0zLjcwMTE3MiwxLjA2MjUgLTMuMDkyNDc1LDEuNzk2NyAtNC42NTA4ODYsNS41NDIyIC0zLjcxMDkzNyw5LjA3MjMgMC45Mzk5NDksMy41MzAxIDQuMDk3NjgsNS45Mzk0IDcuNjQ4NDM3LDUuOTM5NCBsIDAsLTMuMDc0MiBjIC0yLjI5NjIxNCwwIC00LjI1NjcxNywtMS41NDIgLTQuODMwMDc4LC0zLjY5NTMgLTAuNTczMzYxLC0yLjE1MzMgMC4zMzc0MzIsLTQuNDA1NSAyLjMwODU5NCwtNS41NTA4IDEuOTM1NzMxLC0xLjEyNDYgNC4zODg2MywtMC44MTAyIDUuOTg2MzI2LDAuNzIwNyBsIC0xLjgwNjYzOCwxLjkwNjMgNy44MjgxMjgsMS45MDYyIC0yLjMyNDIyLC03LjcxMjkgLTEuNjI2OTYsMS43MTY4IGMgLTEuMjYzMzgsLTEuMjUzMSAtMi44NDg5MTcsLTIuMDA4OCAtNC41MDU4NTUsLTIuMjI4NSAtMC40MTg3NzgsLTAuMDU1IC0wLjg0MjI2MywtMC4wNzYgLTEuMjY1NjI1LC0wLjA2MiB6Ig0KICAgICBpZD0icGF0aDQxMzgtMS0zIiAvPg0KICA8cGF0aA0KICAgICBpZD0icGF0aDYxOTEiDQogICAgIGQ9Im0gMTAuNSwxMTYgMCwtMiAtMi40OTk5OTk2LDAgTCAxMiwxMDkgbCA0LDUgLTIuNSwwIDAsMiAtMywwIHoiDQogICAgIHN0eWxlPSJvcGFjaXR5OjAuODtmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuOTY2O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgZD0ibSAxMC41LDEyOSAwLC0yIC0yLjQ5OTk5OTYsMCBMIDEyLDEyMiBsIDQsNSAtMi41LDAgMCwyIC0zLDAgeiINCiAgICAgaWQ9InBhdGg2MTkzIiAvPg0KICA8cGF0aA0KICAgICBpZD0icGF0aDYxOTUiDQogICAgIGQ9Im0gMTAuNSwxMzUgMCwyIC0yLjQ5OTk5OTYsMCBMIDEyLDE0MiBsIDQsLTUgLTIuNSwwIDAsLTIgLTMsMCB6Ig0KICAgICBzdHlsZT0ib3BhY2l0eTowLjg7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjk2NjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4NCiAgPHBhdGgNCiAgICAgc29kaXBvZGk6dHlwZT0ic3RhciINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIGlkPSJwYXRoNDUwMCINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIHNvZGlwb2RpOmN4PSIxMS41NTU4MSINCiAgICAgc29kaXBvZGk6Y3k9IjYwLjA3MzI0MiINCiAgICAgc29kaXBvZGk6cjE9IjUuMTExNjEwNCINCiAgICAgc29kaXBvZGk6cjI9IjIuNTU1ODA1MiINCiAgICAgc29kaXBvZGk6YXJnMT0iMCINCiAgICAgc29kaXBvZGk6YXJnMj0iMS4wNDcxOTc2Ig0KICAgICBpbmtzY2FwZTpmbGF0c2lkZWQ9ImZhbHNlIg0KICAgICBpbmtzY2FwZTpyb3VuZGVkPSIwIg0KICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIg0KICAgICBkPSJtIDE2LjY2NzQyLDYwLjA3MzI0MiAtMy44MzM3MDgsMi4yMTMzOTIgLTMuODMzNzA3MiwyLjIxMzM5MyAwLC00LjQyNjc4NSAwLC00LjQyNjc4NCAzLjgzMzcwODIsMi4yMTMzOTIgeiINCiAgICAgaW5rc2NhcGU6dHJhbnNmb3JtLWNlbnRlci14PSItMS4yNzc5MDI2IiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXg9IjEuMjc3OTAyIg0KICAgICBkPSJtIC0zMS41MDAwMDQsNjAuMDczMjQyIC0zLjgzMzcwOCwyLjIxMzM5MiAtMy44MzM3MDcsMi4yMTMzOTMgMCwtNC40MjY3ODUgMCwtNC40MjY3ODQgMy44MzM3MDcsMi4yMTMzOTIgeiINCiAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgaW5rc2NhcGU6cm91bmRlZD0iMCINCiAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJmYWxzZSINCiAgICAgc29kaXBvZGk6YXJnMj0iMS4wNDcxOTc2Ig0KICAgICBzb2RpcG9kaTphcmcxPSIwIg0KICAgICBzb2RpcG9kaTpyMj0iMi41NTU4MDUyIg0KICAgICBzb2RpcG9kaTpyMT0iNS4xMTE2MTA0Ig0KICAgICBzb2RpcG9kaTpjeT0iNjAuMDczMjQyIg0KICAgICBzb2RpcG9kaTpjeD0iLTM2LjYxMTYxNCINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIGlkPSJwYXRoNDUwMiINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHRyYW5zZm9ybT0ic2NhbGUoLTEsMSkiIC8%2BDQogIDxwYXRoDQogICAgIGQ9Im0gMTYuNjY3NDIsNjAuMDczMjEyIC0zLjgzMzcwOCwyLjIxMzM5MiAtMy44MzM3MDcyLDIuMjEzMzkyIDAsLTQuNDI2Nzg0IDAsLTQuNDI2Nzg1IDMuODMzNzA4MiwyLjIxMzM5MiB6Ig0KICAgICBpbmtzY2FwZTpyYW5kb21pemVkPSIwIg0KICAgICBpbmtzY2FwZTpyb3VuZGVkPSIwIg0KICAgICBpbmtzY2FwZTpmbGF0c2lkZWQ9ImZhbHNlIg0KICAgICBzb2RpcG9kaTphcmcyPSIxLjA0NzE5NzYiDQogICAgIHNvZGlwb2RpOmFyZzE9IjAiDQogICAgIHNvZGlwb2RpOnIyPSIyLjU1NTgwNTIiDQogICAgIHNvZGlwb2RpOnIxPSI1LjExMTYxMDQiDQogICAgIHNvZGlwb2RpOmN5PSI2MC4wNzMyMTIiDQogICAgIHNvZGlwb2RpOmN4PSIxMS41NTU4MSINCiAgICAgc29kaXBvZGk6c2lkZXM9IjMiDQogICAgIGlkPSJwYXRoNDUwNCINCiAgICAgc3R5bGU9ImZpbGw6IzRkNGQ0ZDtmaWxsLW9wYWNpdHk6MC45MDE5NjA3ODtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmUiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDcyLjAwNzQsNzEuNzg3NykiDQogICAgIGlua3NjYXBlOnRyYW5zZm9ybS1jZW50ZXIteT0iMS4yNzc5MDI5IiAvPg0KICA8cGF0aA0KICAgICBpbmtzY2FwZTp0cmFuc2Zvcm0tY2VudGVyLXk9Ii0xLjI3NzkwMjYiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsLTEsLTEsMCw5Niw5NikiDQogICAgIHNvZGlwb2RpOnR5cGU9InN0YXIiDQogICAgIHN0eWxlPSJmaWxsOiM0ZDRkNGQ7ZmlsbC1vcGFjaXR5OjAuOTAxOTYwNzg7c3Ryb2tlOiNkM2QzZDM7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpZD0icGF0aDQ1MDYiDQogICAgIHNvZGlwb2RpOnNpZGVzPSIzIg0KICAgICBzb2RpcG9kaTpjeD0iMTEuNTU1ODEiDQogICAgIHNvZGlwb2RpOmN5PSI2MC4wNzMyMTIiDQogICAgIHNvZGlwb2RpOnIxPSI1LjExMTYxMDQiDQogICAgIHNvZGlwb2RpOnIyPSIyLjU1NTgwNTIiDQogICAgIHNvZGlwb2RpOmFyZzE9IjAiDQogICAgIHNvZGlwb2RpOmFyZzI9IjEuMDQ3MTk3NiINCiAgICAgaW5rc2NhcGU6ZmxhdHNpZGVkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6cm91bmRlZD0iMCINCiAgICAgaW5rc2NhcGU6cmFuZG9taXplZD0iMCINCiAgICAgZD0ibSAxNi42Njc0Miw2MC4wNzMyMTIgLTMuODMzNzA4LDIuMjEzMzkyIC0zLjgzMzcwNzIsMi4yMTMzOTIgMCwtNC40MjY3ODQgMCwtNC40MjY3ODUgMy44MzM3MDgyLDIuMjEzMzkyIHoiIC8%2BDQogIDxwYXRoDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgaWQ9InBhdGg0NjE1LTUiDQogICAgIGQ9Im0gMTcxLjgyNTc0LDY1LjE3NDE5MyAxNi4zNDg1NCwwIC04LjE3NDI3LC0xMy4zNDg0NTQgeiINCiAgICAgc3R5bGU9ImZpbGw6I2ZiYjkxNztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZiYjkxNztzdHJva2Utd2lkdGg6MS42NTE2MTM5NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0ib3BhY2l0eToxO2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gMTc5LDU1IDAsNiAyLDAgMCwtNiINCiAgICAgaWQ9InBhdGg0MzAwIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiIC8%2BDQogIDxwYXRoDQogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgZD0ibSAxNzksNjIgMCwyIDIsMCAwLC0yIg0KICAgICBpZD0icGF0aDQzMDAtNiINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjIiAvPg0KPC9zdmc%2BDQo%3D%29%7Ddiv%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%20div%2Ejsoneditor%2Dexpand%7Bfloat%3Aright%3Bwidth%3A24px%3Bheight%3A24px%3Bpadding%3A0%3Bmargin%3A0%204px%200%200%3Bbackground%3Aurl%28data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8%2BDQo8c3ZnDQogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iDQogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIg0KICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIg0KICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCINCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIg0KICAgd2lkdGg9IjIxNiINCiAgIGhlaWdodD0iMTQ0Ig0KICAgaWQ9InN2ZzQxMzYiDQogICB2ZXJzaW9uPSIxLjEiDQogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkxIHIiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJqc29uZWRpdG9yLWljb25zLnN2ZyI%2BDQogIDx0aXRsZQ0KICAgICBpZD0idGl0bGU2NTEyIj5KU09OIEVkaXRvciBJY29uczwvdGl0bGU%2BDQogIDxtZXRhZGF0YQ0KICAgICBpZD0ibWV0YWRhdGE0MTQ4Ij4NCiAgICA8cmRmOlJERj4NCiAgICAgIDxjYzpXb3JrDQogICAgICAgICByZGY6YWJvdXQ9IiI%2BDQogICAgICAgIDxkYzpmb3JtYXQ%2BaW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0Pg0KICAgICAgICA8ZGM6dHlwZQ0KICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPg0KICAgICAgICA8ZGM6dGl0bGU%2BSlNPTiBFZGl0b3IgSWNvbnM8L2RjOnRpdGxlPg0KICAgICAgPC9jYzpXb3JrPg0KICAgIDwvcmRmOlJERj4NCiAgPC9tZXRhZGF0YT4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM0MTQ2IiAvPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiDQogICAgIGJvcmRlcm9wYWNpdHk9IjEiDQogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiDQogICAgIGdyaWR0b2xlcmFuY2U9IjEwIg0KICAgICBndWlkZXRvbGVyYW5jZT0iMTAiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIg0KICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMjgiDQogICAgIGlkPSJuYW1lZHZpZXc0MTQ0Ig0KICAgICBzaG93Z3JpZD0idHJ1ZSINCiAgICAgaW5rc2NhcGU6em9vbT0iNCINCiAgICAgaW5rc2NhcGU6Y3g9Ijk3LjIxNzI0OCINCiAgICAgaW5rc2NhcGU6Y3k9IjU5Ljk1MDIyNyINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjAiDQogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmc0MTM2Ig0KICAgICBzaG93Z3VpZGVzPSJmYWxzZSINCiAgICAgYm9yZGVybGF5ZXI9ImZhbHNlIg0KICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0idHJ1ZSINCiAgICAgc2hvd2JvcmRlcj0idHJ1ZSI%2BDQogICAgPGlua3NjYXBlOmdyaWQNCiAgICAgICB0eXBlPSJ4eWdyaWQiDQogICAgICAgaWQ9ImdyaWQ0NjQwIg0KICAgICAgIGVtcHNwYWNpbmc9IjI0IiAvPg0KICA8L3NvZGlwb2RpOm5hbWVkdmlldz4NCiAgPCEtLSBDcmVhdGVkIHdpdGggU1ZHLWVkaXQgLSBodHRwOi8vc3ZnLWVkaXQuZ29vZ2xlY29kZS5jb20vIC0tPg0KICA8Zw0KICAgICBpZD0iZzQzOTQiPg0KICAgIDxyZWN0DQogICAgICAgeD0iNCINCiAgICAgICB5PSI0Ig0KICAgICAgIHdpZHRoPSIxNiINCiAgICAgICBoZWlnaHQ9IjE2Ig0KICAgICAgIGlkPSJzdmdfMSINCiAgICAgICBzdHlsZT0iZmlsbDojMWFhZTFjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2VjM2YyOTtmaWxsLW9wYWNpdHk6MC45NDExNzY0NztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIyOC4wMDAwMDYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InN2Z18xLTciIC8%2BDQogICAgPHJlY3QNCiAgICAgICBpZD0icmVjdDQxNjUiDQogICAgICAgaGVpZ2h0PSIxNiINCiAgICAgICB3aWR0aD0iMTYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgeD0iNTIuMDAwMDA0Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIHg9IjE3Mi4wMDAwMiINCiAgICAgICB5PSIzLjk5OTk4NTIiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InJlY3Q0MTc1IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTYiDQogICAgICAgeT0iMy45OTk5OTUiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgaWQ9InJlY3Q0MTc1LTMiIC8%2BDQogICAgPGcNCiAgICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiDQogICAgICAgaWQ9Imc0Mjk5Ij4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEiDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk4NiINCiAgICAgICAgIHdpZHRoPSI5Ljk5OTk5MjQiDQogICAgICAgICB5PSIxMC45OTk5OTgiDQogICAgICAgICB4PSI3LjAwMDAwNDgiIC8%2BDQogICAgICA8cmVjdA0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgICAgIGlkPSJzdmdfMS0xLTEiDQogICAgICAgICBoZWlnaHQ9IjkuOTk5OTgzOCINCiAgICAgICAgIHdpZHRoPSIxLjk5OTk5NTUiDQogICAgICAgICB5PSI3LjAwMDAxMTQiDQogICAgICAgICB4PSIxMS4wMDAwMDUiIC8%2BDQogICAgPC9nPg0KICAgIDxnDQogICAgICAgc3R5bGU9InN0cm9rZTpub25lIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLjcwNzEwNjc4LDE5LjAyOTQzNSwxMi4wMDAwMDEpIg0KICAgICAgIGlkPSJnNDI5OS0zIj4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEtMCINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTg2Ig0KICAgICAgICAgd2lkdGg9IjkuOTk5OTkyNCINCiAgICAgICAgIHk9IjEwLjk5OTk5OCINCiAgICAgICAgIHg9IjcuMDAwMDA0OCIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgaWQ9InN2Z18xLTEtMS05Ig0KICAgICAgICAgaGVpZ2h0PSI5Ljk5OTk4MzgiDQogICAgICAgICB3aWR0aD0iMS45OTk5OTU1Ig0KICAgICAgICAgeT0iNy4wMDAwMTE0Ig0KICAgICAgICAgeD0iMTEuMDAwMDA1IiAvPg0KICAgIDwvZz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgeD0iNTUuMDAwMDA0Ig0KICAgICAgIHk9IjcuMDAwMDA0OCINCiAgICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICAgIGlkPSJzdmdfMS03LTUiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBpZD0icmVjdDQzNTQiDQogICAgICAgaGVpZ2h0PSI2Ljk5OTk5MDUiDQogICAgICAgd2lkdGg9IjYuOTk5OTkwOSINCiAgICAgICB5PSIxMC4wMDAwMSINCiAgICAgICB4PSI1OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojNGM0YzRjO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojM2M4MGRmO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAuOTQxMTc2NDciDQogICAgICAgeD0iNTguMDAwMDA0Ig0KICAgICAgIHk9IjEwLjAwMDAwNSINCiAgICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICAgIGlkPSJzdmdfMS03LTUtNyIgLz4NCiAgICA8Zw0KICAgICAgIGlkPSJnNDM3OCI%2BDQogICAgICA8cmVjdA0KICAgICAgICAgaWQ9InN2Z18xLTctNS0zIg0KICAgICAgICAgaGVpZ2h0PSIxLjk5OTk5NjUiDQogICAgICAgICB3aWR0aD0iNy45OTk5OTA5Ig0KICAgICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgICAgeD0iMTk4Ig0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICAgICAgeD0iMTk4Ig0KICAgICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgICAgd2lkdGg9IjExLjk5OTk5NSINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTQ2Ig0KICAgICAgICAgaWQ9InJlY3Q0Mzc0IiAvPg0KICAgICAgPHJlY3QNCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgICB4PSIxOTgiDQogICAgICAgICB5PSIxNC45OTk5OTYiDQogICAgICAgICB3aWR0aD0iMy45OTk5OTI4Ig0KICAgICAgICAgaGVpZ2h0PSIxLjk5OTk5OTUiDQogICAgICAgICBpZD0icmVjdDQzNzYiIC8%2BDQogICAgPC9nPg0KICAgIDxnDQogICAgICAgaWQ9Imc0MzgzIg0KICAgICAgIHRyYW5zZm9ybT0ibWF0cml4KDEsMCwwLC0xLC0yMy45OTk5OTUsMjMuOTk5OTk1KSI%2BDQogICAgICA8cmVjdA0KICAgICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICAgIHg9IjE5OCINCiAgICAgICAgIHk9IjEwLjk5OTk5OSINCiAgICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk2NSINCiAgICAgICAgIGlkPSJyZWN0NDM4NSIgLz4NCiAgICAgIDxyZWN0DQogICAgICAgICBpZD0icmVjdDQzODciDQogICAgICAgICBoZWlnaHQ9IjEuOTk5OTk0NiINCiAgICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgICB5PSI3LjAwMDAwMDUiDQogICAgICAgICB4PSIxOTgiDQogICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgICAgPHJlY3QNCiAgICAgICAgIGlkPSJyZWN0NDM4OSINCiAgICAgICAgIGhlaWdodD0iMS45OTk5OTk1Ig0KICAgICAgICAgd2lkdGg9IjMuOTk5OTkyOCINCiAgICAgICAgIHk9IjE0Ljk5OTk5NiINCiAgICAgICAgIHg9IjE5OCINCiAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogICAgPC9nPg0KICAgIDxyZWN0DQogICAgICAgeT0iMy45OTk5MTk5Ig0KICAgICAgIHg9Ijc2Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC00Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg0MzUxIg0KICAgICAgIGQ9Im0gODUuMTA0NDcsNi4wMTU3Mzg0IC0wLjAxNTYsMS40MDYzIGMgMy4wMjY2OSwtMC4yNDAyIDAuMzMwMDgsMy42NTA3OTk2IDIuNDg0MzgsNC41NzgwOTk2IC0yLjE4Njk0LDEuMDkzOCAwLjQ5MTkxLDQuOTA2OSAtMi40NTMxMyw0LjU3ODEgbCAtMC4wMTU2LDEuNDIxOSBjIDUuNzA4MjgsMC41NTkgMS4wMzI2NCwtNS4xMDA1IDQuNzAzMTMsLTUuMjY1NiBsIDAsLTEuNDA2MyBjIC0zLjYxMzAzLC0wLjAyNyAxLjExODkzLC01LjcwNjk5OTYgLTQuNzAzMTMsLTUuMzEyNDk5NiB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuMjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyINCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoNDM1MS05Ig0KICAgICAgIGQ9Im0gODIuNzgxMjUsNS45OTg0Mzg0IDAuMDE1NiwxLjQwNjMgYyAtMy4wMjY2OCwtMC4yNDAyIC0wLjMzMDA3LDMuNjUwNjk5NiAtMi40ODQzNyw0LjU3ODA5OTYgMi4xODY5NCwxLjA5MzggLTAuNDkxOTIsNC45MDY5IDIuNDUzMTIsNC41NzgxIGwgMC4wMTU2LDEuNDIxOSBjIC01LjcwODI3LDAuNTU5IC0xLjAzMjYzLC01LjEwMDQgLTQuNzAzMTIsLTUuMjY1NiBsIDAsLTEuNDA2MyBjIDMuNjEzMDMsLTAuMDI3IC0xLjExODk0LC01LjcwNzA5OTYgNC43MDMxMiwtNS4zMTI0OTk2IHoiDQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogICAgPHJlY3QNCiAgICAgICB5PSIzLjk5OTkxOTkiDQogICAgICAgeD0iMTAwIg0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC0yNSINCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDI5ODciDQogICAgICAgZD0ibSAxMDMuNzE5LDUuNjcxOTM4NCAwLDEyLjcxODc5OTYgMy4wMzEyNSwwIDAsLTEuNTMxMyAtMS4zNDM3NSwwIDAsLTkuNjI0OTk5NiAxLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICAgIGlkPSJwYXRoMjk4Ny0xIg0KICAgICAgIGQ9Im0gMTEyLjIxODUsNS42NzIxOTg0IDAsMTIuNzE4Nzk5NiAtMy4wMzEyNSwwIDAsLTEuNTMxMyAxLjM0Mzc1LDAgMCwtOS42MjQ5OTk2IC0xLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHJlY3QNCiAgICAgICB5PSIzLjk5OTkxOTkiDQogICAgICAgeD0iMTI0Ig0KICAgICAgIGhlaWdodD0iMTYiDQogICAgICAgd2lkdGg9IjE2Ig0KICAgICAgIGlkPSJyZWN0Mzc1NC03MyINCiAgICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjY2MiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDM3ODAiDQogICAgICAgZD0ibSAxMjYuMjgyNCwxNy42MDI5MzggMS43ODk1NywwIDEuMTQxNDMsLTIuODY0MSA1LjY1MzY0LDAgMS4xNDg1NiwyLjg2NDEgMS43NjU2NSwwIC00Ljc4Njg3LC0xMS4xNjEwOTk2IC0xLjkxOTAzLDAgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDM3ODIiDQogICAgICAgZD0ibSAxMjkuNzI3MDQsMTMuNDc4ODM4IDQuNjA4NTIsMC4wMSAtMi4zMDQyNiwtNS41NDk3OTk2IHoiDQogICAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz4NCiAgICA8cmVjdA0KICAgICAgIHk9IjMuOTk5OTE5OSINCiAgICAgICB4PSIxNDgiDQogICAgICAgaGVpZ2h0PSIxNiINCiAgICAgICB3aWR0aD0iMTYiDQogICAgICAgaWQ9InJlY3QzNzU0LTM1Ig0KICAgICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8%2BDQogICAgPHBhdGgNCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiDQogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgICBpZD0icGF0aDUwMDgtMiINCiAgICAgICBkPSJtIDE1Ni40NzY1NSw1Ljg5MTczODQgMCwyLjE3OTcgMC40NjA5MywyLjM5ODM5OTYgMS44MjgxMywwIDAuMzk4NDQsLTIuMzk4Mzk5NiAwLC0yLjE3OTcgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICAgIDxwYXRoDQogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIg0KICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgICAgaWQ9InBhdGg1MDA4LTItOCINCiAgICAgICBkPSJtIDE1Mi41MTU2MSw1Ljg5MDYzODQgMCwyLjE3OTcgMC40NjA5NCwyLjM5ODM5OTYgMS44MjgxMiwwIDAuMzk4NDQsLTIuMzk4Mzk5NiAwLC0yLjE3OTcgeiINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPg0KICA8L2c%2BDQogIDxyZWN0DQogICAgIHg9IjQiDQogICAgIHk9IjI3Ljk5OTk5NCINCiAgICAgd2lkdGg9IjE2Ig0KICAgICBoZWlnaHQ9IjE2Ig0KICAgICBpZD0icmVjdDQ0MzIiDQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjI4LjAwMDAwNiINCiAgICAgeT0iMjcuOTk5OTkiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgaWQ9InJlY3Q0NDM0IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ0MzYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIHdpZHRoPSIxNiINCiAgICAgeT0iMjcuOTk5OTkiDQogICAgIHg9IjUyLjAwMDAwNCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgeD0iMTcyLjAwMDAyIg0KICAgICB5PSIyNy45OTk5ODEiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgaWQ9InJlY3Q0NDQ2IiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSIxOTYiDQogICAgIHk9IjI3Ljk5OTk5Ig0KICAgICB3aWR0aD0iMTYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIGlkPSJyZWN0NDQ0OCIgLz4NCiAgPGcNCiAgICAgaWQ9Imc0NDY2Ig0KICAgICBzdHlsZT0ic3Ryb2tlOm5vbmUiDQogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMjMuOTk5OTk1KSI%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIGlkPSJyZWN0NDQ2OCINCiAgICAgICBoZWlnaHQ9IjEuOTk5OTk4NiINCiAgICAgICB3aWR0aD0iOS45OTk5OTI0Ig0KICAgICAgIHk9IjEwLjk5OTk5OCINCiAgICAgICB4PSI3LjAwMDAwNDgiIC8%2BDQogICAgPHJlY3QNCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICAgIGlkPSJyZWN0NDQ3MCINCiAgICAgICBoZWlnaHQ9IjkuOTk5OTgzOCINCiAgICAgICB3aWR0aD0iMS45OTk5OTU1Ig0KICAgICAgIHk9IjcuMDAwMDExNCINCiAgICAgICB4PSIxMS4wMDAwMDUiIC8%2BDQogIDwvZz4NCiAgPGcNCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC43MDcxMDY3OCwtMC43MDcxMDY3OCwwLjcwNzEwNjc4LDAuNzA3MTA2NzgsMTkuMDI5NDM1LDM1Ljk5OTk5NikiDQogICAgIGlkPSJnNDQ3MiINCiAgICAgc3R5bGU9InN0cm9rZTpub25lIj4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgaWQ9InJlY3Q0NDc0Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTg2Ig0KICAgICAgIHdpZHRoPSI5Ljk5OTk5MjQiDQogICAgICAgeT0iMTAuOTk5OTk4Ig0KICAgICAgIHg9IjcuMDAwMDA0OCIgLz4NCiAgICA8cmVjdA0KICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgICAgaWQ9InJlY3Q0NDc2Ig0KICAgICAgIGhlaWdodD0iOS45OTk5ODM4Ig0KICAgICAgIHdpZHRoPSIxLjk5OTk5NTUiDQogICAgICAgeT0iNy4wMDAwMTE0Ig0KICAgICAgIHg9IjExLjAwMDAwNSIgLz4NCiAgPC9nPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSI1NS4wMDAwMDQiDQogICAgIHk9IjMxIg0KICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICBoZWlnaHQ9IjYuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NDc4IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ0ODAiDQogICAgIGhlaWdodD0iNi45OTk5OTA1Ig0KICAgICB3aWR0aD0iNi45OTk5OTA5Ig0KICAgICB5PSIzNC4wMDAwMDgiDQogICAgIHg9IjU4Ig0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICB4PSI1OC4wMDAwMDQiDQogICAgIHk9IjM0LjAwMDAwNCINCiAgICAgd2lkdGg9IjYuOTk5OTkwOSINCiAgICAgaGVpZ2h0PSI2Ljk5OTk5MDUiDQogICAgIGlkPSJyZWN0NDQ4MiIgLz4NCiAgPGcNCiAgICAgaWQ9Imc0NDg0Ig0KICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDIzLjk5OTk5NSkiPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDg2Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTY1Ig0KICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5NDYiDQogICAgICAgaWQ9InJlY3Q0NDg4IiAvPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iMTQuOTk5OTk2Ig0KICAgICAgIHdpZHRoPSIzLjk5OTk5MjgiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5OTUiDQogICAgICAgaWQ9InJlY3Q0NDkwIiAvPg0KICA8L2c%2BDQogIDxnDQogICAgIGlkPSJnNDQ5MiINCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMSwwLDAsLTEsLTIzLjk5OTk5NSw0Ny45OTk5OSkiPg0KICAgIDxyZWN0DQogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MCINCiAgICAgICB4PSIxOTgiDQogICAgICAgeT0iMTAuOTk5OTk5Ig0KICAgICAgIHdpZHRoPSI3Ljk5OTk5MDkiDQogICAgICAgaGVpZ2h0PSIxLjk5OTk5NjUiDQogICAgICAgaWQ9InJlY3Q0NDk0IiAvPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDk2Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTQ2Ig0KICAgICAgIHdpZHRoPSIxMS45OTk5OTUiDQogICAgICAgeT0iNy4wMDAwMDA1Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICAgIDxyZWN0DQogICAgICAgaWQ9InJlY3Q0NDk4Ig0KICAgICAgIGhlaWdodD0iMS45OTk5OTk1Ig0KICAgICAgIHdpZHRoPSIzLjk5OTk5MjgiDQogICAgICAgeT0iMTQuOTk5OTk2Ig0KICAgICAgIHg9IjE5OCINCiAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowIiAvPg0KICA8L2c%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiDQogICAgIGlkPSJyZWN0Mzc1NC04Ig0KICAgICB3aWR0aD0iMTYiDQogICAgIGhlaWdodD0iMTYiDQogICAgIHg9Ijc2Ig0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gODUuMTA0NDgsMzAuMDE1NTM3IC0wLjAxNTYsMS40MDYzIGMgMy4wMjY2OCwtMC4yNDAyIDAuMzMwMDcsMy42NTA4IDIuNDg0MzgsNC41NzgxIC0yLjE4Njk1LDEuMDkzOCAwLjQ5MTkxLDQuOTA2ODggLTIuNDUzMTMsNC41NzgwOCBsIC0wLjAxNTYsMS40MjE5IGMgNS43MDgyNywwLjU1OSAxLjAzMjYzLC01LjEwMDQ4IDQuNzAzMTMsLTUuMjY1NTggbCAwLC0xLjQwNjMgYyAtMy42MTMwNCwtMC4wMjcgMS4xMTg5MywtNS43MDcgLTQuNzAzMTMsLTUuMzEyNSB6Ig0KICAgICBpZD0icGF0aDQzNTEtMSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjYyIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MC4yO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Im0gODIuNzgxMjYsMjkuOTk4MjM3IDAuMDE1NiwxLjQwNjMgYyAtMy4wMjY2OCwtMC4yNDAyIC0wLjMzMDA4LDMuNjUwNyAtMi40ODQzOCw0LjU3ODEgMi4xODY5NCwxLjA5MzggLTAuNDkxOTEsNC45MDY4OCAyLjQ1MzEzLDQuNTc4MDggbCAwLjAxNTYsMS40MjE5IGMgLTUuNzA4MjgsMC41NTkgLTEuMDMyNjQsLTUuMTAwMzggLTQuNzAzMTMsLTUuMjY1NTggbCAwLC0xLjQwNjMgYyAzLjYxMzAzLC0wLjAyNyAtMS4xMTg5MywtNS43MDcxIDQuNzAzMTMsLTUuMzEyNSB6Ig0KICAgICBpZD0icGF0aDQzNTEtOS01Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2NjIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBpZD0icmVjdDM3NTQtNjUiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgeD0iMTAwIg0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSINCiAgICAgZD0ibSAxMDMuNzE5LDI5LjY3MTkzNyAwLDEyLjcxODc4IDMuMDMxMjUsMCAwLC0xLjUzMTMgLTEuMzQzNzUsMCAwLC05LjYyNDk4IDEuMzc1LDAgMCwtMS41NjI1IHoiDQogICAgIGlkPSJwYXRoMjk4Ny04Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDExMi4yMTg1LDI5LjY3MTkzNyAwLDEyLjcxODc4IC0zLjAzMTI1LDAgMCwtMS41MzEzIDEuMzQzNzUsMCAwLC05LjYyNDk4IC0xLjM3NSwwIDAsLTEuNTYyNSB6Ig0KICAgICBpZD0icGF0aDI5ODctMS05Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBpZD0icmVjdDM3NTQtOTIiDQogICAgIHdpZHRoPSIxNiINCiAgICAgaGVpZ2h0PSIxNiINCiAgICAgeD0iMTI0Ig0KICAgICB5PSIyNy45OTk5MiIgLz4NCiAgPHBhdGgNCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSINCiAgICAgZD0ibSAxMjYuMjgyNCw0MS42MDI5MTcgMS43ODk1NywwIDEuMTQxNDMsLTIuODY0MDggNS42NTM2NCwwIDEuMTQ4NTYsMi44NjQwOCAxLjc2NTY1LDAgLTQuNzg2ODcsLTExLjE2MTA4IC0xLjkxOTAyLDAgeiINCiAgICAgaWQ9InBhdGgzNzgwLTkiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDEyOS43MjcwNCwzNy40Nzg4MzcgNC42MDg1MiwwLjAxIC0yLjMwNDI2LC01LjU0OTggeiINCiAgICAgaWQ9InBhdGgzNzgyLTIiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiDQogICAgIGlkPSJyZWN0Mzc1NC00NyINCiAgICAgd2lkdGg9IjE2Ig0KICAgICBoZWlnaHQ9IjE2Ig0KICAgICB4PSIxNDgiDQogICAgIHk9IjI3Ljk5OTkyIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDE1Ni40NzY1NiwyOS44OTE3MzcgMCwyLjE3OTcgMC40NjA5MywyLjM5ODQgMS44MjgxMywwIDAuMzk4NDQsLTIuMzk4NCAwLC0yLjE3OTcgeiINCiAgICAgaWQ9InBhdGg1MDA4LTItMSINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIg0KICAgICBkPSJtIDE1Mi41MTU2MiwyOS44OTA2MzcgMCwyLjE3OTcgMC40NjA5NCwyLjM5ODQgMS44MjgxMiwwIDAuMzk4NDQsLTIuMzk4NCAwLC0yLjE3OTcgeiINCiAgICAgaWQ9InBhdGg1MDA4LTItOC04Ig0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2NjY2MiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTIiDQogICAgIGhlaWdodD0iMS45OTk5OTYxIg0KICAgICB3aWR0aD0iMTEuOTk5OTk2Ig0KICAgICB5PSI2NCINCiAgICAgeD0iNTQiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTItMiINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjUyIg0KICAgICB4PSI4MC4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iNTIiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjEiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iNTgiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjMiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDU2NSINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjU4Ig0KICAgICB4PSI4NS4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDU2NyINCiAgICAgaGVpZ2h0PSIyLjk5OTk5MDUiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIHk9IjY0Ig0KICAgICB4PSI4MC4wMDAwMDgiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iNjQiDQogICAgIHdpZHRoPSIyLjk5OTk5MDciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICBpZD0icmVjdDQ1NjkiIC8%2BDQogIDxjaXJjbGUNCiAgICAgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOm5vbmU7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOiM0YzRjNGM7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lIg0KICAgICBpZD0icGF0aDQ1NzEiDQogICAgIGN4PSIxMTAuMDYwODEiDQogICAgIGN5PSI1Ny45MzkyMDkiDQogICAgIHI9IjQuNzQzODgzNiIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MC45ODQzMTM3MztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCINCiAgICAgeD0iMTE2LjY0NTY2Ig0KICAgICB5PSItMzEuNzk3NTIiDQogICAgIHdpZHRoPSI0LjIyOTcxMyINCiAgICAgaGVpZ2h0PSI2LjQwNTM4ODQiDQogICAgIGlkPSJyZWN0NDU2My0yIg0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Ik0gMTI1LDU2IDEzOC43NzAyNyw1Ni4wOTUgMTMyLDY0IFoiDQogICAgIGlkPSJwYXRoNDYxMyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjIiAvPg0KICA8cGF0aA0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiDQogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiDQogICAgIGlkPSJwYXRoNDYxNSINCiAgICAgZD0iTSAxNDksNjQgMTYyLjc3MDI3LDYzLjkwNSAxNTYsNTYgWiINCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojNGM0YzRjO2ZpbGwtb3BhY2l0eTowLjk4NDMxMzczO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowIg0KICAgICB4PSI1NCINCiAgICAgeT0iNTMiDQogICAgIHdpZHRoPSIxMS45OTk5OTYiDQogICAgIGhlaWdodD0iMS45OTk5OTYxIg0KICAgICBpZD0icmVjdDQ2MzgiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJzdmdfMS03LTItMjQiDQogICAgIGhlaWdodD0iMS45OTk5OTU3Ig0KICAgICB3aWR0aD0iMTIuOTk5OTkiDQogICAgIHk9Ii01NiINCiAgICAgeD0iNTMiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiIC8%2BDQogIDxyZWN0DQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiDQogICAgIHN0eWxlPSJmaWxsOiM0YzRjNGM7ZmlsbC1vcGFjaXR5OjAuOTg0MzEzNzM7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAiDQogICAgIHg9IjUzIg0KICAgICB5PSItNjYiDQogICAgIHdpZHRoPSIxMi45OTk5OSINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NTciDQogICAgIGlkPSJyZWN0NDY1NyIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NjU5Ig0KICAgICBoZWlnaHQ9IjAuOTk5OTkyOTEiDQogICAgIHdpZHRoPSIxMS45OTk5OTkiDQogICAgIHk9IjU3Ig0KICAgICB4PSI1NCINCiAgICAgc3R5bGU9ImZpbGw6IzRjNGM0YztmaWxsLW9wYWNpdHk6MC45ODQzMTM3MztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICB4PSI1NCINCiAgICAgeT0iODguMDAwMTIyIg0KICAgICB3aWR0aD0iMTEuOTk5OTk2Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk2MSINCiAgICAgaWQ9InJlY3Q0NjYxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iNzYuMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjYzIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NjUiDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI3Ni4wMDAxMjIiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NjciDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI4Mi4wMDAxMjIiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgeT0iODIuMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjY5IiAvPg0KICA8cmVjdA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHg9IjgwLjAwMDAwOCINCiAgICAgeT0iODguMDAwMTIyIg0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICBoZWlnaHQ9IjIuOTk5OTkwNSINCiAgICAgaWQ9InJlY3Q0NjcxIiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2NzMiDQogICAgIGhlaWdodD0iMi45OTk5OTA1Ig0KICAgICB3aWR0aD0iMi45OTk5OTA3Ig0KICAgICB5PSI4OC4wMDAxMjIiDQogICAgIHg9Ijg1LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8Y2lyY2xlDQogICAgIHI9IjQuNzQzODgzNiINCiAgICAgY3k9IjgxLjkzOTMzMSINCiAgICAgY3g9IjExMC4wNjA4MSINCiAgICAgaWQ9ImNpcmNsZTQ2NzUiDQogICAgIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cmVjdA0KICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjcwNzEwNjc4LDAuNzA3MTA2NzgsLTAuNzA3MTA2NzgsMC43MDcxMDY3OCwwLDApIg0KICAgICBpZD0icmVjdDQ2NzciDQogICAgIGhlaWdodD0iNi40MDUzODg0Ig0KICAgICB3aWR0aD0iNC4yMjk3MTMiDQogICAgIHk9Ii0xNC44MjY4MTYiDQogICAgIHg9IjEzMy42MTYzIg0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiIC8%2BDQogIDxwYXRoDQogICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjYyINCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCINCiAgICAgaWQ9InBhdGg0Njc5Ig0KICAgICBkPSJtIDEyNSw4MC4wMDAwMDUgMTMuNzcwMjcsMC4wOTQ5OSBMIDEzMiw4Ny45OTk5OTIgWiINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2QzZDNkMztzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiAvPg0KICA8cGF0aA0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZDNkM2QzO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIGQ9Ik0gMTQ5LDg4LjAwMDIgMTYyLjc3MDI3LDg3LjkwNTIgMTU2LDgwLjAwMDIgWiINCiAgICAgaWQ9InBhdGg0NjgxIg0KICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjY2MiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDY4MyINCiAgICAgaGVpZ2h0PSIxLjk5OTk5NjEiDQogICAgIHdpZHRoPSIxMS45OTk5OTYiDQogICAgIHk9Ijc3LjAwMDEyMiINCiAgICAgeD0iNTQiDQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW9wYWNpdHk6MSIgLz4NCiAgPHJlY3QNCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMCwxLC0xLDAsMCwwKSINCiAgICAgc3R5bGU9ImZpbGw6I2QzZDNkMztmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MDtzdHJva2Utb3BhY2l0eToxIg0KICAgICB4PSI3Ny4wMDAxMjIiDQogICAgIHk9Ii01NiINCiAgICAgd2lkdGg9IjEyLjk5OTk5Ig0KICAgICBoZWlnaHQ9IjEuOTk5OTk1NyINCiAgICAgaWQ9InJlY3Q0Njg1IiAvPg0KICA8cmVjdA0KICAgICBpZD0icmVjdDQ2ODciDQogICAgIGhlaWdodD0iMS45OTk5OTU3Ig0KICAgICB3aWR0aD0iMTIuOTk5OTkiDQogICAgIHk9Ii02NiINCiAgICAgeD0iNzcuMDAwMTIyIg0KICAgICBzdHlsZT0iZmlsbDojZDNkM2QzO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1vcGFjaXR5OjEiDQogICAgIHRyYW5zZm9ybT0ibWF0cml4KDAsMSwtMSwwLDAsMCkiIC8%2BDQogIDxyZWN0DQogICAgIHN0eWxlPSJmaWxsOiNkM2QzZDM7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjA7c3Ryb2tlLW9wYWNpdHk6MSINCiAgICAgeD0iNTQiDQogICAgIHk9IjgxLjAwMDEyMiINCiAgICAgd2lkdGg9IjExLjk5OTk5OSINCiAgICAgaGVpZ2h0PSIwLjk5OTk5MjkxIg0KICAgICBpZD0icmVjdDQ2ODkiIC8%2BDQogIDxyZWN0DQogICAgIGlkPSJyZWN0NDc2MS0xIg0KICAgICBoZWlnaHQ9IjEuOTk5OTk0NSINCiAgICAgd2lkdGg9IjE1Ljk5OTk5Ig0KICAgICB5PSIxMDEiDQogICAgIHg9Ijc2LjAwMDAwOCINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MC44MDAwMDAwNztzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MCIgLz4NCiAgPHJlY3QNCiAgICAgaWQ9InJlY3Q0NzYxLTAiDQogICAgIGhlaWdodD0iMS45OTk5OTQ1Ig0KICAgICB3aWR0aD0iMTUuOTk5OTkiDQogICAgIHk9IjEwNSINCiAgICAgeD0iNzYuMDAwMDA4Ig0KICAgICBzdHlsZT0iZmlsbD
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment