fmode-ng 0.0.243 → 0.0.245

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.
@@ -171,10 +171,14 @@ function chunkToJson(chunk) {
171
171
  function RequestFmodeChatApi(apipath, body, method = "POST") {
172
172
  return new Observable((observer) => {
173
173
  let url = API_BASE + apipath;
174
- let API_TOKEN = localStorage.getItem("FMODE_AI_TOKEN") || Parse.User.current()?.getSessionToken();
174
+ let API_TOKEN = localStorage.getItem("FMODE_AI_TOKEN") || Parse.User.current()?.getSessionToken() || localStorage.getItem("COMPANY_PUBLIC_TOKEN");
175
175
  // 通过body传递token参数,避免no-cors模式下Authoriztion头部无效
176
176
  let AUTH_TOKEN = `Bearer ${API_TOKEN}`;
177
177
  body.token = AUTH_TOKEN;
178
+ let company = localStorage.getItem("company");
179
+ if (company) {
180
+ body.company = body.company || company;
181
+ }
178
182
  if (body)
179
183
  body = JSON.stringify(body);
180
184
  console.log(url, body);
@@ -536,4 +540,4 @@ function tryFixAndParseJSON(str) {
536
540
  }
537
541
  return null;
538
542
  }
539
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUtY29tcGxldGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvY29yZS9hZ2VudC9jaGF0L2NvbXBsZXRpb24vZm1vZGUtY29tcGxldGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFZLE1BQU0sTUFBTSxDQUFBO0FBQ3pFLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsTUFBTSxRQUFRLEdBQVUsMkNBQTJDLENBQUE7QUFFbkUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQUEsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUd4Rjs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBVTVCLFlBQ0ksUUFBMkIsRUFBQyxPQUkzQjtRQVRMLFlBQU8sR0FBVSxFQUFFLENBQUEsQ0FBQyxXQUFXO1FBQy9CLGtCQUFhLEdBQVksRUFBRSxDQUFBO1FBRTNCLGdCQUFXLEdBQVcsS0FBSyxDQUFDO1FBUXhCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sRUFBRSxLQUFLLElBQUksY0FBYyxDQUFBLENBQUMsbUJBQW1CO1FBQ2pFLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxFQUFFLFVBQVUsSUFBSSxLQUFLLENBQUEsQ0FBQyxnQkFBZ0I7UUFDL0QsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFBO0lBQy9CLENBQUM7SUFDRDs7Ozs7O09BTUc7SUFDSCxjQUFjLENBQUMsVUFLb0IsRUFB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QUNQLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO0tBQzdFLENBQUM7SUFFRixLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDVCxjQUFjO1FBQ2xCLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJ1ZmZlclRpbWUsIGNvbmNhdE1hcCwgZGVsYXksIE9ic2VydmFibGUsIE9ic2VydmVyIH0gZnJvbSBcInJ4anNcIlxyXG4vLyBjb25zdCBBUElfQkFTRTpzdHJpbmcgPSBcImh0dHA6Ly8xMjcuMC4wLjE6NzMzNy9hcGkvYXBpZy9haWdjL2dwdFwiXHJcbi8vIGNvbnN0IEFQSV9CQVNFOnN0cmluZyA9IFwiaHR0cHM6Ly90ZXN0LmZtb2RlLmNuL2FwaS9hcGlnL2FpZ2MvZ3B0XCJcclxuY29uc3QgQVBJX0JBU0U6c3RyaW5nID0gXCJodHRwczovL3NlcnZlci5mbW9kZS5jbi9hcGkvYXBpZy9haWdjL2dwdFwiXHJcbmltcG9ydCB7IEZtb2RlQ2hhdE1lc3NhZ2UgfSBmcm9tIFwiLi4vaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7Rm1vZGVQYXJzZX0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvcmUvcGFyc2VcIjtjb25zdCBQYXJzZSA9IEZtb2RlUGFyc2Uud2l0aChcIm5vdmFcIik7XHJcbmltcG9ydCB7IERvdWJhb0NoYXRPcHRpb25zLCBHcHRDaGF0T3B0aW9ucyB9IGZyb20gXCIuL2ludC1ncHQtY2hhdC1vcHRpb25zXCJcclxuXHJcbi8qKlxyXG4gKiBGbW9kZUNoYXRDb21wbGV0aW9uIOaWh+acrOihpeWFqOexu1xyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRm1vZGVDaGF0Q29tcGxldGlvbntcclxuICAgIGluZGV4T2ZMaXN0Om51bWJlclxyXG4gICAgbW9kZWw6c3RyaW5nXHJcbiAgICBtYXhfdG9rZW5zOm51bWJlclxyXG4gICAgdG9vbHM6QXJyYXk8YW55PlxyXG4gICAgbWVzc2FnZXM6Rm1vZGVDaGF0TWVzc2FnZVtdIC8vIOihpeWFqOWJjeaPkOekuuivjeWIl+ihqFxyXG4gICAgY29udGVudDpzdHJpbmcgPSBcIlwiIC8vIOacrOasoeaOpeaUtua2iOaBr+e7k+aenFxyXG4gICAgY29udGVudEJ1ZmZlcjpzdHJpbmdbXSA9IFtdXHJcbiAgICBjb250ZW50UHVzaGVyOmFueVxyXG4gICAgaXNDb21wbGV0ZWQ6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgbWVzc2FnZXM6Rm1vZGVDaGF0TWVzc2FnZVtdLG9wdGlvbnM/OntcclxuICAgICAgICAgICAgbW9kZWw/OnN0cmluZ1xyXG4gICAgICAgICAgICBtYXhfdG9rZW5zPzpudW1iZXJcclxuICAgICAgICAgICAgdG9vbHM/OmFueVtdXHJcbiAgICAgICAgfVxyXG4gICAgKXtcclxuICAgICAgICB0aGlzLmluZGV4T2ZMaXN0ID0gTnVtYmVyKG1lc3NhZ2VzLmxlbmd0aClcclxuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gbWVzc2FnZXNcclxuICAgICAgICB0aGlzLm1vZGVsID0gb3B0aW9ucz8ubW9kZWwgfHwgXCJmbW9kZS0xLjYtY25cIiAvLyDpu5jorqTosYbljIUgMS42IOaAp+S7t+avlOebruWJjeacgOmrmFxyXG4gICAgICAgIHRoaXMubWF4X3Rva2VucyA9IG9wdGlvbnM/Lm1heF90b2tlbnMgfHwgMzI3NjggLy8g6LGG5YyFMS42ICsgMzJr5Lul5LiKXHJcbiAgICAgICAgdGhpcy50b29scyA9IG9wdGlvbnM/LnRvb2xzXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5pc0RpcmVjdCDmmK/lkKbkuI3nrYnlvoXpgJDlrZfojrflj5bvvIznm7TmjqXlrozmiJDlhoXlrrnmjqjpgIFcclxuICAgICAqIEBwYXJhbSBvcHRpb25zLmludFRpbWUg5piv5ZCm5LiN562J5b6F6YCQ5a2X6I635Y+W77yM55u05o6l5a6M5oiQ5YaF5a655o6o6YCBXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5zdHJlYW0g5piv5ZCm5L2/55So5rWB5byP5Yqg6L2977yM6buY6K6kdHJ1ZVxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgc2VuZENvbXBsZXRpb24ob3B0aW9uczp7XHJcbiAgICAgICAgaXNEaXJlY3Q/OmJvb2xlYW4sXHJcbiAgICAgICAgaW50VGltZT86bnVtYmVyLFxyXG4gICAgICAgIG9uQ29tcGxldGU/OkZ1bmN0aW9uLFxyXG4gICAgICAgIHN0cmVhbT86Ym9vbGVhblxyXG4gICAgfSZHcHRDaGF0T3B0aW9ucyZEb3ViYW9DaGF0T3B0aW9ucz17bWVzc2FnZXM6W119KTpPYnNlcnZhYmxlPEZtb2RlQ2hhdE1lc3NhZ2U+e1xyXG4gICAgICAgIG9wdGlvbnMuaW50VGltZSA9IG9wdGlvbnM/LmludFRpbWUgfHwgNTAgLy8g5oyJ5q+r56eS6YCQ5a2X5o6o6YCBXHJcbiAgICAgICAgb3B0aW9ucy5pc0RpcmVjdCA9IG9wdGlvbnM/LmlzRGlyZWN0IHx8IGZhbHNlXHJcbiAgICAgICAgaWYob3B0aW9ucz8uaXNEaXJlY3QpIG9wdGlvbnMuaW50VGltZSA9IDFcclxuICAgICAgICAvLyDorr7nva4gc3RyZWFtIOm7mOiupOWAvOS4uiB0cnVlXHJcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RyZWFtID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5zdHJlYW0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgb3B0czpHcHRDaGF0T3B0aW9ucyZEb3ViYW9DaGF0T3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgXCJtZXNzYWdlc1wiOnRoaXMubWVzc2FnZXMsXHJcbiAgICAgICAgICAgIFwic3RyZWFtXCI6b3B0aW9ucy5zdHJlYW0sXHJcbiAgICAgICAgICAgIFwibW9kZWxcIjp0aGlzLm1vZGVsLFxyXG4gICAgICAgICAgICBcInRlbXBlcmF0dXJlXCI6b3B0aW9ucz8udGVtcGVyYXR1cmUgfHwgMC41LFxyXG4gICAgICAgICAgICBcInByZXNlbmNlX3BlbmFsdHlcIjpvcHRpb25zPy5wcmVzZW5jZV9wZW5hbHR5IHx8IDAsXHJcbiAgICAgICAgICAgIFwiZnJlcXVlbmN5X3BlbmFsdHlcIjpvcHRpb25zPy5mcmVxdWVuY3lfcGVuYWx0eSB8fCAwXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaW5raW5n5qih5byP55qE6YCC6YWN77ya6LGG5YyFXHJcbiAgICAgICAgaWYodGhpcy5tb2RlbC5pbmRleE9mKFwiMS42XCIpPi0xKXtcclxuICAgICAgICAgICAgb3B0cy50aGlua2luZyA9IG9wdHMudGhpbmtpbmcgfHwge3R5cGU6XCJkaXNhYmxlZFwifTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKG9wdGlvbnM/Lm1heF90b2tlbnMpe1xyXG4gICAgICAgICAgICBvcHRzW1wibWF4X3Rva2Vuc1wiXSA9IG9wdGlvbnM/Lm1heF90b2tlbnMgfHwgdGhpcy5tYXhfdG9rZW5zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihvcHRpb25zPy50b29scz8ubGVuZ3RoKXtcclxuICAgICAgICAgICAgb3B0c1tcInRvb2xzXCJdID0gb3B0aW9ucz8udG9vbHMgfHwgdGhpcy50b29scztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cob3B0cylcclxuICAgICAgICBsZXQgJG1lc3NhZ2VSZWNlaXZlciA9IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogT2JzZXJ2ZXI8Rm1vZGVDaGF0TWVzc2FnZT4pID0+IHtcclxuICAgICAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IFJlcXVlc3RGbW9kZUNoYXRBcGkoXCIvdjEvY2hhdC9jb21wbGV0aW9uc1wiLCBvcHRzKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIGVhY2ggY2h1bmsgb2YgZGF0YVxyXG4gICAgICAgICAgICAgICAgLyoqIENodW5r5paH5pys5pWw5o2u5qC85byP5aaC5LiL77yaXHJcbiAgICAgICAgICAgICAgICDmraPluLjmtojmga/vvJpcclxuICAgICAgICAgICAgICAgICdkYXRhOiB7XCJpZFwiOlwiY2hhdGNtcGwteTJQTEtxUERud0FGSklqMkw1YXFkSDVUV0s5WXZcIixcIm9iamVjdFwiOlwiY2hhdC5jb21wbGV0aW9uLmNodW5rXCIsXCJjcmVhdGVkXCI6MTY5Njc3MDE2MixcIm1vZGVsXCI6XCJncHQtMy41LXR1cmJvLTA2MTNcIixcImNob2ljZXNcIjpbe1wiaW5kZXhcIjowLFwiZGVsdGFcIjp7XCJjb250ZW50XCI6XCLmnKzmj5DnpLror43ku4XnlKjkuo7mtYvor5XjgIJcIn0sXCJmaW5pc2hfcmVhc29uXCI6bnVsbH1dfScsXHJcbiAgICAgICAgICAgICAgICDnu4jmraLljp/lm6DvvJpcclxuICAgICAgICAgICAgICAgICdkYXRhOiB7XCJpZFwiOlwiY2hhdGNtcGwteTJQTEtxUERud0FGSklqMkw1YXFkSDVUV0s5WXZcIixcIm9iamVjdFwiOlwiY2hhdC5jb21wbGV0aW9uLmNodW5rXCIsXCJjcmVhdGVkXCI6MTY5Njc3MDE2MixcIm1vZGVsXCI6XCJncHQtMy41LXR1cmJvLTA2MTNcIixcImNob2ljZXNcIjpbe1wiaW5kZXhcIjowLFwiZGVsdGFcIjp7fSxcImZpbmlzaF9yZWFzb25cIjpcInN0b3BcIn1dfScsXHJcbiAgICAgICAgICAgICAgICDnu5PmnZ/mtojmga/vvJpcclxuICAgICAgICAgICAgICAgICdkYXRhOiBbRE9ORV0nXHJcbiAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJjaHVua1wiLGRhdGEpXHJcbiAgICAgICAgICAgICAgICBsZXQgY2h1bmsgPSBTdHJpbmcoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgY29tcGxldGlvbiBtZXNzYWdlIGlzIHJlY2VpdmVkXHJcbiAgICAgICAgICAgICAgICBsZXQgY2h1bmtqc29uOmFueVxyXG4gICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgIGNodW5ranNvbiA9IGNodW5rVG9Kc29uKGNodW5rKVxyXG4gICAgICAgICAgICAgICAgfWNhdGNoKGVycil7fVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY2h1bmssY2h1bmtqc29uLGNodW5ranNvbj8uY2hvaWNlcz8uWzBdPy5kZWx0YT8uY29udGVudClcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBjaHVuayA9PSAnZGF0YTogW0RPTkVdJyBcclxuICAgICAgICAgICAgICAgICAgICB8fCBcclxuICAgICAgICAgICAgICAgICAgICAoY2h1bmtqc29uPy5jcmVhdGVkICYmIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaHVua2pzb24/LmNob2ljZXM/LlswXT8uZmluaXNoX3JlYXNvbiAvLyBmaW5pc2hfcmVhc29uID09ICdzdG9wJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAoIWNodW5ranNvbi5jaG9pY2VzPy5sZW5ndGggfHwgIWNodW5ranNvbj8uY2hvaWNlcz8uWzBdPy5kZWx0YT8uY29udGVudClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NvbXBsZXRlZCA9IHRydWU7IC8vIOagh+iusOWujOaIkCA9PiDnrYnlvoVpbnRlcnZhbOaOqOmAgVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZGF0YTogW0RPTkVdXCIsb3B0aW9ucz8uaXNEaXJlY3QsdGhpcy5pc0NvbXBsZXRlZClcclxuICAgICAgICAgICAgICAgICAgICBpZihvcHRpb25zPy5pc0RpcmVjdCAmJiB0aGlzLmlzQ29tcGxldGVkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlOlwiYXNzaXN0YW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaWQ6Y2h1bmtqc29uPy5bJ2lkJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OnRoaXMuY29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOnRydWUsIC8vIOaOqOmAgeWujOaIkFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZEF0Om5ldyBEYXRlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IC8vIFVuc3Vic2NyaWJlIHdoZW4gZG9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPy5vbkNvbXBsZXRlJiZvcHRpb25zLm9uQ29tcGxldGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTpcImFzc2lzdGFudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2lkOmNodW5ranNvbj8uWydpZCddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDp0aGlzLmNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTp0cnVlLCAvLyDmjqjpgIHlrozmiJBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDpuZXcgRGF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY2h1bmspXHJcbiAgICAgICAgICAgICAgICBpZihjaHVuay5pbmRleE9mKFwiZGF0YTpcXCB7XCIpPi0xKXtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjaHVuaylcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjaHVua2pzb24/LmNob2ljZXM/LlswXT8uZGVsdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHdvcmRzID0gY2h1bmtqc29uPy5jaG9pY2VzPy5bMF0/LmRlbHRhPy5jb250ZW50IHx8IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRCdWZmZXIucHVzaCh3b3Jkcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOa2iOaBr+i/lOWbnuaooeW8j++8muWumuaXtuWZqOaOqOmAge+8jOaooeaLn+mAkOWtl+i+k+WHulxyXG4gICAgICAgICAgICAgICAgICAgIGlmKG9wdGlvbnM/LmlzRGlyZWN0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudCArPSAod29yZHMgfHwgXCJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6buY6K6k57Sv5Yqg5raI5oGv57uT5p6cXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighdGhpcy5pc0NvbXBsZXRlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6XCJhc3Npc3RhbnRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkOmNodW5ranNvbj8uWydpZCddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OnRoaXMuY29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZEF0Om5ldyBEYXRlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZighb3B0aW9ucz8uaXNEaXJlY3QmJiF0aGlzLmNvbnRlbnRQdXNoZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRQdXNoZXIgPSBzZXRJbnRlcnZhbCgoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5pc0NvbXBsZXRlZCAmJiB0aGlzLmNvbnRlbnRCdWZmZXI/Lmxlbmd0aD09MCl7IC8vIOaOqOmAgeWujOavle+8jOa4hemZpOiuoeaXtuWZqFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlOlwiYXNzaXN0YW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZDpjaHVua2pzb24/LlsnaWQnXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDp0aGlzLmNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOnRydWUsIC8vIOaOqOmAgeWujOaIkFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6bmV3IERhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IC8vIFVuc3Vic2NyaWJlIHdoZW4gZG9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jb250ZW50UHVzaGVyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmNvbnRlbnRCdWZmZXI/Lmxlbmd0aD49MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jb250ZW50QnVmZmVyPy5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudCArPSB0aGlzLmNvbnRlbnRCdWZmZXIuc2hpZnQoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTpcImFzc2lzdGFudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWQ6Y2h1bmtqc29uPy5bJ2lkJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6dGhpcy5jb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6bmV3IERhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sb3B0aW9ucz8uaW50VGltZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5jb250ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gJG1lc3NhZ2VSZWNlaXZlci5waXBlKFxyXG4gICAgICAgICAgICBidWZmZXJUaW1lKDEwMCksIC8vIOavjzEwMG1z5pS26ZuG5raI5oGvXHJcbiAgICAgICAgICAgIGNvbmNhdE1hcChtZXNzYWdlcyA9PiBtZXNzYWdlcyksIC8vIOS9v+eUqCBjb25jYXRNYXAg6YCQ5Liq5Y+R6YCB5raI5oGvXHJcbiAgICAgICAgICAgIGRlbGF5KDIwMCkgLy8g5bu26L+fMjAwbXPovpPlh7rmr4/mnaHmtojmga9cclxuICAgICAgICApXHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5mdW5jdGlvbiBjaHVua1RvSnNvbihjaHVuazogc3RyaW5nKTogYW55IHtcclxuICAgIGxldCBjaHVua2pzb246YW55XHJcbiAgICB0cnl7XHJcbiAgICAgICAgY2h1bmtqc29uID0gSlNPTi5wYXJzZShjaHVuay5yZXBsYWNlQWxsKFwiZGF0YTpcXCBcIixcIlwiKSk7XHJcbiAgICB9Y2F0Y2goZXJyZGope1xyXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoZXJyZGopXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2h1bmtqc29uIHx8IHt9XHJcbn1cclxuZnVuY3Rpb24gUmVxdWVzdEZtb2RlQ2hhdEFwaShhcGlwYXRoOiBzdHJpbmcsIGJvZHk6IGFueSwgbWV0aG9kID0gXCJQT1NUXCIpIHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPGFueT4pID0+IHtcclxuICAgICAgICBsZXQgdXJsID0gQVBJX0JBU0UgKyBhcGlwYXRoO1xyXG4gICAgICAgIGxldCBBUElfVE9LRU4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIkZNT0RFX0FJX1RPS0VOXCIpIHx8IFBhcnNlLlVzZXIuY3VycmVudCgpPy5nZXRTZXNzaW9uVG9rZW4oKVxyXG4gICAgICAgICAgICAvLyDpgJrov4dib2R55Lyg6YCSdG9rZW7lj4LmlbDvvIzpgb/lhY1uby1jb3Jz5qih5byP5LiLQXV0aG9yaXp0aW9u5aS06YOo5peg5pWIXHJcbiAgICAgICAgbGV0IEFVVEhfVE9LRU4gPSBgQmVhcmVyICR7QVBJX1RPS0VOfWBcclxuICAgICAgICBib2R5LnRva2VuID0gQVVUSF9UT0tFTjtcclxuICAgICAgICBpZihib2R5KSBib2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSlcclxuICAgICAgICBjb25zb2xlLmxvZyh1cmwsYm9keSlcclxuICAgICAgICBmZXRjaCh1cmwsIHtcclxuICAgICAgICAgICAgXCJoZWFkZXJzXCI6IHtcclxuICAgICAgICAgICAgICAgIC8vIFwiQXV0aG9yaXphdGlvblwiOiBBVVRIX1RPS0VOLFxyXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCIsXHJcbiAgICAgICAgICAgICAgICBcIkNhY2hlLUNvbnRyb2xcIjogXCJuby1jYWNoZVwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiYm9keVwiOiBib2R5IHx8IG51bGwsXHJcbiAgICAgICAgICAgIFwibWV0aG9kXCI6IG1ldGhvZCxcclxuICAgICAgICAgICAgXCJjcmVkZW50aWFsc1wiOlwib21pdFwiLFxyXG4gICAgICAgICAgICBcIm1vZGVcIjogXCJjb3JzXCJcclxuICAgICAgICB9KS50aGVuKGFzeW5jIHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UpXHJcblxyXG4gICAgICAgICAgICAvLyDmoLnmja7or7fmsYLlj4LmlbDlhrPlrprmmK/lkKbkvb/nlKjmtYHlvI/lpITnkIZcclxuICAgICAgICAgICAgLy8g5qOA5p+lIGJvZHkg5Lit55qEIHN0cmVhbSDlj4LmlbDvvIzogIzkuI3mmK/lsJ3or5Xop6PmnpAgSlNPTu+8iOS8mua2iOiAlyBib2R577yJXHJcbiAgICAgICAgICAgIGNvbnN0IGJvZHlPYmogPSB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGJvZHkpIDogYm9keTtcclxuICAgICAgICAgICAgbGV0IGlzU3RyZWFtID0gYm9keU9iai5zdHJlYW0gIT09IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQganNvbiA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAvLyDlj6rlnKjpnZ7mtYHlvI/mqKHlvI/kuIvlsJ3or5Xop6PmnpAgSlNPTlxyXG4gICAgICAgICAgICBpZiAoIWlzU3RyZWFtKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGpzb24gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coanNvbilcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2goZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBwYXJzZSBKU09OOlwiLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWmguaenOino+aekOWksei0pe+8jOWPr+iDvei/mOaYr+a1geW8j+WTjeW6lFxyXG4gICAgICAgICAgICAgICAgICAgIGlzU3RyZWFtID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZSwgaXNTdHJlYW0gPyBcInN0cmVhbSBtb2RlXCIgOiBqc29uKVxyXG4gICAgICAgICAgICBsZXQgcmVtYWluaW5nRGF0YSA9IGBgO1xyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoZGF0YTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29tYmluZWREYXRhID0gcmVtYWluaW5nRGF0YSArIGRhdGE7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZXMgPSBjb21iaW5lZERhdGEuc3BsaXQoJ1xcbicpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKG1lc3NhZ2VzPy5sZW5ndGg+MSl7IC8vIOiHs+WwkeWIhuWJsjLmnaHmtojmga/ml7bov5vooYzlpITnkIZcclxuICAgICAgICAgICAgICAgICAgICAvLyDlpITnkIbmr4/kuKrlrozmlbTnmoTmtojmga9cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9IG1lc3NhZ2VzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KG1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDkv53lrZjmnIDlkI7kuIDkuKrkuI3lrozmlbTnmoTmtojmga9cclxuICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdEYXRhID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKFwiaXNTdHJlYW1cIixpc1N0cmVhbSlcclxuICAgICAgICAgICAgaWYgKGlzU3RyZWFtKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBncmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWdyZWFkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXJyb3IoJ1Jlc3BvbnNlIGJvZHkgcmVhZGVyIGlzIG51bGwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0KGNvbnRyb2xsZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZCgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjb250cm9sbGVyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlYWRlci5yZWFkKCkudGhlbigoeyBkb25lLCB2YWx1ZSB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImRvbmUsIHZhbHVlXCIsZG9uZSwgdmFsdWUsZGVjb2Rlci5kZWNvZGUodmFsdWUpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyPy5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7IC8vIENvbXBsZXRlIHRoZSBvYnNlcnZlciB3aGVuIHN0cmVhbSBwcm9jZXNzaW5nIGlzIGRvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyPy5lbnF1ZXVlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRyb2xsZXI/LmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvYnNlcnZlci5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyMil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJlcnIyXCIsZXJyMilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHJlYWRlciA9IHJzdHJlYW0uZ2V0UmVhZGVyKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1N0cmVhbShyZXN1bHQ6IFJlYWRhYmxlU3RyZWFtUmVhZFJlc3VsdDxhbnk+KTp2b2lkIHwgUHJvbWlzZUxpa2U8dm9pZD4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB7IGRvbmUsIHZhbHVlIH0gPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRleHQgPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRGF0YSh0ZXh0KSAvLyBFbWl0IGVhY2ggY2h1bmsgb2YgZGF0YVxyXG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkKCkudGhlbihwcm9jZXNzU3RyZWFtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZWFkZXIucmVhZCgpLnRoZW4ocHJvY2Vzc1N0cmVhbSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyDpnZ7mtYHlvI/lk43lupTlpITnkIZcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwicmVzcG9uc2VcIixyZXNwb25zZSlcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhID0ganNvblxyXG4gICAgICAgICAgICAgICAgLy8gT3BlbkFJIEFQSSDpnZ7mtYHlvI/lk43lupTmoLzlvI/vvJpcclxuICAgICAgICAgICAgICAgIC8vIHsgaWQsIG9iamVjdCwgY3JlYXRlZCwgbW9kZWwsIGNob2ljZXM6IFt7IGluZGV4LCBtZXNzYWdlOiB7IHJvbGUsIGNvbnRlbnQgfSwgZmluaXNoX3JlYXNvbiB9XSB9XHJcbiAgICAgICAgICAgICAgICAvLyDlsIblhbbovazmjaLkuLrnsbvkvLzmtYHlvI/lk43lupTnmoTmoLzlvI/ku6Xkv53mjIHlhbzlrrnmgKdcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwianNvbiBkYXRhXCIsZGF0YSlcclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmNob2ljZXMgJiYgZGF0YS5jaG9pY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaG9pY2UgPSBkYXRhLmNob2ljZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGNob2ljZS5tZXNzYWdlPy5jb250ZW50IHx8IFwiXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaooeaLn+a1geW8j+WTjeW6lOagvOW8j++8jOWPkemAgeWGheWuuVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRDaHVuayA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDogXCJjaGF0LmNvbXBsZXRpb24uY2h1bmtcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZDogZGF0YS5jcmVhdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogZGF0YS5tb2RlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogW3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE6IHsgY29udGVudDogY29udGVudCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoX3JlYXNvbjogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWPkemAgeWGheWuuVxyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoJ2RhdGE6ICcgKyBKU09OLnN0cmluZ2lmeShjb250ZW50Q2h1bmspKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qih5ouf57uT5p2f5raI5oGvXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluaXNoQ2h1bmsgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBkYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IFwiY2hhdC5jb21wbGV0aW9uLmNodW5rXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQ6IGRhdGEuY3JlYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IGRhdGEubW9kZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IFt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhOiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaF9yZWFzb246IGNob2ljZS5maW5pc2hfcmVhc29uIHx8IFwic3RvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgnZGF0YTogJyArIEpTT04uc3RyaW5naWZ5KGZpbmlzaENodW5rKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgnZGF0YTogW0RPTkVdJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IG9ic2VydmVyLmVycm9yKGVycm9yKSk7IC8vIEhhbmRsZSBhbnkgZXJyb3JzXHJcblxyXG4gICAgICAgIC8vIFJldHVybiB0aGUgc3Vic2NyaXB0aW9uIGxvZ2ljXHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgLy8gQ2xlYW4gdXAgbG9naWMsIGlmIG5lZWRlZFxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiDkvb/nlKhBSeeUn+aIkOespuWQiOaMh+Wumue7k+aehOeahEpTT07mlbDmja5cclxuICogQHBhcmFtIHByb21wdCDku7vliqHopoHmsYLnmoTmlbTkvZPmj5DnpLror41cclxuICogQHBhcmFtIGpzb25TY2hlbWEg5pyf5pyb55qESlNPTue7k+aehOaPj+i/sO+8iOeUqOS6juaPkOekuuivje+8iVxyXG4gKiBAcGFyYW0gb25NZXNzYWdlIOWunuaXtueUn+aIkOWGheWuueWbnuiwg1xyXG4gKiBAcGFyYW0gcmV0cnlDb3VudCDph43or5XmrKHmlbDvvIzpu5jorqTkuLox5qyhXHJcbiAqIEByZXR1cm5zIOino+aekOWQjueahEpTT07lr7nosaFcclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb21wbGV0aW9uSlNPTihcclxuICAgIHByb21wdDogc3RyaW5nIHwgYW55W10sXHJcbiAgICBqc29uU2NoZW1hOiBzdHJpbmcsXHJcbiAgICBvbk1lc3NhZ2U/OiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkLFxyXG4gICAgcmV0cnlDb3VudDogbnVtYmVyID0gMSxcclxuICAgIG9wdGlvbnM/OmFueXx7XHJcbiAgICAgICAgbW9kZWw6c3RyaW5nXHJcbiAgICAgICAgdGhpbmtpbmc/Ont0eXBlOlwiZW5hYmxlZFwifFwiZGlzYWJsZWRcInxcImF1dG9cIn0sXHJcbiAgICAgICAgbWF4X3Rva2Vucz86bnVtYmVyXHJcbiAgICAgICAgdmlzaW9uPzpib29sZWFuICAvLyDmmK/lkKblkK/nlKjop4bop4nmqKHlnotcclxuICAgICAgICBpbWFnZXM/OnN0cmluZ1tdICAvLyDlm77niYdVUkzliJfooahcclxuICAgICAgICBzdHJlYW0/OmJvb2xlYW4gIC8vIOaYr+WQpuS9v+eUqOa1geW8j+WKoOi9ve+8jOm7mOiupGZhbHNlXHJcbiAgICB9XHJcbik6IFByb21pc2U8YW55PiB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIC8vIOiuvue9riBzdHJlYW0g6buY6K6k5YC85Li6IGZhbHNlXHJcbiAgICBpZiAob3B0aW9ucy5zdHJlYW0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIG9wdGlvbnMuc3RyZWFtID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsZXQgY3VycmVudFJldHJ5ID0gMDtcclxuXHJcbiAgICBjb25zdCBhdHRlbXB0Q29tcGxldGlvbiA9IGFzeW5jICgpOiBQcm9taXNlPGFueT4gPT4ge1xyXG4gICAgICAgIC8vIDEuIOaehOW7uuaPkOekuuivjVxyXG4gICAgICAgIGNvbnN0IEpzb25SZXN1bHRQYXJzZVByb21wdCA9IGDor7fkuKXmoLzmjInnhafku6XkuIvopoHmsYLnlJ/miJBKU09O5pWw5o2u77yaXHJcbi0g5pWw5o2u57uT5p6E6KaB5rGC77yaJHtqc29uU2NoZW1hfVxyXG4tIOi/lOWbnuS4gOS4quWujOaVtOeahEpTT07lr7nosaHvvIzor7fnoa7kv51KU09O5qC85byP5a6M5pW077yM5LiN6KaB6YGX5ryP5Lu75L2V5qCH54K556ym5Y+3XHJcbi0g5rOo5oSP6L+U5Zue55qESlNPTuagvOW8j+avj+S4qktFWemDveaciVwiXCLljIXoo7nlkoxWYWx1ZeS5i+mXtOmDveaciTpcclxuLSDms6jmhI9cIlwi5a2X56ym5Liy5YaF5YaN5Ye6546wXCLnrKblj7fpnIDopoHnlKhcXFxcXFxcIui9rOS5iVxyXG5gO1xyXG5cclxuICAgICAgICAvLyAyLiDliJ3lp4vljJbmtojmga/liJfooahcclxuICAgICAgICBsZXQgbWVzc2FnZUxpc3Q6IGFueVtdO1xyXG5cclxuICAgICAgICAvLyDlpoLmnpxwcm9tcHTlt7Lnu4/mmK/mtojmga/mlbDnu4Qo5YyF5ZCr5Zu+54mH562JKSznm7TmjqXkvb/nlKhcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9tcHQpKSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2VMaXN0ID0gcHJvbXB0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIOWQpuWImeaehOW7uuaWh+acrOa2iOaBr1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy52aXNpb24gJiYgb3B0aW9ucy5pbWFnZXMgJiYgb3B0aW9ucy5pbWFnZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8g6KeG6KeJ5qih5Z6LOuaehOW7uuWMheWQq+WbvueJh+eahOa2iOaBr1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudDogYW55W10gPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucy5pbWFnZXMubWFwKChpbWFnZVVybDogc3RyaW5nKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnaW1hZ2VfdXJsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfdXJsOiB7IHVybDogaW1hZ2VVcmwgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogcHJvbXB0ICsgSnNvblJlc3VsdFBhcnNlUHJvbXB0XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlTGlzdCA9IFt7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9sZTogXCJ1c2VyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogY29udGVudFxyXG4gICAgICAgICAgICAgICAgfV07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyDmma7pgJrmlofmnKzmtojmga9cclxuICAgICAgICAgICAgICAgIG1lc3NhZ2VMaXN0ID0gW3tcclxuICAgICAgICAgICAgICAgICAgICByb2xlOiBcInVzZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBwcm9tcHQgKyBKc29uUmVzdWx0UGFyc2VQcm9tcHRcclxuICAgICAgICAgICAgICAgIH1dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAzLiDliJvlu7pGbW9kZUNoYXRDb21wbGV0aW9u5a6e5L6LXHJcbiAgICAgICAgb3B0aW9ucy5yZXNwb25zZV9mb3JtYXQgPSB7IFwidHlwZVwiOiBcImpzb25fb2JqZWN0XCIgfVxyXG4gICAgICAgIGNvbnN0IGNvbXBsZXRpb24gPSBuZXcgRm1vZGVDaGF0Q29tcGxldGlvbihtZXNzYWdlTGlzdCxvcHRpb25zKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyA0LiDlrZjlgqjntK/np6/lhoXlrrlcclxuICAgICAgICBsZXQgZnVsbENvbnRlbnQgPSBcIlwiO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIDUuIOi/lOWbnlByb21pc2XvvIzlpITnkIblvILmraXmtYHlvI/lk43lupRcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZW5kJCA9IGNvbXBsZXRpb24uc2VuZENvbXBsZXRpb24oe1xyXG4gICAgICAgICAgICAgICAgaXNEaXJlY3Q6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBtYXhfdG9rZW5zOiAzMjc2OCxcclxuICAgICAgICAgICAgICAgIHN0cmVhbTogb3B0aW9ucy5zdHJlYW1cclxuICAgICAgICAgICAgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChtZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5aSE55CG5raI5oGv5YaF5a65XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlPy5jb250ZW50ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDb250ZW50ID0gbWVzc2FnZS5jb250ZW50O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g6LCD55So5Zue6LCD5Ye95pWwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWmguaenOaYr+mdnua1geW8j+aooeW8j++8jOWPquWcqOWujOaIkOaXtuiwg+eUqOS4gOasoSBvbk1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5aaC5p6c5piv5rWB5byP5qih5byP77yM5a6e5pe25o6o6YCB55Sf5oiQ5YaF5a65XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbk1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnN0cmVhbSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDpnZ7mtYHlvI/vvJrlj6rlnKjlrozmiJDml7bosIPnlKhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5jb21wbGV0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1lc3NhZ2UoZnVsbENvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5rWB5byP77ya5q+P5qyh6YO96LCD55SoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25NZXNzYWdlKGZ1bGxDb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qOA5p+l5piv5ZCm5a6M5oiQXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuY29tcGxldGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDYuIOacgOe7iEpTT07mj5Dlj5ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25PYmplY3QgPSBleHRyYWN0SlNPTihmdWxsQ29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbk9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoanNvbk9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIuacquiDveS7juWTjeW6lOS4reaPkOWPluacieaViOeahEpTT07lr7nosaFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6YW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBKU09O6Kej5p6Q5aSx6LSlICjnrKwke2N1cnJlbnRSZXRyeSArIDF95qyh5bCd6K+VKTpgLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5Y6f5aeL5YaF5a65OlwiLCBmdWxsQ29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGDnlJ/miJDnmoTlk43lupTkuI3nrKblkIhKU09O5qC85byPOiAke2UubWVzc2FnZX1gKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOe7k+adn+iuoumYhVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZW5kJC51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvbXBsZXRpb27or7fmsYLlpLHotKU6XCIsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICBzZW5kJC51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyDph43or5XpgLvovpFcclxuICAgIHdoaWxlIChjdXJyZW50UmV0cnkgPD0gcmV0cnlDb3VudCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGF0dGVtcHRDb21wbGV0aW9uKCk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50UmV0cnkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgSlNPTueUn+aIkOaIkOWKn++8jOmHjeivleS6hiAke2N1cnJlbnRSZXRyeX0g5qyhYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjdXJyZW50UmV0cnkrKztcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50UmV0cnkgPD0gcmV0cnlDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGDnrKwgJHtjdXJyZW50UmV0cnl9IOasoeWwneivleWksei0pe+8jOato+WcqOmHjeivlS4uLiDplJnor6/kv6Hmga86YCwgZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAvLyDlj6/ku6Xmt7vliqDlu7bov5/pgb/lhY3ov4flv6vph43or5VcclxuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDAwKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBKU09O55Sf5oiQ5aSx6LSl77yM5bey6YeN6K+VICR7cmV0cnlDb3VudH0g5qyh77yM5pyA57uI6ZSZ6K+vOmAsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg57uP6L+HICR7cmV0cnlDb3VudH0g5qyh6YeN6K+V5ZCO5LuN5peg5rOV55Sf5oiQ5pyJ5pWISlNPTjogJHtlcnJvci5tZXNzYWdlfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICog5LuO5a2X56ym5Liy5Lit5o+Q5Y+WSlNPTuWvueixoe+8iOWinuW8uueJiO+8iVxyXG4gKiBAcGFyYW0gc3RyIOWMheWQq0pTT07nmoTlrZfnrKbkuLJcclxuICogQHJldHVybnMg6Kej5p6Q5ZCO55qESlNPTuWvueixoeaIlm51bGxcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0SlNPTihzdHI6IHN0cmluZyk6IGFueSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImZ1bGxDb250ZW50XCIsc3RyKVxyXG4gICAgLy8g6aaW5YWI5bCd6K+V55u05o6l6Kej5p6Q5pW05Liq5a2X56ym5LiyXHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0ci50cmltKCkpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8vIOWmguaenOebtOaOpeino+aekOWksei0pe+8jOWImeWwneivleaPkOWPlkpTT07niYfmrrVcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc3RhY2sgPSAwO1xyXG4gICAgbGV0IHN0YXJ0SW5kZXggPSAtMTtcclxuICAgIGxldCByZXN1bHQgPSBudWxsO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHN0cltpXSA9PT0gJ3snKSB7XHJcbiAgICAgICAgICAgIGlmIChzdGFjayA9PT0gMCkgc3RhcnRJbmRleCA9IGk7XHJcbiAgICAgICAgICAgIHN0YWNrKys7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzdHJbaV0gPT09ICd9Jykge1xyXG4gICAgICAgICAgICBzdGFjay0tO1xyXG4gICAgICAgICAgICBpZiAoc3RhY2sgPT09IDAgJiYgc3RhcnRJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QganNvblN0ciA9IHN0ci5zbGljZShzdGFydEluZGV4LCBpICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gSlNPTi5wYXJzZShqc29uU3RyKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyDnu6fnu63lsJ3or5XkuIvkuIDkuKrlj6/og73nmoQgSlNPTlxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAtMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyDlpoLmnpzov5jmmK/msqHmnInmib7liLDmnInmlYhKU09O77yM5bCd6K+V5L+u5aSN5bi46KeB55qESlNPTuagvOW8j+mXrumimFxyXG4gICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICByZXN1bHQgPSB0cnlGaXhBbmRQYXJzZUpTT04oc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG4vKipcclxuICog5bCd6K+V5L+u5aSN5bi46KeB55qESlNPTuagvOW8j+mXrumimOW5tuino+aekFxyXG4gKiBAcGFyYW0gc3RyIOWPr+iDveacieagvOW8j+mXrumimOeahEpTT07lrZfnrKbkuLJcclxuICogQHJldHVybnMg6Kej5p6Q5ZCO55qESlNPTuWvueixoeaIlm51bGxcclxuICovXHJcbmZ1bmN0aW9uIHRyeUZpeEFuZFBhcnNlSlNPTihzdHI6IHN0cmluZyk6IGFueSB7XHJcbiAgICAvLyDmj5Dlj5blj6/og73nmoRKU09O6YOo5YiGXHJcbiAgICBjb25zdCBqc29uTWF0Y2ggPSBzdHIubWF0Y2goL1xce1tcXHNcXFNdKlxcfS8pO1xyXG4gICAgaWYgKCFqc29uTWF0Y2gpIHJldHVybiBudWxsO1xyXG4gICAgXHJcbiAgICBsZXQganNvblN0ciA9IGpzb25NYXRjaFswXTtcclxuICAgIFxyXG4gICAgLy8g5bCd6K+V5L+u5aSN5bi46KeB6Zeu6aKYXHJcbiAgICBjb25zdCBmaXhlcyA9IFtcclxuICAgICAgICAvLyDnp7vpmaTmnKvlsL7lpJrkvZnnmoTpgJflj7dcclxuICAgICAgICAoczogc3RyaW5nKSA9PiBzLnJlcGxhY2UoLywoXFxzKlt9XFxdXSkvZywgJyQxJyksXHJcbiAgICAgICAgLy8g56Gu5L+d5bGe5oCn5ZCN5pyJ5byV5Y+3XHJcbiAgICAgICAgKHM6IHN0cmluZykgPT4gcy5yZXBsYWNlKC8oW3ssXVxccyopKFthLXpBLVpfJF1bYS16QS1aMC05XyRdKilcXHMqOi9nLCAnJDFcIiQyXCI6JyksXHJcbiAgICAgICAgLy8g5L+u5aSN5Y2V5byV5Y+35Li65Y+M5byV5Y+3XHJcbiAgICAgICAgKHM6IHN0cmluZykgPT4gcy5yZXBsYWNlKC8nL2csICdcIicpLFxyXG4gICAgICAgIC8vIOenu+mZpOazqOmHilxyXG4gICAgICAgIChzOiBzdHJpbmcpID0+IHMucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nLCAnJykucmVwbGFjZSgvXFwvXFwvLiokL2dtLCAnJyksXHJcbiAgICBdO1xyXG4gICAgXHJcbiAgICBmb3IgKGNvbnN0IGZpeCBvZiBmaXhlcykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeGVkU3RyID0gZml4KGpzb25TdHIpO1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShmaXhlZFN0cik7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyDnu6fnu63lsJ3or5XkuIvkuIDkuKrkv67lpI3mlrnms5VcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBudWxsO1xyXG59Il19
543
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUtY29tcGxldGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvY29yZS9hZ2VudC9jaGF0L2NvbXBsZXRpb24vZm1vZGUtY29tcGxldGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFZLE1BQU0sTUFBTSxDQUFBO0FBQ3pFLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsTUFBTSxRQUFRLEdBQVUsMkNBQTJDLENBQUE7QUFFbkUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQUEsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUd4Rjs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBVTVCLFlBQ0ksUUFBMkIsRUFBQyxPQUkzQjtRQVRMLFlBQU8sR0FBVSxFQUFFLENBQUEsQ0FBQyxXQUFXO1FBQy9CLGtCQUFhLEdBQVksRUFBRSxDQUFBO1FBRTNCLGdCQUFXLEdBQVcsS0FBSyxDQUFDO1FBUXhCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sRUFBRSxLQUFLLElBQUksY0FBYyxDQUFBLENBQUMsbUJBQW1CO1FBQ2pFLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxFQUFFLFVBQVUsSUFBSSxLQUFLLENBQUEsQ0FBQyxnQkFBZ0I7UUFDL0QsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFBO0lBQy9CLENBQUM7SUFDRDs7Ozs7O09BTUc7SUFDSCxjQUFjLENBQUMsVUFLb0IsRUFB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QUksQ0FBQztRQUM5QyxXQUFXO1FBQ1gsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsMENBQTBDLEVBQUUsU0FBUyxDQUFDO1FBQy9FLFlBQVk7UUFDWixDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1FBQ25DLE9BQU87UUFDUCxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztLQUM3RSxDQUFDO0lBRUYsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUM7WUFDRCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsY0FBYztRQUNsQixDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBidWZmZXJUaW1lLCBjb25jYXRNYXAsIGRlbGF5LCBPYnNlcnZhYmxlLCBPYnNlcnZlciB9IGZyb20gXCJyeGpzXCJcclxuLy8gY29uc3QgQVBJX0JBU0U6c3RyaW5nID0gXCJodHRwOi8vMTI3LjAuMC4xOjczMzcvYXBpL2FwaWcvYWlnYy9ncHRcIlxyXG4vLyBjb25zdCBBUElfQkFTRTpzdHJpbmcgPSBcImh0dHBzOi8vdGVzdC5mbW9kZS5jbi9hcGkvYXBpZy9haWdjL2dwdFwiXHJcbmNvbnN0IEFQSV9CQVNFOnN0cmluZyA9IFwiaHR0cHM6Ly9zZXJ2ZXIuZm1vZGUuY24vYXBpL2FwaWcvYWlnYy9ncHRcIlxyXG5pbXBvcnQgeyBGbW9kZUNoYXRNZXNzYWdlIH0gZnJvbSBcIi4uL2ludGVyZmFjZVwiO1xyXG5pbXBvcnQge0Ztb2RlUGFyc2V9IGZyb20gXCIuLi8uLi8uLi8uLi9jb3JlL3BhcnNlXCI7Y29uc3QgUGFyc2UgPSBGbW9kZVBhcnNlLndpdGgoXCJub3ZhXCIpO1xyXG5pbXBvcnQgeyBEb3ViYW9DaGF0T3B0aW9ucywgR3B0Q2hhdE9wdGlvbnMgfSBmcm9tIFwiLi9pbnQtZ3B0LWNoYXQtb3B0aW9uc1wiXHJcblxyXG4vKipcclxuICogRm1vZGVDaGF0Q29tcGxldGlvbiDmlofmnKzooaXlhajnsbtcclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEZtb2RlQ2hhdENvbXBsZXRpb257XHJcbiAgICBpbmRleE9mTGlzdDpudW1iZXJcclxuICAgIG1vZGVsOnN0cmluZ1xyXG4gICAgbWF4X3Rva2VuczpudW1iZXJcclxuICAgIHRvb2xzOkFycmF5PGFueT5cclxuICAgIG1lc3NhZ2VzOkZtb2RlQ2hhdE1lc3NhZ2VbXSAvLyDooaXlhajliY3mj5DnpLror43liJfooahcclxuICAgIGNvbnRlbnQ6c3RyaW5nID0gXCJcIiAvLyDmnKzmrKHmjqXmlLbmtojmga/nu5PmnpxcclxuICAgIGNvbnRlbnRCdWZmZXI6c3RyaW5nW10gPSBbXVxyXG4gICAgY29udGVudFB1c2hlcjphbnlcclxuICAgIGlzQ29tcGxldGVkOmJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIG1lc3NhZ2VzOkZtb2RlQ2hhdE1lc3NhZ2VbXSxvcHRpb25zPzp7XHJcbiAgICAgICAgICAgIG1vZGVsPzpzdHJpbmdcclxuICAgICAgICAgICAgbWF4X3Rva2Vucz86bnVtYmVyXHJcbiAgICAgICAgICAgIHRvb2xzPzphbnlbXVxyXG4gICAgICAgIH1cclxuICAgICl7XHJcbiAgICAgICAgdGhpcy5pbmRleE9mTGlzdCA9IE51bWJlcihtZXNzYWdlcy5sZW5ndGgpXHJcbiAgICAgICAgdGhpcy5tZXNzYWdlcyA9IG1lc3NhZ2VzXHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG9wdGlvbnM/Lm1vZGVsIHx8IFwiZm1vZGUtMS42LWNuXCIgLy8g6buY6K6k6LGG5YyFIDEuNiDmgKfku7fmr5Tnm67liY3mnIDpq5hcclxuICAgICAgICB0aGlzLm1heF90b2tlbnMgPSBvcHRpb25zPy5tYXhfdG9rZW5zIHx8IDMyNzY4IC8vIOixhuWMhTEuNiArIDMya+S7peS4ilxyXG4gICAgICAgIHRoaXMudG9vbHMgPSBvcHRpb25zPy50b29sc1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuaXNEaXJlY3Qg5piv5ZCm5LiN562J5b6F6YCQ5a2X6I635Y+W77yM55u05o6l5a6M5oiQ5YaF5a655o6o6YCBXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5pbnRUaW1lIOaYr+WQpuS4jeetieW+hemAkOWtl+iOt+WPlu+8jOebtOaOpeWujOaIkOWGheWuueaOqOmAgVxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMuc3RyZWFtIOaYr+WQpuS9v+eUqOa1geW8j+WKoOi9ve+8jOm7mOiupHRydWVcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIHNlbmRDb21wbGV0aW9uKG9wdGlvbnM6e1xyXG4gICAgICAgIGlzRGlyZWN0Pzpib29sZWFuLFxyXG4gICAgICAgIGludFRpbWU/Om51bWJlcixcclxuICAgICAgICBvbkNvbXBsZXRlPzpGdW5jdGlvbixcclxuICAgICAgICBzdHJlYW0/OmJvb2xlYW5cclxuICAgIH0mR3B0Q2hhdE9wdGlvbnMmRG91YmFvQ2hhdE9wdGlvbnM9e21lc3NhZ2VzOltdfSk6T2JzZXJ2YWJsZTxGbW9kZUNoYXRNZXNzYWdlPntcclxuICAgICAgICBvcHRpb25zLmludFRpbWUgPSBvcHRpb25zPy5pbnRUaW1lIHx8IDUwIC8vIOaMieavq+enkumAkOWtl+aOqOmAgVxyXG4gICAgICAgIG9wdGlvbnMuaXNEaXJlY3QgPSBvcHRpb25zPy5pc0RpcmVjdCB8fCBmYWxzZVxyXG4gICAgICAgIGlmKG9wdGlvbnM/LmlzRGlyZWN0KSBvcHRpb25zLmludFRpbWUgPSAxXHJcbiAgICAgICAgLy8g6K6+572uIHN0cmVhbSDpu5jorqTlgLzkuLogdHJ1ZVxyXG4gICAgICAgIGlmIChvcHRpb25zLnN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuc3RyZWFtID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG9wdHM6R3B0Q2hhdE9wdGlvbnMmRG91YmFvQ2hhdE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIFwibWVzc2FnZXNcIjp0aGlzLm1lc3NhZ2VzLFxyXG4gICAgICAgICAgICBcInN0cmVhbVwiOm9wdGlvbnMuc3RyZWFtLFxyXG4gICAgICAgICAgICBcIm1vZGVsXCI6dGhpcy5tb2RlbCxcclxuICAgICAgICAgICAgXCJ0ZW1wZXJhdHVyZVwiOm9wdGlvbnM/LnRlbXBlcmF0dXJlIHx8IDAuNSxcclxuICAgICAgICAgICAgXCJwcmVzZW5jZV9wZW5hbHR5XCI6b3B0aW9ucz8ucHJlc2VuY2VfcGVuYWx0eSB8fCAwLFxyXG4gICAgICAgICAgICBcImZyZXF1ZW5jeV9wZW5hbHR5XCI6b3B0aW9ucz8uZnJlcXVlbmN5X3BlbmFsdHkgfHwgMFxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGlua2luZ+aooeW8j+eahOmAgumFje+8muixhuWMhVxyXG4gICAgICAgIGlmKHRoaXMubW9kZWwuaW5kZXhPZihcIjEuNlwiKT4tMSl7XHJcbiAgICAgICAgICAgIG9wdHMudGhpbmtpbmcgPSBvcHRzLnRoaW5raW5nIHx8IHt0eXBlOlwiZGlzYWJsZWRcIn07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihvcHRpb25zPy5tYXhfdG9rZW5zKXtcclxuICAgICAgICAgICAgb3B0c1tcIm1heF90b2tlbnNcIl0gPSBvcHRpb25zPy5tYXhfdG9rZW5zIHx8IHRoaXMubWF4X3Rva2VucztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYob3B0aW9ucz8udG9vbHM/Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgIG9wdHNbXCJ0b29sc1wiXSA9IG9wdGlvbnM/LnRvb2xzIHx8IHRoaXMudG9vbHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG9wdHMpXHJcbiAgICAgICAgbGV0ICRtZXNzYWdlUmVjZWl2ZXIgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPEZtb2RlQ2hhdE1lc3NhZ2U+KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSBSZXF1ZXN0Rm1vZGVDaGF0QXBpKFwiL3YxL2NoYXQvY29tcGxldGlvbnNcIiwgb3B0cylcclxuICAgICAgICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBlYWNoIGNodW5rIG9mIGRhdGFcclxuICAgICAgICAgICAgICAgIC8qKiBDaHVua+aWh+acrOaVsOaNruagvOW8j+WmguS4i++8mlxyXG4gICAgICAgICAgICAgICAg5q2j5bi45raI5oGv77yaXHJcbiAgICAgICAgICAgICAgICAnZGF0YToge1wiaWRcIjpcImNoYXRjbXBsLXkyUExLcVBEbndBRkpJajJMNWFxZEg1VFdLOVl2XCIsXCJvYmplY3RcIjpcImNoYXQuY29tcGxldGlvbi5jaHVua1wiLFwiY3JlYXRlZFwiOjE2OTY3NzAxNjIsXCJtb2RlbFwiOlwiZ3B0LTMuNS10dXJiby0wNjEzXCIsXCJjaG9pY2VzXCI6W3tcImluZGV4XCI6MCxcImRlbHRhXCI6e1wiY29udGVudFwiOlwi5pys5o+Q56S66K+N5LuF55So5LqO5rWL6K+V44CCXCJ9LFwiZmluaXNoX3JlYXNvblwiOm51bGx9XX0nLFxyXG4gICAgICAgICAgICAgICAg57uI5q2i5Y6f5Zug77yaXHJcbiAgICAgICAgICAgICAgICAnZGF0YToge1wiaWRcIjpcImNoYXRjbXBsLXkyUExLcVBEbndBRkpJajJMNWFxZEg1VFdLOVl2XCIsXCJvYmplY3RcIjpcImNoYXQuY29tcGxldGlvbi5jaHVua1wiLFwiY3JlYXRlZFwiOjE2OTY3NzAxNjIsXCJtb2RlbFwiOlwiZ3B0LTMuNS10dXJiby0wNjEzXCIsXCJjaG9pY2VzXCI6W3tcImluZGV4XCI6MCxcImRlbHRhXCI6e30sXCJmaW5pc2hfcmVhc29uXCI6XCJzdG9wXCJ9XX0nLFxyXG4gICAgICAgICAgICAgICAg57uT5p2f5raI5oGv77yaXHJcbiAgICAgICAgICAgICAgICAnZGF0YTogW0RPTkVdJ1xyXG4gICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiY2h1bmtcIixkYXRhKVxyXG4gICAgICAgICAgICAgICAgbGV0IGNodW5rID0gU3RyaW5nKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbXBsZXRpb24gbWVzc2FnZSBpcyByZWNlaXZlZFxyXG4gICAgICAgICAgICAgICAgbGV0IGNodW5ranNvbjphbnlcclxuICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICBjaHVua2pzb24gPSBjaHVua1RvSnNvbihjaHVuaylcclxuICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe31cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGNodW5rLGNodW5ranNvbixjaHVua2pzb24/LmNob2ljZXM/LlswXT8uZGVsdGE/LmNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgY2h1bmsgPT0gJ2RhdGE6IFtET05FXScgXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgKGNodW5ranNvbj8uY3JlYXRlZCAmJiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtqc29uPy5jaG9pY2VzPy5bMF0/LmZpbmlzaF9yZWFzb24gLy8gZmluaXNoX3JlYXNvbiA9PSAnc3RvcCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKCFjaHVua2pzb24uY2hvaWNlcz8ubGVuZ3RoIHx8ICFjaHVua2pzb24/LmNob2ljZXM/LlswXT8uZGVsdGE/LmNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKSB7IFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb21wbGV0ZWQgPSB0cnVlOyAvLyDmoIforrDlrozmiJAgPT4g562J5b6FaW50ZXJ2YWzmjqjpgIFcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImRhdGE6IFtET05FXVwiLG9wdGlvbnM/LmlzRGlyZWN0LHRoaXMuaXNDb21wbGV0ZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYob3B0aW9ucz8uaXNEaXJlY3QgJiYgdGhpcy5pc0NvbXBsZXRlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTpcImFzc2lzdGFudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2lkOmNodW5ranNvbj8uWydpZCddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDp0aGlzLmNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTp0cnVlLCAvLyDmjqjpgIHlrozmiJBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDpuZXcgRGF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAvLyBVbnN1YnNjcmliZSB3aGVuIGRvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz8ub25Db21wbGV0ZSYmb3B0aW9ucy5vbkNvbXBsZXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6XCJhc3Npc3RhbnRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNpZDpjaHVua2pzb24/LlsnaWQnXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6dGhpcy5jb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6dHJ1ZSwgLy8g5o6o6YCB5a6M5oiQXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6bmV3IERhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGNodW5rKVxyXG4gICAgICAgICAgICAgICAgaWYoY2h1bmsuaW5kZXhPZihcImRhdGE6XFwge1wiKT4tMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY2h1bmspXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY2h1bmtqc29uPy5jaG9pY2VzPy5bMF0/LmRlbHRhKVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB3b3JkcyA9IGNodW5ranNvbj8uY2hvaWNlcz8uWzBdPy5kZWx0YT8uY29udGVudCB8fCBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50QnVmZmVyLnB1c2god29yZHMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmtojmga/ov5Tlm57mqKHlvI/vvJrlrprml7blmajmjqjpgIHvvIzmqKHmi5/pgJDlrZfovpPlh7pcclxuICAgICAgICAgICAgICAgICAgICBpZihvcHRpb25zPy5pc0RpcmVjdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnQgKz0gKHdvcmRzIHx8IFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOm7mOiupOe0r+WKoOa2iOaBr+e7k+aenFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXRoaXMuaXNDb21wbGV0ZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlOlwiYXNzaXN0YW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZDpjaHVua2pzb24/LlsnaWQnXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDp0aGlzLmNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDpuZXcgRGF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIW9wdGlvbnM/LmlzRGlyZWN0JiYhdGhpcy5jb250ZW50UHVzaGVyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50UHVzaGVyID0gc2V0SW50ZXJ2YWwoKCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuaXNDb21wbGV0ZWQgJiYgdGhpcy5jb250ZW50QnVmZmVyPy5sZW5ndGg9PTApeyAvLyDmjqjpgIHlrozmr5XvvIzmuIXpmaTorqHml7blmahcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZTpcImFzc2lzdGFudFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWQ6Y2h1bmtqc29uPy5bJ2lkJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6dGhpcy5jb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTp0cnVlLCAvLyDmjqjpgIHlrozmiJBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZEF0Om5ldyBEYXRlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAvLyBVbnN1YnNjcmliZSB3aGVuIGRvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuY29udGVudFB1c2hlcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jb250ZW50QnVmZmVyPy5sZW5ndGg+PTApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuY29udGVudEJ1ZmZlcj8ubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnQgKz0gdGhpcy5jb250ZW50QnVmZmVyLnNoaWZ0KClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU6XCJhc3Npc3RhbnRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkOmNodW5ranNvbj8uWydpZCddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OnRoaXMuY29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZEF0Om5ldyBEYXRlKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LG9wdGlvbnM/LmludFRpbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY29udGVudClcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmV0dXJuICRtZXNzYWdlUmVjZWl2ZXIucGlwZShcclxuICAgICAgICAgICAgYnVmZmVyVGltZSgxMDApLCAvLyDmr48xMDBtc+aUtumbhua2iOaBr1xyXG4gICAgICAgICAgICBjb25jYXRNYXAobWVzc2FnZXMgPT4gbWVzc2FnZXMpLCAvLyDkvb/nlKggY29uY2F0TWFwIOmAkOS4quWPkemAgea2iOaBr1xyXG4gICAgICAgICAgICBkZWxheSgyMDApIC8vIOW7tui/nzIwMG1z6L6T5Ye65q+P5p2h5raI5oGvXHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gY2h1bmtUb0pzb24oY2h1bms6IHN0cmluZyk6IGFueSB7XHJcbiAgICBsZXQgY2h1bmtqc29uOmFueVxyXG4gICAgdHJ5e1xyXG4gICAgICAgIGNodW5ranNvbiA9IEpTT04ucGFyc2UoY2h1bmsucmVwbGFjZUFsbChcImRhdGE6XFwgXCIsXCJcIikpO1xyXG4gICAgfWNhdGNoKGVycmRqKXtcclxuICAgICAgICAvLyBjb25zb2xlLmVycm9yKGVycmRqKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNodW5ranNvbiB8fCB7fVxyXG59XHJcbmZ1bmN0aW9uIFJlcXVlc3RGbW9kZUNoYXRBcGkoYXBpcGF0aDogc3RyaW5nLCBib2R5OiBhbnksIG1ldGhvZCA9IFwiUE9TVFwiKSB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxhbnk+KSA9PiB7XHJcbiAgICAgICAgbGV0IHVybCA9IEFQSV9CQVNFICsgYXBpcGF0aDtcclxuICAgICAgICBsZXQgQVBJX1RPS0VOID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJGTU9ERV9BSV9UT0tFTlwiKSB8fCBQYXJzZS5Vc2VyLmN1cnJlbnQoKT8uZ2V0U2Vzc2lvblRva2VuKCkgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJDT01QQU5ZX1BVQkxJQ19UT0tFTlwiKVxyXG4gICAgICAgICAgICAvLyDpgJrov4dib2R55Lyg6YCSdG9rZW7lj4LmlbDvvIzpgb/lhY1uby1jb3Jz5qih5byP5LiLQXV0aG9yaXp0aW9u5aS06YOo5peg5pWIXHJcbiAgICAgICAgbGV0IEFVVEhfVE9LRU4gPSBgQmVhcmVyICR7QVBJX1RPS0VOfWBcclxuICAgICAgICBib2R5LnRva2VuID0gQVVUSF9UT0tFTjtcclxuICAgICAgICBsZXQgY29tcGFueSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiY29tcGFueVwiKTtcclxuICAgICAgICBpZihjb21wYW55KXtcclxuICAgICAgICAgICAgYm9keS5jb21wYW55ID0gYm9keS5jb21wYW55IHx8IGNvbXBhbnlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoYm9keSkgYm9keSA9IEpTT04uc3RyaW5naWZ5KGJvZHkpXHJcbiAgICAgICAgY29uc29sZS5sb2codXJsLGJvZHkpXHJcbiAgICAgICAgZmV0Y2godXJsLCB7XHJcbiAgICAgICAgICAgIFwiaGVhZGVyc1wiOiB7XHJcbiAgICAgICAgICAgICAgICAvLyBcIkF1dGhvcml6YXRpb25cIjogQVVUSF9UT0tFTixcclxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiLFxyXG4gICAgICAgICAgICAgICAgXCJDYWNoZS1Db250cm9sXCI6IFwibm8tY2FjaGVcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImJvZHlcIjogYm9keSB8fCBudWxsLFxyXG4gICAgICAgICAgICBcIm1ldGhvZFwiOiBtZXRob2QsXHJcbiAgICAgICAgICAgIFwiY3JlZGVudGlhbHNcIjpcIm9taXRcIixcclxuICAgICAgICAgICAgXCJtb2RlXCI6IFwiY29yc1wiXHJcbiAgICAgICAgfSkudGhlbihhc3luYyByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3BvbnNlKVxyXG5cclxuICAgICAgICAgICAgLy8g5qC55o2u6K+35rGC5Y+C5pWw5Yaz5a6a5piv5ZCm5L2/55So5rWB5byP5aSE55CGXHJcbiAgICAgICAgICAgIC8vIOajgOafpSBib2R5IOS4reeahCBzdHJlYW0g5Y+C5pWw77yM6ICM5LiN5piv5bCd6K+V6Kej5p6QIEpTT07vvIjkvJrmtojogJcgYm9kee+8iVxyXG4gICAgICAgICAgICBjb25zdCBib2R5T2JqID0gdHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShib2R5KSA6IGJvZHk7XHJcbiAgICAgICAgICAgIGxldCBpc1N0cmVhbSA9IGJvZHlPYmouc3RyZWFtICE9PSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IGpzb24gPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgLy8g5Y+q5Zyo6Z2e5rWB5byP5qih5byP5LiL5bCd6K+V6Kej5p6QIEpTT05cclxuICAgICAgICAgICAgaWYgKCFpc1N0cmVhbSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGpzb24pXHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgSlNPTjpcIiwgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzop6PmnpDlpLHotKXvvIzlj6/og73ov5jmmK/mtYHlvI/lk43lupRcclxuICAgICAgICAgICAgICAgICAgICBpc1N0cmVhbSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmVzcG9uc2UsIGlzU3RyZWFtID8gXCJzdHJlYW0gbW9kZVwiIDoganNvbilcclxuICAgICAgICAgICAgbGV0IHJlbWFpbmluZ0RhdGEgPSBgYDtcclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NEYXRhKGRhdGE6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbWJpbmVkRGF0YSA9IHJlbWFpbmluZ0RhdGEgKyBkYXRhO1xyXG4gICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2VzID0gY29tYmluZWREYXRhLnNwbGl0KCdcXG4nKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZihtZXNzYWdlcz8ubGVuZ3RoPjEpeyAvLyDoh7PlsJHliIblibIy5p2h5raI5oGv5pe26L+b6KGM5aSE55CGXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5aSE55CG5q+P5Liq5a6M5pW055qE5raI5oGvXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChtZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5L+d5a2Y5pyA5ZCO5LiA5Liq5LiN5a6M5pW055qE5raI5oGvXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nRGF0YSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZyhcImlzU3RyZWFtXCIsaXNTdHJlYW0pXHJcbiAgICAgICAgICAgIGlmIChpc1N0cmVhbSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFncmVhZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IobmV3IEVycm9yKCdSZXNwb25zZSBib2R5IHJlYWRlciBpcyBudWxsJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydChjb250cm9sbGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29udHJvbGxlcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZWFkZXIucmVhZCgpLnRoZW4oKHsgZG9uZSwgdmFsdWUgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJkb25lLCB2YWx1ZVwiLGRvbmUsIHZhbHVlLGRlY29kZXIuZGVjb2RlKHZhbHVlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb25lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlcj8uY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpOyAvLyBDb21wbGV0ZSB0aGUgb2JzZXJ2ZXIgd2hlbiBzdHJlYW0gcHJvY2Vzc2luZyBpcyBkb25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlcj8uZW5xdWV1ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9sbGVyPy5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2JzZXJ2ZXIuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGVycjIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXJyMlwiLGVycjIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIGxldCByZWFkZXIgPSByc3RyZWFtLmdldFJlYWRlcigpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NTdHJlYW0ocmVzdWx0OiBSZWFkYWJsZVN0cmVhbVJlYWRSZXN1bHQ8YW55Pik6dm9pZCB8IFByb21pc2VMaWtlPHZvaWQ+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgeyBkb25lLCB2YWx1ZSB9ID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkb25lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0gZGVjb2Rlci5kZWNvZGUodmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0RhdGEodGV4dCkgLy8gRW1pdCBlYWNoIGNodW5rIG9mIGRhdGFcclxuICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZCgpLnRoZW4ocHJvY2Vzc1N0cmVhbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlYWQoKS50aGVuKHByb2Nlc3NTdHJlYW0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8g6Z2e5rWB5byP5ZON5bqU5aSE55CGXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInJlc3BvbnNlXCIscmVzcG9uc2UpXHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGpzb25cclxuICAgICAgICAgICAgICAgIC8vIE9wZW5BSSBBUEkg6Z2e5rWB5byP5ZON5bqU5qC85byP77yaXHJcbiAgICAgICAgICAgICAgICAvLyB7IGlkLCBvYmplY3QsIGNyZWF0ZWQsIG1vZGVsLCBjaG9pY2VzOiBbeyBpbmRleCwgbWVzc2FnZTogeyByb2xlLCBjb250ZW50IH0sIGZpbmlzaF9yZWFzb24gfV0gfVxyXG4gICAgICAgICAgICAgICAgLy8g5bCG5YW26L2s5o2i5Li657G75Ly85rWB5byP5ZON5bqU55qE5qC85byP5Lul5L+d5oyB5YW85a655oCnXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImpzb24gZGF0YVwiLGRhdGEpXHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5jaG9pY2VzICYmIGRhdGEuY2hvaWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hvaWNlID0gZGF0YS5jaG9pY2VzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBjaG9pY2UubWVzc2FnZT8uY29udGVudCB8fCBcIlwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmqKHmi5/mtYHlvI/lk43lupTmoLzlvI/vvIzlj5HpgIHlhoXlrrlcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50Q2h1bmsgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBkYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IFwiY2hhdC5jb21wbGV0aW9uLmNodW5rXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQ6IGRhdGEuY3JlYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IGRhdGEubW9kZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IFt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhOiB7IGNvbnRlbnQ6IGNvbnRlbnQgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaF9yZWFzb246IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfV1cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDlj5HpgIHlhoXlrrlcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KCdkYXRhOiAnICsgSlNPTi5zdHJpbmdpZnkoY29udGVudENodW5rKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaooeaLn+e7k+adn+a2iOaBr1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmlzaENodW5rID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogZGF0YS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiBcImNoYXQuY29tcGxldGlvbi5jaHVua1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkOiBkYXRhLmNyZWF0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOiBkYXRhLm1vZGVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiBbe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YToge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hfcmVhc29uOiBjaG9pY2UuZmluaXNoX3JlYXNvbiB8fCBcInN0b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoJ2RhdGE6ICcgKyBKU09OLnN0cmluZ2lmeShmaW5pc2hDaHVuaykpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoJ2RhdGE6IFtET05FXScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiBvYnNlcnZlci5lcnJvcihlcnJvcikpOyAvLyBIYW5kbGUgYW55IGVycm9yc1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gdGhlIHN1YnNjcmlwdGlvbiBsb2dpY1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIENsZWFuIHVwIGxvZ2ljLCBpZiBuZWVkZWRcclxuICAgICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICog5L2/55SoQUnnlJ/miJDnrKblkIjmjIflrprnu5PmnoTnmoRKU09O5pWw5o2uXHJcbiAqIEBwYXJhbSBwcm9tcHQg5Lu75Yqh6KaB5rGC55qE5pW05L2T5o+Q56S66K+NXHJcbiAqIEBwYXJhbSBqc29uU2NoZW1hIOacn+acm+eahEpTT07nu5PmnoTmj4/ov7DvvIjnlKjkuo7mj5DnpLror43vvIlcclxuICogQHBhcmFtIG9uTWVzc2FnZSDlrp7ml7bnlJ/miJDlhoXlrrnlm57osINcclxuICogQHBhcmFtIHJldHJ5Q291bnQg6YeN6K+V5qyh5pWw77yM6buY6K6k5Li6MeasoVxyXG4gKiBAcmV0dXJucyDop6PmnpDlkI7nmoRKU09O5a+56LGhXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tcGxldGlvbkpTT04oXHJcbiAgICBwcm9tcHQ6IHN0cmluZyB8IGFueVtdLFxyXG4gICAganNvblNjaGVtYTogc3RyaW5nLFxyXG4gICAgb25NZXNzYWdlPzogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZCxcclxuICAgIHJldHJ5Q291bnQ6IG51bWJlciA9IDEsXHJcbiAgICBvcHRpb25zPzphbnl8e1xyXG4gICAgICAgIG1vZGVsOnN0cmluZ1xyXG4gICAgICAgIHRoaW5raW5nPzp7dHlwZTpcImVuYWJsZWRcInxcImRpc2FibGVkXCJ8XCJhdXRvXCJ9LFxyXG4gICAgICAgIG1heF90b2tlbnM/Om51bWJlclxyXG4gICAgICAgIHZpc2lvbj86Ym9vbGVhbiAgLy8g5piv5ZCm5ZCv55So6KeG6KeJ5qih5Z6LXHJcbiAgICAgICAgaW1hZ2VzPzpzdHJpbmdbXSAgLy8g5Zu+54mHVVJM5YiX6KGoXHJcbiAgICAgICAgc3RyZWFtPzpib29sZWFuICAvLyDmmK/lkKbkvb/nlKjmtYHlvI/liqDovb3vvIzpu5jorqRmYWxzZVxyXG4gICAgfVxyXG4pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgICAvLyDorr7nva4gc3RyZWFtIOm7mOiupOWAvOS4uiBmYWxzZVxyXG4gICAgaWYgKG9wdGlvbnMuc3RyZWFtID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBvcHRpb25zLnN0cmVhbSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbGV0IGN1cnJlbnRSZXRyeSA9IDA7XHJcblxyXG4gICAgY29uc3QgYXR0ZW1wdENvbXBsZXRpb24gPSBhc3luYyAoKTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICAgICAgICAvLyAxLiDmnoTlu7rmj5DnpLror41cclxuICAgICAgICBjb25zdCBKc29uUmVzdWx0UGFyc2VQcm9tcHQgPSBg6K+35Lil5qC85oyJ54Wn5Lul5LiL6KaB5rGC55Sf5oiQSlNPTuaVsOaNru+8mlxyXG4tIOaVsOaNrue7k+aehOimgeaxgu+8miR7anNvblNjaGVtYX1cclxuLSDov5Tlm57kuIDkuKrlrozmlbTnmoRKU09O5a+56LGh77yM6K+356Gu5L+dSlNPTuagvOW8j+WujOaVtO+8jOS4jeimgemBl+a8j+S7u+S9leagh+eCueespuWPt1xyXG4tIOazqOaEj+i/lOWbnueahEpTT07moLzlvI/mr4/kuKpLRVnpg73mnIlcIlwi5YyF6KO55ZKMVmFsdWXkuYvpl7Tpg73mnIk6XHJcbi0g5rOo5oSPXCJcIuWtl+espuS4suWGheWGjeWHuueOsFwi56ym5Y+36ZyA6KaB55SoXFxcXFxcXCLovazkuYlcclxuYDtcclxuXHJcbiAgICAgICAgLy8gMi4g5Yid5aeL5YyW5raI5oGv5YiX6KGoXHJcbiAgICAgICAgbGV0IG1lc3NhZ2VMaXN0OiBhbnlbXTtcclxuXHJcbiAgICAgICAgLy8g5aaC5p6ccHJvbXB05bey57uP5piv5raI5oGv5pWw57uEKOWMheWQq+WbvueJh+etiSks55u05o6l5L2/55SoXHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvbXB0KSkge1xyXG4gICAgICAgICAgICBtZXNzYWdlTGlzdCA9IHByb21wdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyDlkKbliJnmnoTlu7rmlofmnKzmtojmga9cclxuICAgICAgICAgICAgaWYgKG9wdGlvbnMudmlzaW9uICYmIG9wdGlvbnMuaW1hZ2VzICYmIG9wdGlvbnMuaW1hZ2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIOinhuinieaooeWeizrmnoTlu7rljIXlkKvlm77niYfnmoTmtojmga9cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQ6IGFueVtdID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMuaW1hZ2VzLm1hcCgoaW1hZ2VVcmw6IHN0cmluZykgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ltYWdlX3VybCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlX3VybDogeyB1cmw6IGltYWdlVXJsIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHByb21wdCArIEpzb25SZXN1bHRQYXJzZVByb21wdFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF07XHJcblxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZUxpc3QgPSBbe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvbGU6IFwidXNlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcclxuICAgICAgICAgICAgICAgIH1dO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8g5pmu6YCa5paH5pys5raI5oGvXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlTGlzdCA9IFt7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9sZTogXCJ1c2VyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogcHJvbXB0ICsgSnNvblJlc3VsdFBhcnNlUHJvbXB0XHJcbiAgICAgICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gMy4g5Yib5bu6Rm1vZGVDaGF0Q29tcGxldGlvbuWunuS+i1xyXG4gICAgICAgIG9wdGlvbnMucmVzcG9uc2VfZm9ybWF0ID0geyBcInR5cGVcIjogXCJqc29uX29iamVjdFwiIH1cclxuICAgICAgICBjb25zdCBjb21wbGV0aW9uID0gbmV3IEZtb2RlQ2hhdENvbXBsZXRpb24obWVzc2FnZUxpc3Qsb3B0aW9ucyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gNC4g5a2Y5YKo57Sv56ev5YaF5a65XHJcbiAgICAgICAgbGV0IGZ1bGxDb250ZW50ID0gXCJcIjtcclxuICAgICAgICBcclxuICAgICAgICAvLyA1LiDov5Tlm55Qcm9taXNl77yM5aSE55CG5byC5q2l5rWB5byP5ZON5bqUXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2VuZCQgPSBjb21wbGV0aW9uLnNlbmRDb21wbGV0aW9uKHtcclxuICAgICAgICAgICAgICAgIGlzRGlyZWN0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbWF4X3Rva2VuczogMzI3NjgsXHJcbiAgICAgICAgICAgICAgICBzdHJlYW06IG9wdGlvbnMuc3RyZWFtXHJcbiAgICAgICAgICAgIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAobWVzc2FnZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWkhOeQhua2iOaBr+WGheWuuVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZT8uY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdWxsQ29udGVudCA9IG1lc3NhZ2UuY29udGVudDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOiwg+eUqOWbnuiwg+WHveaVsFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlpoLmnpzmmK/pnZ7mtYHlvI/mqKHlvI/vvIzlj6rlnKjlrozmiJDml7bosIPnlKjkuIDmrKEgb25NZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWmguaenOaYr+a1geW8j+aooeW8j++8jOWunuaXtuaOqOmAgeeUn+aIkOWGheWuuVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob25NZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zdHJlYW0gPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6Z2e5rWB5byP77ya5Y+q5Zyo5a6M5oiQ5pe26LCD55SoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuY29tcGxldGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25NZXNzYWdlKGZ1bGxDb250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOa1geW8j++8muavj+asoemDveiwg+eUqFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTWVzc2FnZShmdWxsQ29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOajgOafpeaYr+WQpuWujOaIkFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmNvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyA2LiDmnIDnu4hKU09O5o+Q5Y+WXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29uT2JqZWN0ID0gZXh0cmFjdEpTT04oZnVsbENvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb25PYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGpzb25PYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLmnKrog73ku47lk43lupTkuK3mj5Dlj5bmnInmlYjnmoRKU09O5a+56LGhXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOmFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgSlNPTuino+aekOWksei0pSAo56ysJHtjdXJyZW50UmV0cnkgKyAxfeasoeWwneivlSk6YCwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuWOn+Wni+WGheWuuTpcIiwgZnVsbENvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihg55Sf5oiQ55qE5ZON5bqU5LiN56ym5ZCISlNPTuagvOW8jzogJHtlLm1lc3NhZ2V9YCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDnu5PmnZ/orqLpmIVcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VuZCQudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb21wbGV0aW9u6K+35rGC5aSx6LSlOlwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VuZCQudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgLy8g6YeN6K+V6YC76L6RXHJcbiAgICB3aGlsZSAoY3VycmVudFJldHJ5IDw9IHJldHJ5Q291bnQpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhdHRlbXB0Q29tcGxldGlvbigpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFJldHJ5ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEpTT07nlJ/miJDmiJDlip/vvIzph43or5XkuoYgJHtjdXJyZW50UmV0cnl9IOasoWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY3VycmVudFJldHJ5Kys7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoY3VycmVudFJldHJ5IDw9IHJldHJ5Q291bnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybihg56ysICR7Y3VycmVudFJldHJ5fSDmrKHlsJ3or5XlpLHotKXvvIzmraPlnKjph43or5UuLi4g6ZSZ6K+v5L+h5oGvOmAsIGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgLy8g5Y+v5Lul5re75Yqg5bu26L+f6YG/5YWN6L+H5b+r6YeN6K+VXHJcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwMCkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgSlNPTueUn+aIkOWksei0pe+8jOW3sumHjeivlSAke3JldHJ5Q291bnR9IOasoe+8jOacgOe7iOmUmeivrzpgLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOe7j+i/hyAke3JldHJ5Q291bnR9IOasoemHjeivleWQjuS7jeaXoOazleeUn+aIkOacieaViEpTT046ICR7ZXJyb3IubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOS7juWtl+espuS4suS4reaPkOWPlkpTT07lr7nosaHvvIjlop7lvLrniYjvvIlcclxuICogQHBhcmFtIHN0ciDljIXlkKtKU09O55qE5a2X56ym5LiyXHJcbiAqIEByZXR1cm5zIOino+aekOWQjueahEpTT07lr7nosaHmiJZudWxsXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEpTT04oc3RyOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJmdWxsQ29udGVudFwiLHN0cilcclxuICAgIC8vIOmmluWFiOWwneivleebtOaOpeino+aekOaVtOS4quWtl+espuS4slxyXG4gICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdHIudHJpbSgpKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAvLyDlpoLmnpznm7TmjqXop6PmnpDlpLHotKXvvIzliJnlsJ3or5Xmj5Dlj5ZKU09O54mH5q61XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHN0YWNrID0gMDtcclxuICAgIGxldCBzdGFydEluZGV4ID0gLTE7XHJcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChzdHJbaV0gPT09ICd7Jykge1xyXG4gICAgICAgICAgICBpZiAoc3RhY2sgPT09IDApIHN0YXJ0SW5kZXggPSBpO1xyXG4gICAgICAgICAgICBzdGFjaysrO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc3RyW2ldID09PSAnfScpIHtcclxuICAgICAgICAgICAgc3RhY2stLTtcclxuICAgICAgICAgICAgaWYgKHN0YWNrID09PSAwICYmIHN0YXJ0SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25TdHIgPSBzdHIuc2xpY2Uoc3RhcnRJbmRleCwgaSArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEpTT04ucGFyc2UoanNvblN0cik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g57un57ut5bCd6K+V5LiL5LiA5Liq5Y+v6IO955qEIEpTT05cclxuICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5aaC5p6c6L+Y5piv5rKh5pyJ5om+5Yiw5pyJ5pWISlNPTu+8jOWwneivleS/ruWkjeW4uOingeeahEpTT07moLzlvI/pl67pophcclxuICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdHJ5Rml4QW5kUGFyc2VKU09OKHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuLyoqXHJcbiAqIOWwneivleS/ruWkjeW4uOingeeahEpTT07moLzlvI/pl67popjlubbop6PmnpBcclxuICogQHBhcmFtIHN0ciDlj6/og73mnInmoLzlvI/pl67popjnmoRKU09O5a2X56ym5LiyXHJcbiAqIEByZXR1cm5zIOino+aekOWQjueahEpTT07lr7nosaHmiJZudWxsXHJcbiAqL1xyXG5mdW5jdGlvbiB0cnlGaXhBbmRQYXJzZUpTT04oc3RyOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgLy8g5o+Q5Y+W5Y+v6IO955qESlNPTumDqOWIhlxyXG4gICAgY29uc3QganNvbk1hdGNoID0gc3RyLm1hdGNoKC9cXHtbXFxzXFxTXSpcXH0vKTtcclxuICAgIGlmICghanNvbk1hdGNoKSByZXR1cm4gbnVsbDtcclxuICAgIFxyXG4gICAgbGV0IGpzb25TdHIgPSBqc29uTWF0Y2hbMF07XHJcbiAgICBcclxuICAgIC8vIOWwneivleS/ruWkjeW4uOingemXrumimFxyXG4gICAgY29uc3QgZml4ZXMgPSBbXHJcbiAgICAgICAgLy8g56e76Zmk5pyr5bC+5aSa5L2Z55qE6YCX5Y+3XHJcbiAgICAgICAgKHM6IHN0cmluZykgPT4gcy5yZXBsYWNlKC8sKFxccypbfVxcXV0pL2csICckMScpLFxyXG4gICAgICAgIC8vIOehruS/neWxnuaAp+WQjeacieW8leWPt1xyXG4gICAgICAgIChzOiBzdHJpbmcpID0+IHMucmVwbGFjZSgvKFt7LF1cXHMqKShbYS16QS1aXyRdW2EtekEtWjAtOV8kXSopXFxzKjovZywgJyQxXCIkMlwiOicpLFxyXG4gICAgICAgIC8vIOS/ruWkjeWNleW8leWPt+S4uuWPjOW8leWPt1xyXG4gICAgICAgIChzOiBzdHJpbmcpID0+IHMucmVwbGFjZSgvJy9nLCAnXCInKSxcclxuICAgICAgICAvLyDnp7vpmaTms6jph4pcclxuICAgICAgICAoczogc3RyaW5nKSA9PiBzLnJlcGxhY2UoL1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vZywgJycpLnJlcGxhY2UoL1xcL1xcLy4qJC9nbSwgJycpLFxyXG4gICAgXTtcclxuICAgIFxyXG4gICAgZm9yIChjb25zdCBmaXggb2YgZml4ZXMpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBmaXhlZFN0ciA9IGZpeChqc29uU3RyKTtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZml4ZWRTdHIpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8g57un57ut5bCd6K+V5LiL5LiA5Liq5L+u5aSN5pa55rOVXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4gbnVsbDtcclxufSJdfQ==