@podman-desktop/grype-extension-api 0.2.0-next.202607210651-0dfdfe3 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.cjs +1 -2
  2. package/package.json +3 -3
package/dist/index.cjs CHANGED
@@ -86,7 +86,6 @@ function cached(getter) {
86
86
  Object.defineProperty(this, "value", { value });
87
87
  return value;
88
88
  }
89
- throw new Error("cached value already set");
90
89
  } };
91
90
  }
92
91
  function nullish$1(input) {
@@ -6658,4 +6657,4 @@ Object.defineProperty(exports, "syft", {
6658
6657
  }
6659
6658
  });
6660
6659
 
6661
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwibmFtZXMiOlsiX2EiLCJudWxsaXNoIiwiRiIsImluaXRpYWxpemVyIiwidXRpbC5qc29uU3RyaW5naWZ5UmVwbGFjZXIiLCJjb3JlLiRab2RBc3luY0Vycm9yIiwidXRpbC5maW5hbGl6ZUlzc3VlIiwiY29yZS5jb25maWciLCJwYXJzZSIsImVycm9ycy4kWm9kUmVhbEVycm9yIiwicGFyc2VBc3luYyIsImVycm9ycy4kWm9kRXJyb3IiLCJzYWZlUGFyc2UiLCJzYWZlUGFyc2VBc3luYyIsImN1aWQiLCJjdWlkMiIsInVsaWQiLCJ4aWQiLCJrc3VpZCIsIm5hbm9pZCIsImR1cmF0aW9uIiwiZ3VpZCIsInV1aWQiLCJlbWFpbCIsIl9lbW9qaSIsImVtb2ppIiwiaXB2NCIsImlwdjYiLCJtYWMiLCJ1dGlsLmVzY2FwZVJlZ2V4IiwiY2lkcnY0IiwiY2lkcnY2IiwiYmFzZTY0IiwiYmFzZTY0dXJsIiwiaG9zdG5hbWUiLCJlMTY0IiwiZGF0ZSIsInRpbWUiLCJkYXRldGltZSIsInN0cmluZyIsImJpZ2ludCIsIm51bWJlciIsImJvb2xlYW4iLCJfbnVsbCIsIl91bmRlZmluZWQiLCJoZXgiLCJ1dGlsLmZsb2F0U2FmZVJlbWFpbmRlciIsInV0aWwuTlVNQkVSX0ZPUk1BVF9SQU5HRVMiLCJyZWdleGVzLmludGVnZXIiLCJ1dGlsLkJJR0lOVF9GT1JNQVRfUkFOR0VTIiwidXRpbC5udWxsaXNoIiwidXRpbC5nZXRTaXphYmxlT3JpZ2luIiwidXRpbC5nZXRMZW5ndGhhYmxlT3JpZ2luIiwicmVnZXhlcy5sb3dlcmNhc2UiLCJyZWdleGVzLnVwcGVyY2FzZSIsInV0aWwuZXNjYXBlUmVnZXgiLCJ1dGlsLnByZWZpeElzc3VlcyIsImNvbnRlbnQiLCJ1dGlsLmFib3J0ZWQiLCJ1dGlsLmV4cGxpY2l0bHlBYm9ydGVkIiwiY29yZS4kWm9kQXN5bmNFcnJvciIsInNhZmVQYXJzZSIsInNhZmVQYXJzZUFzeW5jIiwicmVnZXhlcy5zdHJpbmciLCJyZWdleGVzLmd1aWQiLCJyZWdleGVzLnV1aWQiLCJyZWdleGVzLmVtYWlsIiwicmVnZXhlcy5lbW9qaSIsInJlZ2V4ZXMubmFub2lkIiwicmVnZXhlcy5jdWlkIiwicmVnZXhlcy5jdWlkMiIsInJlZ2V4ZXMudWxpZCIsInJlZ2V4ZXMueGlkIiwicmVnZXhlcy5rc3VpZCIsInJlZ2V4ZXMuZGF0ZXRpbWUiLCJyZWdleGVzLmRhdGUiLCJyZWdleGVzLnRpbWUiLCJyZWdleGVzLmR1cmF0aW9uIiwicmVnZXhlcy5pcHY0IiwicmVnZXhlcy5pcHY2IiwicmVnZXhlcy5tYWMiLCJyZWdleGVzLmNpZHJ2NCIsInJlZ2V4ZXMuY2lkcnY2IiwicmVnZXhlcy5iYXNlNjQiLCJyZWdleGVzLmJhc2U2NHVybCIsInJlZ2V4ZXMuZTE2NCIsInJlZ2V4ZXMubnVtYmVyIiwicmVnZXhlcy5ib29sZWFuIiwicmVnZXhlcy5iaWdpbnQiLCJyZWdleGVzLnVuZGVmaW5lZCIsInJlZ2V4ZXMubnVsbCIsInV0aWwucHJlZml4SXNzdWVzIiwidXRpbC5vcHRpb25hbEtleXMiLCJ1dGlsLmNhY2hlZCIsImlzT2JqZWN0IiwidXRpbC5pc09iamVjdCIsInV0aWwuZXNjIiwiYWxsb3dzRXZhbCIsInV0aWwuYWxsb3dzRXZhbCIsInV0aWwuZmluYWxpemVJc3N1ZSIsImNvcmUuY29uZmlnIiwidXRpbC5jbGVhblJlZ2V4IiwidXRpbC5pc1BsYWluT2JqZWN0IiwidXRpbC5nZXRFbnVtVmFsdWVzIiwidXRpbC5lc2NhcGVSZWdleCIsImNvcmUuJFpvZEVuY29kZUVycm9yIiwicGFyc2UiLCJwYXJzZUFzeW5jIiwidXRpbC5pc3N1ZSIsInV0aWwubm9ybWFsaXplUGFyYW1zIiwiX3VuZGVmaW5lZCIsIl9udWxsIiwiX3ZvaWQiLCJjaGVja3MuJFpvZENoZWNrTGVzc1RoYW4iLCJjaGVja3MuJFpvZENoZWNrR3JlYXRlclRoYW4iLCJjaGVja3MuJFpvZENoZWNrTXVsdGlwbGVPZiIsImNoZWNrcy4kWm9kQ2hlY2tNYXhTaXplIiwiY2hlY2tzLiRab2RDaGVja01pblNpemUiLCJjaGVja3MuJFpvZENoZWNrU2l6ZUVxdWFscyIsImNoZWNrcy4kWm9kQ2hlY2tNYXhMZW5ndGgiLCJjaGVja3MuJFpvZENoZWNrTWluTGVuZ3RoIiwiY2hlY2tzLiRab2RDaGVja0xlbmd0aEVxdWFscyIsImNoZWNrcy4kWm9kQ2hlY2tSZWdleCIsImNoZWNrcy4kWm9kQ2hlY2tMb3dlckNhc2UiLCJjaGVja3MuJFpvZENoZWNrVXBwZXJDYXNlIiwiY2hlY2tzLiRab2RDaGVja0luY2x1ZGVzIiwiY2hlY2tzLiRab2RDaGVja1N0YXJ0c1dpdGgiLCJjaGVja3MuJFpvZENoZWNrRW5kc1dpdGgiLCJjaGVja3MuJFpvZENoZWNrUHJvcGVydHkiLCJjaGVja3MuJFpvZENoZWNrTWltZVR5cGUiLCJjaGVja3MuJFpvZENoZWNrT3ZlcndyaXRlIiwidXRpbC5zbHVnaWZ5IiwiaXNzdWUiLCJ1dGlsLmlzc3VlIiwiY2hlY2tzLiRab2RDaGVjayIsImRlc2NyaWJlIiwibWV0YSIsInNjaGVtYXMuJFpvZENvZGVjIiwic2NoZW1hcy4kWm9kQm9vbGVhbiIsInNjaGVtYXMuJFpvZFN0cmluZyIsImNvcmUuX2lzb0RhdGVUaW1lIiwiZGF0ZSIsImNvcmUuX2lzb0RhdGUiLCJjb3JlLl9pc29UaW1lIiwiY29yZS5faXNvRHVyYXRpb24iLCJjb3JlLmZvcm1hdEVycm9yIiwiY29yZS5mbGF0dGVuRXJyb3IiLCJ1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciIsInBhcnNlLnBhcnNlIiwicGFyc2Uuc2FmZVBhcnNlIiwicGFyc2UucGFyc2VBc3luYyIsInBhcnNlLnNhZmVQYXJzZUFzeW5jIiwicGFyc2UuZW5jb2RlIiwicGFyc2UuZGVjb2RlIiwicGFyc2UuZW5jb2RlQXN5bmMiLCJwYXJzZS5kZWNvZGVBc3luYyIsInBhcnNlLnNhZmVFbmNvZGUiLCJwYXJzZS5zYWZlRGVjb2RlIiwicGFyc2Uuc2FmZUVuY29kZUFzeW5jIiwicGFyc2Uuc2FmZURlY29kZUFzeW5jIiwidXRpbC5tZXJnZURlZnMiLCJjb3JlLmNsb25lIiwiY2hlY2tzLm92ZXJ3cml0ZSIsInByb2Nlc3NvcnMuc3RyaW5nUHJvY2Vzc29yIiwiY2hlY2tzLnJlZ2V4IiwiY2hlY2tzLmluY2x1ZGVzIiwiY2hlY2tzLnN0YXJ0c1dpdGgiLCJjaGVja3MuZW5kc1dpdGgiLCJjaGVja3MubWluTGVuZ3RoIiwiY2hlY2tzLm1heExlbmd0aCIsImNoZWNrcy5sZW5ndGgiLCJjaGVja3MubG93ZXJjYXNlIiwiY2hlY2tzLnVwcGVyY2FzZSIsImNoZWNrcy50cmltIiwiY2hlY2tzLm5vcm1hbGl6ZSIsImNoZWNrcy50b0xvd2VyQ2FzZSIsImNoZWNrcy50b1VwcGVyQ2FzZSIsImNoZWNrcy5zbHVnaWZ5IiwiY29yZS5fZW1haWwiLCJjb3JlLl91cmwiLCJjb3JlLl9qd3QiLCJjb3JlLl9lbW9qaSIsImNvcmUuX2d1aWQiLCJjb3JlLl91dWlkIiwiY29yZS5fdXVpZHY0IiwiY29yZS5fdXVpZHY2IiwiY29yZS5fdXVpZHY3IiwiY29yZS5fbmFub2lkIiwiY29yZS5fY3VpZCIsImNvcmUuX2N1aWQyIiwiY29yZS5fdWxpZCIsImNvcmUuX2Jhc2U2NCIsImNvcmUuX2Jhc2U2NHVybCIsImNvcmUuX3hpZCIsImNvcmUuX2tzdWlkIiwiY29yZS5faXB2NCIsImNvcmUuX2lwdjYiLCJjb3JlLl9jaWRydjQiLCJjb3JlLl9jaWRydjYiLCJjb3JlLl9lMTY0IiwiaXNvLmRhdGV0aW1lIiwiaXNvLmRhdGUiLCJpc28udGltZSIsImlzby5kdXJhdGlvbiIsImNvcmUuX3N0cmluZyIsImNvcmUucmVnZXhlcy5odHRwUHJvdG9jb2wiLCJjb3JlLnJlZ2V4ZXMuZG9tYWluIiwidXRpbC5ub3JtYWxpemVQYXJhbXMiLCJjb3JlLl9tYWMiLCJjb3JlLl9zdHJpbmdGb3JtYXQiLCJjb3JlLnJlZ2V4ZXMuaG9zdG5hbWUiLCJjb3JlLnJlZ2V4ZXMuaGV4IiwiY29yZS5yZWdleGVzIiwicHJvY2Vzc29ycy5udW1iZXJQcm9jZXNzb3IiLCJjaGVja3MuZ3QiLCJjaGVja3MuZ3RlIiwiY2hlY2tzLmx0IiwiY2hlY2tzLmx0ZSIsImNoZWNrcy5tdWx0aXBsZU9mIiwiY29yZS5fbnVtYmVyIiwiY29yZS5faW50IiwiY29yZS5fZmxvYXQzMiIsImNvcmUuX2Zsb2F0NjQiLCJjb3JlLl9pbnQzMiIsImNvcmUuX3VpbnQzMiIsInByb2Nlc3NvcnMuYm9vbGVhblByb2Nlc3NvciIsImNvcmUuX2Jvb2xlYW4iLCJwcm9jZXNzb3JzLmJpZ2ludFByb2Nlc3NvciIsImNvcmUuX2JpZ2ludCIsImNvcmUuX2ludDY0IiwiY29yZS5fdWludDY0IiwicHJvY2Vzc29ycy5zeW1ib2xQcm9jZXNzb3IiLCJjb3JlLl9zeW1ib2wiLCJwcm9jZXNzb3JzLnVuZGVmaW5lZFByb2Nlc3NvciIsImNvcmUuX3VuZGVmaW5lZCIsInByb2Nlc3NvcnMubnVsbFByb2Nlc3NvciIsImNvcmUuX251bGwiLCJwcm9jZXNzb3JzLmFueVByb2Nlc3NvciIsImNvcmUuX2FueSIsInByb2Nlc3NvcnMudW5rbm93blByb2Nlc3NvciIsImNvcmUuX3Vua25vd24iLCJwcm9jZXNzb3JzLm5ldmVyUHJvY2Vzc29yIiwiY29yZS5fbmV2ZXIiLCJwcm9jZXNzb3JzLnZvaWRQcm9jZXNzb3IiLCJjb3JlLl92b2lkIiwicHJvY2Vzc29ycy5kYXRlUHJvY2Vzc29yIiwiY29yZS5fZGF0ZSIsInByb2Nlc3NvcnMuYXJyYXlQcm9jZXNzb3IiLCJjb3JlLl9hcnJheSIsInByb2Nlc3NvcnMub2JqZWN0UHJvY2Vzc29yIiwidXRpbC5leHRlbmQiLCJ1dGlsLnNhZmVFeHRlbmQiLCJ1dGlsLm1lcmdlIiwidXRpbC5waWNrIiwidXRpbC5vbWl0IiwidXRpbC5wYXJ0aWFsIiwidXRpbC5yZXF1aXJlZCIsInByb2Nlc3NvcnMudW5pb25Qcm9jZXNzb3IiLCJwcm9jZXNzb3JzLmludGVyc2VjdGlvblByb2Nlc3NvciIsInByb2Nlc3NvcnMudHVwbGVQcm9jZXNzb3IiLCJjb3JlLiRab2RUeXBlIiwicHJvY2Vzc29ycy5yZWNvcmRQcm9jZXNzb3IiLCJwcm9jZXNzb3JzLm1hcFByb2Nlc3NvciIsImNvcmUuX21pblNpemUiLCJjb3JlLl9tYXhTaXplIiwiY29yZS5fc2l6ZSIsInByb2Nlc3NvcnMuc2V0UHJvY2Vzc29yIiwicHJvY2Vzc29ycy5lbnVtUHJvY2Vzc29yIiwicHJvY2Vzc29ycy5saXRlcmFsUHJvY2Vzc29yIiwicHJvY2Vzc29ycy5maWxlUHJvY2Vzc29yIiwiY29yZS5fbWltZSIsImNvcmUuX2ZpbGUiLCJwcm9jZXNzb3JzLnRyYW5zZm9ybVByb2Nlc3NvciIsImNvcmUuJFpvZEVuY29kZUVycm9yIiwiaXNzdWUiLCJ1dGlsLmlzc3VlIiwicHJvY2Vzc29ycy5vcHRpb25hbFByb2Nlc3NvciIsInByb2Nlc3NvcnMubnVsbGFibGVQcm9jZXNzb3IiLCJwcm9jZXNzb3JzLmRlZmF1bHRQcm9jZXNzb3IiLCJ1dGlsLnNoYWxsb3dDbG9uZSIsInByb2Nlc3NvcnMucHJlZmF1bHRQcm9jZXNzb3IiLCJwcm9jZXNzb3JzLm5vbm9wdGlvbmFsUHJvY2Vzc29yIiwicHJvY2Vzc29ycy5zdWNjZXNzUHJvY2Vzc29yIiwicHJvY2Vzc29ycy5jYXRjaFByb2Nlc3NvciIsInByb2Nlc3NvcnMubmFuUHJvY2Vzc29yIiwiY29yZS5fbmFuIiwicHJvY2Vzc29ycy5waXBlUHJvY2Vzc29yIiwicHJvY2Vzc29ycy5yZWFkb25seVByb2Nlc3NvciIsInByb2Nlc3NvcnMudGVtcGxhdGVMaXRlcmFsUHJvY2Vzc29yIiwicHJvY2Vzc29ycy5sYXp5UHJvY2Vzc29yIiwicHJvY2Vzc29ycy5wcm9taXNlUHJvY2Vzc29yIiwicHJvY2Vzc29ycy5mdW5jdGlvblByb2Nlc3NvciIsInByb2Nlc3NvcnMuY3VzdG9tUHJvY2Vzc29yIiwiY29yZS4kWm9kQ2hlY2siLCJjb3JlLl9jdXN0b20iLCJjb3JlLl9yZWZpbmUiLCJjb3JlLl9zdXBlclJlZmluZSIsImNvcmUuZGVzY3JpYmUiLCJjb3JlLm1ldGEiLCJjb3JlLl9zdHJpbmdib29sIiwiX3NjaGVtYXMiLCJfY2hlY2tzIiwiX2lzbyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9jb3JlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL3V0aWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvZXJyb3JzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL3BhcnNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL3JlZ2V4ZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvY2hlY2tzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL2RvYy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS92ZXJzaW9ucy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9zY2hlbWFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL3JlZ2lzdHJpZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvYXBpLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL3RvLWpzb24tc2NoZW1hLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL2pzb24tc2NoZW1hLXByb2Nlc3NvcnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvem9kL3Y0L2NsYXNzaWMvY2hlY2tzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jbGFzc2ljL2lzby5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9lcnJvcnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvem9kL3Y0L2NsYXNzaWMvcGFyc2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvem9kL3Y0L2NsYXNzaWMvc2NoZW1hcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9mcm9tLWpzb24tc2NoZW1hLmpzIiwiLi4vc3JjL3NjaGVtYXMvZ3J5cGUudHMiLCIuLi9zcmMvZ2VuZXJhdGVkL3N5ZnQtc2NoZW1hLmpzb24iLCIuLi9zcmMvc2NoZW1hcy9zeWZ0LnRzIiwiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfYTtcbi8qKiBBIHNwZWNpYWwgY29uc3RhbnQgd2l0aCB0eXBlIGBuZXZlcmAgKi9cbmV4cG9ydCBjb25zdCBORVZFUiA9IC8qQF9fUFVSRV9fKi8gT2JqZWN0LmZyZWV6ZSh7XG4gICAgc3RhdHVzOiBcImFib3J0ZWRcIixcbn0pO1xuZXhwb3J0IC8qQF9fTk9fU0lERV9FRkZFQ1RTX18qLyBmdW5jdGlvbiAkY29uc3RydWN0b3IobmFtZSwgaW5pdGlhbGl6ZXIsIHBhcmFtcykge1xuICAgIGZ1bmN0aW9uIGluaXQoaW5zdCwgZGVmKSB7XG4gICAgICAgIGlmICghaW5zdC5fem9kKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5zdCwgXCJfem9kXCIsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICBkZWYsXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cjogXyxcbiAgICAgICAgICAgICAgICAgICAgdHJhaXRzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnN0Ll96b2QudHJhaXRzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGluc3QuX3pvZC50cmFpdHMuYWRkKG5hbWUpO1xuICAgICAgICBpbml0aWFsaXplcihpbnN0LCBkZWYpO1xuICAgICAgICAvLyBzdXBwb3J0IHByb3RvdHlwZSBtb2RpZmljYXRpb25zXG4gICAgICAgIGNvbnN0IHByb3RvID0gXy5wcm90b3R5cGU7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm90byk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgayA9IGtleXNbaV07XG4gICAgICAgICAgICBpZiAoIShrIGluIGluc3QpKSB7XG4gICAgICAgICAgICAgICAgaW5zdFtrXSA9IHByb3RvW2tdLmJpbmQoaW5zdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gZG9lc24ndCB3b3JrIGlmIFBhcmVudCBoYXMgYSBjb25zdHJ1Y3RvciB3aXRoIGFyZ3VtZW50c1xuICAgIGNvbnN0IFBhcmVudCA9IHBhcmFtcz8uUGFyZW50ID8/IE9iamVjdDtcbiAgICBjbGFzcyBEZWZpbml0aW9uIGV4dGVuZHMgUGFyZW50IHtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERlZmluaXRpb24sIFwibmFtZVwiLCB7IHZhbHVlOiBuYW1lIH0pO1xuICAgIGZ1bmN0aW9uIF8oZGVmKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgaW5zdCA9IHBhcmFtcz8uUGFyZW50ID8gbmV3IERlZmluaXRpb24oKSA6IHRoaXM7XG4gICAgICAgIGluaXQoaW5zdCwgZGVmKTtcbiAgICAgICAgKF9hID0gaW5zdC5fem9kKS5kZWZlcnJlZCA/PyAoX2EuZGVmZXJyZWQgPSBbXSk7XG4gICAgICAgIGZvciAoY29uc3QgZm4gb2YgaW5zdC5fem9kLmRlZmVycmVkKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXywgXCJpbml0XCIsIHsgdmFsdWU6IGluaXQgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIFN5bWJvbC5oYXNJbnN0YW5jZSwge1xuICAgICAgICB2YWx1ZTogKGluc3QpID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJhbXM/LlBhcmVudCAmJiBpbnN0IGluc3RhbmNlb2YgcGFyYW1zLlBhcmVudClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBpbnN0Py5fem9kPy50cmFpdHM/LmhhcyhuYW1lKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXywgXCJuYW1lXCIsIHsgdmFsdWU6IG5hbWUgfSk7XG4gICAgcmV0dXJuIF87XG59XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gICBVVElMSVRJRVMgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCBjb25zdCAkYnJhbmQgPSBTeW1ib2woXCJ6b2RfYnJhbmRcIik7XG5leHBvcnQgY2xhc3MgJFpvZEFzeW5jRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKGBFbmNvdW50ZXJlZCBQcm9taXNlIGR1cmluZyBzeW5jaHJvbm91cyBwYXJzZS4gVXNlIC5wYXJzZUFzeW5jKCkgaW5zdGVhZC5gKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgJFpvZEVuY29kZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICAgICAgc3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke25hbWV9YCk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiWm9kRW5jb2RlRXJyb3JcIjtcbiAgICB9XG59XG4oX2EgPSBnbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWcgPz8gKF9hLl9fem9kX2dsb2JhbENvbmZpZyA9IHt9KTtcbmV4cG9ydCBjb25zdCBnbG9iYWxDb25maWcgPSBnbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZztcbmV4cG9ydCBmdW5jdGlvbiBjb25maWcobmV3Q29uZmlnKSB7XG4gICAgaWYgKG5ld0NvbmZpZylcbiAgICAgICAgT2JqZWN0LmFzc2lnbihnbG9iYWxDb25maWcsIG5ld0NvbmZpZyk7XG4gICAgcmV0dXJuIGdsb2JhbENvbmZpZztcbn1cbiIsImltcG9ydCB7IGdsb2JhbENvbmZpZyB9IGZyb20gXCIuL2NvcmUuanNcIjtcbi8vIGZ1bmN0aW9uc1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEVxdWFsKHZhbCkge1xuICAgIHJldHVybiB2YWw7XG59XG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Tm90RXF1YWwodmFsKSB7XG4gICAgcmV0dXJuIHZhbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRJcyhfYXJnKSB7IH1cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROZXZlcihfeCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVja1wiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoXykgeyB9XG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bVZhbHVlcyhlbnRyaWVzKSB7XG4gICAgY29uc3QgbnVtZXJpY1ZhbHVlcyA9IE9iamVjdC52YWx1ZXMoZW50cmllcykuZmlsdGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJudW1iZXJcIik7XG4gICAgY29uc3QgdmFsdWVzID0gT2JqZWN0LmVudHJpZXMoZW50cmllcylcbiAgICAgICAgLmZpbHRlcigoW2ssIF9dKSA9PiBudW1lcmljVmFsdWVzLmluZGV4T2YoK2spID09PSAtMSlcbiAgICAgICAgLm1hcCgoW18sIHZdKSA9PiB2KTtcbiAgICByZXR1cm4gdmFsdWVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGpvaW5WYWx1ZXMoYXJyYXksIHNlcGFyYXRvciA9IFwifFwiKSB7XG4gICAgcmV0dXJuIGFycmF5Lm1hcCgodmFsKSA9PiBzdHJpbmdpZnlQcmltaXRpdmUodmFsKSkuam9pbihzZXBhcmF0b3IpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGpzb25TdHJpbmdpZnlSZXBsYWNlcihfLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYmlnaW50XCIpXG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZWQoZ2V0dGVyKSB7XG4gICAgY29uc3Qgc2V0ID0gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgaWYgKCFzZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldHRlcigpO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInZhbHVlXCIsIHsgdmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FjaGVkIHZhbHVlIGFscmVhZHkgc2V0XCIpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gbnVsbGlzaChpbnB1dCkge1xuICAgIHJldHVybiBpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuUmVnZXgoc291cmNlKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBzb3VyY2Uuc3RhcnRzV2l0aChcIl5cIikgPyAxIDogMDtcbiAgICBjb25zdCBlbmQgPSBzb3VyY2UuZW5kc1dpdGgoXCIkXCIpID8gc291cmNlLmxlbmd0aCAtIDEgOiBzb3VyY2UubGVuZ3RoO1xuICAgIHJldHVybiBzb3VyY2Uuc2xpY2Uoc3RhcnQsIGVuZCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZmxvYXRTYWZlUmVtYWluZGVyKHZhbCwgc3RlcCkge1xuICAgIGNvbnN0IHJhdGlvID0gdmFsIC8gc3RlcDtcbiAgICBjb25zdCByb3VuZGVkUmF0aW8gPSBNYXRoLnJvdW5kKHJhdGlvKTtcbiAgICAvLyBVc2UgYSByZWxhdGl2ZSBlcHNpbG9uIHNjYWxlZCB0byB0aGUgbWFnbml0dWRlIG9mIHRoZSByZXN1bHRcbiAgICBjb25zdCB0b2xlcmFuY2UgPSBOdW1iZXIuRVBTSUxPTiAqIE1hdGgubWF4KE1hdGguYWJzKHJhdGlvKSwgMSk7XG4gICAgaWYgKE1hdGguYWJzKHJhdGlvIC0gcm91bmRlZFJhdGlvKSA8IHRvbGVyYW5jZSlcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHJhdGlvIC0gcm91bmRlZFJhdGlvO1xufVxuY29uc3QgRVZBTFVBVElORyA9IC8qIEBfX1BVUkVfXyovIFN5bWJvbChcImV2YWx1YXRpbmdcIik7XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lTGF6eShvYmplY3QsIGtleSwgZ2V0dGVyKSB7XG4gICAgbGV0IHZhbHVlID0gdW5kZWZpbmVkO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IEVWQUxVQVRJTkcpIHtcbiAgICAgICAgICAgICAgICAvLyBDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQsIHJldHVybiB1bmRlZmluZWQgdG8gYnJlYWsgdGhlIGN5Y2xlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBFVkFMVUFUSU5HO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0dGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCh2KSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgICAgICAgICAvLyBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIG9iamVjdFtrZXldID0gdjtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdENsb25lKG9iaikge1xuICAgIHJldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25Qcm9wKHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wLCB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGVmcyguLi5kZWZzKSB7XG4gICAgY29uc3QgbWVyZ2VkRGVzY3JpcHRvcnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGRlZiBvZiBkZWZzKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZGVmKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihtZXJnZWREZXNjcmlwdG9ycywgZGVzY3JpcHRvcnMpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoe30sIG1lcmdlZERlc2NyaXB0b3JzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZURlZihzY2hlbWEpIHtcbiAgICByZXR1cm4gbWVyZ2VEZWZzKHNjaGVtYS5fem9kLmRlZik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEF0UGF0aChvYmosIHBhdGgpIHtcbiAgICBpZiAoIXBhdGgpXG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgcmV0dXJuIHBhdGgucmVkdWNlKChhY2MsIGtleSkgPT4gYWNjPy5ba2V5XSwgb2JqKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlQWxsT2JqZWN0KHByb21pc2VzT2JqKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb21pc2VzT2JqKTtcbiAgICBjb25zdCBwcm9taXNlcyA9IGtleXMubWFwKChrZXkpID0+IHByb21pc2VzT2JqW2tleV0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigocmVzdWx0cykgPT4ge1xuICAgICAgICBjb25zdCByZXNvbHZlZE9iaiA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc29sdmVkT2JqW2tleXNbaV1dID0gcmVzdWx0c1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWRPYmo7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tU3RyaW5nKGxlbmd0aCA9IDEwKSB7XG4gICAgY29uc3QgY2hhcnMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCI7XG4gICAgbGV0IHN0ciA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBzdHIgKz0gY2hhcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKV07XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5leHBvcnQgZnVuY3Rpb24gZXNjKHN0cikge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzdHIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNsdWdpZnkoaW5wdXQpIHtcbiAgICByZXR1cm4gaW5wdXRcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnRyaW0oKVxuICAgICAgICAucmVwbGFjZSgvW15cXHdcXHMtXS9nLCBcIlwiKVxuICAgICAgICAucmVwbGFjZSgvW1xcc18tXSsvZywgXCItXCIpXG4gICAgICAgIC5yZXBsYWNlKC9eLSt8LSskL2csIFwiXCIpO1xufVxuZXhwb3J0IGNvbnN0IGNhcHR1cmVTdGFja1RyYWNlID0gKFwiY2FwdHVyZVN0YWNrVHJhY2VcIiBpbiBFcnJvciA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlIDogKC4uLl9hcmdzKSA9PiB7IH0pO1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KGRhdGEpIHtcbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgZGF0YSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShkYXRhKTtcbn1cbmV4cG9ydCBjb25zdCBhbGxvd3NFdmFsID0gLyogQF9fUFVSRV9fKi8gY2FjaGVkKCgpID0+IHtcbiAgICAvLyBTa2lwIHRoZSBwcm9iZSB1bmRlciBgaml0bGVzc2A6IHN0cmljdCBDU1BzIHJlcG9ydCB0aGUgY2F1Z2h0IGBuZXcgRnVuY3Rpb25gXG4gICAgLy8gYXMgYSBgc2VjdXJpdHlwb2xpY3l2aW9sYXRpb25gIGV2ZW4gdGhvdWdoIHRoZSB0aHJvdyBpcyBzd2FsbG93ZWQuXG4gICAgaWYgKGdsb2JhbENvbmZpZy5qaXRsZXNzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIG5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcyhcIkNsb3VkZmxhcmVcIikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBGID0gRnVuY3Rpb247XG4gICAgICAgIG5ldyBGKFwiXCIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY2F0Y2ggKF8pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qobykge1xuICAgIGlmIChpc09iamVjdChvKSA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBtb2RpZmllZCBjb25zdHJ1Y3RvclxuICAgIGNvbnN0IGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuICAgIGlmIChjdG9yID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICh0eXBlb2YgY3RvciAhPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyBtb2RpZmllZCBwcm90b3R5cGVcbiAgICBjb25zdCBwcm90ID0gY3Rvci5wcm90b3R5cGU7XG4gICAgaWYgKGlzT2JqZWN0KHByb3QpID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGN0b3IgZG9lc24ndCBoYXZlIHN0YXRpYyBgaXNQcm90b3R5cGVPZmBcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3QsIFwiaXNQcm90b3R5cGVPZlwiKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93Q2xvbmUobykge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG8pKVxuICAgICAgICByZXR1cm4geyAuLi5vIH07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobykpXG4gICAgICAgIHJldHVybiBbLi4ub107XG4gICAgaWYgKG8gaW5zdGFuY2VvZiBNYXApXG4gICAgICAgIHJldHVybiBuZXcgTWFwKG8pO1xuICAgIGlmIChvIGluc3RhbmNlb2YgU2V0KVxuICAgICAgICByZXR1cm4gbmV3IFNldChvKTtcbiAgICByZXR1cm4gbztcbn1cbmV4cG9ydCBmdW5jdGlvbiBudW1LZXlzKGRhdGEpIHtcbiAgICBsZXQga2V5Q291bnQgPSAwO1xuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSB7XG4gICAgICAgICAgICBrZXlDb3VudCsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBrZXlDb3VudDtcbn1cbmV4cG9ydCBjb25zdCBnZXRQYXJzZWRUeXBlID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB0ID0gdHlwZW9mIGRhdGE7XG4gICAgc3dpdGNoICh0KSB7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc05hTihkYXRhKSA/IFwibmFuXCIgOiBcIm51bWJlclwiO1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgIHJldHVybiBcImZ1bmN0aW9uXCI7XG4gICAgICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgICAgICAgIHJldHVybiBcImJpZ2ludFwiO1xuICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzeW1ib2xcIjtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS50aGVuICYmIHR5cGVvZiBkYXRhLnRoZW4gPT09IFwiZnVuY3Rpb25cIiAmJiBkYXRhLmNhdGNoICYmIHR5cGVvZiBkYXRhLmNhdGNoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJwcm9taXNlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibWFwXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIFNldCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2V0XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIERhdGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAodHlwZW9mIEZpbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJmaWxlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHByb3BlcnR5S2V5VHlwZXMgPSAvKiBAX19QVVJFX18qLyBuZXcgU2V0KFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcInN5bWJvbFwiXSk7XG5leHBvcnQgY29uc3QgcHJpbWl0aXZlVHlwZXMgPSAvKiBAX19QVVJFX18qLyBuZXcgU2V0KFtcbiAgICBcInN0cmluZ1wiLFxuICAgIFwibnVtYmVyXCIsXG4gICAgXCJiaWdpbnRcIixcbiAgICBcImJvb2xlYW5cIixcbiAgICBcInN5bWJvbFwiLFxuICAgIFwidW5kZWZpbmVkXCIsXG5dKTtcbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVSZWdleChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBcIlxcXFwkJlwiKTtcbn1cbi8vIHpvZC1zcGVjaWZpYyB1dGlsc1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGluc3QsIGRlZiwgcGFyYW1zKSB7XG4gICAgY29uc3QgY2wgPSBuZXcgaW5zdC5fem9kLmNvbnN0cihkZWYgPz8gaW5zdC5fem9kLmRlZik7XG4gICAgaWYgKCFkZWYgfHwgcGFyYW1zPy5wYXJlbnQpXG4gICAgICAgIGNsLl96b2QucGFyZW50ID0gaW5zdDtcbiAgICByZXR1cm4gY2w7XG59XG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUGFyYW1zKF9wYXJhbXMpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBfcGFyYW1zO1xuICAgIGlmICghcGFyYW1zKVxuICAgICAgICByZXR1cm4ge307XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMgPT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiB7IGVycm9yOiAoKSA9PiBwYXJhbXMgfTtcbiAgICBpZiAocGFyYW1zPy5tZXNzYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhcmFtcz8uZXJyb3IgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtc1wiKTtcbiAgICAgICAgcGFyYW1zLmVycm9yID0gcGFyYW1zLm1lc3NhZ2U7XG4gICAgfVxuICAgIGRlbGV0ZSBwYXJhbXMubWVzc2FnZTtcbiAgICBpZiAodHlwZW9mIHBhcmFtcy5lcnJvciA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmV0dXJuIHsgLi4ucGFyYW1zLCBlcnJvcjogKCkgPT4gcGFyYW1zLmVycm9yIH07XG4gICAgcmV0dXJuIHBhcmFtcztcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUcmFuc3BhcmVudFByb3h5KGdldHRlcikge1xuICAgIGxldCB0YXJnZXQ7XG4gICAgcmV0dXJuIG5ldyBQcm94eSh7fSwge1xuICAgICAgICBnZXQoXywgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgIHRhcmdldCA/PyAodGFyZ2V0ID0gZ2V0dGVyKCkpO1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQoXywgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB0YXJnZXQgPz8gKHRhcmdldCA9IGdldHRlcigpKTtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcik7XG4gICAgICAgIH0sXG4gICAgICAgIGhhcyhfLCBwcm9wKSB7XG4gICAgICAgICAgICB0YXJnZXQgPz8gKHRhcmdldCA9IGdldHRlcigpKTtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3ApO1xuICAgICAgICB9LFxuICAgICAgICBkZWxldGVQcm9wZXJ0eShfLCBwcm9wKSB7XG4gICAgICAgICAgICB0YXJnZXQgPz8gKHRhcmdldCA9IGdldHRlcigpKTtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCk7XG4gICAgICAgIH0sXG4gICAgICAgIG93bktleXMoXykge1xuICAgICAgICAgICAgdGFyZ2V0ID8/ICh0YXJnZXQgPSBnZXR0ZXIoKSk7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRhcmdldCk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihfLCBwcm9wKSB7XG4gICAgICAgICAgICB0YXJnZXQgPz8gKHRhcmdldCA9IGdldHRlcigpKTtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3ApO1xuICAgICAgICB9LFxuICAgICAgICBkZWZpbmVQcm9wZXJ0eShfLCBwcm9wLCBkZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICB0YXJnZXQgPz8gKHRhcmdldCA9IGdldHRlcigpKTtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcCwgZGVzY3JpcHRvcik7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5UHJpbWl0aXZlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJiaWdpbnRcIilcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkgKyBcIm5cIjtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImA7XG4gICAgcmV0dXJuIGAke3ZhbHVlfWA7XG59XG5leHBvcnQgZnVuY3Rpb24gb3B0aW9uYWxLZXlzKHNoYXBlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNoYXBlKS5maWx0ZXIoKGspID0+IHtcbiAgICAgICAgcmV0dXJuIHNoYXBlW2tdLl96b2Qub3B0aW4gPT09IFwib3B0aW9uYWxcIiAmJiBzaGFwZVtrXS5fem9kLm9wdG91dCA9PT0gXCJvcHRpb25hbFwiO1xuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IE5VTUJFUl9GT1JNQVRfUkFOR0VTID0ge1xuICAgIHNhZmVpbnQ6IFtOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJdLFxuICAgIGludDMyOiBbLTIxNDc0ODM2NDgsIDIxNDc0ODM2NDddLFxuICAgIHVpbnQzMjogWzAsIDQyOTQ5NjcyOTVdLFxuICAgIGZsb2F0MzI6IFstMy40MDI4MjM0NjYzODUyODg2ZTM4LCAzLjQwMjgyMzQ2NjM4NTI4ODZlMzhdLFxuICAgIGZsb2F0NjQ6IFstTnVtYmVyLk1BWF9WQUxVRSwgTnVtYmVyLk1BWF9WQUxVRV0sXG59O1xuZXhwb3J0IGNvbnN0IEJJR0lOVF9GT1JNQVRfUkFOR0VTID0ge1xuICAgIGludDY0OiBbLyogQF9fUFVSRV9fKi8gQmlnSW50KFwiLTkyMjMzNzIwMzY4NTQ3NzU4MDhcIiksIC8qIEBfX1BVUkVfXyovIEJpZ0ludChcIjkyMjMzNzIwMzY4NTQ3NzU4MDdcIildLFxuICAgIHVpbnQ2NDogWy8qIEBfX1BVUkVfXyovIEJpZ0ludCgwKSwgLyogQF9fUFVSRV9fKi8gQmlnSW50KFwiMTg0NDY3NDQwNzM3MDk1NTE2MTVcIildLFxufTtcbmV4cG9ydCBmdW5jdGlvbiBwaWNrKHNjaGVtYSwgbWFzaykge1xuICAgIGNvbnN0IGN1cnJEZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgY2hlY2tzID0gY3VyckRlZi5jaGVja3M7XG4gICAgY29uc3QgaGFzQ2hlY2tzID0gY2hlY2tzICYmIGNoZWNrcy5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGVja3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzXCIpO1xuICAgIH1cbiAgICBjb25zdCBkZWYgPSBtZXJnZURlZnMoc2NoZW1hLl96b2QuZGVmLCB7XG4gICAgICAgIGdldCBzaGFwZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NoYXBlID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtYXNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIGN1cnJEZWYuc2hhcGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGtleTogXCIke2tleX1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIW1hc2tba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IGN1cnJEZWYuc2hhcGVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBuZXdTaGFwZSk7IC8vIHNlbGYtY2FjaGluZ1xuICAgICAgICAgICAgcmV0dXJuIG5ld1NoYXBlO1xuICAgICAgICB9LFxuICAgICAgICBjaGVja3M6IFtdLFxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZShzY2hlbWEsIGRlZik7XG59XG5leHBvcnQgZnVuY3Rpb24gb21pdChzY2hlbWEsIG1hc2spIHtcbiAgICBjb25zdCBjdXJyRGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIGNvbnN0IGNoZWNrcyA9IGN1cnJEZWYuY2hlY2tzO1xuICAgIGNvbnN0IGhhc0NoZWNrcyA9IGNoZWNrcyAmJiBjaGVja3MubGVuZ3RoID4gMDtcbiAgICBpZiAoaGFzQ2hlY2tzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIi5vbWl0KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c1wiKTtcbiAgICB9XG4gICAgY29uc3QgZGVmID0gbWVyZ2VEZWZzKHNjaGVtYS5fem9kLmRlZiwge1xuICAgICAgICBnZXQgc2hhcGUoKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTaGFwZSA9IHsgLi4uc2NoZW1hLl96b2QuZGVmLnNoYXBlIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtYXNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIGN1cnJEZWYuc2hhcGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGtleTogXCIke2tleX1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIW1hc2tba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld1NoYXBlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3NpZ25Qcm9wKHRoaXMsIFwic2hhcGVcIiwgbmV3U2hhcGUpOyAvLyBzZWxmLWNhY2hpbmdcbiAgICAgICAgICAgIHJldHVybiBuZXdTaGFwZTtcbiAgICAgICAgfSxcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmUoc2NoZW1hLCBkZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChzY2hlbWEsIHNoYXBlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHNoYXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IHRvIGV4dGVuZDogZXhwZWN0ZWQgYSBwbGFpbiBvYmplY3RcIik7XG4gICAgfVxuICAgIGNvbnN0IGNoZWNrcyA9IHNjaGVtYS5fem9kLmRlZi5jaGVja3M7XG4gICAgY29uc3QgaGFzQ2hlY2tzID0gY2hlY2tzICYmIGNoZWNrcy5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGVja3MpIHtcbiAgICAgICAgLy8gT25seSB0aHJvdyBpZiBuZXcgc2hhcGUgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzaGFwZVxuICAgICAgICAvLyBVc2UgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIHRvIGNoZWNrIGtleSBleGlzdGVuY2Ugd2l0aG91dCBhY2Nlc3NpbmcgdmFsdWVzXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nU2hhcGUgPSBzY2hlbWEuX3pvZC5kZWYuc2hhcGU7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNoYXBlKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGlzdGluZ1NoYXBlLCBrZXkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgb3ZlcndyaXRlIGtleXMgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cy4gVXNlIGAuc2FmZUV4dGVuZCgpYCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkZWYgPSBtZXJnZURlZnMoc2NoZW1hLl96b2QuZGVmLCB7XG4gICAgICAgIGdldCBzaGFwZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IF9zaGFwZSA9IHsgLi4uc2NoZW1hLl96b2QuZGVmLnNoYXBlLCAuLi5zaGFwZSB9O1xuICAgICAgICAgICAgYXNzaWduUHJvcCh0aGlzLCBcInNoYXBlXCIsIF9zaGFwZSk7IC8vIHNlbGYtY2FjaGluZ1xuICAgICAgICAgICAgcmV0dXJuIF9zaGFwZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmUoc2NoZW1hLCBkZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVFeHRlbmQoc2NoZW1hLCBzaGFwZSkge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChzaGFwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdFwiKTtcbiAgICB9XG4gICAgY29uc3QgZGVmID0gbWVyZ2VEZWZzKHNjaGVtYS5fem9kLmRlZiwge1xuICAgICAgICBnZXQgc2hhcGUoKSB7XG4gICAgICAgICAgICBjb25zdCBfc2hhcGUgPSB7IC4uLnNjaGVtYS5fem9kLmRlZi5zaGFwZSwgLi4uc2hhcGUgfTtcbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBfc2hhcGUpOyAvLyBzZWxmLWNhY2hpbmdcbiAgICAgICAgICAgIHJldHVybiBfc2hhcGU7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lKHNjaGVtYSwgZGVmKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhLCBiKSB7XG4gICAgaWYgKGEuX3pvZC5kZWYuY2hlY2tzPy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiLm1lcmdlKCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cy4gVXNlIC5zYWZlRXh0ZW5kKCkgaW5zdGVhZC5cIik7XG4gICAgfVxuICAgIGNvbnN0IGRlZiA9IG1lcmdlRGVmcyhhLl96b2QuZGVmLCB7XG4gICAgICAgIGdldCBzaGFwZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IF9zaGFwZSA9IHsgLi4uYS5fem9kLmRlZi5zaGFwZSwgLi4uYi5fem9kLmRlZi5zaGFwZSB9O1xuICAgICAgICAgICAgYXNzaWduUHJvcCh0aGlzLCBcInNoYXBlXCIsIF9zaGFwZSk7IC8vIHNlbGYtY2FjaGluZ1xuICAgICAgICAgICAgcmV0dXJuIF9zaGFwZTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGNhdGNoYWxsKCkge1xuICAgICAgICAgICAgcmV0dXJuIGIuX3pvZC5kZWYuY2F0Y2hhbGw7XG4gICAgICAgIH0sXG4gICAgICAgIGNoZWNrczogYi5fem9kLmRlZi5jaGVja3MgPz8gW10sXG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lKGEsIGRlZik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbChDbGFzcywgc2NoZW1hLCBtYXNrKSB7XG4gICAgY29uc3QgY3VyckRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBjb25zdCBjaGVja3MgPSBjdXJyRGVmLmNoZWNrcztcbiAgICBjb25zdCBoYXNDaGVja3MgPSBjaGVja3MgJiYgY2hlY2tzLmxlbmd0aCA+IDA7XG4gICAgaWYgKGhhc0NoZWNrcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIucGFydGlhbCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHNcIik7XG4gICAgfVxuICAgIGNvbnN0IGRlZiA9IG1lcmdlRGVmcyhzY2hlbWEuX3pvZC5kZWYsIHtcbiAgICAgICAgZ2V0IHNoYXBlKCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkU2hhcGUgPSBzY2hlbWEuX3pvZC5kZWYuc2hhcGU7XG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IHsgLi4ub2xkU2hhcGUgfTtcbiAgICAgICAgICAgIGlmIChtYXNrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbWFzaykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gb2xkU2hhcGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBrZXk6IFwiJHtrZXl9XCJgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc2tba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiAob2xkU2hhcGVba2V5XSEuX3pvZC5vcHRpbiA9PT0gXCJvcHRpb25hbFwiKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVba2V5XSA9IENsYXNzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBDbGFzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvcHRpb25hbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyVHlwZTogb2xkU2hhcGVba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG9sZFNoYXBlW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2xkU2hhcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKG9sZFNoYXBlW2tleV0hLl96b2Qub3B0aW4gPT09IFwib3B0aW9uYWxcIikgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSBDbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgQ2xhc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwib3B0aW9uYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lclR5cGU6IG9sZFNoYXBlW2tleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBvbGRTaGFwZVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBzaGFwZSk7IC8vIHNlbGYtY2FjaGluZ1xuICAgICAgICAgICAgcmV0dXJuIHNoYXBlO1xuICAgICAgICB9LFxuICAgICAgICBjaGVja3M6IFtdLFxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZShzY2hlbWEsIGRlZik7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZWQoQ2xhc3MsIHNjaGVtYSwgbWFzaykge1xuICAgIGNvbnN0IGRlZiA9IG1lcmdlRGVmcyhzY2hlbWEuX3pvZC5kZWYsIHtcbiAgICAgICAgZ2V0IHNoYXBlKCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkU2hhcGUgPSBzY2hlbWEuX3pvZC5kZWYuc2hhcGU7XG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IHsgLi4ub2xkU2hhcGUgfTtcbiAgICAgICAgICAgIGlmIChtYXNrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbWFzaykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gc2hhcGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBrZXk6IFwiJHtrZXl9XCJgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc2tba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBvdmVyd3JpdGUgd2l0aCBub24tb3B0aW9uYWxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVba2V5XSA9IG5ldyBDbGFzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm5vbm9wdGlvbmFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbm5lclR5cGU6IG9sZFNoYXBlW2tleV0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9sZFNoYXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG92ZXJ3cml0ZSB3aXRoIG5vbi1vcHRpb25hbFxuICAgICAgICAgICAgICAgICAgICBzaGFwZVtrZXldID0gbmV3IENsYXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibm9ub3B0aW9uYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyVHlwZTogb2xkU2hhcGVba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXNzaWduUHJvcCh0aGlzLCBcInNoYXBlXCIsIHNoYXBlKTsgLy8gc2VsZi1jYWNoaW5nXG4gICAgICAgICAgICByZXR1cm4gc2hhcGU7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lKHNjaGVtYSwgZGVmKTtcbn1cbi8vIGludmFsaWRfdHlwZSB8IHRvb19iaWcgfCB0b29fc21hbGwgfCBpbnZhbGlkX2Zvcm1hdCB8IG5vdF9tdWx0aXBsZV9vZiB8IHVucmVjb2duaXplZF9rZXlzIHwgaW52YWxpZF91bmlvbiB8IGludmFsaWRfa2V5IHwgaW52YWxpZF9lbGVtZW50IHwgaW52YWxpZF92YWx1ZSB8IGN1c3RvbVxuZXhwb3J0IGZ1bmN0aW9uIGFib3J0ZWQoeCwgc3RhcnRJbmRleCA9IDApIHtcbiAgICBpZiAoeC5hYm9ydGVkID09PSB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IHguaXNzdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh4Lmlzc3Vlc1tpXT8uY29udGludWUgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8vIENoZWNrcyBmb3IgZXhwbGljaXQgYWJvcnQgKGNvbnRpbnVlID09PSBmYWxzZSksIGFzIG9wcG9zZWQgdG8gaW1wbGljaXQgYWJvcnQgKGNvbnRpbnVlID09PSB1bmRlZmluZWQpLlxuLy8gVXNlZCB0byByZXNwZWN0IGBhYm9ydDogdHJ1ZWAgaW4gLnJlZmluZSgpIGV2ZW4gZm9yIGNoZWNrcyB0aGF0IGhhdmUgYSBgd2hlbmAgZnVuY3Rpb24uXG5leHBvcnQgZnVuY3Rpb24gZXhwbGljaXRseUFib3J0ZWQoeCwgc3RhcnRJbmRleCA9IDApIHtcbiAgICBpZiAoeC5hYm9ydGVkID09PSB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IHguaXNzdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh4Lmlzc3Vlc1tpXT8uY29udGludWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJlZml4SXNzdWVzKHBhdGgsIGlzc3Vlcykge1xuICAgIHJldHVybiBpc3N1ZXMubWFwKChpc3MpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSBpc3MpLnBhdGggPz8gKF9hLnBhdGggPSBbXSk7XG4gICAgICAgIGlzcy5wYXRoLnVuc2hpZnQocGF0aCk7XG4gICAgICAgIHJldHVybiBpc3M7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdW53cmFwTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiID8gbWVzc2FnZSA6IG1lc3NhZ2U/Lm1lc3NhZ2U7XG59XG5leHBvcnQgZnVuY3Rpb24gZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29uZmlnKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGlzcy5tZXNzYWdlXG4gICAgICAgID8gaXNzLm1lc3NhZ2VcbiAgICAgICAgOiAodW53cmFwTWVzc2FnZShpc3MuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oaXNzKSkgPz9cbiAgICAgICAgICAgIHVud3JhcE1lc3NhZ2UoY3R4Py5lcnJvcj8uKGlzcykpID8/XG4gICAgICAgICAgICB1bndyYXBNZXNzYWdlKGNvbmZpZy5jdXN0b21FcnJvcj8uKGlzcykpID8/XG4gICAgICAgICAgICB1bndyYXBNZXNzYWdlKGNvbmZpZy5sb2NhbGVFcnJvcj8uKGlzcykpID8/XG4gICAgICAgICAgICBcIkludmFsaWQgaW5wdXRcIik7XG4gICAgY29uc3QgeyBpbnN0OiBfaW5zdCwgY29udGludWU6IF9jb250aW51ZSwgaW5wdXQ6IF9pbnB1dCwgLi4ucmVzdCB9ID0gaXNzO1xuICAgIHJlc3QucGF0aCA/PyAocmVzdC5wYXRoID0gW10pO1xuICAgIHJlc3QubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgaWYgKGN0eD8ucmVwb3J0SW5wdXQpIHtcbiAgICAgICAgcmVzdC5pbnB1dCA9IF9pbnB1dDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3Q7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2l6YWJsZU9yaWdpbihpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFNldClcbiAgICAgICAgcmV0dXJuIFwic2V0XCI7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgTWFwKVxuICAgICAgICByZXR1cm4gXCJtYXBcIjtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgRmlsZSlcbiAgICAgICAgcmV0dXJuIFwiZmlsZVwiO1xuICAgIHJldHVybiBcInVua25vd25cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRMZW5ndGhhYmxlT3JpZ2luKGlucHV0KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKVxuICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIHJldHVybiBcInVua25vd25cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZWRUeXBlKGRhdGEpIHtcbiAgICBjb25zdCB0ID0gdHlwZW9mIGRhdGE7XG4gICAgc3dpdGNoICh0KSB7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjoge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc05hTihkYXRhKSA/IFwibmFuXCIgOiBcIm51bWJlclwiO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvYmogPSBkYXRhO1xuICAgICAgICAgICAgaWYgKG9iaiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBcImNvbnN0cnVjdG9yXCIgaW4gb2JqICYmIG9iai5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmouY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc3N1ZSguLi5hcmdzKSB7XG4gICAgY29uc3QgW2lzcywgaW5wdXQsIGluc3RdID0gYXJncztcbiAgICBpZiAodHlwZW9mIGlzcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogaXNzLFxuICAgICAgICAgICAgY29kZTogXCJjdXN0b21cIixcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgLi4uaXNzIH07XG59XG5leHBvcnQgZnVuY3Rpb24gY2xlYW5FbnVtKG9iaikge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhvYmopXG4gICAgICAgIC5maWx0ZXIoKFtrLCBfXSkgPT4ge1xuICAgICAgICAvLyByZXR1cm4gdHJ1ZSBpZiBOYU4sIG1lYW5pbmcgaXQncyBub3QgYSBudW1iZXIsIHRodXMgYSBzdHJpbmcga2V5XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlSW50KGssIDEwKSk7XG4gICAgfSlcbiAgICAgICAgLm1hcCgoZWwpID0+IGVsWzFdKTtcbn1cbi8vIENvZGVjIHV0aWxpdHkgZnVuY3Rpb25zXG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0VG9VaW50OEFycmF5KGJhc2U2NCkge1xuICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IGF0b2IoYmFzZTY0KTtcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpbmFyeVN0cmluZy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmluYXJ5U3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJ5dGVzW2ldID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbn1cbmV4cG9ydCBmdW5jdGlvbiB1aW50OEFycmF5VG9CYXNlNjQoYnl0ZXMpIHtcbiAgICBsZXQgYmluYXJ5U3RyaW5nID0gXCJcIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJpbmFyeVN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ0b2EoYmluYXJ5U3RyaW5nKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBiYXNlNjR1cmxUb1VpbnQ4QXJyYXkoYmFzZTY0dXJsKSB7XG4gICAgY29uc3QgYmFzZTY0ID0gYmFzZTY0dXJsLnJlcGxhY2UoLy0vZywgXCIrXCIpLnJlcGxhY2UoL18vZywgXCIvXCIpO1xuICAgIGNvbnN0IHBhZGRpbmcgPSBcIj1cIi5yZXBlYXQoKDQgLSAoYmFzZTY0Lmxlbmd0aCAlIDQpKSAlIDQpO1xuICAgIHJldHVybiBiYXNlNjRUb1VpbnQ4QXJyYXkoYmFzZTY0ICsgcGFkZGluZyk7XG59XG5leHBvcnQgZnVuY3Rpb24gdWludDhBcnJheVRvQmFzZTY0dXJsKGJ5dGVzKSB7XG4gICAgcmV0dXJuIHVpbnQ4QXJyYXlUb0Jhc2U2NChieXRlcykucmVwbGFjZSgvXFwrL2csIFwiLVwiKS5yZXBsYWNlKC9cXC8vZywgXCJfXCIpLnJlcGxhY2UoLz0vZywgXCJcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gaGV4VG9VaW50OEFycmF5KGhleCkge1xuICAgIGNvbnN0IGNsZWFuSGV4ID0gaGV4LnJlcGxhY2UoL14weC8sIFwiXCIpO1xuICAgIGlmIChjbGVhbkhleC5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGhcIik7XG4gICAgfVxuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoY2xlYW5IZXgubGVuZ3RoIC8gMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGVhbkhleC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBieXRlc1tpIC8gMl0gPSBOdW1iZXIucGFyc2VJbnQoY2xlYW5IZXguc2xpY2UoaSwgaSArIDIpLCAxNik7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbn1cbmV4cG9ydCBmdW5jdGlvbiB1aW50OEFycmF5VG9IZXgoYnl0ZXMpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShieXRlcylcbiAgICAgICAgLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKVxuICAgICAgICAuam9pbihcIlwiKTtcbn1cbi8vIGluc3RhbmNlb2ZcbmV4cG9ydCBjbGFzcyBDbGFzcyB7XG4gICAgY29uc3RydWN0b3IoLi4uX2FyZ3MpIHsgfVxufVxuIiwiaW1wb3J0IHsgJGNvbnN0cnVjdG9yIH0gZnJvbSBcIi4vY29yZS5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi91dGlsLmpzXCI7XG5jb25zdCBpbml0aWFsaXplciA9IChpbnN0LCBkZWYpID0+IHtcbiAgICBpbnN0Lm5hbWUgPSBcIiRab2RFcnJvclwiO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0LCBcIl96b2RcIiwge1xuICAgICAgICB2YWx1ZTogaW5zdC5fem9kLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5zdCwgXCJpc3N1ZXNcIiwge1xuICAgICAgICB2YWx1ZTogZGVmLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgICBpbnN0Lm1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShkZWYsIHV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyLCAyKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5zdCwgXCJ0b1N0cmluZ1wiLCB7XG4gICAgICAgIHZhbHVlOiAoKSA9PiBpbnN0Lm1lc3NhZ2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjb25zdCAkWm9kRXJyb3IgPSAkY29uc3RydWN0b3IoXCIkWm9kRXJyb3JcIiwgaW5pdGlhbGl6ZXIpO1xuZXhwb3J0IGNvbnN0ICRab2RSZWFsRXJyb3IgPSAkY29uc3RydWN0b3IoXCIkWm9kRXJyb3JcIiwgaW5pdGlhbGl6ZXIsIHsgUGFyZW50OiBFcnJvciB9KTtcbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuRXJyb3IoZXJyb3IsIG1hcHBlciA9IChpc3N1ZSkgPT4gaXNzdWUubWVzc2FnZSkge1xuICAgIGNvbnN0IGZpZWxkRXJyb3JzID0ge307XG4gICAgY29uc3QgZm9ybUVycm9ycyA9IFtdO1xuICAgIGZvciAoY29uc3Qgc3ViIG9mIGVycm9yLmlzc3Vlcykge1xuICAgICAgICBpZiAoc3ViLnBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZmllbGRFcnJvcnNbc3ViLnBhdGhbMF1dID0gZmllbGRFcnJvcnNbc3ViLnBhdGhbMF1dIHx8IFtdO1xuICAgICAgICAgICAgZmllbGRFcnJvcnNbc3ViLnBhdGhbMF1dLnB1c2gobWFwcGVyKHN1YikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9ybUVycm9ycy5wdXNoKG1hcHBlcihzdWIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBmb3JtRXJyb3JzLCBmaWVsZEVycm9ycyB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEVycm9yKGVycm9yLCBtYXBwZXIgPSAoaXNzdWUpID0+IGlzc3VlLm1lc3NhZ2UpIHtcbiAgICBjb25zdCBmaWVsZEVycm9ycyA9IHsgX2Vycm9yczogW10gfTtcbiAgICBjb25zdCBwcm9jZXNzRXJyb3IgPSAoZXJyb3IsIHBhdGggPSBbXSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGVycm9yLmlzc3Vlcykge1xuICAgICAgICAgICAgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF91bmlvblwiICYmIGlzc3VlLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpc3N1ZS5lcnJvcnMubWFwKChpc3N1ZXMpID0+IHByb2Nlc3NFcnJvcih7IGlzc3VlcyB9LCBbLi4ucGF0aCwgLi4uaXNzdWUucGF0aF0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9rZXlcIikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NFcnJvcih7IGlzc3VlczogaXNzdWUuaXNzdWVzIH0sIFsuLi5wYXRoLCAuLi5pc3N1ZS5wYXRoXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfZWxlbWVudFwiKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Vycm9yKHsgaXNzdWVzOiBpc3N1ZS5pc3N1ZXMgfSwgWy4uLnBhdGgsIC4uLmlzc3VlLnBhdGhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gWy4uLnBhdGgsIC4uLmlzc3VlLnBhdGhdO1xuICAgICAgICAgICAgICAgIGlmIChmdWxscGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvcnMuX2Vycm9ycy5wdXNoKG1hcHBlcihpc3N1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBmaWVsZEVycm9ycztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGZ1bGxwYXRoLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSBmdWxscGF0aFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlcm1pbmFsID0gaSA9PT0gZnVsbHBhdGgubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGVybWluYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgeyBfZXJyb3JzOiBbXSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdLl9lcnJvcnMucHVzaChtYXBwZXIoaXNzdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyW2VsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcHJvY2Vzc0Vycm9yKGVycm9yKTtcbiAgICByZXR1cm4gZmllbGRFcnJvcnM7XG59XG5leHBvcnQgZnVuY3Rpb24gdHJlZWlmeUVycm9yKGVycm9yLCBtYXBwZXIgPSAoaXNzdWUpID0+IGlzc3VlLm1lc3NhZ2UpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7IGVycm9yczogW10gfTtcbiAgICBjb25zdCBwcm9jZXNzRXJyb3IgPSAoZXJyb3IsIHBhdGggPSBbXSkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGVycm9yLmlzc3Vlcykge1xuICAgICAgICAgICAgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF91bmlvblwiICYmIGlzc3VlLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyByZWd1bGFyIHVuaW9uIGVycm9yXG4gICAgICAgICAgICAgICAgaXNzdWUuZXJyb3JzLm1hcCgoaXNzdWVzKSA9PiBwcm9jZXNzRXJyb3IoeyBpc3N1ZXMgfSwgWy4uLnBhdGgsIC4uLmlzc3VlLnBhdGhdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfa2V5XCIpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzRXJyb3IoeyBpc3N1ZXM6IGlzc3VlLmlzc3VlcyB9LCBbLi4ucGF0aCwgLi4uaXNzdWUucGF0aF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX2VsZW1lbnRcIikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NFcnJvcih7IGlzc3VlczogaXNzdWUuaXNzdWVzIH0sIFsuLi5wYXRoLCAuLi5pc3N1ZS5wYXRoXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmdWxscGF0aCA9IFsuLi5wYXRoLCAuLi5pc3N1ZS5wYXRoXTtcbiAgICAgICAgICAgICAgICBpZiAoZnVsbHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lcnJvcnMucHVzaChtYXBwZXIoaXNzdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBjdXJyID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGZ1bGxwYXRoLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbCA9IGZ1bGxwYXRoW2ldO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXJtaW5hbCA9IGkgPT09IGZ1bGxwYXRoLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnIucHJvcGVydGllcyA/PyAoY3Vyci5wcm9wZXJ0aWVzID0ge30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgKF9hID0gY3Vyci5wcm9wZXJ0aWVzKVtlbF0gPz8gKF9hW2VsXSA9IHsgZXJyb3JzOiBbXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLnByb3BlcnRpZXNbZWxdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyci5pdGVtcyA/PyAoY3Vyci5pdGVtcyA9IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIChfYiA9IGN1cnIuaXRlbXMpW2VsXSA/PyAoX2JbZWxdID0geyBlcnJvcnM6IFtdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIuaXRlbXNbZWxdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyci5lcnJvcnMucHVzaChtYXBwZXIoaXNzdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBwcm9jZXNzRXJyb3IoZXJyb3IpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKiogRm9ybWF0IGEgWm9kRXJyb3IgYXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgaW4gdGhlIGZvbGxvd2luZyBmb3JtLlxuICpcbiAqIEZyb21cbiAqXG4gKiBgYGB0c1xuICogWm9kRXJyb3Ige1xuICogICBpc3N1ZXM6IFtcbiAqICAgICB7XG4gKiAgICAgICBleHBlY3RlZDogJ3N0cmluZycsXG4gKiAgICAgICBjb2RlOiAnaW52YWxpZF90eXBlJyxcbiAqICAgICAgIHBhdGg6IFsgJ3VzZXJuYW1lJyBdLFxuICogICAgICAgbWVzc2FnZTogJ0ludmFsaWQgaW5wdXQ6IGV4cGVjdGVkIHN0cmluZydcbiAqICAgICB9LFxuICogICAgIHtcbiAqICAgICAgIGV4cGVjdGVkOiAnbnVtYmVyJyxcbiAqICAgICAgIGNvZGU6ICdpbnZhbGlkX3R5cGUnLFxuICogICAgICAgcGF0aDogWyAnZmF2b3JpdGVOdW1iZXJzJywgMSBdLFxuICogICAgICAgbWVzc2FnZTogJ0ludmFsaWQgaW5wdXQ6IGV4cGVjdGVkIG51bWJlcidcbiAqICAgICB9XG4gKiAgIF07XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiB0b1xuICpcbiAqIGBgYFxuICogdXNlcm5hbWVcbiAqICAg4pyWIEV4cGVjdGVkIG51bWJlciwgcmVjZWl2ZWQgc3RyaW5nIGF0IFwidXNlcm5hbWVcbiAqIGZhdm9yaXRlTnVtYmVyc1swXVxuICogICDinJYgSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgbnVtYmVyXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRG90UGF0aChfcGF0aCkge1xuICAgIGNvbnN0IHNlZ3MgPSBbXTtcbiAgICBjb25zdCBwYXRoID0gX3BhdGgubWFwKChzZWcpID0+ICh0eXBlb2Ygc2VnID09PSBcIm9iamVjdFwiID8gc2VnLmtleSA6IHNlZykpO1xuICAgIGZvciAoY29uc3Qgc2VnIG9mIHBhdGgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWcgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICBzZWdzLnB1c2goYFske3NlZ31dYCk7XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzZWcgPT09IFwic3ltYm9sXCIpXG4gICAgICAgICAgICBzZWdzLnB1c2goYFske0pTT04uc3RyaW5naWZ5KFN0cmluZyhzZWcpKX1dYCk7XG4gICAgICAgIGVsc2UgaWYgKC9bXlxcdyRdLy50ZXN0KHNlZykpXG4gICAgICAgICAgICBzZWdzLnB1c2goYFske0pTT04uc3RyaW5naWZ5KHNlZyl9XWApO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzZWdzLmxlbmd0aClcbiAgICAgICAgICAgICAgICBzZWdzLnB1c2goXCIuXCIpO1xuICAgICAgICAgICAgc2Vncy5wdXNoKHNlZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlZ3Muam9pbihcIlwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcmV0dGlmeUVycm9yKGVycm9yKSB7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICAvLyBzb3J0IGJ5IHBhdGggbGVuZ3RoXG4gICAgY29uc3QgaXNzdWVzID0gWy4uLmVycm9yLmlzc3Vlc10uc29ydCgoYSwgYikgPT4gKGEucGF0aCA/PyBbXSkubGVuZ3RoIC0gKGIucGF0aCA/PyBbXSkubGVuZ3RoKTtcbiAgICAvLyBQcm9jZXNzIGVhY2ggaXNzdWVcbiAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGlzc3Vlcykge1xuICAgICAgICBsaW5lcy5wdXNoKGDinJYgJHtpc3N1ZS5tZXNzYWdlfWApO1xuICAgICAgICBpZiAoaXNzdWUucGF0aD8ubGVuZ3RoKVxuICAgICAgICAgICAgbGluZXMucHVzaChgICDihpIgYXQgJHt0b0RvdFBhdGgoaXNzdWUucGF0aCl9YCk7XG4gICAgfVxuICAgIC8vIENvbnZlcnQgTWFwIHRvIGZvcm1hdHRlZCBzdHJpbmdcbiAgICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKTtcbn1cbiIsImltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIi4vY29yZS5qc1wiO1xuaW1wb3J0ICogYXMgZXJyb3JzIGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi91dGlsLmpzXCI7XG5leHBvcnQgY29uc3QgX3BhcnNlID0gKF9FcnIpID0+IChzY2hlbWEsIHZhbHVlLCBfY3R4LCBfcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gX2N0eCA/IHsgLi4uX2N0eCwgYXN5bmM6IGZhbHNlIH0gOiB7IGFzeW5jOiBmYWxzZSB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IHNjaGVtYS5fem9kLnJ1bih7IHZhbHVlLCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuJFpvZEFzeW5jRXJyb3IoKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGUgPSBuZXcgKF9wYXJhbXM/LkVyciA/PyBfRXJyKShyZXN1bHQuaXNzdWVzLm1hcCgoaXNzKSA9PiB1dGlsLmZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvcmUuY29uZmlnKCkpKSk7XG4gICAgICAgIHV0aWwuY2FwdHVyZVN0YWNrVHJhY2UoZSwgX3BhcmFtcz8uY2FsbGVlKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbn07XG5leHBvcnQgY29uc3QgcGFyc2UgPSAvKiBAX19QVVJFX18qLyBfcGFyc2UoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9wYXJzZUFzeW5jID0gKF9FcnIpID0+IGFzeW5jIChzY2hlbWEsIHZhbHVlLCBfY3R4LCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBjdHggPSBfY3R4ID8geyAuLi5fY3R4LCBhc3luYzogdHJ1ZSB9IDogeyBhc3luYzogdHJ1ZSB9O1xuICAgIGxldCByZXN1bHQgPSBzY2hlbWEuX3pvZC5ydW4oeyB2YWx1ZSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKVxuICAgICAgICByZXN1bHQgPSBhd2FpdCByZXN1bHQ7XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGUgPSBuZXcgKHBhcmFtcz8uRXJyID8/IF9FcnIpKHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpKTtcbiAgICAgICAgdXRpbC5jYXB0dXJlU3RhY2tUcmFjZShlLCBwYXJhbXM/LmNhbGxlZSk7XG4gICAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQudmFsdWU7XG59O1xuZXhwb3J0IGNvbnN0IHBhcnNlQXN5bmMgPSAvKiBAX19QVVJFX18qLyBfcGFyc2VBc3luYyhlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgX3NhZmVQYXJzZSA9IChfRXJyKSA9PiAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IF9jdHggPyB7IC4uLl9jdHgsIGFzeW5jOiBmYWxzZSB9IDogeyBhc3luYzogZmFsc2UgfTtcbiAgICBjb25zdCByZXN1bHQgPSBzY2hlbWEuX3pvZC5ydW4oeyB2YWx1ZSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBjb3JlLiRab2RBc3luY0Vycm9yKCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuaXNzdWVzLmxlbmd0aFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IG5ldyAoX0VyciA/PyBlcnJvcnMuJFpvZEVycm9yKShyZXN1bHQuaXNzdWVzLm1hcCgoaXNzKSA9PiB1dGlsLmZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvcmUuY29uZmlnKCkpKSksXG4gICAgICAgIH1cbiAgICAgICAgOiB7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IHJlc3VsdC52YWx1ZSB9O1xufTtcbmV4cG9ydCBjb25zdCBzYWZlUGFyc2UgPSAvKiBAX19QVVJFX18qLyBfc2FmZVBhcnNlKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfc2FmZVBhcnNlQXN5bmMgPSAoX0VycikgPT4gYXN5bmMgKHNjaGVtYSwgdmFsdWUsIF9jdHgpID0+IHtcbiAgICBjb25zdCBjdHggPSBfY3R4ID8geyAuLi5fY3R4LCBhc3luYzogdHJ1ZSB9IDogeyBhc3luYzogdHJ1ZSB9O1xuICAgIGxldCByZXN1bHQgPSBzY2hlbWEuX3pvZC5ydW4oeyB2YWx1ZSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKVxuICAgICAgICByZXN1bHQgPSBhd2FpdCByZXN1bHQ7XG4gICAgcmV0dXJuIHJlc3VsdC5pc3N1ZXMubGVuZ3RoXG4gICAgICAgID8ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogbmV3IF9FcnIocmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcykgPT4gdXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSkpLFxuICAgICAgICB9XG4gICAgICAgIDogeyBzdWNjZXNzOiB0cnVlLCBkYXRhOiByZXN1bHQudmFsdWUgfTtcbn07XG5leHBvcnQgY29uc3Qgc2FmZVBhcnNlQXN5bmMgPSAvKiBAX19QVVJFX18qLyBfc2FmZVBhcnNlQXN5bmMoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9lbmNvZGUgPSAoX0VycikgPT4gKHNjaGVtYSwgdmFsdWUsIF9jdHgpID0+IHtcbiAgICBjb25zdCBjdHggPSBfY3R4ID8geyAuLi5fY3R4LCBkaXJlY3Rpb246IFwiYmFja3dhcmRcIiB9IDogeyBkaXJlY3Rpb246IFwiYmFja3dhcmRcIiB9O1xuICAgIHJldHVybiBfcGFyc2UoX0Vycikoc2NoZW1hLCB2YWx1ZSwgY3R4KTtcbn07XG5leHBvcnQgY29uc3QgZW5jb2RlID0gLyogQF9fUFVSRV9fKi8gX2VuY29kZShlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgX2RlY29kZSA9IChfRXJyKSA9PiAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIHJldHVybiBfcGFyc2UoX0Vycikoc2NoZW1hLCB2YWx1ZSwgX2N0eCk7XG59O1xuZXhwb3J0IGNvbnN0IGRlY29kZSA9IC8qIEBfX1BVUkVfXyovIF9kZWNvZGUoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9lbmNvZGVBc3luYyA9IChfRXJyKSA9PiBhc3luYyAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IF9jdHggPyB7IC4uLl9jdHgsIGRpcmVjdGlvbjogXCJiYWNrd2FyZFwiIH0gOiB7IGRpcmVjdGlvbjogXCJiYWNrd2FyZFwiIH07XG4gICAgcmV0dXJuIF9wYXJzZUFzeW5jKF9FcnIpKHNjaGVtYSwgdmFsdWUsIGN0eCk7XG59O1xuZXhwb3J0IGNvbnN0IGVuY29kZUFzeW5jID0gLyogQF9fUFVSRV9fKi8gX2VuY29kZUFzeW5jKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfZGVjb2RlQXN5bmMgPSAoX0VycikgPT4gYXN5bmMgKHNjaGVtYSwgdmFsdWUsIF9jdHgpID0+IHtcbiAgICByZXR1cm4gX3BhcnNlQXN5bmMoX0Vycikoc2NoZW1hLCB2YWx1ZSwgX2N0eCk7XG59O1xuZXhwb3J0IGNvbnN0IGRlY29kZUFzeW5jID0gLyogQF9fUFVSRV9fKi8gX2RlY29kZUFzeW5jKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfc2FmZUVuY29kZSA9IChfRXJyKSA9PiAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IF9jdHggPyB7IC4uLl9jdHgsIGRpcmVjdGlvbjogXCJiYWNrd2FyZFwiIH0gOiB7IGRpcmVjdGlvbjogXCJiYWNrd2FyZFwiIH07XG4gICAgcmV0dXJuIF9zYWZlUGFyc2UoX0Vycikoc2NoZW1hLCB2YWx1ZSwgY3R4KTtcbn07XG5leHBvcnQgY29uc3Qgc2FmZUVuY29kZSA9IC8qIEBfX1BVUkVfXyovIF9zYWZlRW5jb2RlKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfc2FmZURlY29kZSA9IChfRXJyKSA9PiAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIHJldHVybiBfc2FmZVBhcnNlKF9FcnIpKHNjaGVtYSwgdmFsdWUsIF9jdHgpO1xufTtcbmV4cG9ydCBjb25zdCBzYWZlRGVjb2RlID0gLyogQF9fUFVSRV9fKi8gX3NhZmVEZWNvZGUoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9zYWZlRW5jb2RlQXN5bmMgPSAoX0VycikgPT4gYXN5bmMgKHNjaGVtYSwgdmFsdWUsIF9jdHgpID0+IHtcbiAgICBjb25zdCBjdHggPSBfY3R4ID8geyAuLi5fY3R4LCBkaXJlY3Rpb246IFwiYmFja3dhcmRcIiB9IDogeyBkaXJlY3Rpb246IFwiYmFja3dhcmRcIiB9O1xuICAgIHJldHVybiBfc2FmZVBhcnNlQXN5bmMoX0Vycikoc2NoZW1hLCB2YWx1ZSwgY3R4KTtcbn07XG5leHBvcnQgY29uc3Qgc2FmZUVuY29kZUFzeW5jID0gLyogQF9fUFVSRV9fKi8gX3NhZmVFbmNvZGVBc3luYyhlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgX3NhZmVEZWNvZGVBc3luYyA9IChfRXJyKSA9PiBhc3luYyAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIHJldHVybiBfc2FmZVBhcnNlQXN5bmMoX0Vycikoc2NoZW1hLCB2YWx1ZSwgX2N0eCk7XG59O1xuZXhwb3J0IGNvbnN0IHNhZmVEZWNvZGVBc3luYyA9IC8qIEBfX1BVUkVfXyovIF9zYWZlRGVjb2RlQXN5bmMoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuIiwiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi91dGlsLmpzXCI7XG4vKipcbiAqIEBkZXByZWNhdGVkIENVSUQgdjEgaXMgZGVwcmVjYXRlZCBieSBpdHMgYXV0aG9ycyBkdWUgdG8gaW5mb3JtYXRpb24gbGVha2FnZVxuICogKHRpbWVzdGFtcHMgZW1iZWRkZWQgaW4gdGhlIGlkKS4gVXNlIHtAbGluayBjdWlkMn0gaW5zdGVhZC5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcGFyYWxsZWxkcml2ZS9jdWlkLlxuICovXG5leHBvcnQgY29uc3QgY3VpZCA9IC9eW2NDXVswLTlhLXpdezYsfSQvO1xuZXhwb3J0IGNvbnN0IGN1aWQyID0gL15bMC05YS16XSskLztcbmV4cG9ydCBjb25zdCB1bGlkID0gL15bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI2fSQvO1xuZXhwb3J0IGNvbnN0IHhpZCA9IC9eWzAtOWEtdkEtVl17MjB9JC87XG5leHBvcnQgY29uc3Qga3N1aWQgPSAvXltBLVphLXowLTldezI3fSQvO1xuZXhwb3J0IGNvbnN0IG5hbm9pZCA9IC9eW2EtekEtWjAtOV8tXXsyMX0kLztcbi8qKiBJU08gODYwMS0xIGR1cmF0aW9uIHJlZ2V4LiBEb2VzIG5vdCBzdXBwb3J0IHRoZSA4NjAxLTIgZXh0ZW5zaW9ucyBsaWtlIG5lZ2F0aXZlIGR1cmF0aW9ucyBvciBmcmFjdGlvbmFsL25lZ2F0aXZlIGNvbXBvbmVudHMuICovXG5leHBvcnQgY29uc3QgZHVyYXRpb24gPSAvXlAoPzooXFxkK1cpfCg/IS4qVykoPz1cXGR8VFxcZCkoXFxkK1kpPyhcXGQrTSk/KFxcZCtEKT8oVCg/PVxcZCkoXFxkK0gpPyhcXGQrTSk/KFxcZCsoWy4sXVxcZCspP1MpPyk/KSQvO1xuLyoqIEltcGxlbWVudHMgSVNPIDg2MDEtMiBleHRlbnNpb25zIGxpa2UgZXhwbGljaXQgKy0gcHJlZml4ZXMsIG1peGluZyB3ZWVrcyB3aXRoIG90aGVyIHVuaXRzLCBhbmQgZnJhY3Rpb25hbC9uZWdhdGl2ZSBjb21wb25lbnRzLiAqL1xuZXhwb3J0IGNvbnN0IGV4dGVuZGVkRHVyYXRpb24gPSAvXlstK10/UCg/ISQpKD86KD86Wy0rXT9cXGQrWSl8KD86Wy0rXT9cXGQrWy4sXVxcZCtZJCkpPyg/Oig/OlstK10/XFxkK00pfCg/OlstK10/XFxkK1suLF1cXGQrTSQpKT8oPzooPzpbLStdP1xcZCtXKXwoPzpbLStdP1xcZCtbLixdXFxkK1ckKSk/KD86KD86Wy0rXT9cXGQrRCl8KD86Wy0rXT9cXGQrWy4sXVxcZCtEJCkpPyg/OlQoPz1bXFxkKy1dKSg/Oig/OlstK10/XFxkK0gpfCg/OlstK10/XFxkK1suLF1cXGQrSCQpKT8oPzooPzpbLStdP1xcZCtNKXwoPzpbLStdP1xcZCtbLixdXFxkK00kKSk/KD86Wy0rXT9cXGQrKD86Wy4sXVxcZCspP1MpPyk/PyQvO1xuLyoqIEEgcmVnZXggZm9yIGFueSBVVUlELWxpa2UgaWRlbnRpZmllcjogOC00LTQtNC0xMiBoZXggcGF0dGVybiAqL1xuZXhwb3J0IGNvbnN0IGd1aWQgPSAvXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0pJC87XG4vKiogUmV0dXJucyBhIHJlZ2V4IGZvciB2YWxpZGF0aW5nIGFuIFJGQyA5NTYyLzQxMjIgVVVJRC5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiBPcHRpb25hbGx5IHNwZWNpZnkgYSB2ZXJzaW9uIDEtOC4gSWYgbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWQsIGFsbCB2ZXJzaW9ucyBhcmUgc3VwcG9ydGVkLiAqL1xuZXhwb3J0IGNvbnN0IHV1aWQgPSAodmVyc2lvbikgPT4ge1xuICAgIGlmICghdmVyc2lvbilcbiAgICAgICAgcmV0dXJuIC9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVsxLThdWzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwfGZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZikkLztcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS0ke3ZlcnNpb259WzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn0pJGApO1xufTtcbmV4cG9ydCBjb25zdCB1dWlkNCA9IC8qQF9fUFVSRV9fKi8gdXVpZCg0KTtcbmV4cG9ydCBjb25zdCB1dWlkNiA9IC8qQF9fUFVSRV9fKi8gdXVpZCg2KTtcbmV4cG9ydCBjb25zdCB1dWlkNyA9IC8qQF9fUFVSRV9fKi8gdXVpZCg3KTtcbi8qKiBQcmFjdGljYWwgZW1haWwgdmFsaWRhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IGVtYWlsID0gL14oPyFcXC4pKD8hLipcXC5cXC4pKFtBLVphLXowLTlfJytcXC1cXC5dKilbQS1aYS16MC05XystXUAoW0EtWmEtejAtOV1bQS1aYS16MC05XFwtXSpcXC4pK1tBLVphLXpdezIsfSQvO1xuLyoqIEVxdWl2YWxlbnQgdG8gdGhlIEhUTUw1IGlucHV0W3R5cGU9ZW1haWxdIHZhbGlkYXRpb24gaW1wbGVtZW50ZWQgYnkgYnJvd3NlcnMuIFNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0L2VtYWlsICovXG5leHBvcnQgY29uc3QgaHRtbDVFbWFpbCA9IC9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLztcbi8qKiBUaGUgY2xhc3NpYyBlbWFpbHJlZ2V4LmNvbSByZWdleCBmb3IgUkZDIDUzMjItY29tcGxpYW50IGVtYWlscyAqL1xuZXhwb3J0IGNvbnN0IHJmYzUzMjJFbWFpbCA9IC9eKChbXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoXFxbWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfV0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvO1xuLyoqIEEgbG9vc2UgcmVnZXggdGhhdCBhbGxvd3MgVW5pY29kZSBjaGFyYWN0ZXJzLCBlbmZvcmNlcyBsZW5ndGggbGltaXRzLCBhbmQgdGhhdCdzIGFib3V0IGl0LiAqL1xuZXhwb3J0IGNvbnN0IHVuaWNvZGVFbWFpbCA9IC9eW15cXHNAXCJdezEsNjR9QFteXFxzQF17MSwyNTV9JC91O1xuZXhwb3J0IGNvbnN0IGlkbkVtYWlsID0gdW5pY29kZUVtYWlsO1xuZXhwb3J0IGNvbnN0IGJyb3dzZXJFbWFpbCA9IC9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLztcbi8vIGZyb20gaHR0cHM6Ly90aGVrZXZpbnNjb3R0LmNvbS9lbW9qaXMtaW4tamF2YXNjcmlwdC8jd3JpdGluZy1hLXJlZ3VsYXItZXhwcmVzc2lvblxuY29uc3QgX2Vtb2ppID0gYF4oXFxcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfXxcXFxccHtFbW9qaV9Db21wb25lbnR9KSskYDtcbmV4cG9ydCBmdW5jdGlvbiBlbW9qaSgpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChfZW1vamksIFwidVwiKTtcbn1cbmV4cG9ydCBjb25zdCBpcHY0ID0gL14oPzooPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSkkLztcbmV4cG9ydCBjb25zdCBpcHY2ID0gL14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSkkLztcbmV4cG9ydCBjb25zdCBtYWMgPSAoZGVsaW1pdGVyKSA9PiB7XG4gICAgY29uc3QgZXNjYXBlZERlbGltID0gdXRpbC5lc2NhcGVSZWdleChkZWxpbWl0ZXIgPz8gXCI6XCIpO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKD86WzAtOUEtRl17Mn0ke2VzY2FwZWREZWxpbX0pezV9WzAtOUEtRl17Mn0kfF4oPzpbMC05YS1mXXsyfSR7ZXNjYXBlZERlbGltfSl7NX1bMC05YS1mXXsyfSRgKTtcbn07XG5leHBvcnQgY29uc3QgY2lkcnY0ID0gL14oKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC8oWzAtOV18WzEtMl1bMC05XXwzWzAtMl0pJC87XG5leHBvcnQgY29uc3QgY2lkcnY2ID0gL14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18Ojp8KFswLTlhLWZBLUZdezEsNH0pPzo6KFswLTlhLWZBLUZdezEsNH06Pyl7MCw2fSlcXC8oMTJbMC04XXwxWzAxXVswLTldfFsxLTldP1swLTldKSQvO1xuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg2MDM5Mi9kZXRlcm1pbmUtaWYtc3RyaW5nLWlzLWluLWJhc2U2NC11c2luZy1qYXZhc2NyaXB0XG5leHBvcnQgY29uc3QgYmFzZTY0ID0gL14kfF4oPzpbMC05YS16QS1aKy9dezR9KSooPzooPzpbMC05YS16QS1aKy9dezJ9PT0pfCg/OlswLTlhLXpBLVorL117M309KSk/JC87XG5leHBvcnQgY29uc3QgYmFzZTY0dXJsID0gL15bQS1aYS16MC05Xy1dKiQvO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA2MTc5L3JlZ3VsYXItZXhwcmVzc2lvbi10by1tYXRjaC1kbnMtaG9zdG5hbWUtb3ItaXAtYWRkcmVzc1xuLy8gZXhwb3J0IGNvbnN0IGhvc3RuYW1lOiBSZWdFeHAgPSAvXihbYS16QS1aMC05LV0rXFwuKSpbYS16QS1aMC05LV0rJC87XG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSAvXig/PS57MSwyNTN9XFwuPyQpW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbLTAtOWEtekEtWl17MCw2MX1bMC05YS16QS1aXSk/KSpcXC4/JC87XG5leHBvcnQgY29uc3QgZG9tYWluID0gL14oW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/XFwuKStbYS16QS1aXXsyLH0kLztcbmV4cG9ydCBjb25zdCBodHRwUHJvdG9jb2wgPSAvXmh0dHBzPyQvO1xuLy8gaHR0cHM6Ly9ibG9nLnN0ZXZlbmxldml0aGFuLmNvbS9hcmNoaXZlcy92YWxpZGF0ZS1waG9uZS1udW1iZXIjcjQtMyAocmVnZXggc2FucyBzcGFjZXMpXG4vLyBFLjE2NDogbGVhZGluZyBkaWdpdCBtdXN0IGJlIDEtOTsgdG90YWwgZGlnaXRzIChleGNsdWRpbmcgJysnKSBiZXR3ZWVuIDctMTVcbmV4cG9ydCBjb25zdCBlMTY0ID0gL15cXCtbMS05XVxcZHs2LDE0fSQvO1xuLy8gY29uc3QgZGF0ZVNvdXJjZSA9IGAoKFxcXFxkXFxcXGRbMjQ2OF1bMDQ4XXxcXFxcZFxcXFxkWzEzNTc5XVsyNl18XFxcXGRcXFxcZDBbNDhdfFswMjQ2OF1bMDQ4XTAwfFsxMzU3OV1bMjZdMDApLTAyLTI5fFxcXFxkezR9LSgoMFsxMzU3OF18MVswMl0pLSgwWzEtOV18WzEyXVxcXFxkfDNbMDFdKXwoMFs0NjldfDExKS0oMFsxLTldfFsxMl1cXFxcZHwzMCl8KDAyKS0oMFsxLTldfDFcXFxcZHwyWzAtOF0pKSlgO1xuY29uc3QgZGF0ZVNvdXJjZSA9IGAoPzooPzpcXFxcZFxcXFxkWzI0NjhdWzA0OF18XFxcXGRcXFxcZFsxMzU3OV1bMjZdfFxcXFxkXFxcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXFxcZHs0fS0oPzooPzowWzEzNTc4XXwxWzAyXSktKD86MFsxLTldfFsxMl1cXFxcZHwzWzAxXSl8KD86MFs0NjldfDExKS0oPzowWzEtOV18WzEyXVxcXFxkfDMwKXwoPzowMiktKD86MFsxLTldfDFcXFxcZHwyWzAtOF0pKSlgO1xuZXhwb3J0IGNvbnN0IGRhdGUgPSAvKkBfX1BVUkVfXyovIG5ldyBSZWdFeHAoYF4ke2RhdGVTb3VyY2V9JGApO1xuZnVuY3Rpb24gdGltZVNvdXJjZShhcmdzKSB7XG4gICAgY29uc3QgaGhtbSA9IGAoPzpbMDFdXFxcXGR8MlswLTNdKTpbMC01XVxcXFxkYDtcbiAgICBjb25zdCByZWdleCA9IHR5cGVvZiBhcmdzLnByZWNpc2lvbiA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/IGFyZ3MucHJlY2lzaW9uID09PSAtMVxuICAgICAgICAgICAgPyBgJHtoaG1tfWBcbiAgICAgICAgICAgIDogYXJncy5wcmVjaXNpb24gPT09IDBcbiAgICAgICAgICAgICAgICA/IGAke2hobW19OlswLTVdXFxcXGRgXG4gICAgICAgICAgICAgICAgOiBgJHtoaG1tfTpbMC01XVxcXFxkXFxcXC5cXFxcZHske2FyZ3MucHJlY2lzaW9ufX1gXG4gICAgICAgIDogYCR7aGhtbX0oPzo6WzAtNV1cXFxcZCg/OlxcXFwuXFxcXGQrKT8pP2A7XG4gICAgcmV0dXJuIHJlZ2V4O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRpbWUoYXJncykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeJHt0aW1lU291cmNlKGFyZ3MpfSRgKTtcbn1cbi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzE0MzIzMVxuZXhwb3J0IGZ1bmN0aW9uIGRhdGV0aW1lKGFyZ3MpIHtcbiAgICBjb25zdCB0aW1lID0gdGltZVNvdXJjZSh7IHByZWNpc2lvbjogYXJncy5wcmVjaXNpb24gfSk7XG4gICAgY29uc3Qgb3B0cyA9IFtcIlpcIl07XG4gICAgaWYgKGFyZ3MubG9jYWwpXG4gICAgICAgIG9wdHMucHVzaChcIlwiKTtcbiAgICAvLyBpZiAoYXJncy5vZmZzZXQpIG9wdHMucHVzaChgKFsrLV1cXFxcZHsyfTpcXFxcZHsyfSlgKTtcbiAgICBpZiAoYXJncy5vZmZzZXQpXG4gICAgICAgIG9wdHMucHVzaChgKFsrLV0oPzpbMDFdXFxcXGR8MlswLTNdKTpbMC01XVxcXFxkKWApO1xuICAgIGNvbnN0IHRpbWVSZWdleCA9IGAke3RpbWV9KD86JHtvcHRzLmpvaW4oXCJ8XCIpfSlgO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeJHtkYXRlU291cmNlfVQoPzoke3RpbWVSZWdleH0pJGApO1xufVxuZXhwb3J0IGNvbnN0IHN0cmluZyA9IChwYXJhbXMpID0+IHtcbiAgICBjb25zdCByZWdleCA9IHBhcmFtcyA/IGBbXFxcXHNcXFxcU117JHtwYXJhbXM/Lm1pbmltdW0gPz8gMH0sJHtwYXJhbXM/Lm1heGltdW0gPz8gXCJcIn19YCA6IGBbXFxcXHNcXFxcU10qYDtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7cmVnZXh9JGApO1xufTtcbmV4cG9ydCBjb25zdCBiaWdpbnQgPSAvXi0/XFxkK24/JC87XG5leHBvcnQgY29uc3QgaW50ZWdlciA9IC9eLT9cXGQrJC87XG5leHBvcnQgY29uc3QgbnVtYmVyID0gL14tP1xcZCsoPzpcXC5cXGQrKT8kLztcbmV4cG9ydCBjb25zdCBib29sZWFuID0gL14oPzp0cnVlfGZhbHNlKSQvaTtcbmNvbnN0IF9udWxsID0gL15udWxsJC9pO1xuZXhwb3J0IHsgX251bGwgYXMgbnVsbCB9O1xuY29uc3QgX3VuZGVmaW5lZCA9IC9edW5kZWZpbmVkJC9pO1xuZXhwb3J0IHsgX3VuZGVmaW5lZCBhcyB1bmRlZmluZWQgfTtcbi8vIHJlZ2V4IGZvciBzdHJpbmcgd2l0aCBubyB1cHBlcmNhc2UgbGV0dGVyc1xuZXhwb3J0IGNvbnN0IGxvd2VyY2FzZSA9IC9eW15BLVpdKiQvO1xuLy8gcmVnZXggZm9yIHN0cmluZyB3aXRoIG5vIGxvd2VyY2FzZSBsZXR0ZXJzXG5leHBvcnQgY29uc3QgdXBwZXJjYXNlID0gL15bXmEtel0qJC87XG4vLyByZWdleCBmb3IgaGV4YWRlY2ltYWwgc3RyaW5ncyAoYW55IGxlbmd0aClcbmV4cG9ydCBjb25zdCBoZXggPSAvXlswLTlhLWZBLUZdKiQvO1xuLy8gSGFzaCByZWdleGVzIGZvciBkaWZmZXJlbnQgYWxnb3JpdGhtcyBhbmQgZW5jb2RpbmdzXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGJhc2U2NCByZWdleCB3aXRoIGV4YWN0IGxlbmd0aCBhbmQgcGFkZGluZ1xuZnVuY3Rpb24gZml4ZWRCYXNlNjQoYm9keUxlbmd0aCwgcGFkZGluZykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOSsvXXske2JvZHlMZW5ndGh9fSR7cGFkZGluZ30kYCk7XG59XG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGJhc2U2NHVybCByZWdleCB3aXRoIGV4YWN0IGxlbmd0aCAobm8gcGFkZGluZylcbmZ1bmN0aW9uIGZpeGVkQmFzZTY0dXJsKGxlbmd0aCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOV8tXXske2xlbmd0aH19JGApO1xufVxuLy8gTUQ1ICgxNiBieXRlcyk6IGJhc2U2NCA9IDI0IGNoYXJzIHRvdGFsICgyMiArIFwiPT1cIilcbmV4cG9ydCBjb25zdCBtZDVfaGV4ID0gL15bMC05YS1mQS1GXXszMn0kLztcbmV4cG9ydCBjb25zdCBtZDVfYmFzZTY0ID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NCgyMiwgXCI9PVwiKTtcbmV4cG9ydCBjb25zdCBtZDVfYmFzZTY0dXJsID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NHVybCgyMik7XG4vLyBTSEExICgyMCBieXRlcyk6IGJhc2U2NCA9IDI4IGNoYXJzIHRvdGFsICgyNyArIFwiPVwiKVxuZXhwb3J0IGNvbnN0IHNoYTFfaGV4ID0gL15bMC05YS1mQS1GXXs0MH0kLztcbmV4cG9ydCBjb25zdCBzaGExX2Jhc2U2NCA9IC8qQF9fUFVSRV9fKi8gZml4ZWRCYXNlNjQoMjcsIFwiPVwiKTtcbmV4cG9ydCBjb25zdCBzaGExX2Jhc2U2NHVybCA9IC8qQF9fUFVSRV9fKi8gZml4ZWRCYXNlNjR1cmwoMjcpO1xuLy8gU0hBMjU2ICgzMiBieXRlcyk6IGJhc2U2NCA9IDQ0IGNoYXJzIHRvdGFsICg0MyArIFwiPVwiKVxuZXhwb3J0IGNvbnN0IHNoYTI1Nl9oZXggPSAvXlswLTlhLWZBLUZdezY0fSQvO1xuZXhwb3J0IGNvbnN0IHNoYTI1Nl9iYXNlNjQgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0KDQzLCBcIj1cIik7XG5leHBvcnQgY29uc3Qgc2hhMjU2X2Jhc2U2NHVybCA9IC8qQF9fUFVSRV9fKi8gZml4ZWRCYXNlNjR1cmwoNDMpO1xuLy8gU0hBMzg0ICg0OCBieXRlcyk6IGJhc2U2NCA9IDY0IGNoYXJzIHRvdGFsIChubyBwYWRkaW5nKVxuZXhwb3J0IGNvbnN0IHNoYTM4NF9oZXggPSAvXlswLTlhLWZBLUZdezk2fSQvO1xuZXhwb3J0IGNvbnN0IHNoYTM4NF9iYXNlNjQgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0KDY0LCBcIlwiKTtcbmV4cG9ydCBjb25zdCBzaGEzODRfYmFzZTY0dXJsID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NHVybCg2NCk7XG4vLyBTSEE1MTIgKDY0IGJ5dGVzKTogYmFzZTY0ID0gODggY2hhcnMgdG90YWwgKDg2ICsgXCI9PVwiKVxuZXhwb3J0IGNvbnN0IHNoYTUxMl9oZXggPSAvXlswLTlhLWZBLUZdezEyOH0kLztcbmV4cG9ydCBjb25zdCBzaGE1MTJfYmFzZTY0ID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NCg4NiwgXCI9PVwiKTtcbmV4cG9ydCBjb25zdCBzaGE1MTJfYmFzZTY0dXJsID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NHVybCg4Nik7XG4iLCIvLyBpbXBvcnQgeyAkWm9kVHlwZSB9IGZyb20gXCIuL3NjaGVtYXMuanNcIjtcbmltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIi4vY29yZS5qc1wiO1xuaW1wb3J0ICogYXMgcmVnZXhlcyBmcm9tIFwiLi9yZWdleGVzLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuL3V0aWwuanNcIjtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2sgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgaW5zdC5fem9kID8/IChpbnN0Ll96b2QgPSB7fSk7XG4gICAgaW5zdC5fem9kLmRlZiA9IGRlZjtcbiAgICAoX2EgPSBpbnN0Ll96b2QpLm9uYXR0YWNoID8/IChfYS5vbmF0dGFjaCA9IFtdKTtcbn0pO1xuY29uc3QgbnVtZXJpY09yaWdpbk1hcCA9IHtcbiAgICBudW1iZXI6IFwibnVtYmVyXCIsXG4gICAgYmlnaW50OiBcImJpZ2ludFwiLFxuICAgIG9iamVjdDogXCJkYXRlXCIsXG59O1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja0xlc3NUaGFuID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja0xlc3NUaGFuXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvbnN0IG9yaWdpbiA9IG51bWVyaWNPcmlnaW5NYXBbdHlwZW9mIGRlZi52YWx1ZV07XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgY29uc3QgYmFnID0gaW5zdC5fem9kLmJhZztcbiAgICAgICAgY29uc3QgY3VyciA9IChkZWYuaW5jbHVzaXZlID8gYmFnLm1heGltdW0gOiBiYWcuZXhjbHVzaXZlTWF4aW11bSkgPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICBpZiAoZGVmLnZhbHVlIDwgY3Vycikge1xuICAgICAgICAgICAgaWYgKGRlZi5pbmNsdXNpdmUpXG4gICAgICAgICAgICAgICAgYmFnLm1heGltdW0gPSBkZWYudmFsdWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYmFnLmV4Y2x1c2l2ZU1heGltdW0gPSBkZWYudmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAoZGVmLmluY2x1c2l2ZSA/IHBheWxvYWQudmFsdWUgPD0gZGVmLnZhbHVlIDogcGF5bG9hZC52YWx1ZSA8IGRlZi52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgY29kZTogXCJ0b29fYmlnXCIsXG4gICAgICAgICAgICBtYXhpbXVtOiB0eXBlb2YgZGVmLnZhbHVlID09PSBcIm9iamVjdFwiID8gZGVmLnZhbHVlLmdldFRpbWUoKSA6IGRlZi52YWx1ZSxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBkZWYuaW5jbHVzaXZlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrR3JlYXRlclRoYW4gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrR3JlYXRlclRoYW5cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3Qgb3JpZ2luID0gbnVtZXJpY09yaWdpbk1hcFt0eXBlb2YgZGVmLnZhbHVlXTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBjb25zdCBjdXJyID0gKGRlZi5pbmNsdXNpdmUgPyBiYWcubWluaW11bSA6IGJhZy5leGNsdXNpdmVNaW5pbXVtKSA/PyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGlmIChkZWYudmFsdWUgPiBjdXJyKSB7XG4gICAgICAgICAgICBpZiAoZGVmLmluY2x1c2l2ZSlcbiAgICAgICAgICAgICAgICBiYWcubWluaW11bSA9IGRlZi52YWx1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBiYWcuZXhjbHVzaXZlTWluaW11bSA9IGRlZi52YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChkZWYuaW5jbHVzaXZlID8gcGF5bG9hZC52YWx1ZSA+PSBkZWYudmFsdWUgOiBwYXlsb2FkLnZhbHVlID4gZGVmLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICBjb2RlOiBcInRvb19zbWFsbFwiLFxuICAgICAgICAgICAgbWluaW11bTogdHlwZW9mIGRlZi52YWx1ZSA9PT0gXCJvYmplY3RcIiA/IGRlZi52YWx1ZS5nZXRUaW1lKCkgOiBkZWYudmFsdWUsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZGVmLmluY2x1c2l2ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja011bHRpcGxlT2YgPSBcbi8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tNdWx0aXBsZU9mXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gaW5zdC5fem9kLmJhZykubXVsdGlwbGVPZiA/PyAoX2EubXVsdGlwbGVPZiA9IGRlZi52YWx1ZSk7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkLnZhbHVlICE9PSB0eXBlb2YgZGVmLnZhbHVlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IG1peCBudW1iZXIgYW5kIGJpZ2ludCBpbiBtdWx0aXBsZV9vZiBjaGVjay5cIik7XG4gICAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSB0eXBlb2YgcGF5bG9hZC52YWx1ZSA9PT0gXCJiaWdpbnRcIlxuICAgICAgICAgICAgPyBwYXlsb2FkLnZhbHVlICUgZGVmLnZhbHVlID09PSBCaWdJbnQoMClcbiAgICAgICAgICAgIDogdXRpbC5mbG9hdFNhZmVSZW1haW5kZXIocGF5bG9hZC52YWx1ZSwgZGVmLnZhbHVlKSA9PT0gMDtcbiAgICAgICAgaWYgKGlzTXVsdGlwbGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiB0eXBlb2YgcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGNvZGU6IFwibm90X211bHRpcGxlX29mXCIsXG4gICAgICAgICAgICBkaXZpc29yOiBkZWYudmFsdWUsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja051bWJlckZvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tOdW1iZXJGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7IC8vIG5vIGZvcm1hdCBjaGVja3NcbiAgICBkZWYuZm9ybWF0ID0gZGVmLmZvcm1hdCB8fCBcImZsb2F0NjRcIjtcbiAgICBjb25zdCBpc0ludCA9IGRlZi5mb3JtYXQ/LmluY2x1ZGVzKFwiaW50XCIpO1xuICAgIGNvbnN0IG9yaWdpbiA9IGlzSW50ID8gXCJpbnRcIiA6IFwibnVtYmVyXCI7XG4gICAgY29uc3QgW21pbmltdW0sIG1heGltdW1dID0gdXRpbC5OVU1CRVJfRk9STUFUX1JBTkdFU1tkZWYuZm9ybWF0XTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcuZm9ybWF0ID0gZGVmLmZvcm1hdDtcbiAgICAgICAgYmFnLm1pbmltdW0gPSBtaW5pbXVtO1xuICAgICAgICBiYWcubWF4aW11bSA9IG1heGltdW07XG4gICAgICAgIGlmIChpc0ludClcbiAgICAgICAgICAgIGJhZy5wYXR0ZXJuID0gcmVnZXhlcy5pbnRlZ2VyO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKGlzSW50KSB7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgLy8gaW52YWxpZF9mb3JtYXQgaXNzdWVcbiAgICAgICAgICAgICAgICAvLyBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAvLyAgIGV4cGVjdGVkOiBkZWYuZm9ybWF0LFxuICAgICAgICAgICAgICAgIC8vICAgZm9ybWF0OiBkZWYuZm9ybWF0LFxuICAgICAgICAgICAgICAgIC8vICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgICAgIC8vICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgLy8gICBpbnN0LFxuICAgICAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgICAgIC8vIGludmFsaWRfdHlwZSBpc3N1ZVxuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogb3JpZ2luLFxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IGRlZi5mb3JtYXQsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIC8vIG5vdF9tdWx0aXBsZV9vZiBpc3N1ZVxuICAgICAgICAgICAgICAgIC8vIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIC8vICAgY29kZTogXCJub3RfbXVsdGlwbGVfb2ZcIixcbiAgICAgICAgICAgICAgICAvLyAgIG9yaWdpbjogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAvLyAgIGlucHV0LFxuICAgICAgICAgICAgICAgIC8vICAgaW5zdCxcbiAgICAgICAgICAgICAgICAvLyAgIGRpdmlzb3I6IDEsXG4gICAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGlucHV0KSkge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdG9vX2JpZ1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJ0b29fYmlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyB0b29fc21hbGxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwidG9vX3NtYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgPCBtaW5pbXVtKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBvcmlnaW46IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgICAgICBtaW5pbXVtLFxuICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0ID4gbWF4aW11bSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgb3JpZ2luOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGNvZGU6IFwidG9vX2JpZ1wiLFxuICAgICAgICAgICAgICAgIG1heGltdW0sXG4gICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tCaWdJbnRGb3JtYXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrQmlnSW50Rm9ybWF0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpOyAvLyBubyBmb3JtYXQgY2hlY2tzXG4gICAgY29uc3QgW21pbmltdW0sIG1heGltdW1dID0gdXRpbC5CSUdJTlRfRk9STUFUX1JBTkdFU1tkZWYuZm9ybWF0XTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcuZm9ybWF0ID0gZGVmLmZvcm1hdDtcbiAgICAgICAgYmFnLm1pbmltdW0gPSBtaW5pbXVtO1xuICAgICAgICBiYWcubWF4aW11bSA9IG1heGltdW07XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoaW5wdXQgPCBtaW5pbXVtKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBvcmlnaW46IFwiYmlnaW50XCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgICAgICBtaW5pbXVtOiBtaW5pbXVtLFxuICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0ID4gbWF4aW11bSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgb3JpZ2luOiBcImJpZ2ludFwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGNvZGU6IFwidG9vX2JpZ1wiLFxuICAgICAgICAgICAgICAgIG1heGltdW0sXG4gICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tNYXhTaXplID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja01heFNpemVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIHZhciBfYTtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIChfYSA9IGluc3QuX3pvZC5kZWYpLndoZW4gPz8gKF9hLndoZW4gPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICByZXR1cm4gIXV0aWwubnVsbGlzaCh2YWwpICYmIHZhbC5zaXplICE9PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgY29uc3QgY3VyciA9IChpbnN0Ll96b2QuYmFnLm1heGltdW0gPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtcbiAgICAgICAgaWYgKGRlZi5tYXhpbXVtIDwgY3VycilcbiAgICAgICAgICAgIGluc3QuX3pvZC5iYWcubWF4aW11bSA9IGRlZi5tYXhpbXVtO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGlucHV0LnNpemU7XG4gICAgICAgIGlmIChzaXplIDw9IGRlZi5tYXhpbXVtKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIG9yaWdpbjogdXRpbC5nZXRTaXphYmxlT3JpZ2luKGlucHV0KSxcbiAgICAgICAgICAgIGNvZGU6IFwidG9vX2JpZ1wiLFxuICAgICAgICAgICAgbWF4aW11bTogZGVmLm1heGltdW0sXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja01pblNpemUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrTWluU2l6ZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgKF9hID0gaW5zdC5fem9kLmRlZikud2hlbiA/PyAoX2Eud2hlbiA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIHJldHVybiAhdXRpbC5udWxsaXNoKHZhbCkgJiYgdmFsLnNpemUgIT09IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyID0gKGluc3QuX3pvZC5iYWcubWluaW11bSA/PyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBpZiAoZGVmLm1pbmltdW0gPiBjdXJyKVxuICAgICAgICAgICAgaW5zdC5fem9kLmJhZy5taW5pbXVtID0gZGVmLm1pbmltdW07XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBjb25zdCBzaXplID0gaW5wdXQuc2l6ZTtcbiAgICAgICAgaWYgKHNpemUgPj0gZGVmLm1pbmltdW0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiB1dGlsLmdldFNpemFibGVPcmlnaW4oaW5wdXQpLFxuICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgIG1pbmltdW06IGRlZi5taW5pbXVtLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tTaXplRXF1YWxzID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1NpemVFcXVhbHNcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIHZhciBfYTtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIChfYSA9IGluc3QuX3pvZC5kZWYpLndoZW4gPz8gKF9hLndoZW4gPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICByZXR1cm4gIXV0aWwubnVsbGlzaCh2YWwpICYmIHZhbC5zaXplICE9PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgY29uc3QgYmFnID0gaW5zdC5fem9kLmJhZztcbiAgICAgICAgYmFnLm1pbmltdW0gPSBkZWYuc2l6ZTtcbiAgICAgICAgYmFnLm1heGltdW0gPSBkZWYuc2l6ZTtcbiAgICAgICAgYmFnLnNpemUgPSBkZWYuc2l6ZTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGNvbnN0IHNpemUgPSBpbnB1dC5zaXplO1xuICAgICAgICBpZiAoc2l6ZSA9PT0gZGVmLnNpemUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHRvb0JpZyA9IHNpemUgPiBkZWYuc2l6ZTtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW46IHV0aWwuZ2V0U2l6YWJsZU9yaWdpbihpbnB1dCksXG4gICAgICAgICAgICAuLi4odG9vQmlnID8geyBjb2RlOiBcInRvb19iaWdcIiwgbWF4aW11bTogZGVmLnNpemUgfSA6IHsgY29kZTogXCJ0b29fc21hbGxcIiwgbWluaW11bTogZGVmLnNpemUgfSksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTWF4TGVuZ3RoID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja01heExlbmd0aFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgKF9hID0gaW5zdC5fem9kLmRlZikud2hlbiA/PyAoX2Eud2hlbiA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIHJldHVybiAhdXRpbC5udWxsaXNoKHZhbCkgJiYgdmFsLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnIgPSAoaW5zdC5fem9kLmJhZy5tYXhpbXVtID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgICAgIGlmIChkZWYubWF4aW11bSA8IGN1cnIpXG4gICAgICAgICAgICBpbnN0Ll96b2QuYmFnLm1heGltdW0gPSBkZWYubWF4aW11bTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8PSBkZWYubWF4aW11bSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gdXRpbC5nZXRMZW5ndGhhYmxlT3JpZ2luKGlucHV0KTtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICBjb2RlOiBcInRvb19iaWdcIixcbiAgICAgICAgICAgIG1heGltdW06IGRlZi5tYXhpbXVtLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tNaW5MZW5ndGggPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrTWluTGVuZ3RoXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICAoX2EgPSBpbnN0Ll96b2QuZGVmKS53aGVuID8/IChfYS53aGVuID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgcmV0dXJuICF1dGlsLm51bGxpc2godmFsKSAmJiB2YWwubGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgY29uc3QgY3VyciA9IChpbnN0Ll96b2QuYmFnLm1pbmltdW0gPz8gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKTtcbiAgICAgICAgaWYgKGRlZi5taW5pbXVtID4gY3VycilcbiAgICAgICAgICAgIGluc3QuX3pvZC5iYWcubWluaW11bSA9IGRlZi5taW5pbXVtO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID49IGRlZi5taW5pbXVtKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBvcmlnaW4gPSB1dGlsLmdldExlbmd0aGFibGVPcmlnaW4oaW5wdXQpO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIGNvZGU6IFwidG9vX3NtYWxsXCIsXG4gICAgICAgICAgICBtaW5pbXVtOiBkZWYubWluaW11bSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTGVuZ3RoRXF1YWxzID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja0xlbmd0aEVxdWFsc1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgKF9hID0gaW5zdC5fem9kLmRlZikud2hlbiA/PyAoX2Eud2hlbiA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIHJldHVybiAhdXRpbC5udWxsaXNoKHZhbCkgJiYgdmFsLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgICAgIGJhZy5taW5pbXVtID0gZGVmLmxlbmd0aDtcbiAgICAgICAgYmFnLm1heGltdW0gPSBkZWYubGVuZ3RoO1xuICAgICAgICBiYWcubGVuZ3RoID0gZGVmLmxlbmd0aDtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gZGVmLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gdXRpbC5nZXRMZW5ndGhhYmxlT3JpZ2luKGlucHV0KTtcbiAgICAgICAgY29uc3QgdG9vQmlnID0gbGVuZ3RoID4gZGVmLmxlbmd0aDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICAuLi4odG9vQmlnID8geyBjb2RlOiBcInRvb19iaWdcIiwgbWF4aW11bTogZGVmLmxlbmd0aCB9IDogeyBjb2RlOiBcInRvb19zbWFsbFwiLCBtaW5pbXVtOiBkZWYubGVuZ3RoIH0pLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja1N0cmluZ0Zvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tTdHJpbmdGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcuZm9ybWF0ID0gZGVmLmZvcm1hdDtcbiAgICAgICAgaWYgKGRlZi5wYXR0ZXJuKSB7XG4gICAgICAgICAgICBiYWcucGF0dGVybnMgPz8gKGJhZy5wYXR0ZXJucyA9IG5ldyBTZXQoKSk7XG4gICAgICAgICAgICBiYWcucGF0dGVybnMuYWRkKGRlZi5wYXR0ZXJuKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChkZWYucGF0dGVybilcbiAgICAgICAgKF9hID0gaW5zdC5fem9kKS5jaGVjayA/PyAoX2EuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgZGVmLnBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGlmIChkZWYucGF0dGVybi50ZXN0KHBheWxvYWQudmFsdWUpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG9yaWdpbjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBkZWYuZm9ybWF0LFxuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIC4uLihkZWYucGF0dGVybiA/IHsgcGF0dGVybjogZGVmLnBhdHRlcm4udG9TdHJpbmcoKSB9IDoge30pLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgZWxzZVxuICAgICAgICAoX2IgPSBpbnN0Ll96b2QpLmNoZWNrID8/IChfYi5jaGVjayA9ICgpID0+IHsgfSk7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tSZWdleCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tSZWdleFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZENoZWNrU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBkZWYucGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICAgICAgICBpZiAoZGVmLnBhdHRlcm4udGVzdChwYXlsb2FkLnZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW46IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICBmb3JtYXQ6IFwicmVnZXhcIixcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgcGF0dGVybjogZGVmLnBhdHRlcm4udG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja0xvd2VyQ2FzZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tMb3dlckNhc2VcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMubG93ZXJjYXNlKTtcbiAgICAkWm9kQ2hlY2tTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrVXBwZXJDYXNlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1VwcGVyQ2FzZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy51cHBlcmNhc2UpO1xuICAgICRab2RDaGVja1N0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tJbmNsdWRlcyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tJbmNsdWRlc1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBlc2NhcGVkUmVnZXggPSB1dGlsLmVzY2FwZVJlZ2V4KGRlZi5pbmNsdWRlcyk7XG4gICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAodHlwZW9mIGRlZi5wb3NpdGlvbiA9PT0gXCJudW1iZXJcIiA/IGBeLnske2RlZi5wb3NpdGlvbn19JHtlc2NhcGVkUmVnZXh9YCA6IGVzY2FwZWRSZWdleCk7XG4gICAgZGVmLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgICAgIGJhZy5wYXR0ZXJucyA/PyAoYmFnLnBhdHRlcm5zID0gbmV3IFNldCgpKTtcbiAgICAgICAgYmFnLnBhdHRlcm5zLmFkZChwYXR0ZXJuKTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZC52YWx1ZS5pbmNsdWRlcyhkZWYuaW5jbHVkZXMsIGRlZi5wb3NpdGlvbikpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBcImluY2x1ZGVzXCIsXG4gICAgICAgICAgICBpbmNsdWRlczogZGVmLmluY2x1ZGVzLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tTdGFydHNXaXRoID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1N0YXJ0c1dpdGhcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoYF4ke3V0aWwuZXNjYXBlUmVnZXgoZGVmLnByZWZpeCl9LipgKTtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSBwYXR0ZXJuKTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcucGF0dGVybnMgPz8gKGJhZy5wYXR0ZXJucyA9IG5ldyBTZXQoKSk7XG4gICAgICAgIGJhZy5wYXR0ZXJucy5hZGQocGF0dGVybik7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQudmFsdWUuc3RhcnRzV2l0aChkZWYucHJlZml4KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW46IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICBmb3JtYXQ6IFwic3RhcnRzX3dpdGhcIixcbiAgICAgICAgICAgIHByZWZpeDogZGVmLnByZWZpeCxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrRW5kc1dpdGggPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrRW5kc1dpdGhcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoYC4qJHt1dGlsLmVzY2FwZVJlZ2V4KGRlZi5zdWZmaXgpfSRgKTtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSBwYXR0ZXJuKTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcucGF0dGVybnMgPz8gKGJhZy5wYXR0ZXJucyA9IG5ldyBTZXQoKSk7XG4gICAgICAgIGJhZy5wYXR0ZXJucy5hZGQocGF0dGVybik7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQudmFsdWUuZW5kc1dpdGgoZGVmLnN1ZmZpeCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBcImVuZHNfd2l0aFwiLFxuICAgICAgICAgICAgc3VmZml4OiBkZWYuc3VmZml4LFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLyAgICAkWm9kQ2hlY2tQcm9wZXJ0eSAgICAvLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmZ1bmN0aW9uIGhhbmRsZUNoZWNrUHJvcGVydHlSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBwcm9wZXJ0eSkge1xuICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKHByb3BlcnR5LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgfVxufVxuZXhwb3J0IGNvbnN0ICRab2RDaGVja1Byb3BlcnR5ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1Byb3BlcnR5XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi5zY2hlbWEuX3pvZC5ydW4oe1xuICAgICAgICAgICAgdmFsdWU6IHBheWxvYWQudmFsdWVbZGVmLnByb3BlcnR5XSxcbiAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiBoYW5kbGVDaGVja1Byb3BlcnR5UmVzdWx0KHJlc3VsdCwgcGF5bG9hZCwgZGVmLnByb3BlcnR5KSk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlQ2hlY2tQcm9wZXJ0eVJlc3VsdChyZXN1bHQsIHBheWxvYWQsIGRlZi5wcm9wZXJ0eSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTWltZVR5cGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrTWltZVR5cGVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgbWltZVNldCA9IG5ldyBTZXQoZGVmLm1pbWUpO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGluc3QuX3pvZC5iYWcubWltZSA9IGRlZi5taW1lO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChtaW1lU2V0LmhhcyhwYXlsb2FkLnZhbHVlLnR5cGUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF92YWx1ZVwiLFxuICAgICAgICAgICAgdmFsdWVzOiBkZWYubWltZSxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLnR5cGUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tPdmVyd3JpdGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrT3ZlcndyaXRlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBkZWYudHgocGF5bG9hZC52YWx1ZSk7XG4gICAgfTtcbn0pO1xuIiwiZXhwb3J0IGNsYXNzIERvYyB7XG4gICAgY29uc3RydWN0b3IoYXJncyA9IFtdKSB7XG4gICAgICAgIHRoaXMuY29udGVudCA9IFtdO1xuICAgICAgICB0aGlzLmluZGVudCA9IDA7XG4gICAgICAgIGlmICh0aGlzKVxuICAgICAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB9XG4gICAgaW5kZW50ZWQoZm4pIHtcbiAgICAgICAgdGhpcy5pbmRlbnQgKz0gMTtcbiAgICAgICAgZm4odGhpcyk7XG4gICAgICAgIHRoaXMuaW5kZW50IC09IDE7XG4gICAgfVxuICAgIHdyaXRlKGFyZykge1xuICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBhcmcodGhpcywgeyBleGVjdXRpb246IFwic3luY1wiIH0pO1xuICAgICAgICAgICAgYXJnKHRoaXMsIHsgZXhlY3V0aW9uOiBcImFzeW5jXCIgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGVudCA9IGFyZztcbiAgICAgICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpLmZpbHRlcigoeCkgPT4geCk7XG4gICAgICAgIGNvbnN0IG1pbkluZGVudCA9IE1hdGgubWluKC4uLmxpbmVzLm1hcCgoeCkgPT4geC5sZW5ndGggLSB4LnRyaW1TdGFydCgpLmxlbmd0aCkpO1xuICAgICAgICBjb25zdCBkZWRlbnRlZCA9IGxpbmVzLm1hcCgoeCkgPT4geC5zbGljZShtaW5JbmRlbnQpKS5tYXAoKHgpID0+IFwiIFwiLnJlcGVhdCh0aGlzLmluZGVudCAqIDIpICsgeCk7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBkZWRlbnRlZCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50LnB1c2gobGluZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgY29uc3QgRiA9IEZ1bmN0aW9uO1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcz8uYXJncztcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXM/LmNvbnRlbnQgPz8gW2BgXTtcbiAgICAgICAgY29uc3QgbGluZXMgPSBbLi4uY29udGVudC5tYXAoKHgpID0+IGAgICR7eH1gKV07XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmVzLmpvaW4oXCJcXG5cIikpO1xuICAgICAgICByZXR1cm4gbmV3IEYoLi4uYXJncywgbGluZXMuam9pbihcIlxcblwiKSk7XG4gICAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHZlcnNpb24gPSB7XG4gICAgbWFqb3I6IDQsXG4gICAgbWlub3I6IDQsXG4gICAgcGF0Y2g6IDMsXG59O1xuIiwiaW1wb3J0ICogYXMgY2hlY2tzIGZyb20gXCIuL2NoZWNrcy5qc1wiO1xuaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiLi9jb3JlLmpzXCI7XG5pbXBvcnQgeyBEb2MgfSBmcm9tIFwiLi9kb2MuanNcIjtcbmltcG9ydCB7IHBhcnNlLCBwYXJzZUFzeW5jLCBzYWZlUGFyc2UsIHNhZmVQYXJzZUFzeW5jIH0gZnJvbSBcIi4vcGFyc2UuanNcIjtcbmltcG9ydCAqIGFzIHJlZ2V4ZXMgZnJvbSBcIi4vcmVnZXhlcy5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi91dGlsLmpzXCI7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSBcIi4vdmVyc2lvbnMuanNcIjtcbmV4cG9ydCBjb25zdCAkWm9kVHlwZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVHlwZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIGluc3QgPz8gKGluc3QgPSB7fSk7XG4gICAgaW5zdC5fem9kLmRlZiA9IGRlZjsgLy8gc2V0IF9kZWYgcHJvcGVydHlcbiAgICBpbnN0Ll96b2QuYmFnID0gaW5zdC5fem9kLmJhZyB8fCB7fTsgLy8gaW5pdGlhbGl6ZSBfYmFnIG9iamVjdFxuICAgIGluc3QuX3pvZC52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICBjb25zdCBjaGVja3MgPSBbLi4uKGluc3QuX3pvZC5kZWYuY2hlY2tzID8/IFtdKV07XG4gICAgLy8gaWYgaW5zdCBpcyBpdHNlbGYgYSBjaGVja3MuJFpvZENoZWNrLCBydW4gaXQgYXMgYSBjaGVja1xuICAgIGlmIChpbnN0Ll96b2QudHJhaXRzLmhhcyhcIiRab2RDaGVja1wiKSkge1xuICAgICAgICBjaGVja3MudW5zaGlmdChpbnN0KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBjaCBvZiBjaGVja3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBmbiBvZiBjaC5fem9kLm9uYXR0YWNoKSB7XG4gICAgICAgICAgICBmbihpbnN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hlY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBkZWZlcnJlZCBpbml0aWFsaXplclxuICAgICAgICAvLyBpbnN0Ll96b2QucGFyc2UgaXMgbm90IHlldCBkZWZpbmVkXG4gICAgICAgIChfYSA9IGluc3QuX3pvZCkuZGVmZXJyZWQgPz8gKF9hLmRlZmVycmVkID0gW10pO1xuICAgICAgICBpbnN0Ll96b2QuZGVmZXJyZWQ/LnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgaW5zdC5fem9kLnJ1biA9IGluc3QuX3pvZC5wYXJzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBydW5DaGVja3MgPSAocGF5bG9hZCwgY2hlY2tzLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGxldCBpc0Fib3J0ZWQgPSB1dGlsLmFib3J0ZWQocGF5bG9hZCk7XG4gICAgICAgICAgICBsZXQgYXN5bmNSZXN1bHQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIGNoZWNrcykge1xuICAgICAgICAgICAgICAgIGlmIChjaC5fem9kLmRlZi53aGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmV4cGxpY2l0bHlBYm9ydGVkKHBheWxvYWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFJ1biA9IGNoLl96b2QuZGVmLndoZW4ocGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkUnVuKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyckxlbiA9IHBheWxvYWQuaXNzdWVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBfID0gY2guX3pvZC5jaGVjayhwYXlsb2FkKTtcbiAgICAgICAgICAgICAgICBpZiAoXyBpbnN0YW5jZW9mIFByb21pc2UgJiYgY3R4Py5hc3luYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuJFpvZEFzeW5jRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFzeW5jUmVzdWx0IHx8IF8gaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jUmVzdWx0ID0gKGFzeW5jUmVzdWx0ID8/IFByb21pc2UucmVzb2x2ZSgpKS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IF87XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0TGVuID0gcGF5bG9hZC5pc3N1ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRMZW4gPT09IGN1cnJMZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Fib3J0ZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBYm9ydGVkID0gdXRpbC5hYm9ydGVkKHBheWxvYWQsIGN1cnJMZW4pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRMZW4gPSBwYXlsb2FkLmlzc3Vlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0TGVuID09PSBjdXJyTGVuKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNBYm9ydGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBYm9ydGVkID0gdXRpbC5hYm9ydGVkKHBheWxvYWQsIGN1cnJMZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhc3luY1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luY1Jlc3VsdC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaGFuZGxlQ2FuYXJ5UmVzdWx0ID0gKGNhbmFyeSwgcGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgICAgICAvLyBhYm9ydCBpZiB0aGUgY2FuYXJ5IGlzIGFib3J0ZWRcbiAgICAgICAgICAgIGlmICh1dGlsLmFib3J0ZWQoY2FuYXJ5KSkge1xuICAgICAgICAgICAgICAgIGNhbmFyeS5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FuYXJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcnVuIGNoZWNrcyBmaXJzdCwgdGhlblxuICAgICAgICAgICAgY29uc3QgY2hlY2tSZXN1bHQgPSBydW5DaGVja3MocGF5bG9hZCwgY2hlY2tzLCBjdHgpO1xuICAgICAgICAgICAgaWYgKGNoZWNrUmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGlmIChjdHguYXN5bmMgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kQXN5bmNFcnJvcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGVja1Jlc3VsdC50aGVuKChjaGVja1Jlc3VsdCkgPT4gaW5zdC5fem9kLnBhcnNlKGNoZWNrUmVzdWx0LCBjdHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbnN0Ll96b2QucGFyc2UoY2hlY2tSZXN1bHQsIGN0eCk7XG4gICAgICAgIH07XG4gICAgICAgIGluc3QuX3pvZC5ydW4gPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgICAgICBpZiAoY3R4LnNraXBDaGVja3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdC5fem9kLnBhcnNlKHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICAgICAgLy8gcnVuIGNhbmFyeVxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWwgcGFzcyAobm8gY2hlY2tzKVxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbmFyeSA9IGluc3QuX3pvZC5wYXJzZSh7IHZhbHVlOiBwYXlsb2FkLnZhbHVlLCBpc3N1ZXM6IFtdIH0sIHsgLi4uY3R4LCBza2lwQ2hlY2tzOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIGlmIChjYW5hcnkgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5hcnkudGhlbigoY2FuYXJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQ2FuYXJ5UmVzdWx0KGNhbmFyeSwgcGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVDYW5hcnlSZXN1bHQoY2FuYXJ5LCBwYXlsb2FkLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZm9yd2FyZFxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5zdC5fem9kLnBhcnNlKHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGlmIChjdHguYXN5bmMgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kQXN5bmNFcnJvcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiBydW5DaGVja3MocmVzdWx0LCBjaGVja3MsIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJ1bkNoZWNrcyhyZXN1bHQsIGNoZWNrcywgY3R4KTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gTGF6eSBpbml0aWFsaXplIH5zdGFuZGFyZCB0byBhdm9pZCBjcmVhdGluZyBvYmplY3RzIGZvciBldmVyeSBzY2hlbWFcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdCwgXCJ+c3RhbmRhcmRcIiwgKCkgPT4gKHtcbiAgICAgICAgdmFsaWRhdGU6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByID0gc2FmZVBhcnNlKGluc3QsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gci5zdWNjZXNzID8geyB2YWx1ZTogci5kYXRhIH0gOiB7IGlzc3Vlczogci5lcnJvcj8uaXNzdWVzIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoXykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzYWZlUGFyc2VBc3luYyhpbnN0LCB2YWx1ZSkudGhlbigocikgPT4gKHIuc3VjY2VzcyA/IHsgdmFsdWU6IHIuZGF0YSB9IDogeyBpc3N1ZXM6IHIuZXJyb3I/Lmlzc3VlcyB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZlbmRvcjogXCJ6b2RcIixcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICB9KSk7XG59KTtcbmV4cG9ydCB7IGNsb25lIH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuZXhwb3J0IGNvbnN0ICRab2RTdHJpbmcgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFN0cmluZ1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXR0ZXJuID0gWy4uLihpbnN0Py5fem9kLmJhZz8ucGF0dGVybnMgPz8gW10pXS5wb3AoKSA/PyByZWdleGVzLnN0cmluZyhpbnN0Ll96b2QuYmFnKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgXykgPT4ge1xuICAgICAgICBpZiAoZGVmLmNvZXJjZSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IFN0cmluZyhwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfKSB7IH1cbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkLnZhbHVlID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RTdHJpbmdGb3JtYXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFN0cmluZ0Zvcm1hdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gY2hlY2sgaW5pdGlhbGl6YXRpb24gbXVzdCBjb21lIGZpcnN0XG4gICAgY2hlY2tzLiRab2RDaGVja1N0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgJFpvZFN0cmluZy5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kR1VJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kR1VJRFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5ndWlkKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RVVUlEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RVVUlEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBpZiAoZGVmLnZlcnNpb24pIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbk1hcCA9IHtcbiAgICAgICAgICAgIHYxOiAxLFxuICAgICAgICAgICAgdjI6IDIsXG4gICAgICAgICAgICB2MzogMyxcbiAgICAgICAgICAgIHY0OiA0LFxuICAgICAgICAgICAgdjU6IDUsXG4gICAgICAgICAgICB2NjogNixcbiAgICAgICAgICAgIHY3OiA3LFxuICAgICAgICAgICAgdjg6IDgsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHYgPSB2ZXJzaW9uTWFwW2RlZi52ZXJzaW9uXTtcbiAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVVUlEIHZlcnNpb246IFwiJHtkZWYudmVyc2lvbn1cImApO1xuICAgICAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLnV1aWQodikpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMudXVpZCgpKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RFbWFpbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kRW1haWxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuZW1haWwpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFVSTCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVVJMXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gVHJpbSB3aGl0ZXNwYWNlIGZyb20gaW5wdXRcbiAgICAgICAgICAgIGNvbnN0IHRyaW1tZWQgPSBwYXlsb2FkLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgIC8vIFdoZW4gbm9ybWFsaXplIGlzIG9mZiwgcmVxdWlyZSA6Ly8gZm9yIGh0dHAvaHR0cHMgVVJMc1xuICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBzdHJpbmdzIGxpa2UgXCJodHRwOmV4YW1wbGUuY29tXCIgb3IgXCJodHRwczovcGF0aFwiIGZyb20gYmVpbmcgc2lsZW50bHkgYWNjZXB0ZWRcbiAgICAgICAgICAgIGlmICghZGVmLm5vcm1hbGl6ZSAmJiBkZWYucHJvdG9jb2w/LnNvdXJjZSA9PT0gcmVnZXhlcy5odHRwUHJvdG9jb2wuc291cmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KHRyaW1tZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBcInVybFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJJbnZhbGlkIFVSTCBmb3JtYXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodHJpbW1lZCk7XG4gICAgICAgICAgICBpZiAoZGVmLmhvc3RuYW1lKSB7XG4gICAgICAgICAgICAgICAgZGVmLmhvc3RuYW1lLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKCFkZWYuaG9zdG5hbWUudGVzdCh1cmwuaG9zdG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBcInVybFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJJbnZhbGlkIGhvc3RuYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiBkZWYuaG9zdG5hbWUuc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYucHJvdG9jb2wpIHtcbiAgICAgICAgICAgICAgICBkZWYucHJvdG9jb2wubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoIWRlZi5wcm90b2NvbC50ZXN0KHVybC5wcm90b2NvbC5lbmRzV2l0aChcIjpcIikgPyB1cmwucHJvdG9jb2wuc2xpY2UoMCwgLTEpIDogdXJsLnByb3RvY29sKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogXCJ1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSW52YWxpZCBwcm90b2NvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybjogZGVmLnByb3RvY29sLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXQgdGhlIG91dHB1dCB2YWx1ZSBiYXNlZCBvbiBub3JtYWxpemUgZmxhZ1xuICAgICAgICAgICAgaWYgKGRlZi5ub3JtYWxpemUpIHtcbiAgICAgICAgICAgICAgICAvLyBVc2Ugbm9ybWFsaXplZCBVUkxcbiAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gdXJsLmhyZWY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgaW5wdXQgKHRyaW1tZWQpXG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHRyaW1tZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwidXJsXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RFbW9qaSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kRW1vamlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuZW1vamkoKSk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTmFub0lEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROYW5vSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMubmFub2lkKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBDVUlEIHYxIGlzIGRlcHJlY2F0ZWQgYnkgaXRzIGF1dGhvcnMgZHVlIHRvIGluZm9ybWF0aW9uIGxlYWthZ2VcbiAqICh0aW1lc3RhbXBzIGVtYmVkZGVkIGluIHRoZSBpZCkuIFVzZSB7QGxpbmsgJFpvZENVSUQyfSBpbnN0ZWFkLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJhbGxlbGRyaXZlL2N1aWQuXG4gKi9cbmV4cG9ydCBjb25zdCAkWm9kQ1VJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ1VJRFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5jdWlkKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDVUlEMiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ1VJRDJcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuY3VpZDIpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFVMSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFVMSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMudWxpZCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kWElEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RYSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMueGlkKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RLU1VJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kS1NVSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMua3N1aWQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZElTT0RhdGVUaW1lID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RJU09EYXRlVGltZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5kYXRldGltZShkZWYpKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RJU09EYXRlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RJU09EYXRlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmRhdGUpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZElTT1RpbWUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZElTT1RpbWVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMudGltZShkZWYpKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RJU09EdXJhdGlvbiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kSVNPRHVyYXRpb25cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuZHVyYXRpb24pO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZElQdjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZElQdjRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuaXB2NCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmJhZy5mb3JtYXQgPSBgaXB2NGA7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kSVB2NiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kSVB2NlwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5pcHY2KTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuYmFnLmZvcm1hdCA9IGBpcHY2YDtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgbmV3IFVSTChgaHR0cDovL1ske3BheWxvYWQudmFsdWV9XWApO1xuICAgICAgICAgICAgLy8gcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiaXB2NlwiLFxuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTUFDID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RNQUNcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMubWFjKGRlZi5kZWxpbWl0ZXIpKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuYmFnLmZvcm1hdCA9IGBtYWNgO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENJRFJ2NCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ0lEUnY0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmNpZHJ2NCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ0lEUnY2ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDSURSdjZcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuY2lkcnY2KTsgLy8gbm90IHVzZWQgZm9yIHZhbGlkYXRpb25cbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHBheWxvYWQudmFsdWUuc3BsaXQoXCIvXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgIGNvbnN0IFthZGRyZXNzLCBwcmVmaXhdID0gcGFydHM7XG4gICAgICAgICAgICBpZiAoIXByZWZpeClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeE51bSA9IE51bWJlcihwcmVmaXgpO1xuICAgICAgICAgICAgaWYgKGAke3ByZWZpeE51bX1gICE9PSBwcmVmaXgpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICBpZiAocHJlZml4TnVtIDwgMCB8fCBwcmVmaXhOdW0gPiAxMjgpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBuZXcgVVJMKGBodHRwOi8vWyR7YWRkcmVzc31dYCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJjaWRydjZcIixcbiAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSk7XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gICBab2RCYXNlNjQgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQmFzZTY0KGRhdGEpIHtcbiAgICBpZiAoZGF0YSA9PT0gXCJcIilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgLy8gYXRvYiBpZ25vcmVzIHdoaXRlc3BhY2UsIHNvIHJlamVjdCBpdCB1cCBmcm9udC5cbiAgICBpZiAoL1xccy8udGVzdChkYXRhKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChkYXRhLmxlbmd0aCAlIDQgIT09IDApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGF0b2IoZGF0YSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgJFpvZEJhc2U2NCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQmFzZTY0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmJhc2U2NCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmJhZy5jb250ZW50RW5jb2RpbmcgPSBcImJhc2U2NFwiO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChpc1ZhbGlkQmFzZTY0KHBheWxvYWQudmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgIGZvcm1hdDogXCJiYXNlNjRcIixcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gICBab2RCYXNlNjQgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQmFzZTY0VVJMKGRhdGEpIHtcbiAgICBpZiAoIXJlZ2V4ZXMuYmFzZTY0dXJsLnRlc3QoZGF0YSkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBiYXNlNjQgPSBkYXRhLnJlcGxhY2UoL1stX10vZywgKGMpID0+IChjID09PSBcIi1cIiA/IFwiK1wiIDogXCIvXCIpKTtcbiAgICBjb25zdCBwYWRkZWQgPSBiYXNlNjQucGFkRW5kKE1hdGguY2VpbChiYXNlNjQubGVuZ3RoIC8gNCkgKiA0LCBcIj1cIik7XG4gICAgcmV0dXJuIGlzVmFsaWRCYXNlNjQocGFkZGVkKTtcbn1cbmV4cG9ydCBjb25zdCAkWm9kQmFzZTY0VVJMID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RCYXNlNjRVUkxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuYmFzZTY0dXJsKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuYmFnLmNvbnRlbnRFbmNvZGluZyA9IFwiYmFzZTY0dXJsXCI7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKGlzVmFsaWRCYXNlNjRVUkwocGF5bG9hZC52YWx1ZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBcImJhc2U2NHVybFwiLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kRTE2NCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kRTE2NFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5lMTY0KTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICAgWm9kSldUICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEpXVCh0b2tlbiwgYWxnb3JpdGhtID0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRva2Vuc1BhcnRzID0gdG9rZW4uc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAodG9rZW5zUGFydHMubGVuZ3RoICE9PSAzKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBbaGVhZGVyXSA9IHRva2Vuc1BhcnRzO1xuICAgICAgICBpZiAoIWhlYWRlcilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCBwYXJzZWRIZWFkZXIgPSBKU09OLnBhcnNlKGF0b2IoaGVhZGVyKSk7XG4gICAgICAgIGlmIChcInR5cFwiIGluIHBhcnNlZEhlYWRlciAmJiBwYXJzZWRIZWFkZXI/LnR5cCAhPT0gXCJKV1RcIilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFwYXJzZWRIZWFkZXIuYWxnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoYWxnb3JpdGhtICYmICghKFwiYWxnXCIgaW4gcGFyc2VkSGVhZGVyKSB8fCBwYXJzZWRIZWFkZXIuYWxnICE9PSBhbGdvcml0aG0pKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IGNvbnN0ICRab2RKV1QgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEpXVFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKGlzVmFsaWRKV1QocGF5bG9hZC52YWx1ZSwgZGVmLmFsZykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBcImp3dFwiLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDdXN0b21TdHJpbmdGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChkZWYuZm4ocGF5bG9hZC52YWx1ZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBkZWYuZm9ybWF0LFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTnVtYmVyID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROdW1iZXJcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGF0dGVybiA9IGluc3QuX3pvZC5iYWcucGF0dGVybiA/PyByZWdleGVzLm51bWJlcjtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBpZiAoZGVmLmNvZXJjZSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IE51bWJlcihwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfKSB7IH1cbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiICYmICFOdW1iZXIuaXNOYU4oaW5wdXQpICYmIE51bWJlci5pc0Zpbml0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlY2VpdmVkID0gdHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICA/IE51bWJlci5pc05hTihpbnB1dClcbiAgICAgICAgICAgICAgICA/IFwiTmFOXCJcbiAgICAgICAgICAgICAgICA6ICFOdW1iZXIuaXNGaW5pdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gXCJJbmZpbml0eVwiXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJudW1iZXJcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAuLi4ocmVjZWl2ZWQgPyB7IHJlY2VpdmVkIH0gOiB7fSksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE51bWJlckZvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTnVtYmVyRm9ybWF0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjaGVja3MuJFpvZENoZWNrTnVtYmVyRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICAkWm9kTnVtYmVyLmluaXQoaW5zdCwgZGVmKTsgLy8gbm8gZm9ybWF0IGNoZWNrc1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEJvb2xlYW4gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEJvb2xlYW5cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGF0dGVybiA9IHJlZ2V4ZXMuYm9vbGVhbjtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBpZiAoZGVmLmNvZXJjZSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IEJvb2xlYW4ocGF5bG9hZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoXykgeyB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RCaWdJbnQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEJpZ0ludFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXR0ZXJuID0gcmVnZXhlcy5iaWdpbnQ7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKGRlZi5jb2VyY2UpXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBCaWdJbnQocGF5bG9hZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoXykgeyB9XG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZC52YWx1ZSA9PT0gXCJiaWdpbnRcIilcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcImJpZ2ludFwiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQmlnSW50Rm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RCaWdJbnRGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNoZWNrcy4kWm9kQ2hlY2tCaWdJbnRGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgICRab2RCaWdJbnQuaW5pdChpbnN0LCBkZWYpOyAvLyBubyBmb3JtYXQgY2hlY2tzXG59KTtcbmV4cG9ydCBjb25zdCAkWm9kU3ltYm9sID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RTeW1ib2xcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3ltYm9sXCIpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJzeW1ib2xcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFVuZGVmaW5lZCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVW5kZWZpbmVkXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSByZWdleGVzLnVuZGVmaW5lZDtcbiAgICBpbnN0Ll96b2QudmFsdWVzID0gbmV3IFNldChbdW5kZWZpbmVkXSk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwidW5kZWZpbmVkXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2ROdWxsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROdWxsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSByZWdleGVzLm51bGw7XG4gICAgaW5zdC5fem9kLnZhbHVlcyA9IG5ldyBTZXQoW251bGxdKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcIm51bGxcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEFueSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQW55XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQpID0+IHBheWxvYWQ7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kVW5rbm93biA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVW5rbm93blwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkKSA9PiBwYXlsb2FkO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE5ldmVyID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROZXZlclwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwibmV2ZXJcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFZvaWQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFZvaWRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJ2b2lkXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2REYXRlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2REYXRlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKGRlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ldyBEYXRlKHBheWxvYWQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9lcnIpIHsgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgaXNEYXRlID0gaW5wdXQgaW5zdGFuY2VvZiBEYXRlO1xuICAgICAgICBjb25zdCBpc1ZhbGlkRGF0ZSA9IGlzRGF0ZSAmJiAhTnVtYmVyLmlzTmFOKGlucHV0LmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChpc1ZhbGlkRGF0ZSlcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcImRhdGVcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIC4uLihpc0RhdGUgPyB7IHJlY2VpdmVkOiBcIkludmFsaWQgRGF0ZVwiIH0gOiB7fSksXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlQXJyYXlSZXN1bHQocmVzdWx0LCBmaW5hbCwgaW5kZXgpIHtcbiAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoaW5kZXgsIHJlc3VsdC5pc3N1ZXMpKTtcbiAgICB9XG4gICAgZmluYWwudmFsdWVbaW5kZXhdID0gcmVzdWx0LnZhbHVlO1xufVxuZXhwb3J0IGNvbnN0ICRab2RBcnJheSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQXJyYXlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBBcnJheShpbnB1dC5sZW5ndGgpO1xuICAgICAgICBjb25zdCBwcm9tcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gaW5wdXRbaV07XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYuZWxlbWVudC5fem9kLnJ1bih7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgIH0sIGN0eCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHByb21zLnB1c2gocmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4gaGFuZGxlQXJyYXlSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBpKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlQXJyYXlSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbXMpLnRoZW4oKCkgPT4gcGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7IC8vaGFuZGxlQXJyYXlSZXN1bHRzQXN5bmMocGFyc2VSZXN1bHRzLCBmaW5hbCk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlUHJvcGVydHlSZXN1bHQocmVzdWx0LCBmaW5hbCwga2V5LCBpbnB1dCwgaXNPcHRpb25hbEluLCBpc09wdGlvbmFsT3V0KSB7XG4gICAgY29uc3QgaXNQcmVzZW50ID0ga2V5IGluIGlucHV0O1xuICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAvLyBGb3Igb3B0aW9uYWwtaW4vb3V0IHNjaGVtYXMsIGlnbm9yZSBlcnJvcnMgb24gYWJzZW50IGtleXMuXG4gICAgICAgIGlmIChpc09wdGlvbmFsSW4gJiYgaXNPcHRpb25hbE91dCAmJiAhaXNQcmVzZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoa2V5LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgfVxuICAgIGlmICghaXNQcmVzZW50ICYmICFpc09wdGlvbmFsSW4pIHtcbiAgICAgICAgaWYgKCFyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwibm9ub3B0aW9uYWxcIixcbiAgICAgICAgICAgICAgICBpbnB1dDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHBhdGg6IFtrZXldLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGlzUHJlc2VudCkge1xuICAgICAgICAgICAgZmluYWwudmFsdWVba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmluYWwudmFsdWVba2V5XSA9IHJlc3VsdC52YWx1ZTtcbiAgICB9XG59XG5mdW5jdGlvbiBub3JtYWxpemVEZWYoZGVmKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZi5zaGFwZSk7XG4gICAgZm9yIChjb25zdCBrIG9mIGtleXMpIHtcbiAgICAgICAgaWYgKCFkZWYuc2hhcGU/LltrXT8uX3pvZD8udHJhaXRzPy5oYXMoXCIkWm9kVHlwZVwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVsZW1lbnQgYXQga2V5IFwiJHtrfVwiOiBleHBlY3RlZCBhIFpvZCBzY2hlbWFgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBva2V5cyA9IHV0aWwub3B0aW9uYWxLZXlzKGRlZi5zaGFwZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGVmLFxuICAgICAgICBrZXlzLFxuICAgICAgICBrZXlTZXQ6IG5ldyBTZXQoa2V5cyksXG4gICAgICAgIG51bUtleXM6IGtleXMubGVuZ3RoLFxuICAgICAgICBvcHRpb25hbEtleXM6IG5ldyBTZXQob2tleXMpLFxuICAgIH07XG59XG5mdW5jdGlvbiBoYW5kbGVDYXRjaGFsbChwcm9tcywgaW5wdXQsIHBheWxvYWQsIGN0eCwgZGVmLCBpbnN0KSB7XG4gICAgY29uc3QgdW5yZWNvZ25pemVkID0gW107XG4gICAgY29uc3Qga2V5U2V0ID0gZGVmLmtleVNldDtcbiAgICBjb25zdCBfY2F0Y2hhbGwgPSBkZWYuY2F0Y2hhbGwuX3pvZDtcbiAgICBjb25zdCB0ID0gX2NhdGNoYWxsLmRlZi50eXBlO1xuICAgIGNvbnN0IGlzT3B0aW9uYWxJbiA9IF9jYXRjaGFsbC5vcHRpbiA9PT0gXCJvcHRpb25hbFwiO1xuICAgIGNvbnN0IGlzT3B0aW9uYWxPdXQgPSBfY2F0Y2hhbGwub3B0b3V0ID09PSBcIm9wdGlvbmFsXCI7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgICAgLy8gc2tpcCBfX3Byb3RvX18gc28gaXQgY2FuJ3QgcmVwbGFjZSB0aGUgcmVzdWx0IHByb3RvdHlwZSB2aWEgdGhlXG4gICAgICAgIC8vIGFzc2lnbm1lbnQgc2V0dGVyIG9uIHRoZSBwbGFpbiB7fSB3ZSBidWlsZCBpbnRvXG4gICAgICAgIGlmIChrZXkgPT09IFwiX19wcm90b19fXCIpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKGtleVNldC5oYXMoa2V5KSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodCA9PT0gXCJuZXZlclwiKSB7XG4gICAgICAgICAgICB1bnJlY29nbml6ZWQucHVzaChrZXkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgciA9IF9jYXRjaGFsbC5ydW4oeyB2YWx1ZTogaW5wdXRba2V5XSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICBpZiAociBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHByb21zLnB1c2goci50aGVuKChyKSA9PiBoYW5kbGVQcm9wZXJ0eVJlc3VsdChyLCBwYXlsb2FkLCBrZXksIGlucHV0LCBpc09wdGlvbmFsSW4sIGlzT3B0aW9uYWxPdXQpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVQcm9wZXJ0eVJlc3VsdChyLCBwYXlsb2FkLCBrZXksIGlucHV0LCBpc09wdGlvbmFsSW4sIGlzT3B0aW9uYWxPdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh1bnJlY29nbml6ZWQubGVuZ3RoKSB7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJ1bnJlY29nbml6ZWRfa2V5c1wiLFxuICAgICAgICAgICAga2V5czogdW5yZWNvZ25pemVkLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCFwcm9tcy5sZW5ndGgpXG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9tcykudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0ICRab2RPYmplY3QgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE9iamVjdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gcmVxdWlyZXMgY2FzdCBiZWNhdXNlIHRlY2huaWNhbGx5ICRab2RPYmplY3QgZG9lc24ndCBleHRlbmRcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgLy8gY29uc3Qgc2ggPSBkZWYuc2hhcGU7XG4gICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZGVmLCBcInNoYXBlXCIpO1xuICAgIGlmICghZGVzYz8uZ2V0KSB7XG4gICAgICAgIGNvbnN0IHNoID0gZGVmLnNoYXBlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVmLCBcInNoYXBlXCIsIHtcbiAgICAgICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NoID0geyAuLi5zaCB9O1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWYsIFwic2hhcGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbmV3U2gsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1NoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IF9ub3JtYWxpemVkID0gdXRpbC5jYWNoZWQoKCkgPT4gbm9ybWFsaXplRGVmKGRlZikpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicHJvcFZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNoYXBlID0gZGVmLnNoYXBlO1xuICAgICAgICBjb25zdCBwcm9wVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNoYXBlKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNoYXBlW2tleV0uX3pvZDtcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBwcm9wVmFsdWVzW2tleV0gPz8gKHByb3BWYWx1ZXNba2V5XSA9IG5ldyBTZXQoKSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIGZpZWxkLnZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgcHJvcFZhbHVlc1trZXldLmFkZCh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcFZhbHVlcztcbiAgICB9KTtcbiAgICBjb25zdCBpc09iamVjdCA9IHV0aWwuaXNPYmplY3Q7XG4gICAgY29uc3QgY2F0Y2hhbGwgPSBkZWYuY2F0Y2hhbGw7XG4gICAgbGV0IHZhbHVlO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgdmFsdWUgPz8gKHZhbHVlID0gX25vcm1hbGl6ZWQudmFsdWUpO1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSB7fTtcbiAgICAgICAgY29uc3QgcHJvbXMgPSBbXTtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSB2YWx1ZS5zaGFwZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdmFsdWUua2V5cykge1xuICAgICAgICAgICAgY29uc3QgZWwgPSBzaGFwZVtrZXldO1xuICAgICAgICAgICAgY29uc3QgaXNPcHRpb25hbEluID0gZWwuX3pvZC5vcHRpbiA9PT0gXCJvcHRpb25hbFwiO1xuICAgICAgICAgICAgY29uc3QgaXNPcHRpb25hbE91dCA9IGVsLl96b2Qub3B0b3V0ID09PSBcIm9wdGlvbmFsXCI7XG4gICAgICAgICAgICBjb25zdCByID0gZWwuX3pvZC5ydW4oeyB2YWx1ZTogaW5wdXRba2V5XSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcHJvbXMucHVzaChyLnRoZW4oKHIpID0+IGhhbmRsZVByb3BlcnR5UmVzdWx0KHIsIHBheWxvYWQsIGtleSwgaW5wdXQsIGlzT3B0aW9uYWxJbiwgaXNPcHRpb25hbE91dCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZVByb3BlcnR5UmVzdWx0KHIsIHBheWxvYWQsIGtleSwgaW5wdXQsIGlzT3B0aW9uYWxJbiwgaXNPcHRpb25hbE91dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjYXRjaGFsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21zLmxlbmd0aCA/IFByb21pc2UuYWxsKHByb21zKS50aGVuKCgpID0+IHBheWxvYWQpIDogcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlQ2F0Y2hhbGwocHJvbXMsIGlucHV0LCBwYXlsb2FkLCBjdHgsIF9ub3JtYWxpemVkLnZhbHVlLCBpbnN0KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE9iamVjdEpJVCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kT2JqZWN0SklUXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyByZXF1aXJlcyBjYXN0IGJlY2F1c2UgdGVjaG5pY2FsbHkgJFpvZE9iamVjdCBkb2Vzbid0IGV4dGVuZFxuICAgICRab2RPYmplY3QuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvbnN0IHN1cGVyUGFyc2UgPSBpbnN0Ll96b2QucGFyc2U7XG4gICAgY29uc3QgX25vcm1hbGl6ZWQgPSB1dGlsLmNhY2hlZCgoKSA9PiBub3JtYWxpemVEZWYoZGVmKSk7XG4gICAgY29uc3QgZ2VuZXJhdGVGYXN0cGFzcyA9IChzaGFwZSkgPT4ge1xuICAgICAgICBjb25zdCBkb2MgPSBuZXcgRG9jKFtcInNoYXBlXCIsIFwicGF5bG9hZFwiLCBcImN0eFwiXSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBfbm9ybWFsaXplZC52YWx1ZTtcbiAgICAgICAgY29uc3QgcGFyc2VTdHIgPSAoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrID0gdXRpbC5lc2Moa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBgc2hhcGVbJHtrfV0uX3pvZC5ydW4oeyB2YWx1ZTogaW5wdXRbJHtrfV0sIGlzc3VlczogW10gfSwgY3R4KWA7XG4gICAgICAgIH07XG4gICAgICAgIGRvYy53cml0ZShgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO2ApO1xuICAgICAgICBjb25zdCBpZHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIG5vcm1hbGl6ZWQua2V5cykge1xuICAgICAgICAgICAgaWRzW2tleV0gPSBga2V5XyR7Y291bnRlcisrfWA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQTogcHJlc2VydmUga2V5IG9yZGVyIHtcbiAgICAgICAgZG9jLndyaXRlKGBjb25zdCBuZXdSZXN1bHQgPSB7fTtgKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygbm9ybWFsaXplZC5rZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGlkc1trZXldO1xuICAgICAgICAgICAgY29uc3QgayA9IHV0aWwuZXNjKGtleSk7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBzaGFwZVtrZXldO1xuICAgICAgICAgICAgY29uc3QgaXNPcHRpb25hbEluID0gc2NoZW1hPy5fem9kPy5vcHRpbiA9PT0gXCJvcHRpb25hbFwiO1xuICAgICAgICAgICAgY29uc3QgaXNPcHRpb25hbE91dCA9IHNjaGVtYT8uX3pvZD8ub3B0b3V0ID09PSBcIm9wdGlvbmFsXCI7XG4gICAgICAgICAgICBkb2Mud3JpdGUoYGNvbnN0ICR7aWR9ID0gJHtwYXJzZVN0cihrZXkpfTtgKTtcbiAgICAgICAgICAgIGlmIChpc09wdGlvbmFsSW4gJiYgaXNPcHRpb25hbE91dCkge1xuICAgICAgICAgICAgICAgIC8vIEZvciBvcHRpb25hbC1pbi9vdXQgc2NoZW1hcywgaWdub3JlIGVycm9ycyBvbiBhYnNlbnQga2V5c1xuICAgICAgICAgICAgICAgIGRvYy53cml0ZShgXG4gICAgICAgIGlmICgke2lkfS5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKCR7a30gaW4gaW5wdXQpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzID0gcGF5bG9hZC5pc3N1ZXMuY29uY2F0KCR7aWR9Lmlzc3Vlcy5tYXAoaXNzID0+ICh7XG4gICAgICAgICAgICAgIC4uLmlzcyxcbiAgICAgICAgICAgICAgcGF0aDogaXNzLnBhdGggPyBbJHtrfSwgLi4uaXNzLnBhdGhdIDogWyR7a31dXG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKCR7aWR9LnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoJHtrfSBpbiBpbnB1dCkge1xuICAgICAgICAgICAgbmV3UmVzdWx0WyR7a31dID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdSZXN1bHRbJHtrfV0gPSAke2lkfS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgIGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWlzT3B0aW9uYWxJbikge1xuICAgICAgICAgICAgICAgIGRvYy53cml0ZShgXG4gICAgICAgIGNvbnN0ICR7aWR9X3ByZXNlbnQgPSAke2t9IGluIGlucHV0O1xuICAgICAgICBpZiAoJHtpZH0uaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgIHBheWxvYWQuaXNzdWVzID0gcGF5bG9hZC5pc3N1ZXMuY29uY2F0KCR7aWR9Lmlzc3Vlcy5tYXAoaXNzID0+ICh7XG4gICAgICAgICAgICAuLi5pc3MsXG4gICAgICAgICAgICBwYXRoOiBpc3MucGF0aCA/IFske2t9LCAuLi5pc3MucGF0aF0gOiBbJHtrfV1cbiAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghJHtpZH1fcHJlc2VudCAmJiAhJHtpZH0uaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcIm5vbm9wdGlvbmFsXCIsXG4gICAgICAgICAgICBpbnB1dDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcGF0aDogWyR7a31dXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHtpZH1fcHJlc2VudCkge1xuICAgICAgICAgIGlmICgke2lkfS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBuZXdSZXN1bHRbJHtrfV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1Jlc3VsdFske2t9XSA9ICR7aWR9LnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvYy53cml0ZShgXG4gICAgICAgIGlmICgke2lkfS5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcGF5bG9hZC5pc3N1ZXMgPSBwYXlsb2FkLmlzc3Vlcy5jb25jYXQoJHtpZH0uaXNzdWVzLm1hcChpc3MgPT4gKHtcbiAgICAgICAgICAgIC4uLmlzcyxcbiAgICAgICAgICAgIHBhdGg6IGlzcy5wYXRoID8gWyR7a30sIC4uLmlzcy5wYXRoXSA6IFske2t9XVxuICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICgke2lkfS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCR7a30gaW4gaW5wdXQpIHtcbiAgICAgICAgICAgIG5ld1Jlc3VsdFske2t9XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3UmVzdWx0WyR7a31dID0gJHtpZH0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkb2Mud3JpdGUoYHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7YCk7XG4gICAgICAgIGRvYy53cml0ZShgcmV0dXJuIHBheWxvYWQ7YCk7XG4gICAgICAgIGNvbnN0IGZuID0gZG9jLmNvbXBpbGUoKTtcbiAgICAgICAgcmV0dXJuIChwYXlsb2FkLCBjdHgpID0+IGZuKHNoYXBlLCBwYXlsb2FkLCBjdHgpO1xuICAgIH07XG4gICAgbGV0IGZhc3RwYXNzO1xuICAgIGNvbnN0IGlzT2JqZWN0ID0gdXRpbC5pc09iamVjdDtcbiAgICBjb25zdCBqaXQgPSAhY29yZS5nbG9iYWxDb25maWcuaml0bGVzcztcbiAgICBjb25zdCBhbGxvd3NFdmFsID0gdXRpbC5hbGxvd3NFdmFsO1xuICAgIGNvbnN0IGZhc3RFbmFibGVkID0gaml0ICYmIGFsbG93c0V2YWwudmFsdWU7IC8vICYmICFkZWYuY2F0Y2hhbGw7XG4gICAgY29uc3QgY2F0Y2hhbGwgPSBkZWYuY2F0Y2hhbGw7XG4gICAgbGV0IHZhbHVlO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgdmFsdWUgPz8gKHZhbHVlID0gX25vcm1hbGl6ZWQudmFsdWUpO1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqaXQgJiYgZmFzdEVuYWJsZWQgJiYgY3R4Py5hc3luYyA9PT0gZmFsc2UgJiYgY3R4LmppdGxlc3MgIT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vIGFsd2F5cyBzeW5jaHJvbm91c1xuICAgICAgICAgICAgaWYgKCFmYXN0cGFzcylcbiAgICAgICAgICAgICAgICBmYXN0cGFzcyA9IGdlbmVyYXRlRmFzdHBhc3MoZGVmLnNoYXBlKTtcbiAgICAgICAgICAgIHBheWxvYWQgPSBmYXN0cGFzcyhwYXlsb2FkLCBjdHgpO1xuICAgICAgICAgICAgaWYgKCFjYXRjaGFsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVDYXRjaGFsbChbXSwgaW5wdXQsIHBheWxvYWQsIGN0eCwgdmFsdWUsIGluc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlclBhcnNlKHBheWxvYWQsIGN0eCk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlVW5pb25SZXN1bHRzKHJlc3VsdHMsIGZpbmFsLCBpbnN0LCBjdHgpIHtcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZmluYWwudmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gZmluYWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgbm9uYWJvcnRlZCA9IHJlc3VsdHMuZmlsdGVyKChyKSA9PiAhdXRpbC5hYm9ydGVkKHIpKTtcbiAgICBpZiAobm9uYWJvcnRlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZmluYWwudmFsdWUgPSBub25hYm9ydGVkWzBdLnZhbHVlO1xuICAgICAgICByZXR1cm4gbm9uYWJvcnRlZFswXTtcbiAgICB9XG4gICAgZmluYWwuaXNzdWVzLnB1c2goe1xuICAgICAgICBjb2RlOiBcImludmFsaWRfdW5pb25cIixcbiAgICAgICAgaW5wdXQ6IGZpbmFsLnZhbHVlLFxuICAgICAgICBpbnN0LFxuICAgICAgICBlcnJvcnM6IHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpKSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmluYWw7XG59XG5leHBvcnQgY29uc3QgJFpvZFVuaW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RVbmlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0aW5cIiwgKCkgPT4gZGVmLm9wdGlvbnMuc29tZSgobykgPT4gby5fem9kLm9wdGluID09PSBcIm9wdGlvbmFsXCIpID8gXCJvcHRpb25hbFwiIDogdW5kZWZpbmVkKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdG91dFwiLCAoKSA9PiBkZWYub3B0aW9ucy5zb21lKChvKSA9PiBvLl96b2Qub3B0b3V0ID09PSBcIm9wdGlvbmFsXCIpID8gXCJvcHRpb25hbFwiIDogdW5kZWZpbmVkKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICAgIGlmIChkZWYub3B0aW9ucy5ldmVyeSgobykgPT4gby5fem9kLnZhbHVlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2V0KGRlZi5vcHRpb25zLmZsYXRNYXAoKG9wdGlvbikgPT4gQXJyYXkuZnJvbShvcHRpb24uX3pvZC52YWx1ZXMpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInBhdHRlcm5cIiwgKCkgPT4ge1xuICAgICAgICBpZiAoZGVmLm9wdGlvbnMuZXZlcnkoKG8pID0+IG8uX3pvZC5wYXR0ZXJuKSkge1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybnMgPSBkZWYub3B0aW9ucy5tYXAoKG8pID0+IG8uX3pvZC5wYXR0ZXJuKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKCR7cGF0dGVybnMubWFwKChwKSA9PiB1dGlsLmNsZWFuUmVnZXgocC5zb3VyY2UpKS5qb2luKFwifFwiKX0pJGApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgY29uc3QgZmlyc3QgPSBkZWYub3B0aW9ucy5sZW5ndGggPT09IDEgPyBkZWYub3B0aW9uc1swXS5fem9kLnJ1biA6IG51bGw7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBpZiAoZmlyc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBmaXJzdChwYXlsb2FkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhc3luYyA9IGZhbHNlO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIGRlZi5vcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcHRpb24uX3pvZC5ydW4oe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICB9LCBjdHgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICAgICAgICBhc3luYyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhc3luYylcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVVbmlvblJlc3VsdHMocmVzdWx0cywgcGF5bG9hZCwgaW5zdCwgY3R4KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlc3VsdHMpLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVVbmlvblJlc3VsdHMocmVzdWx0cywgcGF5bG9hZCwgaW5zdCwgY3R4KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlRXhjbHVzaXZlVW5pb25SZXN1bHRzKHJlc3VsdHMsIGZpbmFsLCBpbnN0LCBjdHgpIHtcbiAgICBjb25zdCBzdWNjZXNzZXMgPSByZXN1bHRzLmZpbHRlcigocikgPT4gci5pc3N1ZXMubGVuZ3RoID09PSAwKTtcbiAgICBpZiAoc3VjY2Vzc2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmaW5hbC52YWx1ZSA9IHN1Y2Nlc3Nlc1swXS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGZpbmFsO1xuICAgIH1cbiAgICBpZiAoc3VjY2Vzc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBObyBtYXRjaGVzIC0gc2FtZSBhcyByZWd1bGFyIHVuaW9uXG4gICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF91bmlvblwiLFxuICAgICAgICAgICAgaW5wdXQ6IGZpbmFsLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGVycm9yczogcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcykgPT4gdXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIE11bHRpcGxlIG1hdGNoZXMgLSBleGNsdXNpdmUgdW5pb24gZmFpbHVyZVxuICAgICAgICBmaW5hbC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdW5pb25cIixcbiAgICAgICAgICAgIGlucHV0OiBmaW5hbC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBlcnJvcnM6IFtdLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmaW5hbDtcbn1cbmV4cG9ydCBjb25zdCAkWm9kWG9yID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RYb3JcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RVbmlvbi5pbml0KGluc3QsIGRlZik7XG4gICAgZGVmLmluY2x1c2l2ZSA9IGZhbHNlO1xuICAgIGNvbnN0IGZpcnN0ID0gZGVmLm9wdGlvbnMubGVuZ3RoID09PSAxID8gZGVmLm9wdGlvbnNbMF0uX3pvZC5ydW4gOiBudWxsO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmlyc3QocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXN5bmMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBkZWYub3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9uLl96b2QucnVuKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgfSwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgYXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhc3luYylcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVFeGNsdXNpdmVVbmlvblJlc3VsdHMocmVzdWx0cywgcGF5bG9hZCwgaW5zdCwgY3R4KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlc3VsdHMpLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVFeGNsdXNpdmVVbmlvblJlc3VsdHMocmVzdWx0cywgcGF5bG9hZCwgaW5zdCwgY3R4KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2REaXNjcmltaW5hdGVkVW5pb24gPSBcbi8qQF9fUFVSRV9fKi9cbmNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZERpc2NyaW1pbmF0ZWRVbmlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLmluY2x1c2l2ZSA9IGZhbHNlO1xuICAgICRab2RVbmlvbi5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgX3N1cGVyID0gaW5zdC5fem9kLnBhcnNlO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicHJvcFZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BWYWx1ZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgZGVmLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHB2ID0gb3B0aW9uLl96b2QucHJvcFZhbHVlcztcbiAgICAgICAgICAgIGlmICghcHYgfHwgT2JqZWN0LmtleXMocHYpLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggXCIke2RlZi5vcHRpb25zLmluZGV4T2Yob3B0aW9uKX1cImApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocHYpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wVmFsdWVzW2tdKVxuICAgICAgICAgICAgICAgICAgICBwcm9wVmFsdWVzW2tdID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsIG9mIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcFZhbHVlc1trXS5hZGQodmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BWYWx1ZXM7XG4gICAgfSk7XG4gICAgY29uc3QgZGlzYyA9IHV0aWwuY2FjaGVkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IGRlZi5vcHRpb25zO1xuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAoY29uc3QgbyBvZiBvcHRzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBvLl96b2QucHJvcFZhbHVlcz8uW2RlZi5kaXNjcmltaW5hdG9yXTtcbiAgICAgICAgICAgIGlmICghdmFsdWVzIHx8IHZhbHVlcy5zaXplID09PSAwKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCBcIiR7ZGVmLm9wdGlvbnMuaW5kZXhPZihvKX1cImApO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIGlmIChtYXAuaGFzKHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIGRpc2NyaW1pbmF0b3IgdmFsdWUgXCIke1N0cmluZyh2KX1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYXAuc2V0KHYsIG8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghdXRpbC5pc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0ID0gZGlzYy52YWx1ZS5nZXQoaW5wdXQ/LltkZWYuZGlzY3JpbWluYXRvcl0pO1xuICAgICAgICBpZiAob3B0KSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0Ll96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHVuaW9uIG1hdGNoaW5nIHdoZW4gdGhlIGZhc3QgZGlzY3JpbWluYXRvciBwYXRoIGZhaWxzOlxuICAgICAgICAvLyAtIGV4cGxpY2l0bHkgZW5hYmxlZCB2aWEgdW5pb25GYWxsYmFjaywgb3JcbiAgICAgICAgLy8gLSBkdXJpbmcgYmFja3dhcmQgZGlyZWN0aW9uIChlbmNvZGUpLCBzaW5jZSBjb2RlYy1iYXNlZCBkaXNjcmltaW5hdG9yc1xuICAgICAgICAvLyAgIGhhdmUgZGlmZmVyZW50IHZhbHVlcyBpbiBmb3J3YXJkIHZzIGJhY2t3YXJkIGRpcmVjdGlvbnNcbiAgICAgICAgaWYgKGRlZi51bmlvbkZhbGxiYWNrIHx8IGN0eC5kaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIikge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlcihwYXlsb2FkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vIG1hdGNoaW5nIGRpc2NyaW1pbmF0b3JcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdW5pb25cIixcbiAgICAgICAgICAgIGVycm9yczogW10sXG4gICAgICAgICAgICBub3RlOiBcIk5vIG1hdGNoaW5nIGRpc2NyaW1pbmF0b3JcIixcbiAgICAgICAgICAgIGRpc2NyaW1pbmF0b3I6IGRlZi5kaXNjcmltaW5hdG9yLFxuICAgICAgICAgICAgb3B0aW9uczogQXJyYXkuZnJvbShkaXNjLnZhbHVlLmtleXMoKSksXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIHBhdGg6IFtkZWYuZGlzY3JpbWluYXRvcl0sXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RJbnRlcnNlY3Rpb24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEludGVyc2VjdGlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBjb25zdCBsZWZ0ID0gZGVmLmxlZnQuX3pvZC5ydW4oeyB2YWx1ZTogaW5wdXQsIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBkZWYucmlnaHQuX3pvZC5ydW4oeyB2YWx1ZTogaW5wdXQsIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgY29uc3QgYXN5bmMgPSBsZWZ0IGluc3RhbmNlb2YgUHJvbWlzZSB8fCByaWdodCBpbnN0YW5jZW9mIFByb21pc2U7XG4gICAgICAgIGlmIChhc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtsZWZ0LCByaWdodF0pLnRoZW4oKFtsZWZ0LCByaWdodF0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJzZWN0aW9uUmVzdWx0cyhwYXlsb2FkLCBsZWZ0LCByaWdodCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJzZWN0aW9uUmVzdWx0cyhwYXlsb2FkLCBsZWZ0LCByaWdodCk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gbWVyZ2VWYWx1ZXMoYSwgYikge1xuICAgIC8vIGNvbnN0IGFUeXBlID0gcGFyc2UudChhKTtcbiAgICAvLyBjb25zdCBiVHlwZSA9IHBhcnNlLnQoYik7XG4gICAgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IGEgfTtcbiAgICB9XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlICYmICthID09PSArYikge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogYSB9O1xuICAgIH1cbiAgICBpZiAodXRpbC5pc1BsYWluT2JqZWN0KGEpICYmIHV0aWwuaXNQbGFpbk9iamVjdChiKSkge1xuICAgICAgICBjb25zdCBiS2V5cyA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgICBjb25zdCBzaGFyZWRLZXlzID0gT2JqZWN0LmtleXMoYSkuZmlsdGVyKChrZXkpID0+IGJLZXlzLmluZGV4T2Yoa2V5KSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLmEsIC4uLmIgfTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygc2hhcmVkS2V5cykge1xuICAgICAgICAgICAgY29uc3Qgc2hhcmVkVmFsdWUgPSBtZXJnZVZhbHVlcyhhW2tleV0sIGJba2V5XSk7XG4gICAgICAgICAgICBpZiAoIXNoYXJlZFZhbHVlLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXJnZUVycm9yUGF0aDogW2tleSwgLi4uc2hhcmVkVmFsdWUubWVyZ2VFcnJvclBhdGhdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHNoYXJlZFZhbHVlLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IG5ld09iaiB9O1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgbWVyZ2VFcnJvclBhdGg6IFtdIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3QXJyYXkgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtQSA9IGFbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgaXRlbUIgPSBiW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHNoYXJlZFZhbHVlID0gbWVyZ2VWYWx1ZXMoaXRlbUEsIGl0ZW1CKTtcbiAgICAgICAgICAgIGlmICghc2hhcmVkVmFsdWUudmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1lcmdlRXJyb3JQYXRoOiBbaW5kZXgsIC4uLnNoYXJlZFZhbHVlLm1lcmdlRXJyb3JQYXRoXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3QXJyYXkucHVzaChzaGFyZWRWYWx1ZS5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogbmV3QXJyYXkgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBtZXJnZUVycm9yUGF0aDogW10gfTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUludGVyc2VjdGlvblJlc3VsdHMocmVzdWx0LCBsZWZ0LCByaWdodCkge1xuICAgIC8vIFRyYWNrIHdoaWNoIHNpZGUocykgcmVwb3J0IGVhY2gga2V5IGFzIHVucmVjb2duaXplZFxuICAgIGNvbnN0IHVucmVjS2V5cyA9IG5ldyBNYXAoKTtcbiAgICBsZXQgdW5yZWNJc3N1ZTtcbiAgICBmb3IgKGNvbnN0IGlzcyBvZiBsZWZ0Lmlzc3Vlcykge1xuICAgICAgICBpZiAoaXNzLmNvZGUgPT09IFwidW5yZWNvZ25pemVkX2tleXNcIikge1xuICAgICAgICAgICAgdW5yZWNJc3N1ZSA/PyAodW5yZWNJc3N1ZSA9IGlzcyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgaXNzLmtleXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXVucmVjS2V5cy5oYXMoaykpXG4gICAgICAgICAgICAgICAgICAgIHVucmVjS2V5cy5zZXQoaywge30pO1xuICAgICAgICAgICAgICAgIHVucmVjS2V5cy5nZXQoaykubCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuaXNzdWVzLnB1c2goaXNzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGlzcyBvZiByaWdodC5pc3N1ZXMpIHtcbiAgICAgICAgaWYgKGlzcy5jb2RlID09PSBcInVucmVjb2duaXplZF9rZXlzXCIpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBpc3Mua2V5cykge1xuICAgICAgICAgICAgICAgIGlmICghdW5yZWNLZXlzLmhhcyhrKSlcbiAgICAgICAgICAgICAgICAgICAgdW5yZWNLZXlzLnNldChrLCB7fSk7XG4gICAgICAgICAgICAgICAgdW5yZWNLZXlzLmdldChrKS5yID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5pc3N1ZXMucHVzaChpc3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFJlcG9ydCBvbmx5IGtleXMgdW5yZWNvZ25pemVkIGJ5IEJPVEggc2lkZXNcbiAgICBjb25zdCBib3RoS2V5cyA9IFsuLi51bnJlY0tleXNdLmZpbHRlcigoWywgZl0pID0+IGYubCAmJiBmLnIpLm1hcCgoW2tdKSA9PiBrKTtcbiAgICBpZiAoYm90aEtleXMubGVuZ3RoICYmIHVucmVjSXNzdWUpIHtcbiAgICAgICAgcmVzdWx0Lmlzc3Vlcy5wdXNoKHsgLi4udW5yZWNJc3N1ZSwga2V5czogYm90aEtleXMgfSk7XG4gICAgfVxuICAgIGlmICh1dGlsLmFib3J0ZWQocmVzdWx0KSlcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICBjb25zdCBtZXJnZWQgPSBtZXJnZVZhbHVlcyhsZWZ0LnZhbHVlLCByaWdodC52YWx1ZSk7XG4gICAgaWYgKCFtZXJnZWQudmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbm1lcmdhYmxlIGludGVyc2VjdGlvbi4gRXJyb3IgcGF0aDogYCArIGAke0pTT04uc3RyaW5naWZ5KG1lcmdlZC5tZXJnZUVycm9yUGF0aCl9YCk7XG4gICAgfVxuICAgIHJlc3VsdC52YWx1ZSA9IG1lcmdlZC5kYXRhO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgY29uc3QgJFpvZFR1cGxlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RUdXBsZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvbnN0IGl0ZW1zID0gZGVmLml0ZW1zO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcInR1cGxlXCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IFtdO1xuICAgICAgICBjb25zdCBwcm9tcyA9IFtdO1xuICAgICAgICBjb25zdCBvcHRpblN0YXJ0ID0gZ2V0VHVwbGVPcHRTdGFydChpdGVtcywgXCJvcHRpblwiKTtcbiAgICAgICAgY29uc3Qgb3B0b3V0U3RhcnQgPSBnZXRUdXBsZU9wdFN0YXJ0KGl0ZW1zLCBcIm9wdG91dFwiKTtcbiAgICAgICAgaWYgKCFkZWYucmVzdCkge1xuICAgICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA8IG9wdGluU3RhcnQpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogb3B0aW5TdGFydCxcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQubGVuZ3RoID4gaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFwidG9vX2JpZ1wiLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBpdGVtcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbjogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFJ1biBldmVyeSBpdGVtIGluIHBhcmFsbGVsLCBjb2xsZWN0aW5nIHJlc3VsdHMgaW50byBhbiBpbmRleGVkXG4gICAgICAgIC8vIGFycmF5LiBUaGUgcG9zdC1wcm9jZXNzaW5nIGluIGBoYW5kbGVUdXBsZVJlc3VsdHNgIHdhbGtzIHRoZW0gaW5cbiAgICAgICAgLy8gb3JkZXIgc28gaXQgY2FuIGRlY2lkZSB3aGV0aGVyIGFuIGFic2VudCBvcHRpb25hbC1vdXRwdXQgZXJyb3IgY2FuXG4gICAgICAgIC8vIHRydW5jYXRlIHRoZSB0YWlsIG9yIG11c3QgYmUgcmVwb3J0ZWQgdG8gcHJlc2VydmUgcmVxdWlyZWQgb3V0cHV0LlxuICAgICAgICBjb25zdCBpdGVtUmVzdWx0cyA9IG5ldyBBcnJheShpdGVtcy5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByID0gaXRlbXNbaV0uX3pvZC5ydW4oeyB2YWx1ZTogaW5wdXRbaV0sIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHByb21zLnB1c2goci50aGVuKChycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpdGVtUmVzdWx0c1tpXSA9IHJyO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1SZXN1bHRzW2ldID0gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLnJlc3QpIHtcbiAgICAgICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBpbnB1dC5zbGljZShpdGVtcy5sZW5ndGgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiByZXN0KSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi5yZXN0Ll96b2QucnVuKHsgdmFsdWU6IGVsLCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbXMucHVzaChyZXN1bHQudGhlbigocikgPT4gaGFuZGxlVHVwbGVSZXN1bHQociwgcGF5bG9hZCwgaSkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVR1cGxlUmVzdWx0KHJlc3VsdCwgcGF5bG9hZCwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9tcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9tcykudGhlbigoKSA9PiBoYW5kbGVUdXBsZVJlc3VsdHMoaXRlbVJlc3VsdHMsIHBheWxvYWQsIGl0ZW1zLCBpbnB1dCwgb3B0b3V0U3RhcnQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlVHVwbGVSZXN1bHRzKGl0ZW1SZXN1bHRzLCBwYXlsb2FkLCBpdGVtcywgaW5wdXQsIG9wdG91dFN0YXJ0KTtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBnZXRUdXBsZU9wdFN0YXJ0KGl0ZW1zLCBrZXkpIHtcbiAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgaWYgKGl0ZW1zW2ldLl96b2Rba2V5XSAhPT0gXCJvcHRpb25hbFwiKVxuICAgICAgICAgICAgcmV0dXJuIGkgKyAxO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIGhhbmRsZVR1cGxlUmVzdWx0KHJlc3VsdCwgZmluYWwsIGluZGV4KSB7XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGluZGV4LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgfVxuICAgIGZpbmFsLnZhbHVlW2luZGV4XSA9IHJlc3VsdC52YWx1ZTtcbn1cbmZ1bmN0aW9uIGhhbmRsZVR1cGxlUmVzdWx0cyhpdGVtUmVzdWx0cywgZmluYWwsIGl0ZW1zLCBpbnB1dCwgb3B0b3V0U3RhcnQpIHtcbiAgICAvLyBXYWxrIHJlc3VsdHMgaW4gb3JkZXIuIE1pcnJvciAkWm9kT2JqZWN0J3Mgc3dhbGxvdy1vbi1hYnNlbnQtb3B0aW9uYWxcbiAgICAvLyBydWxlLCBidXQgb25seSBhZnRlciBgb3B0b3V0U3RhcnRgOiB0aGUgZmlyc3QgaW5kZXggd2hlcmUgdGhlIG91dHB1dFxuICAgIC8vIHR1cGxlIHRhaWwgY2FuIGJlIGFic2VudC5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHIgPSBpdGVtUmVzdWx0c1tpXTtcbiAgICAgICAgY29uc3QgaXNQcmVzZW50ID0gaSA8IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHIuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCFpc1ByZXNlbnQgJiYgaSA+PSBvcHRvdXRTdGFydCkge1xuICAgICAgICAgICAgICAgIGZpbmFsLnZhbHVlLmxlbmd0aCA9IGk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbC5pc3N1ZXMucHVzaCguLi51dGlsLnByZWZpeElzc3VlcyhpLCByLmlzc3VlcykpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsLnZhbHVlW2ldID0gci52YWx1ZTtcbiAgICB9XG4gICAgLy8gRHJvcCB0cmFpbGluZyBzbG90cyB0aGF0IHByb2R1Y2VkIGB1bmRlZmluZWRgIGZvciBhYnNlbnQgaW5wdXRcbiAgICAvLyAodGhlIGFycmF5IGFuYWxvZyBvZiBhbiBhYnNlbnQgb3B0aW9uYWwga2V5IG9uIGFuIG9iamVjdCkuIFRoZVxuICAgIC8vIGBpID49IGlucHV0Lmxlbmd0aGAgZmxvb3IgaXMgY3JpdGljYWw6IGFuIGV4cGxpY2l0IGB1bmRlZmluZWRgXG4gICAgLy8gKmluc2lkZSogdGhlIGlucHV0IG11c3QgYmUgcHJlc2VydmVkIGV2ZW4gd2hlbiB0aGUgc2NoZW1hIGlzXG4gICAgLy8gb3B0aW9uYWwtb3V0IChlLmcuIGB6LnN0cmluZygpLm9yKHoudW5kZWZpbmVkKCkpYCBhY2NlcHRpbmcgYW5cbiAgICAvLyBleHBsaWNpdCB1bmRlZmluZWQgdmFsdWUpLlxuICAgIGZvciAobGV0IGkgPSBmaW5hbC52YWx1ZS5sZW5ndGggLSAxOyBpID49IGlucHV0Lmxlbmd0aDsgaS0tKSB7XG4gICAgICAgIGlmIChpdGVtc1tpXS5fem9kLm9wdG91dCA9PT0gXCJvcHRpb25hbFwiICYmIGZpbmFsLnZhbHVlW2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpbmFsLnZhbHVlLmxlbmd0aCA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmluYWw7XG59XG5leHBvcnQgY29uc3QgJFpvZFJlY29yZCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kUmVjb3JkXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghdXRpbC5pc1BsYWluT2JqZWN0KGlucHV0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwicmVjb3JkXCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9tcyA9IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBkZWYua2V5VHlwZS5fem9kLnZhbHVlcztcbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkS2V5cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBrZXkgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIGtleSA9PT0gXCJzeW1ib2xcIikge1xuICAgICAgICAgICAgICAgICAgICByZWNvcmRLZXlzLmFkZCh0eXBlb2Yga2V5ID09PSBcIm51bWJlclwiID8ga2V5LnRvU3RyaW5nKCkgOiBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlSZXN1bHQgPSBkZWYua2V5VHlwZS5fem9kLnJ1bih7IHZhbHVlOiBrZXksIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleVJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHlcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleVJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfa2V5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBcInJlY29yZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3Vlczoga2V5UmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcykgPT4gdXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRLZXkgPSBrZXlSZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi52YWx1ZVR5cGUuX3pvZC5ydW4oeyB2YWx1ZTogaW5wdXRba2V5XSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXMucHVzaChyZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoa2V5LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWVbb3V0S2V5XSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoa2V5LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlW291dEtleV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdW5yZWNvZ25pemVkO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlY29yZEtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5yZWNvZ25pemVkID0gdW5yZWNvZ25pemVkID8/IFtdO1xuICAgICAgICAgICAgICAgICAgICB1bnJlY29nbml6ZWQucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1bnJlY29nbml6ZWQgJiYgdW5yZWNvZ25pemVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogXCJ1bnJlY29nbml6ZWRfa2V5c1wiLFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAga2V5czogdW5yZWNvZ25pemVkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHt9O1xuICAgICAgICAgICAgLy8gUmVmbGVjdC5vd25LZXlzIGZvciBTeW1ib2wta2V5IHN1cHBvcnQ7IGZpbHRlciBub24tZW51bWVyYWJsZSB0byBtYXRjaCB6Lm9iamVjdCgpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gXCJfX3Byb3RvX19cIilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoaW5wdXQsIGtleSkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGxldCBrZXlSZXN1bHQgPSBkZWYua2V5VHlwZS5fem9kLnJ1bih7IHZhbHVlOiBrZXksIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5UmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBOdW1lcmljIHN0cmluZyBmYWxsYmFjazogaWYga2V5IGlzIGEgbnVtZXJpYyBzdHJpbmcgYW5kIGZhaWxlZCwgcmV0cnkgd2l0aCBOdW1iZXIoa2V5KVxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB6Lm51bWJlcigpLCB6LmxpdGVyYWwoWzEsIDIsIDNdKSwgYW5kIHVuaW9ucyBjb250YWluaW5nIG51bWVyaWMgbGl0ZXJhbHNcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVja051bWVyaWNLZXkgPSB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiICYmIHJlZ2V4ZXMubnVtYmVyLnRlc3Qoa2V5KSAmJiBrZXlSZXN1bHQuaXNzdWVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tOdW1lcmljS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5UmVzdWx0ID0gZGVmLmtleVR5cGUuX3pvZC5ydW4oeyB2YWx1ZTogTnVtYmVyKGtleSksIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5UmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlSZXN1bHQuaXNzdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5UmVzdWx0ID0gcmV0cnlSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGtleVJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWYubW9kZSA9PT0gXCJsb29zZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBQYXNzIHRocm91Z2ggdW5jaGFuZ2VkXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlW2tleV0gPSBpbnB1dFtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBcInN0cmljdFwiIGJlaGF2aW9yOiBlcnJvciBvbiBpbnZhbGlkIGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2tleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogXCJyZWNvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IGtleVJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogW2tleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYudmFsdWVUeXBlLl96b2QucnVuKHsgdmFsdWU6IGlucHV0W2tleV0sIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9tcy5wdXNoKHJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoa2V5LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlW2tleVJlc3VsdC52YWx1ZV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCguLi51dGlsLnByZWZpeElzc3VlcyhrZXksIHJlc3VsdC5pc3N1ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlW2tleVJlc3VsdC52YWx1ZV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9tcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9tcykudGhlbigoKSA9PiBwYXlsb2FkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE1hcCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTWFwXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghKGlucHV0IGluc3RhbmNlb2YgTWFwKSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwibWFwXCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9tcyA9IFtdO1xuICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3IE1hcCgpO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBpbnB1dCkge1xuICAgICAgICAgICAgY29uc3Qga2V5UmVzdWx0ID0gZGVmLmtleVR5cGUuX3pvZC5ydW4oeyB2YWx1ZToga2V5LCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZVJlc3VsdCA9IGRlZi52YWx1ZVR5cGUuX3pvZC5ydW4oeyB2YWx1ZTogdmFsdWUsIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgIGlmIChrZXlSZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlIHx8IHZhbHVlUmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHByb21zLnB1c2goUHJvbWlzZS5hbGwoW2tleVJlc3VsdCwgdmFsdWVSZXN1bHRdKS50aGVuKChba2V5UmVzdWx0LCB2YWx1ZVJlc3VsdF0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlTWFwUmVzdWx0KGtleVJlc3VsdCwgdmFsdWVSZXN1bHQsIHBheWxvYWQsIGtleSwgaW5wdXQsIGluc3QsIGN0eCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlTWFwUmVzdWx0KGtleVJlc3VsdCwgdmFsdWVSZXN1bHQsIHBheWxvYWQsIGtleSwgaW5wdXQsIGluc3QsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb21zLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9tcykudGhlbigoKSA9PiBwYXlsb2FkKTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlTWFwUmVzdWx0KGtleVJlc3VsdCwgdmFsdWVSZXN1bHQsIGZpbmFsLCBrZXksIGlucHV0LCBpbnN0LCBjdHgpIHtcbiAgICBpZiAoa2V5UmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHV0aWwucHJvcGVydHlLZXlUeXBlcy5oYXModHlwZW9mIGtleSkpIHtcbiAgICAgICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGtleSwga2V5UmVzdWx0Lmlzc3VlcykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9rZXlcIixcbiAgICAgICAgICAgICAgICBvcmlnaW46IFwibWFwXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IGtleVJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZhbHVlUmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHV0aWwucHJvcGVydHlLZXlUeXBlcy5oYXModHlwZW9mIGtleSkpIHtcbiAgICAgICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGtleSwgdmFsdWVSZXN1bHQuaXNzdWVzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmaW5hbC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgb3JpZ2luOiBcIm1hcFwiLFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9lbGVtZW50XCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IHZhbHVlUmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcykgPT4gdXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmaW5hbC52YWx1ZS5zZXQoa2V5UmVzdWx0LnZhbHVlLCB2YWx1ZVJlc3VsdC52YWx1ZSk7XG59XG5leHBvcnQgY29uc3QgJFpvZFNldCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kU2V0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghKGlucHV0IGluc3RhbmNlb2YgU2V0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJzZXRcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9tcyA9IFtdO1xuICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3IFNldCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi52YWx1ZVR5cGUuX3pvZC5ydW4oeyB2YWx1ZTogaXRlbSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBwcm9tcy5wdXNoKHJlc3VsdC50aGVuKChyZXN1bHQpID0+IGhhbmRsZVNldFJlc3VsdChyZXN1bHQsIHBheWxvYWQpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgaGFuZGxlU2V0UmVzdWx0KHJlc3VsdCwgcGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb21zLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9tcykudGhlbigoKSA9PiBwYXlsb2FkKTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlU2V0UmVzdWx0KHJlc3VsdCwgZmluYWwpIHtcbiAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goLi4ucmVzdWx0Lmlzc3Vlcyk7XG4gICAgfVxuICAgIGZpbmFsLnZhbHVlLmFkZChyZXN1bHQudmFsdWUpO1xufVxuZXhwb3J0IGNvbnN0ICRab2RFbnVtID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RFbnVtXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgdmFsdWVzID0gdXRpbC5nZXRFbnVtVmFsdWVzKGRlZi5lbnRyaWVzKTtcbiAgICBjb25zdCB2YWx1ZXNTZXQgPSBuZXcgU2V0KHZhbHVlcyk7XG4gICAgaW5zdC5fem9kLnZhbHVlcyA9IHZhbHVlc1NldDtcbiAgICBpbnN0Ll96b2QucGF0dGVybiA9IG5ldyBSZWdFeHAoYF4oJHt2YWx1ZXNcbiAgICAgICAgLmZpbHRlcigoaykgPT4gdXRpbC5wcm9wZXJ0eUtleVR5cGVzLmhhcyh0eXBlb2YgaykpXG4gICAgICAgIC5tYXAoKG8pID0+ICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIiA/IHV0aWwuZXNjYXBlUmVnZXgobykgOiBvLnRvU3RyaW5nKCkpKVxuICAgICAgICAuam9pbihcInxcIil9KSRgKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZXNTZXQuaGFzKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdmFsdWVcIixcbiAgICAgICAgICAgIHZhbHVlcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTGl0ZXJhbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTGl0ZXJhbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGlmIChkZWYudmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGxpdGVyYWwgc2NoZW1hIHdpdGggbm8gdmFsaWQgdmFsdWVzXCIpO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZXMgPSBuZXcgU2V0KGRlZi52YWx1ZXMpO1xuICAgIGluc3QuX3pvZC52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSBuZXcgUmVnRXhwKGBeKCR7ZGVmLnZhbHVlc1xuICAgICAgICAubWFwKChvKSA9PiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIgPyB1dGlsLmVzY2FwZVJlZ2V4KG8pIDogbyA/IHV0aWwuZXNjYXBlUmVnZXgoby50b1N0cmluZygpKSA6IFN0cmluZyhvKSkpXG4gICAgICAgIC5qb2luKFwifFwiKX0pJGApO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlcy5oYXMoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF92YWx1ZVwiLFxuICAgICAgICAgICAgdmFsdWVzOiBkZWYudmFsdWVzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RGaWxlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RGaWxlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEZpbGUpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJmaWxlXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RUcmFuc2Zvcm0gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFRyYW5zZm9ybVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5vcHRpbiA9IFwib3B0aW9uYWxcIjtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGlmIChjdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLiRab2RFbmNvZGVFcnJvcihpbnN0LmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IF9vdXQgPSBkZWYudHJhbnNmb3JtKHBheWxvYWQudmFsdWUsIHBheWxvYWQpO1xuICAgICAgICBpZiAoY3R4LmFzeW5jKSB7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBfb3V0IGluc3RhbmNlb2YgUHJvbWlzZSA/IF9vdXQgOiBQcm9taXNlLnJlc29sdmUoX291dCk7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0LnRoZW4oKG91dHB1dCkgPT4ge1xuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5mYWxsYmFjayA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX291dCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLiRab2RBc3luY0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IF9vdXQ7XG4gICAgICAgIHBheWxvYWQuZmFsbGJhY2sgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVPcHRpb25hbFJlc3VsdChyZXN1bHQsIGlucHV0KSB7XG4gICAgaWYgKGlucHV0ID09PSB1bmRlZmluZWQgJiYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoIHx8IHJlc3VsdC5mYWxsYmFjaykpIHtcbiAgICAgICAgcmV0dXJuIHsgaXNzdWVzOiBbXSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGNvbnN0ICRab2RPcHRpb25hbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kT3B0aW9uYWxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2Qub3B0aW4gPSBcIm9wdGlvbmFsXCI7XG4gICAgaW5zdC5fem9kLm9wdG91dCA9IFwib3B0aW9uYWxcIjtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzID8gbmV3IFNldChbLi4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcywgdW5kZWZpbmVkXSkgOiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwYXR0ZXJuXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IGRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO1xuICAgICAgICByZXR1cm4gcGF0dGVybiA/IG5ldyBSZWdFeHAoYF4oJHt1dGlsLmNsZWFuUmVnZXgocGF0dGVybi5zb3VyY2UpfSk/JGApIDogdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgaWYgKGRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbiA9PT0gXCJvcHRpb25hbFwiKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKHIpID0+IGhhbmRsZU9wdGlvbmFsUmVzdWx0KHIsIGlucHV0KSk7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlT3B0aW9uYWxSZXN1bHQocmVzdWx0LCBpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBheWxvYWQudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEV4YWN0T3B0aW9uYWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEV4YWN0T3B0aW9uYWxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIENhbGwgcGFyZW50IGluaXQgLSBpbmhlcml0cyBvcHRpbi9vcHRvdXQgPSBcIm9wdGlvbmFsXCJcbiAgICAkWm9kT3B0aW9uYWwuaW5pdChpbnN0LCBkZWYpO1xuICAgIC8vIE92ZXJyaWRlIHZhbHVlcy9wYXR0ZXJuIHRvIE5PVCBhZGQgdW5kZWZpbmVkXG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4gZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwYXR0ZXJuXCIsICgpID0+IGRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuKTtcbiAgICAvLyBPdmVycmlkZSBwYXJzZSB0byBqdXN0IGRlbGVnYXRlIChubyB1bmRlZmluZWQgaGFuZGxpbmcpXG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTnVsbGFibGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE51bGxhYmxlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRpblwiLCAoKSA9PiBkZWYuaW5uZXJUeXBlLl96b2Qub3B0aW4pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0b3V0XCIsICgpID0+IGRlZi5pbm5lclR5cGUuX3pvZC5vcHRvdXQpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicGF0dGVyblwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBkZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4gPyBuZXcgUmVnRXhwKGBeKCR7dXRpbC5jbGVhblJlZ2V4KHBhdHRlcm4uc291cmNlKX18bnVsbCkkYCkgOiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyA/IG5ldyBTZXQoWy4uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMsIG51bGxdKSA6IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIC8vIEZvcndhcmQgZGlyZWN0aW9uIChkZWNvZGUpOiBhbGxvdyBudWxsIHRvIHBhc3MgdGhyb3VnaFxuICAgICAgICBpZiAocGF5bG9hZC52YWx1ZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kRGVmYXVsdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kRGVmYXVsdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIC8vIGluc3QuX3pvZC5xaW4gPSBcInRydWVcIjtcbiAgICBpbnN0Ll96b2Qub3B0aW4gPSBcIm9wdGlvbmFsXCI7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4gZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvcndhcmQgZGlyZWN0aW9uIChkZWNvZGUpOiBhcHBseSBkZWZhdWx0cyBmb3IgdW5kZWZpbmVkIGlucHV0XG4gICAgICAgIGlmIChwYXlsb2FkLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBkZWYuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiAkWm9kRGVmYXVsdCByZXR1cm5zIHRoZSBkZWZhdWx0IHZhbHVlIGltbWVkaWF0ZWx5IGluIGZvcndhcmQgZGlyZWN0aW9uLlxuICAgICAgICAgICAgICogSXQgZG9lc24ndCBwYXNzIHRoZSBkZWZhdWx0IHZhbHVlIGludG8gdGhlIHZhbGlkYXRvciAoXCJwcmVmYXVsdFwiKS4gVGhlcmUncyBubyByZWFzb24gdG8gcGFzcyB0aGUgZGVmYXVsdCB2YWx1ZSB0aHJvdWdoIHZhbGlkYXRpb24uIFRoZSB2YWxpZGl0eSBvZiB0aGUgZGVmYXVsdCBpcyBlbmZvcmNlZCBieSBUeXBlU2NyaXB0IHN0YXRpY2FsbHkuIE90aGVyd2lzZSwgaXQncyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHVzZXIgdG8gZW5zdXJlIHRoZSBkZWZhdWx0IGlzIHZhbGlkLiBJbiB0aGUgY2FzZSBvZiBwaXBlcyB3aXRoIGRpdmVyZ2VudCBpbi9vdXQgdHlwZXMsIHlvdSBjYW4gc3BlY2lmeSB0aGUgZGVmYXVsdCBvbiB0aGUgYGluYCBzY2hlbWEgb2YgeW91ciBab2RQaXBlIHRvIHNldCBhIFwicHJlZmF1bHRcIiBmb3IgdGhlIHBpcGUuICAgKi9cbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvcndhcmQgZGlyZWN0aW9uOiBjb250aW51ZSB3aXRoIGRlZmF1bHQgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyZXN1bHQpID0+IGhhbmRsZURlZmF1bHRSZXN1bHQocmVzdWx0LCBkZWYpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlRGVmYXVsdFJlc3VsdChyZXN1bHQsIGRlZik7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlRGVmYXVsdFJlc3VsdChwYXlsb2FkLCBkZWYpIHtcbiAgICBpZiAocGF5bG9hZC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBkZWYuZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZDtcbn1cbmV4cG9ydCBjb25zdCAkWm9kUHJlZmF1bHQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFByZWZhdWx0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLm9wdGluID0gXCJvcHRpb25hbFwiO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IGRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgaWYgKGN0eC5kaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIikge1xuICAgICAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3J3YXJkIGRpcmVjdGlvbiAoZGVjb2RlKTogYXBwbHkgcHJlZmF1bHQgZm9yIHVuZGVmaW5lZCBpbnB1dFxuICAgICAgICBpZiAocGF5bG9hZC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gZGVmLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTm9uT3B0aW9uYWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE5vbk9wdGlvbmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCB2ID0gZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztcbiAgICAgICAgcmV0dXJuIHYgPyBuZXcgU2V0KFsuLi52XS5maWx0ZXIoKHgpID0+IHggIT09IHVuZGVmaW5lZCkpIDogdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyZXN1bHQpID0+IGhhbmRsZU5vbk9wdGlvbmFsUmVzdWx0KHJlc3VsdCwgaW5zdCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kbGVOb25PcHRpb25hbFJlc3VsdChyZXN1bHQsIGluc3QpO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZU5vbk9wdGlvbmFsUmVzdWx0KHBheWxvYWQsIGluc3QpIHtcbiAgICBpZiAoIXBheWxvYWQuaXNzdWVzLmxlbmd0aCAmJiBwYXlsb2FkLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwibm9ub3B0aW9uYWxcIixcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBwYXlsb2FkO1xufVxuZXhwb3J0IGNvbnN0ICRab2RTdWNjZXNzID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RTdWNjZXNzXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kRW5jb2RlRXJyb3IoXCJab2RTdWNjZXNzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHJlc3VsdC5pc3N1ZXMubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHJlc3VsdC5pc3N1ZXMubGVuZ3RoID09PSAwO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENhdGNoID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDYXRjaFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5vcHRpbiA9IFwib3B0aW9uYWxcIjtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdG91dFwiLCAoKSA9PiBkZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInZhbHVlc1wiLCAoKSA9PiBkZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGlmIChjdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yd2FyZCBkaXJlY3Rpb24gKGRlY29kZSk6IGFwcGx5IGNhdGNoIGxvZ2ljXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IGRlZi5jYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlczogcmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcykgPT4gdXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3VlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmZhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLnZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBkZWYuY2F0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgLi4ucGF5bG9hZCxcbiAgICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzID0gW107XG4gICAgICAgICAgICBwYXlsb2FkLmZhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE5hTiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTmFOXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkLnZhbHVlICE9PSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNOYU4ocGF5bG9hZC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwibmFuXCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RQaXBlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RQaXBlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4gZGVmLmluLl96b2QudmFsdWVzKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdGluXCIsICgpID0+IGRlZi5pbi5fem9kLm9wdGluKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdG91dFwiLCAoKSA9PiBkZWYub3V0Ll96b2Qub3B0b3V0KTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInByb3BWYWx1ZXNcIiwgKCkgPT4gZGVmLmluLl96b2QucHJvcFZhbHVlcyk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGRlZi5vdXQuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyaWdodCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmlnaHQudGhlbigocmlnaHQpID0+IGhhbmRsZVBpcGVSZXN1bHQocmlnaHQsIGRlZi5pbiwgY3R4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlUGlwZVJlc3VsdChyaWdodCwgZGVmLmluLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlZnQgPSBkZWYuaW4uX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgaWYgKGxlZnQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbGVmdC50aGVuKChsZWZ0KSA9PiBoYW5kbGVQaXBlUmVzdWx0KGxlZnQsIGRlZi5vdXQsIGN0eCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kbGVQaXBlUmVzdWx0KGxlZnQsIGRlZi5vdXQsIGN0eCk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlUGlwZVJlc3VsdChsZWZ0LCBuZXh0LCBjdHgpIHtcbiAgICBpZiAobGVmdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIHByZXZlbnQgZnVydGhlciBjaGVja3NcbiAgICAgICAgbGVmdC5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGxlZnQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0Ll96b2QucnVuKHsgdmFsdWU6IGxlZnQudmFsdWUsIGlzc3VlczogbGVmdC5pc3N1ZXMsIGZhbGxiYWNrOiBsZWZ0LmZhbGxiYWNrIH0sIGN0eCk7XG59XG5leHBvcnQgY29uc3QgJFpvZENvZGVjID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDb2RlY1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IGRlZi5pbi5fem9kLnZhbHVlcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRpblwiLCAoKSA9PiBkZWYuaW4uX3pvZC5vcHRpbik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRvdXRcIiwgKCkgPT4gZGVmLm91dC5fem9kLm9wdG91dCk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwcm9wVmFsdWVzXCIsICgpID0+IGRlZi5pbi5fem9kLnByb3BWYWx1ZXMpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gY3R4LmRpcmVjdGlvbiB8fCBcImZvcndhcmRcIjtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBkZWYuaW4uX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIGlmIChsZWZ0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0LnRoZW4oKGxlZnQpID0+IGhhbmRsZUNvZGVjQVJlc3VsdChsZWZ0LCBkZWYsIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUNvZGVjQVJlc3VsdChsZWZ0LCBkZWYsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGRlZi5vdXQuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyaWdodCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmlnaHQudGhlbigocmlnaHQpID0+IGhhbmRsZUNvZGVjQVJlc3VsdChyaWdodCwgZGVmLCBjdHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVDb2RlY0FSZXN1bHQocmlnaHQsIGRlZiwgY3R4KTtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZUNvZGVjQVJlc3VsdChyZXN1bHQsIGRlZiwgY3R4KSB7XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIHByZXZlbnQgZnVydGhlciBjaGVja3NcbiAgICAgICAgcmVzdWx0LmFib3J0ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBkaXJlY3Rpb24gPSBjdHguZGlyZWN0aW9uIHx8IFwiZm9yd2FyZFwiO1xuICAgIGlmIChkaXJlY3Rpb24gPT09IFwiZm9yd2FyZFwiKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gZGVmLnRyYW5zZm9ybShyZXN1bHQudmFsdWUsIHJlc3VsdCk7XG4gICAgICAgIGlmICh0cmFuc2Zvcm1lZCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZC50aGVuKCh2YWx1ZSkgPT4gaGFuZGxlQ29kZWNUeFJlc3VsdChyZXN1bHQsIHZhbHVlLCBkZWYub3V0LCBjdHgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlQ29kZWNUeFJlc3VsdChyZXN1bHQsIHRyYW5zZm9ybWVkLCBkZWYub3V0LCBjdHgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSBkZWYucmV2ZXJzZVRyYW5zZm9ybShyZXN1bHQudmFsdWUsIHJlc3VsdCk7XG4gICAgICAgIGlmICh0cmFuc2Zvcm1lZCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZC50aGVuKCh2YWx1ZSkgPT4gaGFuZGxlQ29kZWNUeFJlc3VsdChyZXN1bHQsIHZhbHVlLCBkZWYuaW4sIGN0eCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kbGVDb2RlY1R4UmVzdWx0KHJlc3VsdCwgdHJhbnNmb3JtZWQsIGRlZi5pbiwgY3R4KTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVDb2RlY1R4UmVzdWx0KGxlZnQsIHZhbHVlLCBuZXh0U2NoZW1hLCBjdHgpIHtcbiAgICAvLyBDaGVjayBpZiB0cmFuc2Zvcm0gYWRkZWQgYW55IGlzc3Vlc1xuICAgIGlmIChsZWZ0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgbGVmdC5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGxlZnQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0U2NoZW1hLl96b2QucnVuKHsgdmFsdWUsIGlzc3VlczogbGVmdC5pc3N1ZXMgfSwgY3R4KTtcbn1cbmV4cG9ydCBjb25zdCAkWm9kUHJlcHJvY2VzcyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kUHJlcHJvY2Vzc1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFBpcGUuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFJlYWRvbmx5ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RSZWFkb25seVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicHJvcFZhbHVlc1wiLCAoKSA9PiBkZWYuaW5uZXJUeXBlLl96b2QucHJvcFZhbHVlcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4gZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRpblwiLCAoKSA9PiBkZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRpbik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRvdXRcIiwgKCkgPT4gZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0KTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGlmIChjdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKGhhbmRsZVJlYWRvbmx5UmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlUmVhZG9ubHlSZXN1bHQocmVzdWx0KTtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVSZWFkb25seVJlc3VsdChwYXlsb2FkKSB7XG4gICAgcGF5bG9hZC52YWx1ZSA9IE9iamVjdC5mcmVlemUocGF5bG9hZC52YWx1ZSk7XG4gICAgcmV0dXJuIHBheWxvYWQ7XG59XG5leHBvcnQgY29uc3QgJFpvZFRlbXBsYXRlTGl0ZXJhbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVGVtcGxhdGVMaXRlcmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgcmVnZXhQYXJ0cyA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFydCBvZiBkZWYucGFydHMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSBcIm9iamVjdFwiICYmIHBhcnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGlzIFpvZCBzY2hlbWFcbiAgICAgICAgICAgIGlmICghcGFydC5fem9kLnBhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICAvLyBpZiAoIXNvdXJjZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0LCBubyBwYXR0ZXJuIGZvdW5kOiAke1suLi5wYXJ0Ll96b2QudHJhaXRzXS5zaGlmdCgpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcGFydC5fem9kLnBhdHRlcm4gaW5zdGFuY2VvZiBSZWdFeHAgPyBwYXJ0Ll96b2QucGF0dGVybi5zb3VyY2UgOiBwYXJ0Ll96b2QucGF0dGVybjtcbiAgICAgICAgICAgIGlmICghc291cmNlKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQ6ICR7cGFydC5fem9kLnRyYWl0c31gKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gc291cmNlLnN0YXJ0c1dpdGgoXCJeXCIpID8gMSA6IDA7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSBzb3VyY2UuZW5kc1dpdGgoXCIkXCIpID8gc291cmNlLmxlbmd0aCAtIDEgOiBzb3VyY2UubGVuZ3RoO1xuICAgICAgICAgICAgcmVnZXhQYXJ0cy5wdXNoKHNvdXJjZS5zbGljZShzdGFydCwgZW5kKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGFydCA9PT0gbnVsbCB8fCB1dGlsLnByaW1pdGl2ZVR5cGVzLmhhcyh0eXBlb2YgcGFydCkpIHtcbiAgICAgICAgICAgIHJlZ2V4UGFydHMucHVzaCh1dGlsLmVzY2FwZVJlZ2V4KGAke3BhcnR9YCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydDogJHtwYXJ0fWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluc3QuX3pvZC5wYXR0ZXJuID0gbmV3IFJlZ0V4cChgXiR7cmVnZXhQYXJ0cy5qb2luKFwiXCIpfSRgKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHBheWxvYWQudmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgaW5zdC5fem9kLnBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICAgICAgaWYgKCFpbnN0Ll96b2QucGF0dGVybi50ZXN0KHBheWxvYWQudmFsdWUpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGRlZi5mb3JtYXQgPz8gXCJ0ZW1wbGF0ZV9saXRlcmFsXCIsXG4gICAgICAgICAgICAgICAgcGF0dGVybjogaW5zdC5fem9kLnBhdHRlcm4uc291cmNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEZ1bmN0aW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RGdW5jdGlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX2RlZiA9IGRlZjtcbiAgICBpbnN0Ll96b2QuZGVmID0gZGVmO1xuICAgIGluc3QuaW1wbGVtZW50ID0gKGZ1bmMpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImltcGxlbWVudCgpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFyZ3MgPSBpbnN0Ll9kZWYuaW5wdXQgPyBwYXJzZShpbnN0Ll9kZWYuaW5wdXQsIGFyZ3MpIDogYXJncztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuYXBwbHkoZnVuYywgdGhpcywgcGFyc2VkQXJncyk7XG4gICAgICAgICAgICBpZiAoaW5zdC5fZGVmLm91dHB1dCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZShpbnN0Ll9kZWYub3V0cHV0LCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGluc3QuaW1wbGVtZW50QXN5bmMgPSAoZnVuYykgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW1wbGVtZW50QXN5bmMoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRBcmdzID0gaW5zdC5fZGVmLmlucHV0ID8gYXdhaXQgcGFyc2VBc3luYyhpbnN0Ll9kZWYuaW5wdXQsIGFyZ3MpIDogYXJncztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFJlZmxlY3QuYXBwbHkoZnVuYywgdGhpcywgcGFyc2VkQXJncyk7XG4gICAgICAgICAgICBpZiAoaW5zdC5fZGVmLm91dHB1dCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBwYXJzZUFzeW5jKGluc3QuX2RlZi5vdXRwdXQsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgIH07XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkLnZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiBvdXRwdXQgaXMgYSBwcm9taXNlIHR5cGUgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCB1c2UgYXN5bmMgaW1wbGVtZW50YXRpb25cbiAgICAgICAgY29uc3QgaGFzUHJvbWlzZU91dHB1dCA9IGluc3QuX2RlZi5vdXRwdXQgJiYgaW5zdC5fZGVmLm91dHB1dC5fem9kLmRlZi50eXBlID09PSBcInByb21pc2VcIjtcbiAgICAgICAgaWYgKGhhc1Byb21pc2VPdXRwdXQpIHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBpbnN0LmltcGxlbWVudEFzeW5jKHBheWxvYWQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IGluc3QuaW1wbGVtZW50KHBheWxvYWQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG4gICAgaW5zdC5pbnB1dCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IEYgPSBpbnN0LmNvbnN0cnVjdG9yO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzWzBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IG5ldyAkWm9kVHVwbGUoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInR1cGxlXCIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBhcmdzWzBdLFxuICAgICAgICAgICAgICAgICAgICByZXN0OiBhcmdzWzFdLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG91dHB1dDogaW5zdC5fZGVmLm91dHB1dCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRih7XG4gICAgICAgICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgICBpbnB1dDogYXJnc1swXSxcbiAgICAgICAgICAgIG91dHB1dDogaW5zdC5fZGVmLm91dHB1dCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBpbnN0Lm91dHB1dCA9IChvdXRwdXQpID0+IHtcbiAgICAgICAgY29uc3QgRiA9IGluc3QuY29uc3RydWN0b3I7XG4gICAgICAgIHJldHVybiBuZXcgRih7XG4gICAgICAgICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgICBpbnB1dDogaW5zdC5fZGVmLmlucHV0LFxuICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBpbnN0O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFByb21pc2UgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFByb21pc2VcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGF5bG9hZC52YWx1ZSkudGhlbigoaW5uZXIpID0+IGRlZi5pbm5lclR5cGUuX3pvZC5ydW4oeyB2YWx1ZTogaW5uZXIsIGlzc3VlczogW10gfSwgY3R4KSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RMYXp5ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RMYXp5XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgLy8gQ2FjaGUgdGhlIHJlc29sdmVkIGlubmVyIHR5cGUgb24gdGhlIHNoYXJlZCBgZGVmYCBzbyBhbGwgY2xvbmVzIG9mIHRoaXNcbiAgICAvLyBsYXp5IChlLmcuIHZpYSBgLmRlc2NyaWJlKClgL2AubWV0YSgpYCkgc2hhcmUgdGhlIHNhbWUgaW5uZXIgaW5zdGFuY2UsXG4gICAgLy8gcHJlc2VydmluZyBpZGVudGl0eSBmb3IgY3ljbGUgZGV0ZWN0aW9uIG9uIHJlY3Vyc2l2ZSBzY2hlbWFzLlxuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwiaW5uZXJUeXBlXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgZCA9IGRlZjtcbiAgICAgICAgaWYgKCFkLl9jYWNoZWRJbm5lcilcbiAgICAgICAgICAgIGQuX2NhY2hlZElubmVyID0gZGVmLmdldHRlcigpO1xuICAgICAgICByZXR1cm4gZC5fY2FjaGVkSW5uZXI7XG4gICAgfSk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwYXR0ZXJuXCIsICgpID0+IGluc3QuX3pvZC5pbm5lclR5cGU/Ll96b2Q/LnBhdHRlcm4pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicHJvcFZhbHVlc1wiLCAoKSA9PiBpbnN0Ll96b2QuaW5uZXJUeXBlPy5fem9kPy5wcm9wVmFsdWVzKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdGluXCIsICgpID0+IGluc3QuX3pvZC5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluID8/IHVuZGVmaW5lZCk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRvdXRcIiwgKCkgPT4gaW5zdC5fem9kLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0ID8/IHVuZGVmaW5lZCk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbm5lciA9IGluc3QuX3pvZC5pbm5lclR5cGU7XG4gICAgICAgIHJldHVybiBpbm5lci5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ3VzdG9tID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDdXN0b21cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNoZWNrcy4kWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgXykgPT4ge1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgciA9IGRlZi5mbihpbnB1dCk7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHIudGhlbigocikgPT4gaGFuZGxlUmVmaW5lUmVzdWx0KHIsIHBheWxvYWQsIGlucHV0LCBpbnN0KSk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUmVmaW5lUmVzdWx0KHIsIHBheWxvYWQsIGlucHV0LCBpbnN0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZVJlZmluZVJlc3VsdChyZXN1bHQsIHBheWxvYWQsIGlucHV0LCBpbnN0KSB7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgY29uc3QgX2lzcyA9IHtcbiAgICAgICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsIC8vIGluY29ycG9yYXRlcyBwYXJhbXMuZXJyb3IgaW50byBpc3N1ZSByZXBvcnRpbmdcbiAgICAgICAgICAgIHBhdGg6IFsuLi4oaW5zdC5fem9kLmRlZi5wYXRoID8/IFtdKV0sIC8vIGluY29ycG9yYXRlcyBwYXJhbXMuZXJyb3IgaW50byBpc3N1ZSByZXBvcnRpbmdcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhaW5zdC5fem9kLmRlZi5hYm9ydCxcbiAgICAgICAgICAgIC8vIHBhcmFtczogaW5zdC5fem9kLmRlZi5wYXJhbXMsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChpbnN0Ll96b2QuZGVmLnBhcmFtcylcbiAgICAgICAgICAgIF9pc3MucGFyYW1zID0gaW5zdC5fem9kLmRlZi5wYXJhbXM7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2godXRpbC5pc3N1ZShfaXNzKSk7XG4gICAgfVxufVxuIiwidmFyIF9hO1xuZXhwb3J0IGNvbnN0ICRvdXRwdXQgPSBTeW1ib2woXCJab2RPdXRwdXRcIik7XG5leHBvcnQgY29uc3QgJGlucHV0ID0gU3ltYm9sKFwiWm9kSW5wdXRcIik7XG5leHBvcnQgY2xhc3MgJFpvZFJlZ2lzdHJ5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgdGhpcy5faWRtYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGFkZChzY2hlbWEsIC4uLl9tZXRhKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBfbWV0YVswXTtcbiAgICAgICAgdGhpcy5fbWFwLnNldChzY2hlbWEsIG1ldGEpO1xuICAgICAgICBpZiAobWV0YSAmJiB0eXBlb2YgbWV0YSA9PT0gXCJvYmplY3RcIiAmJiBcImlkXCIgaW4gbWV0YSkge1xuICAgICAgICAgICAgdGhpcy5faWRtYXAuc2V0KG1ldGEuaWQsIHNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICB0aGlzLl9pZG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJlbW92ZShzY2hlbWEpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX21hcC5nZXQoc2NoZW1hKTtcbiAgICAgICAgaWYgKG1ldGEgJiYgdHlwZW9mIG1ldGEgPT09IFwib2JqZWN0XCIgJiYgXCJpZFwiIGluIG1ldGEpIHtcbiAgICAgICAgICAgIHRoaXMuX2lkbWFwLmRlbGV0ZShtZXRhLmlkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYXAuZGVsZXRlKHNjaGVtYSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQoc2NoZW1hKSB7XG4gICAgICAgIC8vIHJldHVybiB0aGlzLl9tYXAuZ2V0KHNjaGVtYSkgYXMgYW55O1xuICAgICAgICAvLyBpbmhlcml0IG1ldGFkYXRhXG4gICAgICAgIGNvbnN0IHAgPSBzY2hlbWEuX3pvZC5wYXJlbnQ7XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBjb25zdCBwbSA9IHsgLi4uKHRoaXMuZ2V0KHApID8/IHt9KSB9O1xuICAgICAgICAgICAgZGVsZXRlIHBtLmlkOyAvLyBkbyBub3QgaW5oZXJpdCBpZFxuICAgICAgICAgICAgY29uc3QgZiA9IHsgLi4ucG0sIC4uLnRoaXMuX21hcC5nZXQoc2NoZW1hKSB9O1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGYpLmxlbmd0aCA/IGYgOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX21hcC5nZXQoc2NoZW1hKTtcbiAgICB9XG4gICAgaGFzKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFwLmhhcyhzY2hlbWEpO1xuICAgIH1cbn1cbi8vIHJlZ2lzdHJpZXNcbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RyeSgpIHtcbiAgICByZXR1cm4gbmV3ICRab2RSZWdpc3RyeSgpO1xufVxuKF9hID0gZ2xvYmFsVGhpcykuX196b2RfZ2xvYmFsUmVnaXN0cnkgPz8gKF9hLl9fem9kX2dsb2JhbFJlZ2lzdHJ5ID0gcmVnaXN0cnkoKSk7XG5leHBvcnQgY29uc3QgZ2xvYmFsUmVnaXN0cnkgPSBnbG9iYWxUaGlzLl9fem9kX2dsb2JhbFJlZ2lzdHJ5O1xuIiwiaW1wb3J0ICogYXMgY2hlY2tzIGZyb20gXCIuL2NoZWNrcy5qc1wiO1xuaW1wb3J0ICogYXMgcmVnaXN0cmllcyBmcm9tIFwiLi9yZWdpc3RyaWVzLmpzXCI7XG5pbXBvcnQgKiBhcyBzY2hlbWFzIGZyb20gXCIuL3NjaGVtYXMuanNcIjtcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4vdXRpbC5qc1wiO1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc3RyaW5nKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2NvZXJjZWRTdHJpbmcoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBjb2VyY2U6IHRydWUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9lbWFpbChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJlbWFpbFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2d1aWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZ3VpZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3V1aWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwidXVpZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3V1aWR2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJ1dWlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICB2ZXJzaW9uOiBcInY0XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91dWlkdjYoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwidXVpZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgdmVyc2lvbjogXCJ2NlwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdXVpZHY3KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcInV1aWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIHZlcnNpb246IFwidjdcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3VybChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJ1cmxcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9lbW9qaShDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJlbW9qaVwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX25hbm9pZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJuYW5vaWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vKipcbiAqIEBkZXByZWNhdGVkIENVSUQgdjEgaXMgZGVwcmVjYXRlZCBieSBpdHMgYXV0aG9ycyBkdWUgdG8gaW5mb3JtYXRpb24gbGVha2FnZVxuICogKHRpbWVzdGFtcHMgZW1iZWRkZWQgaW4gdGhlIGlkKS4gVXNlIHtAbGluayBfY3VpZDJ9IGluc3RlYWQuXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BhcmFsbGVsZHJpdmUvY3VpZC5cbiAqL1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY3VpZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJjdWlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY3VpZDIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiY3VpZDJcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91bGlkKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcInVsaWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF94aWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwieGlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfa3N1aWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwia3N1aWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pcHY0KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImlwdjRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pcHY2KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImlwdjZcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9tYWMoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwibWFjXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY2lkcnY0KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImNpZHJ2NFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2NpZHJ2NihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJjaWRydjZcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9iYXNlNjQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiYmFzZTY0XCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfYmFzZTY0dXJsKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImJhc2U2NHVybFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2UxNjQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZTE2NFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2p3dChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJqd3RcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgVGltZVByZWNpc2lvbiA9IHtcbiAgICBBbnk6IG51bGwsXG4gICAgTWludXRlOiAtMSxcbiAgICBTZWNvbmQ6IDAsXG4gICAgTWlsbGlzZWNvbmQ6IDMsXG4gICAgTWljcm9zZWNvbmQ6IDYsXG59O1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaXNvRGF0ZVRpbWUoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZGF0ZXRpbWVcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBvZmZzZXQ6IGZhbHNlLFxuICAgICAgICBsb2NhbDogZmFsc2UsXG4gICAgICAgIHByZWNpc2lvbjogbnVsbCxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2lzb0RhdGUoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZGF0ZVwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pc29UaW1lKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcInRpbWVcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBwcmVjaXNpb246IG51bGwsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pc29EdXJhdGlvbihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJkdXJhdGlvblwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9udW1iZXIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY29lcmNlZE51bWJlcihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNvZXJjZTogdHJ1ZSxcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2ludChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNoZWNrOiBcIm51bWJlcl9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwic2FmZWludFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZmxvYXQzMihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNoZWNrOiBcIm51bWJlcl9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwiZmxvYXQzMlwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZmxvYXQ2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNoZWNrOiBcIm51bWJlcl9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwiZmxvYXQ2NFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaW50MzIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBjaGVjazogXCJudW1iZXJfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgZm9ybWF0OiBcImludDMyXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91aW50MzIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBjaGVjazogXCJudW1iZXJfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgZm9ybWF0OiBcInVpbnQzMlwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfYm9vbGVhbihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY29lcmNlZEJvb2xlYW4oQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgY29lcmNlOiB0cnVlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfYmlnaW50KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJiaWdpbnRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2NvZXJjZWRCaWdpbnQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImJpZ2ludFwiLFxuICAgICAgICBjb2VyY2U6IHRydWUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pbnQ2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiYmlnaW50XCIsXG4gICAgICAgIGNoZWNrOiBcImJpZ2ludF9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwiaW50NjRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3VpbnQ2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiYmlnaW50XCIsXG4gICAgICAgIGNoZWNrOiBcImJpZ2ludF9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwidWludDY0XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zeW1ib2woQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN5bWJvbFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdW5kZWZpbmVkKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ1bmRlZmluZWRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX251bGwoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm51bGxcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2FueShDbGFzcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImFueVwiLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdW5rbm93bihDbGFzcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInVua25vd25cIixcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX25ldmVyKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJuZXZlclwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdm9pZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidm9pZFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZGF0ZShDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY29lcmNlZERhdGUoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgY29lcmNlOiB0cnVlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbmFuKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJuYW5cIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2x0KHZhbHVlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tMZXNzVGhhbih7XG4gICAgICAgIGNoZWNrOiBcImxlc3NfdGhhblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2x0ZSh2YWx1ZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTGVzc1RoYW4oe1xuICAgICAgICBjaGVjazogXCJsZXNzX3RoYW5cIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICB9KTtcbn1cbmV4cG9ydCB7IFxuLyoqIEBkZXByZWNhdGVkIFVzZSBgei5sdGUoKWAgaW5zdGVhZC4gKi9cbl9sdGUgYXMgX21heCwgfTtcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2d0KHZhbHVlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tHcmVhdGVyVGhhbih7XG4gICAgICAgIGNoZWNrOiBcImdyZWF0ZXJfdGhhblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2d0ZSh2YWx1ZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrR3JlYXRlclRoYW4oe1xuICAgICAgICBjaGVjazogXCJncmVhdGVyX3RoYW5cIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICB9KTtcbn1cbmV4cG9ydCB7IFxuLyoqIEBkZXByZWNhdGVkIFVzZSBgei5ndGUoKWAgaW5zdGVhZC4gKi9cbl9ndGUgYXMgX21pbiwgfTtcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3Bvc2l0aXZlKHBhcmFtcykge1xuICAgIHJldHVybiBfZ3QoMCwgcGFyYW1zKTtcbn1cbi8vIG5lZ2F0aXZlXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9uZWdhdGl2ZShwYXJhbXMpIHtcbiAgICByZXR1cm4gX2x0KDAsIHBhcmFtcyk7XG59XG4vLyBub25wb3NpdGl2ZVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbm9ucG9zaXRpdmUocGFyYW1zKSB7XG4gICAgcmV0dXJuIF9sdGUoMCwgcGFyYW1zKTtcbn1cbi8vIG5vbm5lZ2F0aXZlXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9ub25uZWdhdGl2ZShwYXJhbXMpIHtcbiAgICByZXR1cm4gX2d0ZSgwLCBwYXJhbXMpO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbXVsdGlwbGVPZih2YWx1ZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTXVsdGlwbGVPZih7XG4gICAgICAgIGNoZWNrOiBcIm11bHRpcGxlX29mXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIHZhbHVlLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbWF4U2l6ZShtYXhpbXVtLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tNYXhTaXplKHtcbiAgICAgICAgY2hlY2s6IFwibWF4X3NpemVcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgbWF4aW11bSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX21pblNpemUobWluaW11bSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTWluU2l6ZSh7XG4gICAgICAgIGNoZWNrOiBcIm1pbl9zaXplXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIG1pbmltdW0sXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zaXplKHNpemUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja1NpemVFcXVhbHMoe1xuICAgICAgICBjaGVjazogXCJzaXplX2VxdWFsc1wiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBzaXplLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbWF4TGVuZ3RoKG1heGltdW0sIHBhcmFtcykge1xuICAgIGNvbnN0IGNoID0gbmV3IGNoZWNrcy4kWm9kQ2hlY2tNYXhMZW5ndGgoe1xuICAgICAgICBjaGVjazogXCJtYXhfbGVuZ3RoXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIG1heGltdW0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGNoO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbWluTGVuZ3RoKG1pbmltdW0sIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja01pbkxlbmd0aCh7XG4gICAgICAgIGNoZWNrOiBcIm1pbl9sZW5ndGhcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgbWluaW11bSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2xlbmd0aChsZW5ndGgsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja0xlbmd0aEVxdWFscyh7XG4gICAgICAgIGNoZWNrOiBcImxlbmd0aF9lcXVhbHNcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgbGVuZ3RoLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcmVnZXgocGF0dGVybiwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrUmVnZXgoe1xuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGZvcm1hdDogXCJyZWdleFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBwYXR0ZXJuLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbG93ZXJjYXNlKHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja0xvd2VyQ2FzZSh7XG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgZm9ybWF0OiBcImxvd2VyY2FzZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdXBwZXJjYXNlKHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja1VwcGVyQ2FzZSh7XG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgZm9ybWF0OiBcInVwcGVyY2FzZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaW5jbHVkZXMoaW5jbHVkZXMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja0luY2x1ZGVzKHtcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBmb3JtYXQ6IFwiaW5jbHVkZXNcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgaW5jbHVkZXMsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zdGFydHNXaXRoKHByZWZpeCwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrU3RhcnRzV2l0aCh7XG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgZm9ybWF0OiBcInN0YXJ0c193aXRoXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIHByZWZpeCxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2VuZHNXaXRoKHN1ZmZpeCwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrRW5kc1dpdGgoe1xuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGZvcm1hdDogXCJlbmRzX3dpdGhcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgc3VmZml4LFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcHJvcGVydHkocHJvcGVydHksIHNjaGVtYSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrUHJvcGVydHkoe1xuICAgICAgICBjaGVjazogXCJwcm9wZXJ0eVwiLFxuICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbWltZSh0eXBlcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTWltZVR5cGUoe1xuICAgICAgICBjaGVjazogXCJtaW1lX3R5cGVcIixcbiAgICAgICAgbWltZTogdHlwZXMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9vdmVyd3JpdGUodHgpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tPdmVyd3JpdGUoe1xuICAgICAgICBjaGVjazogXCJvdmVyd3JpdGVcIixcbiAgICAgICAgdHgsXG4gICAgfSk7XG59XG4vLyBub3JtYWxpemVcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX25vcm1hbGl6ZShmb3JtKSB7XG4gICAgcmV0dXJuIF9vdmVyd3JpdGUoKGlucHV0KSA9PiBpbnB1dC5ub3JtYWxpemUoZm9ybSkpO1xufVxuLy8gdHJpbVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdHJpbSgpIHtcbiAgICByZXR1cm4gX292ZXJ3cml0ZSgoaW5wdXQpID0+IGlucHV0LnRyaW0oKSk7XG59XG4vLyB0b0xvd2VyQ2FzZVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdG9Mb3dlckNhc2UoKSB7XG4gICAgcmV0dXJuIF9vdmVyd3JpdGUoKGlucHV0KSA9PiBpbnB1dC50b0xvd2VyQ2FzZSgpKTtcbn1cbi8vIHRvVXBwZXJDYXNlXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF90b1VwcGVyQ2FzZSgpIHtcbiAgICByZXR1cm4gX292ZXJ3cml0ZSgoaW5wdXQpID0+IGlucHV0LnRvVXBwZXJDYXNlKCkpO1xufVxuLy8gc2x1Z2lmeVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc2x1Z2lmeSgpIHtcbiAgICByZXR1cm4gX292ZXJ3cml0ZSgoaW5wdXQpID0+IHV0aWwuc2x1Z2lmeShpbnB1dCkpO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfYXJyYXkoQ2xhc3MsIGVsZW1lbnQsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIC8vIGdldCBlbGVtZW50KCkge1xuICAgICAgICAvLyAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAvLyB9LFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdW5pb24oQ2xhc3MsIG9wdGlvbnMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInVuaW9uXCIsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX3hvcihDbGFzcywgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidW5pb25cIixcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2Rpc2NyaW1pbmF0ZWRVbmlvbihDbGFzcywgZGlzY3JpbWluYXRvciwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidW5pb25cIixcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgZGlzY3JpbWluYXRvcixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2ludGVyc2VjdGlvbihDbGFzcywgbGVmdCwgcmlnaHQpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJpbnRlcnNlY3Rpb25cIixcbiAgICAgICAgbGVmdCxcbiAgICAgICAgcmlnaHQsXG4gICAgfSk7XG59XG4vLyBleHBvcnQgZnVuY3Rpb24gX3R1cGxlKFxuLy8gICBDbGFzczogdXRpbC5TY2hlbWFDbGFzczxzY2hlbWFzLiRab2RUdXBsZT4sXG4vLyAgIGl0ZW1zOiBbXSxcbi8vICAgcGFyYW1zPzogc3RyaW5nIHwgJFpvZFR1cGxlUGFyYW1zXG4vLyApOiBzY2hlbWFzLiRab2RUdXBsZTxbXSwgbnVsbD47XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF90dXBsZShDbGFzcywgaXRlbXMsIF9wYXJhbXNPclJlc3QsIF9wYXJhbXMpIHtcbiAgICBjb25zdCBoYXNSZXN0ID0gX3BhcmFtc09yUmVzdCBpbnN0YW5jZW9mIHNjaGVtYXMuJFpvZFR5cGU7XG4gICAgY29uc3QgcGFyYW1zID0gaGFzUmVzdCA/IF9wYXJhbXMgOiBfcGFyYW1zT3JSZXN0O1xuICAgIGNvbnN0IHJlc3QgPSBoYXNSZXN0ID8gX3BhcmFtc09yUmVzdCA6IG51bGw7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidHVwbGVcIixcbiAgICAgICAgaXRlbXMsXG4gICAgICAgIHJlc3QsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9yZWNvcmQoQ2xhc3MsIGtleVR5cGUsIHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwicmVjb3JkXCIsXG4gICAgICAgIGtleVR5cGUsXG4gICAgICAgIHZhbHVlVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX21hcChDbGFzcywga2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJtYXBcIixcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgdmFsdWVUeXBlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc2V0KENsYXNzLCB2YWx1ZVR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICB2YWx1ZVR5cGUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9lbnVtKENsYXNzLCB2YWx1ZXMsIHBhcmFtcykge1xuICAgIGNvbnN0IGVudHJpZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlcykgPyBPYmplY3QuZnJvbUVudHJpZXModmFsdWVzLm1hcCgodikgPT4gW3YsIHZdKSkgOiB2YWx1ZXM7XG4gICAgLy8gaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgIC8vICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAvLyAgICAgZW50cmllc1t2YWx1ZV0gPSB2YWx1ZTtcbiAgICAvLyAgIH1cbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgT2JqZWN0LmFzc2lnbihlbnRyaWVzLCB2YWx1ZXMpO1xuICAgIC8vIH1cbiAgICAvLyBjb25zdCBlbnRyaWVzOiB1dGlsLkVudW1MaWtlID0ge307XG4gICAgLy8gZm9yIChjb25zdCB2YWwgb2YgdmFsdWVzKSB7XG4gICAgLy8gICBlbnRyaWVzW3ZhbF0gPSB2YWw7XG4gICAgLy8gfVxuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImVudW1cIixcbiAgICAgICAgZW50cmllcyxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG4vKiogQGRlcHJlY2F0ZWQgVGhpcyBBUEkgaGFzIGJlZW4gbWVyZ2VkIGludG8gYHouZW51bSgpYC4gVXNlIGB6LmVudW0oKWAgaW5zdGVhZC5cbiAqXG4gKiBgYGB0c1xuICogZW51bSBDb2xvcnMgeyByZWQsIGdyZWVuLCBibHVlIH1cbiAqIHouZW51bShDb2xvcnMpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfbmF0aXZlRW51bShDbGFzcywgZW50cmllcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiZW51bVwiLFxuICAgICAgICBlbnRyaWVzLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbGl0ZXJhbChDbGFzcywgdmFsdWUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImxpdGVyYWxcIixcbiAgICAgICAgdmFsdWVzOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2ZpbGUoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3RyYW5zZm9ybShDbGFzcywgZm4pIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgdHJhbnNmb3JtOiBmbixcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX29wdGlvbmFsKENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJvcHRpb25hbFwiLFxuICAgICAgICBpbm5lclR5cGUsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9udWxsYWJsZShDbGFzcywgaW5uZXJUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVsbGFibGVcIixcbiAgICAgICAgaW5uZXJUeXBlLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZGVmYXVsdChDbGFzcywgaW5uZXJUeXBlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJkZWZhdWx0XCIsXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICAgICAgZ2V0IGRlZmF1bHRWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyBkZWZhdWx0VmFsdWUoKSA6IHV0aWwuc2hhbGxvd0Nsb25lKGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9ub25vcHRpb25hbChDbGFzcywgaW5uZXJUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJub25vcHRpb25hbFwiLFxuICAgICAgICBpbm5lclR5cGUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zdWNjZXNzKENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2NhdGNoKENsYXNzLCBpbm5lclR5cGUsIGNhdGNoVmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJjYXRjaFwiLFxuICAgICAgICBpbm5lclR5cGUsXG4gICAgICAgIGNhdGNoVmFsdWU6ICh0eXBlb2YgY2F0Y2hWYWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gY2F0Y2hWYWx1ZSA6ICgpID0+IGNhdGNoVmFsdWUpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcGlwZShDbGFzcywgaW5fLCBvdXQpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJwaXBlXCIsXG4gICAgICAgIGluOiBpbl8sXG4gICAgICAgIG91dCxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3JlYWRvbmx5KENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJyZWFkb25seVwiLFxuICAgICAgICBpbm5lclR5cGUsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF90ZW1wbGF0ZUxpdGVyYWwoQ2xhc3MsIHBhcnRzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ0ZW1wbGF0ZV9saXRlcmFsXCIsXG4gICAgICAgIHBhcnRzLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbGF6eShDbGFzcywgZ2V0dGVyKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibGF6eVwiLFxuICAgICAgICBnZXR0ZXIsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9wcm9taXNlKENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJwcm9taXNlXCIsXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2N1c3RvbShDbGFzcywgZm4sIF9wYXJhbXMpIHtcbiAgICBjb25zdCBub3JtID0gdXRpbC5ub3JtYWxpemVQYXJhbXMoX3BhcmFtcyk7XG4gICAgbm9ybS5hYm9ydCA/PyAobm9ybS5hYm9ydCA9IHRydWUpOyAvLyBkZWZhdWx0IHRvIGFib3J0OmZhbHNlXG4gICAgY29uc3Qgc2NoZW1hID0gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJjdXN0b21cIixcbiAgICAgICAgY2hlY2s6IFwiY3VzdG9tXCIsXG4gICAgICAgIGZuOiBmbixcbiAgICAgICAgLi4ubm9ybSxcbiAgICB9KTtcbiAgICByZXR1cm4gc2NoZW1hO1xufVxuLy8gc2FtZSBhcyBfY3VzdG9tIGJ1dCBkZWZhdWx0cyB0byBhYm9ydDpmYWxzZVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcmVmaW5lKENsYXNzLCBmbiwgX3BhcmFtcykge1xuICAgIGNvbnN0IHNjaGVtYSA9IG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiY3VzdG9tXCIsXG4gICAgICAgIGNoZWNrOiBcImN1c3RvbVwiLFxuICAgICAgICBmbjogZm4sXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKF9wYXJhbXMpLFxuICAgIH0pO1xuICAgIHJldHVybiBzY2hlbWE7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zdXBlclJlZmluZShmbiwgcGFyYW1zKSB7XG4gICAgY29uc3QgY2ggPSBfY2hlY2soKHBheWxvYWQpID0+IHtcbiAgICAgICAgcGF5bG9hZC5hZGRJc3N1ZSA9IChpc3N1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpc3N1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2godXRpbC5pc3N1ZShpc3N1ZSwgcGF5bG9hZC52YWx1ZSwgY2guX3pvZC5kZWYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGZvciBab2QgMyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZmF0YWwpXG4gICAgICAgICAgICAgICAgICAgIF9pc3N1ZS5jb250aW51ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIF9pc3N1ZS5jb2RlID8/IChfaXNzdWUuY29kZSA9IFwiY3VzdG9tXCIpO1xuICAgICAgICAgICAgICAgIF9pc3N1ZS5pbnB1dCA/PyAoX2lzc3VlLmlucHV0ID0gcGF5bG9hZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgX2lzc3VlLmluc3QgPz8gKF9pc3N1ZS5pbnN0ID0gY2gpO1xuICAgICAgICAgICAgICAgIF9pc3N1ZS5jb250aW51ZSA/PyAoX2lzc3VlLmNvbnRpbnVlID0gIWNoLl96b2QuZGVmLmFib3J0KTsgLy8gYWJvcnQgaXMgYWx3YXlzIHVuZGVmaW5lZCwgc28gdGhpcyBpcyBhbHdheXMgdHJ1ZS4uLlxuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2godXRpbC5pc3N1ZShfaXNzdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZuKHBheWxvYWQudmFsdWUsIHBheWxvYWQpO1xuICAgIH0sIHBhcmFtcyk7XG4gICAgcmV0dXJuIGNoO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY2hlY2soZm4sIHBhcmFtcykge1xuICAgIGNvbnN0IGNoID0gbmV3IGNoZWNrcy4kWm9kQ2hlY2soe1xuICAgICAgICBjaGVjazogXCJjdXN0b21cIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbiAgICBjaC5fem9kLmNoZWNrID0gZm47XG4gICAgcmV0dXJuIGNoO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBkZXNjcmliZShkZXNjcmlwdGlvbikge1xuICAgIGNvbnN0IGNoID0gbmV3IGNoZWNrcy4kWm9kQ2hlY2soeyBjaGVjazogXCJkZXNjcmliZVwiIH0pO1xuICAgIGNoLl96b2Qub25hdHRhY2ggPSBbXG4gICAgICAgIChpbnN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IHJlZ2lzdHJpZXMuZ2xvYmFsUmVnaXN0cnkuZ2V0KGluc3QpID8/IHt9O1xuICAgICAgICAgICAgcmVnaXN0cmllcy5nbG9iYWxSZWdpc3RyeS5hZGQoaW5zdCwgeyAuLi5leGlzdGluZywgZGVzY3JpcHRpb24gfSk7XG4gICAgICAgIH0sXG4gICAgXTtcbiAgICBjaC5fem9kLmNoZWNrID0gKCkgPT4geyB9OyAvLyBuby1vcCBjaGVja1xuICAgIHJldHVybiBjaDtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gbWV0YShtZXRhZGF0YSkge1xuICAgIGNvbnN0IGNoID0gbmV3IGNoZWNrcy4kWm9kQ2hlY2soeyBjaGVjazogXCJtZXRhXCIgfSk7XG4gICAgY2guX3pvZC5vbmF0dGFjaCA9IFtcbiAgICAgICAgKGluc3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcmVnaXN0cmllcy5nbG9iYWxSZWdpc3RyeS5nZXQoaW5zdCkgPz8ge307XG4gICAgICAgICAgICByZWdpc3RyaWVzLmdsb2JhbFJlZ2lzdHJ5LmFkZChpbnN0LCB7IC4uLmV4aXN0aW5nLCAuLi5tZXRhZGF0YSB9KTtcbiAgICAgICAgfSxcbiAgICBdO1xuICAgIGNoLl96b2QuY2hlY2sgPSAoKSA9PiB7IH07IC8vIG5vLW9wIGNoZWNrXG4gICAgcmV0dXJuIGNoO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc3RyaW5nYm9vbChDbGFzc2VzLCBfcGFyYW1zKSB7XG4gICAgY29uc3QgcGFyYW1zID0gdXRpbC5ub3JtYWxpemVQYXJhbXMoX3BhcmFtcyk7XG4gICAgbGV0IHRydXRoeUFycmF5ID0gcGFyYW1zLnRydXRoeSA/PyBbXCJ0cnVlXCIsIFwiMVwiLCBcInllc1wiLCBcIm9uXCIsIFwieVwiLCBcImVuYWJsZWRcIl07XG4gICAgbGV0IGZhbHN5QXJyYXkgPSBwYXJhbXMuZmFsc3kgPz8gW1wiZmFsc2VcIiwgXCIwXCIsIFwibm9cIiwgXCJvZmZcIiwgXCJuXCIsIFwiZGlzYWJsZWRcIl07XG4gICAgaWYgKHBhcmFtcy5jYXNlICE9PSBcInNlbnNpdGl2ZVwiKSB7XG4gICAgICAgIHRydXRoeUFycmF5ID0gdHJ1dGh5QXJyYXkubWFwKCh2KSA9PiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgPyB2LnRvTG93ZXJDYXNlKCkgOiB2KSk7XG4gICAgICAgIGZhbHN5QXJyYXkgPSBmYWxzeUFycmF5Lm1hcCgodikgPT4gKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiID8gdi50b0xvd2VyQ2FzZSgpIDogdikpO1xuICAgIH1cbiAgICBjb25zdCB0cnV0aHlTZXQgPSBuZXcgU2V0KHRydXRoeUFycmF5KTtcbiAgICBjb25zdCBmYWxzeVNldCA9IG5ldyBTZXQoZmFsc3lBcnJheSk7XG4gICAgY29uc3QgX0NvZGVjID0gQ2xhc3Nlcy5Db2RlYyA/PyBzY2hlbWFzLiRab2RDb2RlYztcbiAgICBjb25zdCBfQm9vbGVhbiA9IENsYXNzZXMuQm9vbGVhbiA/PyBzY2hlbWFzLiRab2RCb29sZWFuO1xuICAgIGNvbnN0IF9TdHJpbmcgPSBDbGFzc2VzLlN0cmluZyA/PyBzY2hlbWFzLiRab2RTdHJpbmc7XG4gICAgY29uc3Qgc3RyaW5nU2NoZW1hID0gbmV3IF9TdHJpbmcoeyB0eXBlOiBcInN0cmluZ1wiLCBlcnJvcjogcGFyYW1zLmVycm9yIH0pO1xuICAgIGNvbnN0IGJvb2xlYW5TY2hlbWEgPSBuZXcgX0Jvb2xlYW4oeyB0eXBlOiBcImJvb2xlYW5cIiwgZXJyb3I6IHBhcmFtcy5lcnJvciB9KTtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBfQ29kZWMoe1xuICAgICAgICB0eXBlOiBcInBpcGVcIixcbiAgICAgICAgaW46IHN0cmluZ1NjaGVtYSxcbiAgICAgICAgb3V0OiBib29sZWFuU2NoZW1hLFxuICAgICAgICB0cmFuc2Zvcm06ICgoaW5wdXQsIHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gaW5wdXQ7XG4gICAgICAgICAgICBpZiAocGFyYW1zLmNhc2UgIT09IFwic2Vuc2l0aXZlXCIpXG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmICh0cnV0aHlTZXQuaGFzKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmYWxzeVNldC5oYXMoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3ZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcInN0cmluZ2Jvb2xcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBbLi4udHJ1dGh5U2V0LCAuLi5mYWxzeVNldF0sXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBpbnN0OiBjb2RlYyxcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHJldmVyc2VUcmFuc2Zvcm06ICgoaW5wdXQsIF9wYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1dGh5QXJyYXlbMF0gfHwgXCJ0cnVlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc3lBcnJheVswXSB8fCBcImZhbHNlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogcGFyYW1zLmVycm9yLFxuICAgIH0pO1xuICAgIHJldHVybiBjb2RlYztcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3N0cmluZ0Zvcm1hdChDbGFzcywgZm9ybWF0LCBmbk9yUmVnZXgsIF9wYXJhbXMgPSB7fSkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHV0aWwubm9ybWFsaXplUGFyYW1zKF9wYXJhbXMpO1xuICAgIGNvbnN0IGRlZiA9IHtcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMoX3BhcmFtcyksXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0LFxuICAgICAgICBmbjogdHlwZW9mIGZuT3JSZWdleCA9PT0gXCJmdW5jdGlvblwiID8gZm5PclJlZ2V4IDogKHZhbCkgPT4gZm5PclJlZ2V4LnRlc3QodmFsKSxcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgIH07XG4gICAgaWYgKGZuT3JSZWdleCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICBkZWYucGF0dGVybiA9IGZuT3JSZWdleDtcbiAgICB9XG4gICAgY29uc3QgaW5zdCA9IG5ldyBDbGFzcyhkZWYpO1xuICAgIHJldHVybiBpbnN0O1xufVxuIiwiaW1wb3J0IHsgZ2xvYmFsUmVnaXN0cnkgfSBmcm9tIFwiLi9yZWdpc3RyaWVzLmpzXCI7XG4vLyBmdW5jdGlvbiBpbml0aWFsaXplQ29udGV4dDxUIGV4dGVuZHMgc2NoZW1hcy4kWm9kVHlwZT4oaW5wdXRzOiBKU09OU2NoZW1hR2VuZXJhdG9yUGFyYW1zPFQ+KTogVG9KU09OU2NoZW1hQ29udGV4dDxUPiB7XG4vLyAgIHJldHVybiB7XG4vLyAgICAgcHJvY2Vzc29yOiBpbnB1dHMucHJvY2Vzc29yLFxuLy8gICAgIG1ldGFkYXRhUmVnaXN0cnk6IGlucHV0cy5tZXRhZGF0YSA/PyBnbG9iYWxSZWdpc3RyeSxcbi8vICAgICB0YXJnZXQ6IGlucHV0cy50YXJnZXQgPz8gXCJkcmFmdC0yMDIwLTEyXCIsXG4vLyAgICAgdW5yZXByZXNlbnRhYmxlOiBpbnB1dHMudW5yZXByZXNlbnRhYmxlID8/IFwidGhyb3dcIixcbi8vICAgfTtcbi8vIH1cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplQ29udGV4dChwYXJhbXMpIHtcbiAgICAvLyBOb3JtYWxpemUgdGFyZ2V0OiBjb252ZXJ0IG9sZCBub24taHlwaGVuYXRlZCB2ZXJzaW9ucyB0byBoeXBoZW5hdGVkIHZlcnNpb25zXG4gICAgbGV0IHRhcmdldCA9IHBhcmFtcz8udGFyZ2V0ID8/IFwiZHJhZnQtMjAyMC0xMlwiO1xuICAgIGlmICh0YXJnZXQgPT09IFwiZHJhZnQtNFwiKVxuICAgICAgICB0YXJnZXQgPSBcImRyYWZ0LTA0XCI7XG4gICAgaWYgKHRhcmdldCA9PT0gXCJkcmFmdC03XCIpXG4gICAgICAgIHRhcmdldCA9IFwiZHJhZnQtMDdcIjtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcm9jZXNzb3JzOiBwYXJhbXMucHJvY2Vzc29ycyA/PyB7fSxcbiAgICAgICAgbWV0YWRhdGFSZWdpc3RyeTogcGFyYW1zPy5tZXRhZGF0YSA/PyBnbG9iYWxSZWdpc3RyeSxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICB1bnJlcHJlc2VudGFibGU6IHBhcmFtcz8udW5yZXByZXNlbnRhYmxlID8/IFwidGhyb3dcIixcbiAgICAgICAgb3ZlcnJpZGU6IHBhcmFtcz8ub3ZlcnJpZGUgPz8gKCgpID0+IHsgfSksXG4gICAgICAgIGlvOiBwYXJhbXM/LmlvID8/IFwib3V0cHV0XCIsXG4gICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgIHNlZW46IG5ldyBNYXAoKSxcbiAgICAgICAgY3ljbGVzOiBwYXJhbXM/LmN5Y2xlcyA/PyBcInJlZlwiLFxuICAgICAgICByZXVzZWQ6IHBhcmFtcz8ucmV1c2VkID8/IFwiaW5saW5lXCIsXG4gICAgICAgIGV4dGVybmFsOiBwYXJhbXM/LmV4dGVybmFsID8/IHVuZGVmaW5lZCxcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3Moc2NoZW1hLCBjdHgsIF9wYXJhbXMgPSB7IHBhdGg6IFtdLCBzY2hlbWFQYXRoOiBbXSB9KSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICAvLyBjaGVjayBmb3Igc2NoZW1hIGluIHNlZW5zXG4gICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIGlmIChzZWVuKSB7XG4gICAgICAgIHNlZW4uY291bnQrKztcbiAgICAgICAgLy8gY2hlY2sgaWYgY3ljbGVcbiAgICAgICAgY29uc3QgaXNDeWNsZSA9IF9wYXJhbXMuc2NoZW1hUGF0aC5pbmNsdWRlcyhzY2hlbWEpO1xuICAgICAgICBpZiAoaXNDeWNsZSkge1xuICAgICAgICAgICAgc2Vlbi5jeWNsZSA9IF9wYXJhbXMucGF0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2Vlbi5zY2hlbWE7XG4gICAgfVxuICAgIC8vIGluaXRpYWxpemVcbiAgICBjb25zdCByZXN1bHQgPSB7IHNjaGVtYToge30sIGNvdW50OiAxLCBjeWNsZTogdW5kZWZpbmVkLCBwYXRoOiBfcGFyYW1zLnBhdGggfTtcbiAgICBjdHguc2Vlbi5zZXQoc2NoZW1hLCByZXN1bHQpO1xuICAgIC8vIGN1c3RvbSBtZXRob2Qgb3ZlcnJpZGVzIGRlZmF1bHQgYmVoYXZpb3JcbiAgICBjb25zdCBvdmVycmlkZVNjaGVtYSA9IHNjaGVtYS5fem9kLnRvSlNPTlNjaGVtYT8uKCk7XG4gICAgaWYgKG92ZXJyaWRlU2NoZW1hKSB7XG4gICAgICAgIHJlc3VsdC5zY2hlbWEgPSBvdmVycmlkZVNjaGVtYTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIC4uLl9wYXJhbXMsXG4gICAgICAgICAgICBzY2hlbWFQYXRoOiBbLi4uX3BhcmFtcy5zY2hlbWFQYXRoLCBzY2hlbWFdLFxuICAgICAgICAgICAgcGF0aDogX3BhcmFtcy5wYXRoLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoc2NoZW1hLl96b2QucHJvY2Vzc0pTT05TY2hlbWEpIHtcbiAgICAgICAgICAgIHNjaGVtYS5fem9kLnByb2Nlc3NKU09OU2NoZW1hKGN0eCwgcmVzdWx0LnNjaGVtYSwgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IF9qc29uID0gcmVzdWx0LnNjaGVtYTtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NvciA9IGN0eC5wcm9jZXNzb3JzW2RlZi50eXBlXTtcbiAgICAgICAgICAgIGlmICghcHJvY2Vzc29yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbdG9KU09OU2NoZW1hXTogTm9uLXJlcHJlc2VudGFibGUgdHlwZSBlbmNvdW50ZXJlZDogJHtkZWYudHlwZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb2Nlc3NvcihzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50ID0gc2NoZW1hLl96b2QucGFyZW50O1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAvLyBBbHNvIHNldCByZWYgaWYgcHJvY2Vzc29yIGRpZG4ndCAoZm9yIGluaGVyaXRhbmNlKVxuICAgICAgICAgICAgaWYgKCFyZXN1bHQucmVmKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5yZWYgPSBwYXJlbnQ7XG4gICAgICAgICAgICBwcm9jZXNzKHBhcmVudCwgY3R4LCBwYXJhbXMpO1xuICAgICAgICAgICAgY3R4LnNlZW4uZ2V0KHBhcmVudCkuaXNQYXJlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG1ldGFkYXRhXG4gICAgY29uc3QgbWV0YSA9IGN0eC5tZXRhZGF0YVJlZ2lzdHJ5LmdldChzY2hlbWEpO1xuICAgIGlmIChtZXRhKVxuICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdC5zY2hlbWEsIG1ldGEpO1xuICAgIGlmIChjdHguaW8gPT09IFwiaW5wdXRcIiAmJiBpc1RyYW5zZm9ybWluZyhzY2hlbWEpKSB7XG4gICAgICAgIC8vIGV4YW1wbGVzL2RlZmF1bHRzIG9ubHkgYXBwbHkgdG8gb3V0cHV0IHR5cGUgb2YgcGlwZVxuICAgICAgICBkZWxldGUgcmVzdWx0LnNjaGVtYS5leGFtcGxlcztcbiAgICAgICAgZGVsZXRlIHJlc3VsdC5zY2hlbWEuZGVmYXVsdDtcbiAgICB9XG4gICAgLy8gc2V0IHByZWZhdWx0IGFzIGRlZmF1bHRcbiAgICBpZiAoY3R4LmlvID09PSBcImlucHV0XCIgJiYgXCJfcHJlZmF1bHRcIiBpbiByZXN1bHQuc2NoZW1hKVxuICAgICAgICAoX2EgPSByZXN1bHQuc2NoZW1hKS5kZWZhdWx0ID8/IChfYS5kZWZhdWx0ID0gcmVzdWx0LnNjaGVtYS5fcHJlZmF1bHQpO1xuICAgIGRlbGV0ZSByZXN1bHQuc2NoZW1hLl9wcmVmYXVsdDtcbiAgICAvLyBwdWxsaW5nIGZyZXNoIGZyb20gY3R4LnNlZW4gaW4gY2FzZSBpdCB3YXMgb3ZlcndyaXR0ZW5cbiAgICBjb25zdCBfcmVzdWx0ID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgcmV0dXJuIF9yZXN1bHQuc2NoZW1hO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REZWZzKGN0eCwgc2NoZW1hXG4vLyBwYXJhbXM6IEVtaXRQYXJhbXNcbikge1xuICAgIC8vIGl0ZXJhdGUgb3ZlciBzZWVuIG1hcDtcbiAgICBjb25zdCByb290ID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgaWYgKCFyb290KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnByb2Nlc3NlZCBzY2hlbWEuIFRoaXMgaXMgYSBidWcgaW4gWm9kLlwiKTtcbiAgICAvLyBUcmFjayBpZHMgdG8gZGV0ZWN0IGR1cGxpY2F0ZXMgYWNyb3NzIGRpZmZlcmVudCBzY2hlbWFzXG4gICAgY29uc3QgaWRUb1NjaGVtYSA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGN0eC5zZWVuLmVudHJpZXMoKSkge1xuICAgICAgICBjb25zdCBpZCA9IGN0eC5tZXRhZGF0YVJlZ2lzdHJ5LmdldChlbnRyeVswXSk/LmlkO1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gaWRUb1NjaGVtYS5nZXQoaWQpO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nICE9PSBlbnRyeVswXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIHNjaGVtYSBpZCBcIiR7aWR9XCIgZGV0ZWN0ZWQgZHVyaW5nIEpTT04gU2NoZW1hIGNvbnZlcnNpb24uIFR3byBkaWZmZXJlbnQgc2NoZW1hcyBjYW5ub3Qgc2hhcmUgdGhlIHNhbWUgaWQgd2hlbiBjb252ZXJ0ZWQgdG9nZXRoZXIuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZFRvU2NoZW1hLnNldChpZCwgZW50cnlbMF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybnMgYSByZWYgdG8gdGhlIHNjaGVtYVxuICAgIC8vIGRlZklkIHdpbGwgYmUgZW1wdHkgaWYgdGhlIHJlZiBwb2ludHMgdG8gYW4gZXh0ZXJuYWwgc2NoZW1hIChvciAjKVxuICAgIGNvbnN0IG1ha2VVUkkgPSAoZW50cnkpID0+IHtcbiAgICAgICAgLy8gY29tcGFyaW5nIHRoZSBzZWVuIG9iamVjdHMgYmVjYXVzZSBzb21ldGltZXNcbiAgICAgICAgLy8gbXVsdGlwbGUgc2NoZW1hcyBtYXAgdG8gdGhlIHNhbWUgc2VlbiBvYmplY3QuXG4gICAgICAgIC8vIGUuZy4gbGF6eVxuICAgICAgICAvLyBleHRlcm5hbCBpcyBjb25maWd1cmVkXG4gICAgICAgIGNvbnN0IGRlZnNTZWdtZW50ID0gY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0yMDIwLTEyXCIgPyBcIiRkZWZzXCIgOiBcImRlZmluaXRpb25zXCI7XG4gICAgICAgIGlmIChjdHguZXh0ZXJuYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVybmFsSWQgPSBjdHguZXh0ZXJuYWwucmVnaXN0cnkuZ2V0KGVudHJ5WzBdKT8uaWQ7IC8vID8/IFwiX19zaGFyZWRcIjsvLyBgX19zY2hlbWEke2N0eC5jb3VudGVyKyt9YDtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHNjaGVtYSBpcyBpbiB0aGUgZXh0ZXJuYWwgcmVnaXN0cnlcbiAgICAgICAgICAgIGNvbnN0IHVyaUdlbmVyYXRvciA9IGN0eC5leHRlcm5hbC51cmkgPz8gKChpZCkgPT4gaWQpO1xuICAgICAgICAgICAgaWYgKGV4dGVybmFsSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZWY6IHVyaUdlbmVyYXRvcihleHRlcm5hbElkKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBhZGQgdG8gX19zaGFyZWRcbiAgICAgICAgICAgIGNvbnN0IGlkID0gZW50cnlbMV0uZGVmSWQgPz8gZW50cnlbMV0uc2NoZW1hLmlkID8/IGBzY2hlbWEke2N0eC5jb3VudGVyKyt9YDtcbiAgICAgICAgICAgIGVudHJ5WzFdLmRlZklkID0gaWQ7IC8vIHNldCBkZWZJZCBzbyBpdCB3aWxsIGJlIHJldXNlZCBpZiBuZWVkZWRcbiAgICAgICAgICAgIHJldHVybiB7IGRlZklkOiBpZCwgcmVmOiBgJHt1cmlHZW5lcmF0b3IoXCJfX3NoYXJlZFwiKX0jLyR7ZGVmc1NlZ21lbnR9LyR7aWR9YCB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeVsxXSA9PT0gcm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVmOiBcIiNcIiB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIHNlbGYtY29udGFpbmVkIHNjaGVtYVxuICAgICAgICBjb25zdCB1cmlQcmVmaXggPSBgI2A7XG4gICAgICAgIGNvbnN0IGRlZlVyaVByZWZpeCA9IGAke3VyaVByZWZpeH0vJHtkZWZzU2VnbWVudH0vYDtcbiAgICAgICAgY29uc3QgZGVmSWQgPSBlbnRyeVsxXS5zY2hlbWEuaWQgPz8gYF9fc2NoZW1hJHtjdHguY291bnRlcisrfWA7XG4gICAgICAgIHJldHVybiB7IGRlZklkLCByZWY6IGRlZlVyaVByZWZpeCArIGRlZklkIH07XG4gICAgfTtcbiAgICAvLyBzdG9yZWQgY2FjaGVkIHZlcnNpb24gaW4gYGRlZmAgcHJvcGVydHlcbiAgICAvLyByZW1vdmUgYWxsIHByb3BlcnRpZXMsIHNldCAkcmVmXG4gICAgY29uc3QgZXh0cmFjdFRvRGVmID0gKGVudHJ5KSA9PiB7XG4gICAgICAgIC8vIGlmIHRoZSBzY2hlbWEgaXMgYWxyZWFkeSBhIHJlZmVyZW5jZSwgZG8gbm90IGV4dHJhY3QgaXRcbiAgICAgICAgaWYgKGVudHJ5WzFdLnNjaGVtYS4kcmVmKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VlbiA9IGVudHJ5WzFdO1xuICAgICAgICBjb25zdCB7IHJlZiwgZGVmSWQgfSA9IG1ha2VVUkkoZW50cnkpO1xuICAgICAgICBzZWVuLmRlZiA9IHsgLi4uc2Vlbi5zY2hlbWEgfTtcbiAgICAgICAgLy8gZGVmSWQgd29uJ3QgYmUgc2V0IGlmIHRoZSBzY2hlbWEgaXMgYSByZWZlcmVuY2UgdG8gYW4gZXh0ZXJuYWwgc2NoZW1hXG4gICAgICAgIC8vIG9yIGlmIHRoZSBzY2hlbWEgaXMgdGhlIHJvb3Qgc2NoZW1hXG4gICAgICAgIGlmIChkZWZJZClcbiAgICAgICAgICAgIHNlZW4uZGVmSWQgPSBkZWZJZDtcbiAgICAgICAgLy8gd2lwZSBhd2F5IGFsbCBwcm9wZXJ0aWVzIGV4Y2VwdCAkcmVmXG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHNlZW4uc2NoZW1hO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBzY2hlbWEuJHJlZiA9IHJlZjtcbiAgICB9O1xuICAgIC8vIHRocm93IG9uIGN5Y2xlc1xuICAgIC8vIGJyZWFrIGN5Y2xlc1xuICAgIGlmIChjdHguY3ljbGVzID09PSBcInRocm93XCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBjdHguc2Vlbi5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlZW4gPSBlbnRyeVsxXTtcbiAgICAgICAgICAgIGlmIChzZWVuLmN5Y2xlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ3ljbGUgZGV0ZWN0ZWQ6IFwiICtcbiAgICAgICAgICAgICAgICAgICAgYCMvJHtzZWVuLmN5Y2xlPy5qb2luKFwiL1wiKX0vPHJvb3Q+YCArXG4gICAgICAgICAgICAgICAgICAgICdcXG5cXG5TZXQgdGhlIGBjeWNsZXNgIHBhcmFtZXRlciB0byBgXCJyZWZcImAgdG8gcmVzb2x2ZSBjeWNsaWNhbCBzY2hlbWFzIHdpdGggZGVmcy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBleHRyYWN0IHNjaGVtYXMgaW50byAkZGVmc1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgY3R4LnNlZW4uZW50cmllcygpKSB7XG4gICAgICAgIGNvbnN0IHNlZW4gPSBlbnRyeVsxXTtcbiAgICAgICAgLy8gY29udmVydCByb290IHNjaGVtYSB0byAjICRyZWZcbiAgICAgICAgaWYgKHNjaGVtYSA9PT0gZW50cnlbMF0pIHtcbiAgICAgICAgICAgIGV4dHJhY3RUb0RlZihlbnRyeSk7IC8vIHRoaXMgaGFzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHRoZSByb290IHNjaGVtYVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXh0cmFjdCBzY2hlbWFzIHRoYXQgYXJlIGluIHRoZSBleHRlcm5hbCByZWdpc3RyeVxuICAgICAgICBpZiAoY3R4LmV4dGVybmFsKSB7XG4gICAgICAgICAgICBjb25zdCBleHQgPSBjdHguZXh0ZXJuYWwucmVnaXN0cnkuZ2V0KGVudHJ5WzBdKT8uaWQ7XG4gICAgICAgICAgICBpZiAoc2NoZW1hICE9PSBlbnRyeVswXSAmJiBleHQpIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0VG9EZWYoZW50cnkpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGV4dHJhY3Qgc2NoZW1hcyB3aXRoIGBpZGAgbWV0YVxuICAgICAgICBjb25zdCBpZCA9IGN0eC5tZXRhZGF0YVJlZ2lzdHJ5LmdldChlbnRyeVswXSk/LmlkO1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGV4dHJhY3RUb0RlZihlbnRyeSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBicmVhayBjeWNsZXNcbiAgICAgICAgaWYgKHNlZW4uY3ljbGUpIHtcbiAgICAgICAgICAgIC8vIGFueVxuICAgICAgICAgICAgZXh0cmFjdFRvRGVmKGVudHJ5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGV4dHJhY3QgcmV1c2VkIHNjaGVtYXNcbiAgICAgICAgaWYgKHNlZW4uY291bnQgPiAxKSB7XG4gICAgICAgICAgICBpZiAoY3R4LnJldXNlZCA9PT0gXCJyZWZcIikge1xuICAgICAgICAgICAgICAgIGV4dHJhY3RUb0RlZihlbnRyeSk7XG4gICAgICAgICAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQ6XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZmluYWxpemUoY3R4LCBzY2hlbWEpIHtcbiAgICBjb25zdCByb290ID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgaWYgKCFyb290KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnByb2Nlc3NlZCBzY2hlbWEuIFRoaXMgaXMgYSBidWcgaW4gWm9kLlwiKTtcbiAgICAvLyBmbGF0dGVuIHJlZnMgLSBpbmhlcml0IHByb3BlcnRpZXMgZnJvbSBwYXJlbnQgc2NoZW1hc1xuICAgIGNvbnN0IGZsYXR0ZW5SZWYgPSAoem9kU2NoZW1hKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoem9kU2NoZW1hKTtcbiAgICAgICAgLy8gYWxyZWFkeSBwcm9jZXNzZWRcbiAgICAgICAgaWYgKHNlZW4ucmVmID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBzZWVuLmRlZiA/PyBzZWVuLnNjaGVtYTtcbiAgICAgICAgY29uc3QgX2NhY2hlZCA9IHsgLi4uc2NoZW1hIH07XG4gICAgICAgIGNvbnN0IHJlZiA9IHNlZW4ucmVmO1xuICAgICAgICBzZWVuLnJlZiA9IG51bGw7IC8vIHByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uXG4gICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICAgIGZsYXR0ZW5SZWYocmVmKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZlNlZW4gPSBjdHguc2Vlbi5nZXQocmVmKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZlNjaGVtYSA9IHJlZlNlZW4uc2NoZW1hO1xuICAgICAgICAgICAgLy8gbWVyZ2UgcmVmZXJlbmNlZCBzY2hlbWEgaW50byBjdXJyZW50XG4gICAgICAgICAgICBpZiAocmVmU2NoZW1hLiRyZWYgJiYgKGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMDdcIiB8fCBjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTA0XCIgfHwgY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiKSkge1xuICAgICAgICAgICAgICAgIC8vIG9sZGVyIGRyYWZ0cyBjYW4ndCBjb21iaW5lICRyZWYgd2l0aCBvdGhlciBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgc2NoZW1hLmFsbE9mID0gc2NoZW1hLmFsbE9mID8/IFtdO1xuICAgICAgICAgICAgICAgIHNjaGVtYS5hbGxPZi5wdXNoKHJlZlNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwgcmVmU2NoZW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJlc3RvcmUgY2hpbGQncyBvd24gcHJvcGVydGllcyAoY2hpbGQgd2lucylcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCBfY2FjaGVkKTtcbiAgICAgICAgICAgIGNvbnN0IGlzUGFyZW50UmVmID0gem9kU2NoZW1hLl96b2QucGFyZW50ID09PSByZWY7XG4gICAgICAgICAgICAvLyBGb3IgcGFyZW50IGNoYWluLCBjaGlsZCBpcyBhIHJlZmluZW1lbnQgLSByZW1vdmUgcGFyZW50LW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgICAgaWYgKGlzUGFyZW50UmVmKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IFwiJHJlZlwiIHx8IGtleSA9PT0gXCJhbGxPZlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBfY2FjaGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYVtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2hlbiByZWYgd2FzIGV4dHJhY3RlZCB0byAkZGVmcywgcmVtb3ZlIHByb3BlcnRpZXMgdGhhdCBtYXRjaCB0aGUgZGVmaW5pdGlvblxuICAgICAgICAgICAgaWYgKHJlZlNjaGVtYS4kcmVmICYmIHJlZlNlZW4uZGVmKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IFwiJHJlZlwiIHx8IGtleSA9PT0gXCJhbGxPZlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gcmVmU2Vlbi5kZWYgJiYgSlNPTi5zdHJpbmdpZnkoc2NoZW1hW2tleV0pID09PSBKU09OLnN0cmluZ2lmeShyZWZTZWVuLmRlZltrZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYVtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHBhcmVudCB3YXMgZXh0cmFjdGVkIChoYXMgJHJlZiksIHByb3BhZ2F0ZSAkcmVmIHRvIHRoaXMgc2NoZW1hXG4gICAgICAgIC8vIFRoaXMgaGFuZGxlcyBjYXNlcyBsaWtlOiByZWFkb25seSgpLm1ldGEoe2lkfSkuZGVzY3JpYmUoKVxuICAgICAgICAvLyB3aGVyZSBwcm9jZXNzb3Igc2V0cyByZWYgdG8gaW5uZXJUeXBlIGJ1dCBwYXJlbnQgc2hvdWxkIGJlIHJlZmVyZW5jZWRcbiAgICAgICAgY29uc3QgcGFyZW50ID0gem9kU2NoZW1hLl96b2QucGFyZW50O1xuICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudCAhPT0gcmVmKSB7XG4gICAgICAgICAgICAvLyBFbnN1cmUgcGFyZW50IGlzIHByb2Nlc3NlZCBmaXJzdCBzbyBpdHMgZGVmIGhhcyBpbmhlcml0ZWQgcHJvcGVydGllc1xuICAgICAgICAgICAgZmxhdHRlblJlZihwYXJlbnQpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50U2VlbiA9IGN0eC5zZWVuLmdldChwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKHBhcmVudFNlZW4/LnNjaGVtYS4kcmVmKSB7XG4gICAgICAgICAgICAgICAgc2NoZW1hLiRyZWYgPSBwYXJlbnRTZWVuLnNjaGVtYS4kcmVmO1xuICAgICAgICAgICAgICAgIC8vIERlLWR1cGxpY2F0ZSB3aXRoIHBhcmVudCdzIGRlZmluaXRpb25cbiAgICAgICAgICAgICAgICBpZiAocGFyZW50U2Vlbi5kZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBcIiRyZWZcIiB8fCBrZXkgPT09IFwiYWxsT2ZcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gcGFyZW50U2Vlbi5kZWYgJiYgSlNPTi5zdHJpbmdpZnkoc2NoZW1hW2tleV0pID09PSBKU09OLnN0cmluZ2lmeShwYXJlbnRTZWVuLmRlZltrZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBleGVjdXRlIG92ZXJyaWRlc1xuICAgICAgICBjdHgub3ZlcnJpZGUoe1xuICAgICAgICAgICAgem9kU2NoZW1hOiB6b2RTY2hlbWEsXG4gICAgICAgICAgICBqc29uU2NoZW1hOiBzY2hlbWEsXG4gICAgICAgICAgICBwYXRoOiBzZWVuLnBhdGggPz8gW10sXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBbLi4uY3R4LnNlZW4uZW50cmllcygpXS5yZXZlcnNlKCkpIHtcbiAgICAgICAgZmxhdHRlblJlZihlbnRyeVswXSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIikge1xuICAgICAgICByZXN1bHQuJHNjaGVtYSA9IFwiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWFcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wN1wiKSB7XG4gICAgICAgIHJlc3VsdC4kc2NoZW1hID0gXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSNcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wNFwiKSB7XG4gICAgICAgIHJlc3VsdC4kc2NoZW1hID0gXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSNcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiKSB7XG4gICAgICAgIC8vIE9wZW5BUEkgMy4wIHNjaGVtYSBvYmplY3RzIHNob3VsZCBub3QgaW5jbHVkZSBhICRzY2hlbWEgcHJvcGVydHlcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIEFyYml0cmFyeSBzdHJpbmcgdmFsdWVzIGFyZSBhbGxvd2VkIGJ1dCB3b24ndCBoYXZlIGEgJHNjaGVtYSBwcm9wZXJ0eSBzZXRcbiAgICB9XG4gICAgaWYgKGN0eC5leHRlcm5hbD8udXJpKSB7XG4gICAgICAgIGNvbnN0IGlkID0gY3R4LmV4dGVybmFsLnJlZ2lzdHJ5LmdldChzY2hlbWEpPy5pZDtcbiAgICAgICAgaWYgKCFpZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNjaGVtYSBpcyBtaXNzaW5nIGFuIGBpZGAgcHJvcGVydHlcIik7XG4gICAgICAgIHJlc3VsdC4kaWQgPSBjdHguZXh0ZXJuYWwudXJpKGlkKTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHJvb3QuZGVmID8/IHJvb3Quc2NoZW1hKTtcbiAgICAvLyBUaGUgYGlkYCBpbiBgLm1ldGEoKWAgaXMgYSBab2Qtc3BlY2lmaWMgcmVnaXN0cmF0aW9uIHRhZyB1c2VkIHRvIGV4dHJhY3RcbiAgICAvLyBzY2hlbWFzIGludG8gJGRlZnMg4oCUIGl0IGlzIG5vdCB1c2VyLWZhY2luZyBKU09OIFNjaGVtYSBtZXRhZGF0YS4gU3RyaXAgaXRcbiAgICAvLyBmcm9tIHRoZSBvdXRwdXQgYm9keSB3aGVyZSBpdCB3b3VsZCBvdGhlcndpc2UgbGVhay4gVGhlIGlkIGlzIHByZXNlcnZlZFxuICAgIC8vIGltcGxpY2l0bHkgdmlhIHRoZSAkZGVmcyBrZXkgKGFuZCB2aWEgJHJlZiBwYXRocykuXG4gICAgY29uc3Qgcm9vdE1ldGFJZCA9IGN0eC5tZXRhZGF0YVJlZ2lzdHJ5LmdldChzY2hlbWEpPy5pZDtcbiAgICBpZiAocm9vdE1ldGFJZCAhPT0gdW5kZWZpbmVkICYmIHJlc3VsdC5pZCA9PT0gcm9vdE1ldGFJZClcbiAgICAgICAgZGVsZXRlIHJlc3VsdC5pZDtcbiAgICAvLyBidWlsZCBkZWZzIG9iamVjdFxuICAgIGNvbnN0IGRlZnMgPSBjdHguZXh0ZXJuYWw/LmRlZnMgPz8ge307XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBjdHguc2Vlbi5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3Qgc2VlbiA9IGVudHJ5WzFdO1xuICAgICAgICBpZiAoc2Vlbi5kZWYgJiYgc2Vlbi5kZWZJZCkge1xuICAgICAgICAgICAgaWYgKHNlZW4uZGVmLmlkID09PSBzZWVuLmRlZklkKVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWVuLmRlZi5pZDtcbiAgICAgICAgICAgIGRlZnNbc2Vlbi5kZWZJZF0gPSBzZWVuLmRlZjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzZXQgZGVmaW5pdGlvbnMgaW4gcmVzdWx0XG4gICAgaWYgKGN0eC5leHRlcm5hbCkge1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRlZnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC4kZGVmcyA9IGRlZnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZGVmaW5pdGlvbnMgPSBkZWZzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHRoaXMgXCJmaW5hbGl6ZXNcIiB0aGlzIHNjaGVtYSBhbmQgZW5zdXJlcyBhbGwgY3ljbGVzIGFyZSByZW1vdmVkXG4gICAgICAgIC8vIGVhY2ggY2FsbCB0byBmaW5hbGl6ZSgpIGlzIGZ1bmN0aW9uYWxseSBpbmRlcGVuZGVudFxuICAgICAgICAvLyB0aG91Z2ggdGhlIHNlZW4gbWFwIGlzIHNoYXJlZFxuICAgICAgICBjb25zdCBmaW5hbGl6ZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmluYWxpemVkLCBcIn5zdGFuZGFyZFwiLCB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYVtcIn5zdGFuZGFyZFwiXSxcbiAgICAgICAgICAgICAgICBqc29uU2NoZW1hOiB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiBjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2Qoc2NoZW1hLCBcImlucHV0XCIsIGN0eC5wcm9jZXNzb3JzKSxcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0OiBjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2Qoc2NoZW1hLCBcIm91dHB1dFwiLCBjdHgucHJvY2Vzc29ycyksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmaW5hbGl6ZWQ7XG4gICAgfVxuICAgIGNhdGNoIChfZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycm9yIGNvbnZlcnRpbmcgc2NoZW1hIHRvIEpTT04uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzVHJhbnNmb3JtaW5nKF9zY2hlbWEsIF9jdHgpIHtcbiAgICBjb25zdCBjdHggPSBfY3R4ID8/IHsgc2VlbjogbmV3IFNldCgpIH07XG4gICAgaWYgKGN0eC5zZWVuLmhhcyhfc2NoZW1hKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGN0eC5zZWVuLmFkZChfc2NoZW1hKTtcbiAgICBjb25zdCBkZWYgPSBfc2NoZW1hLl96b2QuZGVmO1xuICAgIGlmIChkZWYudHlwZSA9PT0gXCJ0cmFuc2Zvcm1cIilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKGRlZi50eXBlID09PSBcImFycmF5XCIpXG4gICAgICAgIHJldHVybiBpc1RyYW5zZm9ybWluZyhkZWYuZWxlbWVudCwgY3R4KTtcbiAgICBpZiAoZGVmLnR5cGUgPT09IFwic2V0XCIpXG4gICAgICAgIHJldHVybiBpc1RyYW5zZm9ybWluZyhkZWYudmFsdWVUeXBlLCBjdHgpO1xuICAgIGlmIChkZWYudHlwZSA9PT0gXCJsYXp5XCIpXG4gICAgICAgIHJldHVybiBpc1RyYW5zZm9ybWluZyhkZWYuZ2V0dGVyKCksIGN0eCk7XG4gICAgaWYgKGRlZi50eXBlID09PSBcInByb21pc2VcIiB8fFxuICAgICAgICBkZWYudHlwZSA9PT0gXCJvcHRpb25hbFwiIHx8XG4gICAgICAgIGRlZi50eXBlID09PSBcIm5vbm9wdGlvbmFsXCIgfHxcbiAgICAgICAgZGVmLnR5cGUgPT09IFwibnVsbGFibGVcIiB8fFxuICAgICAgICBkZWYudHlwZSA9PT0gXCJyZWFkb25seVwiIHx8XG4gICAgICAgIGRlZi50eXBlID09PSBcImRlZmF1bHRcIiB8fFxuICAgICAgICBkZWYudHlwZSA9PT0gXCJwcmVmYXVsdFwiKSB7XG4gICAgICAgIHJldHVybiBpc1RyYW5zZm9ybWluZyhkZWYuaW5uZXJUeXBlLCBjdHgpO1xuICAgIH1cbiAgICBpZiAoZGVmLnR5cGUgPT09IFwiaW50ZXJzZWN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGlzVHJhbnNmb3JtaW5nKGRlZi5sZWZ0LCBjdHgpIHx8IGlzVHJhbnNmb3JtaW5nKGRlZi5yaWdodCwgY3R4KTtcbiAgICB9XG4gICAgaWYgKGRlZi50eXBlID09PSBcInJlY29yZFwiIHx8IGRlZi50eXBlID09PSBcIm1hcFwiKSB7XG4gICAgICAgIHJldHVybiBpc1RyYW5zZm9ybWluZyhkZWYua2V5VHlwZSwgY3R4KSB8fCBpc1RyYW5zZm9ybWluZyhkZWYudmFsdWVUeXBlLCBjdHgpO1xuICAgIH1cbiAgICBpZiAoZGVmLnR5cGUgPT09IFwicGlwZVwiKSB7XG4gICAgICAgIGlmIChfc2NoZW1hLl96b2QudHJhaXRzLmhhcyhcIiRab2RDb2RlY1wiKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gaXNUcmFuc2Zvcm1pbmcoZGVmLmluLCBjdHgpIHx8IGlzVHJhbnNmb3JtaW5nKGRlZi5vdXQsIGN0eCk7XG4gICAgfVxuICAgIGlmIChkZWYudHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkZWYuc2hhcGUpIHtcbiAgICAgICAgICAgIGlmIChpc1RyYW5zZm9ybWluZyhkZWYuc2hhcGVba2V5XSwgY3R4KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChkZWYudHlwZSA9PT0gXCJ1bmlvblwiKSB7XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIGRlZi5vcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoaXNUcmFuc2Zvcm1pbmcob3B0aW9uLCBjdHgpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGRlZi50eXBlID09PSBcInR1cGxlXCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRlZi5pdGVtcykge1xuICAgICAgICAgICAgaWYgKGlzVHJhbnNmb3JtaW5nKGl0ZW0sIGN0eCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZi5yZXN0ICYmIGlzVHJhbnNmb3JtaW5nKGRlZi5yZXN0LCBjdHgpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgdG9KU09OU2NoZW1hIG1ldGhvZCBmb3IgYSBzY2hlbWEgaW5zdGFuY2UuXG4gKiBUaGlzIGVuY2Fwc3VsYXRlcyB0aGUgbG9naWMgb2YgaW5pdGlhbGl6aW5nIGNvbnRleHQsIHByb2Nlc3NpbmcsIGV4dHJhY3RpbmcgZGVmcywgYW5kIGZpbmFsaXppbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVUb0pTT05TY2hlbWFNZXRob2QgPSAoc2NoZW1hLCBwcm9jZXNzb3JzID0ge30pID0+IChwYXJhbXMpID0+IHtcbiAgICBjb25zdCBjdHggPSBpbml0aWFsaXplQ29udGV4dCh7IC4uLnBhcmFtcywgcHJvY2Vzc29ycyB9KTtcbiAgICBwcm9jZXNzKHNjaGVtYSwgY3R4KTtcbiAgICBleHRyYWN0RGVmcyhjdHgsIHNjaGVtYSk7XG4gICAgcmV0dXJuIGZpbmFsaXplKGN0eCwgc2NoZW1hKTtcbn07XG5leHBvcnQgY29uc3QgY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kID0gKHNjaGVtYSwgaW8sIHByb2Nlc3NvcnMgPSB7fSkgPT4gKHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IHsgbGlicmFyeU9wdGlvbnMsIHRhcmdldCB9ID0gcGFyYW1zID8/IHt9O1xuICAgIGNvbnN0IGN0eCA9IGluaXRpYWxpemVDb250ZXh0KHsgLi4uKGxpYnJhcnlPcHRpb25zID8/IHt9KSwgdGFyZ2V0LCBpbywgcHJvY2Vzc29ycyB9KTtcbiAgICBwcm9jZXNzKHNjaGVtYSwgY3R4KTtcbiAgICBleHRyYWN0RGVmcyhjdHgsIHNjaGVtYSk7XG4gICAgcmV0dXJuIGZpbmFsaXplKGN0eCwgc2NoZW1hKTtcbn07XG4iLCJpbXBvcnQgeyBleHRyYWN0RGVmcywgZmluYWxpemUsIGluaXRpYWxpemVDb250ZXh0LCBwcm9jZXNzLCB9IGZyb20gXCIuL3RvLWpzb24tc2NoZW1hLmpzXCI7XG5pbXBvcnQgeyBnZXRFbnVtVmFsdWVzIH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuY29uc3QgZm9ybWF0TWFwID0ge1xuICAgIGd1aWQ6IFwidXVpZFwiLFxuICAgIHVybDogXCJ1cmlcIixcbiAgICBkYXRldGltZTogXCJkYXRlLXRpbWVcIixcbiAgICBqc29uX3N0cmluZzogXCJqc29uLXN0cmluZ1wiLFxuICAgIHJlZ2V4OiBcIlwiLCAvLyBkbyBub3Qgc2V0XG59O1xuLy8gPT09PT09PT09PT09PT09PT09PT0gU0lNUExFIFRZUEUgUFJPQ0VTU09SUyA9PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IGNvbnN0IHN0cmluZ1Byb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBqc29uID0gX2pzb247XG4gICAganNvbi50eXBlID0gXCJzdHJpbmdcIjtcbiAgICBjb25zdCB7IG1pbmltdW0sIG1heGltdW0sIGZvcm1hdCwgcGF0dGVybnMsIGNvbnRlbnRFbmNvZGluZyB9ID0gc2NoZW1hLl96b2RcbiAgICAgICAgLmJhZztcbiAgICBpZiAodHlwZW9mIG1pbmltdW0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGpzb24ubWluTGVuZ3RoID0gbWluaW11bTtcbiAgICBpZiAodHlwZW9mIG1heGltdW0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGpzb24ubWF4TGVuZ3RoID0gbWF4aW11bTtcbiAgICAvLyBjdXN0b20gcGF0dGVybiBvdmVycmlkZXMgZm9ybWF0XG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgICBqc29uLmZvcm1hdCA9IGZvcm1hdE1hcFtmb3JtYXRdID8/IGZvcm1hdDtcbiAgICAgICAgaWYgKGpzb24uZm9ybWF0ID09PSBcIlwiKVxuICAgICAgICAgICAgZGVsZXRlIGpzb24uZm9ybWF0OyAvLyBlbXB0eSBmb3JtYXQgaXMgbm90IHZhbGlkXG4gICAgICAgIC8vIEpTT04gU2NoZW1hIGZvcm1hdDogXCJ0aW1lXCIgcmVxdWlyZXMgYSBmdWxsIHRpbWUgd2l0aCBvZmZzZXQgb3IgWlxuICAgICAgICAvLyB6Lmlzby50aW1lKCkgZG9lcyBub3QgaW5jbHVkZSB0aW1lem9uZSBpbmZvcm1hdGlvbiwgc28gZm9ybWF0OiBcInRpbWVcIiBzaG91bGQgbmV2ZXIgYmUgdXNlZFxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcInRpbWVcIikge1xuICAgICAgICAgICAgZGVsZXRlIGpzb24uZm9ybWF0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb250ZW50RW5jb2RpbmcpXG4gICAgICAgIGpzb24uY29udGVudEVuY29kaW5nID0gY29udGVudEVuY29kaW5nO1xuICAgIGlmIChwYXR0ZXJucyAmJiBwYXR0ZXJucy5zaXplID4gMCkge1xuICAgICAgICBjb25zdCByZWdleGVzID0gWy4uLnBhdHRlcm5zXTtcbiAgICAgICAgaWYgKHJlZ2V4ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAganNvbi5wYXR0ZXJuID0gcmVnZXhlc1swXS5zb3VyY2U7XG4gICAgICAgIGVsc2UgaWYgKHJlZ2V4ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAganNvbi5hbGxPZiA9IFtcbiAgICAgICAgICAgICAgICAuLi5yZWdleGVzLm1hcCgocmVnZXgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLihjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTA3XCIgfHwgY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wNFwiIHx8IGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyB7IHR5cGU6IFwic3RyaW5nXCIgfVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IHJlZ2V4LnNvdXJjZSxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBudW1iZXJQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgY29uc3QganNvbiA9IF9qc29uO1xuICAgIGNvbnN0IHsgbWluaW11bSwgbWF4aW11bSwgZm9ybWF0LCBtdWx0aXBsZU9mLCBleGNsdXNpdmVNYXhpbXVtLCBleGNsdXNpdmVNaW5pbXVtIH0gPSBzY2hlbWEuX3pvZC5iYWc7XG4gICAgaWYgKHR5cGVvZiBmb3JtYXQgPT09IFwic3RyaW5nXCIgJiYgZm9ybWF0LmluY2x1ZGVzKFwiaW50XCIpKVxuICAgICAgICBqc29uLnR5cGUgPSBcImludGVnZXJcIjtcbiAgICBlbHNlXG4gICAgICAgIGpzb24udHlwZSA9IFwibnVtYmVyXCI7XG4gICAgLy8gd2hlbiBib3RoIG1pbmltdW0gYW5kIGV4Y2x1c2l2ZU1pbmltdW0gZXhpc3QsIHBpY2sgdGhlIG1vcmUgcmVzdHJpY3RpdmUgb25lXG4gICAgY29uc3QgZXhNaW4gPSB0eXBlb2YgZXhjbHVzaXZlTWluaW11bSA9PT0gXCJudW1iZXJcIiAmJiBleGNsdXNpdmVNaW5pbXVtID49IChtaW5pbXVtID8/IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7XG4gICAgY29uc3QgZXhNYXggPSB0eXBlb2YgZXhjbHVzaXZlTWF4aW11bSA9PT0gXCJudW1iZXJcIiAmJiBleGNsdXNpdmVNYXhpbXVtIDw9IChtYXhpbXVtID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgY29uc3QgbGVnYWN5ID0gY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wNFwiIHx8IGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIjtcbiAgICBpZiAoZXhNaW4pIHtcbiAgICAgICAgaWYgKGxlZ2FjeSkge1xuICAgICAgICAgICAganNvbi5taW5pbXVtID0gZXhjbHVzaXZlTWluaW11bTtcbiAgICAgICAgICAgIGpzb24uZXhjbHVzaXZlTWluaW11bSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBqc29uLmV4Y2x1c2l2ZU1pbmltdW0gPSBleGNsdXNpdmVNaW5pbXVtO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBtaW5pbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGpzb24ubWluaW11bSA9IG1pbmltdW07XG4gICAgfVxuICAgIGlmIChleE1heCkge1xuICAgICAgICBpZiAobGVnYWN5KSB7XG4gICAgICAgICAgICBqc29uLm1heGltdW0gPSBleGNsdXNpdmVNYXhpbXVtO1xuICAgICAgICAgICAganNvbi5leGNsdXNpdmVNYXhpbXVtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGpzb24uZXhjbHVzaXZlTWF4aW11bSA9IGV4Y2x1c2l2ZU1heGltdW07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG1heGltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAganNvbi5tYXhpbXVtID0gbWF4aW11bTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBtdWx0aXBsZU9mID09PSBcIm51bWJlclwiKVxuICAgICAgICBqc29uLm11bHRpcGxlT2YgPSBtdWx0aXBsZU9mO1xufTtcbmV4cG9ydCBjb25zdCBib29sZWFuUHJvY2Vzc29yID0gKF9zY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBqc29uLnR5cGUgPSBcImJvb2xlYW5cIjtcbn07XG5leHBvcnQgY29uc3QgYmlnaW50UHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJpZ0ludCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBzeW1ib2xQcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3ltYm9scyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBudWxsUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwganNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudGFyZ2V0ID09PSBcIm9wZW5hcGktMy4wXCIpIHtcbiAgICAgICAganNvbi50eXBlID0gXCJzdHJpbmdcIjtcbiAgICAgICAganNvbi5udWxsYWJsZSA9IHRydWU7XG4gICAgICAgIGpzb24uZW51bSA9IFtudWxsXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGpzb24udHlwZSA9IFwibnVsbFwiO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgdW5kZWZpbmVkUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZGVmaW5lZCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCB2b2lkUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlZvaWQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgbmV2ZXJQcm9jZXNzb3IgPSAoX3NjaGVtYSwgX2N0eCwganNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGpzb24ubm90ID0ge307XG59O1xuZXhwb3J0IGNvbnN0IGFueVByb2Nlc3NvciA9IChfc2NoZW1hLCBfY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIC8vIGVtcHR5IHNjaGVtYSBhY2NlcHRzIGFueXRoaW5nXG59O1xuZXhwb3J0IGNvbnN0IHVua25vd25Qcm9jZXNzb3IgPSAoX3NjaGVtYSwgX2N0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICAvLyBlbXB0eSBzY2hlbWEgYWNjZXB0cyBhbnl0aGluZ1xufTtcbmV4cG9ydCBjb25zdCBkYXRlUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRhdGUgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgZW51bVByb2Nlc3NvciA9IChzY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgdmFsdWVzID0gZ2V0RW51bVZhbHVlcyhkZWYuZW50cmllcyk7XG4gICAgLy8gTnVtYmVyIGVudW1zIGNhbiBoYXZlIGJvdGggc3RyaW5nIGFuZCBudW1iZXIgdmFsdWVzXG4gICAgaWYgKHZhbHVlcy5ldmVyeSgodikgPT4gdHlwZW9mIHYgPT09IFwibnVtYmVyXCIpKVxuICAgICAgICBqc29uLnR5cGUgPSBcIm51bWJlclwiO1xuICAgIGlmICh2YWx1ZXMuZXZlcnkoKHYpID0+IHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSlcbiAgICAgICAganNvbi50eXBlID0gXCJzdHJpbmdcIjtcbiAgICBqc29uLmVudW0gPSB2YWx1ZXM7XG59O1xuZXhwb3J0IGNvbnN0IGxpdGVyYWxQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgdmFscyA9IFtdO1xuICAgIGZvciAoY29uc3QgdmFsIG9mIGRlZi52YWx1ZXMpIHtcbiAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTGl0ZXJhbCBgdW5kZWZpbmVkYCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkbyBub3QgYWRkIHRvIHZhbHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsID09PSBcImJpZ2ludFwiKSB7XG4gICAgICAgICAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmlnSW50IGxpdGVyYWxzIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHMucHVzaChOdW1iZXIodmFsKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YWxzLnB1c2godmFsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodmFscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gZG8gbm90aGluZyAoYW4gdW5kZWZpbmVkIGxpdGVyYWwgd2FzIHN0cmlwcGVkKVxuICAgIH1cbiAgICBlbHNlIGlmICh2YWxzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCB2YWwgPSB2YWxzWzBdO1xuICAgICAgICBqc29uLnR5cGUgPSB2YWwgPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiB2YWw7XG4gICAgICAgIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTA0XCIgfHwgY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiKSB7XG4gICAgICAgICAgICBqc29uLmVudW0gPSBbdmFsXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGpzb24uY29uc3QgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICh2YWxzLmV2ZXJ5KCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikpXG4gICAgICAgICAgICBqc29uLnR5cGUgPSBcIm51bWJlclwiO1xuICAgICAgICBpZiAodmFscy5ldmVyeSgodikgPT4gdHlwZW9mIHYgPT09IFwic3RyaW5nXCIpKVxuICAgICAgICAgICAganNvbi50eXBlID0gXCJzdHJpbmdcIjtcbiAgICAgICAgaWYgKHZhbHMuZXZlcnkoKHYpID0+IHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIikpXG4gICAgICAgICAgICBqc29uLnR5cGUgPSBcImJvb2xlYW5cIjtcbiAgICAgICAgaWYgKHZhbHMuZXZlcnkoKHYpID0+IHYgPT09IG51bGwpKVxuICAgICAgICAgICAganNvbi50eXBlID0gXCJudWxsXCI7XG4gICAgICAgIGpzb24uZW51bSA9IHZhbHM7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBuYW5Qcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTmFOIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHRlbXBsYXRlTGl0ZXJhbFByb2Nlc3NvciA9IChzY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBfanNvbiA9IGpzb247XG4gICAgY29uc3QgcGF0dGVybiA9IHNjaGVtYS5fem9kLnBhdHRlcm47XG4gICAgaWYgKCFwYXR0ZXJuKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXR0ZXJuIG5vdCBmb3VuZCBpbiB0ZW1wbGF0ZSBsaXRlcmFsXCIpO1xuICAgIF9qc29uLnR5cGUgPSBcInN0cmluZ1wiO1xuICAgIF9qc29uLnBhdHRlcm4gPSBwYXR0ZXJuLnNvdXJjZTtcbn07XG5leHBvcnQgY29uc3QgZmlsZVByb2Nlc3NvciA9IChzY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBfanNvbiA9IGpzb247XG4gICAgY29uc3QgZmlsZSA9IHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImJpbmFyeVwiLFxuICAgICAgICBjb250ZW50RW5jb2Rpbmc6IFwiYmluYXJ5XCIsXG4gICAgfTtcbiAgICBjb25zdCB7IG1pbmltdW0sIG1heGltdW0sIG1pbWUgfSA9IHNjaGVtYS5fem9kLmJhZztcbiAgICBpZiAobWluaW11bSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBmaWxlLm1pbkxlbmd0aCA9IG1pbmltdW07XG4gICAgaWYgKG1heGltdW0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgZmlsZS5tYXhMZW5ndGggPSBtYXhpbXVtO1xuICAgIGlmIChtaW1lKSB7XG4gICAgICAgIGlmIChtaW1lLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZmlsZS5jb250ZW50TWVkaWFUeXBlID0gbWltZVswXTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2pzb24sIGZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihfanNvbiwgZmlsZSk7IC8vIHNoYXJlZCBwcm9wcyBhdCByb290XG4gICAgICAgICAgICBfanNvbi5hbnlPZiA9IG1pbWUubWFwKChtKSA9PiAoeyBjb250ZW50TWVkaWFUeXBlOiBtIH0pKTsgLy8gb25seSBjb250ZW50TWVkaWFUeXBlIGRpZmZlcnNcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihfanNvbiwgZmlsZSk7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBzdWNjZXNzUHJvY2Vzc29yID0gKF9zY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBqc29uLnR5cGUgPSBcImJvb2xlYW5cIjtcbn07XG5leHBvcnQgY29uc3QgY3VzdG9tUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkN1c3RvbSB0eXBlcyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBmdW5jdGlvblByb2Nlc3NvciA9IChfc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgaWYgKGN0eC51bnJlcHJlc2VudGFibGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGdW5jdGlvbiB0eXBlcyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Qcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJhbnNmb3JtcyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBtYXBQcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWFwIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHNldFByb2Nlc3NvciA9IChfc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgaWYgKGN0eC51bnJlcHJlc2VudGFibGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgIH1cbn07XG4vLyA9PT09PT09PT09PT09PT09PT09PSBDT01QT1NJVEUgVFlQRSBQUk9DRVNTT1JTID09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgY29uc3QgYXJyYXlQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBqc29uID0gX2pzb247XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIGNvbnN0IHsgbWluaW11bSwgbWF4aW11bSB9ID0gc2NoZW1hLl96b2QuYmFnO1xuICAgIGlmICh0eXBlb2YgbWluaW11bSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAganNvbi5taW5JdGVtcyA9IG1pbmltdW07XG4gICAgaWYgKHR5cGVvZiBtYXhpbXVtID09PSBcIm51bWJlclwiKVxuICAgICAgICBqc29uLm1heEl0ZW1zID0gbWF4aW11bTtcbiAgICBqc29uLnR5cGUgPSBcImFycmF5XCI7XG4gICAganNvbi5pdGVtcyA9IHByb2Nlc3MoZGVmLmVsZW1lbnQsIGN0eCwge1xuICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIHBhdGg6IFsuLi5wYXJhbXMucGF0aCwgXCJpdGVtc1wiXSxcbiAgICB9KTtcbn07XG5leHBvcnQgY29uc3Qgb2JqZWN0UHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QganNvbiA9IF9qc29uO1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBqc29uLnR5cGUgPSBcIm9iamVjdFwiO1xuICAgIGpzb24ucHJvcGVydGllcyA9IHt9O1xuICAgIGNvbnN0IHNoYXBlID0gZGVmLnNoYXBlO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNoYXBlKSB7XG4gICAgICAgIGpzb24ucHJvcGVydGllc1trZXldID0gcHJvY2VzcyhzaGFwZVtrZXldLCBjdHgsIHtcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgIHBhdGg6IFsuLi5wYXJhbXMucGF0aCwgXCJwcm9wZXJ0aWVzXCIsIGtleV0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyByZXF1aXJlZCBrZXlzXG4gICAgY29uc3QgYWxsS2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMoc2hhcGUpKTtcbiAgICBjb25zdCByZXF1aXJlZEtleXMgPSBuZXcgU2V0KFsuLi5hbGxLZXlzXS5maWx0ZXIoKGtleSkgPT4ge1xuICAgICAgICBjb25zdCB2ID0gZGVmLnNoYXBlW2tleV0uX3pvZDtcbiAgICAgICAgaWYgKGN0eC5pbyA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdi5vcHRpbiA9PT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHYub3B0b3V0ID09PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgaWYgKHJlcXVpcmVkS2V5cy5zaXplID4gMCkge1xuICAgICAgICBqc29uLnJlcXVpcmVkID0gQXJyYXkuZnJvbShyZXF1aXJlZEtleXMpO1xuICAgIH1cbiAgICAvLyBjYXRjaGFsbFxuICAgIGlmIChkZWYuY2F0Y2hhbGw/Ll96b2QuZGVmLnR5cGUgPT09IFwibmV2ZXJcIikge1xuICAgICAgICAvLyBzdHJpY3RcbiAgICAgICAganNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmICghZGVmLmNhdGNoYWxsKSB7XG4gICAgICAgIC8vIHJlZ3VsYXJcbiAgICAgICAgaWYgKGN0eC5pbyA9PT0gXCJvdXRwdXRcIilcbiAgICAgICAgICAgIGpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGVmLmNhdGNoYWxsKSB7XG4gICAgICAgIGpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMgPSBwcm9jZXNzKGRlZi5jYXRjaGFsbCwgY3R4LCB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIl0sXG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgdW5pb25Qcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICAvLyBFeGNsdXNpdmUgdW5pb25zIChpbmNsdXNpdmUgPT09IGZhbHNlKSB1c2Ugb25lT2YgKGV4YWN0bHkgb25lIG1hdGNoKSBpbnN0ZWFkIG9mIGFueU9mIChvbmUgb3IgbW9yZSBtYXRjaGVzKVxuICAgIC8vIFRoaXMgaW5jbHVkZXMgYm90aCB6LnhvcigpIGFuZCBkaXNjcmltaW5hdGVkIHVuaW9uc1xuICAgIGNvbnN0IGlzRXhjbHVzaXZlID0gZGVmLmluY2x1c2l2ZSA9PT0gZmFsc2U7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGRlZi5vcHRpb25zLm1hcCgoeCwgaSkgPT4gcHJvY2Vzcyh4LCBjdHgsIHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIGlzRXhjbHVzaXZlID8gXCJvbmVPZlwiIDogXCJhbnlPZlwiLCBpXSxcbiAgICB9KSk7XG4gICAgaWYgKGlzRXhjbHVzaXZlKSB7XG4gICAgICAgIGpzb24ub25lT2YgPSBvcHRpb25zO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAganNvbi5hbnlPZiA9IG9wdGlvbnM7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBpbnRlcnNlY3Rpb25Qcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBjb25zdCBhID0gcHJvY2VzcyhkZWYubGVmdCwgY3R4LCB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgcGF0aDogWy4uLnBhcmFtcy5wYXRoLCBcImFsbE9mXCIsIDBdLFxuICAgIH0pO1xuICAgIGNvbnN0IGIgPSBwcm9jZXNzKGRlZi5yaWdodCwgY3R4LCB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgcGF0aDogWy4uLnBhcmFtcy5wYXRoLCBcImFsbE9mXCIsIDFdLFxuICAgIH0pO1xuICAgIGNvbnN0IGlzU2ltcGxlSW50ZXJzZWN0aW9uID0gKHZhbCkgPT4gXCJhbGxPZlwiIGluIHZhbCAmJiBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMTtcbiAgICBjb25zdCBhbGxPZiA9IFtcbiAgICAgICAgLi4uKGlzU2ltcGxlSW50ZXJzZWN0aW9uKGEpID8gYS5hbGxPZiA6IFthXSksXG4gICAgICAgIC4uLihpc1NpbXBsZUludGVyc2VjdGlvbihiKSA/IGIuYWxsT2YgOiBbYl0pLFxuICAgIF07XG4gICAganNvbi5hbGxPZiA9IGFsbE9mO1xufTtcbmV4cG9ydCBjb25zdCB0dXBsZVByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBfanNvbjtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAganNvbi50eXBlID0gXCJhcnJheVwiO1xuICAgIGNvbnN0IHByZWZpeFBhdGggPSBjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIiA/IFwicHJlZml4SXRlbXNcIiA6IFwiaXRlbXNcIjtcbiAgICBjb25zdCByZXN0UGF0aCA9IGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiID8gXCJpdGVtc1wiIDogY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiID8gXCJpdGVtc1wiIDogXCJhZGRpdGlvbmFsSXRlbXNcIjtcbiAgICBjb25zdCBwcmVmaXhJdGVtcyA9IGRlZi5pdGVtcy5tYXAoKHgsIGkpID0+IHByb2Nlc3MoeCwgY3R4LCB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgcGF0aDogWy4uLnBhcmFtcy5wYXRoLCBwcmVmaXhQYXRoLCBpXSxcbiAgICB9KSk7XG4gICAgY29uc3QgcmVzdCA9IGRlZi5yZXN0XG4gICAgICAgID8gcHJvY2VzcyhkZWYucmVzdCwgY3R4LCB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIHJlc3RQYXRoLCAuLi4oY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiID8gW2RlZi5pdGVtcy5sZW5ndGhdIDogW10pXSxcbiAgICAgICAgfSlcbiAgICAgICAgOiBudWxsO1xuICAgIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIikge1xuICAgICAgICBqc29uLnByZWZpeEl0ZW1zID0gcHJlZml4SXRlbXM7XG4gICAgICAgIGlmIChyZXN0KSB7XG4gICAgICAgICAgICBqc29uLml0ZW1zID0gcmVzdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChjdHgudGFyZ2V0ID09PSBcIm9wZW5hcGktMy4wXCIpIHtcbiAgICAgICAganNvbi5pdGVtcyA9IHtcbiAgICAgICAgICAgIGFueU9mOiBwcmVmaXhJdGVtcyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgIGpzb24uaXRlbXMuYW55T2YucHVzaChyZXN0KTtcbiAgICAgICAgfVxuICAgICAgICBqc29uLm1pbkl0ZW1zID0gcHJlZml4SXRlbXMubGVuZ3RoO1xuICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgIGpzb24ubWF4SXRlbXMgPSBwcmVmaXhJdGVtcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGpzb24uaXRlbXMgPSBwcmVmaXhJdGVtcztcbiAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgIGpzb24uYWRkaXRpb25hbEl0ZW1zID0gcmVzdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBsZW5ndGhcbiAgICBjb25zdCB7IG1pbmltdW0sIG1heGltdW0gfSA9IHNjaGVtYS5fem9kLmJhZztcbiAgICBpZiAodHlwZW9mIG1pbmltdW0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGpzb24ubWluSXRlbXMgPSBtaW5pbXVtO1xuICAgIGlmICh0eXBlb2YgbWF4aW11bSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAganNvbi5tYXhJdGVtcyA9IG1heGltdW07XG59O1xuZXhwb3J0IGNvbnN0IHJlY29yZFByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBfanNvbjtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAganNvbi50eXBlID0gXCJvYmplY3RcIjtcbiAgICAvLyBGb3IgbG9vc2VSZWNvcmQgd2l0aCByZWdleCBwYXR0ZXJucywgdXNlIHBhdHRlcm5Qcm9wZXJ0aWVzXG4gICAgLy8gVGhpcyBjb3JyZWN0bHkgcmVwcmVzZW50cyBcIm9ubHkgdmFsaWRhdGUga2V5cyBtYXRjaGluZyB0aGUgcGF0dGVyblwiIHNlbWFudGljc1xuICAgIC8vIGFuZCBjb21wb3NlcyB3ZWxsIHdpdGggYWxsT2YgKGludGVyc2VjdGlvbnMpXG4gICAgY29uc3Qga2V5VHlwZSA9IGRlZi5rZXlUeXBlO1xuICAgIGNvbnN0IGtleUJhZyA9IGtleVR5cGUuX3pvZC5iYWc7XG4gICAgY29uc3QgcGF0dGVybnMgPSBrZXlCYWc/LnBhdHRlcm5zO1xuICAgIGlmIChkZWYubW9kZSA9PT0gXCJsb29zZVwiICYmIHBhdHRlcm5zICYmIHBhdHRlcm5zLnNpemUgPiAwKSB7XG4gICAgICAgIC8vIFVzZSBwYXR0ZXJuUHJvcGVydGllcyBmb3IgbG9vc2VSZWNvcmQgd2l0aCByZWdleCBwYXR0ZXJuc1xuICAgICAgICBjb25zdCB2YWx1ZVNjaGVtYSA9IHByb2Nlc3MoZGVmLnZhbHVlVHlwZSwgY3R4LCB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIFwicGF0dGVyblByb3BlcnRpZXNcIiwgXCIqXCJdLFxuICAgICAgICB9KTtcbiAgICAgICAganNvbi5wYXR0ZXJuUHJvcGVydGllcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgIGpzb24ucGF0dGVyblByb3BlcnRpZXNbcGF0dGVybi5zb3VyY2VdID0gdmFsdWVTY2hlbWE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIERlZmF1bHQgYmVoYXZpb3I6IHVzZSBwcm9wZXJ0eU5hbWVzICsgYWRkaXRpb25hbFByb3BlcnRpZXNcbiAgICAgICAgaWYgKGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMDdcIiB8fCBjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIikge1xuICAgICAgICAgICAganNvbi5wcm9wZXJ0eU5hbWVzID0gcHJvY2VzcyhkZWYua2V5VHlwZSwgY3R4LCB7XG4gICAgICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgICAgICAgIHBhdGg6IFsuLi5wYXJhbXMucGF0aCwgXCJwcm9wZXJ0eU5hbWVzXCJdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAganNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyA9IHByb2Nlc3MoZGVmLnZhbHVlVHlwZSwgY3R4LCB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIl0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBBZGQgcmVxdWlyZWQgZm9yIGtleXMgd2l0aCBkaXNjcmV0ZSB2YWx1ZXMgKGVudW0sIGxpdGVyYWwsIGV0Yy4pXG4gICAgY29uc3Qga2V5VmFsdWVzID0ga2V5VHlwZS5fem9kLnZhbHVlcztcbiAgICBpZiAoa2V5VmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkS2V5VmFsdWVzID0gWy4uLmtleVZhbHVlc10uZmlsdGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdiA9PT0gXCJudW1iZXJcIik7XG4gICAgICAgIGlmICh2YWxpZEtleVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBqc29uLnJlcXVpcmVkID0gdmFsaWRLZXlWYWx1ZXM7XG4gICAgICAgIH1cbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IG51bGxhYmxlUHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBqc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgaW5uZXIgPSBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgaWYgKGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIikge1xuICAgICAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG4gICAgICAgIGpzb24ubnVsbGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAganNvbi5hbnlPZiA9IFtpbm5lciwgeyB0eXBlOiBcIm51bGxcIiB9XTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IG5vbm9wdGlvbmFsUHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIHByb2Nlc3MoZGVmLmlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG59O1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBkZWYuaW5uZXJUeXBlO1xuICAgIGpzb24uZGVmYXVsdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmLmRlZmF1bHRWYWx1ZSkpO1xufTtcbmV4cG9ydCBjb25zdCBwcmVmYXVsdFByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwganNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIHByb2Nlc3MoZGVmLmlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG4gICAgaWYgKGN0eC5pbyA9PT0gXCJpbnB1dFwiKVxuICAgICAgICBqc29uLl9wcmVmYXVsdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmLmRlZmF1bHRWYWx1ZSkpO1xufTtcbmV4cG9ydCBjb25zdCBjYXRjaFByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwganNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIHByb2Nlc3MoZGVmLmlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG4gICAgbGV0IGNhdGNoVmFsdWU7XG4gICAgdHJ5IHtcbiAgICAgICAgY2F0Y2hWYWx1ZSA9IGRlZi5jYXRjaFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRHluYW1pYyBjYXRjaCB2YWx1ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxuICAgIGpzb24uZGVmYXVsdCA9IGNhdGNoVmFsdWU7XG59O1xuZXhwb3J0IGNvbnN0IHBpcGVQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgaW5Jc1RyYW5zZm9ybSA9IGRlZi5pbi5fem9kLnRyYWl0cy5oYXMoXCIkWm9kVHJhbnNmb3JtXCIpO1xuICAgIGNvbnN0IGlubmVyVHlwZSA9IGN0eC5pbyA9PT0gXCJpbnB1dFwiID8gKGluSXNUcmFuc2Zvcm0gPyBkZWYub3V0IDogZGVmLmluKSA6IGRlZi5vdXQ7XG4gICAgcHJvY2Vzcyhpbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBpbm5lclR5cGU7XG59O1xuZXhwb3J0IGNvbnN0IHJlYWRvbmx5UHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBqc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgcHJvY2VzcyhkZWYuaW5uZXJUeXBlLCBjdHgsIHBhcmFtcyk7XG4gICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIHNlZW4ucmVmID0gZGVmLmlubmVyVHlwZTtcbiAgICBqc29uLnJlYWRPbmx5ID0gdHJ1ZTtcbn07XG5leHBvcnQgY29uc3QgcHJvbWlzZVByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBkZWYuaW5uZXJUeXBlO1xufTtcbmV4cG9ydCBjb25zdCBvcHRpb25hbFByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBkZWYuaW5uZXJUeXBlO1xufTtcbmV4cG9ydCBjb25zdCBsYXp5UHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgaW5uZXJUeXBlID0gc2NoZW1hLl96b2QuaW5uZXJUeXBlO1xuICAgIHByb2Nlc3MoaW5uZXJUeXBlLCBjdHgsIHBhcmFtcyk7XG4gICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIHNlZW4ucmVmID0gaW5uZXJUeXBlO1xufTtcbi8vID09PT09PT09PT09PT09PT09PT09IEFMTCBQUk9DRVNTT1JTID09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgY29uc3QgYWxsUHJvY2Vzc29ycyA9IHtcbiAgICBzdHJpbmc6IHN0cmluZ1Byb2Nlc3NvcixcbiAgICBudW1iZXI6IG51bWJlclByb2Nlc3NvcixcbiAgICBib29sZWFuOiBib29sZWFuUHJvY2Vzc29yLFxuICAgIGJpZ2ludDogYmlnaW50UHJvY2Vzc29yLFxuICAgIHN5bWJvbDogc3ltYm9sUHJvY2Vzc29yLFxuICAgIG51bGw6IG51bGxQcm9jZXNzb3IsXG4gICAgdW5kZWZpbmVkOiB1bmRlZmluZWRQcm9jZXNzb3IsXG4gICAgdm9pZDogdm9pZFByb2Nlc3NvcixcbiAgICBuZXZlcjogbmV2ZXJQcm9jZXNzb3IsXG4gICAgYW55OiBhbnlQcm9jZXNzb3IsXG4gICAgdW5rbm93bjogdW5rbm93blByb2Nlc3NvcixcbiAgICBkYXRlOiBkYXRlUHJvY2Vzc29yLFxuICAgIGVudW06IGVudW1Qcm9jZXNzb3IsXG4gICAgbGl0ZXJhbDogbGl0ZXJhbFByb2Nlc3NvcixcbiAgICBuYW46IG5hblByb2Nlc3NvcixcbiAgICB0ZW1wbGF0ZV9saXRlcmFsOiB0ZW1wbGF0ZUxpdGVyYWxQcm9jZXNzb3IsXG4gICAgZmlsZTogZmlsZVByb2Nlc3NvcixcbiAgICBzdWNjZXNzOiBzdWNjZXNzUHJvY2Vzc29yLFxuICAgIGN1c3RvbTogY3VzdG9tUHJvY2Vzc29yLFxuICAgIGZ1bmN0aW9uOiBmdW5jdGlvblByb2Nlc3NvcixcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybVByb2Nlc3NvcixcbiAgICBtYXA6IG1hcFByb2Nlc3NvcixcbiAgICBzZXQ6IHNldFByb2Nlc3NvcixcbiAgICBhcnJheTogYXJyYXlQcm9jZXNzb3IsXG4gICAgb2JqZWN0OiBvYmplY3RQcm9jZXNzb3IsXG4gICAgdW5pb246IHVuaW9uUHJvY2Vzc29yLFxuICAgIGludGVyc2VjdGlvbjogaW50ZXJzZWN0aW9uUHJvY2Vzc29yLFxuICAgIHR1cGxlOiB0dXBsZVByb2Nlc3NvcixcbiAgICByZWNvcmQ6IHJlY29yZFByb2Nlc3NvcixcbiAgICBudWxsYWJsZTogbnVsbGFibGVQcm9jZXNzb3IsXG4gICAgbm9ub3B0aW9uYWw6IG5vbm9wdGlvbmFsUHJvY2Vzc29yLFxuICAgIGRlZmF1bHQ6IGRlZmF1bHRQcm9jZXNzb3IsXG4gICAgcHJlZmF1bHQ6IHByZWZhdWx0UHJvY2Vzc29yLFxuICAgIGNhdGNoOiBjYXRjaFByb2Nlc3NvcixcbiAgICBwaXBlOiBwaXBlUHJvY2Vzc29yLFxuICAgIHJlYWRvbmx5OiByZWFkb25seVByb2Nlc3NvcixcbiAgICBwcm9taXNlOiBwcm9taXNlUHJvY2Vzc29yLFxuICAgIG9wdGlvbmFsOiBvcHRpb25hbFByb2Nlc3NvcixcbiAgICBsYXp5OiBsYXp5UHJvY2Vzc29yLFxufTtcbmV4cG9ydCBmdW5jdGlvbiB0b0pTT05TY2hlbWEoaW5wdXQsIHBhcmFtcykge1xuICAgIGlmIChcIl9pZG1hcFwiIGluIGlucHV0KSB7XG4gICAgICAgIC8vIFJlZ2lzdHJ5IGNhc2VcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBpbnB1dDtcbiAgICAgICAgY29uc3QgY3R4ID0gaW5pdGlhbGl6ZUNvbnRleHQoeyAuLi5wYXJhbXMsIHByb2Nlc3NvcnM6IGFsbFByb2Nlc3NvcnMgfSk7XG4gICAgICAgIGNvbnN0IGRlZnMgPSB7fTtcbiAgICAgICAgLy8gRmlyc3QgcGFzczogcHJvY2VzcyBhbGwgc2NoZW1hcyB0byBidWlsZCB0aGUgc2VlbiBtYXBcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWdpc3RyeS5faWRtYXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICBjb25zdCBbXywgc2NoZW1hXSA9IGVudHJ5O1xuICAgICAgICAgICAgcHJvY2VzcyhzY2hlbWEsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NoZW1hcyA9IHt9O1xuICAgICAgICBjb25zdCBleHRlcm5hbCA9IHtcbiAgICAgICAgICAgIHJlZ2lzdHJ5LFxuICAgICAgICAgICAgdXJpOiBwYXJhbXM/LnVyaSxcbiAgICAgICAgICAgIGRlZnMsXG4gICAgICAgIH07XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgY29udGV4dCB3aXRoIGV4dGVybmFsIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY3R4LmV4dGVybmFsID0gZXh0ZXJuYWw7XG4gICAgICAgIC8vIFNlY29uZCBwYXNzOiBlbWl0IGVhY2ggc2NoZW1hXG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVnaXN0cnkuX2lkbWFwLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgW2tleSwgc2NoZW1hXSA9IGVudHJ5O1xuICAgICAgICAgICAgZXh0cmFjdERlZnMoY3R4LCBzY2hlbWEpO1xuICAgICAgICAgICAgc2NoZW1hc1trZXldID0gZmluYWxpemUoY3R4LCBzY2hlbWEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhkZWZzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZzU2VnbWVudCA9IGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiID8gXCIkZGVmc1wiIDogXCJkZWZpbml0aW9uc1wiO1xuICAgICAgICAgICAgc2NoZW1hcy5fX3NoYXJlZCA9IHtcbiAgICAgICAgICAgICAgICBbZGVmc1NlZ21lbnRdOiBkZWZzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzY2hlbWFzIH07XG4gICAgfVxuICAgIC8vIFNpbmdsZSBzY2hlbWEgY2FzZVxuICAgIGNvbnN0IGN0eCA9IGluaXRpYWxpemVDb250ZXh0KHsgLi4ucGFyYW1zLCBwcm9jZXNzb3JzOiBhbGxQcm9jZXNzb3JzIH0pO1xuICAgIHByb2Nlc3MoaW5wdXQsIGN0eCk7XG4gICAgZXh0cmFjdERlZnMoY3R4LCBpbnB1dCk7XG4gICAgcmV0dXJuIGZpbmFsaXplKGN0eCwgaW5wdXQpO1xufVxuIiwiZXhwb3J0IHsgX2x0IGFzIGx0LCBfbHRlIGFzIGx0ZSwgX2d0IGFzIGd0LCBfZ3RlIGFzIGd0ZSwgX3Bvc2l0aXZlIGFzIHBvc2l0aXZlLCBfbmVnYXRpdmUgYXMgbmVnYXRpdmUsIF9ub25wb3NpdGl2ZSBhcyBub25wb3NpdGl2ZSwgX25vbm5lZ2F0aXZlIGFzIG5vbm5lZ2F0aXZlLCBfbXVsdGlwbGVPZiBhcyBtdWx0aXBsZU9mLCBfbWF4U2l6ZSBhcyBtYXhTaXplLCBfbWluU2l6ZSBhcyBtaW5TaXplLCBfc2l6ZSBhcyBzaXplLCBfbWF4TGVuZ3RoIGFzIG1heExlbmd0aCwgX21pbkxlbmd0aCBhcyBtaW5MZW5ndGgsIF9sZW5ndGggYXMgbGVuZ3RoLCBfcmVnZXggYXMgcmVnZXgsIF9sb3dlcmNhc2UgYXMgbG93ZXJjYXNlLCBfdXBwZXJjYXNlIGFzIHVwcGVyY2FzZSwgX2luY2x1ZGVzIGFzIGluY2x1ZGVzLCBfc3RhcnRzV2l0aCBhcyBzdGFydHNXaXRoLCBfZW5kc1dpdGggYXMgZW5kc1dpdGgsIF9wcm9wZXJ0eSBhcyBwcm9wZXJ0eSwgX21pbWUgYXMgbWltZSwgX292ZXJ3cml0ZSBhcyBvdmVyd3JpdGUsIF9ub3JtYWxpemUgYXMgbm9ybWFsaXplLCBfdHJpbSBhcyB0cmltLCBfdG9Mb3dlckNhc2UgYXMgdG9Mb3dlckNhc2UsIF90b1VwcGVyQ2FzZSBhcyB0b1VwcGVyQ2FzZSwgX3NsdWdpZnkgYXMgc2x1Z2lmeSwgfSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuIiwiaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgc2NoZW1hcyBmcm9tIFwiLi9zY2hlbWFzLmpzXCI7XG5leHBvcnQgY29uc3QgWm9kSVNPRGF0ZVRpbWUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kSVNPRGF0ZVRpbWVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZElTT0RhdGVUaW1lLmluaXQoaW5zdCwgZGVmKTtcbiAgICBzY2hlbWFzLlpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBkYXRldGltZShwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faXNvRGF0ZVRpbWUoWm9kSVNPRGF0ZVRpbWUsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kSVNPRGF0ZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RJU09EYXRlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RJU09EYXRlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBzY2hlbWFzLlpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBkYXRlKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pc29EYXRlKFpvZElTT0RhdGUsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kSVNPVGltZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RJU09UaW1lXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RJU09UaW1lLmluaXQoaW5zdCwgZGVmKTtcbiAgICBzY2hlbWFzLlpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB0aW1lKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pc29UaW1lKFpvZElTT1RpbWUsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kSVNPRHVyYXRpb24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kSVNPRHVyYXRpb25cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZElTT0R1cmF0aW9uLmluaXQoaW5zdCwgZGVmKTtcbiAgICBzY2hlbWFzLlpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBkdXJhdGlvbihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faXNvRHVyYXRpb24oWm9kSVNPRHVyYXRpb24sIHBhcmFtcyk7XG59XG4iLCJpbXBvcnQgKiBhcyBjb3JlIGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyAkWm9kRXJyb3IgfSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBpbml0aWFsaXplciA9IChpbnN0LCBpc3N1ZXMpID0+IHtcbiAgICAkWm9kRXJyb3IuaW5pdChpbnN0LCBpc3N1ZXMpO1xuICAgIGluc3QubmFtZSA9IFwiWm9kRXJyb3JcIjtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpbnN0LCB7XG4gICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgdmFsdWU6IChtYXBwZXIpID0+IGNvcmUuZm9ybWF0RXJyb3IoaW5zdCwgbWFwcGVyKSxcbiAgICAgICAgICAgIC8vIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBmbGF0dGVuOiB7XG4gICAgICAgICAgICB2YWx1ZTogKG1hcHBlcikgPT4gY29yZS5mbGF0dGVuRXJyb3IoaW5zdCwgbWFwcGVyKSxcbiAgICAgICAgICAgIC8vIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBhZGRJc3N1ZToge1xuICAgICAgICAgICAgdmFsdWU6IChpc3N1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGluc3QuaXNzdWVzLnB1c2goaXNzdWUpO1xuICAgICAgICAgICAgICAgIGluc3QubWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KGluc3QuaXNzdWVzLCB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciwgMik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIGFkZElzc3Vlczoge1xuICAgICAgICAgICAgdmFsdWU6IChpc3N1ZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpbnN0Lmlzc3Vlcy5wdXNoKC4uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgaW5zdC5tZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkoaW5zdC5pc3N1ZXMsIHV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyLCAyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgaXNFbXB0eToge1xuICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0Lmlzc3Vlcy5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgLy8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3QsIFwiaXNFbXB0eVwiLCB7XG4gICAgLy8gICBnZXQoKSB7XG4gICAgLy8gICAgIHJldHVybiBpbnN0Lmlzc3Vlcy5sZW5ndGggPT09IDA7XG4gICAgLy8gICB9LFxuICAgIC8vIH0pO1xufTtcbmV4cG9ydCBjb25zdCBab2RFcnJvciA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RFcnJvclwiLCBpbml0aWFsaXplcik7XG5leHBvcnQgY29uc3QgWm9kUmVhbEVycm9yID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEVycm9yXCIsIGluaXRpYWxpemVyLCB7XG4gICAgUGFyZW50OiBFcnJvcixcbn0pO1xuLy8gLyoqIEBkZXByZWNhdGVkIFVzZSBgei5jb3JlLiRab2RFcnJvck1hcEN0eGAgaW5zdGVhZC4gKi9cbi8vIGV4cG9ydCB0eXBlIEVycm9yTWFwQ3R4ID0gY29yZS4kWm9kRXJyb3JNYXBDdHg7XG4iLCJpbXBvcnQgKiBhcyBjb3JlIGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBab2RSZWFsRXJyb3IgfSBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmV4cG9ydCBjb25zdCBwYXJzZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9wYXJzZShab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IHBhcnNlQXN5bmMgPSAvKiBAX19QVVJFX18gKi8gY29yZS5fcGFyc2VBc3luYyhab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IHNhZmVQYXJzZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlUGFyc2UoWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBzYWZlUGFyc2VBc3luYyA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlUGFyc2VBc3luYyhab2RSZWFsRXJyb3IpO1xuLy8gQ29kZWMgZnVuY3Rpb25zXG5leHBvcnQgY29uc3QgZW5jb2RlID0gLyogQF9fUFVSRV9fICovIGNvcmUuX2VuY29kZShab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IGRlY29kZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9kZWNvZGUoWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBlbmNvZGVBc3luYyA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9lbmNvZGVBc3luYyhab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IGRlY29kZUFzeW5jID0gLyogQF9fUFVSRV9fICovIGNvcmUuX2RlY29kZUFzeW5jKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3Qgc2FmZUVuY29kZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlRW5jb2RlKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3Qgc2FmZURlY29kZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlRGVjb2RlKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3Qgc2FmZUVuY29kZUFzeW5jID0gLyogQF9fUFVSRV9fICovIGNvcmUuX3NhZmVFbmNvZGVBc3luYyhab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IHNhZmVEZWNvZGVBc3luYyA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlRGVjb2RlQXN5bmMoWm9kUmVhbEVycm9yKTtcbiIsImltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIi4uL2NvcmUvaW5kZXguanNcIjtcbmltcG9ydCB7IHV0aWwgfSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgcHJvY2Vzc29ycyBmcm9tIFwiLi4vY29yZS9qc29uLXNjaGVtYS1wcm9jZXNzb3JzLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2QsIGNyZWF0ZVRvSlNPTlNjaGVtYU1ldGhvZCB9IGZyb20gXCIuLi9jb3JlL3RvLWpzb24tc2NoZW1hLmpzXCI7XG5pbXBvcnQgKiBhcyBjaGVja3MgZnJvbSBcIi4vY2hlY2tzLmpzXCI7XG5pbXBvcnQgKiBhcyBpc28gZnJvbSBcIi4vaXNvLmpzXCI7XG5pbXBvcnQgKiBhcyBwYXJzZSBmcm9tIFwiLi9wYXJzZS5qc1wiO1xuLy8gTGF6eS1iaW5kIGJ1aWxkZXIgbWV0aG9kcy5cbi8vXG4vLyBCdWlsZGVyIG1ldGhvZHMgKGAub3B0aW9uYWxgLCBgLmFycmF5YCwgYC5yZWZpbmVgLCAuLi4pIGxpdmUgYXNcbi8vIG5vbi1lbnVtZXJhYmxlIGdldHRlcnMgb24gZWFjaCBjb25jcmV0ZSBzY2hlbWEgY29uc3RydWN0b3Inc1xuLy8gcHJvdG90eXBlLiBPbiBmaXJzdCBhY2Nlc3MgZnJvbSBhbiBpbnN0YW5jZSB0aGUgZ2V0dGVyIGFsbG9jYXRlc1xuLy8gYGZuLmJpbmQodGhpcylgIGFuZCBjYWNoZXMgaXQgYXMgYW4gb3duIHByb3BlcnR5IG9uIHRoYXQgaW5zdGFuY2UsXG4vLyBzbyBkZXRhY2hlZCB1c2FnZSAoYGNvbnN0IG0gPSBzY2hlbWEub3B0aW9uYWw7IG0oKWApIHN0aWxsIHdvcmtzXG4vLyBhbmQgdGhlIHBlci1pbnN0YW5jZSBhbGxvY2F0aW9uIG9ubHkgaGFwcGVucyBmb3IgbWV0aG9kcyBhY3R1YWxseVxuLy8gdG91Y2hlZC5cbi8vXG4vLyBPbmUgaW5zdGFsbCBwZXIgKHByb3RvdHlwZSwgZ3JvdXApLCBtZW1vaXplZCBieSBgX2luc3RhbGxlZEdyb3Vwc2AuXG5jb25zdCBfaW5zdGFsbGVkR3JvdXBzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBfaW5zdGFsbExhenlNZXRob2RzKGluc3QsIGdyb3VwLCBtZXRob2RzKSB7XG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5zdCk7XG4gICAgbGV0IGluc3RhbGxlZCA9IF9pbnN0YWxsZWRHcm91cHMuZ2V0KHByb3RvKTtcbiAgICBpZiAoIWluc3RhbGxlZCkge1xuICAgICAgICBpbnN0YWxsZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgIF9pbnN0YWxsZWRHcm91cHMuc2V0KHByb3RvLCBpbnN0YWxsZWQpO1xuICAgIH1cbiAgICBpZiAoaW5zdGFsbGVkLmhhcyhncm91cCkpXG4gICAgICAgIHJldHVybjtcbiAgICBpbnN0YWxsZWQuYWRkKGdyb3VwKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBtZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGZuID0gbWV0aG9kc1trZXldO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIGtleSwge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm91bmQgPSBmbi5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGJvdW5kLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBib3VuZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQodikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgWm9kVHlwZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RUeXBlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBPYmplY3QuYXNzaWduKGluc3RbXCJ+c3RhbmRhcmRcIl0sIHtcbiAgICAgICAganNvblNjaGVtYToge1xuICAgICAgICAgICAgaW5wdXQ6IGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZChpbnN0LCBcImlucHV0XCIpLFxuICAgICAgICAgICAgb3V0cHV0OiBjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2QoaW5zdCwgXCJvdXRwdXRcIiksXG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgaW5zdC50b0pTT05TY2hlbWEgPSBjcmVhdGVUb0pTT05TY2hlbWFNZXRob2QoaW5zdCwge30pO1xuICAgIGluc3QuZGVmID0gZGVmO1xuICAgIGluc3QudHlwZSA9IGRlZi50eXBlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0LCBcIl9kZWZcIiwgeyB2YWx1ZTogZGVmIH0pO1xuICAgIC8vIFBhcnNlLWZhbWlseSBpcyBpbnRlbnRpb25hbGx5IGtlcHQgYXMgcGVyLWluc3RhbmNlIGNsb3N1cmVzOiB0aGVzZSBhcmVcbiAgICAvLyB0aGUgaG90IHBhdGggQU5EIHRoZSBtb3N0LWRldGFjaGVkIG1ldGhvZHMgKGBhcnIubWFwKHNjaGVtYS5wYXJzZSlgLFxuICAgIC8vIGBjb25zdCB7IHBhcnNlIH0gPSBzY2hlbWFgLCBldGMuKS4gRWFnZXIgY2xvc3VyZXMgaGVyZSBtZWFuIGNhbGxlcnMgcGF5XG4gICAgLy8gfjEyIGNsb3N1cmUgYWxsb2NhdGlvbnMgcGVyIHNjaGVtYSBidXQgZ2V0IG1vbm9tb3JwaGljIGNhbGwgc2l0ZXMgYW5kXG4gICAgLy8gZGV0YWNoZWQgdXNhZ2UgdGhhdCBcImp1c3Qgd29ya3NcIi5cbiAgICBpbnN0LnBhcnNlID0gKGRhdGEsIHBhcmFtcykgPT4gcGFyc2UucGFyc2UoaW5zdCwgZGF0YSwgcGFyYW1zLCB7IGNhbGxlZTogaW5zdC5wYXJzZSB9KTtcbiAgICBpbnN0LnNhZmVQYXJzZSA9IChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLnNhZmVQYXJzZShpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3QucGFyc2VBc3luYyA9IGFzeW5jIChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLnBhcnNlQXN5bmMoaW5zdCwgZGF0YSwgcGFyYW1zLCB7IGNhbGxlZTogaW5zdC5wYXJzZUFzeW5jIH0pO1xuICAgIGluc3Quc2FmZVBhcnNlQXN5bmMgPSBhc3luYyAoZGF0YSwgcGFyYW1zKSA9PiBwYXJzZS5zYWZlUGFyc2VBc3luYyhpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3Quc3BhID0gaW5zdC5zYWZlUGFyc2VBc3luYztcbiAgICBpbnN0LmVuY29kZSA9IChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLmVuY29kZShpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3QuZGVjb2RlID0gKGRhdGEsIHBhcmFtcykgPT4gcGFyc2UuZGVjb2RlKGluc3QsIGRhdGEsIHBhcmFtcyk7XG4gICAgaW5zdC5lbmNvZGVBc3luYyA9IGFzeW5jIChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLmVuY29kZUFzeW5jKGluc3QsIGRhdGEsIHBhcmFtcyk7XG4gICAgaW5zdC5kZWNvZGVBc3luYyA9IGFzeW5jIChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLmRlY29kZUFzeW5jKGluc3QsIGRhdGEsIHBhcmFtcyk7XG4gICAgaW5zdC5zYWZlRW5jb2RlID0gKGRhdGEsIHBhcmFtcykgPT4gcGFyc2Uuc2FmZUVuY29kZShpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3Quc2FmZURlY29kZSA9IChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLnNhZmVEZWNvZGUoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LnNhZmVFbmNvZGVBc3luYyA9IGFzeW5jIChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLnNhZmVFbmNvZGVBc3luYyhpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3Quc2FmZURlY29kZUFzeW5jID0gYXN5bmMgKGRhdGEsIHBhcmFtcykgPT4gcGFyc2Uuc2FmZURlY29kZUFzeW5jKGluc3QsIGRhdGEsIHBhcmFtcyk7XG4gICAgLy8gQWxsIGJ1aWxkZXIgbWV0aG9kcyBhcmUgcGxhY2VkIG9uIHRoZSBpbnRlcm5hbCBwcm90b3R5cGUgYXMgbGF6eS1iaW5kXG4gICAgLy8gZ2V0dGVycy4gT24gZmlyc3QgYWNjZXNzIHBlci1pbnN0YW5jZSwgYSBib3VuZCB0aHVuayBpcyBhbGxvY2F0ZWQgYW5kXG4gICAgLy8gY2FjaGVkIGFzIGFuIG93biBwcm9wZXJ0eTsgc3Vic2VxdWVudCBhY2Nlc3NlcyBza2lwIHRoZSBnZXR0ZXIuIFRoaXNcbiAgICAvLyBtZWFuczogbm8gcGVyLWluc3RhbmNlIGFsbG9jYXRpb24gZm9yIHVudXNlZCBtZXRob2RzLCBmdWxsXG4gICAgLy8gZGV0YWNoYWJpbGl0eSBwcmVzZXJ2ZWQgKGBjb25zdCBtID0gc2NoZW1hLm9wdGlvbmFsOyBtKClgIHdvcmtzKSwgYW5kXG4gICAgLy8gc2hhcmVkIHVuZGVybHlpbmcgZnVuY3Rpb24gcmVmZXJlbmNlcyBhY3Jvc3MgYWxsIGluc3RhbmNlcy5cbiAgICBfaW5zdGFsbExhenlNZXRob2RzKGluc3QsIFwiWm9kVHlwZVwiLCB7XG4gICAgICAgIGNoZWNrKC4uLmNoa3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZiA9IHRoaXMuZGVmO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUodXRpbC5tZXJnZURlZnMoZGVmLCB7XG4gICAgICAgICAgICAgICAgY2hlY2tzOiBbXG4gICAgICAgICAgICAgICAgICAgIC4uLihkZWYuY2hlY2tzID8/IFtdKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uY2hrcy5tYXAoKGNoKSA9PiB0eXBlb2YgY2ggPT09IFwiZnVuY3Rpb25cIiA/IHsgX3pvZDogeyBjaGVjazogY2gsIGRlZjogeyBjaGVjazogXCJjdXN0b21cIiB9LCBvbmF0dGFjaDogW10gfSB9IDogY2gpLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSwgeyBwYXJlbnQ6IHRydWUgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdpdGgoLi4uY2hrcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soLi4uY2hrcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsb25lKGRlZiwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5jbG9uZSh0aGlzLCBkZWYsIHBhcmFtcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGJyYW5kKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyKHJlZywgbWV0YSkge1xuICAgICAgICAgICAgcmVnLmFkZCh0aGlzLCBtZXRhKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICByZWZpbmUoY2hlY2ssIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2socmVmaW5lKGNoZWNrLCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3VwZXJSZWZpbmUocmVmaW5lbWVudCwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhzdXBlclJlZmluZShyZWZpbmVtZW50LCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgb3ZlcndyaXRlKGZuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3Mub3ZlcndyaXRlKGZuKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbmFsKCkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbmFsKHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBleGFjdE9wdGlvbmFsKCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4YWN0T3B0aW9uYWwodGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIG51bGxhYmxlKCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGxhYmxlKHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBudWxsaXNoKCkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbmFsKG51bGxhYmxlKHRoaXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbm9ub3B0aW9uYWwocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9ub3B0aW9uYWwodGhpcywgcGFyYW1zKTtcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXkoKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkodGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9yKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIHVuaW9uKFt0aGlzLCBhcmddKTtcbiAgICAgICAgfSxcbiAgICAgICAgYW5kKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvbih0aGlzLCBhcmcpO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2Zvcm0odHgpIHtcbiAgICAgICAgICAgIHJldHVybiBwaXBlKHRoaXMsIHRyYW5zZm9ybSh0eCkpO1xuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0KGQpIHtcbiAgICAgICAgICAgIHJldHVybiBfZGVmYXVsdCh0aGlzLCBkKTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJlZmF1bHQoZCkge1xuICAgICAgICAgICAgcmV0dXJuIHByZWZhdWx0KHRoaXMsIGQpO1xuICAgICAgICB9LFxuICAgICAgICBjYXRjaChwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBfY2F0Y2godGhpcywgcGFyYW1zKTtcbiAgICAgICAgfSxcbiAgICAgICAgcGlwZSh0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBwaXBlKHRoaXMsIHRhcmdldCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlYWRvbmx5KCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRvbmx5KHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBkZXNjcmliZShkZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgY29uc3QgY2wgPSB0aGlzLmNsb25lKCk7XG4gICAgICAgICAgICBjb3JlLmdsb2JhbFJlZ2lzdHJ5LmFkZChjbCwgeyBkZXNjcmlwdGlvbiB9KTtcbiAgICAgICAgICAgIHJldHVybiBjbDtcbiAgICAgICAgfSxcbiAgICAgICAgbWV0YSguLi5hcmdzKSB7XG4gICAgICAgICAgICAvLyBvdmVybG9hZGVkOiBtZXRhKCkgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBtZXRhZGF0YSwgbWV0YShkYXRhKVxuICAgICAgICAgICAgLy8gcmV0dXJucyBhIGNsb25lIHdpdGggYGRhdGFgIHJlZ2lzdGVyZWQuIFRoZSBtYXBwZWQgdHlwZSBwaWNrc1xuICAgICAgICAgICAgLy8gdXAgdGhlIHNlY29uZCBvdmVybG9hZCwgc28gd2UgYWNjZXB0IHZhcmlhZGljIGFueS1hcmdzIGFuZFxuICAgICAgICAgICAgLy8gcmV0dXJuIGBhbnlgIHRvIHNhdGlzZnkgYm90aCBhdCBydW50aW1lLlxuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3JlLmdsb2JhbFJlZ2lzdHJ5LmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IGNsID0gdGhpcy5jbG9uZSgpO1xuICAgICAgICAgICAgY29yZS5nbG9iYWxSZWdpc3RyeS5hZGQoY2wsIGFyZ3NbMF0pO1xuICAgICAgICAgICAgcmV0dXJuIGNsO1xuICAgICAgICB9LFxuICAgICAgICBpc09wdGlvbmFsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2FmZVBhcnNlKHVuZGVmaW5lZCkuc3VjY2VzcztcbiAgICAgICAgfSxcbiAgICAgICAgaXNOdWxsYWJsZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzO1xuICAgICAgICB9LFxuICAgICAgICBhcHBseShmbikge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHRoaXMpO1xuICAgICAgICB9LFxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0LCBcImRlc2NyaXB0aW9uXCIsIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuZ2xvYmFsUmVnaXN0cnkuZ2V0KGluc3QpPy5kZXNjcmlwdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiBpbnN0O1xufSk7XG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX1pvZFN0cmluZyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJfWm9kU3RyaW5nXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RTdHJpbmcuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5zdHJpbmdQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgaW5zdC5mb3JtYXQgPSBiYWcuZm9ybWF0ID8/IG51bGw7XG4gICAgaW5zdC5taW5MZW5ndGggPSBiYWcubWluaW11bSA/PyBudWxsO1xuICAgIGluc3QubWF4TGVuZ3RoID0gYmFnLm1heGltdW0gPz8gbnVsbDtcbiAgICBfaW5zdGFsbExhenlNZXRob2RzKGluc3QsIFwiX1pvZFN0cmluZ1wiLCB7XG4gICAgICAgIHJlZ2V4KC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5yZWdleCguLi5hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGluY2x1ZGVzKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5pbmNsdWRlcyguLi5hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN0YXJ0c1dpdGgoLi4uYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLnN0YXJ0c1dpdGgoLi4uYXJncykpO1xuICAgICAgICB9LFxuICAgICAgICBlbmRzV2l0aCguLi5hcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MuZW5kc1dpdGgoLi4uYXJncykpO1xuICAgICAgICB9LFxuICAgICAgICBtaW4oLi4uYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLm1pbkxlbmd0aCguLi5hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1heCguLi5hcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MubWF4TGVuZ3RoKC4uLmFyZ3MpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbGVuZ3RoKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5sZW5ndGgoLi4uYXJncykpO1xuICAgICAgICB9LFxuICAgICAgICBub25lbXB0eSguLi5hcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MubWluTGVuZ3RoKDEsIC4uLmFyZ3MpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbG93ZXJjYXNlKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmxvd2VyY2FzZShwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXBwZXJjYXNlKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLnVwcGVyY2FzZShwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJpbSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy50cmltKCkpO1xuICAgICAgICB9LFxuICAgICAgICBub3JtYWxpemUoLi4uYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLm5vcm1hbGl6ZSguLi5hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvTG93ZXJDYXNlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9LFxuICAgICAgICB0b1VwcGVyQ2FzZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2x1Z2lmeSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5zbHVnaWZ5KCkpO1xuICAgICAgICB9LFxuICAgIH0pO1xufSk7XG5leHBvcnQgY29uc3QgWm9kU3RyaW5nID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFN0cmluZ1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kU3RyaW5nLmluaXQoaW5zdCwgZGVmKTtcbiAgICBfWm9kU3RyaW5nLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0LmVtYWlsID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9lbWFpbChab2RFbWFpbCwgcGFyYW1zKSk7XG4gICAgaW5zdC51cmwgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX3VybChab2RVUkwsIHBhcmFtcykpO1xuICAgIGluc3Quand0ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9qd3QoWm9kSldULCBwYXJhbXMpKTtcbiAgICBpbnN0LmVtb2ppID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9lbW9qaShab2RFbW9qaSwgcGFyYW1zKSk7XG4gICAgaW5zdC5ndWlkID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9ndWlkKFpvZEdVSUQsIHBhcmFtcykpO1xuICAgIGluc3QudXVpZCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fdXVpZChab2RVVUlELCBwYXJhbXMpKTtcbiAgICBpbnN0LnV1aWR2NCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fdXVpZHY0KFpvZFVVSUQsIHBhcmFtcykpO1xuICAgIGluc3QudXVpZHY2ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl91dWlkdjYoWm9kVVVJRCwgcGFyYW1zKSk7XG4gICAgaW5zdC51dWlkdjcgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX3V1aWR2Nyhab2RVVUlELCBwYXJhbXMpKTtcbiAgICBpbnN0Lm5hbm9pZCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fbmFub2lkKFpvZE5hbm9JRCwgcGFyYW1zKSk7XG4gICAgaW5zdC5ndWlkID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9ndWlkKFpvZEdVSUQsIHBhcmFtcykpO1xuICAgIGluc3QuY3VpZCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fY3VpZChab2RDVUlELCBwYXJhbXMpKTtcbiAgICBpbnN0LmN1aWQyID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9jdWlkMihab2RDVUlEMiwgcGFyYW1zKSk7XG4gICAgaW5zdC51bGlkID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl91bGlkKFpvZFVMSUQsIHBhcmFtcykpO1xuICAgIGluc3QuYmFzZTY0ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9iYXNlNjQoWm9kQmFzZTY0LCBwYXJhbXMpKTtcbiAgICBpbnN0LmJhc2U2NHVybCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fYmFzZTY0dXJsKFpvZEJhc2U2NFVSTCwgcGFyYW1zKSk7XG4gICAgaW5zdC54aWQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX3hpZChab2RYSUQsIHBhcmFtcykpO1xuICAgIGluc3Qua3N1aWQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2tzdWlkKFpvZEtTVUlELCBwYXJhbXMpKTtcbiAgICBpbnN0LmlwdjQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2lwdjQoWm9kSVB2NCwgcGFyYW1zKSk7XG4gICAgaW5zdC5pcHY2ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9pcHY2KFpvZElQdjYsIHBhcmFtcykpO1xuICAgIGluc3QuY2lkcnY0ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9jaWRydjQoWm9kQ0lEUnY0LCBwYXJhbXMpKTtcbiAgICBpbnN0LmNpZHJ2NiA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fY2lkcnY2KFpvZENJRFJ2NiwgcGFyYW1zKSk7XG4gICAgaW5zdC5lMTY0ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9lMTY0KFpvZEUxNjQsIHBhcmFtcykpO1xuICAgIC8vIGlzb1xuICAgIGluc3QuZGF0ZXRpbWUgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGlzby5kYXRldGltZShwYXJhbXMpKTtcbiAgICBpbnN0LmRhdGUgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGlzby5kYXRlKHBhcmFtcykpO1xuICAgIGluc3QudGltZSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soaXNvLnRpbWUocGFyYW1zKSk7XG4gICAgaW5zdC5kdXJhdGlvbiA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soaXNvLmR1cmF0aW9uKHBhcmFtcykpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9zdHJpbmcoWm9kU3RyaW5nLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFN0cmluZ0Zvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RTdHJpbmdGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgX1pvZFN0cmluZy5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCBab2RFbWFpbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RFbWFpbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RFbWFpbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGVtYWlsKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9lbWFpbChab2RFbWFpbCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RHVUlEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEdVSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kR1VJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGd1aWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2d1aWQoWm9kR1VJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RVVUlEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFVVSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kVVVJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHV1aWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3V1aWQoWm9kVVVJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3V1aWR2NChab2RVVUlELCBwYXJhbXMpO1xufVxuLy8gWm9kVVVJRHY2XG5leHBvcnQgZnVuY3Rpb24gdXVpZHY2KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl91dWlkdjYoWm9kVVVJRCwgcGFyYW1zKTtcbn1cbi8vIFpvZFVVSUR2N1xuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NyhwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdXVpZHY3KFpvZFVVSUQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kVVJMID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFVSTFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RVUkwuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB1cmwocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3VybChab2RVUkwsIHBhcmFtcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaHR0cFVybChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdXJsKFpvZFVSTCwge1xuICAgICAgICBwcm90b2NvbDogY29yZS5yZWdleGVzLmh0dHBQcm90b2NvbCxcbiAgICAgICAgaG9zdG5hbWU6IGNvcmUucmVnZXhlcy5kb21haW4sXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kRW1vamkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRW1vamlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kRW1vamkuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBlbW9qaShwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fZW1vamkoWm9kRW1vamksIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kTmFub0lEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE5hbm9JRFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2ROYW5vSUQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBuYW5vaWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX25hbm9pZChab2ROYW5vSUQsIHBhcmFtcyk7XG59XG4vKipcbiAqIEBkZXByZWNhdGVkIENVSUQgdjEgaXMgZGVwcmVjYXRlZCBieSBpdHMgYXV0aG9ycyBkdWUgdG8gaW5mb3JtYXRpb24gbGVha2FnZVxuICogKHRpbWVzdGFtcHMgZW1iZWRkZWQgaW4gdGhlIGlkKS4gVXNlIHtAbGluayBab2RDVUlEMn0gaW5zdGVhZC5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcGFyYWxsZWxkcml2ZS9jdWlkLlxuICovXG5leHBvcnQgY29uc3QgWm9kQ1VJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDVUlEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZENVSUQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbi8qKlxuICogVmFsaWRhdGVzIGEgQ1VJRCB2MSBzdHJpbmcuXG4gKlxuICogQGRlcHJlY2F0ZWQgQ1VJRCB2MSBpcyBkZXByZWNhdGVkIGJ5IGl0cyBhdXRob3JzIGR1ZSB0byBpbmZvcm1hdGlvbiBsZWFrYWdlXG4gKiAodGltZXN0YW1wcyBlbWJlZGRlZCBpbiB0aGUgaWQpLiBVc2Uge0BsaW5rIGN1aWQyIHwgYHouY3VpZDIoKWB9IGluc3RlYWQuXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BhcmFsbGVsZHJpdmUvY3VpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1aWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2N1aWQoWm9kQ1VJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RDVUlEMiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDVUlEMlwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RDVUlEMi5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGN1aWQyKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9jdWlkMihab2RDVUlEMiwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RVTElEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFVMSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kVUxJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHVsaWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3VsaWQoWm9kVUxJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RYSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kWElEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZFhJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHhpZChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5feGlkKFpvZFhJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RLU1VJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RLU1VJRFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RLU1VJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGtzdWlkKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9rc3VpZChab2RLU1VJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RJUHY0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZElQdjRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kSVB2NC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGlwdjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2lwdjQoWm9kSVB2NCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RNQUMgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTUFDXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZE1BQy5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIG1hYyhwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fbWFjKFpvZE1BQywgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RJUHY2ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZElQdjZcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kSVB2Ni5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGlwdjYocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2lwdjYoWm9kSVB2NiwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RDSURSdjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQ0lEUnY0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RDSURSdjQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBjaWRydjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2NpZHJ2NChab2RDSURSdjQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kQ0lEUnY2ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZENJRFJ2NlwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kQ0lEUnY2LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gY2lkcnY2KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9jaWRydjYoWm9kQ0lEUnY2LCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEJhc2U2NCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RCYXNlNjRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kQmFzZTY0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9iYXNlNjQoWm9kQmFzZTY0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEJhc2U2NFVSTCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RCYXNlNjRVUkxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kQmFzZTY0VVJMLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0dXJsKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9iYXNlNjR1cmwoWm9kQmFzZTY0VVJMLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEUxNjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRTE2NFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RFMTY0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZTE2NChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fZTE2NChab2RFMTY0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEpXVCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RKV1RcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kSldULmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gand0KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9qd3QoWm9kSldULCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDdXN0b21TdHJpbmdGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kQ3VzdG9tU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nRm9ybWF0KGZvcm1hdCwgZm5PclJlZ2V4LCBfcGFyYW1zID0ge30pIHtcbiAgICByZXR1cm4gY29yZS5fc3RyaW5nRm9ybWF0KFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCwgZm9ybWF0LCBmbk9yUmVnZXgsIF9wYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhvc3RuYW1lKF9wYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fc3RyaW5nRm9ybWF0KFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCwgXCJob3N0bmFtZVwiLCBjb3JlLnJlZ2V4ZXMuaG9zdG5hbWUsIF9wYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhleChfcGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3N0cmluZ0Zvcm1hdChab2RDdXN0b21TdHJpbmdGb3JtYXQsIFwiaGV4XCIsIGNvcmUucmVnZXhlcy5oZXgsIF9wYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhc2goYWxnLCBwYXJhbXMpIHtcbiAgICBjb25zdCBlbmMgPSBwYXJhbXM/LmVuYyA/PyBcImhleFwiO1xuICAgIGNvbnN0IGZvcm1hdCA9IGAke2FsZ31fJHtlbmN9YDtcbiAgICBjb25zdCByZWdleCA9IGNvcmUucmVnZXhlc1tmb3JtYXRdO1xuICAgIGlmICghcmVnZXgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZm9ybWF0OiAke2Zvcm1hdH1gKTtcbiAgICByZXR1cm4gY29yZS5fc3RyaW5nRm9ybWF0KFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCwgZm9ybWF0LCByZWdleCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2ROdW1iZXIgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTnVtYmVyXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2ROdW1iZXIuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5udW1iZXJQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIF9pbnN0YWxsTGF6eU1ldGhvZHMoaW5zdCwgXCJab2ROdW1iZXJcIiwge1xuICAgICAgICBndCh2YWx1ZSwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MuZ3QodmFsdWUsIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICBndGUodmFsdWUsIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmd0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1pbih2YWx1ZSwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MuZ3RlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbHQodmFsdWUsIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmx0KHZhbHVlLCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbHRlKHZhbHVlLCBwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5sdGUodmFsdWUsIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICBtYXgodmFsdWUsIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmx0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGludChwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGludChwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2FmZShwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGludChwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zaXRpdmUocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MuZ3QoMCwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG5vbm5lZ2F0aXZlKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmd0ZSgwLCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbmVnYXRpdmUocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MubHQoMCwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG5vbnBvc2l0aXZlKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmx0ZSgwLCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbXVsdGlwbGVPZih2YWx1ZSwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MubXVsdGlwbGVPZih2YWx1ZSwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN0ZXAodmFsdWUsIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLm11bHRpcGxlT2YodmFsdWUsIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICBmaW5pdGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgIGluc3QubWluVmFsdWUgPVxuICAgICAgICBNYXRoLm1heChiYWcubWluaW11bSA/PyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksIGJhZy5leGNsdXNpdmVNaW5pbXVtID8/IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgPz8gbnVsbDtcbiAgICBpbnN0Lm1heFZhbHVlID1cbiAgICAgICAgTWF0aC5taW4oYmFnLm1heGltdW0gPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLCBiYWcuZXhjbHVzaXZlTWF4aW11bSA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpID8/IG51bGw7XG4gICAgaW5zdC5pc0ludCA9IChiYWcuZm9ybWF0ID8/IFwiXCIpLmluY2x1ZGVzKFwiaW50XCIpIHx8IE51bWJlci5pc1NhZmVJbnRlZ2VyKGJhZy5tdWx0aXBsZU9mID8/IDAuNSk7XG4gICAgaW5zdC5pc0Zpbml0ZSA9IHRydWU7XG4gICAgaW5zdC5mb3JtYXQgPSBiYWcuZm9ybWF0ID8/IG51bGw7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBudW1iZXIocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX251bWJlcihab2ROdW1iZXIsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kTnVtYmVyRm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE51bWJlckZvcm1hdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kTnVtYmVyRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2ROdW1iZXIuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gaW50KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pbnQoWm9kTnVtYmVyRm9ybWF0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZsb2F0MzIocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2Zsb2F0MzIoWm9kTnVtYmVyRm9ybWF0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZsb2F0NjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2Zsb2F0NjQoWm9kTnVtYmVyRm9ybWF0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGludDMyKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pbnQzMihab2ROdW1iZXJGb3JtYXQsIHBhcmFtcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gdWludDMyKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl91aW50MzIoWm9kTnVtYmVyRm9ybWF0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEJvb2xlYW4gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQm9vbGVhblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kQm9vbGVhbi5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmJvb2xlYW5Qcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gYm9vbGVhbihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fYm9vbGVhbihab2RCb29sZWFuLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEJpZ0ludCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RCaWdJbnRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZEJpZ0ludC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmJpZ2ludFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5ndGUgPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MuZ3RlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1pbiA9ICh2YWx1ZSwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5ndGUodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QuZ3QgPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MuZ3QodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QuZ3RlID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmd0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5taW4gPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MuZ3RlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lmx0ID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmx0KHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lmx0ZSA9ICh2YWx1ZSwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5sdGUodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QubWF4ID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmx0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5wb3NpdGl2ZSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmd0KEJpZ0ludCgwKSwgcGFyYW1zKSk7XG4gICAgaW5zdC5uZWdhdGl2ZSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmx0KEJpZ0ludCgwKSwgcGFyYW1zKSk7XG4gICAgaW5zdC5ub25wb3NpdGl2ZSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmx0ZShCaWdJbnQoMCksIHBhcmFtcykpO1xuICAgIGluc3Qubm9ubmVnYXRpdmUgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5ndGUoQmlnSW50KDApLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm11bHRpcGxlT2YgPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MubXVsdGlwbGVPZih2YWx1ZSwgcGFyYW1zKSk7XG4gICAgY29uc3QgYmFnID0gaW5zdC5fem9kLmJhZztcbiAgICBpbnN0Lm1pblZhbHVlID0gYmFnLm1pbmltdW0gPz8gbnVsbDtcbiAgICBpbnN0Lm1heFZhbHVlID0gYmFnLm1heGltdW0gPz8gbnVsbDtcbiAgICBpbnN0LmZvcm1hdCA9IGJhZy5mb3JtYXQgPz8gbnVsbDtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGJpZ2ludChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fYmlnaW50KFpvZEJpZ0ludCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RCaWdJbnRGb3JtYXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQmlnSW50Rm9ybWF0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RCaWdJbnRGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZEJpZ0ludC5pbml0KGluc3QsIGRlZik7XG59KTtcbi8vIGludDY0XG5leHBvcnQgZnVuY3Rpb24gaW50NjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2ludDY0KFpvZEJpZ0ludEZvcm1hdCwgcGFyYW1zKTtcbn1cbi8vIHVpbnQ2NFxuZXhwb3J0IGZ1bmN0aW9uIHVpbnQ2NChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdWludDY0KFpvZEJpZ0ludEZvcm1hdCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RTeW1ib2wgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kU3ltYm9sXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RTeW1ib2wuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5zeW1ib2xQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gc3ltYm9sKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9zeW1ib2woWm9kU3ltYm9sLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFVuZGVmaW5lZCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RVbmRlZmluZWRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFVuZGVmaW5lZC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnVuZGVmaW5lZFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmZ1bmN0aW9uIF91bmRlZmluZWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3VuZGVmaW5lZChab2RVbmRlZmluZWQsIHBhcmFtcyk7XG59XG5leHBvcnQgeyBfdW5kZWZpbmVkIGFzIHVuZGVmaW5lZCB9O1xuZXhwb3J0IGNvbnN0IFpvZE51bGwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTnVsbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kTnVsbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLm51bGxQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5mdW5jdGlvbiBfbnVsbChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fbnVsbChab2ROdWxsLCBwYXJhbXMpO1xufVxuZXhwb3J0IHsgX251bGwgYXMgbnVsbCB9O1xuZXhwb3J0IGNvbnN0IFpvZEFueSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RBbnlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZEFueS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmFueVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBhbnkoKSB7XG4gICAgcmV0dXJuIGNvcmUuX2FueShab2RBbnkpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFVua25vd24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVW5rbm93blwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kVW5rbm93bi5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnVua25vd25Qcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdW5rbm93bigpIHtcbiAgICByZXR1cm4gY29yZS5fdW5rbm93bihab2RVbmtub3duKTtcbn1cbmV4cG9ydCBjb25zdCBab2ROZXZlciA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2ROZXZlclwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kTmV2ZXIuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5uZXZlclByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBuZXZlcihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fbmV2ZXIoWm9kTmV2ZXIsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kVm9pZCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RWb2lkXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RWb2lkLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMudm9pZFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmZ1bmN0aW9uIF92b2lkKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl92b2lkKFpvZFZvaWQsIHBhcmFtcyk7XG59XG5leHBvcnQgeyBfdm9pZCBhcyB2b2lkIH07XG5leHBvcnQgY29uc3QgWm9kRGF0ZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2REYXRlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2REYXRlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuZGF0ZVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5taW4gPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MuZ3RlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1heCA9ICh2YWx1ZSwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5sdGUodmFsdWUsIHBhcmFtcykpO1xuICAgIGNvbnN0IGMgPSBpbnN0Ll96b2QuYmFnO1xuICAgIGluc3QubWluRGF0ZSA9IGMubWluaW11bSA/IG5ldyBEYXRlKGMubWluaW11bSkgOiBudWxsO1xuICAgIGluc3QubWF4RGF0ZSA9IGMubWF4aW11bSA/IG5ldyBEYXRlKGMubWF4aW11bSkgOiBudWxsO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZGF0ZShwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fZGF0ZShab2REYXRlLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEFycmF5ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEFycmF5XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RBcnJheS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmFycmF5UHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LmVsZW1lbnQgPSBkZWYuZWxlbWVudDtcbiAgICBfaW5zdGFsbExhenlNZXRob2RzKGluc3QsIFwiWm9kQXJyYXlcIiwge1xuICAgICAgICBtaW4obiwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MubWluTGVuZ3RoKG4sIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICBub25lbXB0eShwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5taW5MZW5ndGgoMSwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1heChuLCBwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5tYXhMZW5ndGgobiwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGxlbmd0aChuLCBwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5sZW5ndGgobiwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHVud3JhcCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBhcnJheShlbGVtZW50LCBwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fYXJyYXkoWm9kQXJyYXksIGVsZW1lbnQsIHBhcmFtcyk7XG59XG4vLyAua2V5b2ZcbmV4cG9ydCBmdW5jdGlvbiBrZXlvZihzY2hlbWEpIHtcbiAgICBjb25zdCBzaGFwZSA9IHNjaGVtYS5fem9kLmRlZi5zaGFwZTtcbiAgICByZXR1cm4gX2VudW0oT2JqZWN0LmtleXMoc2hhcGUpKTtcbn1cbmV4cG9ydCBjb25zdCBab2RPYmplY3QgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kT2JqZWN0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RPYmplY3RKSVQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5vYmplY3RQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0LCBcInNoYXBlXCIsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGRlZi5zaGFwZTtcbiAgICB9KTtcbiAgICBfaW5zdGFsbExhenlNZXRob2RzKGluc3QsIFwiWm9kT2JqZWN0XCIsIHtcbiAgICAgICAga2V5b2YoKSB7XG4gICAgICAgICAgICByZXR1cm4gX2VudW0oT2JqZWN0LmtleXModGhpcy5fem9kLmRlZi5zaGFwZSkpO1xuICAgICAgICB9LFxuICAgICAgICBjYXRjaGFsbChjYXRjaGFsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoeyAuLi50aGlzLl96b2QuZGVmLCBjYXRjaGFsbDogY2F0Y2hhbGwgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBhc3N0aHJvdWdoKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoeyAuLi50aGlzLl96b2QuZGVmLCBjYXRjaGFsbDogdW5rbm93bigpIH0pO1xuICAgICAgICB9LFxuICAgICAgICBsb29zZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKHsgLi4udGhpcy5fem9kLmRlZiwgY2F0Y2hhbGw6IHVua25vd24oKSB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RyaWN0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoeyAuLi50aGlzLl96b2QuZGVmLCBjYXRjaGFsbDogbmV2ZXIoKSB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RyaXAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSh7IC4uLnRoaXMuX3pvZC5kZWYsIGNhdGNoYWxsOiB1bmRlZmluZWQgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGV4dGVuZChpbmNvbWluZykge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWwuZXh0ZW5kKHRoaXMsIGluY29taW5nKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2FmZUV4dGVuZChpbmNvbWluZykge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWwuc2FmZUV4dGVuZCh0aGlzLCBpbmNvbWluZyk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmdlKG90aGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbC5tZXJnZSh0aGlzLCBvdGhlcik7XG4gICAgICAgIH0sXG4gICAgICAgIHBpY2sobWFzaykge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWwucGljayh0aGlzLCBtYXNrKTtcbiAgICAgICAgfSxcbiAgICAgICAgb21pdChtYXNrKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbC5vbWl0KHRoaXMsIG1hc2spO1xuICAgICAgICB9LFxuICAgICAgICBwYXJ0aWFsKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlsLnBhcnRpYWwoWm9kT3B0aW9uYWwsIHRoaXMsIGFyZ3NbMF0pO1xuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlZCguLi5hcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbC5yZXF1aXJlZChab2ROb25PcHRpb25hbCwgdGhpcywgYXJnc1swXSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBvYmplY3Qoc2hhcGUsIHBhcmFtcykge1xuICAgIGNvbnN0IGRlZiA9IHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgc2hhcGU6IHNoYXBlID8/IHt9LFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3QoZGVmKTtcbn1cbi8vIHN0cmljdE9iamVjdFxuZXhwb3J0IGZ1bmN0aW9uIHN0cmljdE9iamVjdChzaGFwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBzaGFwZSxcbiAgICAgICAgY2F0Y2hhbGw6IG5ldmVyKCksXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBsb29zZU9iamVjdFxuZXhwb3J0IGZ1bmN0aW9uIGxvb3NlT2JqZWN0KHNoYXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHNoYXBlLFxuICAgICAgICBjYXRjaGFsbDogdW5rbm93bigpLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFVuaW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFVuaW9uXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RVbmlvbi5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnVuaW9uUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0Lm9wdGlvbnMgPSBkZWYub3B0aW9ucztcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHVuaW9uKG9wdGlvbnMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kVW5pb24oe1xuICAgICAgICB0eXBlOiBcInVuaW9uXCIsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kWG9yID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFhvclwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgWm9kVW5pb24uaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZFhvci5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnVuaW9uUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0Lm9wdGlvbnMgPSBkZWYub3B0aW9ucztcbn0pO1xuLyoqIENyZWF0ZXMgYW4gZXhjbHVzaXZlIHVuaW9uIChYT1IpIHdoZXJlIGV4YWN0bHkgb25lIG9wdGlvbiBtdXN0IG1hdGNoLlxuICogVW5saWtlIHJlZ3VsYXIgdW5pb25zIHRoYXQgc3VjY2VlZCB3aGVuIGFueSBvcHRpb24gbWF0Y2hlcywgeG9yIGZhaWxzIGlmXG4gKiB6ZXJvIG9yIG1vcmUgdGhhbiBvbmUgb3B0aW9uIG1hdGNoZXMgdGhlIGlucHV0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHhvcihvcHRpb25zLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZFhvcih7XG4gICAgICAgIHR5cGU6IFwidW5pb25cIixcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2REaXNjcmltaW5hdGVkVW5pb24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRGlzY3JpbWluYXRlZFVuaW9uXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBab2RVbmlvbi5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kRGlzY3JpbWluYXRlZFVuaW9uLmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGRpc2NyaW1pbmF0ZWRVbmlvbihkaXNjcmltaW5hdG9yLCBvcHRpb25zLCBwYXJhbXMpIHtcbiAgICAvLyBjb25zdCBbb3B0aW9ucywgcGFyYW1zXSA9IGFyZ3M7XG4gICAgcmV0dXJuIG5ldyBab2REaXNjcmltaW5hdGVkVW5pb24oe1xuICAgICAgICB0eXBlOiBcInVuaW9uXCIsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIGRpc2NyaW1pbmF0b3IsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kSW50ZXJzZWN0aW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEludGVyc2VjdGlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kSW50ZXJzZWN0aW9uLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuaW50ZXJzZWN0aW9uUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdGlvbihsZWZ0LCByaWdodCkge1xuICAgIHJldHVybiBuZXcgWm9kSW50ZXJzZWN0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnRlcnNlY3Rpb25cIixcbiAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgcmlnaHQ6IHJpZ2h0LFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFR1cGxlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFR1cGxlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RUdXBsZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnR1cGxlUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnJlc3QgPSAocmVzdCkgPT4gaW5zdC5jbG9uZSh7XG4gICAgICAgIC4uLmluc3QuX3pvZC5kZWYsXG4gICAgICAgIHJlc3Q6IHJlc3QsXG4gICAgfSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB0dXBsZShpdGVtcywgX3BhcmFtc09yUmVzdCwgX3BhcmFtcykge1xuICAgIGNvbnN0IGhhc1Jlc3QgPSBfcGFyYW1zT3JSZXN0IGluc3RhbmNlb2YgY29yZS4kWm9kVHlwZTtcbiAgICBjb25zdCBwYXJhbXMgPSBoYXNSZXN0ID8gX3BhcmFtcyA6IF9wYXJhbXNPclJlc3Q7XG4gICAgY29uc3QgcmVzdCA9IGhhc1Jlc3QgPyBfcGFyYW1zT3JSZXN0IDogbnVsbDtcbiAgICByZXR1cm4gbmV3IFpvZFR1cGxlKHtcbiAgICAgICAgdHlwZTogXCJ0dXBsZVwiLFxuICAgICAgICBpdGVtczogaXRlbXMsXG4gICAgICAgIHJlc3QsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kUmVjb3JkID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFJlY29yZFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kUmVjb3JkLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMucmVjb3JkUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LmtleVR5cGUgPSBkZWYua2V5VHlwZTtcbiAgICBpbnN0LnZhbHVlVHlwZSA9IGRlZi52YWx1ZVR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiByZWNvcmQoa2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJhbXMpIHtcbiAgICAvLyB2My1jb21wYXQ6IHoucmVjb3JkKHZhbHVlVHlwZSwgcGFyYW1zPykg4oCUIGRlZmF1bHRzIGtleVR5cGUgdG8gei5zdHJpbmcoKVxuICAgIGlmICghdmFsdWVUeXBlIHx8ICF2YWx1ZVR5cGUuX3pvZCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFJlY29yZCh7XG4gICAgICAgICAgICB0eXBlOiBcInJlY29yZFwiLFxuICAgICAgICAgICAga2V5VHlwZTogc3RyaW5nKCksXG4gICAgICAgICAgICB2YWx1ZVR5cGU6IGtleVR5cGUsXG4gICAgICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyh2YWx1ZVR5cGUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBab2RSZWNvcmQoe1xuICAgICAgICB0eXBlOiBcInJlY29yZFwiLFxuICAgICAgICBrZXlUeXBlLFxuICAgICAgICB2YWx1ZVR5cGU6IHZhbHVlVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIHR5cGUgYWxrc2pmID0gY29yZS5vdXRwdXQ8Y29yZS4kWm9kUmVjb3JkS2V5PjtcbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsUmVjb3JkKGtleVR5cGUsIHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgY29uc3QgayA9IGNvcmUuY2xvbmUoa2V5VHlwZSk7XG4gICAgay5fem9kLnZhbHVlcyA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbmV3IFpvZFJlY29yZCh7XG4gICAgICAgIHR5cGU6IFwicmVjb3JkXCIsXG4gICAgICAgIGtleVR5cGU6IGssXG4gICAgICAgIHZhbHVlVHlwZTogdmFsdWVUeXBlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGxvb3NlUmVjb3JkKGtleVR5cGUsIHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RSZWNvcmQoe1xuICAgICAgICB0eXBlOiBcInJlY29yZFwiLFxuICAgICAgICBrZXlUeXBlLFxuICAgICAgICB2YWx1ZVR5cGU6IHZhbHVlVHlwZSxcbiAgICAgICAgbW9kZTogXCJsb29zZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZE1hcCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RNYXBcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZE1hcC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLm1hcFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5rZXlUeXBlID0gZGVmLmtleVR5cGU7XG4gICAgaW5zdC52YWx1ZVR5cGUgPSBkZWYudmFsdWVUeXBlO1xuICAgIGluc3QubWluID0gKC4uLmFyZ3MpID0+IGluc3QuY2hlY2soY29yZS5fbWluU2l6ZSguLi5hcmdzKSk7XG4gICAgaW5zdC5ub25lbXB0eSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fbWluU2l6ZSgxLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1heCA9ICguLi5hcmdzKSA9PiBpbnN0LmNoZWNrKGNvcmUuX21heFNpemUoLi4uYXJncykpO1xuICAgIGluc3Quc2l6ZSA9ICguLi5hcmdzKSA9PiBpbnN0LmNoZWNrKGNvcmUuX3NpemUoLi4uYXJncykpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbWFwKGtleVR5cGUsIHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RNYXAoe1xuICAgICAgICB0eXBlOiBcIm1hcFwiLFxuICAgICAgICBrZXlUeXBlOiBrZXlUeXBlLFxuICAgICAgICB2YWx1ZVR5cGU6IHZhbHVlVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RTZXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kU2V0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RTZXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5zZXRQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QubWluID0gKC4uLmFyZ3MpID0+IGluc3QuY2hlY2soY29yZS5fbWluU2l6ZSguLi5hcmdzKSk7XG4gICAgaW5zdC5ub25lbXB0eSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fbWluU2l6ZSgxLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1heCA9ICguLi5hcmdzKSA9PiBpbnN0LmNoZWNrKGNvcmUuX21heFNpemUoLi4uYXJncykpO1xuICAgIGluc3Quc2l6ZSA9ICguLi5hcmdzKSA9PiBpbnN0LmNoZWNrKGNvcmUuX3NpemUoLi4uYXJncykpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gc2V0KHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RTZXQoe1xuICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICB2YWx1ZVR5cGU6IHZhbHVlVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RFbnVtID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEVudW1cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZEVudW0uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5lbnVtUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LmVudW0gPSBkZWYuZW50cmllcztcbiAgICBpbnN0Lm9wdGlvbnMgPSBPYmplY3QudmFsdWVzKGRlZi5lbnRyaWVzKTtcbiAgICBjb25zdCBrZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhkZWYuZW50cmllcykpO1xuICAgIGluc3QuZXh0cmFjdCA9ICh2YWx1ZXMsIHBhcmFtcykgPT4ge1xuICAgICAgICBjb25zdCBuZXdFbnRyaWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAoa2V5cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbmV3RW50cmllc1t2YWx1ZV0gPSBkZWYuZW50cmllc1t2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHt2YWx1ZX0gbm90IGZvdW5kIGluIGVudW1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFpvZEVudW0oe1xuICAgICAgICAgICAgLi4uZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgICAgICBlbnRyaWVzOiBuZXdFbnRyaWVzLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGluc3QuZXhjbHVkZSA9ICh2YWx1ZXMsIHBhcmFtcykgPT4ge1xuICAgICAgICBjb25zdCBuZXdFbnRyaWVzID0geyAuLi5kZWYuZW50cmllcyB9O1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgaWYgKGtleXMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdFbnRyaWVzW3ZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleSAke3ZhbHVlfSBub3QgZm91bmQgaW4gZW51bWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kRW51bSh7XG4gICAgICAgICAgICAuLi5kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgICAgIGVudHJpZXM6IG5ld0VudHJpZXMsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIF9lbnVtKHZhbHVlcywgcGFyYW1zKSB7XG4gICAgY29uc3QgZW50cmllcyA9IEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IE9iamVjdC5mcm9tRW50cmllcyh2YWx1ZXMubWFwKCh2KSA9PiBbdiwgdl0pKSA6IHZhbHVlcztcbiAgICByZXR1cm4gbmV3IFpvZEVudW0oe1xuICAgICAgICB0eXBlOiBcImVudW1cIixcbiAgICAgICAgZW50cmllcyxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCB7IF9lbnVtIGFzIGVudW0gfTtcbi8qKiBAZGVwcmVjYXRlZCBUaGlzIEFQSSBoYXMgYmVlbiBtZXJnZWQgaW50byBgei5lbnVtKClgLiBVc2UgYHouZW51bSgpYCBpbnN0ZWFkLlxuICpcbiAqIGBgYHRzXG4gKiBlbnVtIENvbG9ycyB7IHJlZCwgZ3JlZW4sIGJsdWUgfVxuICogei5lbnVtKENvbG9ycyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hdGl2ZUVudW0oZW50cmllcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RFbnVtKHtcbiAgICAgICAgdHlwZTogXCJlbnVtXCIsXG4gICAgICAgIGVudHJpZXMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kTGl0ZXJhbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RMaXRlcmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RMaXRlcmFsLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMubGl0ZXJhbFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC52YWx1ZXMgPSBuZXcgU2V0KGRlZi52YWx1ZXMpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0LCBcInZhbHVlXCIsIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgaWYgKGRlZi52YWx1ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgc2NoZW1hIGNvbnRhaW5zIG11bHRpcGxlIHZhbGlkIGxpdGVyYWwgdmFsdWVzLiBVc2UgYC52YWx1ZXNgIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlZi52YWx1ZXNbMF07XG4gICAgICAgIH0sXG4gICAgfSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBsaXRlcmFsKHZhbHVlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZExpdGVyYWwoe1xuICAgICAgICB0eXBlOiBcImxpdGVyYWxcIixcbiAgICAgICAgdmFsdWVzOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RGaWxlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEZpbGVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZEZpbGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5maWxlUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0Lm1pbiA9IChzaXplLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fbWluU2l6ZShzaXplLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1heCA9IChzaXplLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fbWF4U2l6ZShzaXplLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1pbWUgPSAodHlwZXMsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9taW1lKEFycmF5LmlzQXJyYXkodHlwZXMpID8gdHlwZXMgOiBbdHlwZXNdLCBwYXJhbXMpKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGUocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2ZpbGUoWm9kRmlsZSwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RUcmFuc2Zvcm0gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVHJhbnNmb3JtXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RUcmFuc2Zvcm0uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy50cmFuc2Zvcm1Qcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIGlmIChfY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kRW5jb2RlRXJyb3IoaW5zdC5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLmFkZElzc3VlID0gKGlzc3VlKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlzc3VlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh1dGlsLmlzc3VlKGlzc3VlLCBwYXlsb2FkLnZhbHVlLCBkZWYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGZvciBab2QgMyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZmF0YWwpXG4gICAgICAgICAgICAgICAgICAgIF9pc3N1ZS5jb250aW51ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIF9pc3N1ZS5jb2RlID8/IChfaXNzdWUuY29kZSA9IFwiY3VzdG9tXCIpO1xuICAgICAgICAgICAgICAgIF9pc3N1ZS5pbnB1dCA/PyAoX2lzc3VlLmlucHV0ID0gcGF5bG9hZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgX2lzc3VlLmluc3QgPz8gKF9pc3N1ZS5pbnN0ID0gaW5zdCk7XG4gICAgICAgICAgICAgICAgLy8gX2lzc3VlLmNvbnRpbnVlID8/PSB0cnVlO1xuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2godXRpbC5pc3N1ZShfaXNzdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gZGVmLnRyYW5zZm9ybShwYXlsb2FkLnZhbHVlLCBwYXlsb2FkKTtcbiAgICAgICAgaWYgKG91dHB1dCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQudGhlbigob3V0cHV0KSA9PiB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG91dHB1dDtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmZhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBvdXRwdXQ7XG4gICAgICAgIHBheWxvYWQuZmFsbGJhY2sgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgcmV0dXJuIG5ldyBab2RUcmFuc2Zvcm0oe1xuICAgICAgICB0eXBlOiBcInRyYW5zZm9ybVwiLFxuICAgICAgICB0cmFuc2Zvcm06IGZuLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZE9wdGlvbmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE9wdGlvbmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RPcHRpb25hbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLm9wdGlvbmFsUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gb3B0aW9uYWwoaW5uZXJUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBab2RPcHRpb25hbCh7XG4gICAgICAgIHR5cGU6IFwib3B0aW9uYWxcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kRXhhY3RPcHRpb25hbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RFeGFjdE9wdGlvbmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RFeGFjdE9wdGlvbmFsLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMub3B0aW9uYWxQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBleGFjdE9wdGlvbmFsKGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgWm9kRXhhY3RPcHRpb25hbCh7XG4gICAgICAgIHR5cGU6IFwib3B0aW9uYWxcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kTnVsbGFibGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTnVsbGFibGVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZE51bGxhYmxlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMubnVsbGFibGVQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBudWxsYWJsZShpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFpvZE51bGxhYmxlKHtcbiAgICAgICAgdHlwZTogXCJudWxsYWJsZVwiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbi8vIG51bGxpc2hcbmV4cG9ydCBmdW5jdGlvbiBudWxsaXNoKGlubmVyVHlwZSkge1xuICAgIHJldHVybiBvcHRpb25hbChudWxsYWJsZShpbm5lclR5cGUpKTtcbn1cbmV4cG9ydCBjb25zdCBab2REZWZhdWx0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZERlZmF1bHRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZERlZmF1bHQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5kZWZhdWx0UHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xuICAgIGluc3QucmVtb3ZlRGVmYXVsdCA9IGluc3QudW53cmFwO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gX2RlZmF1bHQoaW5uZXJUeXBlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IFpvZERlZmF1bHQoe1xuICAgICAgICB0eXBlOiBcImRlZmF1bHRcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgICAgIGdldCBkZWZhdWx0VmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gZGVmYXVsdFZhbHVlKCkgOiB1dGlsLnNoYWxsb3dDbG9uZShkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFByZWZhdWx0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFByZWZhdWx0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RQcmVmYXVsdC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnByZWZhdWx0UHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gcHJlZmF1bHQoaW5uZXJUeXBlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IFpvZFByZWZhdWx0KHtcbiAgICAgICAgdHlwZTogXCJwcmVmYXVsdFwiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZSxcbiAgICAgICAgZ2V0IGRlZmF1bHRWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyBkZWZhdWx0VmFsdWUoKSA6IHV0aWwuc2hhbGxvd0Nsb25lKGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kTm9uT3B0aW9uYWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTm9uT3B0aW9uYWxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZE5vbk9wdGlvbmFsLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMubm9ub3B0aW9uYWxQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBub25vcHRpb25hbChpbm5lclR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kTm9uT3B0aW9uYWwoe1xuICAgICAgICB0eXBlOiBcIm5vbm9wdGlvbmFsXCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFN1Y2Nlc3MgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kU3VjY2Vzc1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kU3VjY2Vzcy5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnN1Y2Nlc3NQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBzdWNjZXNzKGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgWm9kU3VjY2Vzcyh7XG4gICAgICAgIHR5cGU6IFwic3VjY2Vzc1wiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RDYXRjaCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDYXRjaFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kQ2F0Y2guaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5jYXRjaFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC51bndyYXAgPSAoKSA9PiBpbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbiAgICBpbnN0LnJlbW92ZUNhdGNoID0gaW5zdC51bndyYXA7XG59KTtcbmZ1bmN0aW9uIF9jYXRjaChpbm5lclR5cGUsIGNhdGNoVmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IFpvZENhdGNoKHtcbiAgICAgICAgdHlwZTogXCJjYXRjaFwiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZSxcbiAgICAgICAgY2F0Y2hWYWx1ZTogKHR5cGVvZiBjYXRjaFZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyBjYXRjaFZhbHVlIDogKCkgPT4gY2F0Y2hWYWx1ZSksXG4gICAgfSk7XG59XG5leHBvcnQgeyBfY2F0Y2ggYXMgY2F0Y2ggfTtcbmV4cG9ydCBjb25zdCBab2ROYU4gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTmFOXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2ROYU4uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5uYW5Qcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbmFuKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9uYW4oWm9kTmFOLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFBpcGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kUGlwZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kUGlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnBpcGVQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QuaW4gPSBkZWYuaW47XG4gICAgaW5zdC5vdXQgPSBkZWYub3V0O1xufSk7XG5leHBvcnQgZnVuY3Rpb24gcGlwZShpbl8sIG91dCkge1xuICAgIHJldHVybiBuZXcgWm9kUGlwZSh7XG4gICAgICAgIHR5cGU6IFwicGlwZVwiLFxuICAgICAgICBpbjogaW5fLFxuICAgICAgICBvdXQ6IG91dCxcbiAgICAgICAgLy8gLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RDb2RlYyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDb2RlY1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgWm9kUGlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kQ29kZWMuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gY29kZWMoaW5fLCBvdXQsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kQ29kZWMoe1xuICAgICAgICB0eXBlOiBcInBpcGVcIixcbiAgICAgICAgaW46IGluXyxcbiAgICAgICAgb3V0OiBvdXQsXG4gICAgICAgIHRyYW5zZm9ybTogcGFyYW1zLmRlY29kZSxcbiAgICAgICAgcmV2ZXJzZVRyYW5zZm9ybTogcGFyYW1zLmVuY29kZSxcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnRDb2RlYyhjb2RlYykge1xuICAgIGNvbnN0IGRlZiA9IGNvZGVjLl96b2QuZGVmO1xuICAgIHJldHVybiBuZXcgWm9kQ29kZWMoe1xuICAgICAgICB0eXBlOiBcInBpcGVcIixcbiAgICAgICAgaW46IGRlZi5vdXQsXG4gICAgICAgIG91dDogZGVmLmluLFxuICAgICAgICB0cmFuc2Zvcm06IGRlZi5yZXZlcnNlVHJhbnNmb3JtLFxuICAgICAgICByZXZlcnNlVHJhbnNmb3JtOiBkZWYudHJhbnNmb3JtLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFByZXByb2Nlc3MgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kUHJlcHJvY2Vzc1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgWm9kUGlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kUHJlcHJvY2Vzcy5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCBab2RSZWFkb25seSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RSZWFkb25seVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kUmVhZG9ubHkuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5yZWFkb25seVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC51bndyYXAgPSAoKSA9PiBpbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRvbmx5KGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgWm9kUmVhZG9ubHkoe1xuICAgICAgICB0eXBlOiBcInJlYWRvbmx5XCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFRlbXBsYXRlTGl0ZXJhbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RUZW1wbGF0ZUxpdGVyYWxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFRlbXBsYXRlTGl0ZXJhbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnRlbXBsYXRlTGl0ZXJhbFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZUxpdGVyYWwocGFydHMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kVGVtcGxhdGVMaXRlcmFsKHtcbiAgICAgICAgdHlwZTogXCJ0ZW1wbGF0ZV9saXRlcmFsXCIsXG4gICAgICAgIHBhcnRzLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZExhenkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTGF6eVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kTGF6eS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmxhenlQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5nZXR0ZXIoKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGxhenkoZ2V0dGVyKSB7XG4gICAgcmV0dXJuIG5ldyBab2RMYXp5KHtcbiAgICAgICAgdHlwZTogXCJsYXp5XCIsXG4gICAgICAgIGdldHRlcjogZ2V0dGVyLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFByb21pc2UgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kUHJvbWlzZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kUHJvbWlzZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnByb21pc2VQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlKGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgWm9kUHJvbWlzZSh7XG4gICAgICAgIHR5cGU6IFwicHJvbWlzZVwiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RGdW5jdGlvbiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RGdW5jdGlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kRnVuY3Rpb24uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5mdW5jdGlvblByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBfZnVuY3Rpb24ocGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RGdW5jdGlvbih7XG4gICAgICAgIHR5cGU6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgaW5wdXQ6IEFycmF5LmlzQXJyYXkocGFyYW1zPy5pbnB1dCkgPyB0dXBsZShwYXJhbXM/LmlucHV0KSA6IChwYXJhbXM/LmlucHV0ID8/IGFycmF5KHVua25vd24oKSkpLFxuICAgICAgICBvdXRwdXQ6IHBhcmFtcz8ub3V0cHV0ID8/IHVua25vd24oKSxcbiAgICB9KTtcbn1cbmV4cG9ydCB7IF9mdW5jdGlvbiBhcyBmdW5jdGlvbiB9O1xuZXhwb3J0IGNvbnN0IFpvZEN1c3RvbSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDdXN0b21cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZEN1c3RvbS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmN1c3RvbVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbi8vIGN1c3RvbSBjaGVja3NcbmV4cG9ydCBmdW5jdGlvbiBjaGVjayhmbikge1xuICAgIGNvbnN0IGNoID0gbmV3IGNvcmUuJFpvZENoZWNrKHtcbiAgICAgICAgY2hlY2s6IFwiY3VzdG9tXCIsXG4gICAgICAgIC8vIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG4gICAgY2guX3pvZC5jaGVjayA9IGZuO1xuICAgIHJldHVybiBjaDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjdXN0b20oZm4sIF9wYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fY3VzdG9tKFpvZEN1c3RvbSwgZm4gPz8gKCgpID0+IHRydWUpLCBfcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWZpbmUoZm4sIF9wYXJhbXMgPSB7fSkge1xuICAgIHJldHVybiBjb3JlLl9yZWZpbmUoWm9kQ3VzdG9tLCBmbiwgX3BhcmFtcyk7XG59XG4vLyBzdXBlclJlZmluZVxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyUmVmaW5lKGZuLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fc3VwZXJSZWZpbmUoZm4sIHBhcmFtcyk7XG59XG4vLyBSZS1leHBvcnQgZGVzY3JpYmUgYW5kIG1ldGEgZnJvbSBjb3JlXG5leHBvcnQgY29uc3QgZGVzY3JpYmUgPSBjb3JlLmRlc2NyaWJlO1xuZXhwb3J0IGNvbnN0IG1ldGEgPSBjb3JlLm1ldGE7XG5mdW5jdGlvbiBfaW5zdGFuY2VvZihjbHMsIHBhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgaW5zdCA9IG5ldyBab2RDdXN0b20oe1xuICAgICAgICB0eXBlOiBcImN1c3RvbVwiLFxuICAgICAgICBjaGVjazogXCJjdXN0b21cIixcbiAgICAgICAgZm46IChkYXRhKSA9PiBkYXRhIGluc3RhbmNlb2YgY2xzLFxuICAgICAgICBhYm9ydDogdHJ1ZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuYmFnLkNsYXNzID0gY2xzO1xuICAgIC8vIE92ZXJyaWRlIGNoZWNrIHRvIGVtaXQgaW52YWxpZF90eXBlIGluc3RlYWQgb2YgY3VzdG9tXG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKCEocGF5bG9hZC52YWx1ZSBpbnN0YW5jZW9mIGNscykpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IGNscy5uYW1lLFxuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgcGF0aDogWy4uLihpbnN0Ll96b2QuZGVmLnBhdGggPz8gW10pXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gaW5zdDtcbn1cbmV4cG9ydCB7IF9pbnN0YW5jZW9mIGFzIGluc3RhbmNlb2YgfTtcbi8vIHN0cmluZ2Jvb2xcbmV4cG9ydCBjb25zdCBzdHJpbmdib29sID0gKC4uLmFyZ3MpID0+IGNvcmUuX3N0cmluZ2Jvb2woe1xuICAgIENvZGVjOiBab2RDb2RlYyxcbiAgICBCb29sZWFuOiBab2RCb29sZWFuLFxuICAgIFN0cmluZzogWm9kU3RyaW5nLFxufSwgLi4uYXJncyk7XG5leHBvcnQgZnVuY3Rpb24ganNvbihwYXJhbXMpIHtcbiAgICBjb25zdCBqc29uU2NoZW1hID0gbGF6eSgoKSA9PiB7XG4gICAgICAgIHJldHVybiB1bmlvbihbc3RyaW5nKHBhcmFtcyksIG51bWJlcigpLCBib29sZWFuKCksIF9udWxsKCksIGFycmF5KGpzb25TY2hlbWEpLCByZWNvcmQoc3RyaW5nKCksIGpzb25TY2hlbWEpXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGpzb25TY2hlbWE7XG59XG4vLyBwcmVwcm9jZXNzXG5leHBvcnQgZnVuY3Rpb24gcHJlcHJvY2Vzcyhmbiwgc2NoZW1hKSB7XG4gICAgcmV0dXJuIG5ldyBab2RQcmVwcm9jZXNzKHtcbiAgICAgICAgdHlwZTogXCJwaXBlXCIsXG4gICAgICAgIGluOiB0cmFuc2Zvcm0oZm4pLFxuICAgICAgICBvdXQ6IHNjaGVtYSxcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IGdsb2JhbFJlZ2lzdHJ5IH0gZnJvbSBcIi4uL2NvcmUvcmVnaXN0cmllcy5qc1wiO1xuaW1wb3J0ICogYXMgX2NoZWNrcyBmcm9tIFwiLi9jaGVja3MuanNcIjtcbmltcG9ydCAqIGFzIF9pc28gZnJvbSBcIi4vaXNvLmpzXCI7XG5pbXBvcnQgKiBhcyBfc2NoZW1hcyBmcm9tIFwiLi9zY2hlbWFzLmpzXCI7XG4vLyBMb2NhbCB6IG9iamVjdCB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IHdpdGggLi4vaW5kZXguanNcbmNvbnN0IHogPSB7XG4gICAgLi4uX3NjaGVtYXMsXG4gICAgLi4uX2NoZWNrcyxcbiAgICBpc286IF9pc28sXG59O1xuLy8gS2V5cyB0aGF0IGFyZSByZWNvZ25pemVkIGFuZCBoYW5kbGVkIGJ5IHRoZSBjb252ZXJzaW9uIGxvZ2ljXG5jb25zdCBSRUNPR05JWkVEX0tFWVMgPSAvKkBfX1BVUkVfXyovIG5ldyBTZXQoW1xuICAgIC8vIFNjaGVtYSBpZGVudGlmaWNhdGlvblxuICAgIFwiJHNjaGVtYVwiLFxuICAgIFwiJHJlZlwiLFxuICAgIFwiJGRlZnNcIixcbiAgICBcImRlZmluaXRpb25zXCIsXG4gICAgLy8gQ29yZSBzY2hlbWEga2V5d29yZHNcbiAgICBcIiRpZFwiLFxuICAgIFwiaWRcIixcbiAgICBcIiRjb21tZW50XCIsXG4gICAgXCIkYW5jaG9yXCIsXG4gICAgXCIkdm9jYWJ1bGFyeVwiLFxuICAgIFwiJGR5bmFtaWNSZWZcIixcbiAgICBcIiRkeW5hbWljQW5jaG9yXCIsXG4gICAgLy8gVHlwZVxuICAgIFwidHlwZVwiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiY29uc3RcIixcbiAgICAvLyBDb21wb3NpdGlvblxuICAgIFwiYW55T2ZcIixcbiAgICBcIm9uZU9mXCIsXG4gICAgXCJhbGxPZlwiLFxuICAgIFwibm90XCIsXG4gICAgLy8gT2JqZWN0XG4gICAgXCJwcm9wZXJ0aWVzXCIsXG4gICAgXCJyZXF1aXJlZFwiLFxuICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIixcbiAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIsXG4gICAgXCJwcm9wZXJ0eU5hbWVzXCIsXG4gICAgXCJtaW5Qcm9wZXJ0aWVzXCIsXG4gICAgXCJtYXhQcm9wZXJ0aWVzXCIsXG4gICAgLy8gQXJyYXlcbiAgICBcIml0ZW1zXCIsXG4gICAgXCJwcmVmaXhJdGVtc1wiLFxuICAgIFwiYWRkaXRpb25hbEl0ZW1zXCIsXG4gICAgXCJtaW5JdGVtc1wiLFxuICAgIFwibWF4SXRlbXNcIixcbiAgICBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgXCJjb250YWluc1wiLFxuICAgIFwibWluQ29udGFpbnNcIixcbiAgICBcIm1heENvbnRhaW5zXCIsXG4gICAgLy8gU3RyaW5nXG4gICAgXCJtaW5MZW5ndGhcIixcbiAgICBcIm1heExlbmd0aFwiLFxuICAgIFwicGF0dGVyblwiLFxuICAgIFwiZm9ybWF0XCIsXG4gICAgLy8gTnVtYmVyXG4gICAgXCJtaW5pbXVtXCIsXG4gICAgXCJtYXhpbXVtXCIsXG4gICAgXCJleGNsdXNpdmVNaW5pbXVtXCIsXG4gICAgXCJleGNsdXNpdmVNYXhpbXVtXCIsXG4gICAgXCJtdWx0aXBsZU9mXCIsXG4gICAgLy8gQWxyZWFkeSBoYW5kbGVkIG1ldGFkYXRhXG4gICAgXCJkZXNjcmlwdGlvblwiLFxuICAgIFwiZGVmYXVsdFwiLFxuICAgIC8vIENvbnRlbnRcbiAgICBcImNvbnRlbnRFbmNvZGluZ1wiLFxuICAgIFwiY29udGVudE1lZGlhVHlwZVwiLFxuICAgIFwiY29udGVudFNjaGVtYVwiLFxuICAgIC8vIFVuc3VwcG9ydGVkIChlcnJvci10aHJvd2luZylcbiAgICBcInVuZXZhbHVhdGVkSXRlbXNcIixcbiAgICBcInVuZXZhbHVhdGVkUHJvcGVydGllc1wiLFxuICAgIFwiaWZcIixcbiAgICBcInRoZW5cIixcbiAgICBcImVsc2VcIixcbiAgICBcImRlcGVuZGVudFNjaGVtYXNcIixcbiAgICBcImRlcGVuZGVudFJlcXVpcmVkXCIsXG4gICAgLy8gT3BlbkFQSVxuICAgIFwibnVsbGFibGVcIixcbiAgICBcInJlYWRPbmx5XCIsXG5dKTtcbmZ1bmN0aW9uIGRldGVjdFZlcnNpb24oc2NoZW1hLCBkZWZhdWx0VGFyZ2V0KSB7XG4gICAgY29uc3QgJHNjaGVtYSA9IHNjaGVtYS4kc2NoZW1hO1xuICAgIGlmICgkc2NoZW1hID09PSBcImh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiZHJhZnQtMjAyMC0xMlwiO1xuICAgIH1cbiAgICBpZiAoJHNjaGVtYSA9PT0gXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSNcIikge1xuICAgICAgICByZXR1cm4gXCJkcmFmdC03XCI7XG4gICAgfVxuICAgIGlmICgkc2NoZW1hID09PSBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hI1wiKSB7XG4gICAgICAgIHJldHVybiBcImRyYWZ0LTRcIjtcbiAgICB9XG4gICAgLy8gVXNlIGRlZmF1bHRUYXJnZXQgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBkZWZhdWx0IHRvIGRyYWZ0LTIwMjAtMTJcbiAgICByZXR1cm4gZGVmYXVsdFRhcmdldCA/PyBcImRyYWZ0LTIwMjAtMTJcIjtcbn1cbmZ1bmN0aW9uIHJlc29sdmVSZWYocmVmLCBjdHgpIHtcbiAgICBpZiAoIXJlZi5zdGFydHNXaXRoKFwiI1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHRlcm5hbCAkcmVmIGlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgbG9jYWwgcmVmcyAoIy8uLi4pIGFyZSBhbGxvd2VkXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gcmVmLnNsaWNlKDEpLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgLy8gSGFuZGxlIHJvb3QgcmVmZXJlbmNlIFwiI1wiXG4gICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBjdHgucm9vdFNjaGVtYTtcbiAgICB9XG4gICAgY29uc3QgZGVmc0tleSA9IGN0eC52ZXJzaW9uID09PSBcImRyYWZ0LTIwMjAtMTJcIiA/IFwiJGRlZnNcIiA6IFwiZGVmaW5pdGlvbnNcIjtcbiAgICBpZiAocGF0aFswXSA9PT0gZGVmc0tleSkge1xuICAgICAgICBjb25zdCBrZXkgPSBwYXRoWzFdO1xuICAgICAgICBpZiAoIWtleSB8fCAhY3R4LmRlZnNba2V5XSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke3JlZn1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3R4LmRlZnNba2V5XTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke3JlZn1gKTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRCYXNlU2NoZW1hKHNjaGVtYSwgY3R4KSB7XG4gICAgLy8gSGFuZGxlIHVuc3VwcG9ydGVkIGZlYXR1cmVzXG4gICAgaWYgKHNjaGVtYS5ub3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBTcGVjaWFsIGNhc2U6IHsgbm90OiB7fSB9IHJlcHJlc2VudHMgbmV2ZXJcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEubm90ID09PSBcIm9iamVjdFwiICYmIE9iamVjdC5rZXlzKHNjaGVtYS5ub3QpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHoubmV2ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaXMgbm90IHN1cHBvcnRlZCBpbiBab2QgKGV4Y2VwdCB7IG5vdDoge30gfSBmb3IgbmV2ZXIpXCIpO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLnVuZXZhbHVhdGVkSXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmV2YWx1YXRlZEl0ZW1zIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuICAgIGlmIChzY2hlbWEudW5ldmFsdWF0ZWRQcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuaWYgIT09IHVuZGVmaW5lZCB8fCBzY2hlbWEudGhlbiAhPT0gdW5kZWZpbmVkIHx8IHNjaGVtYS5lbHNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29uZGl0aW9uYWwgc2NoZW1hcyAoaWYvdGhlbi9lbHNlKSBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5kZXBlbmRlbnRTY2hlbWFzICE9PSB1bmRlZmluZWQgfHwgc2NoZW1hLmRlcGVuZGVudFJlcXVpcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGVwZW5kZW50U2NoZW1hcyBhbmQgZGVwZW5kZW50UmVxdWlyZWQgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuICAgIC8vIEhhbmRsZSAkcmVmXG4gICAgaWYgKHNjaGVtYS4kcmVmKSB7XG4gICAgICAgIGNvbnN0IHJlZlBhdGggPSBzY2hlbWEuJHJlZjtcbiAgICAgICAgaWYgKGN0eC5yZWZzLmhhcyhyZWZQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5yZWZzLmdldChyZWZQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LnByb2Nlc3NpbmcuaGFzKHJlZlBhdGgpKSB7XG4gICAgICAgICAgICAvLyBDaXJjdWxhciByZWZlcmVuY2UgLSB1c2UgbGF6eVxuICAgICAgICAgICAgcmV0dXJuIHoubGF6eSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdHgucmVmcy5oYXMocmVmUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaXJjdWxhciByZWZlcmVuY2Ugbm90IHJlc29sdmVkOiAke3JlZlBhdGh9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjdHgucmVmcy5nZXQocmVmUGF0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdHgucHJvY2Vzc2luZy5hZGQocmVmUGF0aCk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVJlZihyZWZQYXRoLCBjdHgpO1xuICAgICAgICBjb25zdCB6b2RTY2hlbWEgPSBjb252ZXJ0U2NoZW1hKHJlc29sdmVkLCBjdHgpO1xuICAgICAgICBjdHgucmVmcy5zZXQocmVmUGF0aCwgem9kU2NoZW1hKTtcbiAgICAgICAgY3R4LnByb2Nlc3NpbmcuZGVsZXRlKHJlZlBhdGgpO1xuICAgICAgICByZXR1cm4gem9kU2NoZW1hO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgZW51bVxuICAgIGlmIChzY2hlbWEuZW51bSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZXMgPSBzY2hlbWEuZW51bTtcbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlOiBPcGVuQVBJIDMuMCBudWxsIHJlcHJlc2VudGF0aW9uIHsgdHlwZTogXCJzdHJpbmdcIiwgbnVsbGFibGU6IHRydWUsIGVudW06IFtudWxsXSB9XG4gICAgICAgIGlmIChjdHgudmVyc2lvbiA9PT0gXCJvcGVuYXBpLTMuMFwiICYmXG4gICAgICAgICAgICBzY2hlbWEubnVsbGFibGUgPT09IHRydWUgJiZcbiAgICAgICAgICAgIGVudW1WYWx1ZXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICBlbnVtVmFsdWVzWzBdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gei5udWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudW1WYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gei5uZXZlcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnVtVmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHoubGl0ZXJhbChlbnVtVmFsdWVzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiBhbGwgdmFsdWVzIGFyZSBzdHJpbmdzXG4gICAgICAgIGlmIChlbnVtVmFsdWVzLmV2ZXJ5KCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikpIHtcbiAgICAgICAgICAgIHJldHVybiB6LmVudW0oZW51bVZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWl4ZWQgdHlwZXMgLSB1c2UgdW5pb24gb2YgbGl0ZXJhbHNcbiAgICAgICAgY29uc3QgbGl0ZXJhbFNjaGVtYXMgPSBlbnVtVmFsdWVzLm1hcCgodikgPT4gei5saXRlcmFsKHYpKTtcbiAgICAgICAgaWYgKGxpdGVyYWxTY2hlbWFzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBsaXRlcmFsU2NoZW1hc1swXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gei51bmlvbihbbGl0ZXJhbFNjaGVtYXNbMF0sIGxpdGVyYWxTY2hlbWFzWzFdLCAuLi5saXRlcmFsU2NoZW1hcy5zbGljZSgyKV0pO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgY29uc3RcbiAgICBpZiAoc2NoZW1hLmNvbnN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHoubGl0ZXJhbChzY2hlbWEuY29uc3QpO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgdHlwZVxuICAgIGNvbnN0IHR5cGUgPSBzY2hlbWEudHlwZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgICAvLyBFeHBhbmQgdHlwZSBhcnJheSBpbnRvIGFueU9mIHVuaW9uXG4gICAgICAgIGNvbnN0IHR5cGVTY2hlbWFzID0gdHlwZS5tYXAoKHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVTY2hlbWEgPSB7IC4uLnNjaGVtYSwgdHlwZTogdCB9O1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRCYXNlU2NoZW1hKHR5cGVTY2hlbWEsIGN0eCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHlwZVNjaGVtYXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gei5uZXZlcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlU2NoZW1hcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlU2NoZW1hc1swXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gei51bmlvbih0eXBlU2NoZW1hcyk7XG4gICAgfVxuICAgIGlmICghdHlwZSkge1xuICAgICAgICAvLyBObyB0eXBlIHNwZWNpZmllZCAtIGVtcHR5IHNjaGVtYSAoYW55KVxuICAgICAgICByZXR1cm4gei5hbnkoKTtcbiAgICB9XG4gICAgbGV0IHpvZFNjaGVtYTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOiB7XG4gICAgICAgICAgICBsZXQgc3RyaW5nU2NoZW1hID0gei5zdHJpbmcoKTtcbiAgICAgICAgICAgIC8vIEFwcGx5IGZvcm1hdCB1c2luZyAuY2hlY2soKSB3aXRoIFpvZCBmb3JtYXQgZnVuY3Rpb25zXG4gICAgICAgICAgICBpZiAoc2NoZW1hLmZvcm1hdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IHNjaGVtYS5mb3JtYXQ7XG4gICAgICAgICAgICAgICAgLy8gTWFwIGNvbW1vbiBmb3JtYXRzIHRvIFpvZCBjaGVjayBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ID09PSBcImVtYWlsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouZW1haWwoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJ1cmlcIiB8fCBmb3JtYXQgPT09IFwidXJpLXJlZmVyZW5jZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LnVybCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcInV1aWRcIiB8fCBmb3JtYXQgPT09IFwiZ3VpZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LnV1aWQoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJkYXRlLXRpbWVcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5pc28uZGF0ZXRpbWUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJkYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouaXNvLmRhdGUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJ0aW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouaXNvLnRpbWUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJkdXJhdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6Lmlzby5kdXJhdGlvbigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcImlwdjRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5pcHY0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwiaXB2NlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmlwdjYoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJtYWNcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5tYWMoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJjaWRyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouY2lkcnY0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwiY2lkci12NlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmNpZHJ2NigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcImJhc2U2NFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmJhc2U2NCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcImJhc2U2NHVybFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmJhc2U2NHVybCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcImUxNjRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5lMTY0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwiand0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouand0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwiZW1vamlcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5lbW9qaSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcIm5hbm9pZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6Lm5hbm9pZCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcImN1aWRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5jdWlkKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwiY3VpZDJcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5jdWlkMigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcInVsaWRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei51bGlkKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwieGlkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHoueGlkKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwia3N1aWRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5rc3VpZCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm90ZToganNvbi1zdHJpbmcgZm9ybWF0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IFpvZFxuICAgICAgICAgICAgICAgIC8vIEN1c3RvbSBmb3JtYXRzIGFyZSBpZ25vcmVkIC0ga2VlcCBhcyBwbGFpbiBzdHJpbmdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFwcGx5IGNvbnN0cmFpbnRzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5MZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEubWluKHNjaGVtYS5taW5MZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEubWF4TGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLm1heChzY2hlbWEubWF4TGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzY2hlbWEucGF0dGVybikge1xuICAgICAgICAgICAgICAgIC8vIEpTT04gU2NoZW1hIHBhdHRlcm5zIGFyZSBub3QgaW1wbGljaXRseSBhbmNob3JlZCAobWF0Y2ggYW55d2hlcmUgaW4gc3RyaW5nKVxuICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5yZWdleChuZXcgUmVnRXhwKHNjaGVtYS5wYXR0ZXJuKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB6b2RTY2hlbWEgPSBzdHJpbmdTY2hlbWE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6IHtcbiAgICAgICAgICAgIGxldCBudW1iZXJTY2hlbWEgPSB0eXBlID09PSBcImludGVnZXJcIiA/IHoubnVtYmVyKCkuaW50KCkgOiB6Lm51bWJlcigpO1xuICAgICAgICAgICAgLy8gQXBwbHkgY29uc3RyYWludHNcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEubWluKHNjaGVtYS5taW5pbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1heGltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEubWF4KHNjaGVtYS5tYXhpbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEuZ3Qoc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0gPT09IHRydWUgJiYgdHlwZW9mIHNjaGVtYS5taW5pbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyU2NoZW1hID0gbnVtYmVyU2NoZW1hLmd0KHNjaGVtYS5taW5pbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEubHQoc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0gPT09IHRydWUgJiYgdHlwZW9mIHNjaGVtYS5tYXhpbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyU2NoZW1hID0gbnVtYmVyU2NoZW1hLmx0KHNjaGVtYS5tYXhpbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm11bHRpcGxlT2YgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEubXVsdGlwbGVPZihzY2hlbWEubXVsdGlwbGVPZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB6b2RTY2hlbWEgPSBudW1iZXJTY2hlbWE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOiB7XG4gICAgICAgICAgICB6b2RTY2hlbWEgPSB6LmJvb2xlYW4oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJudWxsXCI6IHtcbiAgICAgICAgICAgIHpvZFNjaGVtYSA9IHoubnVsbCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IHt9O1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHNjaGVtYS5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVxdWlyZWRTZXQgPSBuZXcgU2V0KHNjaGVtYS5yZXF1aXJlZCB8fCBbXSk7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IHByb3BlcnRpZXMgLSBtYXJrIG9wdGlvbmFsIG9uZXNcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgcHJvcFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wWm9kU2NoZW1hID0gY29udmVydFNjaGVtYShwcm9wU2NoZW1hLCBjdHgpO1xuICAgICAgICAgICAgICAgIC8vIElmIG5vdCBpbiByZXF1aXJlZCBhcnJheSwgbWFrZSBpdCBvcHRpb25hbFxuICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSByZXF1aXJlZFNldC5oYXMoa2V5KSA/IHByb3Bab2RTY2hlbWEgOiBwcm9wWm9kU2NoZW1hLm9wdGlvbmFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIYW5kbGUgcHJvcGVydHlOYW1lc1xuICAgICAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5U2NoZW1hID0gY29udmVydFNjaGVtYShzY2hlbWEucHJvcGVydHlOYW1lcywgY3R4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVNjaGVtYSA9IHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyAmJiB0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAgICAgICAgID8gY29udmVydFNjaGVtYShzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMsIGN0eClcbiAgICAgICAgICAgICAgICAgICAgOiB6LmFueSgpO1xuICAgICAgICAgICAgICAgIC8vIENhc2UgQTogTm8gcHJvcGVydGllcyAocHVyZSByZWNvcmQpXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNoYXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgem9kU2NoZW1hID0gei5yZWNvcmQoa2V5U2NoZW1hLCB2YWx1ZVNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBDYXNlIEI6IFdpdGggcHJvcGVydGllcyAoaW50ZXJzZWN0aW9uIG9mIG9iamVjdCBhbmQgbG9vc2VSZWNvcmQpXG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0U2NoZW1hID0gei5vYmplY3Qoc2hhcGUpLnBhc3N0aHJvdWdoKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkU2NoZW1hID0gei5sb29zZVJlY29yZChrZXlTY2hlbWEsIHZhbHVlU2NoZW1hKTtcbiAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LmludGVyc2VjdGlvbihvYmplY3RTY2hlbWEsIHJlY29yZFNjaGVtYSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIYW5kbGUgcGF0dGVyblByb3BlcnRpZXNcbiAgICAgICAgICAgIGlmIChzY2hlbWEucGF0dGVyblByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBwYXR0ZXJuUHJvcGVydGllczoga2V5cyBtYXRjaGluZyBwYXR0ZXJuIG11c3Qgc2F0aXNmeSBjb3JyZXNwb25kaW5nIHNjaGVtYVxuICAgICAgICAgICAgICAgIC8vIFVzZSBsb29zZSByZWNvcmRzIHNvIG5vbi1tYXRjaGluZyBrZXlzIHBhc3MgdGhyb3VnaFxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5Qcm9wcyA9IHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcztcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuS2V5cyA9IE9iamVjdC5rZXlzKHBhdHRlcm5Qcm9wcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9vc2VSZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5LZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5WYWx1ZSA9IGNvbnZlcnRTY2hlbWEocGF0dGVyblByb3BzW3BhdHRlcm5dLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlTY2hlbWEgPSB6LnN0cmluZygpLnJlZ2V4KG5ldyBSZWdFeHAocGF0dGVybikpO1xuICAgICAgICAgICAgICAgICAgICBsb29zZVJlY29yZHMucHVzaCh6Lmxvb3NlUmVjb3JkKGtleVNjaGVtYSwgcGF0dGVyblZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEJ1aWxkIGludGVyc2VjdGlvbjogb2JqZWN0IHNjaGVtYSArIGFsbCBwYXR0ZXJuIHByb3BlcnR5IHJlY29yZHNcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFzVG9JbnRlcnNlY3QgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2hhcGUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHBhc3N0aHJvdWdoIHNvIHBhdHRlcm5Qcm9wZXJ0aWVzIGNhbiB2YWxpZGF0ZSBhZGRpdGlvbmFsIGtleXNcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hc1RvSW50ZXJzZWN0LnB1c2goei5vYmplY3Qoc2hhcGUpLnBhc3N0aHJvdWdoKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzY2hlbWFzVG9JbnRlcnNlY3QucHVzaCguLi5sb29zZVJlY29yZHMpO1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWFzVG9JbnRlcnNlY3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHoub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWFzVG9JbnRlcnNlY3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHNjaGVtYXNUb0ludGVyc2VjdFswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoYWluIGludGVyc2VjdGlvbnM6IChBICYgQikgJiBDICYgRCAuLi5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHouaW50ZXJzZWN0aW9uKHNjaGVtYXNUb0ludGVyc2VjdFswXSwgc2NoZW1hc1RvSW50ZXJzZWN0WzFdKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCBzY2hlbWFzVG9JbnRlcnNlY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHouaW50ZXJzZWN0aW9uKHJlc3VsdCwgc2NoZW1hc1RvSW50ZXJzZWN0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSGFuZGxlIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXG4gICAgICAgICAgICAvLyBJbiBKU09OIFNjaGVtYSwgYWRkaXRpb25hbFByb3BlcnRpZXMgZGVmYXVsdHMgdG8gdHJ1ZSAoYWxsb3cgYW55IGV4dHJhIHByb3BlcnRpZXMpXG4gICAgICAgICAgICAvLyBJbiBab2QsIG9iamVjdHMgc3RyaXAgdW5rbm93biBrZXlzIGJ5IGRlZmF1bHQsIHNvIHdlIG5lZWQgdG8gaGFuZGxlIHRoaXMgZXhwbGljaXRseVxuICAgICAgICAgICAgY29uc3Qgb2JqZWN0U2NoZW1hID0gei5vYmplY3Qoc2hhcGUpO1xuICAgICAgICAgICAgaWYgKHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBTdHJpY3QgbW9kZSAtIG5vIGV4dHJhIHByb3BlcnRpZXMgYWxsb3dlZFxuICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IG9iamVjdFNjaGVtYS5zdHJpY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAvLyBFeHRyYSBwcm9wZXJ0aWVzIG11c3QgbWF0Y2ggdGhlIHNwZWNpZmllZCBzY2hlbWFcbiAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSBvYmplY3RTY2hlbWEuY2F0Y2hhbGwoY29udmVydFNjaGVtYShzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMsIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkaXRpb25hbFByb3BlcnRpZXMgaXMgdHJ1ZSBvciB1bmRlZmluZWQgLSBhbGxvdyBhbnkgZXh0cmEgcHJvcGVydGllcyAocGFzc3Rocm91Z2gpXG4gICAgICAgICAgICAgICAgem9kU2NoZW1hID0gb2JqZWN0U2NoZW1hLnBhc3N0aHJvdWdoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiYXJyYXlcIjoge1xuICAgICAgICAgICAgLy8gVE9ETzogdW5pcXVlSXRlbXMgaXMgbm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgLy8gVE9ETzogY29udGFpbnMvbWluQ29udGFpbnMvbWF4Q29udGFpbnMgYXJlIG5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSB0dXBsZSAocHJlZml4SXRlbXMgb3IgaXRlbXMgYXMgYXJyYXkpXG4gICAgICAgICAgICBjb25zdCBwcmVmaXhJdGVtcyA9IHNjaGVtYS5wcmVmaXhJdGVtcztcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gc2NoZW1hLml0ZW1zO1xuICAgICAgICAgICAgaWYgKHByZWZpeEl0ZW1zICYmIEFycmF5LmlzQXJyYXkocHJlZml4SXRlbXMpKSB7XG4gICAgICAgICAgICAgICAgLy8gVHVwbGUgd2l0aCBwcmVmaXhJdGVtcyAoZHJhZnQtMjAyMC0xMilcbiAgICAgICAgICAgICAgICBjb25zdCB0dXBsZUl0ZW1zID0gcHJlZml4SXRlbXMubWFwKChpdGVtKSA9PiBjb252ZXJ0U2NoZW1hKGl0ZW0sIGN0eCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBpdGVtcyAmJiB0eXBlb2YgaXRlbXMgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoaXRlbXMpXG4gICAgICAgICAgICAgICAgICAgID8gY29udmVydFNjaGVtYShpdGVtcywgY3R4KVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAocmVzdCkge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LnR1cGxlKHR1cGxlSXRlbXMpLnJlc3QocmVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LnR1cGxlKHR1cGxlSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBcHBseSBtaW5JdGVtcy9tYXhJdGVtcyBjb25zdHJhaW50cyB0byB0dXBsZXNcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5JdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6b2RTY2hlbWEuY2hlY2soei5taW5MZW5ndGgoc2NoZW1hLm1pbkl0ZW1zKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1heEl0ZW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHpvZFNjaGVtYS5jaGVjayh6Lm1heExlbmd0aChzY2hlbWEubWF4SXRlbXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgICAgIC8vIFR1cGxlIHdpdGggaXRlbXMgYXJyYXkgKGRyYWZ0LTcpXG4gICAgICAgICAgICAgICAgY29uc3QgdHVwbGVJdGVtcyA9IGl0ZW1zLm1hcCgoaXRlbSkgPT4gY29udmVydFNjaGVtYShpdGVtLCBjdHgpKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN0ID0gc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyAmJiB0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgICAgICA/IGNvbnZlcnRTY2hlbWEoc2NoZW1hLmFkZGl0aW9uYWxJdGVtcywgY3R4KVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDsgLy8gYWRkaXRpb25hbEl0ZW1zOiBmYWxzZSBtZWFucyBubyByZXN0LCBoYW5kbGVkIGJ5IGRlZmF1bHQgdHVwbGUgYmVoYXZpb3JcbiAgICAgICAgICAgICAgICBpZiAocmVzdCkge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LnR1cGxlKHR1cGxlSXRlbXMpLnJlc3QocmVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LnR1cGxlKHR1cGxlSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBcHBseSBtaW5JdGVtcy9tYXhJdGVtcyBjb25zdHJhaW50cyB0byB0dXBsZXNcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5JdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6b2RTY2hlbWEuY2hlY2soei5taW5MZW5ndGgoc2NoZW1hLm1pbkl0ZW1zKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1heEl0ZW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHpvZFNjaGVtYS5jaGVjayh6Lm1heExlbmd0aChzY2hlbWEubWF4SXRlbXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpdGVtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVndWxhciBhcnJheVxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb252ZXJ0U2NoZW1hKGl0ZW1zLCBjdHgpO1xuICAgICAgICAgICAgICAgIGxldCBhcnJheVNjaGVtYSA9IHouYXJyYXkoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgLy8gQXBwbHkgY29uc3RyYWludHNcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5JdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVNjaGVtYSA9IGFycmF5U2NoZW1hLm1pbihzY2hlbWEubWluSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5tYXhJdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVNjaGVtYSA9IGFycmF5U2NoZW1hLm1heChzY2hlbWEubWF4SXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSBhcnJheVNjaGVtYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE5vIGl0ZW1zIHNwZWNpZmllZCAtIGFycmF5IG9mIGFueVxuICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHouYXJyYXkoei5hbnkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlOiAke3R5cGV9YCk7XG4gICAgfVxuICAgIHJldHVybiB6b2RTY2hlbWE7XG59XG5mdW5jdGlvbiBjb252ZXJ0U2NoZW1hKHNjaGVtYSwgY3R4KSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWEgPyB6LmFueSgpIDogei5uZXZlcigpO1xuICAgIH1cbiAgICAvLyBDb252ZXJ0IGJhc2Ugc2NoZW1hIGZpcnN0IChpZ25vcmluZyBjb21wb3NpdGlvbiBrZXl3b3JkcylcbiAgICBsZXQgYmFzZVNjaGVtYSA9IGNvbnZlcnRCYXNlU2NoZW1hKHNjaGVtYSwgY3R4KTtcbiAgICBjb25zdCBoYXNFeHBsaWNpdFR5cGUgPSBzY2hlbWEudHlwZSB8fCBzY2hlbWEuZW51bSAhPT0gdW5kZWZpbmVkIHx8IHNjaGVtYS5jb25zdCAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIFByb2Nlc3MgY29tcG9zaXRpb24ga2V5d29yZHMgTEFTVCAodGhleSBjYW4gYXBwZWFyIHRvZ2V0aGVyKVxuICAgIC8vIEhhbmRsZSBhbnlPZiAtIHdyYXAgYmFzZSBzY2hlbWEgd2l0aCB1bmlvblxuICAgIGlmIChzY2hlbWEuYW55T2YgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEuYW55T2YpKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzY2hlbWEuYW55T2YubWFwKChzKSA9PiBjb252ZXJ0U2NoZW1hKHMsIGN0eCkpO1xuICAgICAgICBjb25zdCBhbnlPZlVuaW9uID0gei51bmlvbihvcHRpb25zKTtcbiAgICAgICAgYmFzZVNjaGVtYSA9IGhhc0V4cGxpY2l0VHlwZSA/IHouaW50ZXJzZWN0aW9uKGJhc2VTY2hlbWEsIGFueU9mVW5pb24pIDogYW55T2ZVbmlvbjtcbiAgICB9XG4gICAgLy8gSGFuZGxlIG9uZU9mIC0gZXhjbHVzaXZlIHVuaW9uIChleGFjdGx5IG9uZSBtdXN0IG1hdGNoKVxuICAgIGlmIChzY2hlbWEub25lT2YgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEub25lT2YpKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzY2hlbWEub25lT2YubWFwKChzKSA9PiBjb252ZXJ0U2NoZW1hKHMsIGN0eCkpO1xuICAgICAgICBjb25zdCBvbmVPZlVuaW9uID0gei54b3Iob3B0aW9ucyk7XG4gICAgICAgIGJhc2VTY2hlbWEgPSBoYXNFeHBsaWNpdFR5cGUgPyB6LmludGVyc2VjdGlvbihiYXNlU2NoZW1hLCBvbmVPZlVuaW9uKSA6IG9uZU9mVW5pb247XG4gICAgfVxuICAgIC8vIEhhbmRsZSBhbGxPZiAtIHdyYXAgYmFzZSBzY2hlbWEgd2l0aCBpbnRlcnNlY3Rpb25cbiAgICBpZiAoc2NoZW1hLmFsbE9mICYmIEFycmF5LmlzQXJyYXkoc2NoZW1hLmFsbE9mKSkge1xuICAgICAgICBpZiAoc2NoZW1hLmFsbE9mLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYmFzZVNjaGVtYSA9IGhhc0V4cGxpY2l0VHlwZSA/IGJhc2VTY2hlbWEgOiB6LmFueSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGhhc0V4cGxpY2l0VHlwZSA/IGJhc2VTY2hlbWEgOiBjb252ZXJ0U2NoZW1hKHNjaGVtYS5hbGxPZlswXSwgY3R4KTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gaGFzRXhwbGljaXRUeXBlID8gMCA6IDE7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRJZHg7IGkgPCBzY2hlbWEuYWxsT2YubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB6LmludGVyc2VjdGlvbihyZXN1bHQsIGNvbnZlcnRTY2hlbWEoc2NoZW1hLmFsbE9mW2ldLCBjdHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJhc2VTY2hlbWEgPSByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSGFuZGxlIG51bGxhYmxlIChPcGVuQVBJIDMuMClcbiAgICBpZiAoc2NoZW1hLm51bGxhYmxlID09PSB0cnVlICYmIGN0eC52ZXJzaW9uID09PSBcIm9wZW5hcGktMy4wXCIpIHtcbiAgICAgICAgYmFzZVNjaGVtYSA9IHoubnVsbGFibGUoYmFzZVNjaGVtYSk7XG4gICAgfVxuICAgIC8vIEhhbmRsZSByZWFkT25seVxuICAgIGlmIChzY2hlbWEucmVhZE9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgYmFzZVNjaGVtYSA9IHoucmVhZG9ubHkoYmFzZVNjaGVtYSk7XG4gICAgfVxuICAgIC8vIEFwcGx5IGBkZWZhdWx0YCBzbyBpdCB3cmFwcyB0aGUgZnVsbHktY29tcG9zZWQgc2NoZW1hLiBUaGlzIGVuc3VyZXNcbiAgICAvLyBgcGFyc2UodW5kZWZpbmVkKSAtPiBkZWZhdWx0YCB3b3JrcyByZWdhcmRsZXNzIG9mIHdoaWNoIGJyYW5jaCBvZlxuICAgIC8vIGBjb252ZXJ0QmFzZVNjaGVtYWAgcHJvZHVjZWQgdGhlIGlubmVyIHNjaGVtYSAoZW51bS9jb25zdC9ub3QvdHlwZWQvZXRjLikuXG4gICAgaWYgKHNjaGVtYS5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYmFzZVNjaGVtYSA9IGJhc2VTY2hlbWEuZGVmYXVsdChzY2hlbWEuZGVmYXVsdCk7XG4gICAgfVxuICAgIC8vIENvbGxlY3Qgbm9uLWRlc2NyaXB0aW9uIGFubm90YXRpb24gbWV0YWRhdGEgaW50byB0aGUgdXNlci1zdXBwbGllZFxuICAgIC8vIHJlZ2lzdHJ5LiBEZXNjcmlwdGlvbiBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgYmVsb3cgdmlhIGAuZGVzY3JpYmUoKWAgdG9cbiAgICAvLyBwcmVzZXJ2ZSB0aGUgY29udHJhY3QgdGhhdCBgc2NoZW1hLmRlc2NyaXB0aW9uYCByZWFkcyBmcm9tIGdsb2JhbFJlZ2lzdHJ5LlxuICAgIGNvbnN0IGV4dHJhTWV0YSA9IHt9O1xuICAgIGNvbnN0IGNvcmVNZXRhZGF0YUtleXMgPSBbXCIkaWRcIiwgXCJpZFwiLCBcIiRjb21tZW50XCIsIFwiJGFuY2hvclwiLCBcIiR2b2NhYnVsYXJ5XCIsIFwiJGR5bmFtaWNSZWZcIiwgXCIkZHluYW1pY0FuY2hvclwiXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb3JlTWV0YWRhdGFLZXlzKSB7XG4gICAgICAgIGlmIChrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICBleHRyYU1ldGFba2V5XSA9IHNjaGVtYVtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbnRlbnRNZXRhZGF0YUtleXMgPSBbXCJjb250ZW50RW5jb2RpbmdcIiwgXCJjb250ZW50TWVkaWFUeXBlXCIsIFwiY29udGVudFNjaGVtYVwiXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb250ZW50TWV0YWRhdGFLZXlzKSB7XG4gICAgICAgIGlmIChrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICBleHRyYU1ldGFba2V5XSA9IHNjaGVtYVtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNjaGVtYSkpIHtcbiAgICAgICAgaWYgKCFSRUNPR05JWkVEX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGV4dHJhTWV0YVtrZXldID0gc2NoZW1hW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGV4dHJhTWV0YSkubGVuZ3RoID4gMCkge1xuICAgICAgICBjdHgucmVnaXN0cnkuYWRkKGJhc2VTY2hlbWEsIGV4dHJhTWV0YSk7XG4gICAgfVxuICAgIC8vIEFwcGx5IGRlc2NyaXB0aW9uIGxhc3QuIGAuZGVzY3JpYmUoKWAgY2xvbmVzIHRoZSBzY2hlbWEgYW5kIHNldHNcbiAgICAvLyBgX3pvZC5wYXJlbnRgIG9uIHRoZSBjbG9uZSwgc28gcmVnaXN0cnkgbG9va3VwcyBvbiB0aGUgcmV0dXJuZWQgcmVmZXJlbmNlXG4gICAgLy8gc3RpbGwgcmVzb2x2ZSBgZXh0cmFNZXRhYCB2aWEgcGFyZW50IGluaGVyaXRhbmNlLlxuICAgIGlmIChzY2hlbWEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgYmFzZVNjaGVtYSA9IGJhc2VTY2hlbWEuZGVzY3JpYmUoc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2VTY2hlbWE7XG59XG4vKipcbiAqIENvbnZlcnRzIGEgSlNPTiBTY2hlbWEgdG8gYSBab2Qgc2NoZW1hLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjb25zaWRlcmVkIHNlbWktZXhwZXJpbWVudGFsLiBJdCdzIGJlaGF2aW9yIGlzIGxpYWJsZSB0byBjaGFuZ2UuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUpTT05TY2hlbWEoc2NoZW1hLCBwYXJhbXMpIHtcbiAgICAvLyBIYW5kbGUgYm9vbGVhbiBzY2hlbWFzXG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWEgPyB6LmFueSgpIDogei5uZXZlcigpO1xuICAgIH1cbiAgICAvLyBOb3JtYWxpemUgaW5wdXQgdmlhIGEgSlNPTiByb3VuZC10cmlwLiBUaGlzIGd1YXJhbnRlZXMgdGhlIGNvbnZlcnRlclxuICAgIC8vIHdhbGtzIGEgcGxhaW4sIGZpbml0ZSwgSlNPTi12YWxpZCBvYmplY3QgZ3JhcGg6IGN5Y2xpYyBpbnB1dHMgZmFpbCBoZXJlLFxuICAgIC8vIGdldHRlci9Qcm94eS1iYXNlZCBwcm9wZXJ0aWVzIGFyZSBtYXRlcmlhbGl6ZWQgaW50byBzdGF0aWMgdmFsdWVzLCBhbmRcbiAgICAvLyBjbGFzcyBpbnN0YW5jZXMgY29sbGFwc2UgdG8gcGxhaW4gb2JqZWN0cy5cbiAgICBsZXQgbm9ybWFsaXplZDtcbiAgICB0cnkge1xuICAgICAgICBub3JtYWxpemVkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzY2hlbWEpKTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmcm9tSlNPTlNjaGVtYSBpbnB1dCBpcyBub3QgdmFsaWQgSlNPTiAocG9zc2libHkgY3ljbGljKTsgdXNlICRkZWZzLyRyZWYgZm9yIHJlY3Vyc2l2ZSBzY2hlbWFzXCIpO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uID0gZGV0ZWN0VmVyc2lvbihub3JtYWxpemVkLCBwYXJhbXM/LmRlZmF1bHRUYXJnZXQpO1xuICAgIGNvbnN0IGRlZnMgPSAobm9ybWFsaXplZC4kZGVmcyB8fCBub3JtYWxpemVkLmRlZmluaXRpb25zIHx8IHt9KTtcbiAgICBjb25zdCBjdHggPSB7XG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIGRlZnMsXG4gICAgICAgIHJlZnM6IG5ldyBNYXAoKSxcbiAgICAgICAgcHJvY2Vzc2luZzogbmV3IFNldCgpLFxuICAgICAgICByb290U2NoZW1hOiBub3JtYWxpemVkLFxuICAgICAgICByZWdpc3RyeTogcGFyYW1zPy5yZWdpc3RyeSA/PyBnbG9iYWxSZWdpc3RyeSxcbiAgICB9O1xuICAgIHJldHVybiBjb252ZXJ0U2NoZW1hKG5vcm1hbGl6ZWQsIGN0eCk7XG59XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNldmVyaXR5KHNldmVyaXR5Pzogc3RyaW5nKTogJ2hpZ2gnIHwgJ2NyaXRpY2FsJyB8ICdtZWRpdW0nIHwgJ2xvdycgfCB1bmRlZmluZWQge1xuICBzd2l0Y2ggKHNldmVyaXR5Py50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGlnaCc6XG4gICAgICByZXR1cm4gJ2hpZ2gnO1xuICAgIGNhc2UgJ2NyaXRpY2FsJzpcbiAgICAgIHJldHVybiAnY3JpdGljYWwnO1xuICAgIGNhc2UgJ21lZGl1bSc6XG4gICAgICByZXR1cm4gJ21lZGl1bSc7XG4gICAgY2FzZSAnbG93JzpcbiAgICBjYXNlICduZWdsaWdpYmxlJzpcbiAgICAgIHJldHVybiAnbG93JztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIE5vIGpzb24tc2NoZW1hIGlzIHByb3ZpZGVkIGZvciBncnlwZSBqc29uIG91dHB1dFxuICogV2FpdGluZyBvbiB1cHN0cmVhbSBodHRwczovL2dpdGh1Yi5jb20vYW5jaG9yZS9ncnlwZS9pc3N1ZXMvMjE0XG4gKi9cbmV4cG9ydCBjb25zdCBHcnlwZURvY3VtZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICBtYXRjaGVzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIHZ1bG5lcmFiaWxpdHk6IHoub2JqZWN0KHtcbiAgICAgICAgaWQ6IHouc3RyaW5nKCksXG4gICAgICAgIHNldmVyaXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCkudHJhbnNmb3JtKG5vcm1hbGl6ZVNldmVyaXR5KSxcbiAgICAgICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICApLFxufSk7XG5cbmV4cG9ydCB0eXBlIERvY3VtZW50ID0gei5vdXRwdXQ8dHlwZW9mIEdyeXBlRG9jdW1lbnRTY2hlbWE+O1xuIiwie1xuICBcIiRzY2hlbWFcIjogXCJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYVwiLFxuICBcIiRpZFwiOiBcImFuY2hvcmUuaW8vc2NoZW1hL3N5ZnQvanNvbi8xNi4xLjMvZG9jdW1lbnRcIixcbiAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Eb2N1bWVudFwiLFxuICBcIiRkZWZzXCI6IHtcbiAgICBcIkFscG1EYkVudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiYmFzZXBhY2thZ2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCYXNlUGFja2FnZSBpcyB0aGUgYmFzZSBwYWNrYWdlIG5hbWUgdGhpcyBwYWNrYWdlIHdhcyBidWlsdCBmcm9tIChzb3VyY2UgcGFja2FnZSBpbiBBcmNoIGJ1aWxkIHN5c3RlbSlcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhY2thZ2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYWNrYWdlIGlzIHRoZSBwYWNrYWdlIG5hbWUgYXMgZm91bmQgaW4gdGhlIGRlc2MgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvbiBhcyBmb3VuZCBpbiB0aGUgZGVzYyBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0aW9uIGlzIGEgaHVtYW4tcmVhZGFibGUgcGFja2FnZSBkZXNjcmlwdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl0ZWN0dXJlIGlzIHRoZSB0YXJnZXQgQ1BVIGFyY2hpdGVjdHVyZSBhcyBkZWZpbmVkIGluIEFyY2ggYXJjaGl0ZWN0dXJlIHNwZWMgKGUuZy4geDg2XzY0LCBhYXJjaDY0LCBvciBcXFwiYW55XFxcIiBmb3IgYXJjaC1pbmRlcGVuZGVudCBwYWNrYWdlcylcIlxuICAgICAgICB9LFxuICAgICAgICBcInNpemVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2l6ZSBpcyB0aGUgaW5zdGFsbGVkIHNpemUgaW4gYnl0ZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhY2thZ2VyXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFja2FnZXIgaXMgdGhlIG5hbWUgYW5kIGVtYWlsIG9mIHRoZSBwZXJzb24gd2hvIHBhY2thZ2VkIHRoaXMgKFJGQzgyMiBmb3JtYXQpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkwgaXMgdGhlIHVwc3RyZWFtIHByb2plY3QgVVJMXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2YWxpZGF0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmFsaWRhdGlvbiBpcyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgdXNlZCBmb3IgcGFja2FnZSBpbnRlZ3JpdHkgKGUuZy4gcGdwIHNpZ25hdHVyZSwgc2hhMjU2IGNoZWNrc3VtKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVhc29uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlYXNvbiBpcyB0aGUgaW5zdGFsbGF0aW9uIHJlYXNvbiB0cmFja2VkIGJ5IHBhY21hbiAoMD1leHBsaWNpdGx5IGluc3RhbGxlZCBieSB1c2VyLCAxPWluc3RhbGxlZCBhcyBkZXBlbmRlbmN5KVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9BbHBtRmlsZVJlY29yZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlcyBhcmUgdGhlIGZpbGVzIGluc3RhbGxlZCBieSB0aGlzIHBhY2thZ2VcIlxuICAgICAgICB9LFxuICAgICAgICBcImJhY2t1cFwiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0FscG1GaWxlUmVjb3JkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkJhY2t1cCBpcyB0aGUgbGlzdCBvZiBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgcGFjbWFuIGJhY2tzIHVwIGJlZm9yZSB1cGdyYWRlc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvdmlkZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlByb3ZpZGVzIGFyZSB2aXJ0dWFsIHBhY2thZ2VzIHByb3ZpZGVkIGJ5IHRoaXMgcGFja2FnZSAoYWxsb3dzIG90aGVyIHBhY2thZ2VzIHRvIGRlcGVuZCBvbiBjYXBhYmlsaXRpZXMgcmF0aGVyIHRoYW4gc3BlY2lmaWMgcGFja2FnZXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRzIGFyZSB0aGUgcnVudGltZSBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgYnkgdGhpcyBwYWNrYWdlXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiYmFzZXBhY2thZ2VcIixcbiAgICAgICAgXCJwYWNrYWdlXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCIsXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCIsXG4gICAgICAgIFwic2l6ZVwiLFxuICAgICAgICBcInBhY2thZ2VyXCIsXG4gICAgICAgIFwidXJsXCIsXG4gICAgICAgIFwidmFsaWRhdGlvblwiLFxuICAgICAgICBcInJlYXNvblwiLFxuICAgICAgICBcImZpbGVzXCIsXG4gICAgICAgIFwiYmFja3VwXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQWxwbURCRW50cnkgaXMgYSBzdHJ1Y3QgdGhhdCByZXByZXNlbnRzIHRoZSBwYWNrYWdlIGRhdGEgc3RvcmVkIGluIHRoZSBwYWNtYW4gZmxhdC1maWxlIHN0b3JlcyBmb3IgYXJjaCBsaW51eC5cIlxuICAgIH0sXG4gICAgXCJBbHBtRmlsZVJlY29yZFwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRoIGlzIHRoZSBmaWxlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGZpbGVzeXN0ZW0gcm9vdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlR5cGUgaXMgdGhlIGZpbGUgdHlwZSAoZS5nLiByZWd1bGFyIGZpbGUsIGRpcmVjdG9yeSwgc3ltbGluaylcIlxuICAgICAgICB9LFxuICAgICAgICBcInVpZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlVJRCBpcyB0aGUgZmlsZSBvd25lciB1c2VyIElEIGFzIHJlY29yZGVkIGJ5IHBhY21hblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2lkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR0lEIGlzIHRoZSBmaWxlIG93bmVyIGdyb3VwIElEIGFzIHJlY29yZGVkIGJ5IHBhY21hblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGltZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJmb3JtYXRcIjogXCJkYXRlLXRpbWVcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGltZSBpcyB0aGUgZmlsZSBtb2RpZmljYXRpb24gdGltZXN0YW1wXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzaXplXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2l6ZSBpcyB0aGUgZmlsZSBzaXplIGluIGJ5dGVzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsaW5rXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGluayBpcyB0aGUgc3ltbGluayB0YXJnZXQgcGF0aCBpZiB0aGlzIGlzIGEgc3ltbGlua1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGlnZXN0XCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRGlnZXN0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRpZ2VzdHMgY29udGFpbnMgZmlsZSBjb250ZW50IGhhc2hlcyBmb3IgaW50ZWdyaXR5IHZlcmlmaWNhdGlvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBbHBtRmlsZVJlY29yZCByZXByZXNlbnRzIGEgc2luZ2xlIGZpbGUgZW50cnkgd2l0aGluIGFuIEFyY2ggTGludXggcGFja2FnZSB3aXRoIGl0cyBhc3NvY2lhdGVkIG1ldGFkYXRhIHRyYWNrZWQgYnkgcGFjbWFuLlwiXG4gICAgfSxcbiAgICBcIkFwa0RiRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJwYWNrYWdlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFja2FnZSBpcyB0aGUgcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHRoZSBpbnN0YWxsZWQgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwib3JpZ2luUGFja2FnZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk9yaWdpblBhY2thZ2UgaXMgdGhlIG9yaWdpbmFsIHNvdXJjZSBwYWNrYWdlIG5hbWUgdGhpcyBiaW5hcnkgd2FzIGJ1aWx0IGZyb20gKHVzZWQgdG8gdHJhY2sgd2hpY2ggYXBvcnQvc291cmNlIGJ1aWx0IHRoaXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYWludGFpbmVyXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWFpbnRhaW5lciBpcyB0aGUgcGFja2FnZSBtYWludGFpbmVyIG5hbWUgYW5kIGVtYWlsXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyB0aGUgcGFja2FnZSB2ZXJzaW9uIGFzIGZvdW5kIGluIHRoZSBpbnN0YWxsZWQgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl0ZWN0dXJlIGlzIHRoZSB0YXJnZXQgQ1BVIGFyY2hpdGVjdHVyZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVVJMIGlzIHRoZSB1cHN0cmVhbSBwcm9qZWN0IFVSTFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXNjcmlwdGlvbiBpcyBhIGh1bWFuLXJlYWRhYmxlIHBhY2thZ2UgZGVzY3JpcHRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpemVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2l6ZSBpcyB0aGUgcGFja2FnZSBhcmNoaXZlIHNpemUgaW4gYnl0ZXMgKC5hcGsgZmlsZSBzaXplKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW5zdGFsbGVkU2l6ZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJbnN0YWxsZWRTaXplIGlzIHRoZSB0b3RhbCBzaXplIG9mIGluc3RhbGxlZCBmaWxlcyBpbiBieXRlc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHVsbERlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVwZW5kZW5jaWVzIGFyZSB0aGUgcnVudGltZSBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgYnkgdGhpcyBwYWNrYWdlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwcm92aWRlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHJvdmlkZXMgYXJlIHZpcnR1YWwgcGFja2FnZXMgcHJvdmlkZWQgYnkgdGhpcyBwYWNrYWdlIChmb3IgY2FwYWJpbGl0eS1iYXNlZCBkZXBlbmRlbmNpZXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwdWxsQ2hlY2tzdW1cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDaGVja3N1bSBpcyB0aGUgcGFja2FnZSBjb250ZW50IGNoZWNrc3VtIGZvciBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJnaXRDb21taXRPZkFwa1BvcnRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJHaXRDb21taXQgaXMgdGhlIGdpdCBjb21taXQgaGFzaCBvZiB0aGUgQVBLIHBvcnQgZGVmaW5pdGlvbiBpbiBBbHBpbmUncyBhcG9ydHMgcmVwb3NpdG9yeVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9BcGtGaWxlUmVjb3JkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGFyZSB0aGUgZmlsZXMgaW5zdGFsbGVkIGJ5IHRoaXMgcGFja2FnZVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInBhY2thZ2VcIixcbiAgICAgICAgXCJvcmlnaW5QYWNrYWdlXCIsXG4gICAgICAgIFwibWFpbnRhaW5lclwiLFxuICAgICAgICBcInZlcnNpb25cIixcbiAgICAgICAgXCJhcmNoaXRlY3R1cmVcIixcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiLFxuICAgICAgICBcInNpemVcIixcbiAgICAgICAgXCJpbnN0YWxsZWRTaXplXCIsXG4gICAgICAgIFwicHVsbERlcGVuZGVuY2llc1wiLFxuICAgICAgICBcInByb3ZpZGVzXCIsXG4gICAgICAgIFwicHVsbENoZWNrc3VtXCIsXG4gICAgICAgIFwiZ2l0Q29tbWl0T2ZBcGtQb3J0XCIsXG4gICAgICAgIFwiZmlsZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBcGtEQkVudHJ5IHJlcHJlc2VudHMgYWxsIGNhcHR1cmVkIGRhdGEgZm9yIHRoZSBhbHBpbmUgbGludXggcGFja2FnZSBtYW5hZ2VyIGZsYXQtZmlsZSBzdG9yZS5cIlxuICAgIH0sXG4gICAgXCJBcGtGaWxlUmVjb3JkXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGggaXMgdGhlIGZpbGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgZmlsZXN5c3RlbSByb290XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJvd25lclVpZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk93bmVyVUlEIGlzIHRoZSBmaWxlIG93bmVyIHVzZXIgSURcIlxuICAgICAgICB9LFxuICAgICAgICBcIm93bmVyR2lkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT3duZXJHSUQgaXMgdGhlIGZpbGUgb3duZXIgZ3JvdXAgSURcIlxuICAgICAgICB9LFxuICAgICAgICBcInBlcm1pc3Npb25zXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGVybWlzc2lvbnMgaXMgdGhlIGZpbGUgcGVybWlzc2lvbiBtb2RlIHN0cmluZyAoZS5nLiBcXFwiMDc1NVxcXCIsIFxcXCIwNjQ0XFxcIilcIlxuICAgICAgICB9LFxuICAgICAgICBcImRpZ2VzdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9EaWdlc3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGlnZXN0IGlzIHRoZSBmaWxlIGNvbnRlbnQgaGFzaCBmb3IgaW50ZWdyaXR5IHZlcmlmaWNhdGlvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInBhdGhcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBcGtGaWxlUmVjb3JkIHJlcHJlc2VudHMgYSBzaW5nbGUgZmlsZSBsaXN0aW5nIGFuZCBtZXRhZGF0YSBmcm9tIGEgQVBLIERCIGVudHJ5ICh3aGljaCBtYXkgaGF2ZSBtYW55IG9mIHRoZXNlIGZpbGUgcmVjb3JkcykuXCJcbiAgICB9LFxuICAgIFwiQmluYXJ5U2lnbmF0dXJlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibWF0Y2hlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0NsYXNzaWZpZXJNYXRjaFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm1hdGNoZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCaW5hcnlTaWduYXR1cmUgcmVwcmVzZW50cyBhIHNldCBvZiBtYXRjaGVkIHZhbHVlcyB3aXRoaW4gYSBiaW5hcnkgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJCaXRuYW1pU2JvbUVudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIHBhY2thZ2UgbmFtZSBhcyBmb3VuZCBpbiB0aGUgQml0bmFtaSBTUERYIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcImFyY2hcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBcmNoaXRlY3R1cmUgaXMgdGhlIHRhcmdldCBDUFUgYXJjaGl0ZWN0dXJlIChhbWQ2NCBvciBhcm02NCBpbiBCaXRuYW1pIGltYWdlcylcIlxuICAgICAgICB9LFxuICAgICAgICBcImRpc3Ryb1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRpc3RybyBpcyB0aGUgZGlzdHJpYnV0aW9uIG5hbWUgdGhpcyBwYWNrYWdlIGlzIGZvciAoYmFzZSBPUyBsaWtlIGRlYmlhbiwgdWJ1bnR1LCBldGMuKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmV2aXNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZXZpc2lvbiBpcyB0aGUgQml0bmFtaS1zcGVjaWZpYyBwYWNrYWdlIHJldmlzaW9uIG51bWJlciAoaW5jcmVtZW50ZWQgZm9yIEJpdG5hbWkgcmVidWlsZHMgb2Ygc2FtZSB1cHN0cmVhbSB2ZXJzaW9uKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvbiBhcyBmb3VuZCBpbiB0aGUgQml0bmFtaSBTUERYIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRoIGlzIHRoZSBpbnN0YWxsYXRpb24gcGF0aCBpbiB0aGUgZmlsZXN5c3RlbSB3aGVyZSB0aGUgcGFja2FnZSBpcyBsb2NhdGVkXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWxlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRmlsZXMgYXJlIHRoZSBmaWxlIHBhdGhzIG93bmVkIGJ5IHRoaXMgcGFja2FnZSAodHJhY2tlZCB2aWEgU1BEWCByZWxhdGlvbnNoaXBzKVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJhcmNoXCIsXG4gICAgICAgIFwiZGlzdHJvXCIsXG4gICAgICAgIFwicmV2aXNpb25cIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICBcImZpbGVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQml0bmFtaVNCT01FbnRyeSByZXByZXNlbnRzIGFsbCBjYXB0dXJlZCBkYXRhIGZyb20gQml0bmFtaSBwYWNrYWdlcyBkZXNjcmliZWQgaW4gQml0bmFtaScgU1BEWCBmaWxlcy5cIlxuICAgIH0sXG4gICAgXCJDQ29uYW5GaWxlRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZWZcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWYgaXMgdGhlIHBhY2thZ2UgcmVmZXJlbmNlIHN0cmluZyBpbiBmb3JtYXQgbmFtZS92ZXJzaW9uQHVzZXIvY2hhbm5lbFwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlZlwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbmFuZmlsZUVudHJ5IHJlcHJlc2VudHMgYSBzaW5nbGUgXFxcIlJlcXVpcmVzXFxcIiBlbnRyeSBmcm9tIGEgY29uYW5maWxlLnR4dC5cIlxuICAgIH0sXG4gICAgXCJDQ29uYW5JbmZvRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZWZcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWYgaXMgdGhlIHBhY2thZ2UgcmVmZXJlbmNlIHN0cmluZyBpbiBmb3JtYXQgbmFtZS92ZXJzaW9uQHVzZXIvY2hhbm5lbFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGFja2FnZV9pZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhY2thZ2VJRCBpcyBhIHVuaXF1ZSBwYWNrYWdlIHZhcmlhbnQgaWRlbnRpZmllclwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlZlwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbmFuaW5mb0VudHJ5IHJlcHJlc2VudHMgYSBzaW5nbGUgXFxcImZ1bGxfcmVxdWlyZXNcXFwiIGVudHJ5IGZyb20gYSBjb25hbmluZm8udHh0LlwiXG4gICAgfSxcbiAgICBcIkNDb25hbkxvY2tFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInJlZlwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlZiBpcyB0aGUgcGFja2FnZSByZWZlcmVuY2Ugc3RyaW5nIGluIGZvcm1hdCBuYW1lL3ZlcnNpb25AdXNlci9jaGFubmVsXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYWNrYWdlX2lkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFja2FnZUlEIGlzIGEgdW5pcXVlIHBhY2thZ2UgdmFyaWFudCBpZGVudGlmaWVyIGNvbXB1dGVkIGZyb20gc2V0dGluZ3Mvb3B0aW9ucyAoc3RhdGljIGhhc2ggaW4gQ29uYW4gMS54LCBjYW4gaGF2ZSBjb2xsaXNpb25zIHdpdGggY29tcGxleCBkZXBlbmRlbmN5IGdyYXBocylcIlxuICAgICAgICB9LFxuICAgICAgICBcInByZXZcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQcmV2IGlzIHRoZSBwcmV2aW91cyBsb2NrIGVudHJ5IHJlZmVyZW5jZSBmb3IgdmVyc2lvbmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlcXVpcmVzIGFyZSB0aGUgcnVudGltZSBwYWNrYWdlIGRlcGVuZGVuY2llc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYnVpbGRfcmVxdWlyZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkJ1aWxkUmVxdWlyZXMgYXJlIHRoZSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyAoZS5nLiBjbWFrZSwgY29tcGlsZXJzKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHlfcmVxdWlyZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB5dGhvblJlcXVpcmVzIGFyZSB0aGUgUHl0aG9uIGRlcGVuZGVuY2llcyBuZWVkZWQgZm9yIENvbmFuIHJlY2lwZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcIm9wdGlvbnNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvS2V5VmFsdWVzXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk9wdGlvbnMgYXJlIHBhY2thZ2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzIGtleS12YWx1ZSBwYWlycyAoZS5nLiBzaGFyZWQ9VHJ1ZSwgZlBJQz1UcnVlKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGggaXMgdGhlIGZpbGVzeXN0ZW0gcGF0aCB0byB0aGUgcGFja2FnZSBpbiBDb25hbiBjYWNoZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29udGV4dFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbnRleHQgaXMgdGhlIGJ1aWxkIGNvbnRleHQgaW5mb3JtYXRpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJyZWZcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb25hblYxTG9ja0VudHJ5IHJlcHJlc2VudHMgYSBzaW5nbGUgXFxcIm5vZGVcXFwiIGVudHJ5IGZyb20gYSBjb25hbi5sb2NrIFYxIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiQ0NvbmFuTG9ja1YyRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZWZcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWYgaXMgdGhlIHBhY2thZ2UgcmVmZXJlbmNlIHN0cmluZyBpbiBmb3JtYXQgbmFtZS92ZXJzaW9uQHVzZXIvY2hhbm5lbFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGFja2FnZUlEXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFja2FnZUlEIGlzIGEgdW5pcXVlIHBhY2thZ2UgdmFyaWFudCBpZGVudGlmaWVyIChkeW5hbWljIGluIENvbmFuIDIuMCwgbW9yZSBhY2N1cmF0ZSB0aGFuIFYxKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidXNlcm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVc2VybmFtZSBpcyB0aGUgQ29uYW4gdXNlci9vcmdhbml6YXRpb24gbmFtZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY2hhbm5lbFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNoYW5uZWwgaXMgdGhlIENvbmFuIGNoYW5uZWwgbmFtZSBpbmRpY2F0aW5nIHN0YWJpbGl0eS9wdXJwb3NlIChlLmcuIHN0YWJsZSwgdGVzdGluZywgZXhwZXJpbWVudGFsKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVjaXBlUmV2aXNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWNpcGVSZXZpc2lvbiBpcyBhIGdpdC1saWtlIHJldmlzaW9uIGhhc2ggKFJSRVYpIG9mIHRoZSByZWNpcGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhY2thZ2VSZXZpc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhY2thZ2VSZXZpc2lvbiBpcyBhIGdpdC1saWtlIHJldmlzaW9uIGhhc2ggb2YgdGhlIGJ1aWx0IGJpbmFyeSBwYWNrYWdlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0aW1lc3RhbXBcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaW1lU3RhbXAgaXMgd2hlbiB0aGlzIHBhY2thZ2Ugd2FzIGJ1aWx0L2xvY2tlZFwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlZlwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbmFuVjJMb2NrRW50cnkgcmVwcmVzZW50cyBhIHNpbmdsZSBcXFwibm9kZVxcXCIgZW50cnkgZnJvbSBhIGNvbmFuLmxvY2sgVjIgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJDUEVcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJjcGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWYWx1ZSBpcyB0aGUgQ1BFIHN0cmluZyBpZGVudGlmaWVyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic291cmNlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU291cmNlIGlzIHRoZSBzb3VyY2Ugd2hlcmUgdGhpcyBDUEUgd2FzIG9idGFpbmVkIG9yIGdlbmVyYXRlZCBmcm9tLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImNwZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNQRSByZXByZXNlbnRzIGEgQ29tbW9uIFBsYXRmb3JtIEVudW1lcmF0aW9uIGlkZW50aWZpZXIgdXNlZCBmb3IgbWF0Y2hpbmcgcGFja2FnZXMgdG8ga25vd24gdnVsbmVyYWJpbGl0aWVzIGluIHNlY3VyaXR5IGRhdGFiYXNlcy5cIlxuICAgIH0sXG4gICAgXCJDbGFzc2lmaWVyTWF0Y2hcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJjbGFzc2lmaWVyXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImxvY2F0aW9uXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0xvY2F0aW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiY2xhc3NpZmllclwiLFxuICAgICAgICBcImxvY2F0aW9uXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ2xhc3NpZmllck1hdGNoIHJlcHJlc2VudHMgYSBzaW5nbGUgbWF0Y2hlZCB2YWx1ZSB3aXRoaW4gYSBiaW5hcnkgZmlsZSBhbmQgdGhlIFxcXCJjbGFzc1xcXCIgbmFtZSB0aGUgc2VhcmNoIHBhdHRlcm4gcmVwcmVzZW50cy5cIlxuICAgIH0sXG4gICAgXCJDb2NvYVBvZGZpbGVMb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJjaGVja3N1bVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNoZWNrc3VtIGlzIHRoZSBTSEEtMSBoYXNoIG9mIHRoZSBwb2RzcGVjIGZpbGUgZm9yIGludGVncml0eSB2ZXJpZmljYXRpb24gKGdlbmVyYXRlZCB2aWEgYHBvZCBpcGMgc3BlYyAuLi4gfCBvcGVuc3NsIHNoYTFgKSwgZW5zdXJpbmcgYWxsIHRlYW0gbWVtYmVycyB1c2UgdGhlIHNhbWUgcG9kIHNwZWNpZmljYXRpb24gdmVyc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImNoZWNrc3VtXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ29jb2FQb2RmaWxlTG9ja0VudHJ5IHJlcHJlc2VudHMgYSBzaW5nbGUgZW50cnkgZnJvbSB0aGUgXFxcIlBvZHNcXFwiIHNlY3Rpb24gb2YgYSBQb2RmaWxlLmxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJDb25kYUxpbmtcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2UgaXMgdGhlIG9yaWdpbmFsIHBhdGggd2hlcmUgdGhlIHBhY2thZ2Ugd2FzIGV4dHJhY3RlZCBmcm9tIGNhY2hlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUeXBlIGluZGljYXRlcyB0aGUgbGluayB0eXBlICgxIGZvciBoYXJkIGxpbmssIDIgZm9yIHNvZnQgbGluaywgMyBmb3IgY29weSkuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwic291cmNlXCIsXG4gICAgICAgIFwidHlwZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbmRhTGluayByZXByZXNlbnRzIGxpbmsgbWV0YWRhdGEgZnJvbSBhIENvbmRhIHBhY2thZ2UncyBsaW5rLmpzb24gZmlsZSBkZXNjcmliaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uIHNvdXJjZS5cIlxuICAgIH0sXG4gICAgXCJDb25kYU1ldGFkYXRhRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJhcmNoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaCBpcyB0aGUgdGFyZ2V0IENQVSBhcmNoaXRlY3R1cmUgZm9yIHRoZSBwYWNrYWdlIChlLmcuLCBcXFwiYXJtNjRcXFwiLCBcXFwieDg2XzY0XFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyB0aGUgcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHRoZSBjb25kYS1tZXRhIEpTT04gZmlsZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBwYWNrYWdlIHZlcnNpb24gYXMgZm91bmQgaW4gdGhlIGNvbmRhLW1ldGEgSlNPTiBmaWxlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYnVpbGRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCdWlsZCBpcyB0aGUgYnVpbGQgc3RyaW5nIGlkZW50aWZpZXIgKGUuZy4sIFxcXCJoOTBkZmM5Ml8xMDE0XFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWlsZF9udW1iZXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQnVpbGROdW1iZXIgaXMgdGhlIHNlcXVlbnRpYWwgYnVpbGQgbnVtYmVyIGZvciB0aGlzIHZlcnNpb24uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjaGFubmVsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ2hhbm5lbCBpcyB0aGUgQ29uZGEgY2hhbm5lbCBVUkwgd2hlcmUgdGhlIHBhY2thZ2Ugd2FzIHJldHJpZXZlZCBmcm9tLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic3ViZGlyXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU3ViZGlyIGlzIHRoZSBzdWJkaXJlY3Rvcnkgd2l0aGluIHRoZSBjaGFubmVsIChlLmcuLCBcXFwib3N4LWFybTY0XFxcIiwgXFxcImxpbnV4LTY0XFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJub2FyY2hcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOb2FyY2ggaW5kaWNhdGVzIGlmIHRoZSBwYWNrYWdlIGlzIHBsYXRmb3JtLWluZGVwZW5kZW50IChlLmcuLCBcXFwicHl0aG9uXFxcIiwgXFxcImdlbmVyaWNcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImxpY2Vuc2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJMaWNlbnNlIGlzIHRoZSBwYWNrYWdlIGxpY2Vuc2UgaWRlbnRpZmllci5cIlxuICAgICAgICB9LFxuICAgICAgICBcImxpY2Vuc2VfZmFtaWx5XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGljZW5zZUZhbWlseSBpcyB0aGUgZ2VuZXJhbCBsaWNlbnNlIGNhdGVnb3J5IChlLmcuLCBcXFwiTUlUXFxcIiwgXFxcIkFwYWNoZVxcXCIsIFxcXCJHUExcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1kNVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1ENSBpcyB0aGUgTUQ1IGhhc2ggb2YgdGhlIHBhY2thZ2UgYXJjaGl2ZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNoYTI1NlwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNIQTI1NiBpcyB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBwYWNrYWdlIGFyY2hpdmUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzaXplXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNpemUgaXMgdGhlIHBhY2thZ2UgYXJjaGl2ZSBzaXplIGluIGJ5dGVzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGltZXN0YW1wXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRpbWVzdGFtcCBpcyB0aGUgVW5peCB0aW1lc3RhbXAgd2hlbiB0aGUgcGFja2FnZSB3YXMgYnVpbHQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVuYW1lIGlzIHRoZSBvcmlnaW5hbCBwYWNrYWdlIGFyY2hpdmUgZmlsZW5hbWUgKGUuZy4sIFxcXCJ6bGliLTEuMi4xMS1oOTBkZmM5Ml8xMDE0LnRhci5iejJcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlVSTCBpcyB0aGUgZnVsbCBkb3dubG9hZCBVUkwgZm9yIHRoZSBwYWNrYWdlIGFyY2hpdmUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRyYWN0ZWRfcGFja2FnZV9kaXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFeHRyYWN0ZWRQYWNrYWdlRGlyIGlzIHRoZSBsb2NhbCBjYWNoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHBhY2thZ2Ugd2FzIGV4dHJhY3RlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZHNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlcGVuZHMgaXMgdGhlIGxpc3Qgb2YgcnVudGltZSBkZXBlbmRlbmNpZXMgd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnRzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGlzIHRoZSBsaXN0IG9mIGZpbGVzIGluc3RhbGxlZCBieSB0aGlzIHBhY2thZ2UuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXRoc19kYXRhXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0NvbmRhUGF0aHNEYXRhXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGhzRGF0YSBjb250YWlucyBkZXRhaWxlZCBmaWxlIG1ldGFkYXRhIGZyb20gdGhlIHBhdGhzLmpzb24gZmlsZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImxpbmtcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQ29uZGFMaW5rXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxpbmsgY29udGFpbnMgaW5zdGFsbGF0aW9uIHNvdXJjZSBtZXRhZGF0YSBmcm9tIHRoZSBsaW5rLmpzb24gZmlsZS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcImJ1aWxkXCIsXG4gICAgICAgIFwiYnVpbGRfbnVtYmVyXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ29uZGFNZXRhUGFja2FnZSByZXByZXNlbnRzIG1ldGFkYXRhIGZvciBhIENvbmRhIHBhY2thZ2UgZXh0cmFjdGVkIGZyb20gdGhlIGNvbmRhLW1ldGEvKi5qc29uIGZpbGVzLlwiXG4gICAgfSxcbiAgICBcIkNvbmRhUGF0aERhdGFcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJfcGF0aFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGggaXMgdGhlIGZpbGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgQ29uZGEgZW52aXJvbm1lbnQgcm9vdC5cIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdGhfdHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGhUeXBlIGluZGljYXRlcyB0aGUgbGluayB0eXBlIGZvciB0aGUgZmlsZSAoZS5nLiwgXFxcImhhcmRsaW5rXFxcIiwgXFxcInNvZnRsaW5rXFxcIiwgXFxcImRpcmVjdG9yeVxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2hhMjU2XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU0hBMjU2IGlzIHRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIGZpbGUgY29udGVudHMuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzaGEyNTZfaW5fcHJlZml4XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU0hBMjU2SW5QcmVmaXggaXMgdGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgZmlsZSBhZnRlciBwcmVmaXggcmVwbGFjZW1lbnQgZHVyaW5nIGluc3RhbGxhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpemVfaW5fYnl0ZXNcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2l6ZUluQnl0ZXMgaXMgdGhlIGZpbGUgc2l6ZSBpbiBieXRlcy5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJfcGF0aFwiLFxuICAgICAgICBcInBhdGhfdHlwZVwiLFxuICAgICAgICBcInNoYTI1NlwiLFxuICAgICAgICBcInNoYTI1Nl9pbl9wcmVmaXhcIixcbiAgICAgICAgXCJzaXplX2luX2J5dGVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ29uZGFQYXRoRGF0YSByZXByZXNlbnRzIG1ldGFkYXRhIGZvciBhIHNpbmdsZSBmaWxlIHdpdGhpbiBhIENvbmRhIHBhY2thZ2UgZnJvbSB0aGUgcGF0aHMuanNvbiBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkNvbmRhUGF0aHNEYXRhXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicGF0aHNfdmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRoc1ZlcnNpb24gaXMgdGhlIHNjaGVtYSB2ZXJzaW9uIG9mIHRoZSBwYXRocyBkYXRhIGZvcm1hdC5cIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdGhzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQ29uZGFQYXRoRGF0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRocyBpcyB0aGUgbGlzdCBvZiBmaWxlIG1ldGFkYXRhIGVudHJpZXMgZm9yIGFsbCBmaWxlcyBpbiB0aGUgcGFja2FnZS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJwYXRoc192ZXJzaW9uXCIsXG4gICAgICAgIFwicGF0aHNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb25kYVBhdGhzRGF0YSByZXByZXNlbnRzIHRoZSBwYXRocy5qc29uIGZpbGUgc3RydWN0dXJlIGZyb20gYSBDb25kYSBwYWNrYWdlIGNvbnRhaW5pbmcgZmlsZSBtZXRhZGF0YS5cIlxuICAgIH0sXG4gICAgXCJDb29yZGluYXRlc1wiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWFsUGF0aCBpcyB0aGUgY2Fub25pY2FsIGFic29sdXRlIGZvcm0gb2YgdGhlIHBhdGggYWNjZXNzZWQgKGFsbCBzeW1ib2xpYyBsaW5rcyBoYXZlIGJlZW4gZm9sbG93ZWQgYW5kIHJlbGF0aXZlIHBhdGggY29tcG9uZW50cyBsaWtlICcuJyBhbmQgJy4uJyBoYXZlIGJlZW4gcmVtb3ZlZCkuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsYXllcklEXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRmlsZVN5c3RlbUlEIGlzIGFuIElEIHJlcHJlc2VudGluZyBhbmQgZW50aXJlIGZpbGVzeXN0ZW0uIEZvciBjb250YWluZXIgaW1hZ2VzLCB0aGlzIGlzIGEgbGF5ZXIgZGlnZXN0LiBGb3IgZGlyZWN0b3JpZXMgb3IgYSByb290IGZpbGVzeXN0ZW0sIHRoaXMgaXMgYmxhbmsuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwicGF0aFwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvb3JkaW5hdGVzIGNvbnRhaW5zIHRoZSBtaW5pbWFsIGluZm9ybWF0aW9uIG5lZWRlZCB0byBkZXNjcmliZSBob3cgdG8gZmluZCBhIGZpbGUgd2l0aGluIGFueSBwb3NzaWJsZSBzb3VyY2Ugb2JqZWN0IChlLmcuXCJcbiAgICB9LFxuICAgIFwiRGFydFB1YnNwZWNcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJob21lcGFnZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkhvbWVwYWdlIGlzIHRoZSBwYWNrYWdlIGhvbWVwYWdlIFVSTFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlcG9zaXRvcnkgaXMgdGhlIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkgVVJMXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkb2N1bWVudGF0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRG9jdW1lbnRhdGlvbiBpcyB0aGUgZG9jdW1lbnRhdGlvbiBzaXRlIFVSTFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHVibGlzaF90b1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB1Ymxpc2hUbyBpcyB0aGUgcGFja2FnZSByZXBvc2l0b3J5IHRvIHB1Ymxpc2ggdG8sIG9yIFxcXCJub25lXFxcIiB0byBwcmV2ZW50IGFjY2lkZW50YWwgcHVibGlzaGluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZW52aXJvbm1lbnRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRGFydFB1YnNwZWNFbnZpcm9ubWVudFwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFbnZpcm9ubWVudCBpcyBTREsgdmVyc2lvbiBjb25zdHJhaW50cyBmb3IgRGFydCBhbmQgRmx1dHRlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGxhdGZvcm1zXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQbGF0Zm9ybXMgYXJlIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zIChBbmRyb2lkLCBpT1MsIHdlYiwgZXRjLilcIlxuICAgICAgICB9LFxuICAgICAgICBcImlnbm9yZWRfYWR2aXNvcmllc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSWdub3JlZEFkdmlzb3JpZXMgYXJlIHRoZSBzZWN1cml0eSBhZHZpc29yaWVzIHRvIGV4cGxpY2l0bHkgaWdub3JlIGZvciB0aGlzIHBhY2thZ2VcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGFydFB1YnNwZWMgaXMgYSBzdHJ1Y3QgdGhhdCByZXByZXNlbnRzIGEgcGFja2FnZSBkZXNjcmliZWQgaW4gYSBwdWJzcGVjLnlhbWwgZmlsZVwiXG4gICAgfSxcbiAgICBcIkRhcnRQdWJzcGVjRW52aXJvbm1lbnRcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJzZGtcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTREsgaXMgdGhlIERhcnQgU0RLIHZlcnNpb24gY29uc3RyYWludCAoZS5nLiBcXFwiPj0yLjEyLjAgPDMuMC4wXFxcIilcIlxuICAgICAgICB9LFxuICAgICAgICBcImZsdXR0ZXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGbHV0dGVyIGlzIHRoZSBGbHV0dGVyIFNESyB2ZXJzaW9uIGNvbnN0cmFpbnQgaWYgdGhpcyBpcyBhIEZsdXR0ZXIgcGFja2FnZVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEYXJ0UHVic3BlY0Vudmlyb25tZW50IHJlcHJlc2VudHMgU0RLIHZlcnNpb24gY29uc3RyYWludHMgZnJvbSB0aGUgZW52aXJvbm1lbnQgc2VjdGlvbiBvZiBwdWJzcGVjLnlhbWwuXCJcbiAgICB9LFxuICAgIFwiRGFydFB1YnNwZWNMb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyB0aGUgcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHRoZSBwdWJzcGVjLmxvY2sgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvbiBhcyBmb3VuZCBpbiB0aGUgcHVic3BlYy5sb2NrIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvc3RlZF91cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIb3N0ZWRVUkwgaXMgdGhlIFVSTCBvZiB0aGUgcGFja2FnZSByZXBvc2l0b3J5IGZvciBob3N0ZWQgcGFja2FnZXMgKHR5cGljYWxseSBwdWIuZGV2LCBidXQgY2FuIGJlIGN1c3RvbSByZXBvc2l0b3J5IGlkZW50aWZpZWQgYnkgaG9zdGVkLXVybCkuIFdoZW4gUFVCX0hPU1RFRF9VUkwgZW52aXJvbm1lbnQgdmFyaWFibGUgY2hhbmdlcywgbG9ja2ZpbGUgdHJhY2tzIHRoZSBzb3VyY2UuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2Y3NfdXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmNzVVJMIGlzIHRoZSBVUkwgb2YgdGhlIFZDUyByZXBvc2l0b3J5IGZvciBnaXQvcGF0aCBkZXBlbmRlbmNpZXMgKGZvciBwYWNrYWdlcyBmZXRjaGVkIGZyb20gdmVyc2lvbiBjb250cm9sIHN5c3RlbXMgbGlrZSBHaXQpXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcInZlcnNpb25cIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEYXJ0UHVic3BlY0xvY2tFbnRyeSBpcyBhIHN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYSBzaW5nbGUgZW50cnkgZm91bmQgaW4gdGhlIFxcXCJwYWNrYWdlc1xcXCIgc2VjdGlvbiBpbiBhIERhcnQgcHVic3BlYy5sb2NrIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiRGVzY3JpcHRvclwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSB0b29sIHRoYXQgZ2VuZXJhdGVkIHRoaXMgU0JPTSAoZS5nLiwgXFxcInN5ZnRcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSB0b29sIHRoYXQgZ2VuZXJhdGVkIHRoaXMgU0JPTS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbmZpZ3VyYXRpb25cIjoge1xuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb25maWd1cmF0aW9uIGNvbnRhaW5zIHRoZSB0b29sIGNvbmZpZ3VyYXRpb24gdXNlZCBkdXJpbmcgU0JPTSBnZW5lcmF0aW9uLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVzY3JpcHRvciBpZGVudGlmaWVzIHRoZSB0b29sIHRoYXQgZ2VuZXJhdGVkIHRoaXMgU0JPTSBkb2N1bWVudCwgaW5jbHVkaW5nIGl0cyBuYW1lLCB2ZXJzaW9uLCBhbmQgY29uZmlndXJhdGlvbiB1c2VkIGR1cmluZyBjYXRhbG9nIGdlbmVyYXRpb24uXCJcbiAgICB9LFxuICAgIFwiRGlnZXN0XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiYWxnb3JpdGhtXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQWxnb3JpdGhtIHNwZWNpZmllcyB0aGUgaGFzaCBhbGdvcml0aG0gdXNlZCAoZS5nLiwgXFxcInNoYTI1NlxcXCIsIFxcXCJtZDVcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInZhbHVlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmFsdWUgaXMgdGhlIGhleGFkZWNpbWFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaGFzaC5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJhbGdvcml0aG1cIixcbiAgICAgICAgXCJ2YWx1ZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRpZ2VzdCByZXByZXNlbnRzIGEgY3J5cHRvZ3JhcGhpYyBoYXNoIG9mIGZpbGUgY29udGVudHMuXCJcbiAgICB9LFxuICAgIFwiRG9jdW1lbnRcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJhcnRpZmFjdHNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QYWNrYWdlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkFydGlmYWN0cyBpcyB0aGUgbGlzdCBvZiBwYWNrYWdlcyBkaXNjb3ZlcmVkIGFuZCBwbGFjZWQgaW50byB0aGUgY2F0YWxvZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJ0aWZhY3RSZWxhdGlvbnNoaXBzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUmVsYXRpb25zaGlwXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWxlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0ZpbGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibm90ZTogbXVzdCBoYXZlIG9taXRlbXB0eVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic291cmNlXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1NvdXJjZVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2UgcmVwcmVzZW50cyB0aGUgb3JpZ2luYWwgb2JqZWN0IHRoYXQgd2FzIGNhdGFsb2dlZFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGlzdHJvXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0xpbnV4UmVsZWFzZVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEaXN0cm8gcmVwcmVzZW50cyB0aGUgTGludXggZGlzdHJpYnV0aW9uIHRoYXQgd2FzIGRldGVjdGVkIGZyb20gdGhlIHNvdXJjZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRvclwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9EZXNjcmlwdG9yXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0b3IgaXMgYSBibG9jayBjb250YWluaW5nIHNlbGYtZGVzY3JpYmluZyBpbmZvcm1hdGlvbiBhYm91dCBzeWZ0XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzY2hlbWFcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvU2NoZW1hXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNjaGVtYSBpcyBhIGJsb2NrIHJlc2VydmVkIGZvciBkZWZpbmluZyB0aGUgdmVyc2lvbiBmb3IgdGhlIHNoYXBlIG9mIHRoaXMgSlNPTiBkb2N1bWVudCBhbmQgd2hlcmUgdG8gZmluZCB0aGUgc2NoZW1hIGRvY3VtZW50IHRvIHZhbGlkYXRlIHRoZSBzaGFwZVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImFydGlmYWN0c1wiLFxuICAgICAgICBcImFydGlmYWN0UmVsYXRpb25zaGlwc1wiLFxuICAgICAgICBcInNvdXJjZVwiLFxuICAgICAgICBcImRpc3Ryb1wiLFxuICAgICAgICBcImRlc2NyaXB0b3JcIixcbiAgICAgICAgXCJzY2hlbWFcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEb2N1bWVudCByZXByZXNlbnRzIHRoZSBzeWZ0IGNhdGFsb2dpbmcgZmluZGluZ3MgYXMgYSBKU09OIGRvY3VtZW50XCJcbiAgICB9LFxuICAgIFwiRG90bmV0RGVwc0VudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIHBhY2thZ2UgbmFtZSBhcyBmb3VuZCBpbiB0aGUgZGVwcy5qc29uIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBwYWNrYWdlIHZlcnNpb24gYXMgZm91bmQgaW4gdGhlIGRlcHMuanNvbiBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXRoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGF0aCBpcyB0aGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgcGFja2FnZSB3aXRoaW4gdGhlIGRlcHMgc3RydWN0dXJlIChlLmcuIFxcXCJhcHAubWV0cmljcy8zLjAuMFxcXCIpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzaGE1MTJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTaGE1MTIgaXMgdGhlIFNIQS01MTIgaGFzaCBvZiB0aGUgTnVHZXQgcGFja2FnZSBjb250ZW50IFdJVEhPVVQgdGhlIHNpZ25lZCBjb250ZW50IGZvciB2ZXJpZmljYXRpb24gKHdvbid0IG1hdGNoIGhhc2ggZnJvbSBOdUdldCBBUEkgb3IgbWFudWFsIGNhbGN1bGF0aW9uIG9mIC5udXBrZyBmaWxlKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaGFzaFBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIYXNoUGF0aCBpcyB0aGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgLm51cGtnLnNoYTUxMiBoYXNoIGZpbGUgKGUuZy4gXFxcImFwcC5tZXRyaWNzLjMuMC4wLm51cGtnLnNoYTUxMlxcXCIpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVHlwZSBpcyB0eXBlIG9mIGVudHJ5IGNvdWxkIGJlIHBhY2thZ2Ugb3IgcHJvamVjdCBmb3IgaW50ZXJuYWwgcmVmc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhlY3V0YWJsZXNcIjoge1xuICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Eb3RuZXRQb3J0YWJsZUV4ZWN1dGFibGVFbnRyeVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRXhlY3V0YWJsZXMgYXJlIHRoZSBtYXAgb2YgLk5FVCBQb3J0YWJsZSBFeGVjdXRhYmxlIGZpbGVzIHdpdGhpbiB0aGlzIHBhY2thZ2Ugd2l0aCB0aGVpciB2ZXJzaW9uIHJlc291cmNlc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICBcInNoYTUxMlwiLFxuICAgICAgICBcImhhc2hQYXRoXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRG90bmV0RGVwc0VudHJ5IGlzIGEgc3RydWN0IHRoYXQgcmVwcmVzZW50cyBhIHNpbmdsZSBlbnRyeSBmb3VuZCBpbiB0aGUgXFxcImxpYnJhcmllc1xcXCIgc2VjdGlvbiBpbiBhIC5ORVQgWyouXWRlcHMuanNvbiBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkRvdG5ldFBhY2thZ2VzTG9ja0VudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIHBhY2thZ2UgbmFtZSBhcyBmb3VuZCBpbiB0aGUgcGFja2FnZXMubG9jay5qc29uIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBwYWNrYWdlIHZlcnNpb24gYXMgZm91bmQgaW4gdGhlIHBhY2thZ2VzLmxvY2suanNvbiBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb250ZW50SGFzaFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbnRlbnRIYXNoIGlzIHRoZSBoYXNoIG9mIHRoZSBwYWNrYWdlIGNvbnRlbnQgZm9yIHZlcmlmaWNhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlR5cGUgaXMgdGhlIGRlcGVuZGVuY3kgdHlwZSBpbmRpY2F0aW5nIGhvdyB0aGlzIGRlcGVuZGVuY3kgd2FzIGFkZGVkIChEaXJlY3Q9ZXhwbGljaXQgaW4gcHJvamVjdCBmaWxlLCBUcmFuc2l0aXZlPXB1bGxlZCBpbiBieSBhbm90aGVyIHBhY2thZ2UsIFByb2plY3Q9cHJvamVjdCByZWZlcmVuY2UpXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcInZlcnNpb25cIixcbiAgICAgICAgXCJjb250ZW50SGFzaFwiLFxuICAgICAgICBcInR5cGVcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEb3RuZXRQYWNrYWdlc0xvY2tFbnRyeSBpcyBhIHN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYSBzaW5nbGUgZW50cnkgZm91bmQgaW4gdGhlIFxcXCJkZXBlbmRlbmNpZXNcXFwiIHNlY3Rpb24gaW4gYSAuTkVUIHBhY2thZ2VzLmxvY2suanNvbiBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkRvdG5ldFBvcnRhYmxlRXhlY3V0YWJsZUVudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiYXNzZW1ibHlWZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXNzZW1ibHlWZXJzaW9uIGlzIHRoZSAuTkVUIGFzc2VtYmx5IHZlcnNpb24gbnVtYmVyIChzdHJvbmctbmFtZWQgdmVyc2lvbilcIlxuICAgICAgICB9LFxuICAgICAgICBcImxlZ2FsQ29weXJpZ2h0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGVnYWxDb3B5cmlnaHQgaXMgdGhlIGNvcHlyaWdodCBub3RpY2Ugc3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb21tZW50c1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbW1lbnRzIGFyZSBhZGRpdGlvbmFsIGNvbW1lbnRzIG9yIGRlc2NyaXB0aW9uIGVtYmVkZGVkIGluIFBFIHJlc291cmNlc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW50ZXJuYWxOYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW50ZXJuYWxOYW1lIGlzIHRoZSBpbnRlcm5hbCBuYW1lIG9mIHRoZSBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb21wYW55TmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbXBhbnlOYW1lIGlzIHRoZSBjb21wYW55IHRoYXQgcHJvZHVjZWQgdGhlIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInByb2R1Y3ROYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHJvZHVjdE5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIHByb2R1Y3QgdGhpcyBmaWxlIGlzIHBhcnQgb2ZcIlxuICAgICAgICB9LFxuICAgICAgICBcInByb2R1Y3RWZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHJvZHVjdFZlcnNpb24gaXMgdGhlIHZlcnNpb24gb2YgdGhlIHByb2R1Y3QgKG1heSBkaWZmZXIgZnJvbSBBc3NlbWJseVZlcnNpb24pXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiYXNzZW1ibHlWZXJzaW9uXCIsXG4gICAgICAgIFwibGVnYWxDb3B5cmlnaHRcIixcbiAgICAgICAgXCJjb21wYW55TmFtZVwiLFxuICAgICAgICBcInByb2R1Y3ROYW1lXCIsXG4gICAgICAgIFwicHJvZHVjdFZlcnNpb25cIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEb3RuZXRQb3J0YWJsZUV4ZWN1dGFibGVFbnRyeSBpcyBhIHN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYSBzaW5nbGUgZW50cnkgZm91bmQgd2l0aGluIFxcXCJWZXJzaW9uUmVzb3VyY2VzXFxcIiBzZWN0aW9uIG9mIGEgLk5FVCBQb3J0YWJsZSBFeGVjdXRhYmxlIGJpbmFyeSBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkRwa2dBcmNoaXZlRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJwYWNrYWdlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFja2FnZSBpcyB0aGUgcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHRoZSBzdGF0dXMgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic291cmNlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU291cmNlIGlzIHRoZSBzb3VyY2UgcGFja2FnZSBuYW1lIHRoaXMgYmluYXJ5IHdhcyBidWlsdCBmcm9tIChvbmUgc291cmNlIGNhbiBwcm9kdWNlIG11bHRpcGxlIGJpbmFyeSBwYWNrYWdlcylcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBiaW5hcnkgcGFja2FnZSB2ZXJzaW9uIGFzIGZvdW5kIGluIHRoZSBzdGF0dXMgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic291cmNlVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNvdXJjZVZlcnNpb24gaXMgdGhlIHNvdXJjZSBwYWNrYWdlIHZlcnNpb24gKG1heSBkaWZmZXIgZnJvbSBiaW5hcnkgdmVyc2lvbiB3aGVuIGJpbk5NVSByZWJ1aWxkcyBvY2N1cilcIlxuICAgICAgICB9LFxuICAgICAgICBcImFyY2hpdGVjdHVyZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkFyY2hpdGVjdHVyZSBpcyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBwZXIgRGViaWFuIHNwZWMgKHNwZWNpZmljIGFyY2ggbGlrZSBhbWQ2NC9hcm02NCwgd2lsZGNhcmQgbGlrZSBhbnksIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBcXFwiYWxsXFxcIiwgb3IgXFxcInNvdXJjZVxcXCIgZm9yIHNvdXJjZSBwYWNrYWdlcylcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1haW50YWluZXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNYWludGFpbmVyIGlzIHRoZSBwYWNrYWdlIG1haW50YWluZXIncyBuYW1lIGFuZCBlbWFpbCBpbiBSRkM4MjIgZm9ybWF0IChuYW1lIG11c3QgY29tZSBmaXJzdCwgdGhlbiBlbWFpbCBpbiBhbmdsZSBicmFja2V0cylcIlxuICAgICAgICB9LFxuICAgICAgICBcImluc3RhbGxlZFNpemVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW5zdGFsbGVkU2l6ZSBpcyB0aGUgdG90YWwgc2l6ZSBvZiBpbnN0YWxsZWQgZmlsZXMgaW4ga2lsb2J5dGVzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwcm92aWRlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHJvdmlkZXMgYXJlIHRoZSB2aXJ0dWFsIHBhY2thZ2VzIHByb3ZpZGVkIGJ5IHRoaXMgcGFja2FnZSAoYWxsb3dzIG90aGVyIHBhY2thZ2VzIHRvIGRlcGVuZCBvbiBjYXBhYmlsaXRpZXMuIENhbiBpbmNsdWRlIHZlcnNpb25lZCBwcm92aWRlcyBsaWtlIFxcXCJsaWJkaWdlc3QtbWQ1LXBlcmwgKD0gMi41NS4wMSlcXFwiKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVwZW5kcyBhcmUgdGhlIHBhY2thZ2VzIHJlcXVpcmVkIGZvciB0aGlzIHBhY2thZ2UgdG8gZnVuY3Rpb24gKHdpbGwgbm90IGJlIGluc3RhbGxlZCB1bmxlc3MgdGhlc2UgcmVxdWlyZW1lbnRzIGFyZSBtZXQsIGNyZWF0ZXMgc3RyaWN0IG9yZGVyaW5nIGNvbnN0cmFpbnQpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwcmVEZXBlbmRzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQcmVEZXBlbmRzIGFyZSB0aGUgcGFja2FnZXMgdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBhbmQgY29uZmlndXJlZCBCRUZPUkUgZXZlbiBzdGFydGluZyBpbnN0YWxsYXRpb24gb2YgdGhpcyBwYWNrYWdlIChzdHJvbmdlciB0aGFuIERlcGVuZHMsIGRpc2NvdXJhZ2VkIHVubGVzcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSBhcyBpdCBhZGRzIHN0cmljdCBjb25zdHJhaW50cyBmb3IgYXB0KVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9EcGtnRmlsZVJlY29yZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlcyBhcmUgdGhlIGZpbGVzIGluc3RhbGxlZCBieSB0aGlzIHBhY2thZ2VcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJwYWNrYWdlXCIsXG4gICAgICAgIFwic291cmNlXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcInNvdXJjZVZlcnNpb25cIixcbiAgICAgICAgXCJhcmNoaXRlY3R1cmVcIixcbiAgICAgICAgXCJtYWludGFpbmVyXCIsXG4gICAgICAgIFwiaW5zdGFsbGVkU2l6ZVwiLFxuICAgICAgICBcImZpbGVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRHBrZ0FyY2hpdmVFbnRyeSByZXByZXNlbnRzIHBhY2thZ2UgbWV0YWRhdGEgZXh0cmFjdGVkIGZyb20gYSAuZGViIGFyY2hpdmUgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJEcGtnRGJFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBhY2thZ2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYWNrYWdlIGlzIHRoZSBwYWNrYWdlIG5hbWUgYXMgZm91bmQgaW4gdGhlIHN0YXR1cyBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2UgaXMgdGhlIHNvdXJjZSBwYWNrYWdlIG5hbWUgdGhpcyBiaW5hcnkgd2FzIGJ1aWx0IGZyb20gKG9uZSBzb3VyY2UgY2FuIHByb2R1Y2UgbXVsdGlwbGUgYmluYXJ5IHBhY2thZ2VzKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIGJpbmFyeSBwYWNrYWdlIHZlcnNpb24gYXMgZm91bmQgaW4gdGhlIHN0YXR1cyBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzb3VyY2VWZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU291cmNlVmVyc2lvbiBpcyB0aGUgc291cmNlIHBhY2thZ2UgdmVyc2lvbiAobWF5IGRpZmZlciBmcm9tIGJpbmFyeSB2ZXJzaW9uIHdoZW4gYmluTk1VIHJlYnVpbGRzIG9jY3VyKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl0ZWN0dXJlIGlzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIHBlciBEZWJpYW4gc3BlYyAoc3BlY2lmaWMgYXJjaCBsaWtlIGFtZDY0L2FybTY0LCB3aWxkY2FyZCBsaWtlIGFueSwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IFxcXCJhbGxcXFwiLCBvciBcXFwic291cmNlXFxcIiBmb3Igc291cmNlIHBhY2thZ2VzKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWFpbnRhaW5lclwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1haW50YWluZXIgaXMgdGhlIHBhY2thZ2UgbWFpbnRhaW5lcidzIG5hbWUgYW5kIGVtYWlsIGluIFJGQzgyMiBmb3JtYXQgKG5hbWUgbXVzdCBjb21lIGZpcnN0LCB0aGVuIGVtYWlsIGluIGFuZ2xlIGJyYWNrZXRzKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW5zdGFsbGVkU2l6ZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJbnN0YWxsZWRTaXplIGlzIHRoZSB0b3RhbCBzaXplIG9mIGluc3RhbGxlZCBmaWxlcyBpbiBraWxvYnl0ZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInByb3ZpZGVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQcm92aWRlcyBhcmUgdGhlIHZpcnR1YWwgcGFja2FnZXMgcHJvdmlkZWQgYnkgdGhpcyBwYWNrYWdlIChhbGxvd3Mgb3RoZXIgcGFja2FnZXMgdG8gZGVwZW5kIG9uIGNhcGFiaWxpdGllcy4gQ2FuIGluY2x1ZGUgdmVyc2lvbmVkIHByb3ZpZGVzIGxpa2UgXFxcImxpYmRpZ2VzdC1tZDUtcGVybCAoPSAyLjU1LjAxKVxcXCIpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRzIGFyZSB0aGUgcGFja2FnZXMgcmVxdWlyZWQgZm9yIHRoaXMgcGFja2FnZSB0byBmdW5jdGlvbiAod2lsbCBub3QgYmUgaW5zdGFsbGVkIHVubGVzcyB0aGVzZSByZXF1aXJlbWVudHMgYXJlIG1ldCwgY3JlYXRlcyBzdHJpY3Qgb3JkZXJpbmcgY29uc3RyYWludClcIlxuICAgICAgICB9LFxuICAgICAgICBcInByZURlcGVuZHNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlByZURlcGVuZHMgYXJlIHRoZSBwYWNrYWdlcyB0aGF0IG11c3QgYmUgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkIEJFRk9SRSBldmVuIHN0YXJ0aW5nIGluc3RhbGxhdGlvbiBvZiB0aGlzIHBhY2thZ2UgKHN0cm9uZ2VyIHRoYW4gRGVwZW5kcywgZGlzY291cmFnZWQgdW5sZXNzIGFic29sdXRlbHkgbmVjZXNzYXJ5IGFzIGl0IGFkZHMgc3RyaWN0IGNvbnN0cmFpbnRzIGZvciBhcHQpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWxlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0Rwa2dGaWxlUmVjb3JkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGFyZSB0aGUgZmlsZXMgaW5zdGFsbGVkIGJ5IHRoaXMgcGFja2FnZVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInBhY2thZ2VcIixcbiAgICAgICAgXCJzb3VyY2VcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwic291cmNlVmVyc2lvblwiLFxuICAgICAgICBcImFyY2hpdGVjdHVyZVwiLFxuICAgICAgICBcIm1haW50YWluZXJcIixcbiAgICAgICAgXCJpbnN0YWxsZWRTaXplXCIsXG4gICAgICAgIFwiZmlsZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEcGtnREJFbnRyeSByZXByZXNlbnRzIGFsbCBjYXB0dXJlZCBkYXRhIGZvciBhIERlYmlhbiBwYWNrYWdlIERCIGVudHJ5OyBhdmFpbGFibGUgZmllbGRzIGFyZSBkZXNjcmliZWQgYXQgaHR0cDovL21hbnBhZ2VzLnVidW50dS5jb20vbWFucGFnZXMveGVuaWFsL21hbjEvZHBrZy1xdWVyeS4xLmh0bWwgaW4gdGhlIC0tc2hvd2Zvcm1hdCBzZWN0aW9uLlwiXG4gICAgfSxcbiAgICBcIkRwa2dGaWxlUmVjb3JkXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGggaXMgdGhlIGZpbGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgZmlsZXN5c3RlbSByb290XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkaWdlc3RcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRGlnZXN0XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRpZ2VzdCBpcyB0aGUgZmlsZSBjb250ZW50IGhhc2ggKHR5cGljYWxseSBNRDUgZm9yIGRwa2cgY29tcGF0aWJpbGl0eSB3aXRoIGxlZ2FjeSBzeXN0ZW1zKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaXNDb25maWdGaWxlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklzQ29uZmlnRmlsZSBpcyB3aGV0aGVyIHRoaXMgZmlsZSBpcyBtYXJrZWQgYXMgYSBjb25maWd1cmF0aW9uIGZpbGUgKGRwa2cgd2lsbCBwcmVzZXJ2ZSB1c2VyIG1vZGlmaWNhdGlvbnMgZHVyaW5nIHVwZ3JhZGVzKVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInBhdGhcIixcbiAgICAgICAgXCJpc0NvbmZpZ0ZpbGVcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEcGtnRmlsZVJlY29yZCByZXByZXNlbnRzIGEgc2luZ2xlIGZpbGUgYXR0cmlidXRlZCB0byBhIGRlYmlhbiBwYWNrYWdlLlwiXG4gICAgfSxcbiAgICBcIkVMRlNlY3VyaXR5RmVhdHVyZXNcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJzeW1ib2xUYWJsZVN0cmlwcGVkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlN5bWJvbFRhYmxlU3RyaXBwZWQgaW5kaWNhdGVzIHdoZXRoZXIgZGVidWdnaW5nIHN5bWJvbHMgaGF2ZSBiZWVuIHJlbW92ZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzdGFja0NhbmFyeVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTdGFja0NhbmFyeSBpbmRpY2F0ZXMgd2hldGhlciBzdGFjayBzbWFzaGluZyBwcm90ZWN0aW9uIGlzIGVuYWJsZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJueFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOb0V4ZWN1dGFibGUgaW5kaWNhdGVzIHdoZXRoZXIgTlggKG5vLWV4ZWN1dGUpIHByb3RlY3Rpb24gaXMgZW5hYmxlZCBmb3IgdGhlIHN0YWNrLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVsUk9cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWxvY2F0aW9uUmVhZE9ubHkgaW5kaWNhdGVzIHRoZSBSRUxSTyBwcm90ZWN0aW9uIGxldmVsLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGllXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBvc2l0aW9uSW5kZXBlbmRlbnRFeGVjdXRhYmxlIGluZGljYXRlcyB3aGV0aGVyIHRoZSBiaW5hcnkgaXMgY29tcGlsZWQgYXMgUElFLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZHNvXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkR5bmFtaWNTaGFyZWRPYmplY3QgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGJpbmFyeSBpcyBhIHNoYXJlZCBsaWJyYXJ5LlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2FmZVN0YWNrXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxsdm1TYWZlU3RhY2sgcmVwcmVzZW50cyBhIGNvbXBpbGVyLWJhc2VkIHNlY3VyaXR5IG1lY2hhbmlzbSB0aGF0IHNlcGFyYXRlcyB0aGUgc3RhY2sgaW50byBhIHNhZmUgc3RhY2sgZm9yIHN0b3JpbmcgcmV0dXJuIGFkZHJlc3NlcyBhbmQgb3RoZXIgY3JpdGljYWwgZGF0YSwgYW5kIGFuIHVuc2FmZSBzdGFjayBmb3IgZXZlcnl0aGluZyBlbHNlLCB0byBtaXRpZ2F0ZSBzdGFjay1iYXNlZCBtZW1vcnkgY29ycnVwdGlvbiBlcnJvcnNcXG5zZWUgaHR0cHM6Ly9jbGFuZy5sbHZtLm9yZy9kb2NzL1NhZmVTdGFjay5odG1sXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZmlcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ29udHJvbEZsb3dJbnRlZ3JpdHkgcmVwcmVzZW50cyBydW50aW1lIGNoZWNrcyB0byBlbnN1cmUgYSBwcm9ncmFtJ3MgY29udHJvbCBmbG93IGFkaGVyZXMgdG8gdGhlIGxlZ2FsIHBhdGhzIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lLCB0aHVzIHByb3RlY3RpbmcgYWdhaW5zdCB2YXJpb3VzIHR5cGVzIG9mIGNvbnRyb2wtZmxvdyBoaWphY2tpbmcgYXR0YWNrc1xcbnNlZSBodHRwczovL2NsYW5nLmxsdm0ub3JnL2RvY3MvQ29udHJvbEZsb3dJbnRlZ3JpdHkuaHRtbFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm9ydGlmeVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDbGFuZ0ZvcnRpZnlTb3VyY2UgaXMgYSBicm9hZCBzdWl0ZSBvZiBleHRlbnNpb25zIHRvIGxpYmMgYWltZWQgYXQgY2F0Y2hpbmcgbWlzdXNlcyBvZiBjb21tb24gbGlicmFyeSBmdW5jdGlvbnNcXG5zZWUgaHR0cHM6Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb20vcGxhdGZvcm0vL2Jpb25pYy8rL2QxOTJkYmVjZjBiMmEzNzFlYjEyN2MwODcxZjc3YTljYWY4MWM0ZDIvZG9jcy9jbGFuZ19mb3J0aWZ5X2FuYXRvbXkubWRcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJzeW1ib2xUYWJsZVN0cmlwcGVkXCIsXG4gICAgICAgIFwibnhcIixcbiAgICAgICAgXCJyZWxST1wiLFxuICAgICAgICBcInBpZVwiLFxuICAgICAgICBcImRzb1wiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkVMRlNlY3VyaXR5RmVhdHVyZXMgY2FwdHVyZXMgc2VjdXJpdHkgaGFyZGVuaW5nIGFuZCBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgaW4gRUxGIGJpbmFyaWVzLlwiXG4gICAgfSxcbiAgICBcIkVsZkJpbmFyeVBhY2thZ2VOb3RlSnNvblBheWxvYWRcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVHlwZSBpcyB0aGUgdHlwZSBvZiB0aGUgcGFja2FnZSAoZS5nLiBcXFwicnBtXFxcIiwgXFxcImRlYlxcXCIsIFxcXCJhcGtcXFwiLCBldGMuKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl0ZWN0dXJlIG9mIHRoZSBiaW5hcnkgcGFja2FnZSAoZS5nLiBcXFwiYW1kNjRcXFwiLCBcXFwiYXJtXFxcIiwgZXRjLilcIlxuICAgICAgICB9LFxuICAgICAgICBcIm9zQ1BFXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT1NDUEUgaXMgYSBDUEUgbmFtZSBmb3IgdGhlIE9TLCB0eXBpY2FsbHkgY29ycmVzcG9uZGluZyB0byBDUEVfTkFNRSBpbiBvcy1yZWxlYXNlIChlLmcuIGNwZTovbzpmZWRvcmFwcm9qZWN0OmZlZG9yYTozMylcXG5cXG5EZXByZWNhdGVkOiBpbiBTeWZ0IDIuMCB0aGUgc3RydWN0IHRhZyB3aWxsIGJlIGNvcnJlY3RlZCB0byBgb3NDcGVgIHRvIG1hdGNoIHRoZSBzeXN0ZW1kIHNwZWMgY2FzaW5nLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXBwQ3BlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXBwQ3BlIGlzIGEgQ1BFIG5hbWUgZm9yIHRoZSB1cHN0cmVhbSBBcHBsaWNhdGlvbiwgYXMgZm91bmQgaW4gTlZEIENQRSBzZWFyY2ggKGUuZy4gY3BlOjIuMzphOmdudTpjb3JldXRpbHM6NS4wKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwib3NcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJPUyBpcyB0aGUgT1MgbmFtZSwgdHlwaWNhbGx5IGNvcnJlc3BvbmRpbmcgdG8gSUQgaW4gb3MtcmVsZWFzZSAoZS5nLiBcXFwiZmVkb3JhXFxcIilcIlxuICAgICAgICB9LFxuICAgICAgICBcIm9zVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9zVmVyc2lvbiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgT1MsIHR5cGljYWxseSBjb3JyZXNwb25kaW5nIHRvIFZFUlNJT05fSUQgaW4gb3MtcmVsZWFzZSAoZS5nLiBcXFwiMzNcXFwiKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic3lzdGVtXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU3lzdGVtIGlzIGEgY29udGV4dC1zcGVjaWZpYyBuYW1lIGZvciB0aGUgc3lzdGVtIHRoYXQgdGhlIGJpbmFyeSBwYWNrYWdlIGlzIGludGVuZGVkIHRvIHJ1biBvbiBvciBhIHBhcnQgb2ZcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlbmRvclwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlbmRvciBpcyB0aGUgaW5kaXZpZHVhbCBvciBvcmdhbml6YXRpb24gdGhhdCBwcm9kdWNlZCB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBiaW5hcnlcIlxuICAgICAgICB9LFxuICAgICAgICBcInNvdXJjZVJlcG9cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2VSZXBvIGlzIHRoZSBVUkwgdG8gdGhlIHNvdXJjZSByZXBvc2l0b3J5IGZvciB3aGljaCB0aGUgYmluYXJ5IHdhcyBidWlsdCBmcm9tXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb21taXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb21taXQgaXMgdGhlIGNvbW1pdCBoYXNoIG9mIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBmb3Igd2hpY2ggdGhlIGJpbmFyeSB3YXMgYnVpbHQgZnJvbVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFTEZCaW5hcnlQYWNrYWdlTm90ZUpTT05QYXlsb2FkIFJlcHJlc2VudHMgbWV0YWRhdGEgY2FwdHVyZWQgZnJvbSB0aGUgLm5vdGUucGFja2FnZSBzZWN0aW9uIG9mIGFuIEVMRi1mb3JtYXR0ZWQgYmluYXJ5XCJcbiAgICB9LFxuICAgIFwiRWxpeGlyTWl4TG9ja0VudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIHBhY2thZ2UgbmFtZSBhcyBmb3VuZCBpbiB0aGUgbWl4LmxvY2sgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvbiBhcyBmb3VuZCBpbiB0aGUgbWl4LmxvY2sgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGtnSGFzaFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBrZ0hhc2ggaXMgdGhlIG91dGVyIGNoZWNrc3VtIChTSEEtMjU2KSBvZiB0aGUgZW50aXJlIEhleCBwYWNrYWdlIHRhcmJhbGwgZm9yIGludGVncml0eSB2ZXJpZmljYXRpb24gKHByZWZlcnJlZCBtZXRob2QsIHJlcGxhY2VzIGRlcHJlY2F0ZWQgaW5uZXIgY2hlY2tzdW0pXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwa2dIYXNoRXh0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGtnSGFzaEV4dCBpcyB0aGUgZXh0ZW5kZWQgcGFja2FnZSBoYXNoIGZvcm1hdCAoaW5uZXIgY2hlY2tzdW0gaXMgZGVwcmVjYXRlZCAtIFNIQS0yNTYgb2YgY29uY2F0ZW5hdGVkIGZpbGUgY29udGVudHMgZXhjbHVkaW5nIENIRUNLU1VNIGZpbGUsIG5vdyByZXBsYWNlZCBieSBvdXRlciBjaGVja3N1bSlcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcInBrZ0hhc2hcIixcbiAgICAgICAgXCJwa2dIYXNoRXh0XCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRWxpeGlyTWl4TG9ja0VudHJ5IGlzIGEgc3RydWN0IHRoYXQgcmVwcmVzZW50cyBhIHNpbmdsZSBlbnRyeSBpbiBhIG1peC5sb2NrIGZpbGVcIlxuICAgIH0sXG4gICAgXCJFcmxhbmdSZWJhckxvY2tFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBwYWNrYWdlIG5hbWUgYXMgZm91bmQgaW4gdGhlIHJlYmFyLmxvY2sgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvbiBhcyBmb3VuZCBpbiB0aGUgcmViYXIubG9jayBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwa2dIYXNoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGtnSGFzaCBpcyB0aGUgb3V0ZXIgY2hlY2tzdW0gKFNIQS0yNTYpIG9mIHRoZSBlbnRpcmUgSGV4IHBhY2thZ2UgdGFyYmFsbCBmb3IgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbiAocHJlZmVycmVkIG1ldGhvZCBvdmVyIGRlcHJlY2F0ZWQgaW5uZXIgY2hlY2tzdW0pXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwa2dIYXNoRXh0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGtnSGFzaEV4dCBpcyB0aGUgZXh0ZW5kZWQgcGFja2FnZSBoYXNoIGZvcm1hdCAoaW5uZXIgY2hlY2tzdW0gZGVwcmVjYXRlZCAtIHdhcyBTSEEtMjU2IG9mIGNvbmNhdGVuYXRlZCBmaWxlIGNvbnRlbnRzKVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwicGtnSGFzaFwiLFxuICAgICAgICBcInBrZ0hhc2hFeHRcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFcmxhbmdSZWJhckxvY2tFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIHBhY2thZ2UgZW50cnkgZnJvbSB0aGUgXFxcImRlcHNcXFwiIHNlY3Rpb24gd2l0aGluIGFuIEVybGFuZyByZWJhci5sb2NrIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiRXhlY3V0YWJsZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImZvcm1hdFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZvcm1hdCBkZW5vdGVzIGVpdGhlciBFTEYsIE1hY2gtTywgb3IgUEVcIlxuICAgICAgICB9LFxuICAgICAgICBcImhhc0V4cG9ydHNcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSGFzRXhwb3J0cyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYmluYXJ5IGV4cG9ydHMgc3ltYm9scy5cIlxuICAgICAgICB9LFxuICAgICAgICBcImhhc0VudHJ5cG9pbnRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSGFzRW50cnlwb2ludCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYmluYXJ5IGhhcyBhbiBlbnRyeSBwb2ludCBmdW5jdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcImltcG9ydGVkTGlicmFyaWVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJbXBvcnRlZExpYnJhcmllcyBsaXN0cyB0aGUgc2hhcmVkIGxpYnJhcmllcyByZXF1aXJlZCBieSB0aGlzIGV4ZWN1dGFibGUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbGZTZWN1cml0eUZlYXR1cmVzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0VMRlNlY3VyaXR5RmVhdHVyZXNcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRUxGU2VjdXJpdHlGZWF0dXJlcyBjb250YWlucyBFTEYtc3BlY2lmaWMgc2VjdXJpdHkgaGFyZGVuaW5nIGluZm9ybWF0aW9uIHdoZW4gRm9ybWF0IGlzIEVMRi5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJmb3JtYXRcIixcbiAgICAgICAgXCJoYXNFeHBvcnRzXCIsXG4gICAgICAgIFwiaGFzRW50cnlwb2ludFwiLFxuICAgICAgICBcImltcG9ydGVkTGlicmFyaWVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRXhlY3V0YWJsZSBjb250YWlucyBtZXRhZGF0YSBhYm91dCBiaW5hcnkgZmlsZXMgYW5kIHRoZWlyIHNlY3VyaXR5IGZlYXR1cmVzLlwiXG4gICAgfSxcbiAgICBcIkZpbGVcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJpZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklEIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgZmlsZSB3aXRoaW4gdGhlIFNCT00uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsb2NhdGlvblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Db29yZGluYXRlc1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJMb2NhdGlvbiBpcyB0aGUgZmlsZSBwYXRoIGFuZCBsYXllciBpbmZvcm1hdGlvbiB3aGVyZSB0aGlzIGZpbGUgd2FzIGZvdW5kLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRmlsZU1ldGFkYXRhRW50cnlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWV0YWRhdGEgY29udGFpbnMgZmlsZXN5c3RlbSBtZXRhZGF0YSBzdWNoIGFzIHBlcm1pc3Npb25zLCBvd25lcnNoaXAsIGFuZCBmaWxlIHR5cGUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb250ZW50c1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbnRlbnRzIGlzIHRoZSBmaWxlIGNvbnRlbnRzIGZvciBzbWFsbCBmaWxlcy5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRpZ2VzdHNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9EaWdlc3RcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGlnZXN0cyBjb250YWlucyBjcnlwdG9ncmFwaGljIGhhc2hlcyBvZiB0aGUgZmlsZSBjb250ZW50cy5cIlxuICAgICAgICB9LFxuICAgICAgICBcImxpY2Vuc2VzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRmlsZUxpY2Vuc2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGljZW5zZXMgY29udGFpbnMgbGljZW5zZSBpbmZvcm1hdGlvbiBkaXNjb3ZlcmVkIHdpdGhpbiB0aGlzIGZpbGUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGVjdXRhYmxlXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0V4ZWN1dGFibGVcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRXhlY3V0YWJsZSBjb250YWlucyBleGVjdXRhYmxlIG1ldGFkYXRhIGlmIHRoaXMgZmlsZSBpcyBhIGJpbmFyeS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInVua25vd25zXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVbmtub3ducyBjb250YWlucyB1bmtub3duIGZpZWxkcyBmb3IgZm9yd2FyZCBjb21wYXRpYmlsaXR5LlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImlkXCIsXG4gICAgICAgIFwibG9jYXRpb25cIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlIHJlcHJlc2VudHMgYSBmaWxlIGRpc2NvdmVyZWQgZHVyaW5nIGNhdGFsb2dpbmcgd2l0aCBpdHMgbWV0YWRhdGEsIGNvbnRlbnQgZGlnZXN0cywgbGljZW5zZXMsIGFuZCByZWxhdGlvbnNoaXBzIHRvIHBhY2thZ2VzLlwiXG4gICAgfSxcbiAgICBcIkZpbGVMaWNlbnNlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidmFsdWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWYWx1ZSBpcyB0aGUgcmF3IGxpY2Vuc2UgaWRlbnRpZmllciBvciB0ZXh0IGFzIGZvdW5kIGluIHRoZSBmaWxlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic3BkeEV4cHJlc3Npb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTUERYRXhwcmVzc2lvbiBpcyB0aGUgcGFyc2VkIFNQRFggbGljZW5zZSBleHByZXNzaW9uLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlR5cGUgaXMgdGhlIGxpY2Vuc2UgdHlwZSBjbGFzc2lmaWNhdGlvbiAoZS5nLiwgZGVjbGFyZWQsIGNvbmNsdWRlZCwgZGlzY292ZXJlZCkuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJldmlkZW5jZVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9GaWxlTGljZW5zZUV2aWRlbmNlXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkV2aWRlbmNlIGNvbnRhaW5zIHN1cHBvcnRpbmcgZXZpZGVuY2UgZm9yIHRoaXMgbGljZW5zZSBkZXRlY3Rpb24uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidmFsdWVcIixcbiAgICAgICAgXCJzcGR4RXhwcmVzc2lvblwiLFxuICAgICAgICBcInR5cGVcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlTGljZW5zZSByZXByZXNlbnRzIGxpY2Vuc2UgaW5mb3JtYXRpb24gZGlzY292ZXJlZCB3aXRoaW4gYSBmaWxlJ3MgY29udGVudHMgb3IgbWV0YWRhdGEsIGluY2x1ZGluZyB0aGUgbWF0Y2hlZCBsaWNlbnNlIHRleHQgYW5kIFNQRFggZXhwcmVzc2lvbi5cIlxuICAgIH0sXG4gICAgXCJGaWxlTGljZW5zZUV2aWRlbmNlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiY29uZmlkZW5jZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb25maWRlbmNlIGlzIHRoZSBjb25maWRlbmNlIHNjb3JlIGZvciB0aGlzIGxpY2Vuc2UgZGV0ZWN0aW9uICgwLTEwMCkuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJvZmZzZXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT2Zmc2V0IGlzIHRoZSBieXRlIG9mZnNldCB3aGVyZSB0aGUgbGljZW5zZSB0ZXh0IHN0YXJ0cyBpbiB0aGUgZmlsZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4dGVudFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFeHRlbnQgaXMgdGhlIGxlbmd0aCBvZiB0aGUgbGljZW5zZSB0ZXh0IGluIGJ5dGVzLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImNvbmZpZGVuY2VcIixcbiAgICAgICAgXCJvZmZzZXRcIixcbiAgICAgICAgXCJleHRlbnRcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlTGljZW5zZUV2aWRlbmNlIGNvbnRhaW5zIHN1cHBvcnRpbmcgZXZpZGVuY2UgZm9yIGEgbGljZW5zZSBkZXRlY3Rpb24gaW4gYSBmaWxlLCBpbmNsdWRpbmcgdGhlIGJ5dGUgb2Zmc2V0LCBleHRlbnQsIGFuZCBjb25maWRlbmNlIGxldmVsLlwiXG4gICAgfSxcbiAgICBcIkZpbGVNZXRhZGF0YUVudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibW9kZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNb2RlIGlzIHRoZSBVbml4IGZpbGUgcGVybWlzc2lvbiBtb2RlIGluIG9jdGFsIGZvcm1hdC5cIlxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUeXBlIGlzIHRoZSBmaWxlIHR5cGUgKGUuZy4sIFxcXCJSZWd1bGFyRmlsZVxcXCIsIFxcXCJEaXJlY3RvcnlcXFwiLCBcXFwiU3ltYm9saWNMaW5rXFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsaW5rRGVzdGluYXRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJMaW5rRGVzdGluYXRpb24gaXMgdGhlIHRhcmdldCBwYXRoIGZvciBzeW1ib2xpYyBsaW5rcy5cIlxuICAgICAgICB9LFxuICAgICAgICBcInVzZXJJRFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVc2VySUQgaXMgdGhlIGZpbGUgb3duZXIgdXNlciBJRC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImdyb3VwSURcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR3JvdXBJRCBpcyB0aGUgZmlsZSBvd25lciBncm91cCBJRC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbWVUeXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTUlNRVR5cGUgaXMgdGhlIE1JTUUgdHlwZSBvZiB0aGUgZmlsZSBjb250ZW50cy5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpemVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2l6ZSBpcyB0aGUgZmlsZSBzaXplIGluIGJ5dGVzLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm1vZGVcIixcbiAgICAgICAgXCJ0eXBlXCIsXG4gICAgICAgIFwidXNlcklEXCIsXG4gICAgICAgIFwiZ3JvdXBJRFwiLFxuICAgICAgICBcIm1pbWVUeXBlXCIsXG4gICAgICAgIFwic2l6ZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVNZXRhZGF0YUVudHJ5IGNvbnRhaW5zIGZpbGVzeXN0ZW0tbGV2ZWwgbWV0YWRhdGEgYXR0cmlidXRlcyBzdWNoIGFzIHBlcm1pc3Npb25zLCBvd25lcnNoaXAsIHR5cGUsIGFuZCBzaXplIGZvciBhIGNhdGFsb2dlZCBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkdndWZGaWxlSGVhZGVyXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiZ2d1ZlZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR0dVRlZlcnNpb24gaXMgdGhlIEdHVUYgZm9ybWF0IHZlcnNpb24gKGUuZy4sIDMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWxlU2l6ZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlU2l6ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgR0dVRiBmaWxlIGluIGJ5dGVzIChiZXN0LWVmZm9ydCBpZiBhdmFpbGFibGUgZnJvbSByZXNvbHZlcilcIlxuICAgICAgICB9LFxuICAgICAgICBcImFyY2hpdGVjdHVyZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkFyY2hpdGVjdHVyZSBpcyB0aGUgbW9kZWwgYXJjaGl0ZWN0dXJlIChmcm9tIGdlbmVyYWwuYXJjaGl0ZWN0dXJlLCBlLmcuLCBcXFwicXdlbjNtb2VcXFwiLCBcXFwibGxhbWFcXFwiKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhbnRpemF0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUXVhbnRpemF0aW9uIGlzIHRoZSBxdWFudGl6YXRpb24gdHlwZSAoZS5nLiwgXFxcIklRNF9OTFxcXCIsIFxcXCJRNF9LX01cXFwiKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGFyYW1ldGVyc1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXJhbWV0ZXJzIGlzIHRoZSBudW1iZXIgb2YgbW9kZWwgcGFyYW1ldGVycyAoaWYgcHJlc2VudCBpbiBoZWFkZXIpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0ZW5zb3JDb3VudFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUZW5zb3JDb3VudCBpcyB0aGUgbnVtYmVyIG9mIHRlbnNvcnMgaW4gdGhlIG1vZGVsXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJoZWFkZXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZW1haW5pbmdLZXlWYWx1ZXMgY29udGFpbnMgdGhlIHJlbWFpbmluZyBrZXktdmFsdWUgcGFpcnMgZnJvbSB0aGUgR0dVRiBoZWFkZXIgdGhhdCBhcmUgbm90IGFscmVhZHlcXG5yZXByZXNlbnRlZCBhcyB0eXBlZCBmaWVsZHMgYWJvdmUuIFRoaXMgcHJlc2VydmVzIGFkZGl0aW9uYWwgbWV0YWRhdGEgZmllbGRzIGZvciByZWZlcmVuY2VcXG4obmFtZXNwYWNlZCB3aXRoIGdlbmVyYWwuKiwgbGxhbWEuKiwgZXRjLikgd2hpbGUgYXZvaWRpbmcgZHVwbGljYXRpb24uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtZXRhZGF0YUhhc2hcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNZXRhZGF0YUtleVZhbHVlc0hhc2ggaXMgYSB4eDY0IGhhc2ggb2YgYWxsIGtleS12YWx1ZSBwYWlycyBmcm9tIHRoZSBHR1VGIGhlYWRlciBtZXRhZGF0YS5cXG5UaGlzIGhhc2ggaXMgY29tcHV0ZWQgb3ZlciB0aGUgY29tcGxldGUgaGVhZGVyIG1ldGFkYXRhIChpbmNsdWRpbmcgdGhlIGZpZWxkcyBleHRyYWN0ZWRcXG5pbnRvIHR5cGVkIGZpZWxkcyBhYm92ZSkgYW5kIHByb3ZpZGVzIGEgc3RhYmxlIGlkZW50aWZpZXIgZm9yIHRoZSBtb2RlbCBjb25maWd1cmF0aW9uXFxuYWNyb3NzIGRpZmZlcmVudCBmaWxlIGxvY2F0aW9ucyBvciByZW1vdGVzLiBJdCBhbGxvd3MgbWF0Y2hpbmcgaWRlbnRpY2FsIG1vZGVscyBldmVuXFxud2hlbiBzdG9yZWQgaW4gZGlmZmVyZW50IHJlcG9zaXRvcmllcyBvciB3aXRoIGRpZmZlcmVudCBmaWxlbmFtZXMuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXJ0c1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0dndWZGaWxlSGVhZGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhcnRzIGNvbnRhaW5zIGhlYWRlcnMgZnJvbSBhZGRpdGlvbmFsIEdHVUYgZmlsZXMgdGhhdCB3ZXJlIG1lcmdlZFxcbmludG8gdGhpcyBwYWNrYWdlIGR1cmluZyBwb3N0LXByb2Nlc3NpbmcgKGUuZy4sIGZyb20gT0NJIGxheWVycyB3aXRob3V0IG1vZGVsIG5hbWVzKS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJnZ3VmVmVyc2lvblwiLFxuICAgICAgICBcInRlbnNvckNvdW50XCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR0dVRkZpbGVIZWFkZXIgcmVwcmVzZW50cyBtZXRhZGF0YSBleHRyYWN0ZWQgZnJvbSBhIEdHVUYgKEdQVC1HZW5lcmF0ZWQgVW5pZmllZCBGb3JtYXQpIG1vZGVsIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiR2l0aHViQWN0aW9uc1VzZVN0YXRlbWVudFwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInZhbHVlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmFsdWUgaXMgdGhlIGFjdGlvbiByZWZlcmVuY2UgKGUuZy4gXFxcImFjdGlvbnMvY2hlY2tvdXRAdjNcXFwiKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29tbWVudFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbW1lbnQgaXMgdGhlIGlubGluZSBjb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHVzZXMgc3RhdGVtZW50XCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidmFsdWVcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJHaXRIdWJBY3Rpb25zVXNlU3RhdGVtZW50IHJlcHJlc2VudHMgYSBzaW5nbGUgJ3VzZXMnIHN0YXRlbWVudCBpbiBhIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93IGZpbGUgcmVmZXJlbmNpbmcgYW4gYWN0aW9uIG9yIHJldXNhYmxlIHdvcmtmbG93LlwiXG4gICAgfSxcbiAgICBcIkdvTW9kdWxlQnVpbGRpbmZvRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJnb0J1aWxkU2V0dGluZ3NcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvS2V5VmFsdWVzXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkJ1aWxkU2V0dGluZ3MgY29udGFpbnMgdGhlIEdvIGJ1aWxkIHNldHRpbmdzIGFuZCBmbGFncyB1c2VkIHRvIGNvbXBpbGUgdGhlIGJpbmFyeSAoZS5nLiwgR09BUkNILCBHT09TLCBDR09fRU5BQkxFRCkuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJnb0NvbXBpbGVkVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkdvQ29tcGlsZWRWZXJzaW9uIGlzIHRoZSB2ZXJzaW9uIG9mIEdvIHVzZWQgdG8gY29tcGlsZSB0aGUgYmluYXJ5LlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl0ZWN0dXJlIGlzIHRoZSB0YXJnZXQgQ1BVIGFyY2hpdGVjdHVyZSBmb3IgdGhlIGJpbmFyeSAoZXh0cmFjdGVkIGZyb20gR09BUkNIIGJ1aWxkIHNldHRpbmcpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaDFEaWdlc3RcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIMURpZ2VzdCBpcyB0aGUgR28gbW9kdWxlIGhhc2ggaW4gaDE6IGZvcm1hdCBmb3IgdGhlIG1haW4gbW9kdWxlIGZyb20gZ28uc3VtLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWFpbk1vZHVsZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1haW5Nb2R1bGUgaXMgdGhlIG1haW4gbW9kdWxlIHBhdGggZm9yIHRoZSBiaW5hcnkgKGUuZy4sIFxcXCJnaXRodWIuY29tL2FuY2hvcmUvc3lmdFxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ29DcnlwdG9TZXR0aW5nc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR29DcnlwdG9TZXR0aW5ncyBjb250YWlucyBGSVBTIGFuZCBjcnlwdG9ncmFwaGljIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaWYgcHJlc2VudC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImdvRXhwZXJpbWVudHNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkdvRXhwZXJpbWVudHMgbGlzdHMgZXhwZXJpbWVudGFsIEdvIGZlYXR1cmVzIGVuYWJsZWQgZHVyaW5nIGNvbXBpbGF0aW9uIChlLmcuLCBcXFwiYXJlbmFzXFxcIiwgXFxcImNnb2NoZWNrMlxcXCIpLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImdvQ29tcGlsZWRWZXJzaW9uXCIsXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR29sYW5nQmluYXJ5QnVpbGRpbmZvRW50cnkgcmVwcmVzZW50cyBhbGwgY2FwdHVyZWQgZGF0YSBmb3IgYSBHb2xhbmcgYmluYXJ5XCJcbiAgICB9LFxuICAgIFwiR29Nb2R1bGVFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImgxRGlnZXN0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSDFEaWdlc3QgaXMgdGhlIEdvIG1vZHVsZSBoYXNoIGluIGgxOiBmb3JtYXQgZnJvbSBnby5zdW0gZm9yIHZlcmlmeWluZyBtb2R1bGUgY29udGVudHMuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkdvbGFuZ01vZHVsZUVudHJ5IHJlcHJlc2VudHMgYWxsIGNhcHR1cmVkIGRhdGEgZm9yIGEgR29sYW5nIHNvdXJjZSBzY2FuIHdpdGggZ28ubW9kL2dvLnN1bVwiXG4gICAgfSxcbiAgICBcIkdvU291cmNlRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJoMURpZ2VzdFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkgxRGlnZXN0IGlzIHRoZSBHbyBtb2R1bGUgaGFzaCBpbiBoMTogZm9ybWF0IGZyb20gZ28uc3VtIGZvciB2ZXJpZnlpbmcgbW9kdWxlIGNvbnRlbnRzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwib3NcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJPcGVyYXRpbmdTeXN0ZW0gaXMgdGhlIHRhcmdldCBPUyBmb3IgYnVpbGQgY29uc3RyYWludHMgKGUuZy4sIFxcXCJsaW51eFxcXCIsIFxcXCJkYXJ3aW5cXFwiLCBcXFwid2luZG93c1xcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl0ZWN0dXJlIGlzIHRoZSB0YXJnZXQgQ1BVIGFyY2hpdGVjdHVyZSBmb3IgYnVpbGQgY29uc3RyYWludHMgKGUuZy4sIFxcXCJhbWQ2NFxcXCIsIFxcXCJhcm02NFxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYnVpbGRUYWdzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQnVpbGRUYWdzIGFyZSB0aGUgYnVpbGQgdGFncyB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgY29tcGlsZSBjb2RlIChlLmcuLCBcXFwiaW50ZWdyYXRpb24sZGVidWdcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImNnb0VuYWJsZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ2dvRW5hYmxlZCBpbmRpY2F0ZXMgd2hldGhlciBDR08gd2FzIGVuYWJsZWQgZm9yIHRoaXMgcGFja2FnZS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJjZ29FbmFibGVkXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR29sYW5nU291cmNlRW50cnkgcmVwcmVzZW50cyBhbGwgY2FwdHVyZWQgZGF0YSBmb3IgYSBHb2xhbmcgcGFja2FnZSBmb3VuZCB0aHJvdWdoIHNvdXJjZSBhbmFseXNpc1wiXG4gICAgfSxcbiAgICBcIkhhc2tlbGxIYWNrYWdlU3RhY2tFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBrZ0hhc2hcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQa2dIYXNoIGlzIHRoZSBwYWNrYWdlIGNvbnRlbnQgaGFzaCBmb3IgdmVyaWZpY2F0aW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkhhY2thZ2VTdGFja1lhbWxFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIGVudHJ5IGZyb20gdGhlIFxcXCJleHRyYS1kZXBzXFxcIiBzZWN0aW9uIG9mIGEgc3RhY2sueWFtbCBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkhhc2tlbGxIYWNrYWdlU3RhY2tMb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJwa2dIYXNoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGtnSGFzaCBpcyB0aGUgcGFja2FnZSBjb250ZW50IGhhc2ggZm9yIHZlcmlmaWNhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic25hcHNob3RVUkxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTbmFwc2hvdFVSTCBpcyB0aGUgVVJMIHRvIHRoZSBTdGFjayBzbmFwc2hvdCB0aGlzIHBhY2thZ2UgY2FtZSBmcm9tXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkhhY2thZ2VTdGFja1lhbWxMb2NrRW50cnkgcmVwcmVzZW50cyBhIHNpbmdsZSBlbnRyeSBmcm9tIHRoZSBcXFwicGFja2FnZXNcXFwiIHNlY3Rpb24gb2YgYSBzdGFjay55YW1sLmxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJIb21lYnJld0Zvcm11bGFcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0YXBcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUYXAgaXMgSG9tZWJyZXcgdGFwIHRoaXMgZm9ybXVsYSBiZWxvbmdzIHRvIChlLmcuIFxcXCJob21lYnJldy9jb3JlXFxcIilcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvbWVwYWdlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSG9tZXBhZ2UgaXMgdGhlIHVwc3RyZWFtIHByb2plY3QgaG9tZXBhZ2UgVVJMXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0aW9uIGlzIGEgaHVtYW4tcmVhZGFibGUgZm9ybXVsYSBkZXNjcmlwdGlvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIb21lYnJld0Zvcm11bGEgcmVwcmVzZW50cyBtZXRhZGF0YSBhYm91dCBhIEhvbWVicmV3IGZvcm11bGEgcGFja2FnZSBleHRyYWN0ZWQgZnJvbSBmb3JtdWxhIEpTT04gZmlsZXMuXCJcbiAgICB9LFxuICAgIFwiSURMaWtlc1wiOiB7XG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklETGlrZXMgcmVwcmVzZW50cyBhIGxpc3Qgb2YgZGlzdHJpYnV0aW9uIElEcyB0aGF0IHRoaXMgTGludXggZGlzdHJpYnV0aW9uIGlzIHNpbWlsYXIgdG8gb3IgZGVyaXZlZCBmcm9tLCBhcyBkZWZpbmVkIGluIG9zLXJlbGVhc2UgSURfTElLRSBmaWVsZC5cIlxuICAgIH0sXG4gICAgXCJKYXZhQXJjaGl2ZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInZpcnR1YWxQYXRoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmlydHVhbFBhdGggaXMgcGF0aCB3aXRoaW4gdGhlIGFyY2hpdmUgaGllcmFyY2h5LCB3aGVyZSBuZXN0ZWQgZW50cmllcyBhcmUgZGVsaW1pdGVkIHdpdGggJzonIChmb3IgbmVzdGVkIEpBUnMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYW5pZmVzdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9KYXZhTWFuaWZlc3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWFuaWZlc3QgaXMgcGFyc2VkIE1FVEEtSU5GL01BTklGRVNULk1GIGNvbnRlbnRzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwb21Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0phdmFQb21Qcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBvbVByb3BlcnRpZXMgaXMgcGFyc2VkIHBvbS5wcm9wZXJ0aWVzIGZpbGUgY29udGVudHNcIlxuICAgICAgICB9LFxuICAgICAgICBcInBvbVByb2plY3RcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvSmF2YVBvbVByb2plY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUG9tUHJvamVjdCBpcyBwYXJzZWQgcG9tLnhtbCBmaWxlIGNvbnRlbnRzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkaWdlc3RcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9EaWdlc3RcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl2ZURpZ2VzdHMgaXMgY3J5cHRvZ3JhcGhpYyBoYXNoZXMgb2YgdGhlIGFyY2hpdmUgZmlsZVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInZpcnR1YWxQYXRoXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSmF2YUFyY2hpdmUgZW5jYXBzdWxhdGVzIGFsbCBKYXZhIGVjb3N5c3RlbSBtZXRhZGF0YSBmb3IgYSBwYWNrYWdlIGFzIHdlbGwgYXMgYW4gKG9wdGlvbmFsKSBwYXJlbnQgcmVsYXRpb25zaGlwLlwiXG4gICAgfSxcbiAgICBcIkphdmFKdm1JbnN0YWxsYXRpb25cIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZWxlYXNlXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0phdmFWTVJlbGVhc2VcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUmVsZWFzZSBpcyBKVk0gcmVsZWFzZSBpbmZvcm1hdGlvbiBhbmQgdmVyc2lvbiBkZXRhaWxzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWxlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRmlsZXMgYXJlIHRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyBKVk0gaW5zdGFsbGF0aW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwicmVsZWFzZVwiLFxuICAgICAgICBcImZpbGVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSmF2YVZNSW5zdGFsbGF0aW9uIHJlcHJlc2VudHMgYSBKYXZhIFZpcnR1YWwgTWFjaGluZSBpbnN0YWxsYXRpb24gZGlzY292ZXJlZCBvbiB0aGUgc3lzdGVtIHdpdGggaXRzIHJlbGVhc2UgaW5mb3JtYXRpb24gYW5kIGZpbGUgbGlzdC5cIlxuICAgIH0sXG4gICAgXCJKYXZhTWFuaWZlc3RcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJtYWluXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0tleVZhbHVlc1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNYWluIGlzIG1haW4gbWFuaWZlc3QgYXR0cmlidXRlcyBhcyBrZXktdmFsdWUgcGFpcnNcIlxuICAgICAgICB9LFxuICAgICAgICBcInNlY3Rpb25zXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvS2V5VmFsdWVzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNlY3Rpb25zIGFyZSB0aGUgbmFtZWQgc2VjdGlvbnMgZnJvbSB0aGUgbWFuaWZlc3QgKGUuZy4gcGVyLWVudHJ5IGF0dHJpYnV0ZXMpXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkphdmFNYW5pZmVzdCByZXByZXNlbnRzIHRoZSBmaWVsZHMgb2YgaW50ZXJlc3QgZXh0cmFjdGVkIGZyb20gYSBKYXZhIGFyY2hpdmUncyBNRVRBLUlORi9NQU5JRkVTVC5NRiBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkphdmFQb21QYXJlbnRcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJncm91cElkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR3JvdXBJRCBpcyB0aGUgcGFyZW50IE1hdmVuIGdyb3VwIGlkZW50aWZpZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcImFydGlmYWN0SWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBcnRpZmFjdElEIGlzIHRoZSBwYXJlbnQgTWF2ZW4gYXJ0aWZhY3QgaWRlbnRpZmllclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhcmVudCB2ZXJzaW9uIChjaGlsZCBpbmhlcml0cyBjb25maWd1cmF0aW9uIGZyb20gdGhpcyBzcGVjaWZpYyB2ZXJzaW9uIG9mIHBhcmVudCBQT00pXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiZ3JvdXBJZFwiLFxuICAgICAgICBcImFydGlmYWN0SWRcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSmF2YVBvbVBhcmVudCBjb250YWlucyB0aGUgZmllbGRzIHdpdGhpbiB0aGUgPHBhcmVudD4gdGFnIGluIGEgcG9tLnhtbCBmaWxlXCJcbiAgICB9LFxuICAgIFwiSmF2YVBvbVByb2plY3RcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJwYXRoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGF0aCBpcyBwYXRoIHRvIHRoZSBwb20ueG1sIGZpbGUgd2l0aGluIHRoZSBhcmNoaXZlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXJlbnRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvSmF2YVBvbVBhcmVudFwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXJlbnQgaXMgdGhlIHBhcmVudCBQT00gcmVmZXJlbmNlIGZvciBpbmhlcml0YW5jZSAoY2hpbGQgUE9NcyBpbmhlcml0IGNvbmZpZ3VyYXRpb24gZnJvbSBwYXJlbnQpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJncm91cElkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR3JvdXBJRCBpcyBNYXZlbiBncm91cCBpZGVudGlmaWVyIChyZXZlcnNlZCBkb21haW4gbmFtZSBsaWtlIG9yZy5hcGFjaGUubWF2ZW4pXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhcnRpZmFjdElkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJ0aWZhY3RJRCBpcyBNYXZlbiBhcnRpZmFjdCBpZGVudGlmaWVyIChwcm9qZWN0IG5hbWUpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyBwcm9qZWN0IHZlcnNpb24gKHRvZ2V0aGVyIHdpdGggZ3JvdXBJZCBhbmQgYXJ0aWZhY3RJZCBmb3JtcyBNYXZlbiBjb29yZGluYXRlcyBncm91cElkOmFydGlmYWN0SWQ6dmVyc2lvbilcIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIGEgaHVtYW4tcmVhZGFibGUgcHJvamVjdCBuYW1lIChkaXNwbGF5ZWQgaW4gTWF2ZW4tZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24pXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0aW9uIGlzIGRldGFpbGVkIHByb2plY3QgZGVzY3JpcHRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcInVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlVSTCBpcyB0aGUgcHJvamVjdCBVUkwgKHR5cGljYWxseSBwcm9qZWN0IHdlYnNpdGUgb3IgcmVwb3NpdG9yeSlcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIFwiZ3JvdXBJZFwiLFxuICAgICAgICBcImFydGlmYWN0SWRcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwibmFtZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkphdmFQb21Qcm9qZWN0IHJlcHJlc2VudHMgZmllbGRzIG9mIGludGVyZXN0IGV4dHJhY3RlZCBmcm9tIGEgSmF2YSBhcmNoaXZlJ3MgcG9tLnhtbCBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkphdmFQb21Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGggaXMgcGF0aCB0byB0aGUgcG9tLnByb3BlcnRpZXMgZmlsZSB3aXRoaW4gdGhlIGFyY2hpdmVcIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBwcm9qZWN0IG5hbWVcIlxuICAgICAgICB9LFxuICAgICAgICBcImdyb3VwSWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJHcm91cElEIGlzIE1hdmVuIGdyb3VwIGlkZW50aWZpZXIgdW5pcXVlbHkgaWRlbnRpZnlpbmcgdGhlIHByb2plY3QgYWNyb3NzIGFsbCBwcm9qZWN0cyAoZm9sbG93cyByZXZlcnNlZCBkb21haW4gbmFtZSBjb252ZW50aW9uIGxpa2UgY29tLmNvbXBhbnkucHJvamVjdClcIlxuICAgICAgICB9LFxuICAgICAgICBcImFydGlmYWN0SWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBcnRpZmFjdElEIGlzIE1hdmVuIGFydGlmYWN0IGlkZW50aWZpZXIsIHRoZSBuYW1lIG9mIHRoZSBqYXIvYXJ0aWZhY3QgKHVuaXF1ZSB3aXRoaW4gdGhlIGdyb3VwSWQgc2NvcGUpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyBhcnRpZmFjdCB2ZXJzaW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzY29wZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNjb3BlIGlzIGRlcGVuZGVuY3kgc2NvcGUgZGV0ZXJtaW5pbmcgd2hlbiBkZXBlbmRlbmN5IGlzIGF2YWlsYWJsZSAoY29tcGlsZT1kZWZhdWx0IGFsbCBwaGFzZXMsIHRlc3Q9dGVzdCBjb21waWxhdGlvbi9leGVjdXRpb24gb25seSwgcnVudGltZT1ydW50aW1lIGFuZCB0ZXN0IG5vdCBjb21waWxlLCBwcm92aWRlZD1leHBlY3RlZCBmcm9tIEpESyBvciBjb250YWluZXIpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRyYUZpZWxkc1wiOiB7XG4gICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkV4dHJhIGlzIGFkZGl0aW9uYWwgY3VzdG9tIHByb3BlcnRpZXMgbm90IGluIHN0YW5kYXJkIE1hdmVuIGNvb3JkaW5hdGVzXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJncm91cElkXCIsXG4gICAgICAgIFwiYXJ0aWZhY3RJZFwiLFxuICAgICAgICBcInZlcnNpb25cIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJKYXZhUG9tUHJvcGVydGllcyByZXByZXNlbnRzIHRoZSBmaWVsZHMgb2YgaW50ZXJlc3QgZXh0cmFjdGVkIGZyb20gYSBKYXZhIGFyY2hpdmUncyBwb20ucHJvcGVydGllcyBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkphdmFWTVJlbGVhc2VcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJpbXBsZW1lbnRvclwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkltcGxlbWVudG9yIGlzIGV4dHJhY3RlZCB3aXRoIHRoZSBgamF2YS52ZW5kb3JgIEpWTSBwcm9wZXJ0eVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW1wbGVtZW50b3JWZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW1wbGVtZW50b3JWZXJzaW9uIGlzIGV4dHJhY3RlZCB3aXRoIHRoZSBgamF2YS52ZW5kb3IudmVyc2lvbmAgSlZNIHByb3BlcnR5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJqYXZhUnVudGltZVZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJKYXZhUnVudGltZVZlcnNpb24gaXMgZXh0cmFjdGVkIGZyb20gdGhlICdqYXZhLnJ1bnRpbWUudmVyc2lvbicgSlZNIHByb3BlcnR5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJqYXZhVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkphdmFWZXJzaW9uIG1hdGNoZXMgdGhhdCBmcm9tIGBqYXZhIC12ZXJzaW9uYCBjb21tYW5kIG91dHB1dFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiamF2YVZlcnNpb25EYXRlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSmF2YVZlcnNpb25EYXRlIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSAnamF2YS52ZXJzaW9uLmRhdGUnIEpWTSBwcm9wZXJ0eVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibGliY1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxpYmMgY2FuIGVpdGhlciBiZSAnZ2xpYmMnIG9yICdtdXNsJ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9kdWxlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTW9kdWxlcyBpcyBhIGxpc3Qgb2YgSlZNIG1vZHVsZXMgdGhhdCBhcmUgcGFja2FnZWRcIlxuICAgICAgICB9LFxuICAgICAgICBcIm9zQXJjaFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk9zQXJjaCBpcyB0aGUgdGFyZ2V0IENQVSBhcmNoaXRlY3R1cmVcIlxuICAgICAgICB9LFxuICAgICAgICBcIm9zTmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk9zTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgdGFyZ2V0IHJ1bnRpbWUgb3BlcmF0aW5nIHN5c3RlbSBlbnZpcm9ubWVudFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwib3NWZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT3NWZXJzaW9uIGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSB0YXJnZXQgcnVudGltZSBvcGVyYXRpbmcgc3lzdGVtIGVudmlyb25tZW50XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2UgcmVmZXJzIHRvIHRoZSBvcmlnaW4gcmVwb3NpdG9yeSBvZiBPcGVuSkRLIHNvdXJjZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYnVpbGRTb3VyY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCdWlsZFNvdXJjZSBHaXQgU0hBIG9mIHRoZSBidWlsZCByZXBvc2l0b3J5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWlsZFNvdXJjZVJlcG9cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCdWlsZFNvdXJjZVJlcG8gcmVmZXJzIHRvIHJoZSByZXBvc2l0b3J5IFVSTCBmb3IgdGhlIGJ1aWxkIHNvdXJjZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic291cmNlUmVwb1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNvdXJjZVJlcG8gcmVmZXJzIHRvIHRoZSBPcGVuSkRLIHJlcG9zaXRvcnkgVVJMXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmdWxsVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZ1bGxWZXJzaW9uIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSAnamF2YS5ydW50aW1lLnZlcnNpb24nIEpWTSBwcm9wZXJ0eVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2VtYW50aWNWZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2VtYW50aWNWZXJzaW9uIGlzIGRlcml2ZWQgZnJvbSB0aGUgT3BlbkpESyB2ZXJzaW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWlsZEluZm9cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCdWlsZEluZm8gY29udGFpbnMgYWRkaXRpb25hbCBidWlsZCBpbmZvcm1hdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwianZtVmFyaWFudFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkp2bVZhcmlhbnQgc3BlY2lmaWVzIHRoZSBKVk0gdmFyaWFudCAoZS5nLiwgSG90c3BvdCBvciBPcGVuSjkpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJqdm1WZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSnZtVmVyc2lvbiBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgJ2phdmEudm0udmVyc2lvbicgSlZNIHByb3BlcnR5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpbWFnZVR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJbWFnZVR5cGUgY2FuIGJlICdKREsnIG9yICdKUkUnXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWlsZFR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCdWlsZFR5cGUgY2FuIGJlICdjb21tZXJjaWFsJyAodXNlZCBpbiBzb21lIG9sZGVyIG9yYWNsZSBKREsgZGlzdHJpYnV0aW9ucylcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSmF2YVZNUmVsZWFzZSByZXByZXNlbnRzIEpWTSB2ZXJzaW9uIGFuZCBidWlsZCBpbmZvcm1hdGlvbiBleHRyYWN0ZWQgZnJvbSB0aGUgcmVsZWFzZSBmaWxlIGluIGEgSmF2YSBpbnN0YWxsYXRpb24uXCJcbiAgICB9LFxuICAgIFwiSmF2YXNjcmlwdE5wbVBhY2thZ2VcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyB0aGUgcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHBhY2thZ2UuanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvbiBhcyBmb3VuZCBpbiBwYWNrYWdlLmpzb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImF1dGhvclwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkF1dGhvciBpcyBwYWNrYWdlIGF1dGhvciBuYW1lXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJob21lcGFnZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkhvbWVwYWdlIGlzIHByb2plY3QgaG9tZXBhZ2UgVVJMXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0aW9uIGlzIGEgaHVtYW4tcmVhZGFibGUgcGFja2FnZSBkZXNjcmlwdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVVJMIGlzIHJlcG9zaXRvcnkgb3IgcHJvamVjdCBVUkxcIlxuICAgICAgICB9LFxuICAgICAgICBcInByaXZhdGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHJpdmF0ZSBpcyB3aGV0aGVyIHRoaXMgaXMgYSBwcml2YXRlIHBhY2thZ2VcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcImF1dGhvclwiLFxuICAgICAgICBcImhvbWVwYWdlXCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIixcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJwcml2YXRlXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTnBtUGFja2FnZSByZXByZXNlbnRzIHRoZSBjb250ZW50cyBvZiBhIGphdmFzY3JpcHQgcGFja2FnZS5qc29uIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiSmF2YXNjcmlwdE5wbVBhY2thZ2VMb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZXNvbHZlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlc29sdmVkIGlzIFVSTCB3aGVyZSB0aGlzIHBhY2thZ2Ugd2FzIGRvd25sb2FkZWQgZnJvbSAocmVnaXN0cnkgc291cmNlKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW50ZWdyaXR5XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW50ZWdyaXR5IGlzIFN1YnJlc291cmNlIEludGVncml0eSBoYXNoIGZvciB2ZXJpZmljYXRpb24gdXNpbmcgc3RhbmRhcmQgU1JJIGZvcm1hdCAoc2hhNTEyLS4uLiBvciBzaGExLS4uLikuIG5wbSBjaGFuZ2VkIGZyb20gU0hBLTEgdG8gU0hBLTUxMiBpbiBuZXdlciB2ZXJzaW9ucy4gRm9yIHJlZ2lzdHJ5IHNvdXJjZXMgdGhpcyBpcyB0aGUgaW50ZWdyaXR5IGZyb20gcmVnaXN0cnksIGZvciByZW1vdGUgdGFyYmFsbHMgaXQncyBTSEEtNTEyIG9mIHRoZSBmaWxlLiBucG0gdmVyaWZpZXMgdGFyYmFsbCBtYXRjaGVzIHRoaXMgaGFzaCBiZWZvcmUgdW5wYWNraW5nLCB0aHJvd2luZyBFSU5URUdSSVRZIGVycm9yIGlmIG1pc21hdGNoIGRldGVjdGVkLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVwZW5kZW5jaWVzIGlzIGEgbWFwIG9mIGRlcGVuZGVuY2llcyBhbmQgdGhlaXIgdmVyc2lvbiBtYXJrZXJzLCBpLmUuIFxcXCJsb2Rhc2hcXFwiOiBcXFwiXjEuMC4wXFxcIlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlc29sdmVkXCIsXG4gICAgICAgIFwiaW50ZWdyaXR5XCIsXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTnBtUGFja2FnZUxvY2tFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIGVudHJ5IHdpdGhpbiB0aGUgXFxcInBhY2thZ2VzXFxcIiBzZWN0aW9uIG9mIGEgcGFja2FnZS1sb2NrLmpzb24gZmlsZS5cIlxuICAgIH0sXG4gICAgXCJKYXZhc2NyaXB0UG5wbUxvY2tFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInJlc29sdXRpb25cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUG5wbUxvY2tSZXNvbHV0aW9uXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlc29sdXRpb24gaXMgdGhlIHJlc29sdXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBwYWNrYWdlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgaXMgYSBtYXAgb2YgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciB2ZXJzaW9uc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlc29sdXRpb25cIixcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQbnBtTG9ja0VudHJ5IHJlcHJlc2VudHMgYSBzaW5nbGUgZW50cnkgaW4gdGhlIFxcXCJwYWNrYWdlc1xcXCIgc2VjdGlvbiBvZiBhIHBucG0tbG9jay55YW1sIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiSmF2YXNjcmlwdFlhcm5Mb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZXNvbHZlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlc29sdmVkIGlzIFVSTCB3aGVyZSB0aGlzIHBhY2thZ2Ugd2FzIGRvd25sb2FkZWQgZnJvbVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW50ZWdyaXR5XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW50ZWdyaXR5IGlzIFN1YnJlc291cmNlIEludGVncml0eSBoYXNoIGZvciB2ZXJpZmljYXRpb24gKFNSSSBmb3JtYXQpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgaXMgYSBtYXAgb2YgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciB2ZXJzaW9uc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlc29sdmVkXCIsXG4gICAgICAgIFwiaW50ZWdyaXR5XCIsXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiWWFybkxvY2tFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIGVudHJ5IHNlY3Rpb24gb2YgYSB5YXJuLmxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJLZXlWYWx1ZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImtleVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIktleSBpcyB0aGUga2V5IG5hbWVcIlxuICAgICAgICB9LFxuICAgICAgICBcInZhbHVlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmFsdWUgaXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5XCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwia2V5XCIsXG4gICAgICAgIFwidmFsdWVcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJLZXlWYWx1ZSByZXByZXNlbnRzIGEgc2luZ2xlIGtleS12YWx1ZSBwYWlyLlwiXG4gICAgfSxcbiAgICBcIktleVZhbHVlc1wiOiB7XG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9LZXlWYWx1ZVwiXG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJLZXlWYWx1ZXMgcmVwcmVzZW50cyBhbiBvcmRlcmVkIGNvbGxlY3Rpb24gb2Yga2V5LXZhbHVlIHBhaXJzIHRoYXQgcHJlc2VydmVzIGluc2VydGlvbiBvcmRlci5cIlxuICAgIH0sXG4gICAgXCJMaWNlbnNlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidmFsdWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWYWx1ZSBpcyB0aGUgcmF3IGxpY2Vuc2UgaWRlbnRpZmllciBvciBleHByZXNzaW9uIGFzIGZvdW5kLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic3BkeEV4cHJlc3Npb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTUERYRXhwcmVzc2lvbiBpcyB0aGUgcGFyc2VkIFNQRFggbGljZW5zZSBleHByZXNzaW9uLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlR5cGUgaXMgdGhlIGxpY2Vuc2UgdHlwZSBjbGFzc2lmaWNhdGlvbiAoZS5nLiwgZGVjbGFyZWQsIGNvbmNsdWRlZCwgZGlzY292ZXJlZCkuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkxzIGFyZSBVUkxzIHdoZXJlIGxpY2Vuc2UgdGV4dCBvciBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsb2NhdGlvbnNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Mb2NhdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJMb2NhdGlvbnMgYXJlIGZpbGUgbG9jYXRpb25zIHdoZXJlIHRoaXMgbGljZW5zZSB3YXMgZGlzY292ZXJlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbnRlbnRzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ29udGVudHMgaXMgdGhlIGZ1bGwgbGljZW5zZSB0ZXh0IGNvbnRlbnQuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidmFsdWVcIixcbiAgICAgICAgXCJzcGR4RXhwcmVzc2lvblwiLFxuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJ1cmxzXCIsXG4gICAgICAgIFwibG9jYXRpb25zXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGljZW5zZSByZXByZXNlbnRzIHNvZnR3YXJlIGxpY2Vuc2UgaW5mb3JtYXRpb24gZGlzY292ZXJlZCBmb3IgYSBwYWNrYWdlLCBpbmNsdWRpbmcgU1BEWCBleHByZXNzaW9ucyBhbmQgc3VwcG9ydGluZyBldmlkZW5jZSBsb2NhdGlvbnMuXCJcbiAgICB9LFxuICAgIFwiTGludXhLZXJuZWxBcmNoaXZlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMga2VybmVsIG5hbWUgKHR5cGljYWxseSBcXFwiTGludXhcXFwiKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl0ZWN0dXJlIGlzIHRoZSB0YXJnZXQgQ1BVIGFyY2hpdGVjdHVyZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMga2VybmVsIHZlcnNpb24gc3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRlbmRlZFZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFeHRlbmRlZFZlcnNpb24gaXMgYWRkaXRpb25hbCB2ZXJzaW9uIGluZm9ybWF0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWlsZFRpbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCdWlsZFRpbWUgaXMgd2hlbiB0aGUga2VybmVsIHdhcyBidWlsdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXV0aG9yXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXV0aG9yIGlzIHdobyBidWlsdCB0aGUga2VybmVsXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGb3JtYXQgaXMga2VybmVsIGltYWdlIGZvcm1hdCAoZS5nLiBiekltYWdlLCB6SW1hZ2UpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJyd1Jvb3RGU1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSV1Jvb3RGUyBpcyB3aGV0aGVyIHJvb3QgZmlsZXN5c3RlbSBpcyBtb3VudGVkIHJlYWQtd3JpdGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInN3YXBEZXZpY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU3dhcERldmljZSBpcyBzd2FwIGRldmljZSBudW1iZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInJvb3REZXZpY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUm9vdERldmljZSBpcyByb290IGRldmljZSBudW1iZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInZpZGVvTW9kZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZpZGVvTW9kZSBpcyBkZWZhdWx0IHZpZGVvIG1vZGUgc2V0dGluZ1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJhcmNoaXRlY3R1cmVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGludXhLZXJuZWwgcmVwcmVzZW50cyBhbGwgY2FwdHVyZWQgZGF0YSBmb3IgYSBMaW51eCBrZXJuZWxcIlxuICAgIH0sXG4gICAgXCJMaW51eEtlcm5lbE1vZHVsZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIG1vZHVsZSBuYW1lXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyBtb2R1bGUgdmVyc2lvbiBzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInNvdXJjZVZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2VWZXJzaW9uIGlzIHRoZSBzb3VyY2UgY29kZSB2ZXJzaW9uIGlkZW50aWZpZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRoIGlzIHRoZSBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIC5rbyBrZXJuZWwgb2JqZWN0IGZpbGUgKGFic29sdXRlIHBhdGgpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0aW9uIGlzIGEgaHVtYW4tcmVhZGFibGUgbW9kdWxlIGRlc2NyaXB0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdXRob3JcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBdXRob3IgaXMgbW9kdWxlIGF1dGhvciBuYW1lIGFuZCBlbWFpbFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibGljZW5zZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxpY2Vuc2UgaXMgbW9kdWxlIGxpY2Vuc2UgKGUuZy4gR1BMLCBCU0QpIHdoaWNoIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIGtlcm5lbFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwia2VybmVsVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIktlcm5lbFZlcnNpb24gaXMga2VybmVsIHZlcnNpb24gdGhpcyBtb2R1bGUgd2FzIGJ1aWx0IGZvclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvbk1hZ2ljXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbk1hZ2ljIGlzIHZlcnNpb24gbWFnaWMgc3RyaW5nIGZvciBjb21wYXRpYmlsaXR5IGNoZWNraW5nIChpbmNsdWRlcyBrZXJuZWwgdmVyc2lvbiwgU01QIHN0YXR1cywgbW9kdWxlIGxvYWRpbmcgY2FwYWJpbGl0aWVzIGxpa2UgXFxcIjMuMTcuNC0zMDIuZmMyMS54ODZfNjQgU01QIG1vZF91bmxvYWQgbW9kdmVyc2lvbnNcXFwiKS4gTW9kdWxlIHdpbGwgTk9UIGxvYWQgaWYgdmVybWFnaWMgZG9lc24ndCBtYXRjaCBydW5uaW5nIGtlcm5lbC5cIlxuICAgICAgICB9LFxuICAgICAgICBcInBhcmFtZXRlcnNcIjoge1xuICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9MaW51eEtlcm5lbE1vZHVsZVBhcmFtZXRlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFyYW1ldGVycyBhcmUgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgbG9hZCB0aW1lICh1c2VyLXNldHRhYmxlIHZhbHVlcyBsaWtlIG1vZHVsZSBvcHRpb25zKVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJMaW51eEtlcm5lbE1vZHVsZSByZXByZXNlbnRzIGEgbG9hZGFibGUga2VybmVsIG1vZHVsZSAoLmtvIGZpbGUpIHdpdGggaXRzIG1ldGFkYXRhLCBwYXJhbWV0ZXJzLCBhbmQgZGVwZW5kZW5jaWVzLlwiXG4gICAgfSxcbiAgICBcIkxpbnV4S2VybmVsTW9kdWxlUGFyYW1ldGVyXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlR5cGUgaXMgcGFyYW1ldGVyIGRhdGEgdHlwZSAoZS5nLiBpbnQsIHN0cmluZywgYm9vbCwgYXJyYXkgdHlwZXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0aW9uIGlzIGEgaHVtYW4tcmVhZGFibGUgcGFyYW1ldGVyIGRlc2NyaXB0aW9uIGV4cGxhaW5pbmcgd2hhdCB0aGUgcGFyYW1ldGVyIGNvbnRyb2xzXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxpbnV4S2VybmVsTW9kdWxlUGFyYW1ldGVyIHJlcHJlc2VudHMgYSBjb25maWd1cmFibGUgcGFyYW1ldGVyIGZvciBhIGtlcm5lbCBtb2R1bGUgd2l0aCBpdHMgdHlwZSBhbmQgZGVzY3JpcHRpb24uXCJcbiAgICB9LFxuICAgIFwiTGludXhSZWxlYXNlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicHJldHR5TmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlByZXR0eU5hbWUgaXMgYSBodW1hbi1yZWFkYWJsZSBvcGVyYXRpbmcgc3lzdGVtIG5hbWUgd2l0aCB2ZXJzaW9uLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gbmFtZSB3aXRob3V0IHZlcnNpb24gaW5mb3JtYXRpb24uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklEIGlzIHRoZSBsb3dlci1jYXNlIG9wZXJhdGluZyBzeXN0ZW0gaWRlbnRpZmllciAoZS5nLiwgXFxcInVidW50dVxcXCIsIFxcXCJyaGVsXFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpZExpa2VcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvSURMaWtlc1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJRExpa2UgaXMgYSBsaXN0IG9mIG9wZXJhdGluZyBzeXN0ZW0gSURzIHRoaXMgZGlzdHJpYnV0aW9uIGlzIHNpbWlsYXIgdG8gb3IgZGVyaXZlZCBmcm9tLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gdmVyc2lvbiBpbmNsdWRpbmcgY29kZW5hbWUgaWYgYXZhaWxhYmxlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvbklEXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbklEIGlzIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb24gbnVtYmVyIG9yIGlkZW50aWZpZXIuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uQ29kZW5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uQ29kZW5hbWUgaXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gcmVsZWFzZSBjb2RlbmFtZSAoZS5nLiwgXFxcImphbW15XFxcIiwgXFxcImJ1bGxzZXllXFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWlsZElEXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQnVpbGRJRCBpcyBhIGJ1aWxkIGlkZW50aWZpZXIgZm9yIHRoZSBvcGVyYXRpbmcgc3lzdGVtLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW1hZ2VJRFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkltYWdlSUQgaXMgYW4gaWRlbnRpZmllciBmb3IgY29udGFpbmVyIG9yIGNsb3VkIGltYWdlcy5cIlxuICAgICAgICB9LFxuICAgICAgICBcImltYWdlVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkltYWdlVmVyc2lvbiBpcyB0aGUgdmVyc2lvbiBmb3IgY29udGFpbmVyIG9yIGNsb3VkIGltYWdlcy5cIlxuICAgICAgICB9LFxuICAgICAgICBcInZhcmlhbnRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWYXJpYW50IGlzIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHZhcmlhbnQgbmFtZSAoZS5nLiwgXFxcIlNlcnZlclxcXCIsIFxcXCJXb3Jrc3RhdGlvblxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmFyaWFudElEXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmFyaWFudElEIGlzIHRoZSBsb3dlci1jYXNlIG9wZXJhdGluZyBzeXN0ZW0gdmFyaWFudCBpZGVudGlmaWVyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG9tZVVSTFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkhvbWVVUkwgaXMgdGhlIGhvbWVwYWdlIFVSTCBmb3IgdGhlIG9wZXJhdGluZyBzeXN0ZW0uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzdXBwb3J0VVJMXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU3VwcG9ydFVSTCBpcyB0aGUgc3VwcG9ydCBvciBoZWxwIFVSTCBmb3IgdGhlIG9wZXJhdGluZyBzeXN0ZW0uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWdSZXBvcnRVUkxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCdWdSZXBvcnRVUkwgaXMgdGhlIGJ1ZyByZXBvcnRpbmcgVVJMIGZvciB0aGUgb3BlcmF0aW5nIHN5c3RlbS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInByaXZhY3lQb2xpY3lVUkxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQcml2YWN5UG9saWN5VVJMIGlzIHRoZSBwcml2YWN5IHBvbGljeSBVUkwgZm9yIHRoZSBvcGVyYXRpbmcgc3lzdGVtLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY3BlTmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNQRU5hbWUgaXMgdGhlIENvbW1vbiBQbGF0Zm9ybSBFbnVtZXJhdGlvbiBuYW1lIGZvciB0aGUgb3BlcmF0aW5nIHN5c3RlbS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInN1cHBvcnRFbmRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTdXBwb3J0RW5kIGlzIHRoZSBlbmQgb2Ygc3VwcG9ydCBkYXRlIG9yIHZlcnNpb24gaWRlbnRpZmllci5cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4dGVuZGVkU3VwcG9ydFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFeHRlbmRlZFN1cHBvcnQgaW5kaWNhdGVzIHdoZXRoZXIgZXh0ZW5kZWQgc2VjdXJpdHkgb3Igc3VwcG9ydCBpcyBhdmFpbGFibGUuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxpbnV4UmVsZWFzZSBjb250YWlucyBMaW51eCBkaXN0cmlidXRpb24gaWRlbnRpZmljYXRpb24gYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gZXh0cmFjdGVkIGZyb20gL2V0Yy9vcy1yZWxlYXNlIG9yIHNpbWlsYXIgc3lzdGVtIGZpbGVzLlwiXG4gICAgfSxcbiAgICBcIkxvY2F0aW9uXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlYWxQYXRoIGlzIHRoZSBjYW5vbmljYWwgYWJzb2x1dGUgZm9ybSBvZiB0aGUgcGF0aCBhY2Nlc3NlZCAoYWxsIHN5bWJvbGljIGxpbmtzIGhhdmUgYmVlbiBmb2xsb3dlZCBhbmQgcmVsYXRpdmUgcGF0aCBjb21wb25lbnRzIGxpa2UgJy4nIGFuZCAnLi4nIGhhdmUgYmVlbiByZW1vdmVkKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImxheWVySURcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlU3lzdGVtSUQgaXMgYW4gSUQgcmVwcmVzZW50aW5nIGFuZCBlbnRpcmUgZmlsZXN5c3RlbS4gRm9yIGNvbnRhaW5lciBpbWFnZXMsIHRoaXMgaXMgYSBsYXllciBkaWdlc3QuIEZvciBkaXJlY3RvcmllcyBvciBhIHJvb3QgZmlsZXN5c3RlbSwgdGhpcyBpcyBibGFuay5cIlxuICAgICAgICB9LFxuICAgICAgICBcImFjY2Vzc1BhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBY2Nlc3NQYXRoIGlzIHRoZSBwYXRoIHVzZWQgdG8gcmV0cmlldmUgZmlsZSBjb250ZW50cyAod2hpY2ggbWF5IG9yIG1heSBub3QgaGF2ZSBoYXJkbGlua3MgLyBzeW1saW5rcyBpbiB0aGUgcGF0aClcIlxuICAgICAgICB9LFxuICAgICAgICBcImFubm90YXRpb25zXCI6IHtcbiAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJiaXRyYXJ5IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFubm90YXRlIGEgbG9jYXRpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIFwiYWNjZXNzUGF0aFwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxvY2F0aW9uIHJlcHJlc2VudHMgYSBwYXRoIHJlbGF0aXZlIHRvIGEgcGFydGljdWxhciBmaWxlc3lzdGVtIHJlc29sdmVkIHRvIGEgc3BlY2lmaWMgZmlsZS5SZWZlcmVuY2UuXCJcbiAgICB9LFxuICAgIFwiTHVhcm9ja3NQYWNrYWdlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIHBhY2thZ2UgbmFtZSBhcyBmb3VuZCBpbiB0aGUgLnJvY2tzcGVjIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBwYWNrYWdlIHZlcnNpb24gYXMgZm91bmQgaW4gdGhlIC5yb2Nrc3BlYyBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsaWNlbnNlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGljZW5zZSBpcyBsaWNlbnNlIGlkZW50aWZpZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvbWVwYWdlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSG9tZXBhZ2UgaXMgcHJvamVjdCBob21lcGFnZSBVUkxcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVzY3JpcHRpb24gaXMgYSBodW1hbi1yZWFkYWJsZSBwYWNrYWdlIGRlc2NyaXB0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkwgaXMgdGhlIHNvdXJjZSBkb3dubG9hZCBVUkxcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlcGVuZGVuY2llcyBhcmUgdGhlIG1hcCBvZiBkZXBlbmRlbmN5IG5hbWVzIHRvIHZlcnNpb24gY29uc3RyYWludHNcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcImxpY2Vuc2VcIixcbiAgICAgICAgXCJob21lcGFnZVwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCIsXG4gICAgICAgIFwidXJsXCIsXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTHVhUm9ja3NQYWNrYWdlIHJlcHJlc2VudHMgYSBMdWEgcGFja2FnZSBtYW5hZ2VkIGJ5IHRoZSBMdWFSb2NrcyBwYWNrYWdlIG1hbmFnZXIgd2l0aCBtZXRhZGF0YSBmcm9tIC5yb2Nrc3BlYyBmaWxlcy5cIlxuICAgIH0sXG4gICAgXCJNaWNyb3NvZnRLYlBhdGNoXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicHJvZHVjdF9pZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlByb2R1Y3RJRCBpcyBNU1JDIFByb2R1Y3QgSUQgKGUuZy4gXFxcIldpbmRvd3MgMTAgVmVyc2lvbiAxNzAzIGZvciAzMi1iaXQgU3lzdGVtc1xcXCIpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJrYlwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIktiIGlzIEtub3dsZWRnZSBCYXNlIGFydGljbGUgbnVtYmVyIChlLmcuIFxcXCI1MDAxMDI4XFxcIilcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJwcm9kdWN0X2lkXCIsXG4gICAgICAgIFwia2JcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNaWNyb3NvZnRLYlBhdGNoIHJlcHJlc2VudHMgYSBXaW5kb3dzIEtub3dsZWRnZSBCYXNlIHBhdGNoIGlkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgTWljcm9zb2Z0IHByb2R1Y3QgZnJvbSB0aGUgTVNSQyAoTWljcm9zb2Z0IFNlY3VyaXR5IFJlc3BvbnNlIENlbnRlcikuXCJcbiAgICB9LFxuICAgIFwiTml4RGVyaXZhdGlvblwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRoIGlzIHBhdGggdG8gdGhlIC5kcnYgZmlsZSBpbiBOaXggc3RvcmVcIlxuICAgICAgICB9LFxuICAgICAgICBcInN5c3RlbVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlN5c3RlbSBpcyB0YXJnZXQgc3lzdGVtIHN0cmluZyBpbmRpY2F0aW5nIHdoZXJlIGRlcml2YXRpb24gY2FuIGJlIGJ1aWx0IChlLmcuIFxcXCJ4ODZfNjQtbGludXhcXFwiLCBcXFwiYWFyY2g2NC1kYXJ3aW5cXFwiKS4gTXVzdCBtYXRjaCBjdXJyZW50IHN5c3RlbSBmb3IgbG9jYWwgYnVpbGRzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW5wdXREZXJpdmF0aW9uc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL05peERlcml2YXRpb25SZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW5wdXREZXJpdmF0aW9ucyBhcmUgdGhlIGxpc3Qgb2Ygb3RoZXIgZGVyaXZhdGlvbnMgdGhhdCB3ZXJlIGlucHV0cyB0byB0aGlzIGJ1aWxkIChkZXBlbmRlbmNpZXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpbnB1dFNvdXJjZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklucHV0U291cmNlcyBhcmUgdGhlIGxpc3Qgb2Ygc291cmNlIGZpbGUgcGF0aHMgdGhhdCB3ZXJlIGlucHV0cyB0byB0aGlzIGJ1aWxkXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5peERlcml2YXRpb24gcmVwcmVzZW50cyBhIE5peCAuZHJ2IGZpbGUgdGhhdCBkZXNjcmliZXMgaG93IHRvIGJ1aWxkIGEgcGFja2FnZSBpbmNsdWRpbmcgaW5wdXRzLCBvdXRwdXRzLCBhbmQgYnVpbGQgaW5zdHJ1Y3Rpb25zLlwiXG4gICAgfSxcbiAgICBcIk5peERlcml2YXRpb25SZWZlcmVuY2VcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJwYXRoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGF0aCBpcyBwYXRoIHRvIHRoZSByZWZlcmVuY2VkIC5kcnYgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwib3V0cHV0c1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT3V0cHV0cyBhcmUgd2hpY2ggb3V0cHV0cyBvZiB0aGUgcmVmZXJlbmNlZCBkZXJpdmF0aW9uIHdlcmUgdXNlZCAoZS5nLiBbXFxcIm91dFxcXCJdLCBbXFxcImJpblxcXCIsIFxcXCJkZXZcXFwiXSlcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTml4RGVyaXZhdGlvblJlZmVyZW5jZSByZXByZXNlbnRzIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgZGVyaXZhdGlvbiB1c2VkIGFzIGEgYnVpbGQgaW5wdXQgb3IgcnVudGltZSBkZXBlbmRlbmN5LlwiXG4gICAgfSxcbiAgICBcIk5peFN0b3JlRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJwYXRoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGF0aCBpcyBmdWxsIHN0b3JlIHBhdGggZm9yIHRoaXMgb3V0cHV0IChlLmcuIC9uaXgvc3RvcmUvYWJjMTIzLi4uLXBhY2thZ2UtMS4wKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwib3V0cHV0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT3V0cHV0IGlzIHRoZSBzcGVjaWZpYyBvdXRwdXQgbmFtZSBmb3IgbXVsdGktb3V0cHV0IHBhY2thZ2VzIChlbXB0eSBzdHJpbmcgZm9yIGRlZmF1bHQgXFxcIm91dFxcXCIgb3V0cHV0LCBjYW4gYmUgXFxcImJpblxcXCIsIFxcXCJkZXZcXFwiLCBcXFwiZG9jXFxcIiwgZXRjLilcIlxuICAgICAgICB9LFxuICAgICAgICBcIm91dHB1dEhhc2hcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJPdXRwdXRIYXNoIGlzIGhhc2ggcHJlZml4IG9mIHRoZSBzdG9yZSBwYXRoIGJhc2VuYW1lIChmaXJzdCBwYXJ0IGJlZm9yZSB0aGUgZGFzaClcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlcml2YXRpb25cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvTml4RGVyaXZhdGlvblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXJpdmF0aW9uIGlzIGluZm9ybWF0aW9uIGFib3V0IHRoZSAuZHJ2IGZpbGUgdGhhdCBkZXNjcmliZXMgaG93IHRoaXMgcGFja2FnZSB3YXMgYnVpbHRcIlxuICAgICAgICB9LFxuICAgICAgICBcImZpbGVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlcyBhcmUgdGhlIGxpc3Qgb2YgZmlsZXMgdW5kZXIgdGhlIG5peC9zdG9yZSBwYXRoIGZvciB0aGlzIHBhY2thZ2VcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJvdXRwdXRIYXNoXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTml4U3RvcmVFbnRyeSByZXByZXNlbnRzIGEgcGFja2FnZSBpbiB0aGUgTml4IHN0b3JlICgvbml4L3N0b3JlKSB3aXRoIGl0cyBkZXJpdmF0aW9uIGluZm9ybWF0aW9uIGFuZCBtZXRhZGF0YS5cIlxuICAgIH0sXG4gICAgXCJPcGFtUGFja2FnZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBwYWNrYWdlIG5hbWUgYXMgZm91bmQgaW4gdGhlIC5vcGFtIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBwYWNrYWdlIHZlcnNpb24gYXMgZm91bmQgaW4gdGhlIC5vcGFtIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcImxpY2Vuc2VzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJMaWNlbnNlcyBhcmUgdGhlIGxpc3Qgb2YgYXBwbGljYWJsZSBsaWNlbnNlc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVVJMIGlzIGRvd25sb2FkIFVSTCBmb3IgdGhlIHBhY2thZ2Ugc291cmNlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjaGVja3N1bVwiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ2hlY2tzdW1zIGFyZSB0aGUgbGlzdCBvZiBjaGVja3N1bXMgZm9yIHZlcmlmaWNhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG9tZXBhZ2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIb21lcGFnZSBpcyBwcm9qZWN0IGhvbWVwYWdlIFVSTFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgYXJlIHRoZSBsaXN0IG9mIHJlcXVpcmVkIGRlcGVuZGVuY2llc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwibGljZW5zZXNcIixcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJjaGVja3N1bVwiLFxuICAgICAgICBcImhvbWVwYWdlXCIsXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT3BhbVBhY2thZ2UgcmVwcmVzZW50cyBhbiBPQ2FtbCBwYWNrYWdlIG1hbmFnZWQgYnkgdGhlIE9QQU0gcGFja2FnZSBtYW5hZ2VyIHdpdGggbWV0YWRhdGEgZnJvbSAub3BhbSBmaWxlcy5cIlxuICAgIH0sXG4gICAgXCJQYWNrYWdlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiaWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm91bmRCeVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsb2NhdGlvbnNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Mb2NhdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibGljZW5zZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvbGljZW5zZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImxhbmd1YWdlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImNwZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvY3Blc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtZXRhZGF0YVR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJudWxsXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQWxwbURiRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9BcGtEYkVudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQmluYXJ5U2lnbmF0dXJlXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQml0bmFtaVNib21FbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0NDb25hbkZpbGVFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0NDb25hbkluZm9FbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0NDb25hbkxvY2tFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0NDb25hbkxvY2tWMkVudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQ29jb2FQb2RmaWxlTG9ja0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQ29uZGFNZXRhZGF0YUVudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRGFydFB1YnNwZWNcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9EYXJ0UHVic3BlY0xvY2tFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0RvdG5ldERlcHNFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0RvdG5ldFBhY2thZ2VzTG9ja0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRG90bmV0UG9ydGFibGVFeGVjdXRhYmxlRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9EcGtnQXJjaGl2ZUVudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRHBrZ0RiRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9FbGZCaW5hcnlQYWNrYWdlTm90ZUpzb25QYXlsb2FkXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRWxpeGlyTWl4TG9ja0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRXJsYW5nUmViYXJMb2NrRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9HZ3VmRmlsZUhlYWRlclwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0dpdGh1YkFjdGlvbnNVc2VTdGF0ZW1lbnRcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Hb01vZHVsZUJ1aWxkaW5mb0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvR29Nb2R1bGVFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0dvU291cmNlRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9IYXNrZWxsSGFja2FnZVN0YWNrRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9IYXNrZWxsSGFja2FnZVN0YWNrTG9ja0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvSG9tZWJyZXdGb3JtdWxhXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvSmF2YUFyY2hpdmVcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9KYXZhSnZtSW5zdGFsbGF0aW9uXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvSmF2YXNjcmlwdE5wbVBhY2thZ2VcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9KYXZhc2NyaXB0TnBtUGFja2FnZUxvY2tFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0phdmFzY3JpcHRQbnBtTG9ja0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvSmF2YXNjcmlwdFlhcm5Mb2NrRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9MaW51eEtlcm5lbEFyY2hpdmVcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9MaW51eEtlcm5lbE1vZHVsZVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0x1YXJvY2tzUGFja2FnZVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL01pY3Jvc29mdEtiUGF0Y2hcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9OaXhTdG9yZUVudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvT3BhbVBhY2thZ2VcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QZUJpbmFyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1BocENvbXBvc2VySW5zdGFsbGVkRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QaHBDb21wb3NlckxvY2tFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1BocFBlYXJFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1BocFBlY2xFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1BvcnRhZ2VEYkVudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUHl0aG9uUGFja2FnZVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1B5dGhvblBkbUxvY2tFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1B5dGhvblBpcFJlcXVpcmVtZW50c0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUHl0aG9uUGlwZmlsZUxvY2tFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1B5dGhvblBvZXRyeUxvY2tFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1B5dGhvblV2TG9ja0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUkRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUnBtQXJjaGl2ZVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1JwbURiRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9SdWJ5R2Vtc3BlY1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1J1c3RDYXJnb0F1ZGl0RW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9SdXN0Q2FyZ29Mb2NrRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9TbmFwRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Td2lmdFBhY2thZ2VNYW5hZ2VyTG9ja0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvU3dpcGxwYWNrUGFja2FnZVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1RlcnJhZm9ybUxvY2tQcm92aWRlckVudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvV29yZHByZXNzUGx1Z2luRW50cnlcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiaWRcIixcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJmb3VuZEJ5XCIsXG4gICAgICAgIFwibG9jYXRpb25zXCIsXG4gICAgICAgIFwibGljZW5zZXNcIixcbiAgICAgICAgXCJsYW5ndWFnZVwiLFxuICAgICAgICBcImNwZXNcIixcbiAgICAgICAgXCJwdXJsXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFja2FnZSByZXByZXNlbnRzIGEgcGtnLlBhY2thZ2Ugb2JqZWN0IHNwZWNpYWxpemVkIGZvciBKU09OIG1hcnNoYWxpbmcgYW5kIHVubWFyc2hhbGxpbmcuXCJcbiAgICB9LFxuICAgIFwiUGVCaW5hcnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJWZXJzaW9uUmVzb3VyY2VzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0tleVZhbHVlc1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uUmVzb3VyY2VzIGNvbnRhaW5zIGtleS12YWx1ZSBwYWlycyBleHRyYWN0ZWQgZnJvbSB0aGUgUEUgZmlsZSdzIHZlcnNpb24gcmVzb3VyY2Ugc2VjdGlvbiAoZS5nLiwgRmlsZVZlcnNpb24sIFByb2R1Y3ROYW1lLCBDb21wYW55TmFtZSkuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiVmVyc2lvblJlc291cmNlc1wiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBFQmluYXJ5IHJlcHJlc2VudHMgbWV0YWRhdGEgY2FwdHVyZWQgZnJvbSBhIFBvcnRhYmxlIEV4ZWN1dGFibGUgZm9ybWF0dGVkIGJpbmFyeSAoZGxsLCBleGUsIGV0Yy4pXCJcbiAgICB9LFxuICAgIFwiUGhwQ29tcG9zZXJBdXRob3JzXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgYXV0aG9yJ3MgZnVsbCBuYW1lXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbWFpbFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkVtYWlsIGlzIGF1dGhvcidzIGVtYWlsIGFkZHJlc3NcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvbWVwYWdlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSG9tZXBhZ2UgaXMgYXV0aG9yJ3MgcGVyc29uYWwgb3IgY29tcGFueSB3ZWJzaXRlXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBocENvbXBvc2VyQXV0aG9ycyByZXByZXNlbnRzIGF1dGhvciBpbmZvcm1hdGlvbiBmb3IgYSBQSFAgQ29tcG9zZXIgcGFja2FnZSBmcm9tIHRoZSBhdXRob3JzIGZpZWxkIGluIGNvbXBvc2VyLmpzb24uXCJcbiAgICB9LFxuICAgIFwiUGhwQ29tcG9zZXJFeHRlcm5hbFJlZmVyZW5jZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUeXBlIGlzIHJlZmVyZW5jZSB0eXBlIChnaXQgZm9yIHNvdXJjZSBWQ1MsIHppcC90YXIgZm9yIGRpc3QgYXJjaGl2ZXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkwgaXMgdGhlIFVSTCB0byB0aGUgcmVzb3VyY2UgKGdpdCByZXBvc2l0b3J5IFVSTCBvciBhcmNoaXZlIGRvd25sb2FkIFVSTClcIlxuICAgICAgICB9LFxuICAgICAgICBcInJlZmVyZW5jZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlZmVyZW5jZSBpcyBnaXQgY29tbWl0IGhhc2ggb3IgdmVyc2lvbiB0YWcgZm9yIHNvdXJjZSwgb3IgYXJjaGl2ZSB2ZXJzaW9uIGZvciBkaXN0XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzaGFzdW1cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTaGFzdW0gaXMgU0hBIGhhc2ggb2YgdGhlIGFyY2hpdmUgZmlsZSBmb3IgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbiAoZGlzdCBvbmx5KVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJyZWZlcmVuY2VcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQaHBDb21wb3NlckV4dGVybmFsUmVmZXJlbmNlIHJlcHJlc2VudHMgc291cmNlIG9yIGRpc3RyaWJ1dGlvbiBpbmZvcm1hdGlvbiBmb3IgYSBQSFAgcGFja2FnZSwgaW5kaWNhdGluZyB3aGVyZSB0aGUgcGFja2FnZSBjb2RlIGlzIHJldHJpZXZlZCBmcm9tLlwiXG4gICAgfSxcbiAgICBcIlBocENvbXBvc2VySW5zdGFsbGVkRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyBwYWNrYWdlIG5hbWUgaW4gdmVuZG9yL3BhY2thZ2UgZm9ybWF0IChlLmcuIHN5bWZvbnkvY29uc29sZSlcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBwYWNrYWdlIHZlcnNpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcInNvdXJjZVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QaHBDb21wb3NlckV4dGVybmFsUmVmZXJlbmNlXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNvdXJjZSBpcyB0aGUgc291cmNlIHJlcG9zaXRvcnkgaW5mb3JtYXRpb24gZm9yIGRldmVsb3BtZW50ICh0eXBpY2FsbHkgZ2l0IHJlcG8sIHVzZWQgd2hlbiBwYXNzaW5nIC0tcHJlZmVyLXNvdXJjZSkuIE9yaWdpbmF0ZXMgZnJvbSBzb3VyY2UgY29kZSByZXBvc2l0b3J5LlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGlzdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QaHBDb21wb3NlckV4dGVybmFsUmVmZXJlbmNlXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRpc3QgaXMgZGlzdHJpYnV0aW9uIGFyY2hpdmUgaW5mb3JtYXRpb24gZm9yIHByb2R1Y3Rpb24gKHR5cGljYWxseSB6aXAvdGFyLCBkZWZhdWx0IGluc3RhbGwgbWV0aG9kKS4gUGFja2FnZWQgdmVyc2lvbiBvZiByZWxlYXNlZCBjb2RlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZVwiOiB7XG4gICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlcXVpcmUgaXMgcnVudGltZSBkZXBlbmRlbmNpZXMgd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnRzIChwYWNrYWdlIHdpbGwgbm90IGluc3RhbGwgdW5sZXNzIHRoZXNlIHJlcXVpcmVtZW50cyBjYW4gYmUgbWV0KVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvdmlkZVwiOiB7XG4gICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlByb3ZpZGUgaXMgdmlydHVhbCBwYWNrYWdlcy9mdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoaXMgcGFja2FnZSAoYWxsb3dzIG90aGVyIHBhY2thZ2VzIHRvIGRlcGVuZCBvbiBjYXBhYmlsaXRpZXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZXF1aXJlLWRldlwiOiB7XG4gICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlcXVpcmVEZXYgaXMgZGV2ZWxvcG1lbnQtb25seSBkZXBlbmRlbmNpZXMgKG5vdCBpbnN0YWxsZWQgaW4gcHJvZHVjdGlvbiwgb25seSB3aGVuIGRldmVsb3BpbmcgdGhpcyBwYWNrYWdlIG9yIHJ1bm5pbmcgdGVzdHMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzdWdnZXN0XCI6IHtcbiAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU3VnZ2VzdCBpcyBvcHRpb25hbCBidXQgcmVjb21tZW5kZWQgZGVwZW5kZW5jaWVzIChzdWdnZXN0aW9ucyBmb3IgcGFja2FnZXMgdGhhdCB3b3VsZCBleHRlbmQgZnVuY3Rpb25hbGl0eSlcIlxuICAgICAgICB9LFxuICAgICAgICBcImxpY2Vuc2VcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxpY2Vuc2UgaXMgdGhlIGxpc3Qgb2YgbGljZW5zZSBpZGVudGlmaWVycyAoU1BEWCBmb3JtYXQpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVHlwZSBpcyBwYWNrYWdlIHR5cGUgaW5kaWNhdGluZyBwdXJwb3NlIChsaWJyYXJ5PXJldXNhYmxlIGNvZGUsIHByb2plY3Q9YXBwbGljYXRpb24sIG1ldGFwYWNrYWdlPWFnZ3JlZ2F0ZXMgZGVwZW5kZW5jaWVzLCBldGMuKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibm90aWZpY2F0aW9uLXVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5vdGlmaWNhdGlvblVSTCBpcyB0aGUgVVJMIHRvIG5vdGlmeSB3aGVuIHBhY2thZ2UgaXMgaW5zdGFsbGVkIChmb3IgdHJhY2tpbmcvc3RhdGlzdGljcylcIlxuICAgICAgICB9LFxuICAgICAgICBcImJpblwiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQmluIGlzIHRoZSBsaXN0IG9mIGJpbmFyeS9leGVjdXRhYmxlIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIFBBVEhcIlxuICAgICAgICB9LFxuICAgICAgICBcImF1dGhvcnNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QaHBDb21wb3NlckF1dGhvcnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXV0aG9ycyBhcmUgdGhlIGxpc3Qgb2YgcGFja2FnZSBhdXRob3JzIHdpdGggbmFtZS9lbWFpbC9ob21lcGFnZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXNjcmlwdGlvbiBpcyBhIGh1bWFuLXJlYWRhYmxlIHBhY2thZ2UgZGVzY3JpcHRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImhvbWVwYWdlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSG9tZXBhZ2UgaXMgcHJvamVjdCBob21lcGFnZSBVUkxcIlxuICAgICAgICB9LFxuICAgICAgICBcImtleXdvcmRzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJLZXl3b3JkcyBhcmUgdGhlIGxpc3Qgb2Yga2V5d29yZHMgZm9yIHBhY2thZ2UgZGlzY292ZXJ5L3NlYXJjaFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGltZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRpbWUgaXMgdGltZXN0YW1wIHdoZW4gdGhpcyBwYWNrYWdlIHZlcnNpb24gd2FzIHJlbGVhc2VkXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcInZlcnNpb25cIixcbiAgICAgICAgXCJzb3VyY2VcIixcbiAgICAgICAgXCJkaXN0XCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGhwQ29tcG9zZXJJbnN0YWxsZWRFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIHBhY2thZ2UgZW50cnkgZnJvbSBhIGNvbXBvc2VyIHYxL3YyIFxcXCJpbnN0YWxsZWQuanNvblxcXCIgZmlsZXMgKHZlcnkgc2ltaWxhciB0byBjb21wb3Nlci5sb2NrIGZpbGVzKS5cIlxuICAgIH0sXG4gICAgXCJQaHBDb21wb3NlckxvY2tFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHBhY2thZ2UgbmFtZSBpbiB2ZW5kb3IvcGFja2FnZSBmb3JtYXQgKGUuZy4gc3ltZm9ueS9jb25zb2xlKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic291cmNlXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1BocENvbXBvc2VyRXh0ZXJuYWxSZWZlcmVuY2VcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU291cmNlIGlzIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBpbmZvcm1hdGlvbiBmb3IgZGV2ZWxvcG1lbnQgKHR5cGljYWxseSBnaXQgcmVwbywgdXNlZCB3aGVuIHBhc3NpbmcgLS1wcmVmZXItc291cmNlKS4gT3JpZ2luYXRlcyBmcm9tIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkaXN0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1BocENvbXBvc2VyRXh0ZXJuYWxSZWZlcmVuY2VcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGlzdCBpcyBkaXN0cmlidXRpb24gYXJjaGl2ZSBpbmZvcm1hdGlvbiBmb3IgcHJvZHVjdGlvbiAodHlwaWNhbGx5IHppcC90YXIsIGRlZmF1bHQgaW5zdGFsbCBtZXRob2QpLiBQYWNrYWdlZCB2ZXJzaW9uIG9mIHJlbGVhc2VkIGNvZGUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZXF1aXJlXCI6IHtcbiAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUmVxdWlyZSBpcyBydW50aW1lIGRlcGVuZGVuY2llcyB3aXRoIHZlcnNpb24gY29uc3RyYWludHMgKHBhY2thZ2Ugd2lsbCBub3QgaW5zdGFsbCB1bmxlc3MgdGhlc2UgcmVxdWlyZW1lbnRzIGNhbiBiZSBtZXQpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwcm92aWRlXCI6IHtcbiAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHJvdmlkZSBpcyB2aXJ0dWFsIHBhY2thZ2VzL2Z1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhpcyBwYWNrYWdlIChhbGxvd3Mgb3RoZXIgcGFja2FnZXMgdG8gZGVwZW5kIG9uIGNhcGFiaWxpdGllcylcIlxuICAgICAgICB9LFxuICAgICAgICBcInJlcXVpcmUtZGV2XCI6IHtcbiAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUmVxdWlyZURldiBpcyBkZXZlbG9wbWVudC1vbmx5IGRlcGVuZGVuY2llcyAobm90IGluc3RhbGxlZCBpbiBwcm9kdWN0aW9uLCBvbmx5IHdoZW4gZGV2ZWxvcGluZyB0aGlzIHBhY2thZ2Ugb3IgcnVubmluZyB0ZXN0cylcIlxuICAgICAgICB9LFxuICAgICAgICBcInN1Z2dlc3RcIjoge1xuICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTdWdnZXN0IGlzIG9wdGlvbmFsIGJ1dCByZWNvbW1lbmRlZCBkZXBlbmRlbmNpZXMgKHN1Z2dlc3Rpb25zIGZvciBwYWNrYWdlcyB0aGF0IHdvdWxkIGV4dGVuZCBmdW5jdGlvbmFsaXR5KVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibGljZW5zZVwiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGljZW5zZSBpcyB0aGUgbGlzdCBvZiBsaWNlbnNlIGlkZW50aWZpZXJzIChTUERYIGZvcm1hdClcIlxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUeXBlIGlzIHBhY2thZ2UgdHlwZSBpbmRpY2F0aW5nIHB1cnBvc2UgKGxpYnJhcnk9cmV1c2FibGUgY29kZSwgcHJvamVjdD1hcHBsaWNhdGlvbiwgbWV0YXBhY2thZ2U9YWdncmVnYXRlcyBkZXBlbmRlbmNpZXMsIGV0Yy4pXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJub3RpZmljYXRpb24tdXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTm90aWZpY2F0aW9uVVJMIGlzIHRoZSBVUkwgdG8gbm90aWZ5IHdoZW4gcGFja2FnZSBpcyBpbnN0YWxsZWQgKGZvciB0cmFja2luZy9zdGF0aXN0aWNzKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYmluXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCaW4gaXMgdGhlIGxpc3Qgb2YgYmluYXJ5L2V4ZWN1dGFibGUgZmlsZXMgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gUEFUSFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXV0aG9yc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1BocENvbXBvc2VyQXV0aG9yc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBdXRob3JzIGFyZSB0aGUgbGlzdCBvZiBwYWNrYWdlIGF1dGhvcnMgd2l0aCBuYW1lL2VtYWlsL2hvbWVwYWdlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0aW9uIGlzIGEgaHVtYW4tcmVhZGFibGUgcGFja2FnZSBkZXNjcmlwdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG9tZXBhZ2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIb21lcGFnZSBpcyBwcm9qZWN0IGhvbWVwYWdlIFVSTFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwia2V5d29yZHNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIktleXdvcmRzIGFyZSB0aGUgbGlzdCBvZiBrZXl3b3JkcyBmb3IgcGFja2FnZSBkaXNjb3Zlcnkvc2VhcmNoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0aW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGltZSBpcyB0aW1lc3RhbXAgd2hlbiB0aGlzIHBhY2thZ2UgdmVyc2lvbiB3YXMgcmVsZWFzZWRcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcInNvdXJjZVwiLFxuICAgICAgICBcImRpc3RcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQaHBDb21wb3NlckxvY2tFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIHBhY2thZ2UgZW50cnkgZm91bmQgZnJvbSBhIGNvbXBvc2VyLmxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJQaHBQZWFyRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyB0aGUgcGFja2FnZSBuYW1lXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjaGFubmVsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ2hhbm5lbCBpcyBQRUFSIGNoYW5uZWwgdGhpcyBwYWNrYWdlIGlzIGZyb21cIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBwYWNrYWdlIHZlcnNpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImxpY2Vuc2VcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxpY2Vuc2UgaXMgdGhlIGxpc3Qgb2YgYXBwbGljYWJsZSBsaWNlbnNlc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGhwUGVhckVudHJ5IHJlcHJlc2VudHMgYSBzaW5nbGUgcGFja2FnZSBlbnRyeSBmb3VuZCB3aXRoaW4gcGhwIHBlYXIgbWV0YWRhdGEgZmlsZXMuXCJcbiAgICB9LFxuICAgIFwiUGhwUGVjbEVudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIHBhY2thZ2UgbmFtZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY2hhbm5lbFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNoYW5uZWwgaXMgUEVBUiBjaGFubmVsIHRoaXMgcGFja2FnZSBpcyBmcm9tXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyB0aGUgcGFja2FnZSB2ZXJzaW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsaWNlbnNlXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJMaWNlbnNlIGlzIHRoZSBsaXN0IG9mIGFwcGxpY2FibGUgbGljZW5zZXNcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBocFBlY2xFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIHBhY2thZ2UgZW50cnkgZm91bmQgd2l0aGluIHBocCBwZWNsIG1ldGFkYXRhIGZpbGVzLlwiXG4gICAgfSxcbiAgICBcIlBucG1Mb2NrUmVzb2x1dGlvblwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImludGVncml0eVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkludGVncml0eSBpcyBTdWJyZXNvdXJjZSBJbnRlZ3JpdHkgaGFzaCBmb3IgdmVyaWZpY2F0aW9uIChTUkkgZm9ybWF0KVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImludGVncml0eVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBucG1Mb2NrUmVzb2x1dGlvbiBjb250YWlucyBwYWNrYWdlIHJlc29sdXRpb24gbWV0YWRhdGEgZnJvbSBwbnBtIGxvY2tmaWxlcywgaW5jbHVkaW5nIHRoZSBpbnRlZ3JpdHkgaGFzaCB1c2VkIGZvciB2ZXJpZmljYXRpb24uXCJcbiAgICB9LFxuICAgIFwiUG9ydGFnZURiRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJpbnN0YWxsZWRTaXplXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkluc3RhbGxlZFNpemUgaXMgdG90YWwgc2l6ZSBvZiBpbnN0YWxsZWQgZmlsZXMgaW4gYnl0ZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImxpY2Vuc2VzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGljZW5zZXMgaXMgbGljZW5zZSBzdHJpbmcgd2hpY2ggbWF5IGJlIGFuIGV4cHJlc3Npb24gKGUuZy4gXFxcIkdQTC0yIE9SIEFwYWNoZS0yLjBcXFwiKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Qb3J0YWdlRmlsZVJlY29yZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlcyBhcmUgdGhlIGZpbGVzIGluc3RhbGxlZCBieSB0aGlzIHBhY2thZ2UgKHRyYWNrZWQgaW4gQ09OVEVOVFMgZmlsZSlcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJpbnN0YWxsZWRTaXplXCIsXG4gICAgICAgIFwiZmlsZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQb3J0YWdlRW50cnkgcmVwcmVzZW50cyBhIHNpbmdsZSBwYWNrYWdlIGVudHJ5IGluIHRoZSBwb3J0YWdlIERCIGZsYXQtZmlsZSBzdG9yZS5cIlxuICAgIH0sXG4gICAgXCJQb3J0YWdlRmlsZVJlY29yZFwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRoIGlzIHRoZSBmaWxlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGZpbGVzeXN0ZW0gcm9vdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGlnZXN0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0RpZ2VzdFwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEaWdlc3QgaXMgZmlsZSBjb250ZW50IGhhc2ggKE1ENSBmb3IgcmVndWxhciBmaWxlcyBpbiBDT05URU5UUyBmb3JtYXQ6IFxcXCJvYmogZmlsZW5hbWUgbWQ1aGFzaCBtdGltZVxcXCIpXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwicGF0aFwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBvcnRhZ2VGaWxlUmVjb3JkIHJlcHJlc2VudHMgYSBzaW5nbGUgZmlsZSBhdHRyaWJ1dGVkIHRvIGEgcG9ydGFnZSBwYWNrYWdlLlwiXG4gICAgfSxcbiAgICBcIlB5dGhvbkRpcmVjdFVSTE9yaWdpbkluZm9cIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkwgaXMgdGhlIHNvdXJjZSBVUkwgZnJvbSB3aGljaCB0aGUgcGFja2FnZSB3YXMgaW5zdGFsbGVkLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29tbWl0SWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb21taXRJRCBpcyB0aGUgVkNTIGNvbW1pdCBoYXNoIGlmIGluc3RhbGxlZCBmcm9tIHZlcnNpb24gY29udHJvbC5cIlxuICAgICAgICB9LFxuICAgICAgICBcInZjc1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZDUyBpcyB0aGUgdmVyc2lvbiBjb250cm9sIHN5c3RlbSB0eXBlIChlLmcuLCBcXFwiZ2l0XFxcIiwgXFxcImhnXFxcIikuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidXJsXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHl0aG9uRGlyZWN0VVJMT3JpZ2luSW5mbyByZXByZXNlbnRzIGluc3RhbGxhdGlvbiBzb3VyY2UgbWV0YWRhdGEgZnJvbSBkaXJlY3RfdXJsLmpzb24gZm9yIHBhY2thZ2VzIGluc3RhbGxlZCBmcm9tIFZDUyBvciBkaXJlY3QgVVJMcy5cIlxuICAgIH0sXG4gICAgXCJQeXRob25GaWxlRGlnZXN0XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiYWxnb3JpdGhtXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQWxnb3JpdGhtIGlzIHRoZSBoYXNoIGFsZ29yaXRobSB1c2VkIChlLmcuLCBcXFwic2hhMjU2XFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2YWx1ZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZhbHVlIGlzIHRoZSBoZXgtZW5jb2RlZCBoYXNoIGRpZ2VzdCB2YWx1ZS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJhbGdvcml0aG1cIixcbiAgICAgICAgXCJ2YWx1ZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB5dGhvbkZpbGVEaWdlc3QgcmVwcmVzZW50cyB0aGUgZmlsZSBtZXRhZGF0YSBmb3IgYSBzaW5nbGUgZmlsZSBhdHRyaWJ1dGVkIHRvIGEgcHl0aG9uIHBhY2thZ2UuXCJcbiAgICB9LFxuICAgIFwiUHl0aG9uRmlsZVJlY29yZFwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRoIGlzIHRoZSBpbnN0YWxsZWQgZmlsZSBwYXRoIGZyb20gdGhlIFJFQ09SRCBmaWxlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGlnZXN0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1B5dGhvbkZpbGVEaWdlc3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGlnZXN0IGNvbnRhaW5zIHRoZSBoYXNoIGFsZ29yaXRobSBhbmQgdmFsdWUgZm9yIGZpbGUgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpemVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTaXplIGlzIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXMgYXMgYSBzdHJpbmcuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwicGF0aFwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB5dGhvbkZpbGVSZWNvcmQgcmVwcmVzZW50cyBhIHNpbmdsZSBlbnRyeSB3aXRoaW4gYSBSRUNPUkQgZmlsZSBmb3IgYSBweXRob24gd2hlZWwgb3IgZWdnIHBhY2thZ2VcIlxuICAgIH0sXG4gICAgXCJQeXRob25QYWNrYWdlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIHBhY2thZ2UgbmFtZSBmcm9tIHRoZSBOYW1lIGZpZWxkIGluIFBLRy1JTkZPIG9yIE1FVEFEQVRBLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvbiBmcm9tIHRoZSBWZXJzaW9uIGZpZWxkIGluIFBLRy1JTkZPIG9yIE1FVEFEQVRBLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXV0aG9yXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXV0aG9yIGlzIHRoZSBwYWNrYWdlIGF1dGhvciBuYW1lIGZyb20gdGhlIEF1dGhvciBmaWVsZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImF1dGhvckVtYWlsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXV0aG9yRW1haWwgaXMgdGhlIHBhY2thZ2UgYXV0aG9yJ3MgZW1haWwgYWRkcmVzcyBmcm9tIHRoZSBBdXRob3ItRW1haWwgZmllbGQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwbGF0Zm9ybVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBsYXRmb3JtIGluZGljYXRlcyB0aGUgdGFyZ2V0IHBsYXRmb3JtIGZvciB0aGUgcGFja2FnZSAoZS5nLiwgXFxcImFueVxcXCIsIFxcXCJsaW51eFxcXCIsIFxcXCJ3aW4zMlxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QeXRob25GaWxlUmVjb3JkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGFyZSB0aGUgaW5zdGFsbGVkIGZpbGVzIGxpc3RlZCBpbiB0aGUgUkVDT1JEIGZpbGUgZm9yIHdoZWVscyBvciBpbnN0YWxsZWQtZmlsZXMudHh0IGZvciBlZ2dzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2l0ZVBhY2thZ2VzUm9vdFBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTaXRlUGFja2FnZXNSb290UGF0aCBpcyB0aGUgcm9vdCBkaXJlY3RvcnkgcGF0aCBjb250YWluaW5nIHRoZSBwYWNrYWdlIChlLmcuLCBcXFwiL3Vzci9saWIvcHl0aG9uMy45L3NpdGUtcGFja2FnZXNcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInRvcExldmVsUGFja2FnZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRvcExldmVsUGFja2FnZXMgYXJlIHRoZSB0b3AtbGV2ZWwgUHl0aG9uIG1vZHVsZSBuYW1lcyBmcm9tIHRvcF9sZXZlbC50eHQgZmlsZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRpcmVjdFVybE9yaWdpblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QeXRob25EaXJlY3RVUkxPcmlnaW5JbmZvXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRpcmVjdFVSTE9yaWdpbiBjb250YWlucyBWQ1Mgb3IgZGlyZWN0IFVSTCBpbnN0YWxsYXRpb24gaW5mb3JtYXRpb24gZnJvbSBkaXJlY3RfdXJsLmpzb24uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZXF1aXJlc1B5dGhvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlcXVpcmVzUHl0aG9uIHNwZWNpZmllcyB0aGUgUHl0aG9uIHZlcnNpb24gcmVxdWlyZW1lbnQgKGUuZy4sIFxcXCI+PTMuNlxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZXNEaXN0XCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZXF1aXJlc0Rpc3QgbGlzdHMgdGhlIHBhY2thZ2UgZGVwZW5kZW5jaWVzIHdpdGggdmVyc2lvbiBzcGVjaWZpZXJzIGZyb20gUmVxdWlyZXMtRGlzdCBmaWVsZHMuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwcm92aWRlc0V4dHJhXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQcm92aWRlc0V4dHJhIGxpc3RzIG9wdGlvbmFsIGZlYXR1cmUgbmFtZXMgdGhhdCBjYW4gYmUgaW5zdGFsbGVkIHZpYSBleHRyYXMgKGUuZy4sIFxcXCJkZXZcXFwiLCBcXFwidGVzdFxcXCIpLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwiYXV0aG9yXCIsXG4gICAgICAgIFwiYXV0aG9yRW1haWxcIixcbiAgICAgICAgXCJwbGF0Zm9ybVwiLFxuICAgICAgICBcInNpdGVQYWNrYWdlc1Jvb3RQYXRoXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHl0aG9uUGFja2FnZSByZXByZXNlbnRzIGFsbCBjYXB0dXJlZCBkYXRhIGZvciBhIHB5dGhvbiBlZ2cgb3Igd2hlZWwgcGFja2FnZSAoc3BlY2lmaWNhbGx5IGFzIG91dGxpbmVkIGluIHRoZSBQeVBBIGNvcmUgbWV0YWRhdGEgc3BlY2lmaWNhdGlvbiBodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zcGVjaWZpY2F0aW9ucy9jb3JlLW1ldGFkYXRhLykuXCJcbiAgICB9LFxuICAgIFwiUHl0aG9uUGRtRmlsZUVudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVVJMIGlzIHRoZSBmaWxlIGRvd25sb2FkIFVSTFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGlnZXN0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1B5dGhvbkZpbGVEaWdlc3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGlnZXN0IGlzIHRoZSBoYXNoIGRpZ2VzdCBvZiB0aGUgZmlsZSBob3N0ZWQgYXQgdGhlIFVSTFwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInVybFwiLFxuICAgICAgICBcImRpZ2VzdFwiXG4gICAgICBdXG4gICAgfSxcbiAgICBcIlB5dGhvblBkbUxvY2tFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInN1bW1hcnlcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTdW1tYXJ5IHByb3ZpZGVzIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBhY2thZ2VcIlxuICAgICAgICB9LFxuICAgICAgICBcImZpbGVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUHl0aG9uUGRtRmlsZUVudHJ5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGFyZSB0aGUgcGFja2FnZSBmaWxlcyB3aXRoIHRoZWlyIHBhdGhzIGFuZCBoYXNoIGRpZ2VzdHMgKGZvciB0aGUgYmFzZSBwYWNrYWdlIHdpdGhvdXQgZXh0cmFzKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWFya2VyXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWFya2VyIGlzIHRoZSBcXFwiZW52aXJvbm1lbnRcXFwiIC0tY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciBhIHBhY2thZ2Ugc2hvdWxkIGJlIGluc3RhbGxlZCBiYXNlZCBvbiB0aGUgcnVudGltZSBlbnZpcm9ubWVudFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZXNQeXRob25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZXF1aXJlc1B5dGhvbiBzcGVjaWZpZXMgdGhlIFB5dGhvbiB2ZXJzaW9uIHJlcXVpcmVtZW50IChlLmcuLCBcXFwiPj0zLjZcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVwZW5kZW5jaWVzIGFyZSB0aGUgZGVwZW5kZW5jeSBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIGJhc2UgcGFja2FnZSAod2l0aG91dCBleHRyYXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRyYXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QeXRob25QZG1Mb2NrRXh0cmFWYXJpYW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkV4dHJhcyBjb250YWlucyB2YXJpYW50cyBmb3IgZGlmZmVyZW50IGV4dHJhcyBjb21iaW5hdGlvbnMgKFBETSBtYXkgaGF2ZSBtdWx0aXBsZSBlbnRyaWVzIHBlciBwYWNrYWdlKVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInN1bW1hcnlcIixcbiAgICAgICAgXCJmaWxlc1wiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB5dGhvblBkbUxvY2tFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIHBhY2thZ2UgZW50cnkgd2l0aGluIGEgcGRtLmxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJQeXRob25QZG1Mb2NrRXh0cmFWYXJpYW50XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiZXh0cmFzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFeHRyYXMgYXJlIHRoZSBvcHRpb25hbCBleHRyYXMgZW5hYmxlZCBmb3IgdGhpcyB2YXJpYW50IChlLmcuLCBbXFxcInRvbWxcXFwiXSwgW1xcXCJkZXZcXFwiXSwgb3IgW1xcXCJ0b21sXFxcIiwgXFxcImRldlxcXCJdKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgYXJlIHRoZSBkZXBlbmRlbmNpZXMgc3BlY2lmaWMgdG8gdGhpcyBleHRyYXMgdmFyaWFudFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QeXRob25QZG1GaWxlRW50cnlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRmlsZXMgYXJlIHRoZSBwYWNrYWdlIGZpbGVzIHNwZWNpZmljIHRvIHRoaXMgdmFyaWFudCAob25seSBwb3B1bGF0ZWQgaWYgZGlmZmVyZW50IGZyb20gYmFzZSlcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1hcmtlclwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1hcmtlciBpcyB0aGUgZW52aXJvbm1lbnQgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBmb3IgdGhpcyB2YXJpYW50IChlLmcuLCBcXFwicHl0aG9uX3ZlcnNpb24gPCBcXFxcXFxcIjMuMTFcXFxcXFxcIlxcXCIpXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiZXh0cmFzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHl0aG9uUGRtTG9ja0V4dHJhVmFyaWFudCByZXByZXNlbnRzIGEgc3BlY2lmaWMgZXh0cmFzIGNvbWJpbmF0aW9uIHZhcmlhbnQgd2l0aGluIGEgUERNIGxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJQeXRob25QaXBSZXF1aXJlbWVudHNFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBwYWNrYWdlIG5hbWUgZnJvbSB0aGUgcmVxdWlyZW1lbnRzIGZpbGUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRyYXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkV4dHJhcyBhcmUgdGhlIG9wdGlvbmFsIGZlYXR1cmVzIHRvIGluc3RhbGwgZnJvbSB0aGUgcGFja2FnZSAoZS5nLiwgcGFja2FnZVtkZXYsdGVzdF0pLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvbkNvbnN0cmFpbnRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uQ29uc3RyYWludCBzcGVjaWZpZXMgdmVyc2lvbiByZXF1aXJlbWVudHMgKGUuZy4sIFxcXCI+PTEuMCw8Mi4wXFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkwgaXMgdGhlIGRpcmVjdCBkb3dubG9hZCBVUkwgb3IgVkNTIFVSTCBpZiBzcGVjaWZpZWQgaW5zdGVhZCBvZiBhIFB5UEkgcGFja2FnZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1hcmtlcnNcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNYXJrZXJzIGFyZSBlbnZpcm9ubWVudCBtYXJrZXIgZXhwcmVzc2lvbnMgZm9yIGNvbmRpdGlvbmFsIGluc3RhbGxhdGlvbiAoZS5nLiwgXFxcInB5dGhvbl92ZXJzaW9uID49ICczLjgnXFxcIikuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcInZlcnNpb25Db25zdHJhaW50XCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHl0aG9uUmVxdWlyZW1lbnRzRW50cnkgcmVwcmVzZW50cyBhIHNpbmdsZSBlbnRyeSB3aXRoaW4gYSBbKi1dcmVxdWlyZW1lbnRzLnR4dCBmaWxlLlwiXG4gICAgfSxcbiAgICBcIlB5dGhvblBpcGZpbGVMb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJoYXNoZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkhhc2hlcyBhcmUgdGhlIHBhY2thZ2UgZmlsZSBoYXNoIHZhbHVlcyBpbiB0aGUgZm9ybWF0IFxcXCJhbGdvcml0aG06ZGlnZXN0XFxcIiBmb3IgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcImluZGV4XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW5kZXggaXMgdGhlIFB5UEkgaW5kZXggbmFtZSB3aGVyZSB0aGUgcGFja2FnZSBzaG91bGQgYmUgZmV0Y2hlZCBmcm9tLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImhhc2hlc1wiLFxuICAgICAgICBcImluZGV4XCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHl0aG9uUGlwZmlsZUxvY2tFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIHBhY2thZ2UgZW50cnkgd2l0aGluIGEgUGlwZmlsZS5sb2NrIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiUHl0aG9uUG9ldHJ5TG9ja0RlcGVuZGVuY3lFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBkZXBlbmRlbmN5IHBhY2thZ2UgbmFtZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBsb2NrZWQgdmVyc2lvbiBvciB2ZXJzaW9uIGNvbnN0cmFpbnQgZm9yIHRoZSBkZXBlbmRlbmN5LlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwib3B0aW9uYWxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT3B0aW9uYWwgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBkZXBlbmRlbmN5IGlzIG9wdGlvbmFsIChvbmx5IG5lZWRlZCBmb3IgY2VydGFpbiBleHRyYXMpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWFya2Vyc1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1hcmtlcnMgYXJlIGVudmlyb25tZW50IG1hcmtlciBleHByZXNzaW9ucyB0aGF0IGNvbmRpdGlvbmFsbHkgZW5hYmxlIHRoZSBkZXBlbmRlbmN5IChlLmcuLCBcXFwicHl0aG9uX3ZlcnNpb24gPj0gJzMuOCdcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4dHJhc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRXh0cmFzIGFyZSB0aGUgb3B0aW9uYWwgZmVhdHVyZSBuYW1lcyBmcm9tIHRoZSBkZXBlbmRlbmN5IHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZC5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcIm9wdGlvbmFsXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHl0aG9uUG9ldHJ5TG9ja0RlcGVuZGVuY3lFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIGRlcGVuZGVuY3kgZW50cnkgd2l0aGluIGEgUG9ldHJ5IGxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJQeXRob25Qb2V0cnlMb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJpbmRleFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkluZGV4IGlzIHRoZSBwYWNrYWdlIHJlcG9zaXRvcnkgbmFtZSB3aGVyZSB0aGUgcGFja2FnZSBzaG91bGQgYmUgZmV0Y2hlZCBmcm9tLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUHl0aG9uUG9ldHJ5TG9ja0RlcGVuZGVuY3lFbnRyeVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgYXJlIHRoZSBwYWNrYWdlJ3MgcnVudGltZSBkZXBlbmRlbmNpZXMgd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnRzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXh0cmFzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUHl0aG9uUG9ldHJ5TG9ja0V4dHJhRW50cnlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRXh0cmFzIGFyZSBvcHRpb25hbCBmZWF0dXJlIGdyb3VwcyB0aGF0IGluY2x1ZGUgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiaW5kZXhcIixcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQeXRob25Qb2V0cnlMb2NrRW50cnkgcmVwcmVzZW50cyBhIHNpbmdsZSBwYWNrYWdlIGVudHJ5IHdpdGhpbiBhIFBpcGZpbGUubG9jayBmaWxlLlwiXG4gICAgfSxcbiAgICBcIlB5dGhvblBvZXRyeUxvY2tFeHRyYUVudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIG9wdGlvbmFsIGZlYXR1cmUgbmFtZSAoZS5nLiwgXFxcImRldlxcXCIsIFxcXCJ0ZXN0XFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlcGVuZGVuY2llcyBhcmUgdGhlIHBhY2thZ2UgbmFtZXMgcmVxdWlyZWQgd2hlbiB0aGlzIGV4dHJhIGlzIGluc3RhbGxlZC5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHl0aG9uUG9ldHJ5TG9ja0V4dHJhRW50cnkgcmVwcmVzZW50cyBhbiBvcHRpb25hbCBmZWF0dXJlIGdyb3VwIGluIGEgUG9ldHJ5IGxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJQeXRob25VdkxvY2tEZXBlbmRlbmN5RW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyB0aGUgZGVwZW5kZW5jeSBwYWNrYWdlIG5hbWUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJvcHRpb25hbFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJPcHRpb25hbCBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGRlcGVuZGVuY3kgaXMgb3B0aW9uYWwgKG9ubHkgbmVlZGVkIGZvciBjZXJ0YWluIGV4dHJhcykuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXJrZXJzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWFya2VycyBhcmUgZW52aXJvbm1lbnQgbWFya2VyIGV4cHJlc3Npb25zIHRoYXQgY29uZGl0aW9uYWxseSBlbmFibGUgdGhlIGRlcGVuZGVuY3kgKGUuZy4sIFxcXCJweXRob25fdmVyc2lvbiA+PSAnMy44J1xcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXh0cmFzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFeHRyYXMgYXJlIHRoZSBvcHRpb25hbCBmZWF0dXJlIG5hbWVzIGZyb20gdGhlIGRlcGVuZGVuY3kgdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJvcHRpb25hbFwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB5dGhvblV2TG9ja0RlcGVuZGVuY3lFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIGRlcGVuZGVuY3kgZW50cnkgd2l0aGluIGEgdXYgbG9jayBmaWxlLlwiXG4gICAgfSxcbiAgICBcIlB5dGhvblV2TG9ja0VudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiaW5kZXhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJbmRleCBpcyB0aGUgcGFja2FnZSByZXBvc2l0b3J5IG5hbWUgd2hlcmUgdGhlIHBhY2thZ2Ugc2hvdWxkIGJlIGZldGNoZWQgZnJvbS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1B5dGhvblV2TG9ja0RlcGVuZGVuY3lFbnRyeVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgYXJlIHRoZSBwYWNrYWdlJ3MgcnVudGltZSBkZXBlbmRlbmNpZXMgd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnRzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXh0cmFzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUHl0aG9uVXZMb2NrRXh0cmFFbnRyeVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFeHRyYXMgYXJlIG9wdGlvbmFsIGZlYXR1cmUgZ3JvdXBzIHRoYXQgaW5jbHVkZSBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcy5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJpbmRleFwiLFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB5dGhvblV2TG9ja0VudHJ5IHJlcHJlc2VudHMgYSBzaW5nbGUgcGFja2FnZSBlbnRyeSB3aXRoaW4gYSB1di5sb2NrIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiUHl0aG9uVXZMb2NrRXh0cmFFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBvcHRpb25hbCBmZWF0dXJlIG5hbWUgKGUuZy4sIFxcXCJkZXZcXFwiLCBcXFwidGVzdFxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgYXJlIHRoZSBwYWNrYWdlIG5hbWVzIHJlcXVpcmVkIHdoZW4gdGhpcyBleHRyYSBpcyBpbnN0YWxsZWQuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB5dGhvblV2TG9ja0V4dHJhRW50cnkgcmVwcmVzZW50cyBhbiBvcHRpb25hbCBmZWF0dXJlIGdyb3VwIGluIGEgdXYgbG9jayBmaWxlLlwiXG4gICAgfSxcbiAgICBcIlJEZXNjcmlwdGlvblwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInRpdGxlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGl0bGUgaXMgc2hvcnQgb25lLWxpbmUgcGFja2FnZSB0aXRsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXNjcmlwdGlvbiBpcyBkZXRhaWxlZCBwYWNrYWdlIGRlc2NyaXB0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdXRob3JcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBdXRob3IgaXMgcGFja2FnZSBhdXRob3IocylcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1haW50YWluZXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNYWludGFpbmVyIGlzIGN1cnJlbnQgcGFja2FnZSBtYWludGFpbmVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlVSTCBpcyB0aGUgbGlzdCBvZiByZWxhdGVkIFVSTHNcIlxuICAgICAgICB9LFxuICAgICAgICBcInJlcG9zaXRvcnlcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZXBvc2l0b3J5IGlzIENSQU4gb3Igb3RoZXIgcmVwb3NpdG9yeSBuYW1lXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWlsdFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkJ1aWx0IGlzIFIgdmVyc2lvbiBhbmQgcGxhdGZvcm0gdGhpcyB3YXMgYnVpbHQgd2l0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibmVlZHNDb21waWxhdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOZWVkc0NvbXBpbGF0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYWNrYWdlIHJlcXVpcmVzIGNvbXBpbGF0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpbXBvcnRzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJbXBvcnRzIGFyZSB0aGUgcGFja2FnZXMgaW1wb3J0ZWQgaW4gdGhlIE5BTUVTUEFDRVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVwZW5kcyBhcmUgdGhlIHBhY2thZ2VzIHRoaXMgcGFja2FnZSBkZXBlbmRzIG9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzdWdnZXN0c1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU3VnZ2VzdHMgYXJlIHRoZSBvcHRpb25hbCBwYWNrYWdlcyB0aGF0IGV4dGVuZCBmdW5jdGlvbmFsaXR5XCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJEZXNjcmlwdGlvbiByZXByZXNlbnRzIG1ldGFkYXRhIGZyb20gYW4gUiBwYWNrYWdlIERFU0NSSVBUSU9OIGZpbGUgY29udGFpbmluZyBwYWNrYWdlIGluZm9ybWF0aW9uLCBkZXBlbmRlbmNpZXMsIGFuZCBhdXRob3IgZGV0YWlscy5cIlxuICAgIH0sXG4gICAgXCJSZWxhdGlvbnNoaXBcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJwYXJlbnRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXJlbnQgaXMgdGhlIElEIG9mIHRoZSBwYXJlbnQgYXJ0aWZhY3QgaW4gdGhpcyByZWxhdGlvbnNoaXAuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjaGlsZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNoaWxkIGlzIHRoZSBJRCBvZiB0aGUgY2hpbGQgYXJ0aWZhY3QgaW4gdGhpcyByZWxhdGlvbnNoaXAuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVHlwZSBpcyB0aGUgcmVsYXRpb25zaGlwIHR5cGUgKGUuZy4sIFxcXCJjb250YWluc1xcXCIsIFxcXCJkZXBlbmRlbmN5LW9mXFxcIiwgXFxcImFuY2VzdG9yLW9mXFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1ldGFkYXRhIGNvbnRhaW5zIGFkZGl0aW9uYWwgcmVsYXRpb25zaGlwLXNwZWNpZmljIG1ldGFkYXRhLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInBhcmVudFwiLFxuICAgICAgICBcImNoaWxkXCIsXG4gICAgICAgIFwidHlwZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlbGF0aW9uc2hpcCByZXByZXNlbnRzIGEgZGlyZWN0ZWQgcmVsYXRpb25zaGlwIGJldHdlZW4gdHdvIGFydGlmYWN0cyBpbiB0aGUgU0JPTSwgc3VjaCBhcyBwYWNrYWdlLWNvbnRhaW5zLWZpbGUgb3IgcGFja2FnZS1kZXBlbmRzLW9uLXBhY2thZ2UuXCJcbiAgICB9LFxuICAgIFwiUnBtQXJjaGl2ZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBSUE0gcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHRoZSBSUE0gZGF0YWJhc2UuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyB0aGUgdXBzdHJlYW0gdmVyc2lvbiBvZiB0aGUgcGFja2FnZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImVwb2NoXCI6IHtcbiAgICAgICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRXBvY2ggaXMgdGhlIHZlcnNpb24gZXBvY2ggdXNlZCB0byBmb3JjZSB1cGdyYWRlIG9yZGVyaW5nIChudWxsIGlmIG5vdCBzZXQpLlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJudWxsXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaCBpcyB0aGUgdGFyZ2V0IENQVSBhcmNoaXRlY3R1cmUgKGUuZy4sIFxcXCJ4ODZfNjRcXFwiLCBcXFwiYWFyY2g2NFxcXCIsIFxcXCJub2FyY2hcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInJlbGVhc2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWxlYXNlIGlzIHRoZSBwYWNrYWdlIHJlbGVhc2UgbnVtYmVyIG9yIGRpc3RyaWJ1dGlvbi1zcGVjaWZpYyB2ZXJzaW9uIHN1ZmZpeC5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNvdXJjZVJwbVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNvdXJjZVJwbSBpcyB0aGUgc291cmNlIFJQTSBmaWxlbmFtZSB0aGF0IHdhcyB1c2VkIHRvIGJ1aWxkIHRoaXMgcGFja2FnZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpZ25hdHVyZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9ScG1TaWduYXR1cmVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2lnbmF0dXJlcyBjb250YWlucyBHUEcgc2lnbmF0dXJlIG1ldGFkYXRhIGZvciBwYWNrYWdlIHZlcmlmaWNhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpemVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2l6ZSBpcyB0aGUgdG90YWwgaW5zdGFsbGVkIHNpemUgb2YgdGhlIHBhY2thZ2UgaW4gYnl0ZXMuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZW5kb3JcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZW5kb3IgaXMgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHBhY2thZ2VkIHRoZSBzb2Z0d2FyZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vZHVsYXJpdHlMYWJlbFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1vZHVsYXJpdHlMYWJlbCBpZGVudGlmaWVzIHRoZSBtb2R1bGUgc3RyZWFtIGZvciBtb2R1bGFyIFJQTSBwYWNrYWdlcyAoZS5nLiwgXFxcIm5vZGVqczoxMjoyMDIwMDEwMVxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvdmlkZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlByb3ZpZGVzIGxpc3RzIHRoZSB2aXJ0dWFsIHBhY2thZ2VzIGFuZCBjYXBhYmlsaXRpZXMgdGhpcyBwYWNrYWdlIHByb3ZpZGVzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlcXVpcmVzIGxpc3RzIHRoZSBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgYnkgdGhpcyBwYWNrYWdlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9ScG1GaWxlUmVjb3JkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGFyZSB0aGUgZmlsZSByZWNvcmRzIGZvciBhbGwgZmlsZXMgb3duZWQgYnkgdGhpcyBwYWNrYWdlLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwiZXBvY2hcIixcbiAgICAgICAgXCJhcmNoaXRlY3R1cmVcIixcbiAgICAgICAgXCJyZWxlYXNlXCIsXG4gICAgICAgIFwic291cmNlUnBtXCIsXG4gICAgICAgIFwic2l6ZVwiLFxuICAgICAgICBcInZlbmRvclwiLFxuICAgICAgICBcImZpbGVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUnBtQXJjaGl2ZSByZXByZXNlbnRzIHBhY2thZ2UgbWV0YWRhdGEgZXh0cmFjdGVkIGRpcmVjdGx5IGZyb20gYSAucnBtIGFyY2hpdmUgZmlsZSwgY29udGFpbmluZyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyBhbiBSUE0gZGF0YWJhc2UgZW50cnkuXCJcbiAgICB9LFxuICAgIFwiUnBtRGJFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBSUE0gcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHRoZSBSUE0gZGF0YWJhc2UuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyB0aGUgdXBzdHJlYW0gdmVyc2lvbiBvZiB0aGUgcGFja2FnZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImVwb2NoXCI6IHtcbiAgICAgICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRXBvY2ggaXMgdGhlIHZlcnNpb24gZXBvY2ggdXNlZCB0byBmb3JjZSB1cGdyYWRlIG9yZGVyaW5nIChudWxsIGlmIG5vdCBzZXQpLlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJudWxsXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaCBpcyB0aGUgdGFyZ2V0IENQVSBhcmNoaXRlY3R1cmUgKGUuZy4sIFxcXCJ4ODZfNjRcXFwiLCBcXFwiYWFyY2g2NFxcXCIsIFxcXCJub2FyY2hcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInJlbGVhc2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWxlYXNlIGlzIHRoZSBwYWNrYWdlIHJlbGVhc2UgbnVtYmVyIG9yIGRpc3RyaWJ1dGlvbi1zcGVjaWZpYyB2ZXJzaW9uIHN1ZmZpeC5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNvdXJjZVJwbVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNvdXJjZVJwbSBpcyB0aGUgc291cmNlIFJQTSBmaWxlbmFtZSB0aGF0IHdhcyB1c2VkIHRvIGJ1aWxkIHRoaXMgcGFja2FnZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpZ25hdHVyZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9ScG1TaWduYXR1cmVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2lnbmF0dXJlcyBjb250YWlucyBHUEcgc2lnbmF0dXJlIG1ldGFkYXRhIGZvciBwYWNrYWdlIHZlcmlmaWNhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpemVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2l6ZSBpcyB0aGUgdG90YWwgaW5zdGFsbGVkIHNpemUgb2YgdGhlIHBhY2thZ2UgaW4gYnl0ZXMuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZW5kb3JcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZW5kb3IgaXMgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHBhY2thZ2VkIHRoZSBzb2Z0d2FyZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vZHVsYXJpdHlMYWJlbFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1vZHVsYXJpdHlMYWJlbCBpZGVudGlmaWVzIHRoZSBtb2R1bGUgc3RyZWFtIGZvciBtb2R1bGFyIFJQTSBwYWNrYWdlcyAoZS5nLiwgXFxcIm5vZGVqczoxMjoyMDIwMDEwMVxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvdmlkZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlByb3ZpZGVzIGxpc3RzIHRoZSB2aXJ0dWFsIHBhY2thZ2VzIGFuZCBjYXBhYmlsaXRpZXMgdGhpcyBwYWNrYWdlIHByb3ZpZGVzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlcXVpcmVzIGxpc3RzIHRoZSBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgYnkgdGhpcyBwYWNrYWdlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9ScG1GaWxlUmVjb3JkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGFyZSB0aGUgZmlsZSByZWNvcmRzIGZvciBhbGwgZmlsZXMgb3duZWQgYnkgdGhpcyBwYWNrYWdlLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwiZXBvY2hcIixcbiAgICAgICAgXCJhcmNoaXRlY3R1cmVcIixcbiAgICAgICAgXCJyZWxlYXNlXCIsXG4gICAgICAgIFwic291cmNlUnBtXCIsXG4gICAgICAgIFwic2l6ZVwiLFxuICAgICAgICBcInZlbmRvclwiLFxuICAgICAgICBcImZpbGVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUnBtREJFbnRyeSByZXByZXNlbnRzIGFsbCBjYXB0dXJlZCBkYXRhIGZyb20gYSBSUE0gREIgcGFja2FnZSBlbnRyeS5cIlxuICAgIH0sXG4gICAgXCJScG1GaWxlUmVjb3JkXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGggaXMgdGhlIGFic29sdXRlIGZpbGUgcGF0aCB3aGVyZSB0aGUgZmlsZSBpcyBpbnN0YWxsZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb2RlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1vZGUgaXMgdGhlIGZpbGUgcGVybWlzc2lvbiBtb2RlIGJpdHMgZm9sbG93aW5nIFVuaXggc3RhdC5oIGNvbnZlbnRpb25zLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2l6ZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTaXplIGlzIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXMuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkaWdlc3RcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRGlnZXN0XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRpZ2VzdCBjb250YWlucyB0aGUgaGFzaCBhbGdvcml0aG0gYW5kIHZhbHVlIGZvciBmaWxlIGludGVncml0eSB2ZXJpZmljYXRpb24uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1c2VyTmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlVzZXJOYW1lIGlzIHRoZSBvd25lciB1c2VybmFtZSBmb3IgdGhlIGZpbGUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJncm91cE5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJHcm91cE5hbWUgaXMgdGhlIGdyb3VwIG5hbWUgZm9yIHRoZSBmaWxlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmxhZ3NcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGbGFncyBpbmRpY2F0ZXMgdGhlIGZpbGUgdHlwZSAoZS5nLiwgXFxcIiVjb25maWdcXFwiLCBcXFwiJWRvY1xcXCIsIFxcXCIlZ2hvc3RcXFwiKS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIFwibW9kZVwiLFxuICAgICAgICBcInNpemVcIixcbiAgICAgICAgXCJkaWdlc3RcIixcbiAgICAgICAgXCJ1c2VyTmFtZVwiLFxuICAgICAgICBcImdyb3VwTmFtZVwiLFxuICAgICAgICBcImZsYWdzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUnBtRmlsZVJlY29yZCByZXByZXNlbnRzIHRoZSBmaWxlIG1ldGFkYXRhIGZvciBhIHNpbmdsZSBmaWxlIGF0dHJpYnV0ZWQgdG8gYSBSUE0gcGFja2FnZS5cIlxuICAgIH0sXG4gICAgXCJScG1TaWduYXR1cmVcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJhbGdvXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHVibGljS2V5QWxnb3JpdGhtIGlzIHRoZSBwdWJsaWMga2V5IGFsZ29yaXRobSB1c2VkIGZvciBzaWduaW5nIChlLmcuLCBcXFwiUlNBXFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJoYXNoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSGFzaEFsZ29yaXRobSBpcyB0aGUgaGFzaCBhbGdvcml0aG0gdXNlZCBmb3IgdGhlIHNpZ25hdHVyZSAoZS5nLiwgXFxcIlNIQTI1NlxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY3JlYXRlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNyZWF0ZWQgaXMgdGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBzaWduYXR1cmUgd2FzIGNyZWF0ZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpc3N1ZXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJc3N1ZXJLZXlJRCBpcyB0aGUgR1BHIGtleSBJRCB0aGF0IGNyZWF0ZWQgdGhlIHNpZ25hdHVyZS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJhbGdvXCIsXG4gICAgICAgIFwiaGFzaFwiLFxuICAgICAgICBcImNyZWF0ZWRcIixcbiAgICAgICAgXCJpc3N1ZXJcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJScG1TaWduYXR1cmUgcmVwcmVzZW50cyBhIEdQRyBzaWduYXR1cmUgZm9yIGFuIFJQTSBwYWNrYWdlIHVzZWQgZm9yIGF1dGhlbnRpY2l0eSB2ZXJpZmljYXRpb24uXCJcbiAgICB9LFxuICAgIFwiUnVieUdlbXNwZWNcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyBnZW0gbmFtZSBhcyBzcGVjaWZpZWQgaW4gdGhlIGdlbXNwZWNcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIGdlbSB2ZXJzaW9uIGFzIHNwZWNpZmllZCBpbiB0aGUgZ2Vtc3BlY1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGlzIGxvZ2ljYWwgbGlzdCBvZiBmaWxlcyBpbiB0aGUgZ2VtIChOT1QgZGlyZWN0bHkgdXNhYmxlIGFzIGZpbGVzeXN0ZW0gcGF0aHMuIEV4YW1wbGU6IGJ1bmRsZXIgZ2VtIGxpc3RzIFxcXCJsaWIvYnVuZGxlci92ZW5kb3IvdXJpL2xpYi91cmkvbGRhcC5yYlxcXCIgYnV0IGFjdHVhbCBwYXRoIGlzIFxcXCIvdXNyL2xvY2FsL2xpYi9ydWJ5LzMuMi4wL2J1bmRsZXIvdmVuZG9yL3VyaS9saWIvdXJpL2xkYXAucmJcXFwiLiBXb3VsZCBuZWVkIGdlbSBpbnN0YWxsYXRpb24gcGF0aCwgcnVieSB2ZXJzaW9uLCBhbmQgZW52IHZhcnMgbGlrZSBHRU1fSE9NRSB0byByZXNvbHZlIGFjdHVhbCBwYXRocy4pXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdXRob3JzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBdXRob3JzIGFyZSB0aGUgbGlzdCBvZiBnZW0gYXV0aG9ycyAoc3RvcmVkIGFzIGFycmF5IHJlZ2FyZGxlc3Mgb2YgdXNpbmcgYGF1dGhvcmAgb3IgYGF1dGhvcnNgIG1ldGhvZCBpbiBnZW1zcGVjKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG9tZXBhZ2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIb21lcGFnZSBpcyBwcm9qZWN0IGhvbWVwYWdlIFVSTFwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUnVieUdlbXNwZWMgcmVwcmVzZW50cyBhbGwgbWV0YWRhdGEgcGFyc2VkIGZyb20gdGhlICouZ2Vtc3BlYyBmaWxlXCJcbiAgICB9LFxuICAgIFwiUnVzdENhcmdvQXVkaXRFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIGNyYXRlIG5hbWUgYXMgc3BlY2lmaWVkIGluIGF1ZGl0IHNlY3Rpb24gb2YgdGhlIGJ1aWxkIGJpbmFyeVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgY3JhdGUgdmVyc2lvbiBhcyBzcGVjaWZpZWQgaW4gYXVkaXQgc2VjdGlvbiBvZiB0aGUgYnVpbGQgYmluYXJ5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2UgaXMgdGhlIHNvdXJjZSByZWdpc3RyeSBvciByZXBvc2l0b3J5IHdoZXJlIHRoaXMgY3JhdGUgY2FtZSBmcm9tXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcInZlcnNpb25cIixcbiAgICAgICAgXCJzb3VyY2VcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSdXN0QmluYXJ5QXVkaXRFbnRyeSByZXByZXNlbnRzIFJ1c3QgY3JhdGUgbWV0YWRhdGEgZXh0cmFjdGVkIGZyb20gYSBjb21waWxlZCBiaW5hcnkgdXNpbmcgY2FyZ28tYXVkaXRhYmxlIGZvcm1hdC5cIlxuICAgIH0sXG4gICAgXCJSdXN0Q2FyZ29Mb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyBjcmF0ZSBuYW1lIGFzIHNwZWNpZmllZCBpbiBDYXJnby50b21sXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyBjcmF0ZSB2ZXJzaW9uIGFzIHNwZWNpZmllZCBpbiBDYXJnby50b21sXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2UgaXMgdGhlIHNvdXJjZSByZWdpc3RyeSBvciByZXBvc2l0b3J5IFVSTCBpbiBmb3JtYXQgXFxcInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4XFxcIiBmb3IgcmVnaXN0cnkgcGFja2FnZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImNoZWNrc3VtXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ2hlY2tzdW0gaXMgY29udGVudCBjaGVja3N1bSBmb3IgcmVnaXN0cnkgcGFja2FnZXMgb25seSAoaGV4YWRlY2ltYWwgc3RyaW5nKS4gQ2FyZ28gZG9lc24ndCByZXF1aXJlIG9yIGluY2x1ZGUgY2hlY2tzdW1zIGZvciBnaXQgZGVwZW5kZW5jaWVzLiBVc2VkIHRvIGRldGVjdCBNSVRNIGF0dGFja3MgYnkgdmVyaWZ5aW5nIGRvd25sb2FkZWQgY3JhdGUgbWF0Y2hlcyBsb2NrZmlsZSBjaGVja3N1bS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVwZW5kZW5jaWVzIGFyZSB0aGUgbGlzdCBvZiBkZXBlbmRlbmNpZXMgd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnRzXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcInZlcnNpb25cIixcbiAgICAgICAgXCJzb3VyY2VcIixcbiAgICAgICAgXCJjaGVja3N1bVwiLFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJ1c3RDYXJnb0xvY2tFbnRyeSByZXByZXNlbnRzIGEgbG9ja2VkIGRlcGVuZGVuY3kgZnJvbSBhIENhcmdvLmxvY2sgZmlsZSB3aXRoIHByZWNpc2UgdmVyc2lvbiBhbmQgY2hlY2tzdW0gaW5mb3JtYXRpb24uXCJcbiAgICB9LFxuICAgIFwiU2NoZW1hXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIEpTT04gc2NoZW1hIHZlcnNpb24gZm9yIHRoaXMgZG9jdW1lbnQgZm9ybWF0LlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVVJMIGlzIHRoZSBVUkwgdG8gdGhlIEpTT04gc2NoZW1hIGRlZmluaXRpb24gZG9jdW1lbnQuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcInVybFwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNjaGVtYSBzcGVjaWZpZXMgdGhlIEpTT04gc2NoZW1hIHZlcnNpb24gYW5kIFVSTCByZWZlcmVuY2UgdGhhdCBkZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgYW5kIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZG9jdW1lbnQgZm9ybWF0LlwiXG4gICAgfSxcbiAgICBcIlNuYXBFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInNuYXBUeXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU25hcFR5cGUgaW5kaWNhdGVzIHRoZSBzbmFwIHR5cGUgKGJhc2UsIGtlcm5lbCwgYXBwLCBnYWRnZXQsIG9yIHNuYXBkKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImJhc2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCYXNlIGlzIHRoZSBiYXNlIHNuYXAgbmFtZSB0aGF0IHRoaXMgc25hcCBkZXBlbmRzIG9uIChlLmcuLCBcXFwiY29yZTIwXFxcIiwgXFxcImNvcmUyMlxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic25hcE5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTbmFwTmFtZSBpcyB0aGUgc25hcCBwYWNrYWdlIG5hbWUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzbmFwVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNuYXBWZXJzaW9uIGlzIHRoZSBzbmFwIHBhY2thZ2UgdmVyc2lvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcImFyY2hpdGVjdHVyZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkFyY2hpdGVjdHVyZSBpcyB0aGUgdGFyZ2V0IENQVSBhcmNoaXRlY3R1cmUgKGUuZy4sIFxcXCJhbWQ2NFxcXCIsIFxcXCJhcm02NFxcXCIpLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInNuYXBUeXBlXCIsXG4gICAgICAgIFwiYmFzZVwiLFxuICAgICAgICBcInNuYXBOYW1lXCIsXG4gICAgICAgIFwic25hcFZlcnNpb25cIixcbiAgICAgICAgXCJhcmNoaXRlY3R1cmVcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTbmFwRW50cnkgcmVwcmVzZW50cyBtZXRhZGF0YSBmb3IgYSBTbmFwIHBhY2thZ2UgZXh0cmFjdGVkIGZyb20gc25hcC55YW1sIG9yIHNuYXBjcmFmdC55YW1sIGZpbGVzLlwiXG4gICAgfSxcbiAgICBcIlNvdXJjZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImlkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSUQgaXMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGFuYWx5emVkIHNvdXJjZSBhcnRpZmFjdC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBhbmFseXplZCBhcnRpZmFjdCAoZS5nLiwgaW1hZ2UgbmFtZSwgZGlyZWN0b3J5IHBhdGgpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHZlcnNpb24gb2YgdGhlIGFuYWx5emVkIGFydGlmYWN0IChlLmcuLCBpbWFnZSB0YWcpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic3VwcGxpZXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTdXBwbGllciBpcyBzdXBwbGllciBpbmZvcm1hdGlvbiwgd2hpY2ggY2FuIGJlIHVzZXItcHJvdmlkZWQgZm9yIE5USUEgbWluaW11bSBlbGVtZW50cyBjb21wbGlhbmNlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlR5cGUgaXMgdGhlIHNvdXJjZSB0eXBlIChlLmcuLCBcXFwiaW1hZ2VcXFwiLCBcXFwiZGlyZWN0b3J5XFxcIiwgXFxcImZpbGVcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWV0YWRhdGEgY29udGFpbnMgYWRkaXRpb25hbCBzb3VyY2Utc3BlY2lmaWMgbWV0YWRhdGEuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiaWRcIixcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJtZXRhZGF0YVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNvdXJjZSByZXByZXNlbnRzIHRoZSBhcnRpZmFjdCB0aGF0IHdhcyBhbmFseXplZCB0byBnZW5lcmF0ZSB0aGlzIFNCT00sIHN1Y2ggYXMgYSBjb250YWluZXIgaW1hZ2UsIGRpcmVjdG9yeSwgb3IgZmlsZSBhcmNoaXZlLlwiXG4gICAgfSxcbiAgICBcIlN3aWZ0UGFja2FnZU1hbmFnZXJMb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZXZpc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJldmlzaW9uIGlzIGdpdCBjb21taXQgaGFzaCBvZiB0aGUgcmVzb2x2ZWQgcGFja2FnZVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJldmlzaW9uXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU3dpZnRQYWNrYWdlTWFuYWdlclJlc29sdmVkRW50cnkgcmVwcmVzZW50cyBhIHJlc29sdmVkIGRlcGVuZGVuY3kgZnJvbSBhIFBhY2thZ2UucmVzb2x2ZWQgZmlsZSB3aXRoIGl0cyBsb2NrZWQgdmVyc2lvbiBhbmQgc291cmNlIGxvY2F0aW9uLlwiXG4gICAgfSxcbiAgICBcIlN3aXBscGFja1BhY2thZ2VcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyB0aGUgcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHRoZSAudG9tbCBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyB0aGUgcGFja2FnZSB2ZXJzaW9uIGFzIGZvdW5kIGluIHRoZSAudG9tbCBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdXRob3JcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBdXRob3IgaXMgYXV0aG9yIG5hbWVcIlxuICAgICAgICB9LFxuICAgICAgICBcImF1dGhvckVtYWlsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXV0aG9yRW1haWwgaXMgYXV0aG9yIGVtYWlsIGFkZHJlc3NcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhY2thZ2VyXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFja2FnZXIgaXMgcGFja2FnZXIgbmFtZSAoaWYgZGlmZmVyZW50IGZyb20gYXV0aG9yKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGFja2FnZXJFbWFpbFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhY2thZ2VyRW1haWwgaXMgcGFja2FnZXIgZW1haWwgYWRkcmVzc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG9tZXBhZ2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIb21lcGFnZSBpcyBwcm9qZWN0IGhvbWVwYWdlIFVSTFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgYXJlIHRoZSBsaXN0IG9mIHJlcXVpcmVkIGRlcGVuZGVuY2llc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwiYXV0aG9yXCIsXG4gICAgICAgIFwiYXV0aG9yRW1haWxcIixcbiAgICAgICAgXCJwYWNrYWdlclwiLFxuICAgICAgICBcInBhY2thZ2VyRW1haWxcIixcbiAgICAgICAgXCJob21lcGFnZVwiLFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlN3aXBsUGFja0VudHJ5IHJlcHJlc2VudHMgYSBTV0ktUHJvbG9nIHBhY2thZ2UgZnJvbSB0aGUgcGFjayBzeXN0ZW0gd2l0aCBtZXRhZGF0YSBhYm91dCB0aGUgcGFja2FnZSBhbmQgaXRzIGRlcGVuZGVuY2llcy5cIlxuICAgIH0sXG4gICAgXCJUZXJyYWZvcm1Mb2NrUHJvdmlkZXJFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlVSTCBpcyB0aGUgcHJvdmlkZXIgc291cmNlIGFkZHJlc3MgKGUuZy4sIFxcXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL2F3c1xcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29uc3RyYWludHNcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb25zdHJhaW50cyBzcGVjaWZpZXMgdGhlIHZlcnNpb24gY29uc3RyYWludHMgZm9yIHRoZSBwcm92aWRlciAoZS5nLiwgXFxcIn4+IDQuMFxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIGxvY2tlZCBwcm92aWRlciB2ZXJzaW9uIHNlbGVjdGVkIGR1cmluZyB0ZXJyYWZvcm0gaW5pdC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImhhc2hlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSGFzaGVzIGFyZSBjcnlwdG9ncmFwaGljIGNoZWNrc3VtcyBmb3IgdGhlIHByb3ZpZGVyIHBsdWdpbiBhcmNoaXZlcyBhY3Jvc3MgZGlmZmVyZW50IHBsYXRmb3Jtcy5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJjb25zdHJhaW50c1wiLFxuICAgICAgICBcInZlcnNpb25cIixcbiAgICAgICAgXCJoYXNoZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUZXJyYWZvcm1Mb2NrUHJvdmlkZXJFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIHByb3ZpZGVyIGVudHJ5IGluIGEgVGVycmFmb3JtIGRlcGVuZGVuY3kgbG9jayBmaWxlICgudGVycmFmb3JtLmxvY2suaGNsKS5cIlxuICAgIH0sXG4gICAgXCJXb3JkcHJlc3NQbHVnaW5FbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBsdWdpbkluc3RhbGxEaXJlY3RvcnlcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQbHVnaW5JbnN0YWxsRGlyZWN0b3J5IGlzIGRpcmVjdG9yeSBuYW1lIHdoZXJlIHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdXRob3JcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBdXRob3IgaXMgcGx1Z2luIGF1dGhvciBuYW1lXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdXRob3JVcmlcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBdXRob3JVUkkgaXMgYXV0aG9yJ3Mgd2Vic2l0ZSBVUkxcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJwbHVnaW5JbnN0YWxsRGlyZWN0b3J5XCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiV29yZHByZXNzUGx1Z2luRW50cnkgcmVwcmVzZW50cyBhbGwgbWV0YWRhdGEgcGFyc2VkIGZyb20gdGhlIHdvcmRwcmVzcyBwbHVnaW4gZmlsZVwiXG4gICAgfSxcbiAgICBcImNwZXNcIjoge1xuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQ1BFXCJcbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiXG4gICAgfSxcbiAgICBcImxpY2Vuc2VzXCI6IHtcbiAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0xpY2Vuc2VcIlxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCJcbiAgICB9XG4gIH1cbn0iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHR5cGUgeyBab2RUeXBlIH0gZnJvbSAnem9kJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0ICogYXMganNvblNjaGVtYSBmcm9tICcuLi9nZW5lcmF0ZWQvc3lmdC1zY2hlbWEuanNvbicgd2l0aCB7IHR5cGU6ICdqc29uJyB9O1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudCB9IGZyb20gJy4uL2dlbmVyYXRlZC9zeWZ0LXNjaGVtYSc7XG5cbnR5cGUgSlNPTlNjaGVtYSA9IFBhcmFtZXRlcnM8dHlwZW9mIHouZnJvbUpTT05TY2hlbWE+WzBdO1xuXG5leHBvcnQgY29uc3QgU3lmdERvY3VtZW50U2NoZW1hID0gei5mcm9tSlNPTlNjaGVtYShqc29uU2NoZW1hIGFzIEpTT05TY2hlbWEpIGFzIFpvZFR5cGU8RG9jdW1lbnQ+O1xuXG4vLyBleHBvcnQgYWxsIHN5ZnQgZ2VuZXJhdGVkIHR5cGVzXG5leHBvcnQgKiBmcm9tICcuLi9nZW5lcmF0ZWQvc3lmdC1zY2hlbWEnO1xuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAoQykgMjAyNiBSZWQgSGF0LCBJbmMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCAqIGFzIGdyeXBlIGZyb20gJy4vc2NoZW1hcy9ncnlwZSc7XG5pbXBvcnQgKiBhcyBzeWZ0IGZyb20gJy4vc2NoZW1hcy9zeWZ0JztcbmltcG9ydCB0eXBlIHsgQ2FuY2VsbGF0aW9uVG9rZW4gfSBmcm9tICdAcG9kbWFuLWRlc2t0b3AvYXBpJztcblxuZXhwb3J0IGludGVyZmFjZSBHcnlwZUV4dGVuc2lvbkFwaSB7XG4gIHNib206IHtcbiAgICBhbmFseXNlKFxuICAgICAgaW1hZ2U6IHsgZW5naW5lSWQ6IHN0cmluZzsgSWQ6IHN0cmluZyB9LFxuICAgICAgb3B0aW9ucz86IHtcbiAgICAgICAgdG9rZW4/OiBDYW5jZWxsYXRpb25Ub2tlbjtcbiAgICAgICAgdGFzaz86IHsgdGl0bGU/OiBzdHJpbmcgfTtcbiAgICAgIH0sXG4gICAgKTogUHJvbWlzZTxzeWZ0LkRvY3VtZW50PjtcbiAgfTtcblxuICB2dWxuZXJhYmlsaXR5OiB7XG4gICAgYW5hbHlzZShcbiAgICAgIGltYWdlOiB7IGVuZ2luZUlkOiBzdHJpbmc7IElkOiBzdHJpbmcgfSxcbiAgICAgIG9wdGlvbnM/OiB7XG4gICAgICAgIHRva2VuPzogQ2FuY2VsbGF0aW9uVG9rZW47XG4gICAgICAgIHRhc2s/OiB7IHRpdGxlPzogc3RyaW5nIH07XG4gICAgICB9LFxuICAgICk6IFByb21pc2U8Z3J5cGUuRG9jdW1lbnQ+O1xuICB9O1xufVxuXG4vLyBleHBvcnQgc3lmdCAmIGdyeXBlIHR5cGVzXG5leHBvcnQgeyBzeWZ0LCBncnlwZSB9O1xuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4XSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBSUE7QUFLSixTQUF5QyxhQUFhLE1BQU0sYUFBYSxRQUFRO0NBQzdFLFNBQVMsS0FBSyxNQUFNLEtBQUs7RUFDckIsSUFBSSxDQUFDLEtBQUssTUFDTixPQUFPLGVBQWUsTUFBTSxRQUFRO0dBQ2hDLE9BQU87SUFDSDtJQUNBLFFBQVE7SUFDUix3QkFBUSxJQUFJLElBQUk7R0FDcEI7R0FDQSxZQUFZO0VBQ2hCLENBQUM7RUFFTCxJQUFJLEtBQUssS0FBSyxPQUFPLElBQUksSUFBSSxHQUN6QjtFQUVKLEtBQUssS0FBSyxPQUFPLElBQUksSUFBSTtFQUN6QixZQUFZLE1BQU0sR0FBRztFQUVyQixNQUFNLFFBQVEsRUFBRTtFQUNoQixNQUFNLE9BQU8sT0FBTyxLQUFLLEtBQUs7RUFDOUIsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0dBQ2xDLE1BQU0sSUFBSSxLQUFLO0dBQ2YsSUFBSSxFQUFFLEtBQUssT0FDUCxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUMsS0FBSyxJQUFJO0VBRXBDO0NBQ0o7Q0FFQSxNQUFNLFNBQVMsUUFBUSxVQUFVO0NBQ2pDLE1BQU0sbUJBQW1CLE9BQU8sQ0FDaEM7Q0FDQSxPQUFPLGVBQWUsWUFBWSxRQUFRLEVBQUUsT0FBTyxLQUFLLENBQUM7Q0FD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
6660
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwibmFtZXMiOlsiX2EiLCJudWxsaXNoIiwiRiIsImluaXRpYWxpemVyIiwidXRpbC5qc29uU3RyaW5naWZ5UmVwbGFjZXIiLCJjb3JlLiRab2RBc3luY0Vycm9yIiwidXRpbC5maW5hbGl6ZUlzc3VlIiwiY29yZS5jb25maWciLCJwYXJzZSIsImVycm9ycy4kWm9kUmVhbEVycm9yIiwicGFyc2VBc3luYyIsImVycm9ycy4kWm9kRXJyb3IiLCJzYWZlUGFyc2UiLCJzYWZlUGFyc2VBc3luYyIsImN1aWQiLCJjdWlkMiIsInVsaWQiLCJ4aWQiLCJrc3VpZCIsIm5hbm9pZCIsImR1cmF0aW9uIiwiZ3VpZCIsInV1aWQiLCJlbWFpbCIsIl9lbW9qaSIsImVtb2ppIiwiaXB2NCIsImlwdjYiLCJtYWMiLCJ1dGlsLmVzY2FwZVJlZ2V4IiwiY2lkcnY0IiwiY2lkcnY2IiwiYmFzZTY0IiwiYmFzZTY0dXJsIiwiaG9zdG5hbWUiLCJlMTY0IiwiZGF0ZSIsInRpbWUiLCJkYXRldGltZSIsInN0cmluZyIsImJpZ2ludCIsIm51bWJlciIsImJvb2xlYW4iLCJfbnVsbCIsIl91bmRlZmluZWQiLCJoZXgiLCJ1dGlsLmZsb2F0U2FmZVJlbWFpbmRlciIsInV0aWwuTlVNQkVSX0ZPUk1BVF9SQU5HRVMiLCJyZWdleGVzLmludGVnZXIiLCJ1dGlsLkJJR0lOVF9GT1JNQVRfUkFOR0VTIiwidXRpbC5udWxsaXNoIiwidXRpbC5nZXRTaXphYmxlT3JpZ2luIiwidXRpbC5nZXRMZW5ndGhhYmxlT3JpZ2luIiwicmVnZXhlcy5sb3dlcmNhc2UiLCJyZWdleGVzLnVwcGVyY2FzZSIsInV0aWwuZXNjYXBlUmVnZXgiLCJ1dGlsLnByZWZpeElzc3VlcyIsImNvbnRlbnQiLCJ1dGlsLmFib3J0ZWQiLCJ1dGlsLmV4cGxpY2l0bHlBYm9ydGVkIiwiY29yZS4kWm9kQXN5bmNFcnJvciIsInNhZmVQYXJzZSIsInNhZmVQYXJzZUFzeW5jIiwicmVnZXhlcy5zdHJpbmciLCJyZWdleGVzLmd1aWQiLCJyZWdleGVzLnV1aWQiLCJyZWdleGVzLmVtYWlsIiwicmVnZXhlcy5lbW9qaSIsInJlZ2V4ZXMubmFub2lkIiwicmVnZXhlcy5jdWlkIiwicmVnZXhlcy5jdWlkMiIsInJlZ2V4ZXMudWxpZCIsInJlZ2V4ZXMueGlkIiwicmVnZXhlcy5rc3VpZCIsInJlZ2V4ZXMuZGF0ZXRpbWUiLCJyZWdleGVzLmRhdGUiLCJyZWdleGVzLnRpbWUiLCJyZWdleGVzLmR1cmF0aW9uIiwicmVnZXhlcy5pcHY0IiwicmVnZXhlcy5pcHY2IiwicmVnZXhlcy5tYWMiLCJyZWdleGVzLmNpZHJ2NCIsInJlZ2V4ZXMuY2lkcnY2IiwicmVnZXhlcy5iYXNlNjQiLCJyZWdleGVzLmJhc2U2NHVybCIsInJlZ2V4ZXMuZTE2NCIsInJlZ2V4ZXMubnVtYmVyIiwicmVnZXhlcy5ib29sZWFuIiwicmVnZXhlcy5iaWdpbnQiLCJyZWdleGVzLnVuZGVmaW5lZCIsInJlZ2V4ZXMubnVsbCIsInV0aWwucHJlZml4SXNzdWVzIiwidXRpbC5vcHRpb25hbEtleXMiLCJ1dGlsLmNhY2hlZCIsImlzT2JqZWN0IiwidXRpbC5pc09iamVjdCIsInV0aWwuZXNjIiwiYWxsb3dzRXZhbCIsInV0aWwuYWxsb3dzRXZhbCIsInV0aWwuZmluYWxpemVJc3N1ZSIsImNvcmUuY29uZmlnIiwidXRpbC5jbGVhblJlZ2V4IiwidXRpbC5pc1BsYWluT2JqZWN0IiwidXRpbC5nZXRFbnVtVmFsdWVzIiwidXRpbC5lc2NhcGVSZWdleCIsImNvcmUuJFpvZEVuY29kZUVycm9yIiwicGFyc2UiLCJwYXJzZUFzeW5jIiwidXRpbC5pc3N1ZSIsInV0aWwubm9ybWFsaXplUGFyYW1zIiwiX3VuZGVmaW5lZCIsIl9udWxsIiwiX3ZvaWQiLCJjaGVja3MuJFpvZENoZWNrTGVzc1RoYW4iLCJjaGVja3MuJFpvZENoZWNrR3JlYXRlclRoYW4iLCJjaGVja3MuJFpvZENoZWNrTXVsdGlwbGVPZiIsImNoZWNrcy4kWm9kQ2hlY2tNYXhTaXplIiwiY2hlY2tzLiRab2RDaGVja01pblNpemUiLCJjaGVja3MuJFpvZENoZWNrU2l6ZUVxdWFscyIsImNoZWNrcy4kWm9kQ2hlY2tNYXhMZW5ndGgiLCJjaGVja3MuJFpvZENoZWNrTWluTGVuZ3RoIiwiY2hlY2tzLiRab2RDaGVja0xlbmd0aEVxdWFscyIsImNoZWNrcy4kWm9kQ2hlY2tSZWdleCIsImNoZWNrcy4kWm9kQ2hlY2tMb3dlckNhc2UiLCJjaGVja3MuJFpvZENoZWNrVXBwZXJDYXNlIiwiY2hlY2tzLiRab2RDaGVja0luY2x1ZGVzIiwiY2hlY2tzLiRab2RDaGVja1N0YXJ0c1dpdGgiLCJjaGVja3MuJFpvZENoZWNrRW5kc1dpdGgiLCJjaGVja3MuJFpvZENoZWNrUHJvcGVydHkiLCJjaGVja3MuJFpvZENoZWNrTWltZVR5cGUiLCJjaGVja3MuJFpvZENoZWNrT3ZlcndyaXRlIiwidXRpbC5zbHVnaWZ5IiwiaXNzdWUiLCJ1dGlsLmlzc3VlIiwiY2hlY2tzLiRab2RDaGVjayIsImRlc2NyaWJlIiwibWV0YSIsInNjaGVtYXMuJFpvZENvZGVjIiwic2NoZW1hcy4kWm9kQm9vbGVhbiIsInNjaGVtYXMuJFpvZFN0cmluZyIsImNvcmUuX2lzb0RhdGVUaW1lIiwiZGF0ZSIsImNvcmUuX2lzb0RhdGUiLCJjb3JlLl9pc29UaW1lIiwiY29yZS5faXNvRHVyYXRpb24iLCJjb3JlLmZvcm1hdEVycm9yIiwiY29yZS5mbGF0dGVuRXJyb3IiLCJ1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciIsInBhcnNlLnBhcnNlIiwicGFyc2Uuc2FmZVBhcnNlIiwicGFyc2UucGFyc2VBc3luYyIsInBhcnNlLnNhZmVQYXJzZUFzeW5jIiwicGFyc2UuZW5jb2RlIiwicGFyc2UuZGVjb2RlIiwicGFyc2UuZW5jb2RlQXN5bmMiLCJwYXJzZS5kZWNvZGVBc3luYyIsInBhcnNlLnNhZmVFbmNvZGUiLCJwYXJzZS5zYWZlRGVjb2RlIiwicGFyc2Uuc2FmZUVuY29kZUFzeW5jIiwicGFyc2Uuc2FmZURlY29kZUFzeW5jIiwidXRpbC5tZXJnZURlZnMiLCJjb3JlLmNsb25lIiwiY2hlY2tzLm92ZXJ3cml0ZSIsInByb2Nlc3NvcnMuc3RyaW5nUHJvY2Vzc29yIiwiY2hlY2tzLnJlZ2V4IiwiY2hlY2tzLmluY2x1ZGVzIiwiY2hlY2tzLnN0YXJ0c1dpdGgiLCJjaGVja3MuZW5kc1dpdGgiLCJjaGVja3MubWluTGVuZ3RoIiwiY2hlY2tzLm1heExlbmd0aCIsImNoZWNrcy5sZW5ndGgiLCJjaGVja3MubG93ZXJjYXNlIiwiY2hlY2tzLnVwcGVyY2FzZSIsImNoZWNrcy50cmltIiwiY2hlY2tzLm5vcm1hbGl6ZSIsImNoZWNrcy50b0xvd2VyQ2FzZSIsImNoZWNrcy50b1VwcGVyQ2FzZSIsImNoZWNrcy5zbHVnaWZ5IiwiY29yZS5fZW1haWwiLCJjb3JlLl91cmwiLCJjb3JlLl9qd3QiLCJjb3JlLl9lbW9qaSIsImNvcmUuX2d1aWQiLCJjb3JlLl91dWlkIiwiY29yZS5fdXVpZHY0IiwiY29yZS5fdXVpZHY2IiwiY29yZS5fdXVpZHY3IiwiY29yZS5fbmFub2lkIiwiY29yZS5fY3VpZCIsImNvcmUuX2N1aWQyIiwiY29yZS5fdWxpZCIsImNvcmUuX2Jhc2U2NCIsImNvcmUuX2Jhc2U2NHVybCIsImNvcmUuX3hpZCIsImNvcmUuX2tzdWlkIiwiY29yZS5faXB2NCIsImNvcmUuX2lwdjYiLCJjb3JlLl9jaWRydjQiLCJjb3JlLl9jaWRydjYiLCJjb3JlLl9lMTY0IiwiaXNvLmRhdGV0aW1lIiwiaXNvLmRhdGUiLCJpc28udGltZSIsImlzby5kdXJhdGlvbiIsImNvcmUuX3N0cmluZyIsImNvcmUucmVnZXhlcy5odHRwUHJvdG9jb2wiLCJjb3JlLnJlZ2V4ZXMuZG9tYWluIiwidXRpbC5ub3JtYWxpemVQYXJhbXMiLCJjb3JlLl9tYWMiLCJjb3JlLl9zdHJpbmdGb3JtYXQiLCJjb3JlLnJlZ2V4ZXMuaG9zdG5hbWUiLCJjb3JlLnJlZ2V4ZXMuaGV4IiwiY29yZS5yZWdleGVzIiwicHJvY2Vzc29ycy5udW1iZXJQcm9jZXNzb3IiLCJjaGVja3MuZ3QiLCJjaGVja3MuZ3RlIiwiY2hlY2tzLmx0IiwiY2hlY2tzLmx0ZSIsImNoZWNrcy5tdWx0aXBsZU9mIiwiY29yZS5fbnVtYmVyIiwiY29yZS5faW50IiwiY29yZS5fZmxvYXQzMiIsImNvcmUuX2Zsb2F0NjQiLCJjb3JlLl9pbnQzMiIsImNvcmUuX3VpbnQzMiIsInByb2Nlc3NvcnMuYm9vbGVhblByb2Nlc3NvciIsImNvcmUuX2Jvb2xlYW4iLCJwcm9jZXNzb3JzLmJpZ2ludFByb2Nlc3NvciIsImNvcmUuX2JpZ2ludCIsImNvcmUuX2ludDY0IiwiY29yZS5fdWludDY0IiwicHJvY2Vzc29ycy5zeW1ib2xQcm9jZXNzb3IiLCJjb3JlLl9zeW1ib2wiLCJwcm9jZXNzb3JzLnVuZGVmaW5lZFByb2Nlc3NvciIsImNvcmUuX3VuZGVmaW5lZCIsInByb2Nlc3NvcnMubnVsbFByb2Nlc3NvciIsImNvcmUuX251bGwiLCJwcm9jZXNzb3JzLmFueVByb2Nlc3NvciIsImNvcmUuX2FueSIsInByb2Nlc3NvcnMudW5rbm93blByb2Nlc3NvciIsImNvcmUuX3Vua25vd24iLCJwcm9jZXNzb3JzLm5ldmVyUHJvY2Vzc29yIiwiY29yZS5fbmV2ZXIiLCJwcm9jZXNzb3JzLnZvaWRQcm9jZXNzb3IiLCJjb3JlLl92b2lkIiwicHJvY2Vzc29ycy5kYXRlUHJvY2Vzc29yIiwiY29yZS5fZGF0ZSIsInByb2Nlc3NvcnMuYXJyYXlQcm9jZXNzb3IiLCJjb3JlLl9hcnJheSIsInByb2Nlc3NvcnMub2JqZWN0UHJvY2Vzc29yIiwidXRpbC5leHRlbmQiLCJ1dGlsLnNhZmVFeHRlbmQiLCJ1dGlsLm1lcmdlIiwidXRpbC5waWNrIiwidXRpbC5vbWl0IiwidXRpbC5wYXJ0aWFsIiwidXRpbC5yZXF1aXJlZCIsInByb2Nlc3NvcnMudW5pb25Qcm9jZXNzb3IiLCJwcm9jZXNzb3JzLmludGVyc2VjdGlvblByb2Nlc3NvciIsInByb2Nlc3NvcnMudHVwbGVQcm9jZXNzb3IiLCJjb3JlLiRab2RUeXBlIiwicHJvY2Vzc29ycy5yZWNvcmRQcm9jZXNzb3IiLCJwcm9jZXNzb3JzLm1hcFByb2Nlc3NvciIsImNvcmUuX21pblNpemUiLCJjb3JlLl9tYXhTaXplIiwiY29yZS5fc2l6ZSIsInByb2Nlc3NvcnMuc2V0UHJvY2Vzc29yIiwicHJvY2Vzc29ycy5lbnVtUHJvY2Vzc29yIiwicHJvY2Vzc29ycy5saXRlcmFsUHJvY2Vzc29yIiwicHJvY2Vzc29ycy5maWxlUHJvY2Vzc29yIiwiY29yZS5fbWltZSIsImNvcmUuX2ZpbGUiLCJwcm9jZXNzb3JzLnRyYW5zZm9ybVByb2Nlc3NvciIsImNvcmUuJFpvZEVuY29kZUVycm9yIiwiaXNzdWUiLCJ1dGlsLmlzc3VlIiwicHJvY2Vzc29ycy5vcHRpb25hbFByb2Nlc3NvciIsInByb2Nlc3NvcnMubnVsbGFibGVQcm9jZXNzb3IiLCJwcm9jZXNzb3JzLmRlZmF1bHRQcm9jZXNzb3IiLCJ1dGlsLnNoYWxsb3dDbG9uZSIsInByb2Nlc3NvcnMucHJlZmF1bHRQcm9jZXNzb3IiLCJwcm9jZXNzb3JzLm5vbm9wdGlvbmFsUHJvY2Vzc29yIiwicHJvY2Vzc29ycy5zdWNjZXNzUHJvY2Vzc29yIiwicHJvY2Vzc29ycy5jYXRjaFByb2Nlc3NvciIsInByb2Nlc3NvcnMubmFuUHJvY2Vzc29yIiwiY29yZS5fbmFuIiwicHJvY2Vzc29ycy5waXBlUHJvY2Vzc29yIiwicHJvY2Vzc29ycy5yZWFkb25seVByb2Nlc3NvciIsInByb2Nlc3NvcnMudGVtcGxhdGVMaXRlcmFsUHJvY2Vzc29yIiwicHJvY2Vzc29ycy5sYXp5UHJvY2Vzc29yIiwicHJvY2Vzc29ycy5wcm9taXNlUHJvY2Vzc29yIiwicHJvY2Vzc29ycy5mdW5jdGlvblByb2Nlc3NvciIsInByb2Nlc3NvcnMuY3VzdG9tUHJvY2Vzc29yIiwiY29yZS4kWm9kQ2hlY2siLCJjb3JlLl9jdXN0b20iLCJjb3JlLl9yZWZpbmUiLCJjb3JlLl9zdXBlclJlZmluZSIsImNvcmUuZGVzY3JpYmUiLCJjb3JlLm1ldGEiLCJjb3JlLl9zdHJpbmdib29sIiwiX3NjaGVtYXMiLCJfY2hlY2tzIiwiX2lzbyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9jb3JlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL3V0aWwuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvZXJyb3JzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL3BhcnNlLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL3JlZ2V4ZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvY2hlY2tzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL2RvYy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS92ZXJzaW9ucy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9zY2hlbWFzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL3JlZ2lzdHJpZXMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvYXBpLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL3RvLWpzb24tc2NoZW1hLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL2pzb24tc2NoZW1hLXByb2Nlc3NvcnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvem9kL3Y0L2NsYXNzaWMvY2hlY2tzLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3pvZC92NC9jbGFzc2ljL2lzby5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9lcnJvcnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvem9kL3Y0L2NsYXNzaWMvcGFyc2UuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvem9kL3Y0L2NsYXNzaWMvc2NoZW1hcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9mcm9tLWpzb24tc2NoZW1hLmpzIiwiLi4vc3JjL3NjaGVtYXMvZ3J5cGUudHMiLCIuLi9zcmMvZ2VuZXJhdGVkL3N5ZnQtc2NoZW1hLmpzb24iLCIuLi9zcmMvc2NoZW1hcy9zeWZ0LnRzIiwiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfYTtcbi8qKiBBIHNwZWNpYWwgY29uc3RhbnQgd2l0aCB0eXBlIGBuZXZlcmAgKi9cbmV4cG9ydCBjb25zdCBORVZFUiA9IC8qQF9fUFVSRV9fKi8gT2JqZWN0LmZyZWV6ZSh7XG4gICAgc3RhdHVzOiBcImFib3J0ZWRcIixcbn0pO1xuZXhwb3J0IC8qQF9fTk9fU0lERV9FRkZFQ1RTX18qLyBmdW5jdGlvbiAkY29uc3RydWN0b3IobmFtZSwgaW5pdGlhbGl6ZXIsIHBhcmFtcykge1xuICAgIGZ1bmN0aW9uIGluaXQoaW5zdCwgZGVmKSB7XG4gICAgICAgIGlmICghaW5zdC5fem9kKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5zdCwgXCJfem9kXCIsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICBkZWYsXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cjogXyxcbiAgICAgICAgICAgICAgICAgICAgdHJhaXRzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnN0Ll96b2QudHJhaXRzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGluc3QuX3pvZC50cmFpdHMuYWRkKG5hbWUpO1xuICAgICAgICBpbml0aWFsaXplcihpbnN0LCBkZWYpO1xuICAgICAgICAvLyBzdXBwb3J0IHByb3RvdHlwZSBtb2RpZmljYXRpb25zXG4gICAgICAgIGNvbnN0IHByb3RvID0gXy5wcm90b3R5cGU7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm90byk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgayA9IGtleXNbaV07XG4gICAgICAgICAgICBpZiAoIShrIGluIGluc3QpKSB7XG4gICAgICAgICAgICAgICAgaW5zdFtrXSA9IHByb3RvW2tdLmJpbmQoaW5zdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gZG9lc24ndCB3b3JrIGlmIFBhcmVudCBoYXMgYSBjb25zdHJ1Y3RvciB3aXRoIGFyZ3VtZW50c1xuICAgIGNvbnN0IFBhcmVudCA9IHBhcmFtcz8uUGFyZW50ID8/IE9iamVjdDtcbiAgICBjbGFzcyBEZWZpbml0aW9uIGV4dGVuZHMgUGFyZW50IHtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERlZmluaXRpb24sIFwibmFtZVwiLCB7IHZhbHVlOiBuYW1lIH0pO1xuICAgIGZ1bmN0aW9uIF8oZGVmKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgaW5zdCA9IHBhcmFtcz8uUGFyZW50ID8gbmV3IERlZmluaXRpb24oKSA6IHRoaXM7XG4gICAgICAgIGluaXQoaW5zdCwgZGVmKTtcbiAgICAgICAgKF9hID0gaW5zdC5fem9kKS5kZWZlcnJlZCA/PyAoX2EuZGVmZXJyZWQgPSBbXSk7XG4gICAgICAgIGZvciAoY29uc3QgZm4gb2YgaW5zdC5fem9kLmRlZmVycmVkKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXywgXCJpbml0XCIsIHsgdmFsdWU6IGluaXQgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIFN5bWJvbC5oYXNJbnN0YW5jZSwge1xuICAgICAgICB2YWx1ZTogKGluc3QpID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJhbXM/LlBhcmVudCAmJiBpbnN0IGluc3RhbmNlb2YgcGFyYW1zLlBhcmVudClcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBpbnN0Py5fem9kPy50cmFpdHM/LmhhcyhuYW1lKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXywgXCJuYW1lXCIsIHsgdmFsdWU6IG5hbWUgfSk7XG4gICAgcmV0dXJuIF87XG59XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gICBVVElMSVRJRVMgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCBjb25zdCAkYnJhbmQgPSBTeW1ib2woXCJ6b2RfYnJhbmRcIik7XG5leHBvcnQgY2xhc3MgJFpvZEFzeW5jRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKGBFbmNvdW50ZXJlZCBQcm9taXNlIGR1cmluZyBzeW5jaHJvbm91cyBwYXJzZS4gVXNlIC5wYXJzZUFzeW5jKCkgaW5zdGVhZC5gKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgJFpvZEVuY29kZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICAgICAgc3VwZXIoYEVuY291bnRlcmVkIHVuaWRpcmVjdGlvbmFsIHRyYW5zZm9ybSBkdXJpbmcgZW5jb2RlOiAke25hbWV9YCk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiWm9kRW5jb2RlRXJyb3JcIjtcbiAgICB9XG59XG4oX2EgPSBnbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxDb25maWcgPz8gKF9hLl9fem9kX2dsb2JhbENvbmZpZyA9IHt9KTtcbmV4cG9ydCBjb25zdCBnbG9iYWxDb25maWcgPSBnbG9iYWxUaGlzLl9fem9kX2dsb2JhbENvbmZpZztcbmV4cG9ydCBmdW5jdGlvbiBjb25maWcobmV3Q29uZmlnKSB7XG4gICAgaWYgKG5ld0NvbmZpZylcbiAgICAgICAgT2JqZWN0LmFzc2lnbihnbG9iYWxDb25maWcsIG5ld0NvbmZpZyk7XG4gICAgcmV0dXJuIGdsb2JhbENvbmZpZztcbn1cbiIsImltcG9ydCB7IGdsb2JhbENvbmZpZyB9IGZyb20gXCIuL2NvcmUuanNcIjtcbi8vIGZ1bmN0aW9uc1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEVxdWFsKHZhbCkge1xuICAgIHJldHVybiB2YWw7XG59XG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Tm90RXF1YWwodmFsKSB7XG4gICAgcmV0dXJuIHZhbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRJcyhfYXJnKSB7IH1cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROZXZlcihfeCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVja1wiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoXykgeyB9XG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bVZhbHVlcyhlbnRyaWVzKSB7XG4gICAgY29uc3QgbnVtZXJpY1ZhbHVlcyA9IE9iamVjdC52YWx1ZXMoZW50cmllcykuZmlsdGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJudW1iZXJcIik7XG4gICAgY29uc3QgdmFsdWVzID0gT2JqZWN0LmVudHJpZXMoZW50cmllcylcbiAgICAgICAgLmZpbHRlcigoW2ssIF9dKSA9PiBudW1lcmljVmFsdWVzLmluZGV4T2YoK2spID09PSAtMSlcbiAgICAgICAgLm1hcCgoW18sIHZdKSA9PiB2KTtcbiAgICByZXR1cm4gdmFsdWVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGpvaW5WYWx1ZXMoYXJyYXksIHNlcGFyYXRvciA9IFwifFwiKSB7XG4gICAgcmV0dXJuIGFycmF5Lm1hcCgodmFsKSA9PiBzdHJpbmdpZnlQcmltaXRpdmUodmFsKSkuam9pbihzZXBhcmF0b3IpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGpzb25TdHJpbmdpZnlSZXBsYWNlcihfLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYmlnaW50XCIpXG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZWQoZ2V0dGVyKSB7XG4gICAgY29uc3Qgc2V0ID0gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgaWYgKCFzZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldHRlcigpO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInZhbHVlXCIsIHsgdmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FjaGVkIHZhbHVlIGFscmVhZHkgc2V0XCIpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gbnVsbGlzaChpbnB1dCkge1xuICAgIHJldHVybiBpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuUmVnZXgoc291cmNlKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBzb3VyY2Uuc3RhcnRzV2l0aChcIl5cIikgPyAxIDogMDtcbiAgICBjb25zdCBlbmQgPSBzb3VyY2UuZW5kc1dpdGgoXCIkXCIpID8gc291cmNlLmxlbmd0aCAtIDEgOiBzb3VyY2UubGVuZ3RoO1xuICAgIHJldHVybiBzb3VyY2Uuc2xpY2Uoc3RhcnQsIGVuZCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZmxvYXRTYWZlUmVtYWluZGVyKHZhbCwgc3RlcCkge1xuICAgIGNvbnN0IHJhdGlvID0gdmFsIC8gc3RlcDtcbiAgICBjb25zdCByb3VuZGVkUmF0aW8gPSBNYXRoLnJvdW5kKHJhdGlvKTtcbiAgICAvLyBVc2UgYSByZWxhdGl2ZSBlcHNpbG9uIHNjYWxlZCB0byB0aGUgbWFnbml0dWRlIG9mIHRoZSByZXN1bHRcbiAgICBjb25zdCB0b2xlcmFuY2UgPSBOdW1iZXIuRVBTSUxPTiAqIE1hdGgubWF4KE1hdGguYWJzKHJhdGlvKSwgMSk7XG4gICAgaWYgKE1hdGguYWJzKHJhdGlvIC0gcm91bmRlZFJhdGlvKSA8IHRvbGVyYW5jZSlcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHJhdGlvIC0gcm91bmRlZFJhdGlvO1xufVxuY29uc3QgRVZBTFVBVElORyA9IC8qIEBfX1BVUkVfXyovIFN5bWJvbChcImV2YWx1YXRpbmdcIik7XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lTGF6eShvYmplY3QsIGtleSwgZ2V0dGVyKSB7XG4gICAgbGV0IHZhbHVlID0gdW5kZWZpbmVkO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleSwge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IEVWQUxVQVRJTkcpIHtcbiAgICAgICAgICAgICAgICAvLyBDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQsIHJldHVybiB1bmRlZmluZWQgdG8gYnJlYWsgdGhlIGN5Y2xlXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBFVkFMVUFUSU5HO1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0dGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCh2KSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgICAgICAgICAvLyBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIG9iamVjdFtrZXldID0gdjtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdENsb25lKG9iaikge1xuICAgIHJldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25Qcm9wKHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wLCB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGVmcyguLi5kZWZzKSB7XG4gICAgY29uc3QgbWVyZ2VkRGVzY3JpcHRvcnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGRlZiBvZiBkZWZzKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZGVmKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihtZXJnZWREZXNjcmlwdG9ycywgZGVzY3JpcHRvcnMpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoe30sIG1lcmdlZERlc2NyaXB0b3JzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZURlZihzY2hlbWEpIHtcbiAgICByZXR1cm4gbWVyZ2VEZWZzKHNjaGVtYS5fem9kLmRlZik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEF0UGF0aChvYmosIHBhdGgpIHtcbiAgICBpZiAoIXBhdGgpXG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgcmV0dXJuIHBhdGgucmVkdWNlKChhY2MsIGtleSkgPT4gYWNjPy5ba2V5XSwgb2JqKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlQWxsT2JqZWN0KHByb21pc2VzT2JqKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb21pc2VzT2JqKTtcbiAgICBjb25zdCBwcm9taXNlcyA9IGtleXMubWFwKChrZXkpID0+IHByb21pc2VzT2JqW2tleV0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigocmVzdWx0cykgPT4ge1xuICAgICAgICBjb25zdCByZXNvbHZlZE9iaiA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlc29sdmVkT2JqW2tleXNbaV1dID0gcmVzdWx0c1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWRPYmo7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tU3RyaW5nKGxlbmd0aCA9IDEwKSB7XG4gICAgY29uc3QgY2hhcnMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCI7XG4gICAgbGV0IHN0ciA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBzdHIgKz0gY2hhcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKV07XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5leHBvcnQgZnVuY3Rpb24gZXNjKHN0cikge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzdHIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNsdWdpZnkoaW5wdXQpIHtcbiAgICByZXR1cm4gaW5wdXRcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnRyaW0oKVxuICAgICAgICAucmVwbGFjZSgvW15cXHdcXHMtXS9nLCBcIlwiKVxuICAgICAgICAucmVwbGFjZSgvW1xcc18tXSsvZywgXCItXCIpXG4gICAgICAgIC5yZXBsYWNlKC9eLSt8LSskL2csIFwiXCIpO1xufVxuZXhwb3J0IGNvbnN0IGNhcHR1cmVTdGFja1RyYWNlID0gKFwiY2FwdHVyZVN0YWNrVHJhY2VcIiBpbiBFcnJvciA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlIDogKC4uLl9hcmdzKSA9PiB7IH0pO1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KGRhdGEpIHtcbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgZGF0YSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShkYXRhKTtcbn1cbmV4cG9ydCBjb25zdCBhbGxvd3NFdmFsID0gLyogQF9fUFVSRV9fKi8gY2FjaGVkKCgpID0+IHtcbiAgICAvLyBTa2lwIHRoZSBwcm9iZSB1bmRlciBgaml0bGVzc2A6IHN0cmljdCBDU1BzIHJlcG9ydCB0aGUgY2F1Z2h0IGBuZXcgRnVuY3Rpb25gXG4gICAgLy8gYXMgYSBgc2VjdXJpdHlwb2xpY3l2aW9sYXRpb25gIGV2ZW4gdGhvdWdoIHRoZSB0aHJvdyBpcyBzd2FsbG93ZWQuXG4gICAgaWYgKGdsb2JhbENvbmZpZy5qaXRsZXNzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIG5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcyhcIkNsb3VkZmxhcmVcIikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBGID0gRnVuY3Rpb247XG4gICAgICAgIG5ldyBGKFwiXCIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY2F0Y2ggKF8pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qobykge1xuICAgIGlmIChpc09iamVjdChvKSA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBtb2RpZmllZCBjb25zdHJ1Y3RvclxuICAgIGNvbnN0IGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuICAgIGlmIChjdG9yID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICh0eXBlb2YgY3RvciAhPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyBtb2RpZmllZCBwcm90b3R5cGVcbiAgICBjb25zdCBwcm90ID0gY3Rvci5wcm90b3R5cGU7XG4gICAgaWYgKGlzT2JqZWN0KHByb3QpID09PSBmYWxzZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGN0b3IgZG9lc24ndCBoYXZlIHN0YXRpYyBgaXNQcm90b3R5cGVPZmBcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3QsIFwiaXNQcm90b3R5cGVPZlwiKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93Q2xvbmUobykge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG8pKVxuICAgICAgICByZXR1cm4geyAuLi5vIH07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobykpXG4gICAgICAgIHJldHVybiBbLi4ub107XG4gICAgaWYgKG8gaW5zdGFuY2VvZiBNYXApXG4gICAgICAgIHJldHVybiBuZXcgTWFwKG8pO1xuICAgIGlmIChvIGluc3RhbmNlb2YgU2V0KVxuICAgICAgICByZXR1cm4gbmV3IFNldChvKTtcbiAgICByZXR1cm4gbztcbn1cbmV4cG9ydCBmdW5jdGlvbiBudW1LZXlzKGRhdGEpIHtcbiAgICBsZXQga2V5Q291bnQgPSAwO1xuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSB7XG4gICAgICAgICAgICBrZXlDb3VudCsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBrZXlDb3VudDtcbn1cbmV4cG9ydCBjb25zdCBnZXRQYXJzZWRUeXBlID0gKGRhdGEpID0+IHtcbiAgICBjb25zdCB0ID0gdHlwZW9mIGRhdGE7XG4gICAgc3dpdGNoICh0KSB7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc05hTihkYXRhKSA/IFwibmFuXCIgOiBcIm51bWJlclwiO1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgIHJldHVybiBcImZ1bmN0aW9uXCI7XG4gICAgICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgICAgICAgIHJldHVybiBcImJpZ2ludFwiO1xuICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzeW1ib2xcIjtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS50aGVuICYmIHR5cGVvZiBkYXRhLnRoZW4gPT09IFwiZnVuY3Rpb25cIiAmJiBkYXRhLmNhdGNoICYmIHR5cGVvZiBkYXRhLmNhdGNoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJwcm9taXNlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibWFwXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIFNldCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2V0XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIERhdGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAodHlwZW9mIEZpbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJmaWxlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHByb3BlcnR5S2V5VHlwZXMgPSAvKiBAX19QVVJFX18qLyBuZXcgU2V0KFtcInN0cmluZ1wiLCBcIm51bWJlclwiLCBcInN5bWJvbFwiXSk7XG5leHBvcnQgY29uc3QgcHJpbWl0aXZlVHlwZXMgPSAvKiBAX19QVVJFX18qLyBuZXcgU2V0KFtcbiAgICBcInN0cmluZ1wiLFxuICAgIFwibnVtYmVyXCIsXG4gICAgXCJiaWdpbnRcIixcbiAgICBcImJvb2xlYW5cIixcbiAgICBcInN5bWJvbFwiLFxuICAgIFwidW5kZWZpbmVkXCIsXG5dKTtcbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVSZWdleChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBcIlxcXFwkJlwiKTtcbn1cbi8vIHpvZC1zcGVjaWZpYyB1dGlsc1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGluc3QsIGRlZiwgcGFyYW1zKSB7XG4gICAgY29uc3QgY2wgPSBuZXcgaW5zdC5fem9kLmNvbnN0cihkZWYgPz8gaW5zdC5fem9kLmRlZik7XG4gICAgaWYgKCFkZWYgfHwgcGFyYW1zPy5wYXJlbnQpXG4gICAgICAgIGNsLl96b2QucGFyZW50ID0gaW5zdDtcbiAgICByZXR1cm4gY2w7XG59XG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUGFyYW1zKF9wYXJhbXMpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBfcGFyYW1zO1xuICAgIGlmICghcGFyYW1zKVxuICAgICAgICByZXR1cm4ge307XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMgPT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiB7IGVycm9yOiAoKSA9PiBwYXJhbXMgfTtcbiAgICBpZiAocGFyYW1zPy5tZXNzYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHBhcmFtcz8uZXJyb3IgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzcGVjaWZ5IGJvdGggYG1lc3NhZ2VgIGFuZCBgZXJyb3JgIHBhcmFtc1wiKTtcbiAgICAgICAgcGFyYW1zLmVycm9yID0gcGFyYW1zLm1lc3NhZ2U7XG4gICAgfVxuICAgIGRlbGV0ZSBwYXJhbXMubWVzc2FnZTtcbiAgICBpZiAodHlwZW9mIHBhcmFtcy5lcnJvciA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmV0dXJuIHsgLi4ucGFyYW1zLCBlcnJvcjogKCkgPT4gcGFyYW1zLmVycm9yIH07XG4gICAgcmV0dXJuIHBhcmFtcztcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUcmFuc3BhcmVudFByb3h5KGdldHRlcikge1xuICAgIGxldCB0YXJnZXQ7XG4gICAgcmV0dXJuIG5ldyBQcm94eSh7fSwge1xuICAgICAgICBnZXQoXywgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgIHRhcmdldCA/PyAodGFyZ2V0ID0gZ2V0dGVyKCkpO1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQoXywgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB0YXJnZXQgPz8gKHRhcmdldCA9IGdldHRlcigpKTtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcik7XG4gICAgICAgIH0sXG4gICAgICAgIGhhcyhfLCBwcm9wKSB7XG4gICAgICAgICAgICB0YXJnZXQgPz8gKHRhcmdldCA9IGdldHRlcigpKTtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3ApO1xuICAgICAgICB9LFxuICAgICAgICBkZWxldGVQcm9wZXJ0eShfLCBwcm9wKSB7XG4gICAgICAgICAgICB0YXJnZXQgPz8gKHRhcmdldCA9IGdldHRlcigpKTtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCk7XG4gICAgICAgIH0sXG4gICAgICAgIG93bktleXMoXykge1xuICAgICAgICAgICAgdGFyZ2V0ID8/ICh0YXJnZXQgPSBnZXR0ZXIoKSk7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRhcmdldCk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihfLCBwcm9wKSB7XG4gICAgICAgICAgICB0YXJnZXQgPz8gKHRhcmdldCA9IGdldHRlcigpKTtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3ApO1xuICAgICAgICB9LFxuICAgICAgICBkZWZpbmVQcm9wZXJ0eShfLCBwcm9wLCBkZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICB0YXJnZXQgPz8gKHRhcmdldCA9IGdldHRlcigpKTtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcCwgZGVzY3JpcHRvcik7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5UHJpbWl0aXZlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJiaWdpbnRcIilcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkgKyBcIm5cIjtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImA7XG4gICAgcmV0dXJuIGAke3ZhbHVlfWA7XG59XG5leHBvcnQgZnVuY3Rpb24gb3B0aW9uYWxLZXlzKHNoYXBlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNoYXBlKS5maWx0ZXIoKGspID0+IHtcbiAgICAgICAgcmV0dXJuIHNoYXBlW2tdLl96b2Qub3B0aW4gPT09IFwib3B0aW9uYWxcIiAmJiBzaGFwZVtrXS5fem9kLm9wdG91dCA9PT0gXCJvcHRpb25hbFwiO1xuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IE5VTUJFUl9GT1JNQVRfUkFOR0VTID0ge1xuICAgIHNhZmVpbnQ6IFtOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJdLFxuICAgIGludDMyOiBbLTIxNDc0ODM2NDgsIDIxNDc0ODM2NDddLFxuICAgIHVpbnQzMjogWzAsIDQyOTQ5NjcyOTVdLFxuICAgIGZsb2F0MzI6IFstMy40MDI4MjM0NjYzODUyODg2ZTM4LCAzLjQwMjgyMzQ2NjM4NTI4ODZlMzhdLFxuICAgIGZsb2F0NjQ6IFstTnVtYmVyLk1BWF9WQUxVRSwgTnVtYmVyLk1BWF9WQUxVRV0sXG59O1xuZXhwb3J0IGNvbnN0IEJJR0lOVF9GT1JNQVRfUkFOR0VTID0ge1xuICAgIGludDY0OiBbLyogQF9fUFVSRV9fKi8gQmlnSW50KFwiLTkyMjMzNzIwMzY4NTQ3NzU4MDhcIiksIC8qIEBfX1BVUkVfXyovIEJpZ0ludChcIjkyMjMzNzIwMzY4NTQ3NzU4MDdcIildLFxuICAgIHVpbnQ2NDogWy8qIEBfX1BVUkVfXyovIEJpZ0ludCgwKSwgLyogQF9fUFVSRV9fKi8gQmlnSW50KFwiMTg0NDY3NDQwNzM3MDk1NTE2MTVcIildLFxufTtcbmV4cG9ydCBmdW5jdGlvbiBwaWNrKHNjaGVtYSwgbWFzaykge1xuICAgIGNvbnN0IGN1cnJEZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgY2hlY2tzID0gY3VyckRlZi5jaGVja3M7XG4gICAgY29uc3QgaGFzQ2hlY2tzID0gY2hlY2tzICYmIGNoZWNrcy5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGVja3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiLnBpY2soKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzXCIpO1xuICAgIH1cbiAgICBjb25zdCBkZWYgPSBtZXJnZURlZnMoc2NoZW1hLl96b2QuZGVmLCB7XG4gICAgICAgIGdldCBzaGFwZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NoYXBlID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtYXNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIGN1cnJEZWYuc2hhcGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGtleTogXCIke2tleX1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIW1hc2tba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IGN1cnJEZWYuc2hhcGVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBuZXdTaGFwZSk7IC8vIHNlbGYtY2FjaGluZ1xuICAgICAgICAgICAgcmV0dXJuIG5ld1NoYXBlO1xuICAgICAgICB9LFxuICAgICAgICBjaGVja3M6IFtdLFxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZShzY2hlbWEsIGRlZik7XG59XG5leHBvcnQgZnVuY3Rpb24gb21pdChzY2hlbWEsIG1hc2spIHtcbiAgICBjb25zdCBjdXJyRGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIGNvbnN0IGNoZWNrcyA9IGN1cnJEZWYuY2hlY2tzO1xuICAgIGNvbnN0IGhhc0NoZWNrcyA9IGNoZWNrcyAmJiBjaGVja3MubGVuZ3RoID4gMDtcbiAgICBpZiAoaGFzQ2hlY2tzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIi5vbWl0KCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c1wiKTtcbiAgICB9XG4gICAgY29uc3QgZGVmID0gbWVyZ2VEZWZzKHNjaGVtYS5fem9kLmRlZiwge1xuICAgICAgICBnZXQgc2hhcGUoKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTaGFwZSA9IHsgLi4uc2NoZW1hLl96b2QuZGVmLnNoYXBlIH07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtYXNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIGN1cnJEZWYuc2hhcGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGtleTogXCIke2tleX1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIW1hc2tba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld1NoYXBlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3NpZ25Qcm9wKHRoaXMsIFwic2hhcGVcIiwgbmV3U2hhcGUpOyAvLyBzZWxmLWNhY2hpbmdcbiAgICAgICAgICAgIHJldHVybiBuZXdTaGFwZTtcbiAgICAgICAgfSxcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmUoc2NoZW1hLCBkZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChzY2hlbWEsIHNoYXBlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHNoYXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IHRvIGV4dGVuZDogZXhwZWN0ZWQgYSBwbGFpbiBvYmplY3RcIik7XG4gICAgfVxuICAgIGNvbnN0IGNoZWNrcyA9IHNjaGVtYS5fem9kLmRlZi5jaGVja3M7XG4gICAgY29uc3QgaGFzQ2hlY2tzID0gY2hlY2tzICYmIGNoZWNrcy5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGVja3MpIHtcbiAgICAgICAgLy8gT25seSB0aHJvdyBpZiBuZXcgc2hhcGUgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzaGFwZVxuICAgICAgICAvLyBVc2UgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIHRvIGNoZWNrIGtleSBleGlzdGVuY2Ugd2l0aG91dCBhY2Nlc3NpbmcgdmFsdWVzXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nU2hhcGUgPSBzY2hlbWEuX3pvZC5kZWYuc2hhcGU7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNoYXBlKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGlzdGluZ1NoYXBlLCBrZXkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgb3ZlcndyaXRlIGtleXMgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cy4gVXNlIGAuc2FmZUV4dGVuZCgpYCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkZWYgPSBtZXJnZURlZnMoc2NoZW1hLl96b2QuZGVmLCB7XG4gICAgICAgIGdldCBzaGFwZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IF9zaGFwZSA9IHsgLi4uc2NoZW1hLl96b2QuZGVmLnNoYXBlLCAuLi5zaGFwZSB9O1xuICAgICAgICAgICAgYXNzaWduUHJvcCh0aGlzLCBcInNoYXBlXCIsIF9zaGFwZSk7IC8vIHNlbGYtY2FjaGluZ1xuICAgICAgICAgICAgcmV0dXJuIF9zaGFwZTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmUoc2NoZW1hLCBkZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVFeHRlbmQoc2NoZW1hLCBzaGFwZSkge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChzaGFwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdFwiKTtcbiAgICB9XG4gICAgY29uc3QgZGVmID0gbWVyZ2VEZWZzKHNjaGVtYS5fem9kLmRlZiwge1xuICAgICAgICBnZXQgc2hhcGUoKSB7XG4gICAgICAgICAgICBjb25zdCBfc2hhcGUgPSB7IC4uLnNjaGVtYS5fem9kLmRlZi5zaGFwZSwgLi4uc2hhcGUgfTtcbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBfc2hhcGUpOyAvLyBzZWxmLWNhY2hpbmdcbiAgICAgICAgICAgIHJldHVybiBfc2hhcGU7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lKHNjaGVtYSwgZGVmKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhLCBiKSB7XG4gICAgaWYgKGEuX3pvZC5kZWYuY2hlY2tzPy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiLm1lcmdlKCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cy4gVXNlIC5zYWZlRXh0ZW5kKCkgaW5zdGVhZC5cIik7XG4gICAgfVxuICAgIGNvbnN0IGRlZiA9IG1lcmdlRGVmcyhhLl96b2QuZGVmLCB7XG4gICAgICAgIGdldCBzaGFwZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IF9zaGFwZSA9IHsgLi4uYS5fem9kLmRlZi5zaGFwZSwgLi4uYi5fem9kLmRlZi5zaGFwZSB9O1xuICAgICAgICAgICAgYXNzaWduUHJvcCh0aGlzLCBcInNoYXBlXCIsIF9zaGFwZSk7IC8vIHNlbGYtY2FjaGluZ1xuICAgICAgICAgICAgcmV0dXJuIF9zaGFwZTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGNhdGNoYWxsKCkge1xuICAgICAgICAgICAgcmV0dXJuIGIuX3pvZC5kZWYuY2F0Y2hhbGw7XG4gICAgICAgIH0sXG4gICAgICAgIGNoZWNrczogYi5fem9kLmRlZi5jaGVja3MgPz8gW10sXG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lKGEsIGRlZik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbChDbGFzcywgc2NoZW1hLCBtYXNrKSB7XG4gICAgY29uc3QgY3VyckRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBjb25zdCBjaGVja3MgPSBjdXJyRGVmLmNoZWNrcztcbiAgICBjb25zdCBoYXNDaGVja3MgPSBjaGVja3MgJiYgY2hlY2tzLmxlbmd0aCA+IDA7XG4gICAgaWYgKGhhc0NoZWNrcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIucGFydGlhbCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHNcIik7XG4gICAgfVxuICAgIGNvbnN0IGRlZiA9IG1lcmdlRGVmcyhzY2hlbWEuX3pvZC5kZWYsIHtcbiAgICAgICAgZ2V0IHNoYXBlKCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkU2hhcGUgPSBzY2hlbWEuX3pvZC5kZWYuc2hhcGU7XG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IHsgLi4ub2xkU2hhcGUgfTtcbiAgICAgICAgICAgIGlmIChtYXNrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbWFzaykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gb2xkU2hhcGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBrZXk6IFwiJHtrZXl9XCJgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc2tba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiAob2xkU2hhcGVba2V5XSEuX3pvZC5vcHRpbiA9PT0gXCJvcHRpb25hbFwiKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVba2V5XSA9IENsYXNzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBDbGFzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvcHRpb25hbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyVHlwZTogb2xkU2hhcGVba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG9sZFNoYXBlW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2xkU2hhcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKG9sZFNoYXBlW2tleV0hLl96b2Qub3B0aW4gPT09IFwib3B0aW9uYWxcIikgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSBDbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgQ2xhc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwib3B0aW9uYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lclR5cGU6IG9sZFNoYXBlW2tleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBvbGRTaGFwZVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBzaGFwZSk7IC8vIHNlbGYtY2FjaGluZ1xuICAgICAgICAgICAgcmV0dXJuIHNoYXBlO1xuICAgICAgICB9LFxuICAgICAgICBjaGVja3M6IFtdLFxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZShzY2hlbWEsIGRlZik7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZWQoQ2xhc3MsIHNjaGVtYSwgbWFzaykge1xuICAgIGNvbnN0IGRlZiA9IG1lcmdlRGVmcyhzY2hlbWEuX3pvZC5kZWYsIHtcbiAgICAgICAgZ2V0IHNoYXBlKCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkU2hhcGUgPSBzY2hlbWEuX3pvZC5kZWYuc2hhcGU7XG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IHsgLi4ub2xkU2hhcGUgfTtcbiAgICAgICAgICAgIGlmIChtYXNrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbWFzaykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gc2hhcGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBrZXk6IFwiJHtrZXl9XCJgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc2tba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBvdmVyd3JpdGUgd2l0aCBub24tb3B0aW9uYWxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVba2V5XSA9IG5ldyBDbGFzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm5vbm9wdGlvbmFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbm5lclR5cGU6IG9sZFNoYXBlW2tleV0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9sZFNoYXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG92ZXJ3cml0ZSB3aXRoIG5vbi1vcHRpb25hbFxuICAgICAgICAgICAgICAgICAgICBzaGFwZVtrZXldID0gbmV3IENsYXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibm9ub3B0aW9uYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyVHlwZTogb2xkU2hhcGVba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXNzaWduUHJvcCh0aGlzLCBcInNoYXBlXCIsIHNoYXBlKTsgLy8gc2VsZi1jYWNoaW5nXG4gICAgICAgICAgICByZXR1cm4gc2hhcGU7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lKHNjaGVtYSwgZGVmKTtcbn1cbi8vIGludmFsaWRfdHlwZSB8IHRvb19iaWcgfCB0b29fc21hbGwgfCBpbnZhbGlkX2Zvcm1hdCB8IG5vdF9tdWx0aXBsZV9vZiB8IHVucmVjb2duaXplZF9rZXlzIHwgaW52YWxpZF91bmlvbiB8IGludmFsaWRfa2V5IHwgaW52YWxpZF9lbGVtZW50IHwgaW52YWxpZF92YWx1ZSB8IGN1c3RvbVxuZXhwb3J0IGZ1bmN0aW9uIGFib3J0ZWQoeCwgc3RhcnRJbmRleCA9IDApIHtcbiAgICBpZiAoeC5hYm9ydGVkID09PSB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IHguaXNzdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh4Lmlzc3Vlc1tpXT8uY29udGludWUgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8vIENoZWNrcyBmb3IgZXhwbGljaXQgYWJvcnQgKGNvbnRpbnVlID09PSBmYWxzZSksIGFzIG9wcG9zZWQgdG8gaW1wbGljaXQgYWJvcnQgKGNvbnRpbnVlID09PSB1bmRlZmluZWQpLlxuLy8gVXNlZCB0byByZXNwZWN0IGBhYm9ydDogdHJ1ZWAgaW4gLnJlZmluZSgpIGV2ZW4gZm9yIGNoZWNrcyB0aGF0IGhhdmUgYSBgd2hlbmAgZnVuY3Rpb24uXG5leHBvcnQgZnVuY3Rpb24gZXhwbGljaXRseUFib3J0ZWQoeCwgc3RhcnRJbmRleCA9IDApIHtcbiAgICBpZiAoeC5hYm9ydGVkID09PSB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IHguaXNzdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh4Lmlzc3Vlc1tpXT8uY29udGludWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJlZml4SXNzdWVzKHBhdGgsIGlzc3Vlcykge1xuICAgIHJldHVybiBpc3N1ZXMubWFwKChpc3MpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSBpc3MpLnBhdGggPz8gKF9hLnBhdGggPSBbXSk7XG4gICAgICAgIGlzcy5wYXRoLnVuc2hpZnQocGF0aCk7XG4gICAgICAgIHJldHVybiBpc3M7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdW53cmFwTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiID8gbWVzc2FnZSA6IG1lc3NhZ2U/Lm1lc3NhZ2U7XG59XG5leHBvcnQgZnVuY3Rpb24gZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29uZmlnKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGlzcy5tZXNzYWdlXG4gICAgICAgID8gaXNzLm1lc3NhZ2VcbiAgICAgICAgOiAodW53cmFwTWVzc2FnZShpc3MuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oaXNzKSkgPz9cbiAgICAgICAgICAgIHVud3JhcE1lc3NhZ2UoY3R4Py5lcnJvcj8uKGlzcykpID8/XG4gICAgICAgICAgICB1bndyYXBNZXNzYWdlKGNvbmZpZy5jdXN0b21FcnJvcj8uKGlzcykpID8/XG4gICAgICAgICAgICB1bndyYXBNZXNzYWdlKGNvbmZpZy5sb2NhbGVFcnJvcj8uKGlzcykpID8/XG4gICAgICAgICAgICBcIkludmFsaWQgaW5wdXRcIik7XG4gICAgY29uc3QgeyBpbnN0OiBfaW5zdCwgY29udGludWU6IF9jb250aW51ZSwgaW5wdXQ6IF9pbnB1dCwgLi4ucmVzdCB9ID0gaXNzO1xuICAgIHJlc3QucGF0aCA/PyAocmVzdC5wYXRoID0gW10pO1xuICAgIHJlc3QubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgaWYgKGN0eD8ucmVwb3J0SW5wdXQpIHtcbiAgICAgICAgcmVzdC5pbnB1dCA9IF9pbnB1dDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3Q7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2l6YWJsZU9yaWdpbihpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFNldClcbiAgICAgICAgcmV0dXJuIFwic2V0XCI7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgTWFwKVxuICAgICAgICByZXR1cm4gXCJtYXBcIjtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgRmlsZSlcbiAgICAgICAgcmV0dXJuIFwiZmlsZVwiO1xuICAgIHJldHVybiBcInVua25vd25cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRMZW5ndGhhYmxlT3JpZ2luKGlucHV0KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKVxuICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIHJldHVybiBcInVua25vd25cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZWRUeXBlKGRhdGEpIHtcbiAgICBjb25zdCB0ID0gdHlwZW9mIGRhdGE7XG4gICAgc3dpdGNoICh0KSB7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjoge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc05hTihkYXRhKSA/IFwibmFuXCIgOiBcIm51bWJlclwiO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcImFycmF5XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvYmogPSBkYXRhO1xuICAgICAgICAgICAgaWYgKG9iaiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBcImNvbnN0cnVjdG9yXCIgaW4gb2JqICYmIG9iai5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmouY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc3N1ZSguLi5hcmdzKSB7XG4gICAgY29uc3QgW2lzcywgaW5wdXQsIGluc3RdID0gYXJncztcbiAgICBpZiAodHlwZW9mIGlzcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWVzc2FnZTogaXNzLFxuICAgICAgICAgICAgY29kZTogXCJjdXN0b21cIixcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgLi4uaXNzIH07XG59XG5leHBvcnQgZnVuY3Rpb24gY2xlYW5FbnVtKG9iaikge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhvYmopXG4gICAgICAgIC5maWx0ZXIoKFtrLCBfXSkgPT4ge1xuICAgICAgICAvLyByZXR1cm4gdHJ1ZSBpZiBOYU4sIG1lYW5pbmcgaXQncyBub3QgYSBudW1iZXIsIHRodXMgYSBzdHJpbmcga2V5XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlSW50KGssIDEwKSk7XG4gICAgfSlcbiAgICAgICAgLm1hcCgoZWwpID0+IGVsWzFdKTtcbn1cbi8vIENvZGVjIHV0aWxpdHkgZnVuY3Rpb25zXG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0VG9VaW50OEFycmF5KGJhc2U2NCkge1xuICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IGF0b2IoYmFzZTY0KTtcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpbmFyeVN0cmluZy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmluYXJ5U3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJ5dGVzW2ldID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbn1cbmV4cG9ydCBmdW5jdGlvbiB1aW50OEFycmF5VG9CYXNlNjQoYnl0ZXMpIHtcbiAgICBsZXQgYmluYXJ5U3RyaW5nID0gXCJcIjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJpbmFyeVN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ0b2EoYmluYXJ5U3RyaW5nKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBiYXNlNjR1cmxUb1VpbnQ4QXJyYXkoYmFzZTY0dXJsKSB7XG4gICAgY29uc3QgYmFzZTY0ID0gYmFzZTY0dXJsLnJlcGxhY2UoLy0vZywgXCIrXCIpLnJlcGxhY2UoL18vZywgXCIvXCIpO1xuICAgIGNvbnN0IHBhZGRpbmcgPSBcIj1cIi5yZXBlYXQoKDQgLSAoYmFzZTY0Lmxlbmd0aCAlIDQpKSAlIDQpO1xuICAgIHJldHVybiBiYXNlNjRUb1VpbnQ4QXJyYXkoYmFzZTY0ICsgcGFkZGluZyk7XG59XG5leHBvcnQgZnVuY3Rpb24gdWludDhBcnJheVRvQmFzZTY0dXJsKGJ5dGVzKSB7XG4gICAgcmV0dXJuIHVpbnQ4QXJyYXlUb0Jhc2U2NChieXRlcykucmVwbGFjZSgvXFwrL2csIFwiLVwiKS5yZXBsYWNlKC9cXC8vZywgXCJfXCIpLnJlcGxhY2UoLz0vZywgXCJcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gaGV4VG9VaW50OEFycmF5KGhleCkge1xuICAgIGNvbnN0IGNsZWFuSGV4ID0gaGV4LnJlcGxhY2UoL14weC8sIFwiXCIpO1xuICAgIGlmIChjbGVhbkhleC5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGhcIik7XG4gICAgfVxuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoY2xlYW5IZXgubGVuZ3RoIC8gMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGVhbkhleC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBieXRlc1tpIC8gMl0gPSBOdW1iZXIucGFyc2VJbnQoY2xlYW5IZXguc2xpY2UoaSwgaSArIDIpLCAxNik7XG4gICAgfVxuICAgIHJldHVybiBieXRlcztcbn1cbmV4cG9ydCBmdW5jdGlvbiB1aW50OEFycmF5VG9IZXgoYnl0ZXMpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShieXRlcylcbiAgICAgICAgLm1hcCgoYikgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKVxuICAgICAgICAuam9pbihcIlwiKTtcbn1cbi8vIGluc3RhbmNlb2ZcbmV4cG9ydCBjbGFzcyBDbGFzcyB7XG4gICAgY29uc3RydWN0b3IoLi4uX2FyZ3MpIHsgfVxufVxuIiwiaW1wb3J0IHsgJGNvbnN0cnVjdG9yIH0gZnJvbSBcIi4vY29yZS5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi91dGlsLmpzXCI7XG5jb25zdCBpbml0aWFsaXplciA9IChpbnN0LCBkZWYpID0+IHtcbiAgICBpbnN0Lm5hbWUgPSBcIiRab2RFcnJvclwiO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0LCBcIl96b2RcIiwge1xuICAgICAgICB2YWx1ZTogaW5zdC5fem9kLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5zdCwgXCJpc3N1ZXNcIiwge1xuICAgICAgICB2YWx1ZTogZGVmLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgICBpbnN0Lm1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShkZWYsIHV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyLCAyKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5zdCwgXCJ0b1N0cmluZ1wiLCB7XG4gICAgICAgIHZhbHVlOiAoKSA9PiBpbnN0Lm1lc3NhZ2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIH0pO1xufTtcbmV4cG9ydCBjb25zdCAkWm9kRXJyb3IgPSAkY29uc3RydWN0b3IoXCIkWm9kRXJyb3JcIiwgaW5pdGlhbGl6ZXIpO1xuZXhwb3J0IGNvbnN0ICRab2RSZWFsRXJyb3IgPSAkY29uc3RydWN0b3IoXCIkWm9kRXJyb3JcIiwgaW5pdGlhbGl6ZXIsIHsgUGFyZW50OiBFcnJvciB9KTtcbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuRXJyb3IoZXJyb3IsIG1hcHBlciA9IChpc3N1ZSkgPT4gaXNzdWUubWVzc2FnZSkge1xuICAgIGNvbnN0IGZpZWxkRXJyb3JzID0ge307XG4gICAgY29uc3QgZm9ybUVycm9ycyA9IFtdO1xuICAgIGZvciAoY29uc3Qgc3ViIG9mIGVycm9yLmlzc3Vlcykge1xuICAgICAgICBpZiAoc3ViLnBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZmllbGRFcnJvcnNbc3ViLnBhdGhbMF1dID0gZmllbGRFcnJvcnNbc3ViLnBhdGhbMF1dIHx8IFtdO1xuICAgICAgICAgICAgZmllbGRFcnJvcnNbc3ViLnBhdGhbMF1dLnB1c2gobWFwcGVyKHN1YikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9ybUVycm9ycy5wdXNoKG1hcHBlcihzdWIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBmb3JtRXJyb3JzLCBmaWVsZEVycm9ycyB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEVycm9yKGVycm9yLCBtYXBwZXIgPSAoaXNzdWUpID0+IGlzc3VlLm1lc3NhZ2UpIHtcbiAgICBjb25zdCBmaWVsZEVycm9ycyA9IHsgX2Vycm9yczogW10gfTtcbiAgICBjb25zdCBwcm9jZXNzRXJyb3IgPSAoZXJyb3IsIHBhdGggPSBbXSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGVycm9yLmlzc3Vlcykge1xuICAgICAgICAgICAgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF91bmlvblwiICYmIGlzc3VlLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBpc3N1ZS5lcnJvcnMubWFwKChpc3N1ZXMpID0+IHByb2Nlc3NFcnJvcih7IGlzc3VlcyB9LCBbLi4ucGF0aCwgLi4uaXNzdWUucGF0aF0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9rZXlcIikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NFcnJvcih7IGlzc3VlczogaXNzdWUuaXNzdWVzIH0sIFsuLi5wYXRoLCAuLi5pc3N1ZS5wYXRoXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfZWxlbWVudFwiKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Vycm9yKHsgaXNzdWVzOiBpc3N1ZS5pc3N1ZXMgfSwgWy4uLnBhdGgsIC4uLmlzc3VlLnBhdGhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gWy4uLnBhdGgsIC4uLmlzc3VlLnBhdGhdO1xuICAgICAgICAgICAgICAgIGlmIChmdWxscGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvcnMuX2Vycm9ycy5wdXNoKG1hcHBlcihpc3N1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBmaWVsZEVycm9ycztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGZ1bGxwYXRoLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSBmdWxscGF0aFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlcm1pbmFsID0gaSA9PT0gZnVsbHBhdGgubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGVybWluYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHsgX2Vycm9yczogW10gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgeyBfZXJyb3JzOiBbXSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdLl9lcnJvcnMucHVzaChtYXBwZXIoaXNzdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyW2VsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcHJvY2Vzc0Vycm9yKGVycm9yKTtcbiAgICByZXR1cm4gZmllbGRFcnJvcnM7XG59XG5leHBvcnQgZnVuY3Rpb24gdHJlZWlmeUVycm9yKGVycm9yLCBtYXBwZXIgPSAoaXNzdWUpID0+IGlzc3VlLm1lc3NhZ2UpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7IGVycm9yczogW10gfTtcbiAgICBjb25zdCBwcm9jZXNzRXJyb3IgPSAoZXJyb3IsIHBhdGggPSBbXSkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGVycm9yLmlzc3Vlcykge1xuICAgICAgICAgICAgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF91bmlvblwiICYmIGlzc3VlLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAvLyByZWd1bGFyIHVuaW9uIGVycm9yXG4gICAgICAgICAgICAgICAgaXNzdWUuZXJyb3JzLm1hcCgoaXNzdWVzKSA9PiBwcm9jZXNzRXJyb3IoeyBpc3N1ZXMgfSwgWy4uLnBhdGgsIC4uLmlzc3VlLnBhdGhdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfa2V5XCIpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzRXJyb3IoeyBpc3N1ZXM6IGlzc3VlLmlzc3VlcyB9LCBbLi4ucGF0aCwgLi4uaXNzdWUucGF0aF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX2VsZW1lbnRcIikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NFcnJvcih7IGlzc3VlczogaXNzdWUuaXNzdWVzIH0sIFsuLi5wYXRoLCAuLi5pc3N1ZS5wYXRoXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmdWxscGF0aCA9IFsuLi5wYXRoLCAuLi5pc3N1ZS5wYXRoXTtcbiAgICAgICAgICAgICAgICBpZiAoZnVsbHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lcnJvcnMucHVzaChtYXBwZXIoaXNzdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBjdXJyID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGZ1bGxwYXRoLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbCA9IGZ1bGxwYXRoW2ldO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXJtaW5hbCA9IGkgPT09IGZ1bGxwYXRoLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnIucHJvcGVydGllcyA/PyAoY3Vyci5wcm9wZXJ0aWVzID0ge30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgKF9hID0gY3Vyci5wcm9wZXJ0aWVzKVtlbF0gPz8gKF9hW2VsXSA9IHsgZXJyb3JzOiBbXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLnByb3BlcnRpZXNbZWxdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyci5pdGVtcyA/PyAoY3Vyci5pdGVtcyA9IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIChfYiA9IGN1cnIuaXRlbXMpW2VsXSA/PyAoX2JbZWxdID0geyBlcnJvcnM6IFtdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIuaXRlbXNbZWxdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyci5lcnJvcnMucHVzaChtYXBwZXIoaXNzdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBwcm9jZXNzRXJyb3IoZXJyb3IpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKiogRm9ybWF0IGEgWm9kRXJyb3IgYXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgaW4gdGhlIGZvbGxvd2luZyBmb3JtLlxuICpcbiAqIEZyb21cbiAqXG4gKiBgYGB0c1xuICogWm9kRXJyb3Ige1xuICogICBpc3N1ZXM6IFtcbiAqICAgICB7XG4gKiAgICAgICBleHBlY3RlZDogJ3N0cmluZycsXG4gKiAgICAgICBjb2RlOiAnaW52YWxpZF90eXBlJyxcbiAqICAgICAgIHBhdGg6IFsgJ3VzZXJuYW1lJyBdLFxuICogICAgICAgbWVzc2FnZTogJ0ludmFsaWQgaW5wdXQ6IGV4cGVjdGVkIHN0cmluZydcbiAqICAgICB9LFxuICogICAgIHtcbiAqICAgICAgIGV4cGVjdGVkOiAnbnVtYmVyJyxcbiAqICAgICAgIGNvZGU6ICdpbnZhbGlkX3R5cGUnLFxuICogICAgICAgcGF0aDogWyAnZmF2b3JpdGVOdW1iZXJzJywgMSBdLFxuICogICAgICAgbWVzc2FnZTogJ0ludmFsaWQgaW5wdXQ6IGV4cGVjdGVkIG51bWJlcidcbiAqICAgICB9XG4gKiAgIF07XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiB0b1xuICpcbiAqIGBgYFxuICogdXNlcm5hbWVcbiAqICAg4pyWIEV4cGVjdGVkIG51bWJlciwgcmVjZWl2ZWQgc3RyaW5nIGF0IFwidXNlcm5hbWVcbiAqIGZhdm9yaXRlTnVtYmVyc1swXVxuICogICDinJYgSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgbnVtYmVyXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRG90UGF0aChfcGF0aCkge1xuICAgIGNvbnN0IHNlZ3MgPSBbXTtcbiAgICBjb25zdCBwYXRoID0gX3BhdGgubWFwKChzZWcpID0+ICh0eXBlb2Ygc2VnID09PSBcIm9iamVjdFwiID8gc2VnLmtleSA6IHNlZykpO1xuICAgIGZvciAoY29uc3Qgc2VnIG9mIHBhdGgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWcgPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICBzZWdzLnB1c2goYFske3NlZ31dYCk7XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzZWcgPT09IFwic3ltYm9sXCIpXG4gICAgICAgICAgICBzZWdzLnB1c2goYFske0pTT04uc3RyaW5naWZ5KFN0cmluZyhzZWcpKX1dYCk7XG4gICAgICAgIGVsc2UgaWYgKC9bXlxcdyRdLy50ZXN0KHNlZykpXG4gICAgICAgICAgICBzZWdzLnB1c2goYFske0pTT04uc3RyaW5naWZ5KHNlZyl9XWApO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzZWdzLmxlbmd0aClcbiAgICAgICAgICAgICAgICBzZWdzLnB1c2goXCIuXCIpO1xuICAgICAgICAgICAgc2Vncy5wdXNoKHNlZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlZ3Muam9pbihcIlwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcmV0dGlmeUVycm9yKGVycm9yKSB7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICAvLyBzb3J0IGJ5IHBhdGggbGVuZ3RoXG4gICAgY29uc3QgaXNzdWVzID0gWy4uLmVycm9yLmlzc3Vlc10uc29ydCgoYSwgYikgPT4gKGEucGF0aCA/PyBbXSkubGVuZ3RoIC0gKGIucGF0aCA/PyBbXSkubGVuZ3RoKTtcbiAgICAvLyBQcm9jZXNzIGVhY2ggaXNzdWVcbiAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGlzc3Vlcykge1xuICAgICAgICBsaW5lcy5wdXNoKGDinJYgJHtpc3N1ZS5tZXNzYWdlfWApO1xuICAgICAgICBpZiAoaXNzdWUucGF0aD8ubGVuZ3RoKVxuICAgICAgICAgICAgbGluZXMucHVzaChgICDihpIgYXQgJHt0b0RvdFBhdGgoaXNzdWUucGF0aCl9YCk7XG4gICAgfVxuICAgIC8vIENvbnZlcnQgTWFwIHRvIGZvcm1hdHRlZCBzdHJpbmdcbiAgICByZXR1cm4gbGluZXMuam9pbihcIlxcblwiKTtcbn1cbiIsImltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIi4vY29yZS5qc1wiO1xuaW1wb3J0ICogYXMgZXJyb3JzIGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi91dGlsLmpzXCI7XG5leHBvcnQgY29uc3QgX3BhcnNlID0gKF9FcnIpID0+IChzY2hlbWEsIHZhbHVlLCBfY3R4LCBfcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gX2N0eCA/IHsgLi4uX2N0eCwgYXN5bmM6IGZhbHNlIH0gOiB7IGFzeW5jOiBmYWxzZSB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IHNjaGVtYS5fem9kLnJ1bih7IHZhbHVlLCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuJFpvZEFzeW5jRXJyb3IoKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGUgPSBuZXcgKF9wYXJhbXM/LkVyciA/PyBfRXJyKShyZXN1bHQuaXNzdWVzLm1hcCgoaXNzKSA9PiB1dGlsLmZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvcmUuY29uZmlnKCkpKSk7XG4gICAgICAgIHV0aWwuY2FwdHVyZVN0YWNrVHJhY2UoZSwgX3BhcmFtcz8uY2FsbGVlKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbn07XG5leHBvcnQgY29uc3QgcGFyc2UgPSAvKiBAX19QVVJFX18qLyBfcGFyc2UoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9wYXJzZUFzeW5jID0gKF9FcnIpID0+IGFzeW5jIChzY2hlbWEsIHZhbHVlLCBfY3R4LCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBjdHggPSBfY3R4ID8geyAuLi5fY3R4LCBhc3luYzogdHJ1ZSB9IDogeyBhc3luYzogdHJ1ZSB9O1xuICAgIGxldCByZXN1bHQgPSBzY2hlbWEuX3pvZC5ydW4oeyB2YWx1ZSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKVxuICAgICAgICByZXN1bHQgPSBhd2FpdCByZXN1bHQ7XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGUgPSBuZXcgKHBhcmFtcz8uRXJyID8/IF9FcnIpKHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpKTtcbiAgICAgICAgdXRpbC5jYXB0dXJlU3RhY2tUcmFjZShlLCBwYXJhbXM/LmNhbGxlZSk7XG4gICAgICAgIHRocm93IGU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQudmFsdWU7XG59O1xuZXhwb3J0IGNvbnN0IHBhcnNlQXN5bmMgPSAvKiBAX19QVVJFX18qLyBfcGFyc2VBc3luYyhlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgX3NhZmVQYXJzZSA9IChfRXJyKSA9PiAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IF9jdHggPyB7IC4uLl9jdHgsIGFzeW5jOiBmYWxzZSB9IDogeyBhc3luYzogZmFsc2UgfTtcbiAgICBjb25zdCByZXN1bHQgPSBzY2hlbWEuX3pvZC5ydW4oeyB2YWx1ZSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBjb3JlLiRab2RBc3luY0Vycm9yKCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQuaXNzdWVzLmxlbmd0aFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IG5ldyAoX0VyciA/PyBlcnJvcnMuJFpvZEVycm9yKShyZXN1bHQuaXNzdWVzLm1hcCgoaXNzKSA9PiB1dGlsLmZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvcmUuY29uZmlnKCkpKSksXG4gICAgICAgIH1cbiAgICAgICAgOiB7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IHJlc3VsdC52YWx1ZSB9O1xufTtcbmV4cG9ydCBjb25zdCBzYWZlUGFyc2UgPSAvKiBAX19QVVJFX18qLyBfc2FmZVBhcnNlKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfc2FmZVBhcnNlQXN5bmMgPSAoX0VycikgPT4gYXN5bmMgKHNjaGVtYSwgdmFsdWUsIF9jdHgpID0+IHtcbiAgICBjb25zdCBjdHggPSBfY3R4ID8geyAuLi5fY3R4LCBhc3luYzogdHJ1ZSB9IDogeyBhc3luYzogdHJ1ZSB9O1xuICAgIGxldCByZXN1bHQgPSBzY2hlbWEuX3pvZC5ydW4oeyB2YWx1ZSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKVxuICAgICAgICByZXN1bHQgPSBhd2FpdCByZXN1bHQ7XG4gICAgcmV0dXJuIHJlc3VsdC5pc3N1ZXMubGVuZ3RoXG4gICAgICAgID8ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogbmV3IF9FcnIocmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcykgPT4gdXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSkpLFxuICAgICAgICB9XG4gICAgICAgIDogeyBzdWNjZXNzOiB0cnVlLCBkYXRhOiByZXN1bHQudmFsdWUgfTtcbn07XG5leHBvcnQgY29uc3Qgc2FmZVBhcnNlQXN5bmMgPSAvKiBAX19QVVJFX18qLyBfc2FmZVBhcnNlQXN5bmMoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9lbmNvZGUgPSAoX0VycikgPT4gKHNjaGVtYSwgdmFsdWUsIF9jdHgpID0+IHtcbiAgICBjb25zdCBjdHggPSBfY3R4ID8geyAuLi5fY3R4LCBkaXJlY3Rpb246IFwiYmFja3dhcmRcIiB9IDogeyBkaXJlY3Rpb246IFwiYmFja3dhcmRcIiB9O1xuICAgIHJldHVybiBfcGFyc2UoX0Vycikoc2NoZW1hLCB2YWx1ZSwgY3R4KTtcbn07XG5leHBvcnQgY29uc3QgZW5jb2RlID0gLyogQF9fUFVSRV9fKi8gX2VuY29kZShlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgX2RlY29kZSA9IChfRXJyKSA9PiAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIHJldHVybiBfcGFyc2UoX0Vycikoc2NoZW1hLCB2YWx1ZSwgX2N0eCk7XG59O1xuZXhwb3J0IGNvbnN0IGRlY29kZSA9IC8qIEBfX1BVUkVfXyovIF9kZWNvZGUoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9lbmNvZGVBc3luYyA9IChfRXJyKSA9PiBhc3luYyAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IF9jdHggPyB7IC4uLl9jdHgsIGRpcmVjdGlvbjogXCJiYWNrd2FyZFwiIH0gOiB7IGRpcmVjdGlvbjogXCJiYWNrd2FyZFwiIH07XG4gICAgcmV0dXJuIF9wYXJzZUFzeW5jKF9FcnIpKHNjaGVtYSwgdmFsdWUsIGN0eCk7XG59O1xuZXhwb3J0IGNvbnN0IGVuY29kZUFzeW5jID0gLyogQF9fUFVSRV9fKi8gX2VuY29kZUFzeW5jKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfZGVjb2RlQXN5bmMgPSAoX0VycikgPT4gYXN5bmMgKHNjaGVtYSwgdmFsdWUsIF9jdHgpID0+IHtcbiAgICByZXR1cm4gX3BhcnNlQXN5bmMoX0Vycikoc2NoZW1hLCB2YWx1ZSwgX2N0eCk7XG59O1xuZXhwb3J0IGNvbnN0IGRlY29kZUFzeW5jID0gLyogQF9fUFVSRV9fKi8gX2RlY29kZUFzeW5jKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfc2FmZUVuY29kZSA9IChfRXJyKSA9PiAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IF9jdHggPyB7IC4uLl9jdHgsIGRpcmVjdGlvbjogXCJiYWNrd2FyZFwiIH0gOiB7IGRpcmVjdGlvbjogXCJiYWNrd2FyZFwiIH07XG4gICAgcmV0dXJuIF9zYWZlUGFyc2UoX0Vycikoc2NoZW1hLCB2YWx1ZSwgY3R4KTtcbn07XG5leHBvcnQgY29uc3Qgc2FmZUVuY29kZSA9IC8qIEBfX1BVUkVfXyovIF9zYWZlRW5jb2RlKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfc2FmZURlY29kZSA9IChfRXJyKSA9PiAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIHJldHVybiBfc2FmZVBhcnNlKF9FcnIpKHNjaGVtYSwgdmFsdWUsIF9jdHgpO1xufTtcbmV4cG9ydCBjb25zdCBzYWZlRGVjb2RlID0gLyogQF9fUFVSRV9fKi8gX3NhZmVEZWNvZGUoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9zYWZlRW5jb2RlQXN5bmMgPSAoX0VycikgPT4gYXN5bmMgKHNjaGVtYSwgdmFsdWUsIF9jdHgpID0+IHtcbiAgICBjb25zdCBjdHggPSBfY3R4ID8geyAuLi5fY3R4LCBkaXJlY3Rpb246IFwiYmFja3dhcmRcIiB9IDogeyBkaXJlY3Rpb246IFwiYmFja3dhcmRcIiB9O1xuICAgIHJldHVybiBfc2FmZVBhcnNlQXN5bmMoX0Vycikoc2NoZW1hLCB2YWx1ZSwgY3R4KTtcbn07XG5leHBvcnQgY29uc3Qgc2FmZUVuY29kZUFzeW5jID0gLyogQF9fUFVSRV9fKi8gX3NhZmVFbmNvZGVBc3luYyhlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgX3NhZmVEZWNvZGVBc3luYyA9IChfRXJyKSA9PiBhc3luYyAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIHJldHVybiBfc2FmZVBhcnNlQXN5bmMoX0Vycikoc2NoZW1hLCB2YWx1ZSwgX2N0eCk7XG59O1xuZXhwb3J0IGNvbnN0IHNhZmVEZWNvZGVBc3luYyA9IC8qIEBfX1BVUkVfXyovIF9zYWZlRGVjb2RlQXN5bmMoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuIiwiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi91dGlsLmpzXCI7XG4vKipcbiAqIEBkZXByZWNhdGVkIENVSUQgdjEgaXMgZGVwcmVjYXRlZCBieSBpdHMgYXV0aG9ycyBkdWUgdG8gaW5mb3JtYXRpb24gbGVha2FnZVxuICogKHRpbWVzdGFtcHMgZW1iZWRkZWQgaW4gdGhlIGlkKS4gVXNlIHtAbGluayBjdWlkMn0gaW5zdGVhZC5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcGFyYWxsZWxkcml2ZS9jdWlkLlxuICovXG5leHBvcnQgY29uc3QgY3VpZCA9IC9eW2NDXVswLTlhLXpdezYsfSQvO1xuZXhwb3J0IGNvbnN0IGN1aWQyID0gL15bMC05YS16XSskLztcbmV4cG9ydCBjb25zdCB1bGlkID0gL15bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI2fSQvO1xuZXhwb3J0IGNvbnN0IHhpZCA9IC9eWzAtOWEtdkEtVl17MjB9JC87XG5leHBvcnQgY29uc3Qga3N1aWQgPSAvXltBLVphLXowLTldezI3fSQvO1xuZXhwb3J0IGNvbnN0IG5hbm9pZCA9IC9eW2EtekEtWjAtOV8tXXsyMX0kLztcbi8qKiBJU08gODYwMS0xIGR1cmF0aW9uIHJlZ2V4LiBEb2VzIG5vdCBzdXBwb3J0IHRoZSA4NjAxLTIgZXh0ZW5zaW9ucyBsaWtlIG5lZ2F0aXZlIGR1cmF0aW9ucyBvciBmcmFjdGlvbmFsL25lZ2F0aXZlIGNvbXBvbmVudHMuICovXG5leHBvcnQgY29uc3QgZHVyYXRpb24gPSAvXlAoPzooXFxkK1cpfCg/IS4qVykoPz1cXGR8VFxcZCkoXFxkK1kpPyhcXGQrTSk/KFxcZCtEKT8oVCg/PVxcZCkoXFxkK0gpPyhcXGQrTSk/KFxcZCsoWy4sXVxcZCspP1MpPyk/KSQvO1xuLyoqIEltcGxlbWVudHMgSVNPIDg2MDEtMiBleHRlbnNpb25zIGxpa2UgZXhwbGljaXQgKy0gcHJlZml4ZXMsIG1peGluZyB3ZWVrcyB3aXRoIG90aGVyIHVuaXRzLCBhbmQgZnJhY3Rpb25hbC9uZWdhdGl2ZSBjb21wb25lbnRzLiAqL1xuZXhwb3J0IGNvbnN0IGV4dGVuZGVkRHVyYXRpb24gPSAvXlstK10/UCg/ISQpKD86KD86Wy0rXT9cXGQrWSl8KD86Wy0rXT9cXGQrWy4sXVxcZCtZJCkpPyg/Oig/OlstK10/XFxkK00pfCg/OlstK10/XFxkK1suLF1cXGQrTSQpKT8oPzooPzpbLStdP1xcZCtXKXwoPzpbLStdP1xcZCtbLixdXFxkK1ckKSk/KD86KD86Wy0rXT9cXGQrRCl8KD86Wy0rXT9cXGQrWy4sXVxcZCtEJCkpPyg/OlQoPz1bXFxkKy1dKSg/Oig/OlstK10/XFxkK0gpfCg/OlstK10/XFxkK1suLF1cXGQrSCQpKT8oPzooPzpbLStdP1xcZCtNKXwoPzpbLStdP1xcZCtbLixdXFxkK00kKSk/KD86Wy0rXT9cXGQrKD86Wy4sXVxcZCspP1MpPyk/PyQvO1xuLyoqIEEgcmVnZXggZm9yIGFueSBVVUlELWxpa2UgaWRlbnRpZmllcjogOC00LTQtNC0xMiBoZXggcGF0dGVybiAqL1xuZXhwb3J0IGNvbnN0IGd1aWQgPSAvXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0pJC87XG4vKiogUmV0dXJucyBhIHJlZ2V4IGZvciB2YWxpZGF0aW5nIGFuIFJGQyA5NTYyLzQxMjIgVVVJRC5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiBPcHRpb25hbGx5IHNwZWNpZnkgYSB2ZXJzaW9uIDEtOC4gSWYgbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWQsIGFsbCB2ZXJzaW9ucyBhcmUgc3VwcG9ydGVkLiAqL1xuZXhwb3J0IGNvbnN0IHV1aWQgPSAodmVyc2lvbikgPT4ge1xuICAgIGlmICghdmVyc2lvbilcbiAgICAgICAgcmV0dXJuIC9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVsxLThdWzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwfGZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZikkLztcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS0ke3ZlcnNpb259WzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn0pJGApO1xufTtcbmV4cG9ydCBjb25zdCB1dWlkNCA9IC8qQF9fUFVSRV9fKi8gdXVpZCg0KTtcbmV4cG9ydCBjb25zdCB1dWlkNiA9IC8qQF9fUFVSRV9fKi8gdXVpZCg2KTtcbmV4cG9ydCBjb25zdCB1dWlkNyA9IC8qQF9fUFVSRV9fKi8gdXVpZCg3KTtcbi8qKiBQcmFjdGljYWwgZW1haWwgdmFsaWRhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IGVtYWlsID0gL14oPyFcXC4pKD8hLipcXC5cXC4pKFtBLVphLXowLTlfJytcXC1cXC5dKilbQS1aYS16MC05XystXUAoW0EtWmEtejAtOV1bQS1aYS16MC05XFwtXSpcXC4pK1tBLVphLXpdezIsfSQvO1xuLyoqIEVxdWl2YWxlbnQgdG8gdGhlIEhUTUw1IGlucHV0W3R5cGU9ZW1haWxdIHZhbGlkYXRpb24gaW1wbGVtZW50ZWQgYnkgYnJvd3NlcnMuIFNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0L2VtYWlsICovXG5leHBvcnQgY29uc3QgaHRtbDVFbWFpbCA9IC9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLztcbi8qKiBUaGUgY2xhc3NpYyBlbWFpbHJlZ2V4LmNvbSByZWdleCBmb3IgUkZDIDUzMjItY29tcGxpYW50IGVtYWlscyAqL1xuZXhwb3J0IGNvbnN0IHJmYzUzMjJFbWFpbCA9IC9eKChbXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoXFxbWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfV0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvO1xuLyoqIEEgbG9vc2UgcmVnZXggdGhhdCBhbGxvd3MgVW5pY29kZSBjaGFyYWN0ZXJzLCBlbmZvcmNlcyBsZW5ndGggbGltaXRzLCBhbmQgdGhhdCdzIGFib3V0IGl0LiAqL1xuZXhwb3J0IGNvbnN0IHVuaWNvZGVFbWFpbCA9IC9eW15cXHNAXCJdezEsNjR9QFteXFxzQF17MSwyNTV9JC91O1xuZXhwb3J0IGNvbnN0IGlkbkVtYWlsID0gdW5pY29kZUVtYWlsO1xuZXhwb3J0IGNvbnN0IGJyb3dzZXJFbWFpbCA9IC9eW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSokLztcbi8vIGZyb20gaHR0cHM6Ly90aGVrZXZpbnNjb3R0LmNvbS9lbW9qaXMtaW4tamF2YXNjcmlwdC8jd3JpdGluZy1hLXJlZ3VsYXItZXhwcmVzc2lvblxuY29uc3QgX2Vtb2ppID0gYF4oXFxcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfXxcXFxccHtFbW9qaV9Db21wb25lbnR9KSskYDtcbmV4cG9ydCBmdW5jdGlvbiBlbW9qaSgpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChfZW1vamksIFwidVwiKTtcbn1cbmV4cG9ydCBjb25zdCBpcHY0ID0gL14oPzooPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSkkLztcbmV4cG9ydCBjb25zdCBpcHY2ID0gL14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDd9OnwoWzAtOWEtZkEtRl17MSw0fTopezEsNn06WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsNX0oOlswLTlhLWZBLUZdezEsNH0pezEsMn18KFswLTlhLWZBLUZdezEsNH06KXsxLDR9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDN9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwzfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsMn0oOlswLTlhLWZBLUZdezEsNH0pezEsNX18WzAtOWEtZkEtRl17MSw0fTooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDZ9KXw6KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw3fXw6KSkkLztcbmV4cG9ydCBjb25zdCBtYWMgPSAoZGVsaW1pdGVyKSA9PiB7XG4gICAgY29uc3QgZXNjYXBlZERlbGltID0gdXRpbC5lc2NhcGVSZWdleChkZWxpbWl0ZXIgPz8gXCI6XCIpO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKD86WzAtOUEtRl17Mn0ke2VzY2FwZWREZWxpbX0pezV9WzAtOUEtRl17Mn0kfF4oPzpbMC05YS1mXXsyfSR7ZXNjYXBlZERlbGltfSl7NX1bMC05YS1mXXsyfSRgKTtcbn07XG5leHBvcnQgY29uc3QgY2lkcnY0ID0gL14oKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC8oWzAtOV18WzEtMl1bMC05XXwzWzAtMl0pJC87XG5leHBvcnQgY29uc3QgY2lkcnY2ID0gL14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18Ojp8KFswLTlhLWZBLUZdezEsNH0pPzo6KFswLTlhLWZBLUZdezEsNH06Pyl7MCw2fSlcXC8oMTJbMC04XXwxWzAxXVswLTldfFsxLTldP1swLTldKSQvO1xuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg2MDM5Mi9kZXRlcm1pbmUtaWYtc3RyaW5nLWlzLWluLWJhc2U2NC11c2luZy1qYXZhc2NyaXB0XG5leHBvcnQgY29uc3QgYmFzZTY0ID0gL14kfF4oPzpbMC05YS16QS1aKy9dezR9KSooPzooPzpbMC05YS16QS1aKy9dezJ9PT0pfCg/OlswLTlhLXpBLVorL117M309KSk/JC87XG5leHBvcnQgY29uc3QgYmFzZTY0dXJsID0gL15bQS1aYS16MC05Xy1dKiQvO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA2MTc5L3JlZ3VsYXItZXhwcmVzc2lvbi10by1tYXRjaC1kbnMtaG9zdG5hbWUtb3ItaXAtYWRkcmVzc1xuLy8gZXhwb3J0IGNvbnN0IGhvc3RuYW1lOiBSZWdFeHAgPSAvXihbYS16QS1aMC05LV0rXFwuKSpbYS16QS1aMC05LV0rJC87XG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSAvXig/PS57MSwyNTN9XFwuPyQpW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbLTAtOWEtekEtWl17MCw2MX1bMC05YS16QS1aXSk/KSpcXC4/JC87XG5leHBvcnQgY29uc3QgZG9tYWluID0gL14oW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/XFwuKStbYS16QS1aXXsyLH0kLztcbmV4cG9ydCBjb25zdCBodHRwUHJvdG9jb2wgPSAvXmh0dHBzPyQvO1xuLy8gaHR0cHM6Ly9ibG9nLnN0ZXZlbmxldml0aGFuLmNvbS9hcmNoaXZlcy92YWxpZGF0ZS1waG9uZS1udW1iZXIjcjQtMyAocmVnZXggc2FucyBzcGFjZXMpXG4vLyBFLjE2NDogbGVhZGluZyBkaWdpdCBtdXN0IGJlIDEtOTsgdG90YWwgZGlnaXRzIChleGNsdWRpbmcgJysnKSBiZXR3ZWVuIDctMTVcbmV4cG9ydCBjb25zdCBlMTY0ID0gL15cXCtbMS05XVxcZHs2LDE0fSQvO1xuLy8gY29uc3QgZGF0ZVNvdXJjZSA9IGAoKFxcXFxkXFxcXGRbMjQ2OF1bMDQ4XXxcXFxcZFxcXFxkWzEzNTc5XVsyNl18XFxcXGRcXFxcZDBbNDhdfFswMjQ2OF1bMDQ4XTAwfFsxMzU3OV1bMjZdMDApLTAyLTI5fFxcXFxkezR9LSgoMFsxMzU3OF18MVswMl0pLSgwWzEtOV18WzEyXVxcXFxkfDNbMDFdKXwoMFs0NjldfDExKS0oMFsxLTldfFsxMl1cXFxcZHwzMCl8KDAyKS0oMFsxLTldfDFcXFxcZHwyWzAtOF0pKSlgO1xuY29uc3QgZGF0ZVNvdXJjZSA9IGAoPzooPzpcXFxcZFxcXFxkWzI0NjhdWzA0OF18XFxcXGRcXFxcZFsxMzU3OV1bMjZdfFxcXFxkXFxcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXFxcZHs0fS0oPzooPzowWzEzNTc4XXwxWzAyXSktKD86MFsxLTldfFsxMl1cXFxcZHwzWzAxXSl8KD86MFs0NjldfDExKS0oPzowWzEtOV18WzEyXVxcXFxkfDMwKXwoPzowMiktKD86MFsxLTldfDFcXFxcZHwyWzAtOF0pKSlgO1xuZXhwb3J0IGNvbnN0IGRhdGUgPSAvKkBfX1BVUkVfXyovIG5ldyBSZWdFeHAoYF4ke2RhdGVTb3VyY2V9JGApO1xuZnVuY3Rpb24gdGltZVNvdXJjZShhcmdzKSB7XG4gICAgY29uc3QgaGhtbSA9IGAoPzpbMDFdXFxcXGR8MlswLTNdKTpbMC01XVxcXFxkYDtcbiAgICBjb25zdCByZWdleCA9IHR5cGVvZiBhcmdzLnByZWNpc2lvbiA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/IGFyZ3MucHJlY2lzaW9uID09PSAtMVxuICAgICAgICAgICAgPyBgJHtoaG1tfWBcbiAgICAgICAgICAgIDogYXJncy5wcmVjaXNpb24gPT09IDBcbiAgICAgICAgICAgICAgICA/IGAke2hobW19OlswLTVdXFxcXGRgXG4gICAgICAgICAgICAgICAgOiBgJHtoaG1tfTpbMC01XVxcXFxkXFxcXC5cXFxcZHske2FyZ3MucHJlY2lzaW9ufX1gXG4gICAgICAgIDogYCR7aGhtbX0oPzo6WzAtNV1cXFxcZCg/OlxcXFwuXFxcXGQrKT8pP2A7XG4gICAgcmV0dXJuIHJlZ2V4O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRpbWUoYXJncykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeJHt0aW1lU291cmNlKGFyZ3MpfSRgKTtcbn1cbi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzE0MzIzMVxuZXhwb3J0IGZ1bmN0aW9uIGRhdGV0aW1lKGFyZ3MpIHtcbiAgICBjb25zdCB0aW1lID0gdGltZVNvdXJjZSh7IHByZWNpc2lvbjogYXJncy5wcmVjaXNpb24gfSk7XG4gICAgY29uc3Qgb3B0cyA9IFtcIlpcIl07XG4gICAgaWYgKGFyZ3MubG9jYWwpXG4gICAgICAgIG9wdHMucHVzaChcIlwiKTtcbiAgICAvLyBpZiAoYXJncy5vZmZzZXQpIG9wdHMucHVzaChgKFsrLV1cXFxcZHsyfTpcXFxcZHsyfSlgKTtcbiAgICBpZiAoYXJncy5vZmZzZXQpXG4gICAgICAgIG9wdHMucHVzaChgKFsrLV0oPzpbMDFdXFxcXGR8MlswLTNdKTpbMC01XVxcXFxkKWApO1xuICAgIGNvbnN0IHRpbWVSZWdleCA9IGAke3RpbWV9KD86JHtvcHRzLmpvaW4oXCJ8XCIpfSlgO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeJHtkYXRlU291cmNlfVQoPzoke3RpbWVSZWdleH0pJGApO1xufVxuZXhwb3J0IGNvbnN0IHN0cmluZyA9IChwYXJhbXMpID0+IHtcbiAgICBjb25zdCByZWdleCA9IHBhcmFtcyA/IGBbXFxcXHNcXFxcU117JHtwYXJhbXM/Lm1pbmltdW0gPz8gMH0sJHtwYXJhbXM/Lm1heGltdW0gPz8gXCJcIn19YCA6IGBbXFxcXHNcXFxcU10qYDtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7cmVnZXh9JGApO1xufTtcbmV4cG9ydCBjb25zdCBiaWdpbnQgPSAvXi0/XFxkK24/JC87XG5leHBvcnQgY29uc3QgaW50ZWdlciA9IC9eLT9cXGQrJC87XG5leHBvcnQgY29uc3QgbnVtYmVyID0gL14tP1xcZCsoPzpcXC5cXGQrKT8kLztcbmV4cG9ydCBjb25zdCBib29sZWFuID0gL14oPzp0cnVlfGZhbHNlKSQvaTtcbmNvbnN0IF9udWxsID0gL15udWxsJC9pO1xuZXhwb3J0IHsgX251bGwgYXMgbnVsbCB9O1xuY29uc3QgX3VuZGVmaW5lZCA9IC9edW5kZWZpbmVkJC9pO1xuZXhwb3J0IHsgX3VuZGVmaW5lZCBhcyB1bmRlZmluZWQgfTtcbi8vIHJlZ2V4IGZvciBzdHJpbmcgd2l0aCBubyB1cHBlcmNhc2UgbGV0dGVyc1xuZXhwb3J0IGNvbnN0IGxvd2VyY2FzZSA9IC9eW15BLVpdKiQvO1xuLy8gcmVnZXggZm9yIHN0cmluZyB3aXRoIG5vIGxvd2VyY2FzZSBsZXR0ZXJzXG5leHBvcnQgY29uc3QgdXBwZXJjYXNlID0gL15bXmEtel0qJC87XG4vLyByZWdleCBmb3IgaGV4YWRlY2ltYWwgc3RyaW5ncyAoYW55IGxlbmd0aClcbmV4cG9ydCBjb25zdCBoZXggPSAvXlswLTlhLWZBLUZdKiQvO1xuLy8gSGFzaCByZWdleGVzIGZvciBkaWZmZXJlbnQgYWxnb3JpdGhtcyBhbmQgZW5jb2RpbmdzXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGJhc2U2NCByZWdleCB3aXRoIGV4YWN0IGxlbmd0aCBhbmQgcGFkZGluZ1xuZnVuY3Rpb24gZml4ZWRCYXNlNjQoYm9keUxlbmd0aCwgcGFkZGluZykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOSsvXXske2JvZHlMZW5ndGh9fSR7cGFkZGluZ30kYCk7XG59XG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGJhc2U2NHVybCByZWdleCB3aXRoIGV4YWN0IGxlbmd0aCAobm8gcGFkZGluZylcbmZ1bmN0aW9uIGZpeGVkQmFzZTY0dXJsKGxlbmd0aCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeW0EtWmEtejAtOV8tXXske2xlbmd0aH19JGApO1xufVxuLy8gTUQ1ICgxNiBieXRlcyk6IGJhc2U2NCA9IDI0IGNoYXJzIHRvdGFsICgyMiArIFwiPT1cIilcbmV4cG9ydCBjb25zdCBtZDVfaGV4ID0gL15bMC05YS1mQS1GXXszMn0kLztcbmV4cG9ydCBjb25zdCBtZDVfYmFzZTY0ID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NCgyMiwgXCI9PVwiKTtcbmV4cG9ydCBjb25zdCBtZDVfYmFzZTY0dXJsID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NHVybCgyMik7XG4vLyBTSEExICgyMCBieXRlcyk6IGJhc2U2NCA9IDI4IGNoYXJzIHRvdGFsICgyNyArIFwiPVwiKVxuZXhwb3J0IGNvbnN0IHNoYTFfaGV4ID0gL15bMC05YS1mQS1GXXs0MH0kLztcbmV4cG9ydCBjb25zdCBzaGExX2Jhc2U2NCA9IC8qQF9fUFVSRV9fKi8gZml4ZWRCYXNlNjQoMjcsIFwiPVwiKTtcbmV4cG9ydCBjb25zdCBzaGExX2Jhc2U2NHVybCA9IC8qQF9fUFVSRV9fKi8gZml4ZWRCYXNlNjR1cmwoMjcpO1xuLy8gU0hBMjU2ICgzMiBieXRlcyk6IGJhc2U2NCA9IDQ0IGNoYXJzIHRvdGFsICg0MyArIFwiPVwiKVxuZXhwb3J0IGNvbnN0IHNoYTI1Nl9oZXggPSAvXlswLTlhLWZBLUZdezY0fSQvO1xuZXhwb3J0IGNvbnN0IHNoYTI1Nl9iYXNlNjQgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0KDQzLCBcIj1cIik7XG5leHBvcnQgY29uc3Qgc2hhMjU2X2Jhc2U2NHVybCA9IC8qQF9fUFVSRV9fKi8gZml4ZWRCYXNlNjR1cmwoNDMpO1xuLy8gU0hBMzg0ICg0OCBieXRlcyk6IGJhc2U2NCA9IDY0IGNoYXJzIHRvdGFsIChubyBwYWRkaW5nKVxuZXhwb3J0IGNvbnN0IHNoYTM4NF9oZXggPSAvXlswLTlhLWZBLUZdezk2fSQvO1xuZXhwb3J0IGNvbnN0IHNoYTM4NF9iYXNlNjQgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0KDY0LCBcIlwiKTtcbmV4cG9ydCBjb25zdCBzaGEzODRfYmFzZTY0dXJsID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NHVybCg2NCk7XG4vLyBTSEE1MTIgKDY0IGJ5dGVzKTogYmFzZTY0ID0gODggY2hhcnMgdG90YWwgKDg2ICsgXCI9PVwiKVxuZXhwb3J0IGNvbnN0IHNoYTUxMl9oZXggPSAvXlswLTlhLWZBLUZdezEyOH0kLztcbmV4cG9ydCBjb25zdCBzaGE1MTJfYmFzZTY0ID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NCg4NiwgXCI9PVwiKTtcbmV4cG9ydCBjb25zdCBzaGE1MTJfYmFzZTY0dXJsID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NHVybCg4Nik7XG4iLCIvLyBpbXBvcnQgeyAkWm9kVHlwZSB9IGZyb20gXCIuL3NjaGVtYXMuanNcIjtcbmltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIi4vY29yZS5qc1wiO1xuaW1wb3J0ICogYXMgcmVnZXhlcyBmcm9tIFwiLi9yZWdleGVzLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuL3V0aWwuanNcIjtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2sgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgaW5zdC5fem9kID8/IChpbnN0Ll96b2QgPSB7fSk7XG4gICAgaW5zdC5fem9kLmRlZiA9IGRlZjtcbiAgICAoX2EgPSBpbnN0Ll96b2QpLm9uYXR0YWNoID8/IChfYS5vbmF0dGFjaCA9IFtdKTtcbn0pO1xuY29uc3QgbnVtZXJpY09yaWdpbk1hcCA9IHtcbiAgICBudW1iZXI6IFwibnVtYmVyXCIsXG4gICAgYmlnaW50OiBcImJpZ2ludFwiLFxuICAgIG9iamVjdDogXCJkYXRlXCIsXG59O1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja0xlc3NUaGFuID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja0xlc3NUaGFuXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvbnN0IG9yaWdpbiA9IG51bWVyaWNPcmlnaW5NYXBbdHlwZW9mIGRlZi52YWx1ZV07XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgY29uc3QgYmFnID0gaW5zdC5fem9kLmJhZztcbiAgICAgICAgY29uc3QgY3VyciA9IChkZWYuaW5jbHVzaXZlID8gYmFnLm1heGltdW0gOiBiYWcuZXhjbHVzaXZlTWF4aW11bSkgPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICBpZiAoZGVmLnZhbHVlIDwgY3Vycikge1xuICAgICAgICAgICAgaWYgKGRlZi5pbmNsdXNpdmUpXG4gICAgICAgICAgICAgICAgYmFnLm1heGltdW0gPSBkZWYudmFsdWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYmFnLmV4Y2x1c2l2ZU1heGltdW0gPSBkZWYudmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAoZGVmLmluY2x1c2l2ZSA/IHBheWxvYWQudmFsdWUgPD0gZGVmLnZhbHVlIDogcGF5bG9hZC52YWx1ZSA8IGRlZi52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgY29kZTogXCJ0b29fYmlnXCIsXG4gICAgICAgICAgICBtYXhpbXVtOiB0eXBlb2YgZGVmLnZhbHVlID09PSBcIm9iamVjdFwiID8gZGVmLnZhbHVlLmdldFRpbWUoKSA6IGRlZi52YWx1ZSxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBkZWYuaW5jbHVzaXZlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrR3JlYXRlclRoYW4gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrR3JlYXRlclRoYW5cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3Qgb3JpZ2luID0gbnVtZXJpY09yaWdpbk1hcFt0eXBlb2YgZGVmLnZhbHVlXTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBjb25zdCBjdXJyID0gKGRlZi5pbmNsdXNpdmUgPyBiYWcubWluaW11bSA6IGJhZy5leGNsdXNpdmVNaW5pbXVtKSA/PyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGlmIChkZWYudmFsdWUgPiBjdXJyKSB7XG4gICAgICAgICAgICBpZiAoZGVmLmluY2x1c2l2ZSlcbiAgICAgICAgICAgICAgICBiYWcubWluaW11bSA9IGRlZi52YWx1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBiYWcuZXhjbHVzaXZlTWluaW11bSA9IGRlZi52YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChkZWYuaW5jbHVzaXZlID8gcGF5bG9hZC52YWx1ZSA+PSBkZWYudmFsdWUgOiBwYXlsb2FkLnZhbHVlID4gZGVmLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICBjb2RlOiBcInRvb19zbWFsbFwiLFxuICAgICAgICAgICAgbWluaW11bTogdHlwZW9mIGRlZi52YWx1ZSA9PT0gXCJvYmplY3RcIiA/IGRlZi52YWx1ZS5nZXRUaW1lKCkgOiBkZWYudmFsdWUsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZGVmLmluY2x1c2l2ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja011bHRpcGxlT2YgPSBcbi8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tNdWx0aXBsZU9mXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gaW5zdC5fem9kLmJhZykubXVsdGlwbGVPZiA/PyAoX2EubXVsdGlwbGVPZiA9IGRlZi52YWx1ZSk7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkLnZhbHVlICE9PSB0eXBlb2YgZGVmLnZhbHVlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IG1peCBudW1iZXIgYW5kIGJpZ2ludCBpbiBtdWx0aXBsZV9vZiBjaGVjay5cIik7XG4gICAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSB0eXBlb2YgcGF5bG9hZC52YWx1ZSA9PT0gXCJiaWdpbnRcIlxuICAgICAgICAgICAgPyBwYXlsb2FkLnZhbHVlICUgZGVmLnZhbHVlID09PSBCaWdJbnQoMClcbiAgICAgICAgICAgIDogdXRpbC5mbG9hdFNhZmVSZW1haW5kZXIocGF5bG9hZC52YWx1ZSwgZGVmLnZhbHVlKSA9PT0gMDtcbiAgICAgICAgaWYgKGlzTXVsdGlwbGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiB0eXBlb2YgcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGNvZGU6IFwibm90X211bHRpcGxlX29mXCIsXG4gICAgICAgICAgICBkaXZpc29yOiBkZWYudmFsdWUsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja051bWJlckZvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tOdW1iZXJGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7IC8vIG5vIGZvcm1hdCBjaGVja3NcbiAgICBkZWYuZm9ybWF0ID0gZGVmLmZvcm1hdCB8fCBcImZsb2F0NjRcIjtcbiAgICBjb25zdCBpc0ludCA9IGRlZi5mb3JtYXQ/LmluY2x1ZGVzKFwiaW50XCIpO1xuICAgIGNvbnN0IG9yaWdpbiA9IGlzSW50ID8gXCJpbnRcIiA6IFwibnVtYmVyXCI7XG4gICAgY29uc3QgW21pbmltdW0sIG1heGltdW1dID0gdXRpbC5OVU1CRVJfRk9STUFUX1JBTkdFU1tkZWYuZm9ybWF0XTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcuZm9ybWF0ID0gZGVmLmZvcm1hdDtcbiAgICAgICAgYmFnLm1pbmltdW0gPSBtaW5pbXVtO1xuICAgICAgICBiYWcubWF4aW11bSA9IG1heGltdW07XG4gICAgICAgIGlmIChpc0ludClcbiAgICAgICAgICAgIGJhZy5wYXR0ZXJuID0gcmVnZXhlcy5pbnRlZ2VyO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKGlzSW50KSB7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgLy8gaW52YWxpZF9mb3JtYXQgaXNzdWVcbiAgICAgICAgICAgICAgICAvLyBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAvLyAgIGV4cGVjdGVkOiBkZWYuZm9ybWF0LFxuICAgICAgICAgICAgICAgIC8vICAgZm9ybWF0OiBkZWYuZm9ybWF0LFxuICAgICAgICAgICAgICAgIC8vICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgICAgIC8vICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgLy8gICBpbnN0LFxuICAgICAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgICAgIC8vIGludmFsaWRfdHlwZSBpc3N1ZVxuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogb3JpZ2luLFxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IGRlZi5mb3JtYXQsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIC8vIG5vdF9tdWx0aXBsZV9vZiBpc3N1ZVxuICAgICAgICAgICAgICAgIC8vIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIC8vICAgY29kZTogXCJub3RfbXVsdGlwbGVfb2ZcIixcbiAgICAgICAgICAgICAgICAvLyAgIG9yaWdpbjogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAvLyAgIGlucHV0LFxuICAgICAgICAgICAgICAgIC8vICAgaW5zdCxcbiAgICAgICAgICAgICAgICAvLyAgIGRpdmlzb3I6IDEsXG4gICAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGlucHV0KSkge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdG9vX2JpZ1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJ0b29fYmlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyB0b29fc21hbGxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwidG9vX3NtYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgPCBtaW5pbXVtKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBvcmlnaW46IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgICAgICBtaW5pbXVtLFxuICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0ID4gbWF4aW11bSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgb3JpZ2luOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGNvZGU6IFwidG9vX2JpZ1wiLFxuICAgICAgICAgICAgICAgIG1heGltdW0sXG4gICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tCaWdJbnRGb3JtYXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrQmlnSW50Rm9ybWF0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpOyAvLyBubyBmb3JtYXQgY2hlY2tzXG4gICAgY29uc3QgW21pbmltdW0sIG1heGltdW1dID0gdXRpbC5CSUdJTlRfRk9STUFUX1JBTkdFU1tkZWYuZm9ybWF0XTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcuZm9ybWF0ID0gZGVmLmZvcm1hdDtcbiAgICAgICAgYmFnLm1pbmltdW0gPSBtaW5pbXVtO1xuICAgICAgICBiYWcubWF4aW11bSA9IG1heGltdW07XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoaW5wdXQgPCBtaW5pbXVtKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBvcmlnaW46IFwiYmlnaW50XCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgICAgICBtaW5pbXVtOiBtaW5pbXVtLFxuICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0ID4gbWF4aW11bSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgb3JpZ2luOiBcImJpZ2ludFwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGNvZGU6IFwidG9vX2JpZ1wiLFxuICAgICAgICAgICAgICAgIG1heGltdW0sXG4gICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tNYXhTaXplID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja01heFNpemVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIHZhciBfYTtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIChfYSA9IGluc3QuX3pvZC5kZWYpLndoZW4gPz8gKF9hLndoZW4gPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICByZXR1cm4gIXV0aWwubnVsbGlzaCh2YWwpICYmIHZhbC5zaXplICE9PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgY29uc3QgY3VyciA9IChpbnN0Ll96b2QuYmFnLm1heGltdW0gPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtcbiAgICAgICAgaWYgKGRlZi5tYXhpbXVtIDwgY3VycilcbiAgICAgICAgICAgIGluc3QuX3pvZC5iYWcubWF4aW11bSA9IGRlZi5tYXhpbXVtO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGlucHV0LnNpemU7XG4gICAgICAgIGlmIChzaXplIDw9IGRlZi5tYXhpbXVtKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIG9yaWdpbjogdXRpbC5nZXRTaXphYmxlT3JpZ2luKGlucHV0KSxcbiAgICAgICAgICAgIGNvZGU6IFwidG9vX2JpZ1wiLFxuICAgICAgICAgICAgbWF4aW11bTogZGVmLm1heGltdW0sXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja01pblNpemUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrTWluU2l6ZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgKF9hID0gaW5zdC5fem9kLmRlZikud2hlbiA/PyAoX2Eud2hlbiA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIHJldHVybiAhdXRpbC5udWxsaXNoKHZhbCkgJiYgdmFsLnNpemUgIT09IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyID0gKGluc3QuX3pvZC5iYWcubWluaW11bSA/PyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBpZiAoZGVmLm1pbmltdW0gPiBjdXJyKVxuICAgICAgICAgICAgaW5zdC5fem9kLmJhZy5taW5pbXVtID0gZGVmLm1pbmltdW07XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBjb25zdCBzaXplID0gaW5wdXQuc2l6ZTtcbiAgICAgICAgaWYgKHNpemUgPj0gZGVmLm1pbmltdW0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiB1dGlsLmdldFNpemFibGVPcmlnaW4oaW5wdXQpLFxuICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgIG1pbmltdW06IGRlZi5taW5pbXVtLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tTaXplRXF1YWxzID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1NpemVFcXVhbHNcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIHZhciBfYTtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIChfYSA9IGluc3QuX3pvZC5kZWYpLndoZW4gPz8gKF9hLndoZW4gPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICByZXR1cm4gIXV0aWwubnVsbGlzaCh2YWwpICYmIHZhbC5zaXplICE9PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgY29uc3QgYmFnID0gaW5zdC5fem9kLmJhZztcbiAgICAgICAgYmFnLm1pbmltdW0gPSBkZWYuc2l6ZTtcbiAgICAgICAgYmFnLm1heGltdW0gPSBkZWYuc2l6ZTtcbiAgICAgICAgYmFnLnNpemUgPSBkZWYuc2l6ZTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGNvbnN0IHNpemUgPSBpbnB1dC5zaXplO1xuICAgICAgICBpZiAoc2l6ZSA9PT0gZGVmLnNpemUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHRvb0JpZyA9IHNpemUgPiBkZWYuc2l6ZTtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW46IHV0aWwuZ2V0U2l6YWJsZU9yaWdpbihpbnB1dCksXG4gICAgICAgICAgICAuLi4odG9vQmlnID8geyBjb2RlOiBcInRvb19iaWdcIiwgbWF4aW11bTogZGVmLnNpemUgfSA6IHsgY29kZTogXCJ0b29fc21hbGxcIiwgbWluaW11bTogZGVmLnNpemUgfSksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTWF4TGVuZ3RoID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja01heExlbmd0aFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgKF9hID0gaW5zdC5fem9kLmRlZikud2hlbiA/PyAoX2Eud2hlbiA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIHJldHVybiAhdXRpbC5udWxsaXNoKHZhbCkgJiYgdmFsLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnIgPSAoaW5zdC5fem9kLmJhZy5tYXhpbXVtID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgICAgIGlmIChkZWYubWF4aW11bSA8IGN1cnIpXG4gICAgICAgICAgICBpbnN0Ll96b2QuYmFnLm1heGltdW0gPSBkZWYubWF4aW11bTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8PSBkZWYubWF4aW11bSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gdXRpbC5nZXRMZW5ndGhhYmxlT3JpZ2luKGlucHV0KTtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICBjb2RlOiBcInRvb19iaWdcIixcbiAgICAgICAgICAgIG1heGltdW06IGRlZi5tYXhpbXVtLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tNaW5MZW5ndGggPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrTWluTGVuZ3RoXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICAoX2EgPSBpbnN0Ll96b2QuZGVmKS53aGVuID8/IChfYS53aGVuID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgcmV0dXJuICF1dGlsLm51bGxpc2godmFsKSAmJiB2YWwubGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgY29uc3QgY3VyciA9IChpbnN0Ll96b2QuYmFnLm1pbmltdW0gPz8gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKTtcbiAgICAgICAgaWYgKGRlZi5taW5pbXVtID4gY3VycilcbiAgICAgICAgICAgIGluc3QuX3pvZC5iYWcubWluaW11bSA9IGRlZi5taW5pbXVtO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID49IGRlZi5taW5pbXVtKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBvcmlnaW4gPSB1dGlsLmdldExlbmd0aGFibGVPcmlnaW4oaW5wdXQpO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIGNvZGU6IFwidG9vX3NtYWxsXCIsXG4gICAgICAgICAgICBtaW5pbXVtOiBkZWYubWluaW11bSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTGVuZ3RoRXF1YWxzID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja0xlbmd0aEVxdWFsc1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgKF9hID0gaW5zdC5fem9kLmRlZikud2hlbiA/PyAoX2Eud2hlbiA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIHJldHVybiAhdXRpbC5udWxsaXNoKHZhbCkgJiYgdmFsLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgICAgIGJhZy5taW5pbXVtID0gZGVmLmxlbmd0aDtcbiAgICAgICAgYmFnLm1heGltdW0gPSBkZWYubGVuZ3RoO1xuICAgICAgICBiYWcubGVuZ3RoID0gZGVmLmxlbmd0aDtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gZGVmLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gdXRpbC5nZXRMZW5ndGhhYmxlT3JpZ2luKGlucHV0KTtcbiAgICAgICAgY29uc3QgdG9vQmlnID0gbGVuZ3RoID4gZGVmLmxlbmd0aDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICAuLi4odG9vQmlnID8geyBjb2RlOiBcInRvb19iaWdcIiwgbWF4aW11bTogZGVmLmxlbmd0aCB9IDogeyBjb2RlOiBcInRvb19zbWFsbFwiLCBtaW5pbXVtOiBkZWYubGVuZ3RoIH0pLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja1N0cmluZ0Zvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tTdHJpbmdGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcuZm9ybWF0ID0gZGVmLmZvcm1hdDtcbiAgICAgICAgaWYgKGRlZi5wYXR0ZXJuKSB7XG4gICAgICAgICAgICBiYWcucGF0dGVybnMgPz8gKGJhZy5wYXR0ZXJucyA9IG5ldyBTZXQoKSk7XG4gICAgICAgICAgICBiYWcucGF0dGVybnMuYWRkKGRlZi5wYXR0ZXJuKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChkZWYucGF0dGVybilcbiAgICAgICAgKF9hID0gaW5zdC5fem9kKS5jaGVjayA/PyAoX2EuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgZGVmLnBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGlmIChkZWYucGF0dGVybi50ZXN0KHBheWxvYWQudmFsdWUpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG9yaWdpbjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBkZWYuZm9ybWF0LFxuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIC4uLihkZWYucGF0dGVybiA/IHsgcGF0dGVybjogZGVmLnBhdHRlcm4udG9TdHJpbmcoKSB9IDoge30pLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgZWxzZVxuICAgICAgICAoX2IgPSBpbnN0Ll96b2QpLmNoZWNrID8/IChfYi5jaGVjayA9ICgpID0+IHsgfSk7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tSZWdleCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tSZWdleFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZENoZWNrU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBkZWYucGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICAgICAgICBpZiAoZGVmLnBhdHRlcm4udGVzdChwYXlsb2FkLnZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW46IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICBmb3JtYXQ6IFwicmVnZXhcIixcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgcGF0dGVybjogZGVmLnBhdHRlcm4udG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja0xvd2VyQ2FzZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tMb3dlckNhc2VcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMubG93ZXJjYXNlKTtcbiAgICAkWm9kQ2hlY2tTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrVXBwZXJDYXNlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1VwcGVyQ2FzZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy51cHBlcmNhc2UpO1xuICAgICRab2RDaGVja1N0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tJbmNsdWRlcyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tJbmNsdWRlc1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBlc2NhcGVkUmVnZXggPSB1dGlsLmVzY2FwZVJlZ2V4KGRlZi5pbmNsdWRlcyk7XG4gICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAodHlwZW9mIGRlZi5wb3NpdGlvbiA9PT0gXCJudW1iZXJcIiA/IGBeLnske2RlZi5wb3NpdGlvbn19JHtlc2NhcGVkUmVnZXh9YCA6IGVzY2FwZWRSZWdleCk7XG4gICAgZGVmLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgICAgIGJhZy5wYXR0ZXJucyA/PyAoYmFnLnBhdHRlcm5zID0gbmV3IFNldCgpKTtcbiAgICAgICAgYmFnLnBhdHRlcm5zLmFkZChwYXR0ZXJuKTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZC52YWx1ZS5pbmNsdWRlcyhkZWYuaW5jbHVkZXMsIGRlZi5wb3NpdGlvbikpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBcImluY2x1ZGVzXCIsXG4gICAgICAgICAgICBpbmNsdWRlczogZGVmLmluY2x1ZGVzLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tTdGFydHNXaXRoID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1N0YXJ0c1dpdGhcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoYF4ke3V0aWwuZXNjYXBlUmVnZXgoZGVmLnByZWZpeCl9LipgKTtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSBwYXR0ZXJuKTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcucGF0dGVybnMgPz8gKGJhZy5wYXR0ZXJucyA9IG5ldyBTZXQoKSk7XG4gICAgICAgIGJhZy5wYXR0ZXJucy5hZGQocGF0dGVybik7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQudmFsdWUuc3RhcnRzV2l0aChkZWYucHJlZml4KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW46IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICBmb3JtYXQ6IFwic3RhcnRzX3dpdGhcIixcbiAgICAgICAgICAgIHByZWZpeDogZGVmLnByZWZpeCxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrRW5kc1dpdGggPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrRW5kc1dpdGhcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoYC4qJHt1dGlsLmVzY2FwZVJlZ2V4KGRlZi5zdWZmaXgpfSRgKTtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSBwYXR0ZXJuKTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcucGF0dGVybnMgPz8gKGJhZy5wYXR0ZXJucyA9IG5ldyBTZXQoKSk7XG4gICAgICAgIGJhZy5wYXR0ZXJucy5hZGQocGF0dGVybik7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQudmFsdWUuZW5kc1dpdGgoZGVmLnN1ZmZpeCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBcImVuZHNfd2l0aFwiLFxuICAgICAgICAgICAgc3VmZml4OiBkZWYuc3VmZml4LFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLyAgICAkWm9kQ2hlY2tQcm9wZXJ0eSAgICAvLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmZ1bmN0aW9uIGhhbmRsZUNoZWNrUHJvcGVydHlSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBwcm9wZXJ0eSkge1xuICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKHByb3BlcnR5LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgfVxufVxuZXhwb3J0IGNvbnN0ICRab2RDaGVja1Byb3BlcnR5ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1Byb3BlcnR5XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi5zY2hlbWEuX3pvZC5ydW4oe1xuICAgICAgICAgICAgdmFsdWU6IHBheWxvYWQudmFsdWVbZGVmLnByb3BlcnR5XSxcbiAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiBoYW5kbGVDaGVja1Byb3BlcnR5UmVzdWx0KHJlc3VsdCwgcGF5bG9hZCwgZGVmLnByb3BlcnR5KSk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlQ2hlY2tQcm9wZXJ0eVJlc3VsdChyZXN1bHQsIHBheWxvYWQsIGRlZi5wcm9wZXJ0eSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTWltZVR5cGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrTWltZVR5cGVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgbWltZVNldCA9IG5ldyBTZXQoZGVmLm1pbWUpO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGluc3QuX3pvZC5iYWcubWltZSA9IGRlZi5taW1lO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChtaW1lU2V0LmhhcyhwYXlsb2FkLnZhbHVlLnR5cGUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF92YWx1ZVwiLFxuICAgICAgICAgICAgdmFsdWVzOiBkZWYubWltZSxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLnR5cGUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tPdmVyd3JpdGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrT3ZlcndyaXRlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBkZWYudHgocGF5bG9hZC52YWx1ZSk7XG4gICAgfTtcbn0pO1xuIiwiZXhwb3J0IGNsYXNzIERvYyB7XG4gICAgY29uc3RydWN0b3IoYXJncyA9IFtdKSB7XG4gICAgICAgIHRoaXMuY29udGVudCA9IFtdO1xuICAgICAgICB0aGlzLmluZGVudCA9IDA7XG4gICAgICAgIGlmICh0aGlzKVxuICAgICAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB9XG4gICAgaW5kZW50ZWQoZm4pIHtcbiAgICAgICAgdGhpcy5pbmRlbnQgKz0gMTtcbiAgICAgICAgZm4odGhpcyk7XG4gICAgICAgIHRoaXMuaW5kZW50IC09IDE7XG4gICAgfVxuICAgIHdyaXRlKGFyZykge1xuICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBhcmcodGhpcywgeyBleGVjdXRpb246IFwic3luY1wiIH0pO1xuICAgICAgICAgICAgYXJnKHRoaXMsIHsgZXhlY3V0aW9uOiBcImFzeW5jXCIgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGVudCA9IGFyZztcbiAgICAgICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpLmZpbHRlcigoeCkgPT4geCk7XG4gICAgICAgIGNvbnN0IG1pbkluZGVudCA9IE1hdGgubWluKC4uLmxpbmVzLm1hcCgoeCkgPT4geC5sZW5ndGggLSB4LnRyaW1TdGFydCgpLmxlbmd0aCkpO1xuICAgICAgICBjb25zdCBkZWRlbnRlZCA9IGxpbmVzLm1hcCgoeCkgPT4geC5zbGljZShtaW5JbmRlbnQpKS5tYXAoKHgpID0+IFwiIFwiLnJlcGVhdCh0aGlzLmluZGVudCAqIDIpICsgeCk7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBkZWRlbnRlZCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50LnB1c2gobGluZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgY29uc3QgRiA9IEZ1bmN0aW9uO1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcz8uYXJncztcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXM/LmNvbnRlbnQgPz8gW2BgXTtcbiAgICAgICAgY29uc3QgbGluZXMgPSBbLi4uY29udGVudC5tYXAoKHgpID0+IGAgICR7eH1gKV07XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmVzLmpvaW4oXCJcXG5cIikpO1xuICAgICAgICByZXR1cm4gbmV3IEYoLi4uYXJncywgbGluZXMuam9pbihcIlxcblwiKSk7XG4gICAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHZlcnNpb24gPSB7XG4gICAgbWFqb3I6IDQsXG4gICAgbWlub3I6IDQsXG4gICAgcGF0Y2g6IDMsXG59O1xuIiwiaW1wb3J0ICogYXMgY2hlY2tzIGZyb20gXCIuL2NoZWNrcy5qc1wiO1xuaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiLi9jb3JlLmpzXCI7XG5pbXBvcnQgeyBEb2MgfSBmcm9tIFwiLi9kb2MuanNcIjtcbmltcG9ydCB7IHBhcnNlLCBwYXJzZUFzeW5jLCBzYWZlUGFyc2UsIHNhZmVQYXJzZUFzeW5jIH0gZnJvbSBcIi4vcGFyc2UuanNcIjtcbmltcG9ydCAqIGFzIHJlZ2V4ZXMgZnJvbSBcIi4vcmVnZXhlcy5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi91dGlsLmpzXCI7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSBcIi4vdmVyc2lvbnMuanNcIjtcbmV4cG9ydCBjb25zdCAkWm9kVHlwZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVHlwZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIGluc3QgPz8gKGluc3QgPSB7fSk7XG4gICAgaW5zdC5fem9kLmRlZiA9IGRlZjsgLy8gc2V0IF9kZWYgcHJvcGVydHlcbiAgICBpbnN0Ll96b2QuYmFnID0gaW5zdC5fem9kLmJhZyB8fCB7fTsgLy8gaW5pdGlhbGl6ZSBfYmFnIG9iamVjdFxuICAgIGluc3QuX3pvZC52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICBjb25zdCBjaGVja3MgPSBbLi4uKGluc3QuX3pvZC5kZWYuY2hlY2tzID8/IFtdKV07XG4gICAgLy8gaWYgaW5zdCBpcyBpdHNlbGYgYSBjaGVja3MuJFpvZENoZWNrLCBydW4gaXQgYXMgYSBjaGVja1xuICAgIGlmIChpbnN0Ll96b2QudHJhaXRzLmhhcyhcIiRab2RDaGVja1wiKSkge1xuICAgICAgICBjaGVja3MudW5zaGlmdChpbnN0KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBjaCBvZiBjaGVja3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBmbiBvZiBjaC5fem9kLm9uYXR0YWNoKSB7XG4gICAgICAgICAgICBmbihpbnN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hlY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBkZWZlcnJlZCBpbml0aWFsaXplclxuICAgICAgICAvLyBpbnN0Ll96b2QucGFyc2UgaXMgbm90IHlldCBkZWZpbmVkXG4gICAgICAgIChfYSA9IGluc3QuX3pvZCkuZGVmZXJyZWQgPz8gKF9hLmRlZmVycmVkID0gW10pO1xuICAgICAgICBpbnN0Ll96b2QuZGVmZXJyZWQ/LnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgaW5zdC5fem9kLnJ1biA9IGluc3QuX3pvZC5wYXJzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBydW5DaGVja3MgPSAocGF5bG9hZCwgY2hlY2tzLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGxldCBpc0Fib3J0ZWQgPSB1dGlsLmFib3J0ZWQocGF5bG9hZCk7XG4gICAgICAgICAgICBsZXQgYXN5bmNSZXN1bHQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIGNoZWNrcykge1xuICAgICAgICAgICAgICAgIGlmIChjaC5fem9kLmRlZi53aGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmV4cGxpY2l0bHlBYm9ydGVkKHBheWxvYWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFJ1biA9IGNoLl96b2QuZGVmLndoZW4ocGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2hvdWxkUnVuKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyckxlbiA9IHBheWxvYWQuaXNzdWVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBfID0gY2guX3pvZC5jaGVjayhwYXlsb2FkKTtcbiAgICAgICAgICAgICAgICBpZiAoXyBpbnN0YW5jZW9mIFByb21pc2UgJiYgY3R4Py5hc3luYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuJFpvZEFzeW5jRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFzeW5jUmVzdWx0IHx8IF8gaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jUmVzdWx0ID0gKGFzeW5jUmVzdWx0ID8/IFByb21pc2UucmVzb2x2ZSgpKS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IF87XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0TGVuID0gcGF5bG9hZC5pc3N1ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRMZW4gPT09IGN1cnJMZW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Fib3J0ZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBYm9ydGVkID0gdXRpbC5hYm9ydGVkKHBheWxvYWQsIGN1cnJMZW4pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRMZW4gPSBwYXlsb2FkLmlzc3Vlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0TGVuID09PSBjdXJyTGVuKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNBYm9ydGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBYm9ydGVkID0gdXRpbC5hYm9ydGVkKHBheWxvYWQsIGN1cnJMZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhc3luY1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhc3luY1Jlc3VsdC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaGFuZGxlQ2FuYXJ5UmVzdWx0ID0gKGNhbmFyeSwgcGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgICAgICAvLyBhYm9ydCBpZiB0aGUgY2FuYXJ5IGlzIGFib3J0ZWRcbiAgICAgICAgICAgIGlmICh1dGlsLmFib3J0ZWQoY2FuYXJ5KSkge1xuICAgICAgICAgICAgICAgIGNhbmFyeS5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FuYXJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcnVuIGNoZWNrcyBmaXJzdCwgdGhlblxuICAgICAgICAgICAgY29uc3QgY2hlY2tSZXN1bHQgPSBydW5DaGVja3MocGF5bG9hZCwgY2hlY2tzLCBjdHgpO1xuICAgICAgICAgICAgaWYgKGNoZWNrUmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGlmIChjdHguYXN5bmMgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kQXN5bmNFcnJvcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGVja1Jlc3VsdC50aGVuKChjaGVja1Jlc3VsdCkgPT4gaW5zdC5fem9kLnBhcnNlKGNoZWNrUmVzdWx0LCBjdHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbnN0Ll96b2QucGFyc2UoY2hlY2tSZXN1bHQsIGN0eCk7XG4gICAgICAgIH07XG4gICAgICAgIGluc3QuX3pvZC5ydW4gPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgICAgICBpZiAoY3R4LnNraXBDaGVja3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zdC5fem9kLnBhcnNlKHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICAgICAgLy8gcnVuIGNhbmFyeVxuICAgICAgICAgICAgICAgIC8vIGluaXRpYWwgcGFzcyAobm8gY2hlY2tzKVxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbmFyeSA9IGluc3QuX3pvZC5wYXJzZSh7IHZhbHVlOiBwYXlsb2FkLnZhbHVlLCBpc3N1ZXM6IFtdIH0sIHsgLi4uY3R4LCBza2lwQ2hlY2tzOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIGlmIChjYW5hcnkgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5hcnkudGhlbigoY2FuYXJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQ2FuYXJ5UmVzdWx0KGNhbmFyeSwgcGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVDYW5hcnlSZXN1bHQoY2FuYXJ5LCBwYXlsb2FkLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZm9yd2FyZFxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5zdC5fem9kLnBhcnNlKHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGlmIChjdHguYXN5bmMgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kQXN5bmNFcnJvcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiBydW5DaGVja3MocmVzdWx0LCBjaGVja3MsIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJ1bkNoZWNrcyhyZXN1bHQsIGNoZWNrcywgY3R4KTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gTGF6eSBpbml0aWFsaXplIH5zdGFuZGFyZCB0byBhdm9pZCBjcmVhdGluZyBvYmplY3RzIGZvciBldmVyeSBzY2hlbWFcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdCwgXCJ+c3RhbmRhcmRcIiwgKCkgPT4gKHtcbiAgICAgICAgdmFsaWRhdGU6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByID0gc2FmZVBhcnNlKGluc3QsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gci5zdWNjZXNzID8geyB2YWx1ZTogci5kYXRhIH0gOiB7IGlzc3Vlczogci5lcnJvcj8uaXNzdWVzIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoXykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzYWZlUGFyc2VBc3luYyhpbnN0LCB2YWx1ZSkudGhlbigocikgPT4gKHIuc3VjY2VzcyA/IHsgdmFsdWU6IHIuZGF0YSB9IDogeyBpc3N1ZXM6IHIuZXJyb3I/Lmlzc3VlcyB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZlbmRvcjogXCJ6b2RcIixcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICB9KSk7XG59KTtcbmV4cG9ydCB7IGNsb25lIH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuZXhwb3J0IGNvbnN0ICRab2RTdHJpbmcgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFN0cmluZ1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXR0ZXJuID0gWy4uLihpbnN0Py5fem9kLmJhZz8ucGF0dGVybnMgPz8gW10pXS5wb3AoKSA/PyByZWdleGVzLnN0cmluZyhpbnN0Ll96b2QuYmFnKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgXykgPT4ge1xuICAgICAgICBpZiAoZGVmLmNvZXJjZSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IFN0cmluZyhwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfKSB7IH1cbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkLnZhbHVlID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RTdHJpbmdGb3JtYXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFN0cmluZ0Zvcm1hdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gY2hlY2sgaW5pdGlhbGl6YXRpb24gbXVzdCBjb21lIGZpcnN0XG4gICAgY2hlY2tzLiRab2RDaGVja1N0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgJFpvZFN0cmluZy5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kR1VJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kR1VJRFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5ndWlkKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RVVUlEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RVVUlEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBpZiAoZGVmLnZlcnNpb24pIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbk1hcCA9IHtcbiAgICAgICAgICAgIHYxOiAxLFxuICAgICAgICAgICAgdjI6IDIsXG4gICAgICAgICAgICB2MzogMyxcbiAgICAgICAgICAgIHY0OiA0LFxuICAgICAgICAgICAgdjU6IDUsXG4gICAgICAgICAgICB2NjogNixcbiAgICAgICAgICAgIHY3OiA3LFxuICAgICAgICAgICAgdjg6IDgsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHYgPSB2ZXJzaW9uTWFwW2RlZi52ZXJzaW9uXTtcbiAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVVUlEIHZlcnNpb246IFwiJHtkZWYudmVyc2lvbn1cImApO1xuICAgICAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLnV1aWQodikpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMudXVpZCgpKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RFbWFpbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kRW1haWxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuZW1haWwpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFVSTCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVVJMXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gVHJpbSB3aGl0ZXNwYWNlIGZyb20gaW5wdXRcbiAgICAgICAgICAgIGNvbnN0IHRyaW1tZWQgPSBwYXlsb2FkLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgIC8vIFdoZW4gbm9ybWFsaXplIGlzIG9mZiwgcmVxdWlyZSA6Ly8gZm9yIGh0dHAvaHR0cHMgVVJMc1xuICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBzdHJpbmdzIGxpa2UgXCJodHRwOmV4YW1wbGUuY29tXCIgb3IgXCJodHRwczovcGF0aFwiIGZyb20gYmVpbmcgc2lsZW50bHkgYWNjZXB0ZWRcbiAgICAgICAgICAgIGlmICghZGVmLm5vcm1hbGl6ZSAmJiBkZWYucHJvdG9jb2w/LnNvdXJjZSA9PT0gcmVnZXhlcy5odHRwUHJvdG9jb2wuc291cmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KHRyaW1tZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBcInVybFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJJbnZhbGlkIFVSTCBmb3JtYXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodHJpbW1lZCk7XG4gICAgICAgICAgICBpZiAoZGVmLmhvc3RuYW1lKSB7XG4gICAgICAgICAgICAgICAgZGVmLmhvc3RuYW1lLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKCFkZWYuaG9zdG5hbWUudGVzdCh1cmwuaG9zdG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBcInVybFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJJbnZhbGlkIGhvc3RuYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiBkZWYuaG9zdG5hbWUuc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYucHJvdG9jb2wpIHtcbiAgICAgICAgICAgICAgICBkZWYucHJvdG9jb2wubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoIWRlZi5wcm90b2NvbC50ZXN0KHVybC5wcm90b2NvbC5lbmRzV2l0aChcIjpcIikgPyB1cmwucHJvdG9jb2wuc2xpY2UoMCwgLTEpIDogdXJsLnByb3RvY29sKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogXCJ1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSW52YWxpZCBwcm90b2NvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybjogZGVmLnByb3RvY29sLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXQgdGhlIG91dHB1dCB2YWx1ZSBiYXNlZCBvbiBub3JtYWxpemUgZmxhZ1xuICAgICAgICAgICAgaWYgKGRlZi5ub3JtYWxpemUpIHtcbiAgICAgICAgICAgICAgICAvLyBVc2Ugbm9ybWFsaXplZCBVUkxcbiAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gdXJsLmhyZWY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgaW5wdXQgKHRyaW1tZWQpXG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHRyaW1tZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwidXJsXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RFbW9qaSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kRW1vamlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuZW1vamkoKSk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTmFub0lEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROYW5vSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMubmFub2lkKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuLyoqXG4gKiBAZGVwcmVjYXRlZCBDVUlEIHYxIGlzIGRlcHJlY2F0ZWQgYnkgaXRzIGF1dGhvcnMgZHVlIHRvIGluZm9ybWF0aW9uIGxlYWthZ2VcbiAqICh0aW1lc3RhbXBzIGVtYmVkZGVkIGluIHRoZSBpZCkuIFVzZSB7QGxpbmsgJFpvZENVSUQyfSBpbnN0ZWFkLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJhbGxlbGRyaXZlL2N1aWQuXG4gKi9cbmV4cG9ydCBjb25zdCAkWm9kQ1VJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ1VJRFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5jdWlkKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDVUlEMiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ1VJRDJcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuY3VpZDIpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFVMSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFVMSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMudWxpZCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kWElEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RYSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMueGlkKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RLU1VJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kS1NVSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMua3N1aWQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZElTT0RhdGVUaW1lID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RJU09EYXRlVGltZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5kYXRldGltZShkZWYpKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RJU09EYXRlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RJU09EYXRlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmRhdGUpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZElTT1RpbWUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZElTT1RpbWVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMudGltZShkZWYpKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RJU09EdXJhdGlvbiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kSVNPRHVyYXRpb25cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuZHVyYXRpb24pO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZElQdjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZElQdjRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuaXB2NCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmJhZy5mb3JtYXQgPSBgaXB2NGA7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kSVB2NiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kSVB2NlwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5pcHY2KTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuYmFnLmZvcm1hdCA9IGBpcHY2YDtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgbmV3IFVSTChgaHR0cDovL1ske3BheWxvYWQudmFsdWV9XWApO1xuICAgICAgICAgICAgLy8gcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiaXB2NlwiLFxuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTUFDID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RNQUNcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMubWFjKGRlZi5kZWxpbWl0ZXIpKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuYmFnLmZvcm1hdCA9IGBtYWNgO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENJRFJ2NCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ0lEUnY0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmNpZHJ2NCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ0lEUnY2ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDSURSdjZcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuY2lkcnY2KTsgLy8gbm90IHVzZWQgZm9yIHZhbGlkYXRpb25cbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHBheWxvYWQudmFsdWUuc3BsaXQoXCIvXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgIGNvbnN0IFthZGRyZXNzLCBwcmVmaXhdID0gcGFydHM7XG4gICAgICAgICAgICBpZiAoIXByZWZpeClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeE51bSA9IE51bWJlcihwcmVmaXgpO1xuICAgICAgICAgICAgaWYgKGAke3ByZWZpeE51bX1gICE9PSBwcmVmaXgpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICBpZiAocHJlZml4TnVtIDwgMCB8fCBwcmVmaXhOdW0gPiAxMjgpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBuZXcgVVJMKGBodHRwOi8vWyR7YWRkcmVzc31dYCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJjaWRydjZcIixcbiAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSk7XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gICBab2RCYXNlNjQgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQmFzZTY0KGRhdGEpIHtcbiAgICBpZiAoZGF0YSA9PT0gXCJcIilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgLy8gYXRvYiBpZ25vcmVzIHdoaXRlc3BhY2UsIHNvIHJlamVjdCBpdCB1cCBmcm9udC5cbiAgICBpZiAoL1xccy8udGVzdChkYXRhKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChkYXRhLmxlbmd0aCAlIDQgIT09IDApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGF0b2IoZGF0YSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgJFpvZEJhc2U2NCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQmFzZTY0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmJhc2U2NCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmJhZy5jb250ZW50RW5jb2RpbmcgPSBcImJhc2U2NFwiO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChpc1ZhbGlkQmFzZTY0KHBheWxvYWQudmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgIGZvcm1hdDogXCJiYXNlNjRcIixcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gICBab2RCYXNlNjQgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQmFzZTY0VVJMKGRhdGEpIHtcbiAgICBpZiAoIXJlZ2V4ZXMuYmFzZTY0dXJsLnRlc3QoZGF0YSkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBiYXNlNjQgPSBkYXRhLnJlcGxhY2UoL1stX10vZywgKGMpID0+IChjID09PSBcIi1cIiA/IFwiK1wiIDogXCIvXCIpKTtcbiAgICBjb25zdCBwYWRkZWQgPSBiYXNlNjQucGFkRW5kKE1hdGguY2VpbChiYXNlNjQubGVuZ3RoIC8gNCkgKiA0LCBcIj1cIik7XG4gICAgcmV0dXJuIGlzVmFsaWRCYXNlNjQocGFkZGVkKTtcbn1cbmV4cG9ydCBjb25zdCAkWm9kQmFzZTY0VVJMID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RCYXNlNjRVUkxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuYmFzZTY0dXJsKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuYmFnLmNvbnRlbnRFbmNvZGluZyA9IFwiYmFzZTY0dXJsXCI7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKGlzVmFsaWRCYXNlNjRVUkwocGF5bG9hZC52YWx1ZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBcImJhc2U2NHVybFwiLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kRTE2NCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kRTE2NFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5lMTY0KTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICAgWm9kSldUICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEpXVCh0b2tlbiwgYWxnb3JpdGhtID0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRva2Vuc1BhcnRzID0gdG9rZW4uc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAodG9rZW5zUGFydHMubGVuZ3RoICE9PSAzKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBbaGVhZGVyXSA9IHRva2Vuc1BhcnRzO1xuICAgICAgICBpZiAoIWhlYWRlcilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCBwYXJzZWRIZWFkZXIgPSBKU09OLnBhcnNlKGF0b2IoaGVhZGVyKSk7XG4gICAgICAgIGlmIChcInR5cFwiIGluIHBhcnNlZEhlYWRlciAmJiBwYXJzZWRIZWFkZXI/LnR5cCAhPT0gXCJKV1RcIilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFwYXJzZWRIZWFkZXIuYWxnKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoYWxnb3JpdGhtICYmICghKFwiYWxnXCIgaW4gcGFyc2VkSGVhZGVyKSB8fCBwYXJzZWRIZWFkZXIuYWxnICE9PSBhbGdvcml0aG0pKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IGNvbnN0ICRab2RKV1QgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEpXVFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKGlzVmFsaWRKV1QocGF5bG9hZC52YWx1ZSwgZGVmLmFsZykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBcImp3dFwiLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDdXN0b21TdHJpbmdGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChkZWYuZm4ocGF5bG9hZC52YWx1ZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBkZWYuZm9ybWF0LFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTnVtYmVyID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROdW1iZXJcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGF0dGVybiA9IGluc3QuX3pvZC5iYWcucGF0dGVybiA/PyByZWdleGVzLm51bWJlcjtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBpZiAoZGVmLmNvZXJjZSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IE51bWJlcihwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfKSB7IH1cbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiICYmICFOdW1iZXIuaXNOYU4oaW5wdXQpICYmIE51bWJlci5pc0Zpbml0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlY2VpdmVkID0gdHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiXG4gICAgICAgICAgICA/IE51bWJlci5pc05hTihpbnB1dClcbiAgICAgICAgICAgICAgICA/IFwiTmFOXCJcbiAgICAgICAgICAgICAgICA6ICFOdW1iZXIuaXNGaW5pdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gXCJJbmZpbml0eVwiXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJudW1iZXJcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAuLi4ocmVjZWl2ZWQgPyB7IHJlY2VpdmVkIH0gOiB7fSksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE51bWJlckZvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTnVtYmVyRm9ybWF0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjaGVja3MuJFpvZENoZWNrTnVtYmVyRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICAkWm9kTnVtYmVyLmluaXQoaW5zdCwgZGVmKTsgLy8gbm8gZm9ybWF0IGNoZWNrc1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEJvb2xlYW4gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEJvb2xlYW5cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGF0dGVybiA9IHJlZ2V4ZXMuYm9vbGVhbjtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBpZiAoZGVmLmNvZXJjZSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IEJvb2xlYW4ocGF5bG9hZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoXykgeyB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJib29sZWFuXCIpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RCaWdJbnQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEJpZ0ludFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXR0ZXJuID0gcmVnZXhlcy5iaWdpbnQ7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKGRlZi5jb2VyY2UpXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBCaWdJbnQocGF5bG9hZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoXykgeyB9XG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZC52YWx1ZSA9PT0gXCJiaWdpbnRcIilcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcImJpZ2ludFwiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQmlnSW50Rm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RCaWdJbnRGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNoZWNrcy4kWm9kQ2hlY2tCaWdJbnRGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgICRab2RCaWdJbnQuaW5pdChpbnN0LCBkZWYpOyAvLyBubyBmb3JtYXQgY2hlY2tzXG59KTtcbmV4cG9ydCBjb25zdCAkWm9kU3ltYm9sID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RTeW1ib2xcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3ltYm9sXCIpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJzeW1ib2xcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFVuZGVmaW5lZCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVW5kZWZpbmVkXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSByZWdleGVzLnVuZGVmaW5lZDtcbiAgICBpbnN0Ll96b2QudmFsdWVzID0gbmV3IFNldChbdW5kZWZpbmVkXSk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwidW5kZWZpbmVkXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2ROdWxsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROdWxsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSByZWdleGVzLm51bGw7XG4gICAgaW5zdC5fem9kLnZhbHVlcyA9IG5ldyBTZXQoW251bGxdKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcIm51bGxcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEFueSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQW55XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQpID0+IHBheWxvYWQ7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kVW5rbm93biA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVW5rbm93blwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkKSA9PiBwYXlsb2FkO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE5ldmVyID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROZXZlclwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwibmV2ZXJcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFZvaWQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFZvaWRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJ2b2lkXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2REYXRlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2REYXRlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKGRlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ldyBEYXRlKHBheWxvYWQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9lcnIpIHsgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgaXNEYXRlID0gaW5wdXQgaW5zdGFuY2VvZiBEYXRlO1xuICAgICAgICBjb25zdCBpc1ZhbGlkRGF0ZSA9IGlzRGF0ZSAmJiAhTnVtYmVyLmlzTmFOKGlucHV0LmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChpc1ZhbGlkRGF0ZSlcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcImRhdGVcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIC4uLihpc0RhdGUgPyB7IHJlY2VpdmVkOiBcIkludmFsaWQgRGF0ZVwiIH0gOiB7fSksXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlQXJyYXlSZXN1bHQocmVzdWx0LCBmaW5hbCwgaW5kZXgpIHtcbiAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoaW5kZXgsIHJlc3VsdC5pc3N1ZXMpKTtcbiAgICB9XG4gICAgZmluYWwudmFsdWVbaW5kZXhdID0gcmVzdWx0LnZhbHVlO1xufVxuZXhwb3J0IGNvbnN0ICRab2RBcnJheSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQXJyYXlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBBcnJheShpbnB1dC5sZW5ndGgpO1xuICAgICAgICBjb25zdCBwcm9tcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gaW5wdXRbaV07XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYuZWxlbWVudC5fem9kLnJ1bih7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgIH0sIGN0eCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHByb21zLnB1c2gocmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4gaGFuZGxlQXJyYXlSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBpKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlQXJyYXlSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbXMpLnRoZW4oKCkgPT4gcGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7IC8vaGFuZGxlQXJyYXlSZXN1bHRzQXN5bmMocGFyc2VSZXN1bHRzLCBmaW5hbCk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlUHJvcGVydHlSZXN1bHQocmVzdWx0LCBmaW5hbCwga2V5LCBpbnB1dCwgaXNPcHRpb25hbEluLCBpc09wdGlvbmFsT3V0KSB7XG4gICAgY29uc3QgaXNQcmVzZW50ID0ga2V5IGluIGlucHV0O1xuICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAvLyBGb3Igb3B0aW9uYWwtaW4vb3V0IHNjaGVtYXMsIGlnbm9yZSBlcnJvcnMgb24gYWJzZW50IGtleXMuXG4gICAgICAgIGlmIChpc09wdGlvbmFsSW4gJiYgaXNPcHRpb25hbE91dCAmJiAhaXNQcmVzZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoa2V5LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgfVxuICAgIGlmICghaXNQcmVzZW50ICYmICFpc09wdGlvbmFsSW4pIHtcbiAgICAgICAgaWYgKCFyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwibm9ub3B0aW9uYWxcIixcbiAgICAgICAgICAgICAgICBpbnB1dDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHBhdGg6IFtrZXldLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGlzUHJlc2VudCkge1xuICAgICAgICAgICAgZmluYWwudmFsdWVba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmluYWwudmFsdWVba2V5XSA9IHJlc3VsdC52YWx1ZTtcbiAgICB9XG59XG5mdW5jdGlvbiBub3JtYWxpemVEZWYoZGVmKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZi5zaGFwZSk7XG4gICAgZm9yIChjb25zdCBrIG9mIGtleXMpIHtcbiAgICAgICAgaWYgKCFkZWYuc2hhcGU/LltrXT8uX3pvZD8udHJhaXRzPy5oYXMoXCIkWm9kVHlwZVwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVsZW1lbnQgYXQga2V5IFwiJHtrfVwiOiBleHBlY3RlZCBhIFpvZCBzY2hlbWFgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBva2V5cyA9IHV0aWwub3B0aW9uYWxLZXlzKGRlZi5zaGFwZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGVmLFxuICAgICAgICBrZXlzLFxuICAgICAgICBrZXlTZXQ6IG5ldyBTZXQoa2V5cyksXG4gICAgICAgIG51bUtleXM6IGtleXMubGVuZ3RoLFxuICAgICAgICBvcHRpb25hbEtleXM6IG5ldyBTZXQob2tleXMpLFxuICAgIH07XG59XG5mdW5jdGlvbiBoYW5kbGVDYXRjaGFsbChwcm9tcywgaW5wdXQsIHBheWxvYWQsIGN0eCwgZGVmLCBpbnN0KSB7XG4gICAgY29uc3QgdW5yZWNvZ25pemVkID0gW107XG4gICAgY29uc3Qga2V5U2V0ID0gZGVmLmtleVNldDtcbiAgICBjb25zdCBfY2F0Y2hhbGwgPSBkZWYuY2F0Y2hhbGwuX3pvZDtcbiAgICBjb25zdCB0ID0gX2NhdGNoYWxsLmRlZi50eXBlO1xuICAgIGNvbnN0IGlzT3B0aW9uYWxJbiA9IF9jYXRjaGFsbC5vcHRpbiA9PT0gXCJvcHRpb25hbFwiO1xuICAgIGNvbnN0IGlzT3B0aW9uYWxPdXQgPSBfY2F0Y2hhbGwub3B0b3V0ID09PSBcIm9wdGlvbmFsXCI7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgICAgLy8gc2tpcCBfX3Byb3RvX18gc28gaXQgY2FuJ3QgcmVwbGFjZSB0aGUgcmVzdWx0IHByb3RvdHlwZSB2aWEgdGhlXG4gICAgICAgIC8vIGFzc2lnbm1lbnQgc2V0dGVyIG9uIHRoZSBwbGFpbiB7fSB3ZSBidWlsZCBpbnRvXG4gICAgICAgIGlmIChrZXkgPT09IFwiX19wcm90b19fXCIpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKGtleVNldC5oYXMoa2V5KSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodCA9PT0gXCJuZXZlclwiKSB7XG4gICAgICAgICAgICB1bnJlY29nbml6ZWQucHVzaChrZXkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgciA9IF9jYXRjaGFsbC5ydW4oeyB2YWx1ZTogaW5wdXRba2V5XSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICBpZiAociBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHByb21zLnB1c2goci50aGVuKChyKSA9PiBoYW5kbGVQcm9wZXJ0eVJlc3VsdChyLCBwYXlsb2FkLCBrZXksIGlucHV0LCBpc09wdGlvbmFsSW4sIGlzT3B0aW9uYWxPdXQpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVQcm9wZXJ0eVJlc3VsdChyLCBwYXlsb2FkLCBrZXksIGlucHV0LCBpc09wdGlvbmFsSW4sIGlzT3B0aW9uYWxPdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh1bnJlY29nbml6ZWQubGVuZ3RoKSB7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJ1bnJlY29nbml6ZWRfa2V5c1wiLFxuICAgICAgICAgICAga2V5czogdW5yZWNvZ25pemVkLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCFwcm9tcy5sZW5ndGgpXG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9tcykudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0ICRab2RPYmplY3QgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE9iamVjdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gcmVxdWlyZXMgY2FzdCBiZWNhdXNlIHRlY2huaWNhbGx5ICRab2RPYmplY3QgZG9lc24ndCBleHRlbmRcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgLy8gY29uc3Qgc2ggPSBkZWYuc2hhcGU7XG4gICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZGVmLCBcInNoYXBlXCIpO1xuICAgIGlmICghZGVzYz8uZ2V0KSB7XG4gICAgICAgIGNvbnN0IHNoID0gZGVmLnNoYXBlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVmLCBcInNoYXBlXCIsIHtcbiAgICAgICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NoID0geyAuLi5zaCB9O1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWYsIFwic2hhcGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbmV3U2gsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1NoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IF9ub3JtYWxpemVkID0gdXRpbC5jYWNoZWQoKCkgPT4gbm9ybWFsaXplRGVmKGRlZikpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicHJvcFZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNoYXBlID0gZGVmLnNoYXBlO1xuICAgICAgICBjb25zdCBwcm9wVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNoYXBlKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNoYXBlW2tleV0uX3pvZDtcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBwcm9wVmFsdWVzW2tleV0gPz8gKHByb3BWYWx1ZXNba2V5XSA9IG5ldyBTZXQoKSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIGZpZWxkLnZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgcHJvcFZhbHVlc1trZXldLmFkZCh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcFZhbHVlcztcbiAgICB9KTtcbiAgICBjb25zdCBpc09iamVjdCA9IHV0aWwuaXNPYmplY3Q7XG4gICAgY29uc3QgY2F0Y2hhbGwgPSBkZWYuY2F0Y2hhbGw7XG4gICAgbGV0IHZhbHVlO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgdmFsdWUgPz8gKHZhbHVlID0gX25vcm1hbGl6ZWQudmFsdWUpO1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSB7fTtcbiAgICAgICAgY29uc3QgcHJvbXMgPSBbXTtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSB2YWx1ZS5zaGFwZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdmFsdWUua2V5cykge1xuICAgICAgICAgICAgY29uc3QgZWwgPSBzaGFwZVtrZXldO1xuICAgICAgICAgICAgY29uc3QgaXNPcHRpb25hbEluID0gZWwuX3pvZC5vcHRpbiA9PT0gXCJvcHRpb25hbFwiO1xuICAgICAgICAgICAgY29uc3QgaXNPcHRpb25hbE91dCA9IGVsLl96b2Qub3B0b3V0ID09PSBcIm9wdGlvbmFsXCI7XG4gICAgICAgICAgICBjb25zdCByID0gZWwuX3pvZC5ydW4oeyB2YWx1ZTogaW5wdXRba2V5XSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcHJvbXMucHVzaChyLnRoZW4oKHIpID0+IGhhbmRsZVByb3BlcnR5UmVzdWx0KHIsIHBheWxvYWQsIGtleSwgaW5wdXQsIGlzT3B0aW9uYWxJbiwgaXNPcHRpb25hbE91dCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZVByb3BlcnR5UmVzdWx0KHIsIHBheWxvYWQsIGtleSwgaW5wdXQsIGlzT3B0aW9uYWxJbiwgaXNPcHRpb25hbE91dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjYXRjaGFsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21zLmxlbmd0aCA/IFByb21pc2UuYWxsKHByb21zKS50aGVuKCgpID0+IHBheWxvYWQpIDogcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlQ2F0Y2hhbGwocHJvbXMsIGlucHV0LCBwYXlsb2FkLCBjdHgsIF9ub3JtYWxpemVkLnZhbHVlLCBpbnN0KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE9iamVjdEpJVCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kT2JqZWN0SklUXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyByZXF1aXJlcyBjYXN0IGJlY2F1c2UgdGVjaG5pY2FsbHkgJFpvZE9iamVjdCBkb2Vzbid0IGV4dGVuZFxuICAgICRab2RPYmplY3QuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvbnN0IHN1cGVyUGFyc2UgPSBpbnN0Ll96b2QucGFyc2U7XG4gICAgY29uc3QgX25vcm1hbGl6ZWQgPSB1dGlsLmNhY2hlZCgoKSA9PiBub3JtYWxpemVEZWYoZGVmKSk7XG4gICAgY29uc3QgZ2VuZXJhdGVGYXN0cGFzcyA9IChzaGFwZSkgPT4ge1xuICAgICAgICBjb25zdCBkb2MgPSBuZXcgRG9jKFtcInNoYXBlXCIsIFwicGF5bG9hZFwiLCBcImN0eFwiXSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBfbm9ybWFsaXplZC52YWx1ZTtcbiAgICAgICAgY29uc3QgcGFyc2VTdHIgPSAoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrID0gdXRpbC5lc2Moa2V5KTtcbiAgICAgICAgICAgIHJldHVybiBgc2hhcGVbJHtrfV0uX3pvZC5ydW4oeyB2YWx1ZTogaW5wdXRbJHtrfV0sIGlzc3VlczogW10gfSwgY3R4KWA7XG4gICAgICAgIH07XG4gICAgICAgIGRvYy53cml0ZShgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO2ApO1xuICAgICAgICBjb25zdCBpZHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIG5vcm1hbGl6ZWQua2V5cykge1xuICAgICAgICAgICAgaWRzW2tleV0gPSBga2V5XyR7Y291bnRlcisrfWA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQTogcHJlc2VydmUga2V5IG9yZGVyIHtcbiAgICAgICAgZG9jLndyaXRlKGBjb25zdCBuZXdSZXN1bHQgPSB7fTtgKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygbm9ybWFsaXplZC5rZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGlkc1trZXldO1xuICAgICAgICAgICAgY29uc3QgayA9IHV0aWwuZXNjKGtleSk7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBzaGFwZVtrZXldO1xuICAgICAgICAgICAgY29uc3QgaXNPcHRpb25hbEluID0gc2NoZW1hPy5fem9kPy5vcHRpbiA9PT0gXCJvcHRpb25hbFwiO1xuICAgICAgICAgICAgY29uc3QgaXNPcHRpb25hbE91dCA9IHNjaGVtYT8uX3pvZD8ub3B0b3V0ID09PSBcIm9wdGlvbmFsXCI7XG4gICAgICAgICAgICBkb2Mud3JpdGUoYGNvbnN0ICR7aWR9ID0gJHtwYXJzZVN0cihrZXkpfTtgKTtcbiAgICAgICAgICAgIGlmIChpc09wdGlvbmFsSW4gJiYgaXNPcHRpb25hbE91dCkge1xuICAgICAgICAgICAgICAgIC8vIEZvciBvcHRpb25hbC1pbi9vdXQgc2NoZW1hcywgaWdub3JlIGVycm9ycyBvbiBhYnNlbnQga2V5c1xuICAgICAgICAgICAgICAgIGRvYy53cml0ZShgXG4gICAgICAgIGlmICgke2lkfS5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKCR7a30gaW4gaW5wdXQpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzID0gcGF5bG9hZC5pc3N1ZXMuY29uY2F0KCR7aWR9Lmlzc3Vlcy5tYXAoaXNzID0+ICh7XG4gICAgICAgICAgICAgIC4uLmlzcyxcbiAgICAgICAgICAgICAgcGF0aDogaXNzLnBhdGggPyBbJHtrfSwgLi4uaXNzLnBhdGhdIDogWyR7a31dXG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKCR7aWR9LnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoJHtrfSBpbiBpbnB1dCkge1xuICAgICAgICAgICAgbmV3UmVzdWx0WyR7a31dID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdSZXN1bHRbJHtrfV0gPSAke2lkfS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgIGApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWlzT3B0aW9uYWxJbikge1xuICAgICAgICAgICAgICAgIGRvYy53cml0ZShgXG4gICAgICAgIGNvbnN0ICR7aWR9X3ByZXNlbnQgPSAke2t9IGluIGlucHV0O1xuICAgICAgICBpZiAoJHtpZH0uaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgIHBheWxvYWQuaXNzdWVzID0gcGF5bG9hZC5pc3N1ZXMuY29uY2F0KCR7aWR9Lmlzc3Vlcy5tYXAoaXNzID0+ICh7XG4gICAgICAgICAgICAuLi5pc3MsXG4gICAgICAgICAgICBwYXRoOiBpc3MucGF0aCA/IFske2t9LCAuLi5pc3MucGF0aF0gOiBbJHtrfV1cbiAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghJHtpZH1fcHJlc2VudCAmJiAhJHtpZH0uaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcIm5vbm9wdGlvbmFsXCIsXG4gICAgICAgICAgICBpbnB1dDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcGF0aDogWyR7a31dXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHtpZH1fcHJlc2VudCkge1xuICAgICAgICAgIGlmICgke2lkfS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBuZXdSZXN1bHRbJHtrfV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1Jlc3VsdFske2t9XSA9ICR7aWR9LnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvYy53cml0ZShgXG4gICAgICAgIGlmICgke2lkfS5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcGF5bG9hZC5pc3N1ZXMgPSBwYXlsb2FkLmlzc3Vlcy5jb25jYXQoJHtpZH0uaXNzdWVzLm1hcChpc3MgPT4gKHtcbiAgICAgICAgICAgIC4uLmlzcyxcbiAgICAgICAgICAgIHBhdGg6IGlzcy5wYXRoID8gWyR7a30sIC4uLmlzcy5wYXRoXSA6IFske2t9XVxuICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICgke2lkfS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCR7a30gaW4gaW5wdXQpIHtcbiAgICAgICAgICAgIG5ld1Jlc3VsdFske2t9XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3UmVzdWx0WyR7a31dID0gJHtpZH0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkb2Mud3JpdGUoYHBheWxvYWQudmFsdWUgPSBuZXdSZXN1bHQ7YCk7XG4gICAgICAgIGRvYy53cml0ZShgcmV0dXJuIHBheWxvYWQ7YCk7XG4gICAgICAgIGNvbnN0IGZuID0gZG9jLmNvbXBpbGUoKTtcbiAgICAgICAgcmV0dXJuIChwYXlsb2FkLCBjdHgpID0+IGZuKHNoYXBlLCBwYXlsb2FkLCBjdHgpO1xuICAgIH07XG4gICAgbGV0IGZhc3RwYXNzO1xuICAgIGNvbnN0IGlzT2JqZWN0ID0gdXRpbC5pc09iamVjdDtcbiAgICBjb25zdCBqaXQgPSAhY29yZS5nbG9iYWxDb25maWcuaml0bGVzcztcbiAgICBjb25zdCBhbGxvd3NFdmFsID0gdXRpbC5hbGxvd3NFdmFsO1xuICAgIGNvbnN0IGZhc3RFbmFibGVkID0gaml0ICYmIGFsbG93c0V2YWwudmFsdWU7IC8vICYmICFkZWYuY2F0Y2hhbGw7XG4gICAgY29uc3QgY2F0Y2hhbGwgPSBkZWYuY2F0Y2hhbGw7XG4gICAgbGV0IHZhbHVlO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgdmFsdWUgPz8gKHZhbHVlID0gX25vcm1hbGl6ZWQudmFsdWUpO1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqaXQgJiYgZmFzdEVuYWJsZWQgJiYgY3R4Py5hc3luYyA9PT0gZmFsc2UgJiYgY3R4LmppdGxlc3MgIT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vIGFsd2F5cyBzeW5jaHJvbm91c1xuICAgICAgICAgICAgaWYgKCFmYXN0cGFzcylcbiAgICAgICAgICAgICAgICBmYXN0cGFzcyA9IGdlbmVyYXRlRmFzdHBhc3MoZGVmLnNoYXBlKTtcbiAgICAgICAgICAgIHBheWxvYWQgPSBmYXN0cGFzcyhwYXlsb2FkLCBjdHgpO1xuICAgICAgICAgICAgaWYgKCFjYXRjaGFsbClcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVDYXRjaGFsbChbXSwgaW5wdXQsIHBheWxvYWQsIGN0eCwgdmFsdWUsIGluc3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlclBhcnNlKHBheWxvYWQsIGN0eCk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlVW5pb25SZXN1bHRzKHJlc3VsdHMsIGZpbmFsLCBpbnN0LCBjdHgpIHtcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZmluYWwudmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gZmluYWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgbm9uYWJvcnRlZCA9IHJlc3VsdHMuZmlsdGVyKChyKSA9PiAhdXRpbC5hYm9ydGVkKHIpKTtcbiAgICBpZiAobm9uYWJvcnRlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZmluYWwudmFsdWUgPSBub25hYm9ydGVkWzBdLnZhbHVlO1xuICAgICAgICByZXR1cm4gbm9uYWJvcnRlZFswXTtcbiAgICB9XG4gICAgZmluYWwuaXNzdWVzLnB1c2goe1xuICAgICAgICBjb2RlOiBcImludmFsaWRfdW5pb25cIixcbiAgICAgICAgaW5wdXQ6IGZpbmFsLnZhbHVlLFxuICAgICAgICBpbnN0LFxuICAgICAgICBlcnJvcnM6IHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpKSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmluYWw7XG59XG5leHBvcnQgY29uc3QgJFpvZFVuaW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RVbmlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0aW5cIiwgKCkgPT4gZGVmLm9wdGlvbnMuc29tZSgobykgPT4gby5fem9kLm9wdGluID09PSBcIm9wdGlvbmFsXCIpID8gXCJvcHRpb25hbFwiIDogdW5kZWZpbmVkKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdG91dFwiLCAoKSA9PiBkZWYub3B0aW9ucy5zb21lKChvKSA9PiBvLl96b2Qub3B0b3V0ID09PSBcIm9wdGlvbmFsXCIpID8gXCJvcHRpb25hbFwiIDogdW5kZWZpbmVkKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICAgIGlmIChkZWYub3B0aW9ucy5ldmVyeSgobykgPT4gby5fem9kLnZhbHVlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2V0KGRlZi5vcHRpb25zLmZsYXRNYXAoKG9wdGlvbikgPT4gQXJyYXkuZnJvbShvcHRpb24uX3pvZC52YWx1ZXMpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInBhdHRlcm5cIiwgKCkgPT4ge1xuICAgICAgICBpZiAoZGVmLm9wdGlvbnMuZXZlcnkoKG8pID0+IG8uX3pvZC5wYXR0ZXJuKSkge1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybnMgPSBkZWYub3B0aW9ucy5tYXAoKG8pID0+IG8uX3pvZC5wYXR0ZXJuKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKCR7cGF0dGVybnMubWFwKChwKSA9PiB1dGlsLmNsZWFuUmVnZXgocC5zb3VyY2UpKS5qb2luKFwifFwiKX0pJGApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgY29uc3QgZmlyc3QgPSBkZWYub3B0aW9ucy5sZW5ndGggPT09IDEgPyBkZWYub3B0aW9uc1swXS5fem9kLnJ1biA6IG51bGw7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBpZiAoZmlyc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBmaXJzdChwYXlsb2FkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhc3luYyA9IGZhbHNlO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIGRlZi5vcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcHRpb24uX3pvZC5ydW4oe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICB9LCBjdHgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICAgICAgICBhc3luYyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhc3luYylcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVVbmlvblJlc3VsdHMocmVzdWx0cywgcGF5bG9hZCwgaW5zdCwgY3R4KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlc3VsdHMpLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVVbmlvblJlc3VsdHMocmVzdWx0cywgcGF5bG9hZCwgaW5zdCwgY3R4KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlRXhjbHVzaXZlVW5pb25SZXN1bHRzKHJlc3VsdHMsIGZpbmFsLCBpbnN0LCBjdHgpIHtcbiAgICBjb25zdCBzdWNjZXNzZXMgPSByZXN1bHRzLmZpbHRlcigocikgPT4gci5pc3N1ZXMubGVuZ3RoID09PSAwKTtcbiAgICBpZiAoc3VjY2Vzc2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmaW5hbC52YWx1ZSA9IHN1Y2Nlc3Nlc1swXS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGZpbmFsO1xuICAgIH1cbiAgICBpZiAoc3VjY2Vzc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBObyBtYXRjaGVzIC0gc2FtZSBhcyByZWd1bGFyIHVuaW9uXG4gICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF91bmlvblwiLFxuICAgICAgICAgICAgaW5wdXQ6IGZpbmFsLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGVycm9yczogcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcykgPT4gdXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIE11bHRpcGxlIG1hdGNoZXMgLSBleGNsdXNpdmUgdW5pb24gZmFpbHVyZVxuICAgICAgICBmaW5hbC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdW5pb25cIixcbiAgICAgICAgICAgIGlucHV0OiBmaW5hbC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBlcnJvcnM6IFtdLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmaW5hbDtcbn1cbmV4cG9ydCBjb25zdCAkWm9kWG9yID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RYb3JcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RVbmlvbi5pbml0KGluc3QsIGRlZik7XG4gICAgZGVmLmluY2x1c2l2ZSA9IGZhbHNlO1xuICAgIGNvbnN0IGZpcnN0ID0gZGVmLm9wdGlvbnMubGVuZ3RoID09PSAxID8gZGVmLm9wdGlvbnNbMF0uX3pvZC5ydW4gOiBudWxsO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmlyc3QocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXN5bmMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBkZWYub3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9uLl96b2QucnVuKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgfSwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgYXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhc3luYylcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVFeGNsdXNpdmVVbmlvblJlc3VsdHMocmVzdWx0cywgcGF5bG9hZCwgaW5zdCwgY3R4KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlc3VsdHMpLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVFeGNsdXNpdmVVbmlvblJlc3VsdHMocmVzdWx0cywgcGF5bG9hZCwgaW5zdCwgY3R4KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2REaXNjcmltaW5hdGVkVW5pb24gPSBcbi8qQF9fUFVSRV9fKi9cbmNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZERpc2NyaW1pbmF0ZWRVbmlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLmluY2x1c2l2ZSA9IGZhbHNlO1xuICAgICRab2RVbmlvbi5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgX3N1cGVyID0gaW5zdC5fem9kLnBhcnNlO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicHJvcFZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BWYWx1ZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgZGVmLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHB2ID0gb3B0aW9uLl96b2QucHJvcFZhbHVlcztcbiAgICAgICAgICAgIGlmICghcHYgfHwgT2JqZWN0LmtleXMocHYpLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggXCIke2RlZi5vcHRpb25zLmluZGV4T2Yob3B0aW9uKX1cImApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocHYpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wVmFsdWVzW2tdKVxuICAgICAgICAgICAgICAgICAgICBwcm9wVmFsdWVzW2tdID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsIG9mIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcFZhbHVlc1trXS5hZGQodmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BWYWx1ZXM7XG4gICAgfSk7XG4gICAgY29uc3QgZGlzYyA9IHV0aWwuY2FjaGVkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IGRlZi5vcHRpb25zO1xuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAoY29uc3QgbyBvZiBvcHRzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBvLl96b2QucHJvcFZhbHVlcz8uW2RlZi5kaXNjcmltaW5hdG9yXTtcbiAgICAgICAgICAgIGlmICghdmFsdWVzIHx8IHZhbHVlcy5zaXplID09PSAwKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBkaXNjcmltaW5hdGVkIHVuaW9uIG9wdGlvbiBhdCBpbmRleCBcIiR7ZGVmLm9wdGlvbnMuaW5kZXhPZihvKX1cImApO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIGlmIChtYXAuaGFzKHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIGRpc2NyaW1pbmF0b3IgdmFsdWUgXCIke1N0cmluZyh2KX1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYXAuc2V0KHYsIG8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghdXRpbC5pc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0ID0gZGlzYy52YWx1ZS5nZXQoaW5wdXQ/LltkZWYuZGlzY3JpbWluYXRvcl0pO1xuICAgICAgICBpZiAob3B0KSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0Ll96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHVuaW9uIG1hdGNoaW5nIHdoZW4gdGhlIGZhc3QgZGlzY3JpbWluYXRvciBwYXRoIGZhaWxzOlxuICAgICAgICAvLyAtIGV4cGxpY2l0bHkgZW5hYmxlZCB2aWEgdW5pb25GYWxsYmFjaywgb3JcbiAgICAgICAgLy8gLSBkdXJpbmcgYmFja3dhcmQgZGlyZWN0aW9uIChlbmNvZGUpLCBzaW5jZSBjb2RlYy1iYXNlZCBkaXNjcmltaW5hdG9yc1xuICAgICAgICAvLyAgIGhhdmUgZGlmZmVyZW50IHZhbHVlcyBpbiBmb3J3YXJkIHZzIGJhY2t3YXJkIGRpcmVjdGlvbnNcbiAgICAgICAgaWYgKGRlZi51bmlvbkZhbGxiYWNrIHx8IGN0eC5kaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIikge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlcihwYXlsb2FkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vIG1hdGNoaW5nIGRpc2NyaW1pbmF0b3JcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdW5pb25cIixcbiAgICAgICAgICAgIGVycm9yczogW10sXG4gICAgICAgICAgICBub3RlOiBcIk5vIG1hdGNoaW5nIGRpc2NyaW1pbmF0b3JcIixcbiAgICAgICAgICAgIGRpc2NyaW1pbmF0b3I6IGRlZi5kaXNjcmltaW5hdG9yLFxuICAgICAgICAgICAgb3B0aW9uczogQXJyYXkuZnJvbShkaXNjLnZhbHVlLmtleXMoKSksXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIHBhdGg6IFtkZWYuZGlzY3JpbWluYXRvcl0sXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RJbnRlcnNlY3Rpb24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEludGVyc2VjdGlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBjb25zdCBsZWZ0ID0gZGVmLmxlZnQuX3pvZC5ydW4oeyB2YWx1ZTogaW5wdXQsIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBkZWYucmlnaHQuX3pvZC5ydW4oeyB2YWx1ZTogaW5wdXQsIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgY29uc3QgYXN5bmMgPSBsZWZ0IGluc3RhbmNlb2YgUHJvbWlzZSB8fCByaWdodCBpbnN0YW5jZW9mIFByb21pc2U7XG4gICAgICAgIGlmIChhc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtsZWZ0LCByaWdodF0pLnRoZW4oKFtsZWZ0LCByaWdodF0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJzZWN0aW9uUmVzdWx0cyhwYXlsb2FkLCBsZWZ0LCByaWdodCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJzZWN0aW9uUmVzdWx0cyhwYXlsb2FkLCBsZWZ0LCByaWdodCk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gbWVyZ2VWYWx1ZXMoYSwgYikge1xuICAgIC8vIGNvbnN0IGFUeXBlID0gcGFyc2UudChhKTtcbiAgICAvLyBjb25zdCBiVHlwZSA9IHBhcnNlLnQoYik7XG4gICAgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IGEgfTtcbiAgICB9XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlICYmICthID09PSArYikge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogYSB9O1xuICAgIH1cbiAgICBpZiAodXRpbC5pc1BsYWluT2JqZWN0KGEpICYmIHV0aWwuaXNQbGFpbk9iamVjdChiKSkge1xuICAgICAgICBjb25zdCBiS2V5cyA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgICBjb25zdCBzaGFyZWRLZXlzID0gT2JqZWN0LmtleXMoYSkuZmlsdGVyKChrZXkpID0+IGJLZXlzLmluZGV4T2Yoa2V5KSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLmEsIC4uLmIgfTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygc2hhcmVkS2V5cykge1xuICAgICAgICAgICAgY29uc3Qgc2hhcmVkVmFsdWUgPSBtZXJnZVZhbHVlcyhhW2tleV0sIGJba2V5XSk7XG4gICAgICAgICAgICBpZiAoIXNoYXJlZFZhbHVlLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXJnZUVycm9yUGF0aDogW2tleSwgLi4uc2hhcmVkVmFsdWUubWVyZ2VFcnJvclBhdGhdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHNoYXJlZFZhbHVlLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IG5ld09iaiB9O1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgbWVyZ2VFcnJvclBhdGg6IFtdIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3QXJyYXkgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtQSA9IGFbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgaXRlbUIgPSBiW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHNoYXJlZFZhbHVlID0gbWVyZ2VWYWx1ZXMoaXRlbUEsIGl0ZW1CKTtcbiAgICAgICAgICAgIGlmICghc2hhcmVkVmFsdWUudmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1lcmdlRXJyb3JQYXRoOiBbaW5kZXgsIC4uLnNoYXJlZFZhbHVlLm1lcmdlRXJyb3JQYXRoXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3QXJyYXkucHVzaChzaGFyZWRWYWx1ZS5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogbmV3QXJyYXkgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBtZXJnZUVycm9yUGF0aDogW10gfTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUludGVyc2VjdGlvblJlc3VsdHMocmVzdWx0LCBsZWZ0LCByaWdodCkge1xuICAgIC8vIFRyYWNrIHdoaWNoIHNpZGUocykgcmVwb3J0IGVhY2gga2V5IGFzIHVucmVjb2duaXplZFxuICAgIGNvbnN0IHVucmVjS2V5cyA9IG5ldyBNYXAoKTtcbiAgICBsZXQgdW5yZWNJc3N1ZTtcbiAgICBmb3IgKGNvbnN0IGlzcyBvZiBsZWZ0Lmlzc3Vlcykge1xuICAgICAgICBpZiAoaXNzLmNvZGUgPT09IFwidW5yZWNvZ25pemVkX2tleXNcIikge1xuICAgICAgICAgICAgdW5yZWNJc3N1ZSA/PyAodW5yZWNJc3N1ZSA9IGlzcyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgaXNzLmtleXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXVucmVjS2V5cy5oYXMoaykpXG4gICAgICAgICAgICAgICAgICAgIHVucmVjS2V5cy5zZXQoaywge30pO1xuICAgICAgICAgICAgICAgIHVucmVjS2V5cy5nZXQoaykubCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuaXNzdWVzLnB1c2goaXNzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGlzcyBvZiByaWdodC5pc3N1ZXMpIHtcbiAgICAgICAgaWYgKGlzcy5jb2RlID09PSBcInVucmVjb2duaXplZF9rZXlzXCIpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBpc3Mua2V5cykge1xuICAgICAgICAgICAgICAgIGlmICghdW5yZWNLZXlzLmhhcyhrKSlcbiAgICAgICAgICAgICAgICAgICAgdW5yZWNLZXlzLnNldChrLCB7fSk7XG4gICAgICAgICAgICAgICAgdW5yZWNLZXlzLmdldChrKS5yID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5pc3N1ZXMucHVzaChpc3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFJlcG9ydCBvbmx5IGtleXMgdW5yZWNvZ25pemVkIGJ5IEJPVEggc2lkZXNcbiAgICBjb25zdCBib3RoS2V5cyA9IFsuLi51bnJlY0tleXNdLmZpbHRlcigoWywgZl0pID0+IGYubCAmJiBmLnIpLm1hcCgoW2tdKSA9PiBrKTtcbiAgICBpZiAoYm90aEtleXMubGVuZ3RoICYmIHVucmVjSXNzdWUpIHtcbiAgICAgICAgcmVzdWx0Lmlzc3Vlcy5wdXNoKHsgLi4udW5yZWNJc3N1ZSwga2V5czogYm90aEtleXMgfSk7XG4gICAgfVxuICAgIGlmICh1dGlsLmFib3J0ZWQocmVzdWx0KSlcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICBjb25zdCBtZXJnZWQgPSBtZXJnZVZhbHVlcyhsZWZ0LnZhbHVlLCByaWdodC52YWx1ZSk7XG4gICAgaWYgKCFtZXJnZWQudmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbm1lcmdhYmxlIGludGVyc2VjdGlvbi4gRXJyb3IgcGF0aDogYCArIGAke0pTT04uc3RyaW5naWZ5KG1lcmdlZC5tZXJnZUVycm9yUGF0aCl9YCk7XG4gICAgfVxuICAgIHJlc3VsdC52YWx1ZSA9IG1lcmdlZC5kYXRhO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgY29uc3QgJFpvZFR1cGxlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RUdXBsZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvbnN0IGl0ZW1zID0gZGVmLml0ZW1zO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcInR1cGxlXCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IFtdO1xuICAgICAgICBjb25zdCBwcm9tcyA9IFtdO1xuICAgICAgICBjb25zdCBvcHRpblN0YXJ0ID0gZ2V0VHVwbGVPcHRTdGFydChpdGVtcywgXCJvcHRpblwiKTtcbiAgICAgICAgY29uc3Qgb3B0b3V0U3RhcnQgPSBnZXRUdXBsZU9wdFN0YXJ0KGl0ZW1zLCBcIm9wdG91dFwiKTtcbiAgICAgICAgaWYgKCFkZWYucmVzdCkge1xuICAgICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA8IG9wdGluU3RhcnQpIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogb3B0aW5TdGFydCxcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQubGVuZ3RoID4gaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFwidG9vX2JpZ1wiLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBpdGVtcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbjogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFJ1biBldmVyeSBpdGVtIGluIHBhcmFsbGVsLCBjb2xsZWN0aW5nIHJlc3VsdHMgaW50byBhbiBpbmRleGVkXG4gICAgICAgIC8vIGFycmF5LiBUaGUgcG9zdC1wcm9jZXNzaW5nIGluIGBoYW5kbGVUdXBsZVJlc3VsdHNgIHdhbGtzIHRoZW0gaW5cbiAgICAgICAgLy8gb3JkZXIgc28gaXQgY2FuIGRlY2lkZSB3aGV0aGVyIGFuIGFic2VudCBvcHRpb25hbC1vdXRwdXQgZXJyb3IgY2FuXG4gICAgICAgIC8vIHRydW5jYXRlIHRoZSB0YWlsIG9yIG11c3QgYmUgcmVwb3J0ZWQgdG8gcHJlc2VydmUgcmVxdWlyZWQgb3V0cHV0LlxuICAgICAgICBjb25zdCBpdGVtUmVzdWx0cyA9IG5ldyBBcnJheShpdGVtcy5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByID0gaXRlbXNbaV0uX3pvZC5ydW4oeyB2YWx1ZTogaW5wdXRbaV0sIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHByb21zLnB1c2goci50aGVuKChycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpdGVtUmVzdWx0c1tpXSA9IHJyO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1SZXN1bHRzW2ldID0gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLnJlc3QpIHtcbiAgICAgICAgICAgIGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBpbnB1dC5zbGljZShpdGVtcy5sZW5ndGgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiByZXN0KSB7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi5yZXN0Ll96b2QucnVuKHsgdmFsdWU6IGVsLCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbXMucHVzaChyZXN1bHQudGhlbigocikgPT4gaGFuZGxlVHVwbGVSZXN1bHQociwgcGF5bG9hZCwgaSkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVR1cGxlUmVzdWx0KHJlc3VsdCwgcGF5bG9hZCwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9tcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9tcykudGhlbigoKSA9PiBoYW5kbGVUdXBsZVJlc3VsdHMoaXRlbVJlc3VsdHMsIHBheWxvYWQsIGl0ZW1zLCBpbnB1dCwgb3B0b3V0U3RhcnQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlVHVwbGVSZXN1bHRzKGl0ZW1SZXN1bHRzLCBwYXlsb2FkLCBpdGVtcywgaW5wdXQsIG9wdG91dFN0YXJ0KTtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBnZXRUdXBsZU9wdFN0YXJ0KGl0ZW1zLCBrZXkpIHtcbiAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgaWYgKGl0ZW1zW2ldLl96b2Rba2V5XSAhPT0gXCJvcHRpb25hbFwiKVxuICAgICAgICAgICAgcmV0dXJuIGkgKyAxO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIGhhbmRsZVR1cGxlUmVzdWx0KHJlc3VsdCwgZmluYWwsIGluZGV4KSB7XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGluZGV4LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgfVxuICAgIGZpbmFsLnZhbHVlW2luZGV4XSA9IHJlc3VsdC52YWx1ZTtcbn1cbmZ1bmN0aW9uIGhhbmRsZVR1cGxlUmVzdWx0cyhpdGVtUmVzdWx0cywgZmluYWwsIGl0ZW1zLCBpbnB1dCwgb3B0b3V0U3RhcnQpIHtcbiAgICAvLyBXYWxrIHJlc3VsdHMgaW4gb3JkZXIuIE1pcnJvciAkWm9kT2JqZWN0J3Mgc3dhbGxvdy1vbi1hYnNlbnQtb3B0aW9uYWxcbiAgICAvLyBydWxlLCBidXQgb25seSBhZnRlciBgb3B0b3V0U3RhcnRgOiB0aGUgZmlyc3QgaW5kZXggd2hlcmUgdGhlIG91dHB1dFxuICAgIC8vIHR1cGxlIHRhaWwgY2FuIGJlIGFic2VudC5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHIgPSBpdGVtUmVzdWx0c1tpXTtcbiAgICAgICAgY29uc3QgaXNQcmVzZW50ID0gaSA8IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgaWYgKHIuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCFpc1ByZXNlbnQgJiYgaSA+PSBvcHRvdXRTdGFydCkge1xuICAgICAgICAgICAgICAgIGZpbmFsLnZhbHVlLmxlbmd0aCA9IGk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbC5pc3N1ZXMucHVzaCguLi51dGlsLnByZWZpeElzc3VlcyhpLCByLmlzc3VlcykpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsLnZhbHVlW2ldID0gci52YWx1ZTtcbiAgICB9XG4gICAgLy8gRHJvcCB0cmFpbGluZyBzbG90cyB0aGF0IHByb2R1Y2VkIGB1bmRlZmluZWRgIGZvciBhYnNlbnQgaW5wdXRcbiAgICAvLyAodGhlIGFycmF5IGFuYWxvZyBvZiBhbiBhYnNlbnQgb3B0aW9uYWwga2V5IG9uIGFuIG9iamVjdCkuIFRoZVxuICAgIC8vIGBpID49IGlucHV0Lmxlbmd0aGAgZmxvb3IgaXMgY3JpdGljYWw6IGFuIGV4cGxpY2l0IGB1bmRlZmluZWRgXG4gICAgLy8gKmluc2lkZSogdGhlIGlucHV0IG11c3QgYmUgcHJlc2VydmVkIGV2ZW4gd2hlbiB0aGUgc2NoZW1hIGlzXG4gICAgLy8gb3B0aW9uYWwtb3V0IChlLmcuIGB6LnN0cmluZygpLm9yKHoudW5kZWZpbmVkKCkpYCBhY2NlcHRpbmcgYW5cbiAgICAvLyBleHBsaWNpdCB1bmRlZmluZWQgdmFsdWUpLlxuICAgIGZvciAobGV0IGkgPSBmaW5hbC52YWx1ZS5sZW5ndGggLSAxOyBpID49IGlucHV0Lmxlbmd0aDsgaS0tKSB7XG4gICAgICAgIGlmIChpdGVtc1tpXS5fem9kLm9wdG91dCA9PT0gXCJvcHRpb25hbFwiICYmIGZpbmFsLnZhbHVlW2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpbmFsLnZhbHVlLmxlbmd0aCA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmluYWw7XG59XG5leHBvcnQgY29uc3QgJFpvZFJlY29yZCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kUmVjb3JkXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghdXRpbC5pc1BsYWluT2JqZWN0KGlucHV0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwicmVjb3JkXCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9tcyA9IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBkZWYua2V5VHlwZS5fem9kLnZhbHVlcztcbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkS2V5cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBrZXkgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIGtleSA9PT0gXCJzeW1ib2xcIikge1xuICAgICAgICAgICAgICAgICAgICByZWNvcmRLZXlzLmFkZCh0eXBlb2Yga2V5ID09PSBcIm51bWJlclwiID8ga2V5LnRvU3RyaW5nKCkgOiBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlSZXN1bHQgPSBkZWYua2V5VHlwZS5fem9kLnJ1bih7IHZhbHVlOiBrZXksIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleVJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHlcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleVJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfa2V5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBcInJlY29yZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3Vlczoga2V5UmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcykgPT4gdXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRLZXkgPSBrZXlSZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi52YWx1ZVR5cGUuX3pvZC5ydW4oeyB2YWx1ZTogaW5wdXRba2V5XSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXMucHVzaChyZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoa2V5LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWVbb3V0S2V5XSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoa2V5LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlW291dEtleV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdW5yZWNvZ25pemVkO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlY29yZEtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5yZWNvZ25pemVkID0gdW5yZWNvZ25pemVkID8/IFtdO1xuICAgICAgICAgICAgICAgICAgICB1bnJlY29nbml6ZWQucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1bnJlY29nbml6ZWQgJiYgdW5yZWNvZ25pemVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogXCJ1bnJlY29nbml6ZWRfa2V5c1wiLFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAga2V5czogdW5yZWNvZ25pemVkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHt9O1xuICAgICAgICAgICAgLy8gUmVmbGVjdC5vd25LZXlzIGZvciBTeW1ib2wta2V5IHN1cHBvcnQ7IGZpbHRlciBub24tZW51bWVyYWJsZSB0byBtYXRjaCB6Lm9iamVjdCgpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gXCJfX3Byb3RvX19cIilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoaW5wdXQsIGtleSkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGxldCBrZXlSZXN1bHQgPSBkZWYua2V5VHlwZS5fem9kLnJ1bih7IHZhbHVlOiBrZXksIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5UmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBOdW1lcmljIHN0cmluZyBmYWxsYmFjazogaWYga2V5IGlzIGEgbnVtZXJpYyBzdHJpbmcgYW5kIGZhaWxlZCwgcmV0cnkgd2l0aCBOdW1iZXIoa2V5KVxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB6Lm51bWJlcigpLCB6LmxpdGVyYWwoWzEsIDIsIDNdKSwgYW5kIHVuaW9ucyBjb250YWluaW5nIG51bWVyaWMgbGl0ZXJhbHNcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVja051bWVyaWNLZXkgPSB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiICYmIHJlZ2V4ZXMubnVtYmVyLnRlc3Qoa2V5KSAmJiBrZXlSZXN1bHQuaXNzdWVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tOdW1lcmljS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldHJ5UmVzdWx0ID0gZGVmLmtleVR5cGUuX3pvZC5ydW4oeyB2YWx1ZTogTnVtYmVyKGtleSksIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5UmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlSZXN1bHQuaXNzdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5UmVzdWx0ID0gcmV0cnlSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGtleVJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWYubW9kZSA9PT0gXCJsb29zZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBQYXNzIHRocm91Z2ggdW5jaGFuZ2VkXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlW2tleV0gPSBpbnB1dFtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBcInN0cmljdFwiIGJlaGF2aW9yOiBlcnJvciBvbiBpbnZhbGlkIGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2tleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogXCJyZWNvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IGtleVJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogW2tleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYudmFsdWVUeXBlLl96b2QucnVuKHsgdmFsdWU6IGlucHV0W2tleV0sIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9tcy5wdXNoKHJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoa2V5LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlW2tleVJlc3VsdC52YWx1ZV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCguLi51dGlsLnByZWZpeElzc3VlcyhrZXksIHJlc3VsdC5pc3N1ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlW2tleVJlc3VsdC52YWx1ZV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9tcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9tcykudGhlbigoKSA9PiBwYXlsb2FkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE1hcCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTWFwXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghKGlucHV0IGluc3RhbmNlb2YgTWFwKSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwibWFwXCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9tcyA9IFtdO1xuICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3IE1hcCgpO1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBpbnB1dCkge1xuICAgICAgICAgICAgY29uc3Qga2V5UmVzdWx0ID0gZGVmLmtleVR5cGUuX3pvZC5ydW4oeyB2YWx1ZToga2V5LCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZVJlc3VsdCA9IGRlZi52YWx1ZVR5cGUuX3pvZC5ydW4oeyB2YWx1ZTogdmFsdWUsIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgIGlmIChrZXlSZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlIHx8IHZhbHVlUmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHByb21zLnB1c2goUHJvbWlzZS5hbGwoW2tleVJlc3VsdCwgdmFsdWVSZXN1bHRdKS50aGVuKChba2V5UmVzdWx0LCB2YWx1ZVJlc3VsdF0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlTWFwUmVzdWx0KGtleVJlc3VsdCwgdmFsdWVSZXN1bHQsIHBheWxvYWQsIGtleSwgaW5wdXQsIGluc3QsIGN0eCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlTWFwUmVzdWx0KGtleVJlc3VsdCwgdmFsdWVSZXN1bHQsIHBheWxvYWQsIGtleSwgaW5wdXQsIGluc3QsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb21zLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9tcykudGhlbigoKSA9PiBwYXlsb2FkKTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlTWFwUmVzdWx0KGtleVJlc3VsdCwgdmFsdWVSZXN1bHQsIGZpbmFsLCBrZXksIGlucHV0LCBpbnN0LCBjdHgpIHtcbiAgICBpZiAoa2V5UmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHV0aWwucHJvcGVydHlLZXlUeXBlcy5oYXModHlwZW9mIGtleSkpIHtcbiAgICAgICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGtleSwga2V5UmVzdWx0Lmlzc3VlcykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9rZXlcIixcbiAgICAgICAgICAgICAgICBvcmlnaW46IFwibWFwXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IGtleVJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZhbHVlUmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHV0aWwucHJvcGVydHlLZXlUeXBlcy5oYXModHlwZW9mIGtleSkpIHtcbiAgICAgICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGtleSwgdmFsdWVSZXN1bHQuaXNzdWVzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmaW5hbC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgb3JpZ2luOiBcIm1hcFwiLFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9lbGVtZW50XCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IHZhbHVlUmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcykgPT4gdXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmaW5hbC52YWx1ZS5zZXQoa2V5UmVzdWx0LnZhbHVlLCB2YWx1ZVJlc3VsdC52YWx1ZSk7XG59XG5leHBvcnQgY29uc3QgJFpvZFNldCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kU2V0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghKGlucHV0IGluc3RhbmNlb2YgU2V0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJzZXRcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9tcyA9IFtdO1xuICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3IFNldCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi52YWx1ZVR5cGUuX3pvZC5ydW4oeyB2YWx1ZTogaXRlbSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBwcm9tcy5wdXNoKHJlc3VsdC50aGVuKChyZXN1bHQpID0+IGhhbmRsZVNldFJlc3VsdChyZXN1bHQsIHBheWxvYWQpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgaGFuZGxlU2V0UmVzdWx0KHJlc3VsdCwgcGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb21zLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9tcykudGhlbigoKSA9PiBwYXlsb2FkKTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlU2V0UmVzdWx0KHJlc3VsdCwgZmluYWwpIHtcbiAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goLi4ucmVzdWx0Lmlzc3Vlcyk7XG4gICAgfVxuICAgIGZpbmFsLnZhbHVlLmFkZChyZXN1bHQudmFsdWUpO1xufVxuZXhwb3J0IGNvbnN0ICRab2RFbnVtID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RFbnVtXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgdmFsdWVzID0gdXRpbC5nZXRFbnVtVmFsdWVzKGRlZi5lbnRyaWVzKTtcbiAgICBjb25zdCB2YWx1ZXNTZXQgPSBuZXcgU2V0KHZhbHVlcyk7XG4gICAgaW5zdC5fem9kLnZhbHVlcyA9IHZhbHVlc1NldDtcbiAgICBpbnN0Ll96b2QucGF0dGVybiA9IG5ldyBSZWdFeHAoYF4oJHt2YWx1ZXNcbiAgICAgICAgLmZpbHRlcigoaykgPT4gdXRpbC5wcm9wZXJ0eUtleVR5cGVzLmhhcyh0eXBlb2YgaykpXG4gICAgICAgIC5tYXAoKG8pID0+ICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIiA/IHV0aWwuZXNjYXBlUmVnZXgobykgOiBvLnRvU3RyaW5nKCkpKVxuICAgICAgICAuam9pbihcInxcIil9KSRgKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZXNTZXQuaGFzKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdmFsdWVcIixcbiAgICAgICAgICAgIHZhbHVlcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTGl0ZXJhbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTGl0ZXJhbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGlmIChkZWYudmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGxpdGVyYWwgc2NoZW1hIHdpdGggbm8gdmFsaWQgdmFsdWVzXCIpO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZXMgPSBuZXcgU2V0KGRlZi52YWx1ZXMpO1xuICAgIGluc3QuX3pvZC52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSBuZXcgUmVnRXhwKGBeKCR7ZGVmLnZhbHVlc1xuICAgICAgICAubWFwKChvKSA9PiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIgPyB1dGlsLmVzY2FwZVJlZ2V4KG8pIDogbyA/IHV0aWwuZXNjYXBlUmVnZXgoby50b1N0cmluZygpKSA6IFN0cmluZyhvKSkpXG4gICAgICAgIC5qb2luKFwifFwiKX0pJGApO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlcy5oYXMoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF92YWx1ZVwiLFxuICAgICAgICAgICAgdmFsdWVzOiBkZWYudmFsdWVzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RGaWxlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RGaWxlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEZpbGUpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJmaWxlXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RUcmFuc2Zvcm0gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFRyYW5zZm9ybVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5vcHRpbiA9IFwib3B0aW9uYWxcIjtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGlmIChjdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLiRab2RFbmNvZGVFcnJvcihpbnN0LmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IF9vdXQgPSBkZWYudHJhbnNmb3JtKHBheWxvYWQudmFsdWUsIHBheWxvYWQpO1xuICAgICAgICBpZiAoY3R4LmFzeW5jKSB7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBfb3V0IGluc3RhbmNlb2YgUHJvbWlzZSA/IF9vdXQgOiBQcm9taXNlLnJlc29sdmUoX291dCk7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0LnRoZW4oKG91dHB1dCkgPT4ge1xuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5mYWxsYmFjayA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX291dCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLiRab2RBc3luY0Vycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IF9vdXQ7XG4gICAgICAgIHBheWxvYWQuZmFsbGJhY2sgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVPcHRpb25hbFJlc3VsdChyZXN1bHQsIGlucHV0KSB7XG4gICAgaWYgKGlucHV0ID09PSB1bmRlZmluZWQgJiYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoIHx8IHJlc3VsdC5mYWxsYmFjaykpIHtcbiAgICAgICAgcmV0dXJuIHsgaXNzdWVzOiBbXSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGNvbnN0ICRab2RPcHRpb25hbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kT3B0aW9uYWxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2Qub3B0aW4gPSBcIm9wdGlvbmFsXCI7XG4gICAgaW5zdC5fem9kLm9wdG91dCA9IFwib3B0aW9uYWxcIjtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzID8gbmV3IFNldChbLi4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcywgdW5kZWZpbmVkXSkgOiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwYXR0ZXJuXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IGRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO1xuICAgICAgICByZXR1cm4gcGF0dGVybiA/IG5ldyBSZWdFeHAoYF4oJHt1dGlsLmNsZWFuUmVnZXgocGF0dGVybi5zb3VyY2UpfSk/JGApIDogdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgaWYgKGRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbiA9PT0gXCJvcHRpb25hbFwiKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKHIpID0+IGhhbmRsZU9wdGlvbmFsUmVzdWx0KHIsIGlucHV0KSk7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlT3B0aW9uYWxSZXN1bHQocmVzdWx0LCBpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBheWxvYWQudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEV4YWN0T3B0aW9uYWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEV4YWN0T3B0aW9uYWxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIENhbGwgcGFyZW50IGluaXQgLSBpbmhlcml0cyBvcHRpbi9vcHRvdXQgPSBcIm9wdGlvbmFsXCJcbiAgICAkWm9kT3B0aW9uYWwuaW5pdChpbnN0LCBkZWYpO1xuICAgIC8vIE92ZXJyaWRlIHZhbHVlcy9wYXR0ZXJuIHRvIE5PVCBhZGQgdW5kZWZpbmVkXG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4gZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwYXR0ZXJuXCIsICgpID0+IGRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuKTtcbiAgICAvLyBPdmVycmlkZSBwYXJzZSB0byBqdXN0IGRlbGVnYXRlIChubyB1bmRlZmluZWQgaGFuZGxpbmcpXG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTnVsbGFibGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE51bGxhYmxlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRpblwiLCAoKSA9PiBkZWYuaW5uZXJUeXBlLl96b2Qub3B0aW4pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0b3V0XCIsICgpID0+IGRlZi5pbm5lclR5cGUuX3pvZC5vcHRvdXQpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicGF0dGVyblwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBkZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4gPyBuZXcgUmVnRXhwKGBeKCR7dXRpbC5jbGVhblJlZ2V4KHBhdHRlcm4uc291cmNlKX18bnVsbCkkYCkgOiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyA/IG5ldyBTZXQoWy4uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMsIG51bGxdKSA6IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIC8vIEZvcndhcmQgZGlyZWN0aW9uIChkZWNvZGUpOiBhbGxvdyBudWxsIHRvIHBhc3MgdGhyb3VnaFxuICAgICAgICBpZiAocGF5bG9hZC52YWx1ZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kRGVmYXVsdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kRGVmYXVsdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIC8vIGluc3QuX3pvZC5xaW4gPSBcInRydWVcIjtcbiAgICBpbnN0Ll96b2Qub3B0aW4gPSBcIm9wdGlvbmFsXCI7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4gZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvcndhcmQgZGlyZWN0aW9uIChkZWNvZGUpOiBhcHBseSBkZWZhdWx0cyBmb3IgdW5kZWZpbmVkIGlucHV0XG4gICAgICAgIGlmIChwYXlsb2FkLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBkZWYuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiAkWm9kRGVmYXVsdCByZXR1cm5zIHRoZSBkZWZhdWx0IHZhbHVlIGltbWVkaWF0ZWx5IGluIGZvcndhcmQgZGlyZWN0aW9uLlxuICAgICAgICAgICAgICogSXQgZG9lc24ndCBwYXNzIHRoZSBkZWZhdWx0IHZhbHVlIGludG8gdGhlIHZhbGlkYXRvciAoXCJwcmVmYXVsdFwiKS4gVGhlcmUncyBubyByZWFzb24gdG8gcGFzcyB0aGUgZGVmYXVsdCB2YWx1ZSB0aHJvdWdoIHZhbGlkYXRpb24uIFRoZSB2YWxpZGl0eSBvZiB0aGUgZGVmYXVsdCBpcyBlbmZvcmNlZCBieSBUeXBlU2NyaXB0IHN0YXRpY2FsbHkuIE90aGVyd2lzZSwgaXQncyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHVzZXIgdG8gZW5zdXJlIHRoZSBkZWZhdWx0IGlzIHZhbGlkLiBJbiB0aGUgY2FzZSBvZiBwaXBlcyB3aXRoIGRpdmVyZ2VudCBpbi9vdXQgdHlwZXMsIHlvdSBjYW4gc3BlY2lmeSB0aGUgZGVmYXVsdCBvbiB0aGUgYGluYCBzY2hlbWEgb2YgeW91ciBab2RQaXBlIHRvIHNldCBhIFwicHJlZmF1bHRcIiBmb3IgdGhlIHBpcGUuICAgKi9cbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvcndhcmQgZGlyZWN0aW9uOiBjb250aW51ZSB3aXRoIGRlZmF1bHQgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyZXN1bHQpID0+IGhhbmRsZURlZmF1bHRSZXN1bHQocmVzdWx0LCBkZWYpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlRGVmYXVsdFJlc3VsdChyZXN1bHQsIGRlZik7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlRGVmYXVsdFJlc3VsdChwYXlsb2FkLCBkZWYpIHtcbiAgICBpZiAocGF5bG9hZC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBkZWYuZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZDtcbn1cbmV4cG9ydCBjb25zdCAkWm9kUHJlZmF1bHQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFByZWZhdWx0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLm9wdGluID0gXCJvcHRpb25hbFwiO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IGRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgaWYgKGN0eC5kaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIikge1xuICAgICAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3J3YXJkIGRpcmVjdGlvbiAoZGVjb2RlKTogYXBwbHkgcHJlZmF1bHQgZm9yIHVuZGVmaW5lZCBpbnB1dFxuICAgICAgICBpZiAocGF5bG9hZC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gZGVmLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTm9uT3B0aW9uYWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE5vbk9wdGlvbmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCB2ID0gZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztcbiAgICAgICAgcmV0dXJuIHYgPyBuZXcgU2V0KFsuLi52XS5maWx0ZXIoKHgpID0+IHggIT09IHVuZGVmaW5lZCkpIDogdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyZXN1bHQpID0+IGhhbmRsZU5vbk9wdGlvbmFsUmVzdWx0KHJlc3VsdCwgaW5zdCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kbGVOb25PcHRpb25hbFJlc3VsdChyZXN1bHQsIGluc3QpO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZU5vbk9wdGlvbmFsUmVzdWx0KHBheWxvYWQsIGluc3QpIHtcbiAgICBpZiAoIXBheWxvYWQuaXNzdWVzLmxlbmd0aCAmJiBwYXlsb2FkLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwibm9ub3B0aW9uYWxcIixcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBwYXlsb2FkO1xufVxuZXhwb3J0IGNvbnN0ICRab2RTdWNjZXNzID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RTdWNjZXNzXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kRW5jb2RlRXJyb3IoXCJab2RTdWNjZXNzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHJlc3VsdC5pc3N1ZXMubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHJlc3VsdC5pc3N1ZXMubGVuZ3RoID09PSAwO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENhdGNoID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDYXRjaFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5vcHRpbiA9IFwib3B0aW9uYWxcIjtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdG91dFwiLCAoKSA9PiBkZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInZhbHVlc1wiLCAoKSA9PiBkZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGlmIChjdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yd2FyZCBkaXJlY3Rpb24gKGRlY29kZSk6IGFwcGx5IGNhdGNoIGxvZ2ljXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IGRlZi5jYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlczogcmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcykgPT4gdXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3VlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmZhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLnZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBkZWYuY2F0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgLi4ucGF5bG9hZCxcbiAgICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzID0gW107XG4gICAgICAgICAgICBwYXlsb2FkLmZhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE5hTiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTmFOXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkLnZhbHVlICE9PSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNOYU4ocGF5bG9hZC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwibmFuXCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RQaXBlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RQaXBlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4gZGVmLmluLl96b2QudmFsdWVzKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdGluXCIsICgpID0+IGRlZi5pbi5fem9kLm9wdGluKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdG91dFwiLCAoKSA9PiBkZWYub3V0Ll96b2Qub3B0b3V0KTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInByb3BWYWx1ZXNcIiwgKCkgPT4gZGVmLmluLl96b2QucHJvcFZhbHVlcyk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGRlZi5vdXQuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyaWdodCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmlnaHQudGhlbigocmlnaHQpID0+IGhhbmRsZVBpcGVSZXN1bHQocmlnaHQsIGRlZi5pbiwgY3R4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlUGlwZVJlc3VsdChyaWdodCwgZGVmLmluLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlZnQgPSBkZWYuaW4uX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgaWYgKGxlZnQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbGVmdC50aGVuKChsZWZ0KSA9PiBoYW5kbGVQaXBlUmVzdWx0KGxlZnQsIGRlZi5vdXQsIGN0eCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kbGVQaXBlUmVzdWx0KGxlZnQsIGRlZi5vdXQsIGN0eCk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlUGlwZVJlc3VsdChsZWZ0LCBuZXh0LCBjdHgpIHtcbiAgICBpZiAobGVmdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIHByZXZlbnQgZnVydGhlciBjaGVja3NcbiAgICAgICAgbGVmdC5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGxlZnQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0Ll96b2QucnVuKHsgdmFsdWU6IGxlZnQudmFsdWUsIGlzc3VlczogbGVmdC5pc3N1ZXMsIGZhbGxiYWNrOiBsZWZ0LmZhbGxiYWNrIH0sIGN0eCk7XG59XG5leHBvcnQgY29uc3QgJFpvZENvZGVjID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDb2RlY1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IGRlZi5pbi5fem9kLnZhbHVlcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRpblwiLCAoKSA9PiBkZWYuaW4uX3pvZC5vcHRpbik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRvdXRcIiwgKCkgPT4gZGVmLm91dC5fem9kLm9wdG91dCk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwcm9wVmFsdWVzXCIsICgpID0+IGRlZi5pbi5fem9kLnByb3BWYWx1ZXMpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gY3R4LmRpcmVjdGlvbiB8fCBcImZvcndhcmRcIjtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gXCJmb3J3YXJkXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBkZWYuaW4uX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIGlmIChsZWZ0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0LnRoZW4oKGxlZnQpID0+IGhhbmRsZUNvZGVjQVJlc3VsdChsZWZ0LCBkZWYsIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUNvZGVjQVJlc3VsdChsZWZ0LCBkZWYsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGRlZi5vdXQuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyaWdodCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmlnaHQudGhlbigocmlnaHQpID0+IGhhbmRsZUNvZGVjQVJlc3VsdChyaWdodCwgZGVmLCBjdHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVDb2RlY0FSZXN1bHQocmlnaHQsIGRlZiwgY3R4KTtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZUNvZGVjQVJlc3VsdChyZXN1bHQsIGRlZiwgY3R4KSB7XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIHByZXZlbnQgZnVydGhlciBjaGVja3NcbiAgICAgICAgcmVzdWx0LmFib3J0ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBkaXJlY3Rpb24gPSBjdHguZGlyZWN0aW9uIHx8IFwiZm9yd2FyZFwiO1xuICAgIGlmIChkaXJlY3Rpb24gPT09IFwiZm9yd2FyZFwiKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gZGVmLnRyYW5zZm9ybShyZXN1bHQudmFsdWUsIHJlc3VsdCk7XG4gICAgICAgIGlmICh0cmFuc2Zvcm1lZCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZC50aGVuKCh2YWx1ZSkgPT4gaGFuZGxlQ29kZWNUeFJlc3VsdChyZXN1bHQsIHZhbHVlLCBkZWYub3V0LCBjdHgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlQ29kZWNUeFJlc3VsdChyZXN1bHQsIHRyYW5zZm9ybWVkLCBkZWYub3V0LCBjdHgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSBkZWYucmV2ZXJzZVRyYW5zZm9ybShyZXN1bHQudmFsdWUsIHJlc3VsdCk7XG4gICAgICAgIGlmICh0cmFuc2Zvcm1lZCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZC50aGVuKCh2YWx1ZSkgPT4gaGFuZGxlQ29kZWNUeFJlc3VsdChyZXN1bHQsIHZhbHVlLCBkZWYuaW4sIGN0eCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kbGVDb2RlY1R4UmVzdWx0KHJlc3VsdCwgdHJhbnNmb3JtZWQsIGRlZi5pbiwgY3R4KTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVDb2RlY1R4UmVzdWx0KGxlZnQsIHZhbHVlLCBuZXh0U2NoZW1hLCBjdHgpIHtcbiAgICAvLyBDaGVjayBpZiB0cmFuc2Zvcm0gYWRkZWQgYW55IGlzc3Vlc1xuICAgIGlmIChsZWZ0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgbGVmdC5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGxlZnQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0U2NoZW1hLl96b2QucnVuKHsgdmFsdWUsIGlzc3VlczogbGVmdC5pc3N1ZXMgfSwgY3R4KTtcbn1cbmV4cG9ydCBjb25zdCAkWm9kUHJlcHJvY2VzcyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kUHJlcHJvY2Vzc1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFBpcGUuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFJlYWRvbmx5ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RSZWFkb25seVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicHJvcFZhbHVlc1wiLCAoKSA9PiBkZWYuaW5uZXJUeXBlLl96b2QucHJvcFZhbHVlcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4gZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRpblwiLCAoKSA9PiBkZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRpbik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRvdXRcIiwgKCkgPT4gZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0KTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGlmIChjdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKGhhbmRsZVJlYWRvbmx5UmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlUmVhZG9ubHlSZXN1bHQocmVzdWx0KTtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVSZWFkb25seVJlc3VsdChwYXlsb2FkKSB7XG4gICAgcGF5bG9hZC52YWx1ZSA9IE9iamVjdC5mcmVlemUocGF5bG9hZC52YWx1ZSk7XG4gICAgcmV0dXJuIHBheWxvYWQ7XG59XG5leHBvcnQgY29uc3QgJFpvZFRlbXBsYXRlTGl0ZXJhbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVGVtcGxhdGVMaXRlcmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgcmVnZXhQYXJ0cyA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFydCBvZiBkZWYucGFydHMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSBcIm9iamVjdFwiICYmIHBhcnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGlzIFpvZCBzY2hlbWFcbiAgICAgICAgICAgIGlmICghcGFydC5fem9kLnBhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICAvLyBpZiAoIXNvdXJjZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0LCBubyBwYXR0ZXJuIGZvdW5kOiAke1suLi5wYXJ0Ll96b2QudHJhaXRzXS5zaGlmdCgpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcGFydC5fem9kLnBhdHRlcm4gaW5zdGFuY2VvZiBSZWdFeHAgPyBwYXJ0Ll96b2QucGF0dGVybi5zb3VyY2UgOiBwYXJ0Ll96b2QucGF0dGVybjtcbiAgICAgICAgICAgIGlmICghc291cmNlKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQ6ICR7cGFydC5fem9kLnRyYWl0c31gKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gc291cmNlLnN0YXJ0c1dpdGgoXCJeXCIpID8gMSA6IDA7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSBzb3VyY2UuZW5kc1dpdGgoXCIkXCIpID8gc291cmNlLmxlbmd0aCAtIDEgOiBzb3VyY2UubGVuZ3RoO1xuICAgICAgICAgICAgcmVnZXhQYXJ0cy5wdXNoKHNvdXJjZS5zbGljZShzdGFydCwgZW5kKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGFydCA9PT0gbnVsbCB8fCB1dGlsLnByaW1pdGl2ZVR5cGVzLmhhcyh0eXBlb2YgcGFydCkpIHtcbiAgICAgICAgICAgIHJlZ2V4UGFydHMucHVzaCh1dGlsLmVzY2FwZVJlZ2V4KGAke3BhcnR9YCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydDogJHtwYXJ0fWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluc3QuX3pvZC5wYXR0ZXJuID0gbmV3IFJlZ0V4cChgXiR7cmVnZXhQYXJ0cy5qb2luKFwiXCIpfSRgKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHBheWxvYWQudmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgaW5zdC5fem9kLnBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICAgICAgaWYgKCFpbnN0Ll96b2QucGF0dGVybi50ZXN0KHBheWxvYWQudmFsdWUpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGRlZi5mb3JtYXQgPz8gXCJ0ZW1wbGF0ZV9saXRlcmFsXCIsXG4gICAgICAgICAgICAgICAgcGF0dGVybjogaW5zdC5fem9kLnBhdHRlcm4uc291cmNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEZ1bmN0aW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RGdW5jdGlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX2RlZiA9IGRlZjtcbiAgICBpbnN0Ll96b2QuZGVmID0gZGVmO1xuICAgIGluc3QuaW1wbGVtZW50ID0gKGZ1bmMpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImltcGxlbWVudCgpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFyZ3MgPSBpbnN0Ll9kZWYuaW5wdXQgPyBwYXJzZShpbnN0Ll9kZWYuaW5wdXQsIGFyZ3MpIDogYXJncztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuYXBwbHkoZnVuYywgdGhpcywgcGFyc2VkQXJncyk7XG4gICAgICAgICAgICBpZiAoaW5zdC5fZGVmLm91dHB1dCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZShpbnN0Ll9kZWYub3V0cHV0LCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGluc3QuaW1wbGVtZW50QXN5bmMgPSAoZnVuYykgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW1wbGVtZW50QXN5bmMoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRBcmdzID0gaW5zdC5fZGVmLmlucHV0ID8gYXdhaXQgcGFyc2VBc3luYyhpbnN0Ll9kZWYuaW5wdXQsIGFyZ3MpIDogYXJncztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFJlZmxlY3QuYXBwbHkoZnVuYywgdGhpcywgcGFyc2VkQXJncyk7XG4gICAgICAgICAgICBpZiAoaW5zdC5fZGVmLm91dHB1dCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBwYXJzZUFzeW5jKGluc3QuX2RlZi5vdXRwdXQsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgIH07XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkLnZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiBvdXRwdXQgaXMgYSBwcm9taXNlIHR5cGUgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCB1c2UgYXN5bmMgaW1wbGVtZW50YXRpb25cbiAgICAgICAgY29uc3QgaGFzUHJvbWlzZU91dHB1dCA9IGluc3QuX2RlZi5vdXRwdXQgJiYgaW5zdC5fZGVmLm91dHB1dC5fem9kLmRlZi50eXBlID09PSBcInByb21pc2VcIjtcbiAgICAgICAgaWYgKGhhc1Byb21pc2VPdXRwdXQpIHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBpbnN0LmltcGxlbWVudEFzeW5jKHBheWxvYWQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IGluc3QuaW1wbGVtZW50KHBheWxvYWQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG4gICAgaW5zdC5pbnB1dCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IEYgPSBpbnN0LmNvbnN0cnVjdG9yO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmdzWzBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IG5ldyAkWm9kVHVwbGUoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInR1cGxlXCIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBhcmdzWzBdLFxuICAgICAgICAgICAgICAgICAgICByZXN0OiBhcmdzWzFdLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG91dHB1dDogaW5zdC5fZGVmLm91dHB1dCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRih7XG4gICAgICAgICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgICBpbnB1dDogYXJnc1swXSxcbiAgICAgICAgICAgIG91dHB1dDogaW5zdC5fZGVmLm91dHB1dCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBpbnN0Lm91dHB1dCA9IChvdXRwdXQpID0+IHtcbiAgICAgICAgY29uc3QgRiA9IGluc3QuY29uc3RydWN0b3I7XG4gICAgICAgIHJldHVybiBuZXcgRih7XG4gICAgICAgICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgICBpbnB1dDogaW5zdC5fZGVmLmlucHV0LFxuICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBpbnN0O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFByb21pc2UgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFByb21pc2VcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGF5bG9hZC52YWx1ZSkudGhlbigoaW5uZXIpID0+IGRlZi5pbm5lclR5cGUuX3pvZC5ydW4oeyB2YWx1ZTogaW5uZXIsIGlzc3VlczogW10gfSwgY3R4KSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RMYXp5ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RMYXp5XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgLy8gQ2FjaGUgdGhlIHJlc29sdmVkIGlubmVyIHR5cGUgb24gdGhlIHNoYXJlZCBgZGVmYCBzbyBhbGwgY2xvbmVzIG9mIHRoaXNcbiAgICAvLyBsYXp5IChlLmcuIHZpYSBgLmRlc2NyaWJlKClgL2AubWV0YSgpYCkgc2hhcmUgdGhlIHNhbWUgaW5uZXIgaW5zdGFuY2UsXG4gICAgLy8gcHJlc2VydmluZyBpZGVudGl0eSBmb3IgY3ljbGUgZGV0ZWN0aW9uIG9uIHJlY3Vyc2l2ZSBzY2hlbWFzLlxuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwiaW5uZXJUeXBlXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgZCA9IGRlZjtcbiAgICAgICAgaWYgKCFkLl9jYWNoZWRJbm5lcilcbiAgICAgICAgICAgIGQuX2NhY2hlZElubmVyID0gZGVmLmdldHRlcigpO1xuICAgICAgICByZXR1cm4gZC5fY2FjaGVkSW5uZXI7XG4gICAgfSk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwYXR0ZXJuXCIsICgpID0+IGluc3QuX3pvZC5pbm5lclR5cGU/Ll96b2Q/LnBhdHRlcm4pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicHJvcFZhbHVlc1wiLCAoKSA9PiBpbnN0Ll96b2QuaW5uZXJUeXBlPy5fem9kPy5wcm9wVmFsdWVzKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdGluXCIsICgpID0+IGluc3QuX3pvZC5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluID8/IHVuZGVmaW5lZCk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRvdXRcIiwgKCkgPT4gaW5zdC5fem9kLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0ID8/IHVuZGVmaW5lZCk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbm5lciA9IGluc3QuX3pvZC5pbm5lclR5cGU7XG4gICAgICAgIHJldHVybiBpbm5lci5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ3VzdG9tID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDdXN0b21cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNoZWNrcy4kWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgXykgPT4ge1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgciA9IGRlZi5mbihpbnB1dCk7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHIudGhlbigocikgPT4gaGFuZGxlUmVmaW5lUmVzdWx0KHIsIHBheWxvYWQsIGlucHV0LCBpbnN0KSk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUmVmaW5lUmVzdWx0KHIsIHBheWxvYWQsIGlucHV0LCBpbnN0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZVJlZmluZVJlc3VsdChyZXN1bHQsIHBheWxvYWQsIGlucHV0LCBpbnN0KSB7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgY29uc3QgX2lzcyA9IHtcbiAgICAgICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsIC8vIGluY29ycG9yYXRlcyBwYXJhbXMuZXJyb3IgaW50byBpc3N1ZSByZXBvcnRpbmdcbiAgICAgICAgICAgIHBhdGg6IFsuLi4oaW5zdC5fem9kLmRlZi5wYXRoID8/IFtdKV0sIC8vIGluY29ycG9yYXRlcyBwYXJhbXMuZXJyb3IgaW50byBpc3N1ZSByZXBvcnRpbmdcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhaW5zdC5fem9kLmRlZi5hYm9ydCxcbiAgICAgICAgICAgIC8vIHBhcmFtczogaW5zdC5fem9kLmRlZi5wYXJhbXMsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChpbnN0Ll96b2QuZGVmLnBhcmFtcylcbiAgICAgICAgICAgIF9pc3MucGFyYW1zID0gaW5zdC5fem9kLmRlZi5wYXJhbXM7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2godXRpbC5pc3N1ZShfaXNzKSk7XG4gICAgfVxufVxuIiwidmFyIF9hO1xuZXhwb3J0IGNvbnN0ICRvdXRwdXQgPSBTeW1ib2woXCJab2RPdXRwdXRcIik7XG5leHBvcnQgY29uc3QgJGlucHV0ID0gU3ltYm9sKFwiWm9kSW5wdXRcIik7XG5leHBvcnQgY2xhc3MgJFpvZFJlZ2lzdHJ5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgdGhpcy5faWRtYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGFkZChzY2hlbWEsIC4uLl9tZXRhKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBfbWV0YVswXTtcbiAgICAgICAgdGhpcy5fbWFwLnNldChzY2hlbWEsIG1ldGEpO1xuICAgICAgICBpZiAobWV0YSAmJiB0eXBlb2YgbWV0YSA9PT0gXCJvYmplY3RcIiAmJiBcImlkXCIgaW4gbWV0YSkge1xuICAgICAgICAgICAgdGhpcy5faWRtYXAuc2V0KG1ldGEuaWQsIHNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICB0aGlzLl9pZG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHJlbW92ZShzY2hlbWEpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IHRoaXMuX21hcC5nZXQoc2NoZW1hKTtcbiAgICAgICAgaWYgKG1ldGEgJiYgdHlwZW9mIG1ldGEgPT09IFwib2JqZWN0XCIgJiYgXCJpZFwiIGluIG1ldGEpIHtcbiAgICAgICAgICAgIHRoaXMuX2lkbWFwLmRlbGV0ZShtZXRhLmlkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYXAuZGVsZXRlKHNjaGVtYSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBnZXQoc2NoZW1hKSB7XG4gICAgICAgIC8vIHJldHVybiB0aGlzLl9tYXAuZ2V0KHNjaGVtYSkgYXMgYW55O1xuICAgICAgICAvLyBpbmhlcml0IG1ldGFkYXRhXG4gICAgICAgIGNvbnN0IHAgPSBzY2hlbWEuX3pvZC5wYXJlbnQ7XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBjb25zdCBwbSA9IHsgLi4uKHRoaXMuZ2V0KHApID8/IHt9KSB9O1xuICAgICAgICAgICAgZGVsZXRlIHBtLmlkOyAvLyBkbyBub3QgaW5oZXJpdCBpZFxuICAgICAgICAgICAgY29uc3QgZiA9IHsgLi4ucG0sIC4uLnRoaXMuX21hcC5nZXQoc2NoZW1hKSB9O1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGYpLmxlbmd0aCA/IGYgOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX21hcC5nZXQoc2NoZW1hKTtcbiAgICB9XG4gICAgaGFzKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFwLmhhcyhzY2hlbWEpO1xuICAgIH1cbn1cbi8vIHJlZ2lzdHJpZXNcbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RyeSgpIHtcbiAgICByZXR1cm4gbmV3ICRab2RSZWdpc3RyeSgpO1xufVxuKF9hID0gZ2xvYmFsVGhpcykuX196b2RfZ2xvYmFsUmVnaXN0cnkgPz8gKF9hLl9fem9kX2dsb2JhbFJlZ2lzdHJ5ID0gcmVnaXN0cnkoKSk7XG5leHBvcnQgY29uc3QgZ2xvYmFsUmVnaXN0cnkgPSBnbG9iYWxUaGlzLl9fem9kX2dsb2JhbFJlZ2lzdHJ5O1xuIiwiaW1wb3J0ICogYXMgY2hlY2tzIGZyb20gXCIuL2NoZWNrcy5qc1wiO1xuaW1wb3J0ICogYXMgcmVnaXN0cmllcyBmcm9tIFwiLi9yZWdpc3RyaWVzLmpzXCI7XG5pbXBvcnQgKiBhcyBzY2hlbWFzIGZyb20gXCIuL3NjaGVtYXMuanNcIjtcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4vdXRpbC5qc1wiO1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc3RyaW5nKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2NvZXJjZWRTdHJpbmcoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBjb2VyY2U6IHRydWUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9lbWFpbChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJlbWFpbFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2d1aWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZ3VpZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3V1aWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwidXVpZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3V1aWR2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJ1dWlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICB2ZXJzaW9uOiBcInY0XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91dWlkdjYoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwidXVpZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgdmVyc2lvbjogXCJ2NlwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdXVpZHY3KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcInV1aWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIHZlcnNpb246IFwidjdcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3VybChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJ1cmxcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9lbW9qaShDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJlbW9qaVwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX25hbm9pZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJuYW5vaWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vKipcbiAqIEBkZXByZWNhdGVkIENVSUQgdjEgaXMgZGVwcmVjYXRlZCBieSBpdHMgYXV0aG9ycyBkdWUgdG8gaW5mb3JtYXRpb24gbGVha2FnZVxuICogKHRpbWVzdGFtcHMgZW1iZWRkZWQgaW4gdGhlIGlkKS4gVXNlIHtAbGluayBfY3VpZDJ9IGluc3RlYWQuXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BhcmFsbGVsZHJpdmUvY3VpZC5cbiAqL1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY3VpZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJjdWlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY3VpZDIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiY3VpZDJcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91bGlkKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcInVsaWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF94aWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwieGlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfa3N1aWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwia3N1aWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pcHY0KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImlwdjRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pcHY2KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImlwdjZcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9tYWMoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwibWFjXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY2lkcnY0KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImNpZHJ2NFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2NpZHJ2NihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJjaWRydjZcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9iYXNlNjQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiYmFzZTY0XCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfYmFzZTY0dXJsKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImJhc2U2NHVybFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2UxNjQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZTE2NFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2p3dChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJqd3RcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgVGltZVByZWNpc2lvbiA9IHtcbiAgICBBbnk6IG51bGwsXG4gICAgTWludXRlOiAtMSxcbiAgICBTZWNvbmQ6IDAsXG4gICAgTWlsbGlzZWNvbmQ6IDMsXG4gICAgTWljcm9zZWNvbmQ6IDYsXG59O1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaXNvRGF0ZVRpbWUoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZGF0ZXRpbWVcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBvZmZzZXQ6IGZhbHNlLFxuICAgICAgICBsb2NhbDogZmFsc2UsXG4gICAgICAgIHByZWNpc2lvbjogbnVsbCxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2lzb0RhdGUoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZGF0ZVwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pc29UaW1lKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcInRpbWVcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBwcmVjaXNpb246IG51bGwsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pc29EdXJhdGlvbihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJkdXJhdGlvblwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9udW1iZXIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY29lcmNlZE51bWJlcihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNvZXJjZTogdHJ1ZSxcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2ludChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNoZWNrOiBcIm51bWJlcl9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwic2FmZWludFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZmxvYXQzMihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNoZWNrOiBcIm51bWJlcl9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwiZmxvYXQzMlwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZmxvYXQ2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNoZWNrOiBcIm51bWJlcl9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwiZmxvYXQ2NFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaW50MzIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBjaGVjazogXCJudW1iZXJfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgZm9ybWF0OiBcImludDMyXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91aW50MzIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBjaGVjazogXCJudW1iZXJfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgZm9ybWF0OiBcInVpbnQzMlwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfYm9vbGVhbihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY29lcmNlZEJvb2xlYW4oQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgY29lcmNlOiB0cnVlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfYmlnaW50KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJiaWdpbnRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2NvZXJjZWRCaWdpbnQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImJpZ2ludFwiLFxuICAgICAgICBjb2VyY2U6IHRydWUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pbnQ2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiYmlnaW50XCIsXG4gICAgICAgIGNoZWNrOiBcImJpZ2ludF9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwiaW50NjRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3VpbnQ2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiYmlnaW50XCIsXG4gICAgICAgIGNoZWNrOiBcImJpZ2ludF9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwidWludDY0XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zeW1ib2woQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN5bWJvbFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdW5kZWZpbmVkKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ1bmRlZmluZWRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX251bGwoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm51bGxcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2FueShDbGFzcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImFueVwiLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdW5rbm93bihDbGFzcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInVua25vd25cIixcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX25ldmVyKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJuZXZlclwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdm9pZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidm9pZFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZGF0ZShDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY29lcmNlZERhdGUoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgY29lcmNlOiB0cnVlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbmFuKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJuYW5cIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2x0KHZhbHVlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tMZXNzVGhhbih7XG4gICAgICAgIGNoZWNrOiBcImxlc3NfdGhhblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2x0ZSh2YWx1ZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTGVzc1RoYW4oe1xuICAgICAgICBjaGVjazogXCJsZXNzX3RoYW5cIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICB9KTtcbn1cbmV4cG9ydCB7IFxuLyoqIEBkZXByZWNhdGVkIFVzZSBgei5sdGUoKWAgaW5zdGVhZC4gKi9cbl9sdGUgYXMgX21heCwgfTtcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2d0KHZhbHVlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tHcmVhdGVyVGhhbih7XG4gICAgICAgIGNoZWNrOiBcImdyZWF0ZXJfdGhhblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2d0ZSh2YWx1ZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrR3JlYXRlclRoYW4oe1xuICAgICAgICBjaGVjazogXCJncmVhdGVyX3RoYW5cIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICB9KTtcbn1cbmV4cG9ydCB7IFxuLyoqIEBkZXByZWNhdGVkIFVzZSBgei5ndGUoKWAgaW5zdGVhZC4gKi9cbl9ndGUgYXMgX21pbiwgfTtcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3Bvc2l0aXZlKHBhcmFtcykge1xuICAgIHJldHVybiBfZ3QoMCwgcGFyYW1zKTtcbn1cbi8vIG5lZ2F0aXZlXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9uZWdhdGl2ZShwYXJhbXMpIHtcbiAgICByZXR1cm4gX2x0KDAsIHBhcmFtcyk7XG59XG4vLyBub25wb3NpdGl2ZVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbm9ucG9zaXRpdmUocGFyYW1zKSB7XG4gICAgcmV0dXJuIF9sdGUoMCwgcGFyYW1zKTtcbn1cbi8vIG5vbm5lZ2F0aXZlXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9ub25uZWdhdGl2ZShwYXJhbXMpIHtcbiAgICByZXR1cm4gX2d0ZSgwLCBwYXJhbXMpO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbXVsdGlwbGVPZih2YWx1ZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTXVsdGlwbGVPZih7XG4gICAgICAgIGNoZWNrOiBcIm11bHRpcGxlX29mXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIHZhbHVlLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbWF4U2l6ZShtYXhpbXVtLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tNYXhTaXplKHtcbiAgICAgICAgY2hlY2s6IFwibWF4X3NpemVcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgbWF4aW11bSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX21pblNpemUobWluaW11bSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTWluU2l6ZSh7XG4gICAgICAgIGNoZWNrOiBcIm1pbl9zaXplXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIG1pbmltdW0sXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zaXplKHNpemUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja1NpemVFcXVhbHMoe1xuICAgICAgICBjaGVjazogXCJzaXplX2VxdWFsc1wiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBzaXplLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbWF4TGVuZ3RoKG1heGltdW0sIHBhcmFtcykge1xuICAgIGNvbnN0IGNoID0gbmV3IGNoZWNrcy4kWm9kQ2hlY2tNYXhMZW5ndGgoe1xuICAgICAgICBjaGVjazogXCJtYXhfbGVuZ3RoXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIG1heGltdW0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGNoO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbWluTGVuZ3RoKG1pbmltdW0sIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja01pbkxlbmd0aCh7XG4gICAgICAgIGNoZWNrOiBcIm1pbl9sZW5ndGhcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgbWluaW11bSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2xlbmd0aChsZW5ndGgsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja0xlbmd0aEVxdWFscyh7XG4gICAgICAgIGNoZWNrOiBcImxlbmd0aF9lcXVhbHNcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgbGVuZ3RoLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcmVnZXgocGF0dGVybiwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrUmVnZXgoe1xuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGZvcm1hdDogXCJyZWdleFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBwYXR0ZXJuLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbG93ZXJjYXNlKHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja0xvd2VyQ2FzZSh7XG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgZm9ybWF0OiBcImxvd2VyY2FzZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdXBwZXJjYXNlKHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja1VwcGVyQ2FzZSh7XG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgZm9ybWF0OiBcInVwcGVyY2FzZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaW5jbHVkZXMoaW5jbHVkZXMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja0luY2x1ZGVzKHtcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBmb3JtYXQ6IFwiaW5jbHVkZXNcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgaW5jbHVkZXMsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zdGFydHNXaXRoKHByZWZpeCwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrU3RhcnRzV2l0aCh7XG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgZm9ybWF0OiBcInN0YXJ0c193aXRoXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIHByZWZpeCxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2VuZHNXaXRoKHN1ZmZpeCwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrRW5kc1dpdGgoe1xuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGZvcm1hdDogXCJlbmRzX3dpdGhcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgc3VmZml4LFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcHJvcGVydHkocHJvcGVydHksIHNjaGVtYSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrUHJvcGVydHkoe1xuICAgICAgICBjaGVjazogXCJwcm9wZXJ0eVwiLFxuICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbWltZSh0eXBlcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTWltZVR5cGUoe1xuICAgICAgICBjaGVjazogXCJtaW1lX3R5cGVcIixcbiAgICAgICAgbWltZTogdHlwZXMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9vdmVyd3JpdGUodHgpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tPdmVyd3JpdGUoe1xuICAgICAgICBjaGVjazogXCJvdmVyd3JpdGVcIixcbiAgICAgICAgdHgsXG4gICAgfSk7XG59XG4vLyBub3JtYWxpemVcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX25vcm1hbGl6ZShmb3JtKSB7XG4gICAgcmV0dXJuIF9vdmVyd3JpdGUoKGlucHV0KSA9PiBpbnB1dC5ub3JtYWxpemUoZm9ybSkpO1xufVxuLy8gdHJpbVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdHJpbSgpIHtcbiAgICByZXR1cm4gX292ZXJ3cml0ZSgoaW5wdXQpID0+IGlucHV0LnRyaW0oKSk7XG59XG4vLyB0b0xvd2VyQ2FzZVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdG9Mb3dlckNhc2UoKSB7XG4gICAgcmV0dXJuIF9vdmVyd3JpdGUoKGlucHV0KSA9PiBpbnB1dC50b0xvd2VyQ2FzZSgpKTtcbn1cbi8vIHRvVXBwZXJDYXNlXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF90b1VwcGVyQ2FzZSgpIHtcbiAgICByZXR1cm4gX292ZXJ3cml0ZSgoaW5wdXQpID0+IGlucHV0LnRvVXBwZXJDYXNlKCkpO1xufVxuLy8gc2x1Z2lmeVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc2x1Z2lmeSgpIHtcbiAgICByZXR1cm4gX292ZXJ3cml0ZSgoaW5wdXQpID0+IHV0aWwuc2x1Z2lmeShpbnB1dCkpO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfYXJyYXkoQ2xhc3MsIGVsZW1lbnQsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIC8vIGdldCBlbGVtZW50KCkge1xuICAgICAgICAvLyAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAvLyB9LFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdW5pb24oQ2xhc3MsIG9wdGlvbnMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInVuaW9uXCIsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX3hvcihDbGFzcywgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidW5pb25cIixcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2Rpc2NyaW1pbmF0ZWRVbmlvbihDbGFzcywgZGlzY3JpbWluYXRvciwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidW5pb25cIixcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgZGlzY3JpbWluYXRvcixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2ludGVyc2VjdGlvbihDbGFzcywgbGVmdCwgcmlnaHQpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJpbnRlcnNlY3Rpb25cIixcbiAgICAgICAgbGVmdCxcbiAgICAgICAgcmlnaHQsXG4gICAgfSk7XG59XG4vLyBleHBvcnQgZnVuY3Rpb24gX3R1cGxlKFxuLy8gICBDbGFzczogdXRpbC5TY2hlbWFDbGFzczxzY2hlbWFzLiRab2RUdXBsZT4sXG4vLyAgIGl0ZW1zOiBbXSxcbi8vICAgcGFyYW1zPzogc3RyaW5nIHwgJFpvZFR1cGxlUGFyYW1zXG4vLyApOiBzY2hlbWFzLiRab2RUdXBsZTxbXSwgbnVsbD47XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF90dXBsZShDbGFzcywgaXRlbXMsIF9wYXJhbXNPclJlc3QsIF9wYXJhbXMpIHtcbiAgICBjb25zdCBoYXNSZXN0ID0gX3BhcmFtc09yUmVzdCBpbnN0YW5jZW9mIHNjaGVtYXMuJFpvZFR5cGU7XG4gICAgY29uc3QgcGFyYW1zID0gaGFzUmVzdCA/IF9wYXJhbXMgOiBfcGFyYW1zT3JSZXN0O1xuICAgIGNvbnN0IHJlc3QgPSBoYXNSZXN0ID8gX3BhcmFtc09yUmVzdCA6IG51bGw7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidHVwbGVcIixcbiAgICAgICAgaXRlbXMsXG4gICAgICAgIHJlc3QsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9yZWNvcmQoQ2xhc3MsIGtleVR5cGUsIHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwicmVjb3JkXCIsXG4gICAgICAgIGtleVR5cGUsXG4gICAgICAgIHZhbHVlVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX21hcChDbGFzcywga2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJtYXBcIixcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgdmFsdWVUeXBlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc2V0KENsYXNzLCB2YWx1ZVR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICB2YWx1ZVR5cGUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9lbnVtKENsYXNzLCB2YWx1ZXMsIHBhcmFtcykge1xuICAgIGNvbnN0IGVudHJpZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlcykgPyBPYmplY3QuZnJvbUVudHJpZXModmFsdWVzLm1hcCgodikgPT4gW3YsIHZdKSkgOiB2YWx1ZXM7XG4gICAgLy8gaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgIC8vICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAvLyAgICAgZW50cmllc1t2YWx1ZV0gPSB2YWx1ZTtcbiAgICAvLyAgIH1cbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgT2JqZWN0LmFzc2lnbihlbnRyaWVzLCB2YWx1ZXMpO1xuICAgIC8vIH1cbiAgICAvLyBjb25zdCBlbnRyaWVzOiB1dGlsLkVudW1MaWtlID0ge307XG4gICAgLy8gZm9yIChjb25zdCB2YWwgb2YgdmFsdWVzKSB7XG4gICAgLy8gICBlbnRyaWVzW3ZhbF0gPSB2YWw7XG4gICAgLy8gfVxuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImVudW1cIixcbiAgICAgICAgZW50cmllcyxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG4vKiogQGRlcHJlY2F0ZWQgVGhpcyBBUEkgaGFzIGJlZW4gbWVyZ2VkIGludG8gYHouZW51bSgpYC4gVXNlIGB6LmVudW0oKWAgaW5zdGVhZC5cbiAqXG4gKiBgYGB0c1xuICogZW51bSBDb2xvcnMgeyByZWQsIGdyZWVuLCBibHVlIH1cbiAqIHouZW51bShDb2xvcnMpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfbmF0aXZlRW51bShDbGFzcywgZW50cmllcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiZW51bVwiLFxuICAgICAgICBlbnRyaWVzLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbGl0ZXJhbChDbGFzcywgdmFsdWUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImxpdGVyYWxcIixcbiAgICAgICAgdmFsdWVzOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2ZpbGUoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImZpbGVcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3RyYW5zZm9ybShDbGFzcywgZm4pIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgdHJhbnNmb3JtOiBmbixcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX29wdGlvbmFsKENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJvcHRpb25hbFwiLFxuICAgICAgICBpbm5lclR5cGUsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9udWxsYWJsZShDbGFzcywgaW5uZXJUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVsbGFibGVcIixcbiAgICAgICAgaW5uZXJUeXBlLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZGVmYXVsdChDbGFzcywgaW5uZXJUeXBlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJkZWZhdWx0XCIsXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICAgICAgZ2V0IGRlZmF1bHRWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyBkZWZhdWx0VmFsdWUoKSA6IHV0aWwuc2hhbGxvd0Nsb25lKGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9ub25vcHRpb25hbChDbGFzcywgaW5uZXJUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJub25vcHRpb25hbFwiLFxuICAgICAgICBpbm5lclR5cGUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zdWNjZXNzKENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2NhdGNoKENsYXNzLCBpbm5lclR5cGUsIGNhdGNoVmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJjYXRjaFwiLFxuICAgICAgICBpbm5lclR5cGUsXG4gICAgICAgIGNhdGNoVmFsdWU6ICh0eXBlb2YgY2F0Y2hWYWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gY2F0Y2hWYWx1ZSA6ICgpID0+IGNhdGNoVmFsdWUpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcGlwZShDbGFzcywgaW5fLCBvdXQpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJwaXBlXCIsXG4gICAgICAgIGluOiBpbl8sXG4gICAgICAgIG91dCxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3JlYWRvbmx5KENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJyZWFkb25seVwiLFxuICAgICAgICBpbm5lclR5cGUsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF90ZW1wbGF0ZUxpdGVyYWwoQ2xhc3MsIHBhcnRzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ0ZW1wbGF0ZV9saXRlcmFsXCIsXG4gICAgICAgIHBhcnRzLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbGF6eShDbGFzcywgZ2V0dGVyKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibGF6eVwiLFxuICAgICAgICBnZXR0ZXIsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9wcm9taXNlKENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJwcm9taXNlXCIsXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2N1c3RvbShDbGFzcywgZm4sIF9wYXJhbXMpIHtcbiAgICBjb25zdCBub3JtID0gdXRpbC5ub3JtYWxpemVQYXJhbXMoX3BhcmFtcyk7XG4gICAgbm9ybS5hYm9ydCA/PyAobm9ybS5hYm9ydCA9IHRydWUpOyAvLyBkZWZhdWx0IHRvIGFib3J0OmZhbHNlXG4gICAgY29uc3Qgc2NoZW1hID0gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJjdXN0b21cIixcbiAgICAgICAgY2hlY2s6IFwiY3VzdG9tXCIsXG4gICAgICAgIGZuOiBmbixcbiAgICAgICAgLi4ubm9ybSxcbiAgICB9KTtcbiAgICByZXR1cm4gc2NoZW1hO1xufVxuLy8gc2FtZSBhcyBfY3VzdG9tIGJ1dCBkZWZhdWx0cyB0byBhYm9ydDpmYWxzZVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcmVmaW5lKENsYXNzLCBmbiwgX3BhcmFtcykge1xuICAgIGNvbnN0IHNjaGVtYSA9IG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiY3VzdG9tXCIsXG4gICAgICAgIGNoZWNrOiBcImN1c3RvbVwiLFxuICAgICAgICBmbjogZm4sXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKF9wYXJhbXMpLFxuICAgIH0pO1xuICAgIHJldHVybiBzY2hlbWE7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zdXBlclJlZmluZShmbiwgcGFyYW1zKSB7XG4gICAgY29uc3QgY2ggPSBfY2hlY2soKHBheWxvYWQpID0+IHtcbiAgICAgICAgcGF5bG9hZC5hZGRJc3N1ZSA9IChpc3N1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpc3N1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2godXRpbC5pc3N1ZShpc3N1ZSwgcGF5bG9hZC52YWx1ZSwgY2guX3pvZC5kZWYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGZvciBab2QgMyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZmF0YWwpXG4gICAgICAgICAgICAgICAgICAgIF9pc3N1ZS5jb250aW51ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIF9pc3N1ZS5jb2RlID8/IChfaXNzdWUuY29kZSA9IFwiY3VzdG9tXCIpO1xuICAgICAgICAgICAgICAgIF9pc3N1ZS5pbnB1dCA/PyAoX2lzc3VlLmlucHV0ID0gcGF5bG9hZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgX2lzc3VlLmluc3QgPz8gKF9pc3N1ZS5pbnN0ID0gY2gpO1xuICAgICAgICAgICAgICAgIF9pc3N1ZS5jb250aW51ZSA/PyAoX2lzc3VlLmNvbnRpbnVlID0gIWNoLl96b2QuZGVmLmFib3J0KTsgLy8gYWJvcnQgaXMgYWx3YXlzIHVuZGVmaW5lZCwgc28gdGhpcyBpcyBhbHdheXMgdHJ1ZS4uLlxuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2godXRpbC5pc3N1ZShfaXNzdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZuKHBheWxvYWQudmFsdWUsIHBheWxvYWQpO1xuICAgIH0sIHBhcmFtcyk7XG4gICAgcmV0dXJuIGNoO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY2hlY2soZm4sIHBhcmFtcykge1xuICAgIGNvbnN0IGNoID0gbmV3IGNoZWNrcy4kWm9kQ2hlY2soe1xuICAgICAgICBjaGVjazogXCJjdXN0b21cIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbiAgICBjaC5fem9kLmNoZWNrID0gZm47XG4gICAgcmV0dXJuIGNoO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBkZXNjcmliZShkZXNjcmlwdGlvbikge1xuICAgIGNvbnN0IGNoID0gbmV3IGNoZWNrcy4kWm9kQ2hlY2soeyBjaGVjazogXCJkZXNjcmliZVwiIH0pO1xuICAgIGNoLl96b2Qub25hdHRhY2ggPSBbXG4gICAgICAgIChpbnN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IHJlZ2lzdHJpZXMuZ2xvYmFsUmVnaXN0cnkuZ2V0KGluc3QpID8/IHt9O1xuICAgICAgICAgICAgcmVnaXN0cmllcy5nbG9iYWxSZWdpc3RyeS5hZGQoaW5zdCwgeyAuLi5leGlzdGluZywgZGVzY3JpcHRpb24gfSk7XG4gICAgICAgIH0sXG4gICAgXTtcbiAgICBjaC5fem9kLmNoZWNrID0gKCkgPT4geyB9OyAvLyBuby1vcCBjaGVja1xuICAgIHJldHVybiBjaDtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gbWV0YShtZXRhZGF0YSkge1xuICAgIGNvbnN0IGNoID0gbmV3IGNoZWNrcy4kWm9kQ2hlY2soeyBjaGVjazogXCJtZXRhXCIgfSk7XG4gICAgY2guX3pvZC5vbmF0dGFjaCA9IFtcbiAgICAgICAgKGluc3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcmVnaXN0cmllcy5nbG9iYWxSZWdpc3RyeS5nZXQoaW5zdCkgPz8ge307XG4gICAgICAgICAgICByZWdpc3RyaWVzLmdsb2JhbFJlZ2lzdHJ5LmFkZChpbnN0LCB7IC4uLmV4aXN0aW5nLCAuLi5tZXRhZGF0YSB9KTtcbiAgICAgICAgfSxcbiAgICBdO1xuICAgIGNoLl96b2QuY2hlY2sgPSAoKSA9PiB7IH07IC8vIG5vLW9wIGNoZWNrXG4gICAgcmV0dXJuIGNoO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc3RyaW5nYm9vbChDbGFzc2VzLCBfcGFyYW1zKSB7XG4gICAgY29uc3QgcGFyYW1zID0gdXRpbC5ub3JtYWxpemVQYXJhbXMoX3BhcmFtcyk7XG4gICAgbGV0IHRydXRoeUFycmF5ID0gcGFyYW1zLnRydXRoeSA/PyBbXCJ0cnVlXCIsIFwiMVwiLCBcInllc1wiLCBcIm9uXCIsIFwieVwiLCBcImVuYWJsZWRcIl07XG4gICAgbGV0IGZhbHN5QXJyYXkgPSBwYXJhbXMuZmFsc3kgPz8gW1wiZmFsc2VcIiwgXCIwXCIsIFwibm9cIiwgXCJvZmZcIiwgXCJuXCIsIFwiZGlzYWJsZWRcIl07XG4gICAgaWYgKHBhcmFtcy5jYXNlICE9PSBcInNlbnNpdGl2ZVwiKSB7XG4gICAgICAgIHRydXRoeUFycmF5ID0gdHJ1dGh5QXJyYXkubWFwKCh2KSA9PiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgPyB2LnRvTG93ZXJDYXNlKCkgOiB2KSk7XG4gICAgICAgIGZhbHN5QXJyYXkgPSBmYWxzeUFycmF5Lm1hcCgodikgPT4gKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiID8gdi50b0xvd2VyQ2FzZSgpIDogdikpO1xuICAgIH1cbiAgICBjb25zdCB0cnV0aHlTZXQgPSBuZXcgU2V0KHRydXRoeUFycmF5KTtcbiAgICBjb25zdCBmYWxzeVNldCA9IG5ldyBTZXQoZmFsc3lBcnJheSk7XG4gICAgY29uc3QgX0NvZGVjID0gQ2xhc3Nlcy5Db2RlYyA/PyBzY2hlbWFzLiRab2RDb2RlYztcbiAgICBjb25zdCBfQm9vbGVhbiA9IENsYXNzZXMuQm9vbGVhbiA/PyBzY2hlbWFzLiRab2RCb29sZWFuO1xuICAgIGNvbnN0IF9TdHJpbmcgPSBDbGFzc2VzLlN0cmluZyA/PyBzY2hlbWFzLiRab2RTdHJpbmc7XG4gICAgY29uc3Qgc3RyaW5nU2NoZW1hID0gbmV3IF9TdHJpbmcoeyB0eXBlOiBcInN0cmluZ1wiLCBlcnJvcjogcGFyYW1zLmVycm9yIH0pO1xuICAgIGNvbnN0IGJvb2xlYW5TY2hlbWEgPSBuZXcgX0Jvb2xlYW4oeyB0eXBlOiBcImJvb2xlYW5cIiwgZXJyb3I6IHBhcmFtcy5lcnJvciB9KTtcbiAgICBjb25zdCBjb2RlYyA9IG5ldyBfQ29kZWMoe1xuICAgICAgICB0eXBlOiBcInBpcGVcIixcbiAgICAgICAgaW46IHN0cmluZ1NjaGVtYSxcbiAgICAgICAgb3V0OiBib29sZWFuU2NoZW1hLFxuICAgICAgICB0cmFuc2Zvcm06ICgoaW5wdXQsIHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gaW5wdXQ7XG4gICAgICAgICAgICBpZiAocGFyYW1zLmNhc2UgIT09IFwic2Vuc2l0aXZlXCIpXG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmICh0cnV0aHlTZXQuaGFzKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmYWxzeVNldC5oYXMoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3ZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcInN0cmluZ2Jvb2xcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBbLi4udHJ1dGh5U2V0LCAuLi5mYWxzeVNldF0sXG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBpbnN0OiBjb2RlYyxcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHJldmVyc2VUcmFuc2Zvcm06ICgoaW5wdXQsIF9wYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1dGh5QXJyYXlbMF0gfHwgXCJ0cnVlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc3lBcnJheVswXSB8fCBcImZhbHNlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogcGFyYW1zLmVycm9yLFxuICAgIH0pO1xuICAgIHJldHVybiBjb2RlYztcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3N0cmluZ0Zvcm1hdChDbGFzcywgZm9ybWF0LCBmbk9yUmVnZXgsIF9wYXJhbXMgPSB7fSkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHV0aWwubm9ybWFsaXplUGFyYW1zKF9wYXJhbXMpO1xuICAgIGNvbnN0IGRlZiA9IHtcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMoX3BhcmFtcyksXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0LFxuICAgICAgICBmbjogdHlwZW9mIGZuT3JSZWdleCA9PT0gXCJmdW5jdGlvblwiID8gZm5PclJlZ2V4IDogKHZhbCkgPT4gZm5PclJlZ2V4LnRlc3QodmFsKSxcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgIH07XG4gICAgaWYgKGZuT3JSZWdleCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICBkZWYucGF0dGVybiA9IGZuT3JSZWdleDtcbiAgICB9XG4gICAgY29uc3QgaW5zdCA9IG5ldyBDbGFzcyhkZWYpO1xuICAgIHJldHVybiBpbnN0O1xufVxuIiwiaW1wb3J0IHsgZ2xvYmFsUmVnaXN0cnkgfSBmcm9tIFwiLi9yZWdpc3RyaWVzLmpzXCI7XG4vLyBmdW5jdGlvbiBpbml0aWFsaXplQ29udGV4dDxUIGV4dGVuZHMgc2NoZW1hcy4kWm9kVHlwZT4oaW5wdXRzOiBKU09OU2NoZW1hR2VuZXJhdG9yUGFyYW1zPFQ+KTogVG9KU09OU2NoZW1hQ29udGV4dDxUPiB7XG4vLyAgIHJldHVybiB7XG4vLyAgICAgcHJvY2Vzc29yOiBpbnB1dHMucHJvY2Vzc29yLFxuLy8gICAgIG1ldGFkYXRhUmVnaXN0cnk6IGlucHV0cy5tZXRhZGF0YSA/PyBnbG9iYWxSZWdpc3RyeSxcbi8vICAgICB0YXJnZXQ6IGlucHV0cy50YXJnZXQgPz8gXCJkcmFmdC0yMDIwLTEyXCIsXG4vLyAgICAgdW5yZXByZXNlbnRhYmxlOiBpbnB1dHMudW5yZXByZXNlbnRhYmxlID8/IFwidGhyb3dcIixcbi8vICAgfTtcbi8vIH1cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplQ29udGV4dChwYXJhbXMpIHtcbiAgICAvLyBOb3JtYWxpemUgdGFyZ2V0OiBjb252ZXJ0IG9sZCBub24taHlwaGVuYXRlZCB2ZXJzaW9ucyB0byBoeXBoZW5hdGVkIHZlcnNpb25zXG4gICAgbGV0IHRhcmdldCA9IHBhcmFtcz8udGFyZ2V0ID8/IFwiZHJhZnQtMjAyMC0xMlwiO1xuICAgIGlmICh0YXJnZXQgPT09IFwiZHJhZnQtNFwiKVxuICAgICAgICB0YXJnZXQgPSBcImRyYWZ0LTA0XCI7XG4gICAgaWYgKHRhcmdldCA9PT0gXCJkcmFmdC03XCIpXG4gICAgICAgIHRhcmdldCA9IFwiZHJhZnQtMDdcIjtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcm9jZXNzb3JzOiBwYXJhbXMucHJvY2Vzc29ycyA/PyB7fSxcbiAgICAgICAgbWV0YWRhdGFSZWdpc3RyeTogcGFyYW1zPy5tZXRhZGF0YSA/PyBnbG9iYWxSZWdpc3RyeSxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICB1bnJlcHJlc2VudGFibGU6IHBhcmFtcz8udW5yZXByZXNlbnRhYmxlID8/IFwidGhyb3dcIixcbiAgICAgICAgb3ZlcnJpZGU6IHBhcmFtcz8ub3ZlcnJpZGUgPz8gKCgpID0+IHsgfSksXG4gICAgICAgIGlvOiBwYXJhbXM/LmlvID8/IFwib3V0cHV0XCIsXG4gICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgIHNlZW46IG5ldyBNYXAoKSxcbiAgICAgICAgY3ljbGVzOiBwYXJhbXM/LmN5Y2xlcyA/PyBcInJlZlwiLFxuICAgICAgICByZXVzZWQ6IHBhcmFtcz8ucmV1c2VkID8/IFwiaW5saW5lXCIsXG4gICAgICAgIGV4dGVybmFsOiBwYXJhbXM/LmV4dGVybmFsID8/IHVuZGVmaW5lZCxcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3Moc2NoZW1hLCBjdHgsIF9wYXJhbXMgPSB7IHBhdGg6IFtdLCBzY2hlbWFQYXRoOiBbXSB9KSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICAvLyBjaGVjayBmb3Igc2NoZW1hIGluIHNlZW5zXG4gICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIGlmIChzZWVuKSB7XG4gICAgICAgIHNlZW4uY291bnQrKztcbiAgICAgICAgLy8gY2hlY2sgaWYgY3ljbGVcbiAgICAgICAgY29uc3QgaXNDeWNsZSA9IF9wYXJhbXMuc2NoZW1hUGF0aC5pbmNsdWRlcyhzY2hlbWEpO1xuICAgICAgICBpZiAoaXNDeWNsZSkge1xuICAgICAgICAgICAgc2Vlbi5jeWNsZSA9IF9wYXJhbXMucGF0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2Vlbi5zY2hlbWE7XG4gICAgfVxuICAgIC8vIGluaXRpYWxpemVcbiAgICBjb25zdCByZXN1bHQgPSB7IHNjaGVtYToge30sIGNvdW50OiAxLCBjeWNsZTogdW5kZWZpbmVkLCBwYXRoOiBfcGFyYW1zLnBhdGggfTtcbiAgICBjdHguc2Vlbi5zZXQoc2NoZW1hLCByZXN1bHQpO1xuICAgIC8vIGN1c3RvbSBtZXRob2Qgb3ZlcnJpZGVzIGRlZmF1bHQgYmVoYXZpb3JcbiAgICBjb25zdCBvdmVycmlkZVNjaGVtYSA9IHNjaGVtYS5fem9kLnRvSlNPTlNjaGVtYT8uKCk7XG4gICAgaWYgKG92ZXJyaWRlU2NoZW1hKSB7XG4gICAgICAgIHJlc3VsdC5zY2hlbWEgPSBvdmVycmlkZVNjaGVtYTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIC4uLl9wYXJhbXMsXG4gICAgICAgICAgICBzY2hlbWFQYXRoOiBbLi4uX3BhcmFtcy5zY2hlbWFQYXRoLCBzY2hlbWFdLFxuICAgICAgICAgICAgcGF0aDogX3BhcmFtcy5wYXRoLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoc2NoZW1hLl96b2QucHJvY2Vzc0pTT05TY2hlbWEpIHtcbiAgICAgICAgICAgIHNjaGVtYS5fem9kLnByb2Nlc3NKU09OU2NoZW1hKGN0eCwgcmVzdWx0LnNjaGVtYSwgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IF9qc29uID0gcmVzdWx0LnNjaGVtYTtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NvciA9IGN0eC5wcm9jZXNzb3JzW2RlZi50eXBlXTtcbiAgICAgICAgICAgIGlmICghcHJvY2Vzc29yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbdG9KU09OU2NoZW1hXTogTm9uLXJlcHJlc2VudGFibGUgdHlwZSBlbmNvdW50ZXJlZDogJHtkZWYudHlwZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb2Nlc3NvcihzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50ID0gc2NoZW1hLl96b2QucGFyZW50O1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAvLyBBbHNvIHNldCByZWYgaWYgcHJvY2Vzc29yIGRpZG4ndCAoZm9yIGluaGVyaXRhbmNlKVxuICAgICAgICAgICAgaWYgKCFyZXN1bHQucmVmKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5yZWYgPSBwYXJlbnQ7XG4gICAgICAgICAgICBwcm9jZXNzKHBhcmVudCwgY3R4LCBwYXJhbXMpO1xuICAgICAgICAgICAgY3R4LnNlZW4uZ2V0KHBhcmVudCkuaXNQYXJlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG1ldGFkYXRhXG4gICAgY29uc3QgbWV0YSA9IGN0eC5tZXRhZGF0YVJlZ2lzdHJ5LmdldChzY2hlbWEpO1xuICAgIGlmIChtZXRhKVxuICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdC5zY2hlbWEsIG1ldGEpO1xuICAgIGlmIChjdHguaW8gPT09IFwiaW5wdXRcIiAmJiBpc1RyYW5zZm9ybWluZyhzY2hlbWEpKSB7XG4gICAgICAgIC8vIGV4YW1wbGVzL2RlZmF1bHRzIG9ubHkgYXBwbHkgdG8gb3V0cHV0IHR5cGUgb2YgcGlwZVxuICAgICAgICBkZWxldGUgcmVzdWx0LnNjaGVtYS5leGFtcGxlcztcbiAgICAgICAgZGVsZXRlIHJlc3VsdC5zY2hlbWEuZGVmYXVsdDtcbiAgICB9XG4gICAgLy8gc2V0IHByZWZhdWx0IGFzIGRlZmF1bHRcbiAgICBpZiAoY3R4LmlvID09PSBcImlucHV0XCIgJiYgXCJfcHJlZmF1bHRcIiBpbiByZXN1bHQuc2NoZW1hKVxuICAgICAgICAoX2EgPSByZXN1bHQuc2NoZW1hKS5kZWZhdWx0ID8/IChfYS5kZWZhdWx0ID0gcmVzdWx0LnNjaGVtYS5fcHJlZmF1bHQpO1xuICAgIGRlbGV0ZSByZXN1bHQuc2NoZW1hLl9wcmVmYXVsdDtcbiAgICAvLyBwdWxsaW5nIGZyZXNoIGZyb20gY3R4LnNlZW4gaW4gY2FzZSBpdCB3YXMgb3ZlcndyaXR0ZW5cbiAgICBjb25zdCBfcmVzdWx0ID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgcmV0dXJuIF9yZXN1bHQuc2NoZW1hO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REZWZzKGN0eCwgc2NoZW1hXG4vLyBwYXJhbXM6IEVtaXRQYXJhbXNcbikge1xuICAgIC8vIGl0ZXJhdGUgb3ZlciBzZWVuIG1hcDtcbiAgICBjb25zdCByb290ID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgaWYgKCFyb290KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnByb2Nlc3NlZCBzY2hlbWEuIFRoaXMgaXMgYSBidWcgaW4gWm9kLlwiKTtcbiAgICAvLyBUcmFjayBpZHMgdG8gZGV0ZWN0IGR1cGxpY2F0ZXMgYWNyb3NzIGRpZmZlcmVudCBzY2hlbWFzXG4gICAgY29uc3QgaWRUb1NjaGVtYSA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGN0eC5zZWVuLmVudHJpZXMoKSkge1xuICAgICAgICBjb25zdCBpZCA9IGN0eC5tZXRhZGF0YVJlZ2lzdHJ5LmdldChlbnRyeVswXSk/LmlkO1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gaWRUb1NjaGVtYS5nZXQoaWQpO1xuICAgICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nICE9PSBlbnRyeVswXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIHNjaGVtYSBpZCBcIiR7aWR9XCIgZGV0ZWN0ZWQgZHVyaW5nIEpTT04gU2NoZW1hIGNvbnZlcnNpb24uIFR3byBkaWZmZXJlbnQgc2NoZW1hcyBjYW5ub3Qgc2hhcmUgdGhlIHNhbWUgaWQgd2hlbiBjb252ZXJ0ZWQgdG9nZXRoZXIuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZFRvU2NoZW1hLnNldChpZCwgZW50cnlbMF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybnMgYSByZWYgdG8gdGhlIHNjaGVtYVxuICAgIC8vIGRlZklkIHdpbGwgYmUgZW1wdHkgaWYgdGhlIHJlZiBwb2ludHMgdG8gYW4gZXh0ZXJuYWwgc2NoZW1hIChvciAjKVxuICAgIGNvbnN0IG1ha2VVUkkgPSAoZW50cnkpID0+IHtcbiAgICAgICAgLy8gY29tcGFyaW5nIHRoZSBzZWVuIG9iamVjdHMgYmVjYXVzZSBzb21ldGltZXNcbiAgICAgICAgLy8gbXVsdGlwbGUgc2NoZW1hcyBtYXAgdG8gdGhlIHNhbWUgc2VlbiBvYmplY3QuXG4gICAgICAgIC8vIGUuZy4gbGF6eVxuICAgICAgICAvLyBleHRlcm5hbCBpcyBjb25maWd1cmVkXG4gICAgICAgIGNvbnN0IGRlZnNTZWdtZW50ID0gY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0yMDIwLTEyXCIgPyBcIiRkZWZzXCIgOiBcImRlZmluaXRpb25zXCI7XG4gICAgICAgIGlmIChjdHguZXh0ZXJuYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVybmFsSWQgPSBjdHguZXh0ZXJuYWwucmVnaXN0cnkuZ2V0KGVudHJ5WzBdKT8uaWQ7IC8vID8/IFwiX19zaGFyZWRcIjsvLyBgX19zY2hlbWEke2N0eC5jb3VudGVyKyt9YDtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHNjaGVtYSBpcyBpbiB0aGUgZXh0ZXJuYWwgcmVnaXN0cnlcbiAgICAgICAgICAgIGNvbnN0IHVyaUdlbmVyYXRvciA9IGN0eC5leHRlcm5hbC51cmkgPz8gKChpZCkgPT4gaWQpO1xuICAgICAgICAgICAgaWYgKGV4dGVybmFsSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByZWY6IHVyaUdlbmVyYXRvcihleHRlcm5hbElkKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBhZGQgdG8gX19zaGFyZWRcbiAgICAgICAgICAgIGNvbnN0IGlkID0gZW50cnlbMV0uZGVmSWQgPz8gZW50cnlbMV0uc2NoZW1hLmlkID8/IGBzY2hlbWEke2N0eC5jb3VudGVyKyt9YDtcbiAgICAgICAgICAgIGVudHJ5WzFdLmRlZklkID0gaWQ7IC8vIHNldCBkZWZJZCBzbyBpdCB3aWxsIGJlIHJldXNlZCBpZiBuZWVkZWRcbiAgICAgICAgICAgIHJldHVybiB7IGRlZklkOiBpZCwgcmVmOiBgJHt1cmlHZW5lcmF0b3IoXCJfX3NoYXJlZFwiKX0jLyR7ZGVmc1NlZ21lbnR9LyR7aWR9YCB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeVsxXSA9PT0gcm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgcmVmOiBcIiNcIiB9O1xuICAgICAgICB9XG4gICAgICAgIC8vIHNlbGYtY29udGFpbmVkIHNjaGVtYVxuICAgICAgICBjb25zdCB1cmlQcmVmaXggPSBgI2A7XG4gICAgICAgIGNvbnN0IGRlZlVyaVByZWZpeCA9IGAke3VyaVByZWZpeH0vJHtkZWZzU2VnbWVudH0vYDtcbiAgICAgICAgY29uc3QgZGVmSWQgPSBlbnRyeVsxXS5zY2hlbWEuaWQgPz8gYF9fc2NoZW1hJHtjdHguY291bnRlcisrfWA7XG4gICAgICAgIHJldHVybiB7IGRlZklkLCByZWY6IGRlZlVyaVByZWZpeCArIGRlZklkIH07XG4gICAgfTtcbiAgICAvLyBzdG9yZWQgY2FjaGVkIHZlcnNpb24gaW4gYGRlZmAgcHJvcGVydHlcbiAgICAvLyByZW1vdmUgYWxsIHByb3BlcnRpZXMsIHNldCAkcmVmXG4gICAgY29uc3QgZXh0cmFjdFRvRGVmID0gKGVudHJ5KSA9PiB7XG4gICAgICAgIC8vIGlmIHRoZSBzY2hlbWEgaXMgYWxyZWFkeSBhIHJlZmVyZW5jZSwgZG8gbm90IGV4dHJhY3QgaXRcbiAgICAgICAgaWYgKGVudHJ5WzFdLnNjaGVtYS4kcmVmKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VlbiA9IGVudHJ5WzFdO1xuICAgICAgICBjb25zdCB7IHJlZiwgZGVmSWQgfSA9IG1ha2VVUkkoZW50cnkpO1xuICAgICAgICBzZWVuLmRlZiA9IHsgLi4uc2Vlbi5zY2hlbWEgfTtcbiAgICAgICAgLy8gZGVmSWQgd29uJ3QgYmUgc2V0IGlmIHRoZSBzY2hlbWEgaXMgYSByZWZlcmVuY2UgdG8gYW4gZXh0ZXJuYWwgc2NoZW1hXG4gICAgICAgIC8vIG9yIGlmIHRoZSBzY2hlbWEgaXMgdGhlIHJvb3Qgc2NoZW1hXG4gICAgICAgIGlmIChkZWZJZClcbiAgICAgICAgICAgIHNlZW4uZGVmSWQgPSBkZWZJZDtcbiAgICAgICAgLy8gd2lwZSBhd2F5IGFsbCBwcm9wZXJ0aWVzIGV4Y2VwdCAkcmVmXG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHNlZW4uc2NoZW1hO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBzY2hlbWEuJHJlZiA9IHJlZjtcbiAgICB9O1xuICAgIC8vIHRocm93IG9uIGN5Y2xlc1xuICAgIC8vIGJyZWFrIGN5Y2xlc1xuICAgIGlmIChjdHguY3ljbGVzID09PSBcInRocm93XCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBjdHguc2Vlbi5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlZW4gPSBlbnRyeVsxXTtcbiAgICAgICAgICAgIGlmIChzZWVuLmN5Y2xlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ3ljbGUgZGV0ZWN0ZWQ6IFwiICtcbiAgICAgICAgICAgICAgICAgICAgYCMvJHtzZWVuLmN5Y2xlPy5qb2luKFwiL1wiKX0vPHJvb3Q+YCArXG4gICAgICAgICAgICAgICAgICAgICdcXG5cXG5TZXQgdGhlIGBjeWNsZXNgIHBhcmFtZXRlciB0byBgXCJyZWZcImAgdG8gcmVzb2x2ZSBjeWNsaWNhbCBzY2hlbWFzIHdpdGggZGVmcy4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBleHRyYWN0IHNjaGVtYXMgaW50byAkZGVmc1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgY3R4LnNlZW4uZW50cmllcygpKSB7XG4gICAgICAgIGNvbnN0IHNlZW4gPSBlbnRyeVsxXTtcbiAgICAgICAgLy8gY29udmVydCByb290IHNjaGVtYSB0byAjICRyZWZcbiAgICAgICAgaWYgKHNjaGVtYSA9PT0gZW50cnlbMF0pIHtcbiAgICAgICAgICAgIGV4dHJhY3RUb0RlZihlbnRyeSk7IC8vIHRoaXMgaGFzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHRoZSByb290IHNjaGVtYVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXh0cmFjdCBzY2hlbWFzIHRoYXQgYXJlIGluIHRoZSBleHRlcm5hbCByZWdpc3RyeVxuICAgICAgICBpZiAoY3R4LmV4dGVybmFsKSB7XG4gICAgICAgICAgICBjb25zdCBleHQgPSBjdHguZXh0ZXJuYWwucmVnaXN0cnkuZ2V0KGVudHJ5WzBdKT8uaWQ7XG4gICAgICAgICAgICBpZiAoc2NoZW1hICE9PSBlbnRyeVswXSAmJiBleHQpIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0VG9EZWYoZW50cnkpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGV4dHJhY3Qgc2NoZW1hcyB3aXRoIGBpZGAgbWV0YVxuICAgICAgICBjb25zdCBpZCA9IGN0eC5tZXRhZGF0YVJlZ2lzdHJ5LmdldChlbnRyeVswXSk/LmlkO1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIGV4dHJhY3RUb0RlZihlbnRyeSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBicmVhayBjeWNsZXNcbiAgICAgICAgaWYgKHNlZW4uY3ljbGUpIHtcbiAgICAgICAgICAgIC8vIGFueVxuICAgICAgICAgICAgZXh0cmFjdFRvRGVmKGVudHJ5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGV4dHJhY3QgcmV1c2VkIHNjaGVtYXNcbiAgICAgICAgaWYgKHNlZW4uY291bnQgPiAxKSB7XG4gICAgICAgICAgICBpZiAoY3R4LnJldXNlZCA9PT0gXCJyZWZcIikge1xuICAgICAgICAgICAgICAgIGV4dHJhY3RUb0RlZihlbnRyeSk7XG4gICAgICAgICAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQ6XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZmluYWxpemUoY3R4LCBzY2hlbWEpIHtcbiAgICBjb25zdCByb290ID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgaWYgKCFyb290KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnByb2Nlc3NlZCBzY2hlbWEuIFRoaXMgaXMgYSBidWcgaW4gWm9kLlwiKTtcbiAgICAvLyBmbGF0dGVuIHJlZnMgLSBpbmhlcml0IHByb3BlcnRpZXMgZnJvbSBwYXJlbnQgc2NoZW1hc1xuICAgIGNvbnN0IGZsYXR0ZW5SZWYgPSAoem9kU2NoZW1hKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoem9kU2NoZW1hKTtcbiAgICAgICAgLy8gYWxyZWFkeSBwcm9jZXNzZWRcbiAgICAgICAgaWYgKHNlZW4ucmVmID09PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBzZWVuLmRlZiA/PyBzZWVuLnNjaGVtYTtcbiAgICAgICAgY29uc3QgX2NhY2hlZCA9IHsgLi4uc2NoZW1hIH07XG4gICAgICAgIGNvbnN0IHJlZiA9IHNlZW4ucmVmO1xuICAgICAgICBzZWVuLnJlZiA9IG51bGw7IC8vIHByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uXG4gICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICAgIGZsYXR0ZW5SZWYocmVmKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZlNlZW4gPSBjdHguc2Vlbi5nZXQocmVmKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZlNjaGVtYSA9IHJlZlNlZW4uc2NoZW1hO1xuICAgICAgICAgICAgLy8gbWVyZ2UgcmVmZXJlbmNlZCBzY2hlbWEgaW50byBjdXJyZW50XG4gICAgICAgICAgICBpZiAocmVmU2NoZW1hLiRyZWYgJiYgKGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMDdcIiB8fCBjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTA0XCIgfHwgY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiKSkge1xuICAgICAgICAgICAgICAgIC8vIG9sZGVyIGRyYWZ0cyBjYW4ndCBjb21iaW5lICRyZWYgd2l0aCBvdGhlciBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgc2NoZW1hLmFsbE9mID0gc2NoZW1hLmFsbE9mID8/IFtdO1xuICAgICAgICAgICAgICAgIHNjaGVtYS5hbGxPZi5wdXNoKHJlZlNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwgcmVmU2NoZW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJlc3RvcmUgY2hpbGQncyBvd24gcHJvcGVydGllcyAoY2hpbGQgd2lucylcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCBfY2FjaGVkKTtcbiAgICAgICAgICAgIGNvbnN0IGlzUGFyZW50UmVmID0gem9kU2NoZW1hLl96b2QucGFyZW50ID09PSByZWY7XG4gICAgICAgICAgICAvLyBGb3IgcGFyZW50IGNoYWluLCBjaGlsZCBpcyBhIHJlZmluZW1lbnQgLSByZW1vdmUgcGFyZW50LW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgICAgaWYgKGlzUGFyZW50UmVmKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IFwiJHJlZlwiIHx8IGtleSA9PT0gXCJhbGxPZlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBfY2FjaGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYVtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2hlbiByZWYgd2FzIGV4dHJhY3RlZCB0byAkZGVmcywgcmVtb3ZlIHByb3BlcnRpZXMgdGhhdCBtYXRjaCB0aGUgZGVmaW5pdGlvblxuICAgICAgICAgICAgaWYgKHJlZlNjaGVtYS4kcmVmICYmIHJlZlNlZW4uZGVmKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IFwiJHJlZlwiIHx8IGtleSA9PT0gXCJhbGxPZlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gcmVmU2Vlbi5kZWYgJiYgSlNPTi5zdHJpbmdpZnkoc2NoZW1hW2tleV0pID09PSBKU09OLnN0cmluZ2lmeShyZWZTZWVuLmRlZltrZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYVtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHBhcmVudCB3YXMgZXh0cmFjdGVkIChoYXMgJHJlZiksIHByb3BhZ2F0ZSAkcmVmIHRvIHRoaXMgc2NoZW1hXG4gICAgICAgIC8vIFRoaXMgaGFuZGxlcyBjYXNlcyBsaWtlOiByZWFkb25seSgpLm1ldGEoe2lkfSkuZGVzY3JpYmUoKVxuICAgICAgICAvLyB3aGVyZSBwcm9jZXNzb3Igc2V0cyByZWYgdG8gaW5uZXJUeXBlIGJ1dCBwYXJlbnQgc2hvdWxkIGJlIHJlZmVyZW5jZWRcbiAgICAgICAgY29uc3QgcGFyZW50ID0gem9kU2NoZW1hLl96b2QucGFyZW50O1xuICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudCAhPT0gcmVmKSB7XG4gICAgICAgICAgICAvLyBFbnN1cmUgcGFyZW50IGlzIHByb2Nlc3NlZCBmaXJzdCBzbyBpdHMgZGVmIGhhcyBpbmhlcml0ZWQgcHJvcGVydGllc1xuICAgICAgICAgICAgZmxhdHRlblJlZihwYXJlbnQpO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50U2VlbiA9IGN0eC5zZWVuLmdldChwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKHBhcmVudFNlZW4/LnNjaGVtYS4kcmVmKSB7XG4gICAgICAgICAgICAgICAgc2NoZW1hLiRyZWYgPSBwYXJlbnRTZWVuLnNjaGVtYS4kcmVmO1xuICAgICAgICAgICAgICAgIC8vIERlLWR1cGxpY2F0ZSB3aXRoIHBhcmVudCdzIGRlZmluaXRpb25cbiAgICAgICAgICAgICAgICBpZiAocGFyZW50U2Vlbi5kZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBcIiRyZWZcIiB8fCBrZXkgPT09IFwiYWxsT2ZcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gcGFyZW50U2Vlbi5kZWYgJiYgSlNPTi5zdHJpbmdpZnkoc2NoZW1hW2tleV0pID09PSBKU09OLnN0cmluZ2lmeShwYXJlbnRTZWVuLmRlZltrZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBleGVjdXRlIG92ZXJyaWRlc1xuICAgICAgICBjdHgub3ZlcnJpZGUoe1xuICAgICAgICAgICAgem9kU2NoZW1hOiB6b2RTY2hlbWEsXG4gICAgICAgICAgICBqc29uU2NoZW1hOiBzY2hlbWEsXG4gICAgICAgICAgICBwYXRoOiBzZWVuLnBhdGggPz8gW10sXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBbLi4uY3R4LnNlZW4uZW50cmllcygpXS5yZXZlcnNlKCkpIHtcbiAgICAgICAgZmxhdHRlblJlZihlbnRyeVswXSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIikge1xuICAgICAgICByZXN1bHQuJHNjaGVtYSA9IFwiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWFcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wN1wiKSB7XG4gICAgICAgIHJlc3VsdC4kc2NoZW1hID0gXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSNcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wNFwiKSB7XG4gICAgICAgIHJlc3VsdC4kc2NoZW1hID0gXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSNcIjtcbiAgICB9XG4gICAgZWxzZSBpZiAoY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiKSB7XG4gICAgICAgIC8vIE9wZW5BUEkgMy4wIHNjaGVtYSBvYmplY3RzIHNob3VsZCBub3QgaW5jbHVkZSBhICRzY2hlbWEgcHJvcGVydHlcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIEFyYml0cmFyeSBzdHJpbmcgdmFsdWVzIGFyZSBhbGxvd2VkIGJ1dCB3b24ndCBoYXZlIGEgJHNjaGVtYSBwcm9wZXJ0eSBzZXRcbiAgICB9XG4gICAgaWYgKGN0eC5leHRlcm5hbD8udXJpKSB7XG4gICAgICAgIGNvbnN0IGlkID0gY3R4LmV4dGVybmFsLnJlZ2lzdHJ5LmdldChzY2hlbWEpPy5pZDtcbiAgICAgICAgaWYgKCFpZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNjaGVtYSBpcyBtaXNzaW5nIGFuIGBpZGAgcHJvcGVydHlcIik7XG4gICAgICAgIHJlc3VsdC4kaWQgPSBjdHguZXh0ZXJuYWwudXJpKGlkKTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHJvb3QuZGVmID8/IHJvb3Quc2NoZW1hKTtcbiAgICAvLyBUaGUgYGlkYCBpbiBgLm1ldGEoKWAgaXMgYSBab2Qtc3BlY2lmaWMgcmVnaXN0cmF0aW9uIHRhZyB1c2VkIHRvIGV4dHJhY3RcbiAgICAvLyBzY2hlbWFzIGludG8gJGRlZnMg4oCUIGl0IGlzIG5vdCB1c2VyLWZhY2luZyBKU09OIFNjaGVtYSBtZXRhZGF0YS4gU3RyaXAgaXRcbiAgICAvLyBmcm9tIHRoZSBvdXRwdXQgYm9keSB3aGVyZSBpdCB3b3VsZCBvdGhlcndpc2UgbGVhay4gVGhlIGlkIGlzIHByZXNlcnZlZFxuICAgIC8vIGltcGxpY2l0bHkgdmlhIHRoZSAkZGVmcyBrZXkgKGFuZCB2aWEgJHJlZiBwYXRocykuXG4gICAgY29uc3Qgcm9vdE1ldGFJZCA9IGN0eC5tZXRhZGF0YVJlZ2lzdHJ5LmdldChzY2hlbWEpPy5pZDtcbiAgICBpZiAocm9vdE1ldGFJZCAhPT0gdW5kZWZpbmVkICYmIHJlc3VsdC5pZCA9PT0gcm9vdE1ldGFJZClcbiAgICAgICAgZGVsZXRlIHJlc3VsdC5pZDtcbiAgICAvLyBidWlsZCBkZWZzIG9iamVjdFxuICAgIGNvbnN0IGRlZnMgPSBjdHguZXh0ZXJuYWw/LmRlZnMgPz8ge307XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBjdHguc2Vlbi5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3Qgc2VlbiA9IGVudHJ5WzFdO1xuICAgICAgICBpZiAoc2Vlbi5kZWYgJiYgc2Vlbi5kZWZJZCkge1xuICAgICAgICAgICAgaWYgKHNlZW4uZGVmLmlkID09PSBzZWVuLmRlZklkKVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWVuLmRlZi5pZDtcbiAgICAgICAgICAgIGRlZnNbc2Vlbi5kZWZJZF0gPSBzZWVuLmRlZjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzZXQgZGVmaW5pdGlvbnMgaW4gcmVzdWx0XG4gICAgaWYgKGN0eC5leHRlcm5hbCkge1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRlZnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC4kZGVmcyA9IGRlZnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZGVmaW5pdGlvbnMgPSBkZWZzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHRoaXMgXCJmaW5hbGl6ZXNcIiB0aGlzIHNjaGVtYSBhbmQgZW5zdXJlcyBhbGwgY3ljbGVzIGFyZSByZW1vdmVkXG4gICAgICAgIC8vIGVhY2ggY2FsbCB0byBmaW5hbGl6ZSgpIGlzIGZ1bmN0aW9uYWxseSBpbmRlcGVuZGVudFxuICAgICAgICAvLyB0aG91Z2ggdGhlIHNlZW4gbWFwIGlzIHNoYXJlZFxuICAgICAgICBjb25zdCBmaW5hbGl6ZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmluYWxpemVkLCBcIn5zdGFuZGFyZFwiLCB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYVtcIn5zdGFuZGFyZFwiXSxcbiAgICAgICAgICAgICAgICBqc29uU2NoZW1hOiB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiBjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2Qoc2NoZW1hLCBcImlucHV0XCIsIGN0eC5wcm9jZXNzb3JzKSxcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0OiBjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2Qoc2NoZW1hLCBcIm91dHB1dFwiLCBjdHgucHJvY2Vzc29ycyksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmaW5hbGl6ZWQ7XG4gICAgfVxuICAgIGNhdGNoIChfZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycm9yIGNvbnZlcnRpbmcgc2NoZW1hIHRvIEpTT04uXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGlzVHJhbnNmb3JtaW5nKF9zY2hlbWEsIF9jdHgpIHtcbiAgICBjb25zdCBjdHggPSBfY3R4ID8/IHsgc2VlbjogbmV3IFNldCgpIH07XG4gICAgaWYgKGN0eC5zZWVuLmhhcyhfc2NoZW1hKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGN0eC5zZWVuLmFkZChfc2NoZW1hKTtcbiAgICBjb25zdCBkZWYgPSBfc2NoZW1hLl96b2QuZGVmO1xuICAgIGlmIChkZWYudHlwZSA9PT0gXCJ0cmFuc2Zvcm1cIilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKGRlZi50eXBlID09PSBcImFycmF5XCIpXG4gICAgICAgIHJldHVybiBpc1RyYW5zZm9ybWluZyhkZWYuZWxlbWVudCwgY3R4KTtcbiAgICBpZiAoZGVmLnR5cGUgPT09IFwic2V0XCIpXG4gICAgICAgIHJldHVybiBpc1RyYW5zZm9ybWluZyhkZWYudmFsdWVUeXBlLCBjdHgpO1xuICAgIGlmIChkZWYudHlwZSA9PT0gXCJsYXp5XCIpXG4gICAgICAgIHJldHVybiBpc1RyYW5zZm9ybWluZyhkZWYuZ2V0dGVyKCksIGN0eCk7XG4gICAgaWYgKGRlZi50eXBlID09PSBcInByb21pc2VcIiB8fFxuICAgICAgICBkZWYudHlwZSA9PT0gXCJvcHRpb25hbFwiIHx8XG4gICAgICAgIGRlZi50eXBlID09PSBcIm5vbm9wdGlvbmFsXCIgfHxcbiAgICAgICAgZGVmLnR5cGUgPT09IFwibnVsbGFibGVcIiB8fFxuICAgICAgICBkZWYudHlwZSA9PT0gXCJyZWFkb25seVwiIHx8XG4gICAgICAgIGRlZi50eXBlID09PSBcImRlZmF1bHRcIiB8fFxuICAgICAgICBkZWYudHlwZSA9PT0gXCJwcmVmYXVsdFwiKSB7XG4gICAgICAgIHJldHVybiBpc1RyYW5zZm9ybWluZyhkZWYuaW5uZXJUeXBlLCBjdHgpO1xuICAgIH1cbiAgICBpZiAoZGVmLnR5cGUgPT09IFwiaW50ZXJzZWN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGlzVHJhbnNmb3JtaW5nKGRlZi5sZWZ0LCBjdHgpIHx8IGlzVHJhbnNmb3JtaW5nKGRlZi5yaWdodCwgY3R4KTtcbiAgICB9XG4gICAgaWYgKGRlZi50eXBlID09PSBcInJlY29yZFwiIHx8IGRlZi50eXBlID09PSBcIm1hcFwiKSB7XG4gICAgICAgIHJldHVybiBpc1RyYW5zZm9ybWluZyhkZWYua2V5VHlwZSwgY3R4KSB8fCBpc1RyYW5zZm9ybWluZyhkZWYudmFsdWVUeXBlLCBjdHgpO1xuICAgIH1cbiAgICBpZiAoZGVmLnR5cGUgPT09IFwicGlwZVwiKSB7XG4gICAgICAgIGlmIChfc2NoZW1hLl96b2QudHJhaXRzLmhhcyhcIiRab2RDb2RlY1wiKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gaXNUcmFuc2Zvcm1pbmcoZGVmLmluLCBjdHgpIHx8IGlzVHJhbnNmb3JtaW5nKGRlZi5vdXQsIGN0eCk7XG4gICAgfVxuICAgIGlmIChkZWYudHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkZWYuc2hhcGUpIHtcbiAgICAgICAgICAgIGlmIChpc1RyYW5zZm9ybWluZyhkZWYuc2hhcGVba2V5XSwgY3R4KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChkZWYudHlwZSA9PT0gXCJ1bmlvblwiKSB7XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIGRlZi5vcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoaXNUcmFuc2Zvcm1pbmcob3B0aW9uLCBjdHgpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGRlZi50eXBlID09PSBcInR1cGxlXCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRlZi5pdGVtcykge1xuICAgICAgICAgICAgaWYgKGlzVHJhbnNmb3JtaW5nKGl0ZW0sIGN0eCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZi5yZXN0ICYmIGlzVHJhbnNmb3JtaW5nKGRlZi5yZXN0LCBjdHgpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgdG9KU09OU2NoZW1hIG1ldGhvZCBmb3IgYSBzY2hlbWEgaW5zdGFuY2UuXG4gKiBUaGlzIGVuY2Fwc3VsYXRlcyB0aGUgbG9naWMgb2YgaW5pdGlhbGl6aW5nIGNvbnRleHQsIHByb2Nlc3NpbmcsIGV4dHJhY3RpbmcgZGVmcywgYW5kIGZpbmFsaXppbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVUb0pTT05TY2hlbWFNZXRob2QgPSAoc2NoZW1hLCBwcm9jZXNzb3JzID0ge30pID0+IChwYXJhbXMpID0+IHtcbiAgICBjb25zdCBjdHggPSBpbml0aWFsaXplQ29udGV4dCh7IC4uLnBhcmFtcywgcHJvY2Vzc29ycyB9KTtcbiAgICBwcm9jZXNzKHNjaGVtYSwgY3R4KTtcbiAgICBleHRyYWN0RGVmcyhjdHgsIHNjaGVtYSk7XG4gICAgcmV0dXJuIGZpbmFsaXplKGN0eCwgc2NoZW1hKTtcbn07XG5leHBvcnQgY29uc3QgY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kID0gKHNjaGVtYSwgaW8sIHByb2Nlc3NvcnMgPSB7fSkgPT4gKHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IHsgbGlicmFyeU9wdGlvbnMsIHRhcmdldCB9ID0gcGFyYW1zID8/IHt9O1xuICAgIGNvbnN0IGN0eCA9IGluaXRpYWxpemVDb250ZXh0KHsgLi4uKGxpYnJhcnlPcHRpb25zID8/IHt9KSwgdGFyZ2V0LCBpbywgcHJvY2Vzc29ycyB9KTtcbiAgICBwcm9jZXNzKHNjaGVtYSwgY3R4KTtcbiAgICBleHRyYWN0RGVmcyhjdHgsIHNjaGVtYSk7XG4gICAgcmV0dXJuIGZpbmFsaXplKGN0eCwgc2NoZW1hKTtcbn07XG4iLCJpbXBvcnQgeyBleHRyYWN0RGVmcywgZmluYWxpemUsIGluaXRpYWxpemVDb250ZXh0LCBwcm9jZXNzLCB9IGZyb20gXCIuL3RvLWpzb24tc2NoZW1hLmpzXCI7XG5pbXBvcnQgeyBnZXRFbnVtVmFsdWVzIH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuY29uc3QgZm9ybWF0TWFwID0ge1xuICAgIGd1aWQ6IFwidXVpZFwiLFxuICAgIHVybDogXCJ1cmlcIixcbiAgICBkYXRldGltZTogXCJkYXRlLXRpbWVcIixcbiAgICBqc29uX3N0cmluZzogXCJqc29uLXN0cmluZ1wiLFxuICAgIHJlZ2V4OiBcIlwiLCAvLyBkbyBub3Qgc2V0XG59O1xuLy8gPT09PT09PT09PT09PT09PT09PT0gU0lNUExFIFRZUEUgUFJPQ0VTU09SUyA9PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IGNvbnN0IHN0cmluZ1Byb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBqc29uID0gX2pzb247XG4gICAganNvbi50eXBlID0gXCJzdHJpbmdcIjtcbiAgICBjb25zdCB7IG1pbmltdW0sIG1heGltdW0sIGZvcm1hdCwgcGF0dGVybnMsIGNvbnRlbnRFbmNvZGluZyB9ID0gc2NoZW1hLl96b2RcbiAgICAgICAgLmJhZztcbiAgICBpZiAodHlwZW9mIG1pbmltdW0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGpzb24ubWluTGVuZ3RoID0gbWluaW11bTtcbiAgICBpZiAodHlwZW9mIG1heGltdW0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGpzb24ubWF4TGVuZ3RoID0gbWF4aW11bTtcbiAgICAvLyBjdXN0b20gcGF0dGVybiBvdmVycmlkZXMgZm9ybWF0XG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgICBqc29uLmZvcm1hdCA9IGZvcm1hdE1hcFtmb3JtYXRdID8/IGZvcm1hdDtcbiAgICAgICAgaWYgKGpzb24uZm9ybWF0ID09PSBcIlwiKVxuICAgICAgICAgICAgZGVsZXRlIGpzb24uZm9ybWF0OyAvLyBlbXB0eSBmb3JtYXQgaXMgbm90IHZhbGlkXG4gICAgICAgIC8vIEpTT04gU2NoZW1hIGZvcm1hdDogXCJ0aW1lXCIgcmVxdWlyZXMgYSBmdWxsIHRpbWUgd2l0aCBvZmZzZXQgb3IgWlxuICAgICAgICAvLyB6Lmlzby50aW1lKCkgZG9lcyBub3QgaW5jbHVkZSB0aW1lem9uZSBpbmZvcm1hdGlvbiwgc28gZm9ybWF0OiBcInRpbWVcIiBzaG91bGQgbmV2ZXIgYmUgdXNlZFxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcInRpbWVcIikge1xuICAgICAgICAgICAgZGVsZXRlIGpzb24uZm9ybWF0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb250ZW50RW5jb2RpbmcpXG4gICAgICAgIGpzb24uY29udGVudEVuY29kaW5nID0gY29udGVudEVuY29kaW5nO1xuICAgIGlmIChwYXR0ZXJucyAmJiBwYXR0ZXJucy5zaXplID4gMCkge1xuICAgICAgICBjb25zdCByZWdleGVzID0gWy4uLnBhdHRlcm5zXTtcbiAgICAgICAgaWYgKHJlZ2V4ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAganNvbi5wYXR0ZXJuID0gcmVnZXhlc1swXS5zb3VyY2U7XG4gICAgICAgIGVsc2UgaWYgKHJlZ2V4ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAganNvbi5hbGxPZiA9IFtcbiAgICAgICAgICAgICAgICAuLi5yZWdleGVzLm1hcCgocmVnZXgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLihjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTA3XCIgfHwgY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wNFwiIHx8IGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyB7IHR5cGU6IFwic3RyaW5nXCIgfVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IHJlZ2V4LnNvdXJjZSxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBudW1iZXJQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgY29uc3QganNvbiA9IF9qc29uO1xuICAgIGNvbnN0IHsgbWluaW11bSwgbWF4aW11bSwgZm9ybWF0LCBtdWx0aXBsZU9mLCBleGNsdXNpdmVNYXhpbXVtLCBleGNsdXNpdmVNaW5pbXVtIH0gPSBzY2hlbWEuX3pvZC5iYWc7XG4gICAgaWYgKHR5cGVvZiBmb3JtYXQgPT09IFwic3RyaW5nXCIgJiYgZm9ybWF0LmluY2x1ZGVzKFwiaW50XCIpKVxuICAgICAgICBqc29uLnR5cGUgPSBcImludGVnZXJcIjtcbiAgICBlbHNlXG4gICAgICAgIGpzb24udHlwZSA9IFwibnVtYmVyXCI7XG4gICAgLy8gd2hlbiBib3RoIG1pbmltdW0gYW5kIGV4Y2x1c2l2ZU1pbmltdW0gZXhpc3QsIHBpY2sgdGhlIG1vcmUgcmVzdHJpY3RpdmUgb25lXG4gICAgY29uc3QgZXhNaW4gPSB0eXBlb2YgZXhjbHVzaXZlTWluaW11bSA9PT0gXCJudW1iZXJcIiAmJiBleGNsdXNpdmVNaW5pbXVtID49IChtaW5pbXVtID8/IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7XG4gICAgY29uc3QgZXhNYXggPSB0eXBlb2YgZXhjbHVzaXZlTWF4aW11bSA9PT0gXCJudW1iZXJcIiAmJiBleGNsdXNpdmVNYXhpbXVtIDw9IChtYXhpbXVtID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgY29uc3QgbGVnYWN5ID0gY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wNFwiIHx8IGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIjtcbiAgICBpZiAoZXhNaW4pIHtcbiAgICAgICAgaWYgKGxlZ2FjeSkge1xuICAgICAgICAgICAganNvbi5taW5pbXVtID0gZXhjbHVzaXZlTWluaW11bTtcbiAgICAgICAgICAgIGpzb24uZXhjbHVzaXZlTWluaW11bSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBqc29uLmV4Y2x1c2l2ZU1pbmltdW0gPSBleGNsdXNpdmVNaW5pbXVtO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBtaW5pbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGpzb24ubWluaW11bSA9IG1pbmltdW07XG4gICAgfVxuICAgIGlmIChleE1heCkge1xuICAgICAgICBpZiAobGVnYWN5KSB7XG4gICAgICAgICAgICBqc29uLm1heGltdW0gPSBleGNsdXNpdmVNYXhpbXVtO1xuICAgICAgICAgICAganNvbi5leGNsdXNpdmVNYXhpbXVtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGpzb24uZXhjbHVzaXZlTWF4aW11bSA9IGV4Y2x1c2l2ZU1heGltdW07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG1heGltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAganNvbi5tYXhpbXVtID0gbWF4aW11bTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBtdWx0aXBsZU9mID09PSBcIm51bWJlclwiKVxuICAgICAgICBqc29uLm11bHRpcGxlT2YgPSBtdWx0aXBsZU9mO1xufTtcbmV4cG9ydCBjb25zdCBib29sZWFuUHJvY2Vzc29yID0gKF9zY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBqc29uLnR5cGUgPSBcImJvb2xlYW5cIjtcbn07XG5leHBvcnQgY29uc3QgYmlnaW50UHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJpZ0ludCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBzeW1ib2xQcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3ltYm9scyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBudWxsUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwganNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudGFyZ2V0ID09PSBcIm9wZW5hcGktMy4wXCIpIHtcbiAgICAgICAganNvbi50eXBlID0gXCJzdHJpbmdcIjtcbiAgICAgICAganNvbi5udWxsYWJsZSA9IHRydWU7XG4gICAgICAgIGpzb24uZW51bSA9IFtudWxsXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGpzb24udHlwZSA9IFwibnVsbFwiO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgdW5kZWZpbmVkUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZGVmaW5lZCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCB2b2lkUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlZvaWQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgbmV2ZXJQcm9jZXNzb3IgPSAoX3NjaGVtYSwgX2N0eCwganNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGpzb24ubm90ID0ge307XG59O1xuZXhwb3J0IGNvbnN0IGFueVByb2Nlc3NvciA9IChfc2NoZW1hLCBfY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIC8vIGVtcHR5IHNjaGVtYSBhY2NlcHRzIGFueXRoaW5nXG59O1xuZXhwb3J0IGNvbnN0IHVua25vd25Qcm9jZXNzb3IgPSAoX3NjaGVtYSwgX2N0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICAvLyBlbXB0eSBzY2hlbWEgYWNjZXB0cyBhbnl0aGluZ1xufTtcbmV4cG9ydCBjb25zdCBkYXRlUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRhdGUgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgZW51bVByb2Nlc3NvciA9IChzY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgdmFsdWVzID0gZ2V0RW51bVZhbHVlcyhkZWYuZW50cmllcyk7XG4gICAgLy8gTnVtYmVyIGVudW1zIGNhbiBoYXZlIGJvdGggc3RyaW5nIGFuZCBudW1iZXIgdmFsdWVzXG4gICAgaWYgKHZhbHVlcy5ldmVyeSgodikgPT4gdHlwZW9mIHYgPT09IFwibnVtYmVyXCIpKVxuICAgICAgICBqc29uLnR5cGUgPSBcIm51bWJlclwiO1xuICAgIGlmICh2YWx1ZXMuZXZlcnkoKHYpID0+IHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSlcbiAgICAgICAganNvbi50eXBlID0gXCJzdHJpbmdcIjtcbiAgICBqc29uLmVudW0gPSB2YWx1ZXM7XG59O1xuZXhwb3J0IGNvbnN0IGxpdGVyYWxQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgdmFscyA9IFtdO1xuICAgIGZvciAoY29uc3QgdmFsIG9mIGRlZi52YWx1ZXMpIHtcbiAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTGl0ZXJhbCBgdW5kZWZpbmVkYCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkbyBub3QgYWRkIHRvIHZhbHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsID09PSBcImJpZ2ludFwiKSB7XG4gICAgICAgICAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmlnSW50IGxpdGVyYWxzIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHMucHVzaChOdW1iZXIodmFsKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YWxzLnB1c2godmFsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodmFscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gZG8gbm90aGluZyAoYW4gdW5kZWZpbmVkIGxpdGVyYWwgd2FzIHN0cmlwcGVkKVxuICAgIH1cbiAgICBlbHNlIGlmICh2YWxzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCB2YWwgPSB2YWxzWzBdO1xuICAgICAgICBqc29uLnR5cGUgPSB2YWwgPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiB2YWw7XG4gICAgICAgIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTA0XCIgfHwgY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiKSB7XG4gICAgICAgICAgICBqc29uLmVudW0gPSBbdmFsXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGpzb24uY29uc3QgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICh2YWxzLmV2ZXJ5KCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikpXG4gICAgICAgICAgICBqc29uLnR5cGUgPSBcIm51bWJlclwiO1xuICAgICAgICBpZiAodmFscy5ldmVyeSgodikgPT4gdHlwZW9mIHYgPT09IFwic3RyaW5nXCIpKVxuICAgICAgICAgICAganNvbi50eXBlID0gXCJzdHJpbmdcIjtcbiAgICAgICAgaWYgKHZhbHMuZXZlcnkoKHYpID0+IHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIikpXG4gICAgICAgICAgICBqc29uLnR5cGUgPSBcImJvb2xlYW5cIjtcbiAgICAgICAgaWYgKHZhbHMuZXZlcnkoKHYpID0+IHYgPT09IG51bGwpKVxuICAgICAgICAgICAganNvbi50eXBlID0gXCJudWxsXCI7XG4gICAgICAgIGpzb24uZW51bSA9IHZhbHM7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBuYW5Qcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTmFOIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHRlbXBsYXRlTGl0ZXJhbFByb2Nlc3NvciA9IChzY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBfanNvbiA9IGpzb247XG4gICAgY29uc3QgcGF0dGVybiA9IHNjaGVtYS5fem9kLnBhdHRlcm47XG4gICAgaWYgKCFwYXR0ZXJuKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXR0ZXJuIG5vdCBmb3VuZCBpbiB0ZW1wbGF0ZSBsaXRlcmFsXCIpO1xuICAgIF9qc29uLnR5cGUgPSBcInN0cmluZ1wiO1xuICAgIF9qc29uLnBhdHRlcm4gPSBwYXR0ZXJuLnNvdXJjZTtcbn07XG5leHBvcnQgY29uc3QgZmlsZVByb2Nlc3NvciA9IChzY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBfanNvbiA9IGpzb247XG4gICAgY29uc3QgZmlsZSA9IHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImJpbmFyeVwiLFxuICAgICAgICBjb250ZW50RW5jb2Rpbmc6IFwiYmluYXJ5XCIsXG4gICAgfTtcbiAgICBjb25zdCB7IG1pbmltdW0sIG1heGltdW0sIG1pbWUgfSA9IHNjaGVtYS5fem9kLmJhZztcbiAgICBpZiAobWluaW11bSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBmaWxlLm1pbkxlbmd0aCA9IG1pbmltdW07XG4gICAgaWYgKG1heGltdW0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgZmlsZS5tYXhMZW5ndGggPSBtYXhpbXVtO1xuICAgIGlmIChtaW1lKSB7XG4gICAgICAgIGlmIChtaW1lLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZmlsZS5jb250ZW50TWVkaWFUeXBlID0gbWltZVswXTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2pzb24sIGZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihfanNvbiwgZmlsZSk7IC8vIHNoYXJlZCBwcm9wcyBhdCByb290XG4gICAgICAgICAgICBfanNvbi5hbnlPZiA9IG1pbWUubWFwKChtKSA9PiAoeyBjb250ZW50TWVkaWFUeXBlOiBtIH0pKTsgLy8gb25seSBjb250ZW50TWVkaWFUeXBlIGRpZmZlcnNcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihfanNvbiwgZmlsZSk7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBzdWNjZXNzUHJvY2Vzc29yID0gKF9zY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBqc29uLnR5cGUgPSBcImJvb2xlYW5cIjtcbn07XG5leHBvcnQgY29uc3QgY3VzdG9tUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkN1c3RvbSB0eXBlcyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBmdW5jdGlvblByb2Nlc3NvciA9IChfc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgaWYgKGN0eC51bnJlcHJlc2VudGFibGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGdW5jdGlvbiB0eXBlcyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Qcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJhbnNmb3JtcyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBtYXBQcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWFwIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHNldFByb2Nlc3NvciA9IChfc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgaWYgKGN0eC51bnJlcHJlc2VudGFibGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgIH1cbn07XG4vLyA9PT09PT09PT09PT09PT09PT09PSBDT01QT1NJVEUgVFlQRSBQUk9DRVNTT1JTID09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgY29uc3QgYXJyYXlQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBqc29uID0gX2pzb247XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIGNvbnN0IHsgbWluaW11bSwgbWF4aW11bSB9ID0gc2NoZW1hLl96b2QuYmFnO1xuICAgIGlmICh0eXBlb2YgbWluaW11bSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAganNvbi5taW5JdGVtcyA9IG1pbmltdW07XG4gICAgaWYgKHR5cGVvZiBtYXhpbXVtID09PSBcIm51bWJlclwiKVxuICAgICAgICBqc29uLm1heEl0ZW1zID0gbWF4aW11bTtcbiAgICBqc29uLnR5cGUgPSBcImFycmF5XCI7XG4gICAganNvbi5pdGVtcyA9IHByb2Nlc3MoZGVmLmVsZW1lbnQsIGN0eCwge1xuICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIHBhdGg6IFsuLi5wYXJhbXMucGF0aCwgXCJpdGVtc1wiXSxcbiAgICB9KTtcbn07XG5leHBvcnQgY29uc3Qgb2JqZWN0UHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QganNvbiA9IF9qc29uO1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBqc29uLnR5cGUgPSBcIm9iamVjdFwiO1xuICAgIGpzb24ucHJvcGVydGllcyA9IHt9O1xuICAgIGNvbnN0IHNoYXBlID0gZGVmLnNoYXBlO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNoYXBlKSB7XG4gICAgICAgIGpzb24ucHJvcGVydGllc1trZXldID0gcHJvY2VzcyhzaGFwZVtrZXldLCBjdHgsIHtcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgIHBhdGg6IFsuLi5wYXJhbXMucGF0aCwgXCJwcm9wZXJ0aWVzXCIsIGtleV0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyByZXF1aXJlZCBrZXlzXG4gICAgY29uc3QgYWxsS2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMoc2hhcGUpKTtcbiAgICBjb25zdCByZXF1aXJlZEtleXMgPSBuZXcgU2V0KFsuLi5hbGxLZXlzXS5maWx0ZXIoKGtleSkgPT4ge1xuICAgICAgICBjb25zdCB2ID0gZGVmLnNoYXBlW2tleV0uX3pvZDtcbiAgICAgICAgaWYgKGN0eC5pbyA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdi5vcHRpbiA9PT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHYub3B0b3V0ID09PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgaWYgKHJlcXVpcmVkS2V5cy5zaXplID4gMCkge1xuICAgICAgICBqc29uLnJlcXVpcmVkID0gQXJyYXkuZnJvbShyZXF1aXJlZEtleXMpO1xuICAgIH1cbiAgICAvLyBjYXRjaGFsbFxuICAgIGlmIChkZWYuY2F0Y2hhbGw/Ll96b2QuZGVmLnR5cGUgPT09IFwibmV2ZXJcIikge1xuICAgICAgICAvLyBzdHJpY3RcbiAgICAgICAganNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmICghZGVmLmNhdGNoYWxsKSB7XG4gICAgICAgIC8vIHJlZ3VsYXJcbiAgICAgICAgaWYgKGN0eC5pbyA9PT0gXCJvdXRwdXRcIilcbiAgICAgICAgICAgIGpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGVmLmNhdGNoYWxsKSB7XG4gICAgICAgIGpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMgPSBwcm9jZXNzKGRlZi5jYXRjaGFsbCwgY3R4LCB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIl0sXG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgdW5pb25Qcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICAvLyBFeGNsdXNpdmUgdW5pb25zIChpbmNsdXNpdmUgPT09IGZhbHNlKSB1c2Ugb25lT2YgKGV4YWN0bHkgb25lIG1hdGNoKSBpbnN0ZWFkIG9mIGFueU9mIChvbmUgb3IgbW9yZSBtYXRjaGVzKVxuICAgIC8vIFRoaXMgaW5jbHVkZXMgYm90aCB6LnhvcigpIGFuZCBkaXNjcmltaW5hdGVkIHVuaW9uc1xuICAgIGNvbnN0IGlzRXhjbHVzaXZlID0gZGVmLmluY2x1c2l2ZSA9PT0gZmFsc2U7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGRlZi5vcHRpb25zLm1hcCgoeCwgaSkgPT4gcHJvY2Vzcyh4LCBjdHgsIHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIGlzRXhjbHVzaXZlID8gXCJvbmVPZlwiIDogXCJhbnlPZlwiLCBpXSxcbiAgICB9KSk7XG4gICAgaWYgKGlzRXhjbHVzaXZlKSB7XG4gICAgICAgIGpzb24ub25lT2YgPSBvcHRpb25zO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAganNvbi5hbnlPZiA9IG9wdGlvbnM7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBpbnRlcnNlY3Rpb25Qcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBjb25zdCBhID0gcHJvY2VzcyhkZWYubGVmdCwgY3R4LCB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgcGF0aDogWy4uLnBhcmFtcy5wYXRoLCBcImFsbE9mXCIsIDBdLFxuICAgIH0pO1xuICAgIGNvbnN0IGIgPSBwcm9jZXNzKGRlZi5yaWdodCwgY3R4LCB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgcGF0aDogWy4uLnBhcmFtcy5wYXRoLCBcImFsbE9mXCIsIDFdLFxuICAgIH0pO1xuICAgIGNvbnN0IGlzU2ltcGxlSW50ZXJzZWN0aW9uID0gKHZhbCkgPT4gXCJhbGxPZlwiIGluIHZhbCAmJiBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMTtcbiAgICBjb25zdCBhbGxPZiA9IFtcbiAgICAgICAgLi4uKGlzU2ltcGxlSW50ZXJzZWN0aW9uKGEpID8gYS5hbGxPZiA6IFthXSksXG4gICAgICAgIC4uLihpc1NpbXBsZUludGVyc2VjdGlvbihiKSA/IGIuYWxsT2YgOiBbYl0pLFxuICAgIF07XG4gICAganNvbi5hbGxPZiA9IGFsbE9mO1xufTtcbmV4cG9ydCBjb25zdCB0dXBsZVByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBfanNvbjtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAganNvbi50eXBlID0gXCJhcnJheVwiO1xuICAgIGNvbnN0IHByZWZpeFBhdGggPSBjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIiA/IFwicHJlZml4SXRlbXNcIiA6IFwiaXRlbXNcIjtcbiAgICBjb25zdCByZXN0UGF0aCA9IGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiID8gXCJpdGVtc1wiIDogY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiID8gXCJpdGVtc1wiIDogXCJhZGRpdGlvbmFsSXRlbXNcIjtcbiAgICBjb25zdCBwcmVmaXhJdGVtcyA9IGRlZi5pdGVtcy5tYXAoKHgsIGkpID0+IHByb2Nlc3MoeCwgY3R4LCB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgcGF0aDogWy4uLnBhcmFtcy5wYXRoLCBwcmVmaXhQYXRoLCBpXSxcbiAgICB9KSk7XG4gICAgY29uc3QgcmVzdCA9IGRlZi5yZXN0XG4gICAgICAgID8gcHJvY2VzcyhkZWYucmVzdCwgY3R4LCB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIHJlc3RQYXRoLCAuLi4oY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiID8gW2RlZi5pdGVtcy5sZW5ndGhdIDogW10pXSxcbiAgICAgICAgfSlcbiAgICAgICAgOiBudWxsO1xuICAgIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIikge1xuICAgICAgICBqc29uLnByZWZpeEl0ZW1zID0gcHJlZml4SXRlbXM7XG4gICAgICAgIGlmIChyZXN0KSB7XG4gICAgICAgICAgICBqc29uLml0ZW1zID0gcmVzdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChjdHgudGFyZ2V0ID09PSBcIm9wZW5hcGktMy4wXCIpIHtcbiAgICAgICAganNvbi5pdGVtcyA9IHtcbiAgICAgICAgICAgIGFueU9mOiBwcmVmaXhJdGVtcyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgIGpzb24uaXRlbXMuYW55T2YucHVzaChyZXN0KTtcbiAgICAgICAgfVxuICAgICAgICBqc29uLm1pbkl0ZW1zID0gcHJlZml4SXRlbXMubGVuZ3RoO1xuICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgIGpzb24ubWF4SXRlbXMgPSBwcmVmaXhJdGVtcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGpzb24uaXRlbXMgPSBwcmVmaXhJdGVtcztcbiAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgIGpzb24uYWRkaXRpb25hbEl0ZW1zID0gcmVzdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBsZW5ndGhcbiAgICBjb25zdCB7IG1pbmltdW0sIG1heGltdW0gfSA9IHNjaGVtYS5fem9kLmJhZztcbiAgICBpZiAodHlwZW9mIG1pbmltdW0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGpzb24ubWluSXRlbXMgPSBtaW5pbXVtO1xuICAgIGlmICh0eXBlb2YgbWF4aW11bSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAganNvbi5tYXhJdGVtcyA9IG1heGltdW07XG59O1xuZXhwb3J0IGNvbnN0IHJlY29yZFByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBfanNvbjtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAganNvbi50eXBlID0gXCJvYmplY3RcIjtcbiAgICAvLyBGb3IgbG9vc2VSZWNvcmQgd2l0aCByZWdleCBwYXR0ZXJucywgdXNlIHBhdHRlcm5Qcm9wZXJ0aWVzXG4gICAgLy8gVGhpcyBjb3JyZWN0bHkgcmVwcmVzZW50cyBcIm9ubHkgdmFsaWRhdGUga2V5cyBtYXRjaGluZyB0aGUgcGF0dGVyblwiIHNlbWFudGljc1xuICAgIC8vIGFuZCBjb21wb3NlcyB3ZWxsIHdpdGggYWxsT2YgKGludGVyc2VjdGlvbnMpXG4gICAgY29uc3Qga2V5VHlwZSA9IGRlZi5rZXlUeXBlO1xuICAgIGNvbnN0IGtleUJhZyA9IGtleVR5cGUuX3pvZC5iYWc7XG4gICAgY29uc3QgcGF0dGVybnMgPSBrZXlCYWc/LnBhdHRlcm5zO1xuICAgIGlmIChkZWYubW9kZSA9PT0gXCJsb29zZVwiICYmIHBhdHRlcm5zICYmIHBhdHRlcm5zLnNpemUgPiAwKSB7XG4gICAgICAgIC8vIFVzZSBwYXR0ZXJuUHJvcGVydGllcyBmb3IgbG9vc2VSZWNvcmQgd2l0aCByZWdleCBwYXR0ZXJuc1xuICAgICAgICBjb25zdCB2YWx1ZVNjaGVtYSA9IHByb2Nlc3MoZGVmLnZhbHVlVHlwZSwgY3R4LCB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIFwicGF0dGVyblByb3BlcnRpZXNcIiwgXCIqXCJdLFxuICAgICAgICB9KTtcbiAgICAgICAganNvbi5wYXR0ZXJuUHJvcGVydGllcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgIGpzb24ucGF0dGVyblByb3BlcnRpZXNbcGF0dGVybi5zb3VyY2VdID0gdmFsdWVTY2hlbWE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIERlZmF1bHQgYmVoYXZpb3I6IHVzZSBwcm9wZXJ0eU5hbWVzICsgYWRkaXRpb25hbFByb3BlcnRpZXNcbiAgICAgICAgaWYgKGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMDdcIiB8fCBjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIikge1xuICAgICAgICAgICAganNvbi5wcm9wZXJ0eU5hbWVzID0gcHJvY2VzcyhkZWYua2V5VHlwZSwgY3R4LCB7XG4gICAgICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgICAgICAgIHBhdGg6IFsuLi5wYXJhbXMucGF0aCwgXCJwcm9wZXJ0eU5hbWVzXCJdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAganNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyA9IHByb2Nlc3MoZGVmLnZhbHVlVHlwZSwgY3R4LCB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIl0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBBZGQgcmVxdWlyZWQgZm9yIGtleXMgd2l0aCBkaXNjcmV0ZSB2YWx1ZXMgKGVudW0sIGxpdGVyYWwsIGV0Yy4pXG4gICAgY29uc3Qga2V5VmFsdWVzID0ga2V5VHlwZS5fem9kLnZhbHVlcztcbiAgICBpZiAoa2V5VmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkS2V5VmFsdWVzID0gWy4uLmtleVZhbHVlc10uZmlsdGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdiA9PT0gXCJudW1iZXJcIik7XG4gICAgICAgIGlmICh2YWxpZEtleVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBqc29uLnJlcXVpcmVkID0gdmFsaWRLZXlWYWx1ZXM7XG4gICAgICAgIH1cbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IG51bGxhYmxlUHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBqc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgaW5uZXIgPSBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgaWYgKGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIikge1xuICAgICAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG4gICAgICAgIGpzb24ubnVsbGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAganNvbi5hbnlPZiA9IFtpbm5lciwgeyB0eXBlOiBcIm51bGxcIiB9XTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IG5vbm9wdGlvbmFsUHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIHByb2Nlc3MoZGVmLmlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG59O1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBkZWYuaW5uZXJUeXBlO1xuICAgIGpzb24uZGVmYXVsdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmLmRlZmF1bHRWYWx1ZSkpO1xufTtcbmV4cG9ydCBjb25zdCBwcmVmYXVsdFByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwganNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIHByb2Nlc3MoZGVmLmlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG4gICAgaWYgKGN0eC5pbyA9PT0gXCJpbnB1dFwiKVxuICAgICAgICBqc29uLl9wcmVmYXVsdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmLmRlZmF1bHRWYWx1ZSkpO1xufTtcbmV4cG9ydCBjb25zdCBjYXRjaFByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwganNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIHByb2Nlc3MoZGVmLmlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG4gICAgbGV0IGNhdGNoVmFsdWU7XG4gICAgdHJ5IHtcbiAgICAgICAgY2F0Y2hWYWx1ZSA9IGRlZi5jYXRjaFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRHluYW1pYyBjYXRjaCB2YWx1ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxuICAgIGpzb24uZGVmYXVsdCA9IGNhdGNoVmFsdWU7XG59O1xuZXhwb3J0IGNvbnN0IHBpcGVQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgaW5Jc1RyYW5zZm9ybSA9IGRlZi5pbi5fem9kLnRyYWl0cy5oYXMoXCIkWm9kVHJhbnNmb3JtXCIpO1xuICAgIGNvbnN0IGlubmVyVHlwZSA9IGN0eC5pbyA9PT0gXCJpbnB1dFwiID8gKGluSXNUcmFuc2Zvcm0gPyBkZWYub3V0IDogZGVmLmluKSA6IGRlZi5vdXQ7XG4gICAgcHJvY2Vzcyhpbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBpbm5lclR5cGU7XG59O1xuZXhwb3J0IGNvbnN0IHJlYWRvbmx5UHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBqc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgcHJvY2VzcyhkZWYuaW5uZXJUeXBlLCBjdHgsIHBhcmFtcyk7XG4gICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIHNlZW4ucmVmID0gZGVmLmlubmVyVHlwZTtcbiAgICBqc29uLnJlYWRPbmx5ID0gdHJ1ZTtcbn07XG5leHBvcnQgY29uc3QgcHJvbWlzZVByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBkZWYuaW5uZXJUeXBlO1xufTtcbmV4cG9ydCBjb25zdCBvcHRpb25hbFByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBkZWYuaW5uZXJUeXBlO1xufTtcbmV4cG9ydCBjb25zdCBsYXp5UHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgaW5uZXJUeXBlID0gc2NoZW1hLl96b2QuaW5uZXJUeXBlO1xuICAgIHByb2Nlc3MoaW5uZXJUeXBlLCBjdHgsIHBhcmFtcyk7XG4gICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIHNlZW4ucmVmID0gaW5uZXJUeXBlO1xufTtcbi8vID09PT09PT09PT09PT09PT09PT09IEFMTCBQUk9DRVNTT1JTID09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgY29uc3QgYWxsUHJvY2Vzc29ycyA9IHtcbiAgICBzdHJpbmc6IHN0cmluZ1Byb2Nlc3NvcixcbiAgICBudW1iZXI6IG51bWJlclByb2Nlc3NvcixcbiAgICBib29sZWFuOiBib29sZWFuUHJvY2Vzc29yLFxuICAgIGJpZ2ludDogYmlnaW50UHJvY2Vzc29yLFxuICAgIHN5bWJvbDogc3ltYm9sUHJvY2Vzc29yLFxuICAgIG51bGw6IG51bGxQcm9jZXNzb3IsXG4gICAgdW5kZWZpbmVkOiB1bmRlZmluZWRQcm9jZXNzb3IsXG4gICAgdm9pZDogdm9pZFByb2Nlc3NvcixcbiAgICBuZXZlcjogbmV2ZXJQcm9jZXNzb3IsXG4gICAgYW55OiBhbnlQcm9jZXNzb3IsXG4gICAgdW5rbm93bjogdW5rbm93blByb2Nlc3NvcixcbiAgICBkYXRlOiBkYXRlUHJvY2Vzc29yLFxuICAgIGVudW06IGVudW1Qcm9jZXNzb3IsXG4gICAgbGl0ZXJhbDogbGl0ZXJhbFByb2Nlc3NvcixcbiAgICBuYW46IG5hblByb2Nlc3NvcixcbiAgICB0ZW1wbGF0ZV9saXRlcmFsOiB0ZW1wbGF0ZUxpdGVyYWxQcm9jZXNzb3IsXG4gICAgZmlsZTogZmlsZVByb2Nlc3NvcixcbiAgICBzdWNjZXNzOiBzdWNjZXNzUHJvY2Vzc29yLFxuICAgIGN1c3RvbTogY3VzdG9tUHJvY2Vzc29yLFxuICAgIGZ1bmN0aW9uOiBmdW5jdGlvblByb2Nlc3NvcixcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybVByb2Nlc3NvcixcbiAgICBtYXA6IG1hcFByb2Nlc3NvcixcbiAgICBzZXQ6IHNldFByb2Nlc3NvcixcbiAgICBhcnJheTogYXJyYXlQcm9jZXNzb3IsXG4gICAgb2JqZWN0OiBvYmplY3RQcm9jZXNzb3IsXG4gICAgdW5pb246IHVuaW9uUHJvY2Vzc29yLFxuICAgIGludGVyc2VjdGlvbjogaW50ZXJzZWN0aW9uUHJvY2Vzc29yLFxuICAgIHR1cGxlOiB0dXBsZVByb2Nlc3NvcixcbiAgICByZWNvcmQ6IHJlY29yZFByb2Nlc3NvcixcbiAgICBudWxsYWJsZTogbnVsbGFibGVQcm9jZXNzb3IsXG4gICAgbm9ub3B0aW9uYWw6IG5vbm9wdGlvbmFsUHJvY2Vzc29yLFxuICAgIGRlZmF1bHQ6IGRlZmF1bHRQcm9jZXNzb3IsXG4gICAgcHJlZmF1bHQ6IHByZWZhdWx0UHJvY2Vzc29yLFxuICAgIGNhdGNoOiBjYXRjaFByb2Nlc3NvcixcbiAgICBwaXBlOiBwaXBlUHJvY2Vzc29yLFxuICAgIHJlYWRvbmx5OiByZWFkb25seVByb2Nlc3NvcixcbiAgICBwcm9taXNlOiBwcm9taXNlUHJvY2Vzc29yLFxuICAgIG9wdGlvbmFsOiBvcHRpb25hbFByb2Nlc3NvcixcbiAgICBsYXp5OiBsYXp5UHJvY2Vzc29yLFxufTtcbmV4cG9ydCBmdW5jdGlvbiB0b0pTT05TY2hlbWEoaW5wdXQsIHBhcmFtcykge1xuICAgIGlmIChcIl9pZG1hcFwiIGluIGlucHV0KSB7XG4gICAgICAgIC8vIFJlZ2lzdHJ5IGNhc2VcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBpbnB1dDtcbiAgICAgICAgY29uc3QgY3R4ID0gaW5pdGlhbGl6ZUNvbnRleHQoeyAuLi5wYXJhbXMsIHByb2Nlc3NvcnM6IGFsbFByb2Nlc3NvcnMgfSk7XG4gICAgICAgIGNvbnN0IGRlZnMgPSB7fTtcbiAgICAgICAgLy8gRmlyc3QgcGFzczogcHJvY2VzcyBhbGwgc2NoZW1hcyB0byBidWlsZCB0aGUgc2VlbiBtYXBcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWdpc3RyeS5faWRtYXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICBjb25zdCBbXywgc2NoZW1hXSA9IGVudHJ5O1xuICAgICAgICAgICAgcHJvY2VzcyhzY2hlbWEsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NoZW1hcyA9IHt9O1xuICAgICAgICBjb25zdCBleHRlcm5hbCA9IHtcbiAgICAgICAgICAgIHJlZ2lzdHJ5LFxuICAgICAgICAgICAgdXJpOiBwYXJhbXM/LnVyaSxcbiAgICAgICAgICAgIGRlZnMsXG4gICAgICAgIH07XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgY29udGV4dCB3aXRoIGV4dGVybmFsIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY3R4LmV4dGVybmFsID0gZXh0ZXJuYWw7XG4gICAgICAgIC8vIFNlY29uZCBwYXNzOiBlbWl0IGVhY2ggc2NoZW1hXG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVnaXN0cnkuX2lkbWFwLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgW2tleSwgc2NoZW1hXSA9IGVudHJ5O1xuICAgICAgICAgICAgZXh0cmFjdERlZnMoY3R4LCBzY2hlbWEpO1xuICAgICAgICAgICAgc2NoZW1hc1trZXldID0gZmluYWxpemUoY3R4LCBzY2hlbWEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhkZWZzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZzU2VnbWVudCA9IGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiID8gXCIkZGVmc1wiIDogXCJkZWZpbml0aW9uc1wiO1xuICAgICAgICAgICAgc2NoZW1hcy5fX3NoYXJlZCA9IHtcbiAgICAgICAgICAgICAgICBbZGVmc1NlZ21lbnRdOiBkZWZzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzY2hlbWFzIH07XG4gICAgfVxuICAgIC8vIFNpbmdsZSBzY2hlbWEgY2FzZVxuICAgIGNvbnN0IGN0eCA9IGluaXRpYWxpemVDb250ZXh0KHsgLi4ucGFyYW1zLCBwcm9jZXNzb3JzOiBhbGxQcm9jZXNzb3JzIH0pO1xuICAgIHByb2Nlc3MoaW5wdXQsIGN0eCk7XG4gICAgZXh0cmFjdERlZnMoY3R4LCBpbnB1dCk7XG4gICAgcmV0dXJuIGZpbmFsaXplKGN0eCwgaW5wdXQpO1xufVxuIiwiZXhwb3J0IHsgX2x0IGFzIGx0LCBfbHRlIGFzIGx0ZSwgX2d0IGFzIGd0LCBfZ3RlIGFzIGd0ZSwgX3Bvc2l0aXZlIGFzIHBvc2l0aXZlLCBfbmVnYXRpdmUgYXMgbmVnYXRpdmUsIF9ub25wb3NpdGl2ZSBhcyBub25wb3NpdGl2ZSwgX25vbm5lZ2F0aXZlIGFzIG5vbm5lZ2F0aXZlLCBfbXVsdGlwbGVPZiBhcyBtdWx0aXBsZU9mLCBfbWF4U2l6ZSBhcyBtYXhTaXplLCBfbWluU2l6ZSBhcyBtaW5TaXplLCBfc2l6ZSBhcyBzaXplLCBfbWF4TGVuZ3RoIGFzIG1heExlbmd0aCwgX21pbkxlbmd0aCBhcyBtaW5MZW5ndGgsIF9sZW5ndGggYXMgbGVuZ3RoLCBfcmVnZXggYXMgcmVnZXgsIF9sb3dlcmNhc2UgYXMgbG93ZXJjYXNlLCBfdXBwZXJjYXNlIGFzIHVwcGVyY2FzZSwgX2luY2x1ZGVzIGFzIGluY2x1ZGVzLCBfc3RhcnRzV2l0aCBhcyBzdGFydHNXaXRoLCBfZW5kc1dpdGggYXMgZW5kc1dpdGgsIF9wcm9wZXJ0eSBhcyBwcm9wZXJ0eSwgX21pbWUgYXMgbWltZSwgX292ZXJ3cml0ZSBhcyBvdmVyd3JpdGUsIF9ub3JtYWxpemUgYXMgbm9ybWFsaXplLCBfdHJpbSBhcyB0cmltLCBfdG9Mb3dlckNhc2UgYXMgdG9Mb3dlckNhc2UsIF90b1VwcGVyQ2FzZSBhcyB0b1VwcGVyQ2FzZSwgX3NsdWdpZnkgYXMgc2x1Z2lmeSwgfSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuIiwiaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgc2NoZW1hcyBmcm9tIFwiLi9zY2hlbWFzLmpzXCI7XG5leHBvcnQgY29uc3QgWm9kSVNPRGF0ZVRpbWUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kSVNPRGF0ZVRpbWVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZElTT0RhdGVUaW1lLmluaXQoaW5zdCwgZGVmKTtcbiAgICBzY2hlbWFzLlpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBkYXRldGltZShwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faXNvRGF0ZVRpbWUoWm9kSVNPRGF0ZVRpbWUsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kSVNPRGF0ZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RJU09EYXRlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RJU09EYXRlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBzY2hlbWFzLlpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBkYXRlKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pc29EYXRlKFpvZElTT0RhdGUsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kSVNPVGltZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RJU09UaW1lXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RJU09UaW1lLmluaXQoaW5zdCwgZGVmKTtcbiAgICBzY2hlbWFzLlpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB0aW1lKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pc29UaW1lKFpvZElTT1RpbWUsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kSVNPRHVyYXRpb24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kSVNPRHVyYXRpb25cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZElTT0R1cmF0aW9uLmluaXQoaW5zdCwgZGVmKTtcbiAgICBzY2hlbWFzLlpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBkdXJhdGlvbihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faXNvRHVyYXRpb24oWm9kSVNPRHVyYXRpb24sIHBhcmFtcyk7XG59XG4iLCJpbXBvcnQgKiBhcyBjb3JlIGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyAkWm9kRXJyb3IgfSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBpbml0aWFsaXplciA9IChpbnN0LCBpc3N1ZXMpID0+IHtcbiAgICAkWm9kRXJyb3IuaW5pdChpbnN0LCBpc3N1ZXMpO1xuICAgIGluc3QubmFtZSA9IFwiWm9kRXJyb3JcIjtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpbnN0LCB7XG4gICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgdmFsdWU6IChtYXBwZXIpID0+IGNvcmUuZm9ybWF0RXJyb3IoaW5zdCwgbWFwcGVyKSxcbiAgICAgICAgICAgIC8vIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBmbGF0dGVuOiB7XG4gICAgICAgICAgICB2YWx1ZTogKG1hcHBlcikgPT4gY29yZS5mbGF0dGVuRXJyb3IoaW5zdCwgbWFwcGVyKSxcbiAgICAgICAgICAgIC8vIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBhZGRJc3N1ZToge1xuICAgICAgICAgICAgdmFsdWU6IChpc3N1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGluc3QuaXNzdWVzLnB1c2goaXNzdWUpO1xuICAgICAgICAgICAgICAgIGluc3QubWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KGluc3QuaXNzdWVzLCB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciwgMik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIGFkZElzc3Vlczoge1xuICAgICAgICAgICAgdmFsdWU6IChpc3N1ZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpbnN0Lmlzc3Vlcy5wdXNoKC4uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgaW5zdC5tZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkoaW5zdC5pc3N1ZXMsIHV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyLCAyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgaXNFbXB0eToge1xuICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0Lmlzc3Vlcy5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgLy8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3QsIFwiaXNFbXB0eVwiLCB7XG4gICAgLy8gICBnZXQoKSB7XG4gICAgLy8gICAgIHJldHVybiBpbnN0Lmlzc3Vlcy5sZW5ndGggPT09IDA7XG4gICAgLy8gICB9LFxuICAgIC8vIH0pO1xufTtcbmV4cG9ydCBjb25zdCBab2RFcnJvciA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RFcnJvclwiLCBpbml0aWFsaXplcik7XG5leHBvcnQgY29uc3QgWm9kUmVhbEVycm9yID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEVycm9yXCIsIGluaXRpYWxpemVyLCB7XG4gICAgUGFyZW50OiBFcnJvcixcbn0pO1xuLy8gLyoqIEBkZXByZWNhdGVkIFVzZSBgei5jb3JlLiRab2RFcnJvck1hcEN0eGAgaW5zdGVhZC4gKi9cbi8vIGV4cG9ydCB0eXBlIEVycm9yTWFwQ3R4ID0gY29yZS4kWm9kRXJyb3JNYXBDdHg7XG4iLCJpbXBvcnQgKiBhcyBjb3JlIGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBab2RSZWFsRXJyb3IgfSBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmV4cG9ydCBjb25zdCBwYXJzZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9wYXJzZShab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IHBhcnNlQXN5bmMgPSAvKiBAX19QVVJFX18gKi8gY29yZS5fcGFyc2VBc3luYyhab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IHNhZmVQYXJzZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlUGFyc2UoWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBzYWZlUGFyc2VBc3luYyA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlUGFyc2VBc3luYyhab2RSZWFsRXJyb3IpO1xuLy8gQ29kZWMgZnVuY3Rpb25zXG5leHBvcnQgY29uc3QgZW5jb2RlID0gLyogQF9fUFVSRV9fICovIGNvcmUuX2VuY29kZShab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IGRlY29kZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9kZWNvZGUoWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBlbmNvZGVBc3luYyA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9lbmNvZGVBc3luYyhab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IGRlY29kZUFzeW5jID0gLyogQF9fUFVSRV9fICovIGNvcmUuX2RlY29kZUFzeW5jKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3Qgc2FmZUVuY29kZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlRW5jb2RlKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3Qgc2FmZURlY29kZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlRGVjb2RlKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3Qgc2FmZUVuY29kZUFzeW5jID0gLyogQF9fUFVSRV9fICovIGNvcmUuX3NhZmVFbmNvZGVBc3luYyhab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IHNhZmVEZWNvZGVBc3luYyA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlRGVjb2RlQXN5bmMoWm9kUmVhbEVycm9yKTtcbiIsImltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIi4uL2NvcmUvaW5kZXguanNcIjtcbmltcG9ydCB7IHV0aWwgfSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgcHJvY2Vzc29ycyBmcm9tIFwiLi4vY29yZS9qc29uLXNjaGVtYS1wcm9jZXNzb3JzLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2QsIGNyZWF0ZVRvSlNPTlNjaGVtYU1ldGhvZCB9IGZyb20gXCIuLi9jb3JlL3RvLWpzb24tc2NoZW1hLmpzXCI7XG5pbXBvcnQgKiBhcyBjaGVja3MgZnJvbSBcIi4vY2hlY2tzLmpzXCI7XG5pbXBvcnQgKiBhcyBpc28gZnJvbSBcIi4vaXNvLmpzXCI7XG5pbXBvcnQgKiBhcyBwYXJzZSBmcm9tIFwiLi9wYXJzZS5qc1wiO1xuLy8gTGF6eS1iaW5kIGJ1aWxkZXIgbWV0aG9kcy5cbi8vXG4vLyBCdWlsZGVyIG1ldGhvZHMgKGAub3B0aW9uYWxgLCBgLmFycmF5YCwgYC5yZWZpbmVgLCAuLi4pIGxpdmUgYXNcbi8vIG5vbi1lbnVtZXJhYmxlIGdldHRlcnMgb24gZWFjaCBjb25jcmV0ZSBzY2hlbWEgY29uc3RydWN0b3Inc1xuLy8gcHJvdG90eXBlLiBPbiBmaXJzdCBhY2Nlc3MgZnJvbSBhbiBpbnN0YW5jZSB0aGUgZ2V0dGVyIGFsbG9jYXRlc1xuLy8gYGZuLmJpbmQodGhpcylgIGFuZCBjYWNoZXMgaXQgYXMgYW4gb3duIHByb3BlcnR5IG9uIHRoYXQgaW5zdGFuY2UsXG4vLyBzbyBkZXRhY2hlZCB1c2FnZSAoYGNvbnN0IG0gPSBzY2hlbWEub3B0aW9uYWw7IG0oKWApIHN0aWxsIHdvcmtzXG4vLyBhbmQgdGhlIHBlci1pbnN0YW5jZSBhbGxvY2F0aW9uIG9ubHkgaGFwcGVucyBmb3IgbWV0aG9kcyBhY3R1YWxseVxuLy8gdG91Y2hlZC5cbi8vXG4vLyBPbmUgaW5zdGFsbCBwZXIgKHByb3RvdHlwZSwgZ3JvdXApLCBtZW1vaXplZCBieSBgX2luc3RhbGxlZEdyb3Vwc2AuXG5jb25zdCBfaW5zdGFsbGVkR3JvdXBzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBfaW5zdGFsbExhenlNZXRob2RzKGluc3QsIGdyb3VwLCBtZXRob2RzKSB7XG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5zdCk7XG4gICAgbGV0IGluc3RhbGxlZCA9IF9pbnN0YWxsZWRHcm91cHMuZ2V0KHByb3RvKTtcbiAgICBpZiAoIWluc3RhbGxlZCkge1xuICAgICAgICBpbnN0YWxsZWQgPSBuZXcgU2V0KCk7XG4gICAgICAgIF9pbnN0YWxsZWRHcm91cHMuc2V0KHByb3RvLCBpbnN0YWxsZWQpO1xuICAgIH1cbiAgICBpZiAoaW5zdGFsbGVkLmhhcyhncm91cCkpXG4gICAgICAgIHJldHVybjtcbiAgICBpbnN0YWxsZWQuYWRkKGdyb3VwKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBtZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGZuID0gbWV0aG9kc1trZXldO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sIGtleSwge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm91bmQgPSBmbi5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGJvdW5kLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBib3VuZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQodikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgWm9kVHlwZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RUeXBlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBPYmplY3QuYXNzaWduKGluc3RbXCJ+c3RhbmRhcmRcIl0sIHtcbiAgICAgICAganNvblNjaGVtYToge1xuICAgICAgICAgICAgaW5wdXQ6IGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZChpbnN0LCBcImlucHV0XCIpLFxuICAgICAgICAgICAgb3V0cHV0OiBjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2QoaW5zdCwgXCJvdXRwdXRcIiksXG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgaW5zdC50b0pTT05TY2hlbWEgPSBjcmVhdGVUb0pTT05TY2hlbWFNZXRob2QoaW5zdCwge30pO1xuICAgIGluc3QuZGVmID0gZGVmO1xuICAgIGluc3QudHlwZSA9IGRlZi50eXBlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0LCBcIl9kZWZcIiwgeyB2YWx1ZTogZGVmIH0pO1xuICAgIC8vIFBhcnNlLWZhbWlseSBpcyBpbnRlbnRpb25hbGx5IGtlcHQgYXMgcGVyLWluc3RhbmNlIGNsb3N1cmVzOiB0aGVzZSBhcmVcbiAgICAvLyB0aGUgaG90IHBhdGggQU5EIHRoZSBtb3N0LWRldGFjaGVkIG1ldGhvZHMgKGBhcnIubWFwKHNjaGVtYS5wYXJzZSlgLFxuICAgIC8vIGBjb25zdCB7IHBhcnNlIH0gPSBzY2hlbWFgLCBldGMuKS4gRWFnZXIgY2xvc3VyZXMgaGVyZSBtZWFuIGNhbGxlcnMgcGF5XG4gICAgLy8gfjEyIGNsb3N1cmUgYWxsb2NhdGlvbnMgcGVyIHNjaGVtYSBidXQgZ2V0IG1vbm9tb3JwaGljIGNhbGwgc2l0ZXMgYW5kXG4gICAgLy8gZGV0YWNoZWQgdXNhZ2UgdGhhdCBcImp1c3Qgd29ya3NcIi5cbiAgICBpbnN0LnBhcnNlID0gKGRhdGEsIHBhcmFtcykgPT4gcGFyc2UucGFyc2UoaW5zdCwgZGF0YSwgcGFyYW1zLCB7IGNhbGxlZTogaW5zdC5wYXJzZSB9KTtcbiAgICBpbnN0LnNhZmVQYXJzZSA9IChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLnNhZmVQYXJzZShpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3QucGFyc2VBc3luYyA9IGFzeW5jIChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLnBhcnNlQXN5bmMoaW5zdCwgZGF0YSwgcGFyYW1zLCB7IGNhbGxlZTogaW5zdC5wYXJzZUFzeW5jIH0pO1xuICAgIGluc3Quc2FmZVBhcnNlQXN5bmMgPSBhc3luYyAoZGF0YSwgcGFyYW1zKSA9PiBwYXJzZS5zYWZlUGFyc2VBc3luYyhpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3Quc3BhID0gaW5zdC5zYWZlUGFyc2VBc3luYztcbiAgICBpbnN0LmVuY29kZSA9IChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLmVuY29kZShpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3QuZGVjb2RlID0gKGRhdGEsIHBhcmFtcykgPT4gcGFyc2UuZGVjb2RlKGluc3QsIGRhdGEsIHBhcmFtcyk7XG4gICAgaW5zdC5lbmNvZGVBc3luYyA9IGFzeW5jIChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLmVuY29kZUFzeW5jKGluc3QsIGRhdGEsIHBhcmFtcyk7XG4gICAgaW5zdC5kZWNvZGVBc3luYyA9IGFzeW5jIChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLmRlY29kZUFzeW5jKGluc3QsIGRhdGEsIHBhcmFtcyk7XG4gICAgaW5zdC5zYWZlRW5jb2RlID0gKGRhdGEsIHBhcmFtcykgPT4gcGFyc2Uuc2FmZUVuY29kZShpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3Quc2FmZURlY29kZSA9IChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLnNhZmVEZWNvZGUoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LnNhZmVFbmNvZGVBc3luYyA9IGFzeW5jIChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLnNhZmVFbmNvZGVBc3luYyhpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3Quc2FmZURlY29kZUFzeW5jID0gYXN5bmMgKGRhdGEsIHBhcmFtcykgPT4gcGFyc2Uuc2FmZURlY29kZUFzeW5jKGluc3QsIGRhdGEsIHBhcmFtcyk7XG4gICAgLy8gQWxsIGJ1aWxkZXIgbWV0aG9kcyBhcmUgcGxhY2VkIG9uIHRoZSBpbnRlcm5hbCBwcm90b3R5cGUgYXMgbGF6eS1iaW5kXG4gICAgLy8gZ2V0dGVycy4gT24gZmlyc3QgYWNjZXNzIHBlci1pbnN0YW5jZSwgYSBib3VuZCB0aHVuayBpcyBhbGxvY2F0ZWQgYW5kXG4gICAgLy8gY2FjaGVkIGFzIGFuIG93biBwcm9wZXJ0eTsgc3Vic2VxdWVudCBhY2Nlc3NlcyBza2lwIHRoZSBnZXR0ZXIuIFRoaXNcbiAgICAvLyBtZWFuczogbm8gcGVyLWluc3RhbmNlIGFsbG9jYXRpb24gZm9yIHVudXNlZCBtZXRob2RzLCBmdWxsXG4gICAgLy8gZGV0YWNoYWJpbGl0eSBwcmVzZXJ2ZWQgKGBjb25zdCBtID0gc2NoZW1hLm9wdGlvbmFsOyBtKClgIHdvcmtzKSwgYW5kXG4gICAgLy8gc2hhcmVkIHVuZGVybHlpbmcgZnVuY3Rpb24gcmVmZXJlbmNlcyBhY3Jvc3MgYWxsIGluc3RhbmNlcy5cbiAgICBfaW5zdGFsbExhenlNZXRob2RzKGluc3QsIFwiWm9kVHlwZVwiLCB7XG4gICAgICAgIGNoZWNrKC4uLmNoa3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZiA9IHRoaXMuZGVmO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUodXRpbC5tZXJnZURlZnMoZGVmLCB7XG4gICAgICAgICAgICAgICAgY2hlY2tzOiBbXG4gICAgICAgICAgICAgICAgICAgIC4uLihkZWYuY2hlY2tzID8/IFtdKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uY2hrcy5tYXAoKGNoKSA9PiB0eXBlb2YgY2ggPT09IFwiZnVuY3Rpb25cIiA/IHsgX3pvZDogeyBjaGVjazogY2gsIGRlZjogeyBjaGVjazogXCJjdXN0b21cIiB9LCBvbmF0dGFjaDogW10gfSB9IDogY2gpLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSwgeyBwYXJlbnQ6IHRydWUgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdpdGgoLi4uY2hrcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soLi4uY2hrcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsb25lKGRlZiwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZS5jbG9uZSh0aGlzLCBkZWYsIHBhcmFtcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGJyYW5kKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyKHJlZywgbWV0YSkge1xuICAgICAgICAgICAgcmVnLmFkZCh0aGlzLCBtZXRhKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICByZWZpbmUoY2hlY2ssIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2socmVmaW5lKGNoZWNrLCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3VwZXJSZWZpbmUocmVmaW5lbWVudCwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhzdXBlclJlZmluZShyZWZpbmVtZW50LCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgb3ZlcndyaXRlKGZuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3Mub3ZlcndyaXRlKGZuKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbmFsKCkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbmFsKHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBleGFjdE9wdGlvbmFsKCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4YWN0T3B0aW9uYWwodGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIG51bGxhYmxlKCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGxhYmxlKHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBudWxsaXNoKCkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbmFsKG51bGxhYmxlKHRoaXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbm9ub3B0aW9uYWwocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9ub3B0aW9uYWwodGhpcywgcGFyYW1zKTtcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXkoKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkodGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9yKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIHVuaW9uKFt0aGlzLCBhcmddKTtcbiAgICAgICAgfSxcbiAgICAgICAgYW5kKGFyZykge1xuICAgICAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvbih0aGlzLCBhcmcpO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2Zvcm0odHgpIHtcbiAgICAgICAgICAgIHJldHVybiBwaXBlKHRoaXMsIHRyYW5zZm9ybSh0eCkpO1xuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0KGQpIHtcbiAgICAgICAgICAgIHJldHVybiBfZGVmYXVsdCh0aGlzLCBkKTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJlZmF1bHQoZCkge1xuICAgICAgICAgICAgcmV0dXJuIHByZWZhdWx0KHRoaXMsIGQpO1xuICAgICAgICB9LFxuICAgICAgICBjYXRjaChwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBfY2F0Y2godGhpcywgcGFyYW1zKTtcbiAgICAgICAgfSxcbiAgICAgICAgcGlwZSh0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBwaXBlKHRoaXMsIHRhcmdldCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlYWRvbmx5KCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRvbmx5KHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBkZXNjcmliZShkZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgY29uc3QgY2wgPSB0aGlzLmNsb25lKCk7XG4gICAgICAgICAgICBjb3JlLmdsb2JhbFJlZ2lzdHJ5LmFkZChjbCwgeyBkZXNjcmlwdGlvbiB9KTtcbiAgICAgICAgICAgIHJldHVybiBjbDtcbiAgICAgICAgfSxcbiAgICAgICAgbWV0YSguLi5hcmdzKSB7XG4gICAgICAgICAgICAvLyBvdmVybG9hZGVkOiBtZXRhKCkgcmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBtZXRhZGF0YSwgbWV0YShkYXRhKVxuICAgICAgICAgICAgLy8gcmV0dXJucyBhIGNsb25lIHdpdGggYGRhdGFgIHJlZ2lzdGVyZWQuIFRoZSBtYXBwZWQgdHlwZSBwaWNrc1xuICAgICAgICAgICAgLy8gdXAgdGhlIHNlY29uZCBvdmVybG9hZCwgc28gd2UgYWNjZXB0IHZhcmlhZGljIGFueS1hcmdzIGFuZFxuICAgICAgICAgICAgLy8gcmV0dXJuIGBhbnlgIHRvIHNhdGlzZnkgYm90aCBhdCBydW50aW1lLlxuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3JlLmdsb2JhbFJlZ2lzdHJ5LmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IGNsID0gdGhpcy5jbG9uZSgpO1xuICAgICAgICAgICAgY29yZS5nbG9iYWxSZWdpc3RyeS5hZGQoY2wsIGFyZ3NbMF0pO1xuICAgICAgICAgICAgcmV0dXJuIGNsO1xuICAgICAgICB9LFxuICAgICAgICBpc09wdGlvbmFsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2FmZVBhcnNlKHVuZGVmaW5lZCkuc3VjY2VzcztcbiAgICAgICAgfSxcbiAgICAgICAgaXNOdWxsYWJsZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzO1xuICAgICAgICB9LFxuICAgICAgICBhcHBseShmbikge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHRoaXMpO1xuICAgICAgICB9LFxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0LCBcImRlc2NyaXB0aW9uXCIsIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuZ2xvYmFsUmVnaXN0cnkuZ2V0KGluc3QpPy5kZXNjcmlwdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiBpbnN0O1xufSk7XG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgX1pvZFN0cmluZyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJfWm9kU3RyaW5nXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RTdHJpbmcuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5zdHJpbmdQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgaW5zdC5mb3JtYXQgPSBiYWcuZm9ybWF0ID8/IG51bGw7XG4gICAgaW5zdC5taW5MZW5ndGggPSBiYWcubWluaW11bSA/PyBudWxsO1xuICAgIGluc3QubWF4TGVuZ3RoID0gYmFnLm1heGltdW0gPz8gbnVsbDtcbiAgICBfaW5zdGFsbExhenlNZXRob2RzKGluc3QsIFwiX1pvZFN0cmluZ1wiLCB7XG4gICAgICAgIHJlZ2V4KC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5yZWdleCguLi5hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGluY2x1ZGVzKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5pbmNsdWRlcyguLi5hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN0YXJ0c1dpdGgoLi4uYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLnN0YXJ0c1dpdGgoLi4uYXJncykpO1xuICAgICAgICB9LFxuICAgICAgICBlbmRzV2l0aCguLi5hcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MuZW5kc1dpdGgoLi4uYXJncykpO1xuICAgICAgICB9LFxuICAgICAgICBtaW4oLi4uYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLm1pbkxlbmd0aCguLi5hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1heCguLi5hcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MubWF4TGVuZ3RoKC4uLmFyZ3MpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbGVuZ3RoKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5sZW5ndGgoLi4uYXJncykpO1xuICAgICAgICB9LFxuICAgICAgICBub25lbXB0eSguLi5hcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MubWluTGVuZ3RoKDEsIC4uLmFyZ3MpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbG93ZXJjYXNlKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmxvd2VyY2FzZShwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXBwZXJjYXNlKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLnVwcGVyY2FzZShwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJpbSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy50cmltKCkpO1xuICAgICAgICB9LFxuICAgICAgICBub3JtYWxpemUoLi4uYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLm5vcm1hbGl6ZSguLi5hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvTG93ZXJDYXNlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9LFxuICAgICAgICB0b1VwcGVyQ2FzZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2x1Z2lmeSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5zbHVnaWZ5KCkpO1xuICAgICAgICB9LFxuICAgIH0pO1xufSk7XG5leHBvcnQgY29uc3QgWm9kU3RyaW5nID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFN0cmluZ1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kU3RyaW5nLmluaXQoaW5zdCwgZGVmKTtcbiAgICBfWm9kU3RyaW5nLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0LmVtYWlsID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9lbWFpbChab2RFbWFpbCwgcGFyYW1zKSk7XG4gICAgaW5zdC51cmwgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX3VybChab2RVUkwsIHBhcmFtcykpO1xuICAgIGluc3Quand0ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9qd3QoWm9kSldULCBwYXJhbXMpKTtcbiAgICBpbnN0LmVtb2ppID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9lbW9qaShab2RFbW9qaSwgcGFyYW1zKSk7XG4gICAgaW5zdC5ndWlkID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9ndWlkKFpvZEdVSUQsIHBhcmFtcykpO1xuICAgIGluc3QudXVpZCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fdXVpZChab2RVVUlELCBwYXJhbXMpKTtcbiAgICBpbnN0LnV1aWR2NCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fdXVpZHY0KFpvZFVVSUQsIHBhcmFtcykpO1xuICAgIGluc3QudXVpZHY2ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl91dWlkdjYoWm9kVVVJRCwgcGFyYW1zKSk7XG4gICAgaW5zdC51dWlkdjcgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX3V1aWR2Nyhab2RVVUlELCBwYXJhbXMpKTtcbiAgICBpbnN0Lm5hbm9pZCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fbmFub2lkKFpvZE5hbm9JRCwgcGFyYW1zKSk7XG4gICAgaW5zdC5ndWlkID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9ndWlkKFpvZEdVSUQsIHBhcmFtcykpO1xuICAgIGluc3QuY3VpZCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fY3VpZChab2RDVUlELCBwYXJhbXMpKTtcbiAgICBpbnN0LmN1aWQyID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9jdWlkMihab2RDVUlEMiwgcGFyYW1zKSk7XG4gICAgaW5zdC51bGlkID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl91bGlkKFpvZFVMSUQsIHBhcmFtcykpO1xuICAgIGluc3QuYmFzZTY0ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9iYXNlNjQoWm9kQmFzZTY0LCBwYXJhbXMpKTtcbiAgICBpbnN0LmJhc2U2NHVybCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fYmFzZTY0dXJsKFpvZEJhc2U2NFVSTCwgcGFyYW1zKSk7XG4gICAgaW5zdC54aWQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX3hpZChab2RYSUQsIHBhcmFtcykpO1xuICAgIGluc3Qua3N1aWQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2tzdWlkKFpvZEtTVUlELCBwYXJhbXMpKTtcbiAgICBpbnN0LmlwdjQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2lwdjQoWm9kSVB2NCwgcGFyYW1zKSk7XG4gICAgaW5zdC5pcHY2ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9pcHY2KFpvZElQdjYsIHBhcmFtcykpO1xuICAgIGluc3QuY2lkcnY0ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9jaWRydjQoWm9kQ0lEUnY0LCBwYXJhbXMpKTtcbiAgICBpbnN0LmNpZHJ2NiA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fY2lkcnY2KFpvZENJRFJ2NiwgcGFyYW1zKSk7XG4gICAgaW5zdC5lMTY0ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9lMTY0KFpvZEUxNjQsIHBhcmFtcykpO1xuICAgIC8vIGlzb1xuICAgIGluc3QuZGF0ZXRpbWUgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGlzby5kYXRldGltZShwYXJhbXMpKTtcbiAgICBpbnN0LmRhdGUgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGlzby5kYXRlKHBhcmFtcykpO1xuICAgIGluc3QudGltZSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soaXNvLnRpbWUocGFyYW1zKSk7XG4gICAgaW5zdC5kdXJhdGlvbiA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soaXNvLmR1cmF0aW9uKHBhcmFtcykpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9zdHJpbmcoWm9kU3RyaW5nLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFN0cmluZ0Zvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RTdHJpbmdGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgX1pvZFN0cmluZy5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCBab2RFbWFpbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RFbWFpbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RFbWFpbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGVtYWlsKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9lbWFpbChab2RFbWFpbCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RHVUlEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEdVSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kR1VJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGd1aWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2d1aWQoWm9kR1VJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RVVUlEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFVVSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kVVVJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHV1aWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3V1aWQoWm9kVVVJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3V1aWR2NChab2RVVUlELCBwYXJhbXMpO1xufVxuLy8gWm9kVVVJRHY2XG5leHBvcnQgZnVuY3Rpb24gdXVpZHY2KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl91dWlkdjYoWm9kVVVJRCwgcGFyYW1zKTtcbn1cbi8vIFpvZFVVSUR2N1xuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NyhwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdXVpZHY3KFpvZFVVSUQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kVVJMID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFVSTFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RVUkwuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB1cmwocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3VybChab2RVUkwsIHBhcmFtcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gaHR0cFVybChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdXJsKFpvZFVSTCwge1xuICAgICAgICBwcm90b2NvbDogY29yZS5yZWdleGVzLmh0dHBQcm90b2NvbCxcbiAgICAgICAgaG9zdG5hbWU6IGNvcmUucmVnZXhlcy5kb21haW4sXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kRW1vamkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRW1vamlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kRW1vamkuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBlbW9qaShwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fZW1vamkoWm9kRW1vamksIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kTmFub0lEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE5hbm9JRFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2ROYW5vSUQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBuYW5vaWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX25hbm9pZChab2ROYW5vSUQsIHBhcmFtcyk7XG59XG4vKipcbiAqIEBkZXByZWNhdGVkIENVSUQgdjEgaXMgZGVwcmVjYXRlZCBieSBpdHMgYXV0aG9ycyBkdWUgdG8gaW5mb3JtYXRpb24gbGVha2FnZVxuICogKHRpbWVzdGFtcHMgZW1iZWRkZWQgaW4gdGhlIGlkKS4gVXNlIHtAbGluayBab2RDVUlEMn0gaW5zdGVhZC5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcGFyYWxsZWxkcml2ZS9jdWlkLlxuICovXG5leHBvcnQgY29uc3QgWm9kQ1VJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDVUlEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZENVSUQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbi8qKlxuICogVmFsaWRhdGVzIGEgQ1VJRCB2MSBzdHJpbmcuXG4gKlxuICogQGRlcHJlY2F0ZWQgQ1VJRCB2MSBpcyBkZXByZWNhdGVkIGJ5IGl0cyBhdXRob3JzIGR1ZSB0byBpbmZvcm1hdGlvbiBsZWFrYWdlXG4gKiAodGltZXN0YW1wcyBlbWJlZGRlZCBpbiB0aGUgaWQpLiBVc2Uge0BsaW5rIGN1aWQyIHwgYHouY3VpZDIoKWB9IGluc3RlYWQuXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BhcmFsbGVsZHJpdmUvY3VpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1aWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2N1aWQoWm9kQ1VJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RDVUlEMiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDVUlEMlwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RDVUlEMi5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGN1aWQyKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9jdWlkMihab2RDVUlEMiwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RVTElEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFVMSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kVUxJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHVsaWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3VsaWQoWm9kVUxJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RYSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kWElEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZFhJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHhpZChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5feGlkKFpvZFhJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RLU1VJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RLU1VJRFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RLU1VJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGtzdWlkKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9rc3VpZChab2RLU1VJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RJUHY0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZElQdjRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kSVB2NC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGlwdjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2lwdjQoWm9kSVB2NCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RNQUMgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTUFDXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZE1BQy5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIG1hYyhwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fbWFjKFpvZE1BQywgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RJUHY2ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZElQdjZcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kSVB2Ni5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGlwdjYocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2lwdjYoWm9kSVB2NiwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RDSURSdjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQ0lEUnY0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RDSURSdjQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBjaWRydjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2NpZHJ2NChab2RDSURSdjQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kQ0lEUnY2ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZENJRFJ2NlwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kQ0lEUnY2LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gY2lkcnY2KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9jaWRydjYoWm9kQ0lEUnY2LCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEJhc2U2NCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RCYXNlNjRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kQmFzZTY0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9iYXNlNjQoWm9kQmFzZTY0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEJhc2U2NFVSTCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RCYXNlNjRVUkxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kQmFzZTY0VVJMLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0dXJsKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9iYXNlNjR1cmwoWm9kQmFzZTY0VVJMLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEUxNjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRTE2NFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RFMTY0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZTE2NChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fZTE2NChab2RFMTY0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEpXVCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RKV1RcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kSldULmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gand0KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9qd3QoWm9kSldULCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDdXN0b21TdHJpbmdGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kQ3VzdG9tU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nRm9ybWF0KGZvcm1hdCwgZm5PclJlZ2V4LCBfcGFyYW1zID0ge30pIHtcbiAgICByZXR1cm4gY29yZS5fc3RyaW5nRm9ybWF0KFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCwgZm9ybWF0LCBmbk9yUmVnZXgsIF9wYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhvc3RuYW1lKF9wYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fc3RyaW5nRm9ybWF0KFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCwgXCJob3N0bmFtZVwiLCBjb3JlLnJlZ2V4ZXMuaG9zdG5hbWUsIF9wYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhleChfcGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3N0cmluZ0Zvcm1hdChab2RDdXN0b21TdHJpbmdGb3JtYXQsIFwiaGV4XCIsIGNvcmUucmVnZXhlcy5oZXgsIF9wYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhc2goYWxnLCBwYXJhbXMpIHtcbiAgICBjb25zdCBlbmMgPSBwYXJhbXM/LmVuYyA/PyBcImhleFwiO1xuICAgIGNvbnN0IGZvcm1hdCA9IGAke2FsZ31fJHtlbmN9YDtcbiAgICBjb25zdCByZWdleCA9IGNvcmUucmVnZXhlc1tmb3JtYXRdO1xuICAgIGlmICghcmVnZXgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZm9ybWF0OiAke2Zvcm1hdH1gKTtcbiAgICByZXR1cm4gY29yZS5fc3RyaW5nRm9ybWF0KFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCwgZm9ybWF0LCByZWdleCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2ROdW1iZXIgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTnVtYmVyXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2ROdW1iZXIuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5udW1iZXJQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIF9pbnN0YWxsTGF6eU1ldGhvZHMoaW5zdCwgXCJab2ROdW1iZXJcIiwge1xuICAgICAgICBndCh2YWx1ZSwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MuZ3QodmFsdWUsIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICBndGUodmFsdWUsIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmd0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1pbih2YWx1ZSwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MuZ3RlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbHQodmFsdWUsIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmx0KHZhbHVlLCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbHRlKHZhbHVlLCBwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5sdGUodmFsdWUsIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICBtYXgodmFsdWUsIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmx0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGludChwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGludChwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2FmZShwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGludChwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zaXRpdmUocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MuZ3QoMCwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG5vbm5lZ2F0aXZlKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmd0ZSgwLCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbmVnYXRpdmUocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MubHQoMCwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG5vbnBvc2l0aXZlKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmx0ZSgwLCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbXVsdGlwbGVPZih2YWx1ZSwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MubXVsdGlwbGVPZih2YWx1ZSwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN0ZXAodmFsdWUsIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLm11bHRpcGxlT2YodmFsdWUsIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICBmaW5pdGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgIGluc3QubWluVmFsdWUgPVxuICAgICAgICBNYXRoLm1heChiYWcubWluaW11bSA/PyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksIGJhZy5leGNsdXNpdmVNaW5pbXVtID8/IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgPz8gbnVsbDtcbiAgICBpbnN0Lm1heFZhbHVlID1cbiAgICAgICAgTWF0aC5taW4oYmFnLm1heGltdW0gPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLCBiYWcuZXhjbHVzaXZlTWF4aW11bSA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpID8/IG51bGw7XG4gICAgaW5zdC5pc0ludCA9IChiYWcuZm9ybWF0ID8/IFwiXCIpLmluY2x1ZGVzKFwiaW50XCIpIHx8IE51bWJlci5pc1NhZmVJbnRlZ2VyKGJhZy5tdWx0aXBsZU9mID8/IDAuNSk7XG4gICAgaW5zdC5pc0Zpbml0ZSA9IHRydWU7XG4gICAgaW5zdC5mb3JtYXQgPSBiYWcuZm9ybWF0ID8/IG51bGw7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBudW1iZXIocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX251bWJlcihab2ROdW1iZXIsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kTnVtYmVyRm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE51bWJlckZvcm1hdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kTnVtYmVyRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2ROdW1iZXIuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gaW50KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pbnQoWm9kTnVtYmVyRm9ybWF0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZsb2F0MzIocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2Zsb2F0MzIoWm9kTnVtYmVyRm9ybWF0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZsb2F0NjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2Zsb2F0NjQoWm9kTnVtYmVyRm9ybWF0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGludDMyKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pbnQzMihab2ROdW1iZXJGb3JtYXQsIHBhcmFtcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gdWludDMyKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl91aW50MzIoWm9kTnVtYmVyRm9ybWF0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEJvb2xlYW4gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQm9vbGVhblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kQm9vbGVhbi5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmJvb2xlYW5Qcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gYm9vbGVhbihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fYm9vbGVhbihab2RCb29sZWFuLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEJpZ0ludCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RCaWdJbnRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZEJpZ0ludC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmJpZ2ludFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5ndGUgPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MuZ3RlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1pbiA9ICh2YWx1ZSwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5ndGUodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QuZ3QgPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MuZ3QodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QuZ3RlID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmd0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5taW4gPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MuZ3RlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lmx0ID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmx0KHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lmx0ZSA9ICh2YWx1ZSwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5sdGUodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QubWF4ID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmx0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5wb3NpdGl2ZSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmd0KEJpZ0ludCgwKSwgcGFyYW1zKSk7XG4gICAgaW5zdC5uZWdhdGl2ZSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmx0KEJpZ0ludCgwKSwgcGFyYW1zKSk7XG4gICAgaW5zdC5ub25wb3NpdGl2ZSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmx0ZShCaWdJbnQoMCksIHBhcmFtcykpO1xuICAgIGluc3Qubm9ubmVnYXRpdmUgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5ndGUoQmlnSW50KDApLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm11bHRpcGxlT2YgPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MubXVsdGlwbGVPZih2YWx1ZSwgcGFyYW1zKSk7XG4gICAgY29uc3QgYmFnID0gaW5zdC5fem9kLmJhZztcbiAgICBpbnN0Lm1pblZhbHVlID0gYmFnLm1pbmltdW0gPz8gbnVsbDtcbiAgICBpbnN0Lm1heFZhbHVlID0gYmFnLm1heGltdW0gPz8gbnVsbDtcbiAgICBpbnN0LmZvcm1hdCA9IGJhZy5mb3JtYXQgPz8gbnVsbDtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGJpZ2ludChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fYmlnaW50KFpvZEJpZ0ludCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RCaWdJbnRGb3JtYXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQmlnSW50Rm9ybWF0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RCaWdJbnRGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZEJpZ0ludC5pbml0KGluc3QsIGRlZik7XG59KTtcbi8vIGludDY0XG5leHBvcnQgZnVuY3Rpb24gaW50NjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2ludDY0KFpvZEJpZ0ludEZvcm1hdCwgcGFyYW1zKTtcbn1cbi8vIHVpbnQ2NFxuZXhwb3J0IGZ1bmN0aW9uIHVpbnQ2NChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdWludDY0KFpvZEJpZ0ludEZvcm1hdCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RTeW1ib2wgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kU3ltYm9sXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RTeW1ib2wuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5zeW1ib2xQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gc3ltYm9sKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9zeW1ib2woWm9kU3ltYm9sLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFVuZGVmaW5lZCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RVbmRlZmluZWRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFVuZGVmaW5lZC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnVuZGVmaW5lZFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmZ1bmN0aW9uIF91bmRlZmluZWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3VuZGVmaW5lZChab2RVbmRlZmluZWQsIHBhcmFtcyk7XG59XG5leHBvcnQgeyBfdW5kZWZpbmVkIGFzIHVuZGVmaW5lZCB9O1xuZXhwb3J0IGNvbnN0IFpvZE51bGwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTnVsbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kTnVsbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLm51bGxQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5mdW5jdGlvbiBfbnVsbChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fbnVsbChab2ROdWxsLCBwYXJhbXMpO1xufVxuZXhwb3J0IHsgX251bGwgYXMgbnVsbCB9O1xuZXhwb3J0IGNvbnN0IFpvZEFueSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RBbnlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZEFueS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmFueVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBhbnkoKSB7XG4gICAgcmV0dXJuIGNvcmUuX2FueShab2RBbnkpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFVua25vd24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVW5rbm93blwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kVW5rbm93bi5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnVua25vd25Qcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdW5rbm93bigpIHtcbiAgICByZXR1cm4gY29yZS5fdW5rbm93bihab2RVbmtub3duKTtcbn1cbmV4cG9ydCBjb25zdCBab2ROZXZlciA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2ROZXZlclwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kTmV2ZXIuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5uZXZlclByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBuZXZlcihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fbmV2ZXIoWm9kTmV2ZXIsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kVm9pZCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RWb2lkXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RWb2lkLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMudm9pZFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmZ1bmN0aW9uIF92b2lkKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl92b2lkKFpvZFZvaWQsIHBhcmFtcyk7XG59XG5leHBvcnQgeyBfdm9pZCBhcyB2b2lkIH07XG5leHBvcnQgY29uc3QgWm9kRGF0ZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2REYXRlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2REYXRlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuZGF0ZVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5taW4gPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MuZ3RlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1heCA9ICh2YWx1ZSwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5sdGUodmFsdWUsIHBhcmFtcykpO1xuICAgIGNvbnN0IGMgPSBpbnN0Ll96b2QuYmFnO1xuICAgIGluc3QubWluRGF0ZSA9IGMubWluaW11bSA/IG5ldyBEYXRlKGMubWluaW11bSkgOiBudWxsO1xuICAgIGluc3QubWF4RGF0ZSA9IGMubWF4aW11bSA/IG5ldyBEYXRlKGMubWF4aW11bSkgOiBudWxsO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZGF0ZShwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fZGF0ZShab2REYXRlLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEFycmF5ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEFycmF5XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RBcnJheS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmFycmF5UHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LmVsZW1lbnQgPSBkZWYuZWxlbWVudDtcbiAgICBfaW5zdGFsbExhenlNZXRob2RzKGluc3QsIFwiWm9kQXJyYXlcIiwge1xuICAgICAgICBtaW4obiwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MubWluTGVuZ3RoKG4sIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICBub25lbXB0eShwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5taW5MZW5ndGgoMSwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1heChuLCBwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5tYXhMZW5ndGgobiwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGxlbmd0aChuLCBwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5sZW5ndGgobiwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHVud3JhcCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBhcnJheShlbGVtZW50LCBwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fYXJyYXkoWm9kQXJyYXksIGVsZW1lbnQsIHBhcmFtcyk7XG59XG4vLyAua2V5b2ZcbmV4cG9ydCBmdW5jdGlvbiBrZXlvZihzY2hlbWEpIHtcbiAgICBjb25zdCBzaGFwZSA9IHNjaGVtYS5fem9kLmRlZi5zaGFwZTtcbiAgICByZXR1cm4gX2VudW0oT2JqZWN0LmtleXMoc2hhcGUpKTtcbn1cbmV4cG9ydCBjb25zdCBab2RPYmplY3QgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kT2JqZWN0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RPYmplY3RKSVQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5vYmplY3RQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0LCBcInNoYXBlXCIsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGRlZi5zaGFwZTtcbiAgICB9KTtcbiAgICBfaW5zdGFsbExhenlNZXRob2RzKGluc3QsIFwiWm9kT2JqZWN0XCIsIHtcbiAgICAgICAga2V5b2YoKSB7XG4gICAgICAgICAgICByZXR1cm4gX2VudW0oT2JqZWN0LmtleXModGhpcy5fem9kLmRlZi5zaGFwZSkpO1xuICAgICAgICB9LFxuICAgICAgICBjYXRjaGFsbChjYXRjaGFsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoeyAuLi50aGlzLl96b2QuZGVmLCBjYXRjaGFsbDogY2F0Y2hhbGwgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBhc3N0aHJvdWdoKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoeyAuLi50aGlzLl96b2QuZGVmLCBjYXRjaGFsbDogdW5rbm93bigpIH0pO1xuICAgICAgICB9LFxuICAgICAgICBsb29zZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKHsgLi4udGhpcy5fem9kLmRlZiwgY2F0Y2hhbGw6IHVua25vd24oKSB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RyaWN0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoeyAuLi50aGlzLl96b2QuZGVmLCBjYXRjaGFsbDogbmV2ZXIoKSB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RyaXAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSh7IC4uLnRoaXMuX3pvZC5kZWYsIGNhdGNoYWxsOiB1bmRlZmluZWQgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGV4dGVuZChpbmNvbWluZykge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWwuZXh0ZW5kKHRoaXMsIGluY29taW5nKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2FmZUV4dGVuZChpbmNvbWluZykge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWwuc2FmZUV4dGVuZCh0aGlzLCBpbmNvbWluZyk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmdlKG90aGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbC5tZXJnZSh0aGlzLCBvdGhlcik7XG4gICAgICAgIH0sXG4gICAgICAgIHBpY2sobWFzaykge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWwucGljayh0aGlzLCBtYXNrKTtcbiAgICAgICAgfSxcbiAgICAgICAgb21pdChtYXNrKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbC5vbWl0KHRoaXMsIG1hc2spO1xuICAgICAgICB9LFxuICAgICAgICBwYXJ0aWFsKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlsLnBhcnRpYWwoWm9kT3B0aW9uYWwsIHRoaXMsIGFyZ3NbMF0pO1xuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlZCguLi5hcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbC5yZXF1aXJlZChab2ROb25PcHRpb25hbCwgdGhpcywgYXJnc1swXSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBvYmplY3Qoc2hhcGUsIHBhcmFtcykge1xuICAgIGNvbnN0IGRlZiA9IHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgc2hhcGU6IHNoYXBlID8/IHt9LFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3QoZGVmKTtcbn1cbi8vIHN0cmljdE9iamVjdFxuZXhwb3J0IGZ1bmN0aW9uIHN0cmljdE9iamVjdChzaGFwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBzaGFwZSxcbiAgICAgICAgY2F0Y2hhbGw6IG5ldmVyKCksXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBsb29zZU9iamVjdFxuZXhwb3J0IGZ1bmN0aW9uIGxvb3NlT2JqZWN0KHNoYXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHNoYXBlLFxuICAgICAgICBjYXRjaGFsbDogdW5rbm93bigpLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFVuaW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFVuaW9uXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RVbmlvbi5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnVuaW9uUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0Lm9wdGlvbnMgPSBkZWYub3B0aW9ucztcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHVuaW9uKG9wdGlvbnMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kVW5pb24oe1xuICAgICAgICB0eXBlOiBcInVuaW9uXCIsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kWG9yID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFhvclwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgWm9kVW5pb24uaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZFhvci5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnVuaW9uUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0Lm9wdGlvbnMgPSBkZWYub3B0aW9ucztcbn0pO1xuLyoqIENyZWF0ZXMgYW4gZXhjbHVzaXZlIHVuaW9uIChYT1IpIHdoZXJlIGV4YWN0bHkgb25lIG9wdGlvbiBtdXN0IG1hdGNoLlxuICogVW5saWtlIHJlZ3VsYXIgdW5pb25zIHRoYXQgc3VjY2VlZCB3aGVuIGFueSBvcHRpb24gbWF0Y2hlcywgeG9yIGZhaWxzIGlmXG4gKiB6ZXJvIG9yIG1vcmUgdGhhbiBvbmUgb3B0aW9uIG1hdGNoZXMgdGhlIGlucHV0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHhvcihvcHRpb25zLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZFhvcih7XG4gICAgICAgIHR5cGU6IFwidW5pb25cIixcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2REaXNjcmltaW5hdGVkVW5pb24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRGlzY3JpbWluYXRlZFVuaW9uXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBab2RVbmlvbi5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kRGlzY3JpbWluYXRlZFVuaW9uLmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGRpc2NyaW1pbmF0ZWRVbmlvbihkaXNjcmltaW5hdG9yLCBvcHRpb25zLCBwYXJhbXMpIHtcbiAgICAvLyBjb25zdCBbb3B0aW9ucywgcGFyYW1zXSA9IGFyZ3M7XG4gICAgcmV0dXJuIG5ldyBab2REaXNjcmltaW5hdGVkVW5pb24oe1xuICAgICAgICB0eXBlOiBcInVuaW9uXCIsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIGRpc2NyaW1pbmF0b3IsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kSW50ZXJzZWN0aW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEludGVyc2VjdGlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kSW50ZXJzZWN0aW9uLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuaW50ZXJzZWN0aW9uUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdGlvbihsZWZ0LCByaWdodCkge1xuICAgIHJldHVybiBuZXcgWm9kSW50ZXJzZWN0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnRlcnNlY3Rpb25cIixcbiAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgcmlnaHQ6IHJpZ2h0LFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFR1cGxlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFR1cGxlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RUdXBsZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnR1cGxlUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnJlc3QgPSAocmVzdCkgPT4gaW5zdC5jbG9uZSh7XG4gICAgICAgIC4uLmluc3QuX3pvZC5kZWYsXG4gICAgICAgIHJlc3Q6IHJlc3QsXG4gICAgfSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB0dXBsZShpdGVtcywgX3BhcmFtc09yUmVzdCwgX3BhcmFtcykge1xuICAgIGNvbnN0IGhhc1Jlc3QgPSBfcGFyYW1zT3JSZXN0IGluc3RhbmNlb2YgY29yZS4kWm9kVHlwZTtcbiAgICBjb25zdCBwYXJhbXMgPSBoYXNSZXN0ID8gX3BhcmFtcyA6IF9wYXJhbXNPclJlc3Q7XG4gICAgY29uc3QgcmVzdCA9IGhhc1Jlc3QgPyBfcGFyYW1zT3JSZXN0IDogbnVsbDtcbiAgICByZXR1cm4gbmV3IFpvZFR1cGxlKHtcbiAgICAgICAgdHlwZTogXCJ0dXBsZVwiLFxuICAgICAgICBpdGVtczogaXRlbXMsXG4gICAgICAgIHJlc3QsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kUmVjb3JkID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFJlY29yZFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kUmVjb3JkLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMucmVjb3JkUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LmtleVR5cGUgPSBkZWYua2V5VHlwZTtcbiAgICBpbnN0LnZhbHVlVHlwZSA9IGRlZi52YWx1ZVR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiByZWNvcmQoa2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJhbXMpIHtcbiAgICAvLyB2My1jb21wYXQ6IHoucmVjb3JkKHZhbHVlVHlwZSwgcGFyYW1zPykg4oCUIGRlZmF1bHRzIGtleVR5cGUgdG8gei5zdHJpbmcoKVxuICAgIGlmICghdmFsdWVUeXBlIHx8ICF2YWx1ZVR5cGUuX3pvZCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFJlY29yZCh7XG4gICAgICAgICAgICB0eXBlOiBcInJlY29yZFwiLFxuICAgICAgICAgICAga2V5VHlwZTogc3RyaW5nKCksXG4gICAgICAgICAgICB2YWx1ZVR5cGU6IGtleVR5cGUsXG4gICAgICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyh2YWx1ZVR5cGUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBab2RSZWNvcmQoe1xuICAgICAgICB0eXBlOiBcInJlY29yZFwiLFxuICAgICAgICBrZXlUeXBlLFxuICAgICAgICB2YWx1ZVR5cGU6IHZhbHVlVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIHR5cGUgYWxrc2pmID0gY29yZS5vdXRwdXQ8Y29yZS4kWm9kUmVjb3JkS2V5PjtcbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsUmVjb3JkKGtleVR5cGUsIHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgY29uc3QgayA9IGNvcmUuY2xvbmUoa2V5VHlwZSk7XG4gICAgay5fem9kLnZhbHVlcyA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbmV3IFpvZFJlY29yZCh7XG4gICAgICAgIHR5cGU6IFwicmVjb3JkXCIsXG4gICAgICAgIGtleVR5cGU6IGssXG4gICAgICAgIHZhbHVlVHlwZTogdmFsdWVUeXBlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGxvb3NlUmVjb3JkKGtleVR5cGUsIHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RSZWNvcmQoe1xuICAgICAgICB0eXBlOiBcInJlY29yZFwiLFxuICAgICAgICBrZXlUeXBlLFxuICAgICAgICB2YWx1ZVR5cGU6IHZhbHVlVHlwZSxcbiAgICAgICAgbW9kZTogXCJsb29zZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZE1hcCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RNYXBcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZE1hcC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLm1hcFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5rZXlUeXBlID0gZGVmLmtleVR5cGU7XG4gICAgaW5zdC52YWx1ZVR5cGUgPSBkZWYudmFsdWVUeXBlO1xuICAgIGluc3QubWluID0gKC4uLmFyZ3MpID0+IGluc3QuY2hlY2soY29yZS5fbWluU2l6ZSguLi5hcmdzKSk7XG4gICAgaW5zdC5ub25lbXB0eSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fbWluU2l6ZSgxLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1heCA9ICguLi5hcmdzKSA9PiBpbnN0LmNoZWNrKGNvcmUuX21heFNpemUoLi4uYXJncykpO1xuICAgIGluc3Quc2l6ZSA9ICguLi5hcmdzKSA9PiBpbnN0LmNoZWNrKGNvcmUuX3NpemUoLi4uYXJncykpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbWFwKGtleVR5cGUsIHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RNYXAoe1xuICAgICAgICB0eXBlOiBcIm1hcFwiLFxuICAgICAgICBrZXlUeXBlOiBrZXlUeXBlLFxuICAgICAgICB2YWx1ZVR5cGU6IHZhbHVlVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RTZXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kU2V0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RTZXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5zZXRQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QubWluID0gKC4uLmFyZ3MpID0+IGluc3QuY2hlY2soY29yZS5fbWluU2l6ZSguLi5hcmdzKSk7XG4gICAgaW5zdC5ub25lbXB0eSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fbWluU2l6ZSgxLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1heCA9ICguLi5hcmdzKSA9PiBpbnN0LmNoZWNrKGNvcmUuX21heFNpemUoLi4uYXJncykpO1xuICAgIGluc3Quc2l6ZSA9ICguLi5hcmdzKSA9PiBpbnN0LmNoZWNrKGNvcmUuX3NpemUoLi4uYXJncykpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gc2V0KHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RTZXQoe1xuICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICB2YWx1ZVR5cGU6IHZhbHVlVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RFbnVtID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEVudW1cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZEVudW0uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5lbnVtUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LmVudW0gPSBkZWYuZW50cmllcztcbiAgICBpbnN0Lm9wdGlvbnMgPSBPYmplY3QudmFsdWVzKGRlZi5lbnRyaWVzKTtcbiAgICBjb25zdCBrZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhkZWYuZW50cmllcykpO1xuICAgIGluc3QuZXh0cmFjdCA9ICh2YWx1ZXMsIHBhcmFtcykgPT4ge1xuICAgICAgICBjb25zdCBuZXdFbnRyaWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAoa2V5cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgbmV3RW50cmllc1t2YWx1ZV0gPSBkZWYuZW50cmllc1t2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHt2YWx1ZX0gbm90IGZvdW5kIGluIGVudW1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFpvZEVudW0oe1xuICAgICAgICAgICAgLi4uZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgICAgICBlbnRyaWVzOiBuZXdFbnRyaWVzLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGluc3QuZXhjbHVkZSA9ICh2YWx1ZXMsIHBhcmFtcykgPT4ge1xuICAgICAgICBjb25zdCBuZXdFbnRyaWVzID0geyAuLi5kZWYuZW50cmllcyB9O1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgaWYgKGtleXMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdFbnRyaWVzW3ZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEtleSAke3ZhbHVlfSBub3QgZm91bmQgaW4gZW51bWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kRW51bSh7XG4gICAgICAgICAgICAuLi5kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgICAgIGVudHJpZXM6IG5ld0VudHJpZXMsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIF9lbnVtKHZhbHVlcywgcGFyYW1zKSB7XG4gICAgY29uc3QgZW50cmllcyA9IEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IE9iamVjdC5mcm9tRW50cmllcyh2YWx1ZXMubWFwKCh2KSA9PiBbdiwgdl0pKSA6IHZhbHVlcztcbiAgICByZXR1cm4gbmV3IFpvZEVudW0oe1xuICAgICAgICB0eXBlOiBcImVudW1cIixcbiAgICAgICAgZW50cmllcyxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCB7IF9lbnVtIGFzIGVudW0gfTtcbi8qKiBAZGVwcmVjYXRlZCBUaGlzIEFQSSBoYXMgYmVlbiBtZXJnZWQgaW50byBgei5lbnVtKClgLiBVc2UgYHouZW51bSgpYCBpbnN0ZWFkLlxuICpcbiAqIGBgYHRzXG4gKiBlbnVtIENvbG9ycyB7IHJlZCwgZ3JlZW4sIGJsdWUgfVxuICogei5lbnVtKENvbG9ycyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hdGl2ZUVudW0oZW50cmllcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RFbnVtKHtcbiAgICAgICAgdHlwZTogXCJlbnVtXCIsXG4gICAgICAgIGVudHJpZXMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kTGl0ZXJhbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RMaXRlcmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RMaXRlcmFsLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMubGl0ZXJhbFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC52YWx1ZXMgPSBuZXcgU2V0KGRlZi52YWx1ZXMpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0LCBcInZhbHVlXCIsIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgaWYgKGRlZi52YWx1ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgc2NoZW1hIGNvbnRhaW5zIG11bHRpcGxlIHZhbGlkIGxpdGVyYWwgdmFsdWVzLiBVc2UgYC52YWx1ZXNgIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRlZi52YWx1ZXNbMF07XG4gICAgICAgIH0sXG4gICAgfSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBsaXRlcmFsKHZhbHVlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZExpdGVyYWwoe1xuICAgICAgICB0eXBlOiBcImxpdGVyYWxcIixcbiAgICAgICAgdmFsdWVzOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RGaWxlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEZpbGVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZEZpbGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5maWxlUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0Lm1pbiA9IChzaXplLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fbWluU2l6ZShzaXplLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1heCA9IChzaXplLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fbWF4U2l6ZShzaXplLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1pbWUgPSAodHlwZXMsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9taW1lKEFycmF5LmlzQXJyYXkodHlwZXMpID8gdHlwZXMgOiBbdHlwZXNdLCBwYXJhbXMpKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGUocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2ZpbGUoWm9kRmlsZSwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RUcmFuc2Zvcm0gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVHJhbnNmb3JtXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RUcmFuc2Zvcm0uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy50cmFuc2Zvcm1Qcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIGlmIChfY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kRW5jb2RlRXJyb3IoaW5zdC5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLmFkZElzc3VlID0gKGlzc3VlKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlzc3VlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh1dGlsLmlzc3VlKGlzc3VlLCBwYXlsb2FkLnZhbHVlLCBkZWYpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGZvciBab2QgMyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZmF0YWwpXG4gICAgICAgICAgICAgICAgICAgIF9pc3N1ZS5jb250aW51ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIF9pc3N1ZS5jb2RlID8/IChfaXNzdWUuY29kZSA9IFwiY3VzdG9tXCIpO1xuICAgICAgICAgICAgICAgIF9pc3N1ZS5pbnB1dCA/PyAoX2lzc3VlLmlucHV0ID0gcGF5bG9hZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgX2lzc3VlLmluc3QgPz8gKF9pc3N1ZS5pbnN0ID0gaW5zdCk7XG4gICAgICAgICAgICAgICAgLy8gX2lzc3VlLmNvbnRpbnVlID8/PSB0cnVlO1xuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2godXRpbC5pc3N1ZShfaXNzdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gZGVmLnRyYW5zZm9ybShwYXlsb2FkLnZhbHVlLCBwYXlsb2FkKTtcbiAgICAgICAgaWYgKG91dHB1dCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQudGhlbigob3V0cHV0KSA9PiB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG91dHB1dDtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmZhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBvdXRwdXQ7XG4gICAgICAgIHBheWxvYWQuZmFsbGJhY2sgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgcmV0dXJuIG5ldyBab2RUcmFuc2Zvcm0oe1xuICAgICAgICB0eXBlOiBcInRyYW5zZm9ybVwiLFxuICAgICAgICB0cmFuc2Zvcm06IGZuLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZE9wdGlvbmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE9wdGlvbmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RPcHRpb25hbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLm9wdGlvbmFsUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gb3B0aW9uYWwoaW5uZXJUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBab2RPcHRpb25hbCh7XG4gICAgICAgIHR5cGU6IFwib3B0aW9uYWxcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kRXhhY3RPcHRpb25hbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RFeGFjdE9wdGlvbmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RFeGFjdE9wdGlvbmFsLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMub3B0aW9uYWxQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBleGFjdE9wdGlvbmFsKGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgWm9kRXhhY3RPcHRpb25hbCh7XG4gICAgICAgIHR5cGU6IFwib3B0aW9uYWxcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kTnVsbGFibGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTnVsbGFibGVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZE51bGxhYmxlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMubnVsbGFibGVQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBudWxsYWJsZShpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFpvZE51bGxhYmxlKHtcbiAgICAgICAgdHlwZTogXCJudWxsYWJsZVwiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbi8vIG51bGxpc2hcbmV4cG9ydCBmdW5jdGlvbiBudWxsaXNoKGlubmVyVHlwZSkge1xuICAgIHJldHVybiBvcHRpb25hbChudWxsYWJsZShpbm5lclR5cGUpKTtcbn1cbmV4cG9ydCBjb25zdCBab2REZWZhdWx0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZERlZmF1bHRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZERlZmF1bHQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5kZWZhdWx0UHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xuICAgIGluc3QucmVtb3ZlRGVmYXVsdCA9IGluc3QudW53cmFwO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gX2RlZmF1bHQoaW5uZXJUeXBlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IFpvZERlZmF1bHQoe1xuICAgICAgICB0eXBlOiBcImRlZmF1bHRcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgICAgIGdldCBkZWZhdWx0VmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gZGVmYXVsdFZhbHVlKCkgOiB1dGlsLnNoYWxsb3dDbG9uZShkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFByZWZhdWx0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFByZWZhdWx0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RQcmVmYXVsdC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnByZWZhdWx0UHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gcHJlZmF1bHQoaW5uZXJUeXBlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IFpvZFByZWZhdWx0KHtcbiAgICAgICAgdHlwZTogXCJwcmVmYXVsdFwiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZSxcbiAgICAgICAgZ2V0IGRlZmF1bHRWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyBkZWZhdWx0VmFsdWUoKSA6IHV0aWwuc2hhbGxvd0Nsb25lKGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kTm9uT3B0aW9uYWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTm9uT3B0aW9uYWxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZE5vbk9wdGlvbmFsLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMubm9ub3B0aW9uYWxQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBub25vcHRpb25hbChpbm5lclR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kTm9uT3B0aW9uYWwoe1xuICAgICAgICB0eXBlOiBcIm5vbm9wdGlvbmFsXCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFN1Y2Nlc3MgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kU3VjY2Vzc1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kU3VjY2Vzcy5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnN1Y2Nlc3NQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBzdWNjZXNzKGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgWm9kU3VjY2Vzcyh7XG4gICAgICAgIHR5cGU6IFwic3VjY2Vzc1wiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RDYXRjaCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDYXRjaFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kQ2F0Y2guaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5jYXRjaFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC51bndyYXAgPSAoKSA9PiBpbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbiAgICBpbnN0LnJlbW92ZUNhdGNoID0gaW5zdC51bndyYXA7XG59KTtcbmZ1bmN0aW9uIF9jYXRjaChpbm5lclR5cGUsIGNhdGNoVmFsdWUpIHtcbiAgICByZXR1cm4gbmV3IFpvZENhdGNoKHtcbiAgICAgICAgdHlwZTogXCJjYXRjaFwiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZSxcbiAgICAgICAgY2F0Y2hWYWx1ZTogKHR5cGVvZiBjYXRjaFZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyBjYXRjaFZhbHVlIDogKCkgPT4gY2F0Y2hWYWx1ZSksXG4gICAgfSk7XG59XG5leHBvcnQgeyBfY2F0Y2ggYXMgY2F0Y2ggfTtcbmV4cG9ydCBjb25zdCBab2ROYU4gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTmFOXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2ROYU4uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5uYW5Qcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbmFuKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9uYW4oWm9kTmFOLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFBpcGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kUGlwZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kUGlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnBpcGVQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QuaW4gPSBkZWYuaW47XG4gICAgaW5zdC5vdXQgPSBkZWYub3V0O1xufSk7XG5leHBvcnQgZnVuY3Rpb24gcGlwZShpbl8sIG91dCkge1xuICAgIHJldHVybiBuZXcgWm9kUGlwZSh7XG4gICAgICAgIHR5cGU6IFwicGlwZVwiLFxuICAgICAgICBpbjogaW5fLFxuICAgICAgICBvdXQ6IG91dCxcbiAgICAgICAgLy8gLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RDb2RlYyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDb2RlY1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgWm9kUGlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kQ29kZWMuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gY29kZWMoaW5fLCBvdXQsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kQ29kZWMoe1xuICAgICAgICB0eXBlOiBcInBpcGVcIixcbiAgICAgICAgaW46IGluXyxcbiAgICAgICAgb3V0OiBvdXQsXG4gICAgICAgIHRyYW5zZm9ybTogcGFyYW1zLmRlY29kZSxcbiAgICAgICAgcmV2ZXJzZVRyYW5zZm9ybTogcGFyYW1zLmVuY29kZSxcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnRDb2RlYyhjb2RlYykge1xuICAgIGNvbnN0IGRlZiA9IGNvZGVjLl96b2QuZGVmO1xuICAgIHJldHVybiBuZXcgWm9kQ29kZWMoe1xuICAgICAgICB0eXBlOiBcInBpcGVcIixcbiAgICAgICAgaW46IGRlZi5vdXQsXG4gICAgICAgIG91dDogZGVmLmluLFxuICAgICAgICB0cmFuc2Zvcm06IGRlZi5yZXZlcnNlVHJhbnNmb3JtLFxuICAgICAgICByZXZlcnNlVHJhbnNmb3JtOiBkZWYudHJhbnNmb3JtLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFByZXByb2Nlc3MgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kUHJlcHJvY2Vzc1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgWm9kUGlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kUHJlcHJvY2Vzcy5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCBab2RSZWFkb25seSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RSZWFkb25seVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kUmVhZG9ubHkuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5yZWFkb25seVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC51bndyYXAgPSAoKSA9PiBpbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRvbmx5KGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgWm9kUmVhZG9ubHkoe1xuICAgICAgICB0eXBlOiBcInJlYWRvbmx5XCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFRlbXBsYXRlTGl0ZXJhbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RUZW1wbGF0ZUxpdGVyYWxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFRlbXBsYXRlTGl0ZXJhbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnRlbXBsYXRlTGl0ZXJhbFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZUxpdGVyYWwocGFydHMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kVGVtcGxhdGVMaXRlcmFsKHtcbiAgICAgICAgdHlwZTogXCJ0ZW1wbGF0ZV9saXRlcmFsXCIsXG4gICAgICAgIHBhcnRzLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZExhenkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTGF6eVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kTGF6eS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmxhenlQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5nZXR0ZXIoKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGxhenkoZ2V0dGVyKSB7XG4gICAgcmV0dXJuIG5ldyBab2RMYXp5KHtcbiAgICAgICAgdHlwZTogXCJsYXp5XCIsXG4gICAgICAgIGdldHRlcjogZ2V0dGVyLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFByb21pc2UgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kUHJvbWlzZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kUHJvbWlzZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnByb21pc2VQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlKGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgWm9kUHJvbWlzZSh7XG4gICAgICAgIHR5cGU6IFwicHJvbWlzZVwiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RGdW5jdGlvbiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RGdW5jdGlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kRnVuY3Rpb24uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5mdW5jdGlvblByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBfZnVuY3Rpb24ocGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RGdW5jdGlvbih7XG4gICAgICAgIHR5cGU6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgaW5wdXQ6IEFycmF5LmlzQXJyYXkocGFyYW1zPy5pbnB1dCkgPyB0dXBsZShwYXJhbXM/LmlucHV0KSA6IChwYXJhbXM/LmlucHV0ID8/IGFycmF5KHVua25vd24oKSkpLFxuICAgICAgICBvdXRwdXQ6IHBhcmFtcz8ub3V0cHV0ID8/IHVua25vd24oKSxcbiAgICB9KTtcbn1cbmV4cG9ydCB7IF9mdW5jdGlvbiBhcyBmdW5jdGlvbiB9O1xuZXhwb3J0IGNvbnN0IFpvZEN1c3RvbSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDdXN0b21cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZEN1c3RvbS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmN1c3RvbVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbi8vIGN1c3RvbSBjaGVja3NcbmV4cG9ydCBmdW5jdGlvbiBjaGVjayhmbikge1xuICAgIGNvbnN0IGNoID0gbmV3IGNvcmUuJFpvZENoZWNrKHtcbiAgICAgICAgY2hlY2s6IFwiY3VzdG9tXCIsXG4gICAgICAgIC8vIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG4gICAgY2guX3pvZC5jaGVjayA9IGZuO1xuICAgIHJldHVybiBjaDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjdXN0b20oZm4sIF9wYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fY3VzdG9tKFpvZEN1c3RvbSwgZm4gPz8gKCgpID0+IHRydWUpLCBfcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWZpbmUoZm4sIF9wYXJhbXMgPSB7fSkge1xuICAgIHJldHVybiBjb3JlLl9yZWZpbmUoWm9kQ3VzdG9tLCBmbiwgX3BhcmFtcyk7XG59XG4vLyBzdXBlclJlZmluZVxuZXhwb3J0IGZ1bmN0aW9uIHN1cGVyUmVmaW5lKGZuLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fc3VwZXJSZWZpbmUoZm4sIHBhcmFtcyk7XG59XG4vLyBSZS1leHBvcnQgZGVzY3JpYmUgYW5kIG1ldGEgZnJvbSBjb3JlXG5leHBvcnQgY29uc3QgZGVzY3JpYmUgPSBjb3JlLmRlc2NyaWJlO1xuZXhwb3J0IGNvbnN0IG1ldGEgPSBjb3JlLm1ldGE7XG5mdW5jdGlvbiBfaW5zdGFuY2VvZihjbHMsIHBhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgaW5zdCA9IG5ldyBab2RDdXN0b20oe1xuICAgICAgICB0eXBlOiBcImN1c3RvbVwiLFxuICAgICAgICBjaGVjazogXCJjdXN0b21cIixcbiAgICAgICAgZm46IChkYXRhKSA9PiBkYXRhIGluc3RhbmNlb2YgY2xzLFxuICAgICAgICBhYm9ydDogdHJ1ZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuYmFnLkNsYXNzID0gY2xzO1xuICAgIC8vIE92ZXJyaWRlIGNoZWNrIHRvIGVtaXQgaW52YWxpZF90eXBlIGluc3RlYWQgb2YgY3VzdG9tXG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKCEocGF5bG9hZC52YWx1ZSBpbnN0YW5jZW9mIGNscykpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IGNscy5uYW1lLFxuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgcGF0aDogWy4uLihpbnN0Ll96b2QuZGVmLnBhdGggPz8gW10pXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gaW5zdDtcbn1cbmV4cG9ydCB7IF9pbnN0YW5jZW9mIGFzIGluc3RhbmNlb2YgfTtcbi8vIHN0cmluZ2Jvb2xcbmV4cG9ydCBjb25zdCBzdHJpbmdib29sID0gKC4uLmFyZ3MpID0+IGNvcmUuX3N0cmluZ2Jvb2woe1xuICAgIENvZGVjOiBab2RDb2RlYyxcbiAgICBCb29sZWFuOiBab2RCb29sZWFuLFxuICAgIFN0cmluZzogWm9kU3RyaW5nLFxufSwgLi4uYXJncyk7XG5leHBvcnQgZnVuY3Rpb24ganNvbihwYXJhbXMpIHtcbiAgICBjb25zdCBqc29uU2NoZW1hID0gbGF6eSgoKSA9PiB7XG4gICAgICAgIHJldHVybiB1bmlvbihbc3RyaW5nKHBhcmFtcyksIG51bWJlcigpLCBib29sZWFuKCksIF9udWxsKCksIGFycmF5KGpzb25TY2hlbWEpLCByZWNvcmQoc3RyaW5nKCksIGpzb25TY2hlbWEpXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGpzb25TY2hlbWE7XG59XG4vLyBwcmVwcm9jZXNzXG5leHBvcnQgZnVuY3Rpb24gcHJlcHJvY2Vzcyhmbiwgc2NoZW1hKSB7XG4gICAgcmV0dXJuIG5ldyBab2RQcmVwcm9jZXNzKHtcbiAgICAgICAgdHlwZTogXCJwaXBlXCIsXG4gICAgICAgIGluOiB0cmFuc2Zvcm0oZm4pLFxuICAgICAgICBvdXQ6IHNjaGVtYSxcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IGdsb2JhbFJlZ2lzdHJ5IH0gZnJvbSBcIi4uL2NvcmUvcmVnaXN0cmllcy5qc1wiO1xuaW1wb3J0ICogYXMgX2NoZWNrcyBmcm9tIFwiLi9jaGVja3MuanNcIjtcbmltcG9ydCAqIGFzIF9pc28gZnJvbSBcIi4vaXNvLmpzXCI7XG5pbXBvcnQgKiBhcyBfc2NoZW1hcyBmcm9tIFwiLi9zY2hlbWFzLmpzXCI7XG4vLyBMb2NhbCB6IG9iamVjdCB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IHdpdGggLi4vaW5kZXguanNcbmNvbnN0IHogPSB7XG4gICAgLi4uX3NjaGVtYXMsXG4gICAgLi4uX2NoZWNrcyxcbiAgICBpc286IF9pc28sXG59O1xuLy8gS2V5cyB0aGF0IGFyZSByZWNvZ25pemVkIGFuZCBoYW5kbGVkIGJ5IHRoZSBjb252ZXJzaW9uIGxvZ2ljXG5jb25zdCBSRUNPR05JWkVEX0tFWVMgPSAvKkBfX1BVUkVfXyovIG5ldyBTZXQoW1xuICAgIC8vIFNjaGVtYSBpZGVudGlmaWNhdGlvblxuICAgIFwiJHNjaGVtYVwiLFxuICAgIFwiJHJlZlwiLFxuICAgIFwiJGRlZnNcIixcbiAgICBcImRlZmluaXRpb25zXCIsXG4gICAgLy8gQ29yZSBzY2hlbWEga2V5d29yZHNcbiAgICBcIiRpZFwiLFxuICAgIFwiaWRcIixcbiAgICBcIiRjb21tZW50XCIsXG4gICAgXCIkYW5jaG9yXCIsXG4gICAgXCIkdm9jYWJ1bGFyeVwiLFxuICAgIFwiJGR5bmFtaWNSZWZcIixcbiAgICBcIiRkeW5hbWljQW5jaG9yXCIsXG4gICAgLy8gVHlwZVxuICAgIFwidHlwZVwiLFxuICAgIFwiZW51bVwiLFxuICAgIFwiY29uc3RcIixcbiAgICAvLyBDb21wb3NpdGlvblxuICAgIFwiYW55T2ZcIixcbiAgICBcIm9uZU9mXCIsXG4gICAgXCJhbGxPZlwiLFxuICAgIFwibm90XCIsXG4gICAgLy8gT2JqZWN0XG4gICAgXCJwcm9wZXJ0aWVzXCIsXG4gICAgXCJyZXF1aXJlZFwiLFxuICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIixcbiAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIsXG4gICAgXCJwcm9wZXJ0eU5hbWVzXCIsXG4gICAgXCJtaW5Qcm9wZXJ0aWVzXCIsXG4gICAgXCJtYXhQcm9wZXJ0aWVzXCIsXG4gICAgLy8gQXJyYXlcbiAgICBcIml0ZW1zXCIsXG4gICAgXCJwcmVmaXhJdGVtc1wiLFxuICAgIFwiYWRkaXRpb25hbEl0ZW1zXCIsXG4gICAgXCJtaW5JdGVtc1wiLFxuICAgIFwibWF4SXRlbXNcIixcbiAgICBcInVuaXF1ZUl0ZW1zXCIsXG4gICAgXCJjb250YWluc1wiLFxuICAgIFwibWluQ29udGFpbnNcIixcbiAgICBcIm1heENvbnRhaW5zXCIsXG4gICAgLy8gU3RyaW5nXG4gICAgXCJtaW5MZW5ndGhcIixcbiAgICBcIm1heExlbmd0aFwiLFxuICAgIFwicGF0dGVyblwiLFxuICAgIFwiZm9ybWF0XCIsXG4gICAgLy8gTnVtYmVyXG4gICAgXCJtaW5pbXVtXCIsXG4gICAgXCJtYXhpbXVtXCIsXG4gICAgXCJleGNsdXNpdmVNaW5pbXVtXCIsXG4gICAgXCJleGNsdXNpdmVNYXhpbXVtXCIsXG4gICAgXCJtdWx0aXBsZU9mXCIsXG4gICAgLy8gQWxyZWFkeSBoYW5kbGVkIG1ldGFkYXRhXG4gICAgXCJkZXNjcmlwdGlvblwiLFxuICAgIFwiZGVmYXVsdFwiLFxuICAgIC8vIENvbnRlbnRcbiAgICBcImNvbnRlbnRFbmNvZGluZ1wiLFxuICAgIFwiY29udGVudE1lZGlhVHlwZVwiLFxuICAgIFwiY29udGVudFNjaGVtYVwiLFxuICAgIC8vIFVuc3VwcG9ydGVkIChlcnJvci10aHJvd2luZylcbiAgICBcInVuZXZhbHVhdGVkSXRlbXNcIixcbiAgICBcInVuZXZhbHVhdGVkUHJvcGVydGllc1wiLFxuICAgIFwiaWZcIixcbiAgICBcInRoZW5cIixcbiAgICBcImVsc2VcIixcbiAgICBcImRlcGVuZGVudFNjaGVtYXNcIixcbiAgICBcImRlcGVuZGVudFJlcXVpcmVkXCIsXG4gICAgLy8gT3BlbkFQSVxuICAgIFwibnVsbGFibGVcIixcbiAgICBcInJlYWRPbmx5XCIsXG5dKTtcbmZ1bmN0aW9uIGRldGVjdFZlcnNpb24oc2NoZW1hLCBkZWZhdWx0VGFyZ2V0KSB7XG4gICAgY29uc3QgJHNjaGVtYSA9IHNjaGVtYS4kc2NoZW1hO1xuICAgIGlmICgkc2NoZW1hID09PSBcImh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiZHJhZnQtMjAyMC0xMlwiO1xuICAgIH1cbiAgICBpZiAoJHNjaGVtYSA9PT0gXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSNcIikge1xuICAgICAgICByZXR1cm4gXCJkcmFmdC03XCI7XG4gICAgfVxuICAgIGlmICgkc2NoZW1hID09PSBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hI1wiKSB7XG4gICAgICAgIHJldHVybiBcImRyYWZ0LTRcIjtcbiAgICB9XG4gICAgLy8gVXNlIGRlZmF1bHRUYXJnZXQgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBkZWZhdWx0IHRvIGRyYWZ0LTIwMjAtMTJcbiAgICByZXR1cm4gZGVmYXVsdFRhcmdldCA/PyBcImRyYWZ0LTIwMjAtMTJcIjtcbn1cbmZ1bmN0aW9uIHJlc29sdmVSZWYocmVmLCBjdHgpIHtcbiAgICBpZiAoIXJlZi5zdGFydHNXaXRoKFwiI1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHRlcm5hbCAkcmVmIGlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgbG9jYWwgcmVmcyAoIy8uLi4pIGFyZSBhbGxvd2VkXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gcmVmLnNsaWNlKDEpLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgLy8gSGFuZGxlIHJvb3QgcmVmZXJlbmNlIFwiI1wiXG4gICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBjdHgucm9vdFNjaGVtYTtcbiAgICB9XG4gICAgY29uc3QgZGVmc0tleSA9IGN0eC52ZXJzaW9uID09PSBcImRyYWZ0LTIwMjAtMTJcIiA/IFwiJGRlZnNcIiA6IFwiZGVmaW5pdGlvbnNcIjtcbiAgICBpZiAocGF0aFswXSA9PT0gZGVmc0tleSkge1xuICAgICAgICBjb25zdCBrZXkgPSBwYXRoWzFdO1xuICAgICAgICBpZiAoIWtleSB8fCAhY3R4LmRlZnNba2V5XSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke3JlZn1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3R4LmRlZnNba2V5XTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke3JlZn1gKTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRCYXNlU2NoZW1hKHNjaGVtYSwgY3R4KSB7XG4gICAgLy8gSGFuZGxlIHVuc3VwcG9ydGVkIGZlYXR1cmVzXG4gICAgaWYgKHNjaGVtYS5ub3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBTcGVjaWFsIGNhc2U6IHsgbm90OiB7fSB9IHJlcHJlc2VudHMgbmV2ZXJcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEubm90ID09PSBcIm9iamVjdFwiICYmIE9iamVjdC5rZXlzKHNjaGVtYS5ub3QpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHoubmV2ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaXMgbm90IHN1cHBvcnRlZCBpbiBab2QgKGV4Y2VwdCB7IG5vdDoge30gfSBmb3IgbmV2ZXIpXCIpO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLnVuZXZhbHVhdGVkSXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmV2YWx1YXRlZEl0ZW1zIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuICAgIGlmIChzY2hlbWEudW5ldmFsdWF0ZWRQcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuaWYgIT09IHVuZGVmaW5lZCB8fCBzY2hlbWEudGhlbiAhPT0gdW5kZWZpbmVkIHx8IHNjaGVtYS5lbHNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29uZGl0aW9uYWwgc2NoZW1hcyAoaWYvdGhlbi9lbHNlKSBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5kZXBlbmRlbnRTY2hlbWFzICE9PSB1bmRlZmluZWQgfHwgc2NoZW1hLmRlcGVuZGVudFJlcXVpcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGVwZW5kZW50U2NoZW1hcyBhbmQgZGVwZW5kZW50UmVxdWlyZWQgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuICAgIC8vIEhhbmRsZSAkcmVmXG4gICAgaWYgKHNjaGVtYS4kcmVmKSB7XG4gICAgICAgIGNvbnN0IHJlZlBhdGggPSBzY2hlbWEuJHJlZjtcbiAgICAgICAgaWYgKGN0eC5yZWZzLmhhcyhyZWZQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5yZWZzLmdldChyZWZQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LnByb2Nlc3NpbmcuaGFzKHJlZlBhdGgpKSB7XG4gICAgICAgICAgICAvLyBDaXJjdWxhciByZWZlcmVuY2UgLSB1c2UgbGF6eVxuICAgICAgICAgICAgcmV0dXJuIHoubGF6eSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdHgucmVmcy5oYXMocmVmUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaXJjdWxhciByZWZlcmVuY2Ugbm90IHJlc29sdmVkOiAke3JlZlBhdGh9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjdHgucmVmcy5nZXQocmVmUGF0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjdHgucHJvY2Vzc2luZy5hZGQocmVmUGF0aCk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVJlZihyZWZQYXRoLCBjdHgpO1xuICAgICAgICBjb25zdCB6b2RTY2hlbWEgPSBjb252ZXJ0U2NoZW1hKHJlc29sdmVkLCBjdHgpO1xuICAgICAgICBjdHgucmVmcy5zZXQocmVmUGF0aCwgem9kU2NoZW1hKTtcbiAgICAgICAgY3R4LnByb2Nlc3NpbmcuZGVsZXRlKHJlZlBhdGgpO1xuICAgICAgICByZXR1cm4gem9kU2NoZW1hO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgZW51bVxuICAgIGlmIChzY2hlbWEuZW51bSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGVudW1WYWx1ZXMgPSBzY2hlbWEuZW51bTtcbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlOiBPcGVuQVBJIDMuMCBudWxsIHJlcHJlc2VudGF0aW9uIHsgdHlwZTogXCJzdHJpbmdcIiwgbnVsbGFibGU6IHRydWUsIGVudW06IFtudWxsXSB9XG4gICAgICAgIGlmIChjdHgudmVyc2lvbiA9PT0gXCJvcGVuYXBpLTMuMFwiICYmXG4gICAgICAgICAgICBzY2hlbWEubnVsbGFibGUgPT09IHRydWUgJiZcbiAgICAgICAgICAgIGVudW1WYWx1ZXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICBlbnVtVmFsdWVzWzBdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gei5udWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudW1WYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gei5uZXZlcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnVtVmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHoubGl0ZXJhbChlbnVtVmFsdWVzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBpZiBhbGwgdmFsdWVzIGFyZSBzdHJpbmdzXG4gICAgICAgIGlmIChlbnVtVmFsdWVzLmV2ZXJ5KCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikpIHtcbiAgICAgICAgICAgIHJldHVybiB6LmVudW0oZW51bVZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWl4ZWQgdHlwZXMgLSB1c2UgdW5pb24gb2YgbGl0ZXJhbHNcbiAgICAgICAgY29uc3QgbGl0ZXJhbFNjaGVtYXMgPSBlbnVtVmFsdWVzLm1hcCgodikgPT4gei5saXRlcmFsKHYpKTtcbiAgICAgICAgaWYgKGxpdGVyYWxTY2hlbWFzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBsaXRlcmFsU2NoZW1hc1swXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gei51bmlvbihbbGl0ZXJhbFNjaGVtYXNbMF0sIGxpdGVyYWxTY2hlbWFzWzFdLCAuLi5saXRlcmFsU2NoZW1hcy5zbGljZSgyKV0pO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgY29uc3RcbiAgICBpZiAoc2NoZW1hLmNvbnN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHoubGl0ZXJhbChzY2hlbWEuY29uc3QpO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgdHlwZVxuICAgIGNvbnN0IHR5cGUgPSBzY2hlbWEudHlwZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgICAvLyBFeHBhbmQgdHlwZSBhcnJheSBpbnRvIGFueU9mIHVuaW9uXG4gICAgICAgIGNvbnN0IHR5cGVTY2hlbWFzID0gdHlwZS5tYXAoKHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVTY2hlbWEgPSB7IC4uLnNjaGVtYSwgdHlwZTogdCB9O1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRCYXNlU2NoZW1hKHR5cGVTY2hlbWEsIGN0eCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodHlwZVNjaGVtYXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gei5uZXZlcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlU2NoZW1hcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlU2NoZW1hc1swXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gei51bmlvbih0eXBlU2NoZW1hcyk7XG4gICAgfVxuICAgIGlmICghdHlwZSkge1xuICAgICAgICAvLyBObyB0eXBlIHNwZWNpZmllZCAtIGVtcHR5IHNjaGVtYSAoYW55KVxuICAgICAgICByZXR1cm4gei5hbnkoKTtcbiAgICB9XG4gICAgbGV0IHpvZFNjaGVtYTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOiB7XG4gICAgICAgICAgICBsZXQgc3RyaW5nU2NoZW1hID0gei5zdHJpbmcoKTtcbiAgICAgICAgICAgIC8vIEFwcGx5IGZvcm1hdCB1c2luZyAuY2hlY2soKSB3aXRoIFpvZCBmb3JtYXQgZnVuY3Rpb25zXG4gICAgICAgICAgICBpZiAoc2NoZW1hLmZvcm1hdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IHNjaGVtYS5mb3JtYXQ7XG4gICAgICAgICAgICAgICAgLy8gTWFwIGNvbW1vbiBmb3JtYXRzIHRvIFpvZCBjaGVjayBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ID09PSBcImVtYWlsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouZW1haWwoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJ1cmlcIiB8fCBmb3JtYXQgPT09IFwidXJpLXJlZmVyZW5jZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LnVybCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcInV1aWRcIiB8fCBmb3JtYXQgPT09IFwiZ3VpZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LnV1aWQoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJkYXRlLXRpbWVcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5pc28uZGF0ZXRpbWUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJkYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouaXNvLmRhdGUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJ0aW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouaXNvLnRpbWUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJkdXJhdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6Lmlzby5kdXJhdGlvbigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcImlwdjRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5pcHY0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwiaXB2NlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmlwdjYoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJtYWNcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5tYWMoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJjaWRyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouY2lkcnY0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwiY2lkci12NlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmNpZHJ2NigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcImJhc2U2NFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmJhc2U2NCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcImJhc2U2NHVybFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmJhc2U2NHVybCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcImUxNjRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5lMTY0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwiand0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouand0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwiZW1vamlcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5lbW9qaSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcIm5hbm9pZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6Lm5hbm9pZCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcImN1aWRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5jdWlkKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwiY3VpZDJcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5jdWlkMigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09PSBcInVsaWRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei51bGlkKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwieGlkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHoueGlkKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT09IFwia3N1aWRcIikge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5rc3VpZCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm90ZToganNvbi1zdHJpbmcgZm9ybWF0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IFpvZFxuICAgICAgICAgICAgICAgIC8vIEN1c3RvbSBmb3JtYXRzIGFyZSBpZ25vcmVkIC0ga2VlcCBhcyBwbGFpbiBzdHJpbmdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFwcGx5IGNvbnN0cmFpbnRzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5MZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEubWluKHNjaGVtYS5taW5MZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEubWF4TGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLm1heChzY2hlbWEubWF4TGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzY2hlbWEucGF0dGVybikge1xuICAgICAgICAgICAgICAgIC8vIEpTT04gU2NoZW1hIHBhdHRlcm5zIGFyZSBub3QgaW1wbGljaXRseSBhbmNob3JlZCAobWF0Y2ggYW55d2hlcmUgaW4gc3RyaW5nKVxuICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5yZWdleChuZXcgUmVnRXhwKHNjaGVtYS5wYXR0ZXJuKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB6b2RTY2hlbWEgPSBzdHJpbmdTY2hlbWE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6IHtcbiAgICAgICAgICAgIGxldCBudW1iZXJTY2hlbWEgPSB0eXBlID09PSBcImludGVnZXJcIiA/IHoubnVtYmVyKCkuaW50KCkgOiB6Lm51bWJlcigpO1xuICAgICAgICAgICAgLy8gQXBwbHkgY29uc3RyYWludHNcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEubWluKHNjaGVtYS5taW5pbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1heGltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEubWF4KHNjaGVtYS5tYXhpbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEuZ3Qoc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0gPT09IHRydWUgJiYgdHlwZW9mIHNjaGVtYS5taW5pbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyU2NoZW1hID0gbnVtYmVyU2NoZW1hLmd0KHNjaGVtYS5taW5pbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEubHQoc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0gPT09IHRydWUgJiYgdHlwZW9mIHNjaGVtYS5tYXhpbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyU2NoZW1hID0gbnVtYmVyU2NoZW1hLmx0KHNjaGVtYS5tYXhpbXVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm11bHRpcGxlT2YgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEubXVsdGlwbGVPZihzY2hlbWEubXVsdGlwbGVPZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB6b2RTY2hlbWEgPSBudW1iZXJTY2hlbWE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOiB7XG4gICAgICAgICAgICB6b2RTY2hlbWEgPSB6LmJvb2xlYW4oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJudWxsXCI6IHtcbiAgICAgICAgICAgIHpvZFNjaGVtYSA9IHoubnVsbCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IHt9O1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHNjaGVtYS5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVxdWlyZWRTZXQgPSBuZXcgU2V0KHNjaGVtYS5yZXF1aXJlZCB8fCBbXSk7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IHByb3BlcnRpZXMgLSBtYXJrIG9wdGlvbmFsIG9uZXNcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgcHJvcFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wWm9kU2NoZW1hID0gY29udmVydFNjaGVtYShwcm9wU2NoZW1hLCBjdHgpO1xuICAgICAgICAgICAgICAgIC8vIElmIG5vdCBpbiByZXF1aXJlZCBhcnJheSwgbWFrZSBpdCBvcHRpb25hbFxuICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSByZXF1aXJlZFNldC5oYXMoa2V5KSA/IHByb3Bab2RTY2hlbWEgOiBwcm9wWm9kU2NoZW1hLm9wdGlvbmFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIYW5kbGUgcHJvcGVydHlOYW1lc1xuICAgICAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5U2NoZW1hID0gY29udmVydFNjaGVtYShzY2hlbWEucHJvcGVydHlOYW1lcywgY3R4KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVNjaGVtYSA9IHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyAmJiB0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICAgICAgICAgID8gY29udmVydFNjaGVtYShzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMsIGN0eClcbiAgICAgICAgICAgICAgICAgICAgOiB6LmFueSgpO1xuICAgICAgICAgICAgICAgIC8vIENhc2UgQTogTm8gcHJvcGVydGllcyAocHVyZSByZWNvcmQpXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNoYXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgem9kU2NoZW1hID0gei5yZWNvcmQoa2V5U2NoZW1hLCB2YWx1ZVNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBDYXNlIEI6IFdpdGggcHJvcGVydGllcyAoaW50ZXJzZWN0aW9uIG9mIG9iamVjdCBhbmQgbG9vc2VSZWNvcmQpXG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0U2NoZW1hID0gei5vYmplY3Qoc2hhcGUpLnBhc3N0aHJvdWdoKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkU2NoZW1hID0gei5sb29zZVJlY29yZChrZXlTY2hlbWEsIHZhbHVlU2NoZW1hKTtcbiAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LmludGVyc2VjdGlvbihvYmplY3RTY2hlbWEsIHJlY29yZFNjaGVtYSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBIYW5kbGUgcGF0dGVyblByb3BlcnRpZXNcbiAgICAgICAgICAgIGlmIChzY2hlbWEucGF0dGVyblByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBwYXR0ZXJuUHJvcGVydGllczoga2V5cyBtYXRjaGluZyBwYXR0ZXJuIG11c3Qgc2F0aXNmeSBjb3JyZXNwb25kaW5nIHNjaGVtYVxuICAgICAgICAgICAgICAgIC8vIFVzZSBsb29zZSByZWNvcmRzIHNvIG5vbi1tYXRjaGluZyBrZXlzIHBhc3MgdGhyb3VnaFxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5Qcm9wcyA9IHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcztcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuS2V5cyA9IE9iamVjdC5rZXlzKHBhdHRlcm5Qcm9wcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9vc2VSZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5LZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5WYWx1ZSA9IGNvbnZlcnRTY2hlbWEocGF0dGVyblByb3BzW3BhdHRlcm5dLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlTY2hlbWEgPSB6LnN0cmluZygpLnJlZ2V4KG5ldyBSZWdFeHAocGF0dGVybikpO1xuICAgICAgICAgICAgICAgICAgICBsb29zZVJlY29yZHMucHVzaCh6Lmxvb3NlUmVjb3JkKGtleVNjaGVtYSwgcGF0dGVyblZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEJ1aWxkIGludGVyc2VjdGlvbjogb2JqZWN0IHNjaGVtYSArIGFsbCBwYXR0ZXJuIHByb3BlcnR5IHJlY29yZHNcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFzVG9JbnRlcnNlY3QgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2hhcGUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHBhc3N0aHJvdWdoIHNvIHBhdHRlcm5Qcm9wZXJ0aWVzIGNhbiB2YWxpZGF0ZSBhZGRpdGlvbmFsIGtleXNcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hc1RvSW50ZXJzZWN0LnB1c2goei5vYmplY3Qoc2hhcGUpLnBhc3N0aHJvdWdoKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzY2hlbWFzVG9JbnRlcnNlY3QucHVzaCguLi5sb29zZVJlY29yZHMpO1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWFzVG9JbnRlcnNlY3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHoub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWFzVG9JbnRlcnNlY3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHNjaGVtYXNUb0ludGVyc2VjdFswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoYWluIGludGVyc2VjdGlvbnM6IChBICYgQikgJiBDICYgRCAuLi5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHouaW50ZXJzZWN0aW9uKHNjaGVtYXNUb0ludGVyc2VjdFswXSwgc2NoZW1hc1RvSW50ZXJzZWN0WzFdKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCBzY2hlbWFzVG9JbnRlcnNlY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHouaW50ZXJzZWN0aW9uKHJlc3VsdCwgc2NoZW1hc1RvSW50ZXJzZWN0W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSGFuZGxlIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXG4gICAgICAgICAgICAvLyBJbiBKU09OIFNjaGVtYSwgYWRkaXRpb25hbFByb3BlcnRpZXMgZGVmYXVsdHMgdG8gdHJ1ZSAoYWxsb3cgYW55IGV4dHJhIHByb3BlcnRpZXMpXG4gICAgICAgICAgICAvLyBJbiBab2QsIG9iamVjdHMgc3RyaXAgdW5rbm93biBrZXlzIGJ5IGRlZmF1bHQsIHNvIHdlIG5lZWQgdG8gaGFuZGxlIHRoaXMgZXhwbGljaXRseVxuICAgICAgICAgICAgY29uc3Qgb2JqZWN0U2NoZW1hID0gei5vYmplY3Qoc2hhcGUpO1xuICAgICAgICAgICAgaWYgKHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBTdHJpY3QgbW9kZSAtIG5vIGV4dHJhIHByb3BlcnRpZXMgYWxsb3dlZFxuICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IG9iamVjdFNjaGVtYS5zdHJpY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICAvLyBFeHRyYSBwcm9wZXJ0aWVzIG11c3QgbWF0Y2ggdGhlIHNwZWNpZmllZCBzY2hlbWFcbiAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSBvYmplY3RTY2hlbWEuY2F0Y2hhbGwoY29udmVydFNjaGVtYShzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMsIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkaXRpb25hbFByb3BlcnRpZXMgaXMgdHJ1ZSBvciB1bmRlZmluZWQgLSBhbGxvdyBhbnkgZXh0cmEgcHJvcGVydGllcyAocGFzc3Rocm91Z2gpXG4gICAgICAgICAgICAgICAgem9kU2NoZW1hID0gb2JqZWN0U2NoZW1hLnBhc3N0aHJvdWdoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiYXJyYXlcIjoge1xuICAgICAgICAgICAgLy8gVE9ETzogdW5pcXVlSXRlbXMgaXMgbm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgLy8gVE9ETzogY29udGFpbnMvbWluQ29udGFpbnMvbWF4Q29udGFpbnMgYXJlIG5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSB0dXBsZSAocHJlZml4SXRlbXMgb3IgaXRlbXMgYXMgYXJyYXkpXG4gICAgICAgICAgICBjb25zdCBwcmVmaXhJdGVtcyA9IHNjaGVtYS5wcmVmaXhJdGVtcztcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gc2NoZW1hLml0ZW1zO1xuICAgICAgICAgICAgaWYgKHByZWZpeEl0ZW1zICYmIEFycmF5LmlzQXJyYXkocHJlZml4SXRlbXMpKSB7XG4gICAgICAgICAgICAgICAgLy8gVHVwbGUgd2l0aCBwcmVmaXhJdGVtcyAoZHJhZnQtMjAyMC0xMilcbiAgICAgICAgICAgICAgICBjb25zdCB0dXBsZUl0ZW1zID0gcHJlZml4SXRlbXMubWFwKChpdGVtKSA9PiBjb252ZXJ0U2NoZW1hKGl0ZW0sIGN0eCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBpdGVtcyAmJiB0eXBlb2YgaXRlbXMgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoaXRlbXMpXG4gICAgICAgICAgICAgICAgICAgID8gY29udmVydFNjaGVtYShpdGVtcywgY3R4KVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAocmVzdCkge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LnR1cGxlKHR1cGxlSXRlbXMpLnJlc3QocmVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LnR1cGxlKHR1cGxlSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBcHBseSBtaW5JdGVtcy9tYXhJdGVtcyBjb25zdHJhaW50cyB0byB0dXBsZXNcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5JdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6b2RTY2hlbWEuY2hlY2soei5taW5MZW5ndGgoc2NoZW1hLm1pbkl0ZW1zKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1heEl0ZW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHpvZFNjaGVtYS5jaGVjayh6Lm1heExlbmd0aChzY2hlbWEubWF4SXRlbXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgICAgIC8vIFR1cGxlIHdpdGggaXRlbXMgYXJyYXkgKGRyYWZ0LTcpXG4gICAgICAgICAgICAgICAgY29uc3QgdHVwbGVJdGVtcyA9IGl0ZW1zLm1hcCgoaXRlbSkgPT4gY29udmVydFNjaGVtYShpdGVtLCBjdHgpKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN0ID0gc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyAmJiB0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgICAgICA/IGNvbnZlcnRTY2hlbWEoc2NoZW1hLmFkZGl0aW9uYWxJdGVtcywgY3R4KVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDsgLy8gYWRkaXRpb25hbEl0ZW1zOiBmYWxzZSBtZWFucyBubyByZXN0LCBoYW5kbGVkIGJ5IGRlZmF1bHQgdHVwbGUgYmVoYXZpb3JcbiAgICAgICAgICAgICAgICBpZiAocmVzdCkge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LnR1cGxlKHR1cGxlSXRlbXMpLnJlc3QocmVzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LnR1cGxlKHR1cGxlSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBcHBseSBtaW5JdGVtcy9tYXhJdGVtcyBjb25zdHJhaW50cyB0byB0dXBsZXNcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5JdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6b2RTY2hlbWEuY2hlY2soei5taW5MZW5ndGgoc2NoZW1hLm1pbkl0ZW1zKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1heEl0ZW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHpvZFNjaGVtYS5jaGVjayh6Lm1heExlbmd0aChzY2hlbWEubWF4SXRlbXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpdGVtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVndWxhciBhcnJheVxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb252ZXJ0U2NoZW1hKGl0ZW1zLCBjdHgpO1xuICAgICAgICAgICAgICAgIGxldCBhcnJheVNjaGVtYSA9IHouYXJyYXkoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgLy8gQXBwbHkgY29uc3RyYWludHNcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5JdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVNjaGVtYSA9IGFycmF5U2NoZW1hLm1pbihzY2hlbWEubWluSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5tYXhJdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVNjaGVtYSA9IGFycmF5U2NoZW1hLm1heChzY2hlbWEubWF4SXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSBhcnJheVNjaGVtYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE5vIGl0ZW1zIHNwZWNpZmllZCAtIGFycmF5IG9mIGFueVxuICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHouYXJyYXkoei5hbnkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB0eXBlOiAke3R5cGV9YCk7XG4gICAgfVxuICAgIHJldHVybiB6b2RTY2hlbWE7XG59XG5mdW5jdGlvbiBjb252ZXJ0U2NoZW1hKHNjaGVtYSwgY3R4KSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWEgPyB6LmFueSgpIDogei5uZXZlcigpO1xuICAgIH1cbiAgICAvLyBDb252ZXJ0IGJhc2Ugc2NoZW1hIGZpcnN0IChpZ25vcmluZyBjb21wb3NpdGlvbiBrZXl3b3JkcylcbiAgICBsZXQgYmFzZVNjaGVtYSA9IGNvbnZlcnRCYXNlU2NoZW1hKHNjaGVtYSwgY3R4KTtcbiAgICBjb25zdCBoYXNFeHBsaWNpdFR5cGUgPSBzY2hlbWEudHlwZSB8fCBzY2hlbWEuZW51bSAhPT0gdW5kZWZpbmVkIHx8IHNjaGVtYS5jb25zdCAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIFByb2Nlc3MgY29tcG9zaXRpb24ga2V5d29yZHMgTEFTVCAodGhleSBjYW4gYXBwZWFyIHRvZ2V0aGVyKVxuICAgIC8vIEhhbmRsZSBhbnlPZiAtIHdyYXAgYmFzZSBzY2hlbWEgd2l0aCB1bmlvblxuICAgIGlmIChzY2hlbWEuYW55T2YgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEuYW55T2YpKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzY2hlbWEuYW55T2YubWFwKChzKSA9PiBjb252ZXJ0U2NoZW1hKHMsIGN0eCkpO1xuICAgICAgICBjb25zdCBhbnlPZlVuaW9uID0gei51bmlvbihvcHRpb25zKTtcbiAgICAgICAgYmFzZVNjaGVtYSA9IGhhc0V4cGxpY2l0VHlwZSA/IHouaW50ZXJzZWN0aW9uKGJhc2VTY2hlbWEsIGFueU9mVW5pb24pIDogYW55T2ZVbmlvbjtcbiAgICB9XG4gICAgLy8gSGFuZGxlIG9uZU9mIC0gZXhjbHVzaXZlIHVuaW9uIChleGFjdGx5IG9uZSBtdXN0IG1hdGNoKVxuICAgIGlmIChzY2hlbWEub25lT2YgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEub25lT2YpKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzY2hlbWEub25lT2YubWFwKChzKSA9PiBjb252ZXJ0U2NoZW1hKHMsIGN0eCkpO1xuICAgICAgICBjb25zdCBvbmVPZlVuaW9uID0gei54b3Iob3B0aW9ucyk7XG4gICAgICAgIGJhc2VTY2hlbWEgPSBoYXNFeHBsaWNpdFR5cGUgPyB6LmludGVyc2VjdGlvbihiYXNlU2NoZW1hLCBvbmVPZlVuaW9uKSA6IG9uZU9mVW5pb247XG4gICAgfVxuICAgIC8vIEhhbmRsZSBhbGxPZiAtIHdyYXAgYmFzZSBzY2hlbWEgd2l0aCBpbnRlcnNlY3Rpb25cbiAgICBpZiAoc2NoZW1hLmFsbE9mICYmIEFycmF5LmlzQXJyYXkoc2NoZW1hLmFsbE9mKSkge1xuICAgICAgICBpZiAoc2NoZW1hLmFsbE9mLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgYmFzZVNjaGVtYSA9IGhhc0V4cGxpY2l0VHlwZSA/IGJhc2VTY2hlbWEgOiB6LmFueSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGhhc0V4cGxpY2l0VHlwZSA/IGJhc2VTY2hlbWEgOiBjb252ZXJ0U2NoZW1hKHNjaGVtYS5hbGxPZlswXSwgY3R4KTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gaGFzRXhwbGljaXRUeXBlID8gMCA6IDE7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRJZHg7IGkgPCBzY2hlbWEuYWxsT2YubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB6LmludGVyc2VjdGlvbihyZXN1bHQsIGNvbnZlcnRTY2hlbWEoc2NoZW1hLmFsbE9mW2ldLCBjdHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJhc2VTY2hlbWEgPSByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSGFuZGxlIG51bGxhYmxlIChPcGVuQVBJIDMuMClcbiAgICBpZiAoc2NoZW1hLm51bGxhYmxlID09PSB0cnVlICYmIGN0eC52ZXJzaW9uID09PSBcIm9wZW5hcGktMy4wXCIpIHtcbiAgICAgICAgYmFzZVNjaGVtYSA9IHoubnVsbGFibGUoYmFzZVNjaGVtYSk7XG4gICAgfVxuICAgIC8vIEhhbmRsZSByZWFkT25seVxuICAgIGlmIChzY2hlbWEucmVhZE9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgYmFzZVNjaGVtYSA9IHoucmVhZG9ubHkoYmFzZVNjaGVtYSk7XG4gICAgfVxuICAgIC8vIEFwcGx5IGBkZWZhdWx0YCBzbyBpdCB3cmFwcyB0aGUgZnVsbHktY29tcG9zZWQgc2NoZW1hLiBUaGlzIGVuc3VyZXNcbiAgICAvLyBgcGFyc2UodW5kZWZpbmVkKSAtPiBkZWZhdWx0YCB3b3JrcyByZWdhcmRsZXNzIG9mIHdoaWNoIGJyYW5jaCBvZlxuICAgIC8vIGBjb252ZXJ0QmFzZVNjaGVtYWAgcHJvZHVjZWQgdGhlIGlubmVyIHNjaGVtYSAoZW51bS9jb25zdC9ub3QvdHlwZWQvZXRjLikuXG4gICAgaWYgKHNjaGVtYS5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYmFzZVNjaGVtYSA9IGJhc2VTY2hlbWEuZGVmYXVsdChzY2hlbWEuZGVmYXVsdCk7XG4gICAgfVxuICAgIC8vIENvbGxlY3Qgbm9uLWRlc2NyaXB0aW9uIGFubm90YXRpb24gbWV0YWRhdGEgaW50byB0aGUgdXNlci1zdXBwbGllZFxuICAgIC8vIHJlZ2lzdHJ5LiBEZXNjcmlwdGlvbiBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgYmVsb3cgdmlhIGAuZGVzY3JpYmUoKWAgdG9cbiAgICAvLyBwcmVzZXJ2ZSB0aGUgY29udHJhY3QgdGhhdCBgc2NoZW1hLmRlc2NyaXB0aW9uYCByZWFkcyBmcm9tIGdsb2JhbFJlZ2lzdHJ5LlxuICAgIGNvbnN0IGV4dHJhTWV0YSA9IHt9O1xuICAgIGNvbnN0IGNvcmVNZXRhZGF0YUtleXMgPSBbXCIkaWRcIiwgXCJpZFwiLCBcIiRjb21tZW50XCIsIFwiJGFuY2hvclwiLCBcIiR2b2NhYnVsYXJ5XCIsIFwiJGR5bmFtaWNSZWZcIiwgXCIkZHluYW1pY0FuY2hvclwiXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb3JlTWV0YWRhdGFLZXlzKSB7XG4gICAgICAgIGlmIChrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICBleHRyYU1ldGFba2V5XSA9IHNjaGVtYVtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbnRlbnRNZXRhZGF0YUtleXMgPSBbXCJjb250ZW50RW5jb2RpbmdcIiwgXCJjb250ZW50TWVkaWFUeXBlXCIsIFwiY29udGVudFNjaGVtYVwiXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb250ZW50TWV0YWRhdGFLZXlzKSB7XG4gICAgICAgIGlmIChrZXkgaW4gc2NoZW1hKSB7XG4gICAgICAgICAgICBleHRyYU1ldGFba2V5XSA9IHNjaGVtYVtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNjaGVtYSkpIHtcbiAgICAgICAgaWYgKCFSRUNPR05JWkVEX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGV4dHJhTWV0YVtrZXldID0gc2NoZW1hW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGV4dHJhTWV0YSkubGVuZ3RoID4gMCkge1xuICAgICAgICBjdHgucmVnaXN0cnkuYWRkKGJhc2VTY2hlbWEsIGV4dHJhTWV0YSk7XG4gICAgfVxuICAgIC8vIEFwcGx5IGRlc2NyaXB0aW9uIGxhc3QuIGAuZGVzY3JpYmUoKWAgY2xvbmVzIHRoZSBzY2hlbWEgYW5kIHNldHNcbiAgICAvLyBgX3pvZC5wYXJlbnRgIG9uIHRoZSBjbG9uZSwgc28gcmVnaXN0cnkgbG9va3VwcyBvbiB0aGUgcmV0dXJuZWQgcmVmZXJlbmNlXG4gICAgLy8gc3RpbGwgcmVzb2x2ZSBgZXh0cmFNZXRhYCB2aWEgcGFyZW50IGluaGVyaXRhbmNlLlxuICAgIGlmIChzY2hlbWEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgYmFzZVNjaGVtYSA9IGJhc2VTY2hlbWEuZGVzY3JpYmUoc2NoZW1hLmRlc2NyaXB0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGJhc2VTY2hlbWE7XG59XG4vKipcbiAqIENvbnZlcnRzIGEgSlNPTiBTY2hlbWEgdG8gYSBab2Qgc2NoZW1hLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjb25zaWRlcmVkIHNlbWktZXhwZXJpbWVudGFsLiBJdCdzIGJlaGF2aW9yIGlzIGxpYWJsZSB0byBjaGFuZ2UuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUpTT05TY2hlbWEoc2NoZW1hLCBwYXJhbXMpIHtcbiAgICAvLyBIYW5kbGUgYm9vbGVhbiBzY2hlbWFzXG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWEgPyB6LmFueSgpIDogei5uZXZlcigpO1xuICAgIH1cbiAgICAvLyBOb3JtYWxpemUgaW5wdXQgdmlhIGEgSlNPTiByb3VuZC10cmlwLiBUaGlzIGd1YXJhbnRlZXMgdGhlIGNvbnZlcnRlclxuICAgIC8vIHdhbGtzIGEgcGxhaW4sIGZpbml0ZSwgSlNPTi12YWxpZCBvYmplY3QgZ3JhcGg6IGN5Y2xpYyBpbnB1dHMgZmFpbCBoZXJlLFxuICAgIC8vIGdldHRlci9Qcm94eS1iYXNlZCBwcm9wZXJ0aWVzIGFyZSBtYXRlcmlhbGl6ZWQgaW50byBzdGF0aWMgdmFsdWVzLCBhbmRcbiAgICAvLyBjbGFzcyBpbnN0YW5jZXMgY29sbGFwc2UgdG8gcGxhaW4gb2JqZWN0cy5cbiAgICBsZXQgbm9ybWFsaXplZDtcbiAgICB0cnkge1xuICAgICAgICBub3JtYWxpemVkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzY2hlbWEpKTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmcm9tSlNPTlNjaGVtYSBpbnB1dCBpcyBub3QgdmFsaWQgSlNPTiAocG9zc2libHkgY3ljbGljKTsgdXNlICRkZWZzLyRyZWYgZm9yIHJlY3Vyc2l2ZSBzY2hlbWFzXCIpO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uID0gZGV0ZWN0VmVyc2lvbihub3JtYWxpemVkLCBwYXJhbXM/LmRlZmF1bHRUYXJnZXQpO1xuICAgIGNvbnN0IGRlZnMgPSAobm9ybWFsaXplZC4kZGVmcyB8fCBub3JtYWxpemVkLmRlZmluaXRpb25zIHx8IHt9KTtcbiAgICBjb25zdCBjdHggPSB7XG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIGRlZnMsXG4gICAgICAgIHJlZnM6IG5ldyBNYXAoKSxcbiAgICAgICAgcHJvY2Vzc2luZzogbmV3IFNldCgpLFxuICAgICAgICByb290U2NoZW1hOiBub3JtYWxpemVkLFxuICAgICAgICByZWdpc3RyeTogcGFyYW1zPy5yZWdpc3RyeSA/PyBnbG9iYWxSZWdpc3RyeSxcbiAgICB9O1xuICAgIHJldHVybiBjb252ZXJ0U2NoZW1hKG5vcm1hbGl6ZWQsIGN0eCk7XG59XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNldmVyaXR5KHNldmVyaXR5Pzogc3RyaW5nKTogJ2hpZ2gnIHwgJ2NyaXRpY2FsJyB8ICdtZWRpdW0nIHwgJ2xvdycgfCB1bmRlZmluZWQge1xuICBzd2l0Y2ggKHNldmVyaXR5Py50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGlnaCc6XG4gICAgICByZXR1cm4gJ2hpZ2gnO1xuICAgIGNhc2UgJ2NyaXRpY2FsJzpcbiAgICAgIHJldHVybiAnY3JpdGljYWwnO1xuICAgIGNhc2UgJ21lZGl1bSc6XG4gICAgICByZXR1cm4gJ21lZGl1bSc7XG4gICAgY2FzZSAnbG93JzpcbiAgICBjYXNlICduZWdsaWdpYmxlJzpcbiAgICAgIHJldHVybiAnbG93JztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIE5vIGpzb24tc2NoZW1hIGlzIHByb3ZpZGVkIGZvciBncnlwZSBqc29uIG91dHB1dFxuICogV2FpdGluZyBvbiB1cHN0cmVhbSBodHRwczovL2dpdGh1Yi5jb20vYW5jaG9yZS9ncnlwZS9pc3N1ZXMvMjE0XG4gKi9cbmV4cG9ydCBjb25zdCBHcnlwZURvY3VtZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICBtYXRjaGVzOiB6LmFycmF5KFxuICAgIHoub2JqZWN0KHtcbiAgICAgIHZ1bG5lcmFiaWxpdHk6IHoub2JqZWN0KHtcbiAgICAgICAgaWQ6IHouc3RyaW5nKCksXG4gICAgICAgIHNldmVyaXR5OiB6LnN0cmluZygpLm9wdGlvbmFsKCkudHJhbnNmb3JtKG5vcm1hbGl6ZVNldmVyaXR5KSxcbiAgICAgICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgIH0pLFxuICAgIH0pLFxuICApLFxufSk7XG5cbmV4cG9ydCB0eXBlIERvY3VtZW50ID0gei5vdXRwdXQ8dHlwZW9mIEdyeXBlRG9jdW1lbnRTY2hlbWE+O1xuIiwie1xuICBcIiRzY2hlbWFcIjogXCJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYVwiLFxuICBcIiRpZFwiOiBcImFuY2hvcmUuaW8vc2NoZW1hL3N5ZnQvanNvbi8xNi4xLjMvZG9jdW1lbnRcIixcbiAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Eb2N1bWVudFwiLFxuICBcIiRkZWZzXCI6IHtcbiAgICBcIkFscG1EYkVudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiYmFzZXBhY2thZ2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCYXNlUGFja2FnZSBpcyB0aGUgYmFzZSBwYWNrYWdlIG5hbWUgdGhpcyBwYWNrYWdlIHdhcyBidWlsdCBmcm9tIChzb3VyY2UgcGFja2FnZSBpbiBBcmNoIGJ1aWxkIHN5c3RlbSlcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhY2thZ2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYWNrYWdlIGlzIHRoZSBwYWNrYWdlIG5hbWUgYXMgZm91bmQgaW4gdGhlIGRlc2MgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvbiBhcyBmb3VuZCBpbiB0aGUgZGVzYyBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0aW9uIGlzIGEgaHVtYW4tcmVhZGFibGUgcGFja2FnZSBkZXNjcmlwdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl0ZWN0dXJlIGlzIHRoZSB0YXJnZXQgQ1BVIGFyY2hpdGVjdHVyZSBhcyBkZWZpbmVkIGluIEFyY2ggYXJjaGl0ZWN0dXJlIHNwZWMgKGUuZy4geDg2XzY0LCBhYXJjaDY0LCBvciBcXFwiYW55XFxcIiBmb3IgYXJjaC1pbmRlcGVuZGVudCBwYWNrYWdlcylcIlxuICAgICAgICB9LFxuICAgICAgICBcInNpemVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2l6ZSBpcyB0aGUgaW5zdGFsbGVkIHNpemUgaW4gYnl0ZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhY2thZ2VyXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFja2FnZXIgaXMgdGhlIG5hbWUgYW5kIGVtYWlsIG9mIHRoZSBwZXJzb24gd2hvIHBhY2thZ2VkIHRoaXMgKFJGQzgyMiBmb3JtYXQpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkwgaXMgdGhlIHVwc3RyZWFtIHByb2plY3QgVVJMXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2YWxpZGF0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmFsaWRhdGlvbiBpcyB0aGUgdmFsaWRhdGlvbiBtZXRob2QgdXNlZCBmb3IgcGFja2FnZSBpbnRlZ3JpdHkgKGUuZy4gcGdwIHNpZ25hdHVyZSwgc2hhMjU2IGNoZWNrc3VtKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVhc29uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlYXNvbiBpcyB0aGUgaW5zdGFsbGF0aW9uIHJlYXNvbiB0cmFja2VkIGJ5IHBhY21hbiAoMD1leHBsaWNpdGx5IGluc3RhbGxlZCBieSB1c2VyLCAxPWluc3RhbGxlZCBhcyBkZXBlbmRlbmN5KVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9BbHBtRmlsZVJlY29yZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlcyBhcmUgdGhlIGZpbGVzIGluc3RhbGxlZCBieSB0aGlzIHBhY2thZ2VcIlxuICAgICAgICB9LFxuICAgICAgICBcImJhY2t1cFwiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0FscG1GaWxlUmVjb3JkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkJhY2t1cCBpcyB0aGUgbGlzdCBvZiBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgcGFjbWFuIGJhY2tzIHVwIGJlZm9yZSB1cGdyYWRlc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvdmlkZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlByb3ZpZGVzIGFyZSB2aXJ0dWFsIHBhY2thZ2VzIHByb3ZpZGVkIGJ5IHRoaXMgcGFja2FnZSAoYWxsb3dzIG90aGVyIHBhY2thZ2VzIHRvIGRlcGVuZCBvbiBjYXBhYmlsaXRpZXMgcmF0aGVyIHRoYW4gc3BlY2lmaWMgcGFja2FnZXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRzIGFyZSB0aGUgcnVudGltZSBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgYnkgdGhpcyBwYWNrYWdlXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiYmFzZXBhY2thZ2VcIixcbiAgICAgICAgXCJwYWNrYWdlXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCIsXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCIsXG4gICAgICAgIFwic2l6ZVwiLFxuICAgICAgICBcInBhY2thZ2VyXCIsXG4gICAgICAgIFwidXJsXCIsXG4gICAgICAgIFwidmFsaWRhdGlvblwiLFxuICAgICAgICBcInJlYXNvblwiLFxuICAgICAgICBcImZpbGVzXCIsXG4gICAgICAgIFwiYmFja3VwXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQWxwbURCRW50cnkgaXMgYSBzdHJ1Y3QgdGhhdCByZXByZXNlbnRzIHRoZSBwYWNrYWdlIGRhdGEgc3RvcmVkIGluIHRoZSBwYWNtYW4gZmxhdC1maWxlIHN0b3JlcyBmb3IgYXJjaCBsaW51eC5cIlxuICAgIH0sXG4gICAgXCJBbHBtRmlsZVJlY29yZFwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRoIGlzIHRoZSBmaWxlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGZpbGVzeXN0ZW0gcm9vdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlR5cGUgaXMgdGhlIGZpbGUgdHlwZSAoZS5nLiByZWd1bGFyIGZpbGUsIGRpcmVjdG9yeSwgc3ltbGluaylcIlxuICAgICAgICB9LFxuICAgICAgICBcInVpZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlVJRCBpcyB0aGUgZmlsZSBvd25lciB1c2VyIElEIGFzIHJlY29yZGVkIGJ5IHBhY21hblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ2lkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR0lEIGlzIHRoZSBmaWxlIG93bmVyIGdyb3VwIElEIGFzIHJlY29yZGVkIGJ5IHBhY21hblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGltZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJmb3JtYXRcIjogXCJkYXRlLXRpbWVcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGltZSBpcyB0aGUgZmlsZSBtb2RpZmljYXRpb24gdGltZXN0YW1wXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzaXplXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2l6ZSBpcyB0aGUgZmlsZSBzaXplIGluIGJ5dGVzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsaW5rXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGluayBpcyB0aGUgc3ltbGluayB0YXJnZXQgcGF0aCBpZiB0aGlzIGlzIGEgc3ltbGlua1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGlnZXN0XCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRGlnZXN0XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRpZ2VzdHMgY29udGFpbnMgZmlsZSBjb250ZW50IGhhc2hlcyBmb3IgaW50ZWdyaXR5IHZlcmlmaWNhdGlvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBbHBtRmlsZVJlY29yZCByZXByZXNlbnRzIGEgc2luZ2xlIGZpbGUgZW50cnkgd2l0aGluIGFuIEFyY2ggTGludXggcGFja2FnZSB3aXRoIGl0cyBhc3NvY2lhdGVkIG1ldGFkYXRhIHRyYWNrZWQgYnkgcGFjbWFuLlwiXG4gICAgfSxcbiAgICBcIkFwa0RiRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJwYWNrYWdlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFja2FnZSBpcyB0aGUgcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHRoZSBpbnN0YWxsZWQgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwib3JpZ2luUGFja2FnZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk9yaWdpblBhY2thZ2UgaXMgdGhlIG9yaWdpbmFsIHNvdXJjZSBwYWNrYWdlIG5hbWUgdGhpcyBiaW5hcnkgd2FzIGJ1aWx0IGZyb20gKHVzZWQgdG8gdHJhY2sgd2hpY2ggYXBvcnQvc291cmNlIGJ1aWx0IHRoaXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYWludGFpbmVyXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWFpbnRhaW5lciBpcyB0aGUgcGFja2FnZSBtYWludGFpbmVyIG5hbWUgYW5kIGVtYWlsXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyB0aGUgcGFja2FnZSB2ZXJzaW9uIGFzIGZvdW5kIGluIHRoZSBpbnN0YWxsZWQgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl0ZWN0dXJlIGlzIHRoZSB0YXJnZXQgQ1BVIGFyY2hpdGVjdHVyZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVVJMIGlzIHRoZSB1cHN0cmVhbSBwcm9qZWN0IFVSTFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXNjcmlwdGlvbiBpcyBhIGh1bWFuLXJlYWRhYmxlIHBhY2thZ2UgZGVzY3JpcHRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpemVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2l6ZSBpcyB0aGUgcGFja2FnZSBhcmNoaXZlIHNpemUgaW4gYnl0ZXMgKC5hcGsgZmlsZSBzaXplKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW5zdGFsbGVkU2l6ZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJbnN0YWxsZWRTaXplIGlzIHRoZSB0b3RhbCBzaXplIG9mIGluc3RhbGxlZCBmaWxlcyBpbiBieXRlc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHVsbERlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVwZW5kZW5jaWVzIGFyZSB0aGUgcnVudGltZSBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgYnkgdGhpcyBwYWNrYWdlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwcm92aWRlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHJvdmlkZXMgYXJlIHZpcnR1YWwgcGFja2FnZXMgcHJvdmlkZWQgYnkgdGhpcyBwYWNrYWdlIChmb3IgY2FwYWJpbGl0eS1iYXNlZCBkZXBlbmRlbmNpZXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwdWxsQ2hlY2tzdW1cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDaGVja3N1bSBpcyB0aGUgcGFja2FnZSBjb250ZW50IGNoZWNrc3VtIGZvciBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJnaXRDb21taXRPZkFwa1BvcnRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJHaXRDb21taXQgaXMgdGhlIGdpdCBjb21taXQgaGFzaCBvZiB0aGUgQVBLIHBvcnQgZGVmaW5pdGlvbiBpbiBBbHBpbmUncyBhcG9ydHMgcmVwb3NpdG9yeVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9BcGtGaWxlUmVjb3JkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGFyZSB0aGUgZmlsZXMgaW5zdGFsbGVkIGJ5IHRoaXMgcGFja2FnZVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInBhY2thZ2VcIixcbiAgICAgICAgXCJvcmlnaW5QYWNrYWdlXCIsXG4gICAgICAgIFwibWFpbnRhaW5lclwiLFxuICAgICAgICBcInZlcnNpb25cIixcbiAgICAgICAgXCJhcmNoaXRlY3R1cmVcIixcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiLFxuICAgICAgICBcInNpemVcIixcbiAgICAgICAgXCJpbnN0YWxsZWRTaXplXCIsXG4gICAgICAgIFwicHVsbERlcGVuZGVuY2llc1wiLFxuICAgICAgICBcInByb3ZpZGVzXCIsXG4gICAgICAgIFwicHVsbENoZWNrc3VtXCIsXG4gICAgICAgIFwiZ2l0Q29tbWl0T2ZBcGtQb3J0XCIsXG4gICAgICAgIFwiZmlsZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBcGtEQkVudHJ5IHJlcHJlc2VudHMgYWxsIGNhcHR1cmVkIGRhdGEgZm9yIHRoZSBhbHBpbmUgbGludXggcGFja2FnZSBtYW5hZ2VyIGZsYXQtZmlsZSBzdG9yZS5cIlxuICAgIH0sXG4gICAgXCJBcGtGaWxlUmVjb3JkXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGggaXMgdGhlIGZpbGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgZmlsZXN5c3RlbSByb290XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJvd25lclVpZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk93bmVyVUlEIGlzIHRoZSBmaWxlIG93bmVyIHVzZXIgSURcIlxuICAgICAgICB9LFxuICAgICAgICBcIm93bmVyR2lkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT3duZXJHSUQgaXMgdGhlIGZpbGUgb3duZXIgZ3JvdXAgSURcIlxuICAgICAgICB9LFxuICAgICAgICBcInBlcm1pc3Npb25zXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGVybWlzc2lvbnMgaXMgdGhlIGZpbGUgcGVybWlzc2lvbiBtb2RlIHN0cmluZyAoZS5nLiBcXFwiMDc1NVxcXCIsIFxcXCIwNjQ0XFxcIilcIlxuICAgICAgICB9LFxuICAgICAgICBcImRpZ2VzdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9EaWdlc3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGlnZXN0IGlzIHRoZSBmaWxlIGNvbnRlbnQgaGFzaCBmb3IgaW50ZWdyaXR5IHZlcmlmaWNhdGlvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInBhdGhcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBcGtGaWxlUmVjb3JkIHJlcHJlc2VudHMgYSBzaW5nbGUgZmlsZSBsaXN0aW5nIGFuZCBtZXRhZGF0YSBmcm9tIGEgQVBLIERCIGVudHJ5ICh3aGljaCBtYXkgaGF2ZSBtYW55IG9mIHRoZXNlIGZpbGUgcmVjb3JkcykuXCJcbiAgICB9LFxuICAgIFwiQmluYXJ5U2lnbmF0dXJlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibWF0Y2hlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0NsYXNzaWZpZXJNYXRjaFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm1hdGNoZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCaW5hcnlTaWduYXR1cmUgcmVwcmVzZW50cyBhIHNldCBvZiBtYXRjaGVkIHZhbHVlcyB3aXRoaW4gYSBiaW5hcnkgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJCaXRuYW1pU2JvbUVudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIHBhY2thZ2UgbmFtZSBhcyBmb3VuZCBpbiB0aGUgQml0bmFtaSBTUERYIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcImFyY2hcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBcmNoaXRlY3R1cmUgaXMgdGhlIHRhcmdldCBDUFUgYXJjaGl0ZWN0dXJlIChhbWQ2NCBvciBhcm02NCBpbiBCaXRuYW1pIGltYWdlcylcIlxuICAgICAgICB9LFxuICAgICAgICBcImRpc3Ryb1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRpc3RybyBpcyB0aGUgZGlzdHJpYnV0aW9uIG5hbWUgdGhpcyBwYWNrYWdlIGlzIGZvciAoYmFzZSBPUyBsaWtlIGRlYmlhbiwgdWJ1bnR1LCBldGMuKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmV2aXNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZXZpc2lvbiBpcyB0aGUgQml0bmFtaS1zcGVjaWZpYyBwYWNrYWdlIHJldmlzaW9uIG51bWJlciAoaW5jcmVtZW50ZWQgZm9yIEJpdG5hbWkgcmVidWlsZHMgb2Ygc2FtZSB1cHN0cmVhbSB2ZXJzaW9uKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvbiBhcyBmb3VuZCBpbiB0aGUgQml0bmFtaSBTUERYIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRoIGlzIHRoZSBpbnN0YWxsYXRpb24gcGF0aCBpbiB0aGUgZmlsZXN5c3RlbSB3aGVyZSB0aGUgcGFja2FnZSBpcyBsb2NhdGVkXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWxlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRmlsZXMgYXJlIHRoZSBmaWxlIHBhdGhzIG93bmVkIGJ5IHRoaXMgcGFja2FnZSAodHJhY2tlZCB2aWEgU1BEWCByZWxhdGlvbnNoaXBzKVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJhcmNoXCIsXG4gICAgICAgIFwiZGlzdHJvXCIsXG4gICAgICAgIFwicmV2aXNpb25cIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICBcImZpbGVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQml0bmFtaVNCT01FbnRyeSByZXByZXNlbnRzIGFsbCBjYXB0dXJlZCBkYXRhIGZyb20gQml0bmFtaSBwYWNrYWdlcyBkZXNjcmliZWQgaW4gQml0bmFtaScgU1BEWCBmaWxlcy5cIlxuICAgIH0sXG4gICAgXCJDQ29uYW5GaWxlRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZWZcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWYgaXMgdGhlIHBhY2thZ2UgcmVmZXJlbmNlIHN0cmluZyBpbiBmb3JtYXQgbmFtZS92ZXJzaW9uQHVzZXIvY2hhbm5lbFwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlZlwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbmFuZmlsZUVudHJ5IHJlcHJlc2VudHMgYSBzaW5nbGUgXFxcIlJlcXVpcmVzXFxcIiBlbnRyeSBmcm9tIGEgY29uYW5maWxlLnR4dC5cIlxuICAgIH0sXG4gICAgXCJDQ29uYW5JbmZvRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZWZcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWYgaXMgdGhlIHBhY2thZ2UgcmVmZXJlbmNlIHN0cmluZyBpbiBmb3JtYXQgbmFtZS92ZXJzaW9uQHVzZXIvY2hhbm5lbFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGFja2FnZV9pZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhY2thZ2VJRCBpcyBhIHVuaXF1ZSBwYWNrYWdlIHZhcmlhbnQgaWRlbnRpZmllclwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlZlwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbmFuaW5mb0VudHJ5IHJlcHJlc2VudHMgYSBzaW5nbGUgXFxcImZ1bGxfcmVxdWlyZXNcXFwiIGVudHJ5IGZyb20gYSBjb25hbmluZm8udHh0LlwiXG4gICAgfSxcbiAgICBcIkNDb25hbkxvY2tFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInJlZlwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlZiBpcyB0aGUgcGFja2FnZSByZWZlcmVuY2Ugc3RyaW5nIGluIGZvcm1hdCBuYW1lL3ZlcnNpb25AdXNlci9jaGFubmVsXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYWNrYWdlX2lkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFja2FnZUlEIGlzIGEgdW5pcXVlIHBhY2thZ2UgdmFyaWFudCBpZGVudGlmaWVyIGNvbXB1dGVkIGZyb20gc2V0dGluZ3Mvb3B0aW9ucyAoc3RhdGljIGhhc2ggaW4gQ29uYW4gMS54LCBjYW4gaGF2ZSBjb2xsaXNpb25zIHdpdGggY29tcGxleCBkZXBlbmRlbmN5IGdyYXBocylcIlxuICAgICAgICB9LFxuICAgICAgICBcInByZXZcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQcmV2IGlzIHRoZSBwcmV2aW91cyBsb2NrIGVudHJ5IHJlZmVyZW5jZSBmb3IgdmVyc2lvbmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlcXVpcmVzIGFyZSB0aGUgcnVudGltZSBwYWNrYWdlIGRlcGVuZGVuY2llc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYnVpbGRfcmVxdWlyZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkJ1aWxkUmVxdWlyZXMgYXJlIHRoZSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyAoZS5nLiBjbWFrZSwgY29tcGlsZXJzKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHlfcmVxdWlyZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB5dGhvblJlcXVpcmVzIGFyZSB0aGUgUHl0aG9uIGRlcGVuZGVuY2llcyBuZWVkZWQgZm9yIENvbmFuIHJlY2lwZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcIm9wdGlvbnNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvS2V5VmFsdWVzXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk9wdGlvbnMgYXJlIHBhY2thZ2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzIGtleS12YWx1ZSBwYWlycyAoZS5nLiBzaGFyZWQ9VHJ1ZSwgZlBJQz1UcnVlKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGggaXMgdGhlIGZpbGVzeXN0ZW0gcGF0aCB0byB0aGUgcGFja2FnZSBpbiBDb25hbiBjYWNoZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29udGV4dFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbnRleHQgaXMgdGhlIGJ1aWxkIGNvbnRleHQgaW5mb3JtYXRpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJyZWZcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb25hblYxTG9ja0VudHJ5IHJlcHJlc2VudHMgYSBzaW5nbGUgXFxcIm5vZGVcXFwiIGVudHJ5IGZyb20gYSBjb25hbi5sb2NrIFYxIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiQ0NvbmFuTG9ja1YyRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZWZcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWYgaXMgdGhlIHBhY2thZ2UgcmVmZXJlbmNlIHN0cmluZyBpbiBmb3JtYXQgbmFtZS92ZXJzaW9uQHVzZXIvY2hhbm5lbFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGFja2FnZUlEXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFja2FnZUlEIGlzIGEgdW5pcXVlIHBhY2thZ2UgdmFyaWFudCBpZGVudGlmaWVyIChkeW5hbWljIGluIENvbmFuIDIuMCwgbW9yZSBhY2N1cmF0ZSB0aGFuIFYxKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidXNlcm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVc2VybmFtZSBpcyB0aGUgQ29uYW4gdXNlci9vcmdhbml6YXRpb24gbmFtZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY2hhbm5lbFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNoYW5uZWwgaXMgdGhlIENvbmFuIGNoYW5uZWwgbmFtZSBpbmRpY2F0aW5nIHN0YWJpbGl0eS9wdXJwb3NlIChlLmcuIHN0YWJsZSwgdGVzdGluZywgZXhwZXJpbWVudGFsKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVjaXBlUmV2aXNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWNpcGVSZXZpc2lvbiBpcyBhIGdpdC1saWtlIHJldmlzaW9uIGhhc2ggKFJSRVYpIG9mIHRoZSByZWNpcGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhY2thZ2VSZXZpc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhY2thZ2VSZXZpc2lvbiBpcyBhIGdpdC1saWtlIHJldmlzaW9uIGhhc2ggb2YgdGhlIGJ1aWx0IGJpbmFyeSBwYWNrYWdlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0aW1lc3RhbXBcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUaW1lU3RhbXAgaXMgd2hlbiB0aGlzIHBhY2thZ2Ugd2FzIGJ1aWx0L2xvY2tlZFwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlZlwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbmFuVjJMb2NrRW50cnkgcmVwcmVzZW50cyBhIHNpbmdsZSBcXFwibm9kZVxcXCIgZW50cnkgZnJvbSBhIGNvbmFuLmxvY2sgVjIgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJDUEVcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJjcGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWYWx1ZSBpcyB0aGUgQ1BFIHN0cmluZyBpZGVudGlmaWVyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic291cmNlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU291cmNlIGlzIHRoZSBzb3VyY2Ugd2hlcmUgdGhpcyBDUEUgd2FzIG9idGFpbmVkIG9yIGdlbmVyYXRlZCBmcm9tLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImNwZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNQRSByZXByZXNlbnRzIGEgQ29tbW9uIFBsYXRmb3JtIEVudW1lcmF0aW9uIGlkZW50aWZpZXIgdXNlZCBmb3IgbWF0Y2hpbmcgcGFja2FnZXMgdG8ga25vd24gdnVsbmVyYWJpbGl0aWVzIGluIHNlY3VyaXR5IGRhdGFiYXNlcy5cIlxuICAgIH0sXG4gICAgXCJDbGFzc2lmaWVyTWF0Y2hcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJjbGFzc2lmaWVyXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImxvY2F0aW9uXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0xvY2F0aW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiY2xhc3NpZmllclwiLFxuICAgICAgICBcImxvY2F0aW9uXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ2xhc3NpZmllck1hdGNoIHJlcHJlc2VudHMgYSBzaW5nbGUgbWF0Y2hlZCB2YWx1ZSB3aXRoaW4gYSBiaW5hcnkgZmlsZSBhbmQgdGhlIFxcXCJjbGFzc1xcXCIgbmFtZSB0aGUgc2VhcmNoIHBhdHRlcm4gcmVwcmVzZW50cy5cIlxuICAgIH0sXG4gICAgXCJDb2NvYVBvZGZpbGVMb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJjaGVja3N1bVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNoZWNrc3VtIGlzIHRoZSBTSEEtMSBoYXNoIG9mIHRoZSBwb2RzcGVjIGZpbGUgZm9yIGludGVncml0eSB2ZXJpZmljYXRpb24gKGdlbmVyYXRlZCB2aWEgYHBvZCBpcGMgc3BlYyAuLi4gfCBvcGVuc3NsIHNoYTFgKSwgZW5zdXJpbmcgYWxsIHRlYW0gbWVtYmVycyB1c2UgdGhlIHNhbWUgcG9kIHNwZWNpZmljYXRpb24gdmVyc2lvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImNoZWNrc3VtXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ29jb2FQb2RmaWxlTG9ja0VudHJ5IHJlcHJlc2VudHMgYSBzaW5nbGUgZW50cnkgZnJvbSB0aGUgXFxcIlBvZHNcXFwiIHNlY3Rpb24gb2YgYSBQb2RmaWxlLmxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJDb25kYUxpbmtcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2UgaXMgdGhlIG9yaWdpbmFsIHBhdGggd2hlcmUgdGhlIHBhY2thZ2Ugd2FzIGV4dHJhY3RlZCBmcm9tIGNhY2hlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUeXBlIGluZGljYXRlcyB0aGUgbGluayB0eXBlICgxIGZvciBoYXJkIGxpbmssIDIgZm9yIHNvZnQgbGluaywgMyBmb3IgY29weSkuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwic291cmNlXCIsXG4gICAgICAgIFwidHlwZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbmRhTGluayByZXByZXNlbnRzIGxpbmsgbWV0YWRhdGEgZnJvbSBhIENvbmRhIHBhY2thZ2UncyBsaW5rLmpzb24gZmlsZSBkZXNjcmliaW5nIHBhY2thZ2UgaW5zdGFsbGF0aW9uIHNvdXJjZS5cIlxuICAgIH0sXG4gICAgXCJDb25kYU1ldGFkYXRhRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJhcmNoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaCBpcyB0aGUgdGFyZ2V0IENQVSBhcmNoaXRlY3R1cmUgZm9yIHRoZSBwYWNrYWdlIChlLmcuLCBcXFwiYXJtNjRcXFwiLCBcXFwieDg2XzY0XFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyB0aGUgcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHRoZSBjb25kYS1tZXRhIEpTT04gZmlsZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBwYWNrYWdlIHZlcnNpb24gYXMgZm91bmQgaW4gdGhlIGNvbmRhLW1ldGEgSlNPTiBmaWxlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYnVpbGRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCdWlsZCBpcyB0aGUgYnVpbGQgc3RyaW5nIGlkZW50aWZpZXIgKGUuZy4sIFxcXCJoOTBkZmM5Ml8xMDE0XFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWlsZF9udW1iZXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQnVpbGROdW1iZXIgaXMgdGhlIHNlcXVlbnRpYWwgYnVpbGQgbnVtYmVyIGZvciB0aGlzIHZlcnNpb24uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjaGFubmVsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ2hhbm5lbCBpcyB0aGUgQ29uZGEgY2hhbm5lbCBVUkwgd2hlcmUgdGhlIHBhY2thZ2Ugd2FzIHJldHJpZXZlZCBmcm9tLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic3ViZGlyXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU3ViZGlyIGlzIHRoZSBzdWJkaXJlY3Rvcnkgd2l0aGluIHRoZSBjaGFubmVsIChlLmcuLCBcXFwib3N4LWFybTY0XFxcIiwgXFxcImxpbnV4LTY0XFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJub2FyY2hcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOb2FyY2ggaW5kaWNhdGVzIGlmIHRoZSBwYWNrYWdlIGlzIHBsYXRmb3JtLWluZGVwZW5kZW50IChlLmcuLCBcXFwicHl0aG9uXFxcIiwgXFxcImdlbmVyaWNcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImxpY2Vuc2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJMaWNlbnNlIGlzIHRoZSBwYWNrYWdlIGxpY2Vuc2UgaWRlbnRpZmllci5cIlxuICAgICAgICB9LFxuICAgICAgICBcImxpY2Vuc2VfZmFtaWx5XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGljZW5zZUZhbWlseSBpcyB0aGUgZ2VuZXJhbCBsaWNlbnNlIGNhdGVnb3J5IChlLmcuLCBcXFwiTUlUXFxcIiwgXFxcIkFwYWNoZVxcXCIsIFxcXCJHUExcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1kNVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1ENSBpcyB0aGUgTUQ1IGhhc2ggb2YgdGhlIHBhY2thZ2UgYXJjaGl2ZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNoYTI1NlwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNIQTI1NiBpcyB0aGUgU0hBLTI1NiBoYXNoIG9mIHRoZSBwYWNrYWdlIGFyY2hpdmUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzaXplXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNpemUgaXMgdGhlIHBhY2thZ2UgYXJjaGl2ZSBzaXplIGluIGJ5dGVzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGltZXN0YW1wXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRpbWVzdGFtcCBpcyB0aGUgVW5peCB0aW1lc3RhbXAgd2hlbiB0aGUgcGFja2FnZSB3YXMgYnVpbHQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVuYW1lIGlzIHRoZSBvcmlnaW5hbCBwYWNrYWdlIGFyY2hpdmUgZmlsZW5hbWUgKGUuZy4sIFxcXCJ6bGliLTEuMi4xMS1oOTBkZmM5Ml8xMDE0LnRhci5iejJcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlVSTCBpcyB0aGUgZnVsbCBkb3dubG9hZCBVUkwgZm9yIHRoZSBwYWNrYWdlIGFyY2hpdmUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRyYWN0ZWRfcGFja2FnZV9kaXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFeHRyYWN0ZWRQYWNrYWdlRGlyIGlzIHRoZSBsb2NhbCBjYWNoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHBhY2thZ2Ugd2FzIGV4dHJhY3RlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZHNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlcGVuZHMgaXMgdGhlIGxpc3Qgb2YgcnVudGltZSBkZXBlbmRlbmNpZXMgd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnRzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGlzIHRoZSBsaXN0IG9mIGZpbGVzIGluc3RhbGxlZCBieSB0aGlzIHBhY2thZ2UuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXRoc19kYXRhXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0NvbmRhUGF0aHNEYXRhXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGhzRGF0YSBjb250YWlucyBkZXRhaWxlZCBmaWxlIG1ldGFkYXRhIGZyb20gdGhlIHBhdGhzLmpzb24gZmlsZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImxpbmtcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQ29uZGFMaW5rXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxpbmsgY29udGFpbnMgaW5zdGFsbGF0aW9uIHNvdXJjZSBtZXRhZGF0YSBmcm9tIHRoZSBsaW5rLmpzb24gZmlsZS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcImJ1aWxkXCIsXG4gICAgICAgIFwiYnVpbGRfbnVtYmVyXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ29uZGFNZXRhUGFja2FnZSByZXByZXNlbnRzIG1ldGFkYXRhIGZvciBhIENvbmRhIHBhY2thZ2UgZXh0cmFjdGVkIGZyb20gdGhlIGNvbmRhLW1ldGEvKi5qc29uIGZpbGVzLlwiXG4gICAgfSxcbiAgICBcIkNvbmRhUGF0aERhdGFcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJfcGF0aFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGggaXMgdGhlIGZpbGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgQ29uZGEgZW52aXJvbm1lbnQgcm9vdC5cIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdGhfdHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGhUeXBlIGluZGljYXRlcyB0aGUgbGluayB0eXBlIGZvciB0aGUgZmlsZSAoZS5nLiwgXFxcImhhcmRsaW5rXFxcIiwgXFxcInNvZnRsaW5rXFxcIiwgXFxcImRpcmVjdG9yeVxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2hhMjU2XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU0hBMjU2IGlzIHRoZSBTSEEtMjU2IGhhc2ggb2YgdGhlIGZpbGUgY29udGVudHMuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzaGEyNTZfaW5fcHJlZml4XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU0hBMjU2SW5QcmVmaXggaXMgdGhlIFNIQS0yNTYgaGFzaCBvZiB0aGUgZmlsZSBhZnRlciBwcmVmaXggcmVwbGFjZW1lbnQgZHVyaW5nIGluc3RhbGxhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpemVfaW5fYnl0ZXNcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2l6ZUluQnl0ZXMgaXMgdGhlIGZpbGUgc2l6ZSBpbiBieXRlcy5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJfcGF0aFwiLFxuICAgICAgICBcInBhdGhfdHlwZVwiLFxuICAgICAgICBcInNoYTI1NlwiLFxuICAgICAgICBcInNoYTI1Nl9pbl9wcmVmaXhcIixcbiAgICAgICAgXCJzaXplX2luX2J5dGVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ29uZGFQYXRoRGF0YSByZXByZXNlbnRzIG1ldGFkYXRhIGZvciBhIHNpbmdsZSBmaWxlIHdpdGhpbiBhIENvbmRhIHBhY2thZ2UgZnJvbSB0aGUgcGF0aHMuanNvbiBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkNvbmRhUGF0aHNEYXRhXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicGF0aHNfdmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRoc1ZlcnNpb24gaXMgdGhlIHNjaGVtYSB2ZXJzaW9uIG9mIHRoZSBwYXRocyBkYXRhIGZvcm1hdC5cIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdGhzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQ29uZGFQYXRoRGF0YVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRocyBpcyB0aGUgbGlzdCBvZiBmaWxlIG1ldGFkYXRhIGVudHJpZXMgZm9yIGFsbCBmaWxlcyBpbiB0aGUgcGFja2FnZS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJwYXRoc192ZXJzaW9uXCIsXG4gICAgICAgIFwicGF0aHNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb25kYVBhdGhzRGF0YSByZXByZXNlbnRzIHRoZSBwYXRocy5qc29uIGZpbGUgc3RydWN0dXJlIGZyb20gYSBDb25kYSBwYWNrYWdlIGNvbnRhaW5pbmcgZmlsZSBtZXRhZGF0YS5cIlxuICAgIH0sXG4gICAgXCJDb29yZGluYXRlc1wiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWFsUGF0aCBpcyB0aGUgY2Fub25pY2FsIGFic29sdXRlIGZvcm0gb2YgdGhlIHBhdGggYWNjZXNzZWQgKGFsbCBzeW1ib2xpYyBsaW5rcyBoYXZlIGJlZW4gZm9sbG93ZWQgYW5kIHJlbGF0aXZlIHBhdGggY29tcG9uZW50cyBsaWtlICcuJyBhbmQgJy4uJyBoYXZlIGJlZW4gcmVtb3ZlZCkuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsYXllcklEXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRmlsZVN5c3RlbUlEIGlzIGFuIElEIHJlcHJlc2VudGluZyBhbmQgZW50aXJlIGZpbGVzeXN0ZW0uIEZvciBjb250YWluZXIgaW1hZ2VzLCB0aGlzIGlzIGEgbGF5ZXIgZGlnZXN0LiBGb3IgZGlyZWN0b3JpZXMgb3IgYSByb290IGZpbGVzeXN0ZW0sIHRoaXMgaXMgYmxhbmsuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwicGF0aFwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvb3JkaW5hdGVzIGNvbnRhaW5zIHRoZSBtaW5pbWFsIGluZm9ybWF0aW9uIG5lZWRlZCB0byBkZXNjcmliZSBob3cgdG8gZmluZCBhIGZpbGUgd2l0aGluIGFueSBwb3NzaWJsZSBzb3VyY2Ugb2JqZWN0IChlLmcuXCJcbiAgICB9LFxuICAgIFwiRGFydFB1YnNwZWNcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJob21lcGFnZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkhvbWVwYWdlIGlzIHRoZSBwYWNrYWdlIGhvbWVwYWdlIFVSTFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVwb3NpdG9yeVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlcG9zaXRvcnkgaXMgdGhlIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkgVVJMXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkb2N1bWVudGF0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRG9jdW1lbnRhdGlvbiBpcyB0aGUgZG9jdW1lbnRhdGlvbiBzaXRlIFVSTFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHVibGlzaF90b1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB1Ymxpc2hUbyBpcyB0aGUgcGFja2FnZSByZXBvc2l0b3J5IHRvIHB1Ymxpc2ggdG8sIG9yIFxcXCJub25lXFxcIiB0byBwcmV2ZW50IGFjY2lkZW50YWwgcHVibGlzaGluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZW52aXJvbm1lbnRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRGFydFB1YnNwZWNFbnZpcm9ubWVudFwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFbnZpcm9ubWVudCBpcyBTREsgdmVyc2lvbiBjb25zdHJhaW50cyBmb3IgRGFydCBhbmQgRmx1dHRlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGxhdGZvcm1zXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQbGF0Zm9ybXMgYXJlIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zIChBbmRyb2lkLCBpT1MsIHdlYiwgZXRjLilcIlxuICAgICAgICB9LFxuICAgICAgICBcImlnbm9yZWRfYWR2aXNvcmllc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSWdub3JlZEFkdmlzb3JpZXMgYXJlIHRoZSBzZWN1cml0eSBhZHZpc29yaWVzIHRvIGV4cGxpY2l0bHkgaWdub3JlIGZvciB0aGlzIHBhY2thZ2VcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGFydFB1YnNwZWMgaXMgYSBzdHJ1Y3QgdGhhdCByZXByZXNlbnRzIGEgcGFja2FnZSBkZXNjcmliZWQgaW4gYSBwdWJzcGVjLnlhbWwgZmlsZVwiXG4gICAgfSxcbiAgICBcIkRhcnRQdWJzcGVjRW52aXJvbm1lbnRcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJzZGtcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTREsgaXMgdGhlIERhcnQgU0RLIHZlcnNpb24gY29uc3RyYWludCAoZS5nLiBcXFwiPj0yLjEyLjAgPDMuMC4wXFxcIilcIlxuICAgICAgICB9LFxuICAgICAgICBcImZsdXR0ZXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGbHV0dGVyIGlzIHRoZSBGbHV0dGVyIFNESyB2ZXJzaW9uIGNvbnN0cmFpbnQgaWYgdGhpcyBpcyBhIEZsdXR0ZXIgcGFja2FnZVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEYXJ0UHVic3BlY0Vudmlyb25tZW50IHJlcHJlc2VudHMgU0RLIHZlcnNpb24gY29uc3RyYWludHMgZnJvbSB0aGUgZW52aXJvbm1lbnQgc2VjdGlvbiBvZiBwdWJzcGVjLnlhbWwuXCJcbiAgICB9LFxuICAgIFwiRGFydFB1YnNwZWNMb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyB0aGUgcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHRoZSBwdWJzcGVjLmxvY2sgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvbiBhcyBmb3VuZCBpbiB0aGUgcHVic3BlYy5sb2NrIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvc3RlZF91cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIb3N0ZWRVUkwgaXMgdGhlIFVSTCBvZiB0aGUgcGFja2FnZSByZXBvc2l0b3J5IGZvciBob3N0ZWQgcGFja2FnZXMgKHR5cGljYWxseSBwdWIuZGV2LCBidXQgY2FuIGJlIGN1c3RvbSByZXBvc2l0b3J5IGlkZW50aWZpZWQgYnkgaG9zdGVkLXVybCkuIFdoZW4gUFVCX0hPU1RFRF9VUkwgZW52aXJvbm1lbnQgdmFyaWFibGUgY2hhbmdlcywgbG9ja2ZpbGUgdHJhY2tzIHRoZSBzb3VyY2UuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2Y3NfdXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmNzVVJMIGlzIHRoZSBVUkwgb2YgdGhlIFZDUyByZXBvc2l0b3J5IGZvciBnaXQvcGF0aCBkZXBlbmRlbmNpZXMgKGZvciBwYWNrYWdlcyBmZXRjaGVkIGZyb20gdmVyc2lvbiBjb250cm9sIHN5c3RlbXMgbGlrZSBHaXQpXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcInZlcnNpb25cIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEYXJ0UHVic3BlY0xvY2tFbnRyeSBpcyBhIHN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYSBzaW5nbGUgZW50cnkgZm91bmQgaW4gdGhlIFxcXCJwYWNrYWdlc1xcXCIgc2VjdGlvbiBpbiBhIERhcnQgcHVic3BlYy5sb2NrIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiRGVzY3JpcHRvclwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSB0b29sIHRoYXQgZ2VuZXJhdGVkIHRoaXMgU0JPTSAoZS5nLiwgXFxcInN5ZnRcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSB0b29sIHRoYXQgZ2VuZXJhdGVkIHRoaXMgU0JPTS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbmZpZ3VyYXRpb25cIjoge1xuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb25maWd1cmF0aW9uIGNvbnRhaW5zIHRoZSB0b29sIGNvbmZpZ3VyYXRpb24gdXNlZCBkdXJpbmcgU0JPTSBnZW5lcmF0aW9uLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVzY3JpcHRvciBpZGVudGlmaWVzIHRoZSB0b29sIHRoYXQgZ2VuZXJhdGVkIHRoaXMgU0JPTSBkb2N1bWVudCwgaW5jbHVkaW5nIGl0cyBuYW1lLCB2ZXJzaW9uLCBhbmQgY29uZmlndXJhdGlvbiB1c2VkIGR1cmluZyBjYXRhbG9nIGdlbmVyYXRpb24uXCJcbiAgICB9LFxuICAgIFwiRGlnZXN0XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiYWxnb3JpdGhtXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQWxnb3JpdGhtIHNwZWNpZmllcyB0aGUgaGFzaCBhbGdvcml0aG0gdXNlZCAoZS5nLiwgXFxcInNoYTI1NlxcXCIsIFxcXCJtZDVcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInZhbHVlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmFsdWUgaXMgdGhlIGhleGFkZWNpbWFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaGFzaC5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJhbGdvcml0aG1cIixcbiAgICAgICAgXCJ2YWx1ZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRpZ2VzdCByZXByZXNlbnRzIGEgY3J5cHRvZ3JhcGhpYyBoYXNoIG9mIGZpbGUgY29udGVudHMuXCJcbiAgICB9LFxuICAgIFwiRG9jdW1lbnRcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJhcnRpZmFjdHNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QYWNrYWdlXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkFydGlmYWN0cyBpcyB0aGUgbGlzdCBvZiBwYWNrYWdlcyBkaXNjb3ZlcmVkIGFuZCBwbGFjZWQgaW50byB0aGUgY2F0YWxvZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJ0aWZhY3RSZWxhdGlvbnNoaXBzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUmVsYXRpb25zaGlwXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWxlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0ZpbGVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwibm90ZTogbXVzdCBoYXZlIG9taXRlbXB0eVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic291cmNlXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1NvdXJjZVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2UgcmVwcmVzZW50cyB0aGUgb3JpZ2luYWwgb2JqZWN0IHRoYXQgd2FzIGNhdGFsb2dlZFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGlzdHJvXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0xpbnV4UmVsZWFzZVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEaXN0cm8gcmVwcmVzZW50cyB0aGUgTGludXggZGlzdHJpYnV0aW9uIHRoYXQgd2FzIGRldGVjdGVkIGZyb20gdGhlIHNvdXJjZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRvclwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9EZXNjcmlwdG9yXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0b3IgaXMgYSBibG9jayBjb250YWluaW5nIHNlbGYtZGVzY3JpYmluZyBpbmZvcm1hdGlvbiBhYm91dCBzeWZ0XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzY2hlbWFcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvU2NoZW1hXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNjaGVtYSBpcyBhIGJsb2NrIHJlc2VydmVkIGZvciBkZWZpbmluZyB0aGUgdmVyc2lvbiBmb3IgdGhlIHNoYXBlIG9mIHRoaXMgSlNPTiBkb2N1bWVudCBhbmQgd2hlcmUgdG8gZmluZCB0aGUgc2NoZW1hIGRvY3VtZW50IHRvIHZhbGlkYXRlIHRoZSBzaGFwZVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImFydGlmYWN0c1wiLFxuICAgICAgICBcImFydGlmYWN0UmVsYXRpb25zaGlwc1wiLFxuICAgICAgICBcInNvdXJjZVwiLFxuICAgICAgICBcImRpc3Ryb1wiLFxuICAgICAgICBcImRlc2NyaXB0b3JcIixcbiAgICAgICAgXCJzY2hlbWFcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEb2N1bWVudCByZXByZXNlbnRzIHRoZSBzeWZ0IGNhdGFsb2dpbmcgZmluZGluZ3MgYXMgYSBKU09OIGRvY3VtZW50XCJcbiAgICB9LFxuICAgIFwiRG90bmV0RGVwc0VudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIHBhY2thZ2UgbmFtZSBhcyBmb3VuZCBpbiB0aGUgZGVwcy5qc29uIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBwYWNrYWdlIHZlcnNpb24gYXMgZm91bmQgaW4gdGhlIGRlcHMuanNvbiBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXRoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGF0aCBpcyB0aGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgcGFja2FnZSB3aXRoaW4gdGhlIGRlcHMgc3RydWN0dXJlIChlLmcuIFxcXCJhcHAubWV0cmljcy8zLjAuMFxcXCIpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzaGE1MTJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTaGE1MTIgaXMgdGhlIFNIQS01MTIgaGFzaCBvZiB0aGUgTnVHZXQgcGFja2FnZSBjb250ZW50IFdJVEhPVVQgdGhlIHNpZ25lZCBjb250ZW50IGZvciB2ZXJpZmljYXRpb24gKHdvbid0IG1hdGNoIGhhc2ggZnJvbSBOdUdldCBBUEkgb3IgbWFudWFsIGNhbGN1bGF0aW9uIG9mIC5udXBrZyBmaWxlKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaGFzaFBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIYXNoUGF0aCBpcyB0aGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgLm51cGtnLnNoYTUxMiBoYXNoIGZpbGUgKGUuZy4gXFxcImFwcC5tZXRyaWNzLjMuMC4wLm51cGtnLnNoYTUxMlxcXCIpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVHlwZSBpcyB0eXBlIG9mIGVudHJ5IGNvdWxkIGJlIHBhY2thZ2Ugb3IgcHJvamVjdCBmb3IgaW50ZXJuYWwgcmVmc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhlY3V0YWJsZXNcIjoge1xuICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Eb3RuZXRQb3J0YWJsZUV4ZWN1dGFibGVFbnRyeVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRXhlY3V0YWJsZXMgYXJlIHRoZSBtYXAgb2YgLk5FVCBQb3J0YWJsZSBFeGVjdXRhYmxlIGZpbGVzIHdpdGhpbiB0aGlzIHBhY2thZ2Ugd2l0aCB0aGVpciB2ZXJzaW9uIHJlc291cmNlc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICBcInNoYTUxMlwiLFxuICAgICAgICBcImhhc2hQYXRoXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRG90bmV0RGVwc0VudHJ5IGlzIGEgc3RydWN0IHRoYXQgcmVwcmVzZW50cyBhIHNpbmdsZSBlbnRyeSBmb3VuZCBpbiB0aGUgXFxcImxpYnJhcmllc1xcXCIgc2VjdGlvbiBpbiBhIC5ORVQgWyouXWRlcHMuanNvbiBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkRvdG5ldFBhY2thZ2VzTG9ja0VudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIHBhY2thZ2UgbmFtZSBhcyBmb3VuZCBpbiB0aGUgcGFja2FnZXMubG9jay5qc29uIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBwYWNrYWdlIHZlcnNpb24gYXMgZm91bmQgaW4gdGhlIHBhY2thZ2VzLmxvY2suanNvbiBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb250ZW50SGFzaFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbnRlbnRIYXNoIGlzIHRoZSBoYXNoIG9mIHRoZSBwYWNrYWdlIGNvbnRlbnQgZm9yIHZlcmlmaWNhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlR5cGUgaXMgdGhlIGRlcGVuZGVuY3kgdHlwZSBpbmRpY2F0aW5nIGhvdyB0aGlzIGRlcGVuZGVuY3kgd2FzIGFkZGVkIChEaXJlY3Q9ZXhwbGljaXQgaW4gcHJvamVjdCBmaWxlLCBUcmFuc2l0aXZlPXB1bGxlZCBpbiBieSBhbm90aGVyIHBhY2thZ2UsIFByb2plY3Q9cHJvamVjdCByZWZlcmVuY2UpXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcInZlcnNpb25cIixcbiAgICAgICAgXCJjb250ZW50SGFzaFwiLFxuICAgICAgICBcInR5cGVcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEb3RuZXRQYWNrYWdlc0xvY2tFbnRyeSBpcyBhIHN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYSBzaW5nbGUgZW50cnkgZm91bmQgaW4gdGhlIFxcXCJkZXBlbmRlbmNpZXNcXFwiIHNlY3Rpb24gaW4gYSAuTkVUIHBhY2thZ2VzLmxvY2suanNvbiBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkRvdG5ldFBvcnRhYmxlRXhlY3V0YWJsZUVudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiYXNzZW1ibHlWZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXNzZW1ibHlWZXJzaW9uIGlzIHRoZSAuTkVUIGFzc2VtYmx5IHZlcnNpb24gbnVtYmVyIChzdHJvbmctbmFtZWQgdmVyc2lvbilcIlxuICAgICAgICB9LFxuICAgICAgICBcImxlZ2FsQ29weXJpZ2h0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGVnYWxDb3B5cmlnaHQgaXMgdGhlIGNvcHlyaWdodCBub3RpY2Ugc3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb21tZW50c1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbW1lbnRzIGFyZSBhZGRpdGlvbmFsIGNvbW1lbnRzIG9yIGRlc2NyaXB0aW9uIGVtYmVkZGVkIGluIFBFIHJlc291cmNlc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW50ZXJuYWxOYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW50ZXJuYWxOYW1lIGlzIHRoZSBpbnRlcm5hbCBuYW1lIG9mIHRoZSBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb21wYW55TmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbXBhbnlOYW1lIGlzIHRoZSBjb21wYW55IHRoYXQgcHJvZHVjZWQgdGhlIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInByb2R1Y3ROYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHJvZHVjdE5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIHByb2R1Y3QgdGhpcyBmaWxlIGlzIHBhcnQgb2ZcIlxuICAgICAgICB9LFxuICAgICAgICBcInByb2R1Y3RWZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHJvZHVjdFZlcnNpb24gaXMgdGhlIHZlcnNpb24gb2YgdGhlIHByb2R1Y3QgKG1heSBkaWZmZXIgZnJvbSBBc3NlbWJseVZlcnNpb24pXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiYXNzZW1ibHlWZXJzaW9uXCIsXG4gICAgICAgIFwibGVnYWxDb3B5cmlnaHRcIixcbiAgICAgICAgXCJjb21wYW55TmFtZVwiLFxuICAgICAgICBcInByb2R1Y3ROYW1lXCIsXG4gICAgICAgIFwicHJvZHVjdFZlcnNpb25cIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEb3RuZXRQb3J0YWJsZUV4ZWN1dGFibGVFbnRyeSBpcyBhIHN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYSBzaW5nbGUgZW50cnkgZm91bmQgd2l0aGluIFxcXCJWZXJzaW9uUmVzb3VyY2VzXFxcIiBzZWN0aW9uIG9mIGEgLk5FVCBQb3J0YWJsZSBFeGVjdXRhYmxlIGJpbmFyeSBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkRwa2dBcmNoaXZlRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJwYWNrYWdlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFja2FnZSBpcyB0aGUgcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHRoZSBzdGF0dXMgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic291cmNlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU291cmNlIGlzIHRoZSBzb3VyY2UgcGFja2FnZSBuYW1lIHRoaXMgYmluYXJ5IHdhcyBidWlsdCBmcm9tIChvbmUgc291cmNlIGNhbiBwcm9kdWNlIG11bHRpcGxlIGJpbmFyeSBwYWNrYWdlcylcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBiaW5hcnkgcGFja2FnZSB2ZXJzaW9uIGFzIGZvdW5kIGluIHRoZSBzdGF0dXMgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic291cmNlVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNvdXJjZVZlcnNpb24gaXMgdGhlIHNvdXJjZSBwYWNrYWdlIHZlcnNpb24gKG1heSBkaWZmZXIgZnJvbSBiaW5hcnkgdmVyc2lvbiB3aGVuIGJpbk5NVSByZWJ1aWxkcyBvY2N1cilcIlxuICAgICAgICB9LFxuICAgICAgICBcImFyY2hpdGVjdHVyZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkFyY2hpdGVjdHVyZSBpcyB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBwZXIgRGViaWFuIHNwZWMgKHNwZWNpZmljIGFyY2ggbGlrZSBhbWQ2NC9hcm02NCwgd2lsZGNhcmQgbGlrZSBhbnksIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBcXFwiYWxsXFxcIiwgb3IgXFxcInNvdXJjZVxcXCIgZm9yIHNvdXJjZSBwYWNrYWdlcylcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1haW50YWluZXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNYWludGFpbmVyIGlzIHRoZSBwYWNrYWdlIG1haW50YWluZXIncyBuYW1lIGFuZCBlbWFpbCBpbiBSRkM4MjIgZm9ybWF0IChuYW1lIG11c3QgY29tZSBmaXJzdCwgdGhlbiBlbWFpbCBpbiBhbmdsZSBicmFja2V0cylcIlxuICAgICAgICB9LFxuICAgICAgICBcImluc3RhbGxlZFNpemVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW5zdGFsbGVkU2l6ZSBpcyB0aGUgdG90YWwgc2l6ZSBvZiBpbnN0YWxsZWQgZmlsZXMgaW4ga2lsb2J5dGVzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwcm92aWRlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHJvdmlkZXMgYXJlIHRoZSB2aXJ0dWFsIHBhY2thZ2VzIHByb3ZpZGVkIGJ5IHRoaXMgcGFja2FnZSAoYWxsb3dzIG90aGVyIHBhY2thZ2VzIHRvIGRlcGVuZCBvbiBjYXBhYmlsaXRpZXMuIENhbiBpbmNsdWRlIHZlcnNpb25lZCBwcm92aWRlcyBsaWtlIFxcXCJsaWJkaWdlc3QtbWQ1LXBlcmwgKD0gMi41NS4wMSlcXFwiKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVwZW5kcyBhcmUgdGhlIHBhY2thZ2VzIHJlcXVpcmVkIGZvciB0aGlzIHBhY2thZ2UgdG8gZnVuY3Rpb24gKHdpbGwgbm90IGJlIGluc3RhbGxlZCB1bmxlc3MgdGhlc2UgcmVxdWlyZW1lbnRzIGFyZSBtZXQsIGNyZWF0ZXMgc3RyaWN0IG9yZGVyaW5nIGNvbnN0cmFpbnQpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwcmVEZXBlbmRzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQcmVEZXBlbmRzIGFyZSB0aGUgcGFja2FnZXMgdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBhbmQgY29uZmlndXJlZCBCRUZPUkUgZXZlbiBzdGFydGluZyBpbnN0YWxsYXRpb24gb2YgdGhpcyBwYWNrYWdlIChzdHJvbmdlciB0aGFuIERlcGVuZHMsIGRpc2NvdXJhZ2VkIHVubGVzcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSBhcyBpdCBhZGRzIHN0cmljdCBjb25zdHJhaW50cyBmb3IgYXB0KVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9EcGtnRmlsZVJlY29yZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlcyBhcmUgdGhlIGZpbGVzIGluc3RhbGxlZCBieSB0aGlzIHBhY2thZ2VcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJwYWNrYWdlXCIsXG4gICAgICAgIFwic291cmNlXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcInNvdXJjZVZlcnNpb25cIixcbiAgICAgICAgXCJhcmNoaXRlY3R1cmVcIixcbiAgICAgICAgXCJtYWludGFpbmVyXCIsXG4gICAgICAgIFwiaW5zdGFsbGVkU2l6ZVwiLFxuICAgICAgICBcImZpbGVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRHBrZ0FyY2hpdmVFbnRyeSByZXByZXNlbnRzIHBhY2thZ2UgbWV0YWRhdGEgZXh0cmFjdGVkIGZyb20gYSAuZGViIGFyY2hpdmUgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJEcGtnRGJFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBhY2thZ2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYWNrYWdlIGlzIHRoZSBwYWNrYWdlIG5hbWUgYXMgZm91bmQgaW4gdGhlIHN0YXR1cyBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2UgaXMgdGhlIHNvdXJjZSBwYWNrYWdlIG5hbWUgdGhpcyBiaW5hcnkgd2FzIGJ1aWx0IGZyb20gKG9uZSBzb3VyY2UgY2FuIHByb2R1Y2UgbXVsdGlwbGUgYmluYXJ5IHBhY2thZ2VzKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIGJpbmFyeSBwYWNrYWdlIHZlcnNpb24gYXMgZm91bmQgaW4gdGhlIHN0YXR1cyBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzb3VyY2VWZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU291cmNlVmVyc2lvbiBpcyB0aGUgc291cmNlIHBhY2thZ2UgdmVyc2lvbiAobWF5IGRpZmZlciBmcm9tIGJpbmFyeSB2ZXJzaW9uIHdoZW4gYmluTk1VIHJlYnVpbGRzIG9jY3VyKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl0ZWN0dXJlIGlzIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIHBlciBEZWJpYW4gc3BlYyAoc3BlY2lmaWMgYXJjaCBsaWtlIGFtZDY0L2FybTY0LCB3aWxkY2FyZCBsaWtlIGFueSwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IFxcXCJhbGxcXFwiLCBvciBcXFwic291cmNlXFxcIiBmb3Igc291cmNlIHBhY2thZ2VzKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWFpbnRhaW5lclwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1haW50YWluZXIgaXMgdGhlIHBhY2thZ2UgbWFpbnRhaW5lcidzIG5hbWUgYW5kIGVtYWlsIGluIFJGQzgyMiBmb3JtYXQgKG5hbWUgbXVzdCBjb21lIGZpcnN0LCB0aGVuIGVtYWlsIGluIGFuZ2xlIGJyYWNrZXRzKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW5zdGFsbGVkU2l6ZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJbnN0YWxsZWRTaXplIGlzIHRoZSB0b3RhbCBzaXplIG9mIGluc3RhbGxlZCBmaWxlcyBpbiBraWxvYnl0ZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcInByb3ZpZGVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQcm92aWRlcyBhcmUgdGhlIHZpcnR1YWwgcGFja2FnZXMgcHJvdmlkZWQgYnkgdGhpcyBwYWNrYWdlIChhbGxvd3Mgb3RoZXIgcGFja2FnZXMgdG8gZGVwZW5kIG9uIGNhcGFiaWxpdGllcy4gQ2FuIGluY2x1ZGUgdmVyc2lvbmVkIHByb3ZpZGVzIGxpa2UgXFxcImxpYmRpZ2VzdC1tZDUtcGVybCAoPSAyLjU1LjAxKVxcXCIpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRzIGFyZSB0aGUgcGFja2FnZXMgcmVxdWlyZWQgZm9yIHRoaXMgcGFja2FnZSB0byBmdW5jdGlvbiAod2lsbCBub3QgYmUgaW5zdGFsbGVkIHVubGVzcyB0aGVzZSByZXF1aXJlbWVudHMgYXJlIG1ldCwgY3JlYXRlcyBzdHJpY3Qgb3JkZXJpbmcgY29uc3RyYWludClcIlxuICAgICAgICB9LFxuICAgICAgICBcInByZURlcGVuZHNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlByZURlcGVuZHMgYXJlIHRoZSBwYWNrYWdlcyB0aGF0IG11c3QgYmUgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkIEJFRk9SRSBldmVuIHN0YXJ0aW5nIGluc3RhbGxhdGlvbiBvZiB0aGlzIHBhY2thZ2UgKHN0cm9uZ2VyIHRoYW4gRGVwZW5kcywgZGlzY291cmFnZWQgdW5sZXNzIGFic29sdXRlbHkgbmVjZXNzYXJ5IGFzIGl0IGFkZHMgc3RyaWN0IGNvbnN0cmFpbnRzIGZvciBhcHQpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWxlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0Rwa2dGaWxlUmVjb3JkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGFyZSB0aGUgZmlsZXMgaW5zdGFsbGVkIGJ5IHRoaXMgcGFja2FnZVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInBhY2thZ2VcIixcbiAgICAgICAgXCJzb3VyY2VcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwic291cmNlVmVyc2lvblwiLFxuICAgICAgICBcImFyY2hpdGVjdHVyZVwiLFxuICAgICAgICBcIm1haW50YWluZXJcIixcbiAgICAgICAgXCJpbnN0YWxsZWRTaXplXCIsXG4gICAgICAgIFwiZmlsZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEcGtnREJFbnRyeSByZXByZXNlbnRzIGFsbCBjYXB0dXJlZCBkYXRhIGZvciBhIERlYmlhbiBwYWNrYWdlIERCIGVudHJ5OyBhdmFpbGFibGUgZmllbGRzIGFyZSBkZXNjcmliZWQgYXQgaHR0cDovL21hbnBhZ2VzLnVidW50dS5jb20vbWFucGFnZXMveGVuaWFsL21hbjEvZHBrZy1xdWVyeS4xLmh0bWwgaW4gdGhlIC0tc2hvd2Zvcm1hdCBzZWN0aW9uLlwiXG4gICAgfSxcbiAgICBcIkRwa2dGaWxlUmVjb3JkXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGggaXMgdGhlIGZpbGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgZmlsZXN5c3RlbSByb290XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkaWdlc3RcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRGlnZXN0XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRpZ2VzdCBpcyB0aGUgZmlsZSBjb250ZW50IGhhc2ggKHR5cGljYWxseSBNRDUgZm9yIGRwa2cgY29tcGF0aWJpbGl0eSB3aXRoIGxlZ2FjeSBzeXN0ZW1zKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaXNDb25maWdGaWxlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklzQ29uZmlnRmlsZSBpcyB3aGV0aGVyIHRoaXMgZmlsZSBpcyBtYXJrZWQgYXMgYSBjb25maWd1cmF0aW9uIGZpbGUgKGRwa2cgd2lsbCBwcmVzZXJ2ZSB1c2VyIG1vZGlmaWNhdGlvbnMgZHVyaW5nIHVwZ3JhZGVzKVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInBhdGhcIixcbiAgICAgICAgXCJpc0NvbmZpZ0ZpbGVcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEcGtnRmlsZVJlY29yZCByZXByZXNlbnRzIGEgc2luZ2xlIGZpbGUgYXR0cmlidXRlZCB0byBhIGRlYmlhbiBwYWNrYWdlLlwiXG4gICAgfSxcbiAgICBcIkVMRlNlY3VyaXR5RmVhdHVyZXNcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJzeW1ib2xUYWJsZVN0cmlwcGVkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlN5bWJvbFRhYmxlU3RyaXBwZWQgaW5kaWNhdGVzIHdoZXRoZXIgZGVidWdnaW5nIHN5bWJvbHMgaGF2ZSBiZWVuIHJlbW92ZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzdGFja0NhbmFyeVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTdGFja0NhbmFyeSBpbmRpY2F0ZXMgd2hldGhlciBzdGFjayBzbWFzaGluZyBwcm90ZWN0aW9uIGlzIGVuYWJsZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJueFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOb0V4ZWN1dGFibGUgaW5kaWNhdGVzIHdoZXRoZXIgTlggKG5vLWV4ZWN1dGUpIHByb3RlY3Rpb24gaXMgZW5hYmxlZCBmb3IgdGhlIHN0YWNrLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVsUk9cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWxvY2F0aW9uUmVhZE9ubHkgaW5kaWNhdGVzIHRoZSBSRUxSTyBwcm90ZWN0aW9uIGxldmVsLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGllXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBvc2l0aW9uSW5kZXBlbmRlbnRFeGVjdXRhYmxlIGluZGljYXRlcyB3aGV0aGVyIHRoZSBiaW5hcnkgaXMgY29tcGlsZWQgYXMgUElFLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZHNvXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkR5bmFtaWNTaGFyZWRPYmplY3QgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGJpbmFyeSBpcyBhIHNoYXJlZCBsaWJyYXJ5LlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2FmZVN0YWNrXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxsdm1TYWZlU3RhY2sgcmVwcmVzZW50cyBhIGNvbXBpbGVyLWJhc2VkIHNlY3VyaXR5IG1lY2hhbmlzbSB0aGF0IHNlcGFyYXRlcyB0aGUgc3RhY2sgaW50byBhIHNhZmUgc3RhY2sgZm9yIHN0b3JpbmcgcmV0dXJuIGFkZHJlc3NlcyBhbmQgb3RoZXIgY3JpdGljYWwgZGF0YSwgYW5kIGFuIHVuc2FmZSBzdGFjayBmb3IgZXZlcnl0aGluZyBlbHNlLCB0byBtaXRpZ2F0ZSBzdGFjay1iYXNlZCBtZW1vcnkgY29ycnVwdGlvbiBlcnJvcnNcXG5zZWUgaHR0cHM6Ly9jbGFuZy5sbHZtLm9yZy9kb2NzL1NhZmVTdGFjay5odG1sXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZmlcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ29udHJvbEZsb3dJbnRlZ3JpdHkgcmVwcmVzZW50cyBydW50aW1lIGNoZWNrcyB0byBlbnN1cmUgYSBwcm9ncmFtJ3MgY29udHJvbCBmbG93IGFkaGVyZXMgdG8gdGhlIGxlZ2FsIHBhdGhzIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lLCB0aHVzIHByb3RlY3RpbmcgYWdhaW5zdCB2YXJpb3VzIHR5cGVzIG9mIGNvbnRyb2wtZmxvdyBoaWphY2tpbmcgYXR0YWNrc1xcbnNlZSBodHRwczovL2NsYW5nLmxsdm0ub3JnL2RvY3MvQ29udHJvbEZsb3dJbnRlZ3JpdHkuaHRtbFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm9ydGlmeVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDbGFuZ0ZvcnRpZnlTb3VyY2UgaXMgYSBicm9hZCBzdWl0ZSBvZiBleHRlbnNpb25zIHRvIGxpYmMgYWltZWQgYXQgY2F0Y2hpbmcgbWlzdXNlcyBvZiBjb21tb24gbGlicmFyeSBmdW5jdGlvbnNcXG5zZWUgaHR0cHM6Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb20vcGxhdGZvcm0vL2Jpb25pYy8rL2QxOTJkYmVjZjBiMmEzNzFlYjEyN2MwODcxZjc3YTljYWY4MWM0ZDIvZG9jcy9jbGFuZ19mb3J0aWZ5X2FuYXRvbXkubWRcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJzeW1ib2xUYWJsZVN0cmlwcGVkXCIsXG4gICAgICAgIFwibnhcIixcbiAgICAgICAgXCJyZWxST1wiLFxuICAgICAgICBcInBpZVwiLFxuICAgICAgICBcImRzb1wiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkVMRlNlY3VyaXR5RmVhdHVyZXMgY2FwdHVyZXMgc2VjdXJpdHkgaGFyZGVuaW5nIGFuZCBwcm90ZWN0aW9uIG1lY2hhbmlzbXMgaW4gRUxGIGJpbmFyaWVzLlwiXG4gICAgfSxcbiAgICBcIkVsZkJpbmFyeVBhY2thZ2VOb3RlSnNvblBheWxvYWRcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVHlwZSBpcyB0aGUgdHlwZSBvZiB0aGUgcGFja2FnZSAoZS5nLiBcXFwicnBtXFxcIiwgXFxcImRlYlxcXCIsIFxcXCJhcGtcXFwiLCBldGMuKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl0ZWN0dXJlIG9mIHRoZSBiaW5hcnkgcGFja2FnZSAoZS5nLiBcXFwiYW1kNjRcXFwiLCBcXFwiYXJtXFxcIiwgZXRjLilcIlxuICAgICAgICB9LFxuICAgICAgICBcIm9zQ1BFXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT1NDUEUgaXMgYSBDUEUgbmFtZSBmb3IgdGhlIE9TLCB0eXBpY2FsbHkgY29ycmVzcG9uZGluZyB0byBDUEVfTkFNRSBpbiBvcy1yZWxlYXNlIChlLmcuIGNwZTovbzpmZWRvcmFwcm9qZWN0OmZlZG9yYTozMylcXG5cXG5EZXByZWNhdGVkOiBpbiBTeWZ0IDIuMCB0aGUgc3RydWN0IHRhZyB3aWxsIGJlIGNvcnJlY3RlZCB0byBgb3NDcGVgIHRvIG1hdGNoIHRoZSBzeXN0ZW1kIHNwZWMgY2FzaW5nLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXBwQ3BlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXBwQ3BlIGlzIGEgQ1BFIG5hbWUgZm9yIHRoZSB1cHN0cmVhbSBBcHBsaWNhdGlvbiwgYXMgZm91bmQgaW4gTlZEIENQRSBzZWFyY2ggKGUuZy4gY3BlOjIuMzphOmdudTpjb3JldXRpbHM6NS4wKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwib3NcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJPUyBpcyB0aGUgT1MgbmFtZSwgdHlwaWNhbGx5IGNvcnJlc3BvbmRpbmcgdG8gSUQgaW4gb3MtcmVsZWFzZSAoZS5nLiBcXFwiZmVkb3JhXFxcIilcIlxuICAgICAgICB9LFxuICAgICAgICBcIm9zVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIm9zVmVyc2lvbiBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgT1MsIHR5cGljYWxseSBjb3JyZXNwb25kaW5nIHRvIFZFUlNJT05fSUQgaW4gb3MtcmVsZWFzZSAoZS5nLiBcXFwiMzNcXFwiKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic3lzdGVtXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU3lzdGVtIGlzIGEgY29udGV4dC1zcGVjaWZpYyBuYW1lIGZvciB0aGUgc3lzdGVtIHRoYXQgdGhlIGJpbmFyeSBwYWNrYWdlIGlzIGludGVuZGVkIHRvIHJ1biBvbiBvciBhIHBhcnQgb2ZcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlbmRvclwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlbmRvciBpcyB0aGUgaW5kaXZpZHVhbCBvciBvcmdhbml6YXRpb24gdGhhdCBwcm9kdWNlZCB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBiaW5hcnlcIlxuICAgICAgICB9LFxuICAgICAgICBcInNvdXJjZVJlcG9cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2VSZXBvIGlzIHRoZSBVUkwgdG8gdGhlIHNvdXJjZSByZXBvc2l0b3J5IGZvciB3aGljaCB0aGUgYmluYXJ5IHdhcyBidWlsdCBmcm9tXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb21taXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb21taXQgaXMgdGhlIGNvbW1pdCBoYXNoIG9mIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBmb3Igd2hpY2ggdGhlIGJpbmFyeSB3YXMgYnVpbHQgZnJvbVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFTEZCaW5hcnlQYWNrYWdlTm90ZUpTT05QYXlsb2FkIFJlcHJlc2VudHMgbWV0YWRhdGEgY2FwdHVyZWQgZnJvbSB0aGUgLm5vdGUucGFja2FnZSBzZWN0aW9uIG9mIGFuIEVMRi1mb3JtYXR0ZWQgYmluYXJ5XCJcbiAgICB9LFxuICAgIFwiRWxpeGlyTWl4TG9ja0VudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIHBhY2thZ2UgbmFtZSBhcyBmb3VuZCBpbiB0aGUgbWl4LmxvY2sgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvbiBhcyBmb3VuZCBpbiB0aGUgbWl4LmxvY2sgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGtnSGFzaFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBrZ0hhc2ggaXMgdGhlIG91dGVyIGNoZWNrc3VtIChTSEEtMjU2KSBvZiB0aGUgZW50aXJlIEhleCBwYWNrYWdlIHRhcmJhbGwgZm9yIGludGVncml0eSB2ZXJpZmljYXRpb24gKHByZWZlcnJlZCBtZXRob2QsIHJlcGxhY2VzIGRlcHJlY2F0ZWQgaW5uZXIgY2hlY2tzdW0pXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwa2dIYXNoRXh0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGtnSGFzaEV4dCBpcyB0aGUgZXh0ZW5kZWQgcGFja2FnZSBoYXNoIGZvcm1hdCAoaW5uZXIgY2hlY2tzdW0gaXMgZGVwcmVjYXRlZCAtIFNIQS0yNTYgb2YgY29uY2F0ZW5hdGVkIGZpbGUgY29udGVudHMgZXhjbHVkaW5nIENIRUNLU1VNIGZpbGUsIG5vdyByZXBsYWNlZCBieSBvdXRlciBjaGVja3N1bSlcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcInBrZ0hhc2hcIixcbiAgICAgICAgXCJwa2dIYXNoRXh0XCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRWxpeGlyTWl4TG9ja0VudHJ5IGlzIGEgc3RydWN0IHRoYXQgcmVwcmVzZW50cyBhIHNpbmdsZSBlbnRyeSBpbiBhIG1peC5sb2NrIGZpbGVcIlxuICAgIH0sXG4gICAgXCJFcmxhbmdSZWJhckxvY2tFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBwYWNrYWdlIG5hbWUgYXMgZm91bmQgaW4gdGhlIHJlYmFyLmxvY2sgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvbiBhcyBmb3VuZCBpbiB0aGUgcmViYXIubG9jayBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwa2dIYXNoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGtnSGFzaCBpcyB0aGUgb3V0ZXIgY2hlY2tzdW0gKFNIQS0yNTYpIG9mIHRoZSBlbnRpcmUgSGV4IHBhY2thZ2UgdGFyYmFsbCBmb3IgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbiAocHJlZmVycmVkIG1ldGhvZCBvdmVyIGRlcHJlY2F0ZWQgaW5uZXIgY2hlY2tzdW0pXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwa2dIYXNoRXh0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGtnSGFzaEV4dCBpcyB0aGUgZXh0ZW5kZWQgcGFja2FnZSBoYXNoIGZvcm1hdCAoaW5uZXIgY2hlY2tzdW0gZGVwcmVjYXRlZCAtIHdhcyBTSEEtMjU2IG9mIGNvbmNhdGVuYXRlZCBmaWxlIGNvbnRlbnRzKVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwicGtnSGFzaFwiLFxuICAgICAgICBcInBrZ0hhc2hFeHRcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFcmxhbmdSZWJhckxvY2tFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIHBhY2thZ2UgZW50cnkgZnJvbSB0aGUgXFxcImRlcHNcXFwiIHNlY3Rpb24gd2l0aGluIGFuIEVybGFuZyByZWJhci5sb2NrIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiRXhlY3V0YWJsZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImZvcm1hdFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZvcm1hdCBkZW5vdGVzIGVpdGhlciBFTEYsIE1hY2gtTywgb3IgUEVcIlxuICAgICAgICB9LFxuICAgICAgICBcImhhc0V4cG9ydHNcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSGFzRXhwb3J0cyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYmluYXJ5IGV4cG9ydHMgc3ltYm9scy5cIlxuICAgICAgICB9LFxuICAgICAgICBcImhhc0VudHJ5cG9pbnRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSGFzRW50cnlwb2ludCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgYmluYXJ5IGhhcyBhbiBlbnRyeSBwb2ludCBmdW5jdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcImltcG9ydGVkTGlicmFyaWVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJbXBvcnRlZExpYnJhcmllcyBsaXN0cyB0aGUgc2hhcmVkIGxpYnJhcmllcyByZXF1aXJlZCBieSB0aGlzIGV4ZWN1dGFibGUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbGZTZWN1cml0eUZlYXR1cmVzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0VMRlNlY3VyaXR5RmVhdHVyZXNcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRUxGU2VjdXJpdHlGZWF0dXJlcyBjb250YWlucyBFTEYtc3BlY2lmaWMgc2VjdXJpdHkgaGFyZGVuaW5nIGluZm9ybWF0aW9uIHdoZW4gRm9ybWF0IGlzIEVMRi5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJmb3JtYXRcIixcbiAgICAgICAgXCJoYXNFeHBvcnRzXCIsXG4gICAgICAgIFwiaGFzRW50cnlwb2ludFwiLFxuICAgICAgICBcImltcG9ydGVkTGlicmFyaWVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRXhlY3V0YWJsZSBjb250YWlucyBtZXRhZGF0YSBhYm91dCBiaW5hcnkgZmlsZXMgYW5kIHRoZWlyIHNlY3VyaXR5IGZlYXR1cmVzLlwiXG4gICAgfSxcbiAgICBcIkZpbGVcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJpZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklEIGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgZmlsZSB3aXRoaW4gdGhlIFNCT00uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsb2NhdGlvblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Db29yZGluYXRlc1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJMb2NhdGlvbiBpcyB0aGUgZmlsZSBwYXRoIGFuZCBsYXllciBpbmZvcm1hdGlvbiB3aGVyZSB0aGlzIGZpbGUgd2FzIGZvdW5kLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRmlsZU1ldGFkYXRhRW50cnlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWV0YWRhdGEgY29udGFpbnMgZmlsZXN5c3RlbSBtZXRhZGF0YSBzdWNoIGFzIHBlcm1pc3Npb25zLCBvd25lcnNoaXAsIGFuZCBmaWxlIHR5cGUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb250ZW50c1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbnRlbnRzIGlzIHRoZSBmaWxlIGNvbnRlbnRzIGZvciBzbWFsbCBmaWxlcy5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRpZ2VzdHNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9EaWdlc3RcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGlnZXN0cyBjb250YWlucyBjcnlwdG9ncmFwaGljIGhhc2hlcyBvZiB0aGUgZmlsZSBjb250ZW50cy5cIlxuICAgICAgICB9LFxuICAgICAgICBcImxpY2Vuc2VzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRmlsZUxpY2Vuc2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGljZW5zZXMgY29udGFpbnMgbGljZW5zZSBpbmZvcm1hdGlvbiBkaXNjb3ZlcmVkIHdpdGhpbiB0aGlzIGZpbGUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGVjdXRhYmxlXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0V4ZWN1dGFibGVcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRXhlY3V0YWJsZSBjb250YWlucyBleGVjdXRhYmxlIG1ldGFkYXRhIGlmIHRoaXMgZmlsZSBpcyBhIGJpbmFyeS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInVua25vd25zXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVbmtub3ducyBjb250YWlucyB1bmtub3duIGZpZWxkcyBmb3IgZm9yd2FyZCBjb21wYXRpYmlsaXR5LlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImlkXCIsXG4gICAgICAgIFwibG9jYXRpb25cIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlIHJlcHJlc2VudHMgYSBmaWxlIGRpc2NvdmVyZWQgZHVyaW5nIGNhdGFsb2dpbmcgd2l0aCBpdHMgbWV0YWRhdGEsIGNvbnRlbnQgZGlnZXN0cywgbGljZW5zZXMsIGFuZCByZWxhdGlvbnNoaXBzIHRvIHBhY2thZ2VzLlwiXG4gICAgfSxcbiAgICBcIkZpbGVMaWNlbnNlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidmFsdWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWYWx1ZSBpcyB0aGUgcmF3IGxpY2Vuc2UgaWRlbnRpZmllciBvciB0ZXh0IGFzIGZvdW5kIGluIHRoZSBmaWxlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic3BkeEV4cHJlc3Npb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTUERYRXhwcmVzc2lvbiBpcyB0aGUgcGFyc2VkIFNQRFggbGljZW5zZSBleHByZXNzaW9uLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlR5cGUgaXMgdGhlIGxpY2Vuc2UgdHlwZSBjbGFzc2lmaWNhdGlvbiAoZS5nLiwgZGVjbGFyZWQsIGNvbmNsdWRlZCwgZGlzY292ZXJlZCkuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJldmlkZW5jZVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9GaWxlTGljZW5zZUV2aWRlbmNlXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkV2aWRlbmNlIGNvbnRhaW5zIHN1cHBvcnRpbmcgZXZpZGVuY2UgZm9yIHRoaXMgbGljZW5zZSBkZXRlY3Rpb24uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidmFsdWVcIixcbiAgICAgICAgXCJzcGR4RXhwcmVzc2lvblwiLFxuICAgICAgICBcInR5cGVcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlTGljZW5zZSByZXByZXNlbnRzIGxpY2Vuc2UgaW5mb3JtYXRpb24gZGlzY292ZXJlZCB3aXRoaW4gYSBmaWxlJ3MgY29udGVudHMgb3IgbWV0YWRhdGEsIGluY2x1ZGluZyB0aGUgbWF0Y2hlZCBsaWNlbnNlIHRleHQgYW5kIFNQRFggZXhwcmVzc2lvbi5cIlxuICAgIH0sXG4gICAgXCJGaWxlTGljZW5zZUV2aWRlbmNlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiY29uZmlkZW5jZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb25maWRlbmNlIGlzIHRoZSBjb25maWRlbmNlIHNjb3JlIGZvciB0aGlzIGxpY2Vuc2UgZGV0ZWN0aW9uICgwLTEwMCkuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJvZmZzZXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT2Zmc2V0IGlzIHRoZSBieXRlIG9mZnNldCB3aGVyZSB0aGUgbGljZW5zZSB0ZXh0IHN0YXJ0cyBpbiB0aGUgZmlsZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4dGVudFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFeHRlbnQgaXMgdGhlIGxlbmd0aCBvZiB0aGUgbGljZW5zZSB0ZXh0IGluIGJ5dGVzLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImNvbmZpZGVuY2VcIixcbiAgICAgICAgXCJvZmZzZXRcIixcbiAgICAgICAgXCJleHRlbnRcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlTGljZW5zZUV2aWRlbmNlIGNvbnRhaW5zIHN1cHBvcnRpbmcgZXZpZGVuY2UgZm9yIGEgbGljZW5zZSBkZXRlY3Rpb24gaW4gYSBmaWxlLCBpbmNsdWRpbmcgdGhlIGJ5dGUgb2Zmc2V0LCBleHRlbnQsIGFuZCBjb25maWRlbmNlIGxldmVsLlwiXG4gICAgfSxcbiAgICBcIkZpbGVNZXRhZGF0YUVudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibW9kZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNb2RlIGlzIHRoZSBVbml4IGZpbGUgcGVybWlzc2lvbiBtb2RlIGluIG9jdGFsIGZvcm1hdC5cIlxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUeXBlIGlzIHRoZSBmaWxlIHR5cGUgKGUuZy4sIFxcXCJSZWd1bGFyRmlsZVxcXCIsIFxcXCJEaXJlY3RvcnlcXFwiLCBcXFwiU3ltYm9saWNMaW5rXFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsaW5rRGVzdGluYXRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJMaW5rRGVzdGluYXRpb24gaXMgdGhlIHRhcmdldCBwYXRoIGZvciBzeW1ib2xpYyBsaW5rcy5cIlxuICAgICAgICB9LFxuICAgICAgICBcInVzZXJJRFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVc2VySUQgaXMgdGhlIGZpbGUgb3duZXIgdXNlciBJRC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImdyb3VwSURcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR3JvdXBJRCBpcyB0aGUgZmlsZSBvd25lciBncm91cCBJRC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1pbWVUeXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTUlNRVR5cGUgaXMgdGhlIE1JTUUgdHlwZSBvZiB0aGUgZmlsZSBjb250ZW50cy5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpemVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2l6ZSBpcyB0aGUgZmlsZSBzaXplIGluIGJ5dGVzLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm1vZGVcIixcbiAgICAgICAgXCJ0eXBlXCIsXG4gICAgICAgIFwidXNlcklEXCIsXG4gICAgICAgIFwiZ3JvdXBJRFwiLFxuICAgICAgICBcIm1pbWVUeXBlXCIsXG4gICAgICAgIFwic2l6ZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVNZXRhZGF0YUVudHJ5IGNvbnRhaW5zIGZpbGVzeXN0ZW0tbGV2ZWwgbWV0YWRhdGEgYXR0cmlidXRlcyBzdWNoIGFzIHBlcm1pc3Npb25zLCBvd25lcnNoaXAsIHR5cGUsIGFuZCBzaXplIGZvciBhIGNhdGFsb2dlZCBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkdndWZGaWxlSGVhZGVyXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiZ2d1ZlZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR0dVRlZlcnNpb24gaXMgdGhlIEdHVUYgZm9ybWF0IHZlcnNpb24gKGUuZy4sIDMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWxlU2l6ZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlU2l6ZSBpcyB0aGUgc2l6ZSBvZiB0aGUgR0dVRiBmaWxlIGluIGJ5dGVzIChiZXN0LWVmZm9ydCBpZiBhdmFpbGFibGUgZnJvbSByZXNvbHZlcilcIlxuICAgICAgICB9LFxuICAgICAgICBcImFyY2hpdGVjdHVyZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkFyY2hpdGVjdHVyZSBpcyB0aGUgbW9kZWwgYXJjaGl0ZWN0dXJlIChmcm9tIGdlbmVyYWwuYXJjaGl0ZWN0dXJlLCBlLmcuLCBcXFwicXdlbjNtb2VcXFwiLCBcXFwibGxhbWFcXFwiKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVhbnRpemF0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUXVhbnRpemF0aW9uIGlzIHRoZSBxdWFudGl6YXRpb24gdHlwZSAoZS5nLiwgXFxcIklRNF9OTFxcXCIsIFxcXCJRNF9LX01cXFwiKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGFyYW1ldGVyc1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXJhbWV0ZXJzIGlzIHRoZSBudW1iZXIgb2YgbW9kZWwgcGFyYW1ldGVycyAoaWYgcHJlc2VudCBpbiBoZWFkZXIpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0ZW5zb3JDb3VudFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUZW5zb3JDb3VudCBpcyB0aGUgbnVtYmVyIG9mIHRlbnNvcnMgaW4gdGhlIG1vZGVsXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJoZWFkZXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZW1haW5pbmdLZXlWYWx1ZXMgY29udGFpbnMgdGhlIHJlbWFpbmluZyBrZXktdmFsdWUgcGFpcnMgZnJvbSB0aGUgR0dVRiBoZWFkZXIgdGhhdCBhcmUgbm90IGFscmVhZHlcXG5yZXByZXNlbnRlZCBhcyB0eXBlZCBmaWVsZHMgYWJvdmUuIFRoaXMgcHJlc2VydmVzIGFkZGl0aW9uYWwgbWV0YWRhdGEgZmllbGRzIGZvciByZWZlcmVuY2VcXG4obmFtZXNwYWNlZCB3aXRoIGdlbmVyYWwuKiwgbGxhbWEuKiwgZXRjLikgd2hpbGUgYXZvaWRpbmcgZHVwbGljYXRpb24uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtZXRhZGF0YUhhc2hcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNZXRhZGF0YUtleVZhbHVlc0hhc2ggaXMgYSB4eDY0IGhhc2ggb2YgYWxsIGtleS12YWx1ZSBwYWlycyBmcm9tIHRoZSBHR1VGIGhlYWRlciBtZXRhZGF0YS5cXG5UaGlzIGhhc2ggaXMgY29tcHV0ZWQgb3ZlciB0aGUgY29tcGxldGUgaGVhZGVyIG1ldGFkYXRhIChpbmNsdWRpbmcgdGhlIGZpZWxkcyBleHRyYWN0ZWRcXG5pbnRvIHR5cGVkIGZpZWxkcyBhYm92ZSkgYW5kIHByb3ZpZGVzIGEgc3RhYmxlIGlkZW50aWZpZXIgZm9yIHRoZSBtb2RlbCBjb25maWd1cmF0aW9uXFxuYWNyb3NzIGRpZmZlcmVudCBmaWxlIGxvY2F0aW9ucyBvciByZW1vdGVzLiBJdCBhbGxvd3MgbWF0Y2hpbmcgaWRlbnRpY2FsIG1vZGVscyBldmVuXFxud2hlbiBzdG9yZWQgaW4gZGlmZmVyZW50IHJlcG9zaXRvcmllcyBvciB3aXRoIGRpZmZlcmVudCBmaWxlbmFtZXMuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXJ0c1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0dndWZGaWxlSGVhZGVyXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhcnRzIGNvbnRhaW5zIGhlYWRlcnMgZnJvbSBhZGRpdGlvbmFsIEdHVUYgZmlsZXMgdGhhdCB3ZXJlIG1lcmdlZFxcbmludG8gdGhpcyBwYWNrYWdlIGR1cmluZyBwb3N0LXByb2Nlc3NpbmcgKGUuZy4sIGZyb20gT0NJIGxheWVycyB3aXRob3V0IG1vZGVsIG5hbWVzKS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJnZ3VmVmVyc2lvblwiLFxuICAgICAgICBcInRlbnNvckNvdW50XCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR0dVRkZpbGVIZWFkZXIgcmVwcmVzZW50cyBtZXRhZGF0YSBleHRyYWN0ZWQgZnJvbSBhIEdHVUYgKEdQVC1HZW5lcmF0ZWQgVW5pZmllZCBGb3JtYXQpIG1vZGVsIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiR2l0aHViQWN0aW9uc1VzZVN0YXRlbWVudFwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInZhbHVlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmFsdWUgaXMgdGhlIGFjdGlvbiByZWZlcmVuY2UgKGUuZy4gXFxcImFjdGlvbnMvY2hlY2tvdXRAdjNcXFwiKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29tbWVudFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNvbW1lbnQgaXMgdGhlIGlubGluZSBjb21tZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHVzZXMgc3RhdGVtZW50XCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidmFsdWVcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJHaXRIdWJBY3Rpb25zVXNlU3RhdGVtZW50IHJlcHJlc2VudHMgYSBzaW5nbGUgJ3VzZXMnIHN0YXRlbWVudCBpbiBhIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93IGZpbGUgcmVmZXJlbmNpbmcgYW4gYWN0aW9uIG9yIHJldXNhYmxlIHdvcmtmbG93LlwiXG4gICAgfSxcbiAgICBcIkdvTW9kdWxlQnVpbGRpbmZvRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJnb0J1aWxkU2V0dGluZ3NcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvS2V5VmFsdWVzXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkJ1aWxkU2V0dGluZ3MgY29udGFpbnMgdGhlIEdvIGJ1aWxkIHNldHRpbmdzIGFuZCBmbGFncyB1c2VkIHRvIGNvbXBpbGUgdGhlIGJpbmFyeSAoZS5nLiwgR09BUkNILCBHT09TLCBDR09fRU5BQkxFRCkuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJnb0NvbXBpbGVkVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkdvQ29tcGlsZWRWZXJzaW9uIGlzIHRoZSB2ZXJzaW9uIG9mIEdvIHVzZWQgdG8gY29tcGlsZSB0aGUgYmluYXJ5LlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl0ZWN0dXJlIGlzIHRoZSB0YXJnZXQgQ1BVIGFyY2hpdGVjdHVyZSBmb3IgdGhlIGJpbmFyeSAoZXh0cmFjdGVkIGZyb20gR09BUkNIIGJ1aWxkIHNldHRpbmcpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaDFEaWdlc3RcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIMURpZ2VzdCBpcyB0aGUgR28gbW9kdWxlIGhhc2ggaW4gaDE6IGZvcm1hdCBmb3IgdGhlIG1haW4gbW9kdWxlIGZyb20gZ28uc3VtLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWFpbk1vZHVsZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1haW5Nb2R1bGUgaXMgdGhlIG1haW4gbW9kdWxlIHBhdGggZm9yIHRoZSBiaW5hcnkgKGUuZy4sIFxcXCJnaXRodWIuY29tL2FuY2hvcmUvc3lmdFxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZ29DcnlwdG9TZXR0aW5nc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR29DcnlwdG9TZXR0aW5ncyBjb250YWlucyBGSVBTIGFuZCBjcnlwdG9ncmFwaGljIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaWYgcHJlc2VudC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImdvRXhwZXJpbWVudHNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkdvRXhwZXJpbWVudHMgbGlzdHMgZXhwZXJpbWVudGFsIEdvIGZlYXR1cmVzIGVuYWJsZWQgZHVyaW5nIGNvbXBpbGF0aW9uIChlLmcuLCBcXFwiYXJlbmFzXFxcIiwgXFxcImNnb2NoZWNrMlxcXCIpLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImdvQ29tcGlsZWRWZXJzaW9uXCIsXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR29sYW5nQmluYXJ5QnVpbGRpbmZvRW50cnkgcmVwcmVzZW50cyBhbGwgY2FwdHVyZWQgZGF0YSBmb3IgYSBHb2xhbmcgYmluYXJ5XCJcbiAgICB9LFxuICAgIFwiR29Nb2R1bGVFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImgxRGlnZXN0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSDFEaWdlc3QgaXMgdGhlIEdvIG1vZHVsZSBoYXNoIGluIGgxOiBmb3JtYXQgZnJvbSBnby5zdW0gZm9yIHZlcmlmeWluZyBtb2R1bGUgY29udGVudHMuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkdvbGFuZ01vZHVsZUVudHJ5IHJlcHJlc2VudHMgYWxsIGNhcHR1cmVkIGRhdGEgZm9yIGEgR29sYW5nIHNvdXJjZSBzY2FuIHdpdGggZ28ubW9kL2dvLnN1bVwiXG4gICAgfSxcbiAgICBcIkdvU291cmNlRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJoMURpZ2VzdFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkgxRGlnZXN0IGlzIHRoZSBHbyBtb2R1bGUgaGFzaCBpbiBoMTogZm9ybWF0IGZyb20gZ28uc3VtIGZvciB2ZXJpZnlpbmcgbW9kdWxlIGNvbnRlbnRzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwib3NcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJPcGVyYXRpbmdTeXN0ZW0gaXMgdGhlIHRhcmdldCBPUyBmb3IgYnVpbGQgY29uc3RyYWludHMgKGUuZy4sIFxcXCJsaW51eFxcXCIsIFxcXCJkYXJ3aW5cXFwiLCBcXFwid2luZG93c1xcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl0ZWN0dXJlIGlzIHRoZSB0YXJnZXQgQ1BVIGFyY2hpdGVjdHVyZSBmb3IgYnVpbGQgY29uc3RyYWludHMgKGUuZy4sIFxcXCJhbWQ2NFxcXCIsIFxcXCJhcm02NFxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYnVpbGRUYWdzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQnVpbGRUYWdzIGFyZSB0aGUgYnVpbGQgdGFncyB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgY29tcGlsZSBjb2RlIChlLmcuLCBcXFwiaW50ZWdyYXRpb24sZGVidWdcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImNnb0VuYWJsZWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ2dvRW5hYmxlZCBpbmRpY2F0ZXMgd2hldGhlciBDR08gd2FzIGVuYWJsZWQgZm9yIHRoaXMgcGFja2FnZS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJjZ29FbmFibGVkXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR29sYW5nU291cmNlRW50cnkgcmVwcmVzZW50cyBhbGwgY2FwdHVyZWQgZGF0YSBmb3IgYSBHb2xhbmcgcGFja2FnZSBmb3VuZCB0aHJvdWdoIHNvdXJjZSBhbmFseXNpc1wiXG4gICAgfSxcbiAgICBcIkhhc2tlbGxIYWNrYWdlU3RhY2tFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBrZ0hhc2hcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQa2dIYXNoIGlzIHRoZSBwYWNrYWdlIGNvbnRlbnQgaGFzaCBmb3IgdmVyaWZpY2F0aW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkhhY2thZ2VTdGFja1lhbWxFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIGVudHJ5IGZyb20gdGhlIFxcXCJleHRyYS1kZXBzXFxcIiBzZWN0aW9uIG9mIGEgc3RhY2sueWFtbCBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkhhc2tlbGxIYWNrYWdlU3RhY2tMb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJwa2dIYXNoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGtnSGFzaCBpcyB0aGUgcGFja2FnZSBjb250ZW50IGhhc2ggZm9yIHZlcmlmaWNhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic25hcHNob3RVUkxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTbmFwc2hvdFVSTCBpcyB0aGUgVVJMIHRvIHRoZSBTdGFjayBzbmFwc2hvdCB0aGlzIHBhY2thZ2UgY2FtZSBmcm9tXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkhhY2thZ2VTdGFja1lhbWxMb2NrRW50cnkgcmVwcmVzZW50cyBhIHNpbmdsZSBlbnRyeSBmcm9tIHRoZSBcXFwicGFja2FnZXNcXFwiIHNlY3Rpb24gb2YgYSBzdGFjay55YW1sLmxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJIb21lYnJld0Zvcm11bGFcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ0YXBcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUYXAgaXMgSG9tZWJyZXcgdGFwIHRoaXMgZm9ybXVsYSBiZWxvbmdzIHRvIChlLmcuIFxcXCJob21lYnJldy9jb3JlXFxcIilcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvbWVwYWdlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSG9tZXBhZ2UgaXMgdGhlIHVwc3RyZWFtIHByb2plY3QgaG9tZXBhZ2UgVVJMXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0aW9uIGlzIGEgaHVtYW4tcmVhZGFibGUgZm9ybXVsYSBkZXNjcmlwdGlvblwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIb21lYnJld0Zvcm11bGEgcmVwcmVzZW50cyBtZXRhZGF0YSBhYm91dCBhIEhvbWVicmV3IGZvcm11bGEgcGFja2FnZSBleHRyYWN0ZWQgZnJvbSBmb3JtdWxhIEpTT04gZmlsZXMuXCJcbiAgICB9LFxuICAgIFwiSURMaWtlc1wiOiB7XG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklETGlrZXMgcmVwcmVzZW50cyBhIGxpc3Qgb2YgZGlzdHJpYnV0aW9uIElEcyB0aGF0IHRoaXMgTGludXggZGlzdHJpYnV0aW9uIGlzIHNpbWlsYXIgdG8gb3IgZGVyaXZlZCBmcm9tLCBhcyBkZWZpbmVkIGluIG9zLXJlbGVhc2UgSURfTElLRSBmaWVsZC5cIlxuICAgIH0sXG4gICAgXCJKYXZhQXJjaGl2ZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInZpcnR1YWxQYXRoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmlydHVhbFBhdGggaXMgcGF0aCB3aXRoaW4gdGhlIGFyY2hpdmUgaGllcmFyY2h5LCB3aGVyZSBuZXN0ZWQgZW50cmllcyBhcmUgZGVsaW1pdGVkIHdpdGggJzonIChmb3IgbmVzdGVkIEpBUnMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYW5pZmVzdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9KYXZhTWFuaWZlc3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWFuaWZlc3QgaXMgcGFyc2VkIE1FVEEtSU5GL01BTklGRVNULk1GIGNvbnRlbnRzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwb21Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0phdmFQb21Qcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBvbVByb3BlcnRpZXMgaXMgcGFyc2VkIHBvbS5wcm9wZXJ0aWVzIGZpbGUgY29udGVudHNcIlxuICAgICAgICB9LFxuICAgICAgICBcInBvbVByb2plY3RcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvSmF2YVBvbVByb2plY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUG9tUHJvamVjdCBpcyBwYXJzZWQgcG9tLnhtbCBmaWxlIGNvbnRlbnRzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkaWdlc3RcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9EaWdlc3RcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl2ZURpZ2VzdHMgaXMgY3J5cHRvZ3JhcGhpYyBoYXNoZXMgb2YgdGhlIGFyY2hpdmUgZmlsZVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInZpcnR1YWxQYXRoXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSmF2YUFyY2hpdmUgZW5jYXBzdWxhdGVzIGFsbCBKYXZhIGVjb3N5c3RlbSBtZXRhZGF0YSBmb3IgYSBwYWNrYWdlIGFzIHdlbGwgYXMgYW4gKG9wdGlvbmFsKSBwYXJlbnQgcmVsYXRpb25zaGlwLlwiXG4gICAgfSxcbiAgICBcIkphdmFKdm1JbnN0YWxsYXRpb25cIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZWxlYXNlXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0phdmFWTVJlbGVhc2VcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUmVsZWFzZSBpcyBKVk0gcmVsZWFzZSBpbmZvcm1hdGlvbiBhbmQgdmVyc2lvbiBkZXRhaWxzXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmaWxlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRmlsZXMgYXJlIHRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyBKVk0gaW5zdGFsbGF0aW9uXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwicmVsZWFzZVwiLFxuICAgICAgICBcImZpbGVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSmF2YVZNSW5zdGFsbGF0aW9uIHJlcHJlc2VudHMgYSBKYXZhIFZpcnR1YWwgTWFjaGluZSBpbnN0YWxsYXRpb24gZGlzY292ZXJlZCBvbiB0aGUgc3lzdGVtIHdpdGggaXRzIHJlbGVhc2UgaW5mb3JtYXRpb24gYW5kIGZpbGUgbGlzdC5cIlxuICAgIH0sXG4gICAgXCJKYXZhTWFuaWZlc3RcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJtYWluXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0tleVZhbHVlc1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNYWluIGlzIG1haW4gbWFuaWZlc3QgYXR0cmlidXRlcyBhcyBrZXktdmFsdWUgcGFpcnNcIlxuICAgICAgICB9LFxuICAgICAgICBcInNlY3Rpb25zXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvS2V5VmFsdWVzXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNlY3Rpb25zIGFyZSB0aGUgbmFtZWQgc2VjdGlvbnMgZnJvbSB0aGUgbWFuaWZlc3QgKGUuZy4gcGVyLWVudHJ5IGF0dHJpYnV0ZXMpXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkphdmFNYW5pZmVzdCByZXByZXNlbnRzIHRoZSBmaWVsZHMgb2YgaW50ZXJlc3QgZXh0cmFjdGVkIGZyb20gYSBKYXZhIGFyY2hpdmUncyBNRVRBLUlORi9NQU5JRkVTVC5NRiBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkphdmFQb21QYXJlbnRcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJncm91cElkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR3JvdXBJRCBpcyB0aGUgcGFyZW50IE1hdmVuIGdyb3VwIGlkZW50aWZpZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcImFydGlmYWN0SWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBcnRpZmFjdElEIGlzIHRoZSBwYXJlbnQgTWF2ZW4gYXJ0aWZhY3QgaWRlbnRpZmllclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhcmVudCB2ZXJzaW9uIChjaGlsZCBpbmhlcml0cyBjb25maWd1cmF0aW9uIGZyb20gdGhpcyBzcGVjaWZpYyB2ZXJzaW9uIG9mIHBhcmVudCBQT00pXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiZ3JvdXBJZFwiLFxuICAgICAgICBcImFydGlmYWN0SWRcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSmF2YVBvbVBhcmVudCBjb250YWlucyB0aGUgZmllbGRzIHdpdGhpbiB0aGUgPHBhcmVudD4gdGFnIGluIGEgcG9tLnhtbCBmaWxlXCJcbiAgICB9LFxuICAgIFwiSmF2YVBvbVByb2plY3RcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJwYXRoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGF0aCBpcyBwYXRoIHRvIHRoZSBwb20ueG1sIGZpbGUgd2l0aGluIHRoZSBhcmNoaXZlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXJlbnRcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvSmF2YVBvbVBhcmVudFwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXJlbnQgaXMgdGhlIHBhcmVudCBQT00gcmVmZXJlbmNlIGZvciBpbmhlcml0YW5jZSAoY2hpbGQgUE9NcyBpbmhlcml0IGNvbmZpZ3VyYXRpb24gZnJvbSBwYXJlbnQpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJncm91cElkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiR3JvdXBJRCBpcyBNYXZlbiBncm91cCBpZGVudGlmaWVyIChyZXZlcnNlZCBkb21haW4gbmFtZSBsaWtlIG9yZy5hcGFjaGUubWF2ZW4pXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhcnRpZmFjdElkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJ0aWZhY3RJRCBpcyBNYXZlbiBhcnRpZmFjdCBpZGVudGlmaWVyIChwcm9qZWN0IG5hbWUpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyBwcm9qZWN0IHZlcnNpb24gKHRvZ2V0aGVyIHdpdGggZ3JvdXBJZCBhbmQgYXJ0aWZhY3RJZCBmb3JtcyBNYXZlbiBjb29yZGluYXRlcyBncm91cElkOmFydGlmYWN0SWQ6dmVyc2lvbilcIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIGEgaHVtYW4tcmVhZGFibGUgcHJvamVjdCBuYW1lIChkaXNwbGF5ZWQgaW4gTWF2ZW4tZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24pXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0aW9uIGlzIGRldGFpbGVkIHByb2plY3QgZGVzY3JpcHRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcInVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlVSTCBpcyB0aGUgcHJvamVjdCBVUkwgKHR5cGljYWxseSBwcm9qZWN0IHdlYnNpdGUgb3IgcmVwb3NpdG9yeSlcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIFwiZ3JvdXBJZFwiLFxuICAgICAgICBcImFydGlmYWN0SWRcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwibmFtZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkphdmFQb21Qcm9qZWN0IHJlcHJlc2VudHMgZmllbGRzIG9mIGludGVyZXN0IGV4dHJhY3RlZCBmcm9tIGEgSmF2YSBhcmNoaXZlJ3MgcG9tLnhtbCBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkphdmFQb21Qcm9wZXJ0aWVzXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGggaXMgcGF0aCB0byB0aGUgcG9tLnByb3BlcnRpZXMgZmlsZSB3aXRoaW4gdGhlIGFyY2hpdmVcIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBwcm9qZWN0IG5hbWVcIlxuICAgICAgICB9LFxuICAgICAgICBcImdyb3VwSWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJHcm91cElEIGlzIE1hdmVuIGdyb3VwIGlkZW50aWZpZXIgdW5pcXVlbHkgaWRlbnRpZnlpbmcgdGhlIHByb2plY3QgYWNyb3NzIGFsbCBwcm9qZWN0cyAoZm9sbG93cyByZXZlcnNlZCBkb21haW4gbmFtZSBjb252ZW50aW9uIGxpa2UgY29tLmNvbXBhbnkucHJvamVjdClcIlxuICAgICAgICB9LFxuICAgICAgICBcImFydGlmYWN0SWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBcnRpZmFjdElEIGlzIE1hdmVuIGFydGlmYWN0IGlkZW50aWZpZXIsIHRoZSBuYW1lIG9mIHRoZSBqYXIvYXJ0aWZhY3QgKHVuaXF1ZSB3aXRoaW4gdGhlIGdyb3VwSWQgc2NvcGUpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyBhcnRpZmFjdCB2ZXJzaW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzY29wZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNjb3BlIGlzIGRlcGVuZGVuY3kgc2NvcGUgZGV0ZXJtaW5pbmcgd2hlbiBkZXBlbmRlbmN5IGlzIGF2YWlsYWJsZSAoY29tcGlsZT1kZWZhdWx0IGFsbCBwaGFzZXMsIHRlc3Q9dGVzdCBjb21waWxhdGlvbi9leGVjdXRpb24gb25seSwgcnVudGltZT1ydW50aW1lIGFuZCB0ZXN0IG5vdCBjb21waWxlLCBwcm92aWRlZD1leHBlY3RlZCBmcm9tIEpESyBvciBjb250YWluZXIpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRyYUZpZWxkc1wiOiB7XG4gICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkV4dHJhIGlzIGFkZGl0aW9uYWwgY3VzdG9tIHByb3BlcnRpZXMgbm90IGluIHN0YW5kYXJkIE1hdmVuIGNvb3JkaW5hdGVzXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwicGF0aFwiLFxuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJncm91cElkXCIsXG4gICAgICAgIFwiYXJ0aWZhY3RJZFwiLFxuICAgICAgICBcInZlcnNpb25cIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJKYXZhUG9tUHJvcGVydGllcyByZXByZXNlbnRzIHRoZSBmaWVsZHMgb2YgaW50ZXJlc3QgZXh0cmFjdGVkIGZyb20gYSBKYXZhIGFyY2hpdmUncyBwb20ucHJvcGVydGllcyBmaWxlLlwiXG4gICAgfSxcbiAgICBcIkphdmFWTVJlbGVhc2VcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJpbXBsZW1lbnRvclwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkltcGxlbWVudG9yIGlzIGV4dHJhY3RlZCB3aXRoIHRoZSBgamF2YS52ZW5kb3JgIEpWTSBwcm9wZXJ0eVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW1wbGVtZW50b3JWZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW1wbGVtZW50b3JWZXJzaW9uIGlzIGV4dHJhY3RlZCB3aXRoIHRoZSBgamF2YS52ZW5kb3IudmVyc2lvbmAgSlZNIHByb3BlcnR5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJqYXZhUnVudGltZVZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJKYXZhUnVudGltZVZlcnNpb24gaXMgZXh0cmFjdGVkIGZyb20gdGhlICdqYXZhLnJ1bnRpbWUudmVyc2lvbicgSlZNIHByb3BlcnR5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJqYXZhVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkphdmFWZXJzaW9uIG1hdGNoZXMgdGhhdCBmcm9tIGBqYXZhIC12ZXJzaW9uYCBjb21tYW5kIG91dHB1dFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiamF2YVZlcnNpb25EYXRlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSmF2YVZlcnNpb25EYXRlIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSAnamF2YS52ZXJzaW9uLmRhdGUnIEpWTSBwcm9wZXJ0eVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibGliY1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxpYmMgY2FuIGVpdGhlciBiZSAnZ2xpYmMnIG9yICdtdXNsJ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibW9kdWxlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTW9kdWxlcyBpcyBhIGxpc3Qgb2YgSlZNIG1vZHVsZXMgdGhhdCBhcmUgcGFja2FnZWRcIlxuICAgICAgICB9LFxuICAgICAgICBcIm9zQXJjaFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk9zQXJjaCBpcyB0aGUgdGFyZ2V0IENQVSBhcmNoaXRlY3R1cmVcIlxuICAgICAgICB9LFxuICAgICAgICBcIm9zTmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk9zTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgdGFyZ2V0IHJ1bnRpbWUgb3BlcmF0aW5nIHN5c3RlbSBlbnZpcm9ubWVudFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwib3NWZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT3NWZXJzaW9uIGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSB0YXJnZXQgcnVudGltZSBvcGVyYXRpbmcgc3lzdGVtIGVudmlyb25tZW50XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2UgcmVmZXJzIHRvIHRoZSBvcmlnaW4gcmVwb3NpdG9yeSBvZiBPcGVuSkRLIHNvdXJjZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYnVpbGRTb3VyY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCdWlsZFNvdXJjZSBHaXQgU0hBIG9mIHRoZSBidWlsZCByZXBvc2l0b3J5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWlsZFNvdXJjZVJlcG9cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCdWlsZFNvdXJjZVJlcG8gcmVmZXJzIHRvIHJoZSByZXBvc2l0b3J5IFVSTCBmb3IgdGhlIGJ1aWxkIHNvdXJjZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic291cmNlUmVwb1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNvdXJjZVJlcG8gcmVmZXJzIHRvIHRoZSBPcGVuSkRLIHJlcG9zaXRvcnkgVVJMXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmdWxsVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZ1bGxWZXJzaW9uIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSAnamF2YS5ydW50aW1lLnZlcnNpb24nIEpWTSBwcm9wZXJ0eVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2VtYW50aWNWZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2VtYW50aWNWZXJzaW9uIGlzIGRlcml2ZWQgZnJvbSB0aGUgT3BlbkpESyB2ZXJzaW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWlsZEluZm9cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCdWlsZEluZm8gY29udGFpbnMgYWRkaXRpb25hbCBidWlsZCBpbmZvcm1hdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwianZtVmFyaWFudFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkp2bVZhcmlhbnQgc3BlY2lmaWVzIHRoZSBKVk0gdmFyaWFudCAoZS5nLiwgSG90c3BvdCBvciBPcGVuSjkpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJqdm1WZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSnZtVmVyc2lvbiBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgJ2phdmEudm0udmVyc2lvbicgSlZNIHByb3BlcnR5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpbWFnZVR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJbWFnZVR5cGUgY2FuIGJlICdKREsnIG9yICdKUkUnXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWlsZFR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCdWlsZFR5cGUgY2FuIGJlICdjb21tZXJjaWFsJyAodXNlZCBpbiBzb21lIG9sZGVyIG9yYWNsZSBKREsgZGlzdHJpYnV0aW9ucylcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSmF2YVZNUmVsZWFzZSByZXByZXNlbnRzIEpWTSB2ZXJzaW9uIGFuZCBidWlsZCBpbmZvcm1hdGlvbiBleHRyYWN0ZWQgZnJvbSB0aGUgcmVsZWFzZSBmaWxlIGluIGEgSmF2YSBpbnN0YWxsYXRpb24uXCJcbiAgICB9LFxuICAgIFwiSmF2YXNjcmlwdE5wbVBhY2thZ2VcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyB0aGUgcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHBhY2thZ2UuanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvbiBhcyBmb3VuZCBpbiBwYWNrYWdlLmpzb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImF1dGhvclwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkF1dGhvciBpcyBwYWNrYWdlIGF1dGhvciBuYW1lXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJob21lcGFnZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkhvbWVwYWdlIGlzIHByb2plY3QgaG9tZXBhZ2UgVVJMXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0aW9uIGlzIGEgaHVtYW4tcmVhZGFibGUgcGFja2FnZSBkZXNjcmlwdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVVJMIGlzIHJlcG9zaXRvcnkgb3IgcHJvamVjdCBVUkxcIlxuICAgICAgICB9LFxuICAgICAgICBcInByaXZhdGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHJpdmF0ZSBpcyB3aGV0aGVyIHRoaXMgaXMgYSBwcml2YXRlIHBhY2thZ2VcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcImF1dGhvclwiLFxuICAgICAgICBcImhvbWVwYWdlXCIsXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIixcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJwcml2YXRlXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTnBtUGFja2FnZSByZXByZXNlbnRzIHRoZSBjb250ZW50cyBvZiBhIGphdmFzY3JpcHQgcGFja2FnZS5qc29uIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiSmF2YXNjcmlwdE5wbVBhY2thZ2VMb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZXNvbHZlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlc29sdmVkIGlzIFVSTCB3aGVyZSB0aGlzIHBhY2thZ2Ugd2FzIGRvd25sb2FkZWQgZnJvbSAocmVnaXN0cnkgc291cmNlKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW50ZWdyaXR5XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW50ZWdyaXR5IGlzIFN1YnJlc291cmNlIEludGVncml0eSBoYXNoIGZvciB2ZXJpZmljYXRpb24gdXNpbmcgc3RhbmRhcmQgU1JJIGZvcm1hdCAoc2hhNTEyLS4uLiBvciBzaGExLS4uLikuIG5wbSBjaGFuZ2VkIGZyb20gU0hBLTEgdG8gU0hBLTUxMiBpbiBuZXdlciB2ZXJzaW9ucy4gRm9yIHJlZ2lzdHJ5IHNvdXJjZXMgdGhpcyBpcyB0aGUgaW50ZWdyaXR5IGZyb20gcmVnaXN0cnksIGZvciByZW1vdGUgdGFyYmFsbHMgaXQncyBTSEEtNTEyIG9mIHRoZSBmaWxlLiBucG0gdmVyaWZpZXMgdGFyYmFsbCBtYXRjaGVzIHRoaXMgaGFzaCBiZWZvcmUgdW5wYWNraW5nLCB0aHJvd2luZyBFSU5URUdSSVRZIGVycm9yIGlmIG1pc21hdGNoIGRldGVjdGVkLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVwZW5kZW5jaWVzIGlzIGEgbWFwIG9mIGRlcGVuZGVuY2llcyBhbmQgdGhlaXIgdmVyc2lvbiBtYXJrZXJzLCBpLmUuIFxcXCJsb2Rhc2hcXFwiOiBcXFwiXjEuMC4wXFxcIlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlc29sdmVkXCIsXG4gICAgICAgIFwiaW50ZWdyaXR5XCIsXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTnBtUGFja2FnZUxvY2tFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIGVudHJ5IHdpdGhpbiB0aGUgXFxcInBhY2thZ2VzXFxcIiBzZWN0aW9uIG9mIGEgcGFja2FnZS1sb2NrLmpzb24gZmlsZS5cIlxuICAgIH0sXG4gICAgXCJKYXZhc2NyaXB0UG5wbUxvY2tFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInJlc29sdXRpb25cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUG5wbUxvY2tSZXNvbHV0aW9uXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlc29sdXRpb24gaXMgdGhlIHJlc29sdXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBwYWNrYWdlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgaXMgYSBtYXAgb2YgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciB2ZXJzaW9uc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlc29sdXRpb25cIixcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQbnBtTG9ja0VudHJ5IHJlcHJlc2VudHMgYSBzaW5nbGUgZW50cnkgaW4gdGhlIFxcXCJwYWNrYWdlc1xcXCIgc2VjdGlvbiBvZiBhIHBucG0tbG9jay55YW1sIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiSmF2YXNjcmlwdFlhcm5Mb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZXNvbHZlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlc29sdmVkIGlzIFVSTCB3aGVyZSB0aGlzIHBhY2thZ2Ugd2FzIGRvd25sb2FkZWQgZnJvbVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW50ZWdyaXR5XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW50ZWdyaXR5IGlzIFN1YnJlc291cmNlIEludGVncml0eSBoYXNoIGZvciB2ZXJpZmljYXRpb24gKFNSSSBmb3JtYXQpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgaXMgYSBtYXAgb2YgZGVwZW5kZW5jaWVzIGFuZCB0aGVpciB2ZXJzaW9uc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJlc29sdmVkXCIsXG4gICAgICAgIFwiaW50ZWdyaXR5XCIsXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiWWFybkxvY2tFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIGVudHJ5IHNlY3Rpb24gb2YgYSB5YXJuLmxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJLZXlWYWx1ZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImtleVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIktleSBpcyB0aGUga2V5IG5hbWVcIlxuICAgICAgICB9LFxuICAgICAgICBcInZhbHVlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmFsdWUgaXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5XCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwia2V5XCIsXG4gICAgICAgIFwidmFsdWVcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJLZXlWYWx1ZSByZXByZXNlbnRzIGEgc2luZ2xlIGtleS12YWx1ZSBwYWlyLlwiXG4gICAgfSxcbiAgICBcIktleVZhbHVlc1wiOiB7XG4gICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9LZXlWYWx1ZVwiXG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJLZXlWYWx1ZXMgcmVwcmVzZW50cyBhbiBvcmRlcmVkIGNvbGxlY3Rpb24gb2Yga2V5LXZhbHVlIHBhaXJzIHRoYXQgcHJlc2VydmVzIGluc2VydGlvbiBvcmRlci5cIlxuICAgIH0sXG4gICAgXCJMaWNlbnNlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidmFsdWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWYWx1ZSBpcyB0aGUgcmF3IGxpY2Vuc2UgaWRlbnRpZmllciBvciBleHByZXNzaW9uIGFzIGZvdW5kLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic3BkeEV4cHJlc3Npb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTUERYRXhwcmVzc2lvbiBpcyB0aGUgcGFyc2VkIFNQRFggbGljZW5zZSBleHByZXNzaW9uLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlR5cGUgaXMgdGhlIGxpY2Vuc2UgdHlwZSBjbGFzc2lmaWNhdGlvbiAoZS5nLiwgZGVjbGFyZWQsIGNvbmNsdWRlZCwgZGlzY292ZXJlZCkuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkxzIGFyZSBVUkxzIHdoZXJlIGxpY2Vuc2UgdGV4dCBvciBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsb2NhdGlvbnNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Mb2NhdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJMb2NhdGlvbnMgYXJlIGZpbGUgbG9jYXRpb25zIHdoZXJlIHRoaXMgbGljZW5zZSB3YXMgZGlzY292ZXJlZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImNvbnRlbnRzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ29udGVudHMgaXMgdGhlIGZ1bGwgbGljZW5zZSB0ZXh0IGNvbnRlbnQuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidmFsdWVcIixcbiAgICAgICAgXCJzcGR4RXhwcmVzc2lvblwiLFxuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJ1cmxzXCIsXG4gICAgICAgIFwibG9jYXRpb25zXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGljZW5zZSByZXByZXNlbnRzIHNvZnR3YXJlIGxpY2Vuc2UgaW5mb3JtYXRpb24gZGlzY292ZXJlZCBmb3IgYSBwYWNrYWdlLCBpbmNsdWRpbmcgU1BEWCBleHByZXNzaW9ucyBhbmQgc3VwcG9ydGluZyBldmlkZW5jZSBsb2NhdGlvbnMuXCJcbiAgICB9LFxuICAgIFwiTGludXhLZXJuZWxBcmNoaXZlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMga2VybmVsIG5hbWUgKHR5cGljYWxseSBcXFwiTGludXhcXFwiKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaGl0ZWN0dXJlIGlzIHRoZSB0YXJnZXQgQ1BVIGFyY2hpdGVjdHVyZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMga2VybmVsIHZlcnNpb24gc3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRlbmRlZFZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFeHRlbmRlZFZlcnNpb24gaXMgYWRkaXRpb25hbCB2ZXJzaW9uIGluZm9ybWF0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWlsZFRpbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCdWlsZFRpbWUgaXMgd2hlbiB0aGUga2VybmVsIHdhcyBidWlsdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXV0aG9yXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXV0aG9yIGlzIHdobyBidWlsdCB0aGUga2VybmVsXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGb3JtYXQgaXMga2VybmVsIGltYWdlIGZvcm1hdCAoZS5nLiBiekltYWdlLCB6SW1hZ2UpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJyd1Jvb3RGU1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSV1Jvb3RGUyBpcyB3aGV0aGVyIHJvb3QgZmlsZXN5c3RlbSBpcyBtb3VudGVkIHJlYWQtd3JpdGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInN3YXBEZXZpY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU3dhcERldmljZSBpcyBzd2FwIGRldmljZSBudW1iZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInJvb3REZXZpY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUm9vdERldmljZSBpcyByb290IGRldmljZSBudW1iZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInZpZGVvTW9kZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZpZGVvTW9kZSBpcyBkZWZhdWx0IHZpZGVvIG1vZGUgc2V0dGluZ1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJhcmNoaXRlY3R1cmVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGludXhLZXJuZWwgcmVwcmVzZW50cyBhbGwgY2FwdHVyZWQgZGF0YSBmb3IgYSBMaW51eCBrZXJuZWxcIlxuICAgIH0sXG4gICAgXCJMaW51eEtlcm5lbE1vZHVsZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIG1vZHVsZSBuYW1lXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyBtb2R1bGUgdmVyc2lvbiBzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInNvdXJjZVZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2VWZXJzaW9uIGlzIHRoZSBzb3VyY2UgY29kZSB2ZXJzaW9uIGlkZW50aWZpZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRoIGlzIHRoZSBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIC5rbyBrZXJuZWwgb2JqZWN0IGZpbGUgKGFic29sdXRlIHBhdGgpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0aW9uIGlzIGEgaHVtYW4tcmVhZGFibGUgbW9kdWxlIGRlc2NyaXB0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdXRob3JcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBdXRob3IgaXMgbW9kdWxlIGF1dGhvciBuYW1lIGFuZCBlbWFpbFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibGljZW5zZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxpY2Vuc2UgaXMgbW9kdWxlIGxpY2Vuc2UgKGUuZy4gR1BMLCBCU0QpIHdoaWNoIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIGtlcm5lbFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwia2VybmVsVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIktlcm5lbFZlcnNpb24gaXMga2VybmVsIHZlcnNpb24gdGhpcyBtb2R1bGUgd2FzIGJ1aWx0IGZvclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvbk1hZ2ljXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbk1hZ2ljIGlzIHZlcnNpb24gbWFnaWMgc3RyaW5nIGZvciBjb21wYXRpYmlsaXR5IGNoZWNraW5nIChpbmNsdWRlcyBrZXJuZWwgdmVyc2lvbiwgU01QIHN0YXR1cywgbW9kdWxlIGxvYWRpbmcgY2FwYWJpbGl0aWVzIGxpa2UgXFxcIjMuMTcuNC0zMDIuZmMyMS54ODZfNjQgU01QIG1vZF91bmxvYWQgbW9kdmVyc2lvbnNcXFwiKS4gTW9kdWxlIHdpbGwgTk9UIGxvYWQgaWYgdmVybWFnaWMgZG9lc24ndCBtYXRjaCBydW5uaW5nIGtlcm5lbC5cIlxuICAgICAgICB9LFxuICAgICAgICBcInBhcmFtZXRlcnNcIjoge1xuICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9MaW51eEtlcm5lbE1vZHVsZVBhcmFtZXRlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFyYW1ldGVycyBhcmUgdGhlIG1vZHVsZSBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgbG9hZCB0aW1lICh1c2VyLXNldHRhYmxlIHZhbHVlcyBsaWtlIG1vZHVsZSBvcHRpb25zKVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJMaW51eEtlcm5lbE1vZHVsZSByZXByZXNlbnRzIGEgbG9hZGFibGUga2VybmVsIG1vZHVsZSAoLmtvIGZpbGUpIHdpdGggaXRzIG1ldGFkYXRhLCBwYXJhbWV0ZXJzLCBhbmQgZGVwZW5kZW5jaWVzLlwiXG4gICAgfSxcbiAgICBcIkxpbnV4S2VybmVsTW9kdWxlUGFyYW1ldGVyXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlR5cGUgaXMgcGFyYW1ldGVyIGRhdGEgdHlwZSAoZS5nLiBpbnQsIHN0cmluZywgYm9vbCwgYXJyYXkgdHlwZXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0aW9uIGlzIGEgaHVtYW4tcmVhZGFibGUgcGFyYW1ldGVyIGRlc2NyaXB0aW9uIGV4cGxhaW5pbmcgd2hhdCB0aGUgcGFyYW1ldGVyIGNvbnRyb2xzXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxpbnV4S2VybmVsTW9kdWxlUGFyYW1ldGVyIHJlcHJlc2VudHMgYSBjb25maWd1cmFibGUgcGFyYW1ldGVyIGZvciBhIGtlcm5lbCBtb2R1bGUgd2l0aCBpdHMgdHlwZSBhbmQgZGVzY3JpcHRpb24uXCJcbiAgICB9LFxuICAgIFwiTGludXhSZWxlYXNlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicHJldHR5TmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlByZXR0eU5hbWUgaXMgYSBodW1hbi1yZWFkYWJsZSBvcGVyYXRpbmcgc3lzdGVtIG5hbWUgd2l0aCB2ZXJzaW9uLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gbmFtZSB3aXRob3V0IHZlcnNpb24gaW5mb3JtYXRpb24uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklEIGlzIHRoZSBsb3dlci1jYXNlIG9wZXJhdGluZyBzeXN0ZW0gaWRlbnRpZmllciAoZS5nLiwgXFxcInVidW50dVxcXCIsIFxcXCJyaGVsXFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpZExpa2VcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvSURMaWtlc1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJRExpa2UgaXMgYSBsaXN0IG9mIG9wZXJhdGluZyBzeXN0ZW0gSURzIHRoaXMgZGlzdHJpYnV0aW9uIGlzIHNpbWlsYXIgdG8gb3IgZGVyaXZlZCBmcm9tLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gdmVyc2lvbiBpbmNsdWRpbmcgY29kZW5hbWUgaWYgYXZhaWxhYmxlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvbklEXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbklEIGlzIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb24gbnVtYmVyIG9yIGlkZW50aWZpZXIuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uQ29kZW5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uQ29kZW5hbWUgaXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gcmVsZWFzZSBjb2RlbmFtZSAoZS5nLiwgXFxcImphbW15XFxcIiwgXFxcImJ1bGxzZXllXFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWlsZElEXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQnVpbGRJRCBpcyBhIGJ1aWxkIGlkZW50aWZpZXIgZm9yIHRoZSBvcGVyYXRpbmcgc3lzdGVtLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW1hZ2VJRFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkltYWdlSUQgaXMgYW4gaWRlbnRpZmllciBmb3IgY29udGFpbmVyIG9yIGNsb3VkIGltYWdlcy5cIlxuICAgICAgICB9LFxuICAgICAgICBcImltYWdlVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkltYWdlVmVyc2lvbiBpcyB0aGUgdmVyc2lvbiBmb3IgY29udGFpbmVyIG9yIGNsb3VkIGltYWdlcy5cIlxuICAgICAgICB9LFxuICAgICAgICBcInZhcmlhbnRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWYXJpYW50IGlzIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHZhcmlhbnQgbmFtZSAoZS5nLiwgXFxcIlNlcnZlclxcXCIsIFxcXCJXb3Jrc3RhdGlvblxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmFyaWFudElEXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmFyaWFudElEIGlzIHRoZSBsb3dlci1jYXNlIG9wZXJhdGluZyBzeXN0ZW0gdmFyaWFudCBpZGVudGlmaWVyLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG9tZVVSTFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkhvbWVVUkwgaXMgdGhlIGhvbWVwYWdlIFVSTCBmb3IgdGhlIG9wZXJhdGluZyBzeXN0ZW0uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzdXBwb3J0VVJMXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU3VwcG9ydFVSTCBpcyB0aGUgc3VwcG9ydCBvciBoZWxwIFVSTCBmb3IgdGhlIG9wZXJhdGluZyBzeXN0ZW0uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWdSZXBvcnRVUkxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCdWdSZXBvcnRVUkwgaXMgdGhlIGJ1ZyByZXBvcnRpbmcgVVJMIGZvciB0aGUgb3BlcmF0aW5nIHN5c3RlbS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInByaXZhY3lQb2xpY3lVUkxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQcml2YWN5UG9saWN5VVJMIGlzIHRoZSBwcml2YWN5IHBvbGljeSBVUkwgZm9yIHRoZSBvcGVyYXRpbmcgc3lzdGVtLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY3BlTmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNQRU5hbWUgaXMgdGhlIENvbW1vbiBQbGF0Zm9ybSBFbnVtZXJhdGlvbiBuYW1lIGZvciB0aGUgb3BlcmF0aW5nIHN5c3RlbS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInN1cHBvcnRFbmRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTdXBwb3J0RW5kIGlzIHRoZSBlbmQgb2Ygc3VwcG9ydCBkYXRlIG9yIHZlcnNpb24gaWRlbnRpZmllci5cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4dGVuZGVkU3VwcG9ydFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFeHRlbmRlZFN1cHBvcnQgaW5kaWNhdGVzIHdoZXRoZXIgZXh0ZW5kZWQgc2VjdXJpdHkgb3Igc3VwcG9ydCBpcyBhdmFpbGFibGUuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxpbnV4UmVsZWFzZSBjb250YWlucyBMaW51eCBkaXN0cmlidXRpb24gaWRlbnRpZmljYXRpb24gYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gZXh0cmFjdGVkIGZyb20gL2V0Yy9vcy1yZWxlYXNlIG9yIHNpbWlsYXIgc3lzdGVtIGZpbGVzLlwiXG4gICAgfSxcbiAgICBcIkxvY2F0aW9uXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlYWxQYXRoIGlzIHRoZSBjYW5vbmljYWwgYWJzb2x1dGUgZm9ybSBvZiB0aGUgcGF0aCBhY2Nlc3NlZCAoYWxsIHN5bWJvbGljIGxpbmtzIGhhdmUgYmVlbiBmb2xsb3dlZCBhbmQgcmVsYXRpdmUgcGF0aCBjb21wb25lbnRzIGxpa2UgJy4nIGFuZCAnLi4nIGhhdmUgYmVlbiByZW1vdmVkKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImxheWVySURcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlU3lzdGVtSUQgaXMgYW4gSUQgcmVwcmVzZW50aW5nIGFuZCBlbnRpcmUgZmlsZXN5c3RlbS4gRm9yIGNvbnRhaW5lciBpbWFnZXMsIHRoaXMgaXMgYSBsYXllciBkaWdlc3QuIEZvciBkaXJlY3RvcmllcyBvciBhIHJvb3QgZmlsZXN5c3RlbSwgdGhpcyBpcyBibGFuay5cIlxuICAgICAgICB9LFxuICAgICAgICBcImFjY2Vzc1BhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBY2Nlc3NQYXRoIGlzIHRoZSBwYXRoIHVzZWQgdG8gcmV0cmlldmUgZmlsZSBjb250ZW50cyAod2hpY2ggbWF5IG9yIG1heSBub3QgaGF2ZSBoYXJkbGlua3MgLyBzeW1saW5rcyBpbiB0aGUgcGF0aClcIlxuICAgICAgICB9LFxuICAgICAgICBcImFubm90YXRpb25zXCI6IHtcbiAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJiaXRyYXJ5IGtleS12YWx1ZSBwYWlycyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFubm90YXRlIGEgbG9jYXRpb25cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIFwiYWNjZXNzUGF0aFwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxvY2F0aW9uIHJlcHJlc2VudHMgYSBwYXRoIHJlbGF0aXZlIHRvIGEgcGFydGljdWxhciBmaWxlc3lzdGVtIHJlc29sdmVkIHRvIGEgc3BlY2lmaWMgZmlsZS5SZWZlcmVuY2UuXCJcbiAgICB9LFxuICAgIFwiTHVhcm9ja3NQYWNrYWdlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIHBhY2thZ2UgbmFtZSBhcyBmb3VuZCBpbiB0aGUgLnJvY2tzcGVjIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBwYWNrYWdlIHZlcnNpb24gYXMgZm91bmQgaW4gdGhlIC5yb2Nrc3BlYyBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsaWNlbnNlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGljZW5zZSBpcyBsaWNlbnNlIGlkZW50aWZpZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvbWVwYWdlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSG9tZXBhZ2UgaXMgcHJvamVjdCBob21lcGFnZSBVUkxcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVzY3JpcHRpb24gaXMgYSBodW1hbi1yZWFkYWJsZSBwYWNrYWdlIGRlc2NyaXB0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkwgaXMgdGhlIHNvdXJjZSBkb3dubG9hZCBVUkxcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlcGVuZGVuY2llcyBhcmUgdGhlIG1hcCBvZiBkZXBlbmRlbmN5IG5hbWVzIHRvIHZlcnNpb24gY29uc3RyYWludHNcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcImxpY2Vuc2VcIixcbiAgICAgICAgXCJob21lcGFnZVwiLFxuICAgICAgICBcImRlc2NyaXB0aW9uXCIsXG4gICAgICAgIFwidXJsXCIsXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTHVhUm9ja3NQYWNrYWdlIHJlcHJlc2VudHMgYSBMdWEgcGFja2FnZSBtYW5hZ2VkIGJ5IHRoZSBMdWFSb2NrcyBwYWNrYWdlIG1hbmFnZXIgd2l0aCBtZXRhZGF0YSBmcm9tIC5yb2Nrc3BlYyBmaWxlcy5cIlxuICAgIH0sXG4gICAgXCJNaWNyb3NvZnRLYlBhdGNoXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicHJvZHVjdF9pZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlByb2R1Y3RJRCBpcyBNU1JDIFByb2R1Y3QgSUQgKGUuZy4gXFxcIldpbmRvd3MgMTAgVmVyc2lvbiAxNzAzIGZvciAzMi1iaXQgU3lzdGVtc1xcXCIpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJrYlwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIktiIGlzIEtub3dsZWRnZSBCYXNlIGFydGljbGUgbnVtYmVyIChlLmcuIFxcXCI1MDAxMDI4XFxcIilcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJwcm9kdWN0X2lkXCIsXG4gICAgICAgIFwia2JcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNaWNyb3NvZnRLYlBhdGNoIHJlcHJlc2VudHMgYSBXaW5kb3dzIEtub3dsZWRnZSBCYXNlIHBhdGNoIGlkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgTWljcm9zb2Z0IHByb2R1Y3QgZnJvbSB0aGUgTVNSQyAoTWljcm9zb2Z0IFNlY3VyaXR5IFJlc3BvbnNlIENlbnRlcikuXCJcbiAgICB9LFxuICAgIFwiTml4RGVyaXZhdGlvblwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRoIGlzIHBhdGggdG8gdGhlIC5kcnYgZmlsZSBpbiBOaXggc3RvcmVcIlxuICAgICAgICB9LFxuICAgICAgICBcInN5c3RlbVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlN5c3RlbSBpcyB0YXJnZXQgc3lzdGVtIHN0cmluZyBpbmRpY2F0aW5nIHdoZXJlIGRlcml2YXRpb24gY2FuIGJlIGJ1aWx0IChlLmcuIFxcXCJ4ODZfNjQtbGludXhcXFwiLCBcXFwiYWFyY2g2NC1kYXJ3aW5cXFwiKS4gTXVzdCBtYXRjaCBjdXJyZW50IHN5c3RlbSBmb3IgbG9jYWwgYnVpbGRzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW5wdXREZXJpdmF0aW9uc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL05peERlcml2YXRpb25SZWZlcmVuY2VcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW5wdXREZXJpdmF0aW9ucyBhcmUgdGhlIGxpc3Qgb2Ygb3RoZXIgZGVyaXZhdGlvbnMgdGhhdCB3ZXJlIGlucHV0cyB0byB0aGlzIGJ1aWxkIChkZXBlbmRlbmNpZXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpbnB1dFNvdXJjZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIklucHV0U291cmNlcyBhcmUgdGhlIGxpc3Qgb2Ygc291cmNlIGZpbGUgcGF0aHMgdGhhdCB3ZXJlIGlucHV0cyB0byB0aGlzIGJ1aWxkXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5peERlcml2YXRpb24gcmVwcmVzZW50cyBhIE5peCAuZHJ2IGZpbGUgdGhhdCBkZXNjcmliZXMgaG93IHRvIGJ1aWxkIGEgcGFja2FnZSBpbmNsdWRpbmcgaW5wdXRzLCBvdXRwdXRzLCBhbmQgYnVpbGQgaW5zdHJ1Y3Rpb25zLlwiXG4gICAgfSxcbiAgICBcIk5peERlcml2YXRpb25SZWZlcmVuY2VcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJwYXRoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGF0aCBpcyBwYXRoIHRvIHRoZSByZWZlcmVuY2VkIC5kcnYgZmlsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwib3V0cHV0c1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT3V0cHV0cyBhcmUgd2hpY2ggb3V0cHV0cyBvZiB0aGUgcmVmZXJlbmNlZCBkZXJpdmF0aW9uIHdlcmUgdXNlZCAoZS5nLiBbXFxcIm91dFxcXCJdLCBbXFxcImJpblxcXCIsIFxcXCJkZXZcXFwiXSlcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTml4RGVyaXZhdGlvblJlZmVyZW5jZSByZXByZXNlbnRzIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgZGVyaXZhdGlvbiB1c2VkIGFzIGEgYnVpbGQgaW5wdXQgb3IgcnVudGltZSBkZXBlbmRlbmN5LlwiXG4gICAgfSxcbiAgICBcIk5peFN0b3JlRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJwYXRoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGF0aCBpcyBmdWxsIHN0b3JlIHBhdGggZm9yIHRoaXMgb3V0cHV0IChlLmcuIC9uaXgvc3RvcmUvYWJjMTIzLi4uLXBhY2thZ2UtMS4wKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwib3V0cHV0XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT3V0cHV0IGlzIHRoZSBzcGVjaWZpYyBvdXRwdXQgbmFtZSBmb3IgbXVsdGktb3V0cHV0IHBhY2thZ2VzIChlbXB0eSBzdHJpbmcgZm9yIGRlZmF1bHQgXFxcIm91dFxcXCIgb3V0cHV0LCBjYW4gYmUgXFxcImJpblxcXCIsIFxcXCJkZXZcXFwiLCBcXFwiZG9jXFxcIiwgZXRjLilcIlxuICAgICAgICB9LFxuICAgICAgICBcIm91dHB1dEhhc2hcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJPdXRwdXRIYXNoIGlzIGhhc2ggcHJlZml4IG9mIHRoZSBzdG9yZSBwYXRoIGJhc2VuYW1lIChmaXJzdCBwYXJ0IGJlZm9yZSB0aGUgZGFzaClcIlxuICAgICAgICB9LFxuICAgICAgICBcImRlcml2YXRpb25cIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvTml4RGVyaXZhdGlvblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXJpdmF0aW9uIGlzIGluZm9ybWF0aW9uIGFib3V0IHRoZSAuZHJ2IGZpbGUgdGhhdCBkZXNjcmliZXMgaG93IHRoaXMgcGFja2FnZSB3YXMgYnVpbHRcIlxuICAgICAgICB9LFxuICAgICAgICBcImZpbGVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlcyBhcmUgdGhlIGxpc3Qgb2YgZmlsZXMgdW5kZXIgdGhlIG5peC9zdG9yZSBwYXRoIGZvciB0aGlzIHBhY2thZ2VcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJvdXRwdXRIYXNoXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTml4U3RvcmVFbnRyeSByZXByZXNlbnRzIGEgcGFja2FnZSBpbiB0aGUgTml4IHN0b3JlICgvbml4L3N0b3JlKSB3aXRoIGl0cyBkZXJpdmF0aW9uIGluZm9ybWF0aW9uIGFuZCBtZXRhZGF0YS5cIlxuICAgIH0sXG4gICAgXCJPcGFtUGFja2FnZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBwYWNrYWdlIG5hbWUgYXMgZm91bmQgaW4gdGhlIC5vcGFtIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBwYWNrYWdlIHZlcnNpb24gYXMgZm91bmQgaW4gdGhlIC5vcGFtIGZpbGVcIlxuICAgICAgICB9LFxuICAgICAgICBcImxpY2Vuc2VzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJMaWNlbnNlcyBhcmUgdGhlIGxpc3Qgb2YgYXBwbGljYWJsZSBsaWNlbnNlc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVVJMIGlzIGRvd25sb2FkIFVSTCBmb3IgdGhlIHBhY2thZ2Ugc291cmNlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjaGVja3N1bVwiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ2hlY2tzdW1zIGFyZSB0aGUgbGlzdCBvZiBjaGVja3N1bXMgZm9yIHZlcmlmaWNhdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG9tZXBhZ2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIb21lcGFnZSBpcyBwcm9qZWN0IGhvbWVwYWdlIFVSTFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgYXJlIHRoZSBsaXN0IG9mIHJlcXVpcmVkIGRlcGVuZGVuY2llc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwibGljZW5zZXNcIixcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJjaGVja3N1bVwiLFxuICAgICAgICBcImhvbWVwYWdlXCIsXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT3BhbVBhY2thZ2UgcmVwcmVzZW50cyBhbiBPQ2FtbCBwYWNrYWdlIG1hbmFnZWQgYnkgdGhlIE9QQU0gcGFja2FnZSBtYW5hZ2VyIHdpdGggbWV0YWRhdGEgZnJvbSAub3BhbSBmaWxlcy5cIlxuICAgIH0sXG4gICAgXCJQYWNrYWdlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiaWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZm91bmRCeVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsb2NhdGlvbnNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Mb2NhdGlvblwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibGljZW5zZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvbGljZW5zZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImxhbmd1YWdlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcImNwZXNcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvY3Blc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtZXRhZGF0YVR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJudWxsXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQWxwbURiRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9BcGtEYkVudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQmluYXJ5U2lnbmF0dXJlXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQml0bmFtaVNib21FbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0NDb25hbkZpbGVFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0NDb25hbkluZm9FbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0NDb25hbkxvY2tFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0NDb25hbkxvY2tWMkVudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQ29jb2FQb2RmaWxlTG9ja0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQ29uZGFNZXRhZGF0YUVudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRGFydFB1YnNwZWNcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9EYXJ0UHVic3BlY0xvY2tFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0RvdG5ldERlcHNFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0RvdG5ldFBhY2thZ2VzTG9ja0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRG90bmV0UG9ydGFibGVFeGVjdXRhYmxlRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9EcGtnQXJjaGl2ZUVudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRHBrZ0RiRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9FbGZCaW5hcnlQYWNrYWdlTm90ZUpzb25QYXlsb2FkXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRWxpeGlyTWl4TG9ja0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRXJsYW5nUmViYXJMb2NrRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9HZ3VmRmlsZUhlYWRlclwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0dpdGh1YkFjdGlvbnNVc2VTdGF0ZW1lbnRcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Hb01vZHVsZUJ1aWxkaW5mb0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvR29Nb2R1bGVFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0dvU291cmNlRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9IYXNrZWxsSGFja2FnZVN0YWNrRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9IYXNrZWxsSGFja2FnZVN0YWNrTG9ja0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvSG9tZWJyZXdGb3JtdWxhXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvSmF2YUFyY2hpdmVcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9KYXZhSnZtSW5zdGFsbGF0aW9uXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvSmF2YXNjcmlwdE5wbVBhY2thZ2VcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9KYXZhc2NyaXB0TnBtUGFja2FnZUxvY2tFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0phdmFzY3JpcHRQbnBtTG9ja0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvSmF2YXNjcmlwdFlhcm5Mb2NrRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9MaW51eEtlcm5lbEFyY2hpdmVcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9MaW51eEtlcm5lbE1vZHVsZVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0x1YXJvY2tzUGFja2FnZVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL01pY3Jvc29mdEtiUGF0Y2hcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9OaXhTdG9yZUVudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvT3BhbVBhY2thZ2VcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QZUJpbmFyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1BocENvbXBvc2VySW5zdGFsbGVkRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QaHBDb21wb3NlckxvY2tFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1BocFBlYXJFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1BocFBlY2xFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1BvcnRhZ2VEYkVudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUHl0aG9uUGFja2FnZVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1B5dGhvblBkbUxvY2tFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1B5dGhvblBpcFJlcXVpcmVtZW50c0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUHl0aG9uUGlwZmlsZUxvY2tFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1B5dGhvblBvZXRyeUxvY2tFbnRyeVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1B5dGhvblV2TG9ja0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUkRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUnBtQXJjaGl2ZVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1JwbURiRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9SdWJ5R2Vtc3BlY1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1J1c3RDYXJnb0F1ZGl0RW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9SdXN0Q2FyZ29Mb2NrRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9TbmFwRW50cnlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Td2lmdFBhY2thZ2VNYW5hZ2VyTG9ja0VudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvU3dpcGxwYWNrUGFja2FnZVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1RlcnJhZm9ybUxvY2tQcm92aWRlckVudHJ5XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvV29yZHByZXNzUGx1Z2luRW50cnlcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiaWRcIixcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJmb3VuZEJ5XCIsXG4gICAgICAgIFwibG9jYXRpb25zXCIsXG4gICAgICAgIFwibGljZW5zZXNcIixcbiAgICAgICAgXCJsYW5ndWFnZVwiLFxuICAgICAgICBcImNwZXNcIixcbiAgICAgICAgXCJwdXJsXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFja2FnZSByZXByZXNlbnRzIGEgcGtnLlBhY2thZ2Ugb2JqZWN0IHNwZWNpYWxpemVkIGZvciBKU09OIG1hcnNoYWxpbmcgYW5kIHVubWFyc2hhbGxpbmcuXCJcbiAgICB9LFxuICAgIFwiUGVCaW5hcnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJWZXJzaW9uUmVzb3VyY2VzXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0tleVZhbHVlc1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uUmVzb3VyY2VzIGNvbnRhaW5zIGtleS12YWx1ZSBwYWlycyBleHRyYWN0ZWQgZnJvbSB0aGUgUEUgZmlsZSdzIHZlcnNpb24gcmVzb3VyY2Ugc2VjdGlvbiAoZS5nLiwgRmlsZVZlcnNpb24sIFByb2R1Y3ROYW1lLCBDb21wYW55TmFtZSkuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiVmVyc2lvblJlc291cmNlc1wiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBFQmluYXJ5IHJlcHJlc2VudHMgbWV0YWRhdGEgY2FwdHVyZWQgZnJvbSBhIFBvcnRhYmxlIEV4ZWN1dGFibGUgZm9ybWF0dGVkIGJpbmFyeSAoZGxsLCBleGUsIGV0Yy4pXCJcbiAgICB9LFxuICAgIFwiUGhwQ29tcG9zZXJBdXRob3JzXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgYXV0aG9yJ3MgZnVsbCBuYW1lXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJlbWFpbFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkVtYWlsIGlzIGF1dGhvcidzIGVtYWlsIGFkZHJlc3NcIlxuICAgICAgICB9LFxuICAgICAgICBcImhvbWVwYWdlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSG9tZXBhZ2UgaXMgYXV0aG9yJ3MgcGVyc29uYWwgb3IgY29tcGFueSB3ZWJzaXRlXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBocENvbXBvc2VyQXV0aG9ycyByZXByZXNlbnRzIGF1dGhvciBpbmZvcm1hdGlvbiBmb3IgYSBQSFAgQ29tcG9zZXIgcGFja2FnZSBmcm9tIHRoZSBhdXRob3JzIGZpZWxkIGluIGNvbXBvc2VyLmpzb24uXCJcbiAgICB9LFxuICAgIFwiUGhwQ29tcG9zZXJFeHRlcm5hbFJlZmVyZW5jZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUeXBlIGlzIHJlZmVyZW5jZSB0eXBlIChnaXQgZm9yIHNvdXJjZSBWQ1MsIHppcC90YXIgZm9yIGRpc3QgYXJjaGl2ZXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkwgaXMgdGhlIFVSTCB0byB0aGUgcmVzb3VyY2UgKGdpdCByZXBvc2l0b3J5IFVSTCBvciBhcmNoaXZlIGRvd25sb2FkIFVSTClcIlxuICAgICAgICB9LFxuICAgICAgICBcInJlZmVyZW5jZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlZmVyZW5jZSBpcyBnaXQgY29tbWl0IGhhc2ggb3IgdmVyc2lvbiB0YWcgZm9yIHNvdXJjZSwgb3IgYXJjaGl2ZSB2ZXJzaW9uIGZvciBkaXN0XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzaGFzdW1cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTaGFzdW0gaXMgU0hBIGhhc2ggb2YgdGhlIGFyY2hpdmUgZmlsZSBmb3IgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbiAoZGlzdCBvbmx5KVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJyZWZlcmVuY2VcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQaHBDb21wb3NlckV4dGVybmFsUmVmZXJlbmNlIHJlcHJlc2VudHMgc291cmNlIG9yIGRpc3RyaWJ1dGlvbiBpbmZvcm1hdGlvbiBmb3IgYSBQSFAgcGFja2FnZSwgaW5kaWNhdGluZyB3aGVyZSB0aGUgcGFja2FnZSBjb2RlIGlzIHJldHJpZXZlZCBmcm9tLlwiXG4gICAgfSxcbiAgICBcIlBocENvbXBvc2VySW5zdGFsbGVkRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyBwYWNrYWdlIG5hbWUgaW4gdmVuZG9yL3BhY2thZ2UgZm9ybWF0IChlLmcuIHN5bWZvbnkvY29uc29sZSlcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBwYWNrYWdlIHZlcnNpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcInNvdXJjZVwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QaHBDb21wb3NlckV4dGVybmFsUmVmZXJlbmNlXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNvdXJjZSBpcyB0aGUgc291cmNlIHJlcG9zaXRvcnkgaW5mb3JtYXRpb24gZm9yIGRldmVsb3BtZW50ICh0eXBpY2FsbHkgZ2l0IHJlcG8sIHVzZWQgd2hlbiBwYXNzaW5nIC0tcHJlZmVyLXNvdXJjZSkuIE9yaWdpbmF0ZXMgZnJvbSBzb3VyY2UgY29kZSByZXBvc2l0b3J5LlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGlzdFwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QaHBDb21wb3NlckV4dGVybmFsUmVmZXJlbmNlXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRpc3QgaXMgZGlzdHJpYnV0aW9uIGFyY2hpdmUgaW5mb3JtYXRpb24gZm9yIHByb2R1Y3Rpb24gKHR5cGljYWxseSB6aXAvdGFyLCBkZWZhdWx0IGluc3RhbGwgbWV0aG9kKS4gUGFja2FnZWQgdmVyc2lvbiBvZiByZWxlYXNlZCBjb2RlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZVwiOiB7XG4gICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlcXVpcmUgaXMgcnVudGltZSBkZXBlbmRlbmNpZXMgd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnRzIChwYWNrYWdlIHdpbGwgbm90IGluc3RhbGwgdW5sZXNzIHRoZXNlIHJlcXVpcmVtZW50cyBjYW4gYmUgbWV0KVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvdmlkZVwiOiB7XG4gICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlByb3ZpZGUgaXMgdmlydHVhbCBwYWNrYWdlcy9mdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoaXMgcGFja2FnZSAoYWxsb3dzIG90aGVyIHBhY2thZ2VzIHRvIGRlcGVuZCBvbiBjYXBhYmlsaXRpZXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZXF1aXJlLWRldlwiOiB7XG4gICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlcXVpcmVEZXYgaXMgZGV2ZWxvcG1lbnQtb25seSBkZXBlbmRlbmNpZXMgKG5vdCBpbnN0YWxsZWQgaW4gcHJvZHVjdGlvbiwgb25seSB3aGVuIGRldmVsb3BpbmcgdGhpcyBwYWNrYWdlIG9yIHJ1bm5pbmcgdGVzdHMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzdWdnZXN0XCI6IHtcbiAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU3VnZ2VzdCBpcyBvcHRpb25hbCBidXQgcmVjb21tZW5kZWQgZGVwZW5kZW5jaWVzIChzdWdnZXN0aW9ucyBmb3IgcGFja2FnZXMgdGhhdCB3b3VsZCBleHRlbmQgZnVuY3Rpb25hbGl0eSlcIlxuICAgICAgICB9LFxuICAgICAgICBcImxpY2Vuc2VcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxpY2Vuc2UgaXMgdGhlIGxpc3Qgb2YgbGljZW5zZSBpZGVudGlmaWVycyAoU1BEWCBmb3JtYXQpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVHlwZSBpcyBwYWNrYWdlIHR5cGUgaW5kaWNhdGluZyBwdXJwb3NlIChsaWJyYXJ5PXJldXNhYmxlIGNvZGUsIHByb2plY3Q9YXBwbGljYXRpb24sIG1ldGFwYWNrYWdlPWFnZ3JlZ2F0ZXMgZGVwZW5kZW5jaWVzLCBldGMuKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibm90aWZpY2F0aW9uLXVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5vdGlmaWNhdGlvblVSTCBpcyB0aGUgVVJMIHRvIG5vdGlmeSB3aGVuIHBhY2thZ2UgaXMgaW5zdGFsbGVkIChmb3IgdHJhY2tpbmcvc3RhdGlzdGljcylcIlxuICAgICAgICB9LFxuICAgICAgICBcImJpblwiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQmluIGlzIHRoZSBsaXN0IG9mIGJpbmFyeS9leGVjdXRhYmxlIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIFBBVEhcIlxuICAgICAgICB9LFxuICAgICAgICBcImF1dGhvcnNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QaHBDb21wb3NlckF1dGhvcnNcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXV0aG9ycyBhcmUgdGhlIGxpc3Qgb2YgcGFja2FnZSBhdXRob3JzIHdpdGggbmFtZS9lbWFpbC9ob21lcGFnZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXNjcmlwdGlvbiBpcyBhIGh1bWFuLXJlYWRhYmxlIHBhY2thZ2UgZGVzY3JpcHRpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImhvbWVwYWdlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSG9tZXBhZ2UgaXMgcHJvamVjdCBob21lcGFnZSBVUkxcIlxuICAgICAgICB9LFxuICAgICAgICBcImtleXdvcmRzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJLZXl3b3JkcyBhcmUgdGhlIGxpc3Qgb2Yga2V5d29yZHMgZm9yIHBhY2thZ2UgZGlzY292ZXJ5L3NlYXJjaFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGltZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRpbWUgaXMgdGltZXN0YW1wIHdoZW4gdGhpcyBwYWNrYWdlIHZlcnNpb24gd2FzIHJlbGVhc2VkXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcInZlcnNpb25cIixcbiAgICAgICAgXCJzb3VyY2VcIixcbiAgICAgICAgXCJkaXN0XCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGhwQ29tcG9zZXJJbnN0YWxsZWRFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIHBhY2thZ2UgZW50cnkgZnJvbSBhIGNvbXBvc2VyIHYxL3YyIFxcXCJpbnN0YWxsZWQuanNvblxcXCIgZmlsZXMgKHZlcnkgc2ltaWxhciB0byBjb21wb3Nlci5sb2NrIGZpbGVzKS5cIlxuICAgIH0sXG4gICAgXCJQaHBDb21wb3NlckxvY2tFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHBhY2thZ2UgbmFtZSBpbiB2ZW5kb3IvcGFja2FnZSBmb3JtYXQgKGUuZy4gc3ltZm9ueS9jb25zb2xlKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic291cmNlXCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1BocENvbXBvc2VyRXh0ZXJuYWxSZWZlcmVuY2VcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU291cmNlIGlzIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBpbmZvcm1hdGlvbiBmb3IgZGV2ZWxvcG1lbnQgKHR5cGljYWxseSBnaXQgcmVwbywgdXNlZCB3aGVuIHBhc3NpbmcgLS1wcmVmZXItc291cmNlKS4gT3JpZ2luYXRlcyBmcm9tIHNvdXJjZSBjb2RlIHJlcG9zaXRvcnkuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkaXN0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1BocENvbXBvc2VyRXh0ZXJuYWxSZWZlcmVuY2VcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGlzdCBpcyBkaXN0cmlidXRpb24gYXJjaGl2ZSBpbmZvcm1hdGlvbiBmb3IgcHJvZHVjdGlvbiAodHlwaWNhbGx5IHppcC90YXIsIGRlZmF1bHQgaW5zdGFsbCBtZXRob2QpLiBQYWNrYWdlZCB2ZXJzaW9uIG9mIHJlbGVhc2VkIGNvZGUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZXF1aXJlXCI6IHtcbiAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUmVxdWlyZSBpcyBydW50aW1lIGRlcGVuZGVuY2llcyB3aXRoIHZlcnNpb24gY29uc3RyYWludHMgKHBhY2thZ2Ugd2lsbCBub3QgaW5zdGFsbCB1bmxlc3MgdGhlc2UgcmVxdWlyZW1lbnRzIGNhbiBiZSBtZXQpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwcm92aWRlXCI6IHtcbiAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHJvdmlkZSBpcyB2aXJ0dWFsIHBhY2thZ2VzL2Z1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgdGhpcyBwYWNrYWdlIChhbGxvd3Mgb3RoZXIgcGFja2FnZXMgdG8gZGVwZW5kIG9uIGNhcGFiaWxpdGllcylcIlxuICAgICAgICB9LFxuICAgICAgICBcInJlcXVpcmUtZGV2XCI6IHtcbiAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUmVxdWlyZURldiBpcyBkZXZlbG9wbWVudC1vbmx5IGRlcGVuZGVuY2llcyAobm90IGluc3RhbGxlZCBpbiBwcm9kdWN0aW9uLCBvbmx5IHdoZW4gZGV2ZWxvcGluZyB0aGlzIHBhY2thZ2Ugb3IgcnVubmluZyB0ZXN0cylcIlxuICAgICAgICB9LFxuICAgICAgICBcInN1Z2dlc3RcIjoge1xuICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTdWdnZXN0IGlzIG9wdGlvbmFsIGJ1dCByZWNvbW1lbmRlZCBkZXBlbmRlbmNpZXMgKHN1Z2dlc3Rpb25zIGZvciBwYWNrYWdlcyB0aGF0IHdvdWxkIGV4dGVuZCBmdW5jdGlvbmFsaXR5KVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibGljZW5zZVwiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGljZW5zZSBpcyB0aGUgbGlzdCBvZiBsaWNlbnNlIGlkZW50aWZpZXJzIChTUERYIGZvcm1hdClcIlxuICAgICAgICB9LFxuICAgICAgICBcInR5cGVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUeXBlIGlzIHBhY2thZ2UgdHlwZSBpbmRpY2F0aW5nIHB1cnBvc2UgKGxpYnJhcnk9cmV1c2FibGUgY29kZSwgcHJvamVjdD1hcHBsaWNhdGlvbiwgbWV0YXBhY2thZ2U9YWdncmVnYXRlcyBkZXBlbmRlbmNpZXMsIGV0Yy4pXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJub3RpZmljYXRpb24tdXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTm90aWZpY2F0aW9uVVJMIGlzIHRoZSBVUkwgdG8gbm90aWZ5IHdoZW4gcGFja2FnZSBpcyBpbnN0YWxsZWQgKGZvciB0cmFja2luZy9zdGF0aXN0aWNzKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYmluXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCaW4gaXMgdGhlIGxpc3Qgb2YgYmluYXJ5L2V4ZWN1dGFibGUgZmlsZXMgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gUEFUSFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXV0aG9yc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1BocENvbXBvc2VyQXV0aG9yc1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBdXRob3JzIGFyZSB0aGUgbGlzdCBvZiBwYWNrYWdlIGF1dGhvcnMgd2l0aCBuYW1lL2VtYWlsL2hvbWVwYWdlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlc2NyaXB0aW9uIGlzIGEgaHVtYW4tcmVhZGFibGUgcGFja2FnZSBkZXNjcmlwdGlvblwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG9tZXBhZ2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIb21lcGFnZSBpcyBwcm9qZWN0IGhvbWVwYWdlIFVSTFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwia2V5d29yZHNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIktleXdvcmRzIGFyZSB0aGUgbGlzdCBvZiBrZXl3b3JkcyBmb3IgcGFja2FnZSBkaXNjb3Zlcnkvc2VhcmNoXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0aW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGltZSBpcyB0aW1lc3RhbXAgd2hlbiB0aGlzIHBhY2thZ2UgdmVyc2lvbiB3YXMgcmVsZWFzZWRcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcInNvdXJjZVwiLFxuICAgICAgICBcImRpc3RcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQaHBDb21wb3NlckxvY2tFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIHBhY2thZ2UgZW50cnkgZm91bmQgZnJvbSBhIGNvbXBvc2VyLmxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJQaHBQZWFyRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyB0aGUgcGFja2FnZSBuYW1lXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjaGFubmVsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ2hhbm5lbCBpcyBQRUFSIGNoYW5uZWwgdGhpcyBwYWNrYWdlIGlzIGZyb21cIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBwYWNrYWdlIHZlcnNpb25cIlxuICAgICAgICB9LFxuICAgICAgICBcImxpY2Vuc2VcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkxpY2Vuc2UgaXMgdGhlIGxpc3Qgb2YgYXBwbGljYWJsZSBsaWNlbnNlc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGhwUGVhckVudHJ5IHJlcHJlc2VudHMgYSBzaW5nbGUgcGFja2FnZSBlbnRyeSBmb3VuZCB3aXRoaW4gcGhwIHBlYXIgbWV0YWRhdGEgZmlsZXMuXCJcbiAgICB9LFxuICAgIFwiUGhwUGVjbEVudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIHBhY2thZ2UgbmFtZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY2hhbm5lbFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNoYW5uZWwgaXMgUEVBUiBjaGFubmVsIHRoaXMgcGFja2FnZSBpcyBmcm9tXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyB0aGUgcGFja2FnZSB2ZXJzaW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsaWNlbnNlXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJMaWNlbnNlIGlzIHRoZSBsaXN0IG9mIGFwcGxpY2FibGUgbGljZW5zZXNcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBocFBlY2xFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIHBhY2thZ2UgZW50cnkgZm91bmQgd2l0aGluIHBocCBwZWNsIG1ldGFkYXRhIGZpbGVzLlwiXG4gICAgfSxcbiAgICBcIlBucG1Mb2NrUmVzb2x1dGlvblwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImludGVncml0eVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkludGVncml0eSBpcyBTdWJyZXNvdXJjZSBJbnRlZ3JpdHkgaGFzaCBmb3IgdmVyaWZpY2F0aW9uIChTUkkgZm9ybWF0KVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImludGVncml0eVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBucG1Mb2NrUmVzb2x1dGlvbiBjb250YWlucyBwYWNrYWdlIHJlc29sdXRpb24gbWV0YWRhdGEgZnJvbSBwbnBtIGxvY2tmaWxlcywgaW5jbHVkaW5nIHRoZSBpbnRlZ3JpdHkgaGFzaCB1c2VkIGZvciB2ZXJpZmljYXRpb24uXCJcbiAgICB9LFxuICAgIFwiUG9ydGFnZURiRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJpbnN0YWxsZWRTaXplXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkluc3RhbGxlZFNpemUgaXMgdG90YWwgc2l6ZSBvZiBpbnN0YWxsZWQgZmlsZXMgaW4gYnl0ZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImxpY2Vuc2VzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTGljZW5zZXMgaXMgbGljZW5zZSBzdHJpbmcgd2hpY2ggbWF5IGJlIGFuIGV4cHJlc3Npb24gKGUuZy4gXFxcIkdQTC0yIE9SIEFwYWNoZS0yLjBcXFwiKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9Qb3J0YWdlRmlsZVJlY29yZFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGaWxlcyBhcmUgdGhlIGZpbGVzIGluc3RhbGxlZCBieSB0aGlzIHBhY2thZ2UgKHRyYWNrZWQgaW4gQ09OVEVOVFMgZmlsZSlcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJpbnN0YWxsZWRTaXplXCIsXG4gICAgICAgIFwiZmlsZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQb3J0YWdlRW50cnkgcmVwcmVzZW50cyBhIHNpbmdsZSBwYWNrYWdlIGVudHJ5IGluIHRoZSBwb3J0YWdlIERCIGZsYXQtZmlsZSBzdG9yZS5cIlxuICAgIH0sXG4gICAgXCJQb3J0YWdlRmlsZVJlY29yZFwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRoIGlzIHRoZSBmaWxlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGZpbGVzeXN0ZW0gcm9vdFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGlnZXN0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0RpZ2VzdFwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEaWdlc3QgaXMgZmlsZSBjb250ZW50IGhhc2ggKE1ENSBmb3IgcmVndWxhciBmaWxlcyBpbiBDT05URU5UUyBmb3JtYXQ6IFxcXCJvYmogZmlsZW5hbWUgbWQ1aGFzaCBtdGltZVxcXCIpXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwicGF0aFwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBvcnRhZ2VGaWxlUmVjb3JkIHJlcHJlc2VudHMgYSBzaW5nbGUgZmlsZSBhdHRyaWJ1dGVkIHRvIGEgcG9ydGFnZSBwYWNrYWdlLlwiXG4gICAgfSxcbiAgICBcIlB5dGhvbkRpcmVjdFVSTE9yaWdpbkluZm9cIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkwgaXMgdGhlIHNvdXJjZSBVUkwgZnJvbSB3aGljaCB0aGUgcGFja2FnZSB3YXMgaW5zdGFsbGVkLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29tbWl0SWRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb21taXRJRCBpcyB0aGUgVkNTIGNvbW1pdCBoYXNoIGlmIGluc3RhbGxlZCBmcm9tIHZlcnNpb24gY29udHJvbC5cIlxuICAgICAgICB9LFxuICAgICAgICBcInZjc1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZDUyBpcyB0aGUgdmVyc2lvbiBjb250cm9sIHN5c3RlbSB0eXBlIChlLmcuLCBcXFwiZ2l0XFxcIiwgXFxcImhnXFxcIikuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidXJsXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHl0aG9uRGlyZWN0VVJMT3JpZ2luSW5mbyByZXByZXNlbnRzIGluc3RhbGxhdGlvbiBzb3VyY2UgbWV0YWRhdGEgZnJvbSBkaXJlY3RfdXJsLmpzb24gZm9yIHBhY2thZ2VzIGluc3RhbGxlZCBmcm9tIFZDUyBvciBkaXJlY3QgVVJMcy5cIlxuICAgIH0sXG4gICAgXCJQeXRob25GaWxlRGlnZXN0XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiYWxnb3JpdGhtXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQWxnb3JpdGhtIGlzIHRoZSBoYXNoIGFsZ29yaXRobSB1c2VkIChlLmcuLCBcXFwic2hhMjU2XFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2YWx1ZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZhbHVlIGlzIHRoZSBoZXgtZW5jb2RlZCBoYXNoIGRpZ2VzdCB2YWx1ZS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJhbGdvcml0aG1cIixcbiAgICAgICAgXCJ2YWx1ZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB5dGhvbkZpbGVEaWdlc3QgcmVwcmVzZW50cyB0aGUgZmlsZSBtZXRhZGF0YSBmb3IgYSBzaW5nbGUgZmlsZSBhdHRyaWJ1dGVkIHRvIGEgcHl0aG9uIHBhY2thZ2UuXCJcbiAgICB9LFxuICAgIFwiUHl0aG9uRmlsZVJlY29yZFwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXRoIGlzIHRoZSBpbnN0YWxsZWQgZmlsZSBwYXRoIGZyb20gdGhlIFJFQ09SRCBmaWxlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGlnZXN0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1B5dGhvbkZpbGVEaWdlc3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGlnZXN0IGNvbnRhaW5zIHRoZSBoYXNoIGFsZ29yaXRobSBhbmQgdmFsdWUgZm9yIGZpbGUgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpemVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTaXplIGlzIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXMgYXMgYSBzdHJpbmcuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwicGF0aFwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB5dGhvbkZpbGVSZWNvcmQgcmVwcmVzZW50cyBhIHNpbmdsZSBlbnRyeSB3aXRoaW4gYSBSRUNPUkQgZmlsZSBmb3IgYSBweXRob24gd2hlZWwgb3IgZWdnIHBhY2thZ2VcIlxuICAgIH0sXG4gICAgXCJQeXRob25QYWNrYWdlXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIHBhY2thZ2UgbmFtZSBmcm9tIHRoZSBOYW1lIGZpZWxkIGluIFBLRy1JTkZPIG9yIE1FVEFEQVRBLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHBhY2thZ2UgdmVyc2lvbiBmcm9tIHRoZSBWZXJzaW9uIGZpZWxkIGluIFBLRy1JTkZPIG9yIE1FVEFEQVRBLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXV0aG9yXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXV0aG9yIGlzIHRoZSBwYWNrYWdlIGF1dGhvciBuYW1lIGZyb20gdGhlIEF1dGhvciBmaWVsZC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImF1dGhvckVtYWlsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXV0aG9yRW1haWwgaXMgdGhlIHBhY2thZ2UgYXV0aG9yJ3MgZW1haWwgYWRkcmVzcyBmcm9tIHRoZSBBdXRob3ItRW1haWwgZmllbGQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwbGF0Zm9ybVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBsYXRmb3JtIGluZGljYXRlcyB0aGUgdGFyZ2V0IHBsYXRmb3JtIGZvciB0aGUgcGFja2FnZSAoZS5nLiwgXFxcImFueVxcXCIsIFxcXCJsaW51eFxcXCIsIFxcXCJ3aW4zMlxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QeXRob25GaWxlUmVjb3JkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGFyZSB0aGUgaW5zdGFsbGVkIGZpbGVzIGxpc3RlZCBpbiB0aGUgUkVDT1JEIGZpbGUgZm9yIHdoZWVscyBvciBpbnN0YWxsZWQtZmlsZXMudHh0IGZvciBlZ2dzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2l0ZVBhY2thZ2VzUm9vdFBhdGhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTaXRlUGFja2FnZXNSb290UGF0aCBpcyB0aGUgcm9vdCBkaXJlY3RvcnkgcGF0aCBjb250YWluaW5nIHRoZSBwYWNrYWdlIChlLmcuLCBcXFwiL3Vzci9saWIvcHl0aG9uMy45L3NpdGUtcGFja2FnZXNcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInRvcExldmVsUGFja2FnZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlRvcExldmVsUGFja2FnZXMgYXJlIHRoZSB0b3AtbGV2ZWwgUHl0aG9uIG1vZHVsZSBuYW1lcyBmcm9tIHRvcF9sZXZlbC50eHQgZmlsZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRpcmVjdFVybE9yaWdpblwiOiB7XG4gICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QeXRob25EaXJlY3RVUkxPcmlnaW5JbmZvXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRpcmVjdFVSTE9yaWdpbiBjb250YWlucyBWQ1Mgb3IgZGlyZWN0IFVSTCBpbnN0YWxsYXRpb24gaW5mb3JtYXRpb24gZnJvbSBkaXJlY3RfdXJsLmpzb24uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJyZXF1aXJlc1B5dGhvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlcXVpcmVzUHl0aG9uIHNwZWNpZmllcyB0aGUgUHl0aG9uIHZlcnNpb24gcmVxdWlyZW1lbnQgKGUuZy4sIFxcXCI+PTMuNlxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZXNEaXN0XCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZXF1aXJlc0Rpc3QgbGlzdHMgdGhlIHBhY2thZ2UgZGVwZW5kZW5jaWVzIHdpdGggdmVyc2lvbiBzcGVjaWZpZXJzIGZyb20gUmVxdWlyZXMtRGlzdCBmaWVsZHMuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwcm92aWRlc0V4dHJhXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQcm92aWRlc0V4dHJhIGxpc3RzIG9wdGlvbmFsIGZlYXR1cmUgbmFtZXMgdGhhdCBjYW4gYmUgaW5zdGFsbGVkIHZpYSBleHRyYXMgKGUuZy4sIFxcXCJkZXZcXFwiLCBcXFwidGVzdFxcXCIpLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwiYXV0aG9yXCIsXG4gICAgICAgIFwiYXV0aG9yRW1haWxcIixcbiAgICAgICAgXCJwbGF0Zm9ybVwiLFxuICAgICAgICBcInNpdGVQYWNrYWdlc1Jvb3RQYXRoXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHl0aG9uUGFja2FnZSByZXByZXNlbnRzIGFsbCBjYXB0dXJlZCBkYXRhIGZvciBhIHB5dGhvbiBlZ2cgb3Igd2hlZWwgcGFja2FnZSAoc3BlY2lmaWNhbGx5IGFzIG91dGxpbmVkIGluIHRoZSBQeVBBIGNvcmUgbWV0YWRhdGEgc3BlY2lmaWNhdGlvbiBodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zcGVjaWZpY2F0aW9ucy9jb3JlLW1ldGFkYXRhLykuXCJcbiAgICB9LFxuICAgIFwiUHl0aG9uUGRtRmlsZUVudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVVJMIGlzIHRoZSBmaWxlIGRvd25sb2FkIFVSTFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGlnZXN0XCI6IHtcbiAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1B5dGhvbkZpbGVEaWdlc3RcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGlnZXN0IGlzIHRoZSBoYXNoIGRpZ2VzdCBvZiB0aGUgZmlsZSBob3N0ZWQgYXQgdGhlIFVSTFwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInVybFwiLFxuICAgICAgICBcImRpZ2VzdFwiXG4gICAgICBdXG4gICAgfSxcbiAgICBcIlB5dGhvblBkbUxvY2tFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInN1bW1hcnlcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTdW1tYXJ5IHByb3ZpZGVzIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBhY2thZ2VcIlxuICAgICAgICB9LFxuICAgICAgICBcImZpbGVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUHl0aG9uUGRtRmlsZUVudHJ5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGFyZSB0aGUgcGFja2FnZSBmaWxlcyB3aXRoIHRoZWlyIHBhdGhzIGFuZCBoYXNoIGRpZ2VzdHMgKGZvciB0aGUgYmFzZSBwYWNrYWdlIHdpdGhvdXQgZXh0cmFzKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWFya2VyXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWFya2VyIGlzIHRoZSBcXFwiZW52aXJvbm1lbnRcXFwiIC0tY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciBhIHBhY2thZ2Ugc2hvdWxkIGJlIGluc3RhbGxlZCBiYXNlZCBvbiB0aGUgcnVudGltZSBlbnZpcm9ubWVudFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZXNQeXRob25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZXF1aXJlc1B5dGhvbiBzcGVjaWZpZXMgdGhlIFB5dGhvbiB2ZXJzaW9uIHJlcXVpcmVtZW50IChlLmcuLCBcXFwiPj0zLjZcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVwZW5kZW5jaWVzIGFyZSB0aGUgZGVwZW5kZW5jeSBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIGJhc2UgcGFja2FnZSAod2l0aG91dCBleHRyYXMpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRyYXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QeXRob25QZG1Mb2NrRXh0cmFWYXJpYW50XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkV4dHJhcyBjb250YWlucyB2YXJpYW50cyBmb3IgZGlmZmVyZW50IGV4dHJhcyBjb21iaW5hdGlvbnMgKFBETSBtYXkgaGF2ZSBtdWx0aXBsZSBlbnRyaWVzIHBlciBwYWNrYWdlKVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInN1bW1hcnlcIixcbiAgICAgICAgXCJmaWxlc1wiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB5dGhvblBkbUxvY2tFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIHBhY2thZ2UgZW50cnkgd2l0aGluIGEgcGRtLmxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJQeXRob25QZG1Mb2NrRXh0cmFWYXJpYW50XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiZXh0cmFzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFeHRyYXMgYXJlIHRoZSBvcHRpb25hbCBleHRyYXMgZW5hYmxlZCBmb3IgdGhpcyB2YXJpYW50IChlLmcuLCBbXFxcInRvbWxcXFwiXSwgW1xcXCJkZXZcXFwiXSwgb3IgW1xcXCJ0b21sXFxcIiwgXFxcImRldlxcXCJdKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgYXJlIHRoZSBkZXBlbmRlbmNpZXMgc3BlY2lmaWMgdG8gdGhpcyBleHRyYXMgdmFyaWFudFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9QeXRob25QZG1GaWxlRW50cnlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRmlsZXMgYXJlIHRoZSBwYWNrYWdlIGZpbGVzIHNwZWNpZmljIHRvIHRoaXMgdmFyaWFudCAob25seSBwb3B1bGF0ZWQgaWYgZGlmZmVyZW50IGZyb20gYmFzZSlcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1hcmtlclwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1hcmtlciBpcyB0aGUgZW52aXJvbm1lbnQgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBmb3IgdGhpcyB2YXJpYW50IChlLmcuLCBcXFwicHl0aG9uX3ZlcnNpb24gPCBcXFxcXFxcIjMuMTFcXFxcXFxcIlxcXCIpXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiZXh0cmFzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHl0aG9uUGRtTG9ja0V4dHJhVmFyaWFudCByZXByZXNlbnRzIGEgc3BlY2lmaWMgZXh0cmFzIGNvbWJpbmF0aW9uIHZhcmlhbnQgd2l0aGluIGEgUERNIGxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJQeXRob25QaXBSZXF1aXJlbWVudHNFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBwYWNrYWdlIG5hbWUgZnJvbSB0aGUgcmVxdWlyZW1lbnRzIGZpbGUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRyYXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkV4dHJhcyBhcmUgdGhlIG9wdGlvbmFsIGZlYXR1cmVzIHRvIGluc3RhbGwgZnJvbSB0aGUgcGFja2FnZSAoZS5nLiwgcGFja2FnZVtkZXYsdGVzdF0pLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvbkNvbnN0cmFpbnRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uQ29uc3RyYWludCBzcGVjaWZpZXMgdmVyc2lvbiByZXF1aXJlbWVudHMgKGUuZy4sIFxcXCI+PTEuMCw8Mi4wXFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJVUkwgaXMgdGhlIGRpcmVjdCBkb3dubG9hZCBVUkwgb3IgVkNTIFVSTCBpZiBzcGVjaWZpZWQgaW5zdGVhZCBvZiBhIFB5UEkgcGFja2FnZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1hcmtlcnNcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNYXJrZXJzIGFyZSBlbnZpcm9ubWVudCBtYXJrZXIgZXhwcmVzc2lvbnMgZm9yIGNvbmRpdGlvbmFsIGluc3RhbGxhdGlvbiAoZS5nLiwgXFxcInB5dGhvbl92ZXJzaW9uID49ICczLjgnXFxcIikuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcInZlcnNpb25Db25zdHJhaW50XCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHl0aG9uUmVxdWlyZW1lbnRzRW50cnkgcmVwcmVzZW50cyBhIHNpbmdsZSBlbnRyeSB3aXRoaW4gYSBbKi1dcmVxdWlyZW1lbnRzLnR4dCBmaWxlLlwiXG4gICAgfSxcbiAgICBcIlB5dGhvblBpcGZpbGVMb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJoYXNoZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkhhc2hlcyBhcmUgdGhlIHBhY2thZ2UgZmlsZSBoYXNoIHZhbHVlcyBpbiB0aGUgZm9ybWF0IFxcXCJhbGdvcml0aG06ZGlnZXN0XFxcIiBmb3IgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcImluZGV4XCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSW5kZXggaXMgdGhlIFB5UEkgaW5kZXggbmFtZSB3aGVyZSB0aGUgcGFja2FnZSBzaG91bGQgYmUgZmV0Y2hlZCBmcm9tLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcImhhc2hlc1wiLFxuICAgICAgICBcImluZGV4XCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHl0aG9uUGlwZmlsZUxvY2tFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIHBhY2thZ2UgZW50cnkgd2l0aGluIGEgUGlwZmlsZS5sb2NrIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiUHl0aG9uUG9ldHJ5TG9ja0RlcGVuZGVuY3lFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBkZXBlbmRlbmN5IHBhY2thZ2UgbmFtZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIHRoZSBsb2NrZWQgdmVyc2lvbiBvciB2ZXJzaW9uIGNvbnN0cmFpbnQgZm9yIHRoZSBkZXBlbmRlbmN5LlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwib3B0aW9uYWxcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiT3B0aW9uYWwgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBkZXBlbmRlbmN5IGlzIG9wdGlvbmFsIChvbmx5IG5lZWRlZCBmb3IgY2VydGFpbiBleHRyYXMpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWFya2Vyc1wiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1hcmtlcnMgYXJlIGVudmlyb25tZW50IG1hcmtlciBleHByZXNzaW9ucyB0aGF0IGNvbmRpdGlvbmFsbHkgZW5hYmxlIHRoZSBkZXBlbmRlbmN5IChlLmcuLCBcXFwicHl0aG9uX3ZlcnNpb24gPj0gJzMuOCdcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImV4dHJhc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRXh0cmFzIGFyZSB0aGUgb3B0aW9uYWwgZmVhdHVyZSBuYW1lcyBmcm9tIHRoZSBkZXBlbmRlbmN5IHRoYXQgc2hvdWxkIGJlIGluc3RhbGxlZC5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcIm9wdGlvbmFsXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHl0aG9uUG9ldHJ5TG9ja0RlcGVuZGVuY3lFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIGRlcGVuZGVuY3kgZW50cnkgd2l0aGluIGEgUG9ldHJ5IGxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJQeXRob25Qb2V0cnlMb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJpbmRleFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkluZGV4IGlzIHRoZSBwYWNrYWdlIHJlcG9zaXRvcnkgbmFtZSB3aGVyZSB0aGUgcGFja2FnZSBzaG91bGQgYmUgZmV0Y2hlZCBmcm9tLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUHl0aG9uUG9ldHJ5TG9ja0RlcGVuZGVuY3lFbnRyeVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgYXJlIHRoZSBwYWNrYWdlJ3MgcnVudGltZSBkZXBlbmRlbmNpZXMgd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnRzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXh0cmFzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUHl0aG9uUG9ldHJ5TG9ja0V4dHJhRW50cnlcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRXh0cmFzIGFyZSBvcHRpb25hbCBmZWF0dXJlIGdyb3VwcyB0aGF0IGluY2x1ZGUgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiaW5kZXhcIixcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQeXRob25Qb2V0cnlMb2NrRW50cnkgcmVwcmVzZW50cyBhIHNpbmdsZSBwYWNrYWdlIGVudHJ5IHdpdGhpbiBhIFBpcGZpbGUubG9jayBmaWxlLlwiXG4gICAgfSxcbiAgICBcIlB5dGhvblBvZXRyeUxvY2tFeHRyYUVudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwibmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk5hbWUgaXMgdGhlIG9wdGlvbmFsIGZlYXR1cmUgbmFtZSAoZS5nLiwgXFxcImRldlxcXCIsIFxcXCJ0ZXN0XFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRlcGVuZGVuY2llcyBhcmUgdGhlIHBhY2thZ2UgbmFtZXMgcmVxdWlyZWQgd2hlbiB0aGlzIGV4dHJhIGlzIGluc3RhbGxlZC5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHl0aG9uUG9ldHJ5TG9ja0V4dHJhRW50cnkgcmVwcmVzZW50cyBhbiBvcHRpb25hbCBmZWF0dXJlIGdyb3VwIGluIGEgUG9ldHJ5IGxvY2sgZmlsZS5cIlxuICAgIH0sXG4gICAgXCJQeXRob25VdkxvY2tEZXBlbmRlbmN5RW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyB0aGUgZGVwZW5kZW5jeSBwYWNrYWdlIG5hbWUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJvcHRpb25hbFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJPcHRpb25hbCBpbmRpY2F0ZXMgd2hldGhlciB0aGlzIGRlcGVuZGVuY3kgaXMgb3B0aW9uYWwgKG9ubHkgbmVlZGVkIGZvciBjZXJ0YWluIGV4dHJhcykuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXJrZXJzXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWFya2VycyBhcmUgZW52aXJvbm1lbnQgbWFya2VyIGV4cHJlc3Npb25zIHRoYXQgY29uZGl0aW9uYWxseSBlbmFibGUgdGhlIGRlcGVuZGVuY3kgKGUuZy4sIFxcXCJweXRob25fdmVyc2lvbiA+PSAnMy44J1xcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXh0cmFzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFeHRyYXMgYXJlIHRoZSBvcHRpb25hbCBmZWF0dXJlIG5hbWVzIGZyb20gdGhlIGRlcGVuZGVuY3kgdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJvcHRpb25hbFwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB5dGhvblV2TG9ja0RlcGVuZGVuY3lFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIGRlcGVuZGVuY3kgZW50cnkgd2l0aGluIGEgdXYgbG9jayBmaWxlLlwiXG4gICAgfSxcbiAgICBcIlB5dGhvblV2TG9ja0VudHJ5XCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiaW5kZXhcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJbmRleCBpcyB0aGUgcGFja2FnZSByZXBvc2l0b3J5IG5hbWUgd2hlcmUgdGhlIHBhY2thZ2Ugc2hvdWxkIGJlIGZldGNoZWQgZnJvbS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL1B5dGhvblV2TG9ja0RlcGVuZGVuY3lFbnRyeVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgYXJlIHRoZSBwYWNrYWdlJ3MgcnVudGltZSBkZXBlbmRlbmNpZXMgd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnRzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXh0cmFzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvUHl0aG9uVXZMb2NrRXh0cmFFbnRyeVwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJFeHRyYXMgYXJlIG9wdGlvbmFsIGZlYXR1cmUgZ3JvdXBzIHRoYXQgaW5jbHVkZSBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcy5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJpbmRleFwiLFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB5dGhvblV2TG9ja0VudHJ5IHJlcHJlc2VudHMgYSBzaW5nbGUgcGFja2FnZSBlbnRyeSB3aXRoaW4gYSB1di5sb2NrIGZpbGUuXCJcbiAgICB9LFxuICAgIFwiUHl0aG9uVXZMb2NrRXh0cmFFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBvcHRpb25hbCBmZWF0dXJlIG5hbWUgKGUuZy4sIFxcXCJkZXZcXFwiLCBcXFwidGVzdFxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgYXJlIHRoZSBwYWNrYWdlIG5hbWVzIHJlcXVpcmVkIHdoZW4gdGhpcyBleHRyYSBpcyBpbnN0YWxsZWQuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlB5dGhvblV2TG9ja0V4dHJhRW50cnkgcmVwcmVzZW50cyBhbiBvcHRpb25hbCBmZWF0dXJlIGdyb3VwIGluIGEgdXYgbG9jayBmaWxlLlwiXG4gICAgfSxcbiAgICBcIlJEZXNjcmlwdGlvblwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInRpdGxlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVGl0bGUgaXMgc2hvcnQgb25lLWxpbmUgcGFja2FnZSB0aXRsZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXNjcmlwdGlvbiBpcyBkZXRhaWxlZCBwYWNrYWdlIGRlc2NyaXB0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdXRob3JcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBdXRob3IgaXMgcGFja2FnZSBhdXRob3IocylcIlxuICAgICAgICB9LFxuICAgICAgICBcIm1haW50YWluZXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJNYWludGFpbmVyIGlzIGN1cnJlbnQgcGFja2FnZSBtYWludGFpbmVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1cmxcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlVSTCBpcyB0aGUgbGlzdCBvZiByZWxhdGVkIFVSTHNcIlxuICAgICAgICB9LFxuICAgICAgICBcInJlcG9zaXRvcnlcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZXBvc2l0b3J5IGlzIENSQU4gb3Igb3RoZXIgcmVwb3NpdG9yeSBuYW1lXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJidWlsdFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkJ1aWx0IGlzIFIgdmVyc2lvbiBhbmQgcGxhdGZvcm0gdGhpcyB3YXMgYnVpbHQgd2l0aFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibmVlZHNDb21waWxhdGlvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOZWVkc0NvbXBpbGF0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYWNrYWdlIHJlcXVpcmVzIGNvbXBpbGF0aW9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpbXBvcnRzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJbXBvcnRzIGFyZSB0aGUgcGFja2FnZXMgaW1wb3J0ZWQgaW4gdGhlIE5BTUVTUEFDRVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVwZW5kcyBhcmUgdGhlIHBhY2thZ2VzIHRoaXMgcGFja2FnZSBkZXBlbmRzIG9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzdWdnZXN0c1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU3VnZ2VzdHMgYXJlIHRoZSBvcHRpb25hbCBwYWNrYWdlcyB0aGF0IGV4dGVuZCBmdW5jdGlvbmFsaXR5XCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJEZXNjcmlwdGlvbiByZXByZXNlbnRzIG1ldGFkYXRhIGZyb20gYW4gUiBwYWNrYWdlIERFU0NSSVBUSU9OIGZpbGUgY29udGFpbmluZyBwYWNrYWdlIGluZm9ybWF0aW9uLCBkZXBlbmRlbmNpZXMsIGFuZCBhdXRob3IgZGV0YWlscy5cIlxuICAgIH0sXG4gICAgXCJSZWxhdGlvbnNoaXBcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJwYXJlbnRcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQYXJlbnQgaXMgdGhlIElEIG9mIHRoZSBwYXJlbnQgYXJ0aWZhY3QgaW4gdGhpcyByZWxhdGlvbnNoaXAuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjaGlsZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNoaWxkIGlzIHRoZSBJRCBvZiB0aGUgY2hpbGQgYXJ0aWZhY3QgaW4gdGhpcyByZWxhdGlvbnNoaXAuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0eXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVHlwZSBpcyB0aGUgcmVsYXRpb25zaGlwIHR5cGUgKGUuZy4sIFxcXCJjb250YWluc1xcXCIsIFxcXCJkZXBlbmRlbmN5LW9mXFxcIiwgXFxcImFuY2VzdG9yLW9mXFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtZXRhZGF0YVwiOiB7XG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1ldGFkYXRhIGNvbnRhaW5zIGFkZGl0aW9uYWwgcmVsYXRpb25zaGlwLXNwZWNpZmljIG1ldGFkYXRhLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInBhcmVudFwiLFxuICAgICAgICBcImNoaWxkXCIsXG4gICAgICAgIFwidHlwZVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlbGF0aW9uc2hpcCByZXByZXNlbnRzIGEgZGlyZWN0ZWQgcmVsYXRpb25zaGlwIGJldHdlZW4gdHdvIGFydGlmYWN0cyBpbiB0aGUgU0JPTSwgc3VjaCBhcyBwYWNrYWdlLWNvbnRhaW5zLWZpbGUgb3IgcGFja2FnZS1kZXBlbmRzLW9uLXBhY2thZ2UuXCJcbiAgICB9LFxuICAgIFwiUnBtQXJjaGl2ZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBSUE0gcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHRoZSBSUE0gZGF0YWJhc2UuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyB0aGUgdXBzdHJlYW0gdmVyc2lvbiBvZiB0aGUgcGFja2FnZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImVwb2NoXCI6IHtcbiAgICAgICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRXBvY2ggaXMgdGhlIHZlcnNpb24gZXBvY2ggdXNlZCB0byBmb3JjZSB1cGdyYWRlIG9yZGVyaW5nIChudWxsIGlmIG5vdCBzZXQpLlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJudWxsXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaCBpcyB0aGUgdGFyZ2V0IENQVSBhcmNoaXRlY3R1cmUgKGUuZy4sIFxcXCJ4ODZfNjRcXFwiLCBcXFwiYWFyY2g2NFxcXCIsIFxcXCJub2FyY2hcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInJlbGVhc2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWxlYXNlIGlzIHRoZSBwYWNrYWdlIHJlbGVhc2UgbnVtYmVyIG9yIGRpc3RyaWJ1dGlvbi1zcGVjaWZpYyB2ZXJzaW9uIHN1ZmZpeC5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNvdXJjZVJwbVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNvdXJjZVJwbSBpcyB0aGUgc291cmNlIFJQTSBmaWxlbmFtZSB0aGF0IHdhcyB1c2VkIHRvIGJ1aWxkIHRoaXMgcGFja2FnZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpZ25hdHVyZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9ScG1TaWduYXR1cmVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2lnbmF0dXJlcyBjb250YWlucyBHUEcgc2lnbmF0dXJlIG1ldGFkYXRhIGZvciBwYWNrYWdlIHZlcmlmaWNhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpemVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2l6ZSBpcyB0aGUgdG90YWwgaW5zdGFsbGVkIHNpemUgb2YgdGhlIHBhY2thZ2UgaW4gYnl0ZXMuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZW5kb3JcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZW5kb3IgaXMgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHBhY2thZ2VkIHRoZSBzb2Z0d2FyZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vZHVsYXJpdHlMYWJlbFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1vZHVsYXJpdHlMYWJlbCBpZGVudGlmaWVzIHRoZSBtb2R1bGUgc3RyZWFtIGZvciBtb2R1bGFyIFJQTSBwYWNrYWdlcyAoZS5nLiwgXFxcIm5vZGVqczoxMjoyMDIwMDEwMVxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvdmlkZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlByb3ZpZGVzIGxpc3RzIHRoZSB2aXJ0dWFsIHBhY2thZ2VzIGFuZCBjYXBhYmlsaXRpZXMgdGhpcyBwYWNrYWdlIHByb3ZpZGVzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlcXVpcmVzIGxpc3RzIHRoZSBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgYnkgdGhpcyBwYWNrYWdlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9ScG1GaWxlUmVjb3JkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGFyZSB0aGUgZmlsZSByZWNvcmRzIGZvciBhbGwgZmlsZXMgb3duZWQgYnkgdGhpcyBwYWNrYWdlLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwiZXBvY2hcIixcbiAgICAgICAgXCJhcmNoaXRlY3R1cmVcIixcbiAgICAgICAgXCJyZWxlYXNlXCIsXG4gICAgICAgIFwic291cmNlUnBtXCIsXG4gICAgICAgIFwic2l6ZVwiLFxuICAgICAgICBcInZlbmRvclwiLFxuICAgICAgICBcImZpbGVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUnBtQXJjaGl2ZSByZXByZXNlbnRzIHBhY2thZ2UgbWV0YWRhdGEgZXh0cmFjdGVkIGRpcmVjdGx5IGZyb20gYSAucnBtIGFyY2hpdmUgZmlsZSwgY29udGFpbmluZyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyBhbiBSUE0gZGF0YWJhc2UgZW50cnkuXCJcbiAgICB9LFxuICAgIFwiUnBtRGJFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBSUE0gcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHRoZSBSUE0gZGF0YWJhc2UuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyB0aGUgdXBzdHJlYW0gdmVyc2lvbiBvZiB0aGUgcGFja2FnZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImVwb2NoXCI6IHtcbiAgICAgICAgICBcIm9uZU9mXCI6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRXBvY2ggaXMgdGhlIHZlcnNpb24gZXBvY2ggdXNlZCB0byBmb3JjZSB1cGdyYWRlIG9yZGVyaW5nIChudWxsIGlmIG5vdCBzZXQpLlwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcInR5cGVcIjogXCJudWxsXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFwiYXJjaGl0ZWN0dXJlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXJjaCBpcyB0aGUgdGFyZ2V0IENQVSBhcmNoaXRlY3R1cmUgKGUuZy4sIFxcXCJ4ODZfNjRcXFwiLCBcXFwiYWFyY2g2NFxcXCIsIFxcXCJub2FyY2hcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInJlbGVhc2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSZWxlYXNlIGlzIHRoZSBwYWNrYWdlIHJlbGVhc2UgbnVtYmVyIG9yIGRpc3RyaWJ1dGlvbi1zcGVjaWZpYyB2ZXJzaW9uIHN1ZmZpeC5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNvdXJjZVJwbVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNvdXJjZVJwbSBpcyB0aGUgc291cmNlIFJQTSBmaWxlbmFtZSB0aGF0IHdhcyB1c2VkIHRvIGJ1aWxkIHRoaXMgcGFja2FnZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpZ25hdHVyZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9ScG1TaWduYXR1cmVcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2lnbmF0dXJlcyBjb250YWlucyBHUEcgc2lnbmF0dXJlIG1ldGFkYXRhIGZvciBwYWNrYWdlIHZlcmlmaWNhdGlvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcInNpemVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcImludGVnZXJcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU2l6ZSBpcyB0aGUgdG90YWwgaW5zdGFsbGVkIHNpemUgb2YgdGhlIHBhY2thZ2UgaW4gYnl0ZXMuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZW5kb3JcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZW5kb3IgaXMgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHBhY2thZ2VkIHRoZSBzb2Z0d2FyZS5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1vZHVsYXJpdHlMYWJlbFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1vZHVsYXJpdHlMYWJlbCBpZGVudGlmaWVzIHRoZSBtb2R1bGUgc3RyZWFtIGZvciBtb2R1bGFyIFJQTSBwYWNrYWdlcyAoZS5nLiwgXFxcIm5vZGVqczoxMjoyMDIwMDEwMVxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvdmlkZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlByb3ZpZGVzIGxpc3RzIHRoZSB2aXJ0dWFsIHBhY2thZ2VzIGFuZCBjYXBhYmlsaXRpZXMgdGhpcyBwYWNrYWdlIHByb3ZpZGVzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicmVxdWlyZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJlcXVpcmVzIGxpc3RzIHRoZSBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgYnkgdGhpcyBwYWNrYWdlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCIkcmVmXCI6IFwiIy8kZGVmcy9ScG1GaWxlUmVjb3JkXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGFyZSB0aGUgZmlsZSByZWNvcmRzIGZvciBhbGwgZmlsZXMgb3duZWQgYnkgdGhpcyBwYWNrYWdlLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwiZXBvY2hcIixcbiAgICAgICAgXCJhcmNoaXRlY3R1cmVcIixcbiAgICAgICAgXCJyZWxlYXNlXCIsXG4gICAgICAgIFwic291cmNlUnBtXCIsXG4gICAgICAgIFwic2l6ZVwiLFxuICAgICAgICBcInZlbmRvclwiLFxuICAgICAgICBcImZpbGVzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUnBtREJFbnRyeSByZXByZXNlbnRzIGFsbCBjYXB0dXJlZCBkYXRhIGZyb20gYSBSUE0gREIgcGFja2FnZSBlbnRyeS5cIlxuICAgIH0sXG4gICAgXCJScG1GaWxlUmVjb3JkXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwicGF0aFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhdGggaXMgdGhlIGFic29sdXRlIGZpbGUgcGF0aCB3aGVyZSB0aGUgZmlsZSBpcyBpbnN0YWxsZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtb2RlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIk1vZGUgaXMgdGhlIGZpbGUgcGVybWlzc2lvbiBtb2RlIGJpdHMgZm9sbG93aW5nIFVuaXggc3RhdC5oIGNvbnZlbnRpb25zLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic2l6ZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTaXplIGlzIHRoZSBmaWxlIHNpemUgaW4gYnl0ZXMuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkaWdlc3RcIjoge1xuICAgICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvRGlnZXN0XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkRpZ2VzdCBjb250YWlucyB0aGUgaGFzaCBhbGdvcml0aG0gYW5kIHZhbHVlIGZvciBmaWxlIGludGVncml0eSB2ZXJpZmljYXRpb24uXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ1c2VyTmFtZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlVzZXJOYW1lIGlzIHRoZSBvd25lciB1c2VybmFtZSBmb3IgdGhlIGZpbGUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJncm91cE5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJHcm91cE5hbWUgaXMgdGhlIGdyb3VwIG5hbWUgZm9yIHRoZSBmaWxlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmxhZ3NcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJGbGFncyBpbmRpY2F0ZXMgdGhlIGZpbGUgdHlwZSAoZS5nLiwgXFxcIiVjb25maWdcXFwiLCBcXFwiJWRvY1xcXCIsIFxcXCIlZ2hvc3RcXFwiKS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJwYXRoXCIsXG4gICAgICAgIFwibW9kZVwiLFxuICAgICAgICBcInNpemVcIixcbiAgICAgICAgXCJkaWdlc3RcIixcbiAgICAgICAgXCJ1c2VyTmFtZVwiLFxuICAgICAgICBcImdyb3VwTmFtZVwiLFxuICAgICAgICBcImZsYWdzXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUnBtRmlsZVJlY29yZCByZXByZXNlbnRzIHRoZSBmaWxlIG1ldGFkYXRhIGZvciBhIHNpbmdsZSBmaWxlIGF0dHJpYnV0ZWQgdG8gYSBSUE0gcGFja2FnZS5cIlxuICAgIH0sXG4gICAgXCJScG1TaWduYXR1cmVcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJhbGdvXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUHVibGljS2V5QWxnb3JpdGhtIGlzIHRoZSBwdWJsaWMga2V5IGFsZ29yaXRobSB1c2VkIGZvciBzaWduaW5nIChlLmcuLCBcXFwiUlNBXFxcIikuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJoYXNoXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSGFzaEFsZ29yaXRobSBpcyB0aGUgaGFzaCBhbGdvcml0aG0gdXNlZCBmb3IgdGhlIHNpZ25hdHVyZSAoZS5nLiwgXFxcIlNIQTI1NlxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY3JlYXRlZFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkNyZWF0ZWQgaXMgdGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBzaWduYXR1cmUgd2FzIGNyZWF0ZWQuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJpc3N1ZXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJJc3N1ZXJLZXlJRCBpcyB0aGUgR1BHIGtleSBJRCB0aGF0IGNyZWF0ZWQgdGhlIHNpZ25hdHVyZS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJhbGdvXCIsXG4gICAgICAgIFwiaGFzaFwiLFxuICAgICAgICBcImNyZWF0ZWRcIixcbiAgICAgICAgXCJpc3N1ZXJcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJScG1TaWduYXR1cmUgcmVwcmVzZW50cyBhIEdQRyBzaWduYXR1cmUgZm9yIGFuIFJQTSBwYWNrYWdlIHVzZWQgZm9yIGF1dGhlbnRpY2l0eSB2ZXJpZmljYXRpb24uXCJcbiAgICB9LFxuICAgIFwiUnVieUdlbXNwZWNcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyBnZW0gbmFtZSBhcyBzcGVjaWZpZWQgaW4gdGhlIGdlbXNwZWNcIlxuICAgICAgICB9LFxuICAgICAgICBcInZlcnNpb25cIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJWZXJzaW9uIGlzIGdlbSB2ZXJzaW9uIGFzIHNwZWNpZmllZCBpbiB0aGUgZ2Vtc3BlY1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZmlsZXNcIjoge1xuICAgICAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkZpbGVzIGlzIGxvZ2ljYWwgbGlzdCBvZiBmaWxlcyBpbiB0aGUgZ2VtIChOT1QgZGlyZWN0bHkgdXNhYmxlIGFzIGZpbGVzeXN0ZW0gcGF0aHMuIEV4YW1wbGU6IGJ1bmRsZXIgZ2VtIGxpc3RzIFxcXCJsaWIvYnVuZGxlci92ZW5kb3IvdXJpL2xpYi91cmkvbGRhcC5yYlxcXCIgYnV0IGFjdHVhbCBwYXRoIGlzIFxcXCIvdXNyL2xvY2FsL2xpYi9ydWJ5LzMuMi4wL2J1bmRsZXIvdmVuZG9yL3VyaS9saWIvdXJpL2xkYXAucmJcXFwiLiBXb3VsZCBuZWVkIGdlbSBpbnN0YWxsYXRpb24gcGF0aCwgcnVieSB2ZXJzaW9uLCBhbmQgZW52IHZhcnMgbGlrZSBHRU1fSE9NRSB0byByZXNvbHZlIGFjdHVhbCBwYXRocy4pXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdXRob3JzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBdXRob3JzIGFyZSB0aGUgbGlzdCBvZiBnZW0gYXV0aG9ycyAoc3RvcmVkIGFzIGFycmF5IHJlZ2FyZGxlc3Mgb2YgdXNpbmcgYGF1dGhvcmAgb3IgYGF1dGhvcnNgIG1ldGhvZCBpbiBnZW1zcGVjKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG9tZXBhZ2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIb21lcGFnZSBpcyBwcm9qZWN0IGhvbWVwYWdlIFVSTFwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUnVieUdlbXNwZWMgcmVwcmVzZW50cyBhbGwgbWV0YWRhdGEgcGFyc2VkIGZyb20gdGhlICouZ2Vtc3BlYyBmaWxlXCJcbiAgICB9LFxuICAgIFwiUnVzdENhcmdvQXVkaXRFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIGNyYXRlIG5hbWUgYXMgc3BlY2lmaWVkIGluIGF1ZGl0IHNlY3Rpb24gb2YgdGhlIGJ1aWxkIGJpbmFyeVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgY3JhdGUgdmVyc2lvbiBhcyBzcGVjaWZpZWQgaW4gYXVkaXQgc2VjdGlvbiBvZiB0aGUgYnVpbGQgYmluYXJ5XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2UgaXMgdGhlIHNvdXJjZSByZWdpc3RyeSBvciByZXBvc2l0b3J5IHdoZXJlIHRoaXMgY3JhdGUgY2FtZSBmcm9tXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcInZlcnNpb25cIixcbiAgICAgICAgXCJzb3VyY2VcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJSdXN0QmluYXJ5QXVkaXRFbnRyeSByZXByZXNlbnRzIFJ1c3QgY3JhdGUgbWV0YWRhdGEgZXh0cmFjdGVkIGZyb20gYSBjb21waWxlZCBiaW5hcnkgdXNpbmcgY2FyZ28tYXVkaXRhYmxlIGZvcm1hdC5cIlxuICAgIH0sXG4gICAgXCJSdXN0Q2FyZ29Mb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyBjcmF0ZSBuYW1lIGFzIHNwZWNpZmllZCBpbiBDYXJnby50b21sXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyBjcmF0ZSB2ZXJzaW9uIGFzIHNwZWNpZmllZCBpbiBDYXJnby50b21sXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzb3VyY2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTb3VyY2UgaXMgdGhlIHNvdXJjZSByZWdpc3RyeSBvciByZXBvc2l0b3J5IFVSTCBpbiBmb3JtYXQgXFxcInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4XFxcIiBmb3IgcmVnaXN0cnkgcGFja2FnZXNcIlxuICAgICAgICB9LFxuICAgICAgICBcImNoZWNrc3VtXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQ2hlY2tzdW0gaXMgY29udGVudCBjaGVja3N1bSBmb3IgcmVnaXN0cnkgcGFja2FnZXMgb25seSAoaGV4YWRlY2ltYWwgc3RyaW5nKS4gQ2FyZ28gZG9lc24ndCByZXF1aXJlIG9yIGluY2x1ZGUgY2hlY2tzdW1zIGZvciBnaXQgZGVwZW5kZW5jaWVzLiBVc2VkIHRvIGRldGVjdCBNSVRNIGF0dGFja3MgYnkgdmVyaWZ5aW5nIGRvd25sb2FkZWQgY3JhdGUgbWF0Y2hlcyBsb2NrZmlsZSBjaGVja3N1bS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiRGVwZW5kZW5jaWVzIGFyZSB0aGUgbGlzdCBvZiBkZXBlbmRlbmNpZXMgd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnRzXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcInZlcnNpb25cIixcbiAgICAgICAgXCJzb3VyY2VcIixcbiAgICAgICAgXCJjaGVja3N1bVwiLFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJ1c3RDYXJnb0xvY2tFbnRyeSByZXByZXNlbnRzIGEgbG9ja2VkIGRlcGVuZGVuY3kgZnJvbSBhIENhcmdvLmxvY2sgZmlsZSB3aXRoIHByZWNpc2UgdmVyc2lvbiBhbmQgY2hlY2tzdW0gaW5mb3JtYXRpb24uXCJcbiAgICB9LFxuICAgIFwiU2NoZW1hXCI6IHtcbiAgICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIEpTT04gc2NoZW1hIHZlcnNpb24gZm9yIHRoaXMgZG9jdW1lbnQgZm9ybWF0LlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidXJsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVVJMIGlzIHRoZSBVUkwgdG8gdGhlIEpTT04gc2NoZW1hIGRlZmluaXRpb24gZG9jdW1lbnQuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcInVybFwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNjaGVtYSBzcGVjaWZpZXMgdGhlIEpTT04gc2NoZW1hIHZlcnNpb24gYW5kIFVSTCByZWZlcmVuY2UgdGhhdCBkZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgYW5kIHZhbGlkYXRpb24gcnVsZXMgZm9yIHRoaXMgZG9jdW1lbnQgZm9ybWF0LlwiXG4gICAgfSxcbiAgICBcIlNuYXBFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInNuYXBUeXBlXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU25hcFR5cGUgaW5kaWNhdGVzIHRoZSBzbmFwIHR5cGUgKGJhc2UsIGtlcm5lbCwgYXBwLCBnYWRnZXQsIG9yIHNuYXBkKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcImJhc2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJCYXNlIGlzIHRoZSBiYXNlIHNuYXAgbmFtZSB0aGF0IHRoaXMgc25hcCBkZXBlbmRzIG9uIChlLmcuLCBcXFwiY29yZTIwXFxcIiwgXFxcImNvcmUyMlxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic25hcE5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTbmFwTmFtZSBpcyB0aGUgc25hcCBwYWNrYWdlIG5hbWUuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJzbmFwVmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNuYXBWZXJzaW9uIGlzIHRoZSBzbmFwIHBhY2thZ2UgdmVyc2lvbi5cIlxuICAgICAgICB9LFxuICAgICAgICBcImFyY2hpdGVjdHVyZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIkFyY2hpdGVjdHVyZSBpcyB0aGUgdGFyZ2V0IENQVSBhcmNoaXRlY3R1cmUgKGUuZy4sIFxcXCJhbWQ2NFxcXCIsIFxcXCJhcm02NFxcXCIpLlwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInNuYXBUeXBlXCIsXG4gICAgICAgIFwiYmFzZVwiLFxuICAgICAgICBcInNuYXBOYW1lXCIsXG4gICAgICAgIFwic25hcFZlcnNpb25cIixcbiAgICAgICAgXCJhcmNoaXRlY3R1cmVcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTbmFwRW50cnkgcmVwcmVzZW50cyBtZXRhZGF0YSBmb3IgYSBTbmFwIHBhY2thZ2UgZXh0cmFjdGVkIGZyb20gc25hcC55YW1sIG9yIHNuYXBjcmFmdC55YW1sIGZpbGVzLlwiXG4gICAgfSxcbiAgICBcIlNvdXJjZVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcImlkXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSUQgaXMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGFuYWx5emVkIHNvdXJjZSBhcnRpZmFjdC5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm5hbWVcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBhbmFseXplZCBhcnRpZmFjdCAoZS5nLiwgaW1hZ2UgbmFtZSwgZGlyZWN0b3J5IHBhdGgpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIHZlcnNpb24gb2YgdGhlIGFuYWx5emVkIGFydGlmYWN0IChlLmcuLCBpbWFnZSB0YWcpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic3VwcGxpZXJcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJTdXBwbGllciBpcyBzdXBwbGllciBpbmZvcm1hdGlvbiwgd2hpY2ggY2FuIGJlIHVzZXItcHJvdmlkZWQgZm9yIE5USUEgbWluaW11bSBlbGVtZW50cyBjb21wbGlhbmNlLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlR5cGUgaXMgdGhlIHNvdXJjZSB0eXBlIChlLmcuLCBcXFwiaW1hZ2VcXFwiLCBcXFwiZGlyZWN0b3J5XFxcIiwgXFxcImZpbGVcXFwiKS5cIlxuICAgICAgICB9LFxuICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTWV0YWRhdGEgY29udGFpbnMgYWRkaXRpb25hbCBzb3VyY2Utc3BlY2lmaWMgbWV0YWRhdGEuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgXCJyZXF1aXJlZFwiOiBbXG4gICAgICAgIFwiaWRcIixcbiAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgIFwidmVyc2lvblwiLFxuICAgICAgICBcInR5cGVcIixcbiAgICAgICAgXCJtZXRhZGF0YVwiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlNvdXJjZSByZXByZXNlbnRzIHRoZSBhcnRpZmFjdCB0aGF0IHdhcyBhbmFseXplZCB0byBnZW5lcmF0ZSB0aGlzIFNCT00sIHN1Y2ggYXMgYSBjb250YWluZXIgaW1hZ2UsIGRpcmVjdG9yeSwgb3IgZmlsZSBhcmNoaXZlLlwiXG4gICAgfSxcbiAgICBcIlN3aWZ0UGFja2FnZU1hbmFnZXJMb2NrRW50cnlcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJyZXZpc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlJldmlzaW9uIGlzIGdpdCBjb21taXQgaGFzaCBvZiB0aGUgcmVzb2x2ZWQgcGFja2FnZVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcInJldmlzaW9uXCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiU3dpZnRQYWNrYWdlTWFuYWdlclJlc29sdmVkRW50cnkgcmVwcmVzZW50cyBhIHJlc29sdmVkIGRlcGVuZGVuY3kgZnJvbSBhIFBhY2thZ2UucmVzb2x2ZWQgZmlsZSB3aXRoIGl0cyBsb2NrZWQgdmVyc2lvbiBhbmQgc291cmNlIGxvY2F0aW9uLlwiXG4gICAgfSxcbiAgICBcIlN3aXBscGFja1BhY2thZ2VcIjoge1xuICAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgICAgXCJuYW1lXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiTmFtZSBpcyB0aGUgcGFja2FnZSBuYW1lIGFzIGZvdW5kIGluIHRoZSAudG9tbCBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ2ZXJzaW9uXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiVmVyc2lvbiBpcyB0aGUgcGFja2FnZSB2ZXJzaW9uIGFzIGZvdW5kIGluIHRoZSAudG9tbCBmaWxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdXRob3JcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBdXRob3IgaXMgYXV0aG9yIG5hbWVcIlxuICAgICAgICB9LFxuICAgICAgICBcImF1dGhvckVtYWlsXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiQXV0aG9yRW1haWwgaXMgYXV0aG9yIGVtYWlsIGFkZHJlc3NcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhY2thZ2VyXCI6IHtcbiAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiUGFja2FnZXIgaXMgcGFja2FnZXIgbmFtZSAoaWYgZGlmZmVyZW50IGZyb20gYXV0aG9yKVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGFja2FnZXJFbWFpbFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlBhY2thZ2VyRW1haWwgaXMgcGFja2FnZXIgZW1haWwgYWRkcmVzc1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaG9tZXBhZ2VcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJIb21lcGFnZSBpcyBwcm9qZWN0IGhvbWVwYWdlIFVSTFwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJEZXBlbmRlbmNpZXMgYXJlIHRoZSBsaXN0IG9mIHJlcXVpcmVkIGRlcGVuZGVuY2llc1wiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgIFwicmVxdWlyZWRcIjogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJ2ZXJzaW9uXCIsXG4gICAgICAgIFwiYXV0aG9yXCIsXG4gICAgICAgIFwiYXV0aG9yRW1haWxcIixcbiAgICAgICAgXCJwYWNrYWdlclwiLFxuICAgICAgICBcInBhY2thZ2VyRW1haWxcIixcbiAgICAgICAgXCJob21lcGFnZVwiLFxuICAgICAgICBcImRlcGVuZGVuY2llc1wiXG4gICAgICBdLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlN3aXBsUGFja0VudHJ5IHJlcHJlc2VudHMgYSBTV0ktUHJvbG9nIHBhY2thZ2UgZnJvbSB0aGUgcGFjayBzeXN0ZW0gd2l0aCBtZXRhZGF0YSBhYm91dCB0aGUgcGFja2FnZSBhbmQgaXRzIGRlcGVuZGVuY2llcy5cIlxuICAgIH0sXG4gICAgXCJUZXJyYWZvcm1Mb2NrUHJvdmlkZXJFbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInVybFwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlVSTCBpcyB0aGUgcHJvdmlkZXIgc291cmNlIGFkZHJlc3MgKGUuZy4sIFxcXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL2F3c1xcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29uc3RyYWludHNcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJDb25zdHJhaW50cyBzcGVjaWZpZXMgdGhlIHZlcnNpb24gY29uc3RyYWludHMgZm9yIHRoZSBwcm92aWRlciAoZS5nLiwgXFxcIn4+IDQuMFxcXCIpLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwidmVyc2lvblwiOiB7XG4gICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlZlcnNpb24gaXMgdGhlIGxvY2tlZCBwcm92aWRlciB2ZXJzaW9uIHNlbGVjdGVkIGR1cmluZyB0ZXJyYWZvcm0gaW5pdC5cIlxuICAgICAgICB9LFxuICAgICAgICBcImhhc2hlc1wiOiB7XG4gICAgICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSGFzaGVzIGFyZSBjcnlwdG9ncmFwaGljIGNoZWNrc3VtcyBmb3IgdGhlIHByb3ZpZGVyIHBsdWdpbiBhcmNoaXZlcyBhY3Jvc3MgZGlmZmVyZW50IHBsYXRmb3Jtcy5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJjb25zdHJhaW50c1wiLFxuICAgICAgICBcInZlcnNpb25cIixcbiAgICAgICAgXCJoYXNoZXNcIlxuICAgICAgXSxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJUZXJyYWZvcm1Mb2NrUHJvdmlkZXJFbnRyeSByZXByZXNlbnRzIGEgc2luZ2xlIHByb3ZpZGVyIGVudHJ5IGluIGEgVGVycmFmb3JtIGRlcGVuZGVuY3kgbG9jayBmaWxlICgudGVycmFmb3JtLmxvY2suaGNsKS5cIlxuICAgIH0sXG4gICAgXCJXb3JkcHJlc3NQbHVnaW5FbnRyeVwiOiB7XG4gICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcInBsdWdpbkluc3RhbGxEaXJlY3RvcnlcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJQbHVnaW5JbnN0YWxsRGlyZWN0b3J5IGlzIGRpcmVjdG9yeSBuYW1lIHdoZXJlIHRoZSBwbHVnaW4gaXMgaW5zdGFsbGVkXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdXRob3JcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBdXRob3IgaXMgcGx1Z2luIGF1dGhvciBuYW1lXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJhdXRob3JVcmlcIjoge1xuICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgIFwiZGVzY3JpcHRpb25cIjogXCJBdXRob3JVUkkgaXMgYXV0aG9yJ3Mgd2Vic2l0ZSBVUkxcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICBcInJlcXVpcmVkXCI6IFtcbiAgICAgICAgXCJwbHVnaW5JbnN0YWxsRGlyZWN0b3J5XCJcbiAgICAgIF0sXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IFwiV29yZHByZXNzUGx1Z2luRW50cnkgcmVwcmVzZW50cyBhbGwgbWV0YWRhdGEgcGFyc2VkIGZyb20gdGhlIHdvcmRwcmVzcyBwbHVnaW4gZmlsZVwiXG4gICAgfSxcbiAgICBcImNwZXNcIjoge1xuICAgICAgXCJpdGVtc1wiOiB7XG4gICAgICAgIFwiJHJlZlwiOiBcIiMvJGRlZnMvQ1BFXCJcbiAgICAgIH0sXG4gICAgICBcInR5cGVcIjogXCJhcnJheVwiXG4gICAgfSxcbiAgICBcImxpY2Vuc2VzXCI6IHtcbiAgICAgIFwiaXRlbXNcIjoge1xuICAgICAgICBcIiRyZWZcIjogXCIjLyRkZWZzL0xpY2Vuc2VcIlxuICAgICAgfSxcbiAgICAgIFwidHlwZVwiOiBcImFycmF5XCJcbiAgICB9XG4gIH1cbn0iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuaW1wb3J0IHR5cGUgeyBab2RUeXBlIH0gZnJvbSAnem9kJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0ICogYXMganNvblNjaGVtYSBmcm9tICcuLi9nZW5lcmF0ZWQvc3lmdC1zY2hlbWEuanNvbicgd2l0aCB7IHR5cGU6ICdqc29uJyB9O1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudCB9IGZyb20gJy4uL2dlbmVyYXRlZC9zeWZ0LXNjaGVtYSc7XG5cbnR5cGUgSlNPTlNjaGVtYSA9IFBhcmFtZXRlcnM8dHlwZW9mIHouZnJvbUpTT05TY2hlbWE+WzBdO1xuXG5leHBvcnQgY29uc3QgU3lmdERvY3VtZW50U2NoZW1hID0gei5mcm9tSlNPTlNjaGVtYShqc29uU2NoZW1hIGFzIEpTT05TY2hlbWEpIGFzIFpvZFR5cGU8RG9jdW1lbnQ+O1xuXG4vLyBleHBvcnQgYWxsIHN5ZnQgZ2VuZXJhdGVkIHR5cGVzXG5leHBvcnQgKiBmcm9tICcuLi9nZW5lcmF0ZWQvc3lmdC1zY2hlbWEnO1xuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIENvcHlyaWdodCAoQykgMjAyNiBSZWQgSGF0LCBJbmMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbmltcG9ydCAqIGFzIGdyeXBlIGZyb20gJy4vc2NoZW1hcy9ncnlwZSc7XG5pbXBvcnQgKiBhcyBzeWZ0IGZyb20gJy4vc2NoZW1hcy9zeWZ0JztcbmltcG9ydCB0eXBlIHsgQ2FuY2VsbGF0aW9uVG9rZW4gfSBmcm9tICdAcG9kbWFuLWRlc2t0b3AvYXBpJztcblxuZXhwb3J0IGludGVyZmFjZSBHcnlwZUV4dGVuc2lvbkFwaSB7XG4gIHNib206IHtcbiAgICBhbmFseXNlKFxuICAgICAgaW1hZ2U6IHsgZW5naW5lSWQ6IHN0cmluZzsgSWQ6IHN0cmluZyB9LFxuICAgICAgb3B0aW9ucz86IHtcbiAgICAgICAgdG9rZW4/OiBDYW5jZWxsYXRpb25Ub2tlbjtcbiAgICAgICAgdGFzaz86IHsgdGl0bGU/OiBzdHJpbmcgfTtcbiAgICAgIH0sXG4gICAgKTogUHJvbWlzZTxzeWZ0LkRvY3VtZW50PjtcbiAgfTtcblxuICB2dWxuZXJhYmlsaXR5OiB7XG4gICAgYW5hbHlzZShcbiAgICAgIGltYWdlOiB7IGVuZ2luZUlkOiBzdHJpbmc7IElkOiBzdHJpbmcgfSxcbiAgICAgIG9wdGlvbnM/OiB7XG4gICAgICAgIHRva2VuPzogQ2FuY2VsbGF0aW9uVG9rZW47XG4gICAgICAgIHRhc2s/OiB7IHRpdGxlPzogc3RyaW5nIH07XG4gICAgICB9LFxuICAgICk6IFByb21pc2U8Z3J5cGUuRG9jdW1lbnQ+O1xuICB9O1xufVxuXG4vLyBleHBvcnQgc3lmdCAmIGdyeXBlIHR5cGVzXG5leHBvcnQgeyBzeWZ0LCBncnlwZSB9O1xuIl0sInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4XSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBSUE7QUFLSixTQUF5QyxhQUFhLE1BQU0sYUFBYSxRQUFRO0NBQzdFLFNBQVMsS0FBSyxNQUFNLEtBQUs7RUFDckIsSUFBSSxDQUFDLEtBQUssTUFDTixPQUFPLGVBQWUsTUFBTSxRQUFRO0dBQ2hDLE9BQU87SUFDSDtJQUNBLFFBQVE7SUFDUix3QkFBUSxJQUFJLElBQUk7R0FDcEI7R0FDQSxZQUFZO0VBQ2hCLENBQUM7RUFFTCxJQUFJLEtBQUssS0FBSyxPQUFPLElBQUksSUFBSSxHQUN6QjtFQUVKLEtBQUssS0FBSyxPQUFPLElBQUksSUFBSTtFQUN6QixZQUFZLE1BQU0sR0FBRztFQUVyQixNQUFNLFFBQVEsRUFBRTtFQUNoQixNQUFNLE9BQU8sT0FBTyxLQUFLLEtBQUs7RUFDOUIsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0dBQ2xDLE1BQU0sSUFBSSxLQUFLO0dBQ2YsSUFBSSxFQUFFLEtBQUssT0FDUCxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUMsS0FBSyxJQUFJO0VBRXBDO0NBQ0o7Q0FFQSxNQUFNLFNBQVMsUUFBUSxVQUFVO0NBQ2pDLE1BQU0sbUJBQW1CLE9BQU8sQ0FDaEM7Q0FDQSxPQUFPLGVBQWUsWUFBWSxRQUFRLEVBQUUsT0FBTyxLQUFLLENBQUM7Q0FDekQsU0FBUyxFQUFFLEtBQUs7RUFDWixJQUFJO0VBQ0osTUFBTSxPQUFPLFFBQVEsU0FBUyxJQUFJLFdBQVcsSUFBSTtFQUNqRCxLQUFLLE1BQU0sR0FBRztFQUNkLENBQUMsS0FBSyxLQUFLLEtBQUEsQ0FBTSxhQUFhLEdBQUcsV0FBVyxDQUFDO0VBQzdDLEtBQUssTUFBTSxNQUFNLEtBQUssS0FBSyxVQUN2QixHQUFHO0VBRVAsT0FBTztDQUNYO0NBQ0EsT0FBTyxlQUFlLEdBQUcsUUFBUSxFQUFFLE9BQU8sS0FBSyxDQUFDO0NBQ2hELE9BQU8sZUFBZSxHQUFHLE9BQU8sYUFBYSxFQUN6QyxRQUFRLFNBQVM7RUFDYixJQUFJLFFBQVEsVUFBVSxnQkFBZ0IsT0FBTyxRQUN6QyxPQUFPO0VBQ1gsT0FBTyxNQUFNLE1BQU0sUUFBUSxJQUFJLElBQUk7Q0FDdkMsRUFDSixDQUFDO0NBQ0QsT0FBTyxlQUFlLEdBQUcsUUFBUSxFQUFFLE9BQU8sS0FBSyxDQUFDO0NBQ2hELE9BQU87QUFDWDtBQUdBLElBQWEsaUJBQWIsY0FBb0MsTUFBTTtDQUN0QyxjQUFjO0VBQ1YsTUFBTSwwRUFBMEU7Q0FDcEY7QUFDSjtBQUNBLElBQWEsa0JBQWIsY0FBcUMsTUFBTTtDQUN2QyxZQUFZLE1BQU07RUFDZCxNQUFNLHVEQUF1RCxNQUFNO0VBQ25FLEtBQUssT0FBTztDQUNoQjtBQUNKO0NBQ0MsT0FBSyxXQUFBLENBQVksdUJBQXVCLEtBQUcscUJBQXFCLENBQUM7QUFDbEUsSUFBYSxlQUFlLFdBQVc7QUFDdkMsU0FBZ0IsT0FBTyxXQUFXO0NBQzlCLElBQUksV0FDQSxPQUFPLE9BQU8sY0FBYyxTQUFTO0NBQ3pDLE9BQU87QUFDWDs7O0FDaEVBLFNBQWdCLGNBQWMsU0FBUztDQUNuQyxNQUFNLGdCQUFnQixPQUFPLE9BQU8sT0FBTyxDQUFDLENBQUMsUUFBUSxNQUFNLE9BQU8sTUFBTSxRQUFRO0NBSWhGLE9BSGUsT0FBTyxRQUFRLE9BQU8sQ0FBQyxDQUNqQyxRQUFRLENBQUMsR0FBRyxPQUFPLGNBQWMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FDcEQsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUNUO0FBQ2hCO0FBSUEsU0FBZ0Isc0JBQXNCLEdBQUcsT0FBTztDQUM1QyxJQUFJLE9BQU8sVUFBVSxVQUNqQixPQUFPLE1BQU0sU0FBUztDQUMxQixPQUFPO0FBQ1g7QUFDQSxTQUFnQixPQUFPLFFBQVE7Q0FFM0IsT0FBTyxFQUNILElBQUksUUFBUTtFQUNFO0dBQ04sTUFBTSxRQUFRLE9BQU87R0FDckIsT0FBTyxlQUFlLE1BQU0sU0FBUyxFQUFFLE1BQU0sQ0FBQztHQUM5QyxPQUFPO0VBQ1g7Q0FFSixFQUNKO0FBQ0o7QUFDQSxTQUFnQkMsVUFBUSxPQUFPO0NBQzNCLE9BQU8sVUFBVSxRQUFRLFVBQVUsS0FBQTtBQUN2QztBQUNBLFNBQWdCLFdBQVcsUUFBUTtDQUMvQixNQUFNLFFBQVEsT0FBTyxXQUFXLEdBQUcsSUFBSSxJQUFJO0NBQzNDLE1BQU0sTUFBTSxPQUFPLFNBQVMsR0FBRyxJQUFJLE9BQU8sU0FBUyxJQUFJLE9BQU87Q0FDOUQsT0FBTyxPQUFPLE1BQU0sT0FBTyxHQUFHO0FBQ2xDO0FBQ0EsU0FBZ0IsbUJBQW1CLEtBQUssTUFBTTtDQUMxQyxNQUFNLFFBQVEsTUFBTTtDQUNwQixNQUFNLGVBQWUsS0FBSyxNQUFNLEtBQUs7Q0FFckMsTUFBTSxZQUFZLE9BQU8sVUFBVSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDO0NBQzlELElBQUksS0FBSyxJQUFJLFFBQVEsWUFBWSxJQUFJLFdBQ2pDLE9BQU87Q0FDWCxPQUFPLFFBQVE7QUFDbkI7QUFDQSxJQUFNLGFBQTRCLHNCQUFPLFlBQVk7QUFDckQsU0FBZ0IsV0FBVyxRQUFRLEtBQUssUUFBUTtDQUM1QyxJQUFJLFFBQVEsS0FBQTtDQUNaLE9BQU8sZUFBZSxRQUFRLEtBQUs7RUFDL0IsTUFBTTtHQUNGLElBQUksVUFBVSxZQUVWO0dBRUosSUFBSSxVQUFVLEtBQUEsR0FBVztJQUNyQixRQUFRO0lBQ1IsUUFBUSxPQUFPO0dBQ25CO0dBQ0EsT0FBTztFQUNYO0VBQ0EsSUFBSSxHQUFHO0dBQ0gsT0FBTyxlQUFlLFFBQVEsS0FBSyxFQUMvQixPQUFPLEVBRVgsQ0FBQztFQUVMO0VBQ0EsY0FBYztDQUNsQixDQUFDO0FBQ0w7QUFJQSxTQUFnQixXQUFXLFFBQVEsTUFBTSxPQUFPO0NBQzVDLE9BQU8sZUFBZSxRQUFRLE1BQU07RUFDaEM7RUFDQSxVQUFVO0VBQ1YsWUFBWTtFQUNaLGNBQWM7Q0FDbEIsQ0FBQztBQUNMO0FBQ0EsU0FBZ0IsVUFBVSxHQUFHLE1BQU07Q0FDL0IsTUFBTSxvQkFBb0IsQ0FBQztDQUMzQixLQUFLLE1BQU0sT0FBTyxNQUFNO0VBQ3BCLE1BQU0sY0FBYyxPQUFPLDBCQUEwQixHQUFHO0VBQ3hELE9BQU8sT0FBTyxtQkFBbUIsV0FBVztDQUNoRDtDQUNBLE9BQU8sT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLGlCQUFpQjtBQUN4RDtBQTRCQSxTQUFnQixJQUFJLEtBQUs7Q0FDckIsT0FBTyxLQUFLLFVBQVUsR0FBRztBQUM3QjtBQUNBLFNBQWdCLFFBQVEsT0FBTztDQUMzQixPQUFPLE1BQ0YsWUFBWSxDQUFDLENBQ2IsS0FBSyxDQUFDLENBQ04sUUFBUSxhQUFhLEVBQUUsQ0FBQyxDQUN4QixRQUFRLFlBQVksR0FBRyxDQUFDLENBQ3hCLFFBQVEsWUFBWSxFQUFFO0FBQy9CO0FBQ0EsSUFBYSxvQkFBcUIsdUJBQXVCLFFBQVEsTUFBTSxxQkFBcUIsR0FBRyxVQUFVLENBQUU7QUFDM0csU0FBZ0IsU0FBUyxNQUFNO0NBQzNCLE9BQU8sT0FBTyxTQUFTLFlBQVksU0FBUyxRQUFRLENBQUMsTUFBTSxRQUFRLElBQUk7QUFDM0U7QUFDQSxJQUFhLGFBQTRCLDRCQUFhO0NBR2xELElBQUksYUFBYSxTQUNiLE9BQU87Q0FHWCxJQUFJLE9BQU8sY0FBYyxlQUFlLFdBQVcsV0FBVyxTQUFTLFlBQVksR0FDL0UsT0FBTztDQUVYLElBQUk7RUFFQSxJQUFJQyxTQUFFLEVBQUU7RUFDUixPQUFPO0NBQ1gsU0FDTyxHQUFHO0VBQ04sT0FBTztDQUNYO0FBQ0osQ0FBQztBQUNELFNBQWdCLGNBQWMsR0FBRztDQUM3QixJQUFJLFNBQVMsQ0FBQyxNQUFNLE9BQ2hCLE9BQU87Q0FFWCxNQUFNLE9BQU8sRUFBRTtDQUNmLElBQUksU0FBUyxLQUFBLEdBQ1QsT0FBTztDQUNYLElBQUksT0FBTyxTQUFTLFlBQ2hCLE9BQU87Q0FFWCxNQUFNLE9BQU8sS0FBSztDQUNsQixJQUFJLFNBQVMsSUFBSSxNQUFNLE9BQ25CLE9BQU87Q0FFWCxJQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssTUFBTSxlQUFlLE1BQU0sT0FDaEUsT0FBTztDQUVYLE9BQU87QUFDWDtBQUNBLFNBQWdCLGFBQWEsR0FBRztDQUM1QixJQUFJLGNBQWMsQ0FBQyxHQUNmLE9BQU8sRUFBRSxHQUFHLEVBQUU7Q0FDbEIsSUFBSSxNQUFNLFFBQVEsQ0FBQyxHQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUM7Q0FDaEIsSUFBSSxhQUFhLEtBQ2IsT0FBTyxJQUFJLElBQUksQ0FBQztDQUNwQixJQUFJLGFBQWEsS0FDYixPQUFPLElBQUksSUFBSSxDQUFDO0NBQ3BCLE9BQU87QUFDWDtBQXVEQSxJQUFhLGtDQUFrQyxJQUFJLElBQUk7Q0FBQztDQUFVO0NBQVU7QUFBUSxDQUFDO0FBQ3JGLElBQWEsZ0NBQWdDLElBQUksSUFBSTtDQUNqRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDSixDQUFDO0FBQ0QsU0FBZ0IsWUFBWSxLQUFLO0NBQzdCLE9BQU8sSUFBSSxRQUFRLHVCQUF1QixNQUFNO0FBQ3BEO0FBRUEsU0FBZ0IsTUFBTSxNQUFNLEtBQUssUUFBUTtDQUNyQyxNQUFNLEtBQUssSUFBSSxLQUFLLEtBQUssT0FBTyxPQUFPLEtBQUssS0FBSyxHQUFHO0NBQ3BELElBQUksQ0FBQyxPQUFPLFFBQVEsUUFDaEIsR0FBRyxLQUFLLFNBQVM7Q0FDckIsT0FBTztBQUNYO0FBQ0EsU0FBZ0IsZ0JBQWdCLFNBQVM7Q0FDckMsTUFBTSxTQUFTO0NBQ2YsSUFBSSxDQUFDLFFBQ0QsT0FBTyxDQUFDO0NBQ1osSUFBSSxPQUFPLFdBQVcsVUFDbEIsT0FBTyxFQUFFLGFBQWEsT0FBTztDQUNqQyxJQUFJLFFBQVEsWUFBWSxLQUFBLEdBQVc7RUFDL0IsSUFBSSxRQUFRLFVBQVUsS0FBQSxHQUNsQixNQUFNLElBQUksTUFBTSxrREFBa0Q7RUFDdEUsT0FBTyxRQUFRLE9BQU87Q0FDMUI7Q0FDQSxPQUFPLE9BQU87Q0FDZCxJQUFJLE9BQU8sT0FBTyxVQUFVLFVBQ3hCLE9BQU87RUFBRSxHQUFHO0VBQVEsYUFBYSxPQUFPO0NBQU07Q0FDbEQsT0FBTztBQUNYO0FBeUNBLFNBQWdCLGFBQWEsT0FBTztDQUNoQyxPQUFPLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxRQUFRLE1BQU07RUFDcEMsT0FBTyxNQUFNLEVBQUUsQ0FBQyxLQUFLLFVBQVUsY0FBYyxNQUFNLEVBQUUsQ0FBQyxLQUFLLFdBQVc7Q0FDMUUsQ0FBQztBQUNMO0FBQ0EsSUFBYSx1QkFBdUI7Q0FDaEMsU0FBUyxDQUFDLE9BQU8sa0JBQWtCLE9BQU8sZ0JBQWdCO0NBQzFELE9BQU8sQ0FBQyxhQUFhLFVBQVU7Q0FDL0IsUUFBUSxDQUFDLEdBQUcsVUFBVTtDQUN0QixTQUFTLENBQUMsdUJBQXdCLG9CQUFxQjtDQUN2RCxTQUFTLENBQUMsQ0FBQyxPQUFPLFdBQVcsT0FBTyxTQUFTO0FBQ2pEO0FBQ0EsSUFBYSx1QkFBdUI7Q0FDaEMsT0FBTyxDQUFnQixzQkFBTyxzQkFBc0IsR0FBa0Isc0JBQU8scUJBQXFCLENBQUM7Q0FDbkcsUUFBUSxDQUFnQixzQkFBTyxDQUFDLEdBQWtCLHNCQUFPLHNCQUFzQixDQUFDO0FBQ3BGO0FBQ0EsU0FBZ0IsS0FBSyxRQUFRLE1BQU07Q0FDL0IsTUFBTSxVQUFVLE9BQU8sS0FBSztDQUM1QixNQUFNLFNBQVMsUUFBUTtDQUV2QixJQURrQixVQUFVLE9BQU8sU0FBUyxHQUV4QyxNQUFNLElBQUksTUFBTSxpRUFBaUU7Q0FrQnJGLE9BQU8sTUFBTSxRQWhCRCxVQUFVLE9BQU8sS0FBSyxLQUFLO0VBQ25DLElBQUksUUFBUTtHQUNSLE1BQU0sV0FBVyxDQUFDO0dBQ2xCLEtBQUssTUFBTSxPQUFPLE1BQU07SUFDcEIsSUFBSSxFQUFFLE9BQU8sUUFBUSxRQUNqQixNQUFNLElBQUksTUFBTSxzQkFBc0IsSUFBSSxFQUFFO0lBRWhELElBQUksQ0FBQyxLQUFLLE1BQ047SUFDSixTQUFTLE9BQU8sUUFBUSxNQUFNO0dBQ2xDO0dBQ0EsV0FBVyxNQUFNLFNBQVMsUUFBUTtHQUNsQyxPQUFPO0VBQ1g7RUFDQSxRQUFRLENBQUM7Q0FDYixDQUN1QixDQUFDO0FBQzVCO0FBQ0EsU0FBZ0IsS0FBSyxRQUFRLE1BQU07Q0FDL0IsTUFBTSxVQUFVLE9BQU8sS0FBSztDQUM1QixNQUFNLFNBQVMsUUFBUTtDQUV2QixJQURrQixVQUFVLE9BQU8sU0FBUyxHQUV4QyxNQUFNLElBQUksTUFBTSxpRUFBaUU7Q0FrQnJGLE9BQU8sTUFBTSxRQWhCRCxVQUFVLE9BQU8sS0FBSyxLQUFLO0VBQ25DLElBQUksUUFBUTtHQUNSLE1BQU0sV0FBVyxFQUFFLEdBQUcsT0FBTyxLQUFLLElBQUksTUFBTTtHQUM1QyxLQUFLLE1BQU0sT0FBTyxNQUFNO0lBQ3BCLElBQUksRUFBRSxPQUFPLFFBQVEsUUFDakIsTUFBTSxJQUFJLE1BQU0sc0JBQXNCLElBQUksRUFBRTtJQUVoRCxJQUFJLENBQUMsS0FBSyxNQUNOO0lBQ0osT0FBTyxTQUFTO0dBQ3BCO0dBQ0EsV0FBVyxNQUFNLFNBQVMsUUFBUTtHQUNsQyxPQUFPO0VBQ1g7RUFDQSxRQUFRLENBQUM7Q0FDYixDQUN1QixDQUFDO0FBQzVCO0FBQ0EsU0FBZ0IsT0FBTyxRQUFRLE9BQU87Q0FDbEMsSUFBSSxDQUFDLGNBQWMsS0FBSyxHQUNwQixNQUFNLElBQUksTUFBTSxrREFBa0Q7Q0FFdEUsTUFBTSxTQUFTLE9BQU8sS0FBSyxJQUFJO0NBRS9CLElBRGtCLFVBQVUsT0FBTyxTQUFTLEdBQzdCO0VBR1gsTUFBTSxnQkFBZ0IsT0FBTyxLQUFLLElBQUk7RUFDdEMsS0FBSyxNQUFNLE9BQU8sT0FDZCxJQUFJLE9BQU8seUJBQXlCLGVBQWUsR0FBRyxNQUFNLEtBQUEsR0FDeEQsTUFBTSxJQUFJLE1BQU0sOEZBQThGO0NBRzFIO0NBUUEsT0FBTyxNQUFNLFFBUEQsVUFBVSxPQUFPLEtBQUssS0FBSyxFQUNuQyxJQUFJLFFBQVE7RUFDUixNQUFNLFNBQVM7R0FBRSxHQUFHLE9BQU8sS0FBSyxJQUFJO0dBQU8sR0FBRztFQUFNO0VBQ3BELFdBQVcsTUFBTSxTQUFTLE1BQU07RUFDaEMsT0FBTztDQUNYLEVBQ0osQ0FDdUIsQ0FBQztBQUM1QjtBQUNBLFNBQWdCLFdBQVcsUUFBUSxPQUFPO0NBQ3RDLElBQUksQ0FBQyxjQUFjLEtBQUssR0FDcEIsTUFBTSxJQUFJLE1BQU0sc0RBQXNEO0NBUzFFLE9BQU8sTUFBTSxRQVBELFVBQVUsT0FBTyxLQUFLLEtBQUssRUFDbkMsSUFBSSxRQUFRO0VBQ1IsTUFBTSxTQUFTO0dBQUUsR0FBRyxPQUFPLEtBQUssSUFBSTtHQUFPLEdBQUc7RUFBTTtFQUNwRCxXQUFXLE1BQU0sU0FBUyxNQUFNO0VBQ2hDLE9BQU87Q0FDWCxFQUNKLENBQ3VCLENBQUM7QUFDNUI7QUFDQSxTQUFnQixNQUFNLEdBQUcsR0FBRztDQUN4QixJQUFJLEVBQUUsS0FBSyxJQUFJLFFBQVEsUUFDbkIsTUFBTSxJQUFJLE1BQU0sOEZBQThGO0NBYWxILE9BQU8sTUFBTSxHQVhELFVBQVUsRUFBRSxLQUFLLEtBQUs7RUFDOUIsSUFBSSxRQUFRO0dBQ1IsTUFBTSxTQUFTO0lBQUUsR0FBRyxFQUFFLEtBQUssSUFBSTtJQUFPLEdBQUcsRUFBRSxLQUFLLElBQUk7R0FBTTtHQUMxRCxXQUFXLE1BQU0sU0FBUyxNQUFNO0dBQ2hDLE9BQU87RUFDWDtFQUNBLElBQUksV0FBVztHQUNYLE9BQU8sRUFBRSxLQUFLLElBQUk7RUFDdEI7RUFDQSxRQUFRLEVBQUUsS0FBSyxJQUFJLFVBQVUsQ0FBQztDQUNsQyxDQUNrQixDQUFDO0FBQ3ZCO0FBQ0EsU0FBZ0IsUUFBUSxPQUFPLFFBQVEsTUFBTTtDQUV6QyxNQUFNLFNBRFUsT0FBTyxLQUFLLElBQ0w7Q0FFdkIsSUFEa0IsVUFBVSxPQUFPLFNBQVMsR0FFeEMsTUFBTSxJQUFJLE1BQU0sb0VBQW9FO0NBc0N4RixPQUFPLE1BQU0sUUFwQ0QsVUFBVSxPQUFPLEtBQUssS0FBSztFQUNuQyxJQUFJLFFBQVE7R0FDUixNQUFNLFdBQVcsT0FBTyxLQUFLLElBQUk7R0FDakMsTUFBTSxRQUFRLEVBQUUsR0FBRyxTQUFTO0dBQzVCLElBQUksTUFDQSxLQUFLLE1BQU0sT0FBTyxNQUFNO0lBQ3BCLElBQUksRUFBRSxPQUFPLFdBQ1QsTUFBTSxJQUFJLE1BQU0sc0JBQXNCLElBQUksRUFBRTtJQUVoRCxJQUFJLENBQUMsS0FBSyxNQUNOO0lBRUosTUFBTSxPQUFPLFFBQ1AsSUFBSSxNQUFNO0tBQ1IsTUFBTTtLQUNOLFdBQVcsU0FBUztJQUN4QixDQUFDLElBQ0MsU0FBUztHQUNuQjtRQUdBLEtBQUssTUFBTSxPQUFPLFVBRWQsTUFBTSxPQUFPLFFBQ1AsSUFBSSxNQUFNO0lBQ1IsTUFBTTtJQUNOLFdBQVcsU0FBUztHQUN4QixDQUFDLElBQ0MsU0FBUztHQUd2QixXQUFXLE1BQU0sU0FBUyxLQUFLO0dBQy9CLE9BQU87RUFDWDtFQUNBLFFBQVEsQ0FBQztDQUNiLENBQ3VCLENBQUM7QUFDNUI7QUFDQSxTQUFnQixTQUFTLE9BQU8sUUFBUSxNQUFNO0NBZ0MxQyxPQUFPLE1BQU0sUUEvQkQsVUFBVSxPQUFPLEtBQUssS0FBSyxFQUNuQyxJQUFJLFFBQVE7RUFDUixNQUFNLFdBQVcsT0FBTyxLQUFLLElBQUk7RUFDakMsTUFBTSxRQUFRLEVBQUUsR0FBRyxTQUFTO0VBQzVCLElBQUksTUFDQSxLQUFLLE1BQU0sT0FBTyxNQUFNO0dBQ3BCLElBQUksRUFBRSxPQUFPLFFBQ1QsTUFBTSxJQUFJLE1BQU0sc0JBQXNCLElBQUksRUFBRTtHQUVoRCxJQUFJLENBQUMsS0FBSyxNQUNOO0dBRUosTUFBTSxPQUFPLElBQUksTUFBTTtJQUNuQixNQUFNO0lBQ04sV0FBVyxTQUFTO0dBQ3hCLENBQUM7RUFDTDtPQUdBLEtBQUssTUFBTSxPQUFPLFVBRWQsTUFBTSxPQUFPLElBQUksTUFBTTtHQUNuQixNQUFNO0dBQ04sV0FBVyxTQUFTO0VBQ3hCLENBQUM7RUFHVCxXQUFXLE1BQU0sU0FBUyxLQUFLO0VBQy9CLE9BQU87Q0FDWCxFQUNKLENBQ3VCLENBQUM7QUFDNUI7QUFFQSxTQUFnQixRQUFRLEdBQUcsYUFBYSxHQUFHO0NBQ3ZDLElBQUksRUFBRSxZQUFZLE1BQ2QsT0FBTztDQUNYLEtBQUssSUFBSSxJQUFJLFlBQVksSUFBSSxFQUFFLE9BQU8sUUFBUSxLQUMxQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsYUFBYSxNQUMxQixPQUFPO0NBR2YsT0FBTztBQUNYO0FBR0EsU0FBZ0Isa0JBQWtCLEdBQUcsYUFBYSxHQUFHO0NBQ2pELElBQUksRUFBRSxZQUFZLE1BQ2QsT0FBTztDQUNYLEtBQUssSUFBSSxJQUFJLFlBQVksSUFBSSxFQUFFLE9BQU8sUUFBUSxLQUMxQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsYUFBYSxPQUMxQixPQUFPO0NBR2YsT0FBTztBQUNYO0FBQ0EsU0FBZ0IsYUFBYSxNQUFNLFFBQVE7Q0FDdkMsT0FBTyxPQUFPLEtBQUssUUFBUTtFQUN2QixJQUFJO0VBQ0osQ0FBQyxLQUFLLElBQUEsQ0FBSyxTQUFTLEdBQUcsT0FBTyxDQUFDO0VBQy9CLElBQUksS0FBSyxRQUFRLElBQUk7RUFDckIsT0FBTztDQUNYLENBQUM7QUFDTDtBQUNBLFNBQWdCLGNBQWMsU0FBUztDQUNuQyxPQUFPLE9BQU8sWUFBWSxXQUFXLFVBQVUsU0FBUztBQUM1RDtBQUNBLFNBQWdCLGNBQWMsS0FBSyxLQUFLLFFBQVE7Q0FDNUMsTUFBTSxVQUFVLElBQUksVUFDZCxJQUFJLFVBQ0gsY0FBYyxJQUFJLE1BQU0sS0FBSyxLQUFLLFFBQVEsR0FBRyxDQUFDLEtBQzdDLGNBQWMsS0FBSyxRQUFRLEdBQUcsQ0FBQyxLQUMvQixjQUFjLE9BQU8sY0FBYyxHQUFHLENBQUMsS0FDdkMsY0FBYyxPQUFPLGNBQWMsR0FBRyxDQUFDLEtBQ3ZDO0NBQ1IsTUFBTSxFQUFFLE1BQU0sT0FBTyxVQUFVLFdBQVcsT0FBTyxRQUFRLEdBQUcsU0FBUztDQUNyRSxLQUFLLFNBQVMsS0FBSyxPQUFPLENBQUM7Q0FDM0IsS0FBSyxVQUFVO0NBQ2YsSUFBSSxLQUFLLGFBQ0wsS0FBSyxRQUFRO0NBRWpCLE9BQU87QUFDWDtBQUNBLFNBQWdCLGlCQUFpQixPQUFPO0NBQ3BDLElBQUksaUJBQWlCLEtBQ2pCLE9BQU87Q0FDWCxJQUFJLGlCQUFpQixLQUNqQixPQUFPO0NBRVgsSUFBSSxpQkFBaUIsTUFDakIsT0FBTztDQUNYLE9BQU87QUFDWDtBQUNBLFNBQWdCLG9CQUFvQixPQUFPO0NBQ3ZDLElBQUksTUFBTSxRQUFRLEtBQUssR0FDbkIsT0FBTztDQUNYLElBQUksT0FBTyxVQUFVLFVBQ2pCLE9BQU87Q0FDWCxPQUFPO0FBQ1g7QUFzQkEsU0FBZ0IsTUFBTSxHQUFHLE1BQU07Q0FDM0IsTUFBTSxDQUFDLEtBQUssT0FBTyxRQUFRO0NBQzNCLElBQUksT0FBTyxRQUFRLFVBQ2YsT0FBTztFQUNILFNBQVM7RUFDVCxNQUFNO0VBQ047RUFDQTtDQUNKO0NBRUosT0FBTyxFQUFFLEdBQUcsSUFBSTtBQUNwQjs7O0FDM21CQSxJQUFNQyxpQkFBZSxNQUFNLFFBQVE7Q0FDL0IsS0FBSyxPQUFPO0NBQ1osT0FBTyxlQUFlLE1BQU0sUUFBUTtFQUNoQyxPQUFPLEtBQUs7RUFDWixZQUFZO0NBQ2hCLENBQUM7Q0FDRCxPQUFPLGVBQWUsTUFBTSxVQUFVO0VBQ2xDLE9BQU87RUFDUCxZQUFZO0NBQ2hCLENBQUM7Q0FDRCxLQUFLLFVBQVUsS0FBSyxVQUFVLEtBQUtDLHVCQUE0QixDQUFDO0NBQ2hFLE9BQU8sZUFBZSxNQUFNLFlBQVk7RUFDcEMsYUFBYSxLQUFLO0VBQ2xCLFlBQVk7Q0FDaEIsQ0FBQztBQUNMO0FBQ0EsSUFBYSxZQUFZLGFBQWEsYUFBYUQsYUFBVztBQUM5RCxJQUFhLGdCQUFnQixhQUFhLGFBQWFBLGVBQWEsRUFBRSxRQUFRLE1BQU0sQ0FBQztBQUNyRixTQUFnQixhQUFhLE9BQU8sVUFBVSxVQUFVLE1BQU0sU0FBUztDQUNuRSxNQUFNLGNBQWMsQ0FBQztDQUNyQixNQUFNLGFBQWEsQ0FBQztDQUNwQixLQUFLLE1BQU0sT0FBTyxNQUFNLFFBQ3BCLElBQUksSUFBSSxLQUFLLFNBQVMsR0FBRztFQUNyQixZQUFZLElBQUksS0FBSyxNQUFNLFlBQVksSUFBSSxLQUFLLE9BQU8sQ0FBQztFQUN4RCxZQUFZLElBQUksS0FBSyxHQUFHLENBQUMsS0FBSyxPQUFPLEdBQUcsQ0FBQztDQUM3QyxPQUVJLFdBQVcsS0FBSyxPQUFPLEdBQUcsQ0FBQztDQUduQyxPQUFPO0VBQUU7RUFBWTtDQUFZO0FBQ3JDO0FBQ0EsU0FBZ0IsWUFBWSxPQUFPLFVBQVUsVUFBVSxNQUFNLFNBQVM7Q0FDbEUsTUFBTSxjQUFjLEVBQUUsU0FBUyxDQUFDLEVBQUU7Q0FDbEMsTUFBTSxnQkFBZ0IsT0FBTyxPQUFPLENBQUMsTUFBTTtFQUN2QyxLQUFLLE1BQU0sU0FBUyxNQUFNLFFBQ3RCLElBQUksTUFBTSxTQUFTLG1CQUFtQixNQUFNLE9BQU8sUUFDL0MsTUFBTSxPQUFPLEtBQUssV0FBVyxhQUFhLEVBQUUsT0FBTyxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztPQUU5RSxJQUFJLE1BQU0sU0FBUyxlQUNwQixhQUFhLEVBQUUsUUFBUSxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDO09BRTlELElBQUksTUFBTSxTQUFTLG1CQUNwQixhQUFhLEVBQUUsUUFBUSxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDO09BRTlEO0dBQ0QsTUFBTSxXQUFXLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxJQUFJO0dBQ3hDLElBQUksU0FBUyxXQUFXLEdBQ3BCLFlBQVksUUFBUSxLQUFLLE9BQU8sS0FBSyxDQUFDO1FBRXJDO0lBQ0QsSUFBSSxPQUFPO0lBQ1gsSUFBSSxJQUFJO0lBQ1IsT0FBTyxJQUFJLFNBQVMsUUFBUTtLQUN4QixNQUFNLEtBQUssU0FBUztLQUVwQixJQUFJLEVBRGEsTUFBTSxTQUFTLFNBQVMsSUFFckMsS0FBSyxNQUFNLEtBQUssT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1VBRXBDO01BQ0QsS0FBSyxNQUFNLEtBQUssT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFO01BQ3JDLEtBQUssR0FBRyxDQUFDLFFBQVEsS0FBSyxPQUFPLEtBQUssQ0FBQztLQUN2QztLQUNBLE9BQU8sS0FBSztLQUNaO0lBQ0o7R0FDSjtFQUNKO0NBRVI7Q0FDQSxhQUFhLEtBQUs7Q0FDbEIsT0FBTztBQUNYOzs7QUN2RUEsSUFBYSxVQUFVLFVBQVUsUUFBUSxPQUFPLE1BQU0sWUFBWTtDQUM5RCxNQUFNLE1BQU0sT0FBTztFQUFFLEdBQUc7RUFBTSxPQUFPO0NBQU0sSUFBSSxFQUFFLE9BQU8sTUFBTTtDQUM5RCxNQUFNLFNBQVMsT0FBTyxLQUFLLElBQUk7RUFBRTtFQUFPLFFBQVEsQ0FBQztDQUFFLEdBQUcsR0FBRztDQUN6RCxJQUFJLGtCQUFrQixTQUNsQixNQUFNLElBQUlFLGVBQW9CO0NBRWxDLElBQUksT0FBTyxPQUFPLFFBQVE7RUFDdEIsTUFBTSxJQUFJLE1BQUssU0FBUyxRQUFPLE1BQU0sT0FBTyxPQUFPLEtBQUssUUFBUUMsY0FBbUIsS0FBSyxLQUFLQyxPQUFZLENBQUMsQ0FBQyxDQUFDO0VBQzVHLGtCQUF1QixHQUFHLFNBQVMsTUFBTTtFQUN6QyxNQUFNO0NBQ1Y7Q0FDQSxPQUFPLE9BQU87QUFDbEI7QUFDQSxJQUFhQyxVQUF1QixzQkFBT0MsYUFBb0I7QUFDL0QsSUFBYSxlQUFlLFNBQVMsT0FBTyxRQUFRLE9BQU8sTUFBTSxXQUFXO0NBQ3hFLE1BQU0sTUFBTSxPQUFPO0VBQUUsR0FBRztFQUFNLE9BQU87Q0FBSyxJQUFJLEVBQUUsT0FBTyxLQUFLO0NBQzVELElBQUksU0FBUyxPQUFPLEtBQUssSUFBSTtFQUFFO0VBQU8sUUFBUSxDQUFDO0NBQUUsR0FBRyxHQUFHO0NBQ3ZELElBQUksa0JBQWtCLFNBQ2xCLFNBQVMsTUFBTTtDQUNuQixJQUFJLE9BQU8sT0FBTyxRQUFRO0VBQ3RCLE1BQU0sSUFBSSxNQUFLLFFBQVEsUUFBTyxNQUFNLE9BQU8sT0FBTyxLQUFLLFFBQVFILGNBQW1CLEtBQUssS0FBS0MsT0FBWSxDQUFDLENBQUMsQ0FBQztFQUMzRyxrQkFBdUIsR0FBRyxRQUFRLE1BQU07RUFDeEMsTUFBTTtDQUNWO0NBQ0EsT0FBTyxPQUFPO0FBQ2xCO0FBQ0EsSUFBYUcsZUFBNEIsMkJBQVlELGFBQW9CO0FBQ3pFLElBQWEsY0FBYyxVQUFVLFFBQVEsT0FBTyxTQUFTO0NBQ3pELE1BQU0sTUFBTSxPQUFPO0VBQUUsR0FBRztFQUFNLE9BQU87Q0FBTSxJQUFJLEVBQUUsT0FBTyxNQUFNO0NBQzlELE1BQU0sU0FBUyxPQUFPLEtBQUssSUFBSTtFQUFFO0VBQU8sUUFBUSxDQUFDO0NBQUUsR0FBRyxHQUFHO0NBQ3pELElBQUksa0JBQWtCLFNBQ2xCLE1BQU0sSUFBSUosZUFBb0I7Q0FFbEMsT0FBTyxPQUFPLE9BQU8sU0FDZjtFQUNFLFNBQVM7RUFDVCxPQUFPLEtBQUssUUFBUU0sV0FBa0IsT0FBTyxPQUFPLEtBQUssUUFBUUwsY0FBbUIsS0FBSyxLQUFLQyxPQUFZLENBQUMsQ0FBQyxDQUFDO0NBQ2pILElBQ0U7RUFBRSxTQUFTO0VBQU0sTUFBTSxPQUFPO0NBQU07QUFDOUM7QUFDQSxJQUFhSyxjQUEyQiwwQkFBV0gsYUFBb0I7QUFDdkUsSUFBYSxtQkFBbUIsU0FBUyxPQUFPLFFBQVEsT0FBTyxTQUFTO0NBQ3BFLE1BQU0sTUFBTSxPQUFPO0VBQUUsR0FBRztFQUFNLE9BQU87Q0FBSyxJQUFJLEVBQUUsT0FBTyxLQUFLO0NBQzVELElBQUksU0FBUyxPQUFPLEtBQUssSUFBSTtFQUFFO0VBQU8sUUFBUSxDQUFDO0NBQUUsR0FBRyxHQUFHO0NBQ3ZELElBQUksa0JBQWtCLFNBQ2xCLFNBQVMsTUFBTTtDQUNuQixPQUFPLE9BQU8sT0FBTyxTQUNmO0VBQ0UsU0FBUztFQUNULE9BQU8sSUFBSSxLQUFLLE9BQU8sT0FBTyxLQUFLLFFBQVFILGNBQW1CLEtBQUssS0FBS0MsT0FBWSxDQUFDLENBQUMsQ0FBQztDQUMzRixJQUNFO0VBQUUsU0FBUztFQUFNLE1BQU0sT0FBTztDQUFNO0FBQzlDO0FBQ0EsSUFBYU0sbUJBQWdDLCtCQUFnQkosYUFBb0I7QUFDakYsSUFBYSxXQUFXLFVBQVUsUUFBUSxPQUFPLFNBQVM7Q0FDdEQsTUFBTSxNQUFNLE9BQU87RUFBRSxHQUFHO0VBQU0sV0FBVztDQUFXLElBQUksRUFBRSxXQUFXLFdBQVc7Q0FDaEYsT0FBTyxPQUFPLElBQUksQ0FBQyxDQUFDLFFBQVEsT0FBTyxHQUFHO0FBQzFDO0FBRUEsSUFBYSxXQUFXLFVBQVUsUUFBUSxPQUFPLFNBQVM7Q0FDdEQsT0FBTyxPQUFPLElBQUksQ0FBQyxDQUFDLFFBQVEsT0FBTyxJQUFJO0FBQzNDO0FBRUEsSUFBYSxnQkFBZ0IsU0FBUyxPQUFPLFFBQVEsT0FBTyxTQUFTO0NBQ2pFLE1BQU0sTUFBTSxPQUFPO0VBQUUsR0FBRztFQUFNLFdBQVc7Q0FBVyxJQUFJLEVBQUUsV0FBVyxXQUFXO0NBQ2hGLE9BQU8sWUFBWSxJQUFJLENBQUMsQ0FBQyxRQUFRLE9BQU8sR0FBRztBQUMvQztBQUVBLElBQWEsZ0JBQWdCLFNBQVMsT0FBTyxRQUFRLE9BQU8sU0FBUztDQUNqRSxPQUFPLFlBQVksSUFBSSxDQUFDLENBQUMsUUFBUSxPQUFPLElBQUk7QUFDaEQ7QUFFQSxJQUFhLGVBQWUsVUFBVSxRQUFRLE9BQU8sU0FBUztDQUMxRCxNQUFNLE1BQU0sT0FBTztFQUFFLEdBQUc7RUFBTSxXQUFXO0NBQVcsSUFBSSxFQUFFLFdBQVcsV0FBVztDQUNoRixPQUFPLFdBQVcsSUFBSSxDQUFDLENBQUMsUUFBUSxPQUFPLEdBQUc7QUFDOUM7QUFFQSxJQUFhLGVBQWUsVUFBVSxRQUFRLE9BQU8sU0FBUztDQUMxRCxPQUFPLFdBQVcsSUFBSSxDQUFDLENBQUMsUUFBUSxPQUFPLElBQUk7QUFDL0M7QUFFQSxJQUFhLG9CQUFvQixTQUFTLE9BQU8sUUFBUSxPQUFPLFNBQVM7Q0FDckUsTUFBTSxNQUFNLE9BQU87RUFBRSxHQUFHO0VBQU0sV0FBVztDQUFXLElBQUksRUFBRSxXQUFXLFdBQVc7Q0FDaEYsT0FBTyxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsUUFBUSxPQUFPLEdBQUc7QUFDbkQ7QUFFQSxJQUFhLG9CQUFvQixTQUFTLE9BQU8sUUFBUSxPQUFPLFNBQVM7Q0FDckUsT0FBTyxnQkFBZ0IsSUFBSSxDQUFDLENBQUMsUUFBUSxPQUFPLElBQUk7QUFDcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JGQSxJQUFhSyxTQUFPO0FBQ3BCLElBQWFDLFVBQVE7QUFDckIsSUFBYUMsU0FBTztBQUNwQixJQUFhQyxRQUFNO0FBQ25CLElBQWFDLFVBQVE7QUFDckIsSUFBYUMsV0FBUzs7QUFFdEIsSUFBYUMsYUFBVzs7QUFFeEIsSUFBYSxtQkFBbUI7O0FBRWhDLElBQWFDLFNBQU87Ozs7QUFJcEIsSUFBYUMsVUFBUSxZQUFZO0NBQzdCLElBQUksQ0FBQyxTQUNELE9BQU87Q0FDWCxPQUFPLElBQUksT0FBTyxtQ0FBbUMsUUFBUSx3REFBd0Q7QUFDekg7QUFDQSxJQUFhLFFBQXNCLHFCQUFLLENBQUM7QUFDekMsSUFBYSxRQUFzQixxQkFBSyxDQUFDO0FBQ3pDLElBQWEsUUFBc0IscUJBQUssQ0FBQzs7QUFFekMsSUFBYUMsVUFBUTs7QUFFckIsSUFBYSxhQUFhOztBQUUxQixJQUFhLGVBQWU7O0FBRTVCLElBQWEsZUFBZTtBQUM1QixJQUFhLFdBQVc7QUFDeEIsSUFBYSxlQUFlO0FBRTVCLElBQU1DLFdBQVM7QUFDZixTQUFnQkMsVUFBUTtDQUNwQixPQUFPLElBQUksT0FBT0QsVUFBUSxHQUFHO0FBQ2pDO0FBQ0EsSUFBYUUsU0FBTztBQUNwQixJQUFhQyxTQUFPO0FBQ3BCLElBQWFDLFNBQU8sY0FBYztDQUM5QixNQUFNLGVBQWVDLFlBQWlCLGFBQWEsR0FBRztDQUN0RCxPQUFPLElBQUksT0FBTyxrQkFBa0IsYUFBYSxrQ0FBa0MsYUFBYSxpQkFBaUI7QUFDckg7QUFDQSxJQUFhQyxXQUFTO0FBQ3RCLElBQWFDLFdBQVM7QUFFdEIsSUFBYUMsV0FBUztBQUN0QixJQUFhQyxjQUFZO0FBR3pCLElBQWFDLGFBQVc7QUFDeEIsSUFBYSxTQUFTO0FBQ3RCLElBQWEsZUFBZTtBQUc1QixJQUFhQyxTQUFPO0FBRXBCLElBQU0sYUFBYTtBQUNuQixJQUFhQyx1QkFBcUIsSUFBSSxPQUFPLElBQUksV0FBVyxFQUFFO0FBQzlELFNBQVMsV0FBVyxNQUFNO0NBQ3RCLE1BQU0sT0FBTztDQVFiLE9BUGMsT0FBTyxLQUFLLGNBQWMsV0FDbEMsS0FBSyxjQUFjLEtBQ2YsR0FBRyxTQUNILEtBQUssY0FBYyxJQUNmLEdBQUcsS0FBSyxhQUNSLEdBQUcsS0FBSyxrQkFBa0IsS0FBSyxVQUFVLEtBQ2pELEdBQUcsS0FBSztBQUVsQjtBQUNBLFNBQWdCQyxPQUFLLE1BQU07Q0FDdkIsT0FBTyxJQUFJLE9BQU8sSUFBSSxXQUFXLElBQUksRUFBRSxFQUFFO0FBQzdDO0FBRUEsU0FBZ0JDLFdBQVMsTUFBTTtDQUMzQixNQUFNLE9BQU8sV0FBVyxFQUFFLFdBQVcsS0FBSyxVQUFVLENBQUM7Q0FDckQsTUFBTSxPQUFPLENBQUMsR0FBRztDQUNqQixJQUFJLEtBQUssT0FDTCxLQUFLLEtBQUssRUFBRTtDQUVoQixJQUFJLEtBQUssUUFDTCxLQUFLLEtBQUssbUNBQW1DO0NBQ2pELE1BQU0sWUFBWSxHQUFHLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRyxFQUFFO0NBQzlDLE9BQU8sSUFBSSxPQUFPLElBQUksV0FBVyxNQUFNLFVBQVUsR0FBRztBQUN4RDtBQUNBLElBQWFDLFlBQVUsV0FBVztDQUM5QixNQUFNLFFBQVEsU0FBUyxZQUFZLFFBQVEsV0FBVyxFQUFFLEdBQUcsUUFBUSxXQUFXLEdBQUcsS0FBSztDQUN0RixPQUFPLElBQUksT0FBTyxJQUFJLE1BQU0sRUFBRTtBQUNsQztBQUNBLElBQWFDLFdBQVM7QUFDdEIsSUFBYSxVQUFVO0FBQ3ZCLElBQWFDLFdBQVM7QUFDdEIsSUFBYUMsWUFBVTtBQUN2QixJQUFNQyxVQUFRO0FBRWQsSUFBTUMsZUFBYTtBQUduQixJQUFhLFlBQVk7QUFFekIsSUFBYSxZQUFZO0FBRXpCLElBQWFDLFFBQU07QUFHbkIsU0FBUyxZQUFZLFlBQVksU0FBUztDQUN0QyxPQUFPLElBQUksT0FBTyxrQkFBa0IsV0FBVyxHQUFHLFFBQVEsRUFBRTtBQUNoRTtBQUVBLFNBQVMsZUFBZSxRQUFRO0NBQzVCLE9BQU8sSUFBSSxPQUFPLGtCQUFrQixPQUFPLEdBQUc7QUFDbEQ7QUFFQSxJQUFhLFVBQVU7QUFDdkIsSUFBYSxhQUEyQiwwQkFBWSxJQUFJLElBQUk7QUFDNUQsSUFBYSxnQkFBOEIsNkJBQWUsRUFBRTtBQUU1RCxJQUFhLFdBQVc7QUFDeEIsSUFBYSxjQUE0QiwwQkFBWSxJQUFJLEdBQUc7QUFDNUQsSUFBYSxpQkFBK0IsNkJBQWUsRUFBRTtBQUU3RCxJQUFhLGFBQWE7QUFDMUIsSUFBYSxnQkFBOEIsMEJBQVksSUFBSSxHQUFHO0FBQzlELElBQWEsbUJBQWlDLDZCQUFlLEVBQUU7QUFFL0QsSUFBYSxhQUFhO0FBQzFCLElBQWEsZ0JBQThCLDBCQUFZLElBQUksRUFBRTtBQUM3RCxJQUFhLG1CQUFpQyw2QkFBZSxFQUFFO0FBRS9ELElBQWEsYUFBYTtBQUMxQixJQUFhLGdCQUE4QiwwQkFBWSxJQUFJLElBQUk7QUFDL0QsSUFBYSxtQkFBaUMsNkJBQWUsRUFBRTs7O0FDdEkvRCxJQUFhLFlBQTBCLDJCQUFrQixjQUFjLE1BQU0sUUFBUTtDQUNqRixJQUFJO0NBQ0osS0FBSyxTQUFTLEtBQUssT0FBTyxDQUFDO0NBQzNCLEtBQUssS0FBSyxNQUFNO0NBQ2hCLENBQUMsS0FBSyxLQUFLLEtBQUEsQ0FBTSxhQUFhLEdBQUcsV0FBVyxDQUFDO0FBQ2pELENBQUM7QUFDRCxJQUFNLG1CQUFtQjtDQUNyQixRQUFRO0NBQ1IsUUFBUTtDQUNSLFFBQVE7QUFDWjtBQUNBLElBQWEsb0JBQWtDLDJCQUFrQixzQkFBc0IsTUFBTSxRQUFRO0NBQ2pHLFVBQVUsS0FBSyxNQUFNLEdBQUc7Q0FDeEIsTUFBTSxTQUFTLGlCQUFpQixPQUFPLElBQUk7Q0FDM0MsS0FBSyxLQUFLLFNBQVMsTUFBTSxTQUFTO0VBQzlCLE1BQU0sTUFBTSxLQUFLLEtBQUs7RUFDdEIsTUFBTSxRQUFRLElBQUksWUFBWSxJQUFJLFVBQVUsSUFBSSxxQkFBcUIsT0FBTztFQUM1RSxJQUFJLElBQUksUUFBUSxNQUNaLElBQUksSUFBSSxXQUNKLElBQUksVUFBVSxJQUFJO09BRWxCLElBQUksbUJBQW1CLElBQUk7Q0FFdkMsQ0FBQztDQUNELEtBQUssS0FBSyxTQUFTLFlBQVk7RUFDM0IsSUFBSSxJQUFJLFlBQVksUUFBUSxTQUFTLElBQUksUUFBUSxRQUFRLFFBQVEsSUFBSSxPQUNqRTtFQUVKLFFBQVEsT0FBTyxLQUFLO0dBQ2hCO0dBQ0EsTUFBTTtHQUNOLFNBQVMsT0FBTyxJQUFJLFVBQVUsV0FBVyxJQUFJLE1BQU0sUUFBUSxJQUFJLElBQUk7R0FDbkUsT0FBTyxRQUFRO0dBQ2YsV0FBVyxJQUFJO0dBQ2Y7R0FDQSxVQUFVLENBQUMsSUFBSTtFQUNuQixDQUFDO0NBQ0w7QUFDSixDQUFDO0FBQ0QsSUFBYSx1QkFBcUMsMkJBQWtCLHlCQUF5QixNQUFNLFFBQVE7Q0FDdkcsVUFBVSxLQUFLLE1BQU0sR0FBRztDQUN4QixNQUFNLFNBQVMsaUJBQWlCLE9BQU8sSUFBSTtDQUMzQyxLQUFLLEtBQUssU0FBUyxNQUFNLFNBQVM7RUFDOUIsTUFBTSxNQUFNLEtBQUssS0FBSztFQUN0QixNQUFNLFFBQVEsSUFBSSxZQUFZLElBQUksVUFBVSxJQUFJLHFCQUFxQixPQUFPO0VBQzVFLElBQUksSUFBSSxRQUFRLE1BQ1osSUFBSSxJQUFJLFdBQ0osSUFBSSxVQUFVLElBQUk7T0FFbEIsSUFBSSxtQkFBbUIsSUFBSTtDQUV2QyxDQUFDO0NBQ0QsS0FBSyxLQUFLLFNBQVMsWUFBWTtFQUMzQixJQUFJLElBQUksWUFBWSxRQUFRLFNBQVMsSUFBSSxRQUFRLFFBQVEsUUFBUSxJQUFJLE9BQ2pFO0VBRUosUUFBUSxPQUFPLEtBQUs7R0FDaEI7R0FDQSxNQUFNO0dBQ04sU0FBUyxPQUFPLElBQUksVUFBVSxXQUFXLElBQUksTUFBTSxRQUFRLElBQUksSUFBSTtHQUNuRSxPQUFPLFFBQVE7R0FDZixXQUFXLElBQUk7R0FDZjtHQUNBLFVBQVUsQ0FBQyxJQUFJO0VBQ25CLENBQUM7Q0FDTDtBQUNKLENBQUM7QUFDRCxJQUFhLHNCQUNDLDJCQUFrQix3QkFBd0IsTUFBTSxRQUFRO0NBQ2xFLFVBQVUsS0FBSyxNQUFNLEdBQUc7Q0FDeEIsS0FBSyxLQUFLLFNBQVMsTUFBTSxTQUFTO0VBQzlCLElBQUk7RUFDSixDQUFDLEtBQUssS0FBSyxLQUFLLElBQUEsQ0FBSyxlQUFlLEdBQUcsYUFBYSxJQUFJO0NBQzVELENBQUM7Q0FDRCxLQUFLLEtBQUssU0FBUyxZQUFZO0VBQzNCLElBQUksT0FBTyxRQUFRLFVBQVUsT0FBTyxJQUFJLE9BQ3BDLE1BQU0sSUFBSSxNQUFNLG9EQUFvRDtFQUl4RSxJQUhtQixPQUFPLFFBQVEsVUFBVSxXQUN0QyxRQUFRLFFBQVEsSUFBSSxVQUFVLE9BQU8sQ0FBQyxJQUN0Q0MsbUJBQXdCLFFBQVEsT0FBTyxJQUFJLEtBQUssTUFBTSxHQUV4RDtFQUNKLFFBQVEsT0FBTyxLQUFLO0dBQ2hCLFFBQVEsT0FBTyxRQUFRO0dBQ3ZCLE1BQU07R0FDTixTQUFTLElBQUk7R0FDYixPQUFPLFFBQVE7R0FDZjtHQUNBLFVBQVUsQ0FBQyxJQUFJO0VBQ25CLENBQUM7Q0FDTDtBQUNKLENBQUM7QUFDRCxJQUFhLHdCQUFzQywyQkFBa0IsMEJBQTBCLE1BQU0sUUFBUTtDQUN6RyxVQUFVLEtBQUssTUFBTSxHQUFHO0NBQ3hCLElBQUksU0FBUyxJQUFJLFVBQVU7Q0FDM0IsTUFBTSxRQUFRLElBQUksUUFBUSxTQUFTLEtBQUs7Q0FDeEMsTUFBTSxTQUFTLFFBQVEsUUFBUTtDQUMvQixNQUFNLENBQUMsU0FBUyxXQUFXQyxxQkFBMEIsSUFBSTtDQUN6RCxLQUFLLEtBQUssU0FBUyxNQUFNLFNBQVM7RUFDOUIsTUFBTSxNQUFNLEtBQUssS0FBSztFQUN0QixJQUFJLFNBQVMsSUFBSTtFQUNqQixJQUFJLFVBQVU7RUFDZCxJQUFJLFVBQVU7RUFDZCxJQUFJLE9BQ0EsSUFBSSxVQUFVQztDQUN0QixDQUFDO0NBQ0QsS0FBSyxLQUFLLFNBQVMsWUFBWTtFQUMzQixNQUFNLFFBQVEsUUFBUTtFQUN0QixJQUFJLE9BQU87R0FDUCxJQUFJLENBQUMsT0FBTyxVQUFVLEtBQUssR0FBRztJQVUxQixRQUFRLE9BQU8sS0FBSztLQUNoQixVQUFVO0tBQ1YsUUFBUSxJQUFJO0tBQ1osTUFBTTtLQUNOLFVBQVU7S0FDVjtLQUNBO0lBQ0osQ0FBQztJQUNEO0dBU0o7R0FDQSxJQUFJLENBQUMsT0FBTyxjQUFjLEtBQUssR0FBRztJQUM5QixJQUFJLFFBQVEsR0FFUixRQUFRLE9BQU8sS0FBSztLQUNoQjtLQUNBLE1BQU07S0FDTixTQUFTLE9BQU87S0FDaEIsTUFBTTtLQUNOO0tBQ0E7S0FDQSxXQUFXO0tBQ1gsVUFBVSxDQUFDLElBQUk7SUFDbkIsQ0FBQztTQUlELFFBQVEsT0FBTyxLQUFLO0tBQ2hCO0tBQ0EsTUFBTTtLQUNOLFNBQVMsT0FBTztLQUNoQixNQUFNO0tBQ047S0FDQTtLQUNBLFdBQVc7S0FDWCxVQUFVLENBQUMsSUFBSTtJQUNuQixDQUFDO0lBRUw7R0FDSjtFQUNKO0VBQ0EsSUFBSSxRQUFRLFNBQ1IsUUFBUSxPQUFPLEtBQUs7R0FDaEIsUUFBUTtHQUNSO0dBQ0EsTUFBTTtHQUNOO0dBQ0EsV0FBVztHQUNYO0dBQ0EsVUFBVSxDQUFDLElBQUk7RUFDbkIsQ0FBQztFQUVMLElBQUksUUFBUSxTQUNSLFFBQVEsT0FBTyxLQUFLO0dBQ2hCLFFBQVE7R0FDUjtHQUNBLE1BQU07R0FDTjtHQUNBLFdBQVc7R0FDWDtHQUNBLFVBQVUsQ0FBQyxJQUFJO0VBQ25CLENBQUM7Q0FFVDtBQUNKLENBQUM7QUFDRCxJQUFhLHdCQUFzQywyQkFBa0IsMEJBQTBCLE1BQU0sUUFBUTtDQUN6RyxVQUFVLEtBQUssTUFBTSxHQUFHO0NBQ3hCLE1BQU0sQ0FBQyxTQUFTLFdBQVdDLHFCQUEwQixJQUFJO0NBQ3pELEtBQUssS0FBSyxTQUFTLE1BQU0sU0FBUztFQUM5QixNQUFNLE1BQU0sS0FBSyxLQUFLO0VBQ3RCLElBQUksU0FBUyxJQUFJO0VBQ2pCLElBQUksVUFBVTtFQUNkLElBQUksVUFBVTtDQUNsQixDQUFDO0NBQ0QsS0FBSyxLQUFLLFNBQVMsWUFBWTtFQUMzQixNQUFNLFFBQVEsUUFBUTtFQUN0QixJQUFJLFFBQVEsU0FDUixRQUFRLE9BQU8sS0FBSztHQUNoQixRQUFRO0dBQ1I7R0FDQSxNQUFNO0dBQ0c7R0FDVCxXQUFXO0dBQ1g7R0FDQSxVQUFVLENBQUMsSUFBSTtFQUNuQixDQUFDO0VBRUwsSUFBSSxRQUFRLFNBQ1IsUUFBUSxPQUFPLEtBQUs7R0FDaEIsUUFBUTtHQUNSO0dBQ0EsTUFBTTtHQUNOO0dBQ0EsV0FBVztHQUNYO0dBQ0EsVUFBVSxDQUFDLElBQUk7RUFDbkIsQ0FBQztDQUVUO0FBQ0osQ0FBQztBQUNELElBQWEsbUJBQWlDLDJCQUFrQixxQkFBcUIsTUFBTSxRQUFRO0NBQy9GLElBQUk7Q0FDSixVQUFVLEtBQUssTUFBTSxHQUFHO0NBQ3hCLENBQUMsS0FBSyxLQUFLLEtBQUssSUFBQSxDQUFLLFNBQVMsR0FBRyxRQUFRLFlBQVk7RUFDakQsTUFBTSxNQUFNLFFBQVE7RUFDcEIsT0FBTyxDQUFDQyxVQUFhLEdBQUcsS0FBSyxJQUFJLFNBQVMsS0FBQTtDQUM5QztDQUNBLEtBQUssS0FBSyxTQUFTLE1BQU0sU0FBUztFQUM5QixNQUFNLE9BQVEsS0FBSyxLQUFLLElBQUksV0FBVyxPQUFPO0VBQzlDLElBQUksSUFBSSxVQUFVLE1BQ2QsS0FBSyxLQUFLLElBQUksVUFBVSxJQUFJO0NBQ3BDLENBQUM7Q0FDRCxLQUFLLEtBQUssU0FBUyxZQUFZO0VBQzNCLE1BQU0sUUFBUSxRQUFRO0VBRXRCLElBRGEsTUFBTSxRQUNQLElBQUksU0FDWjtFQUNKLFFBQVEsT0FBTyxLQUFLO0dBQ2hCLFFBQVFDLGlCQUFzQixLQUFLO0dBQ25DLE1BQU07R0FDTixTQUFTLElBQUk7R0FDYixXQUFXO0dBQ1g7R0FDQTtHQUNBLFVBQVUsQ0FBQyxJQUFJO0VBQ25CLENBQUM7Q0FDTDtBQUNKLENBQUM7QUFDRCxJQUFhLG1CQUFpQywyQkFBa0IscUJBQXFCLE1BQU0sUUFBUTtDQUMvRixJQUFJO0NBQ0osVUFBVSxLQUFLLE1BQU0sR0FBRztDQUN4QixDQUFDLEtBQUssS0FBSyxLQUFLLElBQUEsQ0FBSyxTQUFTLEdBQUcsUUFBUSxZQUFZO0VBQ2pELE1BQU0sTUFBTSxRQUFRO0VBQ3BCLE9BQU8sQ0FBQ0QsVUFBYSxHQUFHLEtBQUssSUFBSSxTQUFTLEtBQUE7Q0FDOUM7Q0FDQSxLQUFLLEtBQUssU0FBUyxNQUFNLFNBQVM7RUFDOUIsTUFBTSxPQUFRLEtBQUssS0FBSyxJQUFJLFdBQVcsT0FBTztFQUM5QyxJQUFJLElBQUksVUFBVSxNQUNkLEtBQUssS0FBSyxJQUFJLFVBQVUsSUFBSTtDQUNwQyxDQUFDO0NBQ0QsS0FBSyxLQUFLLFNBQVMsWUFBWTtFQUMzQixNQUFNLFFBQVEsUUFBUTtFQUV0QixJQURhLE1BQU0sUUFDUCxJQUFJLFNBQ1o7RUFDSixRQUFRLE9BQU8sS0FBSztHQUNoQixRQUFRQyxpQkFBc0IsS0FBSztHQUNuQyxNQUFNO0dBQ04sU0FBUyxJQUFJO0dBQ2IsV0FBVztHQUNYO0dBQ0E7R0FDQSxVQUFVLENBQUMsSUFBSTtFQUNuQixDQUFDO0NBQ0w7QUFDSixDQUFDO0FBQ0QsSUFBYSxzQkFBb0MsMkJBQWtCLHdCQUF3QixNQUFNLFFBQVE7Q0FDckcsSUFBSTtDQUNKLFVBQVUsS0FBSyxNQUFNLEdBQUc7Q0FDeEIsQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFBLENBQUssU0FBUyxHQUFHLFFBQVEsWUFBWTtFQUNqRCxNQUFNLE1BQU0sUUFBUTtFQUNwQixPQUFPLENBQUNELFVBQWEsR0FBRyxLQUFLLElBQUksU0FBUyxLQUFBO0NBQzlDO0NBQ0EsS0FBSyxLQUFLLFNBQVMsTUFBTSxTQUFTO0VBQzlCLE1BQU0sTUFBTSxLQUFLLEtBQUs7RUFDdEIsSUFBSSxVQUFVLElBQUk7RUFDbEIsSUFBSSxVQUFVLElBQUk7RUFDbEIsSUFBSSxPQUFPLElBQUk7Q0FDbkIsQ0FBQztDQUNELEtBQUssS0FBSyxTQUFTLFlBQVk7RUFDM0IsTUFBTSxRQUFRLFFBQVE7RUFDdEIsTUFBTSxPQUFPLE1BQU07RUFDbkIsSUFBSSxTQUFTLElBQUksTUFDYjtFQUNKLE1BQU0sU0FBUyxPQUFPLElBQUk7RUFDMUIsUUFBUSxPQUFPLEtBQUs7R0FDaEIsUUFBUUMsaUJBQXNCLEtBQUs7R0FDbkMsR0FBSSxTQUFTO0lBQUUsTUFBTTtJQUFXLFNBQVMsSUFBSTtHQUFLLElBQUk7SUFBRSxNQUFNO0lBQWEsU0FBUyxJQUFJO0dBQUs7R0FDN0YsV0FBVztHQUNYLE9BQU87R0FDUCxPQUFPLFFBQVE7R0FDZjtHQUNBLFVBQVUsQ0FBQyxJQUFJO0VBQ25CLENBQUM7Q0FDTDtBQUNKLENBQUM7QUFDRCxJQUFhLHFCQUFtQywyQkFBa0IsdUJBQXVCLE1BQU0sUUFBUTtDQUNuRyxJQUFJO0NBQ0osVUFBVSxLQUFLLE1BQU0sR0FBRztDQUN4QixDQUFDLEtBQUssS0FBSyxLQUFLLElBQUEsQ0FBSyxTQUFTLEdBQUcsUUFBUSxZQUFZO0VBQ2pELE1BQU0sTUFBTSxRQUFRO0VBQ3BCLE9BQU8sQ0FBQ0QsVUFBYSxHQUFHLEtBQUssSUFBSSxXQUFXLEtBQUE7Q0FDaEQ7Q0FDQSxLQUFLLEtBQUssU0FBUyxNQUFNLFNBQVM7RUFDOUIsTUFBTSxPQUFRLEtBQUssS0FBSyxJQUFJLFdBQVcsT0FBTztFQUM5QyxJQUFJLElBQUksVUFBVSxNQUNkLEtBQUssS0FBSyxJQUFJLFVBQVUsSUFBSTtDQUNwQyxDQUFDO0NBQ0QsS0FBSyxLQUFLLFNBQVMsWUFBWTtFQUMzQixNQUFNLFFBQVEsUUFBUTtFQUV0QixJQURlLE1BQU0sVUFDUCxJQUFJLFNBQ2Q7RUFDSixNQUFNLFNBQVNFLG9CQUF5QixLQUFLO0VBQzdDLFFBQVEsT0FBTyxLQUFLO0dBQ2hCO0dBQ0EsTUFBTTtHQUNOLFNBQVMsSUFBSTtHQUNiLFdBQVc7R0FDWDtHQUNBO0dBQ0EsVUFBVSxDQUFDLElBQUk7RUFDbkIsQ0FBQztDQUNMO0FBQ0osQ0FBQztBQUNELElBQWEscUJBQW1DLDJCQUFrQix1QkFBdUIsTUFBTSxRQUFRO0NBQ25HLElBQUk7Q0FDSixVQUFVLEtBQUssTUFBTSxHQUFHO0NBQ3hCLENBQUMsS0FBSyxLQUFLLEtBQUssSUFBQSxDQUFLLFNBQVMsR0FBRyxRQUFRLFlBQVk7RUFDakQsTUFBTSxNQUFNLFFBQVE7RUFDcEIsT0FBTyxDQUFDRixVQUFhLEdBQUcsS0FBSyxJQUFJLFdBQVcsS0FBQTtDQUNoRDtDQUNBLEtBQUssS0FBSyxTQUFTLE1BQU0sU0FBUztFQUM5QixNQUFNLE9BQVEsS0FBSyxLQUFLLElBQUksV0FBVyxPQUFPO0VBQzlDLElBQUksSUFBSSxVQUFVLE1BQ2QsS0FBSyxLQUFLLElBQUksVUFBVSxJQUFJO0NBQ3BDLENBQUM7Q0FDRCxLQUFLLEtBQUssU0FBUyxZQUFZO0VBQzNCLE1BQU0sUUFBUSxRQUFRO0VBRXRCLElBRGUsTUFBTSxVQUNQLElBQUksU0FDZDtFQUNKLE1BQU0sU0FBU0Usb0JBQXlCLEtBQUs7RUFDN0MsUUFBUSxPQUFPLEtBQUs7R0FDaEI7R0FDQSxNQUFNO0dBQ04sU0FBUyxJQUFJO0dBQ2IsV0FBVztHQUNYO0dBQ0E7R0FDQSxVQUFVLENBQUMsSUFBSTtFQUNuQixDQUFDO0NBQ0w7QUFDSixDQUFDO0FBQ0QsSUFBYSx3QkFBc0MsMkJBQWtCLDBCQUEwQixNQUFNLFFBQVE7Q0FDekcsSUFBSTtDQUNKLFVBQVUsS0FBSyxNQUFNLEdBQUc7Q0FDeEIsQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFBLENBQUssU0FBUyxHQUFHLFFBQVEsWUFBWTtFQUNqRCxNQUFNLE1BQU0sUUFBUTtFQUNwQixPQUFPLENBQUNGLFVBQWEsR0FBRyxLQUFLLElBQUksV0FBVyxLQUFBO0NBQ2hEO0NBQ0EsS0FBSyxLQUFLLFNBQVMsTUFBTSxTQUFTO0VBQzlCLE1BQU0sTUFBTSxLQUFLLEtBQUs7RUFDdEIsSUFBSSxVQUFVLElBQUk7RUFDbEIsSUFBSSxVQUFVLElBQUk7RUFDbEIsSUFBSSxTQUFTLElBQUk7Q0FDckIsQ0FBQztDQUNELEtBQUssS0FBSyxTQUFTLFlBQVk7RUFDM0IsTUFBTSxRQUFRLFFBQVE7RUFDdEIsTUFBTSxTQUFTLE1BQU07RUFDckIsSUFBSSxXQUFXLElBQUksUUFDZjtFQUNKLE1BQU0sU0FBU0Usb0JBQXlCLEtBQUs7RUFDN0MsTUFBTSxTQUFTLFNBQVMsSUFBSTtFQUM1QixRQUFRLE9BQU8sS0FBSztHQUNoQjtHQUNBLEdBQUksU0FBUztJQUFFLE1BQU07SUFBVyxTQUFTLElBQUk7R0FBTyxJQUFJO0lBQUUsTUFBTTtJQUFhLFNBQVMsSUFBSTtHQUFPO0dBQ2pHLFdBQVc7R0FDWCxPQUFPO0dBQ1AsT0FBTyxRQUFRO0dBQ2Y7R0FDQSxVQUFVLENBQUMsSUFBSTtFQUNuQixDQUFDO0NBQ0w7QUFDSixDQUFDO0FBQ0QsSUFBYSx3QkFBc0MsMkJBQWtCLDBCQUEwQixNQUFNLFFBQVE7Q0FDekcsSUFBSSxJQUFJO0NBQ1IsVUFBVSxLQUFLLE1BQU0sR0FBRztDQUN4QixLQUFLLEtBQUssU0FBUyxNQUFNLFNBQVM7RUFDOUIsTUFBTSxNQUFNLEtBQUssS0FBSztFQUN0QixJQUFJLFNBQVMsSUFBSTtFQUNqQixJQUFJLElBQUksU0FBUztHQUNiLElBQUksYUFBYSxJQUFJLDJCQUFXLElBQUksSUFBSTtHQUN4QyxJQUFJLFNBQVMsSUFBSSxJQUFJLE9BQU87RUFDaEM7Q0FDSixDQUFDO0NBQ0QsSUFBSSxJQUFJLFNBQ0osQ0FBQyxLQUFLLEtBQUssS0FBQSxDQUFNLFVBQVUsR0FBRyxTQUFTLFlBQVk7RUFDL0MsSUFBSSxRQUFRLFlBQVk7RUFDeEIsSUFBSSxJQUFJLFFBQVEsS0FBSyxRQUFRLEtBQUssR0FDOUI7RUFDSixRQUFRLE9BQU8sS0FBSztHQUNoQixRQUFRO0dBQ1IsTUFBTTtHQUNOLFFBQVEsSUFBSTtHQUNaLE9BQU8sUUFBUTtHQUNmLEdBQUksSUFBSSxVQUFVLEVBQUUsU0FBUyxJQUFJLFFBQVEsU0FBUyxFQUFFLElBQUksQ0FBQztHQUN6RDtHQUNBLFVBQVUsQ0FBQyxJQUFJO0VBQ25CLENBQUM7Q0FDTDtNQUVBLENBQUMsS0FBSyxLQUFLLEtBQUEsQ0FBTSxVQUFVLEdBQUcsY0FBYyxDQUFFO0FBQ3RELENBQUM7QUFDRCxJQUFhLGlCQUErQiwyQkFBa0IsbUJBQW1CLE1BQU0sUUFBUTtDQUMzRixzQkFBc0IsS0FBSyxNQUFNLEdBQUc7Q0FDcEMsS0FBSyxLQUFLLFNBQVMsWUFBWTtFQUMzQixJQUFJLFFBQVEsWUFBWTtFQUN4QixJQUFJLElBQUksUUFBUSxLQUFLLFFBQVEsS0FBSyxHQUM5QjtFQUNKLFFBQVEsT0FBTyxLQUFLO0dBQ2hCLFFBQVE7R0FDUixNQUFNO0dBQ04sUUFBUTtHQUNSLE9BQU8sUUFBUTtHQUNmLFNBQVMsSUFBSSxRQUFRLFNBQVM7R0FDOUI7R0FDQSxVQUFVLENBQUMsSUFBSTtFQUNuQixDQUFDO0NBQ0w7QUFDSixDQUFDO0FBQ0QsSUFBYSxxQkFBbUMsMkJBQWtCLHVCQUF1QixNQUFNLFFBQVE7Q0FDbkcsSUFBSSxZQUFZLElBQUksVUFBVUM7Q0FDOUIsc0JBQXNCLEtBQUssTUFBTSxHQUFHO0FBQ3hDLENBQUM7QUFDRCxJQUFhLHFCQUFtQywyQkFBa0IsdUJBQXVCLE1BQU0sUUFBUTtDQUNuRyxJQUFJLFlBQVksSUFBSSxVQUFVQztDQUM5QixzQkFBc0IsS0FBSyxNQUFNLEdBQUc7QUFDeEMsQ0FBQztBQUNELElBQWEsb0JBQWtDLDJCQUFrQixzQkFBc0IsTUFBTSxRQUFRO0NBQ2pHLFVBQVUsS0FBSyxNQUFNLEdBQUc7Q0FDeEIsTUFBTSxlQUFlQyxZQUFpQixJQUFJLFFBQVE7Q0FDbEQsTUFBTSxVQUFVLElBQUksT0FBTyxPQUFPLElBQUksYUFBYSxXQUFXLE1BQU0sSUFBSSxTQUFTLEdBQUcsaUJBQWlCLFlBQVk7Q0FDakgsSUFBSSxVQUFVO0NBQ2QsS0FBSyxLQUFLLFNBQVMsTUFBTSxTQUFTO0VBQzlCLE1BQU0sTUFBTSxLQUFLLEtBQUs7RUFDdEIsSUFBSSxhQUFhLElBQUksMkJBQVcsSUFBSSxJQUFJO0VBQ3hDLElBQUksU0FBUyxJQUFJLE9BQU87Q0FDNUIsQ0FBQztDQUNELEtBQUssS0FBSyxTQUFTLFlBQVk7RUFDM0IsSUFBSSxRQUFRLE1BQU0sU0FBUyxJQUFJLFVBQVUsSUFBSSxRQUFRLEdBQ2pEO0VBQ0osUUFBUSxPQUFPLEtBQUs7R0FDaEIsUUFBUTtHQUNSLE1BQU07R0FDTixRQUFRO0dBQ1IsVUFBVSxJQUFJO0dBQ2QsT0FBTyxRQUFRO0dBQ2Y7R0FDQSxVQUFVLENBQUMsSUFBSTtFQUNuQixDQUFDO0NBQ0w7QUFDSixDQUFDO0FBQ0QsSUFBYSxzQkFBb0MsMkJBQWtCLHdCQUF3QixNQUFNLFFBQVE7Q0FDckcsVUFBVSxLQUFLLE1BQU0sR0FBRztDQUN4QixNQUFNLFVBQVUsSUFBSSxPQUFPLElBQUlBLFlBQWlCLElBQUksTUFBTSxFQUFFLEdBQUc7Q0FDL0QsSUFBSSxZQUFZLElBQUksVUFBVTtDQUM5QixLQUFLLEtBQUssU0FBUyxNQUFNLFNBQVM7RUFDOUIsTUFBTSxNQUFNLEtBQUssS0FBSztFQUN0QixJQUFJLGFBQWEsSUFBSSwyQkFBVyxJQUFJLElBQUk7RUFDeEMsSUFBSSxTQUFTLElBQUksT0FBTztDQUM1QixDQUFDO0NBQ0QsS0FBSyxLQUFLLFNBQVMsWUFBWTtFQUMzQixJQUFJLFFBQVEsTUFBTSxXQUFXLElBQUksTUFBTSxHQUNuQztFQUNKLFFBQVEsT0FBTyxLQUFLO0dBQ2hCLFFBQVE7R0FDUixNQUFNO0dBQ04sUUFBUTtHQUNSLFFBQVEsSUFBSTtHQUNaLE9BQU8sUUFBUTtHQUNmO0dBQ0EsVUFBVSxDQUFDLElBQUk7RUFDbkIsQ0FBQztDQUNMO0FBQ0osQ0FBQztBQUNELElBQWEsb0JBQWtDLDJCQUFrQixzQkFBc0IsTUFBTSxRQUFRO0NBQ2pHLFVBQVUsS0FBSyxNQUFNLEdBQUc7Q0FDeEIsTUFBTSxVQUFVLElBQUksT0FBTyxLQUFLQSxZQUFpQixJQUFJLE1BQU0sRUFBRSxFQUFFO0NBQy9ELElBQUksWUFBWSxJQUFJLFVBQVU7Q0FDOUIsS0FBSyxLQUFLLFNBQVMsTUFBTSxTQUFTO0VBQzlCLE1BQU0sTUFBTSxLQUFLLEtBQUs7RUFDdEIsSUFBSSxhQUFhLElBQUksMkJBQVcsSUFBSSxJQUFJO0VBQ3hDLElBQUksU0FBUyxJQUFJLE9BQU87Q0FDNUIsQ0FBQztDQUNELEtBQUssS0FBSyxTQUFTLFlBQVk7RUFDM0IsSUFBSSxRQUFRLE1BQU0sU0FBUyxJQUFJLE1BQU0sR0FDakM7RUFDSixRQUFRLE9BQU8sS0FBSztHQUNoQixRQUFRO0dBQ1IsTUFBTTtHQUNOLFFBQVE7R0FDUixRQUFRLElBQUk7R0FDWixPQUFPLFFBQVE7R0FDZjtHQUNBLFVBQVUsQ0FBQyxJQUFJO0VBQ25CLENBQUM7Q0FDTDtBQUNKLENBQUM7QUFJRCxTQUFTLDBCQUEwQixRQUFRLFNBQVMsVUFBVTtDQUMxRCxJQUFJLE9BQU8sT0FBTyxRQUNkLFFBQVEsT0FBTyxLQUFLLEdBQUdDLGFBQWtCLFVBQVUsT0FBTyxNQUFNLENBQUM7QUFFekU7QUFDQSxJQUFhLG9CQUFrQywyQkFBa0Isc0JBQXNCLE1BQU0sUUFBUTtDQUNqRyxVQUFVLEtBQUssTUFBTSxHQUFHO0NBQ3hCLEtBQUssS0FBSyxTQUFTLFlBQVk7RUFDM0IsTUFBTSxTQUFTLElBQUksT0FBTyxLQUFLLElBQUk7R0FDL0IsT0FBTyxRQUFRLE1BQU0sSUFBSTtHQUN6QixRQUFRLENBQUM7RUFDYixHQUFHLENBQUMsQ0FBQztFQUNMLElBQUksa0JBQWtCLFNBQ2xCLE9BQU8sT0FBTyxNQUFNLFdBQVcsMEJBQTBCLFFBQVEsU0FBUyxJQUFJLFFBQVEsQ0FBQztFQUUzRiwwQkFBMEIsUUFBUSxTQUFTLElBQUksUUFBUTtDQUUzRDtBQUNKLENBQUM7QUFDRCxJQUFhLG9CQUFrQywyQkFBa0Isc0JBQXNCLE1BQU0sUUFBUTtDQUNqRyxVQUFVLEtBQUssTUFBTSxHQUFHO0NBQ3hCLE1BQU0sVUFBVSxJQUFJLElBQUksSUFBSSxJQUFJO0NBQ2hDLEtBQUssS0FBSyxTQUFTLE1BQU0sU0FBUztFQUM5QixLQUFLLEtBQUssSUFBSSxPQUFPLElBQUk7Q0FDN0IsQ0FBQztDQUNELEtBQUssS0FBSyxTQUFTLFlBQVk7RUFDM0IsSUFBSSxRQUFRLElBQUksUUFBUSxNQUFNLElBQUksR0FDOUI7RUFDSixRQUFRLE9BQU8sS0FBSztHQUNoQixNQUFNO0dBQ04sUUFBUSxJQUFJO0dBQ1osT0FBTyxRQUFRLE1BQU07R0FDckI7R0FDQSxVQUFVLENBQUMsSUFBSTtFQUNuQixDQUFDO0NBQ0w7QUFDSixDQUFDO0FBQ0QsSUFBYSxxQkFBbUMsMkJBQWtCLHVCQUF1QixNQUFNLFFBQVE7Q0FDbkcsVUFBVSxLQUFLLE1BQU0sR0FBRztDQUN4QixLQUFLLEtBQUssU0FBUyxZQUFZO0VBQzNCLFFBQVEsUUFBUSxJQUFJLEdBQUcsUUFBUSxLQUFLO0NBQ3hDO0FBQ0osQ0FBQzs7O0FDOWpCRCxJQUFhLE1BQWIsTUFBaUI7Q0FDYixZQUFZLE9BQU8sQ0FBQyxHQUFHO0VBQ25CLEtBQUssVUFBVSxDQUFDO0VBQ2hCLEtBQUssU0FBUztFQUNkLElBQUksTUFDQSxLQUFLLE9BQU87Q0FDcEI7Q0FDQSxTQUFTLElBQUk7RUFDVCxLQUFLLFVBQVU7RUFDZixHQUFHLElBQUk7RUFDUCxLQUFLLFVBQVU7Q0FDbkI7Q0FDQSxNQUFNLEtBQUs7RUFDUCxJQUFJLE9BQU8sUUFBUSxZQUFZO0dBQzNCLElBQUksTUFBTSxFQUFFLFdBQVcsT0FBTyxDQUFDO0dBQy9CLElBQUksTUFBTSxFQUFFLFdBQVcsUUFBUSxDQUFDO0dBQ2hDO0VBQ0o7RUFFQSxNQUFNLFFBQVFDLElBQVEsTUFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLE1BQU0sQ0FBQztFQUNqRCxNQUFNLFlBQVksS0FBSyxJQUFJLEdBQUcsTUFBTSxLQUFLLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDO0VBQy9FLE1BQU0sV0FBVyxNQUFNLEtBQUssTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFBSSxPQUFPLEtBQUssU0FBUyxDQUFDLElBQUksQ0FBQztFQUNoRyxLQUFLLE1BQU0sUUFBUSxVQUNmLEtBQUssUUFBUSxLQUFLLElBQUk7Q0FFOUI7Q0FDQSxVQUFVO0VBQ04sTUFBTSxJQUFJO0VBQ1YsTUFBTSxPQUFPLE1BQU07RUFFbkIsTUFBTSxRQUFRLENBQUMsSUFEQyxNQUFNLFdBQVcsQ0FBQyxFQUFFLEVBQUEsQ0FDVixLQUFLLE1BQU0sS0FBSyxHQUFHLENBQUM7RUFFOUMsT0FBTyxJQUFJLEVBQUUsR0FBRyxNQUFNLE1BQU0sS0FBSyxJQUFJLENBQUM7Q0FDMUM7QUFDSjs7O0FDbENBLElBQWEsVUFBVTtDQUNuQixPQUFPO0NBQ1AsT0FBTztDQUNQLE9BQU87QUFDWDs7O0FDR0EsSUFBYSxXQUF5QiwyQkFBa0IsYUFBYSxNQUFNLFFBQVE7Q0FDL0UsSUFBSTtDQUNKLFNBQVMsT0FBTyxDQUFDO0NBQ2pCLEtBQUssS0FBSyxNQUFNO0NBQ2hCLEtBQUssS0FBSyxNQUFNLEtBQUssS0FBSyxPQUFPLENBQUM7Q0FDbEMsS0FBSyxLQUFLLFVBQVU7Q0FDcEIsTUFBTSxTQUFTLENBQUMsR0FBSSxLQUFLLEtBQUssSUFBSSxVQUFVLENBQUMsQ0FBRTtDQUUvQyxJQUFJLEtBQUssS0FBSyxPQUFPLElBQUksV0FBVyxHQUNoQyxPQUFPLFFBQVEsSUFBSTtDQUV2QixLQUFLLE1BQU0sTUFBTSxRQUNiLEtBQUssTUFBTSxNQUFNLEdBQUcsS0FBSyxVQUNyQixHQUFHLElBQUk7Q0FHZixJQUFJLE9BQU8sV0FBVyxHQUFHO0VBR3JCLENBQUMsS0FBSyxLQUFLLEtBQUEsQ0FBTSxhQUFhLEdBQUcsV0FBVyxDQUFDO0VBQzdDLEtBQUssS0FBSyxVQUFVLFdBQVc7R0FDM0IsS0FBSyxLQUFLLE1BQU0sS0FBSyxLQUFLO0VBQzlCLENBQUM7Q0FDTCxPQUNLO0VBQ0QsTUFBTSxhQUFhLFNBQVMsUUFBUSxRQUFRO0dBQ3hDLElBQUksWUFBWUMsUUFBYSxPQUFPO0dBQ3BDLElBQUk7R0FDSixLQUFLLE1BQU0sTUFBTSxRQUFRO0lBQ3JCLElBQUksR0FBRyxLQUFLLElBQUksTUFBTTtLQUNsQixJQUFJQyxrQkFBdUIsT0FBTyxHQUM5QjtLQUVKLElBQUksQ0FEYyxHQUFHLEtBQUssSUFBSSxLQUFLLE9BQ3RCLEdBQ1Q7SUFDUixPQUNLLElBQUksV0FDTDtJQUVKLE1BQU0sVUFBVSxRQUFRLE9BQU87SUFDL0IsTUFBTSxJQUFJLEdBQUcsS0FBSyxNQUFNLE9BQU87SUFDL0IsSUFBSSxhQUFhLFdBQVcsS0FBSyxVQUFVLE9BQ3ZDLE1BQU0sSUFBSUMsZUFBb0I7SUFFbEMsSUFBSSxlQUFlLGFBQWEsU0FDNUIsZUFBZSxlQUFlLFFBQVEsUUFBUSxFQUFBLENBQUcsS0FBSyxZQUFZO0tBQzlELE1BQU07S0FFTixJQURnQixRQUFRLE9BQU8sV0FDZixTQUNaO0tBQ0osSUFBSSxDQUFDLFdBQ0QsWUFBWUYsUUFBYSxTQUFTLE9BQU87SUFDakQsQ0FBQztTQUVBO0tBRUQsSUFEZ0IsUUFBUSxPQUFPLFdBQ2YsU0FDWjtLQUNKLElBQUksQ0FBQyxXQUNELFlBQVlBLFFBQWEsU0FBUyxPQUFPO0lBQ2pEO0dBQ0o7R0FDQSxJQUFJLGFBQ0EsT0FBTyxZQUFZLFdBQVc7SUFDMUIsT0FBTztHQUNYLENBQUM7R0FFTCxPQUFPO0VBQ1g7RUFDQSxNQUFNLHNCQUFzQixRQUFRLFNBQVMsUUFBUTtHQUVqRCxJQUFJQSxRQUFhLE1BQU0sR0FBRztJQUN0QixPQUFPLFVBQVU7SUFDakIsT0FBTztHQUNYO0dBRUEsTUFBTSxjQUFjLFVBQVUsU0FBUyxRQUFRLEdBQUc7R0FDbEQsSUFBSSx1QkFBdUIsU0FBUztJQUNoQyxJQUFJLElBQUksVUFBVSxPQUNkLE1BQU0sSUFBSUUsZUFBb0I7SUFDbEMsT0FBTyxZQUFZLE1BQU0sZ0JBQWdCLEtBQUssS0FBSyxNQUFNLGFBQWEsR0FBRyxDQUFDO0dBQzlFO0dBQ0EsT0FBTyxLQUFLLEtBQUssTUFBTSxhQUFhLEdBQUc7RUFDM0M7RUFDQSxLQUFLLEtBQUssT0FBTyxTQUFTLFFBQVE7R0FDOUIsSUFBSSxJQUFJLFlBQ0osT0FBTyxLQUFLLEtBQUssTUFBTSxTQUFTLEdBQUc7R0FFdkMsSUFBSSxJQUFJLGNBQWMsWUFBWTtJQUc5QixNQUFNLFNBQVMsS0FBSyxLQUFLLE1BQU07S0FBRSxPQUFPLFFBQVE7S0FBTyxRQUFRLENBQUM7SUFBRSxHQUFHO0tBQUUsR0FBRztLQUFLLFlBQVk7SUFBSyxDQUFDO0lBQ2pHLElBQUksa0JBQWtCLFNBQ2xCLE9BQU8sT0FBTyxNQUFNLFdBQVc7S0FDM0IsT0FBTyxtQkFBbUIsUUFBUSxTQUFTLEdBQUc7SUFDbEQsQ0FBQztJQUVMLE9BQU8sbUJBQW1CLFFBQVEsU0FBUyxHQUFHO0dBQ2xEO0dBRUEsTUFBTSxTQUFTLEtBQUssS0FBSyxNQUFNLFNBQVMsR0FBRztHQUMzQyxJQUFJLGtCQUFrQixTQUFTO0lBQzNCLElBQUksSUFBSSxVQUFVLE9BQ2QsTUFBTSxJQUFJQSxlQUFvQjtJQUNsQyxPQUFPLE9BQU8sTUFBTSxXQUFXLFVBQVUsUUFBUSxRQUFRLEdBQUcsQ0FBQztHQUNqRTtHQUNBLE9BQU8sVUFBVSxRQUFRLFFBQVEsR0FBRztFQUN4QztDQUNKO0NBRUEsV0FBZ0IsTUFBTSxvQkFBb0I7RUFDdEMsV0FBVyxVQUFVO0dBQ2pCLElBQUk7SUFDQSxNQUFNLElBQUlDLFlBQVUsTUFBTSxLQUFLO0lBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLE9BQU87R0FDckUsU0FDTyxHQUFHO0lBQ04sT0FBT0MsaUJBQWUsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNLE1BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLE9BQU8sQ0FBRTtHQUNoSDtFQUNKO0VBQ0EsUUFBUTtFQUNSLFNBQVM7Q0FDYixFQUFFO0FBQ04sQ0FBQztBQUVELElBQWEsYUFBMkIsMkJBQWtCLGVBQWUsTUFBTSxRQUFRO0NBQ25GLFNBQVMsS0FBSyxNQUFNLEdBQUc7Q0FDdkIsS0FBSyxLQUFLLFVBQVUsQ0FBQyxHQUFJLE1BQU0sS0FBSyxLQUFLLFlBQVksQ0FBQyxDQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUtDLFNBQWUsS0FBSyxLQUFLLEdBQUc7Q0FDL0YsS0FBSyxLQUFLLFNBQVMsU0FBUyxNQUFNO0VBQzlCLElBQUksSUFBSSxRQUNKLElBQUk7R0FDQSxRQUFRLFFBQVEsT0FBTyxRQUFRLEtBQUs7RUFDeEMsU0FDTyxHQUFHLENBQUU7RUFDaEIsSUFBSSxPQUFPLFFBQVEsVUFBVSxVQUN6QixPQUFPO0VBQ1gsUUFBUSxPQUFPLEtBQUs7R0FDaEIsVUFBVTtHQUNWLE1BQU07R0FDTixPQUFPLFFBQVE7R0FDZjtFQUNKLENBQUM7RUFDRCxPQUFPO0NBQ1g7QUFDSixDQUFDO0FBQ0QsSUFBYSxtQkFBaUMsMkJBQWtCLHFCQUFxQixNQUFNLFFBQVE7Q0FFL0Ysc0JBQTZCLEtBQUssTUFBTSxHQUFHO0NBQzNDLFdBQVcsS0FBSyxNQUFNLEdBQUc7QUFDN0IsQ0FBQztBQUNELElBQWEsV0FBeUIsMkJBQWtCLGFBQWEsTUFBTSxRQUFRO0NBQy9FLElBQUksWUFBWSxJQUFJLFVBQVVDO0NBQzlCLGlCQUFpQixLQUFLLE1BQU0sR0FBRztBQUNuQyxDQUFDO0FBQ0QsSUFBYSxXQUF5QiwyQkFBa0IsYUFBYSxNQUFNLFFBQVE7Q0FDL0UsSUFBSSxJQUFJLFNBQVM7RUFXYixNQUFNLElBQUk7R0FUTixJQUFJO0dBQ0osSUFBSTtHQUNKLElBQUk7R0FDSixJQUFJO0dBQ0osSUFBSTtHQUNKLElBQUk7R0FDSixJQUFJO0dBQ0osSUFBSTtFQUVXLEVBQUUsSUFBSTtFQUN6QixJQUFJLE1BQU0sS0FBQSxHQUNOLE1BQU0sSUFBSSxNQUFNLDBCQUEwQixJQUFJLFFBQVEsRUFBRTtFQUM1RCxJQUFJLFlBQVksSUFBSSxVQUFVQyxPQUFhLENBQUM7Q0FDaEQsT0FFSSxJQUFJLFlBQVksSUFBSSxVQUFVQSxPQUFhO0NBQy9DLGlCQUFpQixLQUFLLE1BQU0sR0FBRztBQUNuQyxDQUFDO0FBQ0QsSUFBYSxZQUEwQiwyQkFBa0IsY0FBYyxNQUFNLFFBQVE7Q0FDakYsSUFBSSxZQUFZLElBQUksVUFBVUM7Q0FDOUIsaUJBQWlCLEtBQUssTUFBTSxHQUFHO0FBQ25DLENBQUM7QUFDRCxJQUFhLFVBQXdCLDJCQUFrQixZQUFZLE1BQU0sUUFBUTtDQUM3RSxpQkFBaUIsS0FBSyxNQUFNLEdBQUc7Q0FDL0IsS0FBSyxLQUFLLFNBQVMsWUFBWTtFQUMzQixJQUFJO0dBRUEsTUFBTSxVQUFVLFFBQVEsTUFBTSxLQUFLO0dBR25DLElBQUksQ0FBQyxJQUFJLGFBQWEsSUFBSSxVQUFVLFdBQUEsYUFBZ0MsUUFDNUQ7UUFBQSxDQUFDLGdCQUFnQixLQUFLLE9BQU8sR0FBRztLQUNoQyxRQUFRLE9BQU8sS0FBSztNQUNoQixNQUFNO01BQ04sUUFBUTtNQUNSLE1BQU07TUFDTixPQUFPLFFBQVE7TUFDZjtNQUNBLFVBQVUsQ0FBQyxJQUFJO0tBQ25CLENBQUM7S0FDRDtJQUNKOztHQUdKLE1BQU0sTUFBTSxJQUFJLElBQUksT0FBTztHQUMzQixJQUFJLElBQUksVUFBVTtJQUNkLElBQUksU0FBUyxZQUFZO0lBQ3pCLElBQUksQ0FBQyxJQUFJLFNBQVMsS0FBSyxJQUFJLFFBQVEsR0FDL0IsUUFBUSxPQUFPLEtBQUs7S0FDaEIsTUFBTTtLQUNOLFFBQVE7S0FDUixNQUFNO0tBQ04sU0FBUyxJQUFJLFNBQVM7S0FDdEIsT0FBTyxRQUFRO0tBQ2Y7S0FDQSxVQUFVLENBQUMsSUFBSTtJQUNuQixDQUFDO0dBRVQ7R0FDQSxJQUFJLElBQUksVUFBVTtJQUNkLElBQUksU0FBUyxZQUFZO0lBQ3pCLElBQUksQ0FBQyxJQUFJLFNBQVMsS0FBSyxJQUFJLFNBQVMsU0FBUyxHQUFHLElBQUksSUFBSSxTQUFTLE1BQU0sR0FBRyxFQUFFLElBQUksSUFBSSxRQUFRLEdBQ3hGLFFBQVEsT0FBTyxLQUFLO0tBQ2hCLE1BQU07S0FDTixRQUFRO0tBQ1IsTUFBTTtLQUNOLFNBQVMsSUFBSSxTQUFTO0tBQ3RCLE9BQU8sUUFBUTtLQUNmO0tBQ0EsVUFBVSxDQUFDLElBQUk7SUFDbkIsQ0FBQztHQUVUO0dBRUEsSUFBSSxJQUFJLFdBRUosUUFBUSxRQUFRLElBQUk7UUFJcEIsUUFBUSxRQUFRO0dBRXBCO0VBQ0osU0FDTyxHQUFHO0dBQ04sUUFBUSxPQUFPLEtBQUs7SUFDaEIsTUFBTTtJQUNOLFFBQVE7SUFDUixPQUFPLFFBQVE7SUFDZjtJQUNBLFVBQVUsQ0FBQyxJQUFJO0dBQ25CLENBQUM7RUFDTDtDQUNKO0FBQ0osQ0FBQztBQUNELElBQWEsWUFBMEIsMkJBQWtCLGNBQWMsTUFBTSxRQUFRO0NBQ2pGLElBQUksWUFBWSxJQUFJLFVBQVVDLFFBQWM7Q0FDNUMsaUJBQWlCLEtBQUssTUFBTSxHQUFHO0FBQ25DLENBQUM7QUFDRCxJQUFhLGFBQTJCLDJCQUFrQixlQUFlLE1BQU0sUUFBUTtDQUNuRixJQUFJLFlBQVksSUFBSSxVQUFVQztDQUM5QixpQkFBaUIsS0FBSyxNQUFNLEdBQUc7QUFDbkMsQ0FBQzs7Ozs7O0FBTUQsSUFBYSxXQUF5QiwyQkFBa0IsYUFBYSxNQUFNLFFBQVE7Q0FDL0UsSUFBSSxZQUFZLElBQUksVUFBVUM7Q0FDOUIsaUJBQWlCLEtBQUssTUFBTSxHQUFHO0FBQ25DLENBQUM7QUFDRCxJQUFhLFlBQTBCLDJCQUFrQixjQUFjLE1BQU0sUUFBUTtDQUNqRixJQUFJLFlBQVksSUFBSSxVQUFVQztDQUM5QixpQkFBaUIsS0FBSyxNQUFNLEdBQUc7QUFDbkMsQ0FBQztBQUNELElBQWEsV0FBeUIsMkJBQWtCLGFBQWEsTUFBTSxRQUFRO0NBQy9FLElBQUksWUFBWSxJQUFJLFVBQVVDO0NBQzlCLGlCQUFpQixLQUFLLE1BQU0sR0FBRztBQUNuQyxDQUFDO0FBQ0QsSUFBYSxVQUF3QiwyQkFBa0IsWUFBWSxNQUFNLFFBQVE7Q0FDN0UsSUFBSSxZQUFZLElBQUksVUFBVUM7Q0FDOUIsaUJBQWlCLEtBQUssTUFBTSxHQUFHO0FBQ25DLENBQUM7QUFDRCxJQUFhLFlBQTBCLDJCQUFrQixjQUFjLE1BQU0sUUFBUTtDQUNqRixJQUFJLFlBQVksSUFBSSxVQUFVQztDQUM5QixpQkFBaUIsS0FBSyxNQUFNLEdBQUc7QUFDbkMsQ0FBQztBQUNELElBQWEsa0JBQWdDLDJCQUFrQixvQkFBb0IsTUFBTSxRQUFRO0NBQzdGLElBQUksWUFBWSxJQUFJLFVBQVVDLFdBQWlCLEdBQUc7Q0FDbEQsaUJBQWlCLEtBQUssTUFBTSxHQUFHO0FBQ25DLENBQUM7QUFDRCxJQUFhLGNBQTRCLDJCQUFrQixnQkFBZ0IsTUFBTSxRQUFRO0NBQ3JGLElBQUksWUFBWSxJQUFJLFVBQVVDO0NBQzlCLGlCQUFpQixLQUFLLE1BQU0sR0FBRztBQUNuQyxDQUFDO0FBQ0QsSUFBYSxjQUE0QiwyQkFBa0IsZ0JBQWdCLE1BQU0sUUFBUTtDQUNyRixJQUFJLFlBQVksSUFBSSxVQUFVQyxPQUFhLEdBQUc7Q0FDOUMsaUJBQWlCLEtBQUssTUFBTSxHQUFHO0FBQ25DLENBQUM7QUFDRCxJQUFhLGtCQUFnQywyQkFBa0Isb0JBQW9CLE1BQU0sUUFBUTtDQUM3RixJQUFJLFlBQVksSUFBSSxVQUFVQztDQUM5QixpQkFBaUIsS0FBSyxNQUFNLEdBQUc7QUFDbkMsQ0FBQztBQUNELElBQWEsV0FBeUIsMkJBQWtCLGFBQWEsTUFBTSxRQUFRO0NBQy9FLElBQUksWUFBWSxJQUFJLFVBQVVDO0NBQzlCLGlCQUFpQixLQUFLLE1BQU0sR0FBRztDQUMvQixLQUFLLEtBQUssSUFBSSxTQUFTO0FBQzNCLENBQUM7QUFDRCxJQUFhLFdBQXlCLDJCQUFrQixhQUFhLE1BQU0sUUFBUTtDQUMvRSxJQUFJLFlBQVksSUFBSSxVQUFVQztDQUM5QixpQkFBaUIsS0FBSyxNQUFNLEdBQUc7Q0FDL0IsS0FBSyxLQUFLLElBQUksU0FBUztDQUN2QixLQUFLLEtBQUssU0FBUyxZQUFZO0VBQzNCLElBQUk7R0FFQSxJQUFJLElBQUksV0FBVyxRQUFRLE1BQU0sRUFBRTtFQUV2QyxRQUNNO0dBQ0YsUUFBUSxPQUFPLEtBQUs7SUFDaEIsTUFBTTtJQUNOLFFBQVE7SUFDUixPQUFPLFFBQVE7SUFDZjtJQUNBLFVBQVUsQ0FBQyxJQUFJO0dBQ25CLENBQUM7RUFDTDtDQUNKO0FBQ0osQ0FBQztBQUNELElBQWEsVUFBd0IsMkJBQWtCLFlBQVksTUFBTSxRQUFRO0NBQzdFLElBQUksWUFBWSxJQUFJLFVBQVVDLE1BQVksSUFBSSxTQUFTO0NBQ3ZELGlCQUFpQixLQUFLLE1BQU0sR0FBRztDQUMvQixLQUFLLEtBQUssSUFBSSxTQUFTO0FBQzNCLENBQUM7QUFDRCxJQUFhLGFBQTJCLDJCQUFrQixlQUFlLE1BQU0sUUFBUTtDQUNuRixJQUFJLFlBQVksSUFBSSxVQUFVQztDQUM5QixpQkFBaUIsS0FBSyxNQUFNLEdBQUc7QUFDbkMsQ0FBQztBQUNELElBQWEsYUFBMkIsMkJBQWtCLGVBQWUsTUFBTSxRQUFRO0NBQ25GLElBQUksWUFBWSxJQUFJLFVBQVVDO0NBQzlCLGlCQUFpQixLQUFLLE1BQU0sR0FBRztDQUMvQixLQUFLLEtBQUssU0FBUyxZQUFZO0VBQzNCLE1BQU0sUUFBUSxRQUFRLE1BQU0sTUFBTSxHQUFHO0VBQ3JDLElBQUk7R0FDQSxJQUFJLE1BQU0sV0FBVyxHQUNqQixNQUFNLElBQUksTUFBTTtHQUNwQixNQUFNLENBQUMsU0FBUyxVQUFVO0dBQzFCLElBQUksQ0FBQyxRQUNELE1BQU0sSUFBSSxNQUFNO0dBQ3BCLE1BQU0sWUFBWSxPQUFPLE1BQU07R0FDL0IsSUFBSSxHQUFHLGdCQUFnQixRQUNuQixNQUFNLElBQUksTUFBTTtHQUNwQixJQUFJLFlBQVksS0FBSyxZQUFZLEtBQzdCLE1BQU0sSUFBSSxNQUFNO0dBRXBCLElBQUksSUFBSSxXQUFXLFFBQVEsRUFBRTtFQUNqQyxRQUNNO0dBQ0YsUUFBUSxPQUFPLEtBQUs7SUFDaEIsTUFBTTtJQUNOLFFBQVE7SUFDUixPQUFPLFFBQVE7SUFDZjtJQUNBLFVBQVUsQ0FBQyxJQUFJO0dBQ25CLENBQUM7RUFDTDtDQUNKO0FBQ0osQ0FBQztBQUVELFNBQWdCLGNBQWMsTUFBTTtDQUNoQyxJQUFJLFNBQVMsSUFDVCxPQUFPO0NBRVgsSUFBSSxLQUFLLEtBQUssSUFBSSxHQUNkLE9BQU87Q0FDWCxJQUFJLEtBQUssU0FBUyxNQUFNLEdBQ3BCLE9BQU87Q0FDWCxJQUFJO0VBRUEsS0FBSyxJQUFJO0VBQ1QsT0FBTztDQUNYLFFBQ007RUFDRixPQUFPO0NBQ1g7QUFDSjtBQUNBLElBQWEsYUFBMkIsMkJBQWtCLGVBQWUsTUFBTSxRQUFRO0NBQ25GLElBQUksWUFBWSxJQUFJLFVBQVVDO0NBQzlCLGlCQUFpQixLQUFLLE1BQU0sR0FBRztDQUMvQixLQUFLLEtBQUssSUFBSSxrQkFBa0I7Q0FDaEMsS0FBSyxLQUFLLFNBQVMsWUFBWTtFQUMzQixJQUFJLGNBQWMsUUFBUSxLQUFLLEdBQzNCO0VBQ0osUUFBUSxPQUFPLEtBQUs7R0FDaEIsTUFBTTtHQUNOLFFBQVE7R0FDUixPQUFPLFFBQVE7R0FDZjtHQUNBLFVBQVUsQ0FBQyxJQUFJO0VBQ25CLENBQUM7Q0FDTDtBQUNKLENBQUM7QUFFRCxTQUFnQixpQkFBaUIsTUFBTTtDQUNuQyxJQUFJLENBQUEsWUFBbUIsS0FBSyxJQUFJLEdBQzVCLE9BQU87Q0FDWCxNQUFNLFNBQVMsS0FBSyxRQUFRLFVBQVUsTUFBTyxNQUFNLE1BQU0sTUFBTSxHQUFJO0NBRW5FLE9BQU8sY0FEUSxPQUFPLE9BQU8sS0FBSyxLQUFLLE9BQU8sU0FBUyxDQUFDLElBQUksR0FBRyxHQUNyQyxDQUFDO0FBQy9CO0FBQ0EsSUFBYSxnQkFBOEIsMkJBQWtCLGtCQUFrQixNQUFNLFFBQVE7Q0FDekYsSUFBSSxZQUFZLElBQUksVUFBVUM7Q0FDOUIsaUJBQWlCLEtBQUssTUFBTSxHQUFHO0NBQy9CLEtBQUssS0FBSyxJQUFJLGtCQUFrQjtDQUNoQyxLQUFLLEtBQUssU0FBUyxZQUFZO0VBQzNCLElBQUksaUJBQWlCLFFBQVEsS0FBSyxHQUM5QjtFQUNKLFFBQVEsT0FBTyxLQUFLO0dBQ2hCLE1BQU07R0FDTixRQUFRO0dBQ1IsT0FBTyxRQUFRO0dBQ2Y7R0FDQSxVQUFVLENBQUMsSUFBSTtFQUNuQixDQUFDO0NBQ0w7QUFDSixDQUFDO0FBQ0QsSUFBYSxXQUF5QiwyQkFBa0IsYUFBYSxNQUFNLFFBQVE7Q0FDL0UsSUFBSSxZQUFZLElBQUksVUFBVUM7Q0FDOUIsaUJBQWlCLEtBQUssTUFBTSxHQUFHO0FBQ25DLENBQUM7QUFFRCxTQUFnQixXQUFXLE9BQU8sWUFBWSxNQUFNO0NBQ2hELElBQUk7RUFDQSxNQUFNLGNBQWMsTUFBTSxNQUFNLEdBQUc7RUFDbkMsSUFBSSxZQUFZLFdBQVcsR0FDdkIsT0FBTztFQUNYLE1BQU0sQ0FBQyxVQUFVO0VBQ2pCLElBQUksQ0FBQyxRQUNELE9BQU87RUFFWCxNQUFNLGVBQWUsS0FBSyxNQUFNLEtBQUssTUFBTSxDQUFDO0VBQzVDLElBQUksU0FBUyxnQkFBZ0IsY0FBYyxRQUFRLE9BQy9DLE9BQU87RUFDWCxJQUFJLENBQUMsYUFBYSxLQUNkLE9BQU87RUFDWCxJQUFJLGNBQWMsRUFBRSxTQUFTLGlCQUFpQixhQUFhLFFBQVEsWUFDL0QsT0FBTztFQUNYLE9BQU87Q0FDWCxRQUNNO0VBQ0YsT0FBTztDQUNYO0FBQ0o7QUFDQSxJQUFhLFVBQXdCLDJCQUFrQixZQUFZLE1BQU0sUUFBUTtDQUM3RSxpQkFBaUIsS0FBSyxNQUFNLEdBQUc7Q0FDL0IsS0FBSyxLQUFLLFNBQVMsWUFBWTtFQUMzQixJQUFJLFdBQVcsUUFBUSxPQUFPLElBQUksR0FBRyxHQUNqQztFQUNKLFFBQVEsT0FBTyxLQUFLO0dBQ2hCLE1BQU07R0FDTixRQUFRO0dBQ1IsT0FBTyxRQUFRO0dBQ2Y7R0FDQSxVQUFVLENBQUMsSUFBSTtFQUNuQixDQUFDO0NBQ0w7QUFDSixDQUFDO0FBQ0QsSUFBYSx5QkFBdUMsMkJBQWtCLDJCQUEyQixNQUFNLFFBQVE7Q0FDM0csaUJBQWlCLEtBQUssTUFBTSxHQUFHO0NBQy9CLEtBQUssS0FBSyxTQUFTLFlBQVk7RUFDM0IsSUFBSSxJQUFJLEdBQUcsUUFBUSxLQUFLLEdBQ3BCO0VBQ0osUUFBUSxPQUFPLEtBQUs7R0FDaEIsTUFBTTtHQUNOLFFBQVEsSUFBSTtHQUNaLE9BQU8sUUFBUTtHQUNmO0dBQ0EsVUFBVSxDQUFDLElBQUk7RUFDbkIsQ0FBQztDQUNMO0FBQ0osQ0FBQztBQUNELElBQWEsYUFBMkIsMkJBQWtCLGVBQWUsTUFBTSxRQUFRO0NBQ25GLFNBQVMsS0FBSyxNQUFNLEdBQUc7Q0FDdkIsS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLElBQUksV0FBV0M7Q0FDN0MsS0FBSyxLQUFLLFNBQVMsU0FBUyxTQUFTO0VBQ2pDLElBQUksSUFBSSxRQUNKLElBQUk7R0FDQSxRQUFRLFFBQVEsT0FBTyxRQUFRLEtBQUs7RUFDeEMsU0FDTyxHQUFHLENBQUU7RUFDaEIsTUFBTSxRQUFRLFFBQVE7RUFDdEIsSUFBSSxPQUFPLFVBQVUsWUFBWSxDQUFDLE9BQU8sTUFBTSxLQUFLLEtBQUssT0FBTyxTQUFTLEtBQUssR0FDMUUsT0FBTztFQUVYLE1BQU0sV0FBVyxPQUFPLFVBQVUsV0FDNUIsT0FBTyxNQUFNLEtBQUssSUFDZCxRQUNBLENBQUMsT0FBTyxTQUFTLEtBQUssSUFDbEIsYUFDQSxLQUFBLElBQ1IsS0FBQTtFQUNOLFFBQVEsT0FBTyxLQUFLO0dBQ2hCLFVBQVU7R0FDVixNQUFNO0dBQ047R0FDQTtHQUNBLEdBQUksV0FBVyxFQUFFLFNBQVMsSUFBSSxDQUFDO0VBQ25DLENBQUM7RUFDRCxPQUFPO0NBQ1g7QUFDSixDQUFDO0FBQ0QsSUFBYSxtQkFBaUMsMkJBQWtCLHFCQUFxQixNQUFNLFFBQVE7Q0FDL0Ysc0JBQTZCLEtBQUssTUFBTSxHQUFHO0NBQzNDLFdBQVcsS0FBSyxNQUFNLEdBQUc7QUFDN0IsQ0FBQztBQUNELElBQWEsY0FBNEIsMkJBQWtCLGdCQUFnQixNQUFNLFFBQVE7Q0FDckYsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUN2QixLQUFLLEtBQUssVUFBVUM7Q0FDcEIsS0FBSyxLQUFLLFNBQVMsU0FBUyxTQUFTO0VBQ2pDLElBQUksSUFBSSxRQUNKLElBQUk7R0FDQSxRQUFRLFFBQVEsUUFBUSxRQUFRLEtBQUs7RUFDekMsU0FDTyxHQUFHLENBQUU7RUFDaEIsTUFBTSxRQUFRLFFBQVE7RUFDdEIsSUFBSSxPQUFPLFVBQVUsV0FDakIsT0FBTztFQUNYLFFBQVEsT0FBTyxLQUFLO0dBQ2hCLFVBQVU7R0FDVixNQUFNO0dBQ047R0FDQTtFQUNKLENBQUM7RUFDRCxPQUFPO0NBQ1g7QUFDSixDQUFDO0FBQ0QsSUFBYSxhQUEyQiwyQkFBa0IsZUFBZSxNQUFNLFFBQVE7Q0FDbkYsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUN2QixLQUFLLEtBQUssVUFBVUM7Q0FDcEIsS0FBSyxLQUFLLFNBQVMsU0FBUyxTQUFTO0VBQ2pDLElBQUksSUFBSSxRQUNKLElBQUk7R0FDQSxRQUFRLFFBQVEsT0FBTyxRQUFRLEtBQUs7RUFDeEMsU0FDTyxHQUFHLENBQUU7RUFDaEIsSUFBSSxPQUFPLFFBQVEsVUFBVSxVQUN6QixPQUFPO0VBQ1gsUUFBUSxPQUFPLEtBQUs7R0FDaEIsVUFBVTtHQUNWLE1BQU07R0FDTixPQUFPLFFBQVE7R0FDZjtFQUNKLENBQUM7RUFDRCxPQUFPO0NBQ1g7QUFDSixDQUFDO0FBQ0QsSUFBYSxtQkFBaUMsMkJBQWtCLHFCQUFxQixNQUFNLFFBQVE7Q0FDL0Ysc0JBQTZCLEtBQUssTUFBTSxHQUFHO0NBQzNDLFdBQVcsS0FBSyxNQUFNLEdBQUc7QUFDN0IsQ0FBQztBQUNELElBQWEsYUFBMkIsMkJBQWtCLGVBQWUsTUFBTSxRQUFRO0NBQ25GLFNBQVMsS0FBSyxNQUFNLEdBQUc7Q0FDdkIsS0FBSyxLQUFLLFNBQVMsU0FBUyxTQUFTO0VBQ2pDLE1BQU0sUUFBUSxRQUFRO0VBQ3RCLElBQUksT0FBTyxVQUFVLFVBQ2pCLE9BQU87RUFDWCxRQUFRLE9BQU8sS0FBSztHQUNoQixVQUFVO0dBQ1YsTUFBTTtHQUNOO0dBQ0E7RUFDSixDQUFDO0VBQ0QsT0FBTztDQUNYO0FBQ0osQ0FBQztBQUNELElBQWEsZ0JBQThCLDJCQUFrQixrQkFBa0IsTUFBTSxRQUFRO0NBQ3pGLFNBQVMsS0FBSyxNQUFNLEdBQUc7Q0FDdkIsS0FBSyxLQUFLLFVBQVVDO0NBQ3BCLEtBQUssS0FBSyx5QkFBUyxJQUFJLElBQUksQ0FBQyxLQUFBLENBQVMsQ0FBQztDQUN0QyxLQUFLLEtBQUssU0FBUyxTQUFTLFNBQVM7RUFDakMsTUFBTSxRQUFRLFFBQVE7RUFDdEIsSUFBSSxPQUFPLFVBQVUsYUFDakIsT0FBTztFQUNYLFFBQVEsT0FBTyxLQUFLO0dBQ2hCLFVBQVU7R0FDVixNQUFNO0dBQ047R0FDQTtFQUNKLENBQUM7RUFDRCxPQUFPO0NBQ1g7QUFDSixDQUFDO0FBQ0QsSUFBYSxXQUF5QiwyQkFBa0IsYUFBYSxNQUFNLFFBQVE7Q0FDL0UsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUN2QixLQUFLLEtBQUssVUFBVUM7Q0FDcEIsS0FBSyxLQUFLLHlCQUFTLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztDQUNqQyxLQUFLLEtBQUssU0FBUyxTQUFTLFNBQVM7RUFDakMsTUFBTSxRQUFRLFFBQVE7RUFDdEIsSUFBSSxVQUFVLE1BQ1YsT0FBTztFQUNYLFFBQVEsT0FBTyxLQUFLO0dBQ2hCLFVBQVU7R0FDVixNQUFNO0dBQ047R0FDQTtFQUNKLENBQUM7RUFDRCxPQUFPO0NBQ1g7QUFDSixDQUFDO0FBQ0QsSUFBYSxVQUF3QiwyQkFBa0IsWUFBWSxNQUFNLFFBQVE7Q0FDN0UsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUN2QixLQUFLLEtBQUssU0FBUyxZQUFZO0FBQ25DLENBQUM7QUFDRCxJQUFhLGNBQTRCLDJCQUFrQixnQkFBZ0IsTUFBTSxRQUFRO0NBQ3JGLFNBQVMsS0FBSyxNQUFNLEdBQUc7Q0FDdkIsS0FBSyxLQUFLLFNBQVMsWUFBWTtBQUNuQyxDQUFDO0FBQ0QsSUFBYSxZQUEwQiwyQkFBa0IsY0FBYyxNQUFNLFFBQVE7Q0FDakYsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUN2QixLQUFLLEtBQUssU0FBUyxTQUFTLFNBQVM7RUFDakMsUUFBUSxPQUFPLEtBQUs7R0FDaEIsVUFBVTtHQUNWLE1BQU07R0FDTixPQUFPLFFBQVE7R0FDZjtFQUNKLENBQUM7RUFDRCxPQUFPO0NBQ1g7QUFDSixDQUFDO0FBQ0QsSUFBYSxXQUF5QiwyQkFBa0IsYUFBYSxNQUFNLFFBQVE7Q0FDL0UsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUN2QixLQUFLLEtBQUssU0FBUyxTQUFTLFNBQVM7RUFDakMsTUFBTSxRQUFRLFFBQVE7RUFDdEIsSUFBSSxPQUFPLFVBQVUsYUFDakIsT0FBTztFQUNYLFFBQVEsT0FBTyxLQUFLO0dBQ2hCLFVBQVU7R0FDVixNQUFNO0dBQ047R0FDQTtFQUNKLENBQUM7RUFDRCxPQUFPO0NBQ1g7QUFDSixDQUFDO0FBQ0QsSUFBYSxXQUF5QiwyQkFBa0IsYUFBYSxNQUFNLFFBQVE7Q0FDL0UsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUN2QixLQUFLLEtBQUssU0FBUyxTQUFTLFNBQVM7RUFDakMsSUFBSSxJQUFJLFFBQ0osSUFBSTtHQUNBLFFBQVEsUUFBUSxJQUFJLEtBQUssUUFBUSxLQUFLO0VBQzFDLFNBQ08sTUFBTSxDQUFFO0VBRW5CLE1BQU0sUUFBUSxRQUFRO0VBQ3RCLE1BQU0sU0FBUyxpQkFBaUI7RUFFaEMsSUFEb0IsVUFBVSxDQUFDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQyxHQUV2RCxPQUFPO0VBQ1gsUUFBUSxPQUFPLEtBQUs7R0FDaEIsVUFBVTtHQUNWLE1BQU07R0FDTjtHQUNBLEdBQUksU0FBUyxFQUFFLFVBQVUsZUFBZSxJQUFJLENBQUM7R0FDN0M7RUFDSixDQUFDO0VBQ0QsT0FBTztDQUNYO0FBQ0osQ0FBQztBQUNELFNBQVMsa0JBQWtCLFFBQVEsT0FBTyxPQUFPO0NBQzdDLElBQUksT0FBTyxPQUFPLFFBQ2QsTUFBTSxPQUFPLEtBQUssR0FBR0MsYUFBa0IsT0FBTyxPQUFPLE1BQU0sQ0FBQztDQUVoRSxNQUFNLE1BQU0sU0FBUyxPQUFPO0FBQ2hDO0FBQ0EsSUFBYSxZQUEwQiwyQkFBa0IsY0FBYyxNQUFNLFFBQVE7Q0FDakYsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUN2QixLQUFLLEtBQUssU0FBUyxTQUFTLFFBQVE7RUFDaEMsTUFBTSxRQUFRLFFBQVE7RUFDdEIsSUFBSSxDQUFDLE1BQU0sUUFBUSxLQUFLLEdBQUc7R0FDdkIsUUFBUSxPQUFPLEtBQUs7SUFDaEIsVUFBVTtJQUNWLE1BQU07SUFDTjtJQUNBO0dBQ0osQ0FBQztHQUNELE9BQU87RUFDWDtFQUNBLFFBQVEsUUFBUSxNQUFNLE1BQU0sTUFBTTtFQUNsQyxNQUFNLFFBQVEsQ0FBQztFQUNmLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztHQUNuQyxNQUFNLE9BQU8sTUFBTTtHQUNuQixNQUFNLFNBQVMsSUFBSSxRQUFRLEtBQUssSUFBSTtJQUNoQyxPQUFPO0lBQ1AsUUFBUSxDQUFDO0dBQ2IsR0FBRyxHQUFHO0dBQ04sSUFBSSxrQkFBa0IsU0FDbEIsTUFBTSxLQUFLLE9BQU8sTUFBTSxXQUFXLGtCQUFrQixRQUFRLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFHekUsa0JBQWtCLFFBQVEsU0FBUyxDQUFDO0VBRTVDO0VBQ0EsSUFBSSxNQUFNLFFBQ04sT0FBTyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsV0FBVyxPQUFPO0VBRWhELE9BQU87Q0FDWDtBQUNKLENBQUM7QUFDRCxTQUFTLHFCQUFxQixRQUFRLE9BQU8sS0FBSyxPQUFPLGNBQWMsZUFBZTtDQUNsRixNQUFNLFlBQVksT0FBTztDQUN6QixJQUFJLE9BQU8sT0FBTyxRQUFRO0VBRXRCLElBQUksZ0JBQWdCLGlCQUFpQixDQUFDLFdBQ2xDO0VBRUosTUFBTSxPQUFPLEtBQUssR0FBR0EsYUFBa0IsS0FBSyxPQUFPLE1BQU0sQ0FBQztDQUM5RDtDQUNBLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYztFQUM3QixJQUFJLENBQUMsT0FBTyxPQUFPLFFBQ2YsTUFBTSxPQUFPLEtBQUs7R0FDZCxNQUFNO0dBQ04sVUFBVTtHQUNWLE9BQU8sS0FBQTtHQUNQLE1BQU0sQ0FBQyxHQUFHO0VBQ2QsQ0FBQztFQUVMO0NBQ0o7Q0FDQSxJQUFJLE9BQU8sVUFBVSxLQUFBLEdBQ2I7TUFBQSxXQUNBLE1BQU0sTUFBTSxPQUFPLEtBQUE7Q0FBQSxPQUl2QixNQUFNLE1BQU0sT0FBTyxPQUFPO0FBRWxDO0FBQ0EsU0FBUyxhQUFhLEtBQUs7Q0FDdkIsTUFBTSxPQUFPLE9BQU8sS0FBSyxJQUFJLEtBQUs7Q0FDbEMsS0FBSyxNQUFNLEtBQUssTUFDWixJQUFJLENBQUMsSUFBSSxRQUFRLEVBQUUsRUFBRSxNQUFNLFFBQVEsSUFBSSxVQUFVLEdBQzdDLE1BQU0sSUFBSSxNQUFNLDJCQUEyQixFQUFFLHlCQUF5QjtDQUc5RSxNQUFNLFFBQVFDLGFBQWtCLElBQUksS0FBSztDQUN6QyxPQUFPO0VBQ0gsR0FBRztFQUNIO0VBQ0EsUUFBUSxJQUFJLElBQUksSUFBSTtFQUNwQixTQUFTLEtBQUs7RUFDZCxjQUFjLElBQUksSUFBSSxLQUFLO0NBQy9CO0FBQ0o7QUFDQSxTQUFTLGVBQWUsT0FBTyxPQUFPLFNBQVMsS0FBSyxLQUFLLE1BQU07Q0FDM0QsTUFBTSxlQUFlLENBQUM7Q0FDdEIsTUFBTSxTQUFTLElBQUk7Q0FDbkIsTUFBTSxZQUFZLElBQUksU0FBUztDQUMvQixNQUFNLElBQUksVUFBVSxJQUFJO0NBQ3hCLE1BQU0sZUFBZSxVQUFVLFVBQVU7Q0FDekMsTUFBTSxnQkFBZ0IsVUFBVSxXQUFXO0NBQzNDLEtBQUssTUFBTSxPQUFPLE9BQU87RUFHckIsSUFBSSxRQUFRLGFBQ1I7RUFDSixJQUFJLE9BQU8sSUFBSSxHQUFHLEdBQ2Q7RUFDSixJQUFJLE1BQU0sU0FBUztHQUNmLGFBQWEsS0FBSyxHQUFHO0dBQ3JCO0VBQ0o7RUFDQSxNQUFNLElBQUksVUFBVSxJQUFJO0dBQUUsT0FBTyxNQUFNO0dBQU0sUUFBUSxDQUFDO0VBQUUsR0FBRyxHQUFHO0VBQzlELElBQUksYUFBYSxTQUNiLE1BQU0sS0FBSyxFQUFFLE1BQU0sTUFBTSxxQkFBcUIsR0FBRyxTQUFTLEtBQUssT0FBTyxjQUFjLGFBQWEsQ0FBQyxDQUFDO09BR25HLHFCQUFxQixHQUFHLFNBQVMsS0FBSyxPQUFPLGNBQWMsYUFBYTtDQUVoRjtDQUNBLElBQUksYUFBYSxRQUNiLFFBQVEsT0FBTyxLQUFLO0VBQ2hCLE1BQU07RUFDTixNQUFNO0VBQ047RUFDQTtDQUNKLENBQUM7Q0FFTCxJQUFJLENBQUMsTUFBTSxRQUNQLE9BQU87Q0FDWCxPQUFPLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxXQUFXO0VBQ2pDLE9BQU87Q0FDWCxDQUFDO0FBQ0w7QUFDQSxJQUFhLGFBQTJCLDJCQUFrQixlQUFlLE1BQU0sUUFBUTtDQUVuRixTQUFTLEtBQUssTUFBTSxHQUFHO0NBR3ZCLElBQUksQ0FEUyxPQUFPLHlCQUF5QixLQUFLLE9BQzFDLENBQUMsRUFBRSxLQUFLO0VBQ1osTUFBTSxLQUFLLElBQUk7RUFDZixPQUFPLGVBQWUsS0FBSyxTQUFTLEVBQ2hDLFdBQVc7R0FDUCxNQUFNLFFBQVEsRUFBRSxHQUFHLEdBQUc7R0FDdEIsT0FBTyxlQUFlLEtBQUssU0FBUyxFQUNoQyxPQUFPLE1BQ1gsQ0FBQztHQUNELE9BQU87RUFDWCxFQUNKLENBQUM7Q0FDTDtDQUNBLE1BQU0sY0FBY0MsYUFBa0IsYUFBYSxHQUFHLENBQUM7Q0FDdkQsV0FBZ0IsS0FBSyxNQUFNLG9CQUFvQjtFQUMzQyxNQUFNLFFBQVEsSUFBSTtFQUNsQixNQUFNLGFBQWEsQ0FBQztFQUNwQixLQUFLLE1BQU0sT0FBTyxPQUFPO0dBQ3JCLE1BQU0sUUFBUSxNQUFNLElBQUksQ0FBQztHQUN6QixJQUFJLE1BQU0sUUFBUTtJQUNkLFdBQVcsU0FBUyxXQUFXLHVCQUFPLElBQUksSUFBSTtJQUM5QyxLQUFLLE1BQU0sS0FBSyxNQUFNLFFBQ2xCLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQztHQUM3QjtFQUNKO0VBQ0EsT0FBTztDQUNYLENBQUM7Q0FDRCxNQUFNQyxhQUFXQztDQUNqQixNQUFNLFdBQVcsSUFBSTtDQUNyQixJQUFJO0NBQ0osS0FBSyxLQUFLLFNBQVMsU0FBUyxRQUFRO0VBQ2hDLFVBQVUsUUFBUSxZQUFZO0VBQzlCLE1BQU0sUUFBUSxRQUFRO0VBQ3RCLElBQUksQ0FBQ0QsV0FBUyxLQUFLLEdBQUc7R0FDbEIsUUFBUSxPQUFPLEtBQUs7SUFDaEIsVUFBVTtJQUNWLE1BQU07SUFDTjtJQUNBO0dBQ0osQ0FBQztHQUNELE9BQU87RUFDWDtFQUNBLFFBQVEsUUFBUSxDQUFDO0VBQ2pCLE1BQU0sUUFBUSxDQUFDO0VBQ2YsTUFBTSxRQUFRLE1BQU07RUFDcEIsS0FBSyxNQUFNLE9BQU8sTUFBTSxNQUFNO0dBQzFCLE1BQU0sS0FBSyxNQUFNO0dBQ2pCLE1BQU0sZUFBZSxHQUFHLEtBQUssVUFBVTtHQUN2QyxNQUFNLGdCQUFnQixHQUFHLEtBQUssV0FBVztHQUN6QyxNQUFNLElBQUksR0FBRyxLQUFLLElBQUk7SUFBRSxPQUFPLE1BQU07SUFBTSxRQUFRLENBQUM7R0FBRSxHQUFHLEdBQUc7R0FDNUQsSUFBSSxhQUFhLFNBQ2IsTUFBTSxLQUFLLEVBQUUsTUFBTSxNQUFNLHFCQUFxQixHQUFHLFNBQVMsS0FBSyxPQUFPLGNBQWMsYUFBYSxDQUFDLENBQUM7UUFHbkcscUJBQXFCLEdBQUcsU0FBUyxLQUFLLE9BQU8sY0FBYyxhQUFhO0VBRWhGO0VBQ0EsSUFBSSxDQUFDLFVBQ0QsT0FBTyxNQUFNLFNBQVMsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLFdBQVcsT0FBTyxJQUFJO0VBRW5FLE9BQU8sZUFBZSxPQUFPLE9BQU8sU0FBUyxLQUFLLFlBQVksT0FBTyxJQUFJO0NBQzdFO0FBQ0osQ0FBQztBQUNELElBQWEsZ0JBQThCLDJCQUFrQixrQkFBa0IsTUFBTSxRQUFRO0NBRXpGLFdBQVcsS0FBSyxNQUFNLEdBQUc7Q0FDekIsTUFBTSxhQUFhLEtBQUssS0FBSztDQUM3QixNQUFNLGNBQWNELGFBQWtCLGFBQWEsR0FBRyxDQUFDO0NBQ3ZELE1BQU0sb0JBQW9CLFVBQVU7RUFDaEMsTUFBTSxNQUFNLElBQUksSUFBSTtHQUFDO0dBQVM7R0FBVztFQUFLLENBQUM7RUFDL0MsTUFBTSxhQUFhLFlBQVk7RUFDL0IsTUFBTSxZQUFZLFFBQVE7R0FDdEIsTUFBTSxJQUFJRyxJQUFTLEdBQUc7R0FDdEIsT0FBTyxTQUFTLEVBQUUsNEJBQTRCLEVBQUU7RUFDcEQ7RUFDQSxJQUFJLE1BQU0sOEJBQThCO0VBQ3hDLE1BQU0sTUFBTSxPQUFPLE9BQU8sSUFBSTtFQUM5QixJQUFJLFVBQVU7RUFDZCxLQUFLLE1BQU0sT0FBTyxXQUFXLE1BQ3pCLElBQUksT0FBTyxPQUFPO0VBR3RCLElBQUksTUFBTSx1QkFBdUI7RUFDakMsS0FBSyxNQUFNLE9BQU8sV0FBVyxNQUFNO0dBQy9CLE1BQU0sS0FBSyxJQUFJO0dBQ2YsTUFBTSxJQUFJQSxJQUFTLEdBQUc7R0FDdEIsTUFBTSxTQUFTLE1BQU07R0FDckIsTUFBTSxlQUFlLFFBQVEsTUFBTSxVQUFVO0dBQzdDLE1BQU0sZ0JBQWdCLFFBQVEsTUFBTSxXQUFXO0dBQy9DLElBQUksTUFBTSxTQUFTLEdBQUcsS0FBSyxTQUFTLEdBQUcsRUFBRSxFQUFFO0dBQzNDLElBQUksZ0JBQWdCLGVBRWhCLElBQUksTUFBTTtjQUNaLEdBQUc7Z0JBQ0QsRUFBRTtxREFDbUMsR0FBRzs7a0NBRXRCLEVBQUUsb0JBQW9CLEVBQUU7Ozs7O2NBSzVDLEdBQUc7Z0JBQ0QsRUFBRTt3QkFDTSxFQUFFOzs7c0JBR0osRUFBRSxNQUFNLEdBQUc7OztPQUcxQjtRQUVVLElBQUksQ0FBQyxjQUNOLElBQUksTUFBTTtnQkFDVixHQUFHLGFBQWEsRUFBRTtjQUNwQixHQUFHO21EQUNrQyxHQUFHOztnQ0FFdEIsRUFBRSxvQkFBb0IsRUFBRTs7O2VBR3pDLEdBQUcsZUFBZSxHQUFHOzs7OztxQkFLZixFQUFFOzs7O2NBSVQsR0FBRztnQkFDRCxHQUFHO3dCQUNLLEVBQUU7O3dCQUVGLEVBQUUsTUFBTSxHQUFHOzs7O09BSTVCO1FBR1MsSUFBSSxNQUFNO2NBQ1osR0FBRzttREFDa0MsR0FBRzs7Z0NBRXRCLEVBQUUsb0JBQW9CLEVBQUU7Ozs7Y0FJMUMsR0FBRztnQkFDRCxFQUFFO3dCQUNNLEVBQUU7OztzQkFHSixFQUFFLE1BQU0sR0FBRzs7O09BRzFCO0VBRUM7RUFDQSxJQUFJLE1BQU0sNEJBQTRCO0VBQ3RDLElBQUksTUFBTSxpQkFBaUI7RUFDM0IsTUFBTSxLQUFLLElBQUksUUFBUTtFQUN2QixRQUFRLFNBQVMsUUFBUSxHQUFHLE9BQU8sU0FBUyxHQUFHO0NBQ25EO0NBQ0EsSUFBSTtDQUNKLE1BQU1GLGFBQVdDO0NBQ2pCLE1BQU0sTUFBTSxDQUFBLGFBQW1CO0NBRS9CLE1BQU0sY0FBYyxPQUFPRSxXQUFXO0NBQ3RDLE1BQU0sV0FBVyxJQUFJO0NBQ3JCLElBQUk7Q0FDSixLQUFLLEtBQUssU0FBUyxTQUFTLFFBQVE7RUFDaEMsVUFBVSxRQUFRLFlBQVk7RUFDOUIsTUFBTSxRQUFRLFFBQVE7RUFDdEIsSUFBSSxDQUFDSCxXQUFTLEtBQUssR0FBRztHQUNsQixRQUFRLE9BQU8sS0FBSztJQUNoQixVQUFVO0lBQ1YsTUFBTTtJQUNOO0lBQ0E7R0FDSixDQUFDO0dBQ0QsT0FBTztFQUNYO0VBQ0EsSUFBSSxPQUFPLGVBQWUsS0FBSyxVQUFVLFNBQVMsSUFBSSxZQUFZLE1BQU07R0FFcEUsSUFBSSxDQUFDLFVBQ0QsV0FBVyxpQkFBaUIsSUFBSSxLQUFLO0dBQ3pDLFVBQVUsU0FBUyxTQUFTLEdBQUc7R0FDL0IsSUFBSSxDQUFDLFVBQ0QsT0FBTztHQUNYLE9BQU8sZUFBZSxDQUFDLEdBQUcsT0FBTyxTQUFTLEtBQUssT0FBTyxJQUFJO0VBQzlEO0VBQ0EsT0FBTyxXQUFXLFNBQVMsR0FBRztDQUNsQztBQUNKLENBQUM7QUFDRCxTQUFTLG1CQUFtQixTQUFTLE9BQU8sTUFBTSxLQUFLO0NBQ25ELEtBQUssTUFBTSxVQUFVLFNBQ2pCLElBQUksT0FBTyxPQUFPLFdBQVcsR0FBRztFQUM1QixNQUFNLFFBQVEsT0FBTztFQUNyQixPQUFPO0NBQ1g7Q0FFSixNQUFNLGFBQWEsUUFBUSxRQUFRLE1BQU0sQ0FBQ3BDLFFBQWEsQ0FBQyxDQUFDO0NBQ3pELElBQUksV0FBVyxXQUFXLEdBQUc7RUFDekIsTUFBTSxRQUFRLFdBQVcsRUFBRSxDQUFDO0VBQzVCLE9BQU8sV0FBVztDQUN0QjtDQUNBLE1BQU0sT0FBTyxLQUFLO0VBQ2QsTUFBTTtFQUNOLE9BQU8sTUFBTTtFQUNiO0VBQ0EsUUFBUSxRQUFRLEtBQUssV0FBVyxPQUFPLE9BQU8sS0FBSyxRQUFReUMsY0FBbUIsS0FBSyxLQUFLQyxPQUFZLENBQUMsQ0FBQyxDQUFDO0NBQzNHLENBQUM7Q0FDRCxPQUFPO0FBQ1g7QUFDQSxJQUFhLFlBQTBCLDJCQUFrQixjQUFjLE1BQU0sUUFBUTtDQUNqRixTQUFTLEtBQUssTUFBTSxHQUFHO0NBQ3ZCLFdBQWdCLEtBQUssTUFBTSxlQUFlLElBQUksUUFBUSxNQUFNLE1BQU0sRUFBRSxLQUFLLFVBQVUsVUFBVSxJQUFJLGFBQWEsS0FBQSxDQUFTO0NBQ3ZILFdBQWdCLEtBQUssTUFBTSxnQkFBZ0IsSUFBSSxRQUFRLE1BQU0sTUFBTSxFQUFFLEtBQUssV0FBVyxVQUFVLElBQUksYUFBYSxLQUFBLENBQVM7Q0FDekgsV0FBZ0IsS0FBSyxNQUFNLGdCQUFnQjtFQUN2QyxJQUFJLElBQUksUUFBUSxPQUFPLE1BQU0sRUFBRSxLQUFLLE1BQU0sR0FDdEMsT0FBTyxJQUFJLElBQUksSUFBSSxRQUFRLFNBQVMsV0FBVyxNQUFNLEtBQUssT0FBTyxLQUFLLE1BQU0sQ0FBQyxDQUFDO0NBR3RGLENBQUM7Q0FDRCxXQUFnQixLQUFLLE1BQU0saUJBQWlCO0VBQ3hDLElBQUksSUFBSSxRQUFRLE9BQU8sTUFBTSxFQUFFLEtBQUssT0FBTyxHQUFHO0dBQzFDLE1BQU0sV0FBVyxJQUFJLFFBQVEsS0FBSyxNQUFNLEVBQUUsS0FBSyxPQUFPO0dBQ3RELE9BQU8sSUFBSSxPQUFPLEtBQUssU0FBUyxLQUFLLE1BQU1DLFdBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHO0VBQ3ZGO0NBRUosQ0FBQztDQUNELE1BQU0sUUFBUSxJQUFJLFFBQVEsV0FBVyxJQUFJLElBQUksUUFBUSxFQUFFLENBQUMsS0FBSyxNQUFNO0NBQ25FLEtBQUssS0FBSyxTQUFTLFNBQVMsUUFBUTtFQUNoQyxJQUFJLE9BQ0EsT0FBTyxNQUFNLFNBQVMsR0FBRztFQUU3QixJQUFJLFFBQVE7RUFDWixNQUFNLFVBQVUsQ0FBQztFQUNqQixLQUFLLE1BQU0sVUFBVSxJQUFJLFNBQVM7R0FDOUIsTUFBTSxTQUFTLE9BQU8sS0FBSyxJQUFJO0lBQzNCLE9BQU8sUUFBUTtJQUNmLFFBQVEsQ0FBQztHQUNiLEdBQUcsR0FBRztHQUNOLElBQUksa0JBQWtCLFNBQVM7SUFDM0IsUUFBUSxLQUFLLE1BQU07SUFDbkIsUUFBUTtHQUNaLE9BQ0s7SUFDRCxJQUFJLE9BQU8sT0FBTyxXQUFXLEdBQ3pCLE9BQU87SUFDWCxRQUFRLEtBQUssTUFBTTtHQUN2QjtFQUNKO0VBQ0EsSUFBSSxDQUFDLE9BQ0QsT0FBTyxtQkFBbUIsU0FBUyxTQUFTLE1BQU0sR0FBRztFQUN6RCxPQUFPLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxNQUFNLFlBQVk7R0FDMUMsT0FBTyxtQkFBbUIsU0FBUyxTQUFTLE1BQU0sR0FBRztFQUN6RCxDQUFDO0NBQ0w7QUFDSixDQUFDO0FBQ0QsU0FBUyw0QkFBNEIsU0FBUyxPQUFPLE1BQU0sS0FBSztDQUM1RCxNQUFNLFlBQVksUUFBUSxRQUFRLE1BQU0sRUFBRSxPQUFPLFdBQVcsQ0FBQztDQUM3RCxJQUFJLFVBQVUsV0FBVyxHQUFHO0VBQ3hCLE1BQU0sUUFBUSxVQUFVLEVBQUUsQ0FBQztFQUMzQixPQUFPO0NBQ1g7Q0FDQSxJQUFJLFVBQVUsV0FBVyxHQUVyQixNQUFNLE9BQU8sS0FBSztFQUNkLE1BQU07RUFDTixPQUFPLE1BQU07RUFDYjtFQUNBLFFBQVEsUUFBUSxLQUFLLFdBQVcsT0FBTyxPQUFPLEtBQUssUUFBUUYsY0FBbUIsS0FBSyxLQUFLQyxPQUFZLENBQUMsQ0FBQyxDQUFDO0NBQzNHLENBQUM7TUFJRCxNQUFNLE9BQU8sS0FBSztFQUNkLE1BQU07RUFDTixPQUFPLE1BQU07RUFDYjtFQUNBLFFBQVEsQ0FBQztFQUNULFdBQVc7Q0FDZixDQUFDO0NBRUwsT0FBTztBQUNYO0FBQ0EsSUFBYSxVQUF3QiwyQkFBa0IsWUFBWSxNQUFNLFFBQVE7Q0FDN0UsVUFBVSxLQUFLLE1BQU0sR0FBRztDQUN4QixJQUFJLFlBQVk7Q0FDaEIsTUFBTSxRQUFRLElBQUksUUFBUSxXQUFXLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQyxLQUFLLE1BQU07Q0FDbkUsS0FBSyxLQUFLLFNBQVMsU0FBUyxRQUFRO0VBQ2hDLElBQUksT0FDQSxPQUFPLE1BQU0sU0FBUyxHQUFHO0VBRTdCLElBQUksUUFBUTtFQUNaLE1BQU0sVUFBVSxDQUFDO0VBQ2pCLEtBQUssTUFBTSxVQUFVLElBQUksU0FBUztHQUM5QixNQUFNLFNBQVMsT0FBTyxLQUFLLElBQUk7SUFDM0IsT0FBTyxRQUFRO0lBQ2YsUUFBUSxDQUFDO0dBQ2IsR0FBRyxHQUFHO0dBQ04sSUFBSSxrQkFBa0IsU0FBUztJQUMzQixRQUFRLEtBQUssTUFBTTtJQUNuQixRQUFRO0dBQ1osT0FFSSxRQUFRLEtBQUssTUFBTTtFQUUzQjtFQUNBLElBQUksQ0FBQyxPQUNELE9BQU8sNEJBQTRCLFNBQVMsU0FBUyxNQUFNLEdBQUc7RUFDbEUsT0FBTyxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsTUFBTSxZQUFZO0dBQzFDLE9BQU8sNEJBQTRCLFNBQVMsU0FBUyxNQUFNLEdBQUc7RUFDbEUsQ0FBQztDQUNMO0FBQ0osQ0FBQztBQUNELElBQWEseUJBRWIsMkJBQWtCLDJCQUEyQixNQUFNLFFBQVE7Q0FDdkQsSUFBSSxZQUFZO0NBQ2hCLFVBQVUsS0FBSyxNQUFNLEdBQUc7Q0FDeEIsTUFBTSxTQUFTLEtBQUssS0FBSztDQUN6QixXQUFnQixLQUFLLE1BQU0sb0JBQW9CO0VBQzNDLE1BQU0sYUFBYSxDQUFDO0VBQ3BCLEtBQUssTUFBTSxVQUFVLElBQUksU0FBUztHQUM5QixNQUFNLEtBQUssT0FBTyxLQUFLO0dBQ3ZCLElBQUksQ0FBQyxNQUFNLE9BQU8sS0FBSyxFQUFFLENBQUMsQ0FBQyxXQUFXLEdBQ2xDLE1BQU0sSUFBSSxNQUFNLGdEQUFnRCxJQUFJLFFBQVEsUUFBUSxNQUFNLEVBQUUsRUFBRTtHQUNsRyxLQUFLLE1BQU0sQ0FBQyxHQUFHLE1BQU0sT0FBTyxRQUFRLEVBQUUsR0FBRztJQUNyQyxJQUFJLENBQUMsV0FBVyxJQUNaLFdBQVcscUJBQUssSUFBSSxJQUFJO0lBQzVCLEtBQUssTUFBTSxPQUFPLEdBQ2QsV0FBVyxFQUFFLENBQUMsSUFBSSxHQUFHO0dBRTdCO0VBQ0o7RUFDQSxPQUFPO0NBQ1gsQ0FBQztDQUNELE1BQU0sT0FBT1AsYUFBa0I7RUFDM0IsTUFBTSxPQUFPLElBQUk7RUFDakIsTUFBTSxzQkFBTSxJQUFJLElBQUk7RUFDcEIsS0FBSyxNQUFNLEtBQUssTUFBTTtHQUNsQixNQUFNLFNBQVMsRUFBRSxLQUFLLGFBQWEsSUFBSTtHQUN2QyxJQUFJLENBQUMsVUFBVSxPQUFPLFNBQVMsR0FDM0IsTUFBTSxJQUFJLE1BQU0sZ0RBQWdELElBQUksUUFBUSxRQUFRLENBQUMsRUFBRSxFQUFFO0dBQzdGLEtBQUssTUFBTSxLQUFLLFFBQVE7SUFDcEIsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUNULE1BQU0sSUFBSSxNQUFNLGtDQUFrQyxPQUFPLENBQUMsRUFBRSxFQUFFO0lBRWxFLElBQUksSUFBSSxHQUFHLENBQUM7R0FDaEI7RUFDSjtFQUNBLE9BQU87Q0FDWCxDQUFDO0NBQ0QsS0FBSyxLQUFLLFNBQVMsU0FBUyxRQUFRO0VBQ2hDLE1BQU0sUUFBUSxRQUFRO0VBQ3RCLElBQUksQ0FBQ0UsU0FBYyxLQUFLLEdBQUc7R0FDdkIsUUFBUSxPQUFPLEtBQUs7SUFDaEIsTUFBTTtJQUNOLFVBQVU7SUFDVjtJQUNBO0dBQ0osQ0FBQztHQUNELE9BQU87RUFDWDtFQUNBLE1BQU0sTUFBTSxLQUFLLE1BQU0sSUFBSSxRQUFRLElBQUksY0FBYztFQUNyRCxJQUFJLEtBQ0EsT0FBTyxJQUFJLEtBQUssSUFBSSxTQUFTLEdBQUc7RUFNcEMsSUFBSSxJQUFJLGlCQUFpQixJQUFJLGNBQWMsWUFDdkMsT0FBTyxPQUFPLFNBQVMsR0FBRztFQUc5QixRQUFRLE9BQU8sS0FBSztHQUNoQixNQUFNO0dBQ04sUUFBUSxDQUFDO0dBQ1QsTUFBTTtHQUNOLGVBQWUsSUFBSTtHQUNuQixTQUFTLE1BQU0sS0FBSyxLQUFLLE1BQU0sS0FBSyxDQUFDO0dBQ3JDO0dBQ0EsTUFBTSxDQUFDLElBQUksYUFBYTtHQUN4QjtFQUNKLENBQUM7RUFDRCxPQUFPO0NBQ1g7QUFDSixDQUFDO0FBQ0QsSUFBYSxtQkFBaUMsMkJBQWtCLHFCQUFxQixNQUFNLFFBQVE7Q0FDL0YsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUN2QixLQUFLLEtBQUssU0FBUyxTQUFTLFFBQVE7RUFDaEMsTUFBTSxRQUFRLFFBQVE7RUFDdEIsTUFBTSxPQUFPLElBQUksS0FBSyxLQUFLLElBQUk7R0FBRSxPQUFPO0dBQU8sUUFBUSxDQUFDO0VBQUUsR0FBRyxHQUFHO0VBQ2hFLE1BQU0sUUFBUSxJQUFJLE1BQU0sS0FBSyxJQUFJO0dBQUUsT0FBTztHQUFPLFFBQVEsQ0FBQztFQUFFLEdBQUcsR0FBRztFQUVsRSxJQURjLGdCQUFnQixXQUFXLGlCQUFpQixTQUV0RCxPQUFPLFFBQVEsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxXQUFXO0dBQ3RELE9BQU8sMEJBQTBCLFNBQVMsTUFBTSxLQUFLO0VBQ3pELENBQUM7RUFFTCxPQUFPLDBCQUEwQixTQUFTLE1BQU0sS0FBSztDQUN6RDtBQUNKLENBQUM7QUFDRCxTQUFTLFlBQVksR0FBRyxHQUFHO0NBR3ZCLElBQUksTUFBTSxHQUNOLE9BQU87RUFBRSxPQUFPO0VBQU0sTUFBTTtDQUFFO0NBRWxDLElBQUksYUFBYSxRQUFRLGFBQWEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUNsRCxPQUFPO0VBQUUsT0FBTztFQUFNLE1BQU07Q0FBRTtDQUVsQyxJQUFJTyxjQUFtQixDQUFDLEtBQUtBLGNBQW1CLENBQUMsR0FBRztFQUNoRCxNQUFNLFFBQVEsT0FBTyxLQUFLLENBQUM7RUFDM0IsTUFBTSxhQUFhLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLFFBQVEsTUFBTSxRQUFRLEdBQUcsTUFBTSxFQUFFO0VBQzNFLE1BQU0sU0FBUztHQUFFLEdBQUc7R0FBRyxHQUFHO0VBQUU7RUFDNUIsS0FBSyxNQUFNLE9BQU8sWUFBWTtHQUMxQixNQUFNLGNBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJO0dBQzlDLElBQUksQ0FBQyxZQUFZLE9BQ2IsT0FBTztJQUNILE9BQU87SUFDUCxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsWUFBWSxjQUFjO0dBQ3ZEO0dBRUosT0FBTyxPQUFPLFlBQVk7RUFDOUI7RUFDQSxPQUFPO0dBQUUsT0FBTztHQUFNLE1BQU07RUFBTztDQUN2QztDQUNBLElBQUksTUFBTSxRQUFRLENBQUMsS0FBSyxNQUFNLFFBQVEsQ0FBQyxHQUFHO0VBQ3RDLElBQUksRUFBRSxXQUFXLEVBQUUsUUFDZixPQUFPO0dBQUUsT0FBTztHQUFPLGdCQUFnQixDQUFDO0VBQUU7RUFFOUMsTUFBTSxXQUFXLENBQUM7RUFDbEIsS0FBSyxJQUFJLFFBQVEsR0FBRyxRQUFRLEVBQUUsUUFBUSxTQUFTO0dBQzNDLE1BQU0sUUFBUSxFQUFFO0dBQ2hCLE1BQU0sUUFBUSxFQUFFO0dBQ2hCLE1BQU0sY0FBYyxZQUFZLE9BQU8sS0FBSztHQUM1QyxJQUFJLENBQUMsWUFBWSxPQUNiLE9BQU87SUFDSCxPQUFPO0lBQ1AsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLFlBQVksY0FBYztHQUN6RDtHQUVKLFNBQVMsS0FBSyxZQUFZLElBQUk7RUFDbEM7RUFDQSxPQUFPO0dBQUUsT0FBTztHQUFNLE1BQU07RUFBUztDQUN6QztDQUNBLE9BQU87RUFBRSxPQUFPO0VBQU8sZ0JBQWdCLENBQUM7Q0FBRTtBQUM5QztBQUNBLFNBQVMsMEJBQTBCLFFBQVEsTUFBTSxPQUFPO0NBRXBELE1BQU0sNEJBQVksSUFBSSxJQUFJO0NBQzFCLElBQUk7Q0FDSixLQUFLLE1BQU0sT0FBTyxLQUFLLFFBQ25CLElBQUksSUFBSSxTQUFTLHFCQUFxQjtFQUNsQyxlQUFlLGFBQWE7RUFDNUIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNO0dBQ3RCLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxHQUNoQixVQUFVLElBQUksR0FBRyxDQUFDLENBQUM7R0FDdkIsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUk7RUFDekI7Q0FDSixPQUVJLE9BQU8sT0FBTyxLQUFLLEdBQUc7Q0FHOUIsS0FBSyxNQUFNLE9BQU8sTUFBTSxRQUNwQixJQUFJLElBQUksU0FBUyxxQkFDYixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU07RUFDdEIsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLEdBQ2hCLFVBQVUsSUFBSSxHQUFHLENBQUMsQ0FBQztFQUN2QixVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtDQUN6QjtNQUdBLE9BQU8sT0FBTyxLQUFLLEdBQUc7Q0FJOUIsTUFBTSxXQUFXLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0NBQzVFLElBQUksU0FBUyxVQUFVLFlBQ25CLE9BQU8sT0FBTyxLQUFLO0VBQUUsR0FBRztFQUFZLE1BQU07Q0FBUyxDQUFDO0NBRXhELElBQUk1QyxRQUFhLE1BQU0sR0FDbkIsT0FBTztDQUNYLE1BQU0sU0FBUyxZQUFZLEtBQUssT0FBTyxNQUFNLEtBQUs7Q0FDbEQsSUFBSSxDQUFDLE9BQU8sT0FDUixNQUFNLElBQUksTUFBTSx3Q0FBNkMsS0FBSyxVQUFVLE9BQU8sY0FBYyxHQUFHO0NBRXhHLE9BQU8sUUFBUSxPQUFPO0NBQ3RCLE9BQU87QUFDWDtBQUNBLElBQWEsWUFBMEIsMkJBQWtCLGNBQWMsTUFBTSxRQUFRO0NBQ2pGLFNBQVMsS0FBSyxNQUFNLEdBQUc7Q0FDdkIsTUFBTSxRQUFRLElBQUk7Q0FDbEIsS0FBSyxLQUFLLFNBQVMsU0FBUyxRQUFRO0VBQ2hDLE1BQU0sUUFBUSxRQUFRO0VBQ3RCLElBQUksQ0FBQyxNQUFNLFFBQVEsS0FBSyxHQUFHO0dBQ3ZCLFFBQVEsT0FBTyxLQUFLO0lBQ2hCO0lBQ0E7SUFDQSxVQUFVO0lBQ1YsTUFBTTtHQUNWLENBQUM7R0FDRCxPQUFPO0VBQ1g7RUFDQSxRQUFRLFFBQVEsQ0FBQztFQUNqQixNQUFNLFFBQVEsQ0FBQztFQUNmLE1BQU0sYUFBYSxpQkFBaUIsT0FBTyxPQUFPO0VBQ2xELE1BQU0sY0FBYyxpQkFBaUIsT0FBTyxRQUFRO0VBQ3BELElBQUksQ0FBQyxJQUFJLE1BQU07R0FDWCxJQUFJLE1BQU0sU0FBUyxZQUFZO0lBQzNCLFFBQVEsT0FBTyxLQUFLO0tBQ2hCLE1BQU07S0FDTixTQUFTO0tBQ1QsV0FBVztLQUNYO0tBQ0E7S0FDQSxRQUFRO0lBQ1osQ0FBQztJQUNELE9BQU87R0FDWDtHQUNBLElBQUksTUFBTSxTQUFTLE1BQU0sUUFDckIsUUFBUSxPQUFPLEtBQUs7SUFDaEIsTUFBTTtJQUNOLFNBQVMsTUFBTTtJQUNmLFdBQVc7SUFDWDtJQUNBO0lBQ0EsUUFBUTtHQUNaLENBQUM7RUFFVDtFQUtBLE1BQU0sY0FBYyxJQUFJLE1BQU0sTUFBTSxNQUFNO0VBQzFDLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztHQUNuQyxNQUFNLElBQUksTUFBTSxFQUFFLENBQUMsS0FBSyxJQUFJO0lBQUUsT0FBTyxNQUFNO0lBQUksUUFBUSxDQUFDO0dBQUUsR0FBRyxHQUFHO0dBQ2hFLElBQUksYUFBYSxTQUNiLE1BQU0sS0FBSyxFQUFFLE1BQU0sT0FBTztJQUN0QixZQUFZLEtBQUs7R0FDckIsQ0FBQyxDQUFDO1FBR0YsWUFBWSxLQUFLO0VBRXpCO0VBQ0EsSUFBSSxJQUFJLE1BQU07R0FDVixJQUFJLElBQUksTUFBTSxTQUFTO0dBQ3ZCLE1BQU0sT0FBTyxNQUFNLE1BQU0sTUFBTSxNQUFNO0dBQ3JDLEtBQUssTUFBTSxNQUFNLE1BQU07SUFDbkI7SUFDQSxNQUFNLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSTtLQUFFLE9BQU87S0FBSSxRQUFRLENBQUM7SUFBRSxHQUFHLEdBQUc7SUFDL0QsSUFBSSxrQkFBa0IsU0FDbEIsTUFBTSxLQUFLLE9BQU8sTUFBTSxNQUFNLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FHL0Qsa0JBQWtCLFFBQVEsU0FBUyxDQUFDO0dBRTVDO0VBQ0o7RUFDQSxJQUFJLE1BQU0sUUFDTixPQUFPLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxXQUFXLG1CQUFtQixhQUFhLFNBQVMsT0FBTyxPQUFPLFdBQVcsQ0FBQztFQUU1RyxPQUFPLG1CQUFtQixhQUFhLFNBQVMsT0FBTyxPQUFPLFdBQVc7Q0FDN0U7QUFDSixDQUFDO0FBQ0QsU0FBUyxpQkFBaUIsT0FBTyxLQUFLO0NBQ2xDLEtBQUssSUFBSSxJQUFJLE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxLQUNuQyxJQUFJLE1BQU0sRUFBRSxDQUFDLEtBQUssU0FBUyxZQUN2QixPQUFPLElBQUk7Q0FFbkIsT0FBTztBQUNYO0FBQ0EsU0FBUyxrQkFBa0IsUUFBUSxPQUFPLE9BQU87Q0FDN0MsSUFBSSxPQUFPLE9BQU8sUUFDZCxNQUFNLE9BQU8sS0FBSyxHQUFHaUMsYUFBa0IsT0FBTyxPQUFPLE1BQU0sQ0FBQztDQUVoRSxNQUFNLE1BQU0sU0FBUyxPQUFPO0FBQ2hDO0FBQ0EsU0FBUyxtQkFBbUIsYUFBYSxPQUFPLE9BQU8sT0FBTyxhQUFhO0NBSXZFLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztFQUNuQyxNQUFNLElBQUksWUFBWTtFQUN0QixNQUFNLFlBQVksSUFBSSxNQUFNO0VBQzVCLElBQUksRUFBRSxPQUFPLFFBQVE7R0FDakIsSUFBSSxDQUFDLGFBQWEsS0FBSyxhQUFhO0lBQ2hDLE1BQU0sTUFBTSxTQUFTO0lBQ3JCO0dBQ0o7R0FDQSxNQUFNLE9BQU8sS0FBSyxHQUFHQSxhQUFrQixHQUFHLEVBQUUsTUFBTSxDQUFDO0VBQ3ZEO0VBQ0EsTUFBTSxNQUFNLEtBQUssRUFBRTtDQUN2QjtDQU9BLEtBQUssSUFBSSxJQUFJLE1BQU0sTUFBTSxTQUFTLEdBQUcsS0FBSyxNQUFNLFFBQVEsS0FDcEQsSUFBSSxNQUFNLEVBQUUsQ0FBQyxLQUFLLFdBQVcsY0FBYyxNQUFNLE1BQU0sT0FBTyxLQUFBLEdBQzFELE1BQU0sTUFBTSxTQUFTO01BR3JCO0NBR1IsT0FBTztBQUNYO0FBQ0EsSUFBYSxhQUEyQiwyQkFBa0IsZUFBZSxNQUFNLFFBQVE7Q0FDbkYsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUN2QixLQUFLLEtBQUssU0FBUyxTQUFTLFFBQVE7RUFDaEMsTUFBTSxRQUFRLFFBQVE7RUFDdEIsSUFBSSxDQUFDVyxjQUFtQixLQUFLLEdBQUc7R0FDNUIsUUFBUSxPQUFPLEtBQUs7SUFDaEIsVUFBVTtJQUNWLE1BQU07SUFDTjtJQUNBO0dBQ0osQ0FBQztHQUNELE9BQU87RUFDWDtFQUNBLE1BQU0sUUFBUSxDQUFDO0VBQ2YsTUFBTSxTQUFTLElBQUksUUFBUSxLQUFLO0VBQ2hDLElBQUksUUFBUTtHQUNSLFFBQVEsUUFBUSxDQUFDO0dBQ2pCLE1BQU0sNkJBQWEsSUFBSSxJQUFJO0dBQzNCLEtBQUssTUFBTSxPQUFPLFFBQ2QsSUFBSSxPQUFPLFFBQVEsWUFBWSxPQUFPLFFBQVEsWUFBWSxPQUFPLFFBQVEsVUFBVTtJQUMvRSxXQUFXLElBQUksT0FBTyxRQUFRLFdBQVcsSUFBSSxTQUFTLElBQUksR0FBRztJQUM3RCxNQUFNLFlBQVksSUFBSSxRQUFRLEtBQUssSUFBSTtLQUFFLE9BQU87S0FBSyxRQUFRLENBQUM7SUFBRSxHQUFHLEdBQUc7SUFDdEUsSUFBSSxxQkFBcUIsU0FDckIsTUFBTSxJQUFJLE1BQU0sc0RBQXNEO0lBRTFFLElBQUksVUFBVSxPQUFPLFFBQVE7S0FDekIsUUFBUSxPQUFPLEtBQUs7TUFDaEIsTUFBTTtNQUNOLFFBQVE7TUFDUixRQUFRLFVBQVUsT0FBTyxLQUFLLFFBQVFILGNBQW1CLEtBQUssS0FBS0MsT0FBWSxDQUFDLENBQUM7TUFDakYsT0FBTztNQUNQLE1BQU0sQ0FBQyxHQUFHO01BQ1Y7S0FDSixDQUFDO0tBQ0Q7SUFDSjtJQUNBLE1BQU0sU0FBUyxVQUFVO0lBQ3pCLE1BQU0sU0FBUyxJQUFJLFVBQVUsS0FBSyxJQUFJO0tBQUUsT0FBTyxNQUFNO0tBQU0sUUFBUSxDQUFDO0lBQUUsR0FBRyxHQUFHO0lBQzVFLElBQUksa0JBQWtCLFNBQ2xCLE1BQU0sS0FBSyxPQUFPLE1BQU0sV0FBVztLQUMvQixJQUFJLE9BQU8sT0FBTyxRQUNkLFFBQVEsT0FBTyxLQUFLLEdBQUdULGFBQWtCLEtBQUssT0FBTyxNQUFNLENBQUM7S0FFaEUsUUFBUSxNQUFNLFVBQVUsT0FBTztJQUNuQyxDQUFDLENBQUM7U0FFRDtLQUNELElBQUksT0FBTyxPQUFPLFFBQ2QsUUFBUSxPQUFPLEtBQUssR0FBR0EsYUFBa0IsS0FBSyxPQUFPLE1BQU0sQ0FBQztLQUVoRSxRQUFRLE1BQU0sVUFBVSxPQUFPO0lBQ25DO0dBQ0o7R0FFSixJQUFJO0dBQ0osS0FBSyxNQUFNLE9BQU8sT0FDZCxJQUFJLENBQUMsV0FBVyxJQUFJLEdBQUcsR0FBRztJQUN0QixlQUFlLGdCQUFnQixDQUFDO0lBQ2hDLGFBQWEsS0FBSyxHQUFHO0dBQ3pCO0dBRUosSUFBSSxnQkFBZ0IsYUFBYSxTQUFTLEdBQ3RDLFFBQVEsT0FBTyxLQUFLO0lBQ2hCLE1BQU07SUFDTjtJQUNBO0lBQ0EsTUFBTTtHQUNWLENBQUM7RUFFVCxPQUNLO0dBQ0QsUUFBUSxRQUFRLENBQUM7R0FFakIsS0FBSyxNQUFNLE9BQU8sUUFBUSxRQUFRLEtBQUssR0FBRztJQUN0QyxJQUFJLFFBQVEsYUFDUjtJQUNKLElBQUksQ0FBQyxPQUFPLFVBQVUscUJBQXFCLEtBQUssT0FBTyxHQUFHLEdBQ3REO0lBQ0osSUFBSSxZQUFZLElBQUksUUFBUSxLQUFLLElBQUk7S0FBRSxPQUFPO0tBQUssUUFBUSxDQUFDO0lBQUUsR0FBRyxHQUFHO0lBQ3BFLElBQUkscUJBQXFCLFNBQ3JCLE1BQU0sSUFBSSxNQUFNLHNEQUFzRDtJQUsxRSxJQUR3QixPQUFPLFFBQVEsWUFBQSxTQUEyQixLQUFLLEdBQUcsS0FBSyxVQUFVLE9BQU8sUUFDM0U7S0FDakIsTUFBTSxjQUFjLElBQUksUUFBUSxLQUFLLElBQUk7TUFBRSxPQUFPLE9BQU8sR0FBRztNQUFHLFFBQVEsQ0FBQztLQUFFLEdBQUcsR0FBRztLQUNoRixJQUFJLHVCQUF1QixTQUN2QixNQUFNLElBQUksTUFBTSxzREFBc0Q7S0FFMUUsSUFBSSxZQUFZLE9BQU8sV0FBVyxHQUM5QixZQUFZO0lBRXBCO0lBQ0EsSUFBSSxVQUFVLE9BQU8sUUFBUTtLQUN6QixJQUFJLElBQUksU0FBUyxTQUViLFFBQVEsTUFBTSxPQUFPLE1BQU07VUFJM0IsUUFBUSxPQUFPLEtBQUs7TUFDaEIsTUFBTTtNQUNOLFFBQVE7TUFDUixRQUFRLFVBQVUsT0FBTyxLQUFLLFFBQVFRLGNBQW1CLEtBQUssS0FBS0MsT0FBWSxDQUFDLENBQUM7TUFDakYsT0FBTztNQUNQLE1BQU0sQ0FBQyxHQUFHO01BQ1Y7S0FDSixDQUFDO0tBRUw7SUFDSjtJQUNBLE1BQU0sU0FBUyxJQUFJLFVBQVUsS0FBSyxJQUFJO0tBQUUsT0FBTyxNQUFNO0tBQU0sUUFBUSxDQUFDO0lBQUUsR0FBRyxHQUFHO0lBQzVFLElBQUksa0JBQWtCLFNBQ2xCLE1BQU0sS0FBSyxPQUFPLE1BQU0sV0FBVztLQUMvQixJQUFJLE9BQU8sT0FBTyxRQUNkLFFBQVEsT0FBTyxLQUFLLEdBQUdULGFBQWtCLEtBQUssT0FBTyxNQUFNLENBQUM7S0FFaEUsUUFBUSxNQUFNLFVBQVUsU0FBUyxPQUFPO0lBQzVDLENBQUMsQ0FBQztTQUVEO0tBQ0QsSUFBSSxPQUFPLE9BQU8sUUFDZCxRQUFRLE9BQU8sS0FBSyxHQUFHQSxhQUFrQixLQUFLLE9BQU8sTUFBTSxDQUFDO0tBRWhFLFFBQVEsTUFBTSxVQUFVLFNBQVMsT0FBTztJQUM1QztHQUNKO0VBQ0o7RUFDQSxJQUFJLE1BQU0sUUFDTixPQUFPLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxXQUFXLE9BQU87RUFFaEQsT0FBTztDQUNYO0FBQ0osQ0FBQztBQUNELElBQWEsVUFBd0IsMkJBQWtCLFlBQVksTUFBTSxRQUFRO0NBQzdFLFNBQVMsS0FBSyxNQUFNLEdBQUc7Q0FDdkIsS0FBSyxLQUFLLFNBQVMsU0FBUyxRQUFRO0VBQ2hDLE1BQU0sUUFBUSxRQUFRO0VBQ3RCLElBQUksRUFBRSxpQkFBaUIsTUFBTTtHQUN6QixRQUFRLE9BQU8sS0FBSztJQUNoQixVQUFVO0lBQ1YsTUFBTTtJQUNOO0lBQ0E7R0FDSixDQUFDO0dBQ0QsT0FBTztFQUNYO0VBQ0EsTUFBTSxRQUFRLENBQUM7RUFDZixRQUFRLHdCQUFRLElBQUksSUFBSTtFQUN4QixLQUFLLE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTztHQUM5QixNQUFNLFlBQVksSUFBSSxRQUFRLEtBQUssSUFBSTtJQUFFLE9BQU87SUFBSyxRQUFRLENBQUM7R0FBRSxHQUFHLEdBQUc7R0FDdEUsTUFBTSxjQUFjLElBQUksVUFBVSxLQUFLLElBQUk7SUFBUztJQUFPLFFBQVEsQ0FBQztHQUFFLEdBQUcsR0FBRztHQUM1RSxJQUFJLHFCQUFxQixXQUFXLHVCQUF1QixTQUN2RCxNQUFNLEtBQUssUUFBUSxJQUFJLENBQUMsV0FBVyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLGlCQUFpQjtJQUNoRixnQkFBZ0IsV0FBVyxhQUFhLFNBQVMsS0FBSyxPQUFPLE1BQU0sR0FBRztHQUMxRSxDQUFDLENBQUM7UUFHRixnQkFBZ0IsV0FBVyxhQUFhLFNBQVMsS0FBSyxPQUFPLE1BQU0sR0FBRztFQUU5RTtFQUNBLElBQUksTUFBTSxRQUNOLE9BQU8sUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLFdBQVcsT0FBTztFQUNoRCxPQUFPO0NBQ1g7QUFDSixDQUFDO0FBQ0QsU0FBUyxnQkFBZ0IsV0FBVyxhQUFhLE9BQU8sS0FBSyxPQUFPLE1BQU0sS0FBSztDQUMzRSxJQUFJLFVBQVUsT0FBTyxRQUNqQixJQUFBLGlCQUEwQixJQUFJLE9BQU8sR0FBRyxHQUNwQyxNQUFNLE9BQU8sS0FBSyxHQUFHQSxhQUFrQixLQUFLLFVBQVUsTUFBTSxDQUFDO01BRzdELE1BQU0sT0FBTyxLQUFLO0VBQ2QsTUFBTTtFQUNOLFFBQVE7RUFDUjtFQUNBO0VBQ0EsUUFBUSxVQUFVLE9BQU8sS0FBSyxRQUFRUSxjQUFtQixLQUFLLEtBQUtDLE9BQVksQ0FBQyxDQUFDO0NBQ3JGLENBQUM7Q0FHVCxJQUFJLFlBQVksT0FBTyxRQUNuQixJQUFBLGlCQUEwQixJQUFJLE9BQU8sR0FBRyxHQUNwQyxNQUFNLE9BQU8sS0FBSyxHQUFHVCxhQUFrQixLQUFLLFlBQVksTUFBTSxDQUFDO01BRy9ELE1BQU0sT0FBTyxLQUFLO0VBQ2QsUUFBUTtFQUNSLE1BQU07RUFDTjtFQUNBO0VBQ0s7RUFDTCxRQUFRLFlBQVksT0FBTyxLQUFLLFFBQVFRLGNBQW1CLEtBQUssS0FBS0MsT0FBWSxDQUFDLENBQUM7Q0FDdkYsQ0FBQztDQUdULE1BQU0sTUFBTSxJQUFJLFVBQVUsT0FBTyxZQUFZLEtBQUs7QUFDdEQ7QUFDQSxJQUFhLFVBQXdCLDJCQUFrQixZQUFZLE1BQU0sUUFBUTtDQUM3RSxTQUFTLEtBQUssTUFBTSxHQUFHO0NBQ3ZCLEtBQUssS0FBSyxTQUFTLFNBQVMsUUFBUTtFQUNoQyxNQUFNLFFBQVEsUUFBUTtFQUN0QixJQUFJLEVBQUUsaUJBQWlCLE1BQU07R0FDekIsUUFBUSxPQUFPLEtBQUs7SUFDaEI7SUFDQTtJQUNBLFVBQVU7SUFDVixNQUFNO0dBQ1YsQ0FBQztHQUNELE9BQU87RUFDWDtFQUNBLE1BQU0sUUFBUSxDQUFDO0VBQ2YsUUFBUSx3QkFBUSxJQUFJLElBQUk7RUFDeEIsS0FBSyxNQUFNLFFBQVEsT0FBTztHQUN0QixNQUFNLFNBQVMsSUFBSSxVQUFVLEtBQUssSUFBSTtJQUFFLE9BQU87SUFBTSxRQUFRLENBQUM7R0FBRSxHQUFHLEdBQUc7R0FDdEUsSUFBSSxrQkFBa0IsU0FDbEIsTUFBTSxLQUFLLE9BQU8sTUFBTSxXQUFXLGdCQUFnQixRQUFRLE9BQU8sQ0FBQyxDQUFDO1FBR3BFLGdCQUFnQixRQUFRLE9BQU87RUFDdkM7RUFDQSxJQUFJLE1BQU0sUUFDTixPQUFPLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxXQUFXLE9BQU87RUFDaEQsT0FBTztDQUNYO0FBQ0osQ0FBQztBQUNELFNBQVMsZ0JBQWdCLFFBQVEsT0FBTztDQUNwQyxJQUFJLE9BQU8sT0FBTyxRQUNkLE1BQU0sT0FBTyxLQUFLLEdBQUcsT0FBTyxNQUFNO0NBRXRDLE1BQU0sTUFBTSxJQUFJLE9BQU8sS0FBSztBQUNoQztBQUNBLElBQWEsV0FBeUIsMkJBQWtCLGFBQWEsTUFBTSxRQUFRO0NBQy9FLFNBQVMsS0FBSyxNQUFNLEdBQUc7Q0FDdkIsTUFBTSxTQUFTRyxjQUFtQixJQUFJLE9BQU87Q0FDN0MsTUFBTSxZQUFZLElBQUksSUFBSSxNQUFNO0NBQ2hDLEtBQUssS0FBSyxTQUFTO0NBQ25CLEtBQUssS0FBSyxVQUFVLElBQUksT0FBTyxLQUFLLE9BQy9CLFFBQVEsTUFBQSxpQkFBNEIsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ2xELEtBQUssTUFBTyxPQUFPLE1BQU0sV0FBV0MsWUFBaUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFFLENBQUMsQ0FDeEUsS0FBSyxHQUFHLEVBQUUsR0FBRztDQUNsQixLQUFLLEtBQUssU0FBUyxTQUFTLFNBQVM7RUFDakMsTUFBTSxRQUFRLFFBQVE7RUFDdEIsSUFBSSxVQUFVLElBQUksS0FBSyxHQUNuQixPQUFPO0VBRVgsUUFBUSxPQUFPLEtBQUs7R0FDaEIsTUFBTTtHQUNOO0dBQ0E7R0FDQTtFQUNKLENBQUM7RUFDRCxPQUFPO0NBQ1g7QUFDSixDQUFDO0FBQ0QsSUFBYSxjQUE0QiwyQkFBa0IsZ0JBQWdCLE1BQU0sUUFBUTtDQUNyRixTQUFTLEtBQUssTUFBTSxHQUFHO0NBQ3ZCLElBQUksSUFBSSxPQUFPLFdBQVcsR0FDdEIsTUFBTSxJQUFJLE1BQU0sbURBQW1EO0NBRXZFLE1BQU0sU0FBUyxJQUFJLElBQUksSUFBSSxNQUFNO0NBQ2pDLEtBQUssS0FBSyxTQUFTO0NBQ25CLEtBQUssS0FBSyxVQUFVLElBQUksT0FBTyxLQUFLLElBQUksT0FDbkMsS0FBSyxNQUFPLE9BQU8sTUFBTSxXQUFXQSxZQUFpQixDQUFDLElBQUksSUFBSUEsWUFBaUIsRUFBRSxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBRSxDQUFDLENBQzFHLEtBQUssR0FBRyxFQUFFLEdBQUc7Q0FDbEIsS0FBSyxLQUFLLFNBQVMsU0FBUyxTQUFTO0VBQ2pDLE1BQU0sUUFBUSxRQUFRO0VBQ3RCLElBQUksT0FBTyxJQUFJLEtBQUssR0FDaEIsT0FBTztFQUVYLFFBQVEsT0FBTyxLQUFLO0dBQ2hCLE1BQU07R0FDTixRQUFRLElBQUk7R0FDWjtHQUNBO0VBQ0osQ0FBQztFQUNELE9BQU87Q0FDWDtBQUNKLENBQUM7QUFDRCxJQUFhLFdBQXlCLDJCQUFrQixhQUFhLE1BQU0sUUFBUTtDQUMvRSxTQUFTLEtBQUssTUFBTSxHQUFHO0NBQ3ZCLEtBQUssS0FBSyxTQUFTLFNBQVMsU0FBUztFQUNqQyxNQUFNLFFBQVEsUUFBUTtFQUV0QixJQUFJLGlCQUFpQixNQUNqQixPQUFPO0VBQ1gsUUFBUSxPQUFPLEtBQUs7R0FDaEIsVUFBVTtHQUNWLE1BQU07R0FDTjtHQUNBO0VBQ0osQ0FBQztFQUNELE9BQU87Q0FDWDtBQUNKLENBQUM7QUFDRCxJQUFhLGdCQUE4QiwyQkFBa0Isa0JBQWtCLE1BQU0sUUFBUTtDQUN6RixTQUFTLEtBQUssTUFBTSxHQUFHO0NBQ3ZCLEtBQUssS0FBSyxRQUFRO0NBQ2xCLEtBQUssS0FBSyxTQUFTLFNBQVMsUUFBUTtFQUNoQyxJQUFJLElBQUksY0FBYyxZQUNsQixNQUFNLElBQUlDLGdCQUFxQixLQUFLLFlBQVksSUFBSTtFQUV4RCxNQUFNLE9BQU8sSUFBSSxVQUFVLFFBQVEsT0FBTyxPQUFPO0VBQ2pELElBQUksSUFBSSxPQUVKLFFBRGUsZ0JBQWdCLFVBQVUsT0FBTyxRQUFRLFFBQVEsSUFBSSxFQUFBLENBQ3RELE1BQU0sV0FBVztHQUMzQixRQUFRLFFBQVE7R0FDaEIsUUFBUSxXQUFXO0dBQ25CLE9BQU87RUFDWCxDQUFDO0VBRUwsSUFBSSxnQkFBZ0IsU0FDaEIsTUFBTSxJQUFJN0MsZUFBb0I7RUFFbEMsUUFBUSxRQUFRO0VBQ2hCLFFBQVEsV0FBVztFQUNuQixPQUFPO0NBQ1g7QUFDSixDQUFDO0FBQ0QsU0FBUyxxQkFBcUIsUUFBUSxPQUFPO0NBQ3pDLElBQUksVUFBVSxLQUFBLE1BQWMsT0FBTyxPQUFPLFVBQVUsT0FBTyxXQUN2RCxPQUFPO0VBQUUsUUFBUSxDQUFDO0VBQUcsT0FBTyxLQUFBO0NBQVU7Q0FFMUMsT0FBTztBQUNYO0FBQ0EsSUFBYSxlQUE2QiwyQkFBa0IsaUJBQWlCLE1BQU0sUUFBUTtDQUN2RixTQUFTLEtBQUssTUFBTSxHQUFHO0NBQ3ZCLEtBQUssS0FBSyxRQUFRO0NBQ2xCLEtBQUssS0FBSyxTQUFTO0NBQ25CLFdBQWdCLEtBQUssTUFBTSxnQkFBZ0I7RUFDdkMsT0FBTyxJQUFJLFVBQVUsS0FBSyx5QkFBUyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksVUFBVSxLQUFLLFFBQVEsS0FBQSxDQUFTLENBQUMsSUFBSSxLQUFBO0NBQzVGLENBQUM7Q0FDRCxXQUFnQixLQUFLLE1BQU0saUJBQWlCO0VBQ3hDLE1BQU0sVUFBVSxJQUFJLFVBQVUsS0FBSztFQUNuQyxPQUFPLFVBQVUsSUFBSSxPQUFPLEtBQUt5QyxXQUFnQixRQUFRLE1BQU0sRUFBRSxJQUFJLElBQUksS0FBQTtDQUM3RSxDQUFDO0NBQ0QsS0FBSyxLQUFLLFNBQVMsU0FBUyxRQUFRO0VBQ2hDLElBQUksSUFBSSxVQUFVLEtBQUssVUFBVSxZQUFZO0dBQ3pDLE1BQU0sUUFBUSxRQUFRO0dBQ3RCLE1BQU0sU0FBUyxJQUFJLFVBQVUsS0FBSyxJQUFJLFNBQVMsR0FBRztHQUNsRCxJQUFJLGtCQUFrQixTQUNsQixPQUFPLE9BQU8sTUFBTSxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQztHQUM1RCxPQUFPLHFCQUFxQixRQUFRLEtBQUs7RUFDN0M7RUFDQSxJQUFJLFFBQVEsVUFBVSxLQUFBLEdBQ2xCLE9BQU87RUFFWCxPQUFPLElBQUksVUFBVSxLQUFLLElBQUksU0FBUyxHQUFHO0NBQzlDO0FBQ0osQ0FBQztBQUNELElBQWEsb0JBQWtDLDJCQUFrQixzQkFBc0IsTUFBTSxRQUFRO0NBRWpHLGFBQWEsS0FBSyxNQUFNLEdBQUc7Q0FFM0IsV0FBZ0IsS0FBSyxNQUFNLGdCQUFnQixJQUFJLFVBQVUsS0FBSyxNQUFNO0NBQ3BFLFdBQWdCLEtBQUssTUFBTSxpQkFBaUIsSUFBSSxVQUFVLEtBQUssT0FBTztDQUV0RSxLQUFLLEtBQUssU0FBUyxTQUFTLFFBQVE7RUFDaEMsT0FBTyxJQUFJLFVBQVUsS0FBSyxJQUFJLFNBQVMsR0FBRztDQUM5QztBQUNKLENBQUM7QUFDRCxJQUFhLGVBQTZCLDJCQUFrQixpQkFBaUIsTUFBTSxRQUFRO0NBQ3ZGLFNBQVMsS0FBSyxNQUFNLEdBQUc7Q0FDdkIsV0FBZ0IsS0FBSyxNQUFNLGVBQWUsSUFBSSxVQUFVLEtBQUssS0FBSztDQUNsRSxXQUFnQixLQUFLLE1BQU0sZ0JBQWdCLElBQUksVUFBVSxLQUFLLE1BQU07Q0FDcEUsV0FBZ0IsS0FBSyxNQUFNLGlCQUFpQjtFQUN4QyxNQUFNLFVBQVUsSUFBSSxVQUFVLEtBQUs7RUFDbkMsT0FBTyxVQUFVLElBQUksT0FBTyxLQUFLQSxXQUFnQixRQUFRLE1BQU0sRUFBRSxRQUFRLElBQUksS0FBQTtDQUNqRixDQUFDO0NBQ0QsV0FBZ0IsS0FBSyxNQUFNLGdCQUFnQjtFQUN2QyxPQUFPLElBQUksVUFBVSxLQUFLLHlCQUFTLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxVQUFVLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxLQUFBO0NBQ3ZGLENBQUM7Q0FDRCxLQUFLLEtBQUssU0FBUyxTQUFTLFFBQVE7RUFFaEMsSUFBSSxRQUFRLFVBQVUsTUFDbEIsT0FBTztFQUNYLE9BQU8sSUFBSSxVQUFVLEtBQUssSUFBSSxTQUFTLEdBQUc7Q0FDOUM7QUFDSixDQUFDO0FBQ0QsSUFBYSxjQUE0QiwyQkFBa0IsZ0JBQWdCLE1BQU0sUUFBUTtDQUNyRixTQUFTLEtBQUssTUFBTSxHQUFHO0NBRXZCLEtBQUssS0FBSyxRQUFRO0NBQ2xCLFdBQWdCLEtBQUssTUFBTSxnQkFBZ0IsSUFBSSxVQUFVLEtBQUssTUFBTTtDQUNwRSxLQUFLLEtBQUssU0FBUyxTQUFTLFFBQVE7RUFDaEMsSUFBSSxJQUFJLGNBQWMsWUFDbEIsT0FBTyxJQUFJLFVBQVUsS0FBSyxJQUFJLFNBQVMsR0FBRztFQUc5QyxJQUFJLFFBQVEsVUFBVSxLQUFBLEdBQVc7R0FDN0IsUUFBUSxRQUFRLElBQUk7Ozs7R0FJcEIsT0FBTztFQUNYO0VBRUEsTUFBTSxTQUFTLElBQUksVUFBVSxLQUFLLElBQUksU0FBUyxHQUFHO0VBQ2xELElBQUksa0JBQWtCLFNBQ2xCLE9BQU8sT0FBTyxNQUFNLFdBQVcsb0JBQW9CLFFBQVEsR0FBRyxDQUFDO0VBRW5FLE9BQU8sb0JBQW9CLFFBQVEsR0FBRztDQUMxQztBQUNKLENBQUM7QUFDRCxTQUFTLG9CQUFvQixTQUFTLEtBQUs7Q0FDdkMsSUFBSSxRQUFRLFVBQVUsS0FBQSxHQUNsQixRQUFRLFFBQVEsSUFBSTtDQUV4QixPQUFPO0FBQ1g7QUFDQSxJQUFhLGVBQTZCLDJCQUFrQixpQkFBaUIsTUFBTSxRQUFRO0NBQ3ZGLFNBQVMsS0FBSyxNQUFNLEdBQUc7Q0FDdkIsS0FBSyxLQUFLLFFBQVE7Q0FDbEIsV0FBZ0IsS0FBSyxNQUFNLGdCQUFnQixJQUFJLFVBQVUsS0FBSyxNQUFNO0NBQ3BFLEtBQUssS0FBSyxTQUFTLFNBQVMsUUFBUTtFQUNoQyxJQUFJLElBQUksY0FBYyxZQUNsQixPQUFPLElBQUksVUFBVSxLQUFLLElBQUksU0FBUyxHQUFHO0VBRzlDLElBQUksUUFBUSxVQUFVLEtBQUEsR0FDbEIsUUFBUSxRQUFRLElBQUk7RUFFeEIsT0FBTyxJQUFJLFVBQVUsS0FBSyxJQUFJLFNBQVMsR0FBRztDQUM5QztBQUNKLENBQUM7QUFDRCxJQUFhLGtCQUFnQywyQkFBa0Isb0JBQW9CLE1BQU0sUUFBUTtDQUM3RixTQUFTLEtBQUssTUFBTSxHQUFHO0NBQ3ZCLFdBQWdCLEtBQUssTUFBTSxnQkFBZ0I7RUFDdkMsTUFBTSxJQUFJLElBQUksVUFBVSxLQUFLO0VBQzdCLE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsTUFBTSxNQUFNLEtBQUEsQ0FBUyxDQUFDLElBQUksS0FBQTtDQUNoRSxDQUFDO0NBQ0QsS0FBSyxLQUFLLFNBQVMsU0FBUyxRQUFRO0VBQ2hDLE1BQU0sU0FBUyxJQUFJLFVBQVUsS0FBSyxJQUFJLFNBQVMsR0FBRztFQUNsRCxJQUFJLGtCQUFrQixTQUNsQixPQUFPLE9BQU8sTUFBTSxXQUFXLHdCQUF3QixRQUFRLElBQUksQ0FBQztFQUV4RSxPQUFPLHdCQUF3QixRQUFRLElBQUk7Q0FDL0M7QUFDSixDQUFDO0FBQ0QsU0FBUyx3QkFBd0IsU0FBUyxNQUFNO0NBQzVDLElBQUksQ0FBQyxRQUFRLE9BQU8sVUFBVSxRQUFRLFVBQVUsS0FBQSxHQUM1QyxRQUFRLE9BQU8sS0FBSztFQUNoQixNQUFNO0VBQ04sVUFBVTtFQUNWLE9BQU8sUUFBUTtFQUNmO0NBQ0osQ0FBQztDQUVMLE9BQU87QUFDWDtBQUNBLElBQWEsY0FBNEIsMkJBQWtCLGdCQUFnQixNQUFNLFFBQVE7Q0FDckYsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUN2QixLQUFLLEtBQUssU0FBUyxTQUFTLFFBQVE7RUFDaEMsSUFBSSxJQUFJLGNBQWMsWUFDbEIsTUFBTSxJQUFJSSxnQkFBcUIsWUFBWTtFQUUvQyxNQUFNLFNBQVMsSUFBSSxVQUFVLEtBQUssSUFBSSxTQUFTLEdBQUc7RUFDbEQsSUFBSSxrQkFBa0IsU0FDbEIsT0FBTyxPQUFPLE1BQU0sV0FBVztHQUMzQixRQUFRLFFBQVEsT0FBTyxPQUFPLFdBQVc7R0FDekMsT0FBTztFQUNYLENBQUM7RUFFTCxRQUFRLFFBQVEsT0FBTyxPQUFPLFdBQVc7RUFDekMsT0FBTztDQUNYO0FBQ0osQ0FBQztBQUNELElBQWEsWUFBMEIsMkJBQWtCLGNBQWMsTUFBTSxRQUFRO0NBQ2pGLFNBQVMsS0FBSyxNQUFNLEdBQUc7Q0FDdkIsS0FBSyxLQUFLLFFBQVE7Q0FDbEIsV0FBZ0IsS0FBSyxNQUFNLGdCQUFnQixJQUFJLFVBQVUsS0FBSyxNQUFNO0NBQ3BFLFdBQWdCLEtBQUssTUFBTSxnQkFBZ0IsSUFBSSxVQUFVLEtBQUssTUFBTTtDQUNwRSxLQUFLLEtBQUssU0FBUyxTQUFTLFFBQVE7RUFDaEMsSUFBSSxJQUFJLGNBQWMsWUFDbEIsT0FBTyxJQUFJLFVBQVUsS0FBSyxJQUFJLFNBQVMsR0FBRztFQUc5QyxNQUFNLFNBQVMsSUFBSSxVQUFVLEtBQUssSUFBSSxTQUFTLEdBQUc7RUFDbEQsSUFBSSxrQkFBa0IsU0FDbEIsT0FBTyxPQUFPLE1BQU0sV0FBVztHQUMzQixRQUFRLFFBQVEsT0FBTztHQUN2QixJQUFJLE9BQU8sT0FBTyxRQUFRO0lBQ3RCLFFBQVEsUUFBUSxJQUFJLFdBQVc7S0FDM0IsR0FBRztLQUNILE9BQU8sRUFDSCxRQUFRLE9BQU8sT0FBTyxLQUFLLFFBQVFOLGNBQW1CLEtBQUssS0FBS0MsT0FBWSxDQUFDLENBQUMsRUFDbEY7S0FDQSxPQUFPLFFBQVE7SUFDbkIsQ0FBQztJQUNELFFBQVEsU0FBUyxDQUFDO0lBQ2xCLFFBQVEsV0FBVztHQUN2QjtHQUNBLE9BQU87RUFDWCxDQUFDO0VBRUwsUUFBUSxRQUFRLE9BQU87RUFDdkIsSUFBSSxPQUFPLE9BQU8sUUFBUTtHQUN0QixRQUFRLFFBQVEsSUFBSSxXQUFXO0lBQzNCLEdBQUc7SUFDSCxPQUFPLEVBQ0gsUUFBUSxPQUFPLE9BQU8sS0FBSyxRQUFRRCxjQUFtQixLQUFLLEtBQUtDLE9BQVksQ0FBQyxDQUFDLEVBQ2xGO0lBQ0EsT0FBTyxRQUFRO0dBQ25CLENBQUM7R0FDRCxRQUFRLFNBQVMsQ0FBQztHQUNsQixRQUFRLFdBQVc7RUFDdkI7RUFDQSxPQUFPO0NBQ1g7QUFDSixDQUFDO0FBQ0QsSUFBYSxVQUF3QiwyQkFBa0IsWUFBWSxNQUFNLFFBQVE7Q0FDN0UsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUN2QixLQUFLLEtBQUssU0FBUyxTQUFTLFNBQVM7RUFDakMsSUFBSSxPQUFPLFFBQVEsVUFBVSxZQUFZLENBQUMsT0FBTyxNQUFNLFFBQVEsS0FBSyxHQUFHO0dBQ25FLFFBQVEsT0FBTyxLQUFLO0lBQ2hCLE9BQU8sUUFBUTtJQUNmO0lBQ0EsVUFBVTtJQUNWLE1BQU07R0FDVixDQUFDO0dBQ0QsT0FBTztFQUNYO0VBQ0EsT0FBTztDQUNYO0FBQ0osQ0FBQztBQUNELElBQWEsV0FBeUIsMkJBQWtCLGFBQWEsTUFBTSxRQUFRO0NBQy9FLFNBQVMsS0FBSyxNQUFNLEdBQUc7Q0FDdkIsV0FBZ0IsS0FBSyxNQUFNLGdCQUFnQixJQUFJLEdBQUcsS0FBSyxNQUFNO0NBQzdELFdBQWdCLEtBQUssTUFBTSxlQUFlLElBQUksR0FBRyxLQUFLLEtBQUs7Q0FDM0QsV0FBZ0IsS0FBSyxNQUFNLGdCQUFnQixJQUFJLElBQUksS0FBSyxNQUFNO0NBQzlELFdBQWdCLEtBQUssTUFBTSxvQkFBb0IsSUFBSSxHQUFHLEtBQUssVUFBVTtDQUNyRSxLQUFLLEtBQUssU0FBUyxTQUFTLFFBQVE7RUFDaEMsSUFBSSxJQUFJLGNBQWMsWUFBWTtHQUM5QixNQUFNLFFBQVEsSUFBSSxJQUFJLEtBQUssSUFBSSxTQUFTLEdBQUc7R0FDM0MsSUFBSSxpQkFBaUIsU0FDakIsT0FBTyxNQUFNLE1BQU0sVUFBVSxpQkFBaUIsT0FBTyxJQUFJLElBQUksR0FBRyxDQUFDO0dBRXJFLE9BQU8saUJBQWlCLE9BQU8sSUFBSSxJQUFJLEdBQUc7RUFDOUM7RUFDQSxNQUFNLE9BQU8sSUFBSSxHQUFHLEtBQUssSUFBSSxTQUFTLEdBQUc7RUFDekMsSUFBSSxnQkFBZ0IsU0FDaEIsT0FBTyxLQUFLLE1BQU0sU0FBUyxpQkFBaUIsTUFBTSxJQUFJLEtBQUssR0FBRyxDQUFDO0VBRW5FLE9BQU8saUJBQWlCLE1BQU0sSUFBSSxLQUFLLEdBQUc7Q0FDOUM7QUFDSixDQUFDO0FBQ0QsU0FBUyxpQkFBaUIsTUFBTSxNQUFNLEtBQUs7Q0FDdkMsSUFBSSxLQUFLLE9BQU8sUUFBUTtFQUVwQixLQUFLLFVBQVU7RUFDZixPQUFPO0NBQ1g7Q0FDQSxPQUFPLEtBQUssS0FBSyxJQUFJO0VBQUUsT0FBTyxLQUFLO0VBQU8sUUFBUSxLQUFLO0VBQVEsVUFBVSxLQUFLO0NBQVMsR0FBRyxHQUFHO0FBQ2pHO0FBQ0EsSUFBYSxZQUEwQiwyQkFBa0IsY0FBYyxNQUFNLFFBQVE7Q0FDakYsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUN2QixXQUFnQixLQUFLLE1BQU0sZ0JBQWdCLElBQUksR0FBRyxLQUFLLE1BQU07Q0FDN0QsV0FBZ0IsS0FBSyxNQUFNLGVBQWUsSUFBSSxHQUFHLEtBQUssS0FBSztDQUMzRCxXQUFnQixLQUFLLE1BQU0sZ0JBQWdCLElBQUksSUFBSSxLQUFLLE1BQU07Q0FDOUQsV0FBZ0IsS0FBSyxNQUFNLG9CQUFvQixJQUFJLEdBQUcsS0FBSyxVQUFVO0NBQ3JFLEtBQUssS0FBSyxTQUFTLFNBQVMsUUFBUTtFQUVoQyxLQURrQixJQUFJLGFBQWEsZUFDakIsV0FBVztHQUN6QixNQUFNLE9BQU8sSUFBSSxHQUFHLEtBQUssSUFBSSxTQUFTLEdBQUc7R0FDekMsSUFBSSxnQkFBZ0IsU0FDaEIsT0FBTyxLQUFLLE1BQU0sU0FBUyxtQkFBbUIsTUFBTSxLQUFLLEdBQUcsQ0FBQztHQUVqRSxPQUFPLG1CQUFtQixNQUFNLEtBQUssR0FBRztFQUM1QyxPQUNLO0dBQ0QsTUFBTSxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksU0FBUyxHQUFHO0dBQzNDLElBQUksaUJBQWlCLFNBQ2pCLE9BQU8sTUFBTSxNQUFNLFVBQVUsbUJBQW1CLE9BQU8sS0FBSyxHQUFHLENBQUM7R0FFcEUsT0FBTyxtQkFBbUIsT0FBTyxLQUFLLEdBQUc7RUFDN0M7Q0FDSjtBQUNKLENBQUM7QUFDRCxTQUFTLG1CQUFtQixRQUFRLEtBQUssS0FBSztDQUMxQyxJQUFJLE9BQU8sT0FBTyxRQUFRO0VBRXRCLE9BQU8sVUFBVTtFQUNqQixPQUFPO0NBQ1g7Q0FFQSxLQURrQixJQUFJLGFBQWEsZUFDakIsV0FBVztFQUN6QixNQUFNLGNBQWMsSUFBSSxVQUFVLE9BQU8sT0FBTyxNQUFNO0VBQ3RELElBQUksdUJBQXVCLFNBQ3ZCLE9BQU8sWUFBWSxNQUFNLFVBQVUsb0JBQW9CLFFBQVEsT0FBTyxJQUFJLEtBQUssR0FBRyxDQUFDO0VBRXZGLE9BQU8sb0JBQW9CLFFBQVEsYUFBYSxJQUFJLEtBQUssR0FBRztDQUNoRSxPQUNLO0VBQ0QsTUFBTSxjQUFjLElBQUksaUJBQWlCLE9BQU8sT0FBTyxNQUFNO0VBQzdELElBQUksdUJBQXVCLFNBQ3ZCLE9BQU8sWUFBWSxNQUFNLFVBQVUsb0JBQW9CLFFBQVEsT0FBTyxJQUFJLElBQUksR0FBRyxDQUFDO0VBRXRGLE9BQU8sb0JBQW9CLFFBQVEsYUFBYSxJQUFJLElBQUksR0FBRztDQUMvRDtBQUNKO0FBQ0EsU0FBUyxvQkFBb0IsTUFBTSxPQUFPLFlBQVksS0FBSztDQUV2RCxJQUFJLEtBQUssT0FBTyxRQUFRO0VBQ3BCLEtBQUssVUFBVTtFQUNmLE9BQU87Q0FDWDtDQUNBLE9BQU8sV0FBVyxLQUFLLElBQUk7RUFBRTtFQUFPLFFBQVEsS0FBSztDQUFPLEdBQUcsR0FBRztBQUNsRTtBQUNBLElBQWEsaUJBQStCLDJCQUFrQixtQkFBbUIsTUFBTSxRQUFRO0NBQzNGLFNBQVMsS0FBSyxNQUFNLEdBQUc7QUFDM0IsQ0FBQztBQUNELElBQWEsZUFBNkIsMkJBQWtCLGlCQUFpQixNQUFNLFFBQVE7Q0FDdkYsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUN2QixXQUFnQixLQUFLLE1BQU0sb0JBQW9CLElBQUksVUFBVSxLQUFLLFVBQVU7Q0FDNUUsV0FBZ0IsS0FBSyxNQUFNLGdCQUFnQixJQUFJLFVBQVUsS0FBSyxNQUFNO0NBQ3BFLFdBQWdCLEtBQUssTUFBTSxlQUFlLElBQUksV0FBVyxNQUFNLEtBQUs7Q0FDcEUsV0FBZ0IsS0FBSyxNQUFNLGdCQUFnQixJQUFJLFdBQVcsTUFBTSxNQUFNO0NBQ3RFLEtBQUssS0FBSyxTQUFTLFNBQVMsUUFBUTtFQUNoQyxJQUFJLElBQUksY0FBYyxZQUNsQixPQUFPLElBQUksVUFBVSxLQUFLLElBQUksU0FBUyxHQUFHO0VBRTlDLE1BQU0sU0FBUyxJQUFJLFVBQVUsS0FBSyxJQUFJLFNBQVMsR0FBRztFQUNsRCxJQUFJLGtCQUFrQixTQUNsQixPQUFPLE9BQU8sS0FBSyxvQkFBb0I7RUFFM0MsT0FBTyxxQkFBcUIsTUFBTTtDQUN0QztBQUNKLENBQUM7QUFDRCxTQUFTLHFCQUFxQixTQUFTO0NBQ25DLFFBQVEsUUFBUSxPQUFPLE9BQU8sUUFBUSxLQUFLO0NBQzNDLE9BQU87QUFDWDtBQUNBLElBQWEsc0JBQW9DLDJCQUFrQix3QkFBd0IsTUFBTSxRQUFRO0NBQ3JHLFNBQVMsS0FBSyxNQUFNLEdBQUc7Q0FDdkIsTUFBTSxhQUFhLENBQUM7Q0FDcEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxPQUNuQixJQUFJLE9BQU8sU0FBUyxZQUFZLFNBQVMsTUFBTTtFQUUzQyxJQUFJLENBQUMsS0FBSyxLQUFLLFNBRVgsTUFBTSxJQUFJLE1BQU0sb0RBQW9ELENBQUMsR0FBRyxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHO0VBRXZHLE1BQU0sU0FBUyxLQUFLLEtBQUssbUJBQW1CLFNBQVMsS0FBSyxLQUFLLFFBQVEsU0FBUyxLQUFLLEtBQUs7RUFDMUYsSUFBSSxDQUFDLFFBQ0QsTUFBTSxJQUFJLE1BQU0sa0NBQWtDLEtBQUssS0FBSyxRQUFRO0VBQ3hFLE1BQU0sUUFBUSxPQUFPLFdBQVcsR0FBRyxJQUFJLElBQUk7RUFDM0MsTUFBTSxNQUFNLE9BQU8sU0FBUyxHQUFHLElBQUksT0FBTyxTQUFTLElBQUksT0FBTztFQUM5RCxXQUFXLEtBQUssT0FBTyxNQUFNLE9BQU8sR0FBRyxDQUFDO0NBQzVDLE9BQ0ssSUFBSSxTQUFTLFFBQUEsZUFBNEIsSUFBSSxPQUFPLElBQUksR0FDekQsV0FBVyxLQUFLSSxZQUFpQixHQUFHLE1BQU0sQ0FBQztNQUczQyxNQUFNLElBQUksTUFBTSxrQ0FBa0MsTUFBTTtDQUdoRSxLQUFLLEtBQUssVUFBVSxJQUFJLE9BQU8sSUFBSSxXQUFXLEtBQUssRUFBRSxFQUFFLEVBQUU7Q0FDekQsS0FBSyxLQUFLLFNBQVMsU0FBUyxTQUFTO0VBQ2pDLElBQUksT0FBTyxRQUFRLFVBQVUsVUFBVTtHQUNuQyxRQUFRLE9BQU8sS0FBSztJQUNoQixPQUFPLFFBQVE7SUFDZjtJQUNBLFVBQVU7SUFDVixNQUFNO0dBQ1YsQ0FBQztHQUNELE9BQU87RUFDWDtFQUNBLEtBQUssS0FBSyxRQUFRLFlBQVk7RUFDOUIsSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLEtBQUssUUFBUSxLQUFLLEdBQUc7R0FDeEMsUUFBUSxPQUFPLEtBQUs7SUFDaEIsT0FBTyxRQUFRO0lBQ2Y7SUFDQSxNQUFNO0lBQ04sUUFBUSxJQUFJLFVBQVU7SUFDdEIsU0FBUyxLQUFLLEtBQUssUUFBUTtHQUMvQixDQUFDO0dBQ0QsT0FBTztFQUNYO0VBQ0EsT0FBTztDQUNYO0FBQ0osQ0FBQztBQUNELElBQWEsZUFBNkIsMkJBQWtCLGlCQUFpQixNQUFNLFFBQVE7Q0FDdkYsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUN2QixLQUFLLE9BQU87Q0FDWixLQUFLLEtBQUssTUFBTTtDQUNoQixLQUFLLGFBQWEsU0FBUztFQUN2QixJQUFJLE9BQU8sU0FBUyxZQUNoQixNQUFNLElBQUksTUFBTSw0Q0FBNEM7RUFFaEUsT0FBTyxTQUFVLEdBQUcsTUFBTTtHQUN0QixNQUFNLGFBQWEsS0FBSyxLQUFLLFFBQVFFLFFBQU0sS0FBSyxLQUFLLE9BQU8sSUFBSSxJQUFJO0dBQ3BFLE1BQU0sU0FBUyxRQUFRLE1BQU0sTUFBTSxNQUFNLFVBQVU7R0FDbkQsSUFBSSxLQUFLLEtBQUssUUFDVixPQUFPQSxRQUFNLEtBQUssS0FBSyxRQUFRLE1BQU07R0FFekMsT0FBTztFQUNYO0NBQ0o7Q0FDQSxLQUFLLGtCQUFrQixTQUFTO0VBQzVCLElBQUksT0FBTyxTQUFTLFlBQ2hCLE1BQU0sSUFBSSxNQUFNLGlEQUFpRDtFQUVyRSxPQUFPLGVBQWdCLEdBQUcsTUFBTTtHQUM1QixNQUFNLGFBQWEsS0FBSyxLQUFLLFFBQVEsTUFBTUMsYUFBVyxLQUFLLEtBQUssT0FBTyxJQUFJLElBQUk7R0FDL0UsTUFBTSxTQUFTLE1BQU0sUUFBUSxNQUFNLE1BQU0sTUFBTSxVQUFVO0dBQ3pELElBQUksS0FBSyxLQUFLLFFBQ1YsT0FBTyxNQUFNQSxhQUFXLEtBQUssS0FBSyxRQUFRLE1BQU07R0FFcEQsT0FBTztFQUNYO0NBQ0o7Q0FDQSxLQUFLLEtBQUssU0FBUyxTQUFTLFNBQVM7RUFDakMsSUFBSSxPQUFPLFFBQVEsVUFBVSxZQUFZO0dBQ3JDLFFBQVEsT0FBTyxLQUFLO0lBQ2hCLE1BQU07SUFDTixVQUFVO0lBQ1YsT0FBTyxRQUFRO0lBQ2Y7R0FDSixDQUFDO0dBQ0QsT0FBTztFQUNYO0VBR0EsSUFEeUIsS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLE9BQU8sS0FBSyxJQUFJLFNBQVMsV0FFNUUsUUFBUSxRQUFRLEtBQUssZUFBZSxRQUFRLEtBQUs7T0FHakQsUUFBUSxRQUFRLEtBQUssVUFBVSxRQUFRLEtBQUs7RUFFaEQsT0FBTztDQUNYO0NBQ0EsS0FBSyxTQUFTLEdBQUcsU0FBUztFQUN0QixNQUFNLElBQUksS0FBSztFQUNmLElBQUksTUFBTSxRQUFRLEtBQUssRUFBRSxHQUNyQixPQUFPLElBQUksRUFBRTtHQUNULE1BQU07R0FDTixPQUFPLElBQUksVUFBVTtJQUNqQixNQUFNO0lBQ04sT0FBTyxLQUFLO0lBQ1osTUFBTSxLQUFLO0dBQ2YsQ0FBQztHQUNELFFBQVEsS0FBSyxLQUFLO0VBQ3RCLENBQUM7RUFFTCxPQUFPLElBQUksRUFBRTtHQUNULE1BQU07R0FDTixPQUFPLEtBQUs7R0FDWixRQUFRLEtBQUssS0FBSztFQUN0QixDQUFDO0NBQ0w7Q0FDQSxLQUFLLFVBQVUsV0FBVztFQUN0QixNQUFNLElBQUksS0FBSztFQUNmLE9BQU8sSUFBSSxFQUFFO0dBQ1QsTUFBTTtHQUNOLE9BQU8sS0FBSyxLQUFLO0dBQ2pCO0VBQ0osQ0FBQztDQUNMO0NBQ0EsT0FBTztBQUNYLENBQUM7QUFDRCxJQUFhLGNBQTRCLDJCQUFrQixnQkFBZ0IsTUFBTSxRQUFRO0NBQ3JGLFNBQVMsS0FBSyxNQUFNLEdBQUc7Q0FDdkIsS0FBSyxLQUFLLFNBQVMsU0FBUyxRQUFRO0VBQ2hDLE9BQU8sUUFBUSxRQUFRLFFBQVEsS0FBSyxDQUFDLENBQUMsTUFBTSxVQUFVLElBQUksVUFBVSxLQUFLLElBQUk7R0FBRSxPQUFPO0dBQU8sUUFBUSxDQUFDO0VBQUUsR0FBRyxHQUFHLENBQUM7Q0FDbkg7QUFDSixDQUFDO0FBQ0QsSUFBYSxXQUF5QiwyQkFBa0IsYUFBYSxNQUFNLFFBQVE7Q0FDL0UsU0FBUyxLQUFLLE1BQU0sR0FBRztDQUl2QixXQUFnQixLQUFLLE1BQU0sbUJBQW1CO0VBQzFDLE1BQU0sSUFBSTtFQUNWLElBQUksQ0FBQyxFQUFFLGNBQ0gsRUFBRSxlQUFlLElBQUksT0FBTztFQUNoQyxPQUFPLEVBQUU7Q0FDYixDQUFDO0NBQ0QsV0FBZ0IsS0FBSyxNQUFNLGlCQUFpQixLQUFLLEtBQUssV0FBVyxNQUFNLE9BQU87Q0FDOUUsV0FBZ0IsS0FBSyxNQUFNLG9CQUFvQixLQUFLLEtBQUssV0FBVyxNQUFNLFVBQVU7Q0FDcEYsV0FBZ0IsS0FBSyxNQUFNLGVBQWUsS0FBSyxLQUFLLFdBQVcsTUFBTSxTQUFTLEtBQUEsQ0FBUztDQUN2RixXQUFnQixLQUFLLE1BQU0sZ0JBQWdCLEtBQUssS0FBSyxXQUFXLE1BQU0sVUFBVSxLQUFBLENBQVM7Q0FDekYsS0FBSyxLQUFLLFNBQVMsU0FBUyxRQUFRO0VBRWhDLE9BRGMsS0FBSyxLQUFLLFVBQ1gsS0FBSyxJQUFJLFNBQVMsR0FBRztDQUN0QztBQUNKLENBQUM7QUFDRCxJQUFhLGFBQTJCLDJCQUFrQixlQUFlLE1BQU0sUUFBUTtDQUNuRixVQUFpQixLQUFLLE1BQU0sR0FBRztDQUMvQixTQUFTLEtBQUssTUFBTSxHQUFHO0NBQ3ZCLEtBQUssS0FBSyxTQUFTLFNBQVMsTUFBTTtFQUM5QixPQUFPO0NBQ1g7Q0FDQSxLQUFLLEtBQUssU0FBUyxZQUFZO0VBQzNCLE1BQU0sUUFBUSxRQUFRO0VBQ3RCLE1BQU0sSUFBSSxJQUFJLEdBQUcsS0FBSztFQUN0QixJQUFJLGFBQWEsU0FDYixPQUFPLEVBQUUsTUFBTSxNQUFNLG1CQUFtQixHQUFHLFNBQVMsT0FBTyxJQUFJLENBQUM7RUFFcEUsbUJBQW1CLEdBQUcsU0FBUyxPQUFPLElBQUk7Q0FFOUM7QUFDSixDQUFDO0FBQ0QsU0FBUyxtQkFBbUIsUUFBUSxTQUFTLE9BQU8sTUFBTTtDQUN0RCxJQUFJLENBQUMsUUFBUTtFQUNULE1BQU0sT0FBTztHQUNULE1BQU07R0FDTjtHQUNBO0dBQ0EsTUFBTSxDQUFDLEdBQUksS0FBSyxLQUFLLElBQUksUUFBUSxDQUFDLENBQUU7R0FDcEMsVUFBVSxDQUFDLEtBQUssS0FBSyxJQUFJO0VBRTdCO0VBQ0EsSUFBSSxLQUFLLEtBQUssSUFBSSxRQUNkLEtBQUssU0FBUyxLQUFLLEtBQUssSUFBSTtFQUNoQyxRQUFRLE9BQU8sS0FBS0MsTUFBVyxJQUFJLENBQUM7Q0FDeEM7QUFDSjs7O0FDOXJFQSxJQUFJO0FBR0osSUFBYSxlQUFiLE1BQTBCO0NBQ3RCLGNBQWM7RUFDVixLQUFLLHVCQUFPLElBQUksUUFBUTtFQUN4QixLQUFLLHlCQUFTLElBQUksSUFBSTtDQUMxQjtDQUNBLElBQUksUUFBUSxHQUFHLE9BQU87RUFDbEIsTUFBTSxPQUFPLE1BQU07RUFDbkIsS0FBSyxLQUFLLElBQUksUUFBUSxJQUFJO0VBQzFCLElBQUksUUFBUSxPQUFPLFNBQVMsWUFBWSxRQUFRLE1BQzVDLEtBQUssT0FBTyxJQUFJLEtBQUssSUFBSSxNQUFNO0VBRW5DLE9BQU87Q0FDWDtDQUNBLFFBQVE7RUFDSixLQUFLLHVCQUFPLElBQUksUUFBUTtFQUN4QixLQUFLLHlCQUFTLElBQUksSUFBSTtFQUN0QixPQUFPO0NBQ1g7Q0FDQSxPQUFPLFFBQVE7RUFDWCxNQUFNLE9BQU8sS0FBSyxLQUFLLElBQUksTUFBTTtFQUNqQyxJQUFJLFFBQVEsT0FBTyxTQUFTLFlBQVksUUFBUSxNQUM1QyxLQUFLLE9BQU8sT0FBTyxLQUFLLEVBQUU7RUFFOUIsS0FBSyxLQUFLLE9BQU8sTUFBTTtFQUN2QixPQUFPO0NBQ1g7Q0FDQSxJQUFJLFFBQVE7RUFHUixNQUFNLElBQUksT0FBTyxLQUFLO0VBQ3RCLElBQUksR0FBRztHQUNILE1BQU0sS0FBSyxFQUFFLEdBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUc7R0FDcEMsT0FBTyxHQUFHO0dBQ1YsTUFBTSxJQUFJO0lBQUUsR0FBRztJQUFJLEdBQUcsS0FBSyxLQUFLLElBQUksTUFBTTtHQUFFO0dBQzVDLE9BQU8sT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxLQUFBO0VBQ3ZDO0VBQ0EsT0FBTyxLQUFLLEtBQUssSUFBSSxNQUFNO0NBQy9CO0NBQ0EsSUFBSSxRQUFRO0VBQ1IsT0FBTyxLQUFLLEtBQUssSUFBSSxNQUFNO0NBQy9CO0FBQ0o7QUFFQSxTQUFnQixXQUFXO0NBQ3ZCLE9BQU8sSUFBSSxhQUFhO0FBQzVCO0NBQ0MsS0FBSyxXQUFBLENBQVkseUJBQXlCLEdBQUcsdUJBQXVCLFNBQVM7QUFDOUUsSUFBYSxpQkFBaUIsV0FBVzs7OztBQzdDekMsU0FBZ0IsUUFBUSxPQUFPLFFBQVE7Q0FDbkMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sR0FBR0MsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQVVBLFNBQWdCLE9BQU8sT0FBTyxRQUFRO0NBQ2xDLE9BQU8sSUFBSSxNQUFNO0VBQ2IsTUFBTTtFQUNOLFFBQVE7RUFDUixPQUFPO0VBQ1AsT0FBTztFQUNQLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFFQSxTQUFnQixNQUFNLE9BQU8sUUFBUTtDQUNqQyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTixRQUFRO0VBQ1IsT0FBTztFQUNQLE9BQU87RUFDUCxHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsTUFBTSxPQUFPLFFBQVE7Q0FDakMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sUUFBUTtFQUNSLE9BQU87RUFDUCxPQUFPO0VBQ1AsR0FBR0EsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQUVBLFNBQWdCLFFBQVEsT0FBTyxRQUFRO0NBQ25DLE9BQU8sSUFBSSxNQUFNO0VBQ2IsTUFBTTtFQUNOLFFBQVE7RUFDUixPQUFPO0VBQ1AsT0FBTztFQUNQLFNBQVM7RUFDVCxHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsUUFBUSxPQUFPLFFBQVE7Q0FDbkMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sUUFBUTtFQUNSLE9BQU87RUFDUCxPQUFPO0VBQ1AsU0FBUztFQUNULEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFFQSxTQUFnQixRQUFRLE9BQU8sUUFBUTtDQUNuQyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTixRQUFRO0VBQ1IsT0FBTztFQUNQLE9BQU87RUFDUCxTQUFTO0VBQ1QsR0FBR0EsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQUVBLFNBQWdCLEtBQUssT0FBTyxRQUFRO0NBQ2hDLE9BQU8sSUFBSSxNQUFNO0VBQ2IsTUFBTTtFQUNOLFFBQVE7RUFDUixPQUFPO0VBQ1AsT0FBTztFQUNQLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFFQSxTQUFnQixPQUFPLE9BQU8sUUFBUTtDQUNsQyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTixRQUFRO0VBQ1IsT0FBTztFQUNQLE9BQU87RUFDUCxHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsUUFBUSxPQUFPLFFBQVE7Q0FDbkMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sUUFBUTtFQUNSLE9BQU87RUFDUCxPQUFPO0VBQ1AsR0FBR0EsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOzs7Ozs7O0FBT0EsU0FBZ0IsTUFBTSxPQUFPLFFBQVE7Q0FDakMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sUUFBUTtFQUNSLE9BQU87RUFDUCxPQUFPO0VBQ1AsR0FBR0EsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQUVBLFNBQWdCLE9BQU8sT0FBTyxRQUFRO0NBQ2xDLE9BQU8sSUFBSSxNQUFNO0VBQ2IsTUFBTTtFQUNOLFFBQVE7RUFDUixPQUFPO0VBQ1AsT0FBTztFQUNQLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFFQSxTQUFnQixNQUFNLE9BQU8sUUFBUTtDQUNqQyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTixRQUFRO0VBQ1IsT0FBTztFQUNQLE9BQU87RUFDUCxHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsS0FBSyxPQUFPLFFBQVE7Q0FDaEMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sUUFBUTtFQUNSLE9BQU87RUFDUCxPQUFPO0VBQ1AsR0FBR0EsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQUVBLFNBQWdCLE9BQU8sT0FBTyxRQUFRO0NBQ2xDLE9BQU8sSUFBSSxNQUFNO0VBQ2IsTUFBTTtFQUNOLFFBQVE7RUFDUixPQUFPO0VBQ1AsT0FBTztFQUNQLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFFQSxTQUFnQixNQUFNLE9BQU8sUUFBUTtDQUNqQyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTixRQUFRO0VBQ1IsT0FBTztFQUNQLE9BQU87RUFDUCxHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsTUFBTSxPQUFPLFFBQVE7Q0FDakMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sUUFBUTtFQUNSLE9BQU87RUFDUCxPQUFPO0VBQ1AsR0FBR0EsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQUVBLFNBQWdCLEtBQUssT0FBTyxRQUFRO0NBQ2hDLE9BQU8sSUFBSSxNQUFNO0VBQ2IsTUFBTTtFQUNOLFFBQVE7RUFDUixPQUFPO0VBQ1AsT0FBTztFQUNQLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFFQSxTQUFnQixRQUFRLE9BQU8sUUFBUTtDQUNuQyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTixRQUFRO0VBQ1IsT0FBTztFQUNQLE9BQU87RUFDUCxHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsUUFBUSxPQUFPLFFBQVE7Q0FDbkMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sUUFBUTtFQUNSLE9BQU87RUFDUCxPQUFPO0VBQ1AsR0FBR0EsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQUVBLFNBQWdCLFFBQVEsT0FBTyxRQUFRO0NBQ25DLE9BQU8sSUFBSSxNQUFNO0VBQ2IsTUFBTTtFQUNOLFFBQVE7RUFDUixPQUFPO0VBQ1AsT0FBTztFQUNQLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFFQSxTQUFnQixXQUFXLE9BQU8sUUFBUTtDQUN0QyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTixRQUFRO0VBQ1IsT0FBTztFQUNQLE9BQU87RUFDUCxHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsTUFBTSxPQUFPLFFBQVE7Q0FDakMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sUUFBUTtFQUNSLE9BQU87RUFDUCxPQUFPO0VBQ1AsR0FBR0EsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQUVBLFNBQWdCLEtBQUssT0FBTyxRQUFRO0NBQ2hDLE9BQU8sSUFBSSxNQUFNO0VBQ2IsTUFBTTtFQUNOLFFBQVE7RUFDUixPQUFPO0VBQ1AsT0FBTztFQUNQLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFTQSxTQUFnQixhQUFhLE9BQU8sUUFBUTtDQUN4QyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTixRQUFRO0VBQ1IsT0FBTztFQUNQLFFBQVE7RUFDUixPQUFPO0VBQ1AsV0FBVztFQUNYLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFFQSxTQUFnQixTQUFTLE9BQU8sUUFBUTtDQUNwQyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTixRQUFRO0VBQ1IsT0FBTztFQUNQLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFFQSxTQUFnQixTQUFTLE9BQU8sUUFBUTtDQUNwQyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTixRQUFRO0VBQ1IsT0FBTztFQUNQLFdBQVc7RUFDWCxHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsYUFBYSxPQUFPLFFBQVE7Q0FDeEMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sUUFBUTtFQUNSLE9BQU87RUFDUCxHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsUUFBUSxPQUFPLFFBQVE7Q0FDbkMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sUUFBUSxDQUFDO0VBQ1QsR0FBR0EsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQVdBLFNBQWdCLEtBQUssT0FBTyxRQUFRO0NBQ2hDLE9BQU8sSUFBSSxNQUFNO0VBQ2IsTUFBTTtFQUNOLE9BQU87RUFDUCxPQUFPO0VBQ1AsUUFBUTtFQUNSLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFFQSxTQUFnQixTQUFTLE9BQU8sUUFBUTtDQUNwQyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTixPQUFPO0VBQ1AsT0FBTztFQUNQLFFBQVE7RUFDUixHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsU0FBUyxPQUFPLFFBQVE7Q0FDcEMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sT0FBTztFQUNQLE9BQU87RUFDUCxRQUFRO0VBQ1IsR0FBR0EsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQUVBLFNBQWdCLE9BQU8sT0FBTyxRQUFRO0NBQ2xDLE9BQU8sSUFBSSxNQUFNO0VBQ2IsTUFBTTtFQUNOLE9BQU87RUFDUCxPQUFPO0VBQ1AsUUFBUTtFQUNSLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFFQSxTQUFnQixRQUFRLE9BQU8sUUFBUTtDQUNuQyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTixPQUFPO0VBQ1AsT0FBTztFQUNQLFFBQVE7RUFDUixHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsU0FBUyxPQUFPLFFBQVE7Q0FDcEMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sR0FBR0EsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQVVBLFNBQWdCLFFBQVEsT0FBTyxRQUFRO0NBQ25DLE9BQU8sSUFBSSxNQUFNO0VBQ2IsTUFBTTtFQUNOLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFVQSxTQUFnQixPQUFPLE9BQU8sUUFBUTtDQUNsQyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTixPQUFPO0VBQ1AsT0FBTztFQUNQLFFBQVE7RUFDUixHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsUUFBUSxPQUFPLFFBQVE7Q0FDbkMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sT0FBTztFQUNQLE9BQU87RUFDUCxRQUFRO0VBQ1IsR0FBR0EsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQUVBLFNBQWdCLFFBQVEsT0FBTyxRQUFRO0NBQ25DLE9BQU8sSUFBSSxNQUFNO0VBQ2IsTUFBTTtFQUNOLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFFQSxTQUFnQkMsYUFBVyxPQUFPLFFBQVE7Q0FDdEMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sR0FBR0QsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQUVBLFNBQWdCRSxRQUFNLE9BQU8sUUFBUTtDQUNqQyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTixHQUFHRixnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsS0FBSyxPQUFPO0NBQ3hCLE9BQU8sSUFBSSxNQUFNLEVBQ2IsTUFBTSxNQUNWLENBQUM7QUFDTDs7QUFFQSxTQUFnQixTQUFTLE9BQU87Q0FDNUIsT0FBTyxJQUFJLE1BQU0sRUFDYixNQUFNLFVBQ1YsQ0FBQztBQUNMOztBQUVBLFNBQWdCLE9BQU8sT0FBTyxRQUFRO0NBQ2xDLE9BQU8sSUFBSSxNQUFNO0VBQ2IsTUFBTTtFQUNOLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFFQSxTQUFnQkcsUUFBTSxPQUFPLFFBQVE7Q0FDakMsT0FBTyxJQUFJLE1BQU07RUFDYixNQUFNO0VBQ04sR0FBR0gsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQUVBLFNBQWdCLE1BQU0sT0FBTyxRQUFRO0NBQ2pDLE9BQU8sSUFBSSxNQUFNO0VBQ2IsTUFBTTtFQUNOLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFVQSxTQUFnQixLQUFLLE9BQU8sUUFBUTtDQUNoQyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTixHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsSUFBSSxPQUFPLFFBQVE7Q0FDL0IsT0FBTyxJQUFJSSxrQkFBeUI7RUFDaEMsT0FBTztFQUNQLEdBQUdKLGdCQUFxQixNQUFNO0VBQzlCO0VBQ0EsV0FBVztDQUNmLENBQUM7QUFDTDs7QUFFQSxTQUFnQixLQUFLLE9BQU8sUUFBUTtDQUNoQyxPQUFPLElBQUlJLGtCQUF5QjtFQUNoQyxPQUFPO0VBQ1AsR0FBR0osZ0JBQXFCLE1BQU07RUFDOUI7RUFDQSxXQUFXO0NBQ2YsQ0FBQztBQUNMOztBQUtBLFNBQWdCLElBQUksT0FBTyxRQUFRO0NBQy9CLE9BQU8sSUFBSUsscUJBQTRCO0VBQ25DLE9BQU87RUFDUCxHQUFHTCxnQkFBcUIsTUFBTTtFQUM5QjtFQUNBLFdBQVc7Q0FDZixDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsS0FBSyxPQUFPLFFBQVE7Q0FDaEMsT0FBTyxJQUFJSyxxQkFBNEI7RUFDbkMsT0FBTztFQUNQLEdBQUdMLGdCQUFxQixNQUFNO0VBQzlCO0VBQ0EsV0FBVztDQUNmLENBQUM7QUFDTDs7QUFLQSxTQUFnQixVQUFVLFFBQVE7Q0FDOUIsT0FBTyxvQkFBSSxHQUFHLE1BQU07QUFDeEI7O0FBR0EsU0FBZ0IsVUFBVSxRQUFRO0NBQzlCLE9BQU8sb0JBQUksR0FBRyxNQUFNO0FBQ3hCOztBQUdBLFNBQWdCLGFBQWEsUUFBUTtDQUNqQyxPQUFPLHFCQUFLLEdBQUcsTUFBTTtBQUN6Qjs7QUFHQSxTQUFnQixhQUFhLFFBQVE7Q0FDakMsT0FBTyxxQkFBSyxHQUFHLE1BQU07QUFDekI7O0FBRUEsU0FBZ0IsWUFBWSxPQUFPLFFBQVE7Q0FDdkMsT0FBTyxJQUFJTSxvQkFBMkI7RUFDbEMsT0FBTztFQUNQLEdBQUdOLGdCQUFxQixNQUFNO0VBQzlCO0NBQ0osQ0FBQztBQUNMOztBQUVBLFNBQWdCLFNBQVMsU0FBUyxRQUFRO0NBQ3RDLE9BQU8sSUFBSU8saUJBQXdCO0VBQy9CLE9BQU87RUFDUCxHQUFHUCxnQkFBcUIsTUFBTTtFQUM5QjtDQUNKLENBQUM7QUFDTDs7QUFFQSxTQUFnQixTQUFTLFNBQVMsUUFBUTtDQUN0QyxPQUFPLElBQUlRLGlCQUF3QjtFQUMvQixPQUFPO0VBQ1AsR0FBR1IsZ0JBQXFCLE1BQU07RUFDOUI7Q0FDSixDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsTUFBTSxNQUFNLFFBQVE7Q0FDaEMsT0FBTyxJQUFJUyxvQkFBMkI7RUFDbEMsT0FBTztFQUNQLEdBQUdULGdCQUFxQixNQUFNO0VBQzlCO0NBQ0osQ0FBQztBQUNMOztBQUVBLFNBQWdCLFdBQVcsU0FBUyxRQUFRO0NBTXhDLE9BQU8sSUFMUVUsbUJBQTBCO0VBQ3JDLE9BQU87RUFDUCxHQUFHVixnQkFBcUIsTUFBTTtFQUM5QjtDQUNKLENBQ1E7QUFDWjs7QUFFQSxTQUFnQixXQUFXLFNBQVMsUUFBUTtDQUN4QyxPQUFPLElBQUlXLG1CQUEwQjtFQUNqQyxPQUFPO0VBQ1AsR0FBR1gsZ0JBQXFCLE1BQU07RUFDOUI7Q0FDSixDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsUUFBUSxRQUFRLFFBQVE7Q0FDcEMsT0FBTyxJQUFJWSxzQkFBNkI7RUFDcEMsT0FBTztFQUNQLEdBQUdaLGdCQUFxQixNQUFNO0VBQzlCO0NBQ0osQ0FBQztBQUNMOztBQUVBLFNBQWdCLE9BQU8sU0FBUyxRQUFRO0NBQ3BDLE9BQU8sSUFBSWEsZUFBc0I7RUFDN0IsT0FBTztFQUNQLFFBQVE7RUFDUixHQUFHYixnQkFBcUIsTUFBTTtFQUM5QjtDQUNKLENBQUM7QUFDTDs7QUFFQSxTQUFnQixXQUFXLFFBQVE7Q0FDL0IsT0FBTyxJQUFJYyxtQkFBMEI7RUFDakMsT0FBTztFQUNQLFFBQVE7RUFDUixHQUFHZCxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsV0FBVyxRQUFRO0NBQy9CLE9BQU8sSUFBSWUsbUJBQTBCO0VBQ2pDLE9BQU87RUFDUCxRQUFRO0VBQ1IsR0FBR2YsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQUVBLFNBQWdCLFVBQVUsVUFBVSxRQUFRO0NBQ3hDLE9BQU8sSUFBSWdCLGtCQUF5QjtFQUNoQyxPQUFPO0VBQ1AsUUFBUTtFQUNSLEdBQUdoQixnQkFBcUIsTUFBTTtFQUM5QjtDQUNKLENBQUM7QUFDTDs7QUFFQSxTQUFnQixZQUFZLFFBQVEsUUFBUTtDQUN4QyxPQUFPLElBQUlpQixvQkFBMkI7RUFDbEMsT0FBTztFQUNQLFFBQVE7RUFDUixHQUFHakIsZ0JBQXFCLE1BQU07RUFDOUI7Q0FDSixDQUFDO0FBQ0w7O0FBRUEsU0FBZ0IsVUFBVSxRQUFRLFFBQVE7Q0FDdEMsT0FBTyxJQUFJa0Isa0JBQXlCO0VBQ2hDLE9BQU87RUFDUCxRQUFRO0VBQ1IsR0FBR2xCLGdCQUFxQixNQUFNO0VBQzlCO0NBQ0osQ0FBQztBQUNMOztBQUVBLFNBQWdCLFVBQVUsVUFBVSxRQUFRLFFBQVE7Q0FDaEQsT0FBTyxJQUFJbUIsa0JBQXlCO0VBQ2hDLE9BQU87RUFDUDtFQUNBO0VBQ0EsR0FBR25CLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUFFQSxTQUFnQixNQUFNLE9BQU8sUUFBUTtDQUNqQyxPQUFPLElBQUlvQixrQkFBeUI7RUFDaEMsT0FBTztFQUNQLE1BQU07RUFDTixHQUFHcEIsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMOztBQUVBLFNBQWdCLFdBQVcsSUFBSTtDQUMzQixPQUFPLElBQUlxQixtQkFBMEI7RUFDakMsT0FBTztFQUNQO0NBQ0osQ0FBQztBQUNMOztBQUdBLFNBQWdCLFdBQVcsTUFBTTtDQUM3QixPQUFPLDRCQUFZLFVBQVUsTUFBTSxVQUFVLElBQUksQ0FBQztBQUN0RDs7QUFHQSxTQUFnQixRQUFRO0NBQ3BCLE9BQU8sNEJBQVksVUFBVSxNQUFNLEtBQUssQ0FBQztBQUM3Qzs7QUFHQSxTQUFnQixlQUFlO0NBQzNCLE9BQU8sNEJBQVksVUFBVSxNQUFNLFlBQVksQ0FBQztBQUNwRDs7QUFHQSxTQUFnQixlQUFlO0NBQzNCLE9BQU8sNEJBQVksVUFBVSxNQUFNLFlBQVksQ0FBQztBQUNwRDs7QUFHQSxTQUFnQixXQUFXO0NBQ3ZCLE9BQU8sNEJBQVksVUFBVUMsUUFBYSxLQUFLLENBQUM7QUFDcEQ7O0FBRUEsU0FBZ0IsT0FBTyxPQUFPLFNBQVMsUUFBUTtDQUMzQyxPQUFPLElBQUksTUFBTTtFQUNiLE1BQU07RUFDTjtFQUlBLEdBQUd0QixnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7O0FBeUhBLFNBQWdCLE1BQU0sT0FBTyxRQUFRO0NBQ2pDLE9BQU8sSUFBSSxNQUFNO0VBQ2IsTUFBTTtFQUNOLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDs7QUE2RkEsU0FBZ0IsUUFBUSxPQUFPLElBQUksU0FBUztDQUN4QyxNQUFNLE9BQU9BLGdCQUFxQixPQUFPO0NBQ3pDLEtBQUssVUFBVSxLQUFLLFFBQVE7Q0FPNUIsT0FBTyxJQU5ZLE1BQU07RUFDckIsTUFBTTtFQUNOLE9BQU87RUFDSDtFQUNKLEdBQUc7Q0FDUCxDQUNZO0FBQ2hCOztBQUdBLFNBQWdCLFFBQVEsT0FBTyxJQUFJLFNBQVM7Q0FPeEMsT0FBTyxJQU5ZLE1BQU07RUFDckIsTUFBTTtFQUNOLE9BQU87RUFDSDtFQUNKLEdBQUdBLGdCQUFxQixPQUFPO0NBQ25DLENBQ1k7QUFDaEI7O0FBRUEsU0FBZ0IsYUFBYSxJQUFJLFFBQVE7Q0FDckMsTUFBTSxLQUFLLHdCQUFRLFlBQVk7RUFDM0IsUUFBUSxZQUFZLFlBQVU7R0FDMUIsSUFBSSxPQUFPdUIsWUFBVSxVQUNqQixRQUFRLE9BQU8sS0FBS0MsTUFBV0QsU0FBTyxRQUFRLE9BQU8sR0FBRyxLQUFLLEdBQUcsQ0FBQztRQUVoRTtJQUVELE1BQU0sU0FBU0E7SUFDZixJQUFJLE9BQU8sT0FDUCxPQUFPLFdBQVc7SUFDdEIsT0FBTyxTQUFTLE9BQU8sT0FBTztJQUM5QixPQUFPLFVBQVUsT0FBTyxRQUFRLFFBQVE7SUFDeEMsT0FBTyxTQUFTLE9BQU8sT0FBTztJQUM5QixPQUFPLGFBQWEsT0FBTyxXQUFXLENBQUMsR0FBRyxLQUFLLElBQUk7SUFDbkQsUUFBUSxPQUFPLEtBQUtDLE1BQVcsTUFBTSxDQUFDO0dBQzFDO0VBQ0o7RUFDQSxPQUFPLEdBQUcsUUFBUSxPQUFPLE9BQU87Q0FDcEMsR0FBRyxNQUFNO0NBQ1QsT0FBTztBQUNYOztBQUVBLFNBQWdCLE9BQU8sSUFBSSxRQUFRO0NBQy9CLE1BQU0sS0FBSyxJQUFJQyxVQUFpQjtFQUM1QixPQUFPO0VBQ1AsR0FBR3pCLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7Q0FDRCxHQUFHLEtBQUssUUFBUTtDQUNoQixPQUFPO0FBQ1g7O0FBRUEsU0FBZ0IwQixXQUFTLGFBQWE7Q0FDbEMsTUFBTSxLQUFLLElBQUlELFVBQWlCLEVBQUUsT0FBTyxXQUFXLENBQUM7Q0FDckQsR0FBRyxLQUFLLFdBQVcsRUFDZCxTQUFTO0VBQ04sTUFBTSxXQUFBLGVBQXFDLElBQUksSUFBSSxLQUFLLENBQUM7RUFDekQsZUFBMEIsSUFBSSxNQUFNO0dBQUUsR0FBRztHQUFVO0VBQVksQ0FBQztDQUNwRSxDQUNKO0NBQ0EsR0FBRyxLQUFLLGNBQWMsQ0FBRTtDQUN4QixPQUFPO0FBQ1g7O0FBRUEsU0FBZ0JFLE9BQUssVUFBVTtDQUMzQixNQUFNLEtBQUssSUFBSUYsVUFBaUIsRUFBRSxPQUFPLE9BQU8sQ0FBQztDQUNqRCxHQUFHLEtBQUssV0FBVyxFQUNkLFNBQVM7RUFDTixNQUFNLFdBQUEsZUFBcUMsSUFBSSxJQUFJLEtBQUssQ0FBQztFQUN6RCxlQUEwQixJQUFJLE1BQU07R0FBRSxHQUFHO0dBQVUsR0FBRztFQUFTLENBQUM7Q0FDcEUsQ0FDSjtDQUNBLEdBQUcsS0FBSyxjQUFjLENBQUU7Q0FDeEIsT0FBTztBQUNYOztBQUVBLFNBQWdCLFlBQVksU0FBUyxTQUFTO0NBQzFDLE1BQU0sU0FBU3pCLGdCQUFxQixPQUFPO0NBQzNDLElBQUksY0FBYyxPQUFPLFVBQVU7RUFBQztFQUFRO0VBQUs7RUFBTztFQUFNO0VBQUs7Q0FBUztDQUM1RSxJQUFJLGFBQWEsT0FBTyxTQUFTO0VBQUM7RUFBUztFQUFLO0VBQU07RUFBTztFQUFLO0NBQVU7Q0FDNUUsSUFBSSxPQUFPLFNBQVMsYUFBYTtFQUM3QixjQUFjLFlBQVksS0FBSyxNQUFPLE9BQU8sTUFBTSxXQUFXLEVBQUUsWUFBWSxJQUFJLENBQUU7RUFDbEYsYUFBYSxXQUFXLEtBQUssTUFBTyxPQUFPLE1BQU0sV0FBVyxFQUFFLFlBQVksSUFBSSxDQUFFO0NBQ3BGO0NBQ0EsTUFBTSxZQUFZLElBQUksSUFBSSxXQUFXO0NBQ3JDLE1BQU0sV0FBVyxJQUFJLElBQUksVUFBVTtDQUNuQyxNQUFNLFNBQVMsUUFBUSxTQUFTNEI7Q0FDaEMsTUFBTSxXQUFXLFFBQVEsV0FBV0M7Q0FJcEMsTUFBTSxRQUFRLElBQUksT0FBTztFQUNyQixNQUFNO0VBQ04sSUFBSSxLQUxRLFFBQVEsVUFBVUMsWUFDRDtHQUFFLE1BQU07R0FBVSxPQUFPLE9BQU87RUFBTSxDQUlwRDtFQUNmLEtBQUssSUFKaUIsU0FBUztHQUFFLE1BQU07R0FBVyxPQUFPLE9BQU87RUFBTSxDQUlyRDtFQUNqQixhQUFhLE9BQU8sWUFBWTtHQUM1QixJQUFJLE9BQU87R0FDWCxJQUFJLE9BQU8sU0FBUyxhQUNoQixPQUFPLEtBQUssWUFBWTtHQUM1QixJQUFJLFVBQVUsSUFBSSxJQUFJLEdBQ2xCLE9BQU87UUFFTixJQUFJLFNBQVMsSUFBSSxJQUFJLEdBQ3RCLE9BQU87UUFFTjtJQUNELFFBQVEsT0FBTyxLQUFLO0tBQ2hCLE1BQU07S0FDTixVQUFVO0tBQ1YsUUFBUSxDQUFDLEdBQUcsV0FBVyxHQUFHLFFBQVE7S0FDbEMsT0FBTyxRQUFRO0tBQ2YsTUFBTTtLQUNOLFVBQVU7SUFDZCxDQUFDO0lBQ0QsT0FBTyxDQUFDO0dBQ1o7RUFDSjtFQUNBLG9CQUFvQixPQUFPLGFBQWE7R0FDcEMsSUFBSSxVQUFVLE1BQ1YsT0FBTyxZQUFZLE1BQU07UUFHekIsT0FBTyxXQUFXLE1BQU07RUFFaEM7RUFDQSxPQUFPLE9BQU87Q0FDbEIsQ0FBQztDQUNELE9BQU87QUFDWDs7QUFFQSxTQUFnQixjQUFjLE9BQU8sUUFBUSxXQUFXLFVBQVUsQ0FBQyxHQUFHO0NBQ2xFLE1BQU0sU0FBUzlCLGdCQUFxQixPQUFPO0NBQzNDLE1BQU0sTUFBTTtFQUNSLEdBQUdBLGdCQUFxQixPQUFPO0VBQy9CLE9BQU87RUFDUCxNQUFNO0VBQ047RUFDQSxJQUFJLE9BQU8sY0FBYyxhQUFhLGFBQWEsUUFBUSxVQUFVLEtBQUssR0FBRztFQUM3RSxHQUFHO0NBQ1A7Q0FDQSxJQUFJLHFCQUFxQixRQUNyQixJQUFJLFVBQVU7Q0FHbEIsT0FBTyxJQURVLE1BQU0sR0FDYjtBQUNkOzs7QUNyakNBLFNBQWdCLGtCQUFrQixRQUFRO0NBRXRDLElBQUksU0FBUyxRQUFRLFVBQVU7Q0FDL0IsSUFBSSxXQUFXLFdBQ1gsU0FBUztDQUNiLElBQUksV0FBVyxXQUNYLFNBQVM7Q0FDYixPQUFPO0VBQ0gsWUFBWSxPQUFPLGNBQWMsQ0FBQztFQUNsQyxrQkFBa0IsUUFBUSxZQUFZO0VBQ3RDO0VBQ0EsaUJBQWlCLFFBQVEsbUJBQW1CO0VBQzVDLFVBQVUsUUFBUSxtQkFBbUIsQ0FBRTtFQUN2QyxJQUFJLFFBQVEsTUFBTTtFQUNsQixTQUFTO0VBQ1Qsc0JBQU0sSUFBSSxJQUFJO0VBQ2QsUUFBUSxRQUFRLFVBQVU7RUFDMUIsUUFBUSxRQUFRLFVBQVU7RUFDMUIsVUFBVSxRQUFRLFlBQVksS0FBQTtDQUNsQztBQUNKO0FBQ0EsU0FBZ0IsUUFBUSxRQUFRLEtBQUssVUFBVTtDQUFFLE1BQU0sQ0FBQztDQUFHLFlBQVksQ0FBQztBQUFFLEdBQUc7Q0FDekUsSUFBSTtDQUNKLE1BQU0sTUFBTSxPQUFPLEtBQUs7Q0FFeEIsTUFBTSxPQUFPLElBQUksS0FBSyxJQUFJLE1BQU07Q0FDaEMsSUFBSSxNQUFNO0VBQ04sS0FBSztFQUdMLElBRGdCLFFBQVEsV0FBVyxTQUFTLE1BQ2xDLEdBQ04sS0FBSyxRQUFRLFFBQVE7RUFFekIsT0FBTyxLQUFLO0NBQ2hCO0NBRUEsTUFBTSxTQUFTO0VBQUUsUUFBUSxDQUFDO0VBQUcsT0FBTztFQUFHLE9BQU8sS0FBQTtFQUFXLE1BQU0sUUFBUTtDQUFLO0NBQzVFLElBQUksS0FBSyxJQUFJLFFBQVEsTUFBTTtDQUUzQixNQUFNLGlCQUFpQixPQUFPLEtBQUssZUFBZTtDQUNsRCxJQUFJLGdCQUNBLE9BQU8sU0FBUztNQUVmO0VBQ0QsTUFBTSxTQUFTO0dBQ1gsR0FBRztHQUNILFlBQVksQ0FBQyxHQUFHLFFBQVEsWUFBWSxNQUFNO0dBQzFDLE1BQU0sUUFBUTtFQUNsQjtFQUNBLElBQUksT0FBTyxLQUFLLG1CQUNaLE9BQU8sS0FBSyxrQkFBa0IsS0FBSyxPQUFPLFFBQVEsTUFBTTtPQUV2RDtHQUNELE1BQU0sUUFBUSxPQUFPO0dBQ3JCLE1BQU0sWUFBWSxJQUFJLFdBQVcsSUFBSTtHQUNyQyxJQUFJLENBQUMsV0FDRCxNQUFNLElBQUksTUFBTSx1REFBdUQsSUFBSSxNQUFNO0dBRXJGLFVBQVUsUUFBUSxLQUFLLE9BQU8sTUFBTTtFQUN4QztFQUNBLE1BQU0sU0FBUyxPQUFPLEtBQUs7RUFDM0IsSUFBSSxRQUFRO0dBRVIsSUFBSSxDQUFDLE9BQU8sS0FDUixPQUFPLE1BQU07R0FDakIsUUFBUSxRQUFRLEtBQUssTUFBTTtHQUMzQixJQUFJLEtBQUssSUFBSSxNQUFNLENBQUMsQ0FBQyxXQUFXO0VBQ3BDO0NBQ0o7Q0FFQSxNQUFNLE9BQU8sSUFBSSxpQkFBaUIsSUFBSSxNQUFNO0NBQzVDLElBQUksTUFDQSxPQUFPLE9BQU8sT0FBTyxRQUFRLElBQUk7Q0FDckMsSUFBSSxJQUFJLE9BQU8sV0FBVyxlQUFlLE1BQU0sR0FBRztFQUU5QyxPQUFPLE9BQU8sT0FBTztFQUNyQixPQUFPLE9BQU8sT0FBTztDQUN6QjtDQUVBLElBQUksSUFBSSxPQUFPLFdBQVcsZUFBZSxPQUFPLFFBQzVDLENBQUMsS0FBSyxPQUFPLE9BQUEsQ0FBUSxZQUFZLEdBQUcsVUFBVSxPQUFPLE9BQU87Q0FDaEUsT0FBTyxPQUFPLE9BQU87Q0FHckIsT0FEZ0IsSUFBSSxLQUFLLElBQUksTUFDaEIsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsU0FBZ0IsWUFBWSxLQUFLLFFBRS9CO0NBRUUsTUFBTSxPQUFPLElBQUksS0FBSyxJQUFJLE1BQU07Q0FDaEMsSUFBSSxDQUFDLE1BQ0QsTUFBTSxJQUFJLE1BQU0sMkNBQTJDO0NBRS9ELE1BQU0sNkJBQWEsSUFBSSxJQUFJO0NBQzNCLEtBQUssTUFBTSxTQUFTLElBQUksS0FBSyxRQUFRLEdBQUc7RUFDcEMsTUFBTSxLQUFLLElBQUksaUJBQWlCLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRTtFQUMvQyxJQUFJLElBQUk7R0FDSixNQUFNLFdBQVcsV0FBVyxJQUFJLEVBQUU7R0FDbEMsSUFBSSxZQUFZLGFBQWEsTUFBTSxJQUMvQixNQUFNLElBQUksTUFBTSx3QkFBd0IsR0FBRyxrSEFBa0g7R0FFakssV0FBVyxJQUFJLElBQUksTUFBTSxFQUFFO0VBQy9CO0NBQ0o7Q0FHQSxNQUFNLFdBQVcsVUFBVTtFQUt2QixNQUFNLGNBQWMsSUFBSSxXQUFXLGtCQUFrQixVQUFVO0VBQy9ELElBQUksSUFBSSxVQUFVO0dBQ2QsTUFBTSxhQUFhLElBQUksU0FBUyxTQUFTLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRTtHQUV4RCxNQUFNLGVBQWUsSUFBSSxTQUFTLFNBQVMsT0FBTztHQUNsRCxJQUFJLFlBQ0EsT0FBTyxFQUFFLEtBQUssYUFBYSxVQUFVLEVBQUU7R0FHM0MsTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDLFNBQVMsTUFBTSxFQUFFLENBQUMsT0FBTyxNQUFNLFNBQVMsSUFBSTtHQUNoRSxNQUFNLEVBQUUsQ0FBQyxRQUFRO0dBQ2pCLE9BQU87SUFBRSxPQUFPO0lBQUksS0FBSyxHQUFHLGFBQWEsVUFBVSxFQUFFLElBQUksWUFBWSxHQUFHO0dBQUs7RUFDakY7RUFDQSxJQUFJLE1BQU0sT0FBTyxNQUNiLE9BQU8sRUFBRSxLQUFLLElBQUk7RUFJdEIsTUFBTSxlQUFlLEtBQWdCLFlBQVk7RUFDakQsTUFBTSxRQUFRLE1BQU0sRUFBRSxDQUFDLE9BQU8sTUFBTSxXQUFXLElBQUk7RUFDbkQsT0FBTztHQUFFO0dBQU8sS0FBSyxlQUFlO0VBQU07Q0FDOUM7Q0FHQSxNQUFNLGdCQUFnQixVQUFVO0VBRTVCLElBQUksTUFBTSxFQUFFLENBQUMsT0FBTyxNQUNoQjtFQUVKLE1BQU0sT0FBTyxNQUFNO0VBQ25CLE1BQU0sRUFBRSxLQUFLLFVBQVUsUUFBUSxLQUFLO0VBQ3BDLEtBQUssTUFBTSxFQUFFLEdBQUcsS0FBSyxPQUFPO0VBRzVCLElBQUksT0FDQSxLQUFLLFFBQVE7RUFFakIsTUFBTSxTQUFTLEtBQUs7RUFDcEIsS0FBSyxNQUFNLE9BQU8sUUFDZCxPQUFPLE9BQU87RUFFbEIsT0FBTyxPQUFPO0NBQ2xCO0NBR0EsSUFBSSxJQUFJLFdBQVcsU0FDZixLQUFLLE1BQU0sU0FBUyxJQUFJLEtBQUssUUFBUSxHQUFHO0VBQ3BDLE1BQU0sT0FBTyxNQUFNO0VBQ25CLElBQUksS0FBSyxPQUNMLE1BQU0sSUFBSSxNQUFNLHFCQUNQLEtBQUssT0FBTyxLQUFLLEdBQUcsRUFBRTs7aUZBQ3VEO0NBRTlGO0NBR0osS0FBSyxNQUFNLFNBQVMsSUFBSSxLQUFLLFFBQVEsR0FBRztFQUNwQyxNQUFNLE9BQU8sTUFBTTtFQUVuQixJQUFJLFdBQVcsTUFBTSxJQUFJO0dBQ3JCLGFBQWEsS0FBSztHQUNsQjtFQUNKO0VBRUEsSUFBSSxJQUFJLFVBQVU7R0FDZCxNQUFNLE1BQU0sSUFBSSxTQUFTLFNBQVMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFO0dBQ2pELElBQUksV0FBVyxNQUFNLE1BQU0sS0FBSztJQUM1QixhQUFhLEtBQUs7SUFDbEI7R0FDSjtFQUNKO0VBR0EsSUFEVyxJQUFJLGlCQUFpQixJQUFJLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFDdkM7R0FDSixhQUFhLEtBQUs7R0FDbEI7RUFDSjtFQUVBLElBQUksS0FBSyxPQUFPO0dBRVosYUFBYSxLQUFLO0dBQ2xCO0VBQ0o7RUFFQSxJQUFJLEtBQUssUUFBUSxHQUNUO09BQUEsSUFBSSxXQUFXLE9BQU87SUFDdEIsYUFBYSxLQUFLO0lBRWxCO0dBQ0o7O0NBRVI7QUFDSjtBQUNBLFNBQWdCLFNBQVMsS0FBSyxRQUFRO0NBQ2xDLE1BQU0sT0FBTyxJQUFJLEtBQUssSUFBSSxNQUFNO0NBQ2hDLElBQUksQ0FBQyxNQUNELE1BQU0sSUFBSSxNQUFNLDJDQUEyQztDQUUvRCxNQUFNLGNBQWMsY0FBYztFQUM5QixNQUFNLE9BQU8sSUFBSSxLQUFLLElBQUksU0FBUztFQUVuQyxJQUFJLEtBQUssUUFBUSxNQUNiO0VBQ0osTUFBTSxTQUFTLEtBQUssT0FBTyxLQUFLO0VBQ2hDLE1BQU0sVUFBVSxFQUFFLEdBQUcsT0FBTztFQUM1QixNQUFNLE1BQU0sS0FBSztFQUNqQixLQUFLLE1BQU07RUFDWCxJQUFJLEtBQUs7R0FDTCxXQUFXLEdBQUc7R0FDZCxNQUFNLFVBQVUsSUFBSSxLQUFLLElBQUksR0FBRztHQUNoQyxNQUFNLFlBQVksUUFBUTtHQUUxQixJQUFJLFVBQVUsU0FBUyxJQUFJLFdBQVcsY0FBYyxJQUFJLFdBQVcsY0FBYyxJQUFJLFdBQVcsZ0JBQWdCO0lBRTVHLE9BQU8sUUFBUSxPQUFPLFNBQVMsQ0FBQztJQUNoQyxPQUFPLE1BQU0sS0FBSyxTQUFTO0dBQy9CLE9BRUksT0FBTyxPQUFPLFFBQVEsU0FBUztHQUduQyxPQUFPLE9BQU8sUUFBUSxPQUFPO0dBRzdCLElBRm9CLFVBQVUsS0FBSyxXQUFXLEtBRzFDLEtBQUssTUFBTSxPQUFPLFFBQVE7SUFDdEIsSUFBSSxRQUFRLFVBQVUsUUFBUSxTQUMxQjtJQUNKLElBQUksRUFBRSxPQUFPLFVBQ1QsT0FBTyxPQUFPO0dBRXRCO0dBR0osSUFBSSxVQUFVLFFBQVEsUUFBUSxLQUMxQixLQUFLLE1BQU0sT0FBTyxRQUFRO0lBQ3RCLElBQUksUUFBUSxVQUFVLFFBQVEsU0FDMUI7SUFDSixJQUFJLE9BQU8sUUFBUSxPQUFPLEtBQUssVUFBVSxPQUFPLElBQUksTUFBTSxLQUFLLFVBQVUsUUFBUSxJQUFJLElBQUksR0FDckYsT0FBTyxPQUFPO0dBRXRCO0VBRVI7RUFJQSxNQUFNLFNBQVMsVUFBVSxLQUFLO0VBQzlCLElBQUksVUFBVSxXQUFXLEtBQUs7R0FFMUIsV0FBVyxNQUFNO0dBQ2pCLE1BQU0sYUFBYSxJQUFJLEtBQUssSUFBSSxNQUFNO0dBQ3RDLElBQUksWUFBWSxPQUFPLE1BQU07SUFDekIsT0FBTyxPQUFPLFdBQVcsT0FBTztJQUVoQyxJQUFJLFdBQVcsS0FDWCxLQUFLLE1BQU0sT0FBTyxRQUFRO0tBQ3RCLElBQUksUUFBUSxVQUFVLFFBQVEsU0FDMUI7S0FDSixJQUFJLE9BQU8sV0FBVyxPQUFPLEtBQUssVUFBVSxPQUFPLElBQUksTUFBTSxLQUFLLFVBQVUsV0FBVyxJQUFJLElBQUksR0FDM0YsT0FBTyxPQUFPO0lBRXRCO0dBRVI7RUFDSjtFQUVBLElBQUksU0FBUztHQUNFO0dBQ1gsWUFBWTtHQUNaLE1BQU0sS0FBSyxRQUFRLENBQUM7RUFDeEIsQ0FBQztDQUNMO0NBQ0EsS0FBSyxNQUFNLFNBQVMsQ0FBQyxHQUFHLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FDaEQsV0FBVyxNQUFNLEVBQUU7Q0FFdkIsTUFBTSxTQUFTLENBQUM7Q0FDaEIsSUFBSSxJQUFJLFdBQVcsaUJBQ2YsT0FBTyxVQUFVO01BRWhCLElBQUksSUFBSSxXQUFXLFlBQ3BCLE9BQU8sVUFBVTtNQUVoQixJQUFJLElBQUksV0FBVyxZQUNwQixPQUFPLFVBQVU7TUFFaEIsSUFBSSxJQUFJLFdBQVcsZUFBZSxDQUV2QztDQUlBLElBQUksSUFBSSxVQUFVLEtBQUs7RUFDbkIsTUFBTSxLQUFLLElBQUksU0FBUyxTQUFTLElBQUksTUFBTSxDQUFDLEVBQUU7RUFDOUMsSUFBSSxDQUFDLElBQ0QsTUFBTSxJQUFJLE1BQU0sb0NBQW9DO0VBQ3hELE9BQU8sTUFBTSxJQUFJLFNBQVMsSUFBSSxFQUFFO0NBQ3BDO0NBQ0EsT0FBTyxPQUFPLFFBQVEsS0FBSyxPQUFPLEtBQUssTUFBTTtDQUs3QyxNQUFNLGFBQWEsSUFBSSxpQkFBaUIsSUFBSSxNQUFNLENBQUMsRUFBRTtDQUNyRCxJQUFJLGVBQWUsS0FBQSxLQUFhLE9BQU8sT0FBTyxZQUMxQyxPQUFPLE9BQU87Q0FFbEIsTUFBTSxPQUFPLElBQUksVUFBVSxRQUFRLENBQUM7Q0FDcEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxLQUFLLFFBQVEsR0FBRztFQUNwQyxNQUFNLE9BQU8sTUFBTTtFQUNuQixJQUFJLEtBQUssT0FBTyxLQUFLLE9BQU87R0FDeEIsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLE9BQ3JCLE9BQU8sS0FBSyxJQUFJO0dBQ3BCLEtBQUssS0FBSyxTQUFTLEtBQUs7RUFDNUI7Q0FDSjtDQUVBLElBQUksSUFBSSxVQUFVLENBQ2xCLE9BRUksSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsU0FBUyxHQUMzQixJQUFJLElBQUksV0FBVyxpQkFDZixPQUFPLFFBQVE7TUFHZixPQUFPLGNBQWM7Q0FJakMsSUFBSTtFQUlBLE1BQU0sWUFBWSxLQUFLLE1BQU0sS0FBSyxVQUFVLE1BQU0sQ0FBQztFQUNuRCxPQUFPLGVBQWUsV0FBVyxhQUFhO0dBQzFDLE9BQU87SUFDSCxHQUFHLE9BQU87SUFDVixZQUFZO0tBQ1IsT0FBTywrQkFBK0IsUUFBUSxTQUFTLElBQUksVUFBVTtLQUNyRSxRQUFRLCtCQUErQixRQUFRLFVBQVUsSUFBSSxVQUFVO0lBQzNFO0dBQ0o7R0FDQSxZQUFZO0dBQ1osVUFBVTtFQUNkLENBQUM7RUFDRCxPQUFPO0NBQ1gsU0FDTyxNQUFNO0VBQ1QsTUFBTSxJQUFJLE1BQU0sa0NBQWtDO0NBQ3REO0FBQ0o7QUFDQSxTQUFTLGVBQWUsU0FBUyxNQUFNO0NBQ25DLE1BQU0sTUFBTSxRQUFRLEVBQUUsc0JBQU0sSUFBSSxJQUFJLEVBQUU7Q0FDdEMsSUFBSSxJQUFJLEtBQUssSUFBSSxPQUFPLEdBQ3BCLE9BQU87Q0FDWCxJQUFJLEtBQUssSUFBSSxPQUFPO0NBQ3BCLE1BQU0sTUFBTSxRQUFRLEtBQUs7Q0FDekIsSUFBSSxJQUFJLFNBQVMsYUFDYixPQUFPO0NBQ1gsSUFBSSxJQUFJLFNBQVMsU0FDYixPQUFPLGVBQWUsSUFBSSxTQUFTLEdBQUc7Q0FDMUMsSUFBSSxJQUFJLFNBQVMsT0FDYixPQUFPLGVBQWUsSUFBSSxXQUFXLEdBQUc7Q0FDNUMsSUFBSSxJQUFJLFNBQVMsUUFDYixPQUFPLGVBQWUsSUFBSSxPQUFPLEdBQUcsR0FBRztDQUMzQyxJQUFJLElBQUksU0FBUyxhQUNiLElBQUksU0FBUyxjQUNiLElBQUksU0FBUyxpQkFDYixJQUFJLFNBQVMsY0FDYixJQUFJLFNBQVMsY0FDYixJQUFJLFNBQVMsYUFDYixJQUFJLFNBQVMsWUFDYixPQUFPLGVBQWUsSUFBSSxXQUFXLEdBQUc7Q0FFNUMsSUFBSSxJQUFJLFNBQVMsZ0JBQ2IsT0FBTyxlQUFlLElBQUksTUFBTSxHQUFHLEtBQUssZUFBZSxJQUFJLE9BQU8sR0FBRztDQUV6RSxJQUFJLElBQUksU0FBUyxZQUFZLElBQUksU0FBUyxPQUN0QyxPQUFPLGVBQWUsSUFBSSxTQUFTLEdBQUcsS0FBSyxlQUFlLElBQUksV0FBVyxHQUFHO0NBRWhGLElBQUksSUFBSSxTQUFTLFFBQVE7RUFDckIsSUFBSSxRQUFRLEtBQUssT0FBTyxJQUFJLFdBQVcsR0FDbkMsT0FBTztFQUNYLE9BQU8sZUFBZSxJQUFJLElBQUksR0FBRyxLQUFLLGVBQWUsSUFBSSxLQUFLLEdBQUc7Q0FDckU7Q0FDQSxJQUFJLElBQUksU0FBUyxVQUFVO0VBQ3ZCLEtBQUssTUFBTSxPQUFPLElBQUksT0FDbEIsSUFBSSxlQUFlLElBQUksTUFBTSxNQUFNLEdBQUcsR0FDbEMsT0FBTztFQUVmLE9BQU87Q0FDWDtDQUNBLElBQUksSUFBSSxTQUFTLFNBQVM7RUFDdEIsS0FBSyxNQUFNLFVBQVUsSUFBSSxTQUNyQixJQUFJLGVBQWUsUUFBUSxHQUFHLEdBQzFCLE9BQU87RUFFZixPQUFPO0NBQ1g7Q0FDQSxJQUFJLElBQUksU0FBUyxTQUFTO0VBQ3RCLEtBQUssTUFBTSxRQUFRLElBQUksT0FDbkIsSUFBSSxlQUFlLE1BQU0sR0FBRyxHQUN4QixPQUFPO0VBRWYsSUFBSSxJQUFJLFFBQVEsZUFBZSxJQUFJLE1BQU0sR0FBRyxHQUN4QyxPQUFPO0VBQ1gsT0FBTztDQUNYO0NBQ0EsT0FBTztBQUNYOzs7OztBQUtBLElBQWEsNEJBQTRCLFFBQVEsYUFBYSxDQUFDLE9BQU8sV0FBVztDQUM3RSxNQUFNLE1BQU0sa0JBQWtCO0VBQUUsR0FBRztFQUFRO0NBQVcsQ0FBQztDQUN2RCxRQUFRLFFBQVEsR0FBRztDQUNuQixZQUFZLEtBQUssTUFBTTtDQUN2QixPQUFPLFNBQVMsS0FBSyxNQUFNO0FBQy9CO0FBQ0EsSUFBYSxrQ0FBa0MsUUFBUSxJQUFJLGFBQWEsQ0FBQyxPQUFPLFdBQVc7Q0FDdkYsTUFBTSxFQUFFLGdCQUFnQixXQUFXLFVBQVUsQ0FBQztDQUM5QyxNQUFNLE1BQU0sa0JBQWtCO0VBQUUsR0FBSSxrQkFBa0IsQ0FBQztFQUFJO0VBQVE7RUFBSTtDQUFXLENBQUM7Q0FDbkYsUUFBUSxRQUFRLEdBQUc7Q0FDbkIsWUFBWSxLQUFLLE1BQU07Q0FDdkIsT0FBTyxTQUFTLEtBQUssTUFBTTtBQUMvQjs7O0FDN2JBLElBQU0sWUFBWTtDQUNkLE1BQU07Q0FDTixLQUFLO0NBQ0wsVUFBVTtDQUNWLGFBQWE7Q0FDYixPQUFPO0FBQ1g7QUFFQSxJQUFhLG1CQUFtQixRQUFRLEtBQUssT0FBTyxZQUFZO0NBQzVELE1BQU0sT0FBTztDQUNiLEtBQUssT0FBTztDQUNaLE1BQU0sRUFBRSxTQUFTLFNBQVMsUUFBUSxVQUFVLG9CQUFvQixPQUFPLEtBQ2xFO0NBQ0wsSUFBSSxPQUFPLFlBQVksVUFDbkIsS0FBSyxZQUFZO0NBQ3JCLElBQUksT0FBTyxZQUFZLFVBQ25CLEtBQUssWUFBWTtDQUVyQixJQUFJLFFBQVE7RUFDUixLQUFLLFNBQVMsVUFBVSxXQUFXO0VBQ25DLElBQUksS0FBSyxXQUFXLElBQ2hCLE9BQU8sS0FBSztFQUdoQixJQUFJLFdBQVcsUUFDWCxPQUFPLEtBQUs7Q0FFcEI7Q0FDQSxJQUFJLGlCQUNBLEtBQUssa0JBQWtCO0NBQzNCLElBQUksWUFBWSxTQUFTLE9BQU8sR0FBRztFQUMvQixNQUFNLFVBQVUsQ0FBQyxHQUFHLFFBQVE7RUFDNUIsSUFBSSxRQUFRLFdBQVcsR0FDbkIsS0FBSyxVQUFVLFFBQVEsRUFBRSxDQUFDO09BQ3pCLElBQUksUUFBUSxTQUFTLEdBQ3RCLEtBQUssUUFBUSxDQUNULEdBQUcsUUFBUSxLQUFLLFdBQVc7R0FDdkIsR0FBSSxJQUFJLFdBQVcsY0FBYyxJQUFJLFdBQVcsY0FBYyxJQUFJLFdBQVcsZ0JBQ3ZFLEVBQUUsTUFBTSxTQUFTLElBQ2pCLENBQUM7R0FDUCxTQUFTLE1BQU07RUFDbkIsRUFBRSxDQUNOO0NBRVI7QUFDSjtBQUNBLElBQWEsbUJBQW1CLFFBQVEsS0FBSyxPQUFPLFlBQVk7Q0FDNUQsTUFBTSxPQUFPO0NBQ2IsTUFBTSxFQUFFLFNBQVMsU0FBUyxRQUFRLFlBQVksa0JBQWtCLHFCQUFxQixPQUFPLEtBQUs7Q0FDakcsSUFBSSxPQUFPLFdBQVcsWUFBWSxPQUFPLFNBQVMsS0FBSyxHQUNuRCxLQUFLLE9BQU87TUFFWixLQUFLLE9BQU87Q0FFaEIsTUFBTSxRQUFRLE9BQU8scUJBQXFCLFlBQVkscUJBQXFCLFdBQVcsT0FBTztDQUM3RixNQUFNLFFBQVEsT0FBTyxxQkFBcUIsWUFBWSxxQkFBcUIsV0FBVyxPQUFPO0NBQzdGLE1BQU0sU0FBUyxJQUFJLFdBQVcsY0FBYyxJQUFJLFdBQVc7Q0FDM0QsSUFBSSxPQUNBLElBQUksUUFBUTtFQUNSLEtBQUssVUFBVTtFQUNmLEtBQUssbUJBQW1CO0NBQzVCLE9BRUksS0FBSyxtQkFBbUI7TUFHM0IsSUFBSSxPQUFPLFlBQVksVUFDeEIsS0FBSyxVQUFVO0NBRW5CLElBQUksT0FDQSxJQUFJLFFBQVE7RUFDUixLQUFLLFVBQVU7RUFDZixLQUFLLG1CQUFtQjtDQUM1QixPQUVJLEtBQUssbUJBQW1CO01BRzNCLElBQUksT0FBTyxZQUFZLFVBQ3hCLEtBQUssVUFBVTtDQUVuQixJQUFJLE9BQU8sZUFBZSxVQUN0QixLQUFLLGFBQWE7QUFDMUI7QUFDQSxJQUFhLG9CQUFvQixTQUFTLE1BQU0sTUFBTSxZQUFZO0NBQzlELEtBQUssT0FBTztBQUNoQjtBQUNBLElBQWEsbUJBQW1CLFNBQVMsS0FBSyxPQUFPLFlBQVk7Q0FDN0QsSUFBSSxJQUFJLG9CQUFvQixTQUN4QixNQUFNLElBQUksTUFBTSw2Q0FBNkM7QUFFckU7QUFDQSxJQUFhLG1CQUFtQixTQUFTLEtBQUssT0FBTyxZQUFZO0NBQzdELElBQUksSUFBSSxvQkFBb0IsU0FDeEIsTUFBTSxJQUFJLE1BQU0sOENBQThDO0FBRXRFO0FBQ0EsSUFBYSxpQkFBaUIsU0FBUyxLQUFLLE1BQU0sWUFBWTtDQUMxRCxJQUFJLElBQUksV0FBVyxlQUFlO0VBQzlCLEtBQUssT0FBTztFQUNaLEtBQUssV0FBVztFQUNoQixLQUFLLE9BQU8sQ0FBQyxJQUFJO0NBQ3JCLE9BRUksS0FBSyxPQUFPO0FBRXBCO0FBQ0EsSUFBYSxzQkFBc0IsU0FBUyxLQUFLLE9BQU8sWUFBWTtDQUNoRSxJQUFJLElBQUksb0JBQW9CLFNBQ3hCLE1BQU0sSUFBSSxNQUFNLGdEQUFnRDtBQUV4RTtBQUNBLElBQWEsaUJBQWlCLFNBQVMsS0FBSyxPQUFPLFlBQVk7Q0FDM0QsSUFBSSxJQUFJLG9CQUFvQixTQUN4QixNQUFNLElBQUksTUFBTSwyQ0FBMkM7QUFFbkU7QUFDQSxJQUFhLGtCQUFrQixTQUFTLE1BQU0sTUFBTSxZQUFZO0NBQzVELEtBQUssTUFBTSxDQUFDO0FBQ2hCO0FBT0EsSUFBYSxpQkFBaUIsU0FBUyxLQUFLLE9BQU8sWUFBWTtDQUMzRCxJQUFJLElBQUksb0JBQW9CLFNBQ3hCLE1BQU0sSUFBSSxNQUFNLDJDQUEyQztBQUVuRTtBQUNBLElBQWEsaUJBQWlCLFFBQVEsTUFBTSxNQUFNLFlBQVk7Q0FDMUQsTUFBTSxNQUFNLE9BQU8sS0FBSztDQUN4QixNQUFNLFNBQVMsY0FBYyxJQUFJLE9BQU87Q0FFeEMsSUFBSSxPQUFPLE9BQU8sTUFBTSxPQUFPLE1BQU0sUUFBUSxHQUN6QyxLQUFLLE9BQU87Q0FDaEIsSUFBSSxPQUFPLE9BQU8sTUFBTSxPQUFPLE1BQU0sUUFBUSxHQUN6QyxLQUFLLE9BQU87Q0FDaEIsS0FBSyxPQUFPO0FBQ2hCO0FBQ0EsSUFBYSxvQkFBb0IsUUFBUSxLQUFLLE1BQU0sWUFBWTtDQUM1RCxNQUFNLE1BQU0sT0FBTyxLQUFLO0NBQ3hCLE1BQU0sT0FBTyxDQUFDO0NBQ2QsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUNsQixJQUFJLFFBQVEsS0FBQSxHQUNKO01BQUEsSUFBSSxvQkFBb0IsU0FDeEIsTUFBTSxJQUFJLE1BQU0sMERBQTBEO0NBQUEsT0FNN0UsSUFBSSxPQUFPLFFBQVEsVUFDcEIsSUFBSSxJQUFJLG9CQUFvQixTQUN4QixNQUFNLElBQUksTUFBTSxzREFBc0Q7TUFHdEUsS0FBSyxLQUFLLE9BQU8sR0FBRyxDQUFDO01BSXpCLEtBQUssS0FBSyxHQUFHO0NBR3JCLElBQUksS0FBSyxXQUFXLEdBQUcsQ0FFdkIsT0FDSyxJQUFJLEtBQUssV0FBVyxHQUFHO0VBQ3hCLE1BQU0sTUFBTSxLQUFLO0VBQ2pCLEtBQUssT0FBTyxRQUFRLE9BQU8sU0FBUyxPQUFPO0VBQzNDLElBQUksSUFBSSxXQUFXLGNBQWMsSUFBSSxXQUFXLGVBQzVDLEtBQUssT0FBTyxDQUFDLEdBQUc7T0FHaEIsS0FBSyxRQUFRO0NBRXJCLE9BQ0s7RUFDRCxJQUFJLEtBQUssT0FBTyxNQUFNLE9BQU8sTUFBTSxRQUFRLEdBQ3ZDLEtBQUssT0FBTztFQUNoQixJQUFJLEtBQUssT0FBTyxNQUFNLE9BQU8sTUFBTSxRQUFRLEdBQ3ZDLEtBQUssT0FBTztFQUNoQixJQUFJLEtBQUssT0FBTyxNQUFNLE9BQU8sTUFBTSxTQUFTLEdBQ3hDLEtBQUssT0FBTztFQUNoQixJQUFJLEtBQUssT0FBTyxNQUFNLE1BQU0sSUFBSSxHQUM1QixLQUFLLE9BQU87RUFDaEIsS0FBSyxPQUFPO0NBQ2hCO0FBQ0o7QUFDQSxJQUFhLGdCQUFnQixTQUFTLEtBQUssT0FBTyxZQUFZO0NBQzFELElBQUksSUFBSSxvQkFBb0IsU0FDeEIsTUFBTSxJQUFJLE1BQU0sMENBQTBDO0FBRWxFO0FBQ0EsSUFBYSw0QkFBNEIsUUFBUSxNQUFNLE1BQU0sWUFBWTtDQUNyRSxNQUFNLFFBQVE7Q0FDZCxNQUFNLFVBQVUsT0FBTyxLQUFLO0NBQzVCLElBQUksQ0FBQyxTQUNELE1BQU0sSUFBSSxNQUFNLHVDQUF1QztDQUMzRCxNQUFNLE9BQU87Q0FDYixNQUFNLFVBQVUsUUFBUTtBQUM1QjtBQUNBLElBQWEsaUJBQWlCLFFBQVEsTUFBTSxNQUFNLFlBQVk7Q0FDMUQsTUFBTSxRQUFRO0NBQ2QsTUFBTSxPQUFPO0VBQ1QsTUFBTTtFQUNOLFFBQVE7RUFDUixpQkFBaUI7Q0FDckI7Q0FDQSxNQUFNLEVBQUUsU0FBUyxTQUFTLFNBQVMsT0FBTyxLQUFLO0NBQy9DLElBQUksWUFBWSxLQUFBLEdBQ1osS0FBSyxZQUFZO0NBQ3JCLElBQUksWUFBWSxLQUFBLEdBQ1osS0FBSyxZQUFZO0NBQ3JCLElBQUksTUFDQSxJQUFJLEtBQUssV0FBVyxHQUFHO0VBQ25CLEtBQUssbUJBQW1CLEtBQUs7RUFDN0IsT0FBTyxPQUFPLE9BQU8sSUFBSTtDQUM3QixPQUNLO0VBQ0QsT0FBTyxPQUFPLE9BQU8sSUFBSTtFQUN6QixNQUFNLFFBQVEsS0FBSyxLQUFLLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxFQUFFO0NBQzNEO01BR0EsT0FBTyxPQUFPLE9BQU8sSUFBSTtBQUVqQztBQUNBLElBQWEsb0JBQW9CLFNBQVMsTUFBTSxNQUFNLFlBQVk7Q0FDOUQsS0FBSyxPQUFPO0FBQ2hCO0FBQ0EsSUFBYSxtQkFBbUIsU0FBUyxLQUFLLE9BQU8sWUFBWTtDQUM3RCxJQUFJLElBQUksb0JBQW9CLFNBQ3hCLE1BQU0sSUFBSSxNQUFNLG1EQUFtRDtBQUUzRTtBQUNBLElBQWEscUJBQXFCLFNBQVMsS0FBSyxPQUFPLFlBQVk7Q0FDL0QsSUFBSSxJQUFJLG9CQUFvQixTQUN4QixNQUFNLElBQUksTUFBTSxxREFBcUQ7QUFFN0U7QUFDQSxJQUFhLHNCQUFzQixTQUFTLEtBQUssT0FBTyxZQUFZO0NBQ2hFLElBQUksSUFBSSxvQkFBb0IsU0FDeEIsTUFBTSxJQUFJLE1BQU0saURBQWlEO0FBRXpFO0FBQ0EsSUFBYSxnQkFBZ0IsU0FBUyxLQUFLLE9BQU8sWUFBWTtDQUMxRCxJQUFJLElBQUksb0JBQW9CLFNBQ3hCLE1BQU0sSUFBSSxNQUFNLDBDQUEwQztBQUVsRTtBQUNBLElBQWEsZ0JBQWdCLFNBQVMsS0FBSyxPQUFPLFlBQVk7Q0FDMUQsSUFBSSxJQUFJLG9CQUFvQixTQUN4QixNQUFNLElBQUksTUFBTSwwQ0FBMEM7QUFFbEU7QUFFQSxJQUFhLGtCQUFrQixRQUFRLEtBQUssT0FBTyxXQUFXO0NBQzFELE1BQU0sT0FBTztDQUNiLE1BQU0sTUFBTSxPQUFPLEtBQUs7Q0FDeEIsTUFBTSxFQUFFLFNBQVMsWUFBWSxPQUFPLEtBQUs7Q0FDekMsSUFBSSxPQUFPLFlBQVksVUFDbkIsS0FBSyxXQUFXO0NBQ3BCLElBQUksT0FBTyxZQUFZLFVBQ25CLEtBQUssV0FBVztDQUNwQixLQUFLLE9BQU87Q0FDWixLQUFLLFFBQVEsUUFBUSxJQUFJLFNBQVMsS0FBSztFQUNuQyxHQUFHO0VBQ0gsTUFBTSxDQUFDLEdBQUcsT0FBTyxNQUFNLE9BQU87Q0FDbEMsQ0FBQztBQUNMO0FBQ0EsSUFBYSxtQkFBbUIsUUFBUSxLQUFLLE9BQU8sV0FBVztDQUMzRCxNQUFNLE9BQU87Q0FDYixNQUFNLE1BQU0sT0FBTyxLQUFLO0NBQ3hCLEtBQUssT0FBTztDQUNaLEtBQUssYUFBYSxDQUFDO0NBQ25CLE1BQU0sUUFBUSxJQUFJO0NBQ2xCLEtBQUssTUFBTSxPQUFPLE9BQ2QsS0FBSyxXQUFXLE9BQU8sUUFBUSxNQUFNLE1BQU0sS0FBSztFQUM1QyxHQUFHO0VBQ0gsTUFBTTtHQUFDLEdBQUcsT0FBTztHQUFNO0dBQWM7RUFBRztDQUM1QyxDQUFDO0NBR0wsTUFBTSxVQUFVLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDO0NBQzFDLE1BQU0sZUFBZSxJQUFJLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLFFBQVEsUUFBUTtFQUN0RCxNQUFNLElBQUksSUFBSSxNQUFNLElBQUksQ0FBQztFQUN6QixJQUFJLElBQUksT0FBTyxTQUNYLE9BQU8sRUFBRSxVQUFVLEtBQUE7T0FHbkIsT0FBTyxFQUFFLFdBQVcsS0FBQTtDQUU1QixDQUFDLENBQUM7Q0FDRixJQUFJLGFBQWEsT0FBTyxHQUNwQixLQUFLLFdBQVcsTUFBTSxLQUFLLFlBQVk7Q0FHM0MsSUFBSSxJQUFJLFVBQVUsS0FBSyxJQUFJLFNBQVMsU0FFaEMsS0FBSyx1QkFBdUI7TUFFM0IsSUFBSSxDQUFDLElBQUksVUFFTjtNQUFBLElBQUksT0FBTyxVQUNYLEtBQUssdUJBQXVCO0NBQUEsT0FFL0IsSUFBSSxJQUFJLFVBQ1QsS0FBSyx1QkFBdUIsUUFBUSxJQUFJLFVBQVUsS0FBSztFQUNuRCxHQUFHO0VBQ0gsTUFBTSxDQUFDLEdBQUcsT0FBTyxNQUFNLHNCQUFzQjtDQUNqRCxDQUFDO0FBRVQ7QUFDQSxJQUFhLGtCQUFrQixRQUFRLEtBQUssTUFBTSxXQUFXO0NBQ3pELE1BQU0sTUFBTSxPQUFPLEtBQUs7Q0FHeEIsTUFBTSxjQUFjLElBQUksY0FBYztDQUN0QyxNQUFNLFVBQVUsSUFBSSxRQUFRLEtBQUssR0FBRyxNQUFNLFFBQVEsR0FBRyxLQUFLO0VBQ3RELEdBQUc7RUFDSCxNQUFNO0dBQUMsR0FBRyxPQUFPO0dBQU0sY0FBYyxVQUFVO0dBQVM7RUFBQztDQUM3RCxDQUFDLENBQUM7Q0FDRixJQUFJLGFBQ0EsS0FBSyxRQUFRO01BR2IsS0FBSyxRQUFRO0FBRXJCO0FBQ0EsSUFBYSx5QkFBeUIsUUFBUSxLQUFLLE1BQU0sV0FBVztDQUNoRSxNQUFNLE1BQU0sT0FBTyxLQUFLO0NBQ3hCLE1BQU0sSUFBSSxRQUFRLElBQUksTUFBTSxLQUFLO0VBQzdCLEdBQUc7RUFDSCxNQUFNO0dBQUMsR0FBRyxPQUFPO0dBQU07R0FBUztFQUFDO0NBQ3JDLENBQUM7Q0FDRCxNQUFNLElBQUksUUFBUSxJQUFJLE9BQU8sS0FBSztFQUM5QixHQUFHO0VBQ0gsTUFBTTtHQUFDLEdBQUcsT0FBTztHQUFNO0dBQVM7RUFBQztDQUNyQyxDQUFDO0NBQ0QsTUFBTSx3QkFBd0IsUUFBUSxXQUFXLE9BQU8sT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFdBQVc7Q0FLcEYsS0FBSyxRQUFRLENBSFQsR0FBSSxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FDMUMsR0FBSSxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FFN0I7QUFDckI7QUFDQSxJQUFhLGtCQUFrQixRQUFRLEtBQUssT0FBTyxXQUFXO0NBQzFELE1BQU0sT0FBTztDQUNiLE1BQU0sTUFBTSxPQUFPLEtBQUs7Q0FDeEIsS0FBSyxPQUFPO0NBQ1osTUFBTSxhQUFhLElBQUksV0FBVyxrQkFBa0IsZ0JBQWdCO0NBQ3BFLE1BQU0sV0FBVyxJQUFJLFdBQVcsa0JBQWtCLFVBQVUsSUFBSSxXQUFXLGdCQUFnQixVQUFVO0NBQ3JHLE1BQU0sY0FBYyxJQUFJLE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxHQUFHLEtBQUs7RUFDeEQsR0FBRztFQUNILE1BQU07R0FBQyxHQUFHLE9BQU87R0FBTTtHQUFZO0VBQUM7Q0FDeEMsQ0FBQyxDQUFDO0NBQ0YsTUFBTSxPQUFPLElBQUksT0FDWCxRQUFRLElBQUksTUFBTSxLQUFLO0VBQ3JCLEdBQUc7RUFDSCxNQUFNO0dBQUMsR0FBRyxPQUFPO0dBQU07R0FBVSxHQUFJLElBQUksV0FBVyxnQkFBZ0IsQ0FBQyxJQUFJLE1BQU0sTUFBTSxJQUFJLENBQUM7RUFBRTtDQUNoRyxDQUFDLElBQ0M7Q0FDTixJQUFJLElBQUksV0FBVyxpQkFBaUI7RUFDaEMsS0FBSyxjQUFjO0VBQ25CLElBQUksTUFDQSxLQUFLLFFBQVE7Q0FFckIsT0FDSyxJQUFJLElBQUksV0FBVyxlQUFlO0VBQ25DLEtBQUssUUFBUSxFQUNULE9BQU8sWUFDWDtFQUNBLElBQUksTUFDQSxLQUFLLE1BQU0sTUFBTSxLQUFLLElBQUk7RUFFOUIsS0FBSyxXQUFXLFlBQVk7RUFDNUIsSUFBSSxDQUFDLE1BQ0QsS0FBSyxXQUFXLFlBQVk7Q0FFcEMsT0FDSztFQUNELEtBQUssUUFBUTtFQUNiLElBQUksTUFDQSxLQUFLLGtCQUFrQjtDQUUvQjtDQUVBLE1BQU0sRUFBRSxTQUFTLFlBQVksT0FBTyxLQUFLO0NBQ3pDLElBQUksT0FBTyxZQUFZLFVBQ25CLEtBQUssV0FBVztDQUNwQixJQUFJLE9BQU8sWUFBWSxVQUNuQixLQUFLLFdBQVc7QUFDeEI7QUFDQSxJQUFhLG1CQUFtQixRQUFRLEtBQUssT0FBTyxXQUFXO0NBQzNELE1BQU0sT0FBTztDQUNiLE1BQU0sTUFBTSxPQUFPLEtBQUs7Q0FDeEIsS0FBSyxPQUFPO0NBSVosTUFBTSxVQUFVLElBQUk7Q0FFcEIsTUFBTSxXQURTLFFBQVEsS0FBSyxLQUNIO0NBQ3pCLElBQUksSUFBSSxTQUFTLFdBQVcsWUFBWSxTQUFTLE9BQU8sR0FBRztFQUV2RCxNQUFNLGNBQWMsUUFBUSxJQUFJLFdBQVcsS0FBSztHQUM1QyxHQUFHO0dBQ0gsTUFBTTtJQUFDLEdBQUcsT0FBTztJQUFNO0lBQXFCO0dBQUc7RUFDbkQsQ0FBQztFQUNELEtBQUssb0JBQW9CLENBQUM7RUFDMUIsS0FBSyxNQUFNLFdBQVcsVUFDbEIsS0FBSyxrQkFBa0IsUUFBUSxVQUFVO0NBRWpELE9BQ0s7RUFFRCxJQUFJLElBQUksV0FBVyxjQUFjLElBQUksV0FBVyxpQkFDNUMsS0FBSyxnQkFBZ0IsUUFBUSxJQUFJLFNBQVMsS0FBSztHQUMzQyxHQUFHO0dBQ0gsTUFBTSxDQUFDLEdBQUcsT0FBTyxNQUFNLGVBQWU7RUFDMUMsQ0FBQztFQUVMLEtBQUssdUJBQXVCLFFBQVEsSUFBSSxXQUFXLEtBQUs7R0FDcEQsR0FBRztHQUNILE1BQU0sQ0FBQyxHQUFHLE9BQU8sTUFBTSxzQkFBc0I7RUFDakQsQ0FBQztDQUNMO0NBRUEsTUFBTSxZQUFZLFFBQVEsS0FBSztDQUMvQixJQUFJLFdBQVc7RUFDWCxNQUFNLGlCQUFpQixDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsUUFBUSxNQUFNLE9BQU8sTUFBTSxZQUFZLE9BQU8sTUFBTSxRQUFRO0VBQ2xHLElBQUksZUFBZSxTQUFTLEdBQ3hCLEtBQUssV0FBVztDQUV4QjtBQUNKO0FBQ0EsSUFBYSxxQkFBcUIsUUFBUSxLQUFLLE1BQU0sV0FBVztDQUM1RCxNQUFNLE1BQU0sT0FBTyxLQUFLO0NBQ3hCLE1BQU0sUUFBUSxRQUFRLElBQUksV0FBVyxLQUFLLE1BQU07Q0FDaEQsTUFBTSxPQUFPLElBQUksS0FBSyxJQUFJLE1BQU07Q0FDaEMsSUFBSSxJQUFJLFdBQVcsZUFBZTtFQUM5QixLQUFLLE1BQU0sSUFBSTtFQUNmLEtBQUssV0FBVztDQUNwQixPQUVJLEtBQUssUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU3QztBQUNBLElBQWEsd0JBQXdCLFFBQVEsS0FBSyxPQUFPLFdBQVc7Q0FDaEUsTUFBTSxNQUFNLE9BQU8sS0FBSztDQUN4QixRQUFRLElBQUksV0FBVyxLQUFLLE1BQU07Q0FDbEMsTUFBTSxPQUFPLElBQUksS0FBSyxJQUFJLE1BQU07Q0FDaEMsS0FBSyxNQUFNLElBQUk7QUFDbkI7QUFDQSxJQUFhLG9CQUFvQixRQUFRLEtBQUssTUFBTSxXQUFXO0NBQzNELE1BQU0sTUFBTSxPQUFPLEtBQUs7Q0FDeEIsUUFBUSxJQUFJLFdBQVcsS0FBSyxNQUFNO0NBQ2xDLE1BQU0sT0FBTyxJQUFJLEtBQUssSUFBSSxNQUFNO0NBQ2hDLEtBQUssTUFBTSxJQUFJO0NBQ2YsS0FBSyxVQUFVLEtBQUssTUFBTSxLQUFLLFVBQVUsSUFBSSxZQUFZLENBQUM7QUFDOUQ7QUFDQSxJQUFhLHFCQUFxQixRQUFRLEtBQUssTUFBTSxXQUFXO0NBQzVELE1BQU0sTUFBTSxPQUFPLEtBQUs7Q0FDeEIsUUFBUSxJQUFJLFdBQVcsS0FBSyxNQUFNO0NBQ2xDLE1BQU0sT0FBTyxJQUFJLEtBQUssSUFBSSxNQUFNO0NBQ2hDLEtBQUssTUFBTSxJQUFJO0NBQ2YsSUFBSSxJQUFJLE9BQU8sU0FDWCxLQUFLLFlBQVksS0FBSyxNQUFNLEtBQUssVUFBVSxJQUFJLFlBQVksQ0FBQztBQUNwRTtBQUNBLElBQWEsa0JBQWtCLFFBQVEsS0FBSyxNQUFNLFdBQVc7Q0FDekQsTUFBTSxNQUFNLE9BQU8sS0FBSztDQUN4QixRQUFRLElBQUksV0FBVyxLQUFLLE1BQU07Q0FDbEMsTUFBTSxPQUFPLElBQUksS0FBSyxJQUFJLE1BQU07Q0FDaEMsS0FBSyxNQUFNLElBQUk7Q0FDZixJQUFJO0NBQ0osSUFBSTtFQUNBLGFBQWEsSUFBSSxXQUFXLEtBQUEsQ0FBUztDQUN6QyxRQUNNO0VBQ0YsTUFBTSxJQUFJLE1BQU0sdURBQXVEO0NBQzNFO0NBQ0EsS0FBSyxVQUFVO0FBQ25CO0FBQ0EsSUFBYSxpQkFBaUIsUUFBUSxLQUFLLE9BQU8sV0FBVztDQUN6RCxNQUFNLE1BQU0sT0FBTyxLQUFLO0NBQ3hCLE1BQU0sZ0JBQWdCLElBQUksR0FBRyxLQUFLLE9BQU8sSUFBSSxlQUFlO0NBQzVELE1BQU0sWUFBWSxJQUFJLE9BQU8sVUFBVyxnQkFBZ0IsSUFBSSxNQUFNLElBQUksS0FBTSxJQUFJO0NBQ2hGLFFBQVEsV0FBVyxLQUFLLE1BQU07Q0FDOUIsTUFBTSxPQUFPLElBQUksS0FBSyxJQUFJLE1BQU07Q0FDaEMsS0FBSyxNQUFNO0FBQ2Y7QUFDQSxJQUFhLHFCQUFxQixRQUFRLEtBQUssTUFBTSxXQUFXO0NBQzVELE1BQU0sTUFBTSxPQUFPLEtBQUs7Q0FDeEIsUUFBUSxJQUFJLFdBQVcsS0FBSyxNQUFNO0NBQ2xDLE1BQU0sT0FBTyxJQUFJLEtBQUssSUFBSSxNQUFNO0NBQ2hDLEtBQUssTUFBTSxJQUFJO0NBQ2YsS0FBSyxXQUFXO0FBQ3BCO0FBQ0EsSUFBYSxvQkFBb0IsUUFBUSxLQUFLLE9BQU8sV0FBVztDQUM1RCxNQUFNLE1BQU0sT0FBTyxLQUFLO0NBQ3hCLFFBQVEsSUFBSSxXQUFXLEtBQUssTUFBTTtDQUNsQyxNQUFNLE9BQU8sSUFBSSxLQUFLLElBQUksTUFBTTtDQUNoQyxLQUFLLE1BQU0sSUFBSTtBQUNuQjtBQUNBLElBQWEscUJBQXFCLFFBQVEsS0FBSyxPQUFPLFdBQVc7Q0FDN0QsTUFBTSxNQUFNLE9BQU8sS0FBSztDQUN4QixRQUFRLElBQUksV0FBVyxLQUFLLE1BQU07Q0FDbEMsTUFBTSxPQUFPLElBQUksS0FBSyxJQUFJLE1BQU07Q0FDaEMsS0FBSyxNQUFNLElBQUk7QUFDbkI7QUFDQSxJQUFhLGlCQUFpQixRQUFRLEtBQUssT0FBTyxXQUFXO0NBQ3pELE1BQU0sWUFBWSxPQUFPLEtBQUs7Q0FDOUIsUUFBUSxXQUFXLEtBQUssTUFBTTtDQUM5QixNQUFNLE9BQU8sSUFBSSxLQUFLLElBQUksTUFBTTtDQUNoQyxLQUFLLE1BQU07QUFDZjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBRXJnQkEsSUFBYSxpQkFBK0IsMkJBQWtCLG1CQUFtQixNQUFNLFFBQVE7Q0FDM0YsZ0JBQXFCLEtBQUssTUFBTSxHQUFHO0NBQ25DLGdCQUF3QixLQUFLLE1BQU0sR0FBRztBQUMxQyxDQUFDO0FBQ0QsU0FBZ0IsU0FBUyxRQUFRO0NBQzdCLE9BQU8rQiw2QkFBa0IsZ0JBQWdCLE1BQU07QUFDbkQ7QUFDQSxJQUFhLGFBQTJCLDJCQUFrQixlQUFlLE1BQU0sUUFBUTtDQUNuRixZQUFpQixLQUFLLE1BQU0sR0FBRztDQUMvQixnQkFBd0IsS0FBSyxNQUFNLEdBQUc7QUFDMUMsQ0FBQztBQUNELFNBQWdCQyxPQUFLLFFBQVE7Q0FDekIsT0FBT0MseUJBQWMsWUFBWSxNQUFNO0FBQzNDO0FBQ0EsSUFBYSxhQUEyQiwyQkFBa0IsZUFBZSxNQUFNLFFBQVE7Q0FDbkYsWUFBaUIsS0FBSyxNQUFNLEdBQUc7Q0FDL0IsZ0JBQXdCLEtBQUssTUFBTSxHQUFHO0FBQzFDLENBQUM7QUFDRCxTQUFnQixLQUFLLFFBQVE7Q0FDekIsT0FBT0MseUJBQWMsWUFBWSxNQUFNO0FBQzNDO0FBQ0EsSUFBYSxpQkFBK0IsMkJBQWtCLG1CQUFtQixNQUFNLFFBQVE7Q0FDM0YsZ0JBQXFCLEtBQUssTUFBTSxHQUFHO0NBQ25DLGdCQUF3QixLQUFLLE1BQU0sR0FBRztBQUMxQyxDQUFDO0FBQ0QsU0FBZ0IsU0FBUyxRQUFRO0NBQzdCLE9BQU9DLDZCQUFrQixnQkFBZ0IsTUFBTTtBQUNuRDs7O0FDMUJBLElBQU0sZUFBZSxNQUFNLFdBQVc7Q0FDbEMsVUFBVSxLQUFLLE1BQU0sTUFBTTtDQUMzQixLQUFLLE9BQU87Q0FDWixPQUFPLGlCQUFpQixNQUFNO0VBQzFCLFFBQVEsRUFDSixRQUFRLFdBQVdDLFlBQWlCLE1BQU0sTUFBTSxFQUVwRDtFQUNBLFNBQVMsRUFDTCxRQUFRLFdBQVdDLGFBQWtCLE1BQU0sTUFBTSxFQUVyRDtFQUNBLFVBQVUsRUFDTixRQUFRLFVBQVU7R0FDZCxLQUFLLE9BQU8sS0FBSyxLQUFLO0dBQ3RCLEtBQUssVUFBVSxLQUFLLFVBQVUsS0FBSyxRQUFRQyx1QkFBNEIsQ0FBQztFQUM1RSxFQUVKO0VBQ0EsV0FBVyxFQUNQLFFBQVEsV0FBVztHQUNmLEtBQUssT0FBTyxLQUFLLEdBQUcsTUFBTTtHQUMxQixLQUFLLFVBQVUsS0FBSyxVQUFVLEtBQUssUUFBUUEsdUJBQTRCLENBQUM7RUFDNUUsRUFFSjtFQUNBLFNBQVMsRUFDTCxNQUFNO0dBQ0YsT0FBTyxLQUFLLE9BQU8sV0FBVztFQUNsQyxFQUVKO0NBQ0osQ0FBQztBQU1MO0FBRUEsSUFBYSxlQUE2QiwyQkFBa0IsWUFBWSxhQUFhLEVBQ2pGLFFBQVEsTUFDWixDQUFDOzs7QUMzQ0QsSUFBYSxRQUF3Qix1QkFBWSxZQUFZO0FBQzdELElBQWEsYUFBNkIsNEJBQWlCLFlBQVk7QUFDdkUsSUFBYSxZQUE0QiwyQkFBZ0IsWUFBWTtBQUNyRSxJQUFhLGlCQUFpQyxnQ0FBcUIsWUFBWTtBQUUvRSxJQUFhLFNBQXlCLHdCQUFhLFlBQVk7QUFDL0QsSUFBYSxTQUF5Qix3QkFBYSxZQUFZO0FBQy9ELElBQWEsY0FBOEIsNkJBQWtCLFlBQVk7QUFDekUsSUFBYSxjQUE4Qiw2QkFBa0IsWUFBWTtBQUN6RSxJQUFhLGFBQTZCLDRCQUFpQixZQUFZO0FBQ3ZFLElBQWEsYUFBNkIsNEJBQWlCLFlBQVk7QUFDdkUsSUFBYSxrQkFBa0MsaUNBQXNCLFlBQVk7QUFDakYsSUFBYSxrQkFBa0MsaUNBQXNCLFlBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0lqRixJQUFNLG1DQUFtQyxJQUFJLFFBQVE7QUFDckQsU0FBUyxvQkFBb0IsTUFBTSxPQUFPLFNBQVM7Q0FDL0MsTUFBTSxRQUFRLE9BQU8sZUFBZSxJQUFJO0NBQ3hDLElBQUksWUFBWSxpQkFBaUIsSUFBSSxLQUFLO0NBQzFDLElBQUksQ0FBQyxXQUFXO0VBQ1osNEJBQVksSUFBSSxJQUFJO0VBQ3BCLGlCQUFpQixJQUFJLE9BQU8sU0FBUztDQUN6QztDQUNBLElBQUksVUFBVSxJQUFJLEtBQUssR0FDbkI7Q0FDSixVQUFVLElBQUksS0FBSztDQUNuQixLQUFLLE1BQU0sT0FBTyxTQUFTO0VBQ3ZCLE1BQU0sS0FBSyxRQUFRO0VBQ25CLE9BQU8sZUFBZSxPQUFPLEtBQUs7R0FDOUIsY0FBYztHQUNkLFlBQVk7R0FDWixNQUFNO0lBQ0YsTUFBTSxRQUFRLEdBQUcsS0FBSyxJQUFJO0lBQzFCLE9BQU8sZUFBZSxNQUFNLEtBQUs7S0FDN0IsY0FBYztLQUNkLFVBQVU7S0FDVixZQUFZO0tBQ1osT0FBTztJQUNYLENBQUM7SUFDRCxPQUFPO0dBQ1g7R0FDQSxJQUFJLEdBQUc7SUFDSCxPQUFPLGVBQWUsTUFBTSxLQUFLO0tBQzdCLGNBQWM7S0FDZCxVQUFVO0tBQ1YsWUFBWTtLQUNaLE9BQU87SUFDWCxDQUFDO0dBQ0w7RUFDSixDQUFDO0NBQ0w7QUFDSjtBQUNBLElBQWEsVUFBd0IsMkJBQWtCLFlBQVksTUFBTSxRQUFRO0NBQzdFLFNBQWMsS0FBSyxNQUFNLEdBQUc7Q0FDNUIsT0FBTyxPQUFPLEtBQUssY0FBYyxFQUM3QixZQUFZO0VBQ1IsT0FBTywrQkFBK0IsTUFBTSxPQUFPO0VBQ25ELFFBQVEsK0JBQStCLE1BQU0sUUFBUTtDQUN6RCxFQUNKLENBQUM7Q0FDRCxLQUFLLGVBQWUseUJBQXlCLE1BQU0sQ0FBQyxDQUFDO0NBQ3JELEtBQUssTUFBTTtDQUNYLEtBQUssT0FBTyxJQUFJO0NBQ2hCLE9BQU8sZUFBZSxNQUFNLFFBQVEsRUFBRSxPQUFPLElBQUksQ0FBQztDQU1sRCxLQUFLLFNBQVMsTUFBTSxXQUFXQyxNQUFZLE1BQU0sTUFBTSxRQUFRLEVBQUUsUUFBUSxLQUFLLE1BQU0sQ0FBQztDQUNyRixLQUFLLGFBQWEsTUFBTSxXQUFXQyxVQUFnQixNQUFNLE1BQU0sTUFBTTtDQUNyRSxLQUFLLGFBQWEsT0FBTyxNQUFNLFdBQVdDLFdBQWlCLE1BQU0sTUFBTSxRQUFRLEVBQUUsUUFBUSxLQUFLLFdBQVcsQ0FBQztDQUMxRyxLQUFLLGlCQUFpQixPQUFPLE1BQU0sV0FBV0MsZUFBcUIsTUFBTSxNQUFNLE1BQU07Q0FDckYsS0FBSyxNQUFNLEtBQUs7Q0FDaEIsS0FBSyxVQUFVLE1BQU0sV0FBV0MsT0FBYSxNQUFNLE1BQU0sTUFBTTtDQUMvRCxLQUFLLFVBQVUsTUFBTSxXQUFXQyxPQUFhLE1BQU0sTUFBTSxNQUFNO0NBQy9ELEtBQUssY0FBYyxPQUFPLE1BQU0sV0FBV0MsWUFBa0IsTUFBTSxNQUFNLE1BQU07Q0FDL0UsS0FBSyxjQUFjLE9BQU8sTUFBTSxXQUFXQyxZQUFrQixNQUFNLE1BQU0sTUFBTTtDQUMvRSxLQUFLLGNBQWMsTUFBTSxXQUFXQyxXQUFpQixNQUFNLE1BQU0sTUFBTTtDQUN2RSxLQUFLLGNBQWMsTUFBTSxXQUFXQyxXQUFpQixNQUFNLE1BQU0sTUFBTTtDQUN2RSxLQUFLLGtCQUFrQixPQUFPLE1BQU0sV0FBV0MsZ0JBQXNCLE1BQU0sTUFBTSxNQUFNO0NBQ3ZGLEtBQUssa0JBQWtCLE9BQU8sTUFBTSxXQUFXQyxnQkFBc0IsTUFBTSxNQUFNLE1BQU07Q0FPdkYsb0JBQW9CLE1BQU0sV0FBVztFQUNqQyxNQUFNLEdBQUcsTUFBTTtHQUNYLE1BQU0sTUFBTSxLQUFLO0dBQ2pCLE9BQU8sS0FBSyxNQUFNQyxVQUFlLEtBQUssRUFDbEMsUUFBUSxDQUNKLEdBQUksSUFBSSxVQUFVLENBQUMsR0FDbkIsR0FBRyxLQUFLLEtBQUssT0FBTyxPQUFPLE9BQU8sYUFBYSxFQUFFLE1BQU07SUFBRSxPQUFPO0lBQUksS0FBSyxFQUFFLE9BQU8sU0FBUztJQUFHLFVBQVUsQ0FBQztHQUFFLEVBQUUsSUFBSSxFQUFFLENBQ3ZILEVBQ0osQ0FBQyxHQUFHLEVBQUUsUUFBUSxLQUFLLENBQUM7RUFDeEI7RUFDQSxLQUFLLEdBQUcsTUFBTTtHQUNWLE9BQU8sS0FBSyxNQUFNLEdBQUcsSUFBSTtFQUM3QjtFQUNBLE1BQU0sS0FBSyxRQUFRO0dBQ2YsT0FBT0MsTUFBVyxNQUFNLEtBQUssTUFBTTtFQUN2QztFQUNBLFFBQVE7R0FDSixPQUFPO0VBQ1g7RUFDQSxTQUFTLEtBQUssTUFBTTtHQUNoQixJQUFJLElBQUksTUFBTSxJQUFJO0dBQ2xCLE9BQU87RUFDWDtFQUNBLE9BQU8sT0FBTyxRQUFRO0dBQ2xCLE9BQU8sS0FBSyxNQUFNLE9BQU8sT0FBTyxNQUFNLENBQUM7RUFDM0M7RUFDQSxZQUFZLFlBQVksUUFBUTtHQUM1QixPQUFPLEtBQUssTUFBTSxZQUFZLFlBQVksTUFBTSxDQUFDO0VBQ3JEO0VBQ0EsVUFBVSxJQUFJO0dBQ1YsT0FBTyxLQUFLLE1BQU1DLDJCQUFpQixFQUFFLENBQUM7RUFDMUM7RUFDQSxXQUFXO0dBQ1AsT0FBTyxTQUFTLElBQUk7RUFDeEI7RUFDQSxnQkFBZ0I7R0FDWixPQUFPLGNBQWMsSUFBSTtFQUM3QjtFQUNBLFdBQVc7R0FDUCxPQUFPLFNBQVMsSUFBSTtFQUN4QjtFQUNBLFVBQVU7R0FDTixPQUFPLFNBQVMsU0FBUyxJQUFJLENBQUM7RUFDbEM7RUFDQSxZQUFZLFFBQVE7R0FDaEIsT0FBTyxZQUFZLE1BQU0sTUFBTTtFQUNuQztFQUNBLFFBQVE7R0FDSixPQUFPLE1BQU0sSUFBSTtFQUNyQjtFQUNBLEdBQUcsS0FBSztHQUNKLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDO0VBQzVCO0VBQ0EsSUFBSSxLQUFLO0dBQ0wsT0FBTyxhQUFhLE1BQU0sR0FBRztFQUNqQztFQUNBLFVBQVUsSUFBSTtHQUNWLE9BQU8sS0FBSyxNQUFNLFVBQVUsRUFBRSxDQUFDO0VBQ25DO0VBQ0EsUUFBUSxHQUFHO0dBQ1AsT0FBTyxTQUFTLE1BQU0sQ0FBQztFQUMzQjtFQUNBLFNBQVMsR0FBRztHQUNSLE9BQU8sU0FBUyxNQUFNLENBQUM7RUFDM0I7RUFDQSxNQUFNLFFBQVE7R0FDVixPQUFPLE9BQU8sTUFBTSxNQUFNO0VBQzlCO0VBQ0EsS0FBSyxRQUFRO0dBQ1QsT0FBTyxLQUFLLE1BQU0sTUFBTTtFQUM1QjtFQUNBLFdBQVc7R0FDUCxPQUFPLFNBQVMsSUFBSTtFQUN4QjtFQUNBLFNBQVMsYUFBYTtHQUNsQixNQUFNLEtBQUssS0FBSyxNQUFNO0dBQ3RCLGVBQW9CLElBQUksSUFBSSxFQUFFLFlBQVksQ0FBQztHQUMzQyxPQUFPO0VBQ1g7RUFDQSxLQUFLLEdBQUcsTUFBTTtHQUtWLElBQUksS0FBSyxXQUFXLEdBQ2hCLE9BQUEsZUFBMkIsSUFBSSxJQUFJO0dBQ3ZDLE1BQU0sS0FBSyxLQUFLLE1BQU07R0FDdEIsZUFBb0IsSUFBSSxJQUFJLEtBQUssRUFBRTtHQUNuQyxPQUFPO0VBQ1g7RUFDQSxhQUFhO0dBQ1QsT0FBTyxLQUFLLFVBQVUsS0FBQSxDQUFTLENBQUMsQ0FBQztFQUNyQztFQUNBLGFBQWE7R0FDVCxPQUFPLEtBQUssVUFBVSxJQUFJLENBQUMsQ0FBQztFQUNoQztFQUNBLE1BQU0sSUFBSTtHQUNOLE9BQU8sR0FBRyxJQUFJO0VBQ2xCO0NBQ0osQ0FBQztDQUNELE9BQU8sZUFBZSxNQUFNLGVBQWU7RUFDdkMsTUFBTTtHQUNGLE9BQUEsZUFBMkIsSUFBSSxJQUFJLENBQUMsRUFBRTtFQUMxQztFQUNBLGNBQWM7Q0FDbEIsQ0FBQztDQUNELE9BQU87QUFDWCxDQUFDOztBQUVELElBQWEsYUFBMkIsMkJBQWtCLGVBQWUsTUFBTSxRQUFRO0NBQ25GLFdBQWdCLEtBQUssTUFBTSxHQUFHO0NBQzlCLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV0MsZ0JBQTJCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDdkcsTUFBTSxNQUFNLEtBQUssS0FBSztDQUN0QixLQUFLLFNBQVMsSUFBSSxVQUFVO0NBQzVCLEtBQUssWUFBWSxJQUFJLFdBQVc7Q0FDaEMsS0FBSyxZQUFZLElBQUksV0FBVztDQUNoQyxvQkFBb0IsTUFBTSxjQUFjO0VBQ3BDLE1BQU0sR0FBRyxNQUFNO0dBQ1gsT0FBTyxLQUFLLE1BQU1DLHVCQUFhLEdBQUcsSUFBSSxDQUFDO0VBQzNDO0VBQ0EsU0FBUyxHQUFHLE1BQU07R0FDZCxPQUFPLEtBQUssTUFBTUMsMEJBQWdCLEdBQUcsSUFBSSxDQUFDO0VBQzlDO0VBQ0EsV0FBVyxHQUFHLE1BQU07R0FDaEIsT0FBTyxLQUFLLE1BQU1DLDRCQUFrQixHQUFHLElBQUksQ0FBQztFQUNoRDtFQUNBLFNBQVMsR0FBRyxNQUFNO0dBQ2QsT0FBTyxLQUFLLE1BQU1DLDBCQUFnQixHQUFHLElBQUksQ0FBQztFQUM5QztFQUNBLElBQUksR0FBRyxNQUFNO0dBQ1QsT0FBTyxLQUFLLE1BQU1DLDJCQUFpQixHQUFHLElBQUksQ0FBQztFQUMvQztFQUNBLElBQUksR0FBRyxNQUFNO0dBQ1QsT0FBTyxLQUFLLE1BQU1DLDJCQUFpQixHQUFHLElBQUksQ0FBQztFQUMvQztFQUNBLE9BQU8sR0FBRyxNQUFNO0dBQ1osT0FBTyxLQUFLLE1BQU1DLHdCQUFjLEdBQUcsSUFBSSxDQUFDO0VBQzVDO0VBQ0EsU0FBUyxHQUFHLE1BQU07R0FDZCxPQUFPLEtBQUssTUFBTUYsMkJBQWlCLEdBQUcsR0FBRyxJQUFJLENBQUM7RUFDbEQ7RUFDQSxVQUFVLFFBQVE7R0FDZCxPQUFPLEtBQUssTUFBTUcsMkJBQWlCLE1BQU0sQ0FBQztFQUM5QztFQUNBLFVBQVUsUUFBUTtHQUNkLE9BQU8sS0FBSyxNQUFNQywyQkFBaUIsTUFBTSxDQUFDO0VBQzlDO0VBQ0EsT0FBTztHQUNILE9BQU8sS0FBSyxNQUFNQyxzQkFBWSxDQUFDO0VBQ25DO0VBQ0EsVUFBVSxHQUFHLE1BQU07R0FDZixPQUFPLEtBQUssTUFBTUMsMkJBQWlCLEdBQUcsSUFBSSxDQUFDO0VBQy9DO0VBQ0EsY0FBYztHQUNWLE9BQU8sS0FBSyxNQUFNQyw2QkFBbUIsQ0FBQztFQUMxQztFQUNBLGNBQWM7R0FDVixPQUFPLEtBQUssTUFBTUMsNkJBQW1CLENBQUM7RUFDMUM7RUFDQSxVQUFVO0dBQ04sT0FBTyxLQUFLLE1BQU1DLHlCQUFlLENBQUM7RUFDdEM7Q0FDSixDQUFDO0FBQ0wsQ0FBQztBQUNELElBQWEsWUFBMEIsMkJBQWtCLGNBQWMsTUFBTSxRQUFRO0NBQ2pGLFdBQWdCLEtBQUssTUFBTSxHQUFHO0NBQzlCLFdBQVcsS0FBSyxNQUFNLEdBQUc7Q0FDekIsS0FBSyxTQUFTLFdBQVcsS0FBSyxNQUFNQyx1QkFBWSxVQUFVLE1BQU0sQ0FBQztDQUNqRSxLQUFLLE9BQU8sV0FBVyxLQUFLLE1BQU1DLHFCQUFVLFFBQVEsTUFBTSxDQUFDO0NBQzNELEtBQUssT0FBTyxXQUFXLEtBQUssTUFBTUMscUJBQVUsUUFBUSxNQUFNLENBQUM7Q0FDM0QsS0FBSyxTQUFTLFdBQVcsS0FBSyxNQUFNQyx1QkFBWSxVQUFVLE1BQU0sQ0FBQztDQUNqRSxLQUFLLFFBQVEsV0FBVyxLQUFLLE1BQU1DLHNCQUFXLFNBQVMsTUFBTSxDQUFDO0NBQzlELEtBQUssUUFBUSxXQUFXLEtBQUssTUFBTUMsc0JBQVcsU0FBUyxNQUFNLENBQUM7Q0FDOUQsS0FBSyxVQUFVLFdBQVcsS0FBSyxNQUFNQyx3QkFBYSxTQUFTLE1BQU0sQ0FBQztDQUNsRSxLQUFLLFVBQVUsV0FBVyxLQUFLLE1BQU1DLHdCQUFhLFNBQVMsTUFBTSxDQUFDO0NBQ2xFLEtBQUssVUFBVSxXQUFXLEtBQUssTUFBTUMsd0JBQWEsU0FBUyxNQUFNLENBQUM7Q0FDbEUsS0FBSyxVQUFVLFdBQVcsS0FBSyxNQUFNQyx3QkFBYSxXQUFXLE1BQU0sQ0FBQztDQUNwRSxLQUFLLFFBQVEsV0FBVyxLQUFLLE1BQU1MLHNCQUFXLFNBQVMsTUFBTSxDQUFDO0NBQzlELEtBQUssUUFBUSxXQUFXLEtBQUssTUFBTU0sc0JBQVcsU0FBUyxNQUFNLENBQUM7Q0FDOUQsS0FBSyxTQUFTLFdBQVcsS0FBSyxNQUFNQyx1QkFBWSxVQUFVLE1BQU0sQ0FBQztDQUNqRSxLQUFLLFFBQVEsV0FBVyxLQUFLLE1BQU1DLHNCQUFXLFNBQVMsTUFBTSxDQUFDO0NBQzlELEtBQUssVUFBVSxXQUFXLEtBQUssTUFBTUMsd0JBQWEsV0FBVyxNQUFNLENBQUM7Q0FDcEUsS0FBSyxhQUFhLFdBQVcsS0FBSyxNQUFNQywyQkFBZ0IsY0FBYyxNQUFNLENBQUM7Q0FDN0UsS0FBSyxPQUFPLFdBQVcsS0FBSyxNQUFNQyxxQkFBVSxRQUFRLE1BQU0sQ0FBQztDQUMzRCxLQUFLLFNBQVMsV0FBVyxLQUFLLE1BQU1DLHVCQUFZLFVBQVUsTUFBTSxDQUFDO0NBQ2pFLEtBQUssUUFBUSxXQUFXLEtBQUssTUFBTUMsc0JBQVcsU0FBUyxNQUFNLENBQUM7Q0FDOUQsS0FBSyxRQUFRLFdBQVcsS0FBSyxNQUFNQyxzQkFBVyxTQUFTLE1BQU0sQ0FBQztDQUM5RCxLQUFLLFVBQVUsV0FBVyxLQUFLLE1BQU1DLHdCQUFhLFdBQVcsTUFBTSxDQUFDO0NBQ3BFLEtBQUssVUFBVSxXQUFXLEtBQUssTUFBTUMsd0JBQWEsV0FBVyxNQUFNLENBQUM7Q0FDcEUsS0FBSyxRQUFRLFdBQVcsS0FBSyxNQUFNQyxzQkFBVyxTQUFTLE1BQU0sQ0FBQztDQUU5RCxLQUFLLFlBQVksV0FBVyxLQUFLLE1BQU1DLFNBQWEsTUFBTSxDQUFDO0NBQzNELEtBQUssUUFBUSxXQUFXLEtBQUssTUFBTUMsT0FBUyxNQUFNLENBQUM7Q0FDbkQsS0FBSyxRQUFRLFdBQVcsS0FBSyxNQUFNQyxLQUFTLE1BQU0sQ0FBQztDQUNuRCxLQUFLLFlBQVksV0FBVyxLQUFLLE1BQU1DLFNBQWEsTUFBTSxDQUFDO0FBQy9ELENBQUM7QUFDRCxTQUFnQixPQUFPLFFBQVE7Q0FDM0IsT0FBT0Msd0JBQWEsV0FBVyxNQUFNO0FBQ3pDO0FBQ0EsSUFBYSxrQkFBZ0MsMkJBQWtCLG9CQUFvQixNQUFNLFFBQVE7Q0FDN0YsaUJBQXNCLEtBQUssTUFBTSxHQUFHO0NBQ3BDLFdBQVcsS0FBSyxNQUFNLEdBQUc7QUFDN0IsQ0FBQztBQUNELElBQWEsV0FBeUIsMkJBQWtCLGFBQWEsTUFBTSxRQUFRO0NBRS9FLFVBQWUsS0FBSyxNQUFNLEdBQUc7Q0FDN0IsZ0JBQWdCLEtBQUssTUFBTSxHQUFHO0FBQ2xDLENBQUM7QUFDRCxTQUFnQixNQUFNLFFBQVE7Q0FDMUIsT0FBTzFCLHVCQUFZLFVBQVUsTUFBTTtBQUN2QztBQUNBLElBQWEsVUFBd0IsMkJBQWtCLFlBQVksTUFBTSxRQUFRO0NBRTdFLFNBQWMsS0FBSyxNQUFNLEdBQUc7Q0FDNUIsZ0JBQWdCLEtBQUssTUFBTSxHQUFHO0FBQ2xDLENBQUM7QUFDRCxTQUFnQixLQUFLLFFBQVE7Q0FDekIsT0FBT0ksc0JBQVcsU0FBUyxNQUFNO0FBQ3JDO0FBQ0EsSUFBYSxVQUF3QiwyQkFBa0IsWUFBWSxNQUFNLFFBQVE7Q0FFN0UsU0FBYyxLQUFLLE1BQU0sR0FBRztDQUM1QixnQkFBZ0IsS0FBSyxNQUFNLEdBQUc7QUFDbEMsQ0FBQztBQUNELFNBQWdCLEtBQUssUUFBUTtDQUN6QixPQUFPQyxzQkFBVyxTQUFTLE1BQU07QUFDckM7QUFDQSxTQUFnQixPQUFPLFFBQVE7Q0FDM0IsT0FBT0Msd0JBQWEsU0FBUyxNQUFNO0FBQ3ZDO0FBRUEsU0FBZ0IsT0FBTyxRQUFRO0NBQzNCLE9BQU9DLHdCQUFhLFNBQVMsTUFBTTtBQUN2QztBQUVBLFNBQWdCLE9BQU8sUUFBUTtDQUMzQixPQUFPQyx3QkFBYSxTQUFTLE1BQU07QUFDdkM7QUFDQSxJQUFhLFNBQXVCLDJCQUFrQixXQUFXLE1BQU0sUUFBUTtDQUUzRSxRQUFhLEtBQUssTUFBTSxHQUFHO0NBQzNCLGdCQUFnQixLQUFLLE1BQU0sR0FBRztBQUNsQyxDQUFDO0FBQ0QsU0FBZ0IsSUFBSSxRQUFRO0NBQ3hCLE9BQU9QLHFCQUFVLFFBQVEsTUFBTTtBQUNuQztBQUNBLFNBQWdCLFFBQVEsUUFBUTtDQUM1QixPQUFPQSxxQkFBVSxRQUFRO0VBQ3JCLFVBQVUwQjtFQUNWLFVBQVVDO0VBQ1YsR0FBR0MsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMO0FBQ0EsSUFBYSxXQUF5QiwyQkFBa0IsYUFBYSxNQUFNLFFBQVE7Q0FFL0UsVUFBZSxLQUFLLE1BQU0sR0FBRztDQUM3QixnQkFBZ0IsS0FBSyxNQUFNLEdBQUc7QUFDbEMsQ0FBQztBQUNELFNBQWdCLE1BQU0sUUFBUTtDQUMxQixPQUFPMUIsdUJBQVksVUFBVSxNQUFNO0FBQ3ZDO0FBQ0EsSUFBYSxZQUEwQiwyQkFBa0IsY0FBYyxNQUFNLFFBQVE7Q0FFakYsV0FBZ0IsS0FBSyxNQUFNLEdBQUc7Q0FDOUIsZ0JBQWdCLEtBQUssTUFBTSxHQUFHO0FBQ2xDLENBQUM7QUFDRCxTQUFnQixPQUFPLFFBQVE7Q0FDM0IsT0FBT00sd0JBQWEsV0FBVyxNQUFNO0FBQ3pDOzs7Ozs7QUFNQSxJQUFhLFVBQXdCLDJCQUFrQixZQUFZLE1BQU0sUUFBUTtDQUU3RSxTQUFjLEtBQUssTUFBTSxHQUFHO0NBQzVCLGdCQUFnQixLQUFLLE1BQU0sR0FBRztBQUNsQyxDQUFDOzs7Ozs7OztBQVFELFNBQWdCLEtBQUssUUFBUTtDQUN6QixPQUFPQyxzQkFBVyxTQUFTLE1BQU07QUFDckM7QUFDQSxJQUFhLFdBQXlCLDJCQUFrQixhQUFhLE1BQU0sUUFBUTtDQUUvRSxVQUFlLEtBQUssTUFBTSxHQUFHO0NBQzdCLGdCQUFnQixLQUFLLE1BQU0sR0FBRztBQUNsQyxDQUFDO0FBQ0QsU0FBZ0IsTUFBTSxRQUFRO0NBQzFCLE9BQU9DLHVCQUFZLFVBQVUsTUFBTTtBQUN2QztBQUNBLElBQWEsVUFBd0IsMkJBQWtCLFlBQVksTUFBTSxRQUFRO0NBRTdFLFNBQWMsS0FBSyxNQUFNLEdBQUc7Q0FDNUIsZ0JBQWdCLEtBQUssTUFBTSxHQUFHO0FBQ2xDLENBQUM7QUFDRCxTQUFnQixLQUFLLFFBQVE7Q0FDekIsT0FBT0Msc0JBQVcsU0FBUyxNQUFNO0FBQ3JDO0FBQ0EsSUFBYSxTQUF1QiwyQkFBa0IsV0FBVyxNQUFNLFFBQVE7Q0FFM0UsUUFBYSxLQUFLLE1BQU0sR0FBRztDQUMzQixnQkFBZ0IsS0FBSyxNQUFNLEdBQUc7QUFDbEMsQ0FBQztBQUNELFNBQWdCLElBQUksUUFBUTtDQUN4QixPQUFPRyxxQkFBVSxRQUFRLE1BQU07QUFDbkM7QUFDQSxJQUFhLFdBQXlCLDJCQUFrQixhQUFhLE1BQU0sUUFBUTtDQUUvRSxVQUFlLEtBQUssTUFBTSxHQUFHO0NBQzdCLGdCQUFnQixLQUFLLE1BQU0sR0FBRztBQUNsQyxDQUFDO0FBQ0QsU0FBZ0IsTUFBTSxRQUFRO0NBQzFCLE9BQU9DLHVCQUFZLFVBQVUsTUFBTTtBQUN2QztBQUNBLElBQWEsVUFBd0IsMkJBQWtCLFlBQVksTUFBTSxRQUFRO0NBRTdFLFNBQWMsS0FBSyxNQUFNLEdBQUc7Q0FDNUIsZ0JBQWdCLEtBQUssTUFBTSxHQUFHO0FBQ2xDLENBQUM7QUFDRCxTQUFnQixLQUFLLFFBQVE7Q0FDekIsT0FBT0Msc0JBQVcsU0FBUyxNQUFNO0FBQ3JDO0FBQ0EsSUFBYSxTQUF1QiwyQkFBa0IsV0FBVyxNQUFNLFFBQVE7Q0FFM0UsUUFBYSxLQUFLLE1BQU0sR0FBRztDQUMzQixnQkFBZ0IsS0FBSyxNQUFNLEdBQUc7QUFDbEMsQ0FBQztBQUNELFNBQWdCLElBQUksUUFBUTtDQUN4QixPQUFPYSxxQkFBVSxRQUFRLE1BQU07QUFDbkM7QUFDQSxJQUFhLFVBQXdCLDJCQUFrQixZQUFZLE1BQU0sUUFBUTtDQUU3RSxTQUFjLEtBQUssTUFBTSxHQUFHO0NBQzVCLGdCQUFnQixLQUFLLE1BQU0sR0FBRztBQUNsQyxDQUFDO0FBQ0QsU0FBZ0IsS0FBSyxRQUFRO0NBQ3pCLE9BQU9aLHNCQUFXLFNBQVMsTUFBTTtBQUNyQztBQUNBLElBQWEsWUFBMEIsMkJBQWtCLGNBQWMsTUFBTSxRQUFRO0NBQ2pGLFdBQWdCLEtBQUssTUFBTSxHQUFHO0NBQzlCLGdCQUFnQixLQUFLLE1BQU0sR0FBRztBQUNsQyxDQUFDO0FBQ0QsU0FBZ0IsT0FBTyxRQUFRO0NBQzNCLE9BQU9DLHdCQUFhLFdBQVcsTUFBTTtBQUN6QztBQUNBLElBQWEsWUFBMEIsMkJBQWtCLGNBQWMsTUFBTSxRQUFRO0NBQ2pGLFdBQWdCLEtBQUssTUFBTSxHQUFHO0NBQzlCLGdCQUFnQixLQUFLLE1BQU0sR0FBRztBQUNsQyxDQUFDO0FBQ0QsU0FBZ0IsT0FBTyxRQUFRO0NBQzNCLE9BQU9DLHdCQUFhLFdBQVcsTUFBTTtBQUN6QztBQUNBLElBQWEsWUFBMEIsMkJBQWtCLGNBQWMsTUFBTSxRQUFRO0NBRWpGLFdBQWdCLEtBQUssTUFBTSxHQUFHO0NBQzlCLGdCQUFnQixLQUFLLE1BQU0sR0FBRztBQUNsQyxDQUFDO0FBQ0QsU0FBZ0IsT0FBTyxRQUFRO0NBQzNCLE9BQU9QLHdCQUFhLFdBQVcsTUFBTTtBQUN6QztBQUNBLElBQWEsZUFBNkIsMkJBQWtCLGlCQUFpQixNQUFNLFFBQVE7Q0FFdkYsY0FBbUIsS0FBSyxNQUFNLEdBQUc7Q0FDakMsZ0JBQWdCLEtBQUssTUFBTSxHQUFHO0FBQ2xDLENBQUM7QUFDRCxTQUFnQixVQUFVLFFBQVE7Q0FDOUIsT0FBT0MsMkJBQWdCLGNBQWMsTUFBTTtBQUMvQztBQUNBLElBQWEsVUFBd0IsMkJBQWtCLFlBQVksTUFBTSxRQUFRO0NBRTdFLFNBQWMsS0FBSyxNQUFNLEdBQUc7Q0FDNUIsZ0JBQWdCLEtBQUssTUFBTSxHQUFHO0FBQ2xDLENBQUM7QUFDRCxTQUFnQixLQUFLLFFBQVE7Q0FDekIsT0FBT08sc0JBQVcsU0FBUyxNQUFNO0FBQ3JDO0FBQ0EsSUFBYSxTQUF1QiwyQkFBa0IsV0FBVyxNQUFNLFFBQVE7Q0FFM0UsUUFBYSxLQUFLLE1BQU0sR0FBRztDQUMzQixnQkFBZ0IsS0FBSyxNQUFNLEdBQUc7QUFDbEMsQ0FBQztBQUNELFNBQWdCLElBQUksUUFBUTtDQUN4QixPQUFPbkIscUJBQVUsUUFBUSxNQUFNO0FBQ25DO0FBQ0EsSUFBYSx3QkFBc0MsMkJBQWtCLDBCQUEwQixNQUFNLFFBQVE7Q0FFekcsdUJBQTRCLEtBQUssTUFBTSxHQUFHO0NBQzFDLGdCQUFnQixLQUFLLE1BQU0sR0FBRztBQUNsQyxDQUFDO0FBQ0QsU0FBZ0IsYUFBYSxRQUFRLFdBQVcsVUFBVSxDQUFDLEdBQUc7Q0FDMUQsT0FBTzZCLDhCQUFtQix1QkFBdUIsUUFBUSxXQUFXLE9BQU87QUFDL0U7QUFDQSxTQUFnQixTQUFTLFNBQVM7Q0FDOUIsT0FBT0EsOEJBQW1CLHVCQUF1QixZQUFZQyxZQUF1QixPQUFPO0FBQy9GO0FBQ0EsU0FBZ0IsSUFBSSxTQUFTO0NBQ3pCLE9BQU9ELDhCQUFtQix1QkFBdUIsT0FBT0UsT0FBa0IsT0FBTztBQUNyRjtBQUNBLFNBQWdCLEtBQUssS0FBSyxRQUFRO0NBRTlCLE1BQU0sU0FBUyxHQUFHLElBQUksR0FEVixRQUFRLE9BQU87Q0FFM0IsTUFBTSxRQUFRQyxnQkFBYTtDQUMzQixJQUFJLENBQUMsT0FDRCxNQUFNLElBQUksTUFBTSw2QkFBNkIsUUFBUTtDQUN6RCxPQUFPSCw4QkFBbUIsdUJBQXVCLFFBQVEsT0FBTyxNQUFNO0FBQzFFO0FBQ0EsSUFBYSxZQUEwQiwyQkFBa0IsY0FBYyxNQUFNLFFBQVE7Q0FDakYsV0FBZ0IsS0FBSyxNQUFNLEdBQUc7Q0FDOUIsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixLQUFLLEtBQUsscUJBQXFCLEtBQUssTUFBTSxXQUFXSSxnQkFBMkIsTUFBTSxLQUFLLE1BQU0sTUFBTTtDQUN2RyxvQkFBb0IsTUFBTSxhQUFhO0VBQ25DLEdBQUcsT0FBTyxRQUFRO0dBQ2QsT0FBTyxLQUFLLE1BQU1DLG9CQUFVLE9BQU8sTUFBTSxDQUFDO0VBQzlDO0VBQ0EsSUFBSSxPQUFPLFFBQVE7R0FDZixPQUFPLEtBQUssTUFBTUMscUJBQVcsT0FBTyxNQUFNLENBQUM7RUFDL0M7RUFDQSxJQUFJLE9BQU8sUUFBUTtHQUNmLE9BQU8sS0FBSyxNQUFNQSxxQkFBVyxPQUFPLE1BQU0sQ0FBQztFQUMvQztFQUNBLEdBQUcsT0FBTyxRQUFRO0dBQ2QsT0FBTyxLQUFLLE1BQU1DLG9CQUFVLE9BQU8sTUFBTSxDQUFDO0VBQzlDO0VBQ0EsSUFBSSxPQUFPLFFBQVE7R0FDZixPQUFPLEtBQUssTUFBTUMscUJBQVcsT0FBTyxNQUFNLENBQUM7RUFDL0M7RUFDQSxJQUFJLE9BQU8sUUFBUTtHQUNmLE9BQU8sS0FBSyxNQUFNQSxxQkFBVyxPQUFPLE1BQU0sQ0FBQztFQUMvQztFQUNBLElBQUksUUFBUTtHQUNSLE9BQU8sS0FBSyxNQUFNLElBQUksTUFBTSxDQUFDO0VBQ2pDO0VBQ0EsS0FBSyxRQUFRO0dBQ1QsT0FBTyxLQUFLLE1BQU0sSUFBSSxNQUFNLENBQUM7RUFDakM7RUFDQSxTQUFTLFFBQVE7R0FDYixPQUFPLEtBQUssTUFBTUgsb0JBQVUsR0FBRyxNQUFNLENBQUM7RUFDMUM7RUFDQSxZQUFZLFFBQVE7R0FDaEIsT0FBTyxLQUFLLE1BQU1DLHFCQUFXLEdBQUcsTUFBTSxDQUFDO0VBQzNDO0VBQ0EsU0FBUyxRQUFRO0dBQ2IsT0FBTyxLQUFLLE1BQU1DLG9CQUFVLEdBQUcsTUFBTSxDQUFDO0VBQzFDO0VBQ0EsWUFBWSxRQUFRO0dBQ2hCLE9BQU8sS0FBSyxNQUFNQyxxQkFBVyxHQUFHLE1BQU0sQ0FBQztFQUMzQztFQUNBLFdBQVcsT0FBTyxRQUFRO0dBQ3RCLE9BQU8sS0FBSyxNQUFNQyw0QkFBa0IsT0FBTyxNQUFNLENBQUM7RUFDdEQ7RUFDQSxLQUFLLE9BQU8sUUFBUTtHQUNoQixPQUFPLEtBQUssTUFBTUEsNEJBQWtCLE9BQU8sTUFBTSxDQUFDO0VBQ3REO0VBQ0EsU0FBUztHQUNMLE9BQU87RUFDWDtDQUNKLENBQUM7Q0FDRCxNQUFNLE1BQU0sS0FBSyxLQUFLO0NBQ3RCLEtBQUssV0FDRCxLQUFLLElBQUksSUFBSSxXQUFXLE9BQU8sbUJBQW1CLElBQUksb0JBQW9CLE9BQU8saUJBQWlCLEtBQUs7Q0FDM0csS0FBSyxXQUNELEtBQUssSUFBSSxJQUFJLFdBQVcsT0FBTyxtQkFBbUIsSUFBSSxvQkFBb0IsT0FBTyxpQkFBaUIsS0FBSztDQUMzRyxLQUFLLFNBQVMsSUFBSSxVQUFVLEdBQUEsQ0FBSSxTQUFTLEtBQUssS0FBSyxPQUFPLGNBQWMsSUFBSSxjQUFjLEVBQUc7Q0FDN0YsS0FBSyxXQUFXO0NBQ2hCLEtBQUssU0FBUyxJQUFJLFVBQVU7QUFDaEMsQ0FBQztBQUNELFNBQWdCLE9BQU8sUUFBUTtDQUMzQixPQUFPQyx3QkFBYSxXQUFXLE1BQU07QUFDekM7QUFDQSxJQUFhLGtCQUFnQywyQkFBa0Isb0JBQW9CLE1BQU0sUUFBUTtDQUM3RixpQkFBc0IsS0FBSyxNQUFNLEdBQUc7Q0FDcEMsVUFBVSxLQUFLLE1BQU0sR0FBRztBQUM1QixDQUFDO0FBQ0QsU0FBZ0IsSUFBSSxRQUFRO0NBQ3hCLE9BQU9DLHFCQUFVLGlCQUFpQixNQUFNO0FBQzVDO0FBQ0EsU0FBZ0IsUUFBUSxRQUFRO0NBQzVCLE9BQU9DLHlCQUFjLGlCQUFpQixNQUFNO0FBQ2hEO0FBQ0EsU0FBZ0IsUUFBUSxRQUFRO0NBQzVCLE9BQU9DLHlCQUFjLGlCQUFpQixNQUFNO0FBQ2hEO0FBQ0EsU0FBZ0IsTUFBTSxRQUFRO0NBQzFCLE9BQU9DLHVCQUFZLGlCQUFpQixNQUFNO0FBQzlDO0FBQ0EsU0FBZ0IsT0FBTyxRQUFRO0NBQzNCLE9BQU9DLHdCQUFhLGlCQUFpQixNQUFNO0FBQy9DO0FBQ0EsSUFBYSxhQUEyQiwyQkFBa0IsZUFBZSxNQUFNLFFBQVE7Q0FDbkYsWUFBaUIsS0FBSyxNQUFNLEdBQUc7Q0FDL0IsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixLQUFLLEtBQUsscUJBQXFCLEtBQUssTUFBTSxXQUFXQyxpQkFBNEIsTUFBTSxLQUFLLE1BQU0sTUFBTTtBQUM1RyxDQUFDO0FBQ0QsU0FBZ0IsUUFBUSxRQUFRO0NBQzVCLE9BQU9DLHlCQUFjLFlBQVksTUFBTTtBQUMzQztBQUNBLElBQWEsWUFBMEIsMkJBQWtCLGNBQWMsTUFBTSxRQUFRO0NBQ2pGLFdBQWdCLEtBQUssTUFBTSxHQUFHO0NBQzlCLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV0MsZ0JBQTJCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDdkcsS0FBSyxPQUFPLE9BQU8sV0FBVyxLQUFLLE1BQU1aLHFCQUFXLE9BQU8sTUFBTSxDQUFDO0NBQ2xFLEtBQUssT0FBTyxPQUFPLFdBQVcsS0FBSyxNQUFNQSxxQkFBVyxPQUFPLE1BQU0sQ0FBQztDQUNsRSxLQUFLLE1BQU0sT0FBTyxXQUFXLEtBQUssTUFBTUQsb0JBQVUsT0FBTyxNQUFNLENBQUM7Q0FDaEUsS0FBSyxPQUFPLE9BQU8sV0FBVyxLQUFLLE1BQU1DLHFCQUFXLE9BQU8sTUFBTSxDQUFDO0NBQ2xFLEtBQUssT0FBTyxPQUFPLFdBQVcsS0FBSyxNQUFNQSxxQkFBVyxPQUFPLE1BQU0sQ0FBQztDQUNsRSxLQUFLLE1BQU0sT0FBTyxXQUFXLEtBQUssTUFBTUMsb0JBQVUsT0FBTyxNQUFNLENBQUM7Q0FDaEUsS0FBSyxPQUFPLE9BQU8sV0FBVyxLQUFLLE1BQU1DLHFCQUFXLE9BQU8sTUFBTSxDQUFDO0NBQ2xFLEtBQUssT0FBTyxPQUFPLFdBQVcsS0FBSyxNQUFNQSxxQkFBVyxPQUFPLE1BQU0sQ0FBQztDQUNsRSxLQUFLLFlBQVksV0FBVyxLQUFLLE1BQU1ILG9CQUFVLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztDQUNuRSxLQUFLLFlBQVksV0FBVyxLQUFLLE1BQU1FLG9CQUFVLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztDQUNuRSxLQUFLLGVBQWUsV0FBVyxLQUFLLE1BQU1DLHFCQUFXLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztDQUN2RSxLQUFLLGVBQWUsV0FBVyxLQUFLLE1BQU1GLHFCQUFXLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztDQUN2RSxLQUFLLGNBQWMsT0FBTyxXQUFXLEtBQUssTUFBTUcsNEJBQWtCLE9BQU8sTUFBTSxDQUFDO0NBQ2hGLE1BQU0sTUFBTSxLQUFLLEtBQUs7Q0FDdEIsS0FBSyxXQUFXLElBQUksV0FBVztDQUMvQixLQUFLLFdBQVcsSUFBSSxXQUFXO0NBQy9CLEtBQUssU0FBUyxJQUFJLFVBQVU7QUFDaEMsQ0FBQztBQUNELFNBQWdCLE9BQU8sUUFBUTtDQUMzQixPQUFPVSx3QkFBYSxXQUFXLE1BQU07QUFDekM7QUFDQSxJQUFhLGtCQUFnQywyQkFBa0Isb0JBQW9CLE1BQU0sUUFBUTtDQUM3RixpQkFBc0IsS0FBSyxNQUFNLEdBQUc7Q0FDcEMsVUFBVSxLQUFLLE1BQU0sR0FBRztBQUM1QixDQUFDO0FBRUQsU0FBZ0IsTUFBTSxRQUFRO0NBQzFCLE9BQU9DLHVCQUFZLGlCQUFpQixNQUFNO0FBQzlDO0FBRUEsU0FBZ0IsT0FBTyxRQUFRO0NBQzNCLE9BQU9DLHdCQUFhLGlCQUFpQixNQUFNO0FBQy9DO0FBQ0EsSUFBYSxZQUEwQiwyQkFBa0IsY0FBYyxNQUFNLFFBQVE7Q0FDakYsV0FBZ0IsS0FBSyxNQUFNLEdBQUc7Q0FDOUIsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixLQUFLLEtBQUsscUJBQXFCLEtBQUssTUFBTSxXQUFXQyxnQkFBMkIsTUFBTSxLQUFLLE1BQU0sTUFBTTtBQUMzRyxDQUFDO0FBQ0QsU0FBZ0IsT0FBTyxRQUFRO0NBQzNCLE9BQU9DLHdCQUFhLFdBQVcsTUFBTTtBQUN6QztBQUNBLElBQWEsZUFBNkIsMkJBQWtCLGlCQUFpQixNQUFNLFFBQVE7Q0FDdkYsY0FBbUIsS0FBSyxNQUFNLEdBQUc7Q0FDakMsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixLQUFLLEtBQUsscUJBQXFCLEtBQUssTUFBTSxXQUFXQyxtQkFBOEIsTUFBTSxLQUFLLE1BQU0sTUFBTTtBQUM5RyxDQUFDO0FBQ0QsU0FBUyxXQUFXLFFBQVE7Q0FDeEIsT0FBT0MsNkJBQWdCLGNBQWMsTUFBTTtBQUMvQztBQUVBLElBQWEsVUFBd0IsMkJBQWtCLFlBQVksTUFBTSxRQUFRO0NBQzdFLFNBQWMsS0FBSyxNQUFNLEdBQUc7Q0FDNUIsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixLQUFLLEtBQUsscUJBQXFCLEtBQUssTUFBTSxXQUFXQyxjQUF5QixNQUFNLEtBQUssTUFBTSxNQUFNO0FBQ3pHLENBQUM7QUFDRCxTQUFTLE1BQU0sUUFBUTtDQUNuQixPQUFPQyx3QkFBVyxTQUFTLE1BQU07QUFDckM7QUFFQSxJQUFhLFNBQXVCLDJCQUFrQixXQUFXLE1BQU0sUUFBUTtDQUMzRSxRQUFhLEtBQUssTUFBTSxHQUFHO0NBQzNCLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV0M7QUFDekQsQ0FBQztBQUNELFNBQWdCLE1BQU07Q0FDbEIsT0FBT0MscUJBQVUsTUFBTTtBQUMzQjtBQUNBLElBQWEsYUFBMkIsMkJBQWtCLGVBQWUsTUFBTSxRQUFRO0NBQ25GLFlBQWlCLEtBQUssTUFBTSxHQUFHO0NBQy9CLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV0M7QUFDekQsQ0FBQztBQUNELFNBQWdCLFVBQVU7Q0FDdEIsT0FBT0MseUJBQWMsVUFBVTtBQUNuQztBQUNBLElBQWEsV0FBeUIsMkJBQWtCLGFBQWEsTUFBTSxRQUFRO0NBQy9FLFVBQWUsS0FBSyxNQUFNLEdBQUc7Q0FDN0IsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixLQUFLLEtBQUsscUJBQXFCLEtBQUssTUFBTSxXQUFXQyxlQUEwQixNQUFNLEtBQUssTUFBTSxNQUFNO0FBQzFHLENBQUM7QUFDRCxTQUFnQixNQUFNLFFBQVE7Q0FDMUIsT0FBT0MsdUJBQVksVUFBVSxNQUFNO0FBQ3ZDO0FBQ0EsSUFBYSxVQUF3QiwyQkFBa0IsWUFBWSxNQUFNLFFBQVE7Q0FDN0UsU0FBYyxLQUFLLE1BQU0sR0FBRztDQUM1QixRQUFRLEtBQUssTUFBTSxHQUFHO0NBQ3RCLEtBQUssS0FBSyxxQkFBcUIsS0FBSyxNQUFNLFdBQVdDLGNBQXlCLE1BQU0sS0FBSyxNQUFNLE1BQU07QUFDekcsQ0FBQztBQUNELFNBQVMsTUFBTSxRQUFRO0NBQ25CLE9BQU9DLHdCQUFXLFNBQVMsTUFBTTtBQUNyQztBQUVBLElBQWEsVUFBd0IsMkJBQWtCLFlBQVksTUFBTSxRQUFRO0NBQzdFLFNBQWMsS0FBSyxNQUFNLEdBQUc7Q0FDNUIsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixLQUFLLEtBQUsscUJBQXFCLEtBQUssTUFBTSxXQUFXQyxjQUF5QixNQUFNLEtBQUssTUFBTSxNQUFNO0NBQ3JHLEtBQUssT0FBTyxPQUFPLFdBQVcsS0FBSyxNQUFNOUIscUJBQVcsT0FBTyxNQUFNLENBQUM7Q0FDbEUsS0FBSyxPQUFPLE9BQU8sV0FBVyxLQUFLLE1BQU1FLHFCQUFXLE9BQU8sTUFBTSxDQUFDO0NBQ2xFLE1BQU0sSUFBSSxLQUFLLEtBQUs7Q0FDcEIsS0FBSyxVQUFVLEVBQUUsVUFBVSxJQUFJLEtBQUssRUFBRSxPQUFPLElBQUk7Q0FDakQsS0FBSyxVQUFVLEVBQUUsVUFBVSxJQUFJLEtBQUssRUFBRSxPQUFPLElBQUk7QUFDckQsQ0FBQztBQUNELFNBQWdCLEtBQUssUUFBUTtDQUN6QixPQUFPNkIsc0JBQVcsU0FBUyxNQUFNO0FBQ3JDO0FBQ0EsSUFBYSxXQUF5QiwyQkFBa0IsYUFBYSxNQUFNLFFBQVE7Q0FDL0UsVUFBZSxLQUFLLE1BQU0sR0FBRztDQUM3QixRQUFRLEtBQUssTUFBTSxHQUFHO0NBQ3RCLEtBQUssS0FBSyxxQkFBcUIsS0FBSyxNQUFNLFdBQVdDLGVBQTBCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDdEcsS0FBSyxVQUFVLElBQUk7Q0FDbkIsb0JBQW9CLE1BQU0sWUFBWTtFQUNsQyxJQUFJLEdBQUcsUUFBUTtHQUNYLE9BQU8sS0FBSyxNQUFNL0UsMkJBQWlCLEdBQUcsTUFBTSxDQUFDO0VBQ2pEO0VBQ0EsU0FBUyxRQUFRO0dBQ2IsT0FBTyxLQUFLLE1BQU1BLDJCQUFpQixHQUFHLE1BQU0sQ0FBQztFQUNqRDtFQUNBLElBQUksR0FBRyxRQUFRO0dBQ1gsT0FBTyxLQUFLLE1BQU1DLDJCQUFpQixHQUFHLE1BQU0sQ0FBQztFQUNqRDtFQUNBLE9BQU8sR0FBRyxRQUFRO0dBQ2QsT0FBTyxLQUFLLE1BQU1DLHdCQUFjLEdBQUcsTUFBTSxDQUFDO0VBQzlDO0VBQ0EsU0FBUztHQUNMLE9BQU8sS0FBSztFQUNoQjtDQUNKLENBQUM7QUFDTCxDQUFDO0FBQ0QsU0FBZ0IsTUFBTSxTQUFTLFFBQVE7Q0FDbkMsT0FBTzhFLHVCQUFZLFVBQVUsU0FBUyxNQUFNO0FBQ2hEO0FBRUEsU0FBZ0IsTUFBTSxRQUFRO0NBQzFCLE1BQU0sUUFBUSxPQUFPLEtBQUssSUFBSTtDQUM5QixPQUFPLE1BQU0sT0FBTyxLQUFLLEtBQUssQ0FBQztBQUNuQztBQUNBLElBQWEsWUFBMEIsMkJBQWtCLGNBQWMsTUFBTSxRQUFRO0NBQ2pGLGNBQW1CLEtBQUssTUFBTSxHQUFHO0NBQ2pDLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV0MsZ0JBQTJCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDdkcsV0FBZ0IsTUFBTSxlQUFlO0VBQ2pDLE9BQU8sSUFBSTtDQUNmLENBQUM7Q0FDRCxvQkFBb0IsTUFBTSxhQUFhO0VBQ25DLFFBQVE7R0FDSixPQUFPLE1BQU0sT0FBTyxLQUFLLEtBQUssS0FBSyxJQUFJLEtBQUssQ0FBQztFQUNqRDtFQUNBLFNBQVMsVUFBVTtHQUNmLE9BQU8sS0FBSyxNQUFNO0lBQUUsR0FBRyxLQUFLLEtBQUs7SUFBZTtHQUFTLENBQUM7RUFDOUQ7RUFDQSxjQUFjO0dBQ1YsT0FBTyxLQUFLLE1BQU07SUFBRSxHQUFHLEtBQUssS0FBSztJQUFLLFVBQVUsUUFBUTtHQUFFLENBQUM7RUFDL0Q7RUFDQSxRQUFRO0dBQ0osT0FBTyxLQUFLLE1BQU07SUFBRSxHQUFHLEtBQUssS0FBSztJQUFLLFVBQVUsUUFBUTtHQUFFLENBQUM7RUFDL0Q7RUFDQSxTQUFTO0dBQ0wsT0FBTyxLQUFLLE1BQU07SUFBRSxHQUFHLEtBQUssS0FBSztJQUFLLFVBQVUsTUFBTTtHQUFFLENBQUM7RUFDN0Q7RUFDQSxRQUFRO0dBQ0osT0FBTyxLQUFLLE1BQU07SUFBRSxHQUFHLEtBQUssS0FBSztJQUFLLFVBQVUsS0FBQTtHQUFVLENBQUM7RUFDL0Q7RUFDQSxPQUFPLFVBQVU7R0FDYixPQUFPQyxPQUFZLE1BQU0sUUFBUTtFQUNyQztFQUNBLFdBQVcsVUFBVTtHQUNqQixPQUFPQyxXQUFnQixNQUFNLFFBQVE7RUFDekM7RUFDQSxNQUFNLE9BQU87R0FDVCxPQUFPQyxNQUFXLE1BQU0sS0FBSztFQUNqQztFQUNBLEtBQUssTUFBTTtHQUNQLE9BQU9DLEtBQVUsTUFBTSxJQUFJO0VBQy9CO0VBQ0EsS0FBSyxNQUFNO0dBQ1AsT0FBT0MsS0FBVSxNQUFNLElBQUk7RUFDL0I7RUFDQSxRQUFRLEdBQUcsTUFBTTtHQUNiLE9BQU9DLFFBQWEsYUFBYSxNQUFNLEtBQUssRUFBRTtFQUNsRDtFQUNBLFNBQVMsR0FBRyxNQUFNO0dBQ2QsT0FBT0MsU0FBYyxnQkFBZ0IsTUFBTSxLQUFLLEVBQUU7RUFDdEQ7Q0FDSixDQUFDO0FBQ0wsQ0FBQztBQUNELFNBQWdCLE9BQU8sT0FBTyxRQUFRO0NBTWxDLE9BQU8sSUFBSSxVQUFVO0VBSmpCLE1BQU07RUFDTixPQUFPLFNBQVMsQ0FBQztFQUNqQixHQUFHakQsZ0JBQXFCLE1BQU07Q0FFYixDQUFHO0FBQzVCO0FBRUEsU0FBZ0IsYUFBYSxPQUFPLFFBQVE7Q0FDeEMsT0FBTyxJQUFJLFVBQVU7RUFDakIsTUFBTTtFQUNOO0VBQ0EsVUFBVSxNQUFNO0VBQ2hCLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDtBQUVBLFNBQWdCLFlBQVksT0FBTyxRQUFRO0NBQ3ZDLE9BQU8sSUFBSSxVQUFVO0VBQ2pCLE1BQU07RUFDTjtFQUNBLFVBQVUsUUFBUTtFQUNsQixHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7QUFDQSxJQUFhLFdBQXlCLDJCQUFrQixhQUFhLE1BQU0sUUFBUTtDQUMvRSxVQUFlLEtBQUssTUFBTSxHQUFHO0NBQzdCLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV2tELGVBQTBCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDdEcsS0FBSyxVQUFVLElBQUk7QUFDdkIsQ0FBQztBQUNELFNBQWdCLE1BQU0sU0FBUyxRQUFRO0NBQ25DLE9BQU8sSUFBSSxTQUFTO0VBQ2hCLE1BQU07RUFDRztFQUNULEdBQUdsRCxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7QUFDQSxJQUFhLFNBQXVCLDJCQUFrQixXQUFXLE1BQU0sUUFBUTtDQUMzRSxTQUFTLEtBQUssTUFBTSxHQUFHO0NBQ3ZCLFFBQWEsS0FBSyxNQUFNLEdBQUc7Q0FDM0IsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV2tELGVBQTBCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDdEcsS0FBSyxVQUFVLElBQUk7QUFDdkIsQ0FBQzs7OztBQUlELFNBQWdCLElBQUksU0FBUyxRQUFRO0NBQ2pDLE9BQU8sSUFBSSxPQUFPO0VBQ2QsTUFBTTtFQUNHO0VBQ1QsV0FBVztFQUNYLEdBQUdsRCxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7QUFDQSxJQUFhLHdCQUFzQywyQkFBa0IsMEJBQTBCLE1BQU0sUUFBUTtDQUN6RyxTQUFTLEtBQUssTUFBTSxHQUFHO0NBQ3ZCLHVCQUE0QixLQUFLLE1BQU0sR0FBRztBQUM5QyxDQUFDO0FBQ0QsU0FBZ0IsbUJBQW1CLGVBQWUsU0FBUyxRQUFRO0NBRS9ELE9BQU8sSUFBSSxzQkFBc0I7RUFDN0IsTUFBTTtFQUNOO0VBQ0E7RUFDQSxHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7QUFDQSxJQUFhLGtCQUFnQywyQkFBa0Isb0JBQW9CLE1BQU0sUUFBUTtDQUM3RixpQkFBc0IsS0FBSyxNQUFNLEdBQUc7Q0FDcEMsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixLQUFLLEtBQUsscUJBQXFCLEtBQUssTUFBTSxXQUFXbUQsc0JBQWlDLE1BQU0sS0FBSyxNQUFNLE1BQU07QUFDakgsQ0FBQztBQUNELFNBQWdCLGFBQWEsTUFBTSxPQUFPO0NBQ3RDLE9BQU8sSUFBSSxnQkFBZ0I7RUFDdkIsTUFBTTtFQUNBO0VBQ0M7Q0FDWCxDQUFDO0FBQ0w7QUFDQSxJQUFhLFdBQXlCLDJCQUFrQixhQUFhLE1BQU0sUUFBUTtDQUMvRSxVQUFlLEtBQUssTUFBTSxHQUFHO0NBQzdCLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV0MsZUFBMEIsTUFBTSxLQUFLLE1BQU0sTUFBTTtDQUN0RyxLQUFLLFFBQVEsU0FBUyxLQUFLLE1BQU07RUFDN0IsR0FBRyxLQUFLLEtBQUs7RUFDUDtDQUNWLENBQUM7QUFDTCxDQUFDO0FBQ0QsU0FBZ0IsTUFBTSxPQUFPLGVBQWUsU0FBUztDQUNqRCxNQUFNLFVBQVUseUJBQXlCQztDQUd6QyxPQUFPLElBQUksU0FBUztFQUNoQixNQUFNO0VBQ0M7RUFDUCxNQUpTLFVBQVUsZ0JBQWdCO0VBS25DLEdBQUdyRCxnQkFOUSxVQUFVLFVBQVUsYUFNRDtDQUNsQyxDQUFDO0FBQ0w7QUFDQSxJQUFhLFlBQTBCLDJCQUFrQixjQUFjLE1BQU0sUUFBUTtDQUNqRixXQUFnQixLQUFLLE1BQU0sR0FBRztDQUM5QixRQUFRLEtBQUssTUFBTSxHQUFHO0NBQ3RCLEtBQUssS0FBSyxxQkFBcUIsS0FBSyxNQUFNLFdBQVdzRCxnQkFBMkIsTUFBTSxLQUFLLE1BQU0sTUFBTTtDQUN2RyxLQUFLLFVBQVUsSUFBSTtDQUNuQixLQUFLLFlBQVksSUFBSTtBQUN6QixDQUFDO0FBQ0QsU0FBZ0IsT0FBTyxTQUFTLFdBQVcsUUFBUTtDQUUvQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsTUFDekIsT0FBTyxJQUFJLFVBQVU7RUFDakIsTUFBTTtFQUNOLFNBQVMsT0FBTztFQUNoQixXQUFXO0VBQ1gsR0FBR3RELGdCQUFxQixTQUFTO0NBQ3JDLENBQUM7Q0FFTCxPQUFPLElBQUksVUFBVTtFQUNqQixNQUFNO0VBQ047RUFDVztFQUNYLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDtBQUVBLFNBQWdCLGNBQWMsU0FBUyxXQUFXLFFBQVE7Q0FDdEQsTUFBTSxJQUFJOUMsTUFBVyxPQUFPO0NBQzVCLEVBQUUsS0FBSyxTQUFTLEtBQUE7Q0FDaEIsT0FBTyxJQUFJLFVBQVU7RUFDakIsTUFBTTtFQUNOLFNBQVM7RUFDRTtFQUNYLEdBQUc4QyxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7QUFDQSxTQUFnQixZQUFZLFNBQVMsV0FBVyxRQUFRO0NBQ3BELE9BQU8sSUFBSSxVQUFVO0VBQ2pCLE1BQU07RUFDTjtFQUNXO0VBQ1gsTUFBTTtFQUNOLEdBQUdBLGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDtBQUNBLElBQWEsU0FBdUIsMkJBQWtCLFdBQVcsTUFBTSxRQUFRO0NBQzNFLFFBQWEsS0FBSyxNQUFNLEdBQUc7Q0FDM0IsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixLQUFLLEtBQUsscUJBQXFCLEtBQUssTUFBTSxXQUFXdUQsYUFBd0IsTUFBTSxLQUFLLE1BQU0sTUFBTTtDQUNwRyxLQUFLLFVBQVUsSUFBSTtDQUNuQixLQUFLLFlBQVksSUFBSTtDQUNyQixLQUFLLE9BQU8sR0FBRyxTQUFTLEtBQUssTUFBTUMseUJBQWMsR0FBRyxJQUFJLENBQUM7Q0FDekQsS0FBSyxZQUFZLFdBQVcsS0FBSyxNQUFNQSx5QkFBYyxHQUFHLE1BQU0sQ0FBQztDQUMvRCxLQUFLLE9BQU8sR0FBRyxTQUFTLEtBQUssTUFBTUMseUJBQWMsR0FBRyxJQUFJLENBQUM7Q0FDekQsS0FBSyxRQUFRLEdBQUcsU0FBUyxLQUFLLE1BQU1DLHNCQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzNELENBQUM7QUFDRCxTQUFnQixJQUFJLFNBQVMsV0FBVyxRQUFRO0NBQzVDLE9BQU8sSUFBSSxPQUFPO0VBQ2QsTUFBTTtFQUNHO0VBQ0U7RUFDWCxHQUFHMUQsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMO0FBQ0EsSUFBYSxTQUF1QiwyQkFBa0IsV0FBVyxNQUFNLFFBQVE7Q0FDM0UsUUFBYSxLQUFLLE1BQU0sR0FBRztDQUMzQixRQUFRLEtBQUssTUFBTSxHQUFHO0NBQ3RCLEtBQUssS0FBSyxxQkFBcUIsS0FBSyxNQUFNLFdBQVcyRCxhQUF3QixNQUFNLEtBQUssTUFBTSxNQUFNO0NBQ3BHLEtBQUssT0FBTyxHQUFHLFNBQVMsS0FBSyxNQUFNSCx5QkFBYyxHQUFHLElBQUksQ0FBQztDQUN6RCxLQUFLLFlBQVksV0FBVyxLQUFLLE1BQU1BLHlCQUFjLEdBQUcsTUFBTSxDQUFDO0NBQy9ELEtBQUssT0FBTyxHQUFHLFNBQVMsS0FBSyxNQUFNQyx5QkFBYyxHQUFHLElBQUksQ0FBQztDQUN6RCxLQUFLLFFBQVEsR0FBRyxTQUFTLEtBQUssTUFBTUMsc0JBQVcsR0FBRyxJQUFJLENBQUM7QUFDM0QsQ0FBQztBQUNELFNBQWdCLElBQUksV0FBVyxRQUFRO0NBQ25DLE9BQU8sSUFBSSxPQUFPO0VBQ2QsTUFBTTtFQUNLO0VBQ1gsR0FBRzFELGdCQUFxQixNQUFNO0NBQ2xDLENBQUM7QUFDTDtBQUNBLElBQWEsVUFBd0IsMkJBQWtCLFlBQVksTUFBTSxRQUFRO0NBQzdFLFNBQWMsS0FBSyxNQUFNLEdBQUc7Q0FDNUIsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixLQUFLLEtBQUsscUJBQXFCLEtBQUssTUFBTSxXQUFXNEQsY0FBeUIsTUFBTSxLQUFLLE1BQU0sTUFBTTtDQUNyRyxLQUFLLE9BQU8sSUFBSTtDQUNoQixLQUFLLFVBQVUsT0FBTyxPQUFPLElBQUksT0FBTztDQUN4QyxNQUFNLE9BQU8sSUFBSSxJQUFJLE9BQU8sS0FBSyxJQUFJLE9BQU8sQ0FBQztDQUM3QyxLQUFLLFdBQVcsUUFBUSxXQUFXO0VBQy9CLE1BQU0sYUFBYSxDQUFDO0VBQ3BCLEtBQUssTUFBTSxTQUFTLFFBQ2hCLElBQUksS0FBSyxJQUFJLEtBQUssR0FDZCxXQUFXLFNBQVMsSUFBSSxRQUFRO09BR2hDLE1BQU0sSUFBSSxNQUFNLE9BQU8sTUFBTSxtQkFBbUI7RUFFeEQsT0FBTyxJQUFJLFFBQVE7R0FDZixHQUFHO0dBQ0gsUUFBUSxDQUFDO0dBQ1QsR0FBRzVELGdCQUFxQixNQUFNO0dBQzlCLFNBQVM7RUFDYixDQUFDO0NBQ0w7Q0FDQSxLQUFLLFdBQVcsUUFBUSxXQUFXO0VBQy9CLE1BQU0sYUFBYSxFQUFFLEdBQUcsSUFBSSxRQUFRO0VBQ3BDLEtBQUssTUFBTSxTQUFTLFFBQ2hCLElBQUksS0FBSyxJQUFJLEtBQUssR0FDZCxPQUFPLFdBQVc7T0FHbEIsTUFBTSxJQUFJLE1BQU0sT0FBTyxNQUFNLG1CQUFtQjtFQUV4RCxPQUFPLElBQUksUUFBUTtHQUNmLEdBQUc7R0FDSCxRQUFRLENBQUM7R0FDVCxHQUFHQSxnQkFBcUIsTUFBTTtHQUM5QixTQUFTO0VBQ2IsQ0FBQztDQUNMO0FBQ0osQ0FBQztBQUNELFNBQVMsTUFBTSxRQUFRLFFBQVE7Q0FFM0IsT0FBTyxJQUFJLFFBQVE7RUFDZixNQUFNO0VBQ04sU0FIWSxNQUFNLFFBQVEsTUFBTSxJQUFJLE9BQU8sWUFBWSxPQUFPLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSTtFQUlwRixHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7Ozs7Ozs7O0FBU0EsU0FBZ0IsV0FBVyxTQUFTLFFBQVE7Q0FDeEMsT0FBTyxJQUFJLFFBQVE7RUFDZixNQUFNO0VBQ047RUFDQSxHQUFHQSxnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7QUFDQSxJQUFhLGFBQTJCLDJCQUFrQixlQUFlLE1BQU0sUUFBUTtDQUNuRixZQUFpQixLQUFLLE1BQU0sR0FBRztDQUMvQixRQUFRLEtBQUssTUFBTSxHQUFHO0NBQ3RCLEtBQUssS0FBSyxxQkFBcUIsS0FBSyxNQUFNLFdBQVc2RCxpQkFBNEIsTUFBTSxLQUFLLE1BQU0sTUFBTTtDQUN4RyxLQUFLLFNBQVMsSUFBSSxJQUFJLElBQUksTUFBTTtDQUNoQyxPQUFPLGVBQWUsTUFBTSxTQUFTLEVBQ2pDLE1BQU07RUFDRixJQUFJLElBQUksT0FBTyxTQUFTLEdBQ3BCLE1BQU0sSUFBSSxNQUFNLDRFQUE0RTtFQUVoRyxPQUFPLElBQUksT0FBTztDQUN0QixFQUNKLENBQUM7QUFDTCxDQUFDO0FBQ0QsU0FBZ0IsUUFBUSxPQUFPLFFBQVE7Q0FDbkMsT0FBTyxJQUFJLFdBQVc7RUFDbEIsTUFBTTtFQUNOLFFBQVEsTUFBTSxRQUFRLEtBQUssSUFBSSxRQUFRLENBQUMsS0FBSztFQUM3QyxHQUFHN0QsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMO0FBQ0EsSUFBYSxVQUF3QiwyQkFBa0IsWUFBWSxNQUFNLFFBQVE7Q0FDN0UsU0FBYyxLQUFLLE1BQU0sR0FBRztDQUM1QixRQUFRLEtBQUssTUFBTSxHQUFHO0NBQ3RCLEtBQUssS0FBSyxxQkFBcUIsS0FBSyxNQUFNLFdBQVc4RCxjQUF5QixNQUFNLEtBQUssTUFBTSxNQUFNO0NBQ3JHLEtBQUssT0FBTyxNQUFNLFdBQVcsS0FBSyxNQUFNTix5QkFBYyxNQUFNLE1BQU0sQ0FBQztDQUNuRSxLQUFLLE9BQU8sTUFBTSxXQUFXLEtBQUssTUFBTUMseUJBQWMsTUFBTSxNQUFNLENBQUM7Q0FDbkUsS0FBSyxRQUFRLE9BQU8sV0FBVyxLQUFLLE1BQU1NLHNCQUFXLE1BQU0sUUFBUSxLQUFLLElBQUksUUFBUSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDeEcsQ0FBQztBQUNELFNBQWdCLEtBQUssUUFBUTtDQUN6QixPQUFPQyxzQkFBVyxTQUFTLE1BQU07QUFDckM7QUFDQSxJQUFhLGVBQTZCLDJCQUFrQixpQkFBaUIsTUFBTSxRQUFRO0NBQ3ZGLGNBQW1CLEtBQUssTUFBTSxHQUFHO0NBQ2pDLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV0MsbUJBQThCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDMUcsS0FBSyxLQUFLLFNBQVMsU0FBUyxTQUFTO0VBQ2pDLElBQUksS0FBSyxjQUFjLFlBQ25CLE1BQU0sSUFBSUMsZ0JBQXFCLEtBQUssWUFBWSxJQUFJO0VBRXhELFFBQVEsWUFBWSxZQUFVO0dBQzFCLElBQUksT0FBT0MsWUFBVSxVQUNqQixRQUFRLE9BQU8sS0FBS0MsTUFBV0QsU0FBTyxRQUFRLE9BQU8sR0FBRyxDQUFDO1FBRXhEO0lBRUQsTUFBTSxTQUFTQTtJQUNmLElBQUksT0FBTyxPQUNQLE9BQU8sV0FBVztJQUN0QixPQUFPLFNBQVMsT0FBTyxPQUFPO0lBQzlCLE9BQU8sVUFBVSxPQUFPLFFBQVEsUUFBUTtJQUN4QyxPQUFPLFNBQVMsT0FBTyxPQUFPO0lBRTlCLFFBQVEsT0FBTyxLQUFLQyxNQUFXLE1BQU0sQ0FBQztHQUMxQztFQUNKO0VBQ0EsTUFBTSxTQUFTLElBQUksVUFBVSxRQUFRLE9BQU8sT0FBTztFQUNuRCxJQUFJLGtCQUFrQixTQUNsQixPQUFPLE9BQU8sTUFBTSxXQUFXO0dBQzNCLFFBQVEsUUFBUTtHQUNoQixRQUFRLFdBQVc7R0FDbkIsT0FBTztFQUNYLENBQUM7RUFFTCxRQUFRLFFBQVE7RUFDaEIsUUFBUSxXQUFXO0VBQ25CLE9BQU87Q0FDWDtBQUNKLENBQUM7QUFDRCxTQUFnQixVQUFVLElBQUk7Q0FDMUIsT0FBTyxJQUFJLGFBQWE7RUFDcEIsTUFBTTtFQUNOLFdBQVc7Q0FDZixDQUFDO0FBQ0w7QUFDQSxJQUFhLGNBQTRCLDJCQUFrQixnQkFBZ0IsTUFBTSxRQUFRO0NBQ3JGLGFBQWtCLEtBQUssTUFBTSxHQUFHO0NBQ2hDLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV0Msa0JBQTZCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDekcsS0FBSyxlQUFlLEtBQUssS0FBSyxJQUFJO0FBQ3RDLENBQUM7QUFDRCxTQUFnQixTQUFTLFdBQVc7Q0FDaEMsT0FBTyxJQUFJLFlBQVk7RUFDbkIsTUFBTTtFQUNLO0NBQ2YsQ0FBQztBQUNMO0FBQ0EsSUFBYSxtQkFBaUMsMkJBQWtCLHFCQUFxQixNQUFNLFFBQVE7Q0FDL0Ysa0JBQXVCLEtBQUssTUFBTSxHQUFHO0NBQ3JDLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV0Esa0JBQTZCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDekcsS0FBSyxlQUFlLEtBQUssS0FBSyxJQUFJO0FBQ3RDLENBQUM7QUFDRCxTQUFnQixjQUFjLFdBQVc7Q0FDckMsT0FBTyxJQUFJLGlCQUFpQjtFQUN4QixNQUFNO0VBQ0s7Q0FDZixDQUFDO0FBQ0w7QUFDQSxJQUFhLGNBQTRCLDJCQUFrQixnQkFBZ0IsTUFBTSxRQUFRO0NBQ3JGLGFBQWtCLEtBQUssTUFBTSxHQUFHO0NBQ2hDLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV0Msa0JBQTZCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDekcsS0FBSyxlQUFlLEtBQUssS0FBSyxJQUFJO0FBQ3RDLENBQUM7QUFDRCxTQUFnQixTQUFTLFdBQVc7Q0FDaEMsT0FBTyxJQUFJLFlBQVk7RUFDbkIsTUFBTTtFQUNLO0NBQ2YsQ0FBQztBQUNMO0FBRUEsU0FBZ0IsUUFBUSxXQUFXO0NBQy9CLE9BQU8sU0FBUyxTQUFTLFNBQVMsQ0FBQztBQUN2QztBQUNBLElBQWEsYUFBMkIsMkJBQWtCLGVBQWUsTUFBTSxRQUFRO0NBQ25GLFlBQWlCLEtBQUssTUFBTSxHQUFHO0NBQy9CLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV0MsaUJBQTRCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDeEcsS0FBSyxlQUFlLEtBQUssS0FBSyxJQUFJO0NBQ2xDLEtBQUssZ0JBQWdCLEtBQUs7QUFDOUIsQ0FBQztBQUNELFNBQWdCLFNBQVMsV0FBVyxjQUFjO0NBQzlDLE9BQU8sSUFBSSxXQUFXO0VBQ2xCLE1BQU07RUFDSztFQUNYLElBQUksZUFBZTtHQUNmLE9BQU8sT0FBTyxpQkFBaUIsYUFBYSxhQUFhLElBQUlDLGFBQWtCLFlBQVk7RUFDL0Y7Q0FDSixDQUFDO0FBQ0w7QUFDQSxJQUFhLGNBQTRCLDJCQUFrQixnQkFBZ0IsTUFBTSxRQUFRO0NBQ3JGLGFBQWtCLEtBQUssTUFBTSxHQUFHO0NBQ2hDLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV0Msa0JBQTZCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDekcsS0FBSyxlQUFlLEtBQUssS0FBSyxJQUFJO0FBQ3RDLENBQUM7QUFDRCxTQUFnQixTQUFTLFdBQVcsY0FBYztDQUM5QyxPQUFPLElBQUksWUFBWTtFQUNuQixNQUFNO0VBQ0s7RUFDWCxJQUFJLGVBQWU7R0FDZixPQUFPLE9BQU8saUJBQWlCLGFBQWEsYUFBYSxJQUFJRCxhQUFrQixZQUFZO0VBQy9GO0NBQ0osQ0FBQztBQUNMO0FBQ0EsSUFBYSxpQkFBK0IsMkJBQWtCLG1CQUFtQixNQUFNLFFBQVE7Q0FDM0YsZ0JBQXFCLEtBQUssTUFBTSxHQUFHO0NBQ25DLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV0UscUJBQWdDLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDNUcsS0FBSyxlQUFlLEtBQUssS0FBSyxJQUFJO0FBQ3RDLENBQUM7QUFDRCxTQUFnQixZQUFZLFdBQVcsUUFBUTtDQUMzQyxPQUFPLElBQUksZUFBZTtFQUN0QixNQUFNO0VBQ0s7RUFDWCxHQUFHMUUsZ0JBQXFCLE1BQU07Q0FDbEMsQ0FBQztBQUNMO0FBQ0EsSUFBYSxhQUEyQiwyQkFBa0IsZUFBZSxNQUFNLFFBQVE7Q0FDbkYsWUFBaUIsS0FBSyxNQUFNLEdBQUc7Q0FDL0IsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixLQUFLLEtBQUsscUJBQXFCLEtBQUssTUFBTSxXQUFXMkUsaUJBQTRCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDeEcsS0FBSyxlQUFlLEtBQUssS0FBSyxJQUFJO0FBQ3RDLENBQUM7QUFDRCxTQUFnQixRQUFRLFdBQVc7Q0FDL0IsT0FBTyxJQUFJLFdBQVc7RUFDbEIsTUFBTTtFQUNLO0NBQ2YsQ0FBQztBQUNMO0FBQ0EsSUFBYSxXQUF5QiwyQkFBa0IsYUFBYSxNQUFNLFFBQVE7Q0FDL0UsVUFBZSxLQUFLLE1BQU0sR0FBRztDQUM3QixRQUFRLEtBQUssTUFBTSxHQUFHO0NBQ3RCLEtBQUssS0FBSyxxQkFBcUIsS0FBSyxNQUFNLFdBQVdDLGVBQTBCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDdEcsS0FBSyxlQUFlLEtBQUssS0FBSyxJQUFJO0NBQ2xDLEtBQUssY0FBYyxLQUFLO0FBQzVCLENBQUM7QUFDRCxTQUFTLE9BQU8sV0FBVyxZQUFZO0NBQ25DLE9BQU8sSUFBSSxTQUFTO0VBQ2hCLE1BQU07RUFDSztFQUNYLFlBQWEsT0FBTyxlQUFlLGFBQWEsbUJBQW1CO0NBQ3ZFLENBQUM7QUFDTDtBQUVBLElBQWEsU0FBdUIsMkJBQWtCLFdBQVcsTUFBTSxRQUFRO0NBQzNFLFFBQWEsS0FBSyxNQUFNLEdBQUc7Q0FDM0IsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixLQUFLLEtBQUsscUJBQXFCLEtBQUssTUFBTSxXQUFXQyxhQUF3QixNQUFNLEtBQUssTUFBTSxNQUFNO0FBQ3hHLENBQUM7QUFDRCxTQUFnQixJQUFJLFFBQVE7Q0FDeEIsT0FBT0MscUJBQVUsUUFBUSxNQUFNO0FBQ25DO0FBQ0EsSUFBYSxVQUF3QiwyQkFBa0IsWUFBWSxNQUFNLFFBQVE7Q0FDN0UsU0FBYyxLQUFLLE1BQU0sR0FBRztDQUM1QixRQUFRLEtBQUssTUFBTSxHQUFHO0NBQ3RCLEtBQUssS0FBSyxxQkFBcUIsS0FBSyxNQUFNLFdBQVdDLGNBQXlCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDckcsS0FBSyxLQUFLLElBQUk7Q0FDZCxLQUFLLE1BQU0sSUFBSTtBQUNuQixDQUFDO0FBQ0QsU0FBZ0IsS0FBSyxLQUFLLEtBQUs7Q0FDM0IsT0FBTyxJQUFJLFFBQVE7RUFDZixNQUFNO0VBQ04sSUFBSTtFQUNDO0NBRVQsQ0FBQztBQUNMO0FBQ0EsSUFBYSxXQUF5QiwyQkFBa0IsYUFBYSxNQUFNLFFBQVE7Q0FDL0UsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixVQUFlLEtBQUssTUFBTSxHQUFHO0FBQ2pDLENBQUM7QUFDRCxTQUFnQixNQUFNLEtBQUssS0FBSyxRQUFRO0NBQ3BDLE9BQU8sSUFBSSxTQUFTO0VBQ2hCLE1BQU07RUFDTixJQUFJO0VBQ0M7RUFDTCxXQUFXLE9BQU87RUFDbEIsa0JBQWtCLE9BQU87Q0FDN0IsQ0FBQztBQUNMO0FBQ0EsU0FBZ0IsWUFBWSxPQUFPO0NBQy9CLE1BQU0sTUFBTSxNQUFNLEtBQUs7Q0FDdkIsT0FBTyxJQUFJLFNBQVM7RUFDaEIsTUFBTTtFQUNOLElBQUksSUFBSTtFQUNSLEtBQUssSUFBSTtFQUNULFdBQVcsSUFBSTtFQUNmLGtCQUFrQixJQUFJO0NBQzFCLENBQUM7QUFDTDtBQUNBLElBQWEsZ0JBQThCLDJCQUFrQixrQkFBa0IsTUFBTSxRQUFRO0NBQ3pGLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsZUFBb0IsS0FBSyxNQUFNLEdBQUc7QUFDdEMsQ0FBQztBQUNELElBQWEsY0FBNEIsMkJBQWtCLGdCQUFnQixNQUFNLFFBQVE7Q0FDckYsYUFBa0IsS0FBSyxNQUFNLEdBQUc7Q0FDaEMsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixLQUFLLEtBQUsscUJBQXFCLEtBQUssTUFBTSxXQUFXQyxrQkFBNkIsTUFBTSxLQUFLLE1BQU0sTUFBTTtDQUN6RyxLQUFLLGVBQWUsS0FBSyxLQUFLLElBQUk7QUFDdEMsQ0FBQztBQUNELFNBQWdCLFNBQVMsV0FBVztDQUNoQyxPQUFPLElBQUksWUFBWTtFQUNuQixNQUFNO0VBQ0s7Q0FDZixDQUFDO0FBQ0w7QUFDQSxJQUFhLHFCQUFtQywyQkFBa0IsdUJBQXVCLE1BQU0sUUFBUTtDQUNuRyxvQkFBeUIsS0FBSyxNQUFNLEdBQUc7Q0FDdkMsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixLQUFLLEtBQUsscUJBQXFCLEtBQUssTUFBTSxXQUFXQyx5QkFBb0MsTUFBTSxLQUFLLE1BQU0sTUFBTTtBQUNwSCxDQUFDO0FBQ0QsU0FBZ0IsZ0JBQWdCLE9BQU8sUUFBUTtDQUMzQyxPQUFPLElBQUksbUJBQW1CO0VBQzFCLE1BQU07RUFDTjtFQUNBLEdBQUdqRixnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0FBQ0w7QUFDQSxJQUFhLFVBQXdCLDJCQUFrQixZQUFZLE1BQU0sUUFBUTtDQUM3RSxTQUFjLEtBQUssTUFBTSxHQUFHO0NBQzVCLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV2tGLGNBQXlCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDckcsS0FBSyxlQUFlLEtBQUssS0FBSyxJQUFJLE9BQU87QUFDN0MsQ0FBQztBQUNELFNBQWdCLEtBQUssUUFBUTtDQUN6QixPQUFPLElBQUksUUFBUTtFQUNmLE1BQU07RUFDRTtDQUNaLENBQUM7QUFDTDtBQUNBLElBQWEsYUFBMkIsMkJBQWtCLGVBQWUsTUFBTSxRQUFRO0NBQ25GLFlBQWlCLEtBQUssTUFBTSxHQUFHO0NBQy9CLFFBQVEsS0FBSyxNQUFNLEdBQUc7Q0FDdEIsS0FBSyxLQUFLLHFCQUFxQixLQUFLLE1BQU0sV0FBV0MsaUJBQTRCLE1BQU0sS0FBSyxNQUFNLE1BQU07Q0FDeEcsS0FBSyxlQUFlLEtBQUssS0FBSyxJQUFJO0FBQ3RDLENBQUM7QUFDRCxTQUFnQixRQUFRLFdBQVc7Q0FDL0IsT0FBTyxJQUFJLFdBQVc7RUFDbEIsTUFBTTtFQUNLO0NBQ2YsQ0FBQztBQUNMO0FBQ0EsSUFBYSxjQUE0QiwyQkFBa0IsZ0JBQWdCLE1BQU0sUUFBUTtDQUNyRixhQUFrQixLQUFLLE1BQU0sR0FBRztDQUNoQyxRQUFRLEtBQUssTUFBTSxHQUFHO0NBQ3RCLEtBQUssS0FBSyxxQkFBcUIsS0FBSyxNQUFNLFdBQVdDLGtCQUE2QixNQUFNLEtBQUssTUFBTSxNQUFNO0FBQzdHLENBQUM7QUFDRCxTQUFnQixVQUFVLFFBQVE7Q0FDOUIsT0FBTyxJQUFJLFlBQVk7RUFDbkIsTUFBTTtFQUNOLE9BQU8sTUFBTSxRQUFRLFFBQVEsS0FBSyxJQUFJLE1BQU0sUUFBUSxLQUFLLElBQUssUUFBUSxTQUFTLE1BQU0sUUFBUSxDQUFDO0VBQzlGLFFBQVEsUUFBUSxVQUFVLFFBQVE7Q0FDdEMsQ0FBQztBQUNMO0FBRUEsSUFBYSxZQUEwQiwyQkFBa0IsY0FBYyxNQUFNLFFBQVE7Q0FDakYsV0FBZ0IsS0FBSyxNQUFNLEdBQUc7Q0FDOUIsUUFBUSxLQUFLLE1BQU0sR0FBRztDQUN0QixLQUFLLEtBQUsscUJBQXFCLEtBQUssTUFBTSxXQUFXQyxnQkFBMkIsTUFBTSxLQUFLLE1BQU0sTUFBTTtBQUMzRyxDQUFDO0FBRUQsU0FBZ0IsTUFBTSxJQUFJO0NBQ3RCLE1BQU0sS0FBSyxJQUFJQyxVQUFlLEVBQzFCLE9BQU8sU0FFWCxDQUFDO0NBQ0QsR0FBRyxLQUFLLFFBQVE7Q0FDaEIsT0FBTztBQUNYO0FBQ0EsU0FBZ0IsT0FBTyxJQUFJLFNBQVM7Q0FDaEMsT0FBT0Msd0JBQWEsV0FBVyxhQUFhLE9BQU8sT0FBTztBQUM5RDtBQUNBLFNBQWdCLE9BQU8sSUFBSSxVQUFVLENBQUMsR0FBRztDQUNyQyxPQUFPQyx3QkFBYSxXQUFXLElBQUksT0FBTztBQUM5QztBQUVBLFNBQWdCLFlBQVksSUFBSSxRQUFRO0NBQ3BDLE9BQU9DLDZCQUFrQixJQUFJLE1BQU07QUFDdkM7QUFFQSxJQUFhLFdBQVdDO0FBQ3hCLElBQWEsT0FBT0M7QUFDcEIsU0FBUyxZQUFZLEtBQUssU0FBUyxDQUFDLEdBQUc7Q0FDbkMsTUFBTSxPQUFPLElBQUksVUFBVTtFQUN2QixNQUFNO0VBQ04sT0FBTztFQUNQLEtBQUssU0FBUyxnQkFBZ0I7RUFDOUIsT0FBTztFQUNQLEdBQUczRixnQkFBcUIsTUFBTTtDQUNsQyxDQUFDO0NBQ0QsS0FBSyxLQUFLLElBQUksUUFBUTtDQUV0QixLQUFLLEtBQUssU0FBUyxZQUFZO0VBQzNCLElBQUksRUFBRSxRQUFRLGlCQUFpQixNQUMzQixRQUFRLE9BQU8sS0FBSztHQUNoQixNQUFNO0dBQ04sVUFBVSxJQUFJO0dBQ2QsT0FBTyxRQUFRO0dBQ2Y7R0FDQSxNQUFNLENBQUMsR0FBSSxLQUFLLEtBQUssSUFBSSxRQUFRLENBQUMsQ0FBRTtFQUN4QyxDQUFDO0NBRVQ7Q0FDQSxPQUFPO0FBQ1g7QUFHQSxJQUFhLGNBQWMsR0FBRyxTQUFTNEYsNEJBQWlCO0NBQ3BELE9BQU87Q0FDUCxTQUFTO0NBQ1QsUUFBUTtBQUNaLEdBQUcsR0FBRyxJQUFJO0FBQ1YsU0FBZ0IsS0FBSyxRQUFRO0NBQ3pCLE1BQU0sYUFBYSxXQUFXO0VBQzFCLE9BQU8sTUFBTTtHQUFDLE9BQU8sTUFBTTtHQUFHLE9BQU87R0FBRyxRQUFRO0dBQUcsTUFBTTtHQUFHLE1BQU0sVUFBVTtHQUFHLE9BQU8sT0FBTyxHQUFHLFVBQVU7RUFBQyxDQUFDO0NBQ2hILENBQUM7Q0FDRCxPQUFPO0FBQ1g7QUFFQSxTQUFnQixXQUFXLElBQUksUUFBUTtDQUNuQyxPQUFPLElBQUksY0FBYztFQUNyQixNQUFNO0VBQ04sSUFBSSxVQUFVLEVBQUU7RUFDaEIsS0FBSztDQUNULENBQUM7QUFDTDs7O0FDNzJDQSxJQUFNLElBQUk7Q0FDTixHQUFHQztDQUNILEdBQUdDO0NBQ0gsS0FBS0M7QUFDVDtBQUVBLElBQU0sZ0NBQWdDLElBQUksSUFBSTtDQUUxQztDQUNBO0NBQ0E7Q0FDQTtDQUVBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBRUE7Q0FDQTtDQUNBO0NBRUE7Q0FDQTtDQUNBO0NBQ0E7Q0FFQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUVBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUVBO0NBQ0E7Q0FDQTtDQUNBO0NBRUE7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUVBO0NBQ0E7Q0FFQTtDQUNBO0NBQ0E7Q0FFQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUVBO0NBQ0E7QUFDSixDQUFDO0FBQ0QsU0FBUyxjQUFjLFFBQVEsZUFBZTtDQUMxQyxNQUFNLFVBQVUsT0FBTztDQUN2QixJQUFJLFlBQVksZ0RBQ1osT0FBTztDQUVYLElBQUksWUFBWSwyQ0FDWixPQUFPO0NBRVgsSUFBSSxZQUFZLDJDQUNaLE9BQU87Q0FHWCxPQUFPLGlCQUFpQjtBQUM1QjtBQUNBLFNBQVMsV0FBVyxLQUFLLEtBQUs7Q0FDMUIsSUFBSSxDQUFDLElBQUksV0FBVyxHQUFHLEdBQ25CLE1BQU0sSUFBSSxNQUFNLHFFQUFxRTtDQUV6RixNQUFNLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxPQUFPO0NBRW5ELElBQUksS0FBSyxXQUFXLEdBQ2hCLE9BQU8sSUFBSTtDQUVmLE1BQU0sVUFBVSxJQUFJLFlBQVksa0JBQWtCLFVBQVU7Q0FDNUQsSUFBSSxLQUFLLE9BQU8sU0FBUztFQUNyQixNQUFNLE1BQU0sS0FBSztFQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxNQUNsQixNQUFNLElBQUksTUFBTSx3QkFBd0IsS0FBSztFQUVqRCxPQUFPLElBQUksS0FBSztDQUNwQjtDQUNBLE1BQU0sSUFBSSxNQUFNLHdCQUF3QixLQUFLO0FBQ2pEO0FBQ0EsU0FBUyxrQkFBa0IsUUFBUSxLQUFLO0NBRXBDLElBQUksT0FBTyxRQUFRLEtBQUEsR0FBVztFQUUxQixJQUFJLE9BQU8sT0FBTyxRQUFRLFlBQVksT0FBTyxLQUFLLE9BQU8sR0FBRyxDQUFDLENBQUMsV0FBVyxHQUNyRSxPQUFPLEVBQUUsTUFBTTtFQUVuQixNQUFNLElBQUksTUFBTSw0REFBNEQ7Q0FDaEY7Q0FDQSxJQUFJLE9BQU8scUJBQXFCLEtBQUEsR0FDNUIsTUFBTSxJQUFJLE1BQU0sbUNBQW1DO0NBRXZELElBQUksT0FBTywwQkFBMEIsS0FBQSxHQUNqQyxNQUFNLElBQUksTUFBTSx3Q0FBd0M7Q0FFNUQsSUFBSSxPQUFPLE9BQU8sS0FBQSxLQUFhLE9BQU8sU0FBUyxLQUFBLEtBQWEsT0FBTyxTQUFTLEtBQUEsR0FDeEUsTUFBTSxJQUFJLE1BQU0sc0RBQXNEO0NBRTFFLElBQUksT0FBTyxxQkFBcUIsS0FBQSxLQUFhLE9BQU8sc0JBQXNCLEtBQUEsR0FDdEUsTUFBTSxJQUFJLE1BQU0sMERBQTBEO0NBRzlFLElBQUksT0FBTyxNQUFNO0VBQ2IsTUFBTSxVQUFVLE9BQU87RUFDdkIsSUFBSSxJQUFJLEtBQUssSUFBSSxPQUFPLEdBQ3BCLE9BQU8sSUFBSSxLQUFLLElBQUksT0FBTztFQUUvQixJQUFJLElBQUksV0FBVyxJQUFJLE9BQU8sR0FFMUIsT0FBTyxFQUFFLFdBQVc7R0FDaEIsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLE9BQU8sR0FDckIsTUFBTSxJQUFJLE1BQU0sb0NBQW9DLFNBQVM7R0FFakUsT0FBTyxJQUFJLEtBQUssSUFBSSxPQUFPO0VBQy9CLENBQUM7RUFFTCxJQUFJLFdBQVcsSUFBSSxPQUFPO0VBRTFCLE1BQU0sWUFBWSxjQURELFdBQVcsU0FBUyxHQUNFLEdBQUcsR0FBRztFQUM3QyxJQUFJLEtBQUssSUFBSSxTQUFTLFNBQVM7RUFDL0IsSUFBSSxXQUFXLE9BQU8sT0FBTztFQUM3QixPQUFPO0NBQ1g7Q0FFQSxJQUFJLE9BQU8sU0FBUyxLQUFBLEdBQVc7RUFDM0IsTUFBTSxhQUFhLE9BQU87RUFFMUIsSUFBSSxJQUFJLFlBQVksaUJBQ2hCLE9BQU8sYUFBYSxRQUNwQixXQUFXLFdBQVcsS0FDdEIsV0FBVyxPQUFPLE1BQ2xCLE9BQU8sRUFBRSxLQUFLO0VBRWxCLElBQUksV0FBVyxXQUFXLEdBQ3RCLE9BQU8sRUFBRSxNQUFNO0VBRW5CLElBQUksV0FBVyxXQUFXLEdBQ3RCLE9BQU8sRUFBRSxRQUFRLFdBQVcsRUFBRTtFQUdsQyxJQUFJLFdBQVcsT0FBTyxNQUFNLE9BQU8sTUFBTSxRQUFRLEdBQzdDLE9BQU8sRUFBRSxLQUFLLFVBQVU7RUFHNUIsTUFBTSxpQkFBaUIsV0FBVyxLQUFLLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztFQUN6RCxJQUFJLGVBQWUsU0FBUyxHQUN4QixPQUFPLGVBQWU7RUFFMUIsT0FBTyxFQUFFLE1BQU07R0FBQyxlQUFlO0dBQUksZUFBZTtHQUFJLEdBQUcsZUFBZSxNQUFNLENBQUM7RUFBQyxDQUFDO0NBQ3JGO0NBRUEsSUFBSSxPQUFPLFVBQVUsS0FBQSxHQUNqQixPQUFPLEVBQUUsUUFBUSxPQUFPLEtBQUs7Q0FHakMsTUFBTSxPQUFPLE9BQU87Q0FDcEIsSUFBSSxNQUFNLFFBQVEsSUFBSSxHQUFHO0VBRXJCLE1BQU0sY0FBYyxLQUFLLEtBQUssTUFBTTtHQUVoQyxPQUFPLGtCQUFrQjtJQURKLEdBQUc7SUFBUSxNQUFNO0dBQ0osR0FBRyxHQUFHO0VBQzVDLENBQUM7RUFDRCxJQUFJLFlBQVksV0FBVyxHQUN2QixPQUFPLEVBQUUsTUFBTTtFQUVuQixJQUFJLFlBQVksV0FBVyxHQUN2QixPQUFPLFlBQVk7RUFFdkIsT0FBTyxFQUFFLE1BQU0sV0FBVztDQUM5QjtDQUNBLElBQUksQ0FBQyxNQUVELE9BQU8sRUFBRSxJQUFJO0NBRWpCLElBQUk7Q0FDSixRQUFRLE1BQVI7RUFDSSxLQUFLLFVBQVU7R0FDWCxJQUFJLGVBQWUsRUFBRSxPQUFPO0dBRTVCLElBQUksT0FBTyxRQUFRO0lBQ2YsTUFBTSxTQUFTLE9BQU87SUFFdEIsSUFBSSxXQUFXLFNBQ1gsZUFBZSxhQUFhLE1BQU0sRUFBRSxNQUFNLENBQUM7U0FFMUMsSUFBSSxXQUFXLFNBQVMsV0FBVyxpQkFDcEMsZUFBZSxhQUFhLE1BQU0sRUFBRSxJQUFJLENBQUM7U0FFeEMsSUFBSSxXQUFXLFVBQVUsV0FBVyxRQUNyQyxlQUFlLGFBQWEsTUFBTSxFQUFFLEtBQUssQ0FBQztTQUV6QyxJQUFJLFdBQVcsYUFDaEIsZUFBZSxhQUFhLE1BQU0sRUFBRSxJQUFJLFNBQVMsQ0FBQztTQUVqRCxJQUFJLFdBQVcsUUFDaEIsZUFBZSxhQUFhLE1BQU0sRUFBRSxJQUFJLEtBQUssQ0FBQztTQUU3QyxJQUFJLFdBQVcsUUFDaEIsZUFBZSxhQUFhLE1BQU0sRUFBRSxJQUFJLEtBQUssQ0FBQztTQUU3QyxJQUFJLFdBQVcsWUFDaEIsZUFBZSxhQUFhLE1BQU0sRUFBRSxJQUFJLFNBQVMsQ0FBQztTQUVqRCxJQUFJLFdBQVcsUUFDaEIsZUFBZSxhQUFhLE1BQU0sRUFBRSxLQUFLLENBQUM7U0FFekMsSUFBSSxXQUFXLFFBQ2hCLGVBQWUsYUFBYSxNQUFNLEVBQUUsS0FBSyxDQUFDO1NBRXpDLElBQUksV0FBVyxPQUNoQixlQUFlLGFBQWEsTUFBTSxFQUFFLElBQUksQ0FBQztTQUV4QyxJQUFJLFdBQVcsUUFDaEIsZUFBZSxhQUFhLE1BQU0sRUFBRSxPQUFPLENBQUM7U0FFM0MsSUFBSSxXQUFXLFdBQ2hCLGVBQWUsYUFBYSxNQUFNLEVBQUUsT0FBTyxDQUFDO1NBRTNDLElBQUksV0FBVyxVQUNoQixlQUFlLGFBQWEsTUFBTSxFQUFFLE9BQU8sQ0FBQztTQUUzQyxJQUFJLFdBQVcsYUFDaEIsZUFBZSxhQUFhLE1BQU0sRUFBRSxVQUFVLENBQUM7U0FFOUMsSUFBSSxXQUFXLFFBQ2hCLGVBQWUsYUFBYSxNQUFNLEVBQUUsS0FBSyxDQUFDO1NBRXpDLElBQUksV0FBVyxPQUNoQixlQUFlLGFBQWEsTUFBTSxFQUFFLElBQUksQ0FBQztTQUV4QyxJQUFJLFdBQVcsU0FDaEIsZUFBZSxhQUFhLE1BQU0sRUFBRSxNQUFNLENBQUM7U0FFMUMsSUFBSSxXQUFXLFVBQ2hCLGVBQWUsYUFBYSxNQUFNLEVBQUUsT0FBTyxDQUFDO1NBRTNDLElBQUksV0FBVyxRQUNoQixlQUFlLGFBQWEsTUFBTSxFQUFFLEtBQUssQ0FBQztTQUV6QyxJQUFJLFdBQVcsU0FDaEIsZUFBZSxhQUFhLE1BQU0sRUFBRSxNQUFNLENBQUM7U0FFMUMsSUFBSSxXQUFXLFFBQ2hCLGVBQWUsYUFBYSxNQUFNLEVBQUUsS0FBSyxDQUFDO1NBRXpDLElBQUksV0FBVyxPQUNoQixlQUFlLGFBQWEsTUFBTSxFQUFFLElBQUksQ0FBQztTQUV4QyxJQUFJLFdBQVcsU0FDaEIsZUFBZSxhQUFhLE1BQU0sRUFBRSxNQUFNLENBQUM7R0FJbkQ7R0FFQSxJQUFJLE9BQU8sT0FBTyxjQUFjLFVBQzVCLGVBQWUsYUFBYSxJQUFJLE9BQU8sU0FBUztHQUVwRCxJQUFJLE9BQU8sT0FBTyxjQUFjLFVBQzVCLGVBQWUsYUFBYSxJQUFJLE9BQU8sU0FBUztHQUVwRCxJQUFJLE9BQU8sU0FFUCxlQUFlLGFBQWEsTUFBTSxJQUFJLE9BQU8sT0FBTyxPQUFPLENBQUM7R0FFaEUsWUFBWTtHQUNaO0VBQ0o7RUFDQSxLQUFLO0VBQ0wsS0FBSyxXQUFXO0dBQ1osSUFBSSxlQUFlLFNBQVMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLE9BQU87R0FFcEUsSUFBSSxPQUFPLE9BQU8sWUFBWSxVQUMxQixlQUFlLGFBQWEsSUFBSSxPQUFPLE9BQU87R0FFbEQsSUFBSSxPQUFPLE9BQU8sWUFBWSxVQUMxQixlQUFlLGFBQWEsSUFBSSxPQUFPLE9BQU87R0FFbEQsSUFBSSxPQUFPLE9BQU8scUJBQXFCLFVBQ25DLGVBQWUsYUFBYSxHQUFHLE9BQU8sZ0JBQWdCO1FBRXJELElBQUksT0FBTyxxQkFBcUIsUUFBUSxPQUFPLE9BQU8sWUFBWSxVQUNuRSxlQUFlLGFBQWEsR0FBRyxPQUFPLE9BQU87R0FFakQsSUFBSSxPQUFPLE9BQU8scUJBQXFCLFVBQ25DLGVBQWUsYUFBYSxHQUFHLE9BQU8sZ0JBQWdCO1FBRXJELElBQUksT0FBTyxxQkFBcUIsUUFBUSxPQUFPLE9BQU8sWUFBWSxVQUNuRSxlQUFlLGFBQWEsR0FBRyxPQUFPLE9BQU87R0FFakQsSUFBSSxPQUFPLE9BQU8sZUFBZSxVQUM3QixlQUFlLGFBQWEsV0FBVyxPQUFPLFVBQVU7R0FFNUQsWUFBWTtHQUNaO0VBQ0o7RUFDQSxLQUFLO0dBQ0QsWUFBWSxFQUFFLFFBQVE7R0FDdEI7RUFFSixLQUFLO0dBQ0QsWUFBWSxFQUFFLEtBQUs7R0FDbkI7RUFFSixLQUFLLFVBQVU7R0FDWCxNQUFNLFFBQVEsQ0FBQztHQUNmLE1BQU0sYUFBYSxPQUFPLGNBQWMsQ0FBQztHQUN6QyxNQUFNLGNBQWMsSUFBSSxJQUFJLE9BQU8sWUFBWSxDQUFDLENBQUM7R0FFakQsS0FBSyxNQUFNLENBQUMsS0FBSyxlQUFlLE9BQU8sUUFBUSxVQUFVLEdBQUc7SUFDeEQsTUFBTSxnQkFBZ0IsY0FBYyxZQUFZLEdBQUc7SUFFbkQsTUFBTSxPQUFPLFlBQVksSUFBSSxHQUFHLElBQUksZ0JBQWdCLGNBQWMsU0FBUztHQUMvRTtHQUVBLElBQUksT0FBTyxlQUFlO0lBQ3RCLE1BQU0sWUFBWSxjQUFjLE9BQU8sZUFBZSxHQUFHO0lBQ3pELE1BQU0sY0FBYyxPQUFPLHdCQUF3QixPQUFPLE9BQU8seUJBQXlCLFdBQ3BGLGNBQWMsT0FBTyxzQkFBc0IsR0FBRyxJQUM5QyxFQUFFLElBQUk7SUFFWixJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxXQUFXLEdBQUc7S0FDakMsWUFBWSxFQUFFLE9BQU8sV0FBVyxXQUFXO0tBQzNDO0lBQ0o7SUFFQSxNQUFNLGVBQWUsRUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLFlBQVk7SUFDakQsTUFBTSxlQUFlLEVBQUUsWUFBWSxXQUFXLFdBQVc7SUFDekQsWUFBWSxFQUFFLGFBQWEsY0FBYyxZQUFZO0lBQ3JEO0dBQ0o7R0FFQSxJQUFJLE9BQU8sbUJBQW1CO0lBRzFCLE1BQU0sZUFBZSxPQUFPO0lBQzVCLE1BQU0sY0FBYyxPQUFPLEtBQUssWUFBWTtJQUM1QyxNQUFNLGVBQWUsQ0FBQztJQUN0QixLQUFLLE1BQU0sV0FBVyxhQUFhO0tBQy9CLE1BQU0sZUFBZSxjQUFjLGFBQWEsVUFBVSxHQUFHO0tBQzdELE1BQU0sWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxPQUFPLE9BQU8sQ0FBQztLQUN0RCxhQUFhLEtBQUssRUFBRSxZQUFZLFdBQVcsWUFBWSxDQUFDO0lBQzVEO0lBRUEsTUFBTSxxQkFBcUIsQ0FBQztJQUM1QixJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxTQUFTLEdBRTVCLG1CQUFtQixLQUFLLEVBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFFekQsbUJBQW1CLEtBQUssR0FBRyxZQUFZO0lBQ3ZDLElBQUksbUJBQW1CLFdBQVcsR0FDOUIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZO1NBRXBDLElBQUksbUJBQW1CLFdBQVcsR0FDbkMsWUFBWSxtQkFBbUI7U0FFOUI7S0FFRCxJQUFJLFNBQVMsRUFBRSxhQUFhLG1CQUFtQixJQUFJLG1CQUFtQixFQUFFO0tBQ3hFLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxtQkFBbUIsUUFBUSxLQUMzQyxTQUFTLEVBQUUsYUFBYSxRQUFRLG1CQUFtQixFQUFFO0tBRXpELFlBQVk7SUFDaEI7SUFDQTtHQUNKO0dBSUEsTUFBTSxlQUFlLEVBQUUsT0FBTyxLQUFLO0dBQ25DLElBQUksT0FBTyx5QkFBeUIsT0FFaEMsWUFBWSxhQUFhLE9BQU87UUFFL0IsSUFBSSxPQUFPLE9BQU8seUJBQXlCLFVBRTVDLFlBQVksYUFBYSxTQUFTLGNBQWMsT0FBTyxzQkFBc0IsR0FBRyxDQUFDO1FBSWpGLFlBQVksYUFBYSxZQUFZO0dBRXpDO0VBQ0o7RUFDQSxLQUFLLFNBQVM7R0FJVixNQUFNLGNBQWMsT0FBTztHQUMzQixNQUFNLFFBQVEsT0FBTztHQUNyQixJQUFJLGVBQWUsTUFBTSxRQUFRLFdBQVcsR0FBRztJQUUzQyxNQUFNLGFBQWEsWUFBWSxLQUFLLFNBQVMsY0FBYyxNQUFNLEdBQUcsQ0FBQztJQUNyRSxNQUFNLE9BQU8sU0FBUyxPQUFPLFVBQVUsWUFBWSxDQUFDLE1BQU0sUUFBUSxLQUFLLElBQ2pFLGNBQWMsT0FBTyxHQUFHLElBQ3hCLEtBQUE7SUFDTixJQUFJLE1BQ0EsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDLENBQUMsS0FBSyxJQUFJO1NBR3pDLFlBQVksRUFBRSxNQUFNLFVBQVU7SUFHbEMsSUFBSSxPQUFPLE9BQU8sYUFBYSxVQUMzQixZQUFZLFVBQVUsTUFBTSxFQUFFLFVBQVUsT0FBTyxRQUFRLENBQUM7SUFFNUQsSUFBSSxPQUFPLE9BQU8sYUFBYSxVQUMzQixZQUFZLFVBQVUsTUFBTSxFQUFFLFVBQVUsT0FBTyxRQUFRLENBQUM7R0FFaEUsT0FDSyxJQUFJLE1BQU0sUUFBUSxLQUFLLEdBQUc7SUFFM0IsTUFBTSxhQUFhLE1BQU0sS0FBSyxTQUFTLGNBQWMsTUFBTSxHQUFHLENBQUM7SUFDL0QsTUFBTSxPQUFPLE9BQU8sbUJBQW1CLE9BQU8sT0FBTyxvQkFBb0IsV0FDbkUsY0FBYyxPQUFPLGlCQUFpQixHQUFHLElBQ3pDLEtBQUE7SUFDTixJQUFJLE1BQ0EsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDLENBQUMsS0FBSyxJQUFJO1NBR3pDLFlBQVksRUFBRSxNQUFNLFVBQVU7SUFHbEMsSUFBSSxPQUFPLE9BQU8sYUFBYSxVQUMzQixZQUFZLFVBQVUsTUFBTSxFQUFFLFVBQVUsT0FBTyxRQUFRLENBQUM7SUFFNUQsSUFBSSxPQUFPLE9BQU8sYUFBYSxVQUMzQixZQUFZLFVBQVUsTUFBTSxFQUFFLFVBQVUsT0FBTyxRQUFRLENBQUM7R0FFaEUsT0FDSyxJQUFJLFVBQVUsS0FBQSxHQUFXO0lBRTFCLE1BQU0sVUFBVSxjQUFjLE9BQU8sR0FBRztJQUN4QyxJQUFJLGNBQWMsRUFBRSxNQUFNLE9BQU87SUFFakMsSUFBSSxPQUFPLE9BQU8sYUFBYSxVQUMzQixjQUFjLFlBQVksSUFBSSxPQUFPLFFBQVE7SUFFakQsSUFBSSxPQUFPLE9BQU8sYUFBYSxVQUMzQixjQUFjLFlBQVksSUFBSSxPQUFPLFFBQVE7SUFFakQsWUFBWTtHQUNoQixPQUdJLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDO0dBRS9CO0VBQ0o7RUFDQSxTQUNJLE1BQU0sSUFBSSxNQUFNLHFCQUFxQixNQUFNO0NBQ25EO0NBQ0EsT0FBTztBQUNYO0FBQ0EsU0FBUyxjQUFjLFFBQVEsS0FBSztDQUNoQyxJQUFJLE9BQU8sV0FBVyxXQUNsQixPQUFPLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNO0NBR3RDLElBQUksYUFBYSxrQkFBa0IsUUFBUSxHQUFHO0NBQzlDLE1BQU0sa0JBQWtCLE9BQU8sUUFBUSxPQUFPLFNBQVMsS0FBQSxLQUFhLE9BQU8sVUFBVSxLQUFBO0NBR3JGLElBQUksT0FBTyxTQUFTLE1BQU0sUUFBUSxPQUFPLEtBQUssR0FBRztFQUM3QyxNQUFNLFVBQVUsT0FBTyxNQUFNLEtBQUssTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDO0VBQzdELE1BQU0sYUFBYSxFQUFFLE1BQU0sT0FBTztFQUNsQyxhQUFhLGtCQUFrQixFQUFFLGFBQWEsWUFBWSxVQUFVLElBQUk7Q0FDNUU7Q0FFQSxJQUFJLE9BQU8sU0FBUyxNQUFNLFFBQVEsT0FBTyxLQUFLLEdBQUc7RUFDN0MsTUFBTSxVQUFVLE9BQU8sTUFBTSxLQUFLLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztFQUM3RCxNQUFNLGFBQWEsRUFBRSxJQUFJLE9BQU87RUFDaEMsYUFBYSxrQkFBa0IsRUFBRSxhQUFhLFlBQVksVUFBVSxJQUFJO0NBQzVFO0NBRUEsSUFBSSxPQUFPLFNBQVMsTUFBTSxRQUFRLE9BQU8sS0FBSyxHQUMxQyxJQUFJLE9BQU8sTUFBTSxXQUFXLEdBQ3hCLGFBQWEsa0JBQWtCLGFBQWEsRUFBRSxJQUFJO01BRWpEO0VBQ0QsSUFBSSxTQUFTLGtCQUFrQixhQUFhLGNBQWMsT0FBTyxNQUFNLElBQUksR0FBRztFQUM5RSxNQUFNLFdBQVcsa0JBQWtCLElBQUk7RUFDdkMsS0FBSyxJQUFJLElBQUksVUFBVSxJQUFJLE9BQU8sTUFBTSxRQUFRLEtBQzVDLFNBQVMsRUFBRSxhQUFhLFFBQVEsY0FBYyxPQUFPLE1BQU0sSUFBSSxHQUFHLENBQUM7RUFFdkUsYUFBYTtDQUNqQjtDQUdKLElBQUksT0FBTyxhQUFhLFFBQVEsSUFBSSxZQUFZLGVBQzVDLGFBQWEsRUFBRSxTQUFTLFVBQVU7Q0FHdEMsSUFBSSxPQUFPLGFBQWEsTUFDcEIsYUFBYSxFQUFFLFNBQVMsVUFBVTtDQUt0QyxJQUFJLE9BQU8sWUFBWSxLQUFBLEdBQ25CLGFBQWEsV0FBVyxRQUFRLE9BQU8sT0FBTztDQUtsRCxNQUFNLFlBQVksQ0FBQztDQUVuQixLQUFLLE1BQU0sT0FBTztFQURRO0VBQU87RUFBTTtFQUFZO0VBQVc7RUFBZTtFQUFlO0NBQzNELEdBQzdCLElBQUksT0FBTyxRQUNQLFVBQVUsT0FBTyxPQUFPO0NBSWhDLEtBQUssTUFBTSxPQUFPO0VBRFc7RUFBbUI7RUFBb0I7Q0FDaEMsR0FDaEMsSUFBSSxPQUFPLFFBQ1AsVUFBVSxPQUFPLE9BQU87Q0FHaEMsS0FBSyxNQUFNLE9BQU8sT0FBTyxLQUFLLE1BQU0sR0FDaEMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEdBQUcsR0FDeEIsVUFBVSxPQUFPLE9BQU87Q0FHaEMsSUFBSSxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsU0FBUyxHQUNoQyxJQUFJLFNBQVMsSUFBSSxZQUFZLFNBQVM7Q0FLMUMsSUFBSSxPQUFPLGFBQ1AsYUFBYSxXQUFXLFNBQVMsT0FBTyxXQUFXO0NBRXZELE9BQU87QUFDWDs7O0FBR0EsU0FBZ0IsZUFBZSxRQUFRLFFBQVE7Q0FFM0MsSUFBSSxPQUFPLFdBQVcsV0FDbEIsT0FBTyxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTTtDQU10QyxJQUFJO0NBQ0osSUFBSTtFQUNBLGFBQWEsS0FBSyxNQUFNLEtBQUssVUFBVSxNQUFNLENBQUM7Q0FDbEQsUUFDTTtFQUNGLE1BQU0sSUFBSSxNQUFNLGdHQUFnRztDQUNwSDtDQUdBLE1BQU0sTUFBTTtFQUNSLFNBSFksY0FBYyxZQUFZLFFBQVEsYUFHeEM7RUFDTixNQUhVLFdBQVcsU0FBUyxXQUFXLGVBQWUsQ0FBQztFQUl6RCxzQkFBTSxJQUFJLElBQUk7RUFDZCw0QkFBWSxJQUFJLElBQUk7RUFDcEIsWUFBWTtFQUNaLFVBQVUsUUFBUSxZQUFZO0NBQ2xDO0NBQ0EsT0FBTyxjQUFjLFlBQVksR0FBRztBQUN4Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbmtCQSxTQUFTLGtCQUFrQixVQUF1RTtDQUNoRyxRQUFRLFVBQVUsWUFBWSxHQUE5QjtFQUNFLEtBQUssUUFDSCxPQUFPO0VBQ1QsS0FBSyxZQUNILE9BQU87RUFDVCxLQUFLLFVBQ0gsT0FBTztFQUNULEtBQUs7RUFDTCxLQUFLLGNBQ0gsT0FBTztFQUNULFNBQ0U7Q0FDSjtBQUNGOzs7OztBQU1BLElBQWEsc0JBQXNCLE9BQVMsRUFDMUMsU0FBUyxNQUNQLE9BQVMsRUFDUCxlQUFlLE9BQVM7Q0FDdEIsSUFBSSxPQUFTO0NBQ2IsVUFBVSxPQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLGlCQUFpQjtDQUMzRCxhQUFhLE9BQVMsQ0FBQyxDQUFDLFNBQVM7QUFDbkMsQ0FBQyxFQUNILENBQUMsQ0FDSCxFQUNGLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FFekJELElBQWEscUJBQXFCLGVBQWlCLG1CQUF3QiJ9