sonamu 0.8.26 → 0.8.28

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.
@@ -1228,4 +1228,4 @@ export class JoinClauseGroup {
1228
1228
  }
1229
1229
  }
1230
1230
 
1231
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub1RoZW5Qcm9wZXJ0eTogUHVyaeuKlCB0aGVuYWJsZSDsnbjthLDtjpjsnbTsiqTrpbwg6rWs7ZiE7ZWY6rOgIOyeiOyKteuLiOuLpC4gKi9cbi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJp64qUIOuLpOyWke2VnCDtg4DsnoXsnYQg7IKs7Jqp7ZWY6rOgIOyeiOyKteuLiOuLpC4gKi9cblxuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIHR5cGUgVGFibGVTcGVjIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB0eXBlIHtcbiAgQXZhaWxhYmxlQ29sdW1ucyxcbiAgQ29sdW1uS2V5cyxcbiAgQ29tcGFyaXNvbk9wZXJhdG9yLFxuICBFeHBhbmQsXG4gIEV4dHJhY3RDb2x1bW5UeXBlLFxuICBGdWxsdGV4dENvbHVtbnMsXG4gIEZ1enp5T3BlcmF0b3IsXG4gIEluc2VydERhdGEsXG4gIEluc2VydFJlc3VsdCxcbiAgTGVmdEpvaW5lZE1hcmtlcixcbiAgTGVmdEpvaW5NYXJrZXJGb3IsXG4gIE51bWVyaWNDb2x1bW5zLFxuICBPbkNvbmZsaWN0QWN0aW9uLFxuICBQYXJzZVNlbGVjdE9iamVjdCxcbiAgUmVzdWx0QXZhaWxhYmxlQ29sdW1ucyxcbiAgU2VsZWN0QWxsUmVzdWx0LFxuICBTZWxlY3RPYmplY3QsXG4gIFNpbmdsZVRhYmxlVmFsdWUsXG4gIFNxbEV4cHJlc3Npb24sXG4gIFRzSGlnaGxpZ2h0T3B0aW9ucyxcbiAgVHNRdWVyeUNvbmZpZyxcbiAgVHNRdWVyeU9wdGlvbnMsXG4gIFRzUmFua09wdGlvbnMsXG4gIFZlY3RvckNvbHVtbnMsXG4gIFdoZXJlQ29uZGl0aW9uLFxuICBXaGVyZU9wZXJhdG9yLFxufSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQgeyBGVVpaWV9PUEVSQVRPUlMgfSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IENsZWFyU3RhdGVtZW50cyB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZ1enp5T3BlcmF0b3Iob3BlcmF0b3I/OiBzdHJpbmcpOiBGdXp6eU9wZXJhdG9yIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG9wZXJhdG9yPy50cmltKCkgPz8gXCI8JVwiO1xuICBjb25zdCBmdXp6eU9wZXJhdG9yID0gRlVaWllfT1BFUkFUT1JTLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlID09PSBub3JtYWxpemVkKTtcblxuICBpZiAoIWZ1enp5T3BlcmF0b3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZnV6enkgb3BlcmF0b3I6ICR7b3BlcmF0b3IgPz8gXCJcIn1gKTtcbiAgfVxuXG4gIHJldHVybiBmdXp6eU9wZXJhdG9yO1xufVxuXG5leHBvcnQgY2xhc3MgUHVyaTxUU2NoZW1hLCBUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiwgVFJlc3VsdD4ge1xuICBwcml2YXRlIGtuZXhRdWVyeTogS25leC5RdWVyeUJ1aWxkZXI7XG4gIHByaXZhdGUgdGFibGVTcGVjOiBUYWJsZVNwZWMgfCBudWxsID0gbnVsbDtcblxuICAvLyDsg53shLHsnpAg7Iuc6re464uI7LKY65OkXG4gIGNvbnN0cnVjdG9yKGtuZXg6IEtuZXgsIHRhYmxlTmFtZTogc3RyaW5nKTtcbiAgY29uc3RydWN0b3Ioa25leDogS25leCwgdGFibGVTb3VyY2U6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IFB1cmk8VFNjaGVtYSwgYW55LCBhbnk+Pik7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBrbmV4OiBLbmV4LFxuICAgIHRhYmxlTmFtZU9yU291cmNlOiBhbnksXG4gICkge1xuICAgIGlmICh0eXBlb2YgdGFibGVOYW1lT3JTb3VyY2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIC8vIENhc2U6IG5ldyBQdXJpKGtuZXgsIFwidXNlcnNcIilcbiAgICAgIHRoaXMua25leFF1ZXJ5ID0gdGhpcy5rbmV4KHRhYmxlTmFtZU9yU291cmNlKS5mcm9tKHRhYmxlTmFtZU9yU291cmNlKTtcbiAgICAgIHRoaXMudGFibGVTcGVjID0gdGhpcy5zYWZlR2V0VGFibGVTcGVjKHRhYmxlTmFtZU9yU291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0YWJsZU5hbWVPclNvdXJjZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRhYmxlTmFtZU9yU291cmNlKTtcbiAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUYWJsZSBzcGVjIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBlbnRyeVwiKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChlbnRyaWVzWzBdKTtcbiAgICAgIGNvbnN0IFthbGlhcywgc291cmNlXSA9IGVudHJpZXNbMF07XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeSA9IHRoaXMua25leChzb3VyY2UpLmZyb20oeyBbYWxpYXNdOiBzb3VyY2UgfSk7XG4gICAgICAgIHRoaXMudGFibGVTcGVjID0gdGhpcy5zYWZlR2V0VGFibGVTcGVjKHNvdXJjZSk7XG4gICAgICB9IGVsc2UgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIFB1cmkpIHtcbiAgICAgICAgY29uc3Qgc3VicXVlcnlCdWlsZGVyID0gc291cmNlLnJhd1F1ZXJ5KCk7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5ID0gdGhpcy5rbmV4LmZyb20oc3VicXVlcnlCdWlsZGVyLmFzKGFsaWFzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIHNwZWNpZmljYXRpb25cIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdGFibGUgc3BlY2lmaWNhdGlvblwiKTtcbiAgICB9XG4gIH1cblxuICBzYWZlR2V0VGFibGVTcGVjKHRhYmxlTmFtZTogc3RyaW5nKTogVGFibGVTcGVjIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBFbnRpdHlNYW5hZ2VyLmdldFRhYmxlU3BlYyh0YWJsZU5hbWUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljIFNRTCBoZWxwZXIgZnVuY3Rpb25zIGZvciBTRUxFQ1RcbiAgc3RhdGljIGNvdW50KGNvbHVtbjogc3RyaW5nID0gXCIqXCIpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgQ09VTlQoPz8pOjppbnRlZ2VyYCxcbiAgICAgIF9wYXJhbXM6IFtjb2x1bW5dLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIHN1bShjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBTVU0oPz8pYCxcbiAgICAgIF9wYXJhbXM6IFtjb2x1bW5dLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIGF2Zyhjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBBVkcoPz8pYCxcbiAgICAgIF9wYXJhbXM6IFtjb2x1bW5dLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIG1heChjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBNQVgoPz8pYCxcbiAgICAgIF9wYXJhbXM6IFtjb2x1bW5dLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIG1pbihjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBNSU4oPz8pYCxcbiAgICAgIF9wYXJhbXM6IFtjb2x1bW5dLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIGNvbmNhdCguLi5hcmdzOiBzdHJpbmdbXSk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJzdHJpbmdcIixcbiAgICAgIF9zcWw6IGBDT05DQVQoJHthcmdzLm1hcCgoKSA9PiBcIj9cIikuam9pbihcIiwgXCIpfSlgLFxuICAgICAgX3BhcmFtczogYXJncyxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB1cHBlcihjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJzdHJpbmdcIixcbiAgICAgIF9zcWw6IFwiVVBQRVIoPz8pXCIsXG4gICAgICBfcGFyYW1zOiBbY29sdW1uXSxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBsb3dlcihjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJzdHJpbmdcIixcbiAgICAgIF9zcWw6IFwiTE9XRVIoPz8pXCIsXG4gICAgICBfcGFyYW1zOiBbY29sdW1uXSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHdvcmRTaW1pbGFyaXR5KFxuICAgIGNvbHVtbjogc3RyaW5nIHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPixcbiAgICBxdWVyeTogc3RyaW5nLFxuICApOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICBpZiAodHlwZW9mIGNvbHVtbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgICAgX3NxbDogXCJ3b3JkX3NpbWlsYXJpdHkoPywgPz8pXCIsXG4gICAgICAgIF9wYXJhbXM6IFtxdWVyeSwgY29sdW1uXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcIm51bWJlclwiLFxuICAgICAgX3NxbDogYHdvcmRfc2ltaWxhcml0eSg/LCAke2NvbHVtbi5fc3FsfSlgLFxuICAgICAgX3BhcmFtczogW3F1ZXJ5LCAuLi5jb2x1bW4uX3BhcmFtc10sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBzaW1pbGFyaXR5KFxuICAgIGNvbHVtbjogc3RyaW5nIHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPixcbiAgICBxdWVyeTogc3RyaW5nLFxuICApOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICBpZiAodHlwZW9mIGNvbHVtbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgICAgX3NxbDogXCJzaW1pbGFyaXR5KD8/LCA/KVwiLFxuICAgICAgICBfcGFyYW1zOiBbY29sdW1uLCBxdWVyeV0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBzaW1pbGFyaXR5KCR7Y29sdW1uLl9zcWx9LCA/KWAsXG4gICAgICBfcGFyYW1zOiBbLi4uY29sdW1uLl9wYXJhbXMsIHF1ZXJ5XSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHN0cmljdFdvcmRTaW1pbGFyaXR5KFxuICAgIGNvbHVtbjogc3RyaW5nIHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPixcbiAgICBxdWVyeTogc3RyaW5nLFxuICApOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICBpZiAodHlwZW9mIGNvbHVtbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgICAgX3NxbDogYHN0cmljdF93b3JkX3NpbWlsYXJpdHkoPywgPz8pYCxcbiAgICAgICAgX3BhcmFtczogW3F1ZXJ5LCBjb2x1bW5dLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgc3RyaWN0X3dvcmRfc2ltaWxhcml0eSg/LCAke2NvbHVtbi5fc3FsfSlgLFxuICAgICAgX3BhcmFtczogW3F1ZXJ5LCAuLi5jb2x1bW4uX3BhcmFtc10sXG4gICAgfTtcbiAgfVxuXG4gIC8vIFJhdyBmdW5jdGlvbnMgZm9yIFNFTEVDVFxuICBzdGF0aWMgcmF3U3RyaW5nKHNxbDogc3RyaW5nLCBwYXJhbXM6IHVua25vd25bXSA9IFtdKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPiB7XG4gICAgcmV0dXJuIHsgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIiwgX3JldHVybjogXCJzdHJpbmdcIiwgX3NxbDogc3FsLCBfcGFyYW1zOiBwYXJhbXMgfTtcbiAgfVxuXG4gIHN0YXRpYyByYXdTdHJpbmdBcnJheShzcWw6IHN0cmluZywgcGFyYW1zOiB1bmtub3duW10gPSBbXSk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdbXVwiPiB7XG4gICAgcmV0dXJuIHsgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIiwgX3JldHVybjogXCJzdHJpbmdbXVwiLCBfc3FsOiBzcWwsIF9wYXJhbXM6IHBhcmFtcyB9O1xuICB9XG5cbiAgc3RhdGljIHJhd051bWJlcihzcWw6IHN0cmluZywgcGFyYW1zOiB1bmtub3duW10gPSBbXSk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7IF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsIF9yZXR1cm46IFwibnVtYmVyXCIsIF9zcWw6IHNxbCwgX3BhcmFtczogcGFyYW1zIH07XG4gIH1cblxuICBzdGF0aWMgcmF3Qm9vbGVhbihzcWw6IHN0cmluZywgcGFyYW1zOiB1bmtub3duW10gPSBbXSk6IFNxbEV4cHJlc3Npb248XCJib29sZWFuXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcImJvb2xlYW5cIiwgX3NxbDogc3FsLCBfcGFyYW1zOiBwYXJhbXMgfTtcbiAgfVxuXG4gIHN0YXRpYyByYXdEYXRlKHNxbDogc3RyaW5nLCBwYXJhbXM6IHVua25vd25bXSA9IFtdKTogU3FsRXhwcmVzc2lvbjxcImRhdGVcIj4ge1xuICAgIHJldHVybiB7IF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsIF9yZXR1cm46IFwiZGF0ZVwiLCBfc3FsOiBzcWwsIF9wYXJhbXM6IHBhcmFtcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZUUyDqsoDsg4nslrQg7ZWY7J2065287J207YyFXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC5zZWxlY3Qoe1xuICAgKiAgIHRpdGxlOiBQdXJpLmhpZ2hsaWdodChcInBvc3RzLnRpdGxlXCIsIHNlYXJjaCksXG4gICAqICAgY29udGVudDogUHVyaS5oaWdobGlnaHQoXCJwb3N0cy5jb250ZW50XCIsIHNlYXJjaCwge1xuICAgKiAgICAgc3RhcnRTZWw6IFwiPG1hcms+XCIsXG4gICAqICAgICBzdG9wU2VsOiBcIjwvbWFyaz5cIixcbiAgICogICAgIG1heEZyYWdtZW50czogMyxcbiAgICogICB9KSxcbiAgICogfSlcbiAgICovXG4gIHN0YXRpYyB0c0hpZ2hsaWdodChcbiAgICBjb2x1bW46IHN0cmluZyxcbiAgICBxdWVyeTogc3RyaW5nLFxuICAgIF9vcHRpb25zPzogVHNIaWdobGlnaHRPcHRpb25zLFxuICApOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICBjb25zdCB7IHBhcnNlciA9IFwid2Vic2VhcmNoX3RvX3RzcXVlcnlcIiwgY29uZmlnID0gXCJzaW1wbGVcIiwgLi4ub3B0aW9ucyB9ID0gX29wdGlvbnMgPz8ge307XG5cbiAgICBjb25zdCBobE9wdGlvblBhcnRzID0gT2JqZWN0LmVudHJpZXMob3B0aW9ucykubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiBgJHtpbmZsZWN0aW9uLmNhbWVsaXplKGtleSl9PSR7dmFsdWV9YDtcbiAgICB9KTtcblxuICAgIGNvbnN0IGhsT3B0aW9ucyA9IGhsT3B0aW9uUGFydHMubGVuZ3RoID4gMCA/IGAsICcke2hsT3B0aW9uUGFydHMuam9pbihcIiwgXCIpfSdgIDogXCJcIjtcblxuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJzdHJpbmdcIixcbiAgICAgIF9zcWw6IGB0c19oZWFkbGluZSg/LCA/PywgJHtwYXJzZXJ9KD8sID8pJHtobE9wdGlvbnN9KWAsXG4gICAgICBfcGFyYW1zOiBbY29uZmlnLCBjb2x1bW4sIGNvbmZpZywgcXVlcnldLFxuICAgIH07XG4gIH1cblxuICAvLyB0c19yYW5rXG4gIHN0YXRpYyB0c1JhbmsoXG4gICAgY29sdW1uOiBzdHJpbmcgfCBTcWxFeHByZXNzaW9uPFwidHN2ZWN0b3JcIj4sXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBvcHRpb25zPzogVHNSYW5rT3B0aW9ucyxcbiAgKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIFB1cmkuX3RzUmFuayhcInRzX3JhbmtcIiwgY29sdW1uLCBxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyB0c19yYW5rX2NkXG4gIHN0YXRpYyB0c1JhbmtDZChcbiAgICBjb2x1bW46IHN0cmluZyB8IFNxbEV4cHJlc3Npb248XCJ0c3ZlY3RvclwiPixcbiAgICBxdWVyeTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUc1JhbmtPcHRpb25zLFxuICApOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4gUHVyaS5fdHNSYW5rKFwidHNfcmFua19jZFwiLCBjb2x1bW4sIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyB0b1RzVmVjdG9yKGNvbHVtbjogc3RyaW5nLCBjb25maWc6IHN0cmluZyA9IFwic2ltcGxlXCIpOiBTcWxFeHByZXNzaW9uPFwidHN2ZWN0b3JcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJ0c3ZlY3RvclwiLFxuICAgICAgX3NxbDogYHRvX3RzdmVjdG9yKD8sID8/KWAsXG4gICAgICBfcGFyYW1zOiBbY29uZmlnLCBjb2x1bW5dLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgX3RzUmFuayhcbiAgICB0eXBlOiBcInRzX3JhbmtcIiB8IFwidHNfcmFua19jZFwiLFxuICAgIGNvbHVtbjogc3RyaW5nIHwgU3FsRXhwcmVzc2lvbjxcInRzdmVjdG9yXCI+LFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFRzUmFua09wdGlvbnMsXG4gICk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHBhcnNlciA9IFwid2Vic2VhcmNoX3RvX3RzcXVlcnlcIixcbiAgICAgIGNvbmZpZyA9IFwic2ltcGxlXCIsXG4gICAgICBub3JtYWxpemF0aW9uLFxuICAgICAgd2VpZ2h0cyxcbiAgICB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IFtdO1xuICAgIGxldCBzcWxUZW1wbGF0ZSA9IGAke3R5cGV9KGA7XG5cbiAgICBpZiAod2VpZ2h0cykge1xuICAgICAgc3FsVGVtcGxhdGUgKz0gYEFSUkFZWyR7d2VpZ2h0cy5tYXAoKCkgPT4gXCI/XCIpLmpvaW4oXCIsIFwiKX1dOjpmbG9hdDRbXSwgYDtcbiAgICAgIHBhcmFtcy5wdXNoKC4uLndlaWdodHMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29sdW1uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBzcWxUZW1wbGF0ZSArPSBgPz8sICR7cGFyc2VyfSg/LCA/KWA7XG4gICAgICBwYXJhbXMucHVzaChjb2x1bW4sIGNvbmZpZywgcXVlcnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzcWxUZW1wbGF0ZSArPSBgJHtjb2x1bW4uX3NxbH0sICR7cGFyc2VyfSg/LCA/KWA7XG4gICAgICBwYXJhbXMucHVzaCguLi5jb2x1bW4uX3BhcmFtcywgY29uZmlnLCBxdWVyeSk7XG4gICAgfVxuXG4gICAgaWYgKG5vcm1hbGl6YXRpb24pIHtcbiAgICAgIHNxbFRlbXBsYXRlICs9IFwiLCA/XCI7XG4gICAgICBwYXJhbXMucHVzaChub3JtYWxpemF0aW9uKTtcbiAgICB9XG5cbiAgICBzcWxUZW1wbGF0ZSArPSBcIilcIjtcblxuICAgIHJldHVybiB7IF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsIF9yZXR1cm46IFwibnVtYmVyXCIsIF9zcWw6IHNxbFRlbXBsYXRlLCBfcGFyYW1zOiBwYXJhbXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQR3Jvb25nYSBGdWxsVGV4dCDsnbjrjbHsiqQg6rKA7IOJIOygkOyImFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAuc2VsZWN0KHtcbiAgICogICBzY29yZTogUHVyaS5zY29yZSgpLFxuICAgKiB9KVxuICAgKi9cbiAgc3RhdGljIHNjb3JlKCk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiBQdXJpLnJhd051bWJlcihcInBncm9vbmdhX3Njb3JlKHRhYmxlb2lkLCBjdGlkKVwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQR3Jvb25nYSBGdWxsVGV4dCDsnbjrjbHsiqQg6rKA7IOJIO2VmOydtOudvOydtO2MhVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAuc2VsZWN0KHtcbiAgICogICB0aXRsZTogUHVyaS5oaWdobGlnaHQoXCJwb3N0cy50aXRsZVwiLCBzZWFyY2gpLFxuICAgKiB9KVxuICAgKi9cbiAgc3RhdGljIGhpZ2hsaWdodChjb2x1bW46IHN0cmluZywgcXVlcnk6IHN0cmluZyB8IHN0cmluZ1tdKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPjtcbiAgc3RhdGljIGhpZ2hsaWdodChjb2x1bW5zOiBzdHJpbmdbXSwgcXVlcnk6IHN0cmluZyB8IHN0cmluZ1tdKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1tdXCI+O1xuXG4gIHN0YXRpYyBoaWdobGlnaHQoXG4gICAgY29sdW1uT3JDb2x1bW5zOiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICBxdWVyeTogc3RyaW5nIHwgc3RyaW5nW10sXG4gICk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nW11cIj4ge1xuICAgIGNvbnN0IHF1ZXJ5QXJyID0gQXJyYXkuaXNBcnJheShxdWVyeSkgPyBxdWVyeSA6IFtxdWVyeV07XG4gICAgY29uc3QgcXVlcnlDbGF1c2UgPSBgQVJSQVlbJHtxdWVyeUFyci5tYXAoKCkgPT4gXCI/XCIpLmpvaW4oXCIsIFwiKX1dYDtcblxuICAgIC8vIOuLqOydvCDsu6zrn7zsnbgg6rK97JqwXG4gICAgaWYgKHR5cGVvZiBjb2x1bW5PckNvbHVtbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBQdXJpLnJhd1N0cmluZyhgcGdyb29uZ2FfaGlnaGxpZ2h0X2h0bWwoPz8sICR7cXVlcnlDbGF1c2V9KWAsIFtcbiAgICAgICAgY29sdW1uT3JDb2x1bW5zLFxuICAgICAgICAuLi5xdWVyeUFycixcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIC8vIOy7rOufvCDrsLDsl7Tsnbgg6rK97JqwXG4gICAgcmV0dXJuIFB1cmkucmF3U3RyaW5nQXJyYXkoXG4gICAgICBgcGdyb29uZ2FfaGlnaGxpZ2h0X2h0bWwoQVJSQVlbJHtjb2x1bW5PckNvbHVtbnMubWFwKCgpID0+IFwiPz9cIikuam9pbihcIiwgXCIpfV0sICR7cXVlcnlDbGF1c2V9KWAsXG4gICAgICBbLi4uY29sdW1uT3JDb2x1bW5zLCAuLi5xdWVyeUFycl0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFNFTEVDVCAob3ZlcndyaXRlKVxuICBzZWxlY3Q8VFNlbGVjdCBleHRlbmRzIFNlbGVjdE9iamVjdDxUVGFibGVzPj4oXG4gICAgc2VsZWN0T2JqOiBUU2VsZWN0LFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMsIFBhcnNlU2VsZWN0T2JqZWN0PFRUYWJsZXMsIFRTZWxlY3Q+PiB7XG4gICAgLy8g7KSR7LKpIOqwneyytOulvCBmbGF07ZWY6rKMIOuzgO2ZmFxuICAgIGNvbnN0IGZsYXRTZWxlY3QgPSB0aGlzLmZsYXR0ZW5TZWxlY3Qoc2VsZWN0T2JqKTtcblxuICAgIGNvbnN0IHNlbGVjdENsYXVzZXM6IChzdHJpbmcgfCBLbmV4LlJhdylbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbYWxpYXMsIGNvbHVtbk9yRnVuY3Rpb25dIG9mIE9iamVjdC5lbnRyaWVzKGZsYXRTZWxlY3QpKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbk9yRnVuY3Rpb24gPT09IFwib2JqZWN0XCIgJiYgY29sdW1uT3JGdW5jdGlvbi5fdHlwZSA9PT0gXCJzcWxfZXhwcmVzc2lvblwiKSB7XG4gICAgICAgIC8vIFNRTCDtlajsiJjsnbgg6rK97JqwXG4gICAgICAgIHNlbGVjdENsYXVzZXMucHVzaChcbiAgICAgICAgICB0aGlzLmtuZXgucmF3KGAke2NvbHVtbk9yRnVuY3Rpb24uX3NxbH0gQVMgXCIke2FsaWFzfVwiYCwgY29sdW1uT3JGdW5jdGlvbi5fcGFyYW1zKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOydvOuwmCDsu6zrn7zsnbgg6rK97JqwXG4gICAgICAgIGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW5PckZ1bmN0aW9uIGFzIHN0cmluZztcbiAgICAgICAgaWYgKGFsaWFzID09PSBjb2x1bW5QYXRoKSB7XG4gICAgICAgICAgLy8gYWxpYXPsmYAg7Lus65+866qF7J20IOqwmeycvOuptCBhbGlhcyDsg53rnrVcbiAgICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2goY29sdW1uUGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYWxpYXMg7KeA7KCVXG4gICAgICAgICAgc2VsZWN0Q2xhdXNlcy5wdXNoKGAke2NvbHVtblBhdGh9IEFTICR7YWxpYXN9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmtuZXhRdWVyeS5zZWxlY3Qoc2VsZWN0Q2xhdXNlcyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLyoqXG4gICAqIOykkeyyqSDqsJ3ssrTrpbwgZmxhdCDqsJ3ssrTroZwg67OA7ZmYXG4gICAqIOyYiDogeyBwYXJlbnQ6IHsgaWQ6IFwicGFyZW50LmlkXCIsIG5hbWU6IFwicGFyZW50Lm5hbWVcIiB9IH1cbiAgICogICDihpIgeyBwYXJlbnRfX2lkOiBcInBhcmVudC5pZFwiLCBwYXJlbnRfX25hbWU6IFwicGFyZW50Lm5hbWVcIiB9XG4gICAqL1xuICBwcml2YXRlIGZsYXR0ZW5TZWxlY3Qoc2VsZWN0T2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBwcmVmaXggPSBcIlwiKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgY29uc3QgZmxhdFNlbGVjdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2VsZWN0T2JqKSkge1xuICAgICAgY29uc3QgZnVsbEtleSA9IHByZWZpeCA/IGAke3ByZWZpeH1fXyR7a2V5fWAgOiBrZXk7XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgIShcIl90eXBlXCIgaW4gdmFsdWUpKSB7XG4gICAgICAgIC8vIOykkeyyqSDqsJ3ssrTsnbgg6rK97JqwIC0g7J6s6reAIOyymOumrFxuICAgICAgICBjb25zdCBuZXN0ZWQgPSB0aGlzLmZsYXR0ZW5TZWxlY3QodmFsdWUsIGZ1bGxLZXkpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGZsYXRTZWxlY3QsIG5lc3RlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDsnbzrsJgg6rCS7J24IOqyveyasCAo7Lus65+8IOqyveuhnCDrmJDripQgU3FsRXhwcmVzc2lvbilcbiAgICAgICAgZmxhdFNlbGVjdFtmdWxsS2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmbGF0U2VsZWN0O1xuICB9XG5cbiAgLy8gU0VMRUNUIChzZWxlY3TripQgb3ZlcndyaXRlLCBhcHBlbmRTZWxlY3TripQgYXBwZW5kKVxuICBhcHBlbmRTZWxlY3Q8VFNlbGVjdCBleHRlbmRzIFNlbGVjdE9iamVjdDxUVGFibGVzPj4oXG4gICAgc2VsZWN0T2JqOiBUU2VsZWN0LFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMsIFRSZXN1bHQgJiBQYXJzZVNlbGVjdE9iamVjdDxUVGFibGVzLCBUU2VsZWN0Pj4ge1xuICAgIC8vIOykkeyyqSDqsJ3ssrTrpbwgZmxhdO2VmOqyjCDrs4DtmZhcbiAgICBjb25zdCBmbGF0U2VsZWN0ID0gdGhpcy5mbGF0dGVuU2VsZWN0KHNlbGVjdE9iaik7XG5cbiAgICBjb25zdCBzZWxlY3RDbGF1c2VzOiAoc3RyaW5nIHwgS25leC5SYXcpW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2FsaWFzLCBjb2x1bW5PckZ1bmN0aW9uXSBvZiBPYmplY3QuZW50cmllcyhmbGF0U2VsZWN0KSkge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5PckZ1bmN0aW9uID09PSBcIm9iamVjdFwiICYmIGNvbHVtbk9yRnVuY3Rpb24uX3R5cGUgPT09IFwic3FsX2V4cHJlc3Npb25cIikge1xuICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2goXG4gICAgICAgICAgdGhpcy5rbmV4LnJhdyhgJHtjb2x1bW5PckZ1bmN0aW9uLl9zcWx9IEFTICR7YWxpYXN9YCwgY29sdW1uT3JGdW5jdGlvbi5fcGFyYW1zKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW5PckZ1bmN0aW9uIGFzIHN0cmluZztcbiAgICAgICAgaWYgKGFsaWFzID09PSBjb2x1bW5QYXRoKSB7XG4gICAgICAgICAgc2VsZWN0Q2xhdXNlcy5wdXNoKGNvbHVtblBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbGVjdENsYXVzZXMucHVzaCh0aGlzLmtuZXgucmVmKGNvbHVtblBhdGgpLmFzKGFsaWFzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmtuZXhRdWVyeS5zZWxlY3Qoc2VsZWN0Q2xhdXNlcyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLy8gU0VMRUNUICpcbiAgc2VsZWN0QWxsKCk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgU2VsZWN0QWxsUmVzdWx0PFRUYWJsZXM+PiB7XG4gICAgdGhpcy5rbmV4UXVlcnkuc2VsZWN0KFwiKlwiKTtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvLyBESVNUSU5DVFxuICBkaXN0aW5jdDxUQ29sdW1ucyBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KC4uLmNvbHVtbnM6IFRDb2x1bW5zW10pOiB0aGlzO1xuICBkaXN0aW5jdCguLi5jb2x1bW5zOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5LmRpc3RpbmN0KC4uLihjb2x1bW5zIGFzIHN0cmluZ1tdKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBDTEVBUlxuICBjbGVhcihzdGF0ZW1lbnQ6IENsZWFyU3RhdGVtZW50cyk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5LmNsZWFyKHN0YXRlbWVudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBrbmV47JeQIOyXhuyWtOyEnCDsp4HsoJEg6rWs7ZiE7ZWoXG4gIGNsZWFySm9pbihhbGlhczogc3RyaW5nKTogdGhpcyB7XG4gICAgKHRoaXMua25leFF1ZXJ5IGFzIGFueSkuX3N0YXRlbWVudHMgPSAodGhpcy5rbmV4UXVlcnkgYXMgYW55KS5fc3RhdGVtZW50cy5maWx0ZXIoKHM6IGFueSkgPT4ge1xuICAgICAgaWYgKFwiam9pblR5cGVcIiBpbiBzKSB7XG4gICAgICAgIGNvbnN0IFtfYWxpYXMsIF90YWJsZV0gPSBPYmplY3QuZW50cmllcyhzLnRhYmxlKVswXTtcbiAgICAgICAgcmV0dXJuIF9hbGlhcyAhPT0gYWxpYXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEpPSU46IOyEnOu4jOy/vOumrCArIEFsaWFzXG4gIGpvaW48VEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZywgVFN1YlJlc3VsdD4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBQdXJpPFRTY2hlbWEsIGFueSwgVFN1YlJlc3VsdD4gfSxcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICAgIHJpZ2h0OiBgJHtUSm9pbkFsaWFzfS4ke0NvbHVtbktleXM8VFN1YlJlc3VsdD59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdD4sIC8vIOyEnOu4jOy/vOumrOydmCBUUmVzdWx0XG4gICAgVFJlc3VsdFxuICA+O1xuICAvLyBKT0lOOiDthYzsnbTruJQgKyBBbGlhc1xuICBqb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLCBUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nPihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFRKb2luVGFibGUgfSxcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICAgIHJpZ2h0OiBgJHtUSm9pbkFsaWFzfS4ke0NvbHVtbktleXM8VFNjaGVtYVtUSm9pblRhYmxlXT59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXT4sIC8vIFRUYWJsZXMg7ZmV7J6lIVxuICAgIFRSZXN1bHRcbiAgPjtcbiAgLy8gSk9JTjog7YWM7J2067iU66qFXG4gIGpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWE+KFxuICAgIHRhYmxlTmFtZTogVEpvaW5UYWJsZSxcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICAgIHJpZ2h0OiBgJHtUSm9pblRhYmxlICYgc3RyaW5nfS4ke0NvbHVtbktleXM8VFNjaGVtYVtUSm9pblRhYmxlXT59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXT4sIC8vIO2FjOydtOu4lOuqheydtCDtgqRcbiAgICBUUmVzdWx0XG4gID47XG4gIC8vIEpPSU46IOyEnOu4jOy/vOumrCArIEFsaWFzICsg7L2c67CxXG4gIGpvaW48VEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZywgVFN1YlJlc3VsdD4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBQdXJpPFRTY2hlbWEsIGFueSwgVFN1YlJlc3VsdD4gfSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdD4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdD4sIFRSZXN1bHQ+O1xuICAvLyBKT0lOOiDthYzsnbTruJQgKyBBbGlhcyArIOy9nOuwsVxuICBqb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLCBUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nPihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFRKb2luVGFibGUgfSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXT4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXT4sIFRSZXN1bHQ+O1xuICAvLyBKT0lOOiDthYzsnbTruJTrqoUgKyDsvZzrsLFcbiAgam9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYT4oXG4gICAgdGFibGVOYW1lOiBUSm9pblRhYmxlLFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdPj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdPiwgVFJlc3VsdD47XG4gIC8vIEpPSU4g7Iuk7KCcIOq1rO2YhFxuICBqb2luKHRhYmxlTmFtZU9yU3BlYzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX19jb21tb25Kb2luKFwiam9pblwiLCB0YWJsZU5hbWVPclNwZWMsIC4uLmFyZ3MpO1xuICB9XG5cbiAgLy8gTEVGVCBKT0lOOiDshJzruIzsv7zrpqwgKyBBbGlhc1xuICBsZWZ0Sm9pbjxUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nLCBUU3ViUmVzdWx0PihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFB1cmk8VFNjaGVtYSwgYW55LCBUU3ViUmVzdWx0PiB9LFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4sXG4gICAgcmlnaHQ6IGAke1RKb2luQWxpYXN9LiR7Q29sdW1uS2V5czxUU3ViUmVzdWx0Pn1gLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdCAmIExlZnRKb2luZWRNYXJrZXI+LCBUUmVzdWx0PjsgLy8g7ISc67iM7L+866as7J2YIFRSZXN1bHRcbiAgLy8gTEVGVCBKT0lOOiDthYzsnbTruJQgKyBBbGlhc1xuICAvLyBGSyBudWxsYWJsZSDsl6zrtoDsl5Ag65Sw6528IOyekOuPmeycvOuhnCBMZWZ0Sm9pbmVkTWFya2VyIOqysOyglVxuICBsZWZ0Sm9pbjxcbiAgICBUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYSxcbiAgICBUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nLFxuICAgIFRMZWZ0IGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPixcbiAgPihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFRKb2luVGFibGUgfSxcbiAgICBsZWZ0OiBUTGVmdCxcbiAgICByaWdodDogYCR7VEpvaW5BbGlhc30uJHtDb2x1bW5LZXlzPFRTY2hlbWFbVEpvaW5UYWJsZV0+fWAsXG4gICk6IFB1cmk8XG4gICAgVFNjaGVtYSxcbiAgICBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTY2hlbWFbVEpvaW5UYWJsZV0gJiBMZWZ0Sm9pbk1hcmtlckZvcjxUVGFibGVzLCBUTGVmdD4+LFxuICAgIFRSZXN1bHRcbiAgPjtcbiAgLy8gTEVGVCBKT0lOOiDthYzsnbTruJTrqoVcbiAgbGVmdEpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWEsIFRMZWZ0IGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgdGFibGVOYW1lOiBUSm9pblRhYmxlLFxuICAgIGxlZnQ6IFRMZWZ0LFxuICAgIHJpZ2h0OiBgJHtUSm9pblRhYmxlICYgc3RyaW5nfS4ke0NvbHVtbktleXM8VFNjaGVtYVtUSm9pblRhYmxlXT59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXSAmIExlZnRKb2luTWFya2VyRm9yPFRUYWJsZXMsIFRMZWZ0Pj4sXG4gICAgVFJlc3VsdFxuICA+O1xuICAvLyBMRUZUIEpPSU46IOyEnOu4jOy/vOumrCArIEFsaWFzICsg7L2c67CxXG4gIGxlZnRKb2luPFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmcsIFRTdWJSZXN1bHQ+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogUHVyaTxUU2NoZW1hLCBhbnksIFRTdWJSZXN1bHQ+IH0sXG4gICAgY2FsbGJhY2s6IChqOiBKb2luQ2xhdXNlR3JvdXA8VFRhYmxlcywgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQ+PikgPT4gdm9pZCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQgJiBMZWZ0Sm9pbmVkTWFya2VyPiwgVFJlc3VsdD47XG4gIC8vIExFRlQgSk9JTjog7YWM7J2067iUICsgQWxpYXMgKyDsvZzrsLFcbiAgbGVmdEpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWEsIFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogVEpvaW5UYWJsZSB9LFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdPj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdICYgTGVmdEpvaW5lZE1hcmtlcj4sIFRSZXN1bHQ+O1xuICAvLyBMRUZUIEpPSU46IO2FjOydtOu4lOuqhSArIOy9nOuwsVxuICBsZWZ0Sm9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYT4oXG4gICAgdGFibGVOYW1lOiBUSm9pblRhYmxlLFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdPj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdICYgTGVmdEpvaW5lZE1hcmtlcj4sIFRSZXN1bHQ+O1xuICAvLyBMRUZUIEpPSU4g7Iuk7KCcIOq1rO2YhFxuICBsZWZ0Sm9pbih0YWJsZU5hbWVPclNwZWM6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9fY29tbW9uSm9pbihcImxlZnRKb2luXCIsIHRhYmxlTmFtZU9yU3BlYywgLi4uYXJncyk7XG4gIH1cblxuICBfX2NvbW1vbkpvaW4oam9pblR5cGU6IFwiam9pblwiIHwgXCJsZWZ0Sm9pblwiLCB0YWJsZU5hbWVPclNwZWM6IGFueSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICBpZiAodHlwZW9mIHRhYmxlTmFtZU9yU3BlYyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gQ2FzZSAxOiBqb2luKFwicG9zdHNcIiwgLi4uKVxuICAgICAgY29uc3QgdGFibGVOYW1lID0gdGFibGVOYW1lT3JTcGVjO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAvLyBqb2luKFwicG9zdHNcIiwgY2FsbGJhY2spXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gYXJnc1swXTtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHRhYmxlTmFtZSwgKGpvaW5DbGF1c2UpID0+IHtcbiAgICAgICAgICBjYWxsYmFjayhuZXcgSm9pbkNsYXVzZUdyb3VwKGpvaW5DbGF1c2UpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBqb2luKFwicG9zdHNcIiwgbGVmdCwgcmlnaHQpXG4gICAgICAgIGNvbnN0IFtsZWZ0LCByaWdodF0gPSBhcmdzO1xuICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0odGFibGVOYW1lLCBsZWZ0LCByaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGFibGVOYW1lT3JTcGVjID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvLyBDYXNlIDI6IGpvaW4oeyBhbGlhczogXCJ0YWJsZVwiIH0sIC4uLikgb3Igam9pbih7IGFsaWFzOiBzdWJxdWVyeSB9LCAuLi4pXG4gICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModGFibGVOYW1lT3JTcGVjKTtcbiAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUYWJsZSBzcGVjIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBlbnRyeVwiKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChlbnRyaWVzWzBdKTtcbiAgICAgIGNvbnN0IFtbYWxpYXMsIHNwZWNdXSA9IGVudHJpZXM7XG5cbiAgICAgIGlmICh0eXBlb2Ygc3BlYyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyDthYzsnbTruJQ6IGpvaW4oeyBwOiBcInBvc3RzXCIgfSwgLi4uKVxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIC8vIENhbGxiYWNrXG4gICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBhcmdzWzBdO1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXSh7IFthbGlhc106IHNwZWMgfSwgKGpvaW5DbGF1c2UpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBKb2luQ2xhdXNlR3JvdXAoam9pbkNsYXVzZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpbXBsZVxuICAgICAgICAgIGNvbnN0IFtsZWZ0LCByaWdodF0gPSBhcmdzO1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXSh7IFthbGlhc106IHNwZWMgfSwgbGVmdCwgcmlnaHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNwZWMgaW5zdGFuY2VvZiBQdXJpKSB7XG4gICAgICAgIC8vIOyEnOu4jOy/vOumrDogam9pbih7IHNxOiBzdWJxdWVyeSB9LCAuLi4pXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgLy8gQ2FsbGJhY2tcbiAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFyZ3NbMF07XG4gICAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHNwZWMucmF3UXVlcnkoKS5hcyhhbGlhcyksIChqb2luQ2xhdXNlKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgSm9pbkNsYXVzZUdyb3VwKGpvaW5DbGF1c2UpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTaW1wbGVcbiAgICAgICAgICBjb25zdCBbbGVmdCwgcmlnaHRdID0gYXJncztcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0oc3BlYy5yYXdRdWVyeSgpLmFzKGFsaWFzKSwgbGVmdCwgcmlnaHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIHNwZWNpZmljYXRpb25cIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkU6IOqwneyytCAtIOyCrOyaqTogLndoZXJlKHsgXCJ1LmlkXCI6IDEsIFwidS5zdGF0dXNcIjogXCJhY3RpdmVcIiB9KVxuICB3aGVyZShjb25kaXRpb25zOiBXaGVyZUNvbmRpdGlvbjxUVGFibGVzPik6IHRoaXM7XG4gIC8vIFdIRVJFOiDsu6zrn7wgLSDsgqzsmqk6IC53aGVyZShcInUuaWRcIiwgMSksIC53aGVyZShcInUuaWRcIiwgbnVsbClcbiAgd2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIC8vIFdIRVJFOiDsu6zrn7wgLSDsgqzsmqk6IC53aGVyZShcInUuaWRcIiwgXCI+XCIsIDEwKSwgLndoZXJlKFwidS5pZFwiLCBcIiE9XCIsIG51bGwpXG4gIHdoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgb3BlcmF0b3I6IFdoZXJlT3BlcmF0b3IsXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBXSEVSRTogU1FMIO2RnO2YhOyLnSAtIOyCrOyaqTogLndoZXJlKHB1cmkucmF3KFwiQ09OQ0FUKHUubmFtZSwgdS5lbWFpbClcIiksIFwibGlrZVwiLCBcIiV0ZXN0JVwiKVxuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgS25leC5SYXc+KGNvbHVtbjogVENvbHVtbiwgb3BlcmF0b3I6IFdoZXJlT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICAvLyBXSEVSRTog7Lus65+8IC0g7IKs7JqpOiAud2hlcmUoXCJ1LmlkXCIsIFwibGlrZVwiLCBcIiV0ZXN0JVwiKVxuICB3aGVyZSguLi5hcmdzOiBbY29sdW1uT3JDb25kaXRpb25zOiBhbnksIG9wZXJhdG9yT3JWYWx1ZT86IGFueSwgdmFsdWU/OiBhbnldKTogdGhpcyB7XG4gICAgY29uc3QgW2NvbHVtbk9yQ29uZGl0aW9ucywgb3BlcmF0b3JPclZhbHVlLCB2YWx1ZV0gPSBhcmdzO1xuICAgIGlmICh0eXBlb2YgY29sdW1uT3JDb25kaXRpb25zID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZShjb2x1bW5PckNvbmRpdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAob3BlcmF0b3JPclZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlTnVsbChjb2x1bW5PckNvbmRpdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKGNvbHVtbk9yQ29uZGl0aW9ucywgb3BlcmF0b3JPclZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGlmIChvcGVyYXRvck9yVmFsdWUgPT09IFwiIT1cIikge1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlTm90TnVsbChjb2x1bW5PckNvbmRpdGlvbnMpO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yT3JWYWx1ZSA9PT0gXCI9XCIpIHtcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZU51bGwoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmUoY29sdW1uT3JDb25kaXRpb25zLCBvcGVyYXRvck9yVmFsdWUsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmUoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBXSEVSRSBJTlxuICB3aGVyZUluPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWVzOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPltdLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMsIFRSZXN1bHQ+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZUluKGNvbHVtbiwgdmFsdWVzKTtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvLyBXSEVSRSBOT1QgSU5cbiAgd2hlcmVOb3RJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0PiB7XG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVOb3RJbihjb2x1bW4sIHZhbHVlcyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLy8gV0hFUkUgTUFUQ0hcbiAgd2hlcmVNYXRjaDxUQ29sdW1uIGV4dGVuZHMgRnVsbHRleHRDb2x1bW5zPFRUYWJsZXM+Pihjb2x1bW46IFRDb2x1bW4sIHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgTUFUQ0ggKCR7U3RyaW5nKGNvbHVtbil9KSBBR0FJTlNUICg/KWAsIFt2YWx1ZV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBHcm9vbmdhIEZ1bGxUZXh0IOyduOuNseyKpCDqsoDsg4lcbiAgICogLSDsgqzsmqntlaAgUEdyb29uZ2Eg7J24642x7Iqk7JmAIOuPmeydvO2VnCDsu6zrn7wg6rWs7ISx7Jy866GcIOqygOyDie2VtOyVvCDsnbjrjbHsiqTqsIAg7IKs7Jqp65Cp64uI64ukLlxuICAgKlxuICAgKiDri6jsnbwg7Lus65+8IOqygOyDiTpcbiAgICogYGBgc3FsXG4gICAqIFdIRVJFIG5hbWUgJkB+ICdzZWFyY2gnXG4gICAqIGBgYFxuICAgKlxuICAgKiDrs7Xtlakg7Lus65+8IOqygOyDiTpcbiAgICogYGBgc3FsXG4gICAqIFdIRVJFIEFSUkFZW25hbWU6OnRleHQsIGRlc2NyaXB0aW9uOjp0ZXh0XSAmQH4gJ3NlYXJjaCdcbiAgICogYGBgXG4gICAqL1xuICB3aGVyZVNlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uIHwgVENvbHVtbltdLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHdlaWdodHM/OiBudW1iZXJbXTsgLy8g7KCV7IiYIOuwsOyXtFxuICAgIH0sXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IHsgd2VpZ2h0cyB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgICBjb25zdCBjb2x1bW5FeHByID0gQXJyYXkuaXNBcnJheShjb2x1bW4pXG4gICAgICA/IGBBUlJBWVske2NvbHVtbi5tYXAoKGMpID0+IGAke2N9Ojp0ZXh0YCkuam9pbihcIixcIil9XWBcbiAgICAgIDogY29sdW1uO1xuICAgIGNvbnN0IHBncm9vbmdhQ29uZGl0aW9uID0gYHBncm9vbmdhX2NvbmRpdGlvbig/JHt3ZWlnaHRzPy5sZW5ndGggPyBgLCB3ZWlnaHRzID0+IEFSUkFZWyR7d2VpZ2h0cy5qb2luKFwiLFwiKX1dYCA6IFwiXCJ9KWA7XG5cbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgJHtjb2x1bW5FeHByfSAmQH4gJHtwZ3Jvb25nYUNvbmRpdGlvbn1gLCBbdmFsdWVdKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkUgRlVMTFRFWFRcbiAgd2hlcmVUc1NlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPiB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUc1F1ZXJ5T3B0aW9ucyB8IFRzUXVlcnlDb25maWcsXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IG9wdHMgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgPyAoeyBjb25maWc6IG9wdGlvbnMgfSBhcyBUc1F1ZXJ5T3B0aW9ucykgOiAob3B0aW9ucyA/PyB7fSk7XG5cbiAgICBjb25zdCBwYXJzZXIgPSBvcHRzLnBhcnNlciA/PyBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCI7XG4gICAgY29uc3QgY29uZmlnID0gb3B0cy5jb25maWcgPz8gXCJzaW1wbGVcIjtcbiAgICBjb25zdCBjb2x1bW5FeHByID1cbiAgICAgIHR5cGVvZiBjb2x1bW4gPT09IFwib2JqZWN0XCIgJiYgY29sdW1uLl90eXBlID09PSBcInNxbF9leHByZXNzaW9uXCJcbiAgICAgICAgPyBjb2x1bW4uX3NxbFxuICAgICAgICA6IFN0cmluZyhjb2x1bW4pO1xuXG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYCR7Y29sdW1uRXhwcn0gQEAgJHtwYXJzZXJ9KD8sID8pYCwgW2NvbmZpZywgdmFsdWVdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdoZXJlRnV6enk8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzoge1xuICAgICAgb3BlcmF0b3I/OiBGdXp6eU9wZXJhdG9yO1xuICAgIH0sXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IG9wZXJhdG9yID0gbm9ybWFsaXplRnV6enlPcGVyYXRvcihvcHRpb25zPy5vcGVyYXRvcik7XG5cbiAgICBpZiAob3BlcmF0b3IgPT09IFwiJVwiKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgJHtjb2x1bW4uX3NxbH0gJHtvcGVyYXRvcn0gP2AsIFsuLi5jb2x1bW4uX3BhcmFtcywgdmFsdWVdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlUmF3KGA/PyAke29wZXJhdG9yfSA/YCwgW2NvbHVtbiwgdmFsdWVdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29sdW1uID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgPyAke29wZXJhdG9yfSAke2NvbHVtbi5fc3FsfWAsIFt2YWx1ZSwgLi4uY29sdW1uLl9wYXJhbXNdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYD8gJHtvcGVyYXRvcn0gPz9gLCBbdmFsdWUsIGNvbHVtbl0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIFJBV1xuICB3aGVyZVJhdyhzcWw6IHN0cmluZywgYmluZGluZ3M/OiByZWFkb25seSB1bmtub3duW10pOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhzcWwsIGJpbmRpbmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIOq0hO2YuCDqt7jro7ntlZFcbiAgd2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZSgoYnVpbGRlcikgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihidWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKGdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBvcldoZXJlR3JvdXAoY2FsbGJhY2s6IChnOiBXaGVyZUdyb3VwPFRUYWJsZXM+KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkub3JXaGVyZSgoYnVpbGRlcikgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihidWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKGdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9SREVSIEJZIChTcWxFeHByZXNzaW9u7Jy866Gc64+EIO2VoCDsiJgg7J6I7Ja07JW8IO2VqClcbiAgb3JkZXJCeTxUQ29sdW1uIGV4dGVuZHMgUmVzdWx0QXZhaWxhYmxlQ29sdW1uczxUVGFibGVzLCBUUmVzdWx0Pj4oXG4gICAgY29sdW1uOiBUQ29sdW1uIHwgU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4sXG4gICAgZGlyZWN0aW9uOiBcImFzY1wiIHwgXCJkZXNjXCIsXG4gICk6IHRoaXM7XG4gIG9yZGVyQnkoXG4gICAgY29sdW1uOiBzdHJpbmcgfCBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPixcbiAgICBkaXJlY3Rpb246IFwiYXNjXCIgfCBcImRlc2NcIiA9IFwiYXNjXCIsXG4gICk6IHRoaXMge1xuICAgIGlmICh0eXBlb2YgY29sdW1uID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmtuZXhRdWVyeS5vcmRlckJ5UmF3KGAke2NvbHVtbi5fc3FsfSAke2RpcmVjdGlvbn1gLCBjb2x1bW4uX3BhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua25leFF1ZXJ5Lm9yZGVyQnkoY29sdW1uLCBkaXJlY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiDrsqHthLAg7Jyg7IKs64+EIOqygOyDiSDshKTsoJVcbiAgICpcbiAgICogLSBTRUxFQ1Tsl5Agc2ltaWxhcml0eSDsu6zrn7wg7LaU6rCAXG4gICAqIC0gV0hFUkUgY29sIElTIE5PVCBOVUxMIOy2lOqwgFxuICAgKiAtIHRocmVzaG9sZOqwgCDsnojsnLzrqbQgV0hFUkUg7KGw6rG0IOy2lOqwgFxuICAgKiAtIOq4sOyhtCBPUkRFUiBCWeulvCBjbGVhcu2VmOqzoCDsm5Dsi5wg7Jew7IKw7J6Q66GcIOygleugrCAoSE5TVyDsnbjrjbHsiqQg7LWc7KCB7ZmUKVxuICAgKlxuICAgKiBAcGFyYW0gY29sdW1uIOuyoe2EsCDsu6zrn7wg6rK966GcXG4gICAqIEBwYXJhbSBlbWJlZGRpbmcg7L+866asIOyehOuyoOuUqSDrsqHthLBcbiAgICogQHBhcmFtIG9wdGlvbnMgbWV0aG9kLCB0aHJlc2hvbGQsIGFzIOuTsSDsmLXshZhcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBjb3NpbmUgc2ltaWxhcml0eSAo6riw67O46rCSKVxuICAgKiBxYi52ZWN0b3JTaW1pbGFyaXR5KFwiY29sdW1uTmFtZVwiLCBxdWVyeVZlY3Rvciwge1xuICAgKiAgIG1ldGhvZDogXCJjb3NpbmVcIixcbiAgICogICB0aHJlc2hvbGQ6IDAuNVxuICAgKiB9KTtcbiAgICpcbiAgICogLy8gTDIgZGlzdGFuY2VcbiAgICogcWIudmVjdG9yU2ltaWxhcml0eShcImNvbHVtbk5hbWVcIiwgcXVlcnlWZWN0b3IsIHtcbiAgICogICBtZXRob2Q6IFwibDJcIixcbiAgICogICB0aHJlc2hvbGQ6IDEuNSAgLy8g6rGw66as6rCAIDEuNSDsnbTtlZjsnbgg6rKw6rO866eMXG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBJbm5lciBwcm9kdWN0XG4gICAqIHFiLnZlY3RvclNpbWlsYXJpdHkoXCJjb2x1bW5OYW1lXCIsIHF1ZXJ5VmVjdG9yLCB7XG4gICAqICAgbWV0aG9kOiBcImlubmVyX3Byb2R1Y3RcIixcbiAgICogICB0aHJlc2hvbGQ6IDAuN1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICB2ZWN0b3JTaW1pbGFyaXR5KFxuICAgIGNvbHVtbjogVmVjdG9yQ29sdW1uczxUVGFibGVzPixcbiAgICBlbWJlZGRpbmc6IG51bWJlcltdLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIG1ldGhvZD86IFwiY29zaW5lXCIgfCBcImwyXCIgfCBcImlubmVyX3Byb2R1Y3RcIjtcbiAgICAgIHRocmVzaG9sZD86IG51bWJlcjtcbiAgICAgIGRpc3RpbmN0T24/OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+O1xuICAgIH0gPSB7fSxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0ICYgeyBzaW1pbGFyaXR5OiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHsgbWV0aG9kID0gXCJjb3NpbmVcIiwgdGhyZXNob2xkLCBkaXN0aW5jdE9uIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKFxuICAgICAgIUFycmF5LmlzQXJyYXkoZW1iZWRkaW5nKSB8fFxuICAgICAgZW1iZWRkaW5nLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgZW1iZWRkaW5nLnNvbWUoKHYpID0+ICFOdW1iZXIuaXNGaW5pdGUodikpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGVtYmVkZGluZyB2ZWN0b3I6IGV4cGVjdGVkIGEgbm9uLWVtcHR5IGFycmF5IG9mIGZpbml0ZSBudW1iZXJzXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHZlY3RvckxpdGVyYWwgPSBKU09OLnN0cmluZ2lmeShlbWJlZGRpbmcubWFwKCh2KSA9PiBOdW1iZXIodikpKTtcbiAgICBjb25zdCBvcGVyYXRvciA9IHsgY29zaW5lOiBcIjw9PlwiLCBsMjogXCI8LT5cIiwgaW5uZXJfcHJvZHVjdDogXCI8Iz5cIiB9W21ldGhvZF07XG5cbiAgICAvLyBtZXRob2Trs4Qg7Jew7IKw7J6QIOuwjyBzaW1pbGFyaXR5IOqzhOyCsOyLnVxuICAgIC8vIC0gY29zaW5lOiA8PT4gKGNvc2luZSBkaXN0YW5jZSwgMH4yKSwgc2ltaWxhcml0eSA9IDEgLSBkaXN0YW5jZVxuICAgIC8vIC0gbDI6IDwtPiAoZXVjbGlkZWFuIGRpc3RhbmNlKSwgc2ltaWxhcml0eSA9IGRpc3RhbmNlICjrgq7snYTsiJjroZ0g7Jyg7IKsKVxuICAgIC8vIC0gaW5uZXJfcHJvZHVjdDogPCM+IChuZWdhdGl2ZSBpbm5lciBwcm9kdWN0KSwgc2ltaWxhcml0eSA9IC1kaXN0YW5jZSAo64aS7J2E7IiY66GdIOycoOyCrClcbiAgICBjb25zdCBzaW1pbGFyaXR5RXhwciA9XG4gICAgICBtZXRob2QgPT09IFwiY29zaW5lXCJcbiAgICAgICAgPyB0aGlzLmtuZXgucmF3KGAxIC0gKD8/ICR7b3BlcmF0b3J9ID86OnZlY3RvcikgYXMgc2ltaWxhcml0eWAsIFtjb2x1bW4sIHZlY3RvckxpdGVyYWxdKVxuICAgICAgICA6IG1ldGhvZCA9PT0gXCJsMlwiXG4gICAgICAgICAgPyB0aGlzLmtuZXgucmF3KGA/PyAke29wZXJhdG9yfSA/Ojp2ZWN0b3IgYXMgc2ltaWxhcml0eWAsIFtjb2x1bW4sIHZlY3RvckxpdGVyYWxdKVxuICAgICAgICAgIDogdGhpcy5rbmV4LnJhdyhgLSg/PyAke29wZXJhdG9yfSA/Ojp2ZWN0b3IpIGFzIHNpbWlsYXJpdHlgLCBbY29sdW1uLCB2ZWN0b3JMaXRlcmFsXSk7XG5cbiAgICAvLyBXSEVSRSBOT1QgTlVMTFxuICAgIHRoaXMua25leFF1ZXJ5LndoZXJlTm90TnVsbChjb2x1bW4pO1xuXG4gICAgLy8g6riw7KG0IE9SREVSIEJZIGNsZWFyXG4gICAgdGhpcy5rbmV4UXVlcnkuY2xlYXIoXCJvcmRlclwiKTtcbiAgICBpZiAoZGlzdGluY3RPbikge1xuICAgICAgLy8gRElTVElOQ1QgT07snYAgU0VMRUNUIOygiOydmCDrp6gg7JWe7JeQIOyZgOyVvCDtlZjrr4DroZwsIOq4sOyhtCBzZWxlY3Qoc3Vic2V0IO2VhOuTnOuTpCnrpbwg67O07KG0IO2bhCBjbGVhcu2VmOqzoCDri6Tsi5wg7LaU6rCAXG4gICAgICBjb25zdCBleGlzdGluZ1N1YnNldENvbHMgPSAodGhpcy5rbmV4UXVlcnkgYXMgYW55KS5fc3RhdGVtZW50c1xuICAgICAgICAuZmlsdGVyKChzOiBhbnkpID0+IHMuZ3JvdXBpbmcgPT09IFwiY29sdW1uc1wiKVxuICAgICAgICAuZmxhdE1hcCgoczogYW55KSA9PiBzLnZhbHVlKTtcbiAgICAgIHRoaXMua25leFF1ZXJ5LmNsZWFyKFwic2VsZWN0XCIpO1xuICAgICAgdGhpcy5rbmV4UXVlcnkuc2VsZWN0KHRoaXMua25leC5yYXcoYERJU1RJTkNUIE9OICg/PykgPz9gLCBbZGlzdGluY3RPbiwgZGlzdGluY3RPbl0pKTtcbiAgICAgIGV4aXN0aW5nU3Vic2V0Q29scy5tYXAoKGNvbDogYW55KSA9PiB0aGlzLmtuZXhRdWVyeS5zZWxlY3QoY29sKSk7XG4gICAgICB0aGlzLmtuZXhRdWVyeS5zZWxlY3Qoc2ltaWxhcml0eUV4cHIpO1xuICAgICAgdGhpcy5rbmV4UXVlcnkub3JkZXJCeVJhdyhgPz8sID8/ICR7b3BlcmF0b3J9ID86OnZlY3RvcmAsIFtcbiAgICAgICAgZGlzdGluY3RPbixcbiAgICAgICAgY29sdW1uLFxuICAgICAgICB2ZWN0b3JMaXRlcmFsLFxuICAgICAgXSk7XG5cbiAgICAgIHRoaXMua25leFF1ZXJ5ID0gdGhpcy5rbmV4XG4gICAgICAgIC5mcm9tKHRoaXMua25leFF1ZXJ5LmFzKFwiZGlzdGluY3RfdmVjdG9yc1wiKSlcbiAgICAgICAgLnNlbGVjdChcIipcIilcbiAgICAgICAgLm9yZGVyQnkoXCJzaW1pbGFyaXR5XCIsIFwiZGVzY1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rbmV4UXVlcnkuc2VsZWN0KHNpbWlsYXJpdHlFeHByKTtcbiAgICAgIHRoaXMua25leFF1ZXJ5Lm9yZGVyQnlSYXcoYD8/ICR7b3BlcmF0b3J9ID86OnZlY3RvcmAsIFtjb2x1bW4sIHZlY3RvckxpdGVyYWxdKTtcbiAgICB9XG5cbiAgICAvLyB0aHJlc2hvbGRcbiAgICBpZiAodHlwZW9mIHRocmVzaG9sZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGhyZXNob2xkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmVjdG9yU2ltaWxhcml0eSB0aHJlc2hvbGQ6ICR7dGhyZXNob2xkfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGlzdGluY3RPbikge1xuICAgICAgICBjb25zdCB0aHJlc2hvbGRPcCA9IG1ldGhvZCA9PT0gXCJsMlwiID8gXCI8PVwiIDogXCI+PVwiO1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZShcInNpbWlsYXJpdHlcIiwgdGhyZXNob2xkT3AsIHRocmVzaG9sZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0aHJlc2hvbGRWYWx1ZSA9XG4gICAgICAgICAgbWV0aG9kID09PSBcImNvc2luZVwiID8gMSAtIHRocmVzaG9sZCA6IG1ldGhvZCA9PT0gXCJpbm5lcl9wcm9kdWN0XCIgPyAtdGhyZXNob2xkIDogdGhyZXNob2xkO1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgPz8gJHtvcGVyYXRvcn0gPzo6dmVjdG9yIDw9ID9gLCBbXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIHZlY3RvckxpdGVyYWwsXG4gICAgICAgICAgdGhyZXNob2xkVmFsdWUsXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8vIOq4sOuzuCDsv7zrpqwg66mU7ISc65Oc65OkXG4gIGxpbWl0KGNvdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICBpZiAoY291bnQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxpbWl0OiBtdXN0IGJlID49IDBcIik7XG4gICAgfVxuICAgIHRoaXMua25leFF1ZXJ5LmxpbWl0KGNvdW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9mZnNldChjb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgaWYgKGNvdW50IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBvZmZzZXQ6IG11c3QgYmUgPj0gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5rbmV4UXVlcnkub2Zmc2V0KGNvdW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEdST1VQIEJZXG4gIGdyb3VwQnk8VENvbHVtbnMgZXh0ZW5kcyBSZXN1bHRBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXMsIFRSZXN1bHQ+PiguLi5jb2x1bW5zOiBUQ29sdW1uc1tdKTogdGhpcztcbiAgZ3JvdXBCeSguLi5jb2x1bW5zOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5Lmdyb3VwQnkoLi4uKGNvbHVtbnMgYXMgc3RyaW5nW10pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEhBVklOR1xuICBoYXZpbmcoY29uZGl0aW9uOiBzdHJpbmcpOiB0aGlzO1xuICBoYXZpbmc8VENvbHVtbiBleHRlbmRzIFJlc3VsdEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcywgVFJlc3VsdD4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuICAgIHZhbHVlOiBhbnksXG4gICk6IHRoaXM7XG4gIC8vIEhBVklORyDqtaztmIRcbiAgaGF2aW5nKC4uLmNvbmRpdGlvbnM6IGFueVtdKTogdGhpcyB7XG4gICAgaWYgKGNvbmRpdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBoYXZpbmcoXCJDT1VOVCgqKSA+IDEwXCIpXG4gICAgICB0aGlzLmtuZXhRdWVyeS5oYXZpbmcodGhpcy5rbmV4LnJhdyhjb25kaXRpb25zWzBdKSk7XG4gICAgfSBlbHNlIGlmIChjb25kaXRpb25zLmxlbmd0aCA9PT0gMykge1xuICAgICAgLy8gaGF2aW5nKFwiY291bnRcIiwgXCI+XCIsIDEwKVxuICAgICAgdGhpcy5rbmV4UXVlcnkuaGF2aW5nKFxuICAgICAgICB0aGlzLmtuZXgucmF3KGNvbmRpdGlvbnNbMF0pLFxuICAgICAgICBjb25kaXRpb25zWzFdLFxuICAgICAgICB0aGlzLmtuZXgucmF3KGNvbmRpdGlvbnNbMl0pLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBoYXZpbmcgYXJndW1lbnRzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOyLpO2WiSDrqZTshJzrk5zrk6QgLSB0aGVuYWJsZSDqtaztmIRcbiAgdGhlbjxUUmVzdWx0MSA9IEV4cGFuZDxUUmVzdWx0PltdLCBUUmVzdWx0MiA9IG5ldmVyPihcbiAgICBvbmZ1bGZpbGxlZD86ICgodmFsdWU6IEV4cGFuZDxUUmVzdWx0PltdKSA9PiBUUmVzdWx0MSB8IFByb21pc2VMaWtlPFRSZXN1bHQxPikgfCBudWxsLFxuICAgIG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0MiB8IFByb21pc2VMaWtlPFRSZXN1bHQyPikgfCBudWxsLFxuICApOiBQcm9taXNlPFRSZXN1bHQxIHwgVFJlc3VsdDI+IHtcbiAgICBOYWl0ZS50KFwicHVyaTpleGVjdXRlZC1xdWVyeVwiLCB0aGlzLnRvUXVlcnkoKSk7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LnRoZW4ob25mdWxmaWxsZWQgYXMgYW55LCBvbnJlamVjdGVkKTtcbiAgfVxuICBjYXRjaDxUUmVzdWx0MiA9IG5ldmVyPihcbiAgICBvbnJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgbnVsbCxcbiAgKTogUHJvbWlzZTxUUmVzdWx0IHwgVFJlc3VsdDI+IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkuY2F0Y2gob25yZWplY3RlZCk7XG4gIH1cbiAgZmluYWxseShvbmZpbmFsbHk/OiAoKCkgPT4gdm9pZCkgfCBudWxsKTogUHJvbWlzZTxUUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LmZpbmFsbHkob25maW5hbGx5KTtcbiAgfVxuXG4gIC8vIO2VmOuCmOunjCDsv7zrpqxcbiAgZmlyc3QoKTogUmVzb2x2ZWRQdXJpPEV4cGFuZDxUUmVzdWx0PiwgbmV2ZXI+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5maXJzdCgpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG5cbiAgLy8g7L+866as7ZWcIOugiOy9lOuTnOyXkOyEnCDtirnsoJUg7Lus65+866eMIOy2lOy2nO2VnCDrsLDsl7Qg66as7YS0XG4gIHBsdWNrPFRDb2x1bW4gZXh0ZW5kcyBrZXlvZiBUUmVzdWx0IHwgUmVzdWx0QXZhaWxhYmxlQ29sdW1uczxUVGFibGVzLCBUUmVzdWx0Pj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICApOiBSZXNvbHZlZFB1cmk8XG4gICAgVENvbHVtbiBleHRlbmRzIGtleW9mIFRSZXN1bHRcbiAgICAgID8gVFJlc3VsdFtUQ29sdW1uXVtdXG4gICAgICA6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+W10sXG4gICAgbmV2ZXJcbiAgPiB7XG4gICAgdGhpcy5rbmV4UXVlcnkucGx1Y2soY29sdW1uIGFzIHN0cmluZyk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyBJTlNFUlQgOiDri6jsnbwg6rCd7LK0XG4gIGluc2VydChcbiAgICBkYXRhOiBJbnNlcnREYXRhPFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+LFxuICApOiBSZXNvbHZlZFB1cmk8SW5zZXJ0UmVzdWx0LCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PjtcbiAgLy8gSU5TRVJUOiDrsLDsl7RcbiAgaW5zZXJ0KFxuICAgIGRhdGE6IEluc2VydERhdGE8U2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj5bXSxcbiAgKTogUmVzb2x2ZWRQdXJpPEluc2VydFJlc3VsdCwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj47XG4gIC8vIElOU0VSVCDsi6TsoJwg6rWs7ZiEXG4gIGluc2VydChcbiAgICByYXdEYXRhOiBJbnNlcnREYXRhPFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+IHwgSW5zZXJ0RGF0YTxTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PltdLFxuICApOiBSZXNvbHZlZFB1cmk8SW5zZXJ0UmVzdWx0LCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgLy8gSlNPTiDsu6zrn7wgc3RyaW5naWZ5IOuhnOyngeydhCDrqZTshJzrk5zroZwg67aE66as7ZWY7JesIOykkeuztSDsoJzqsbBcbiAgICBjb25zdCByZWZpbmVkRGF0YSA9IHRoaXMucmVmaW5lSnNvbkNvbHVtbnMocmF3RGF0YSk7XG4gICAgdGhpcy5rbmV4UXVlcnkuaW5zZXJ0KHJlZmluZWREYXRhKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuXG4gIC8vIFVQREFURVxuICB1cGRhdGUocmF3RGF0YTogV2hlcmVDb25kaXRpb248VFRhYmxlcz4pOiBSZXNvbHZlZFB1cmk8bnVtYmVyLCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgLy8gSlNPTiDsu6zrn7wgc3RyaW5naWZ5IOuhnOyngeydhCDrqZTshJzrk5zroZwg67aE66as7ZWY7JesIOykkeuztSDsoJzqsbBcbiAgICBjb25zdCByZWZpbmVkRGF0YSA9IHRoaXMucmVmaW5lSnNvbkNvbHVtbnMocmF3RGF0YSk7XG4gICAgdGhpcy5rbmV4UXVlcnkudXBkYXRlKHJlZmluZWREYXRhKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBKU09OIOy7rOufvOyXkCDrjIDtlbQgc3RyaW5naWZ5IOyymOumrOulvCDsiJjtlontlZjripQg64K067aAIOuplOyEnOuTnOyeheuLiOuLpC5cbiAgICogb2JqZWN0IOuYkOuKlCBvYmplY3Qg67Cw7Je07J2EIOuwm+qzoCwgSlNPTiDsu6zrn7zsnbQg7J6I7Jy866m0IOyngeugrO2ZlO2VmOyXrCDrsJjtmZjtlanri4jri6QuXG4gICAqIOyngeygkSDqsJLsnYQg67OA6rK97ZWY66+A66GcIHNpZGUgZWZmZWN06rCAIOyeiOyKteuLiOuLpC5cbiAgICovXG4gIHByaXZhdGUgcmVmaW5lSnNvbkNvbHVtbnMoXG4gICAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICApOiB0eXBlb2YgZGF0YSB7XG4gICAgLy8gdGFibGVTcGVj7J2064KYIGpzb25Db2x1bW5zIOyXhuuKlCDqsr3smrAg67CU66GcIOuwmO2ZmFxuICAgIGlmICghdGhpcy50YWJsZVNwZWMgfHwgIXRoaXMudGFibGVTcGVjLmpzb25Db2x1bW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgLy8g65Ox66Gd65CcIFRhYmxlU3BlY+ydhCDthrXtlbQgSlNPTuy7rOufvCDrqqnroZ3snYQg6rCA7KC47JmAIEpTT04uc3RyaW5naWZ5IOyymOumrFxuICAgIGNvbnN0IGpzb25Db2x1bW5zID0gdGhpcy50YWJsZVNwZWMuanNvbkNvbHVtbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGpzb25Db2x1bW5zKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW2NvbHVtbl07XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGl0ZW1bY29sdW1uXSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YganNvbkNvbHVtbnMpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW2NvbHVtbl07XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgZGF0YVtjb2x1bW5dID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLy8gSW5jcmVtZW50XG4gIGluY3JlbWVudDxUQ29sdW1uIGV4dGVuZHMgTnVtZXJpY0NvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogbnVtYmVyLFxuICApOiBSZXNvbHZlZFB1cmk8bnVtYmVyLCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgaWYgKHZhbHVlIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY3JlbWVudCB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXCIpO1xuICAgIH1cbiAgICB0aGlzLmtuZXhRdWVyeS5pbmNyZW1lbnQoY29sdW1uLCB2YWx1ZSk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cbiAgLy8gRGVjcmVtZW50XG4gIGRlY3JlbWVudDxUQ29sdW1uIGV4dGVuZHMgTnVtZXJpY0NvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogbnVtYmVyLFxuICApOiBSZXNvbHZlZFB1cmk8bnVtYmVyLCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgaWYgKHZhbHVlIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3JlbWVudCB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXCIpO1xuICAgIH1cbiAgICB0aGlzLmtuZXhRdWVyeS5kZWNyZW1lbnQoY29sdW1uLCB2YWx1ZSk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyBERUxFVEVcbiAgZGVsZXRlKCk6IFJlc29sdmVkUHVyaTxudW1iZXIsIFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5kZWxldGUoKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuXG4gIC8vIO2ZleyduCDsv7zrpqwg66as7YS0XG4gIHRvUXVlcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkudG9RdWVyeSgpO1xuICB9XG5cbiAgLy8g7L+866asIOuUlOuyhOq5hSDroZzqt7gg7Lac66ClXG4gIGRlYnVnKCk6IHRoaXMge1xuICAgIGNvbnNvbGUubG9nKGAke2NoYWxrLmN5YW4oXCJbUHVyaSBEZWJ1Z11cIil9ICR7Y2hhbGsueWVsbG93KHRoaXMudG9RdWVyeSgpKX1gKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNsb25lKCk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdD4ge1xuICAgIC8vICdkdWFsJ+ydgCDrjZTrr7gg7YWM7J2067iU7J2066mwLCDrsJTroZwg7JWE656YIOykhOyXkOyEnCBrbmV4UXVlcnnqsIAg642u7Ja07JSM7JuM7KeR64uI64ukLlxuICAgIGNvbnN0IG5ld1B1cmkgPSBuZXcgUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0Pih0aGlzLmtuZXgsIFwiZHVhbFwiKTtcbiAgICBuZXdQdXJpLmtuZXhRdWVyeSA9IHRoaXMua25leFF1ZXJ5LmNsb25lKCk7XG4gICAgcmV0dXJuIG5ld1B1cmk7XG4gIH1cblxuICBmb3JtYXRTUUwodW5mb3JtYXR0ZWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gU1FMIOyYiOyVveyWtCDrqqnroZ1cbiAgICBjb25zdCBrZXl3b3JkcyA9IFtcbiAgICAgIFwiU0VMRUNUXCIsXG4gICAgICBcIkZST01cIixcbiAgICAgIFwiV0hFUkVcIixcbiAgICAgIFwiSU5TRVJUXCIsXG4gICAgICBcIklOVE9cIixcbiAgICAgIFwiVkFMVUVTXCIsXG4gICAgICBcIlVQREFURVwiLFxuICAgICAgXCJERUxFVEVcIixcbiAgICAgIFwiQ1JFQVRFXCIsXG4gICAgICBcIlRBQkxFXCIsXG4gICAgICBcIkFMVEVSXCIsXG4gICAgICBcIkRST1BcIixcbiAgICAgIFwiSk9JTlwiLFxuICAgICAgXCJPTlwiLFxuICAgICAgXCJJTk5FUlwiLFxuICAgICAgXCJMRUZUXCIsXG4gICAgICBcIlJJR0hUXCIsXG4gICAgICBcIkZVTExcIixcbiAgICAgIFwiT1VURVJcIixcbiAgICAgIFwiR1JPVVBcIixcbiAgICAgIFwiQllcIixcbiAgICAgIFwiT1JERVJcIixcbiAgICAgIFwiSEFWSU5HXCIsXG4gICAgICBcIkRJU1RJTkNUXCIsXG4gICAgICBcIkxJTUlUXCIsXG4gICAgICBcIk9GRlNFVFwiLFxuICAgICAgXCJBU1wiLFxuICAgICAgXCJBTkRcIixcbiAgICAgIFwiT1JcIixcbiAgICAgIFwiTk9UXCIsXG4gICAgICBcIklOXCIsXG4gICAgICBcIkxJS0VcIixcbiAgICAgIFwiSVNcIixcbiAgICAgIFwiTlVMTFwiLFxuICAgICAgXCJDQVNFXCIsXG4gICAgICBcIldIRU5cIixcbiAgICAgIFwiVEhFTlwiLFxuICAgICAgXCJFTFNFXCIsXG4gICAgICBcIkVORFwiLFxuICAgICAgXCJVTklPTlwiLFxuICAgICAgXCJBTExcIixcbiAgICAgIFwiRVhJU1RTXCIsXG4gICAgICBcIkJFVFdFRU5cIixcbiAgICBdO1xuXG4gICAgbGV0IGZvcm1hdHRlZCA9IHVuZm9ybWF0dGVkO1xuXG4gICAgLy8g7JiI7JW97Ja066W8IOuMgOusuOyekOuhnCDrs4DtmZhcbiAgICBrZXl3b3Jkcy5mb3JFYWNoKChrZXl3b3JkKSA9PiB7XG4gICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxiJHtrZXl3b3JkfVxcXFxiYCwgXCJnaVwiKTtcbiAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKHJlZ2V4LCBrZXl3b3JkLnRvVXBwZXJDYXNlKCkpO1xuICAgIH0pO1xuXG4gICAgLy8g7KO87JqUIOygiCDslZ7sl5Ag7KSE67CU6r+IIOy2lOqwgFxuICAgIGNvbnN0IG1ham9yQ2xhdXNlcyA9IFtcbiAgICAgIFwiU0VMRUNUXCIsXG4gICAgICBcIkZST01cIixcbiAgICAgIFwiV0hFUkVcIixcbiAgICAgIFwiR1JPVVAgQllcIixcbiAgICAgIFwiT1JERVIgQllcIixcbiAgICAgIFwiSEFWSU5HXCIsXG4gICAgICBcIkxJTUlUXCIsXG4gICAgICBcIlVOSU9OXCIsXG4gICAgXTtcbiAgICBtYWpvckNsYXVzZXMuZm9yRWFjaCgoY2xhdXNlKSA9PiB7XG4gICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxzKygke2NsYXVzZX0pXFxcXHMrYCwgXCJnaVwiKTtcbiAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKHJlZ2V4LCBgXFxuJHtjbGF1c2UudG9VcHBlckNhc2UoKX0gYCk7XG4gICAgfSk7XG5cbiAgICAvLyBKT0lOIOygiCDsspjrpqxcbiAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvXFxzKygoPzpJTk5FUnxMRUZUfFJJR0hUfEZVTEwgT1VURVIpXFxzKyk/Sk9JTlxccysvZ2ksIFwiXFxuJDFKT0lOIFwiKTtcblxuICAgIC8vIEFORCwgT1Ig7KGw6rG0IOyymOumrFxuICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKC9cXHMrKEFORHxPUilcXHMrL2dpLCBcIlxcbiAgJDEgXCIpO1xuXG4gICAgLy8g6rSE7Zi4IOyymOumrCDrsI8g65Ok7Jes7JOw6riwXG4gICAgY29uc3QgbGluZXMgPSBmb3JtYXR0ZWQuc3BsaXQoXCJcXG5cIik7XG4gICAgY29uc3QgaW5kZW50ZWRMaW5lcyA9IFtdO1xuICAgIGxldCBpbmRlbnRMZXZlbCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKCk7XG4gICAgICBpZiAoIXRyaW1tZWRMaW5lKSBjb250aW51ZTtcblxuICAgICAgLy8g64ur64qUIOq0hO2YuOqwgCDsnojsnLzrqbQg65Ok7Jes7JOw6riwIOugiOuyqCDqsJDshoxcbiAgICAgIGNvbnN0IGNsb3NpbmdQYXJlbnMgPSAodHJpbW1lZExpbmUubWF0Y2goL1xcKS9nKSB8fCBbXSkubGVuZ3RoO1xuICAgICAgY29uc3Qgb3BlbmluZ1BhcmVucyA9ICh0cmltbWVkTGluZS5tYXRjaCgvXFwoL2cpIHx8IFtdKS5sZW5ndGg7XG5cbiAgICAgIGlmIChjbG9zaW5nUGFyZW5zID4gMCAmJiBvcGVuaW5nUGFyZW5zID09PSAwKSB7XG4gICAgICAgIGluZGVudExldmVsID0gTWF0aC5tYXgoMCwgaW5kZW50TGV2ZWwgLSBjbG9zaW5nUGFyZW5zKTtcbiAgICAgIH1cblxuICAgICAgLy8g7ZiE7J6sIOuTpOyXrOyTsOq4sCDsoIHsmqlcbiAgICAgIGNvbnN0IGluZGVudCA9IFwiICBcIi5yZXBlYXQoaW5kZW50TGV2ZWwpO1xuICAgICAgaW5kZW50ZWRMaW5lcy5wdXNoKGluZGVudCArIHRyaW1tZWRMaW5lKTtcblxuICAgICAgLy8g7Jes64qUIOq0hO2YuOqwgCDsnojsnLzrqbQg65Ok7Jes7JOw6riwIOugiOuyqCDspp3qsIBcbiAgICAgIGlmIChvcGVuaW5nUGFyZW5zID4gY2xvc2luZ1BhcmVucykge1xuICAgICAgICBpbmRlbnRMZXZlbCArPSBvcGVuaW5nUGFyZW5zIC0gY2xvc2luZ1BhcmVucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZW50ZWRMaW5lcy5qb2luKFwiXFxuXCIpLnRyaW0oKTtcbiAgfVxuXG4gIHJhdyhzcWw6IHN0cmluZyk6IEtuZXguUmF3IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4LnJhdyhzcWwpO1xuICB9XG5cbiAgLy8gS25leCDsv7zrpqwg67mM642UIOyngeygkSDsoJHqt7xcbiAgcmF3UXVlcnkoKTogS25leC5RdWVyeUJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgV2hlcmVHcm91cDxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJ1aWxkZXI6IEtuZXguUXVlcnlCdWlsZGVyKSB7fVxuXG4gIC8vIHdoZXJlIOuplOyEnOuTnOuTpFxuICB3aGVyZShjb25kaXRpb25zOiBXaGVyZUNvbmRpdGlvbjxUVGFibGVzPik6IHRoaXM7XG4gIHdoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIG9wZXJhdG9yOiBXaGVyZU9wZXJhdG9yLFxuICAgIHZhbHVlOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgd2hlcmUoLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIud2hlcmUoYXJnc1swXSwgLi4uYXJncy5zbGljZSgxKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB3aGVyZUluIC8gd2hlcmVOb3RJbiDrqZTshJzrk5zrk6RcbiAgd2hlcmVJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogdGhpcztcbiAgd2hlcmVJbiguLi5hcmdzOiBhbnlbXSk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci53aGVyZUluKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2hlcmVOb3RJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogdGhpcztcbiAgd2hlcmVOb3RJbiguLi5hcmdzOiBhbnlbXSk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci53aGVyZU5vdEluKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gb3JXaGVyZSDrqZTshJzrk5zrk6RcbiAgb3JXaGVyZShjb25kaXRpb25zOiBXaGVyZUNvbmRpdGlvbjxUVGFibGVzPik6IHRoaXM7XG4gIG9yV2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9yV2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogV2hlcmVPcGVyYXRvcixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9yV2hlcmUoLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZShhcmdzWzBdLCAuLi5hcmdzLnNsaWNlKDEpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIG9yV2hlcmVJbiAvIG9yV2hlcmVOb3RJbiDrqZTshJzrk5zrk6RcbiAgb3JXaGVyZUluPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWVzOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPltdLFxuICApOiB0aGlzO1xuICBvcldoZXJlSW4oLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZUluKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3JXaGVyZU5vdEluPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWVzOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPltdLFxuICApOiB0aGlzO1xuICBvcldoZXJlTm90SW4oLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZU5vdEluKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkUgTUFUQ0hcbiAgd2hlcmVNYXRjaDxUQ29sdW1uIGV4dGVuZHMgRnVsbHRleHRDb2x1bW5zPFRUYWJsZXM+Pihjb2x1bW46IFRDb2x1bW4sIHZhbHVlOiBzdHJpbmcpOiB0aGlzO1xuICB3aGVyZU1hdGNoKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgdGhpcy5idWlsZGVyLndoZXJlUmF3KGBNQVRDSCAoJHtTdHJpbmcoYXJnc1swXSl9KSBBR0FJTlNUICg/KWAsIFthcmdzWzFdXSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvcldoZXJlTWF0Y2g8VENvbHVtbiBleHRlbmRzIEZ1bGx0ZXh0Q29sdW1uczxUVGFibGVzPj4oY29sdW1uOiBUQ29sdW1uLCB2YWx1ZTogc3RyaW5nKTogdGhpcztcbiAgb3JXaGVyZU1hdGNoKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgdGhpcy5idWlsZGVyLm9yV2hlcmVSYXcoYE1BVENIICgke1N0cmluZyhhcmdzWzBdKX0pIEFHQUlOU1QgKD8pYCwgW2FyZ3NbMV1dKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIFNFQVJDSFxuICB3aGVyZVNlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uIHwgVENvbHVtbltdLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHdlaWdodHM/OiBudW1iZXJbXTsgLy8g7KCV7IiYIOuwsOyXtFxuICAgIH0sXG4gICk6IHRoaXM7XG4gIHdoZXJlU2VhcmNoKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgY29uc3QgeyB3ZWlnaHRzIH0gPSBhcmdzWzJdID8/IHt9O1xuICAgIGNvbnN0IGNvbHVtbkV4cHIgPSBBcnJheS5pc0FycmF5KGFyZ3NbMF0pXG4gICAgICA/IGBBUlJBWVske2FyZ3NbMF0ubWFwKChjKSA9PiBgJHtjfTo6dGV4dGApLmpvaW4oXCIsXCIpfV1gXG4gICAgICA6IGFyZ3NbMF07XG4gICAgY29uc3QgcGdyb29uZ2FDb25kaXRpb24gPSBgcGdyb29uZ2FfY29uZGl0aW9uKD8ke3dlaWdodHM/Lmxlbmd0aCA/IGAsIHdlaWdodHMgPT4gQVJSQVlbJHt3ZWlnaHRzLmpvaW4oXCIsXCIpfV1gIDogXCJcIn0pYDtcbiAgICB0aGlzLmJ1aWxkZXIud2hlcmVSYXcoYCR7Y29sdW1uRXhwcn0gJkB+ICR7cGdyb29uZ2FDb25kaXRpb259YCwgW2FyZ3NbMV1dKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3JXaGVyZVNlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uIHwgVENvbHVtbltdLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHdlaWdodHM/OiBudW1iZXJbXTsgLy8g7KCV7IiYIOuwsOyXtFxuICAgIH0sXG4gICk6IHRoaXM7XG4gIG9yV2hlcmVTZWFyY2goLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICBjb25zdCB7IHdlaWdodHMgfSA9IGFyZ3NbMl0gPz8ge307XG4gICAgY29uc3QgY29sdW1uRXhwciA9IEFycmF5LmlzQXJyYXkoYXJnc1swXSlcbiAgICAgID8gYEFSUkFZWyR7YXJnc1swXS5tYXAoKGMpID0+IGAke2N9Ojp0ZXh0YCkuam9pbihcIixcIil9XWBcbiAgICAgIDogYXJnc1swXTtcbiAgICBjb25zdCBwZ3Jvb25nYUNvbmRpdGlvbiA9IGBwZ3Jvb25nYV9jb25kaXRpb24oPyR7d2VpZ2h0cz8ubGVuZ3RoID8gYCwgd2VpZ2h0cyA9PiBBUlJBWVske3dlaWdodHMuam9pbihcIixcIil9XWAgOiBcIlwifSlgO1xuICAgIHRoaXMuYnVpbGRlci5vcldoZXJlUmF3KGAke2NvbHVtbkV4cHJ9ICZAfiAke3Bncm9vbmdhQ29uZGl0aW9ufWAsIFthcmdzWzFdXSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIEZVTExURVhUXG4gIHdoZXJlVHNTZWFyY2g8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogVHNRdWVyeU9wdGlvbnMgfCBUc1F1ZXJ5Q29uZmlnLFxuICApOiB0aGlzO1xuICB3aGVyZVRzU2VhcmNoKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgY29uc3Qgb3B0cyA9XG4gICAgICB0eXBlb2YgYXJnc1syXSA9PT0gXCJzdHJpbmdcIiA/ICh7IGNvbmZpZzogYXJnc1syXSB9IGFzIFRzUXVlcnlPcHRpb25zKSA6IChhcmdzWzJdID8/IHt9KTtcblxuICAgIGNvbnN0IHBhcnNlciA9IG9wdHMucGFyc2VyID8/IFwid2Vic2VhcmNoX3RvX3RzcXVlcnlcIjtcbiAgICBjb25zdCBjb25maWcgPSBvcHRzLmNvbmZpZyA/PyBcInNpbXBsZVwiO1xuICAgIGNvbnN0IGNvbHVtbkV4cHIgPVxuICAgICAgdHlwZW9mIGFyZ3NbMF0gPT09IFwib2JqZWN0XCIgJiYgYXJnc1swXS5fdHlwZSA9PT0gXCJzcWxfZXhwcmVzc2lvblwiXG4gICAgICAgID8gYXJnc1swXS5fc3FsXG4gICAgICAgIDogU3RyaW5nKGFyZ3NbMF0pO1xuXG4gICAgdGhpcy5idWlsZGVyLndoZXJlUmF3KGAke2NvbHVtbkV4cHJ9IEBAICR7cGFyc2VyfSg/LCA/KWAsIFtjb25maWcsIGFyZ3NbMV1dKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9yV2hlcmVUc1NlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPiB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUc1F1ZXJ5T3B0aW9ucyB8IFRzUXVlcnlDb25maWcsXG4gICk6IHRoaXM7XG4gIG9yV2hlcmVUc1NlYXJjaCguLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgIGNvbnN0IG9wdHMgPVxuICAgICAgdHlwZW9mIGFyZ3NbMl0gPT09IFwic3RyaW5nXCIgPyAoeyBjb25maWc6IGFyZ3NbMl0gfSBhcyBUc1F1ZXJ5T3B0aW9ucykgOiAoYXJnc1syXSA/PyB7fSk7XG5cbiAgICBjb25zdCBwYXJzZXIgPSBvcHRzLnBhcnNlciA/PyBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCI7XG4gICAgY29uc3QgY29uZmlnID0gb3B0cy5jb25maWcgPz8gXCJzaW1wbGVcIjtcbiAgICBjb25zdCBjb2x1bW5FeHByID1cbiAgICAgIHR5cGVvZiBhcmdzWzBdID09PSBcIm9iamVjdFwiICYmIGFyZ3NbMF0uX3R5cGUgPT09IFwic3FsX2V4cHJlc3Npb25cIlxuICAgICAgICA/IGFyZ3NbMF0uX3NxbFxuICAgICAgICA6IFN0cmluZyhhcmdzWzBdKTtcblxuICAgIHRoaXMuYnVpbGRlci5vcldoZXJlUmF3KGAke2NvbHVtbkV4cHJ9IEBAICR7cGFyc2VyfSg/LCA/KWAsIFtjb25maWcsIGFyZ3NbMV1dKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdoZXJlRnV6enk8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzoge1xuICAgICAgb3BlcmF0b3I/OiBGdXp6eU9wZXJhdG9yO1xuICAgIH0sXG4gICk6IHRoaXM7XG4gIHdoZXJlRnV6enkoLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICBjb25zdCBvcGVyYXRvciA9IG5vcm1hbGl6ZUZ1enp5T3BlcmF0b3IoYXJnc1syXT8ub3BlcmF0b3IpO1xuXG4gICAgaWYgKG9wZXJhdG9yID09PSBcIiVcIikge1xuICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRoaXMuYnVpbGRlci53aGVyZVJhdyhgJHthcmdzWzBdLl9zcWx9ICR7b3BlcmF0b3J9ID9gLCBbLi4uYXJnc1swXS5fcGFyYW1zLCBhcmdzWzFdXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1aWxkZXIud2hlcmVSYXcoYD8/ICR7b3BlcmF0b3J9ID9gLCBbYXJnc1swXSwgYXJnc1sxXV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmJ1aWxkZXIud2hlcmVSYXcoYD8gJHtvcGVyYXRvcn0gJHthcmdzWzBdLl9zcWx9YCwgW2FyZ3NbMV0sIC4uLmFyZ3NbMF0uX3BhcmFtc10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJ1aWxkZXIud2hlcmVSYXcoYD8gJHtvcGVyYXRvcn0gPz9gLCBbYXJnc1sxXSwgYXJnc1swXV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9yV2hlcmVGdXp6eTxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPiB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBvcGVyYXRvcj86IEZ1enp5T3BlcmF0b3I7XG4gICAgfSxcbiAgKTogdGhpcztcbiAgb3JXaGVyZUZ1enp5KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBub3JtYWxpemVGdXp6eU9wZXJhdG9yKGFyZ3NbMl0/Lm9wZXJhdG9yKTtcblxuICAgIGlmIChvcGVyYXRvciA9PT0gXCIlXCIpIHtcbiAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZVJhdyhgJHthcmdzWzBdLl9zcWx9ICR7b3BlcmF0b3J9ID9gLCBbLi4uYXJnc1swXS5fcGFyYW1zLCBhcmdzWzFdXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZVJhdyhgPz8gJHtvcGVyYXRvcn0gP2AsIFthcmdzWzBdLCBhcmdzWzFdXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMuYnVpbGRlci5vcldoZXJlUmF3KGA/ICR7b3BlcmF0b3J9ICR7YXJnc1swXS5fc3FsfWAsIFthcmdzWzFdLCAuLi5hcmdzWzBdLl9wYXJhbXNdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWlsZGVyLm9yV2hlcmVSYXcoYD8gJHtvcGVyYXRvcn0gPz9gLCBbYXJnc1sxXSwgYXJnc1swXV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOykkeyyqSDqt7jro7lcbiAgd2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiB0aGlzO1xuICB3aGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci53aGVyZSgoc3ViQnVpbGRlcikgPT4ge1xuICAgICAgY29uc3Qgc3ViR3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihzdWJCdWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKHN1Ykdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBvcldoZXJlR3JvdXAoY2FsbGJhY2s6IChnOiBXaGVyZUdyb3VwPFRUYWJsZXM+KSA9PiB2b2lkKTogdGhpcztcbiAgb3JXaGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci5vcldoZXJlKChzdWJCdWlsZGVyKSA9PiB7XG4gICAgICBjb25zdCBzdWJHcm91cCA9IG5ldyBXaGVyZUdyb3VwPFRUYWJsZXM+KHN1YkJ1aWxkZXIpO1xuICAgICAgY2FsbGJhY2soc3ViR3JvdXApO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8vIEpPSU4g7KCIIOq3uOujueyXkOuKlCBMZWZ07JmAIFJpZ2h07JeQIOuMgO2VnCDsiJzshJzqsIAg7ZWE7JqU7ZWY7KeAIOyViuycvOuvgOuhnCwg66qo65OgIOqyveyasOydmCDsiJjrpbwg6rOE7IKw7ZW07JW87ZWoLlxuZXhwb3J0IGNsYXNzIEpvaW5DbGF1c2VHcm91cDxcbiAgVExlZnQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBUUmlnaHQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2FsbGJhY2s6IEtuZXguSm9pbkNsYXVzZSkge31cblxuICAvLyBPTihBTkQpOiDsu6zrn7wgPSDsu6zrn7xcbiAgb24obGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4pOiB0aGlzO1xuICBvbihsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0Pik6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCA9IOqwklxuICBvbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIHJpZ2h0OiBFeHRyYWN0Q29sdW1uVHlwZTxUUmlnaHQsIEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCAo7Jew7IKw7J6QKSDsu6zrn7xcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICApOiB0aGlzO1xuICBvbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCAo7Jew7IKw7J6QKSDqsJJcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRSaWdodCwgQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gT04oQU5EKTog7L2c67CxXG4gIG9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VExlZnQsIFRSaWdodD4pID0+IHZvaWQpOiB0aGlzO1xuICBvbihjYWxsYmFjazogKG5lc3RlZDogSm9pbkNsYXVzZUdyb3VwPFRSaWdodCwgVExlZnQ+KSA9PiB2b2lkKTogdGhpcztcbiAgLy8gT04oQU5EKSDqtaztmIRcbiAgb24oLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICB0aGlzLmNhbGxiYWNrLm9uKC4uLihhcmdzIGFzIFtzdHJpbmcsIHN0cmluZ10pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9OKE9SKTog7Lus65+8ID0g7Lus65+8XG4gIG9yT24obGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4pOiB0aGlzO1xuICBvck9uKGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgcmlnaHQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+KTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgPSDqsJJcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRSaWdodCwgQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgKOyXsOyCsOyekCkg7Lus65+8XG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICApOiB0aGlzO1xuICBvck9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuICAgIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgKTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgKOyXsOyCsOyekCkg6rCSXG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VFJpZ2h0LCBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBPTihPUik6IOy9nOuwsVxuICBvck9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VExlZnQsIFRSaWdodD4pID0+IHZvaWQpOiB0aGlzO1xuICBvck9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VFJpZ2h0LCBUTGVmdD4pID0+IHZvaWQpOiB0aGlzO1xuICAvLyBPTihPUikg6rWs7ZiEXG4gIG9yT24oLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICB0aGlzLmNhbGxiYWNrLm9yT24oLi4uKGFyZ3MgYXMgW3N0cmluZywgc3RyaW5nXSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gT04gVkFMKEFORCk6IOy7rOufvCA9IOqwkiAo6rCS7J2EIOy7rOufvCDssLjsobDqsIAg7JWE64uMIO2MjOudvOuvuO2EsOuhnCDrsJTsnbjrlKkpXG4gIG9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0Piwgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9uVmFsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgKHRoaXMuY2FsbGJhY2sgYXMgYW55KS5vblZhbCguLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEFORCBPTiBWQUw6IG9uVmFs7J2YIOuqheyLnOyggSBhbGlhcyAoS25leCDtmLjtmZgpXG4gIGFuZE9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBhbmRPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIGFuZE9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBhbmRPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0Piwgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIGFuZE9uVmFsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgKHRoaXMuY2FsbGJhY2sgYXMgYW55KS5hbmRPblZhbCguLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9SIE9OIFZBTDogT1Ig7KGw6rG07Jy866GcIOqwkiDrsJTsnbjrlKlcbiAgb3JPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LCB2YWx1ZTogYW55KTogdGhpcztcbiAgb3JPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9yT25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0Piwgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9yT25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvck9uVmFsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgKHRoaXMuY2FsbGJhY2sgYXMgYW55KS5vck9uVmFsKC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8qXG4gIFRSZXNvbHZlZDog7L+866asIOyLpO2WiSDtm4Qg67CY7ZmY65CgIOqysOqzvCDtg4DsnoVcbiAgVFJldHVybmluZzogUkVUVVJOSU5HIOygiOyXkCDsgqzsmqnrkKAg7YOA7J6FXG4qL1xuZXhwb3J0IGNsYXNzIFJlc29sdmVkUHVyaTxUUmVzb2x2ZWQsIFRSZXR1cm5pbmc+IGltcGxlbWVudHMgUHJvbWlzZTxUUmVzb2x2ZWQ+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGtuZXhRdWVyeTogS25leC5RdWVyeUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBrbmV4OiBLbmV4LFxuICApIHt9XG5cbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHN0cmluZyA9IFwiUHJvbWlzZVwiO1xuXG4gIHRvUXVlcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkudG9RdWVyeSgpO1xuICB9XG5cbiAgZGVidWcoKTogdGhpcyB7XG4gICAgY29uc29sZS5sb2coYCR7Y2hhbGsuY3lhbihcIltQdXJpIERlYnVnXVwiKX0gJHtjaGFsay55ZWxsb3codGhpcy50b1F1ZXJ5KCkpfWApO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhlbjxUUmVzdWx0MSA9IFRSZXNvbHZlZCwgVFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25mdWxmaWxsZWQ/OiAoKHZhbHVlOiBUUmVzb2x2ZWQpID0+IFRSZXN1bHQxIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDE+KSB8IG51bGwsXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgIE5haXRlLnQoXCJwdXJpOmV4ZWN1dGVkLXF1ZXJ5XCIsIHRoaXMudG9RdWVyeSgpKTtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkudGhlbihvbmZ1bGZpbGxlZCBhcyBhbnksIG9ucmVqZWN0ZWQpO1xuICB9XG5cbiAgY2F0Y2g8VFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc29sdmVkIHwgVFJlc3VsdDI+IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkuY2F0Y2gob25yZWplY3RlZCk7XG4gIH1cblxuICBmaW5hbGx5KG9uZmluYWxseT86ICgoKSA9PiB2b2lkKSB8IG51bGwpOiBQcm9taXNlPFRSZXNvbHZlZD4ge1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS5maW5hbGx5KG9uZmluYWxseSk7XG4gIH1cblxuICAvLyBPTiBDT05GTElDVCAtIOy7rOufvCDquLDrsJhcbiAgb25Db25mbGljdDxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgVFJldHVybmluZz4+KFxuICAgIGNvbHVtbnM6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIGFjdGlvbj86IE9uQ29uZmxpY3RBY3Rpb248VFRhYmxlcz4sXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IHRhcmdldCA9IEFycmF5LmlzQXJyYXkoY29sdW1ucykgPyBjb2x1bW5zIDogW2NvbHVtbnNdO1xuXG4gICAgaWYgKCFhY3Rpb24gfHwgYWN0aW9uID09PSBcIm5vdGhpbmdcIikge1xuICAgICAgLy8gRE8gTk9USElOR1xuICAgICAgdGhpcy5rbmV4UXVlcnkub25Db25mbGljdCh0YXJnZXQpLmlnbm9yZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBETyBVUERBVEVcbiAgICAgIGNvbnN0IHsgdXBkYXRlIH0gPSBhY3Rpb247XG5cbiAgICAgIC8vIGFjdGlvbi51cGRhdGUg67Cw7Je0IO2Yle2DnCA6IFtcIm5hbWVcIiwgXCJlbWFpbFwiXVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlKSkge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS5vbkNvbmZsaWN0KHRhcmdldCkubWVyZ2UodXBkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFjdGlvbi51cGRhdGUg6rCd7LK0IO2Yle2DnDogeyBuYW1lOiBcIkpvaG5cIiwgY291bnQ6IHJhdyguLi4pIH1cbiAgICAgICAgY29uc3QgbWVyZ2VPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh1cGRhdGUpKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgXCJfdHlwZVwiIGluIHZhbHVlICYmXG4gICAgICAgICAgICB2YWx1ZS5fdHlwZSA9PT0gXCJzcWxfZXhwcmVzc2lvblwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBTcWxFeHByZXNzaW9uIOKGkiBrbmV4LnJhdygp66GcIOuzgO2ZmFxuICAgICAgICAgICAgbWVyZ2VPYmpba2V5XSA9IHRoaXMua25leC5yYXcoKHZhbHVlIGFzIFNxbEV4cHJlc3Npb248YW55PikuX3NxbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOydvOuwmCDqsJJcbiAgICAgICAgICAgIG1lcmdlT2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmtuZXhRdWVyeS5vbkNvbmZsaWN0KHRhcmdldCkubWVyZ2UobWVyZ2VPYmopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gUkVUVVJOSU5HOiBcIipcIiAtIOyghOyytCDsu6zrn7xcbiAgcmV0dXJuaW5nKGNvbHVtbjogXCIqXCIpOiBSZXNvbHZlZFB1cmk8VFJldHVybmluZ1tdLCBuZXZlcj47XG4gIC8vIFJFVFVSTklORzog64uo7J28IOy7rOufvFxuICByZXR1cm5pbmc8VENvbHVtbiBleHRlbmRzIENvbHVtbktleXM8VFJldHVybmluZz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgKTogUmVzb2x2ZWRQdXJpPFBpY2s8VFJldHVybmluZywgVENvbHVtbj5bXSwgbmV2ZXI+O1xuICAvLyBSRVRVUk5JTkc6IOuzteyImCDsu6zrn7wgKOuwsOyXtClcbiAgcmV0dXJuaW5nPFRDb2x1bW4gZXh0ZW5kcyBDb2x1bW5LZXlzPFRSZXR1cm5pbmc+PihcbiAgICBjb2x1bW5zOiBUQ29sdW1uW10sXG4gICk6IFJlc29sdmVkUHVyaTxQaWNrPFRSZXR1cm5pbmcsIFRDb2x1bW4+W10sIG5ldmVyPjtcbiAgLy8gUkVUVVJOSU5HIOq1rO2YhFxuICByZXR1cm5pbmcoY29sdW1uT3JDb2x1bW5zOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFJlc29sdmVkUHVyaTxhbnlbXSwgbmV2ZXI+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5yZXR1cm5pbmcoY29sdW1uT3JDb2x1bW5zKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImFzc2VydCIsImNoYWxrIiwiaW5mbGVjdGlvbiIsIkVudGl0eU1hbmFnZXIiLCJOYWl0ZSIsIkZVWlpZX09QRVJBVE9SUyIsIm5vcm1hbGl6ZUZ1enp5T3BlcmF0b3IiLCJvcGVyYXRvciIsIm5vcm1hbGl6ZWQiLCJ0cmltIiwiZnV6enlPcGVyYXRvciIsImZpbmQiLCJjYW5kaWRhdGUiLCJFcnJvciIsIlB1cmkiLCJrbmV4UXVlcnkiLCJ0YWJsZVNwZWMiLCJrbmV4IiwidGFibGVOYW1lT3JTb3VyY2UiLCJmcm9tIiwic2FmZUdldFRhYmxlU3BlYyIsImVudHJpZXMiLCJPYmplY3QiLCJsZW5ndGgiLCJhbGlhcyIsInNvdXJjZSIsInN1YnF1ZXJ5QnVpbGRlciIsInJhd1F1ZXJ5IiwiYXMiLCJ0YWJsZU5hbWUiLCJnZXRUYWJsZVNwZWMiLCJjb3VudCIsImNvbHVtbiIsIl90eXBlIiwiX3JldHVybiIsIl9zcWwiLCJfcGFyYW1zIiwic3VtIiwiYXZnIiwibWF4IiwibWluIiwiY29uY2F0IiwiYXJncyIsIm1hcCIsImpvaW4iLCJ1cHBlciIsImxvd2VyIiwid29yZFNpbWlsYXJpdHkiLCJxdWVyeSIsInNpbWlsYXJpdHkiLCJzdHJpY3RXb3JkU2ltaWxhcml0eSIsInJhd1N0cmluZyIsInNxbCIsInBhcmFtcyIsInJhd1N0cmluZ0FycmF5IiwicmF3TnVtYmVyIiwicmF3Qm9vbGVhbiIsInJhd0RhdGUiLCJ0c0hpZ2hsaWdodCIsIl9vcHRpb25zIiwicGFyc2VyIiwiY29uZmlnIiwib3B0aW9ucyIsImhsT3B0aW9uUGFydHMiLCJrZXkiLCJ2YWx1ZSIsImNhbWVsaXplIiwiaGxPcHRpb25zIiwidHNSYW5rIiwiX3RzUmFuayIsInRzUmFua0NkIiwidG9Uc1ZlY3RvciIsInR5cGUiLCJub3JtYWxpemF0aW9uIiwid2VpZ2h0cyIsInNxbFRlbXBsYXRlIiwicHVzaCIsInNjb3JlIiwiaGlnaGxpZ2h0IiwiY29sdW1uT3JDb2x1bW5zIiwicXVlcnlBcnIiLCJBcnJheSIsImlzQXJyYXkiLCJxdWVyeUNsYXVzZSIsInNlbGVjdCIsInNlbGVjdE9iaiIsImZsYXRTZWxlY3QiLCJmbGF0dGVuU2VsZWN0Iiwic2VsZWN0Q2xhdXNlcyIsImNvbHVtbk9yRnVuY3Rpb24iLCJyYXciLCJjb2x1bW5QYXRoIiwicHJlZml4IiwiZnVsbEtleSIsIm5lc3RlZCIsImFzc2lnbiIsImFwcGVuZFNlbGVjdCIsInJlZiIsInNlbGVjdEFsbCIsImRpc3RpbmN0IiwiY29sdW1ucyIsImNsZWFyIiwic3RhdGVtZW50IiwiY2xlYXJKb2luIiwiX3N0YXRlbWVudHMiLCJmaWx0ZXIiLCJzIiwiX2FsaWFzIiwiX3RhYmxlIiwidGFibGUiLCJ0YWJsZU5hbWVPclNwZWMiLCJfX2NvbW1vbkpvaW4iLCJsZWZ0Sm9pbiIsImpvaW5UeXBlIiwiY2FsbGJhY2siLCJqb2luQ2xhdXNlIiwiSm9pbkNsYXVzZUdyb3VwIiwibGVmdCIsInJpZ2h0Iiwic3BlYyIsIndoZXJlIiwiY29sdW1uT3JDb25kaXRpb25zIiwib3BlcmF0b3JPclZhbHVlIiwid2hlcmVOdWxsIiwid2hlcmVOb3ROdWxsIiwid2hlcmVJbiIsInZhbHVlcyIsIndoZXJlTm90SW4iLCJ3aGVyZU1hdGNoIiwid2hlcmVSYXciLCJTdHJpbmciLCJ3aGVyZVNlYXJjaCIsImNvbHVtbkV4cHIiLCJjIiwicGdyb29uZ2FDb25kaXRpb24iLCJ3aGVyZVRzU2VhcmNoIiwib3B0cyIsIndoZXJlRnV6enkiLCJiaW5kaW5ncyIsIndoZXJlR3JvdXAiLCJidWlsZGVyIiwiZ3JvdXAiLCJXaGVyZUdyb3VwIiwib3JXaGVyZUdyb3VwIiwib3JXaGVyZSIsIm9yZGVyQnkiLCJkaXJlY3Rpb24iLCJvcmRlckJ5UmF3IiwidmVjdG9yU2ltaWxhcml0eSIsImVtYmVkZGluZyIsIm1ldGhvZCIsInRocmVzaG9sZCIsImRpc3RpbmN0T24iLCJzb21lIiwidiIsIk51bWJlciIsImlzRmluaXRlIiwidmVjdG9yTGl0ZXJhbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb3NpbmUiLCJsMiIsImlubmVyX3Byb2R1Y3QiLCJzaW1pbGFyaXR5RXhwciIsImV4aXN0aW5nU3Vic2V0Q29scyIsImdyb3VwaW5nIiwiZmxhdE1hcCIsImNvbCIsInRocmVzaG9sZE9wIiwidGhyZXNob2xkVmFsdWUiLCJsaW1pdCIsIm9mZnNldCIsImdyb3VwQnkiLCJoYXZpbmciLCJjb25kaXRpb25zIiwidGhlbiIsIm9uZnVsZmlsbGVkIiwib25yZWplY3RlZCIsInQiLCJ0b1F1ZXJ5IiwiY2F0Y2giLCJmaW5hbGx5Iiwib25maW5hbGx5IiwiZmlyc3QiLCJSZXNvbHZlZFB1cmkiLCJwbHVjayIsImluc2VydCIsInJhd0RhdGEiLCJyZWZpbmVkRGF0YSIsInJlZmluZUpzb25Db2x1bW5zIiwidXBkYXRlIiwiZGF0YSIsImpzb25Db2x1bW5zIiwiaXRlbSIsInVuZGVmaW5lZCIsImluY3JlbWVudCIsImRlY3JlbWVudCIsImRlbGV0ZSIsImRlYnVnIiwiY29uc29sZSIsImxvZyIsImN5YW4iLCJ5ZWxsb3ciLCJjbG9uZSIsIm5ld1B1cmkiLCJmb3JtYXRTUUwiLCJ1bmZvcm1hdHRlZCIsImtleXdvcmRzIiwiZm9ybWF0dGVkIiwiZm9yRWFjaCIsImtleXdvcmQiLCJyZWdleCIsIlJlZ0V4cCIsInJlcGxhY2UiLCJ0b1VwcGVyQ2FzZSIsIm1ham9yQ2xhdXNlcyIsImNsYXVzZSIsImxpbmVzIiwic3BsaXQiLCJpbmRlbnRlZExpbmVzIiwiaW5kZW50TGV2ZWwiLCJsaW5lIiwidHJpbW1lZExpbmUiLCJjbG9zaW5nUGFyZW5zIiwibWF0Y2giLCJvcGVuaW5nUGFyZW5zIiwiTWF0aCIsImluZGVudCIsInJlcGVhdCIsInNsaWNlIiwib3JXaGVyZUluIiwib3JXaGVyZU5vdEluIiwib3JXaGVyZU1hdGNoIiwib3JXaGVyZVJhdyIsIm9yV2hlcmVTZWFyY2giLCJvcldoZXJlVHNTZWFyY2giLCJvcldoZXJlRnV6enkiLCJzdWJCdWlsZGVyIiwic3ViR3JvdXAiLCJvbiIsIm9yT24iLCJvblZhbCIsImFuZE9uVmFsIiwib3JPblZhbCIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwib25Db25mbGljdCIsImFjdGlvbiIsInRhcmdldCIsImln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
1231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub1RoZW5Qcm9wZXJ0eTogUHVyaeuKlCB0aGVuYWJsZSDsnbjthLDtjpjsnbTsiqTrpbwg6rWs7ZiE7ZWY6rOgIOyeiOyKteuLiOuLpC4gKi9cbi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJp64qUIOuLpOyWke2VnCDtg4DsnoXsnYQg7IKs7Jqp7ZWY6rOgIOyeiOyKteuLiOuLpC4gKi9cblxuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIHR5cGUgVGFibGVTcGVjIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB0eXBlIHtcbiAgQXZhaWxhYmxlQ29sdW1ucyxcbiAgQ29sdW1uS2V5cyxcbiAgQ29tcGFyaXNvbk9wZXJhdG9yLFxuICBFeHBhbmQsXG4gIEV4dHJhY3RDb2x1bW5UeXBlLFxuICBGdWxsdGV4dENvbHVtbnMsXG4gIEZ1enp5T3BlcmF0b3IsXG4gIEluc2VydERhdGEsXG4gIEluc2VydFJlc3VsdCxcbiAgTGVmdEpvaW5lZE1hcmtlcixcbiAgTGVmdEpvaW5NYXJrZXJGb3IsXG4gIE51bWVyaWNDb2x1bW5zLFxuICBPbkNvbmZsaWN0QWN0aW9uLFxuICBQYXJzZVNlbGVjdE9iamVjdCxcbiAgUmVzdWx0QXZhaWxhYmxlQ29sdW1ucyxcbiAgU2VsZWN0QWxsUmVzdWx0LFxuICBTZWxlY3RPYmplY3QsXG4gIFNpbmdsZVRhYmxlVmFsdWUsXG4gIFNxbEV4cHJlc3Npb24sXG4gIFRzSGlnaGxpZ2h0T3B0aW9ucyxcbiAgVHNRdWVyeUNvbmZpZyxcbiAgVHNRdWVyeU9wdGlvbnMsXG4gIFRzUmFua09wdGlvbnMsXG4gIFZlY3RvckNvbHVtbnMsXG4gIFdoZXJlQ29uZGl0aW9uLFxuICBXaGVyZU9wZXJhdG9yLFxufSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQgeyBGVVpaWV9PUEVSQVRPUlMgfSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IENsZWFyU3RhdGVtZW50cyB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZ1enp5T3BlcmF0b3Iob3BlcmF0b3I/OiBzdHJpbmcpOiBGdXp6eU9wZXJhdG9yIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG9wZXJhdG9yPy50cmltKCkgPz8gXCI8JVwiO1xuICBjb25zdCBmdXp6eU9wZXJhdG9yID0gRlVaWllfT1BFUkFUT1JTLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlID09PSBub3JtYWxpemVkKTtcblxuICBpZiAoIWZ1enp5T3BlcmF0b3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZnV6enkgb3BlcmF0b3I6ICR7b3BlcmF0b3IgPz8gXCJcIn1gKTtcbiAgfVxuXG4gIHJldHVybiBmdXp6eU9wZXJhdG9yO1xufVxuXG5leHBvcnQgY2xhc3MgUHVyaTxUU2NoZW1hLCBUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiwgVFJlc3VsdD4ge1xuICBwcml2YXRlIGtuZXhRdWVyeTogS25leC5RdWVyeUJ1aWxkZXI7XG4gIHByaXZhdGUgdGFibGVTcGVjOiBUYWJsZVNwZWMgfCBudWxsID0gbnVsbDtcblxuICAvLyDsg53shLHsnpAg7Iuc6re464uI7LKY65OkXG4gIGNvbnN0cnVjdG9yKGtuZXg6IEtuZXgsIHRhYmxlTmFtZTogc3RyaW5nKTtcbiAgY29uc3RydWN0b3Ioa25leDogS25leCwgdGFibGVTb3VyY2U6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IFB1cmk8VFNjaGVtYSwgYW55LCBhbnk+Pik7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBrbmV4OiBLbmV4LFxuICAgIHRhYmxlTmFtZU9yU291cmNlOiBhbnksXG4gICkge1xuICAgIGlmICh0eXBlb2YgdGFibGVOYW1lT3JTb3VyY2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIC8vIENhc2U6IG5ldyBQdXJpKGtuZXgsIFwidXNlcnNcIilcbiAgICAgIHRoaXMua25leFF1ZXJ5ID0gdGhpcy5rbmV4KHRhYmxlTmFtZU9yU291cmNlKS5mcm9tKHRhYmxlTmFtZU9yU291cmNlKTtcbiAgICAgIHRoaXMudGFibGVTcGVjID0gdGhpcy5zYWZlR2V0VGFibGVTcGVjKHRhYmxlTmFtZU9yU291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0YWJsZU5hbWVPclNvdXJjZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRhYmxlTmFtZU9yU291cmNlKTtcbiAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUYWJsZSBzcGVjIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBlbnRyeVwiKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChlbnRyaWVzWzBdKTtcbiAgICAgIGNvbnN0IFthbGlhcywgc291cmNlXSA9IGVudHJpZXNbMF07XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeSA9IHRoaXMua25leChzb3VyY2UpLmZyb20oeyBbYWxpYXNdOiBzb3VyY2UgfSk7XG4gICAgICAgIHRoaXMudGFibGVTcGVjID0gdGhpcy5zYWZlR2V0VGFibGVTcGVjKHNvdXJjZSk7XG4gICAgICB9IGVsc2UgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIFB1cmkpIHtcbiAgICAgICAgY29uc3Qgc3VicXVlcnlCdWlsZGVyID0gc291cmNlLnJhd1F1ZXJ5KCk7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5ID0gdGhpcy5rbmV4LmZyb20oc3VicXVlcnlCdWlsZGVyLmFzKGFsaWFzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIHNwZWNpZmljYXRpb25cIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdGFibGUgc3BlY2lmaWNhdGlvblwiKTtcbiAgICB9XG4gIH1cblxuICBzYWZlR2V0VGFibGVTcGVjKHRhYmxlTmFtZTogc3RyaW5nKTogVGFibGVTcGVjIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBFbnRpdHlNYW5hZ2VyLmdldFRhYmxlU3BlYyh0YWJsZU5hbWUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljIFNRTCBoZWxwZXIgZnVuY3Rpb25zIGZvciBTRUxFQ1RcbiAgc3RhdGljIGNvdW50KGNvbHVtbjogc3RyaW5nID0gXCIqXCIpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgQ09VTlQoPz8pOjppbnRlZ2VyYCxcbiAgICAgIF9wYXJhbXM6IFtjb2x1bW5dLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIHN1bShjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBTVU0oPz8pYCxcbiAgICAgIF9wYXJhbXM6IFtjb2x1bW5dLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIGF2Zyhjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBBVkcoPz8pYCxcbiAgICAgIF9wYXJhbXM6IFtjb2x1bW5dLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIG1heChjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBNQVgoPz8pYCxcbiAgICAgIF9wYXJhbXM6IFtjb2x1bW5dLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIG1pbihjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBNSU4oPz8pYCxcbiAgICAgIF9wYXJhbXM6IFtjb2x1bW5dLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIGNvbmNhdCguLi5hcmdzOiBzdHJpbmdbXSk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJzdHJpbmdcIixcbiAgICAgIF9zcWw6IGBDT05DQVQoJHthcmdzLm1hcCgoKSA9PiBcIj9cIikuam9pbihcIiwgXCIpfSlgLFxuICAgICAgX3BhcmFtczogYXJncyxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB1cHBlcihjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJzdHJpbmdcIixcbiAgICAgIF9zcWw6IFwiVVBQRVIoPz8pXCIsXG4gICAgICBfcGFyYW1zOiBbY29sdW1uXSxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBsb3dlcihjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJzdHJpbmdcIixcbiAgICAgIF9zcWw6IFwiTE9XRVIoPz8pXCIsXG4gICAgICBfcGFyYW1zOiBbY29sdW1uXSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHdvcmRTaW1pbGFyaXR5KFxuICAgIGNvbHVtbjogc3RyaW5nIHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPixcbiAgICBxdWVyeTogc3RyaW5nLFxuICApOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICBpZiAodHlwZW9mIGNvbHVtbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgICAgX3NxbDogXCJ3b3JkX3NpbWlsYXJpdHkoPywgPz8pXCIsXG4gICAgICAgIF9wYXJhbXM6IFtxdWVyeSwgY29sdW1uXSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcIm51bWJlclwiLFxuICAgICAgX3NxbDogYHdvcmRfc2ltaWxhcml0eSg/LCAke2NvbHVtbi5fc3FsfSlgLFxuICAgICAgX3BhcmFtczogW3F1ZXJ5LCAuLi5jb2x1bW4uX3BhcmFtc10sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBzaW1pbGFyaXR5KFxuICAgIGNvbHVtbjogc3RyaW5nIHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPixcbiAgICBxdWVyeTogc3RyaW5nLFxuICApOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICBpZiAodHlwZW9mIGNvbHVtbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgICAgX3NxbDogXCJzaW1pbGFyaXR5KD8/LCA/KVwiLFxuICAgICAgICBfcGFyYW1zOiBbY29sdW1uLCBxdWVyeV0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBzaW1pbGFyaXR5KCR7Y29sdW1uLl9zcWx9LCA/KWAsXG4gICAgICBfcGFyYW1zOiBbLi4uY29sdW1uLl9wYXJhbXMsIHF1ZXJ5XSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHN0cmljdFdvcmRTaW1pbGFyaXR5KFxuICAgIGNvbHVtbjogc3RyaW5nIHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPixcbiAgICBxdWVyeTogc3RyaW5nLFxuICApOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICBpZiAodHlwZW9mIGNvbHVtbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgICAgX3NxbDogYHN0cmljdF93b3JkX3NpbWlsYXJpdHkoPywgPz8pYCxcbiAgICAgICAgX3BhcmFtczogW3F1ZXJ5LCBjb2x1bW5dLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgc3RyaWN0X3dvcmRfc2ltaWxhcml0eSg/LCAke2NvbHVtbi5fc3FsfSlgLFxuICAgICAgX3BhcmFtczogW3F1ZXJ5LCAuLi5jb2x1bW4uX3BhcmFtc10sXG4gICAgfTtcbiAgfVxuXG4gIC8vIFJhdyBmdW5jdGlvbnMgZm9yIFNFTEVDVFxuICBzdGF0aWMgcmF3U3RyaW5nKHNxbDogc3RyaW5nLCBwYXJhbXM6IEtuZXguUmF3QmluZGluZ1tdID0gW10pOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcInN0cmluZ1wiLCBfc3FsOiBzcWwsIF9wYXJhbXM6IHBhcmFtcyB9O1xuICB9XG5cbiAgc3RhdGljIHJhd1N0cmluZ0FycmF5KHNxbDogc3RyaW5nLCBwYXJhbXM6IEtuZXguUmF3QmluZGluZ1tdID0gW10pOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nW11cIj4ge1xuICAgIHJldHVybiB7IF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsIF9yZXR1cm46IFwic3RyaW5nW11cIiwgX3NxbDogc3FsLCBfcGFyYW1zOiBwYXJhbXMgfTtcbiAgfVxuXG4gIHN0YXRpYyByYXdOdW1iZXIoc3FsOiBzdHJpbmcsIHBhcmFtczogS25leC5SYXdCaW5kaW5nW10gPSBbXSk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7IF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsIF9yZXR1cm46IFwibnVtYmVyXCIsIF9zcWw6IHNxbCwgX3BhcmFtczogcGFyYW1zIH07XG4gIH1cblxuICBzdGF0aWMgcmF3Qm9vbGVhbihzcWw6IHN0cmluZywgcGFyYW1zOiBLbmV4LlJhd0JpbmRpbmdbXSA9IFtdKTogU3FsRXhwcmVzc2lvbjxcImJvb2xlYW5cIj4ge1xuICAgIHJldHVybiB7IF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsIF9yZXR1cm46IFwiYm9vbGVhblwiLCBfc3FsOiBzcWwsIF9wYXJhbXM6IHBhcmFtcyB9O1xuICB9XG5cbiAgc3RhdGljIHJhd0RhdGUoc3FsOiBzdHJpbmcsIHBhcmFtczogS25leC5SYXdCaW5kaW5nW10gPSBbXSk6IFNxbEV4cHJlc3Npb248XCJkYXRlXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcImRhdGVcIiwgX3NxbDogc3FsLCBfcGFyYW1zOiBwYXJhbXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGVFMg6rKA7IOJ7Ja0IO2VmOydtOudvOydtO2MhVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAuc2VsZWN0KHtcbiAgICogICB0aXRsZTogUHVyaS5oaWdobGlnaHQoXCJwb3N0cy50aXRsZVwiLCBzZWFyY2gpLFxuICAgKiAgIGNvbnRlbnQ6IFB1cmkuaGlnaGxpZ2h0KFwicG9zdHMuY29udGVudFwiLCBzZWFyY2gsIHtcbiAgICogICAgIHN0YXJ0U2VsOiBcIjxtYXJrPlwiLFxuICAgKiAgICAgc3RvcFNlbDogXCI8L21hcms+XCIsXG4gICAqICAgICBtYXhGcmFnbWVudHM6IDMsXG4gICAqICAgfSksXG4gICAqIH0pXG4gICAqL1xuICBzdGF0aWMgdHNIaWdobGlnaHQoXG4gICAgY29sdW1uOiBzdHJpbmcsXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBfb3B0aW9ucz86IFRzSGlnaGxpZ2h0T3B0aW9ucyxcbiAgKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPiB7XG4gICAgY29uc3QgeyBwYXJzZXIgPSBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCIsIGNvbmZpZyA9IFwic2ltcGxlXCIsIC4uLm9wdGlvbnMgfSA9IF9vcHRpb25zID8/IHt9O1xuXG4gICAgY29uc3QgaGxPcHRpb25QYXJ0cyA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4gYCR7aW5mbGVjdGlvbi5jYW1lbGl6ZShrZXkpfT0ke3ZhbHVlfWA7XG4gICAgfSk7XG5cbiAgICBjb25zdCBobE9wdGlvbnMgPSBobE9wdGlvblBhcnRzLmxlbmd0aCA+IDAgPyBgLCAnJHtobE9wdGlvblBhcnRzLmpvaW4oXCIsIFwiKX0nYCA6IFwiXCI7XG5cbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwic3RyaW5nXCIsXG4gICAgICBfc3FsOiBgdHNfaGVhZGxpbmUoPywgPz8sICR7cGFyc2VyfSg/LCA/KSR7aGxPcHRpb25zfSlgLFxuICAgICAgX3BhcmFtczogW2NvbmZpZywgY29sdW1uLCBjb25maWcsIHF1ZXJ5XSxcbiAgICB9O1xuICB9XG5cbiAgLy8gdHNfcmFua1xuICBzdGF0aWMgdHNSYW5rKFxuICAgIGNvbHVtbjogc3RyaW5nIHwgU3FsRXhwcmVzc2lvbjxcInRzdmVjdG9yXCI+LFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFRzUmFua09wdGlvbnMsXG4gICk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiBQdXJpLl90c1JhbmsoXCJ0c19yYW5rXCIsIGNvbHVtbiwgcXVlcnksIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gdHNfcmFua19jZFxuICBzdGF0aWMgdHNSYW5rQ2QoXG4gICAgY29sdW1uOiBzdHJpbmcgfCBTcWxFeHByZXNzaW9uPFwidHN2ZWN0b3JcIj4sXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBvcHRpb25zPzogVHNSYW5rT3B0aW9ucyxcbiAgKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIFB1cmkuX3RzUmFuayhcInRzX3JhbmtfY2RcIiwgY29sdW1uLCBxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICBzdGF0aWMgdG9Uc1ZlY3Rvcihjb2x1bW46IHN0cmluZywgY29uZmlnOiBzdHJpbmcgPSBcInNpbXBsZVwiKTogU3FsRXhwcmVzc2lvbjxcInRzdmVjdG9yXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwidHN2ZWN0b3JcIixcbiAgICAgIF9zcWw6IGB0b190c3ZlY3Rvcig/LCA/PylgLFxuICAgICAgX3BhcmFtczogW2NvbmZpZywgY29sdW1uXSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIF90c1JhbmsoXG4gICAgdHlwZTogXCJ0c19yYW5rXCIgfCBcInRzX3JhbmtfY2RcIixcbiAgICBjb2x1bW46IHN0cmluZyB8IFNxbEV4cHJlc3Npb248XCJ0c3ZlY3RvclwiPixcbiAgICBxdWVyeTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUc1JhbmtPcHRpb25zLFxuICApOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICBjb25zdCB7XG4gICAgICBwYXJzZXIgPSBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCIsXG4gICAgICBjb25maWcgPSBcInNpbXBsZVwiLFxuICAgICAgbm9ybWFsaXphdGlvbixcbiAgICAgIHdlaWdodHMsXG4gICAgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICBjb25zdCBwYXJhbXMgPSBbXTtcbiAgICBsZXQgc3FsVGVtcGxhdGUgPSBgJHt0eXBlfShgO1xuXG4gICAgaWYgKHdlaWdodHMpIHtcbiAgICAgIHNxbFRlbXBsYXRlICs9IGBBUlJBWVske3dlaWdodHMubWFwKCgpID0+IFwiP1wiKS5qb2luKFwiLCBcIil9XTo6ZmxvYXQ0W10sIGA7XG4gICAgICBwYXJhbXMucHVzaCguLi53ZWlnaHRzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbHVtbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgc3FsVGVtcGxhdGUgKz0gYD8/LCAke3BhcnNlcn0oPywgPylgO1xuICAgICAgcGFyYW1zLnB1c2goY29sdW1uLCBjb25maWcsIHF1ZXJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3FsVGVtcGxhdGUgKz0gYCR7Y29sdW1uLl9zcWx9LCAke3BhcnNlcn0oPywgPylgO1xuICAgICAgcGFyYW1zLnB1c2goLi4uY29sdW1uLl9wYXJhbXMsIGNvbmZpZywgcXVlcnkpO1xuICAgIH1cblxuICAgIGlmIChub3JtYWxpemF0aW9uKSB7XG4gICAgICBzcWxUZW1wbGF0ZSArPSBcIiwgP1wiO1xuICAgICAgcGFyYW1zLnB1c2gobm9ybWFsaXphdGlvbik7XG4gICAgfVxuXG4gICAgc3FsVGVtcGxhdGUgKz0gXCIpXCI7XG5cbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcIm51bWJlclwiLCBfc3FsOiBzcWxUZW1wbGF0ZSwgX3BhcmFtczogcGFyYW1zIH07XG4gIH1cblxuICAvKipcbiAgICogUEdyb29uZ2EgRnVsbFRleHQg7J24642x7IqkIOqygOyDiSDsoJDsiJhcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLnNlbGVjdCh7XG4gICAqICAgc2NvcmU6IFB1cmkuc2NvcmUoKSxcbiAgICogfSlcbiAgICovXG4gIHN0YXRpYyBzY29yZSgpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4gUHVyaS5yYXdOdW1iZXIoXCJwZ3Jvb25nYV9zY29yZSh0YWJsZW9pZCwgY3RpZClcIik7XG4gIH1cblxuICAvKipcbiAgICogUEdyb29uZ2EgRnVsbFRleHQg7J24642x7IqkIOqygOyDiSDtlZjsnbTrnbzsnbTtjIVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLnNlbGVjdCh7XG4gICAqICAgdGl0bGU6IFB1cmkuaGlnaGxpZ2h0KFwicG9zdHMudGl0bGVcIiwgc2VhcmNoKSxcbiAgICogfSlcbiAgICovXG4gIHN0YXRpYyBoaWdobGlnaHQoY29sdW1uOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj47XG4gIHN0YXRpYyBoaWdobGlnaHQoY29sdW1uczogc3RyaW5nW10sIHF1ZXJ5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdbXVwiPjtcblxuICBzdGF0aWMgaGlnaGxpZ2h0KFxuICAgIGNvbHVtbk9yQ29sdW1uczogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgcXVlcnk6IHN0cmluZyB8IHN0cmluZ1tdLFxuICApOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1tdXCI+IHtcbiAgICBjb25zdCBxdWVyeUFyciA9IEFycmF5LmlzQXJyYXkocXVlcnkpID8gcXVlcnkgOiBbcXVlcnldO1xuICAgIGNvbnN0IHF1ZXJ5Q2xhdXNlID0gYEFSUkFZWyR7cXVlcnlBcnIubWFwKCgpID0+IFwiP1wiKS5qb2luKFwiLCBcIil9XWA7XG5cbiAgICAvLyDri6jsnbwg7Lus65+87J24IOqyveyasFxuICAgIGlmICh0eXBlb2YgY29sdW1uT3JDb2x1bW5zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gUHVyaS5yYXdTdHJpbmcoYHBncm9vbmdhX2hpZ2hsaWdodF9odG1sKD8/LCAke3F1ZXJ5Q2xhdXNlfSlgLCBbXG4gICAgICAgIGNvbHVtbk9yQ29sdW1ucyxcbiAgICAgICAgLi4ucXVlcnlBcnIsXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvLyDsu6zrn7wg67Cw7Je07J24IOqyveyasFxuICAgIHJldHVybiBQdXJpLnJhd1N0cmluZ0FycmF5KFxuICAgICAgYHBncm9vbmdhX2hpZ2hsaWdodF9odG1sKEFSUkFZWyR7Y29sdW1uT3JDb2x1bW5zLm1hcCgoKSA9PiBcIj8/XCIpLmpvaW4oXCIsIFwiKX1dLCAke3F1ZXJ5Q2xhdXNlfSlgLFxuICAgICAgWy4uLmNvbHVtbk9yQ29sdW1ucywgLi4ucXVlcnlBcnJdLFxuICAgICk7XG4gIH1cblxuICAvLyBTRUxFQ1QgKG92ZXJ3cml0ZSlcbiAgc2VsZWN0PFRTZWxlY3QgZXh0ZW5kcyBTZWxlY3RPYmplY3Q8VFRhYmxlcz4+KFxuICAgIHNlbGVjdE9iajogVFNlbGVjdCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBQYXJzZVNlbGVjdE9iamVjdDxUVGFibGVzLCBUU2VsZWN0Pj4ge1xuICAgIC8vIOykkeyyqSDqsJ3ssrTrpbwgZmxhdO2VmOqyjCDrs4DtmZhcbiAgICBjb25zdCBmbGF0U2VsZWN0ID0gdGhpcy5mbGF0dGVuU2VsZWN0KHNlbGVjdE9iaik7XG5cbiAgICBjb25zdCBzZWxlY3RDbGF1c2VzOiAoc3RyaW5nIHwgS25leC5SYXcpW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2FsaWFzLCBjb2x1bW5PckZ1bmN0aW9uXSBvZiBPYmplY3QuZW50cmllcyhmbGF0U2VsZWN0KSkge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5PckZ1bmN0aW9uID09PSBcIm9iamVjdFwiICYmIGNvbHVtbk9yRnVuY3Rpb24uX3R5cGUgPT09IFwic3FsX2V4cHJlc3Npb25cIikge1xuICAgICAgICAvLyBTUUwg7ZWo7IiY7J24IOqyveyasFxuICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2goXG4gICAgICAgICAgdGhpcy5rbmV4LnJhdyhgJHtjb2x1bW5PckZ1bmN0aW9uLl9zcWx9IEFTIFwiJHthbGlhc31cImAsIGNvbHVtbk9yRnVuY3Rpb24uX3BhcmFtcyksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDsnbzrsJgg7Lus65+87J24IOqyveyasFxuICAgICAgICBjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uT3JGdW5jdGlvbiBhcyBzdHJpbmc7XG4gICAgICAgIGlmIChhbGlhcyA9PT0gY29sdW1uUGF0aCkge1xuICAgICAgICAgIC8vIGFsaWFz7JmAIOy7rOufvOuqheydtCDqsJnsnLzrqbQgYWxpYXMg7IOd6561XG4gICAgICAgICAgc2VsZWN0Q2xhdXNlcy5wdXNoKGNvbHVtblBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGFsaWFzIOyngOyglVxuICAgICAgICAgIHNlbGVjdENsYXVzZXMucHVzaChgJHtjb2x1bW5QYXRofSBBUyAke2FsaWFzfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5rbmV4UXVlcnkuc2VsZWN0KHNlbGVjdENsYXVzZXMpO1xuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiDspJHssqkg6rCd7LK066W8IGZsYXQg6rCd7LK066GcIOuzgO2ZmFxuICAgKiDsmIg6IHsgcGFyZW50OiB7IGlkOiBcInBhcmVudC5pZFwiLCBuYW1lOiBcInBhcmVudC5uYW1lXCIgfSB9XG4gICAqICAg4oaSIHsgcGFyZW50X19pZDogXCJwYXJlbnQuaWRcIiwgcGFyZW50X19uYW1lOiBcInBhcmVudC5uYW1lXCIgfVxuICAgKi9cbiAgcHJpdmF0ZSBmbGF0dGVuU2VsZWN0KHNlbGVjdE9iajogUmVjb3JkPHN0cmluZywgYW55PiwgcHJlZml4ID0gXCJcIik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IGZsYXRTZWxlY3Q6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNlbGVjdE9iaikpIHtcbiAgICAgIGNvbnN0IGZ1bGxLZXkgPSBwcmVmaXggPyBgJHtwcmVmaXh9X18ke2tleX1gIDoga2V5O1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmICEoXCJfdHlwZVwiIGluIHZhbHVlKSkge1xuICAgICAgICAvLyDspJHssqkg6rCd7LK07J24IOqyveyasCAtIOyerOq3gCDsspjrpqxcbiAgICAgICAgY29uc3QgbmVzdGVkID0gdGhpcy5mbGF0dGVuU2VsZWN0KHZhbHVlLCBmdWxsS2V5KTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmbGF0U2VsZWN0LCBuZXN0ZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g7J2867CYIOqwkuyduCDqsr3smrAgKOy7rOufvCDqsr3roZwg65iQ64qUIFNxbEV4cHJlc3Npb24pXG4gICAgICAgIGZsYXRTZWxlY3RbZnVsbEtleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdFNlbGVjdDtcbiAgfVxuXG4gIC8vIFNFTEVDVCAoc2VsZWN064qUIG92ZXJ3cml0ZSwgYXBwZW5kU2VsZWN064qUIGFwcGVuZClcbiAgYXBwZW5kU2VsZWN0PFRTZWxlY3QgZXh0ZW5kcyBTZWxlY3RPYmplY3Q8VFRhYmxlcz4+KFxuICAgIHNlbGVjdE9iajogVFNlbGVjdCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0ICYgUGFyc2VTZWxlY3RPYmplY3Q8VFRhYmxlcywgVFNlbGVjdD4+IHtcbiAgICAvLyDspJHssqkg6rCd7LK066W8IGZsYXTtlZjqsowg67OA7ZmYXG4gICAgY29uc3QgZmxhdFNlbGVjdCA9IHRoaXMuZmxhdHRlblNlbGVjdChzZWxlY3RPYmopO1xuXG4gICAgY29uc3Qgc2VsZWN0Q2xhdXNlczogKHN0cmluZyB8IEtuZXguUmF3KVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFthbGlhcywgY29sdW1uT3JGdW5jdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZmxhdFNlbGVjdCkpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uT3JGdW5jdGlvbiA9PT0gXCJvYmplY3RcIiAmJiBjb2x1bW5PckZ1bmN0aW9uLl90eXBlID09PSBcInNxbF9leHByZXNzaW9uXCIpIHtcbiAgICAgICAgc2VsZWN0Q2xhdXNlcy5wdXNoKFxuICAgICAgICAgIHRoaXMua25leC5yYXcoYCR7Y29sdW1uT3JGdW5jdGlvbi5fc3FsfSBBUyAke2FsaWFzfWAsIGNvbHVtbk9yRnVuY3Rpb24uX3BhcmFtcyksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uT3JGdW5jdGlvbiBhcyBzdHJpbmc7XG4gICAgICAgIGlmIChhbGlhcyA9PT0gY29sdW1uUGF0aCkge1xuICAgICAgICAgIHNlbGVjdENsYXVzZXMucHVzaChjb2x1bW5QYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2godGhpcy5rbmV4LnJlZihjb2x1bW5QYXRoKS5hcyhhbGlhcykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5rbmV4UXVlcnkuc2VsZWN0KHNlbGVjdENsYXVzZXMpO1xuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8vIFNFTEVDVCAqXG4gIHNlbGVjdEFsbCgpOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMsIFNlbGVjdEFsbFJlc3VsdDxUVGFibGVzPj4ge1xuICAgIHRoaXMua25leFF1ZXJ5LnNlbGVjdChcIipcIik7XG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLy8gRElTVElOQ1RcbiAgZGlzdGluY3Q8VENvbHVtbnMgZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PiguLi5jb2x1bW5zOiBUQ29sdW1uc1tdKTogdGhpcztcbiAgZGlzdGluY3QoLi4uY29sdW1uczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS5kaXN0aW5jdCguLi4oY29sdW1ucyBhcyBzdHJpbmdbXSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gQ0xFQVJcbiAgY2xlYXIoc3RhdGVtZW50OiBDbGVhclN0YXRlbWVudHMpOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS5jbGVhcihzdGF0ZW1lbnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8ga25leOyXkCDsl4bslrTshJwg7KeB7KCRIOq1rO2YhO2VqFxuICBjbGVhckpvaW4oYWxpYXM6IHN0cmluZyk6IHRoaXMge1xuICAgICh0aGlzLmtuZXhRdWVyeSBhcyBhbnkpLl9zdGF0ZW1lbnRzID0gKHRoaXMua25leFF1ZXJ5IGFzIGFueSkuX3N0YXRlbWVudHMuZmlsdGVyKChzOiBhbnkpID0+IHtcbiAgICAgIGlmIChcImpvaW5UeXBlXCIgaW4gcykge1xuICAgICAgICBjb25zdCBbX2FsaWFzLCBfdGFibGVdID0gT2JqZWN0LmVudHJpZXMocy50YWJsZSlbMF07XG4gICAgICAgIHJldHVybiBfYWxpYXMgIT09IGFsaWFzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBKT0lOOiDshJzruIzsv7zrpqwgKyBBbGlhc1xuICBqb2luPFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmcsIFRTdWJSZXN1bHQ+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogUHVyaTxUU2NoZW1hLCBhbnksIFRTdWJSZXN1bHQ+IH0sXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPixcbiAgICByaWdodDogYCR7VEpvaW5BbGlhc30uJHtDb2x1bW5LZXlzPFRTdWJSZXN1bHQ+fWAsXG4gICk6IFB1cmk8XG4gICAgVFNjaGVtYSxcbiAgICBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQ+LCAvLyDshJzruIzsv7zrpqzsnZggVFJlc3VsdFxuICAgIFRSZXN1bHRcbiAgPjtcbiAgLy8gSk9JTjog7YWM7J2067iUICsgQWxpYXNcbiAgam9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYSwgVEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZz4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBUSm9pblRhYmxlIH0sXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPixcbiAgICByaWdodDogYCR7VEpvaW5BbGlhc30uJHtDb2x1bW5LZXlzPFRTY2hlbWFbVEpvaW5UYWJsZV0+fWAsXG4gICk6IFB1cmk8XG4gICAgVFNjaGVtYSxcbiAgICBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTY2hlbWFbVEpvaW5UYWJsZV0+LCAvLyBUVGFibGVzIO2ZleyepSFcbiAgICBUUmVzdWx0XG4gID47XG4gIC8vIEpPSU46IO2FjOydtOu4lOuqhVxuICBqb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hPihcbiAgICB0YWJsZU5hbWU6IFRKb2luVGFibGUsXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPixcbiAgICByaWdodDogYCR7VEpvaW5UYWJsZSAmIHN0cmluZ30uJHtDb2x1bW5LZXlzPFRTY2hlbWFbVEpvaW5UYWJsZV0+fWAsXG4gICk6IFB1cmk8XG4gICAgVFNjaGVtYSxcbiAgICBUVGFibGVzICYgUmVjb3JkPFRKb2luVGFibGUsIFRTY2hlbWFbVEpvaW5UYWJsZV0+LCAvLyDthYzsnbTruJTrqoXsnbQg7YKkXG4gICAgVFJlc3VsdFxuICA+O1xuICAvLyBKT0lOOiDshJzruIzsv7zrpqwgKyBBbGlhcyArIOy9nOuwsVxuICBqb2luPFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmcsIFRTdWJSZXN1bHQ+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogUHVyaTxUU2NoZW1hLCBhbnksIFRTdWJSZXN1bHQ+IH0sXG4gICAgY2FsbGJhY2s6IChqOiBKb2luQ2xhdXNlR3JvdXA8VFRhYmxlcywgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQ+PikgPT4gdm9pZCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQ+LCBUUmVzdWx0PjtcbiAgLy8gSk9JTjog7YWM7J2067iUICsgQWxpYXMgKyDsvZzrsLFcbiAgam9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYSwgVEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZz4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBUSm9pblRhYmxlIH0sXG4gICAgY2FsbGJhY2s6IChqOiBKb2luQ2xhdXNlR3JvdXA8VFRhYmxlcywgUmVjb3JkPFRKb2luQWxpYXMsIFRTY2hlbWFbVEpvaW5UYWJsZV0+PikgPT4gdm9pZCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTY2hlbWFbVEpvaW5UYWJsZV0+LCBUUmVzdWx0PjtcbiAgLy8gSk9JTjog7YWM7J2067iU66qFICsg7L2c67CxXG4gIGpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWE+KFxuICAgIHRhYmxlTmFtZTogVEpvaW5UYWJsZSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXT4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXT4sIFRSZXN1bHQ+O1xuICAvLyBKT0lOIOyLpOygnCDqtaztmIRcbiAgam9pbih0YWJsZU5hbWVPclNwZWM6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9fY29tbW9uSm9pbihcImpvaW5cIiwgdGFibGVOYW1lT3JTcGVjLCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8vIExFRlQgSk9JTjog7ISc67iM7L+866asICsgQWxpYXNcbiAgbGVmdEpvaW48VEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZywgVFN1YlJlc3VsdD4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBQdXJpPFRTY2hlbWEsIGFueSwgVFN1YlJlc3VsdD4gfSxcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICAgIHJpZ2h0OiBgJHtUSm9pbkFsaWFzfS4ke0NvbHVtbktleXM8VFN1YlJlc3VsdD59YCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQgJiBMZWZ0Sm9pbmVkTWFya2VyPiwgVFJlc3VsdD47IC8vIOyEnOu4jOy/vOumrOydmCBUUmVzdWx0XG4gIC8vIExFRlQgSk9JTjog7YWM7J2067iUICsgQWxpYXNcbiAgLy8gRksgbnVsbGFibGUg7Jes67aA7JeQIOuUsOudvCDsnpDrj5nsnLzroZwgTGVmdEpvaW5lZE1hcmtlciDqsrDsoJVcbiAgbGVmdEpvaW48XG4gICAgVEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWEsXG4gICAgVEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZyxcbiAgICBUTGVmdCBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4sXG4gID4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBUSm9pblRhYmxlIH0sXG4gICAgbGVmdDogVExlZnQsXG4gICAgcmlnaHQ6IGAke1RKb2luQWxpYXN9LiR7Q29sdW1uS2V5czxUU2NoZW1hW1RKb2luVGFibGVdPn1gLFxuICApOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdICYgTGVmdEpvaW5NYXJrZXJGb3I8VFRhYmxlcywgVExlZnQ+PixcbiAgICBUUmVzdWx0XG4gID47XG4gIC8vIExFRlQgSk9JTjog7YWM7J2067iU66qFXG4gIGxlZnRKb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLCBUTGVmdCBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIHRhYmxlTmFtZTogVEpvaW5UYWJsZSxcbiAgICBsZWZ0OiBUTGVmdCxcbiAgICByaWdodDogYCR7VEpvaW5UYWJsZSAmIHN0cmluZ30uJHtDb2x1bW5LZXlzPFRTY2hlbWFbVEpvaW5UYWJsZV0+fWAsXG4gICk6IFB1cmk8XG4gICAgVFNjaGVtYSxcbiAgICBUVGFibGVzICYgUmVjb3JkPFRKb2luVGFibGUsIFRTY2hlbWFbVEpvaW5UYWJsZV0gJiBMZWZ0Sm9pbk1hcmtlckZvcjxUVGFibGVzLCBUTGVmdD4+LFxuICAgIFRSZXN1bHRcbiAgPjtcbiAgLy8gTEVGVCBKT0lOOiDshJzruIzsv7zrpqwgKyBBbGlhcyArIOy9nOuwsVxuICBsZWZ0Sm9pbjxUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nLCBUU3ViUmVzdWx0PihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFB1cmk8VFNjaGVtYSwgYW55LCBUU3ViUmVzdWx0PiB9LFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pbkFsaWFzLCBUU3ViUmVzdWx0Pj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU3ViUmVzdWx0ICYgTGVmdEpvaW5lZE1hcmtlcj4sIFRSZXN1bHQ+O1xuICAvLyBMRUZUIEpPSU46IO2FjOydtOu4lCArIEFsaWFzICsg7L2c67CxXG4gIGxlZnRKb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLCBUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nPihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFRKb2luVGFibGUgfSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXT4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXSAmIExlZnRKb2luZWRNYXJrZXI+LCBUUmVzdWx0PjtcbiAgLy8gTEVGVCBKT0lOOiDthYzsnbTruJTrqoUgKyDsvZzrsLFcbiAgbGVmdEpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWE+KFxuICAgIHRhYmxlTmFtZTogVEpvaW5UYWJsZSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXT4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXSAmIExlZnRKb2luZWRNYXJrZXI+LCBUUmVzdWx0PjtcbiAgLy8gTEVGVCBKT0lOIOyLpOygnCDqtaztmIRcbiAgbGVmdEpvaW4odGFibGVOYW1lT3JTcGVjOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fX2NvbW1vbkpvaW4oXCJsZWZ0Sm9pblwiLCB0YWJsZU5hbWVPclNwZWMsIC4uLmFyZ3MpO1xuICB9XG5cbiAgX19jb21tb25Kb2luKGpvaW5UeXBlOiBcImpvaW5cIiB8IFwibGVmdEpvaW5cIiwgdGFibGVOYW1lT3JTcGVjOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgaWYgKHR5cGVvZiB0YWJsZU5hbWVPclNwZWMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIC8vIENhc2UgMTogam9pbihcInBvc3RzXCIsIC4uLilcbiAgICAgIGNvbnN0IHRhYmxlTmFtZSA9IHRhYmxlTmFtZU9yU3BlYztcblxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgLy8gam9pbihcInBvc3RzXCIsIGNhbGxiYWNrKVxuICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFyZ3NbMF07XG4gICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXSh0YWJsZU5hbWUsIChqb2luQ2xhdXNlKSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2sobmV3IEpvaW5DbGF1c2VHcm91cChqb2luQ2xhdXNlKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gam9pbihcInBvc3RzXCIsIGxlZnQsIHJpZ2h0KVxuICAgICAgICBjb25zdCBbbGVmdCwgcmlnaHRdID0gYXJncztcbiAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHRhYmxlTmFtZSwgbGVmdCwgcmlnaHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRhYmxlTmFtZU9yU3BlYyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgLy8gQ2FzZSAyOiBqb2luKHsgYWxpYXM6IFwidGFibGVcIiB9LCAuLi4pIG9yIGpvaW4oeyBhbGlhczogc3VicXVlcnkgfSwgLi4uKVxuICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRhYmxlTmFtZU9yU3BlYyk7XG4gICAgICBpZiAoZW50cmllcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFibGUgc3BlYyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgZW50cnlcIik7XG4gICAgICB9XG4gICAgICBhc3NlcnQoZW50cmllc1swXSk7XG4gICAgICBjb25zdCBbW2FsaWFzLCBzcGVjXV0gPSBlbnRyaWVzO1xuXG4gICAgICBpZiAodHlwZW9mIHNwZWMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgLy8g7YWM7J2067iUOiBqb2luKHsgcDogXCJwb3N0c1wiIH0sIC4uLilcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAvLyBDYWxsYmFja1xuICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gYXJnc1swXTtcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0oeyBbYWxpYXNdOiBzcGVjIH0sIChqb2luQ2xhdXNlKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgSm9pbkNsYXVzZUdyb3VwKGpvaW5DbGF1c2UpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTaW1wbGVcbiAgICAgICAgICBjb25zdCBbbGVmdCwgcmlnaHRdID0gYXJncztcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0oeyBbYWxpYXNdOiBzcGVjIH0sIGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzcGVjIGluc3RhbmNlb2YgUHVyaSkge1xuICAgICAgICAvLyDshJzruIzsv7zrpqw6IGpvaW4oeyBzcTogc3VicXVlcnkgfSwgLi4uKVxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIC8vIENhbGxiYWNrXG4gICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBhcmdzWzBdO1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXShzcGVjLnJhd1F1ZXJ5KCkuYXMoYWxpYXMpLCAoam9pbkNsYXVzZSkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEpvaW5DbGF1c2VHcm91cChqb2luQ2xhdXNlKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2ltcGxlXG4gICAgICAgICAgY29uc3QgW2xlZnQsIHJpZ2h0XSA9IGFyZ3M7XG4gICAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHNwZWMucmF3UXVlcnkoKS5hcyhhbGlhcyksIGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0YWJsZSBzcGVjaWZpY2F0aW9uXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50c1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFOiDqsJ3ssrQgLSDsgqzsmqk6IC53aGVyZSh7IFwidS5pZFwiOiAxLCBcInUuc3RhdHVzXCI6IFwiYWN0aXZlXCIgfSlcbiAgd2hlcmUoY29uZGl0aW9uczogV2hlcmVDb25kaXRpb248VFRhYmxlcz4pOiB0aGlzO1xuICAvLyBXSEVSRTog7Lus65+8IC0g7IKs7JqpOiAud2hlcmUoXCJ1LmlkXCIsIDEpLCAud2hlcmUoXCJ1LmlkXCIsIG51bGwpXG4gIHdoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBXSEVSRTog7Lus65+8IC0g7IKs7JqpOiAud2hlcmUoXCJ1LmlkXCIsIFwiPlwiLCAxMCksIC53aGVyZShcInUuaWRcIiwgXCIhPVwiLCBudWxsKVxuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIG9wZXJhdG9yOiBXaGVyZU9wZXJhdG9yLFxuICAgIHZhbHVlOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gV0hFUkU6IFNRTCDtkZztmITsi50gLSDsgqzsmqk6IC53aGVyZShwdXJpLnJhdyhcIkNPTkNBVCh1Lm5hbWUsIHUuZW1haWwpXCIpLCBcImxpa2VcIiwgXCIldGVzdCVcIilcbiAgd2hlcmU8VENvbHVtbiBleHRlbmRzIEtuZXguUmF3Pihjb2x1bW46IFRDb2x1bW4sIG9wZXJhdG9yOiBXaGVyZU9wZXJhdG9yLCB2YWx1ZTogYW55KTogdGhpcztcbiAgLy8gV0hFUkU6IOy7rOufvCAtIOyCrOyaqTogLndoZXJlKFwidS5pZFwiLCBcImxpa2VcIiwgXCIldGVzdCVcIilcbiAgd2hlcmUoLi4uYXJnczogW2NvbHVtbk9yQ29uZGl0aW9uczogYW55LCBvcGVyYXRvck9yVmFsdWU/OiBhbnksIHZhbHVlPzogYW55XSk6IHRoaXMge1xuICAgIGNvbnN0IFtjb2x1bW5PckNvbmRpdGlvbnMsIG9wZXJhdG9yT3JWYWx1ZSwgdmFsdWVdID0gYXJncztcbiAgICBpZiAodHlwZW9mIGNvbHVtbk9yQ29uZGl0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmUoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKG9wZXJhdG9yT3JWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZU51bGwoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZShjb2x1bW5PckNvbmRpdGlvbnMsIG9wZXJhdG9yT3JWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBpZiAob3BlcmF0b3JPclZhbHVlID09PSBcIiE9XCIpIHtcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZU5vdE51bGwoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvck9yVmFsdWUgPT09IFwiPVwiKSB7XG4gICAgICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmVOdWxsKGNvbHVtbk9yQ29uZGl0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKGNvbHVtbk9yQ29uZGl0aW9ucywgb3BlcmF0b3JPclZhbHVlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKGNvbHVtbk9yQ29uZGl0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkUgSU5cbiAgd2hlcmVJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0PiB7XG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVJbihjb2x1bW4sIHZhbHVlcyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLy8gV0hFUkUgTk9UIElOXG4gIHdoZXJlTm90SW48VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZXM6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+W10sXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdD4ge1xuICAgIHRoaXMua25leFF1ZXJ5LndoZXJlTm90SW4oY29sdW1uLCB2YWx1ZXMpO1xuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8vIFdIRVJFIE1BVENIXG4gIHdoZXJlTWF0Y2g8VENvbHVtbiBleHRlbmRzIEZ1bGx0ZXh0Q29sdW1uczxUVGFibGVzPj4oY29sdW1uOiBUQ29sdW1uLCB2YWx1ZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYE1BVENIICgke1N0cmluZyhjb2x1bW4pfSkgQUdBSU5TVCAoPylgLCBbdmFsdWVdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQR3Jvb25nYSBGdWxsVGV4dCDsnbjrjbHsiqQg6rKA7IOJXG4gICAqIC0g7IKs7Jqp7ZWgIFBHcm9vbmdhIOyduOuNseyKpOyZgCDrj5nsnbztlZwg7Lus65+8IOq1rOyEseycvOuhnCDqsoDsg4ntlbTslbwg7J24642x7Iqk6rCAIOyCrOyaqeuQqeuLiOuLpC5cbiAgICpcbiAgICog64uo7J28IOy7rOufvCDqsoDsg4k6XG4gICAqIGBgYHNxbFxuICAgKiBXSEVSRSBuYW1lICZAfiAnc2VhcmNoJ1xuICAgKiBgYGBcbiAgICpcbiAgICog67O17ZWpIOy7rOufvCDqsoDsg4k6XG4gICAqIGBgYHNxbFxuICAgKiBXSEVSRSBBUlJBWVtuYW1lOjp0ZXh0LCBkZXNjcmlwdGlvbjo6dGV4dF0gJkB+ICdzZWFyY2gnXG4gICAqIGBgYFxuICAgKi9cbiAgd2hlcmVTZWFyY2g8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbiB8IFRDb2x1bW5bXSxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICB3ZWlnaHRzPzogbnVtYmVyW107IC8vIOygleyImCDrsLDsl7RcbiAgICB9LFxuICApOiB0aGlzIHtcbiAgICBjb25zdCB7IHdlaWdodHMgfSA9IG9wdGlvbnMgPz8ge307XG4gICAgY29uc3QgY29sdW1uRXhwciA9IEFycmF5LmlzQXJyYXkoY29sdW1uKVxuICAgICAgPyBgQVJSQVlbJHtjb2x1bW4ubWFwKChjKSA9PiBgJHtjfTo6dGV4dGApLmpvaW4oXCIsXCIpfV1gXG4gICAgICA6IGNvbHVtbjtcbiAgICBjb25zdCBwZ3Jvb25nYUNvbmRpdGlvbiA9IGBwZ3Jvb25nYV9jb25kaXRpb24oPyR7d2VpZ2h0cz8ubGVuZ3RoID8gYCwgd2VpZ2h0cyA9PiBBUlJBWVske3dlaWdodHMuam9pbihcIixcIil9XWAgOiBcIlwifSlgO1xuXG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYCR7Y29sdW1uRXhwcn0gJkB+ICR7cGdyb29uZ2FDb25kaXRpb259YCwgW3ZhbHVlXSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIEZVTExURVhUXG4gIHdoZXJlVHNTZWFyY2g8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogVHNRdWVyeU9wdGlvbnMgfCBUc1F1ZXJ5Q29uZmlnLFxuICApOiB0aGlzIHtcbiAgICBjb25zdCBvcHRzID1cbiAgICAgIHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID8gKHsgY29uZmlnOiBvcHRpb25zIH0gYXMgVHNRdWVyeU9wdGlvbnMpIDogKG9wdGlvbnMgPz8ge30pO1xuXG4gICAgY29uc3QgcGFyc2VyID0gb3B0cy5wYXJzZXIgPz8gXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiO1xuICAgIGNvbnN0IGNvbmZpZyA9IG9wdHMuY29uZmlnID8/IFwic2ltcGxlXCI7XG4gICAgY29uc3QgY29sdW1uRXhwciA9XG4gICAgICB0eXBlb2YgY29sdW1uID09PSBcIm9iamVjdFwiICYmIGNvbHVtbi5fdHlwZSA9PT0gXCJzcWxfZXhwcmVzc2lvblwiXG4gICAgICAgID8gY29sdW1uLl9zcWxcbiAgICAgICAgOiBTdHJpbmcoY29sdW1uKTtcblxuICAgIHRoaXMua25leFF1ZXJ5LndoZXJlUmF3KGAke2NvbHVtbkV4cHJ9IEBAICR7cGFyc2VyfSg/LCA/KWAsIFtjb25maWcsIHZhbHVlXSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3aGVyZUZ1enp5PFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+IHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIG9wZXJhdG9yPzogRnV6enlPcGVyYXRvcjtcbiAgICB9LFxuICApOiB0aGlzIHtcbiAgICBjb25zdCBvcGVyYXRvciA9IG5vcm1hbGl6ZUZ1enp5T3BlcmF0b3Iob3B0aW9ucz8ub3BlcmF0b3IpO1xuXG4gICAgaWYgKG9wZXJhdG9yID09PSBcIiVcIikge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYCR7Y29sdW1uLl9zcWx9ICR7b3BlcmF0b3J9ID9gLCBbLi4uY29sdW1uLl9wYXJhbXMsIHZhbHVlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgPz8gJHtvcGVyYXRvcn0gP2AsIFtjb2x1bW4sIHZhbHVlXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbHVtbiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYD8gJHtvcGVyYXRvcn0gJHtjb2x1bW4uX3NxbH1gLCBbdmFsdWUsIC4uLmNvbHVtbi5fcGFyYW1zXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlUmF3KGA/ICR7b3BlcmF0b3J9ID8/YCwgW3ZhbHVlLCBjb2x1bW5dKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBXSEVSRSBSQVdcbiAgd2hlcmVSYXcoc3FsOiBzdHJpbmcsIGJpbmRpbmdzPzogcmVhZG9ubHkgS25leC5SYXdCaW5kaW5nW10pOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhzcWwsIGJpbmRpbmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIOq0hO2YuCDqt7jro7ntlZFcbiAgd2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZSgoYnVpbGRlcikgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihidWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKGdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBvcldoZXJlR3JvdXAoY2FsbGJhY2s6IChnOiBXaGVyZUdyb3VwPFRUYWJsZXM+KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkub3JXaGVyZSgoYnVpbGRlcikgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihidWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKGdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9SREVSIEJZIChTcWxFeHByZXNzaW9u7Jy866Gc64+EIO2VoCDsiJgg7J6I7Ja07JW8IO2VqClcbiAgb3JkZXJCeTxUQ29sdW1uIGV4dGVuZHMgUmVzdWx0QXZhaWxhYmxlQ29sdW1uczxUVGFibGVzLCBUUmVzdWx0Pj4oXG4gICAgY29sdW1uOiBUQ29sdW1uIHwgU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4sXG4gICAgZGlyZWN0aW9uOiBcImFzY1wiIHwgXCJkZXNjXCIsXG4gICk6IHRoaXM7XG4gIG9yZGVyQnkoXG4gICAgY29sdW1uOiBzdHJpbmcgfCBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPixcbiAgICBkaXJlY3Rpb246IFwiYXNjXCIgfCBcImRlc2NcIiA9IFwiYXNjXCIsXG4gICk6IHRoaXMge1xuICAgIGlmICh0eXBlb2YgY29sdW1uID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmtuZXhRdWVyeS5vcmRlckJ5UmF3KGAke2NvbHVtbi5fc3FsfSAke2RpcmVjdGlvbn1gLCBjb2x1bW4uX3BhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua25leFF1ZXJ5Lm9yZGVyQnkoY29sdW1uLCBkaXJlY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiDrsqHthLAg7Jyg7IKs64+EIOqygOyDiSDshKTsoJVcbiAgICpcbiAgICogLSBTRUxFQ1Tsl5Agc2ltaWxhcml0eSDsu6zrn7wg7LaU6rCAXG4gICAqIC0gV0hFUkUgY29sIElTIE5PVCBOVUxMIOy2lOqwgFxuICAgKiAtIHRocmVzaG9sZOqwgCDsnojsnLzrqbQgV0hFUkUg7KGw6rG0IOy2lOqwgFxuICAgKiAtIOq4sOyhtCBPUkRFUiBCWeulvCBjbGVhcu2VmOqzoCDsm5Dsi5wg7Jew7IKw7J6Q66GcIOygleugrCAoSE5TVyDsnbjrjbHsiqQg7LWc7KCB7ZmUKVxuICAgKlxuICAgKiBAcGFyYW0gY29sdW1uIOuyoe2EsCDsu6zrn7wg6rK966GcXG4gICAqIEBwYXJhbSBlbWJlZGRpbmcg7L+866asIOyehOuyoOuUqSDrsqHthLBcbiAgICogQHBhcmFtIG9wdGlvbnMgbWV0aG9kLCB0aHJlc2hvbGQsIGFzIOuTsSDsmLXshZhcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBjb3NpbmUgc2ltaWxhcml0eSAo6riw67O46rCSKVxuICAgKiBxYi52ZWN0b3JTaW1pbGFyaXR5KFwiY29sdW1uTmFtZVwiLCBxdWVyeVZlY3Rvciwge1xuICAgKiAgIG1ldGhvZDogXCJjb3NpbmVcIixcbiAgICogICB0aHJlc2hvbGQ6IDAuNVxuICAgKiB9KTtcbiAgICpcbiAgICogLy8gTDIgZGlzdGFuY2VcbiAgICogcWIudmVjdG9yU2ltaWxhcml0eShcImNvbHVtbk5hbWVcIiwgcXVlcnlWZWN0b3IsIHtcbiAgICogICBtZXRob2Q6IFwibDJcIixcbiAgICogICB0aHJlc2hvbGQ6IDEuNSAgLy8g6rGw66as6rCAIDEuNSDsnbTtlZjsnbgg6rKw6rO866eMXG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBJbm5lciBwcm9kdWN0XG4gICAqIHFiLnZlY3RvclNpbWlsYXJpdHkoXCJjb2x1bW5OYW1lXCIsIHF1ZXJ5VmVjdG9yLCB7XG4gICAqICAgbWV0aG9kOiBcImlubmVyX3Byb2R1Y3RcIixcbiAgICogICB0aHJlc2hvbGQ6IDAuN1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICB2ZWN0b3JTaW1pbGFyaXR5KFxuICAgIGNvbHVtbjogVmVjdG9yQ29sdW1uczxUVGFibGVzPixcbiAgICBlbWJlZGRpbmc6IG51bWJlcltdLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIG1ldGhvZD86IFwiY29zaW5lXCIgfCBcImwyXCIgfCBcImlubmVyX3Byb2R1Y3RcIjtcbiAgICAgIHRocmVzaG9sZD86IG51bWJlcjtcbiAgICAgIGRpc3RpbmN0T24/OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+O1xuICAgIH0gPSB7fSxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0ICYgeyBzaW1pbGFyaXR5OiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHsgbWV0aG9kID0gXCJjb3NpbmVcIiwgdGhyZXNob2xkLCBkaXN0aW5jdE9uIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKFxuICAgICAgIUFycmF5LmlzQXJyYXkoZW1iZWRkaW5nKSB8fFxuICAgICAgZW1iZWRkaW5nLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgZW1iZWRkaW5nLnNvbWUoKHYpID0+ICFOdW1iZXIuaXNGaW5pdGUodikpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGVtYmVkZGluZyB2ZWN0b3I6IGV4cGVjdGVkIGEgbm9uLWVtcHR5IGFycmF5IG9mIGZpbml0ZSBudW1iZXJzXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHZlY3RvckxpdGVyYWwgPSBKU09OLnN0cmluZ2lmeShlbWJlZGRpbmcubWFwKCh2KSA9PiBOdW1iZXIodikpKTtcbiAgICBjb25zdCBvcGVyYXRvciA9IHsgY29zaW5lOiBcIjw9PlwiLCBsMjogXCI8LT5cIiwgaW5uZXJfcHJvZHVjdDogXCI8Iz5cIiB9W21ldGhvZF07XG5cbiAgICAvLyBtZXRob2Trs4Qg7Jew7IKw7J6QIOuwjyBzaW1pbGFyaXR5IOqzhOyCsOyLnVxuICAgIC8vIC0gY29zaW5lOiA8PT4gKGNvc2luZSBkaXN0YW5jZSwgMH4yKSwgc2ltaWxhcml0eSA9IDEgLSBkaXN0YW5jZVxuICAgIC8vIC0gbDI6IDwtPiAoZXVjbGlkZWFuIGRpc3RhbmNlKSwgc2ltaWxhcml0eSA9IGRpc3RhbmNlICjrgq7snYTsiJjroZ0g7Jyg7IKsKVxuICAgIC8vIC0gaW5uZXJfcHJvZHVjdDogPCM+IChuZWdhdGl2ZSBpbm5lciBwcm9kdWN0KSwgc2ltaWxhcml0eSA9IC1kaXN0YW5jZSAo64aS7J2E7IiY66GdIOycoOyCrClcbiAgICBjb25zdCBzaW1pbGFyaXR5RXhwciA9XG4gICAgICBtZXRob2QgPT09IFwiY29zaW5lXCJcbiAgICAgICAgPyB0aGlzLmtuZXgucmF3KGAxIC0gKD8/ICR7b3BlcmF0b3J9ID86OnZlY3RvcikgYXMgc2ltaWxhcml0eWAsIFtjb2x1bW4sIHZlY3RvckxpdGVyYWxdKVxuICAgICAgICA6IG1ldGhvZCA9PT0gXCJsMlwiXG4gICAgICAgICAgPyB0aGlzLmtuZXgucmF3KGA/PyAke29wZXJhdG9yfSA/Ojp2ZWN0b3IgYXMgc2ltaWxhcml0eWAsIFtjb2x1bW4sIHZlY3RvckxpdGVyYWxdKVxuICAgICAgICAgIDogdGhpcy5rbmV4LnJhdyhgLSg/PyAke29wZXJhdG9yfSA/Ojp2ZWN0b3IpIGFzIHNpbWlsYXJpdHlgLCBbY29sdW1uLCB2ZWN0b3JMaXRlcmFsXSk7XG5cbiAgICAvLyBXSEVSRSBOT1QgTlVMTFxuICAgIHRoaXMua25leFF1ZXJ5LndoZXJlTm90TnVsbChjb2x1bW4pO1xuXG4gICAgLy8g6riw7KG0IE9SREVSIEJZIGNsZWFyXG4gICAgdGhpcy5rbmV4UXVlcnkuY2xlYXIoXCJvcmRlclwiKTtcbiAgICBpZiAoZGlzdGluY3RPbikge1xuICAgICAgLy8gRElTVElOQ1QgT07snYAgU0VMRUNUIOygiOydmCDrp6gg7JWe7JeQIOyZgOyVvCDtlZjrr4DroZwsIOq4sOyhtCBzZWxlY3Qoc3Vic2V0IO2VhOuTnOuTpCnrpbwg67O07KG0IO2bhCBjbGVhcu2VmOqzoCDri6Tsi5wg7LaU6rCAXG4gICAgICBjb25zdCBleGlzdGluZ1N1YnNldENvbHMgPSAodGhpcy5rbmV4UXVlcnkgYXMgYW55KS5fc3RhdGVtZW50c1xuICAgICAgICAuZmlsdGVyKChzOiBhbnkpID0+IHMuZ3JvdXBpbmcgPT09IFwiY29sdW1uc1wiKVxuICAgICAgICAuZmxhdE1hcCgoczogYW55KSA9PiBzLnZhbHVlKTtcbiAgICAgIHRoaXMua25leFF1ZXJ5LmNsZWFyKFwic2VsZWN0XCIpO1xuICAgICAgdGhpcy5rbmV4UXVlcnkuc2VsZWN0KHRoaXMua25leC5yYXcoYERJU1RJTkNUIE9OICg/PykgPz9gLCBbZGlzdGluY3RPbiwgZGlzdGluY3RPbl0pKTtcbiAgICAgIGV4aXN0aW5nU3Vic2V0Q29scy5tYXAoKGNvbDogYW55KSA9PiB0aGlzLmtuZXhRdWVyeS5zZWxlY3QoY29sKSk7XG4gICAgICB0aGlzLmtuZXhRdWVyeS5zZWxlY3Qoc2ltaWxhcml0eUV4cHIpO1xuICAgICAgdGhpcy5rbmV4UXVlcnkub3JkZXJCeVJhdyhgPz8sID8/ICR7b3BlcmF0b3J9ID86OnZlY3RvcmAsIFtcbiAgICAgICAgZGlzdGluY3RPbixcbiAgICAgICAgY29sdW1uLFxuICAgICAgICB2ZWN0b3JMaXRlcmFsLFxuICAgICAgXSk7XG5cbiAgICAgIHRoaXMua25leFF1ZXJ5ID0gdGhpcy5rbmV4XG4gICAgICAgIC5mcm9tKHRoaXMua25leFF1ZXJ5LmFzKFwiZGlzdGluY3RfdmVjdG9yc1wiKSlcbiAgICAgICAgLnNlbGVjdChcIipcIilcbiAgICAgICAgLm9yZGVyQnkoXCJzaW1pbGFyaXR5XCIsIFwiZGVzY1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rbmV4UXVlcnkuc2VsZWN0KHNpbWlsYXJpdHlFeHByKTtcbiAgICAgIHRoaXMua25leFF1ZXJ5Lm9yZGVyQnlSYXcoYD8/ICR7b3BlcmF0b3J9ID86OnZlY3RvcmAsIFtjb2x1bW4sIHZlY3RvckxpdGVyYWxdKTtcbiAgICB9XG5cbiAgICAvLyB0aHJlc2hvbGRcbiAgICBpZiAodHlwZW9mIHRocmVzaG9sZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodGhyZXNob2xkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmVjdG9yU2ltaWxhcml0eSB0aHJlc2hvbGQ6ICR7dGhyZXNob2xkfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGlzdGluY3RPbikge1xuICAgICAgICBjb25zdCB0aHJlc2hvbGRPcCA9IG1ldGhvZCA9PT0gXCJsMlwiID8gXCI8PVwiIDogXCI+PVwiO1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZShcInNpbWlsYXJpdHlcIiwgdGhyZXNob2xkT3AsIHRocmVzaG9sZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0aHJlc2hvbGRWYWx1ZSA9XG4gICAgICAgICAgbWV0aG9kID09PSBcImNvc2luZVwiID8gMSAtIHRocmVzaG9sZCA6IG1ldGhvZCA9PT0gXCJpbm5lcl9wcm9kdWN0XCIgPyAtdGhyZXNob2xkIDogdGhyZXNob2xkO1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgPz8gJHtvcGVyYXRvcn0gPzo6dmVjdG9yIDw9ID9gLCBbXG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIHZlY3RvckxpdGVyYWwsXG4gICAgICAgICAgdGhyZXNob2xkVmFsdWUsXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8vIOq4sOuzuCDsv7zrpqwg66mU7ISc65Oc65OkXG4gIGxpbWl0KGNvdW50OiBudW1iZXIpOiB0aGlzIHtcbiAgICBpZiAoY291bnQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxpbWl0OiBtdXN0IGJlID49IDBcIik7XG4gICAgfVxuICAgIHRoaXMua25leFF1ZXJ5LmxpbWl0KGNvdW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9mZnNldChjb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgaWYgKGNvdW50IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBvZmZzZXQ6IG11c3QgYmUgPj0gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5rbmV4UXVlcnkub2Zmc2V0KGNvdW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEdST1VQIEJZXG4gIGdyb3VwQnk8VENvbHVtbnMgZXh0ZW5kcyBSZXN1bHRBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXMsIFRSZXN1bHQ+PiguLi5jb2x1bW5zOiBUQ29sdW1uc1tdKTogdGhpcztcbiAgZ3JvdXBCeSguLi5jb2x1bW5zOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5Lmdyb3VwQnkoLi4uKGNvbHVtbnMgYXMgc3RyaW5nW10pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEhBVklOR1xuICBoYXZpbmcoY29uZGl0aW9uOiBzdHJpbmcpOiB0aGlzO1xuICBoYXZpbmc8VENvbHVtbiBleHRlbmRzIFJlc3VsdEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcywgVFJlc3VsdD4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuICAgIHZhbHVlOiBhbnksXG4gICk6IHRoaXM7XG4gIC8vIEhBVklORyDqtaztmIRcbiAgaGF2aW5nKC4uLmNvbmRpdGlvbnM6IGFueVtdKTogdGhpcyB7XG4gICAgaWYgKGNvbmRpdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBoYXZpbmcoXCJDT1VOVCgqKSA+IDEwXCIpXG4gICAgICB0aGlzLmtuZXhRdWVyeS5oYXZpbmcodGhpcy5rbmV4LnJhdyhjb25kaXRpb25zWzBdKSk7XG4gICAgfSBlbHNlIGlmIChjb25kaXRpb25zLmxlbmd0aCA9PT0gMykge1xuICAgICAgLy8gaGF2aW5nKFwiY291bnRcIiwgXCI+XCIsIDEwKVxuICAgICAgdGhpcy5rbmV4UXVlcnkuaGF2aW5nKFxuICAgICAgICB0aGlzLmtuZXgucmF3KGNvbmRpdGlvbnNbMF0pLFxuICAgICAgICBjb25kaXRpb25zWzFdLFxuICAgICAgICB0aGlzLmtuZXgucmF3KGNvbmRpdGlvbnNbMl0pLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBoYXZpbmcgYXJndW1lbnRzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOyLpO2WiSDrqZTshJzrk5zrk6QgLSB0aGVuYWJsZSDqtaztmIRcbiAgdGhlbjxUUmVzdWx0MSA9IEV4cGFuZDxUUmVzdWx0PltdLCBUUmVzdWx0MiA9IG5ldmVyPihcbiAgICBvbmZ1bGZpbGxlZD86ICgodmFsdWU6IEV4cGFuZDxUUmVzdWx0PltdKSA9PiBUUmVzdWx0MSB8IFByb21pc2VMaWtlPFRSZXN1bHQxPikgfCBudWxsLFxuICAgIG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogYW55KSA9PiBUUmVzdWx0MiB8IFByb21pc2VMaWtlPFRSZXN1bHQyPikgfCBudWxsLFxuICApOiBQcm9taXNlPFRSZXN1bHQxIHwgVFJlc3VsdDI+IHtcbiAgICBOYWl0ZS50KFwicHVyaTpleGVjdXRlZC1xdWVyeVwiLCB0aGlzLnRvUXVlcnkoKSk7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LnRoZW4ob25mdWxmaWxsZWQgYXMgYW55LCBvbnJlamVjdGVkKTtcbiAgfVxuICBjYXRjaDxUUmVzdWx0MiA9IG5ldmVyPihcbiAgICBvbnJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgbnVsbCxcbiAgKTogUHJvbWlzZTxUUmVzdWx0IHwgVFJlc3VsdDI+IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkuY2F0Y2gob25yZWplY3RlZCk7XG4gIH1cbiAgZmluYWxseShvbmZpbmFsbHk/OiAoKCkgPT4gdm9pZCkgfCBudWxsKTogUHJvbWlzZTxUUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LmZpbmFsbHkob25maW5hbGx5KTtcbiAgfVxuXG4gIC8vIO2VmOuCmOunjCDsv7zrpqxcbiAgZmlyc3QoKTogUmVzb2x2ZWRQdXJpPEV4cGFuZDxUUmVzdWx0PiwgbmV2ZXI+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5maXJzdCgpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG5cbiAgLy8g7L+866as7ZWcIOugiOy9lOuTnOyXkOyEnCDtirnsoJUg7Lus65+866eMIOy2lOy2nO2VnCDrsLDsl7Qg66as7YS0XG4gIHBsdWNrPFRDb2x1bW4gZXh0ZW5kcyBrZXlvZiBUUmVzdWx0IHwgUmVzdWx0QXZhaWxhYmxlQ29sdW1uczxUVGFibGVzLCBUUmVzdWx0Pj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICApOiBSZXNvbHZlZFB1cmk8XG4gICAgVENvbHVtbiBleHRlbmRzIGtleW9mIFRSZXN1bHRcbiAgICAgID8gVFJlc3VsdFtUQ29sdW1uXVtdXG4gICAgICA6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+W10sXG4gICAgbmV2ZXJcbiAgPiB7XG4gICAgdGhpcy5rbmV4UXVlcnkucGx1Y2soY29sdW1uIGFzIHN0cmluZyk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyBJTlNFUlQgOiDri6jsnbwg6rCd7LK0XG4gIGluc2VydChcbiAgICBkYXRhOiBJbnNlcnREYXRhPFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+LFxuICApOiBSZXNvbHZlZFB1cmk8SW5zZXJ0UmVzdWx0LCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PjtcbiAgLy8gSU5TRVJUOiDrsLDsl7RcbiAgaW5zZXJ0KFxuICAgIGRhdGE6IEluc2VydERhdGE8U2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj5bXSxcbiAgKTogUmVzb2x2ZWRQdXJpPEluc2VydFJlc3VsdCwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj47XG4gIC8vIElOU0VSVCDsi6TsoJwg6rWs7ZiEXG4gIGluc2VydChcbiAgICByYXdEYXRhOiBJbnNlcnREYXRhPFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+IHwgSW5zZXJ0RGF0YTxTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PltdLFxuICApOiBSZXNvbHZlZFB1cmk8SW5zZXJ0UmVzdWx0LCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgLy8gSlNPTiDsu6zrn7wgc3RyaW5naWZ5IOuhnOyngeydhCDrqZTshJzrk5zroZwg67aE66as7ZWY7JesIOykkeuztSDsoJzqsbBcbiAgICBjb25zdCByZWZpbmVkRGF0YSA9IHRoaXMucmVmaW5lSnNvbkNvbHVtbnMocmF3RGF0YSk7XG4gICAgdGhpcy5rbmV4UXVlcnkuaW5zZXJ0KHJlZmluZWREYXRhKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuXG4gIC8vIFVQREFURVxuICB1cGRhdGUocmF3RGF0YTogV2hlcmVDb25kaXRpb248VFRhYmxlcz4pOiBSZXNvbHZlZFB1cmk8bnVtYmVyLCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgLy8gSlNPTiDsu6zrn7wgc3RyaW5naWZ5IOuhnOyngeydhCDrqZTshJzrk5zroZwg67aE66as7ZWY7JesIOykkeuztSDsoJzqsbBcbiAgICBjb25zdCByZWZpbmVkRGF0YSA9IHRoaXMucmVmaW5lSnNvbkNvbHVtbnMocmF3RGF0YSk7XG4gICAgdGhpcy5rbmV4UXVlcnkudXBkYXRlKHJlZmluZWREYXRhKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBKU09OIOy7rOufvOyXkCDrjIDtlbQgc3RyaW5naWZ5IOyymOumrOulvCDsiJjtlontlZjripQg64K067aAIOuplOyEnOuTnOyeheuLiOuLpC5cbiAgICogb2JqZWN0IOuYkOuKlCBvYmplY3Qg67Cw7Je07J2EIOuwm+qzoCwgSlNPTiDsu6zrn7zsnbQg7J6I7Jy866m0IOyngeugrO2ZlO2VmOyXrCDrsJjtmZjtlanri4jri6QuXG4gICAqIOyngeygkSDqsJLsnYQg67OA6rK97ZWY66+A66GcIHNpZGUgZWZmZWN06rCAIOyeiOyKteuLiOuLpC5cbiAgICovXG4gIHByaXZhdGUgcmVmaW5lSnNvbkNvbHVtbnMoXG4gICAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICApOiB0eXBlb2YgZGF0YSB7XG4gICAgLy8gdGFibGVTcGVj7J2064KYIGpzb25Db2x1bW5zIOyXhuuKlCDqsr3smrAg67CU66GcIOuwmO2ZmFxuICAgIGlmICghdGhpcy50YWJsZVNwZWMgfHwgIXRoaXMudGFibGVTcGVjLmpzb25Db2x1bW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgLy8g65Ox66Gd65CcIFRhYmxlU3BlY+ydhCDthrXtlbQgSlNPTuy7rOufvCDrqqnroZ3snYQg6rCA7KC47JmAIEpTT04uc3RyaW5naWZ5IOyymOumrFxuICAgIGNvbnN0IGpzb25Db2x1bW5zID0gdGhpcy50YWJsZVNwZWMuanNvbkNvbHVtbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGpzb25Db2x1bW5zKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW2NvbHVtbl07XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGl0ZW1bY29sdW1uXSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YganNvbkNvbHVtbnMpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW2NvbHVtbl07XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgZGF0YVtjb2x1bW5dID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLy8gSW5jcmVtZW50XG4gIGluY3JlbWVudDxUQ29sdW1uIGV4dGVuZHMgTnVtZXJpY0NvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogbnVtYmVyLFxuICApOiBSZXNvbHZlZFB1cmk8bnVtYmVyLCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgaWYgKHZhbHVlIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY3JlbWVudCB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXCIpO1xuICAgIH1cbiAgICB0aGlzLmtuZXhRdWVyeS5pbmNyZW1lbnQoY29sdW1uLCB2YWx1ZSk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cbiAgLy8gRGVjcmVtZW50XG4gIGRlY3JlbWVudDxUQ29sdW1uIGV4dGVuZHMgTnVtZXJpY0NvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogbnVtYmVyLFxuICApOiBSZXNvbHZlZFB1cmk8bnVtYmVyLCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgaWYgKHZhbHVlIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3JlbWVudCB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwXCIpO1xuICAgIH1cbiAgICB0aGlzLmtuZXhRdWVyeS5kZWNyZW1lbnQoY29sdW1uLCB2YWx1ZSk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyBERUxFVEVcbiAgZGVsZXRlKCk6IFJlc29sdmVkUHVyaTxudW1iZXIsIFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5kZWxldGUoKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuXG4gIC8vIO2ZleyduCDsv7zrpqwg66as7YS0XG4gIHRvUXVlcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkudG9RdWVyeSgpO1xuICB9XG5cbiAgLy8g7L+866asIOuUlOuyhOq5hSDroZzqt7gg7Lac66ClXG4gIGRlYnVnKCk6IHRoaXMge1xuICAgIGNvbnNvbGUubG9nKGAke2NoYWxrLmN5YW4oXCJbUHVyaSBEZWJ1Z11cIil9ICR7Y2hhbGsueWVsbG93KHRoaXMudG9RdWVyeSgpKX1gKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNsb25lKCk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdD4ge1xuICAgIC8vICdkdWFsJ+ydgCDrjZTrr7gg7YWM7J2067iU7J2066mwLCDrsJTroZwg7JWE656YIOykhOyXkOyEnCBrbmV4UXVlcnnqsIAg642u7Ja07JSM7JuM7KeR64uI64ukLlxuICAgIGNvbnN0IG5ld1B1cmkgPSBuZXcgUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0Pih0aGlzLmtuZXgsIFwiZHVhbFwiKTtcbiAgICBuZXdQdXJpLmtuZXhRdWVyeSA9IHRoaXMua25leFF1ZXJ5LmNsb25lKCk7XG4gICAgcmV0dXJuIG5ld1B1cmk7XG4gIH1cblxuICBmb3JtYXRTUUwodW5mb3JtYXR0ZWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gU1FMIOyYiOyVveyWtCDrqqnroZ1cbiAgICBjb25zdCBrZXl3b3JkcyA9IFtcbiAgICAgIFwiU0VMRUNUXCIsXG4gICAgICBcIkZST01cIixcbiAgICAgIFwiV0hFUkVcIixcbiAgICAgIFwiSU5TRVJUXCIsXG4gICAgICBcIklOVE9cIixcbiAgICAgIFwiVkFMVUVTXCIsXG4gICAgICBcIlVQREFURVwiLFxuICAgICAgXCJERUxFVEVcIixcbiAgICAgIFwiQ1JFQVRFXCIsXG4gICAgICBcIlRBQkxFXCIsXG4gICAgICBcIkFMVEVSXCIsXG4gICAgICBcIkRST1BcIixcbiAgICAgIFwiSk9JTlwiLFxuICAgICAgXCJPTlwiLFxuICAgICAgXCJJTk5FUlwiLFxuICAgICAgXCJMRUZUXCIsXG4gICAgICBcIlJJR0hUXCIsXG4gICAgICBcIkZVTExcIixcbiAgICAgIFwiT1VURVJcIixcbiAgICAgIFwiR1JPVVBcIixcbiAgICAgIFwiQllcIixcbiAgICAgIFwiT1JERVJcIixcbiAgICAgIFwiSEFWSU5HXCIsXG4gICAgICBcIkRJU1RJTkNUXCIsXG4gICAgICBcIkxJTUlUXCIsXG4gICAgICBcIk9GRlNFVFwiLFxuICAgICAgXCJBU1wiLFxuICAgICAgXCJBTkRcIixcbiAgICAgIFwiT1JcIixcbiAgICAgIFwiTk9UXCIsXG4gICAgICBcIklOXCIsXG4gICAgICBcIkxJS0VcIixcbiAgICAgIFwiSVNcIixcbiAgICAgIFwiTlVMTFwiLFxuICAgICAgXCJDQVNFXCIsXG4gICAgICBcIldIRU5cIixcbiAgICAgIFwiVEhFTlwiLFxuICAgICAgXCJFTFNFXCIsXG4gICAgICBcIkVORFwiLFxuICAgICAgXCJVTklPTlwiLFxuICAgICAgXCJBTExcIixcbiAgICAgIFwiRVhJU1RTXCIsXG4gICAgICBcIkJFVFdFRU5cIixcbiAgICBdO1xuXG4gICAgbGV0IGZvcm1hdHRlZCA9IHVuZm9ybWF0dGVkO1xuXG4gICAgLy8g7JiI7JW97Ja066W8IOuMgOusuOyekOuhnCDrs4DtmZhcbiAgICBrZXl3b3Jkcy5mb3JFYWNoKChrZXl3b3JkKSA9PiB7XG4gICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxiJHtrZXl3b3JkfVxcXFxiYCwgXCJnaVwiKTtcbiAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKHJlZ2V4LCBrZXl3b3JkLnRvVXBwZXJDYXNlKCkpO1xuICAgIH0pO1xuXG4gICAgLy8g7KO87JqUIOygiCDslZ7sl5Ag7KSE67CU6r+IIOy2lOqwgFxuICAgIGNvbnN0IG1ham9yQ2xhdXNlcyA9IFtcbiAgICAgIFwiU0VMRUNUXCIsXG4gICAgICBcIkZST01cIixcbiAgICAgIFwiV0hFUkVcIixcbiAgICAgIFwiR1JPVVAgQllcIixcbiAgICAgIFwiT1JERVIgQllcIixcbiAgICAgIFwiSEFWSU5HXCIsXG4gICAgICBcIkxJTUlUXCIsXG4gICAgICBcIlVOSU9OXCIsXG4gICAgXTtcbiAgICBtYWpvckNsYXVzZXMuZm9yRWFjaCgoY2xhdXNlKSA9PiB7XG4gICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxzKygke2NsYXVzZX0pXFxcXHMrYCwgXCJnaVwiKTtcbiAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKHJlZ2V4LCBgXFxuJHtjbGF1c2UudG9VcHBlckNhc2UoKX0gYCk7XG4gICAgfSk7XG5cbiAgICAvLyBKT0lOIOygiCDsspjrpqxcbiAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvXFxzKygoPzpJTk5FUnxMRUZUfFJJR0hUfEZVTEwgT1VURVIpXFxzKyk/Sk9JTlxccysvZ2ksIFwiXFxuJDFKT0lOIFwiKTtcblxuICAgIC8vIEFORCwgT1Ig7KGw6rG0IOyymOumrFxuICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKC9cXHMrKEFORHxPUilcXHMrL2dpLCBcIlxcbiAgJDEgXCIpO1xuXG4gICAgLy8g6rSE7Zi4IOyymOumrCDrsI8g65Ok7Jes7JOw6riwXG4gICAgY29uc3QgbGluZXMgPSBmb3JtYXR0ZWQuc3BsaXQoXCJcXG5cIik7XG4gICAgY29uc3QgaW5kZW50ZWRMaW5lcyA9IFtdO1xuICAgIGxldCBpbmRlbnRMZXZlbCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKCk7XG4gICAgICBpZiAoIXRyaW1tZWRMaW5lKSBjb250aW51ZTtcblxuICAgICAgLy8g64ur64qUIOq0hO2YuOqwgCDsnojsnLzrqbQg65Ok7Jes7JOw6riwIOugiOuyqCDqsJDshoxcbiAgICAgIGNvbnN0IGNsb3NpbmdQYXJlbnMgPSAodHJpbW1lZExpbmUubWF0Y2goL1xcKS9nKSB8fCBbXSkubGVuZ3RoO1xuICAgICAgY29uc3Qgb3BlbmluZ1BhcmVucyA9ICh0cmltbWVkTGluZS5tYXRjaCgvXFwoL2cpIHx8IFtdKS5sZW5ndGg7XG5cbiAgICAgIGlmIChjbG9zaW5nUGFyZW5zID4gMCAmJiBvcGVuaW5nUGFyZW5zID09PSAwKSB7XG4gICAgICAgIGluZGVudExldmVsID0gTWF0aC5tYXgoMCwgaW5kZW50TGV2ZWwgLSBjbG9zaW5nUGFyZW5zKTtcbiAgICAgIH1cblxuICAgICAgLy8g7ZiE7J6sIOuTpOyXrOyTsOq4sCDsoIHsmqlcbiAgICAgIGNvbnN0IGluZGVudCA9IFwiICBcIi5yZXBlYXQoaW5kZW50TGV2ZWwpO1xuICAgICAgaW5kZW50ZWRMaW5lcy5wdXNoKGluZGVudCArIHRyaW1tZWRMaW5lKTtcblxuICAgICAgLy8g7Jes64qUIOq0hO2YuOqwgCDsnojsnLzrqbQg65Ok7Jes7JOw6riwIOugiOuyqCDspp3qsIBcbiAgICAgIGlmIChvcGVuaW5nUGFyZW5zID4gY2xvc2luZ1BhcmVucykge1xuICAgICAgICBpbmRlbnRMZXZlbCArPSBvcGVuaW5nUGFyZW5zIC0gY2xvc2luZ1BhcmVucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZW50ZWRMaW5lcy5qb2luKFwiXFxuXCIpLnRyaW0oKTtcbiAgfVxuXG4gIHJhdyhzcWw6IHN0cmluZyk6IEtuZXguUmF3IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4LnJhdyhzcWwpO1xuICB9XG5cbiAgLy8gS25leCDsv7zrpqwg67mM642UIOyngeygkSDsoJHqt7xcbiAgcmF3UXVlcnkoKTogS25leC5RdWVyeUJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgV2hlcmVHcm91cDxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJ1aWxkZXI6IEtuZXguUXVlcnlCdWlsZGVyKSB7fVxuXG4gIC8vIHdoZXJlIOuplOyEnOuTnOuTpFxuICB3aGVyZShjb25kaXRpb25zOiBXaGVyZUNvbmRpdGlvbjxUVGFibGVzPik6IHRoaXM7XG4gIHdoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIG9wZXJhdG9yOiBXaGVyZU9wZXJhdG9yLFxuICAgIHZhbHVlOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgd2hlcmUoLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIud2hlcmUoYXJnc1swXSwgLi4uYXJncy5zbGljZSgxKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyB3aGVyZUluIC8gd2hlcmVOb3RJbiDrqZTshJzrk5zrk6RcbiAgd2hlcmVJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogdGhpcztcbiAgd2hlcmVJbiguLi5hcmdzOiBhbnlbXSk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci53aGVyZUluKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2hlcmVOb3RJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogdGhpcztcbiAgd2hlcmVOb3RJbiguLi5hcmdzOiBhbnlbXSk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci53aGVyZU5vdEluKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gb3JXaGVyZSDrqZTshJzrk5zrk6RcbiAgb3JXaGVyZShjb25kaXRpb25zOiBXaGVyZUNvbmRpdGlvbjxUVGFibGVzPik6IHRoaXM7XG4gIG9yV2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9yV2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogV2hlcmVPcGVyYXRvcixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIG9yV2hlcmUoLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZShhcmdzWzBdLCAuLi5hcmdzLnNsaWNlKDEpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIG9yV2hlcmVJbiAvIG9yV2hlcmVOb3RJbiDrqZTshJzrk5zrk6RcbiAgb3JXaGVyZUluPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWVzOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPltdLFxuICApOiB0aGlzO1xuICBvcldoZXJlSW4oLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZUluKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3JXaGVyZU5vdEluPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWVzOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPltdLFxuICApOiB0aGlzO1xuICBvcldoZXJlTm90SW4oLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZU5vdEluKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkUgTUFUQ0hcbiAgd2hlcmVNYXRjaDxUQ29sdW1uIGV4dGVuZHMgRnVsbHRleHRDb2x1bW5zPFRUYWJsZXM+Pihjb2x1bW46IFRDb2x1bW4sIHZhbHVlOiBzdHJpbmcpOiB0aGlzO1xuICB3aGVyZU1hdGNoKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgdGhpcy5idWlsZGVyLndoZXJlUmF3KGBNQVRDSCAoJHtTdHJpbmcoYXJnc1swXSl9KSBBR0FJTlNUICg/KWAsIFthcmdzWzFdXSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvcldoZXJlTWF0Y2g8VENvbHVtbiBleHRlbmRzIEZ1bGx0ZXh0Q29sdW1uczxUVGFibGVzPj4oY29sdW1uOiBUQ29sdW1uLCB2YWx1ZTogc3RyaW5nKTogdGhpcztcbiAgb3JXaGVyZU1hdGNoKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgdGhpcy5idWlsZGVyLm9yV2hlcmVSYXcoYE1BVENIICgke1N0cmluZyhhcmdzWzBdKX0pIEFHQUlOU1QgKD8pYCwgW2FyZ3NbMV1dKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIFNFQVJDSFxuICB3aGVyZVNlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uIHwgVENvbHVtbltdLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHdlaWdodHM/OiBudW1iZXJbXTsgLy8g7KCV7IiYIOuwsOyXtFxuICAgIH0sXG4gICk6IHRoaXM7XG4gIHdoZXJlU2VhcmNoKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgY29uc3QgeyB3ZWlnaHRzIH0gPSBhcmdzWzJdID8/IHt9O1xuICAgIGNvbnN0IGNvbHVtbkV4cHIgPSBBcnJheS5pc0FycmF5KGFyZ3NbMF0pXG4gICAgICA/IGBBUlJBWVske2FyZ3NbMF0ubWFwKChjKSA9PiBgJHtjfTo6dGV4dGApLmpvaW4oXCIsXCIpfV1gXG4gICAgICA6IGFyZ3NbMF07XG4gICAgY29uc3QgcGdyb29uZ2FDb25kaXRpb24gPSBgcGdyb29uZ2FfY29uZGl0aW9uKD8ke3dlaWdodHM/Lmxlbmd0aCA/IGAsIHdlaWdodHMgPT4gQVJSQVlbJHt3ZWlnaHRzLmpvaW4oXCIsXCIpfV1gIDogXCJcIn0pYDtcbiAgICB0aGlzLmJ1aWxkZXIud2hlcmVSYXcoYCR7Y29sdW1uRXhwcn0gJkB+ICR7cGdyb29uZ2FDb25kaXRpb259YCwgW2FyZ3NbMV1dKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3JXaGVyZVNlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uIHwgVENvbHVtbltdLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHdlaWdodHM/OiBudW1iZXJbXTsgLy8g7KCV7IiYIOuwsOyXtFxuICAgIH0sXG4gICk6IHRoaXM7XG4gIG9yV2hlcmVTZWFyY2goLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICBjb25zdCB7IHdlaWdodHMgfSA9IGFyZ3NbMl0gPz8ge307XG4gICAgY29uc3QgY29sdW1uRXhwciA9IEFycmF5LmlzQXJyYXkoYXJnc1swXSlcbiAgICAgID8gYEFSUkFZWyR7YXJnc1swXS5tYXAoKGMpID0+IGAke2N9Ojp0ZXh0YCkuam9pbihcIixcIil9XWBcbiAgICAgIDogYXJnc1swXTtcbiAgICBjb25zdCBwZ3Jvb25nYUNvbmRpdGlvbiA9IGBwZ3Jvb25nYV9jb25kaXRpb24oPyR7d2VpZ2h0cz8ubGVuZ3RoID8gYCwgd2VpZ2h0cyA9PiBBUlJBWVske3dlaWdodHMuam9pbihcIixcIil9XWAgOiBcIlwifSlgO1xuICAgIHRoaXMuYnVpbGRlci5vcldoZXJlUmF3KGAke2NvbHVtbkV4cHJ9ICZAfiAke3Bncm9vbmdhQ29uZGl0aW9ufWAsIFthcmdzWzFdXSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIEZVTExURVhUXG4gIHdoZXJlVHNTZWFyY2g8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogVHNRdWVyeU9wdGlvbnMgfCBUc1F1ZXJ5Q29uZmlnLFxuICApOiB0aGlzO1xuICB3aGVyZVRzU2VhcmNoKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgY29uc3Qgb3B0cyA9XG4gICAgICB0eXBlb2YgYXJnc1syXSA9PT0gXCJzdHJpbmdcIiA/ICh7IGNvbmZpZzogYXJnc1syXSB9IGFzIFRzUXVlcnlPcHRpb25zKSA6IChhcmdzWzJdID8/IHt9KTtcblxuICAgIGNvbnN0IHBhcnNlciA9IG9wdHMucGFyc2VyID8/IFwid2Vic2VhcmNoX3RvX3RzcXVlcnlcIjtcbiAgICBjb25zdCBjb25maWcgPSBvcHRzLmNvbmZpZyA/PyBcInNpbXBsZVwiO1xuICAgIGNvbnN0IGNvbHVtbkV4cHIgPVxuICAgICAgdHlwZW9mIGFyZ3NbMF0gPT09IFwib2JqZWN0XCIgJiYgYXJnc1swXS5fdHlwZSA9PT0gXCJzcWxfZXhwcmVzc2lvblwiXG4gICAgICAgID8gYXJnc1swXS5fc3FsXG4gICAgICAgIDogU3RyaW5nKGFyZ3NbMF0pO1xuXG4gICAgdGhpcy5idWlsZGVyLndoZXJlUmF3KGAke2NvbHVtbkV4cHJ9IEBAICR7cGFyc2VyfSg/LCA/KWAsIFtjb25maWcsIGFyZ3NbMV1dKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9yV2hlcmVUc1NlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPiB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUc1F1ZXJ5T3B0aW9ucyB8IFRzUXVlcnlDb25maWcsXG4gICk6IHRoaXM7XG4gIG9yV2hlcmVUc1NlYXJjaCguLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgIGNvbnN0IG9wdHMgPVxuICAgICAgdHlwZW9mIGFyZ3NbMl0gPT09IFwic3RyaW5nXCIgPyAoeyBjb25maWc6IGFyZ3NbMl0gfSBhcyBUc1F1ZXJ5T3B0aW9ucykgOiAoYXJnc1syXSA/PyB7fSk7XG5cbiAgICBjb25zdCBwYXJzZXIgPSBvcHRzLnBhcnNlciA/PyBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCI7XG4gICAgY29uc3QgY29uZmlnID0gb3B0cy5jb25maWcgPz8gXCJzaW1wbGVcIjtcbiAgICBjb25zdCBjb2x1bW5FeHByID1cbiAgICAgIHR5cGVvZiBhcmdzWzBdID09PSBcIm9iamVjdFwiICYmIGFyZ3NbMF0uX3R5cGUgPT09IFwic3FsX2V4cHJlc3Npb25cIlxuICAgICAgICA/IGFyZ3NbMF0uX3NxbFxuICAgICAgICA6IFN0cmluZyhhcmdzWzBdKTtcblxuICAgIHRoaXMuYnVpbGRlci5vcldoZXJlUmF3KGAke2NvbHVtbkV4cHJ9IEBAICR7cGFyc2VyfSg/LCA/KWAsIFtjb25maWcsIGFyZ3NbMV1dKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdoZXJlRnV6enk8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzoge1xuICAgICAgb3BlcmF0b3I/OiBGdXp6eU9wZXJhdG9yO1xuICAgIH0sXG4gICk6IHRoaXM7XG4gIHdoZXJlRnV6enkoLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICBjb25zdCBvcGVyYXRvciA9IG5vcm1hbGl6ZUZ1enp5T3BlcmF0b3IoYXJnc1syXT8ub3BlcmF0b3IpO1xuXG4gICAgaWYgKG9wZXJhdG9yID09PSBcIiVcIikge1xuICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRoaXMuYnVpbGRlci53aGVyZVJhdyhgJHthcmdzWzBdLl9zcWx9ICR7b3BlcmF0b3J9ID9gLCBbLi4uYXJnc1swXS5fcGFyYW1zLCBhcmdzWzFdXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1aWxkZXIud2hlcmVSYXcoYD8/ICR7b3BlcmF0b3J9ID9gLCBbYXJnc1swXSwgYXJnc1sxXV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmJ1aWxkZXIud2hlcmVSYXcoYD8gJHtvcGVyYXRvcn0gJHthcmdzWzBdLl9zcWx9YCwgW2FyZ3NbMV0sIC4uLmFyZ3NbMF0uX3BhcmFtc10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJ1aWxkZXIud2hlcmVSYXcoYD8gJHtvcGVyYXRvcn0gPz9gLCBbYXJnc1sxXSwgYXJnc1swXV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9yV2hlcmVGdXp6eTxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPiB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBvcGVyYXRvcj86IEZ1enp5T3BlcmF0b3I7XG4gICAgfSxcbiAgKTogdGhpcztcbiAgb3JXaGVyZUZ1enp5KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSBub3JtYWxpemVGdXp6eU9wZXJhdG9yKGFyZ3NbMl0/Lm9wZXJhdG9yKTtcblxuICAgIGlmIChvcGVyYXRvciA9PT0gXCIlXCIpIHtcbiAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZVJhdyhgJHthcmdzWzBdLl9zcWx9ICR7b3BlcmF0b3J9ID9gLCBbLi4uYXJnc1swXS5fcGFyYW1zLCBhcmdzWzFdXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1aWxkZXIub3JXaGVyZVJhdyhgPz8gJHtvcGVyYXRvcn0gP2AsIFthcmdzWzBdLCBhcmdzWzFdXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMuYnVpbGRlci5vcldoZXJlUmF3KGA/ICR7b3BlcmF0b3J9ICR7YXJnc1swXS5fc3FsfWAsIFthcmdzWzFdLCAuLi5hcmdzWzBdLl9wYXJhbXNdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWlsZGVyLm9yV2hlcmVSYXcoYD8gJHtvcGVyYXRvcn0gPz9gLCBbYXJnc1sxXSwgYXJnc1swXV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOykkeyyqSDqt7jro7lcbiAgd2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiB0aGlzO1xuICB3aGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci53aGVyZSgoc3ViQnVpbGRlcikgPT4ge1xuICAgICAgY29uc3Qgc3ViR3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihzdWJCdWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKHN1Ykdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBvcldoZXJlR3JvdXAoY2FsbGJhY2s6IChnOiBXaGVyZUdyb3VwPFRUYWJsZXM+KSA9PiB2b2lkKTogdGhpcztcbiAgb3JXaGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci5vcldoZXJlKChzdWJCdWlsZGVyKSA9PiB7XG4gICAgICBjb25zdCBzdWJHcm91cCA9IG5ldyBXaGVyZUdyb3VwPFRUYWJsZXM+KHN1YkJ1aWxkZXIpO1xuICAgICAgY2FsbGJhY2soc3ViR3JvdXApO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8vIEpPSU4g7KCIIOq3uOujueyXkOuKlCBMZWZ07JmAIFJpZ2h07JeQIOuMgO2VnCDsiJzshJzqsIAg7ZWE7JqU7ZWY7KeAIOyViuycvOuvgOuhnCwg66qo65OgIOqyveyasOydmCDsiJjrpbwg6rOE7IKw7ZW07JW87ZWoLlxuZXhwb3J0IGNsYXNzIEpvaW5DbGF1c2VHcm91cDxcbiAgVExlZnQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBUUmlnaHQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2FsbGJhY2s6IEtuZXguSm9pbkNsYXVzZSkge31cblxuICAvLyBPTihBTkQpOiDsu6zrn7wgPSDsu6zrn7xcbiAgb24obGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4pOiB0aGlzO1xuICBvbihsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0Pik6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCA9IOqwklxuICBvbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIHJpZ2h0OiBFeHRyYWN0Q29sdW1uVHlwZTxUUmlnaHQsIEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCAo7Jew7IKw7J6QKSDsu6zrn7xcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICApOiB0aGlzO1xuICBvbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCAo7Jew7IKw7J6QKSDqsJJcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRSaWdodCwgQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gT04oQU5EKTog7L2c67CxXG4gIG9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VExlZnQsIFRSaWdodD4pID0+IHZvaWQpOiB0aGlzO1xuICBvbihjYWxsYmFjazogKG5lc3RlZDogSm9pbkNsYXVzZUdyb3VwPFRSaWdodCwgVExlZnQ+KSA9PiB2b2lkKTogdGhpcztcbiAgLy8gT04oQU5EKSDqtaztmIRcbiAgb24oLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICB0aGlzLmNhbGxiYWNrLm9uKC4uLihhcmdzIGFzIFtzdHJpbmcsIHN0cmluZ10pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9OKE9SKTog7Lus65+8ID0g7Lus65+8XG4gIG9yT24obGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4pOiB0aGlzO1xuICBvck9uKGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgcmlnaHQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+KTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgPSDqsJJcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRSaWdodCwgQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgKOyXsOyCsOyekCkg7Lus65+8XG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICApOiB0aGlzO1xuICBvck9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuICAgIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgKTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgKOyXsOyCsOyekCkg6rCSXG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VFJpZ2h0LCBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBPTihPUik6IOy9nOuwsVxuICBvck9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VExlZnQsIFRSaWdodD4pID0+IHZvaWQpOiB0aGlzO1xuICBvck9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VFJpZ2h0LCBUTGVmdD4pID0+IHZvaWQpOiB0aGlzO1xuICAvLyBPTihPUikg6rWs7ZiEXG4gIG9yT24oLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICB0aGlzLmNhbGxiYWNrLm9yT24oLi4uKGFyZ3MgYXMgW3N0cmluZywgc3RyaW5nXSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gT04gVkFMKEFORCk6IOy7rOufvCA9IOqwkiAo6rCS7J2EIOy7rOufvCDssLjsobDqsIAg7JWE64uMIO2MjOudvOuvuO2EsOuhnCDrsJTsnbjrlKkpXG4gIG9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0Piwgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9uVmFsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgKHRoaXMuY2FsbGJhY2sgYXMgYW55KS5vblZhbCguLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEFORCBPTiBWQUw6IG9uVmFs7J2YIOuqheyLnOyggSBhbGlhcyAoS25leCDtmLjtmZgpXG4gIGFuZE9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBhbmRPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIGFuZE9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBhbmRPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0Piwgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIGFuZE9uVmFsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgKHRoaXMuY2FsbGJhY2sgYXMgYW55KS5hbmRPblZhbCguLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9SIE9OIFZBTDogT1Ig7KGw6rG07Jy866GcIOqwkiDrsJTsnbjrlKlcbiAgb3JPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LCB2YWx1ZTogYW55KTogdGhpcztcbiAgb3JPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9yT25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0Piwgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9yT25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvck9uVmFsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgKHRoaXMuY2FsbGJhY2sgYXMgYW55KS5vck9uVmFsKC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8qXG4gIFRSZXNvbHZlZDog7L+866asIOyLpO2WiSDtm4Qg67CY7ZmY65CgIOqysOqzvCDtg4DsnoVcbiAgVFJldHVybmluZzogUkVUVVJOSU5HIOygiOyXkCDsgqzsmqnrkKAg7YOA7J6FXG4qL1xuZXhwb3J0IGNsYXNzIFJlc29sdmVkUHVyaTxUUmVzb2x2ZWQsIFRSZXR1cm5pbmc+IGltcGxlbWVudHMgUHJvbWlzZTxUUmVzb2x2ZWQ+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGtuZXhRdWVyeTogS25leC5RdWVyeUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBrbmV4OiBLbmV4LFxuICApIHt9XG5cbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHN0cmluZyA9IFwiUHJvbWlzZVwiO1xuXG4gIHRvUXVlcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkudG9RdWVyeSgpO1xuICB9XG5cbiAgZGVidWcoKTogdGhpcyB7XG4gICAgY29uc29sZS5sb2coYCR7Y2hhbGsuY3lhbihcIltQdXJpIERlYnVnXVwiKX0gJHtjaGFsay55ZWxsb3codGhpcy50b1F1ZXJ5KCkpfWApO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhlbjxUUmVzdWx0MSA9IFRSZXNvbHZlZCwgVFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25mdWxmaWxsZWQ/OiAoKHZhbHVlOiBUUmVzb2x2ZWQpID0+IFRSZXN1bHQxIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDE+KSB8IG51bGwsXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgIE5haXRlLnQoXCJwdXJpOmV4ZWN1dGVkLXF1ZXJ5XCIsIHRoaXMudG9RdWVyeSgpKTtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkudGhlbihvbmZ1bGZpbGxlZCBhcyBhbnksIG9ucmVqZWN0ZWQpO1xuICB9XG5cbiAgY2F0Y2g8VFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc29sdmVkIHwgVFJlc3VsdDI+IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkuY2F0Y2gob25yZWplY3RlZCk7XG4gIH1cblxuICBmaW5hbGx5KG9uZmluYWxseT86ICgoKSA9PiB2b2lkKSB8IG51bGwpOiBQcm9taXNlPFRSZXNvbHZlZD4ge1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS5maW5hbGx5KG9uZmluYWxseSk7XG4gIH1cblxuICAvLyBPTiBDT05GTElDVCAtIOy7rOufvCDquLDrsJhcbiAgb25Db25mbGljdDxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgVFJldHVybmluZz4+KFxuICAgIGNvbHVtbnM6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIGFjdGlvbj86IE9uQ29uZmxpY3RBY3Rpb248VFRhYmxlcz4sXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IHRhcmdldCA9IEFycmF5LmlzQXJyYXkoY29sdW1ucykgPyBjb2x1bW5zIDogW2NvbHVtbnNdO1xuXG4gICAgaWYgKCFhY3Rpb24gfHwgYWN0aW9uID09PSBcIm5vdGhpbmdcIikge1xuICAgICAgLy8gRE8gTk9USElOR1xuICAgICAgdGhpcy5rbmV4UXVlcnkub25Db25mbGljdCh0YXJnZXQpLmlnbm9yZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBETyBVUERBVEVcbiAgICAgIGNvbnN0IHsgdXBkYXRlIH0gPSBhY3Rpb247XG5cbiAgICAgIC8vIGFjdGlvbi51cGRhdGUg67Cw7Je0IO2Yle2DnCA6IFtcIm5hbWVcIiwgXCJlbWFpbFwiXVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlKSkge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS5vbkNvbmZsaWN0KHRhcmdldCkubWVyZ2UodXBkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFjdGlvbi51cGRhdGUg6rCd7LK0IO2Yle2DnDogeyBuYW1lOiBcIkpvaG5cIiwgY291bnQ6IHJhdyguLi4pIH1cbiAgICAgICAgY29uc3QgbWVyZ2VPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh1cGRhdGUpKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgXCJfdHlwZVwiIGluIHZhbHVlICYmXG4gICAgICAgICAgICB2YWx1ZS5fdHlwZSA9PT0gXCJzcWxfZXhwcmVzc2lvblwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBTcWxFeHByZXNzaW9uIOKGkiBrbmV4LnJhdygp66GcIOuzgO2ZmFxuICAgICAgICAgICAgbWVyZ2VPYmpba2V5XSA9IHRoaXMua25leC5yYXcoKHZhbHVlIGFzIFNxbEV4cHJlc3Npb248YW55PikuX3NxbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOydvOuwmCDqsJJcbiAgICAgICAgICAgIG1lcmdlT2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmtuZXhRdWVyeS5vbkNvbmZsaWN0KHRhcmdldCkubWVyZ2UobWVyZ2VPYmopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gUkVUVVJOSU5HOiBcIipcIiAtIOyghOyytCDsu6zrn7xcbiAgcmV0dXJuaW5nKGNvbHVtbjogXCIqXCIpOiBSZXNvbHZlZFB1cmk8VFJldHVybmluZ1tdLCBuZXZlcj47XG4gIC8vIFJFVFVSTklORzog64uo7J28IOy7rOufvFxuICByZXR1cm5pbmc8VENvbHVtbiBleHRlbmRzIENvbHVtbktleXM8VFJldHVybmluZz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgKTogUmVzb2x2ZWRQdXJpPFBpY2s8VFJldHVybmluZywgVENvbHVtbj5bXSwgbmV2ZXI+O1xuICAvLyBSRVRVUk5JTkc6IOuzteyImCDsu6zrn7wgKOuwsOyXtClcbiAgcmV0dXJuaW5nPFRDb2x1bW4gZXh0ZW5kcyBDb2x1bW5LZXlzPFRSZXR1cm5pbmc+PihcbiAgICBjb2x1bW5zOiBUQ29sdW1uW10sXG4gICk6IFJlc29sdmVkUHVyaTxQaWNrPFRSZXR1cm5pbmcsIFRDb2x1bW4+W10sIG5ldmVyPjtcbiAgLy8gUkVUVVJOSU5HIOq1rO2YhFxuICByZXR1cm5pbmcoY29sdW1uT3JDb2x1bW5zOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFJlc29sdmVkUHVyaTxhbnlbXSwgbmV2ZXI+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5yZXR1cm5pbmcoY29sdW1uT3JDb2x1bW5zKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImFzc2VydCIsImNoYWxrIiwiaW5mbGVjdGlvbiIsIkVudGl0eU1hbmFnZXIiLCJOYWl0ZSIsIkZVWlpZX09QRVJBVE9SUyIsIm5vcm1hbGl6ZUZ1enp5T3BlcmF0b3IiLCJvcGVyYXRvciIsIm5vcm1hbGl6ZWQiLCJ0cmltIiwiZnV6enlPcGVyYXRvciIsImZpbmQiLCJjYW5kaWRhdGUiLCJFcnJvciIsIlB1cmkiLCJrbmV4UXVlcnkiLCJ0YWJsZVNwZWMiLCJrbmV4IiwidGFibGVOYW1lT3JTb3VyY2UiLCJmcm9tIiwic2FmZUdldFRhYmxlU3BlYyIsImVudHJpZXMiLCJPYmplY3QiLCJsZW5ndGgiLCJhbGlhcyIsInNvdXJjZSIsInN1YnF1ZXJ5QnVpbGRlciIsInJhd1F1ZXJ5IiwiYXMiLCJ0YWJsZU5hbWUiLCJnZXRUYWJsZVNwZWMiLCJjb3VudCIsImNvbHVtbiIsIl90eXBlIiwiX3JldHVybiIsIl9zcWwiLCJfcGFyYW1zIiwic3VtIiwiYXZnIiwibWF4IiwibWluIiwiY29uY2F0IiwiYXJncyIsIm1hcCIsImpvaW4iLCJ1cHBlciIsImxvd2VyIiwid29yZFNpbWlsYXJpdHkiLCJxdWVyeSIsInNpbWlsYXJpdHkiLCJzdHJpY3RXb3JkU2ltaWxhcml0eSIsInJhd1N0cmluZyIsInNxbCIsInBhcmFtcyIsInJhd1N0cmluZ0FycmF5IiwicmF3TnVtYmVyIiwicmF3Qm9vbGVhbiIsInJhd0RhdGUiLCJ0c0hpZ2hsaWdodCIsIl9vcHRpb25zIiwicGFyc2VyIiwiY29uZmlnIiwib3B0aW9ucyIsImhsT3B0aW9uUGFydHMiLCJrZXkiLCJ2YWx1ZSIsImNhbWVsaXplIiwiaGxPcHRpb25zIiwidHNSYW5rIiwiX3RzUmFuayIsInRzUmFua0NkIiwidG9Uc1ZlY3RvciIsInR5cGUiLCJub3JtYWxpemF0aW9uIiwid2VpZ2h0cyIsInNxbFRlbXBsYXRlIiwicHVzaCIsInNjb3JlIiwiaGlnaGxpZ2h0IiwiY29sdW1uT3JDb2x1bW5zIiwicXVlcnlBcnIiLCJBcnJheSIsImlzQXJyYXkiLCJxdWVyeUNsYXVzZSIsInNlbGVjdCIsInNlbGVjdE9iaiIsImZsYXRTZWxlY3QiLCJmbGF0dGVuU2VsZWN0Iiwic2VsZWN0Q2xhdXNlcyIsImNvbHVtbk9yRnVuY3Rpb24iLCJyYXciLCJjb2x1bW5QYXRoIiwicHJlZml4IiwiZnVsbEtleSIsIm5lc3RlZCIsImFzc2lnbiIsImFwcGVuZFNlbGVjdCIsInJlZiIsInNlbGVjdEFsbCIsImRpc3RpbmN0IiwiY29sdW1ucyIsImNsZWFyIiwic3RhdGVtZW50IiwiY2xlYXJKb2luIiwiX3N0YXRlbWVudHMiLCJmaWx0ZXIiLCJzIiwiX2FsaWFzIiwiX3RhYmxlIiwidGFibGUiLCJ0YWJsZU5hbWVPclNwZWMiLCJfX2NvbW1vbkpvaW4iLCJsZWZ0Sm9pbiIsImpvaW5UeXBlIiwiY2FsbGJhY2siLCJqb2luQ2xhdXNlIiwiSm9pbkNsYXVzZUdyb3VwIiwibGVmdCIsInJpZ2h0Iiwic3BlYyIsIndoZXJlIiwiY29sdW1uT3JDb25kaXRpb25zIiwib3BlcmF0b3JPclZhbHVlIiwid2hlcmVOdWxsIiwid2hlcmVOb3ROdWxsIiwid2hlcmVJbiIsInZhbHVlcyIsIndoZXJlTm90SW4iLCJ3aGVyZU1hdGNoIiwid2hlcmVSYXciLCJTdHJpbmciLCJ3aGVyZVNlYXJjaCIsImNvbHVtbkV4cHIiLCJjIiwicGdyb29uZ2FDb25kaXRpb24iLCJ3aGVyZVRzU2VhcmNoIiwib3B0cyIsIndoZXJlRnV6enkiLCJiaW5kaW5ncyIsIndoZXJlR3JvdXAiLCJidWlsZGVyIiwiZ3JvdXAiLCJXaGVyZUdyb3VwIiwib3JXaGVyZUdyb3VwIiwib3JXaGVyZSIsIm9yZGVyQnkiLCJkaXJlY3Rpb24iLCJvcmRlckJ5UmF3IiwidmVjdG9yU2ltaWxhcml0eSIsImVtYmVkZGluZyIsIm1ldGhvZCIsInRocmVzaG9sZCIsImRpc3RpbmN0T24iLCJzb21lIiwidiIsIk51bWJlciIsImlzRmluaXRlIiwidmVjdG9yTGl0ZXJhbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb3NpbmUiLCJsMiIsImlubmVyX3Byb2R1Y3QiLCJzaW1pbGFyaXR5RXhwciIsImV4aXN0aW5nU3Vic2V0Q29scyIsImdyb3VwaW5nIiwiZmxhdE1hcCIsImNvbCIsInRocmVzaG9sZE9wIiwidGhyZXNob2xkVmFsdWUiLCJsaW1pdCIsIm9mZnNldCIsImdyb3VwQnkiLCJoYXZpbmciLCJjb25kaXRpb25zIiwidGhlbiIsIm9uZnVsZmlsbGVkIiwib25yZWplY3RlZCIsInQiLCJ0b1F1ZXJ5IiwiY2F0Y2giLCJmaW5hbGx5Iiwib25maW5hbGx5IiwiZmlyc3QiLCJSZXNvbHZlZFB1cmkiLCJwbHVjayIsImluc2VydCIsInJhd0RhdGEiLCJyZWZpbmVkRGF0YSIsInJlZmluZUpzb25Db2x1bW5zIiwidXBkYXRlIiwiZGF0YSIsImpzb25Db2x1bW5zIiwiaXRlbSIsInVuZGVmaW5lZCIsImluY3JlbWVudCIsImRlY3JlbWVudCIsImRlbGV0ZSIsImRlYnVnIiwiY29uc29sZSIsImxvZyIsImN5YW4iLCJ5ZWxsb3ciLCJjbG9uZSIsIm5ld1B1cmkiLCJmb3JtYXRTUUwiLCJ1bmZvcm1hdHRlZCIsImtleXdvcmRzIiwiZm9ybWF0dGVkIiwiZm9yRWFjaCIsImtleXdvcmQiLCJyZWdleCIsIlJlZ0V4cCIsInJlcGxhY2UiLCJ0b1VwcGVyQ2FzZSIsIm1ham9yQ2xhdXNlcyIsImNsYXVzZSIsImxpbmVzIiwic3BsaXQiLCJpbmRlbnRlZExpbmVzIiwiaW5kZW50TGV2ZWwiLCJsaW5lIiwidHJpbW1lZExpbmUiLCJjbG9zaW5nUGFyZW5zIiwibWF0Y2giLCJvcGVuaW5nUGFyZW5zIiwiTWF0aCIsImluZGVudCIsInJlcGVhdCIsInNsaWNlIiwib3JXaGVyZUluIiwib3JXaGVyZU5vdEluIiwib3JXaGVyZU1hdGNoIiwib3JXaGVyZVJhdyIsIm9yV2hlcmVTZWFyY2giLCJvcldoZXJlVHNTZWFyY2giLCJvcldoZXJlRnV6enkiLCJzdWJCdWlsZGVyIiwic3ViR3JvdXAiLCJvbiIsIm9yT24iLCJvblZhbCIsImFuZE9uVmFsIiwib3JPblZhbCIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwib25Db25mbGljdCIsImFjdGlvbiIsInRhcmdldCIsImlnbm9yZSIsIm1lcmdlIiwibWVyZ2VPYmoiLCJyZXR1cm5pbmciXSwibWFwcGluZ3MiOiJBQUFBLHNGQUFzRixHQUN0Riw2RUFBNkUsR0FFN0UsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLE9BQU9DLFdBQVcsUUFBUTtBQUMxQixPQUFPQyxnQkFBZ0IsYUFBYTtBQUVwQyxTQUFTQyxhQUFhLFFBQXdCLDhCQUEyQjtBQUN6RSxTQUFTQyxLQUFLLFFBQVEsb0JBQWlCO0FBNkJ2QyxTQUFTQyxlQUFlLFFBQVEsa0JBQWU7QUFHL0MsU0FBU0MsdUJBQXVCQyxRQUFpQjtJQUMvQyxNQUFNQyxhQUFhRCxVQUFVRSxVQUFVO0lBQ3ZDLE1BQU1DLGdCQUFnQkwsZ0JBQWdCTSxJQUFJLENBQUMsQ0FBQ0MsWUFBY0EsY0FBY0o7SUFFeEUsSUFBSSxDQUFDRSxlQUFlO1FBQ2xCLE1BQU0sSUFBSUcsTUFBTSxDQUFDLHdCQUF3QixFQUFFTixZQUFZLElBQUk7SUFDN0Q7SUFFQSxPQUFPRztBQUNUO0FBRUEsT0FBTyxNQUFNSTs7SUFDSEMsVUFBNkI7SUFDN0JDLFlBQThCLEtBQUs7SUFLM0MsWUFDRSxBQUFPQyxJQUFVLEVBQ2pCQyxpQkFBc0IsQ0FDdEI7YUFGT0QsT0FBQUE7UUFHUCxJQUFJLE9BQU9DLHNCQUFzQixVQUFVO1lBQ3pDLGdDQUFnQztZQUNoQyxJQUFJLENBQUNILFNBQVMsR0FBRyxJQUFJLENBQUNFLElBQUksQ0FBQ0MsbUJBQW1CQyxJQUFJLENBQUNEO1lBQ25ELElBQUksQ0FBQ0YsU0FBUyxHQUFHLElBQUksQ0FBQ0ksZ0JBQWdCLENBQUNGO1FBQ3pDLE9BQU8sSUFBSSxPQUFPQSxzQkFBc0IsVUFBVTtZQUNoRCxNQUFNRyxVQUFVQyxPQUFPRCxPQUFPLENBQUNIO1lBQy9CLElBQUlHLFFBQVFFLE1BQU0sS0FBSyxHQUFHO2dCQUN4QixNQUFNLElBQUlWLE1BQU07WUFDbEI7WUFDQWIsT0FBT3FCLE9BQU8sQ0FBQyxF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
@@ -1,4 +1,5 @@
1
1
  /** biome-ignore-all lint/suspicious/noExplicitAny: Puri.types.ts는 다양한 타입을 사용하고 있습니다. */
2
+ import type { Knex } from "knex";
2
3
  import type { QueryResult } from "pg";
3
4
  import type { DatabaseForeignKeys, DatabaseSchemaExtend } from "../types/types";
4
5
  import type { Puri } from "./puri";
@@ -76,7 +77,7 @@ export type SqlExpression<T extends "string" | "number" | "boolean" | "date" | "
76
77
  _type: "sql_expression";
77
78
  _return: T;
78
79
  _sql: string;
79
- _params: unknown[];
80
+ _params: Knex.RawBinding[];
80
81
  };
81
82
  export type Expand<T> = T extends any[] ? {
82
83
  [K in keyof T[0]]: T[0][K];