@magic-xpa/engine 4.900.0-dev490.8 → 4.900.0-dev490.82

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.
@@ -4082,7 +4082,7 @@ export class ExpressionEvaluator extends GuiExpressionEvaluator {
4082
4082
  }
4083
4083
  path = args[3];
4084
4084
  domain = args[4];
4085
- resVal.BoolVal = CookieService.setCookie(cookieName, args[0], nativeDt, path, domain, secure, sameSite);
4085
+ resVal.BoolVal = CookieService.setCookie(cookieName, (args[0] != null ? args[0].toString() : ""), nativeDt, path, domain, secure, sameSite);
4086
4086
  }
4087
4087
  eval_op_get_cookie(cookieName, resVal) {
4088
4088
  resVal.StrVal = CookieService.getCookie(cookieName);
@@ -4357,4 +4357,4 @@ class DynamicOperation {
4357
4357
  this.opCode_ = ExpressionInterface.EXP_OP_NONE;
4358
4358
  }
4359
4359
  }
4360
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwcmVzc2lvbkV2YWx1YXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvZXhwL0V4cHJlc3Npb25FdmFsdWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IscUJBQXFCLEVBRXJCLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsTUFBTSxFQUNOLHNCQUFzQixFQUd0QixRQUFRLEVBQ1IsR0FBRyxFQUVILGFBQWEsRUFFYixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sSUFBSSxFQUNKLFlBQVksRUFDWixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixPQUFPLEVBQ1AsV0FBVyxFQUNYLGVBQWUsRUFDaEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNoQixLQUFLLEVBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxJQUFJLEVBQ0osS0FBSyxFQUNMLE9BQU8sRUFDUCxPQUFPLEVBQ1AsUUFBUSxFQUNSLEtBQUssRUFDTCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2xCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxFQUFVLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQy9FLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUVuRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scUJBQXFC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RSxHQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1FBRWxCLElBQUksRUFBRSxHQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1FBRWxCLElBQUksRUFBRSxHQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1FBRWxCLElBQUksR0FBRyxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFB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QUFDO0lBQ3BELENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQmxvYlR5cGUsXHJcbiAgQ29tbWFuZHMsXHJcbiAgRGF0YU1vZGlmaWNhdGlvblR5cGVzLFxyXG4gIERhdGVCcmVha1BhcmFtcyxcclxuICBEaXNwbGF5Q29udmVydG9yLFxyXG4gIEV4cHJlc3Npb25JbnRlcmZhY2UsXHJcbiAgRXhwVmFsLFxyXG4gIEd1aUV4cHJlc3Npb25FdmFsdWF0b3IsXHJcbiAgSVRhc2ssXHJcbiAgTWdDb250cm9sQmFzZSxcclxuICBOVU1fVFlQRSxcclxuICBQSUMsXHJcbiAgUHJvcGVydHksXHJcbiAgUHJvcEludGVyZmFjZSxcclxuICBUaW1lQnJlYWtQYXJhbXMsXHJcbiAgVmVjdG9yVHlwZVxyXG59IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHtcclxuICBDb25zdGFudHMsXHJcbiAgSW50ZXJuYWxJbnRlcmZhY2UsXHJcbiAgTG9nZ2VyLFxyXG4gIE1pc2MsXHJcbiAgTXNnSW50ZXJmYWNlLFxyXG4gIFBJQ0ludGVyZmFjZSxcclxuICBTdG9yYWdlQXR0cmlidXRlLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjayxcclxuICBTdHJVdGlsLFxyXG4gIFV0aWxEYXRlSnBuLFxyXG4gIFV0aWxTdHJCeXRlTW9kZVxyXG59IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQge1xyXG4gIEFwcGxpY2F0aW9uRXhjZXB0aW9uLFxyXG4gIEFycmF5X0VudW1lcmF0b3IsXHJcbiAgRGVidWcsXHJcbiAgRW5jb2RpbmcsXHJcbiAgRXhjZXB0aW9uLFxyXG4gIExpc3QsXHJcbiAgTkNoYXIsXHJcbiAgTk51bWJlcixcclxuICBOU3RyaW5nLFxyXG4gIFJlZlBhcmFtLFxyXG4gIFN0YWNrLFxyXG4gIFN0cmluZ0J1aWxkZXIsXHJcbiAgaXNOdWxsT3JVbmRlZmluZWRcclxufSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7RXhwcmVzc2lvbkxvY2FsSnBufSBmcm9tICcuL0V4cHJlc3Npb25Mb2NhbEpwbic7XHJcbmltcG9ydCB7RmllbGR9IGZyb20gJy4uL2RhdGEvRmllbGQnO1xyXG5pbXBvcnQge0V4cERlc2MsIEV4cHJlc3Npb25EaWN0fSBmcm9tICcuL0V4cHJlc3Npb25EaWN0JztcclxuaW1wb3J0IHtEYXRhVmlld0NvbW1hbmRUeXBlfSBmcm9tICcuLi9jb21tYW5kcy9DbGllbnRUb1NlcnZlci9EYXRhdmlld0NvbW1hbmQnO1xyXG5pbXBvcnQge1J1blRpbWVFdmVudH0gZnJvbSAnLi4vZXZlbnQvUnVuVGltZUV2ZW50JztcclxuaW1wb3J0IHtFdmVudEhhbmRsZXJQb3NpdGlvbn0gZnJvbSAnLi4vZXZlbnQvRXZlbnRIYW5kbGVyUG9zaXRpb24nO1xyXG5pbXBvcnQge0V2ZW50SGFuZGxlcn0gZnJvbSAnLi4vZXZlbnQvRXZlbnRIYW5kbGVyJztcclxuaW1wb3J0IHtBcmd1bWVudHNMaXN0fSBmcm9tICcuLi9ydC9Bcmd1bWVudHNMaXN0JztcclxuaW1wb3J0IHtFeHByZXNzaW9ufSBmcm9tICcuL0V4cHJlc3Npb24nO1xyXG5pbXBvcnQge0lDbGllbnRDb21tYW5kfSBmcm9tICcuLi9jb21tYW5kcy9JQ2xpZW50Q29tbWFuZCc7XHJcbmltcG9ydCB7Q29tbWFuZEZhY3Rvcnl9IGZyb20gJy4uL2NvbW1hbmRzL0NsaWVudFRvU2VydmVyL0NvbW1hbmRGYWN0b3J5JztcclxuaW1wb3J0IHtTb3J0fSBmcm9tICcuLi90YXNrcy9zb3J0L1NvcnQnO1xyXG5pbXBvcnQge1Rhc2tfU3ViZm9ybUV4ZWNNb2RlRW51bSwgVGFza0Jhc2UsIFVzZXJSYW5nZX0gZnJvbSAnLi4vdGFza3MvVGFza0Jhc2UnO1xyXG5pbXBvcnQge0dsb2JhbFBhcmFtc30gZnJvbSAnLi9HbG9iYWxQYXJhbXNUYWJsZSc7XHJcbmltcG9ydCB7VXNlckRldGFpbHN9IGZyb20gJy4uL3NlY3VyaXR5L1VzZXJEZXRhaWxzJztcclxuaW1wb3J0IHtPcGVyYXRpb259IGZyb20gJy4uL3J0L09wZXJhdGlvbic7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gJy4uL0NvbnN0SW50ZXJmYWNlJztcclxuaW1wb3J0IHtNZ0NvbnRyb2x9IGZyb20gJy4uL2d1aS9NZ0NvbnRyb2wnO1xyXG5pbXBvcnQge0RhdGFWaWV3fSBmcm9tICcuLi9kYXRhL0RhdGFWaWV3JztcclxuaW1wb3J0IHtSZWNvcmR9IGZyb20gJy4uL2RhdGEvUmVjb3JkJztcclxuaW1wb3J0IHtNZ0Zvcm19IGZyb20gJy4uL2d1aS9NZ0Zvcm0nO1xyXG5pbXBvcnQge0xhbmd1YWdlRGF0YX0gZnJvbSAnLi4vZW52L0xhbmd1YWdlRGF0YSc7XHJcbmltcG9ydCB7RW52UGFyYW1zVGFibGV9IGZyb20gJy4uL2Vudi9FbnZWYXJpYWJsZXNUYWJsZSc7XHJcbmltcG9ydCB7RW52aXJvbm1lbnR9IGZyb20gJy4uL2Vudi9FbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7TGFzdEZvY3VzZWRNYW5hZ2VyfSBmcm9tICcuLi9ydC9MYXN0Rm9jdXNlZE1hbmFnZXInO1xyXG5pbXBvcnQge1NlcnZlckNvbmZpZ30gZnJvbSAnLi4vU2VydmVyQ29uZmlnJztcclxuaW1wb3J0IHtBY2Nlc3NIZWxwZXJ9IGZyb20gJy4uL0FjY2Vzc0hlbHBlcic7XHJcbmltcG9ydCB7Q29va2llU2VydmljZX0gZnJvbSAnLi4vdXRpbC9jb29raWUuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvbkV2YWx1YXRvciBleHRlbmRzIEd1aUV4cHJlc3Npb25FdmFsdWF0b3Ige1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBBU1RFUklTS19DSFI6IHN0cmluZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMSk7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUVVFU1RJT05fQ0hSOiBzdHJpbmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDIpO1xyXG5cclxuICAvLyBTb21lIGl0ZW1zIGluIHBvbGlzaCBhcmUgc2F2ZWQgYXMgc2hvcnQgb3IgbG9uZy5cclxuICAvLyBGb2xsb3dpbmcgY29uc3RhbnRzIGFyZSB1c2VkIHdoaWxlIHJlYWRpbmcgdGhlIHBvbGlzaGVkIGV4cHJlc3Npb24uXHJcbiAgc3RhdGljIFBBUkVOVF9MRU46IG51bWJlciA9IDI7IC8vIDIgYnl0ZXNcclxuICBzdGF0aWMgU0hPUlRfT0JKRUNUX0xFTjogbnVtYmVyID0gMjsgLy8gMiBieXRlc1xyXG4gIHN0YXRpYyBMT05HX09CSkVDVF9MRU46IG51bWJlciA9IDQ7IC8vIDQgYnl0ZXNcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX3JlY3Vyc2l2ZUV4cENhbGNDb3VudDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9jaGFyc1RvVHJpbTogc3RyaW5nW10gPSBbJyAnLCAnXFwwJ107XHJcbiAgcHJpdmF0ZSBfZXhwcmVzc2lvbkxvY2FsSnBuOiBFeHByZXNzaW9uTG9jYWxKcG4gPSBudWxsO1xyXG4gIHN0YXRpYyBFcnJvclRvQmVXcml0dGVuSW5TZXJ2ZXJMb2c6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4gPSAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpID8gbmV3IEV4cHJlc3Npb25Mb2NhbEpwbih0aGlzKSA6IG51bGwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhIGJhc2ljIHZhbHVlIGZyb20gdGhlIGV4cHJlc3Npb24gc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImV4cFN0clRyYWNrZXJcIj50aGUgZXhwcmVzc2lvbiBwcm9jZXNzZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib3BDb2RlXCI+dGhlIG9wY29kZSBvZiB0aGUgZXhwcmVzc2lvbjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgYmFzaWMgZGF0YSB2YWx1ZSBhcyBhbiBFeHBWYWwgaW5zdGFuY2U8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRFeHBCYXNpY1ZhbHVlKGV4cFN0clRyYWNrZXI6IEV4cFN0clRyYWNrZXIsIG9wQ29kZTogbnVtYmVyKTogRXhwVmFsIHtcclxuICAgIGxldCBWYWw6IEV4cFZhbCA9IG5ldyBFeHBWYWwoKTtcclxuICAgIGxldCBsZW46IG51bWJlcjtcclxuICAgIGxldCBwYXJlbnQ6IG51bWJlciwgdmVlOiBudW1iZXI7XHJcbiAgICBsZXQgZmllbGQ6IEZpZWxkO1xyXG4gICAgbGV0IGZsZFZhbDogc3RyaW5nO1xyXG5cclxuICAgIHN3aXRjaCAob3BDb2RlKSB7XHJcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgIC8vIFN0cmluZyBWYWx1ZVxyXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0E6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSDpcclxuICAgICAgICBWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgVmFsLlN0clZhbCA9IGV4cFN0clRyYWNrZXIuZ2V0U3RyaW5nKGxlbiwgdHJ1ZSwgdHJ1ZSk7IC8vIGZpcnN0IHZhbHVlIGlzIHVuaWNvZGVcclxuICAgICAgICAvLyBzaW5jZSB0aGUgc2VydmVyIHNlbmRzIHVzIGJvdGggVW5pY29kZSBzdHJpbmcgQW5zaSBzdHJpbmcgZm9yXHJcbiAgICAgICAgLy8gZWFjaCBzdHJpbmcgaW4gdGhlIGV4cHJlc3Npb24sIGFuZCB0aGUgY2xpZW50IHVzZXMgb25seSB1bmljb2RlLFxyXG4gICAgICAgIC8vIHdlIHdpbGwgZGlyZWdhcmQgdGhlIEFuc2kgc3RyaW5nXHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQ0Qnl0ZU51bWJlcigpO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIuZ2V0U3RyaW5nKGxlbiwgdHJ1ZSwgZmFsc2UpOyAvLyBzZWNvbmQgdmFsdWUgaXMgYW5zaVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FWFRfQTpcclxuICAgICAgICBWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQ0Qnl0ZU51bWJlcigpO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIuZ2V0U3RyaW5nKGxlbiwgdHJ1ZSwgdHJ1ZSk7IC8vIGZpcnN0IHZhbHVlIGlzIHVuaWNvZGVcclxuICAgICAgICAvLyBzaW5jZSB0aGUgc2VydmVyIHNlbmRzIHVzIGJvdGggVW5pY29kZSBzdHJpbmcgQW5zaSBzdHJpbmcgZm9yXHJcbiAgICAgICAgLy8gZWFjaCBzdHJpbmcgaW4gdGhlIGV4cHJlc3Npb24sIGFuZCB0aGUgY2xpZW50IHVzZXMgb25seSB1bmljb2RlLFxyXG4gICAgICAgIC8vIHdlIHdpbGwgZGlyZWdhcmQgdGhlIEFuc2kgc3RyaW5nXHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQ0Qnl0ZU51bWJlcigpO1xyXG4gICAgICAgIFZhbC5TdHJWYWwgPSBleHBTdHJUcmFja2VyLmdldFN0cmluZyhsZW4sIHRydWUsIGZhbHNlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgIC8vIE1hZ2ljIE51bWJlciB2YWx1ZVxyXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX046XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVDpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0U6XHJcbiAgICAgICAgaWYgKG9wQ29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRClcclxuICAgICAgICAgIFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFO1xyXG4gICAgICAgIGVsc2UgaWYgKG9wQ29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVClcclxuICAgICAgICAgIFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGxlbiA9IGV4cFN0clRyYWNrZXIuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICBWYWwuTWdOdW1WYWwgPSBleHBTdHJUcmFja2VyLmdldE1hZ2ljTnVtYmVyKGxlbiwgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAvLyBMb2dpY2FsIFZhbHVlXHJcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTDpcclxuICAgICAgICBWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgICBWYWwuQm9vbFZhbCA9IChleHBTdHJUcmFja2VyLmdldDJCeXRlTnVtYmVyKCkgPT09IDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgLy8gVmFyaWFibGUgVmFsdWVcclxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WOlxyXG4gICAgICAgIHBhcmVudCA9IGV4cFN0clRyYWNrZXIuZ2V0VmFySWR4KCk7XHJcbiAgICAgICAgdmVlID0gZXhwU3RyVHJhY2tlci5nZXQ0Qnl0ZU51bWJlcigpO1xyXG4gICAgICAgIGZpZWxkID0gPEZpZWxkPnRoaXMuRXhwVGFzay5nZXRGaWVsZERlZihwYXJlbnQsIHZlZSAtIDEpO1xyXG4gICAgICAgIFZhbC5BdHRyID0gZmllbGQuZ2V0VHlwZSgpO1xyXG4gICAgICAgIC8qIEZvciBWZWN0b3IsIG51bGwgYWxsb3dlZCBpcyBhbHdheXMgdHJ1ZS4gSWYgdGhlIGZpZWxkIGlzIGEgdmVjdG9yLCB0aGUgICovXHJcbiAgICAgICAgLyogZmllbGQubnVsbEFsbG93ZWQoKSBhY3R1YWxseSByZXR1cm5zIHRoZSBudWxsIGFsbG93ZWQgZm9yIHRoZSB2ZWMgY2VsbC4gKi9cclxuICAgICAgICBsZXQgbnVsbEFsbG93ZWQ6IGJvb2xlYW4gPSAoZmllbGQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICA6IGZpZWxkLk51bGxBbGxvd2VkO1xyXG4gICAgICAgIFZhbC5Jc051bGwgPSBmaWVsZC5pc051bGwoKSAmJiBudWxsQWxsb3dlZDtcclxuICAgICAgICBWYWwuT3JpZ2luYWxOdWxsID0gVmFsLklzTnVsbDtcclxuICAgICAgICBmbGRWYWwgPSBmaWVsZC5nZXRWYWx1ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgaWYgKGZsZFZhbCAhPSBudWxsICYmIFZhbC5Jc051bGwgJiZcclxuICAgICAgICAgIGZpZWxkLmdldFRhc2soKS5nZXROdWxsQXJpdGhtZXRpYygpID09PSBDb25zdGFudHMuTlVMTF9BUklUSF9VU0VfREVGKVxyXG4gICAgICAgICAgVmFsLklzTnVsbCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKFZhbC5BdHRyKSB7XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICAgICAgVmFsLlN0clZhbCA9IGZsZFZhbDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgICAgICBWYWwuVmVjdG9yRmllbGQgPSBmaWVsZDtcclxuICAgICAgICAgIC8vIGZhbGxzIHRocm91Z2hcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICAgICAgVmFsLlN0clZhbCA9IGZsZFZhbDtcclxuXHJcbiAgICAgICAgICAgIGlmIChWYWwuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgICAgICAgICBWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBWYWwuSW5jbHVkZUJsb2JQcmVmaXggPSBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgVmFsLkluY2x1ZGVCbG9iUHJlZml4ID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgICAgICBWYWwuTWdOdW1WYWwgPSBmbGRWYWwgIT0gbnVsbCA/IG5ldyBOVU1fVFlQRShmbGRWYWwpIDogbnVsbDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgICAgIGlmIChmbGRWYWwgIT0gbnVsbClcclxuICAgICAgICAgICAgICBWYWwuQm9vbFZhbCA9IERpc3BsYXlDb252ZXJ0b3IudG9Cb29sZWFuKGZsZFZhbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0ZPUk06XHJcbiAgICAgICAgcGFyZW50ID0gZXhwU3RyVHJhY2tlci5nZXRWYXJJZHgoKTtcclxuICAgICAgICBsZXQgZm9ybURpc3BsYXlJbmRleEluVGFzazogbnVtYmVyID0gZXhwU3RyVHJhY2tlci5nZXQ0Qnl0ZU51bWJlcigpO1xyXG4gICAgICAgIGZvcm1EaXNwbGF5SW5kZXhJblRhc2sgPSAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuR2V0UmVhbE1haW5EaXNwbGF5SW5kZXhPbkRlcHRoKGZvcm1EaXNwbGF5SW5kZXhJblRhc2spO1xyXG4gICAgICAgIHRoaXMuQ29uc3RydWN0TWFnaWNOdW0oVmFsLCBmb3JtRGlzcGxheUluZGV4SW5UYXNrLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WQVI6XHJcbiAgICAgICAgcGFyZW50ID0gZXhwU3RyVHJhY2tlci5nZXRWYXJJZHgoKTtcclxuICAgICAgICB2ZWUgPSBleHBTdHJUcmFja2VyLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgbGV0IGl0bTogbnVtYmVyID0gKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmN0bF9pdG1fNF9wYXJlbnRfdmVlKHBhcmVudCwgdmVlKTtcclxuICAgICAgICB0aGlzLkNvbnN0cnVjdE1hZ2ljTnVtKFZhbCwgaXRtLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9SSUdIVF9MSVRFUkFMOlxyXG4gICAgICAgIGxlbiA9IGV4cFN0clRyYWNrZXIuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICBWYWwuTWdOdW1WYWwgPSBleHBTdHJUcmFja2VyLmdldE1hZ2ljTnVtYmVyKGxlbiwgdHJ1ZSk7XHJcbiAgICAgICAgLy8gU2tpcCBleHRyYSB1bnVzZWQgc3RyaW5nIHN0b3JlZCBhZnRlciBsaXRlcmFsXHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgIFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIuZ2V0U3RyaW5nKGxlbiwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRG9lcyB0aGUgb3BlcmF0b3IgcmVwcmVzZW50cyBhIGJhc2ljIGRhdGEgdmFsdWU/XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm9wQ29kZVwiPiAgdGhlIGN1cnJlbnQgb3BlcmF0aW9uIGNvZGU8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSBpZiB0aGUgb3BlcmF0b3IgaW5kaWNhdGVzIGJhc2ljIGRhdGEgaXRlbSwgZmFsc2UgaWYgbm90PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBpc0Jhc2ljSXRlbShvcENvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChvcENvZGUgPD0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTCB8fFxyXG4gICAgICBvcENvZGUgPT09IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VYVF9BIHx8XHJcbiAgICAgIG9wQ29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUklHSFRfTElURVJBTCB8fFxyXG4gICAgICBvcENvZGUgPT09IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0UgfHxcclxuICAgICAgb3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9GT1JNKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDaGVja3MgaWYgdGhlIGZ1bmN0aW9uIGhhcyB2YXJpYWJsZSBhcmd1bWVudCBsaXN0XHJcbiAgLy8vICAgbGlrZSBpbiBtYWdpYyA6IEVYUF9PUF9JU19WQVJBUkcob3ByKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgaXNWYXJBcmdMaXN0KGV4cERlc2M6IEV4cERlc2MpOiBib29sZWFuIHtcclxuICAgIGlmIChleHBEZXNjLkFyZ0NvdW50XyA8IDAgfHwgZXhwRGVzYy5BcmdBdHRyXy5sZW5ndGggPiA8bnVtYmVyPmV4cERlc2MuQXJnQ291bnRfKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBFeGVjdXRlIHNpbmdsZSBvcGVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib3BDb2RlXCI+b3BlcmF0aW9uIGNvZGUgdG8gZXhlY3V0ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJleHBTdHJUcmFja2VyXCI+dGhlIGV4cHJlc3Npb24gYmVpbmcgcHJvY2Vzc2VkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFN0YWNrXCI+c3RhY2sgb2YgdmFsdWVzIHRoYXQgYXJlIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhZGRlZE9wZXJzXCI+c3RhY2sgb2Ygb3BlcmF0aW9uIHRvIGV4ZWN1dGUgYXMgYSByZXN1bHQgb2YgdGhpcyBvcGVyYXRvcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJleHBlY3RlZFR5cGVcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXhlY09wZXJhdGlvbihvcENvZGU6IG51bWJlciwgZXhwU3RyVHJhY2tlcjogRXhwU3RyVHJhY2tlciwgdmFsU3RhY2s6IFN0YWNrPGFueT4sIGFkZGVkT3BlcnM6IExpc3Q8RHluYW1pY09wZXJhdGlvbj4sIGV4cGVjdGVkVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHZhbDE6IEV4cFZhbDtcclxuICAgIGxldCB2YWwyOiBFeHBWYWw7XHJcbiAgICBsZXQgdmFsMzogRXhwVmFsO1xyXG4gICAgbGV0IHZhbDQ6IEV4cFZhbDtcclxuICAgIGxldCB2YWw1OiBFeHBWYWw7XHJcbiAgICBsZXQgdmFsNjogRXhwVmFsO1xyXG4gICAgbGV0IHZhbDc6IEV4cFZhbDtcclxuICAgIGxldCB2YWw4OiBFeHBWYWw7XHJcbiAgICBsZXQgZHluT3BlciA9IG5ldyBEeW5hbWljT3BlcmF0aW9uKCk7XHJcbiAgICBsZXQgd2hvbGU6IG51bWJlcjtcclxuICAgIGxldCBkZWM6IG51bWJlcjtcclxuXHJcbiAgICBsZXQgcmVzVmFsID0gbmV3IEV4cFZhbCgpO1xyXG4gICAgbGV0IEV4cF9wYXJhbXM6IEV4cFZhbFtdO1xyXG4gICAgbGV0IGFkZFJlc3VsdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBsZXQgbkFyZ3M6IG51bWJlcjtcclxuICAgIGxldCBzcGVjaWFsQW5zaUV4cHJlc3Npb246IGJvb2xlYW4gPSBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRTcGVjaWFsQW5zaUV4cHJlc3Npb24oKTtcclxuXHJcbiAgICAvLyB0ZW1wb3JhcnkgdmFsdWVzOlxyXG4gICAgbGV0IG9mczogbnVtYmVyLCBsZW46IG51bWJlciwgTGVuTWF4OiBudW1iZXIsIGo6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgcGljOiBQSUM7XHJcblxyXG4gICAgLy8gdGhpcyBwYXJ0IHB1dHMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaW4gdGhlIFRPUCBvZiB0aGUgc3RhY2tcclxuICAgIC8vIDQgdmFyaWFibGUgYXJndW1lbnQgbGlzdCBmdW5jdGlvbnMgT05MWVxyXG4gICAgLy8gZG9uJ3QgZm9yZ2V0IHBvcCB0aGlzIGFyZ3VtZW50IGluIHRoZSBzdGFydCBvZiB0aGUgY2FzZXMgb2YgdmFyaWFibGUgYXJndW1lbnQgbGlzdCBmdW5jdGlvbnNcclxuICAgIGxldCBleHBEZXNjOiBFeHBEZXNjID0gRXhwcmVzc2lvbkRpY3QuZXhwRGVzY1tvcENvZGVdO1xyXG5cclxuICAgIC8vIGZvciBmdW5jdGlvbiB3aXRoIE5PVCBjb25zdGFudCBudW1iZXIgb2YgYXJndW1lbnRzIE9OTFlcclxuICAgIC8vIGRvbid0IHVzZSB0aGlzIGJsb2NrIGZvciBhbm90aGVyIGNhc2VzLCBiZWNhdXNlIHRoZSB0cnktY2F0Y2ggcGFydCBpbnNlcnQgdW51c2FibGUgdmFsdWVzIHRvIHRoZSBleHByZXNzaW9uIHF1ZXVlXHJcbiAgICBpZiAoRXhwcmVzc2lvbkV2YWx1YXRvci5pc1ZhckFyZ0xpc3QoZXhwRGVzYykpIHtcclxuICAgICAgbkFyZ3MgPSBleHBTdHJUcmFja2VyLmdldDFCeXRlTnVtYmVyKCk7XHJcblxyXG4gICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWNFeHByZXNzaW9uKGV4cFN0clRyYWNrZXIsIHZhbFN0YWNrLCBTdG9yYWdlQXR0cmlidXRlLk5PTkUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgaWYgKGV4Y2VwdGlvbiBpbnN0YW5jZW9mIEV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICAvLyBnZXRPdXRMb29wXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfSBlbHNlIHRocm93IGV4Y2VwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IuaXNWYXJBcmdMaXN0KGV4cERlc2MpICYmIGogPT09IG5BcmdzKSAvLyB0aGUgZm9yX2xvb3AgZmluaXNoZWQgd2l0aG91dCBleGNlcHRpb25cclxuICAgICAge1xyXG4gICAgICAgIGxldCB0ZW1wX29iamVjdDogT2JqZWN0ID0gbkFyZ3M7XHJcbiAgICAgICAgdmFsU3RhY2sucHVzaCh0ZW1wX29iamVjdCk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZygnRXhwcmVzc2lvbkV2YWx1YXRvci5leGVjT3BlcmF0aW9uKCkgdGhlcmUgaXMgcHJvYmxlbSB3aXRoIGFyZ3VtZW50cyBvZiAnICtcclxuICAgICAgICAgIG9wQ29kZSArICcoc2VlIEV4cHJlc3Npb25EaWN0IGZvciBuYW1lKScpO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAob3BDb2RlKSB7XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQUREOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmFkZCh2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1VCOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLnN1Yih2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTVVMOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLm11bCh2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRElWOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmRpdih2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTU9EOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLm1vZCh2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTkVHOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGlmICh2YWwxLk1nTnVtVmFsID09IG51bGwpIHtcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YWwxLk1nTnVtVmFsLm51bV9uZWcoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUodmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0ZJWDpcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGVjXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHdob2xlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgaWYgKHZhbDEuTWdOdW1WYWwgPT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMy5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHdob2xlID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsLm51bV9maXgod2hvbGUpO1xyXG4gICAgICAgIGRlYyA9IHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbC5udW1fdHJ1bmMoZGVjKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUk9VTkQ6XHJcbiAgICAgICAgLy8gaW50IHdob2xlLCBkZWM7ICAgICAgICAgbmVlZG4ndCB0aGlzIHZhcmlhYmxlcywgdGhlbSBkZWZpbmVkIGluIEVYUF9PUF9GSVhcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGVjXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHdob2xlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgaWYgKHZhbDEuTWdOdW1WYWwgPT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMy5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHdob2xlID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsLm51bV9maXgod2hvbGUpO1xyXG4gICAgICAgIGRlYyA9IHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbC5yb3VuZChkZWMpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVE6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgdmFsMikgPT09IDApO1xyXG4gICAgICAgIH0gY2F0Y2ggKG51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgaWYgKG51bGxWYWx1ZUV4Y2VwdGlvbiBpbnN0YW5jZW9mIE51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHRocm93IG51bGxWYWx1ZUV4Y2VwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTkU6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgdmFsMikgIT09IDApO1xyXG4gICAgICAgIH0gY2F0Y2ggKG51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgaWYgKG51bGxWYWx1ZUV4Y2VwdGlvbiBpbnN0YW5jZW9mIE51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKTtcclxuICAgICAgICAgIH0gZWxzZSB0aHJvdyBudWxsVmFsdWVFeGNlcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MRTpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSAoRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfY21wX2FueSh2YWwxLCB2YWwyKSA8PSAwKTtcclxuICAgICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgIGlmIChudWxsVmFsdWVFeGNlcHRpb24gaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgICAgICAgICB9IGVsc2UgdGhyb3cgbnVsbFZhbHVlRXhjZXB0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTFQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgdmFsMikgPCAwKTtcclxuICAgICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgIGlmIChudWxsVmFsdWVFeGNlcHRpb24gaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgICAgICAgICB9IGVsc2UgdGhyb3cgbnVsbFZhbHVlRXhjZXB0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfR0U6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgdmFsMikgPj0gMCk7XHJcbiAgICAgICAgfSBjYXRjaCAobnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICBpZiAobnVsbFZhbHVlRXhjZXB0aW9uIGluc3RhbmNlb2YgTnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pO1xyXG4gICAgICAgICAgfSBlbHNlIHRocm93IG51bGxWYWx1ZUV4Y2VwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0dUOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IChFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9jbXBfYW55KHZhbDEsIHZhbDIpID4gMCk7XHJcbiAgICAgICAgfSBjYXRjaCAobnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICBpZiAobnVsbFZhbHVlRXhjZXB0aW9uIGluc3RhbmNlb2YgTnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pO1xyXG4gICAgICAgICAgfSBlbHNlIHRocm93IG51bGxWYWx1ZUV4Y2VwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05PVDpcclxuICAgICAgICByZXNWYWwgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gIXJlc1ZhbC5Cb29sVmFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9PUjpcclxuICAgICAgICByZXNWYWwgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGR5bk9wZXIgPSBuZXcgRHluYW1pY09wZXJhdGlvbigpO1xyXG4gICAgICAgIGR5bk9wZXIuYXJnQ291bnRfID0gMTtcclxuXHJcbiAgICAgICAgaWYgKHJlc1ZhbC5Cb29sVmFsKSB7XHJcbiAgICAgICAgICBkeW5PcGVyLm9wQ29kZV8gPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JR05PUkU7XHJcbiAgICAgICAgICBkeW5PcGVyLmFyZ0NvdW50XyA9IDE7XHJcbiAgICAgICAgICBhZGRlZE9wZXJzLnB1c2goZHluT3Blcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGR5bk9wZXIub3BDb2RlXyA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VWQUxYO1xyXG4gICAgICAgICAgZHluT3Blci5hcmdDb3VudF8gPSAwO1xyXG4gICAgICAgICAgYWRkZWRPcGVycy5wdXNoKGR5bk9wZXIpO1xyXG4gICAgICAgICAgYWRkUmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BTkQ6XHJcbiAgICAgICAgcmVzVmFsID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBkeW5PcGVyID0gbmV3IER5bmFtaWNPcGVyYXRpb24oKTtcclxuICAgICAgICBpZiAoIXJlc1ZhbC5Cb29sVmFsKSB7XHJcbiAgICAgICAgICBkeW5PcGVyLm9wQ29kZV8gPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JR05PUkU7XHJcbiAgICAgICAgICBkeW5PcGVyLmFyZ0NvdW50XyA9IDE7XHJcbiAgICAgICAgICBhZGRlZE9wZXJzLnB1c2goZHluT3Blcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGR5bk9wZXIub3BDb2RlXyA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VWQUxYO1xyXG4gICAgICAgICAgZHluT3Blci5hcmdDb3VudF8gPSAwO1xyXG4gICAgICAgICAgYWRkZWRPcGVycy5wdXNoKGR5bk9wZXIpO1xyXG4gICAgICAgICAgYWRkUmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JRjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBpZiAodmFsMS5Cb29sVmFsKSB7XHJcbiAgICAgICAgICBkeW5PcGVyID0gbmV3IER5bmFtaWNPcGVyYXRpb24oKTtcclxuICAgICAgICAgIGR5bk9wZXIub3BDb2RlXyA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VWQUxYO1xyXG4gICAgICAgICAgZHluT3Blci5hcmdDb3VudF8gPSAwO1xyXG5cclxuICAgICAgICAgIGFkZGVkT3BlcnMucHVzaChkeW5PcGVyKTtcclxuICAgICAgICAgIGR5bk9wZXIgPSBuZXcgRHluYW1pY09wZXJhdGlvbigpO1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkeW5PcGVyLm9wQ29kZV8gPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JR05PUkU7XHJcbiAgICAgICAgICAgIGR5bk9wZXIuYXJnQ291bnRfID0gMTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBhZGRlZE9wZXJzLnB1c2goZHluT3Blcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGR5bk9wZXIgPSBuZXcgRHluYW1pY09wZXJhdGlvbigpO1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkeW5PcGVyLm9wQ29kZV8gPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JR05PUkU7XHJcbiAgICAgICAgICAgIGR5bk9wZXIuYXJnQ291bnRfID0gMTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBhZGRlZE9wZXJzLnB1c2goZHluT3Blcik7XHJcbiAgICAgICAgICBkeW5PcGVyID0gbmV3IER5bmFtaWNPcGVyYXRpb24oKTtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZHluT3Blci5vcENvZGVfID0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVZBTFg7XHJcbiAgICAgICAgICAgIGR5bk9wZXIuYXJnQ291bnRfID0gMDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBhZGRlZE9wZXJzLnB1c2goZHluT3Blcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFkZFJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xFTjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgaWYgKHZhbDEuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICAgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMsIG5vdCBjaGFyYWN0ZXJzIChKUE46IERCQ1Mgc3VwcG9ydClcclxuICAgICAgICBpZiAoc3BlY2lhbEFuc2lFeHByZXNzaW9uIHx8IHZhbDEuQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKVxyXG4gICAgICAgICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcoVXRpbFN0ckJ5dGVNb2RlLmxlbkIodmFsMS5TdHJWYWwpKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyh2YWwxLlN0clZhbC5sZW5ndGgpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ09OOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICAgIGlmICh2YWwxLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSAmJiB2YWwxLlN0clZhbCA9PSBudWxsIHx8XHJcbiAgICAgICAgICB2YWwyLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSAmJiB2YWwyLlN0clZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9ICghTlN0cmluZy5Jc051bGxPckVtcHR5KHZhbDEuU3RyVmFsKSA/IHZhbDEuU3RyVmFsIDogJycpICsgKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkodmFsMi5TdHJWYWwpID8gdmFsMi5TdHJWYWwgOiAnJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01JRDpcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbGVuZ3RoXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0YXJ0LCBvZnNldFxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdHJpbmdcclxuXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSB2YWwxLkF0dHI7XHJcbiAgICAgICAgaWYgKHZhbDIuTWdOdW1WYWwgPT0gbnVsbCB8fCB2YWwzLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMS5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIHJlc1ZhbC5BdHRyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogQ29tcHV0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvZiBzdWJzdHJpbmcgKi9cclxuICAgICAgICBvZnMgPSB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgICAgICBvZnMgPSAob2ZzID4gMVxyXG4gICAgICAgICAgPyBvZnMgLSAxXHJcbiAgICAgICAgICA6IDApOyAvLyBpbiBNSUQgbWFnaWMgZnVuY3Rpb24gc3RhcnQ9MCAmJiBzdGFydD0xIHRoZSBzYW1lXHJcbiAgICAgICAgbGVuID0gdmFsMy5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgICAgIGlmIChzcGVjaWFsQW5zaUV4cHJlc3Npb24gfHwgdmFsMS5BdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpIHtcclxuICAgICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSBVdGlsU3RyQnl0ZU1vZGUubWlkQih2YWwxLlN0clZhbCwgb2ZzLCBsZW4pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBMZW5NYXggPSB2YWwxLlN0clZhbC5sZW5ndGggLSBvZnM7XHJcbiAgICAgICAgICBpZiAoTGVuTWF4IDwgbGVuKVxyXG4gICAgICAgICAgICBsZW4gPSBMZW5NYXg7XHJcbiAgICAgICAgICBpZiAobGVuIDwgMClcclxuICAgICAgICAgICAgbGVuID0gMDtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbC5zdWJzdHIob2ZzLCBsZW4pOyAvLyBjb2RlIGZyb20gdHJ5IGJsb2NrXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzVmFsLlN0clZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTEVGVDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbGVuZ3RoXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG5cclxuICAgICAgICByZXNWYWwuQXR0ciA9IHZhbDEuQXR0cjtcclxuICAgICAgICBpZiAodmFsMi5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDEuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCB2YWwxLkF0dHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbiA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG5cclxuICAgICAgICAvLyBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBub3QgY2hhcmFjdGVycyAoSlBOOiBEQkNTIHN1cHBvcnQpXHJcbiAgICAgICAgaWYgKHNwZWNpYWxBbnNpRXhwcmVzc2lvbiB8fCB2YWwxLkF0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkge1xyXG4gICAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IFV0aWxTdHJCeXRlTW9kZS5sZWZ0Qih2YWwxLlN0clZhbCwgbGVuKTtcclxuICAgICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGxlbiA+IHZhbDEuU3RyVmFsLmxlbmd0aClcclxuICAgICAgICAgICAgbGVuID0gdmFsMS5TdHJWYWwubGVuZ3RoO1xyXG4gICAgICAgICAgaWYgKGxlbiA8IDApXHJcbiAgICAgICAgICAgIGxlbiA9IDA7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWwuc3Vic3RyKDAsIGxlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9SSUdIVDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbGVuZ3RoXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG5cclxuICAgICAgICByZXNWYWwuQXR0ciA9IHZhbDEuQXR0cjtcclxuICAgICAgICBpZiAodmFsMi5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDEuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCB2YWwxLkF0dHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbiA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG5cclxuICAgICAgICAvLyBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBub3QgY2hhcmFjdGVycyAoSlBOOiBEQkNTIHN1cHBvcnQpXHJcbiAgICAgICAgaWYgKHNwZWNpYWxBbnNpRXhwcmVzc2lvbiB8fCB2YWwxLkF0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkge1xyXG4gICAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IFV0aWxTdHJCeXRlTW9kZS5yaWdodEIodmFsMS5TdHJWYWwsIGxlbik7XHJcbiAgICAgICAgICBpZiAocmVzVmFsLlN0clZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChsZW4gPiB2YWwxLlN0clZhbC5sZW5ndGgpXHJcbiAgICAgICAgICAgIGxlbiA9IHZhbDEuU3RyVmFsLmxlbmd0aDtcclxuICAgICAgICAgIGlmIChsZW4gPCAwKVxyXG4gICAgICAgICAgICBsZW4gPSAwO1xyXG4gICAgICAgICAgb2ZzID0gdmFsMS5TdHJWYWwubGVuZ3RoIC0gbGVuO1xyXG5cclxuICAgICAgICAgIC8vIG1lbWNweSAoRVhQX3Bhcm1zWzBdLmFkcywgRVhQX3Bhcm1zWzBdLmFkcyArIG9mcywgbGVuKTtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbC5zdWJzdHIob2ZzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0ZJTEw6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRpbWVzXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG5cclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgICAgICBpZiAodmFsMi5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDEuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZW4gPSB2YWwxLlN0clZhbC5sZW5ndGg7XHJcbiAgICAgICAgaiA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICAgIGlmIChqIDwgMClcclxuICAgICAgICAgIGogPSAwO1xyXG4gICAgICAgIExlbk1heCA9IGxlbiAqIGo7XHJcbiAgICAgICAgaWYgKExlbk1heCA+IDB4N0ZGRilcclxuICAgICAgICAvLyB0aGVyZSBpcyBNQVggbGVuZ2h0IGluIE1hZ2ljIChhY3R1YWxseSBpdCBuZWVkbid0IGluIEphdmEsIGJ1dCAuLi4pXHJcbiAgICAgICAgICBMZW5NYXggPSBNYXRoLmZsb29yKDB4N0ZGRiAvIGxlbikgKiBsZW47XHJcbiAgICAgICAgaWYgKExlbk1heCA+IDApIHtcclxuICAgICAgICAgIGlmIChsZW4gPD0gMClcclxuICAgICAgICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgICAgICAgZWxzZSBpZiAoTGVuTWF4ID09PSAxKVxyXG4gICAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWw7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHRtcEJ1ZmZlciA9IG5ldyBTdHJpbmdCdWlsZGVyKExlbk1heCk7XHJcbiAgICAgICAgICAgIGZvciAoOyBMZW5NYXggPiAwOyBMZW5NYXggLT0gbGVuKVxyXG4gICAgICAgICAgICAgIHRtcEJ1ZmZlci5BcHBlbmQodmFsMS5TdHJWYWwpO1xyXG4gICAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdG1wQnVmZmVyLlRvU3RyaW5nKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lOU1RSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdWJTdHJcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nXHJcblxyXG4gICAgICAgIG9mcyA9IDA7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgaWYgKHZhbDEuU3RyVmFsID09IG51bGwgfHwgdmFsMi5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICAgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMsIG5vdCBjaGFyYWN0ZXJzIChKUE46IERCQ1Mgc3VwcG9ydClcclxuICAgICAgICBpZiAoc3BlY2lhbEFuc2lFeHByZXNzaW9uIHx8XHJcbiAgICAgICAgICAhKHZhbDEuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFIHx8XHJcbiAgICAgICAgICAgIHZhbDIuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSkge1xyXG4gICAgICAgICAgb2ZzID0gVXRpbFN0ckJ5dGVNb2RlLmluc3RyQih2YWwxLlN0clZhbCwgdmFsMi5TdHJWYWwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodmFsMi5TdHJWYWwubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgLy8gbm90aGluZyAyIGxvb2sgZm9yXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKG9mcyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb2ZzID0gdmFsMS5TdHJWYWwuaW5kZXhPZih2YWwyLlN0clZhbCk7XHJcbiAgICAgICAgICBpZiAob2ZzIDwgMClcclxuICAgICAgICAgIC8vIHN0cmluZyBpbiBtYWdpYyBzdGFydHMgZnJvbSAxLCBpbiBqYXZhIGZyb20gMC5cclxuICAgICAgICAgICAgb2ZzID0gMDtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgb2ZzKys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhvZnMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UUklNOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xUUklNOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JUUklNOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdHJpbmdcclxuICAgICAgICByZXNWYWwuQXR0ciA9IHZhbDEuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQVxyXG4gICAgICAgICAgPyBTdG9yYWdlQXR0cmlidXRlLkFMUEhBXHJcbiAgICAgICAgICA6IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgICAgICBpZiAodmFsMS5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIHJlc1ZhbC5BdHRyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoIChvcENvZGUpIHtcclxuICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVFJJTTpcclxuICAgICAgICAgICAgdmFsMS5TdHJWYWwgPSBFeHByZXNzaW9uRXZhbHVhdG9yLnRyaW1TdHIodmFsMS5TdHJWYWwsICdCJyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTFRSSU06XHJcbiAgICAgICAgICAgIHZhbDEuU3RyVmFsID0gRXhwcmVzc2lvbkV2YWx1YXRvci50cmltU3RyKHZhbDEuU3RyVmFsLCAnTCcpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JUUklNOlxyXG4gICAgICAgICAgICB2YWwxLlN0clZhbCA9IEV4cHJlc3Npb25FdmFsdWF0b3IudHJpbVN0cih2YWwxLlN0clZhbCwgJ1InKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1RSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwaWN0dXJlIGZvcm1hdFxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBOdW0gaW52ZXJ0IHRvIHN0cmluZ1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICAgIGlmICh2YWwyLlN0clZhbCA9PSBudWxsIHx8IHZhbDEuTWdOdW1WYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1heCBsZW5ndGggb2YgdGhlIHBpY3R1cmUgaXMgMTAwIGNoYXJhY3RlcnMsIGxpa2UgaW4gTWFnaWNcclxuICAgICAgICBwaWMgPSBuZXcgUElDKEV4cHJlc3Npb25FdmFsdWF0b3Iuc2V0X2FfcGljKHZhbDIuU3RyVmFsKSwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5NZ051bVZhbC50b19hKHBpYyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBTDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGljdHVyZSBmb3JtYXRcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nIGludmVydCB0byBOdW1cclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBpZiAodmFsMi5TdHJWYWwgPT0gbnVsbCB8fCB2YWwxLlN0clZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwaWMgPSBuZXcgUElDKEV4cHJlc3Npb25FdmFsdWF0b3Iuc2V0X2FfcGljKHZhbDIuU3RyVmFsKSwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUodmFsMS5TdHJWYWwsIHBpYywgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX006XHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgIGxldCBjb2Rlczogc3RyaW5nID0gZXhwU3RyVHJhY2tlci5nZXRTdHJpbmcobGVuLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX20ocmVzVmFsLCBjb2Rlcyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0s6XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IGV4cFN0clRyYWNrZXIuZ2V0TWFnaWNOdW1iZXIobGVuLCB0cnVlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRjpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9QOlxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGxlbiA9IGV4cFN0clRyYWNrZXIuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBleHBTdHJUcmFja2VyLmdldE1hZ2ljTnVtYmVyKGxlbiwgdHJ1ZSk7XHJcbiAgICAgICAgLy8gc2tpcCBzZWNvbmQgbnVtYmVyICh0aGUgY29tcG9uZW50IGlkeClcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5nZXRNYWdpY051bWJlcihsZW4sIHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TVEFUOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBNb2Rlc1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBHZW5lcmF0aW9uXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3N0YXQocmVzVmFsLCB2YWwxLCB2YWwyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1VCRk9STV9FWEVDX01PREU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3Bfc3ViZm9ybUV4ZWNNb2RlKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lTX0xPR0dFRF9JTjpcclxuICAgICAgICB0aGlzLmV2YWxfb3BfSXNMb2dnZWRJbihyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TWVM6XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2FwcG5hbWUocmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUFJPRzpcclxuICAgICAgICB0aGlzLmV2YWxfb3BfcHJvZyhyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MRVZFTDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfbGV2ZWwocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ09VTlRFUjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfY291bnRlcihyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FTVBUWV9EQVRBX1ZJRVc6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2VtcHR5RGF0YXZpZXcocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTUFJTkxFVkVMOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9tYWlubGV2ZWwocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTUFJTkRJU1BMQVk6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX21haW5kaXNwbGF5KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lTRklSU1RSRUNPUkRDWUNMRTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfSXNGaXJzdFJlY29yZEN5Y2xlKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RBVEU6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVVRDREFURTpcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfbWFnaWMob3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9VVENEQVRFKSk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkRBVEU7IC8vIERBVEVcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQURERFQ6XHJcbiAgICAgICAgdmFsOCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsNyA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsNiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGhvdXJzXHJcbiAgICAgICAgdmFsNSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRheXNcclxuICAgICAgICB2YWw0ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbW9udGhzXHJcbiAgICAgICAgdmFsMyA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHllYXJzXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIFRpbWVcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gRGF0ZVxyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9hZGREYXRlVGltZShyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMsIHZhbDQsIHZhbDUsIHZhbDYsIHZhbDcsIHZhbDgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ESUZEVDpcclxuICAgICAgICB2YWw2ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGltZSBkaWZmXHJcbiAgICAgICAgdmFsNSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRhdGUgZGlmZlxyXG4gICAgICAgIHZhbDQgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aW1lIDJcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGF0ZSAyXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIFRpbWUgMVxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBEYXRlIDFcclxuICAgICAgICBhd2FpdCB0aGlzLmV2YWxfb3BfZGlmZHQocmVzVmFsLCB2YWwxLCB2YWwyLCB2YWwzLCB2YWw0LCB2YWw1LCB2YWw2KTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSUFJFVjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBleHBfaXRtXzJfdmVlICgpO1xyXG4gICAgICAgIHRoaXMuZXhwX2dldF92YXIocmVzVmFsLCB2YWwxLCB0cnVlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSQ1VSUjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV4cF9nZXRfdmFyKHJlc1ZhbCwgdmFsMSwgZmFsc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WQVJNT0Q6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3Zhcm1vZChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WQVJJTlA6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3ZhcmlucChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WQVJOQU1FOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF92YXJuYW1lKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUkRJU1BMQVlOQU1FOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9WYXJEaXNwbGF5TmFtZShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUkNPTlRST0xJRDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfVmFyQ29udHJvbElEKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ09OVFJPTElURU1TTElTVDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmV2YWxfb3BfQ29udHJvbEl0ZW1zTGlzdChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NPTlRST0xESVNQTEFZTElTVDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmV2YWxfb3BfQ29udHJvbERpc3BsYXlMaXN0KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVklFV01PRDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfdmlld21vZChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9USU1FOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1VUQ1RJTUU6XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcoRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS50aW1lX21hZ2ljKG9wQ29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVVRDVElNRSkpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FOyAvLyBUSU1FXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01USU1FOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1VUQ01USU1FOlxyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UubXRpbWVfbWFnaWMob3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9VVENNVElNRSkpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FOyAvLyBUSU1FXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1BXUjpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcG93ZXJcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbnVtYmVyXHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF9wd3IodmFsMS5NZ051bVZhbCwgdmFsMi5NZ051bVZhbCk7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IChyZXNWYWwuTWdOdW1WYWwgPT0gbnVsbCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xPRzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5ldmFsX29wX2xvZyh2YWwxLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVhQOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3BfZXhwKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BQlM6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF9hYnModmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IChyZXNWYWwuTWdOdW1WYWwgPT0gbnVsbCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1NJTjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5ldmFsX29wX3Npbih2YWwxLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ09TOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3BfY29zKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVEFOOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3BfdGFuKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BU0lOOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3BfYXNpbih2YWwxLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQUNPUzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5ldmFsX29wX2Fjb3ModmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IChyZXNWYWwuTWdOdW1WYWwgPT0gbnVsbCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FUQU46XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF9hdGFuKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9SQU5EOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3BfcmFuZCh2YWwxLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTUlOOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01BWDpcclxuICAgICAgICBuQXJncyA9IHZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMudmFsX2NweSg8RXhwVmFsPnZhbFN0YWNrLnBvcCgpLCByZXNWYWwpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBmb3IgKGogPSAxOyBqIDwgbkFyZ3M7IGorKykge1xyXG4gICAgICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgaWYgKG9wQ29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTUlOKSB7XHJcbiAgICAgICAgICAgICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgcmVzVmFsKSA8IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbF9jcHkodmFsMSwgcmVzVmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBFWFBfT1BfTUFYXHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9jbXBfYW55KHZhbDEsIHJlc1ZhbCkgPiAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWxfY3B5KHZhbDEsIHJlc1ZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChvbmVPZlZhbHVlc0lzTnVsbCkge1xyXG4gICAgICAgICAgaWYgKG9uZU9mVmFsdWVzSXNOdWxsIGluc3RhbmNlb2YgTnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgIGZvciAoOyB2YWxTdGFjay5jb3VudCgpID4gMCAmJiBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgICAgICAvLyBjbGVhbiBxdWV1ZVxyXG4gICAgICAgICAgICAgIHZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgICAgICByZXNWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzVmFsLkF0dHIgPSBvbmVPZlZhbHVlc0lzTnVsbC5nZXRBdHRyKCk7XHJcbiAgICAgICAgICB9IGVsc2UgdGhyb3cgb25lT2ZWYWx1ZXNJc051bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9SQU5HRTpcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdXBwZXI6IEEgdmFsdWUgdGhhdCByZXByZXNlbnRzIHRoZSB1cHBlciBsaW1pdCBvZiB0aGUgcmFuZ2UuXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGxvd2VyOiBBIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGUgbG93ZXIgbGltaXQgb2YgdGhlIHJhbmdlLlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB2YWx1ZTogVGhlIHZhbHVlIGNoZWNrZWQuXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3JhbmdlKHZhbDEsIHZhbDIsIHZhbDMsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JFUDpcclxuICAgICAgICB2YWw0ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBsZW5fb3JpZ2luOiBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3aWxsIGJlIG1vdmVkIGZyb20gb3JpZ2luIHRvIHRhcmdldCwgc3RhcnRpbmcgZnJvbSB0aGUgbGVmdG1vc3QgY2hhcmFjdGVyIG9mIG9yaWdpbi5cclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBwb3NfdGFyZ2V0OiBUaGUgZmlyc3QgcG9zaXRpb24gaW4gdGhlIHRhcmdldCBzdHJpbmcgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIHN1YnN0cmluZyBmcm9tIG9yaWdpbi5cclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBvcmlnaW46IFRoZSBhbHBoYSBzdHJpbmcgb3IgZXhwcmVzc2lvbiB0aGF0IHByb3ZpZGVzIHRoZSBzdWJzdHJpbmcgdG8gYmUgY29waWVkIHRvIHRhcmdldC5cclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyB0YXJnZXQ6IFRoZSB0YXJnZXQgYWxwaGEgc3RyaW5nIG9yIGV4cHJlc3Npb24gd2hlcmUgdGhlIHJlcGxhY2VtZW50IHdpbGwgdGFrZSBwbGFjZS5cclxuXHJcbiAgICAgICAgLy8gY291bnQgdGhlIG51bWJlciBvZiBieXRlcywgbm90IGNoYXJhY3RlcnMgKEpQTjogREJDUyBzdXBwb3J0KVxyXG4gICAgICAgIGlmIChzcGVjaWFsQW5zaUV4cHJlc3Npb24gfHxcclxuICAgICAgICAgICEodmFsMS5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUgfHxcclxuICAgICAgICAgICAgdmFsMi5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpKSB7XHJcbiAgICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gVXRpbFN0ckJ5dGVNb2RlLnJlcEIodmFsMS5TdHJWYWwsIHZhbDIuU3RyVmFsLCB2YWwzLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSxcclxuICAgICAgICAgICAgdmFsNC5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmV2YWxfb3BfcmVwXzEocmVzVmFsLCB2YWwxLCB2YWwyLCB2YWwzLCB2YWw0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JTlM6XHJcbiAgICAgICAgdmFsNCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgLy8gbGVuZ3RoOiBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gc291cmNlIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRhcmdldC5cclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcG9zaXRpb246IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gaW4gdGFyZ2V0LlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzb3VyY2U6IEFuIGFscGhhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIHNvdXJjZSBzdHJpbmcuXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRhcmdldDogQW4gYWxwaGEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgdGFyZ2V0IHN0cmluZ1xyXG5cclxuICAgICAgICAvLyBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBub3QgY2hhcmFjdGVycyAoSlBOOiBEQkNTIHN1cHBvcnQpXHJcbiAgICAgICAgaWYgKHNwZWNpYWxBbnNpRXhwcmVzc2lvbiB8fFxyXG4gICAgICAgICAgISh2YWwxLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSB8fFxyXG4gICAgICAgICAgICB2YWwyLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkpIHtcclxuICAgICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSBVdGlsU3RyQnl0ZU1vZGUuaW5zQih2YWwxLlN0clZhbCwgdmFsMi5TdHJWYWwsIHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpLFxyXG4gICAgICAgICAgICB2YWw0Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZXZhbF9vcF9pbnMocmVzVmFsLCB2YWwxLCB2YWwyLCB2YWwzLCB2YWw0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ERUw6XHJcbiAgICAgICAgdmFsMyA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgLy8gbGVuZ3RoOiBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYmUgZGVsZXRlZCwgYmVnaW5uaW5nIHdpdGggcG9zaXRpb24gc3RhcnQgYW5kIHByb2NlZWRpbmcgcmlnaHR3YXJkLlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdGFydCA6IFRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIGJlIGRlbGV0ZWQuXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZzogQW4gYWxwaGEgc3RyaW5nIG9yIGFuIGFscGhhIHN0cmluZyBleHByZXNzaW9uLlxyXG5cclxuICAgICAgICAvLyBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBub3QgY2hhcmFjdGVycyAoSlBOOiBEQkNTIHN1cHBvcnQpXHJcbiAgICAgICAgaWYgKHNwZWNpYWxBbnNpRXhwcmVzc2lvbiB8fCB2YWwxLkF0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkge1xyXG4gICAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IFV0aWxTdHJCeXRlTW9kZS5kZWxCKHZhbDEuU3RyVmFsLCB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSxcclxuICAgICAgICAgICAgdmFsMy5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmV2YWxfb3BfZGVsKHJlc1ZhbCwgdmFsMSwgdmFsMiwgdmFsMyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRkxJUDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZmxpcChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9VUFBFUjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfdXBwZXIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTE9XRVI6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2xvd2VyKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NSQzpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBudW1lcmljOiBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIENSQyBhbGdvcml0aG0uIEluIHRoaXMgdmVyc2lvbiBvZiBNYWdpYyB1c2UgMCB0byBhcHBseSBDUkMtMTYuXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZyA6IEFuIGFscGhhIHN0cmluZyB0byB3aGljaCB0aGUgQ1JDIGlzIGFwcGxpZWQuXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2NyYyhyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DSEtER1Q6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIDAgb3IgMSAobnVtYmVyKSBmb3IgTW9kdWx1cyAxMCBvciBNb2R1bHVzIDExLCByZXNwZWN0aXZlbHkuXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgLy8gQW4gYWxwaGEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIGZvciB3aGljaCB0aGUgY2hlY2sgZGlnaXQgd2lsbCBiZSBjYWxjdWxhdGVkXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2Noa2RndChyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TT1VORFg6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3NvdW5keChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9IU1RSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9oc3RyKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0hWQUw6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2h2YWwocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ0hSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9jaHIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQVNDOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9hc2MocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTVNUUjpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfbXN0cihyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NVkFMOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9tdmFsKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RTVFI6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBpY3R1cmUgc3RyaW5nXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRhdGUgc3RyaW5nIGl0J3MgTE9HSUNBTCA/Pz8/Pz9cclxuICAgICAgICB0aGlzLmV2YWxfb3BfZHN0cihyZXNWYWwsIHZhbDEsIHZhbDIsIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EVkFMOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwaWN0dXJlICBmb3JtYXQgb2YgZGF0ZSBzdHJpbmcgb3V0cHV0XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRhdGUgc3RyaW5nXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2R2YWwocmVzVmFsLCB2YWwxLCB2YWwyLCBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVFNUUjpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGljdHVyZSBmb3JtYXQgb2YgdGltZSBzdHJpbmcgb3V0cHV0XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRpbWUgc3RyaW5nXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3RzdHIocmVzVmFsLCB2YWwxLCB2YWwyLCBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLCBmYWxzZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01UU1RSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwaWN0dXJlIGZvcm1hdCBvZiB0aW1lIHN0cmluZyBvdXRwdXRcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGltZSBzdHJpbmdcclxuICAgICAgICB0aGlzLmV2YWxfb3BfdHN0cihyZXNWYWwsIHZhbDEsIHZhbDIsIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UsIHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UVkFMOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwaWN0dXJlIHN0cmluZ1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aW1lIHN0cmluZ1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF90dmFsKHJlc1ZhbCwgdmFsMSwgdmFsMiwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSwgZmFsc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NVFZBTDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGljdHVyZSBzdHJpbmdcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGltZSBzdHJpbmdcclxuICAgICAgICB0aGlzLmV2YWxfb3BfdHZhbChyZXNWYWwsIHZhbDEsIHZhbDIsIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UsIHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EQVk6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2RheShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NT05USDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfbW9udGgocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfWUVBUjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfeWVhcihyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ET1c6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2RvdyhyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DRE9XOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9jZG93KHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NNT05USDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfY21vbnRoKHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05ET1c6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIG51bWJlciBvciBkYXkgb2Ygd2Vla1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9uZG93KHJlc1ZhbCwgdmFsMSwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05NT05USDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbnVtYmVyIG9yIG1vbnRoIG9mIHllYXJcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfbm1vbnRoKHJlc1ZhbCwgdmFsMSwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1NFQ09ORDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfc2Vjb25kKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01JTlVURTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfbWludXRlKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0hPVVI6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2hvdXIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfREVMQVk6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiBub3Qgd2Fyaywgbm90IGNoZWNrZWRcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZGVsYXkoKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lETEU6XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2lkbGUocmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FERERBVEU6XHJcbiAgICAgICAgdmFsNCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRheXM6IFRoZSBudW1iZXIgb2YgZGF5cyB0byBhZGQgdG8gZGF0ZS4gTWF5IGJlIHplcm8uXHJcbiAgICAgICAgdmFsMyA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIG1vbnRoczogVGhlIG51bWJlciBvZiBtb250aHMgdG8gYWRkIHRvIGRhdGUuIE1heSBiZSB6ZXJvLlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB5ZWFycyA6IFRoZSBudW1iZXIgb2YgeWVhcnMgdG8gYWRkIHRvIGRhdGUuIE1heSBiZSB6ZXJvLlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBkYXRlIDogQSBkYXRlLlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9hZGRkYXRlKHJlc1ZhbCwgdmFsMSwgdmFsMiwgdmFsMywgdmFsNCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FERFRJTUU6XHJcbiAgICAgICAgdmFsNCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHNlY29uZHM6IFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byBhZGQgdG8gdGltZS5cclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbWludXRlczogVGhlIG51bWJlciBvZiBtaW51dGVzIHRvIGFkZCB0byB0aW1lLlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBob3VycyA6IFRoZSBudW1iZXIgb2YgaG91cnMgdG8gYWRkIHRvIHRpbWVcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGltZSA6IEEgdGltZSB2YWx1ZS5cclxuICAgICAgICB0aGlzLmV2YWxfb3BfYWRkdGltZShyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMsIHZhbDQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9PV05FUjpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IEVudmlyb25tZW50Lkluc3RhbmNlLmdldE93bmVyKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUkFUVFI6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3ZhcmF0dHIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSUElDOlxyXG4gICAgICAgIHZhbDIgPSAoPEV4cFZhbD52YWxTdGFjay5wb3AoKSk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgLy8gdG8gYWRkIHRoaXMgbWV0aG9kXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3ZhcnBpYyhyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EQlJPVU5EOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIHRvIGFkZCB0aGlzIG1ldGhvZFxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9kYnJvdW5kKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTEw6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9BOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfTjpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX0I6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9EOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfVDpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX1U6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9POlxyXG4gICAgICAgIHRoaXMuZXhwX251bGxfdmFsX2dldChleHBlY3RlZFR5cGUsIG9wQ29kZSwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSVNOVUxMOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gdmFsMS5Jc051bGw7XHJcblxyXG4gICAgICAgIC8vIGlkZW50aWZ5IGEgc2l0dWF0aW9uIHdoZXJlIGEgdmFsdWUgd2FzIHVuLW51bGxpZmllZCBkdWUgdG8gXCJudWxsIGFyaXRobWV0aWNcIlxyXG4gICAgICAgIC8vIGFuZCBzdGlsbCwgbWFrZSBJU05VTEwoKSByZXR1cm4gVFJVRSBhbHRob3VnaCB0aGUgdmFsdWUgaXMgZmxhZ2dlZCBhcyBub24tbnVsbFxyXG4gICAgICAgIGlmICghdmFsMS5Jc051bGwgJiYgdmFsMS5PcmlnaW5hbE51bGwpXHJcbiAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHZhbDEuT3JpZ2luYWxOdWxsO1xyXG5cclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuXHJcbiAgICAgICAgLy8gbnVsbCB2YWx1ZXMgYWNjZXB0ZWQgaW50byB0aGUgSVNOVUxMKCkgZnVuY3Rpb24gZG8gbm90IG51bGxpZnkgdGhlXHJcbiAgICAgICAgLy8gV2hvbGUgZXhwcmVzc2lvbiwgdGh1cyBVTkxFU1MgU09NRVRISU5HIEVMU0UgbnVsbGlmaWVkIHRoZSBleHByZXNzaW9uLFxyXG4gICAgICAgIC8vIHdlIG1hcmsgaXQgYXMgTk9OLU5VTEwuIFdlIGNoZWNrIGlmIHNvbWV0aGluZyBlbHNlIG51bGxpZmllZCB0aGUgZXhwcmVzc2lvblxyXG4gICAgICAgIC8vIGJ5IHNjYW5uaW5nIHRoZSB2YWx1ZXMgY3VycmVudGx5IG9uIHRoZSBwYXJhbWV0ZXJzIHN0YWNrLlxyXG4gICAgICAgIGlmIChleHBTdHJUcmFja2VyLmlzTnVsbCgpKSB7XHJcbiAgICAgICAgICBsZXQgbXlBcnJheTogTGlzdDxFeHBWYWw+ID0gbmV3IExpc3Q8RXhwVmFsPigpO1xyXG4gICAgICAgICAgbGV0IHByZXZOdWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgICAgICAgd2hpbGUgKCEodmFsU3RhY2suY291bnQoKSA9PT0gMCkgJiYgIXByZXZOdWxsKSB7XHJcbiAgICAgICAgICAgIG15QXJyYXkucHVzaCg8RXhwVmFsPnZhbFN0YWNrLnBvcCgpKTtcclxuICAgICAgICAgICAgaWYgKG15QXJyYXkuZ2V0X0l0ZW0obXlBcnJheS5sZW5ndGggLSAxKS5Jc051bGwpXHJcbiAgICAgICAgICAgICAgcHJldk51bGwgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGZvciAoaSA9IG15QXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXHJcbiAgICAgICAgICAgIHZhbFN0YWNrLnB1c2gobXlBcnJheS5nZXRfSXRlbShpKSk7XHJcblxyXG4gICAgICAgICAgaWYgKCFwcmV2TnVsbClcclxuICAgICAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9CT006XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2JvbShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9CT1k6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2JveShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FT006XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2VvbShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FT1k6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2VveShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ST0xMQkFDSzpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc2hvdyBtZXNzYWdlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGdlbmVyYXRpb24gKD8pXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3JvbGxiYWNrKHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUlNFVDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdmFsdWVcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbnVtYmVyXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3ZhcnNldChyZXNWYWwsIHZhbDIsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DVFJMX05BTUU6XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2N0cmxfbmFtZShyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVERFUFRIOlxyXG4gICAgICAgIC8vIHVzZSB0aGUgY29udGV4dCB0YXNrIG9mIHRoZSBjdXJyZW50IHRhc2sgb2YgZXhwcmVzc2lvblxyXG4gICAgICAgIGxldCBjdXJyVHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCk7XHJcbiAgICAgICAgbGVuID0gKGN1cnJUc2suZ2V0VGFza0RlcHRoKGZhbHNlKSkgLSAxOyAvLyBzdGFydCBmcm9tIEZpcnN0IFRhc2tCYXNlIGFuZCBub3QgZnJvbSBtYWluIFRhc2tCYXNlXHJcbiAgICAgICAgdGhpcy5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGxlbiwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSVNERUZBVUxUOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXhwX2lzX2RlZmF1bHQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1RSVE9LRU46XHJcbiAgICAgICAgdmFsMyA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIERlbGltaXRlcnMgU3RyaW5nIC0gYWxwaGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlbGltaXRlciBzdHJpbmcuXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIFRva2VuIEluZGV4IC0gcmVxdWVzdGVkIHRva2VuIGluZGV4IChudW1lcmljKS5cclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gU291cmNlIFN0cmluZyAtIGRlbGltaXRlZCBhbHBoYSBzdHJpbmcgd2l0aCB0b2tlbnMuXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3N0cnRvayhyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TVFJUT0tfQ05UOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aGUgZGVsaW1ldGVycyBzdHJpbmdcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGhlIHNvdXJjZSBzdHJpbmdcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfc3RyVG9rZW5DbnQodmFsMSwgdmFsMiwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1RSVE9LRU5fSURYOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aGUgZGVsaW1ldGVycyBzdHJpbmdcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGhlIHRva2VuIHRvIGJlIGZvdW5kXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSBzb3VyY2Ugc3RyaW5nXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3N0clRva2VuSWR4KHZhbDEsIHZhbDIsIHZhbDMsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0JMT0JTSVpFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBCbG9iXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2Jsb2JzaXplKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9XRUJfUkVGRVJFTkNFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gJyUnICsgdmFsMS5TdHJWYWwgKyAnJSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DQVNFOlxyXG4gICAgICAgIC8vIHRoZSBjYXNlIG5vdCB3b3JrIHdpdGggRGF0ZSBmaWVsZCwgYnV0IG5vdCB3b3JrIGluIE9uTGluZSB0b28uXHJcbiAgICAgICAgbkFyZ3MgPSB2YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBFeHBfcGFyYW1zID0gbmV3IEFycmF5KG5BcmdzKTtcclxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgIEV4cF9wYXJhbXNbbkFyZ3MgLSAxIC0gal0gPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMudmFsX2NweShFeHBfcGFyYW1zWzBdLCByZXNWYWwpOyAvLyBnZXQgIGNhc2UoQSkgLT4gJ0EnIHZhbHVlXHJcblxyXG4gICAgICAgIGZvciAoaiA9IDE7IGogPCBuQXJnczsgaiArPSAyKSB7XHJcbiAgICAgICAgICB2YWwxID0gRXhwX3BhcmFtc1tqXTtcclxuICAgICAgICAgIGxldCB2YWx1ZU1hdGNoZWQ6IGJvb2xlYW47XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YWx1ZU1hdGNoZWQgPSAoRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfY21wX2FueSh2YWwxLCByZXNWYWwpID09PSAwKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKG51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICBpZiAobnVsbFZhbHVlRXhjZXB0aW9uIGluc3RhbmNlb2YgTnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgdmFsdWVNYXRjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgIHRocm93IG51bGxWYWx1ZUV4Y2VwdGlvbjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodmFsdWVNYXRjaGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsX2NweShFeHBfcGFyYW1zW2ogKyAxXSwgcmVzVmFsKTsgLy8gdGhlIGNhc2UgZm91bmRcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaiA9PT0gKG5BcmdzIC0gMykpXHJcbiAgICAgICAgICAvLyBhcnJheSBzdGFydHMgZnJvbSAwIC0+bkFyZ3MtMTsgbGFzdCBpcyBkaWZmYXVsdCB2YWx1ZSAtPm5BcmdzLTE7XHJcbiAgICAgICAgICAvLyBsb29raW5nIG9uZSBiZWZvcmUgZGlmZmF1bHQgLT5uQXJncy0xID0+LTNcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy52YWxfY3B5KEV4cF9wYXJhbXNbaiArIDJdLCByZXNWYWwpOyAvLyBkaWZmYXVsdCBhcmd1bWVudCBmb3VuZFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IC8vIGVuZCBvZiBmb3IgbG9vcFxyXG5cclxuICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9USElTOlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF90aGlzKHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xJS0U6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2xpa2UodmFsMSwgdmFsMiwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUkVQU1RSOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9yZXBzdHIodmFsMSwgdmFsMiwgdmFsMywgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSQ1VSUk46XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZywgbmFtZSBvZiBjb250cm9sXHJcbiAgICAgICAgdGhpcy5leHBfZ2V0X3Zhcih2YWwxLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WQVJJTkRFWDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nLCBuYW1lIG9mIGNvbnRyb2xcclxuICAgICAgICB0aGlzLmV4cF9nZXRfaW5keCh2YWwxLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSkNET1c6XHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9PSBudWxsKVxyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRhdGVcclxuICAgICAgICAgIHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbi5ldmFsX29wX2pjZG93KHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9KTU9OVEg6XHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9PSBudWxsKVxyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIG51bWJlciBvciBtb250aCBvZiB5ZWFyXHJcbiAgICAgICAgICB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF9qbW9udGgocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0pORE9XOlxyXG4gICAgICAgIGlmICh0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4gPT0gbnVsbClcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBudW1iZXIgb3IgZGF5IG9mIHdlZWtcclxuICAgICAgICAgIHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbi5ldmFsX29wX2puZG93KHJlc1ZhbCwgdmFsMSwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9KWUVBUjpcclxuICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGF0ZVxyXG4gICAgICAgICAgdGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuLmV2YWxfb3BfanllYXIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0pHRU5HTzpcclxuICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGF0ZVxyXG4gICAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIG1vZGVcclxuICAgICAgICAgIHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbi5ldmFsX29wX2pnZW5nbyhyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIHZhbDIuTWdOdW1WYWwsXHJcbiAgICAgICAgICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSEFOOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdHJpbmdcclxuICAgICAgICByZXNWYWwuQXR0ciA9IHZhbDEuQXR0cjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9PSBudWxsKVxyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsO1xyXG4gICAgICAgIGVsc2UgaWYgKHZhbDEuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgdmFsMS5BdHRyKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF9oYW4odmFsMS5TdHJWYWwpO1xyXG4gICAgICAgICAgaWYgKHJlc1ZhbC5TdHJWYWwgPT0gbnVsbClcclxuICAgICAgICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfWkVOOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdHJpbmdcclxuICAgICAgICByZXNWYWwuQXR0ciA9IHZhbDEuQXR0cjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9PSBudWxsKVxyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsO1xyXG4gICAgICAgIGVsc2UgaWYgKHZhbDEuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgdmFsMS5BdHRyKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF96ZW5zKHZhbDEuU3RyVmFsLCAwKTtcclxuICAgICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1pFTlM6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIG1vZGVcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSB2YWwxLkF0dHI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4gPT0gbnVsbClcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbDtcclxuICAgICAgICBlbHNlIGlmICh2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMS5TdHJWYWwgPT0gbnVsbClcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCB2YWwxLkF0dHIpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbi5ldmFsX29wX3plbnModmFsMS5TdHJWYWwsIHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1pJTUVSRUFEOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuID09IG51bGwpXHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWw7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuLmV2YWxfb3BfemltZXJlYWQoKTtcclxuICAgICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1pLQU5BOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBtb2RlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdmFsMS5BdHRyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuID09IG51bGwpXHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWw7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsMi5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDEuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgdmFsMS5BdHRyKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF96a2FuYSh2YWwxLlN0clZhbCwgdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgICAgICAgaWYgKHJlc1ZhbC5TdHJWYWwgPT0gbnVsbClcclxuICAgICAgICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfR09UT19DVFJMOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9nb3RvQ3RybCh2YWwxLCB2YWwyLCB2YWwzLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UUkFOU0xBVEU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3RyYW5zbGF0ZSh2YWwxLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BU1RSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9hc3RyKHZhbDEsIHZhbDIsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MT09QQ09VTlRFUjpcclxuICAgICAgICB0aGlzLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldExvb3BDb3VudGVyKCksIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZFQ0NFTExBVFRSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIEV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbF9vcF92ZWNDZWxsQXR0cih2YWwxLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WRUNHRVQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSBjZWxsIGluZGV4XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSB2ZWN0b3Igbm90IGEgJ3ZhcicgbGl0ZXJhbFxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF92ZWNHZXQodmFsMSwgdmFsMiwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkVDU0VUOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aGUgbmV3IHZhbHVlIG9mIHRoZSBjZWxsXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSBjZWxscyBpbmRleCB0byBiZSBzZXRcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gYSAndmFyJyBsaXRlcmFsIHJlcHJlc2VudGluZyB0aGUgdmVjdG9yXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3ZlY1NldCh2YWwxLCB2YWwyLCB2YWwzLCByZXNWYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZXhwU3RyVHJhY2tlci5pc051bGwoKSlcclxuICAgICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZFQ1NJWkU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSB2ZWN0b3Igbm90IGEgJ3ZhcicgbGl0ZXJhbFxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF92ZWNTaXplKHZhbDEsIHJlc1ZhbCk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSU46XHJcbiAgICAgICAgbkFyZ3MgPSB2YWxTdGFjay5wb3AoKTtcclxuXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgRXhwX3BhcmFtcyA9IG5ldyBBcnJheTxFeHBWYWw+KG5BcmdzKTtcclxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgIEV4cF9wYXJhbXNbbkFyZ3MgLSAxIC0gal0gPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgZm9yIChqID0gMTsgaiA8IG5BcmdzOyBqKyspIHtcclxuICAgICAgICAgICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkoRXhwX3BhcmFtc1swXSwgRXhwX3BhcmFtc1tqXSkgPT09IDApIHtcclxuICAgICAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgIGlmIChudWxsVmFsdWVFeGNlcHRpb24gaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgICAgICAgICB9IGVsc2UgdGhyb3cgbnVsbFZhbHVlRXhjZXB0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lTQ09NUE9ORU5UOlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9pc2NvbXBvbmVudChyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVVNFUl9ERUZJTkVEX0ZVTkM6XHJcbiAgICAgICAgbkFyZ3MgPSB2YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvKiBuQXJncyBzaG91bGQgYXRsZWFzdCBiZSAxIChmb3IgaG9sZGluZyB0aGUgZnVuY3Rpb24gbmFtZSkgKi9cclxuICAgICAgICBpZiAobkFyZ3MgPiAwKSB7XHJcbiAgICAgICAgICBuQXJncy0tOyAvLyBvbmUgb2YgdGhlIGFyZ3VtZW50cyBpcyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gKGl0IHdpbGwgYmUgdGhlIDFzdCB2YWx1ZSlcclxuICAgICAgICAgIEV4cF9wYXJhbXMgPSBuZXcgQXJyYXk8RXhwVmFsPihuQXJncyk7XHJcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgICAgRXhwX3BhcmFtc1tuQXJncyAtIDEgLSBqXSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgICAgbGV0IGZ1bmNOYW1lOiBzdHJpbmcgPSAoPEV4cFZhbD52YWxTdGFjay5wb3AoKSkuU3RyVmFsO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX0V4ZWNVc2VyRGVmaW5lZEZ1bmMoZnVuY05hbWUsIEV4cF9wYXJhbXMsIHJlc1ZhbCwgZXhwZWN0ZWRUeXBlKTtcclxuICAgICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9VTklDT0RFQVNDOlxyXG4gICAgICAgIC8vIGdldCBhIHVuaWNvZGUgc3RyaW5nIGFuZCByZXR1cm4gdGhlIHVuaWNvZGUgbnVtZXJpYyBjb2RlIG9mIGl0cyBmaXJzdCBjaGFyXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoIXZhbDEuSXNOdWxsICYmIHZhbDEuU3RyVmFsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICAgICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcodmFsMS5TdHJWYWxbMF0uY2hhckNvZGVBdCgwKSk7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICByZXNWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1BVQkxJQ05BTUU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3BfcHVibGljTmFtZShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UQVNLSUQ6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3BfdGFza0lkKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RCVklFV1NJWkU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3BfZGJ2aWV3c2l6ZShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EQlZJRVdST1dJRFg6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3BfZGJ2aWV3cm93aWR4KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1BST0pFQ1RESVI6XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3Byb2plY3RkaXIocmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01MU19UUkFOUzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGhlIGNvbnRyb2wgbmFtZVxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9NbHNUcmFucyhyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TVFJfQlVJTEQ6XHJcbiAgICAgICAgbkFyZ3MgPSB2YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfU3RyQnVpbGQodmFsU3RhY2ssIHJlc1ZhbCwgbkFyZ3MpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TVEFUVVNCQVJTRVRURVhUOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9zdGF0dXNiYXJfc2V0X3RleHQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TRVRfVElUTEU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3NldF90aXRsZShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lTX1JPV19FRElUSU5HOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9pc19yb3dfZWRpdGluZyhyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0dFVFBBUkFNOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwYXJhbWV0ZXIgbmFtZVxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9nZXRQYXJhbShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TRVRQQVJBTTpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGFyYW1ldGVyIHZhbHVlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBhcmFtZXRlciBuYW1lXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3NldFBhcmFtKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lOSVBVVDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGFyYW1ldGVyIHZhbHVlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBhcmFtZXRlciBuYW1lXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX2luaXB1dChyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JTklHRVQ6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBhcmFtZXRlciBuYW1lXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2luaWdldChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JTklHRVRMTjpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGFyYW1ldGVyIG51bWJlclxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzZWN0aW9uIG5hbWVcclxuICAgICAgICB0aGlzLmV2YWxfb3BfaW5pZ2V0bG4ocmVzVmFsLCB2YWwxLCB2YWwyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVhQQ0FMQzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gRVhQXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX2V4cGNhbGMocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVEFTS1RZUEU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3BfdGFza1R5cGUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUkFOR0VfQUREOlxyXG4gICAgICAgIG5BcmdzID0gdmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgIGlmIChuQXJncyA+IDApIHtcclxuICAgICAgICAgIEV4cF9wYXJhbXMgPSBuZXcgQXJyYXk8RXhwVmFsPihuQXJncyk7XHJcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgICAgRXhwX3BhcmFtc1tuQXJncyAtIDEgLSBqXSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3JhbmdlX2FkZChyZXNWYWwsIEV4cF9wYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUkFOR0VfUkVTRVQ6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGdlbmVyYXRpb25cclxuICAgICAgICBhd2FpdCB0aGlzLmV2YWxfb3BfcmFuZ2VfcmVzZXQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTE9DQVRFX0FERDpcclxuICAgICAgICBuQXJncyA9IHZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGlmIChuQXJncyA+IDApIHtcclxuICAgICAgICAgIEV4cF9wYXJhbXMgPSBuZXcgQXJyYXk8RXhwVmFsPihuQXJncyk7XHJcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgICAgRXhwX3BhcmFtc1tuQXJncyAtIDEgLSBqXSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX2xvY2F0ZV9hZGQocmVzVmFsLCBFeHBfcGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xPQ0FURV9SRVNFVDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZ2VuZXJhdGlvblxyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9sb2NhdGVfcmVzZXQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU09SVF9BREQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRpclxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB2YXJudW1cclxuICAgICAgICBhd2FpdCB0aGlzLmV2YWxfb3Bfc29ydF9hZGQocmVzVmFsLCB2YWwxLCB2YWwyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU09SVF9SRVNFVDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZ2VuZXJhdGlvblxyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9zb3J0X3Jlc2V0KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1RTS19JTlNUQU5DRTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZ2VuZXJhdGlvblxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF90c2tfaW5zdGFuY2UocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1RFUk06XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3Rlcm1pbmFsKHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ0xJRU5UU0VTU0lPTl9TRVQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9DbGllbnRTZXNzaW9uU2V0KHZhbDEsIHZhbDIsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NORF9SQU5HRTpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcmFuZ2UgdG8gYmUgdXNlZFxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBjb25kaXRpb24gdG8gdXNlIHJhbmdlXHJcblxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9DbmRSYW5nZShyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DT05UUk9MX1NFTEVDVF9QUk9HUkFNOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9jb250cm9sX3NlbGVjdF9wcm9ncmFtKHZhbDEsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NBTExKUzpcclxuICAgICAgICBuQXJncyA9IDxudW1iZXI+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgaWYgKG5BcmdzID4gMCkge1xyXG4gICAgICAgICAgbkFyZ3MtLTsgLy8gZmlyc3QgYXJndW1lbnQgaXMgbmFtZSBvZiBqYXZhc2NyaXB0IG1ldGhvZFxyXG5cclxuICAgICAgICAgIC8vIGdldCB0aGUgcGFyYW1ldGVyc1xyXG4gICAgICAgICAgRXhwX3BhcmFtcyA9IG5ldyBBcnJheShuQXJncyk7XHJcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgICAgRXhwX3BhcmFtc1tuQXJncyAtIDEgLSBqXSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5ldmFsX29wX0NhbGxKUyh0aGlzLkV4cFRhc2ssICg8RXhwVmFsPnZhbFN0YWNrLnBvcCgpKS5TdHJWYWwsIEV4cF9wYXJhbXMsIHJlc1ZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TRVRfQ09PS0lFOlxyXG4gICAgICAgIG5BcmdzID0gPG51bWJlcj52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBpZiAobkFyZ3MgPiAwKSB7XHJcbiAgICAgICAgICBuQXJncy0tOyAvLyBmaXJzdCBhcmd1bWVudCBpcyBuYW1lIG9mIGphdmFzY3JpcHQgbWV0aG9kXHJcblxyXG4gICAgICAgICAgLy8gZ2V0IHRoZSBwYXJhbWV0ZXJzXHJcbiAgICAgICAgICBFeHBfcGFyYW1zID0gbmV3IEFycmF5KG5BcmdzKTtcclxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuQXJnczsgaisrKVxyXG4gICAgICAgICAgICBFeHBfcGFyYW1zW25BcmdzIC0gMSAtIGpdID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmV2YWxfb3Bfc2V0X2Nvb2tpZSgoPEV4cFZhbD52YWxTdGFjay5wb3AoKSkuU3RyVmFsLCBFeHBfcGFyYW1zLCByZXNWYWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfR0VUX0NPT0tJRTpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IGZhbHNlO1xyXG4gICAgICAgICB0aGlzLmV2YWxfb3BfZ2V0X2Nvb2tpZSgoPEV4cFZhbD52YWxTdGFjay5wb3AoKSkuU3RyVmFsLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ERUxFVEVfQ09PS0lFOlxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZGVsZXRlX2Nvb2tpZSgoPEV4cFZhbD52YWxTdGFjay5wb3AoKSkuU3RyVmFsLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ST1VURUdFVDpcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfcm91dGVfZ2V0KHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChhZGRSZXN1bHQpIHtcclxuICAgICAgdGhpcy5Db252ZXJ0RXhwVmFsKHJlc1ZhbCwgZXhwZWN0ZWRUeXBlKTtcclxuICAgICAgdmFsU3RhY2sucHVzaChyZXNWYWwpO1xyXG4gICAgICAvKiBjaGVjayBpZiB3ZSBtdXN0IG51bGxpZnkgcmVzdWx0LCBiZWNhdXNlIG9uZSBvZiB0aGUgbWVtYmVycyBvZiB0aGUgZXhwcmVzc2lvbiBpcyBOVUxMXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAocmVzVmFsLklzTnVsbClcclxuICAgICAgICBleHBTdHJUcmFja2VyLnNldE51bGxSZXN1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2V0cyB0aGUgY2xpZW50IHNlc3Npb24gd2l0aCBLZXksIFZhbHVlIHBhaXIgcHJvdmlkZWQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwxXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9DbGllbnRTZXNzaW9uU2V0KHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG5cclxuICAgIGlmICghdmFsMS5pc0VtcHR5U3RyaW5nKCkpIHtcclxuICAgICAgc3dpdGNoICh2YWwxLlN0clZhbCkge1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRU5BQkxFX0NPTU1VTklDQVRJT05fRElBTE9HUzpcclxuICAgICAgICAgIGlmICh2YWwyLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTikge1xyXG4gICAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKCdJbnZhbGlkIGF0dHJpYnV0ZSBmb3IgJyArIENvbnN0SW50ZXJmYWNlLkVOQUJMRV9DT01NVU5JQ0FUSU9OX0RJQUxPR1MgKyAnIGtleSBpbiBDbGllbnRTZXNzaW9uU2V0KCknKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKCdJbnZhbGlkIEtleSBpbiBDbGllbnRTZXNzaW9uU2V0KCknKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRXhlY3V0ZSB0aGUgZXhwcmVzc2lvbiBpdHNlbGZcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZXhwU3RyVHJhY2tlclwiPnRoZSBleHByZXNzaW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFN0YWNrXCI+c3RhY2sgb2YgdmFsdWVzIHRvIHVzZSB3aGlsZSBleGVjdXRpbmcgdGhlIGV4cHJlc3Npb248L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZXhwZWN0ZWRUeXBlXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV4ZWNFeHByZXNzaW9uKGV4cFN0clRyYWNrZXI6IEV4cFN0clRyYWNrZXIsIHZhbFN0YWNrOiBTdGFjazxhbnk+LCBleHBlY3RlZFR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBleHBWYWw6IEV4cFZhbDtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgYWRkZWRPcGVyczogTGlzdDxEeW5hbWljT3BlcmF0aW9uPiA9IG5ldyBMaXN0PER5bmFtaWNPcGVyYXRpb24+KCk7XHJcbiAgICBsZXQgZHluT3BlcjogRHluYW1pY09wZXJhdGlvbjtcclxuXHJcbiAgICBsZXQgb3BDb2RlOiBudW1iZXIgPSBleHBTdHJUcmFja2VyLmdldE9wQ29kZSgpO1xyXG5cclxuICAgIC8vIGlmIGEgYmFzaWMgZGF0YSBpdGVtLCBqdXN0IGdldCBpdCBhbmQgcHVzaCBpdCB0byB0aGUgc3RhY2tcclxuICAgIGlmIChFeHByZXNzaW9uRXZhbHVhdG9yLmlzQmFzaWNJdGVtKG9wQ29kZSkpIHtcclxuICAgICAgZXhwVmFsID0gdGhpcy5nZXRFeHBCYXNpY1ZhbHVlKGV4cFN0clRyYWNrZXIsIG9wQ29kZSk7XHJcblxyXG4gICAgICB0aGlzLkNvbnZlcnRFeHBWYWwoZXhwVmFsLCBleHBlY3RlZFR5cGUpO1xyXG4gICAgICB2YWxTdGFjay5wdXNoKGV4cFZhbCk7XHJcbiAgICAgIC8qIGNoZWNrIGlmIHdlIG11c3QgbnVsbGlmeSByZXN1bHQsIGJlY2F1c2Ugb25lIG9mIHRoZSBtZW1iZXJzIG9mIHRoZSBleHByZXNzaW9uIGlzIE5VTExcclxuICAgICAgICovXHJcbiAgICAgIGlmIChleHBWYWwuSXNOdWxsKVxyXG4gICAgICAgIGV4cFN0clRyYWNrZXIuc2V0TnVsbFJlc3VsdCgpO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBleHBEZXNjOiBFeHBEZXNjID0gRXhwcmVzc2lvbkRpY3QuZXhwRGVzY1tvcENvZGVdO1xyXG5cclxuICAgIC8vIE51bGwgcmVzdWx0IG9mIGEgZnVuY3Rpb24gZGVwZW5kcyBvbmx5IG9uIHJldHVybiB2YWx1ZSBpdHMgcGFyYW1ldGVyc1xyXG4gICAgLy8gSXQgZG9lc24ndCBkZXBlbmQgb24gd2hldGhlciBhbnkgcGFyYW1ldGVyIGluIHRoZSB3aG9sZSBleHByZXNzaW9uIGlzIE5VTExcclxuICAgIC8vIEZvciBleGFtcGxlIGluIElGIChWZWNTZXQgKCdBJ1ZhciwgMSwgTlVMTCgpKSwgQSwgQilcclxuICAgIC8vIElGIHNob3VsZCBub3QgcmV0dXJuIE5VTEwgYmVjYXVzZSBWZWNTZXQgaGFzIGEgTlVMTCBwYXJhbWV0ZXIgYnV0IGl0IHNob3VsZFxyXG4gICAgLy8gcmV0dXJuIE5VTEwgaWYgZWl0aGVyIG9mIHRoZSBwYXJhbWV0ZXJzIChWZWNTZXQsIEEgb3IgQikgaXMgTlVMTFxyXG4gICAgbGV0IG51bGxBcmdzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAoZXhwRGVzYy5BcmdFdmFsQ291bnRfID4gMCkge1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZXhwRGVzYy5BcmdFdmFsQ291bnRfOyBpKyspIHtcclxuICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY0V4cHJlc3Npb24oZXhwU3RyVHJhY2tlciwgdmFsU3RhY2ssIDxTdG9yYWdlQXR0cmlidXRlPmV4cERlc2MuQXJnQXR0cl9baV0pO1xyXG4gICAgICAgIGlmIChleHBTdHJUcmFja2VyLmlzTnVsbCgpKVxyXG4gICAgICAgICAgbnVsbEFyZ3MgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG51bGxBcmdzKVxyXG4gICAgICBleHBTdHJUcmFja2VyLnNldE51bGxSZXN1bHQoKTtcclxuXHJcbiAgICAvLyBleGVjdXRlIHRoZSBjdXJyZW50IG9wZXJhdG9yXHJcbiAgICBhd2FpdCB0aGlzLmV4ZWNPcGVyYXRpb24ob3BDb2RlLCBleHBTdHJUcmFja2VyLCB2YWxTdGFjaywgYWRkZWRPcGVycywgZXhwZWN0ZWRUeXBlKTtcclxuXHJcbiAgICAvLyBpZiB0aGVyZSBhcmUgc2lkZSBlZmZlY3Qgb3BlcmF0aW9uLCBleGVjdXRlIHRoZW1cclxuICAgIGxldCBuRHluT3BlcnM6IG51bWJlciA9IGFkZGVkT3BlcnMubGVuZ3RoO1xyXG4gICAgaWYgKG5EeW5PcGVycyA+IDApIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IG5EeW5PcGVyczsgaSsrKSB7XHJcbiAgICAgICAgZHluT3BlciA9IGFkZGVkT3BlcnMuZ2V0X0l0ZW0oMCk7XHJcbiAgICAgICAgYWRkZWRPcGVycy5SZW1vdmVBdCgwKTtcclxuICAgICAgICBzd2l0Y2ggKGR5bk9wZXIub3BDb2RlXykge1xyXG4gICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JR05PUkU6XHJcbiAgICAgICAgICAgIGxldCBqOiBudW1iZXI7XHJcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBkeW5PcGVyLmFyZ0NvdW50XzsgaisrKVxyXG4gICAgICAgICAgICAgIGV4cFN0clRyYWNrZXIuc2tpcE9wZXJhdG9yKCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVZBTFg6XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY0V4cHJlc3Npb24oZXhwU3RyVHJhY2tlciwgdmFsU3RhY2ssIGV4cGVjdGVkVHlwZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDYWxjdWxhdGUgdGhlIHZhbHVlIG9mIHRoZSAxc3QgQ25kUmFuZ2UgcGFyYW1ldGVyLCBhbmQgcmV0dXJuIHRydWUgaWYgdGhlIENuZFJhbmdlIHJlc3VsdCBzaG91bGQgYmUgZGlzY2FyZGVkXHJcbiAgLy8vIFNpbWlsYXIgdG8gZXhlY0V4cHJlc3Npb24sIGJ1dCB3b3JrcyBvbmx5IG9uIENuZFJhbmdlLCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBDbmRSYW5nZSAxc3QgcGFyYW1ldGVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJleHBTdHJUcmFja2VyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxTdGFja1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZXhwZWN0ZWRUeXBlXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+dHJ1ZSBpZiBDbmRSYW5nZSBldmFsdWF0ZWQgdG8gZmFsc2UgYW5kIHRoZSByYW5nZSBzaG91bGQgYmUgZGlzY2FyZGVkPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgYXN5bmMgRGlzY2FyZENuZFJhbmdlRXhwcmVzc2lvbihleHBTdHJUcmFja2VyOiBFeHBTdHJUcmFja2VyLCB2YWxTdGFjazogU3RhY2s8YW55Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IGV4cFZhbDogRXhwVmFsO1xyXG4gICAgbGV0IG9wQ29kZTogbnVtYmVyID0gZXhwU3RyVHJhY2tlci5nZXRPcENvZGUoKTtcclxuXHJcbiAgICAvLyBpZiBhIGJhc2ljIGRhdGEgaXRlbSwganVzdCBnZXQgaXQgYW5kIHB1c2ggaXQgdG8gdGhlIHN0YWNrXHJcbiAgICBpZiAob3BDb2RlICE9PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DTkRfUkFOR0UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBleHBEZXNjOiBFeHBEZXNjID0gRXhwcmVzc2lvbkRpY3QuZXhwRGVzY1tvcENvZGVdO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuZXhlY0V4cHJlc3Npb24oZXhwU3RyVHJhY2tlciwgdmFsU3RhY2ssIDxTdG9yYWdlQXR0cmlidXRlPmV4cERlc2MuQXJnQXR0cl9bMF0pO1xyXG5cclxuICAgIGV4cFZhbCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICByZXR1cm4gZXhwVmFsLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTiAmJiAhZXhwVmFsLkJvb2xWYWw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdmFsX2NtcF9hbnkodmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwpOiBudW1iZXIge1xyXG4gICAgbGV0IHJldHZhbDogbnVtYmVyID0gMDtcclxuICAgIGxldCBhdHRyMTogU3RvcmFnZUF0dHJpYnV0ZSA9IHZhbDEuQXR0cjtcclxuICAgIGxldCBhdHRyMjogU3RvcmFnZUF0dHJpYnV0ZSA9IHZhbDIuQXR0cjtcclxuICAgIGxldCBleHBWYWw6IEV4cHJlc3Npb25FdmFsdWF0b3IgPSBuZXcgRXhwcmVzc2lvbkV2YWx1YXRvcigpO1xyXG5cclxuICAgIGlmICh2YWwxLklzTnVsbCAmJiB2YWwyLklzTnVsbClcclxuICAgICAgcmV0dXJuIDA7XHJcblxyXG4gICAgaWYgKHZhbDEuSXNOdWxsIHx8IHZhbDIuSXNOdWxsKVxyXG4gICAgICB0aHJvdyBuZXcgTnVsbFZhbHVlRXhjZXB0aW9uKGF0dHIxKTtcclxuXHJcbiAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZUJsb2IoYXR0cjEpKSB7XHJcbiAgICAgIGlmICh2YWwxLkluY2x1ZGVCbG9iUHJlZml4ICYmIEJsb2JUeXBlLmdldENvbnRlbnRUeXBlKHZhbDEuU3RyVmFsKSA9PT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX0JJTkFSWSkge1xyXG4gICAgICAgIHZhbDEuU3RyVmFsID0gQmxvYlR5cGUucmVtb3ZlQmxvYlByZWZpeCh2YWwxLlN0clZhbCk7XHJcbiAgICAgICAgdmFsMS5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICB2YWwxLkluY2x1ZGVCbG9iUHJlZml4ID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIGV4cFZhbC5Db252ZXJ0RXhwVmFsKHZhbDEsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICB9XHJcbiAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZUJsb2IoYXR0cjIpKSB7XHJcbiAgICAgIGlmICh2YWwyLkluY2x1ZGVCbG9iUHJlZml4ICYmIEJsb2JUeXBlLmdldENvbnRlbnRUeXBlKHZhbDIuU3RyVmFsKSA9PT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX0JJTkFSWSkge1xyXG4gICAgICAgIHZhbDIuU3RyVmFsID0gQmxvYlR5cGUucmVtb3ZlQmxvYlByZWZpeCh2YWwyLlN0clZhbCk7XHJcbiAgICAgICAgdmFsMi5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICB2YWwyLkluY2x1ZGVCbG9iUHJlZml4ID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIGV4cFZhbC5Db252ZXJ0RXhwVmFsKHZhbDIsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXR0cjEgPSB2YWwxLkF0dHI7XHJcbiAgICBhdHRyMiA9IHZhbDIuQXR0cjtcclxuXHJcbiAgICBpZiAoYXR0cjEgIT09IGF0dHIyKSB7XHJcbiAgICAgIGlmICgoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZU51bWVyaWMoYXR0cjEpICYmIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVOdW1lcmljKGF0dHIyKSkgfHxcclxuICAgICAgICAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKGF0dHIxKSAmJiBTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUoYXR0cjIpKSkge1xyXG4gICAgICAgIC8qIERvIG5vdGhpbmcgOiBpdCdzIE9LIHRvIGNvbXBhcmUgdGhlc2UgdHlwZXMgKi9cclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIFRoaXMgY29kZSB3YXMgdGFrZW4gZnJvbSBTVE9SQUdFOjpmbGRfY21wIG1ldGhvZCBpbiBNYWdpY1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIHN3aXRjaCAoYXR0cjEpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwgJiYgdmFsMi5TdHJWYWwgPT09IG51bGwpXHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuXHJcbiAgICAgICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsIHx8IHZhbDIuU3RyVmFsID09PSBudWxsKVxyXG4gICAgICAgICAgdGhyb3cgbmV3IE51bGxWYWx1ZUV4Y2VwdGlvbihhdHRyMSk7XHJcblxyXG4gICAgICAgIGxldCBzdHIxOiBzdHJpbmcgPSBTdHJVdGlsLnJ0cmltKHZhbDEuU3RyVmFsKTtcclxuICAgICAgICBsZXQgc3RyMjogc3RyaW5nID0gU3RyVXRpbC5ydHJpbSh2YWwyLlN0clZhbCk7XHJcblxyXG4gICAgICAgIGlmIChFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRTcGVjaWFsQW5zaUV4cHJlc3Npb24oKSB8fFxyXG4gICAgICAgICAgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkgJiZcclxuICAgICAgICAgICAgYXR0cjEgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgJiYgYXR0cjIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpKVxyXG4gICAgICAgICAgcmV0dmFsID0gVXRpbFN0ckJ5dGVNb2RlLnN0cmNtcChzdHIxLCBzdHIyKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR2YWwgPSBOU3RyaW5nLkNvbXBhcmVPcmRpbmFsKHN0cjEsIHN0cjIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwgJiYgdmFsMi5NZ051bVZhbCA9PT0gbnVsbClcclxuICAgICAgICAgIHJldHVybiAwO1xyXG5cclxuICAgICAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09PSBudWxsKVxyXG4gICAgICAgICAgdGhyb3cgbmV3IE51bGxWYWx1ZUV4Y2VwdGlvbihhdHRyMSk7XHJcbiAgICAgICAgcmV0dmFsID0gTlVNX1RZUEUubnVtX2NtcCh2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICByZXR2YWwgPSAodmFsMS5Cb29sVmFsID8gMSA6IDApIC0gKHZhbDIuQm9vbFZhbCA/IDEgOiAwKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gKHJldHZhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2FsY3VsYXRlIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZXhwXCI+aXMgYSByZWZlcmVuY2UgdG8gdGhlIGV4cHJlc3Npb24gc3RyaW5nIHRvIGJlIGV2YWx1YXRlZC4gdGhpcyBzdHJpbmdcclxuICAvLy8gICBpcyBpbiBhbiBleHByZXNzaW9uIGluIHBvbGlzaCBub3RhdGlvbiB3aGVyZSBldmVyeSBieXRlIGlzIHJlcHJlc2VudGVkIGJ5IGFcclxuICAvLy8gICAyLWRpZ2l0IGhleCBudW1iZXI8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZXhwZWN0ZWRUeXBlXCI+aXMgdGhlIGV4cGVjdGVkIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24uIHdoZW4gdGhlIGV4cHJlc3Npb25zIHR5cGUgZG9lc1xyXG4gIC8vLyAgIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgdHlwZSBhbiBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93bi4gYSBzcGFjZSAoJyAnKSBoZXJlXHJcbiAgLy8vICAgbWVhbnMgYW55IGV4cHJlc3Npb24uIGl0IGlzIHVzZWQgZm9yIEV2YWx1YXRlIG9wZXJhdGlvbi48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1wiPmlzIGEgcmVmZXJlbmNlIHRvIHRoZSB0YXNrIGluIHdoaWNoIHRoZSBleHByZXNzaW9uIGlzIGRlZmluZWQuIGl0IGlzXHJcbiAgLy8vICAgdXNlZCBmb3IgZ2V0dGluZyBhIHJlZmVyZW5jZSB0byBmaWVsZHMgZm9yIGdldHRpbmcvc2V0dGluZyB0aGVpciB2YWx1ZXM8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gU3RyaW5nIGlzIHRoZSByZXN1bHQgb2YgdGhlIGV2YWx1YXRpb246XHJcbiAgLy8vICAgMS4gc3RyaW5nIHZhbHVlIHdpbGwgYmUgYSBzdHJpbmdcclxuICAvLy8gICAyLiBudW1lcmljLCBkYXRlLCB0aW1lIHdpbGwgYmUgYSBNYWdpYyBudW1iZXIgYXMgYSBzdHJpbmcgb2YgaGV4IGRpZ2l0c1xyXG4gIC8vLyAgIDMuIGxvZ2ljYWwgd2lsbCBiZSBvbmUgZGlnaXQ6IDAgZm9yIEZBTFNFLCAxIGZvciBUUlVFXHJcbiAgLy8vICAgNC4gbnVsbCB2YWx1ZSBqdXN0IHJldHVybiBudWxsIChub3QgYW4gZW1wdHkgc3RyaW5nISk8L3JldHVybnM+XHJcbiAgc3RhdGljIGFzeW5jIGV2YWwoZXhwOiBJbnQ4QXJyYXksIGV4cGVjdGVkVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgdGFzazogVGFza0Jhc2UpOiBQcm9taXNlPEV4cFZhbD4ge1xyXG4gICAgbGV0IHJlczogRXhwVmFsID0gbnVsbDtcclxuICAgIGxldCB2YWxTdGFjazogU3RhY2s8RXhwVmFsPiA9IG5ldyBTdGFjaygpO1xyXG5cclxuICAgIGlmIChleHAgIT09IG51bGwgJiYgZXhwLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IG1lOiBFeHByZXNzaW9uRXZhbHVhdG9yID0gbmV3IEV4cHJlc3Npb25FdmFsdWF0b3IoKTtcclxuICAgICAgbGV0IGV4cFN0clRyYWNrZXI6IEV4cFN0clRyYWNrZXIgPSBuZXcgRXhwU3RyVHJhY2tlcihleHAsIHRhc2suZ2V0TnVsbEFyaXRobWV0aWMoKSA9PT0gQ29uc3RhbnRzLk5VTExfQVJJVEhfTlVMTElGWSk7XHJcbiAgICAgIG1lLkV4cFRhc2sgPSB0YXNrO1xyXG4gICAgICBhd2FpdCBtZS5leGVjRXhwcmVzc2lvbihleHBTdHJUcmFja2VyLCB2YWxTdGFjaywgZXhwZWN0ZWRUeXBlKTtcclxuICAgICAgcmVzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgaWYgKGV4cFN0clRyYWNrZXIuaXNOdWxsKCkpXHJcbiAgICAgIC8vIG51bGwgYXJpdGhtZXRpYyA9PSBudWxsaWZ5IGFuZCBvbmUgb2YgdGhlIG1lbWJlcnMgb2YgdGhlIGV4cHJlc3Npb24gaXMgbnVsbCxcclxuICAgICAgLy8gc28gdGhlIHJlc3VsdCBtdXN0IGJlIE5VTExcclxuICAgICAgICByZXMuSXNOdWxsID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXN5bmMgRGlzY2FyZENuZFJhbmdlUmVzdWx0KGV4cDogSW50OEFycmF5LCB0YXNrOiBUYXNrQmFzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IHZhbFN0YWNrOiBTdGFjazxFeHBWYWw+ID0gbmV3IFN0YWNrKCk7XHJcblxyXG4gICAgaWYgKGV4cCAhPT0gbnVsbCAmJiBleHAubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgbWU6IEV4cHJlc3Npb25FdmFsdWF0b3IgPSBuZXcgRXhwcmVzc2lvbkV2YWx1YXRvcigpO1xyXG4gICAgICBsZXQgZXhwU3RyVHJhY2tlcjogRXhwU3RyVHJhY2tlciA9IG5ldyBFeHBTdHJUcmFja2VyKGV4cCwgdGFzay5nZXROdWxsQXJpdGhtZXRpYygpID09PSBDb25zdGFudHMuTlVMTF9BUklUSF9OVUxMSUZZKTtcclxuICAgICAgbWUuRXhwVGFzayA9IHRhc2s7XHJcbiAgICAgIHJldHVybiBhd2FpdCBtZS5EaXNjYXJkQ25kUmFuZ2VFeHByZXNzaW9uKGV4cFN0clRyYWNrZXIsIHZhbFN0YWNrKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgTnVsbCB0ZXJtaW5hdGVkIFBpY1xyXG4gIC8vLyAgIG1heCBsZW5ndGggb2YgdGhlIG1hc2sgaXMgMTAwIGNoYXJhY3RlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgc3RhdGljIHNldF9hX3BpYyh2YWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGVuOiBudW1iZXIgPSBNYXRoLm1pbih2YWwubGVuZ3RoLCA5OSk7XHJcbiAgICByZXR1cm4gU3RyVXRpbC5ac3RyaW5nTWFrZSh2YWwsIGxlbik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRXZhbHVhdGUgUkFOR0UgbWFnaWMgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9yYW5nZSh2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgdmFsMzogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgdmFsMikgPj0gMCkge1xyXG4gICAgICAgIHZhbDIgPSB2YWwzO1xyXG4gICAgICAgIGlmIChFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9jbXBfYW55KHZhbDEsIHZhbDIpIDw9IDApXHJcbiAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIE51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBleC5nZXRBdHRyKCkpO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgICB0aHJvdyBleDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBFdmFsdWF0ZSBSRVAgbWFnaWMgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9yZXBfMShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwsIHZhbDM6IEV4cFZhbCwgdmFsNDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwgfHwgdmFsMi5TdHJWYWwgPT09IG51bGwgfHwgdmFsMy5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWw0Lk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9zX2NweSh2YWwxLCByZXNWYWwpO1xyXG4gICAgbGV0IGk6IG51bWJlciA9IHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKGkgPCAxKVxyXG4gICAgICBpID0gMTtcclxuICAgIGxldCBqOiBudW1iZXIgPSB2YWw0Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuXHJcbiAgICBpZiAoaiA+IHZhbDIuU3RyVmFsLmxlbmd0aClcclxuICAgICAgaiA9IHZhbDIuU3RyVmFsLmxlbmd0aDtcclxuXHJcbiAgICBpZiAoaSArIGogLSAxID4gcmVzVmFsLlN0clZhbC5sZW5ndGgpXHJcbiAgICAgIGogPSByZXNWYWwuU3RyVmFsLmxlbmd0aCAtIGkgKyAxO1xyXG5cclxuICAgIGlmICgoaiA8PSAwKSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGxldCB0bXBfczogc3RyaW5nID0gU3RyVXRpbC5tZW1jcHkoJycsIDAsIHJlc1ZhbC5TdHJWYWwsIGkgKyBqIC0gMSwgcmVzVmFsLlN0clZhbC5sZW5ndGggLSBpIC0gaiArIDEpO1xyXG5cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBTdHJVdGlsLm1lbWNweShyZXNWYWwuU3RyVmFsLCBpIC0gMSwgdmFsMi5TdHJWYWwsIDAsIGopO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IFN0clV0aWwubWVtY3B5KHJlc1ZhbC5TdHJWYWwsIGkgLSAxICsgaiwgdG1wX3MsIDAsIHJlc1ZhbC5TdHJWYWwubGVuZ3RoIC0gaSAtIGogKyAxKTtcclxuXHJcbiAgICAvKiBhZGQgYmxhbmtzIHRvIHRoZSBlbmQqL1xyXG4gICAgaWYgKGogLSB2YWwyLlN0clZhbC5sZW5ndGggPiAwKVxyXG4gICAgICByZXNWYWwuU3RyVmFsID0gU3RyVXRpbC5tZW1zZXQocmVzVmFsLlN0clZhbCwgaSArIHZhbDIuU3RyVmFsLmxlbmd0aCAtIDEsICcgJywgaiAtIHZhbDIuU3RyVmFsLmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyB2YWxfc19jcHkodmFsOiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IHZhbC5BdHRyO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IHZhbC5TdHJWYWw7XHJcbiAgICByZXNWYWwuSXNOdWxsID0gdmFsLklzTnVsbDtcclxuICAgIHJlc1ZhbC5JbmNsdWRlQmxvYlByZWZpeCA9IHZhbC5JbmNsdWRlQmxvYlByZWZpeDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsX2NweSh2YWw6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAodmFsLkF0dHIpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICBFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9zX2NweSh2YWwsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIGlmICghdmFsLklzTnVsbClcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSh2YWwuTWdOdW1WYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSB2YWwuQm9vbFZhbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKCdFeHByZXNzaW9uIEV2YWx1YXRvci52YWxfY3B5IG5vIHN1Y2ggdHlwZSBvZiBhdHRyaWJ1dGUgOiAnICsgdmFsLkF0dHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLkF0dHIgPSB2YWwuQXR0cjtcclxuICAgIHJlc1ZhbC5Jc051bGwgPSB2YWwuSXNOdWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluc2VydCBzdHJpbmcgaW50byBhbm90aGVyIHN0cmluZywgSU5TIG1hZ2ljIGZ1bmN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfaW5zKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgdmFsMzogRXhwVmFsLCB2YWw0OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsIHx8IHZhbDIuU3RyVmFsID09PSBudWxsIHx8IHZhbDMuTWdOdW1WYWwgPT09IG51bGwgfHwgdmFsNC5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGk6IG51bWJlciA9IHZhbDEuU3RyVmFsLmxlbmd0aDtcclxuXHJcbiAgICBsZXQgaW5zX29mczogbnVtYmVyID0gdmFsMy5NZ051bVZhbC5OVU1fMl9MT05HKCkgLSAxO1xyXG4gICAgaW5zX29mcyA9IE1hdGgubWF4KGluc19vZnMsIDApO1xyXG4gICAgaW5zX29mcyA9IE1hdGgubWluKGluc19vZnMsIGkpO1xyXG5cclxuICAgIGxldCBpbnNfbGVuOiBudW1iZXIgPSB2YWw0Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGluc19sZW4gPSBNYXRoLm1heChpbnNfbGVuLCAwKTtcclxuICAgIGluc19sZW4gPSBNYXRoLm1pbihpbnNfbGVuLCB2YWwyLlN0clZhbC5sZW5ndGgpO1xyXG5cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBTdHJVdGlsLm1lbWNweSgnJywgMCwgdmFsMS5TdHJWYWwsIDAsIGluc19vZnMpO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IFN0clV0aWwubWVtY3B5KHJlc1ZhbC5TdHJWYWwsIGluc19vZnMsIHZhbDIuU3RyVmFsLCAwLCBpbnNfbGVuKTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBTdHJVdGlsLm1lbWNweShyZXNWYWwuU3RyVmFsLCBpbnNfb2ZzICsgaW5zX2xlbiwgdmFsMS5TdHJWYWwsIGluc19vZnMsIGkgLSBpbnNfb2ZzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBERUwgbWFnaWMgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9kZWwocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCB2YWwzOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09PSBudWxsIHx8IHZhbDMuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfc19jcHkodmFsMSwgcmVzVmFsKTtcclxuICAgIGxldCBpOiBudW1iZXIgPSB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSAtIDE7XHJcbiAgICBpZiAoaSA8IDApIHtcclxuICAgICAgaSA9IDA7XHJcbiAgICB9XHJcbiAgICBpZiAoaSA+IHJlc1ZhbC5TdHJWYWwubGVuZ3RoKVxyXG4gICAgICBpID0gcmVzVmFsLlN0clZhbC5sZW5ndGg7XHJcbiAgICBsZXQgajogbnVtYmVyID0gdmFsMy5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoaSArIGogPiByZXNWYWwuU3RyVmFsLmxlbmd0aClcclxuICAgICAgaiA9IHJlc1ZhbC5TdHJWYWwubGVuZ3RoIC0gaTtcclxuICAgIGlmIChqIDw9IDApXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICByZXNWYWwuU3RyVmFsID0gU3RyVXRpbC5tZW1jcHkocmVzVmFsLlN0clZhbCwgaSwgcmVzVmFsLlN0clZhbCwgaSArIGosIHJlc1ZhbC5TdHJWYWwubGVuZ3RoIC0gaSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRkxJUCBtYWdpYyBmdW5jdGlvbiAocmV2ZXJzZSlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9mbGlwKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgcmV2X3N0ciA9IG5ldyBTdHJpbmdCdWlsZGVyKHZhbDEuU3RyVmFsKTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBTdHJVdGlsLlJldmVyc2VTdHJpbmcocmV2X3N0cikuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBVUFBFUiBtYWdpYyBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3VwcGVyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWwudG9VcHBlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBMT1dFUiBtYWdpYyBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2xvd2VyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbC50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENSQyBtYWdpYyBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2NyYyhyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PSBudWxsIHx8IHZhbDIuTWdOdW1WYWwgPT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBtb2RlOiBudW1iZXIgPSB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCByZXM6IG51bWJlciA9IDA7XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHJlcyA9IEV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbF9jcmNfMTYodmFsMS5TdHJWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgbGV0IGxlZnQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHJlcyAlIDI1Nik7XHJcbiAgICBsZXQgcmlnaHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHJlcyAvIDI1Nik7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJycgKyBsZWZ0ICsgcmlnaHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBldmFsX2NyY18xNihidWY6IFN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgY3JjXzE2X3RhYmxlID0gW1xyXG4gICAgICA0MDk2MSwgNjE0NDEsIDU1Mjk3LCA1MjIyNSwgNTA2ODksIDQ5OTIxLCA0OTUzNywgNDkzNDVcclxuICAgIF07XHJcbiAgICBsZXQgYnVmZmVyX2lkeDogbnVtYmVyID0gMDtcclxuICAgIGxldCBsZW46IG51bWJlciA9IGJ1Zi5sZW5ndGg7XHJcbiAgICBsZXQgY3JjOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yICg7IGxlbiA+IDA7IGxlbi0tKSB7XHJcbiAgICAgIGxldCBidCA9IGJ1Zi5jaGFyQ29kZUF0KGJ1ZmZlcl9pZHgrKyk7XHJcbiAgICAgIGJ0ID0gPG51bWJlcj4oYnQgXiBFeHByZXNzaW9uRXZhbHVhdG9yLkxPX0NIQVIoY3JjKSk7XHJcbiAgICAgIGNyYyA9IEV4cHJlc3Npb25FdmFsdWF0b3IuTE9fQ0hBUihFeHByZXNzaW9uRXZhbHVhdG9yLk1LX1NIUlQoMCwgRXhwcmVzc2lvbkV2YWx1YXRvci5ISV9DSEFSKGNyYykpKTtcclxuICAgICAgbGV0IG1hc2s6IG51bWJlcjtcclxuICAgICAgbGV0IHRibF9pZHg6IG51bWJlcjtcclxuICAgICAgZm9yICh0YmxfaWR4ID0gMCwgbWFzayA9IDxudW1iZXI+RXhwcmVzc2lvbkV2YWx1YXRvci5MT19DSEFSKDB4ODApOyB0YmxfaWR4IDwgODsgdGJsX2lkeCsrICwgbWFzayA9IDxudW1iZXI+KEV4cHJlc3Npb25FdmFsdWF0b3IuTE9fQ0hBUihtYXNrKSA+PiAxKSkge1xyXG4gICAgICAgIGlmICg8bnVtYmVyPkV4cHJlc3Npb25FdmFsdWF0b3IuTE9fQ0hBUig8bnVtYmVyPihidCAmIDxudW1iZXI+RXhwcmVzc2lvbkV2YWx1YXRvci5MT19DSEFSKG1hc2spKSkgIT09IDApXHJcbiAgICAgICAgICBjcmMgPSA8bnVtYmVyPihjcmMgXiBjcmNfMTZfdGFibGVbdGJsX2lkeF0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKGNyYyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBMT19DSEFSKG46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gPG51bWJlcj4obiAmIDB4ZmYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgSElfQ0hBUihuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDxudW1iZXI+KChuICYgMHhmZjAwKSA+PiA4KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBNS19TSFJUKGMxOiBudW1iZXIsIGMyOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDxudW1iZXI+KDxudW1iZXI+KGMxIDw8IDgpIHwgPG51bWJlcj5jMik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTUtfTE9ORyhjMTogbnVtYmVyLCBjMjogbnVtYmVyLCBjMzogbnVtYmVyLCBjNDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAoKGMxIDw8IDI0KSB8IChjMiA8PCAxNikgfCAoYzMgPDwgOCkgfCBjNCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfY2hrZGd0KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHdlaWdodF92YWxzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgxKSwgU3RyaW5nLmZyb21DaGFyQ29kZSgyKSwgU3RyaW5nLmZyb21DaGFyQ29kZSg1KSwgU3RyaW5nLmZyb21DaGFyQ29kZSgzKSwgU3RyaW5nLmZyb21DaGFyQ29kZSg2KSwgU3RyaW5nLmZyb21DaGFyQ29kZSg0KSwgU3RyaW5nLmZyb21DaGFyQ29kZSg4KSxcclxuICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSg3KSwgU3RyaW5nLmZyb21DaGFyQ29kZSgxMCksIFN0cmluZy5mcm9tQ2hhckNvZGUoOSlcclxuICAgIF07XHJcbiAgICBsZXQgcG9zOiBudW1iZXI7XHJcbiAgICBsZXQgbXVsOiBudW1iZXI7XHJcbiAgICBsZXQgY19zdHI6IHN0cmluZztcclxuICAgIGxldCBkaWdpdHM6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwgfHwgdmFsMi5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtb2RlOiBudW1iZXIgPSB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCByZXM6IG51bWJlciA9IDA7XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIG11bCA9IDI7XHJcbiAgICAgICAgZm9yIChwb3MgPSB2YWwxLlN0clZhbC5sZW5ndGg7IHBvcyA+PSAxOyBwb3MtLSkge1xyXG4gICAgICAgICAgY19zdHIgPSB2YWwxLlN0clZhbC5zdWJzdHIocG9zIC0gMSk7XHJcbiAgICAgICAgICBkaWdpdHMgPSB0aGlzLmFfMl9sb25nKGNfc3RyLCAxKSAqIG11bDtcclxuICAgICAgICAgIHJlcyArPSBkaWdpdHMgKyAoZGlnaXRzID4gOSA/IDEgOiAwKTtcclxuICAgICAgICAgIG11bCA9IDMgLSBtdWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcyAlPSAxMDtcclxuICAgICAgICBpZiAocmVzICE9PSAwKVxyXG4gICAgICAgICAgcmVzID0gMTAgLSByZXM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgZm9yIChwb3MgPSB2YWwxLlN0clZhbC5sZW5ndGg7IHBvcyA+PSAxOyBwb3MtLSkge1xyXG4gICAgICAgICAgbXVsID0gd2VpZ2h0X3ZhbHNbKHZhbDEuU3RyVmFsLmxlbmd0aCAtIHBvcykgJSAxMF0uY2hhckNvZGVBdCgwKTtcclxuICAgICAgICAgIGxldCBjX2NoYXI6IHN0cmluZyA9IHZhbDEuU3RyVmFsW3BvcyAtIDFdLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICBjX3N0ciA9IHZhbDEuU3RyVmFsLnN1YnN0cihwb3MgLSAxKTtcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChjX2NoYXIpKVxyXG4gICAgICAgICAgICBkaWdpdHMgPSB0aGlzLmFfMl9sb25nKGNfc3RyLCAxKSAqIG11bDtcclxuICAgICAgICAgIGVsc2UgaWYgKE5DaGFyLklzVXBwZXIoY19zdHJbMF0pKVxyXG4gICAgICAgICAgICBkaWdpdHMgPSAoY19zdHJbMF0uY2hhckNvZGVBdCgwKSAtICdBJy5jaGFyQ29kZUF0KDApICsgMSkgKiBtdWw7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGRpZ2l0cyA9IDA7XHJcbiAgICAgICAgICByZXMgKz0gZGlnaXRzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXMgJT0gMTE7XHJcbiAgICAgICAgaWYgKHJlcyAhPT0gMClcclxuICAgICAgICAgIHJlcyA9IDExIC0gcmVzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCByZXMsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFfMl9sb25nKHN0cjogc3RyaW5nLCBsZW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgbjogbnVtYmVyID0gMDtcclxuICAgIGZvciAobGV0IHBvczogbnVtYmVyID0gMDsgcG9zIDwgbGVuOyBwb3MgPSBwb3MgKyAxKSB7XHJcbiAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChzdHIuY2hhckF0KHBvcykpKSB7XHJcbiAgICAgICAgbiA9IG4gKiAxMDtcclxuICAgICAgICBuICs9IDxudW1iZXI+KHN0ci5jaGFyQ29kZUF0KHBvcykgLSAnMCcuY2hhckNvZGVBdCgwKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3NvdW5keChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgc291bmR4X3ZhbHM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAnMCcsICcxJywgJzInLCAnMycsICcwJywgJzEnLCAnMicsICcwJywgJzAnLCAnMicsICcyJywgJzQnLCAnNScsICc1JywgJzAnLCAnMScsICcyJyxcclxuICAgICAgJzYnLFxyXG4gICAgICAnMicsICczJywgJzAnLCAnMScsICcwJywgJzInLCAnMCcsICcyJ1xyXG4gICAgXTtcclxuXHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJzAwMDAnO1xyXG4gICAgbGV0IGxhc3RjOiBzdHJpbmcgPSAnICc7XHJcbiAgICBsZXQgb3V0cG9zOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgaW5wb3M6IG51bWJlciA9IDA7IGlucG9zIDwgdmFsMS5TdHJWYWwubGVuZ3RoOyBpbnBvcysrKSB7XHJcbiAgICAgIGxldCBpbmM6IHN0cmluZyA9IHZhbDEuU3RyVmFsLmNoYXJBdChpbnBvcykudG9VcHBlckNhc2UoKTtcclxuICAgICAgbGV0IG91dGM6IHN0cmluZyA9IHNvdW5keF92YWxzWyhpbmMuY2hhckNvZGVBdCgwKSAtICdBJy5jaGFyQ29kZUF0KDApKV07XHJcbiAgICAgIGlmIChpbnBvcyA9PT0gMClcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gRXhwcmVzc2lvbkV2YWx1YXRvci5zZXRBdChyZXNWYWwuU3RyVmFsLCBvdXRwb3MrKywgaW5jKTtcclxuICAgICAgZWxzZSBpZiAob3V0YyA+ICcwJyAmJiBvdXRjICE9PSBsYXN0Yykge1xyXG4gICAgICAgIHJlc1ZhbC5TdHJWYWwgPSBFeHByZXNzaW9uRXZhbHVhdG9yLnNldEF0KHJlc1ZhbC5TdHJWYWwsIG91dHBvcysrLCBvdXRjKTtcclxuICAgICAgICBpZiAob3V0cG9zID4gMylcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxhc3RjID0gb3V0YztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgY2hhcmFjdGVyIGluc2lkZSBzdHJpbmcgb24gbmVlZGVkIHBvc2l0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clwiPnRvIGluc2VydCBjaGFyIGludG88L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+b2YgY2hhcmFjdGVyIHRvIGluc2VydDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjaFwiPnRvIGJlIGluc2VydGVkPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHN0cmluZyB3aXRoIGluc2VydGVkIGNoYXI8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgc2V0QXQoc3RyOiBzdHJpbmcsIHBvczogbnVtYmVyLCBjaDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBidWZmZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihzdHIpO1xyXG5cclxuICAgIGlmIChwb3MgPCBzdHIubGVuZ3RoKSB7XHJcbiAgICAgIGJ1ZmZlci5zZXRfSXRlbShwb3MsIGNoKTsgLy8gdHJ5IGJsb2NrXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBidWZmZXIuQXBwZW5kKGNoKTsgLy8gY2F0Y2ggYmxvY2tcclxuICAgIH1cclxuICAgIHJldHVybiBidWZmZXIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9oc3RyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBudW0xNiA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG5ld251bTogTlVNX1RZUEU7XHJcbiAgICBsZXQgZGlnaXQ6IG51bWJlcjtcclxuICAgIGxldCBvdXRzdHIgPSBuZXcgQXJyYXkoMzApO1xyXG4gICAgbGV0IHRtcE91dFN0ciA9IG5ldyBTdHJpbmdCdWlsZGVyKG91dHN0ci5sZW5ndGgpO1xyXG4gICAgbGV0IG5lZ2F0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIG5vdGU6IGNhbiBiZSBvcHRpbWl6ZWQgYnkgdXNpbmcgbGFyZ2VyIGRpdmlzb3IgKi9cclxuICAgIG51bTE2Lm51bV80X2Ffc3RkKCcxNicpO1xyXG4gICAgbGV0IG9yZ251bSA9IG5ldyBOVU1fVFlQRSh2YWwxLk1nTnVtVmFsKTtcclxuICAgIGlmIChvcmdudW0ubnVtX2lzX25lZygpKSB7XHJcbiAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcclxuICAgICAgb3JnbnVtLm51bV9hYnMoKTtcclxuICAgIH1cclxuICAgIGxldCBkaWdpdHM6IG51bWJlciA9IDA7XHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICBuZXdudW0gPSBOVU1fVFlQRS5tb2Qob3JnbnVtLCBudW0xNik7XHJcbiAgICAgIG9yZ251bSA9IE5VTV9UWVBFLmRpdihvcmdudW0sIG51bTE2KTtcclxuICAgICAgb3JnbnVtLm51bV90cnVuYygwKTtcclxuICAgICAgZGlnaXQgPSBuZXdudW0uTlVNXzJfTE9ORygpO1xyXG4gICAgICBkaWdpdHMrKztcclxuICAgICAgRXhwcmVzc2lvbkV2YWx1YXRvci5pbnRfMl9oZXgob3V0c3RyLCBvdXRzdHIubGVuZ3RoIC0gZGlnaXRzLCAxLCBkaWdpdCwgMCk7XHJcbiAgICAgIGlmIChvcmdudW0ubnVtX2lzX3plcm8oKSlcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmVnYXRpdmUpIHtcclxuICAgICAgZGlnaXRzKys7XHJcbiAgICAgIG91dHN0cltvdXRzdHIubGVuZ3RoIC0gZGlnaXRzXSA9ICctJztcclxuICAgIH1cclxuICAgIGZvciAoZGlnaXQgPSBvdXRzdHIubGVuZ3RoIC0gZGlnaXRzOyBkaWdpdCA8IG91dHN0ci5sZW5ndGg7IGRpZ2l0KyspXHJcbiAgICAgIHRtcE91dFN0ci5BcHBlbmQob3V0c3RyW2RpZ2l0XSk7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gdG1wT3V0U3RyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBpbnRfMl9oZXgoc3RyOiBzdHJpbmdbXSwgc3RyUG9zOiBudW1iZXIsIGxlbjogbnVtYmVyLCBuOiBudW1iZXIsIGxlYWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IHBvczogbnVtYmVyID0gbGVuO1xyXG4gICAgZG8ge1xyXG4gICAgICBsZXQgZGlnaXQ6IG51bWJlciA9IG4gJSAxNjtcclxuICAgICAgaWYgKGRpZ2l0IDwgMTApXHJcbiAgICAgICAgc3RyWy0tcG9zICsgc3RyUG9zXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoJzAnLmNoYXJDb2RlQXQoMCkgKyBkaWdpdCk7XHJcbiAgICAgIGVsc2Ugc3RyWy0tcG9zICsgc3RyUG9zXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoJ0EnLmNoYXJDb2RlQXQoMCkgKyBkaWdpdCAtIDEwKTtcclxuICAgICAgbiA9IE1hdGguZmxvb3IobiAvIDE2KTtcclxuICAgIH1cclxuICAgIHdoaWxlIChwb3MgPiAwICYmIG4gIT09IDApO1xyXG4gICAgRXhwcmVzc2lvbkV2YWx1YXRvci5saWJfYV9maWxsKHN0ciwgbGVuLCBwb3MgKyBzdHJQb3MsIGxlYWQpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGxpYl9hX2ZpbGwoc3RyOiBzdHJpbmdbXSwgbGVuOiBudW1iZXIsIHBvczogbnVtYmVyLCBsZWFkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChsZWFkID09PSAwKSB7XHJcbiAgICAgIGxlbiAtPSBwb3M7XHJcbiAgICAgIGlmIChsZW4gPiAwICYmIHBvcyA+IDApIHtcclxuICAgICAgICBTdHJVdGlsLm1lbWNweShzdHIsIDAsIHN0ciwgcG9zLCBsZW4pO1xyXG4gICAgICAgIFN0clV0aWwubWVtc2V0KHN0ciwgbGVuLCAnICcsIHBvcyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwb3MgPiAwKVxyXG4gICAgICAgIFN0clV0aWwubWVtc2V0KHN0ciwgMCwgU3RyaW5nLmZyb21DaGFyQ29kZShsZWFkKSwgcG9zKTtcclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfaHZhbChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgbnVtMTYgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBudW0gPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBkaWdpdHM6IG51bWJlcjtcclxuICAgIGxldCBzdGF0ZTogbnVtYmVyID0gMDsgLy8gU1RBVEVfQkVGT1JFX05VTUJFUiA9IDA7IFNUQVRFX0lOX05VTUJFUiA9IDFcclxuICAgIGxldCBuZWdhdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIG5vdGU6IGNhbiBiZSBvcHRpbWl6ZWQgYnkgdXNpbmcgbGFyZ2VyIGRpdmlzb3IgKi9cclxuICAgIG51bTE2Lm51bV80X2Ffc3RkKCcxNicpO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNX1pFUk8oKTtcclxuICAgIGZvciAoZGlnaXRzID0gMDsgZGlnaXRzIDwgdmFsMS5TdHJWYWwubGVuZ3RoOyBkaWdpdHMrKykge1xyXG4gICAgICBsZXQgZGlnaXRjOiBzdHJpbmcgPSB2YWwxLlN0clZhbFtkaWdpdHNdO1xyXG4gICAgICBpZiAoZGlnaXRjID09PSAnLScgJiYgc3RhdGUgPT09IDApXHJcbiAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xyXG4gICAgICBsZXQgZGlnaXQ6IG51bWJlciA9IHRoaXMuaGV4XzJfbG9uZyh2YWwxLlN0clZhbCwgZGlnaXRzLCAxKTtcclxuICAgICAgaWYgKGRpZ2l0ID09PSAwICYmIGRpZ2l0YyAhPT0gJzAnKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICBzdGF0ZSA9IDE7XHJcbiAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLm11bChyZXNWYWwuTWdOdW1WYWwsIG51bTE2KTtcclxuICAgICAgbnVtLk5VTV80X0xPTkcoZGlnaXQpO1xyXG4gICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5hZGQocmVzVmFsLk1nTnVtVmFsLCBudW0pO1xyXG4gICAgfVxyXG4gICAgaWYgKG5lZ2F0aXZlKVxyXG4gICAgICByZXNWYWwuTWdOdW1WYWwubnVtX25lZygpO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhleF8yX2xvbmcoc3RyOiBTdHJpbmcsIHN0ckNvdW50OiBudW1iZXIsIGxlbjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuICAgIGxldCBuOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChwb3MgPSBzdHJDb3VudDsgcG9zIDwgc3RyQ291bnQgKyBsZW47IHBvcysrKSB7XHJcbiAgICAgIGxldCBkaWdpdDogc3RyaW5nID0gc3RyLmNoYXJBdChwb3MpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChkaWdpdCkpIHtcclxuICAgICAgICBuICo9IDE2O1xyXG4gICAgICAgIG4gKz0gZGlnaXQuY2hhckNvZGVBdCgwKSAtICcwJy5jaGFyQ29kZUF0KDApO1xyXG4gICAgICB9IGVsc2UgaWYgKGRpZ2l0ID49ICdBJyAmJiBkaWdpdCA8PSAnRicpIHtcclxuICAgICAgICBuICo9IDE2O1xyXG4gICAgICAgIG4gKz0gZGlnaXQuY2hhckNvZGVBdCgwKSAtICdBJy5jaGFyQ29kZUF0KDApICsgMTA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2NocihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcblxyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVzVmFsLlN0clZhbCA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCkpWzBdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2FzYyhyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYzogbnVtYmVyID0gKHZhbDEuU3RyVmFsLmxlbmd0aCA+IDApID8gKEVuY29kaW5nLkFTQ0lJLkdldEJ5dGVzKHZhbDEuU3RyVmFsKSlbMF0gOiAwO1xyXG5cclxuICAgIHRoaXMuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBjLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX21zdHIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PSBudWxsICYmIHZhbDIuTWdOdW1WYWwgPT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBudW0gPSBuZXcgTlVNX1RZUEUodmFsMS5NZ051bVZhbCk7XHJcbiAgICBpZiAobnVtLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIG51bS5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZW4gPSBNYXRoLm1heChsZW4sIDIpO1xyXG4gICAgbGV0IHRtcEFycmF5OiBJbnQ4QXJyYXkgPSBuZXcgSW50OEFycmF5KGxlbik7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspXHJcbiAgICAgIHRtcEFycmF5W2ldID0gbnVtLkRhdGFbaV07XHJcbiAgICBsZXQgdG1wQnl0ZXM6IFVpbnQ4QXJyYXkgPSBNaXNjLlRvQnl0ZUFycmF5KHRtcEFycmF5KTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXRFbmNvZGluZygpLkdldFN0cmluZyh0bXBCeXRlcywgMCwgdG1wQnl0ZXMubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9tdmFsKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsLk5VTV9TRVRfWkVSTygpO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyID0gTWF0aC5taW4odmFsMS5TdHJWYWwubGVuZ3RoLCBOVU1fVFlQRS5OVU1fU0laRSk7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoTWlzYy5Ub1NCeXRlQXJyYXkoRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0RW5jb2RpbmcoKS5HZXRCeXRlcyh2YWwxLlN0clZhbCkpLCAwLCBsZW4pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBldmFsdWF0aW9uIG9mIERhdGUgdG8gdGhlIEFsZmEgc3RyaW5nIHdpdGggc3BlY2lhbCBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9kc3RyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgZGlzcGxheUNvbnZlcnRvcjogRGlzcGxheUNvbnZlcnRvcik6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDIuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBkaXNwbGF5Q29udmVydG9yLnRvX2EocmVzVmFsLlN0clZhbCwgMTAwLCB2YWwxLk1nTnVtVmFsLk5VTV8yX1VMT05HKCksIHZhbDIuU3RyVmFsLFxyXG4gICAgICB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF90c3RyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgZGlzcGxheUNvbnZlcnRvcjogRGlzcGxheUNvbnZlcnRvcixcclxuICAgICAgICAgICAgICAgICAgICAgICBtaWxsaVNlY29uZHM6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMi5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBkaXNwbGF5Q29udmVydG9yLnRpbWVfMl9hKHJlc1ZhbC5TdHJWYWwsIDEwMCwgdmFsMS5NZ051bVZhbC5OVU1fMl9VTE9ORygpLCB2YWwyLlN0clZhbCxcclxuICAgICAgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSwgbWlsbGlTZWNvbmRzKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfZHZhbChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwsIGRpc3BsYXlDb252ZXJ0b3I6IERpc3BsYXlDb252ZXJ0b3IpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCB8fCB2YWwyLlN0clZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogeWVhciAyMDAwIGJ1ZyAtIGlmIHRoZSB1c2VyIGluc2VydHMgYSBkYXRlIHZhbHVlIHdpdGggb25seSAyICovXHJcbiAgICAvKiB5ZWFyIGRpZ2l0cyAoaS5lLiBERC9NTS9ZWSksIHRoZSBhXzJfZGF0ZSBtaWdodCBpbnNlcnQgZXh0cmEgKi9cclxuICAgIC8qIDIgY2VudHVyeSBkaWdpdHMsIGFuZCBlbmxhcmdlIHRoZSBpbnB1dCBzdHJpbmcuIEluIG9yZGVyIHRvICAqL1xyXG4gICAgLyogYXZpb2QgbWVtb3J5IGNvcnJ1cHRpb25zLCB3ZSBlbmxhcmdlIHRoZSBkYXRlIHN0cmluZyBpbnB1dCAgICovXHJcbiAgICAvKiBidWZmZXIgLSBJbGFuIHNoaWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgaWYgKHZhbDEuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKVxyXG4gICAgICBpZiAodmFsMS5TdHJWYWwubGVuZ3RoICsgMiA8PSBOVU1fVFlQRS5OVU1fU0laRSkge1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCB0bXAgPSBuZXcgQXJyYXkodmFsMS5TdHJWYWwubGVuZ3RoICsgMik7XHJcbiAgICAgICAgZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCB0bXAubGVuZ3RoOyArK19haSlcclxuICAgICAgICAgIHRtcFtfYWldID0gJ1xcMCc7XHJcbiAgICAgICAgU3RyVXRpbC5tZW1jcHkodG1wLCAwLCBOU3RyaW5nLlRvQ2hhckFycmF5KHZhbDEuU3RyVmFsKSwgMCwgdmFsMS5TdHJWYWwubGVuZ3RoKTtcclxuICAgICAgfVxyXG4gICAgbGV0IGw6IG51bWJlciA9IGRpc3BsYXlDb252ZXJ0b3IuYV8yX2RhdGUodmFsMS5TdHJWYWwsIHZhbDIuU3RyVmFsLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgIGlmIChsID49IDEwMDAwMDAwMDApXHJcbiAgICAgIGwgPSAwO1xyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBsLCBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF90dmFsKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgZGlzcGxheUNvbnZlcnRvcjogRGlzcGxheUNvbnZlcnRvcixcclxuICAgICAgICAgICAgICAgICAgICAgICBtaWxsaVNlY29uZHM6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCB8fCB2YWwyLlN0clZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5USU1FKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHBpYyA9IG5ldyBQSUModmFsMi5TdHJWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICBsZXQgbDogbnVtYmVyID0gZGlzcGxheUNvbnZlcnRvci5hXzJfdGltZSh2YWwxLlN0clZhbCwgcGljLCBtaWxsaVNlY29uZHMpO1xyXG4gICAgaWYgKGwgPj0gMTAwMDAwMDAwMClcclxuICAgICAgbCA9IDA7XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGwsIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2RheShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2YWxfb3BfZGF0ZV9icmsocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCAwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBldmFsX29wX21vbnRoKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHRoaXMuZXZhbF9vcF9kYXRlX2JyayhyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIDEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3llYXIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgdGhpcy5ldmFsX29wX2RhdGVfYnJrKHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgMik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfZG93KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHRoaXMuZXZhbF9vcF9kYXRlX2JyayhyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIDMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3NlY29uZChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2YWxfb3BfdGltZV9icmsocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCAyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9taW51dGUocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgdGhpcy5ldmFsX29wX3RpbWVfYnJrKHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgMSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfaG91cihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2YWxfb3BfdGltZV9icmsocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCAwKTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgZXZhbF9vcF9kYXRlX2JyayhyZXNWYWw6IEV4cFZhbCwgdmFsMTogTlVNX1RZUEUsIHR5cDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMSA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGQ6IG51bWJlciA9IHZhbDEuTlVNXzJfTE9ORygpO1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEJyZWFrIGRhdGEgaW50byBpdHMgY29tcG9uZW50c1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGxldCBicmVha1BhcmFtczogRGF0ZUJyZWFrUGFyYW1zID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5nZXROZXdEYXRlQnJlYWtQYXJhbXMoKTtcclxuICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZCwgZmFsc2UsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgbGV0IHllYXI6IG51bWJlciA9IGJyZWFrUGFyYW1zLnllYXI7XHJcbiAgICBsZXQgbW9udGg6IG51bWJlciA9IGJyZWFrUGFyYW1zLm1vbnRoO1xyXG4gICAgbGV0IGRheTogbnVtYmVyID0gYnJlYWtQYXJhbXMuZGF5O1xyXG4gICAgbGV0IGRveTogbnVtYmVyID0gYnJlYWtQYXJhbXMuZG95O1xyXG4gICAgbGV0IGRvdzogbnVtYmVyID0gYnJlYWtQYXJhbXMuZG93O1xyXG4gICAgc3dpdGNoICh0eXApIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIGQgPSBkYXk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBkID0gbW9udGg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBkID0geWVhcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIGQgPSBkb3c7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBkID0gVXRpbERhdGVKcG4uZ2V0SW5zdGFuY2UoKS5kYXRlX2pwbl95ZWFyX29mcyh5ZWFyLCBkb3kpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGQgPSAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBkLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3RpbWVfYnJrKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBOVU1fVFlQRSwgdHlwOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZDogbnVtYmVyID0gdmFsMS5OVU1fMl9VTE9ORygpO1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEJyZWFrZSBkYXRhIGludG8gaXRzIGNvbXBvbmVudHNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IFRpbWVCcmVha1BhcmFtcyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZ2V0TmV3VGltZUJyZWFrUGFyYW1zKCk7XHJcbiAgICBEaXNwbGF5Q29udmVydG9yLnRpbWVfYnJlYWsoYnJlYWtQYXJhbXMsIGQpO1xyXG4gICAgbGV0IGhvdXI6IG51bWJlciA9IGJyZWFrUGFyYW1zLmhvdXI7XHJcbiAgICBsZXQgbWludXRlOiBudW1iZXIgPSBicmVha1BhcmFtcy5taW51dGU7XHJcbiAgICBsZXQgc2Vjb25kOiBudW1iZXIgPSBicmVha1BhcmFtcy5zZWNvbmQ7XHJcbiAgICBzd2l0Y2ggKHR5cCkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgZCA9IGhvdXI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBkID0gbWludXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgZCA9IHNlY29uZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBkID0gMDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgZCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3BfYWRkRGF0ZVRpbWUocmVzVmFsOiBFeHBWYWwsIGRhdGVWYWw6IEV4cFZhbCwgdGltZVZhbDogRXhwVmFsLCB5ZWFyc1ZhbDogRXhwVmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aHNWYWw6IEV4cFZhbCwgZGF5c1ZhbDogRXhwVmFsLCBob3Vyc1ZhbDogRXhwVmFsLCBtaW51dGVzVmFsOiBFeHBWYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHNWYWw6IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHRtcFZhbCA9IG5ldyBFeHBWYWwoKTtcclxuXHJcbiAgICAvLyB2YWx1ZXMgY2hlY2tcclxuICAgIGlmIChkYXRlVmFsLk1nTnVtVmFsID09PSBudWxsIHx8IHRpbWVWYWwuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBnZXQgdGhlIHRpbWUgZmllbGRcclxuICAgIGxldCBmbGRUaW1lOiBGaWVsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKHRpbWVWYWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgIHN1cGVyLlNldFZhbCh0bXBWYWwsIGZsZFRpbWUuZ2V0VHlwZSgpLCBmbGRUaW1lLmdldFZhbHVlKHRydWUpLCBudWxsKTtcclxuXHJcbiAgICAvLyBBZGQgdGltZVxyXG4gICAgdGhpcy5ldmFsX29wX2FkZHRpbWUocmVzVmFsLCB0bXBWYWwsIGhvdXJzVmFsLCBtaW51dGVzVmFsLCBzZWNvbmRzVmFsKTtcclxuXHJcbiAgICBsZXQgdGltZTogbnVtYmVyID0gcmVzVmFsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBkYXRlOiBudW1iZXIgPSBNYXRoLmZsb29yKHRpbWUgLyAoNjAgKiA2MCAqIDI0KSk7IC8vIGlmIGRpZmYgaXMgbW9yZSB0aGVuIDI0IGhvdXJzLCByZW1vdmUgdGhlIGZ1bGwgZGF0ZSBjaGFuZ2VzXHJcbiAgICB0aW1lID0gdGltZSAlICg2MCAqIDYwICogMjQpOyAvLyBJZiB0aW1lIGlzIG5lZ2F0aXZlLCBtb3ZlIGJhY2sgYSBkYXkgYW5kIGNoYW5nZSB0aGUgdGltZVxyXG4gICAgaWYgKHRpbWUgPCAwKSB7XHJcbiAgICAgIGRhdGUtLTtcclxuICAgICAgdGltZSA9ICg2MCAqIDYwICogMjQpIC0gKC10aW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHZXQgdGhlIGRhdGUgZmllbGRcclxuICAgIGxldCBmbGREYXRlOiBGaWVsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKGRhdGVWYWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgIHN1cGVyLlNldFZhbCh0bXBWYWwsIGZsZERhdGUuZ2V0VHlwZSgpLCBmbGREYXRlLmdldFZhbHVlKHRydWUpLCBudWxsKTtcclxuXHJcbiAgICAvLyBBZGQgdGhlIGRhdGVcclxuICAgIHRoaXMuZXZhbF9vcF9hZGRkYXRlKHJlc1ZhbCwgdG1wVmFsLCB5ZWFyc1ZhbCwgbW9udGhzVmFsLCBkYXlzVmFsKTtcclxuXHJcbiAgICAvLyBBZGQgdGhlIHJlc3VsdCBkYXRlIHRvIHRoZSBkYXRlIGRpZmYgY2FsY3VsYXRlZCBlYXJsaWVyXHJcbiAgICBkYXRlICs9IHJlc1ZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgLy8gU2V0IG5ldyB0aW1lIGFuZCBkYXRlIGluIGZpZWxkc1xyXG4gICAgdG1wVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcodGltZSk7XHJcbiAgICBhd2FpdCBmbGRUaW1lLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUodG1wVmFsLlRvTWdWYWwoKSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICBhd2FpdCBmbGRUaW1lLnVwZGF0ZURpc3BsYXkoKTtcclxuXHJcbiAgICB0bXBWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhkYXRlKTtcclxuICAgIGF3YWl0IGZsZERhdGUuc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZSh0bXBWYWwuVG9NZ1ZhbCgpLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgIGF3YWl0IGZsZERhdGUudXBkYXRlRGlzcGxheSgpO1xyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9kaWZkdChyZXNWYWw6IEV4cFZhbCwgZGF0ZTF2YWw6IEV4cFZhbCwgdGltZTF2YWw6IEV4cFZhbCwgZGF0ZTJ2YWw6IEV4cFZhbCwgdGltZTJ2YWw6IEV4cFZhbCwgZGlmRGF0ZVZhbDogRXhwVmFsLCBkaWZUaW1lVmFsOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBsZXQgdG1wVmFsOiBFeHBWYWwgPSBuZXcgRXhwVmFsKCk7XHJcbiAgICB0bXBWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIHRtcFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG5cclxuICAgIC8vIHZhbHVlcyBjaGVja1xyXG4gICAgaWYgKGRpZkRhdGVWYWwuTWdOdW1WYWwgPT09IG51bGwgfHwgZGlmVGltZVZhbC5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENhbGN1bGF0ZSB0aW1lIGRpZnNcclxuICAgIGxldCBkaWZEYXRlOiBudW1iZXIgPSBkYXRlMXZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCkgLSBkYXRlMnZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgZGlmVGltZTogbnVtYmVyID0gdGltZTF2YWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpIC0gdGltZTJ2YWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG5cclxuICAgIGlmICgoZGlmVGltZSA8IDApICYmIChkaWZUaW1lID4gLTg2NDAwKSAmJiAoZGlmRGF0ZSA+IDApKSB7XHJcbiAgICAgIGRpZkRhdGUtLTtcclxuICAgICAgZGlmVGltZSA9IDg2NDAwIC0gKC1kaWZUaW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBnZXQgdGhlIGZpZWxkc1xyXG4gICAgbGV0IGZsZERhdGU6IEZpZWxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soZGlmRGF0ZVZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgbGV0IGZsZFRpbWU6IEZpZWxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soZGlmVGltZVZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG5cclxuICAgIC8vIFNldCB0aGUgZGlmIHZhbHVlc1xyXG4gICAgdG1wVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcoZGlmRGF0ZSk7XHJcbiAgICBhd2FpdCBmbGREYXRlLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUodG1wVmFsLlRvTWdWYWwoKSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICBhd2FpdCBmbGREYXRlLnVwZGF0ZURpc3BsYXkoKTtcclxuXHJcbiAgICB0bXBWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhkaWZUaW1lKTtcclxuICAgIGF3YWl0IGZsZFRpbWUuc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZSh0bXBWYWwuVG9NZ1ZhbCgpLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgIGF3YWl0IGZsZFRpbWUudXBkYXRlRGlzcGxheSgpO1xyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9uZG93KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIGRpc3BsYXlDb252ZXJ0b3I6IERpc3BsYXlDb252ZXJ0b3IpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YWwxLk1nTnVtVmFsID0gdGhpcy5tdWxfYWRkKHZhbDEuTWdOdW1WYWwsIDAsIDYpO1xyXG4gICAgdGhpcy5ldmFsX29wX2Nkb3cocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCBkaXNwbGF5Q29udmVydG9yKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3Bfbm1vbnRoKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIGRpc3BsYXlDb252ZXJ0b3I6IERpc3BsYXlDb252ZXJ0b3IpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YWwxLk1nTnVtVmFsID0gdGhpcy5tdWxfYWRkKHZhbDEuTWdOdW1WYWwsIDMxLCAtMzApO1xyXG4gICAgdGhpcy5ldmFsX29wX2Ntb250aChyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIGRpc3BsYXlDb252ZXJ0b3IpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIE11bHRpcGx5ICYgYWRkIHRvIG51bWVyaWMgdHlwZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIG11bF9hZGQobnVtOiBOVU1fVFlQRSwgbXVsOiBudW1iZXIsIGFkZDogbnVtYmVyKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IHRtcCA9IG5ldyBOVU1fVFlQRSgpO1xyXG5cclxuICAgIGlmIChudW0gPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIGlmIChtdWwgIT09IDApIHtcclxuICAgICAgdG1wLk5VTV80X0xPTkcobXVsKTtcclxuICAgICAgbnVtID0gTlVNX1RZUEUubXVsKG51bSwgdG1wKTtcclxuICAgIH1cclxuICAgIGlmIChhZGQgIT09IDApIHtcclxuICAgICAgdG1wLk5VTV80X0xPTkcoYWRkKTtcclxuICAgICAgbnVtID0gTlVNX1RZUEUuYWRkKG51bSwgdG1wKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudW07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfY2RvdyhyZXNWYWw6IEV4cFZhbCwgdmFsMTogTlVNX1RZUEUsIGRpc3BsYXlDb252ZXJ0b3I6IERpc3BsYXlDb252ZXJ0b3IpOiB2b2lkIHtcclxuICAgIHRoaXMuZXZhbF9vcF9kYXRlX3N0cihyZXNWYWwsIHZhbDEsICdXV1dXV1dXV1dXVCcsIGRpc3BsYXlDb252ZXJ0b3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2Ntb250aChyZXNWYWw6IEV4cFZhbCwgdmFsMTogTlVNX1RZUEUsIGRpc3BsYXlDb252ZXJ0b3I6IERpc3BsYXlDb252ZXJ0b3IpOiB2b2lkIHtcclxuICAgIHRoaXMuZXZhbF9vcF9kYXRlX3N0cihyZXNWYWwsIHZhbDEsICdNTU1NTU1NTU1NVCcsIGRpc3BsYXlDb252ZXJ0b3IpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGV2YWxfb3BfZGF0ZV9zdHIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IE5VTV9UWVBFLCBmb3JtYXQ6IHN0cmluZywgZGlzcGxheUNvbnZlcnRvcjogRGlzcGxheUNvbnZlcnRvcik6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZG93OiBudW1iZXIgPSB2YWwxLk5VTV8yX1VMT05HKCk7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gZGlzcGxheUNvbnZlcnRvci50b19hKHJlc1ZhbC5TdHJWYWwsIDEwLCBkb3csIGZvcm1hdCwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLyBUT0RPOiBJbXBsZW1lbnQgTW9uaXRvciBmb3IgZGVsYXlcclxuICBwcml2YXRlIGV2YWxfb3BfZGVsYXkoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2lkbGUocmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBuOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGlkbGVUaW1lOiBudW1iZXIgPSBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRJZGxlVGltZSh0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgIGlmIChpZGxlVGltZSA+IDApIHtcclxuICAgICAgbGV0IEN1cnJUaW1lTWlsbGk6IG51bWJlciA9IE1pc2MuZ2V0U3lzdGVtTWlsbGlzZWNvbmRzKCk7XHJcbiAgICAgIC8vIGFjdF9pZGxlICgpOlxyXG4gICAgICBuID0gTWF0aC5mbG9vcihNYXRoLmZsb29yKChDdXJyVGltZU1pbGxpIC0gTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLkxhc3RBY3Rpb25UaW1lKSAvIDEwMDApIC8gaWRsZVRpbWUpO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKG4gKiBpZGxlVGltZSAqIDEwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9hZGRkYXRlKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgdmFsMzogRXhwVmFsLCB2YWw0OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCB0cmllczogbnVtYmVyO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwgfHwgdmFsMi5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWwzLk1nTnVtVmFsID09PSBudWxsIHx8IHZhbDQuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBkYXRlOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBCcmVha2UgZGF0YSBpbnRvIGl0cyBjb21wb25lbnRzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IGJyZWFrUGFyYW1zOiBEYXRlQnJlYWtQYXJhbXMgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldE5ld0RhdGVCcmVha1BhcmFtcygpO1xyXG4gICAgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlX2JyZWFrX2RhdGVtb2RlKGJyZWFrUGFyYW1zLCBkYXRlLCBmYWxzZSwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICBsZXQgeWVhcjogbnVtYmVyID0gYnJlYWtQYXJhbXMueWVhcjtcclxuICAgIGxldCBtb250aDogbnVtYmVyID0gYnJlYWtQYXJhbXMubW9udGg7XHJcbiAgICBsZXQgZGF5OiBudW1iZXIgPSBicmVha1BhcmFtcy5kYXk7XHJcblxyXG4gICAgLyogMjAuNy45NSAtIEhlbiA6IEZpeCBidWcgMTk3NSAqL1xyXG4gICAgaWYgKEVudmlyb25tZW50Lkluc3RhbmNlLkdldERhdGVNb2RlKHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpID09PSAnQicpXHJcbiAgICAgIHllYXIgPSBNYXRoLm1heCh5ZWFyIC0gUElDSW50ZXJmYWNlLkRBVEVfQlVEREhJU1RfR0FQLCAwKTtcclxuICAgIHllYXIgKz0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBtb250aCArPSB2YWwzLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBkYXkxOiBudW1iZXIgPSB2YWw0Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBhZGRfZGF5OiBudW1iZXIgPSAoZGF5ID09PSAwICYmIHllYXIgIT09IDAgJiYgbW9udGggIT09IDAgJiYgZGF5MSAhPT0gMCkgPyAxIDogMDtcclxuICAgIGxldCBtb250aDE6IG51bWJlciA9IG1vbnRoICsgeWVhciAqIDEyO1xyXG4gICAgeWVhciA9IE1hdGguZmxvb3IoKG1vbnRoMSAtIDEpIC8gMTIpO1xyXG4gICAgbW9udGggPSAobW9udGgxIC0gMSkgJSAxMiArIDE7XHJcbiAgICBmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCA0OyB0cmllcysrKSB7XHJcbiAgICAgIGRhdGUgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfNF9jYWxlbmRlcih5ZWFyLCBtb250aCwgZGF5ICsgYWRkX2RheSwgMCwgZmFsc2UpO1xyXG4gICAgICBpZiAoZGF0ZSA8IDEwMDAwMDAwMDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRheS0tO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIEZNSS0yNjQsIDk5LzAxLzA4LCBKUE5JRDogTUtQOTkwMTAwMDggICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAvKiBkYXRlXzRfY2FsZW5kZXIoKSByZXR1cm5zIDEwMDAwMDAwMDBMIGFzIGFuIGludmFsaWQgZGF0ZSAqL1xyXG4gICAgLyogaW4gd2hpY2ggY2FzZSBkYXRlIHNob3VsZCBiZSAwMDAwLzAwLzAwLiAgICAgICAgICAgICAgICAgKi9cclxuICAgIGlmIChkYXRlID09PSAxMDAwMDAwMDAwKVxyXG4gICAgICBkYXRlID0gMDtcclxuICAgIGVsc2Uge1xyXG4gICAgICBkYXRlICs9IGRheTEgLSBhZGRfZGF5O1xyXG4gICAgICBkYXRlID0gTWF0aC5tYXgoZGF0ZSwgMCk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGRhdGUsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2FkZHRpbWUocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCB2YWwzOiBFeHBWYWwsIHZhbDQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwgfHwgdmFsMi5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWwzLk1nTnVtVmFsID09PSBudWxsIHx8IHZhbDQuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCB0aW1lOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX1VMT05HKCkgKyB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSAqIDM2MDAgKyB2YWwzLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSAqIDYwICsgdmFsNC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIHRpbWUsIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfYm9tKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBicmVha1BhcmFtczogRGF0ZUJyZWFrUGFyYW1zO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGRhdGU6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfVUxPTkcoKTtcclxuICAgIGlmIChkYXRlICE9PSAwKSB7XHJcbiAgICAgIGJyZWFrUGFyYW1zID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5nZXROZXdEYXRlQnJlYWtQYXJhbXMoKTtcclxuICAgICAgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlX2JyZWFrX2RhdGVtb2RlKGJyZWFrUGFyYW1zLCBkYXRlLCBmYWxzZSwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICAgIGxldCBkYXk6IG51bWJlciA9IGJyZWFrUGFyYW1zLmRheTtcclxuICAgICAgZGF0ZSAtPSAoZGF5IC0gMSk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGRhdGUsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfYm95KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBicmVha1BhcmFtczogRGF0ZUJyZWFrUGFyYW1zO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBkYXRlOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX1VMT05HKCk7XHJcbiAgICBpZiAoZGF0ZSAhPT0gMCkge1xyXG4gICAgICBicmVha1BhcmFtcyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZ2V0TmV3RGF0ZUJyZWFrUGFyYW1zKCk7XHJcbiAgICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZGF0ZSwgZmFsc2UsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgICBsZXQgeWVhcjogbnVtYmVyID0gYnJlYWtQYXJhbXMueWVhcjtcclxuICAgICAgbGV0IGRheTogbnVtYmVyID0gMTtcclxuICAgICAgbGV0IG1vbnRoOiBudW1iZXIgPSAxO1xyXG4gICAgICBpZiAoRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0RGF0ZU1vZGUodGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSkgPT09ICdCJylcclxuICAgICAgICB5ZWFyID0gTWF0aC5tYXgoeWVhciAtIFBJQ0ludGVyZmFjZS5EQVRFX0JVRERISVNUX0dBUCwgMCk7XHJcbiAgICAgIGRhdGUgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfNF9jYWxlbmRlcih5ZWFyLCBtb250aCwgZGF5LCAwLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGRhdGUsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfZW9tKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBicmVha1BhcmFtczogRGF0ZUJyZWFrUGFyYW1zO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBkYXRlOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX1VMT05HKCk7XHJcbiAgICBpZiAoZGF0ZSAhPT0gMCkge1xyXG4gICAgICBicmVha1BhcmFtcyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZ2V0TmV3RGF0ZUJyZWFrUGFyYW1zKCk7XHJcbiAgICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZGF0ZSwgZmFsc2UsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgICBsZXQgeWVhcjogbnVtYmVyID0gYnJlYWtQYXJhbXMueWVhcjtcclxuICAgICAgbGV0IG1vbnRoOiBudW1iZXIgPSBicmVha1BhcmFtcy5tb250aDtcclxuICAgICAgbGV0IGRheTogbnVtYmVyID0gMzE7XHJcbiAgICAgIGlmIChFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXREYXRlTW9kZSh0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKSA9PT0gJ0InKVxyXG4gICAgICAgIHllYXIgPSBNYXRoLm1heCh5ZWFyIC0gUElDSW50ZXJmYWNlLkRBVEVfQlVEREhJU1RfR0FQLCAwKTtcclxuICAgICAgbGV0IHRyaWVzOiBudW1iZXI7XHJcbiAgICAgIGZvciAodHJpZXMgPSAwOyB0cmllcyA8IDQ7IHRyaWVzKyspIHtcclxuICAgICAgICBkYXRlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlXzRfY2FsZW5kZXIoeWVhciwgbW9udGgsIGRheSwgMCwgZmFsc2UpO1xyXG4gICAgICAgIGlmIChkYXRlIDwgMTAwMDAwMDAwMClcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRheS0tO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGRhdGUsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfZW95KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZGF0ZTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9VTE9ORygpO1xyXG4gICAgaWYgKGRhdGUgIT09IDApIHtcclxuICAgICAgbGV0IGJyZWFrUGFyYW1zOiBEYXRlQnJlYWtQYXJhbXMgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldE5ld0RhdGVCcmVha1BhcmFtcygpO1xyXG4gICAgICBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfYnJlYWtfZGF0ZW1vZGUoYnJlYWtQYXJhbXMsIGRhdGUsIGZhbHNlLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgICAgbGV0IHllYXI6IG51bWJlciA9IGJyZWFrUGFyYW1zLnllYXI7XHJcbiAgICAgIGxldCBtb250aDogbnVtYmVyID0gMTI7XHJcbiAgICAgIGxldCBkYXk6IG51bWJlciA9IDMxO1xyXG4gICAgICBpZiAoRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0RGF0ZU1vZGUodGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSkgPT09ICdCJylcclxuICAgICAgICB5ZWFyID0gTWF0aC5tYXgoeWVhciAtIFBJQ0ludGVyZmFjZS5EQVRFX0JVRERISVNUX0dBUCwgMCk7XHJcbiAgICAgIGRhdGUgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfNF9jYWxlbmRlcih5ZWFyLCBtb250aCwgZGF5LCAwLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGRhdGUsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3Bfc3RydG9rKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgdmFsMzogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgdG1wX3M6IFN0cmluZ0J1aWxkZXI7XHJcbiAgICBsZXQgdG1wX3N0cjogc3RyaW5nO1xyXG4gICAgbGV0IGlkeDogbnVtYmVyO1xyXG4gICAgbGV0IGRlbGltOiBzdHJpbmc7XHJcbiAgICBsZXQgcmV0X3N0cjogc3RyaW5nID0gJyc7XHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwgfHwgdmFsMi5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWwzLlN0clZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgIH1cclxuICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHZhbDEuU3RyVmFsKSAmJiB2YWwzLlN0clZhbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRtcF9zID0gbmV3IFN0cmluZ0J1aWxkZXIodmFsMS5TdHJWYWwubGVuZ3RoICsgMik7XHJcbiAgICAgIGlkeCA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICBpZiAoaWR4ID4gMCkge1xyXG4gICAgICAgIGRlbGltID0gTlN0cmluZy5UcmltRW5kKHZhbDMuU3RyVmFsLCB0aGlzLl9jaGFyc1RvVHJpbSk7XHJcbiAgICAgICAgdG1wX3MuQXBwZW5kKHZhbDEuU3RyVmFsKTtcclxuICAgICAgICBpZiAoZGVsaW0ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoaWR4ID09PSAxKVxyXG4gICAgICAgICAgICByZXRfc3RyID0gdG1wX3MuVG9TdHJpbmcoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdG1wX3N0ciA9IHRtcF9zLlRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGlkeDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJldF9zdHIgPSBTdHJVdGlsLnN0cnN0cih0bXBfc3RyLCBkZWxpbSk7XHJcbiAgICAgICAgICAgIGlmIChyZXRfc3RyID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGkgPT09IGlkeCAtIDEpXHJcbiAgICAgICAgICAgICAgICByZXRfc3RyID0gdG1wX3N0cjtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXRfc3RyID0gdG1wX3N0ci5zdWJzdHIoMCwgdG1wX3N0ci5sZW5ndGggLSByZXRfc3RyLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHRtcF9zdHIgPSB0bXBfc3RyLnN1YnN0cihyZXRfc3RyLmxlbmd0aCArIGRlbGltLmxlbmd0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocmV0X3N0ciAhPT0gbnVsbCkge1xyXG4gICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IHJldF9zdHI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgfVxyXG4gICAgaWR4ID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoIU5TdHJpbmcuSXNOdWxsT3JFbXB0eSh2YWwxLlN0clZhbCkgJiYgdmFsMy5TdHJWYWwubGVuZ3RoID09PSAwICYmIGlkeCA9PT0gMSkge1xyXG4gICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2Ricm91bmQocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUodmFsMS5NZ051bVZhbCk7XHJcbiAgICBsZXQgd2hvbGU6IG51bWJlciA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKHdob2xlIDwgMClcclxuICAgICAgcmVzVmFsLk1nTnVtVmFsLmRiUm91bmQoLXdob2xlKTtcclxuICAgIGVsc2UgcmVzVmFsLk1nTnVtVmFsLnJvdW5kKHdob2xlKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3ZhcnBpYyhyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBmbGQ6IEZpZWxkO1xyXG4gICAgbGV0IGN0cmw6IE1nQ29udHJvbDtcclxuXHJcbiAgICAvLyB2YWxpZGF0aW9uIGNoZWNrcyBvbiB0aGUgZXhwcmVzc2lvbiBhcmd1bWVudHNcclxuICAgIGlmICh2YWwyLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbW9kZTogbnVtYmVyID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgaXRtOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGZsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKGl0bSk7IC8vIGl0bSBzdGFydHMgZnJvbSBBIC0+IDEsIGJ1dCBvdXIgYXJyYXkgc3RhcnRzIGZyb20gMCAtPiAoaXRtLTEpXHJcbiAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBFeGNlcHRpb24pIHtcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZyhleCk7XHJcbiAgICAgICAgLy8gbWFrZU51bGxTdHJpbmdcclxuICAgICAgICBmbGQgPSBudWxsO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgICB0aHJvdyBleDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmxkID09PSBudWxsKSB7XHJcbiAgICAgIC8vIHZhbF9wcmVfcyAoMCkgaW4gTWFnaWNcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKCdFeHByZXNzaW9uRXZhbHVhdG9yLmV2YWxfb3BfdmFycGljIHRoZXJlIGlzIG5vIGNvbnRyb2wgbnVtYmVyICcgKyBpdG0pO1xyXG4gICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChtb2RlICE9PSAwKSB7XHJcbiAgICAgIC8vIGdldHMgdGhlIGNvbnRyb2wgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZFxyXG4gICAgICBjdHJsID0gZmxkLmdldEN0cmwoKTtcclxuXHJcbiAgICAgIGlmIChjdHJsICE9PSBudWxsKSB7XHJcbiAgICAgICAgLy8gd2UgZG9udCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBjb250cm9sIGZvcm1hdCBpcyBhbiBleHByZXNzaW9uIHNpbmNlXHJcbiAgICAgICAgLy8gdGhlIFBJQyBvYmplY3QgYWx3YXlzIGtlZXAgYW4gdXAgdG8gZGF0ZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiByZXN1bHRlXHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IGN0cmwuZ2V0UElDKCkuZ2V0Rm9ybWF0KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZmxkLmdldFR5cGUoKSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CICYmIGZsZC5nZXRUeXBlKCkgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IGZsZC5nZXRQaWN0dXJlKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfdmFyYXR0cihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgZmxkOiBGaWVsZDtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGl0bTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICB0cnkge1xyXG4gICAgICBmbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayhpdG0pO1xyXG4gICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2coZXgpO1xyXG4gICAgICAgIGZsZCA9IG51bGw7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIHRocm93IGV4O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmbGQgPT09IG51bGwpIHtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKCdFeHByZXNzaW9uRXZhbHVhdG9yLmV2YWxfb3BfdmFyYXR0ciB0aGVyZSBpcyBubyBjb250cm9sIG51bWJlciAnICsgaXRtKTtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSA9IGZsZC5nZXRUeXBlKCk7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJycgKyBFeHByZXNzaW9uRXZhbHVhdG9yLkdldEF0dHJpYnV0ZUNoYXIoYXR0cik7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBleHBfbnVsbF92YWxfZ2V0KGV4cF9hdHRyOiBTdG9yYWdlQXR0cmlidXRlLCBvcGNvZGU6IG51bWJlciwgbnVsbF9wYXJtOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBwdHI6IHN0cmluZyA9ICcnO1xyXG4gICAgbGV0IG51bV92YWw6IG51bWJlciA9IDA7XHJcblxyXG4gICAgbnVsbF9wYXJtLklzTnVsbCA9IHRydWU7XHJcblxyXG5cclxuICAgIC8vIElmIHRoZSBUaGUgQXR0cmlidXRlIGlzIFVua25vd24gLSB1c2UgdGhlIGV4cGVjdGVkIEF0dHJpYnV0ZTpcclxuICAgIGlmIChvcGNvZGUgPT09IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTEwpIHtcclxuICAgICAgbnVsbF9wYXJtLkF0dHIgPSBleHBfYXR0cjtcclxuICAgICAgaWYgKGV4cF9hdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKVxyXG4gICAgICAgIHB0ciA9ICcnO1xyXG5cclxuICAgICAgc3dpdGNoIChleHBfYXR0cikge1xyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk1FTU86XHJcbiAgICAgICAgICBvcGNvZGUgPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX0E7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgICBvcGNvZGUgPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX047XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgICBvcGNvZGUgPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX0I7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgICBvcGNvZGUgPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX0Q7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgICBvcGNvZGUgPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX1Q7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgICBvcGNvZGUgPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX1U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAob3Bjb2RlKSB7XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTDpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX0E6XHJcbiAgICAgICAgaWYgKGV4cF9hdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgJiZcclxuICAgICAgICAgIGV4cF9hdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgICAgbnVsbF9wYXJtLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgIHB0ciA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX046XHJcbiAgICAgICAgbnVsbF9wYXJtLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfQjpcclxuICAgICAgICBudWxsX3Bhcm0uQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgICBudW1fdmFsID0gMDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9EOlxyXG4gICAgICAgIG51bGxfcGFybS5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFO1xyXG4gICAgICAgIG51bV92YWwgPSBOTnVtYmVyLlBhcnNlKFBJQ0ludGVyZmFjZS5ERUZBVUxUX0RBVEUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX1Q6XHJcbiAgICAgICAgbnVsbF9wYXJtLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlRJTUU7XHJcbiAgICAgICAgbnVtX3ZhbCA9IE5OdW1iZXIuUGFyc2UoUElDSW50ZXJmYWNlLkRFRkFVTFRfVElNRSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfVTpcclxuICAgICAgICBpZiAoZXhwX2F0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiAmJlxyXG4gICAgICAgICAgZXhwX2F0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgICBudWxsX3Bhcm0uQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgICAgICBwdHIgPSAnJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX086XHJcbiAgICAgICAgbnVsbF9wYXJtLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJMT0I7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoIChudWxsX3Bhcm0uQXR0cikge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgbnVsbF9wYXJtLlN0clZhbCA9IHB0cjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgaWYgKG9wY29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9OKSB7XHJcbiAgICAgICAgICAvLyBpbml0IE5VTEwgTnVtZXJpYyBudW1iZXJcclxuICAgICAgICAgIGxldCBudW1fdmFsdWUgPSBuZXcgSW50OEFycmF5KE5VTV9UWVBFLk5VTV9TSVpFKTtcclxuICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBudW1fdmFsdWUubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIG51bV92YWx1ZVtpXSA9IDA7XHJcbiAgICAgICAgICBudWxsX3Bhcm0uTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUobnVtX3ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVGltZSAmIERhdGFcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLkNvbnN0cnVjdE1hZ2ljTnVtKG51bGxfcGFybSwgbnVtX3ZhbCwgbnVsbF9wYXJtLkF0dHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgbnVsbF9wYXJtLlN0clZhbCA9IHB0cjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIG51bGxfcGFybS5Cb29sVmFsID0gZmFsc2U7IC8vIGZhbHNlIGlzIGRlZmF1bHQgNCBib29sZWFuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBfZ2V0X3ZhcihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCBpc19wcmV2aW91czogYm9vbGVhbik6IHZvaWQgO1xyXG4gIHByaXZhdGUgZXhwX2dldF92YXIodmFsMTogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQgO1xyXG4gIHByaXZhdGUgZXhwX2dldF92YXIocmVzVmFsT3JWYWwxOiBFeHBWYWwsIHZhbDFPclJlc1ZhbDogRXhwVmFsLCBpc19wcmV2aW91cz86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXNfcHJldmlvdXMpKVxyXG4gICAgICB0aGlzLmV4cF9nZXRfdmFyXzAocmVzVmFsT3JWYWwxLCB2YWwxT3JSZXNWYWwsIGlzX3ByZXZpb3VzKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5leHBfZ2V0X3Zhcl8xKHJlc1ZhbE9yVmFsMSwgdmFsMU9yUmVzVmFsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwX2dldF92YXJfMChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCBpc19wcmV2aW91czogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IGZsZDogRmllbGQgPSBudWxsO1xyXG5cclxuICAgIC8vIGV2YWx1YXRlIGZsZCBmcm9tIG1nTnVtVmFsXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgaXRtOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgICAgZmxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soaXRtKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiBmbGQgaXMgbnVsbCwgc2V0IHJlc1ZhbCB0byBudWxsIGFuZCByZXR1cm5cclxuICAgIGlmIChmbGQgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiBmbGQgaXMgbm90IGV4cG9zZWQgdG8gY2xpZW50IHRoZW4gYWxlcnQgd2l0aCBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gbnVsbFxyXG4gICAgaWYgKGZsZC5Jc0V4cG9zZWRUb0NsaWVudCA9PT0gZmFsc2UpIHtcclxuICAgICAgbGV0IHNiOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgICAgc2IuQXBwZW5kKE5TdHJpbmcuRm9ybWF0KCdFcnJvcjogVmFyaWFibGUgXFwnezB9XFwnIGlzIG5vdCBleHBvc2VkIHRvIGNsaWVudC4nLCBmbGQuZ2V0VmFyTmFtZSgpKSk7XHJcbiAgICAgIGFsZXJ0KHNiLlRvU3RyaW5nKCkpO1xyXG4gICAgICByZXNWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc19wcmV2aW91cylcclxuICAgIC8vIHNldCB0aGUgZmxhZyB0aGF0IHdpbGwgYmUgdXNlZCBieSBmbGQuZ2V0VmFsdWVcclxuICAgICAgKDxUYXNrQmFzZT5mbGQuZ2V0VGFzaygpKS5zZXRFdmFsT2xkVmFsdWVzKHRydWUpO1xyXG5cclxuICAgIC8vIGZpcnN0IGdldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGFuZCBzZXQgaXQgdG8gdGhlIHJlc3VsdC5cclxuICAgIHN1cGVyLlNldFZhbChyZXNWYWwsIGZsZC5nZXRUeXBlKCksIGZsZC5nZXRWYWx1ZSh0cnVlKSwgbnVsbCk7XHJcblxyXG4gICAgLy8gbm93IGZvciB0aGUgbnVsbCBpbmRpY2F0aW9uLlxyXG4gICAgaWYgKGlzX3ByZXZpb3VzKSB7XHJcbiAgICAgIC8vIGZvciBwcmV2aW91cywgdGhlIG51bGwgaW5kaWNhdGlvbiBpcyBub3Qgb24gdGhlIGZsZCwgd2Ugc2hvdWxkIGdldCBpdCBmcm9tIHRoZSBvcmlnaW5hbCByZWNvcmQuXHJcbiAgICAgIGlmIChmbGQuaXNPcmlnaW5hbFZhbHVlTnVsbCgpKVxyXG4gICAgICAvLyB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIHJlY29yZCBpcyBOVUxMXHJcbiAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORSk7XHJcbiAgICB9XHJcbiAgICAvLyBmb3IgY3VycmVudCB2YWx1ZSwgdGhlIG51bGwgaW5kaWNhdGlvbiBpcyBhbHJlYWR5IG9uIHRoZSBmbGQuXHJcblxyXG4gICAgZWxzZVxyXG4gICAgICByZXNWYWwuSXNOdWxsID0gZmxkLmlzTnVsbCgpO1xyXG5cclxuICAgIGlmIChpc19wcmV2aW91cylcclxuICAgIC8vIHJlc2V0IHRoZSBmbGFnLlxyXG4gICAgICAoPFRhc2tCYXNlPmZsZC5nZXRUYXNrKCkpLnNldEV2YWxPbGRWYWx1ZXMoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwxXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfdmFybW9kKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgaXRtOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBmbGQ6IEZpZWxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soaXRtKTtcclxuXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcblxyXG4gICAgLy8gUUNSIDc1MjI3MCBpZiB0aGUgdGhlIGFyZ3VtZW50cyBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWxpZCBmaWVsZCByZXR1cm4gZmFsc2VcclxuICAgIGlmIChmbGQgIT09IG51bGwpIHtcclxuICAgICAgbGV0IGlkeDogbnVtYmVyID0gZmxkLmdldElkKCk7XHJcbiAgICAgIGxldCBkdjogRGF0YVZpZXcgPSA8RGF0YVZpZXc+KDxUYXNrQmFzZT5mbGQuZ2V0VGFzaygpKS5EYXRhVmlldztcclxuICAgICAgbGV0IHJlYzogUmVjb3JkID0gZHYuZ2V0Q3VyclJlYygpO1xyXG4gICAgICByZXNWYWwuQm9vbFZhbCA9ICFyZWMuZmxkVmFsc0VxdWFsKGR2LmdldE9yaWdpbmFsUmVjKCksIGlkeCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfdmFyaW5wKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBpOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGV4cGtlcm5fcGFyZW50OiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoZXhwa2Vybl9wYXJlbnQgPj0gMCAmJiBleHBrZXJuX3BhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IGV4cGtlcm5fcGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soZXhwa2Vybl9wYXJlbnQpO1xyXG4gICAgICBpZiAodHNrICE9PSBudWxsKVxyXG4gICAgICAgIGkgPSB0c2suY3RsX2l0bV80X3BhcmVudF92ZWUoMCwgdHNrLmdldEN1cnJGaWVsZElkeCgpICsgMSk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGksIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfdmFybmFtZShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaXRtOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBmbGQ6IEZpZWxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soaXRtKTtcclxuICAgIGxldCBidWZmZXI6IHN0cmluZyA9IChmbGQgIT09IG51bGwpID8gZmxkLmdldE5hbWUoKSA6ICcnO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IGJ1ZmZlcjtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfVmFyRGlzcGxheU5hbWUocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcblxyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgIT09IG51bGwpIHtcclxuICAgICAgbGV0IGl0bTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgIGxldCBmbGQ6IEZpZWxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soaXRtKTtcclxuXHJcbiAgICAgIGlmIChmbGQgIT09IG51bGwpXHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IGZsZC5WYXJEaXNwbGF5TmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV0dXJuIHRoZSBjb250cm9sIElEIG9mIHRoZSBjb250cm9sIHRvIHdoaWNoIGl0ZW0gKERhdGEgcHJvcGVydHkgbGl0ZXJhbCkgaXMgYXR0YWNoZWQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbDFcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9WYXJDb250cm9sSUQocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHJldDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgaXRtOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuXHJcbiAgICAgIC8vIGlmIGl0bSBpcyB0cmlnZ2VyIHRhc2ssIGNhbGN1bGF0ZSB0aGUgaXRlbSBmcm9tIGZpZWxkLlxyXG4gICAgICBpZiAoaXRtID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSylcclxuICAgICAgICBpdG0gPSAoKDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpLmN0bF9pdG1fNF9wYXJlbnRfdmVlKDAsICg8VGFza0Jhc2U+IHRoaXMuRXhwVGFzay5HZXRDb250ZXh0VGFzaygpKS5nZXRDdXJyRmllbGRJZHgoKSArIDEpKTtcclxuXHJcbiAgICAgIHJldCA9ICg8VGFza0Jhc2U+IHRoaXMuRXhwVGFzay5HZXRDb250ZXh0VGFzaygpKS5HZXRDb250cm9sSURGcm9tVmFySXRlbShpdG0gLSAxKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcocmV0KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV0dXJuIHRoZSBjaG9pY2UgY29udHJvbCdzIGl0ZW1zIGxpc3QgYWNjb3JkaW5nIHRvIGNvbnRyb2wgSUQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbDFcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9Db250cm9sSXRlbXNMaXN0KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG5cclxuICAgIGlmICh2YWwxLk1nTnVtVmFsICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBjb250cm9sSUQ6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICBsZXQgcGFyZW50OiBudW1iZXIgPSAwO1xyXG5cclxuICAgICAgbGV0IHJlZlBhcmVudDogUmVmUGFyYW08bnVtYmVyPiA9IG5ldyBSZWZQYXJhbShwYXJlbnQpO1xyXG4gICAgICBsZXQgbWdDb250cm9sOiBNZ0NvbnRyb2wgPSAoKDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpLkdldENvbnRyb2xGcm9tQ29udHJvbElEKGNvbnRyb2xJRCAtIDEsIHJlZlBhcmVudCkpO1xyXG4gICAgICBwYXJlbnQgPSByZWZQYXJlbnQudmFsdWU7XHJcblxyXG4gICAgICBpZiAobWdDb250cm9sICE9PSBudWxsICYmIG1nQ29udHJvbC5pc0Nob2ljZUNvbnRyb2woKSlcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gYXdhaXQgbWdDb250cm9sLmdldEZvcm0oKS5HZXRDaG9pY2VDb250cm9sSXRlbUxpc3QobWdDb250cm9sKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV0dXJuIHRoZSBjaG9pY2UgY29udHJvbCdzIGRpc3BsYXkgbGlzdCBhY2NvcmRpbmcgdG8gY29udHJvbCBJRC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsMVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX0NvbnRyb2xEaXNwbGF5TGlzdChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgY29udHJvbElEOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgICAgbGV0IHBhcmVudDogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgIGxldCByZWZQYXJlbnQ6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW0ocGFyZW50KTtcclxuICAgICAgbGV0IG1nQ29udHJvbDogTWdDb250cm9sID0gKDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpLkdldENvbnRyb2xGcm9tQ29udHJvbElEKGNvbnRyb2xJRCAtIDEsIHJlZlBhcmVudCk7XHJcbiAgICAgIHBhcmVudCA9IHJlZlBhcmVudC52YWx1ZTtcclxuXHJcbiAgICAgIGlmIChtZ0NvbnRyb2wgIT09IG51bGwgJiYgbWdDb250cm9sLmlzQ2hvaWNlQ29udHJvbCgpKVxyXG4gICAgICAgIHJlc1ZhbC5TdHJWYWwgPSBhd2FpdCBtZ0NvbnRyb2wuZ2V0Rm9ybSgpLkdldENob2ljZUNvbnRyb2xEaXNwbGF5TGlzdChtZ0NvbnRyb2wpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3ZpZXdtb2QocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGFyZW50OiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgocGFyZW50ID49IDAgJiYgcGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgcGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2socGFyZW50KTtcclxuICAgICAgaWYgKCF0c2suaXNNYWluUHJvZygpKSB7XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSAoKDxEYXRhVmlldz50c2suRGF0YVZpZXcpLmdldEN1cnJSZWMoKSkuTW9kaWZpZWQ7XHJcbiAgICAgICAgLy8gcmVjb3JkIG1pZ2h0IGJlIG1vZGlmaWVkIGV2ZW4gaWYgdGhlIGZsYWcgaXMgZmFsc2UgKGxpa2Ugd2hlbiB0aGVyZSBpcyBhbiB1cGRhdGUgd2l0aCBmb3JjZSB1cCA9IG5vXHJcbiAgICAgICAgLy8gaW4gdGhlIHNlcnZlciB0aGUgY2hlY2sgaXMgY29tcGFyaW5nIGFsbCB0aGUgZmllbGRzIGluIHRoZSB2aWV3LlxyXG4gICAgICAgIC8vIEhlcmUsIGlmIHRoZSBtb2RpZmllZCBpcyBmYWxzZSwgd2Ugd2lsbCBjb21wYXJlIHRoZSBjdXJyZW50IHJlYyB0byB0aGUgb3JpZ2luYWwgY3VycmVudCByZWMuXHJcbiAgICAgICAgaWYgKCFyZXNWYWwuQm9vbFZhbCkge1xyXG4gICAgICAgICAgbGV0IGN1cnJSZWM6IFJlY29yZCA9ICg8RGF0YVZpZXc+dHNrLkRhdGFWaWV3KS5nZXRDdXJyUmVjKCk7XHJcbiAgICAgICAgICBsZXQgb3JpZ2luYWxSZWM6IFJlY29yZCA9ICg8RGF0YVZpZXc+dHNrLkRhdGFWaWV3KS5nZXRPcmlnaW5hbFJlYygpO1xyXG4gICAgICAgICAgLy8gY29tcGFyZSBmaWVsZHMgYmV0d2VlbiBjdXJyZW50IHJlY29yZCBhbmQgb3JpZ2luYWwgcmVjb3JkLiBjb21wYXJlIG9ubHkgZmllbGRzIHRoYXQgYXJlIHBhcnQgb2YgZGF0YSB2aWV3LlxyXG4gICAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSAhY3VyclJlYy5pc1NhbWVSZWNEYXRhKG9yaWdpbmFsUmVjLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlXHJcbiAgICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2xldmVsKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBvdXRzdHI6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHBhcmVudDogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKHBhcmVudCA+PSAwICYmIHBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IHBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKHBhcmVudCk7XHJcbiAgICAgIG91dHN0ciA9IHRzay5nZXRCcmtMZXZlbCgpO1xyXG5cclxuICAgICAgLypcclxuICAgICAgICogQ2hlY2sgdGhlIGxldmVsIG9mIHRoZSBnZW5lcmF0aW9uIHRhc2suXHJcbiAgICAgICAqIEEuIElmIGl0IGlzIG5vdCBSTSwgcmV0dXJuIHRoZSBoYW5kbGVyIHRleHQuXHJcbiAgICAgICAqIEIuIElmIGl0IGlzIFJNLCB0aGVuIHdlIGhhdmUgMyBkaWZmZXJlbnQgc2l0dWF0aW9uczpcclxuICAgICAgICogMS4gSWYgdGhlIGdlbmVyYXRpb24gdGFzayBpcyBNYWluIFByb2dyYW0sIHJldHVybiBcIk1QXCIuXHJcbiAgICAgICAqIDIuIElmIHRoZSBnZW5lcmF0aW9uIHRhc2sgaXMgYSB0YXNrIHdob3NlIGltbWVkaWF0ZSBjYWxsZWQgdGFzayAoaW4gdGhlIHJ1bnRpbWUgdGFzayB0cmVlKSBpcyBhIFN1YkZvcm0sIHJldHVybiBcIlNVQkZPUk1cIi5cclxuICAgICAgICogMy4gSW4gYW55IG90aGVyIGNhc2UsIHJldHVybiB0aGUgaGFuZGxlciB0ZXh0LlxyXG4gICAgICAgKi9cclxuICAgICAgaWYgKHBhcmVudCAhPT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0sgJiYgdHNrICE9PSB0aGlzLkV4cFRhc2spIHtcclxuICAgICAgICBpZiAob3V0c3RyLnRvVXBwZXJDYXNlKCkgPT09IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9SRUNfTUFJTi50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBpZiAodHNrLmlzTWFpblByb2coKSkge1xyXG4gICAgICAgICAgICBvdXRzdHIgPSBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfTUFJTl9QUk9HO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHRza1RyZWU6IFRhc2tCYXNlW10gPSBuZXcgQXJyYXk8VGFza0Jhc2U+KCgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBfYWk6IG51bWJlciA9IDA7IF9haSA8IHRza1RyZWUubGVuZ3RoOyArK19haSlcclxuICAgICAgICAgICAgICB0c2tUcmVlW19haV0gPSBudWxsO1xyXG4gICAgICAgICAgICAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykucGF0aFRvUm9vdCh0c2tUcmVlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocGFyZW50ID4gMCAmJiB0c2tUcmVlW3BhcmVudCAtIDFdLklzU3ViRm9ybSlcclxuICAgICAgICAgICAgICBvdXRzdHIgPSBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfU1VCRk9STTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBvdXRzdHI7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gZ2V0IHRoZSB0YXNrJ3MgY291bnRlciAoYnkgdGFzayBnZW5lcmF0aW9uKS5cclxuICBwcml2YXRlIGV2YWxfb3BfY291bnRlcihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHBhcmVudDogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKHBhcmVudCA+PSAwICYmIHBhcmVudCA8ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSB8fCBwYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2socGFyZW50KTtcclxuICAgICAgbnVtID0gPG51bWJlcj4oKHRhc2sgPT09IG51bGwpID8gMCA6IHRhc2suZ2V0Q291bnRlcigpKTtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyg8bnVtYmVyPm51bSk7XHJcbiAgfVxyXG5cclxuICBldmFsX29wX2VtcHR5RGF0YXZpZXcocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHJldDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHBhcmVudDogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKHBhcmVudCA+PSAwICYmIHBhcmVudCA8ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSB8fCBwYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0c2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhwYXJlbnQpO1xyXG4gICAgICBpZiAodHNrICE9PSBudWxsICYmIHRzay5EYXRhVmlldy5pc0VtcHR5RGF0YXZpZXcoKSlcclxuICAgICAgICByZXQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IHJldDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsMVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX21haW5sZXZlbChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgb3V0c3RyOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGFyZW50OiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgocGFyZW50ID49IDAgJiYgcGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgcGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2socGFyZW50KTtcclxuICAgICAgb3V0c3RyID0gdHNrLmdldE1haW5MZXZlbCgpO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLlN0clZhbCA9IG91dHN0cjtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfbWFpbmRpc3BsYXkocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IG1haW5Ec3BJZHg6IG51bWJlciA9IDA7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwYXJlbnQ6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG5cclxuICAgIGlmICgocGFyZW50ID49IDAgJiYgcGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgcGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2socGFyZW50KTtcclxuICAgICAgbWFpbkRzcElkeCA9ICh0c2suZ2V0UHJvcChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NQUlOX0RJU1BMQVkpKS5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBtYWluRHNwSWR4LCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9Jc0ZpcnN0UmVjb3JkQ3ljbGUocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGlzRmlyc3RSZWNDeWNsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBhcmVudDogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKHBhcmVudCA+PSAwICYmIHBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IHBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKHBhcmVudCk7XHJcbiAgICAgIGlzRmlyc3RSZWNDeWNsZSA9IHRzay5pc0ZpcnN0UmVjb3JkQ3ljbGUoKTtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gaXNGaXJzdFJlY0N5Y2xlO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwxXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV4cF9pc19kZWZhdWx0KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgIGxldCBpdG06IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgLy8gaXRtIHN0YXJ0cyBmcm9tIEEtPjEgYnV0IHRoZSBhcnJheSBzdGFydHMgZnJvbSAwIC0+IGl0bS0xXHJcbiAgICBsZXQgZmxkOiBGaWVsZCA9ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuY3RsX2l0bV8yX3BhcmVudF92ZWUoaXRtIC0gMSkpO1xyXG4gICAgaWYgKGZsZCA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIC8vIFFDUiA5MjgzMDggLSBmb3IgdmVjdG9ycyBhcyB2ZWN0b3JzICggbm90IHBlciBjZWxsIG9mIHRoZSB2ZWN0b3IpIHRoZSBCZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBibG9ic1xyXG4gICAgLy8gdGhhdCBpcyBudWxsIGlzIGFsbG93ZWQgYW5kIG51bGwgaXMgZGVmYXVsdFxyXG4gICAgaWYgKGZsZC5pc051bGwoKSAmJiAoZmxkLmlzTnVsbERlZmF1bHQoKSB8fCBmbGQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSlcclxuICAgICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG5cclxuICAgIGxldCB2YWw6IHN0cmluZyA9IGZsZC5nZXRWYWx1ZShmYWxzZSk7XHJcbiAgICBsZXQgZGVmVmFsOiBzdHJpbmcgPSBmbGQuZ2V0RGVmYXVsdFZhbHVlKCk7XHJcbiAgICBsZXQgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSA9IGZsZC5nZXRUeXBlKCk7XHJcblxyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBFeHByZXNzaW9uRXZhbHVhdG9yLm1nVmFsc0VxdWFsKHZhbCwgZmxkLmlzTnVsbCgpLCB0eXBlLCBkZWZWYWwsIGZsZC5pc051bGxEZWZhdWx0KCksIHR5cGUpO1xyXG4gICAgLy8gdmFsdWUgbm90IGVxdWl2YWxlbnQgdG8gZGVmYXVsdCB2YWx1ZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIEZBTFNFXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybiB0cnVlIGlmIHVzZXIgaXMgbG9nZ2VkbiBpblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfSXNMb2dnZWRJbihyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IFVzZXJEZXRhaWxzLkluc3RhbmNlLmdldElzTG9nZ2VkSW4oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9hcHBuYW1lKHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gU2VydmVyQ29uZmlnLkluc3RhbmNlLmdldEFwcE5hbWUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3Byb2cocmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAoKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5xdWVyeVRhc2tQYXRoKCkpKS5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfdGhpcyhyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHRyaWdnZXJUYXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT50aGlzLkV4cFRhc2s7XHJcbiAgICBsZXQgUmVzdWx0OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIC8vIEVYUEtFUk5fcGFyZW50ID0gRVhQS0VSTl92ZWUgPSAwO1xyXG5cclxuICAgIGlmICh0cmlnZ2VyVGFzayAhPT0gbnVsbCkge1xyXG4gICAgICAvLyBFWFBLRVJOX3BhcmVudCA9IFRSSUdHRVJfVEFTSztcclxuICAgICAgUmVzdWx0ID0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0s7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIFJlc3VsdCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIlBhcmVudFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJNb2Rlc1wiPk1PREUgbGl0ZXJhbCBnaXZlbiBhcyBtb2RlIHBhcmFtZXRlcjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3N0YXQocmVzVmFsOiBFeHBWYWwsIFBhcmVudDogRXhwVmFsLCBNb2RlczogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgUmV0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgaVBhcmVudDogbnVtYmVyID0gUGFyZW50Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoaVBhcmVudCA+PSAwICYmIGlQYXJlbnQgPCAgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgaVBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IFRzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKGlQYXJlbnQpO1xyXG4gICAgICBpZiAoVHNrICE9PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IHRza01vZGU6IHN0cmluZyA9IChUc2suZ2V0TW9kZSgpKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBNb2Rlcy5TdHJWYWwubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgICAgIGxldCBtb2RlOiBzdHJpbmcgPSBNb2Rlcy5TdHJWYWwuY2hhckF0KGkpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICBsZXQgY29kZTogc3RyaW5nID0gdGhpcy5jc3RfY29kZV90cmFuc19idWYoJ0knLCAnTUNERVBMUktTT05CJywgbW9kZSwgTXNnSW50ZXJmYWNlLkVYUFRBQl9UU0tfTU9ERV9SVCk7XHJcblxyXG4gICAgICAgICAgLy8gY29kZSBub3QgZm91bmQsIGl0IG1pZ2h0IGJlIEVuZ2xpc2ggKHNhbWUgYXMgaW4gb25saW5lKS5cclxuICAgICAgICAgIGlmIChjb2RlID09PSAnXFwwJykge1xyXG4gICAgICAgICAgICBjb2RlID0gbW9kZS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICBpZiAoY29kZSA9PT0gJ1EnKVxyXG4gICAgICAgICAgICAgIGNvZGUgPSAnRSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29kZSA9PT0gdHNrTW9kZSkge1xyXG4gICAgICAgICAgICBSZXQgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBSZXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybnMgc3ViZm9ybSBleGVjdXRpb24gbW9kZSBmb3IgdGhlIHRhc2sgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBnZW5lcmF0aW9uXHJcbiAgLy8vIC0xIMKBRVRoZSB0YXNrIGlzIG5vdCBleGVjdXRlZCBhcyBhIHN1YmZvcm1cclxuICAvLy8gIDAgwoFFVGhlIHRhc2sgaXMgZXhlY3V0ZWQgYnkgc2V0dGluZyB0aGUgZm9jdXMgb24gaXRcclxuICAvLy8gIDEgwoFFVGhlIHN1YnRhc2sgaXMgZXhlY3V0ZWQgZm9yIHRoZSBmaXJzdCB0aW1lXHJcbiAgLy8vICAyIMKBRVRoZSB0YXNrIGlzIGV4ZWN1dGVkIGJlY2F1c2UgdGhlIEF1dG9tYXRpYyBSZWZyZXNoIHByb3BlcnR5IG9yIHRoZSBTdWJmb3JtIFJlZnJlc2ggZXZlbnQgaGFzIGJlZW5cclxuICAvLy8gICAgICB0cmlnZ2VyZWQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImdlbmVyYXRpb25cIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9zdWJmb3JtRXhlY01vZGUocmVzVmFsOiBFeHBWYWwsIGdlbmVyYXRpb246IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHN1YmZvcm1FeGVjTW9kZTogVGFza19TdWJmb3JtRXhlY01vZGVFbnVtID0gVGFza19TdWJmb3JtRXhlY01vZGVFbnVtLk5PX1NVQkZPUk07XHJcbiAgICBsZXQgaVBhcmVudDogbnVtYmVyID0gZ2VuZXJhdGlvbi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGlQYXJlbnQgPj0gMCAmJiBpUGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgaVBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhpUGFyZW50KTtcclxuICAgICAgaWYgKHRhc2sgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAodGFzay5Jc1N1YkZvcm0pXHJcbiAgICAgICAgICBzdWJmb3JtRXhlY01vZGUgPSB0YXNrLlN1YmZvcm1FeGVjTW9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCA8bnVtYmVyPnN1YmZvcm1FeGVjTW9kZSwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF92YXJzZXQocmVzVmFsOiBFeHBWYWwsIHZhbDogRXhwVmFsLCBudW06IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gaW5pdCByZXR1cm5lZCB2YWx1ZVxyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcblxyXG4gICAgaWYgKG51bS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICAvLyB0aGUgdmFyc2V0IGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIHRydWUuXHJcbiAgICAgIC8vIFNldE5VTEwocmVzVmFsLFNUT1JBR0VfQVRUUl9CT09MRUFOKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpdG06IG51bWJlciA9IG51bS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgbGV0IGZsZDogRmllbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayhpdG0pO1xyXG5cclxuICAgIGlmIChmbGQgPT09IG51bGwpIHtcclxuICAgICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suU3RvcmFnZUZsZEFscGhhVW5pY29kZU9yQmxvYihmbGQuZ2V0VHlwZSgpLCB2YWwuQXR0cikpXHJcbiAgICAgIHRoaXMuQ29udmVydEV4cFZhbCh2YWwsIGZsZC5nZXRUeXBlKCkpO1xyXG5cclxuICAgIGxldCBidWZwdHI6IHN0cmluZztcclxuICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUaGVTYW1lVHlwZShmbGQuZ2V0VHlwZSgpLCB2YWwuQXR0cikpIHtcclxuICAgICAgc3dpdGNoIChmbGQuZ2V0VHlwZSgpKSB7XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgICAgYnVmcHRyID0gdmFsLlN0clZhbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICAgIGJ1ZnB0ciA9IHZhbC5NZ051bVZhbC50b1hNTHJlY29yZCgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgICAgYnVmcHRyID0gdmFsLkJvb2xWYWwgPyAnMScgOiAnMCc7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgICAgICBidWZwdHIgPSB2YWwuVG9NZ1ZhbCgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICAgIGJ1ZnB0ciA9IHZhbC5Ub01nVmFsKCk7XHJcblxyXG4gICAgICAgICAgLy8gUUNSIDQ0ODY2ODJcclxuICAgICAgICAgIGlmICghdmFsLklzTnVsbCkge1xyXG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgdmFsaWQgdmVjdG9yIGluIHRoZSBibG9iXHJcbiAgICAgICAgICAgIGlmICh2YWwuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKVxyXG4gICAgICAgICAgICAgIGlmICghVmVjdG9yVHlwZS52YWxpZGF0ZUJsb2JDb250ZW50cyh2YWwuU3RyVmFsKSlcclxuICAgICAgICAgICAgICAgIGJ1ZnB0ciA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoYnVmcHRyICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgYnVmcHRyID0gT3BlcmF0aW9uLm9wZXJVcGRhdGVWZWN0b3JzKGZsZCwgYnVmcHRyKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChidWZwdHIgIT0gbnVsbClcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZmFsbHMgdGhyb3VnaFxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAvLyBjYW4ndCBjb21lIHRvIHRoaXMgcG9pbnRcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBpdCdzIG5vdCB0aGUgc2FtZSB0eXBlIG9mIHRoZSBmaWVsZCBhbmQgdmFsdWUgOlxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIGV2ZXJ5IGZpZWxkIGhhcyB0byBnZXQgaXQncyBkZWZhdWx0IHZhbHVlXHJcbiAgICAgIGJ1ZnB0ciA9IGZsZC5nZXREZWZhdWx0VmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsLklzTnVsbCkge1xyXG4gICAgICAvLyBnZXQgdGhlIG51bGwgdmFsdWUgb3IgdGhlIG1hZ2ljIGRlZmF1bHQgdmFsdWVcclxuICAgICAgYnVmcHRyID0gZmxkLmdldE51bGxWYWx1ZSgpO1xyXG4gICAgICBpZiAoYnVmcHRyID09PSBudWxsKVxyXG4gICAgICAgIGZsZC5nZXRNYWdpY0RlZmF1bHRWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgLy8gUUNSIDk4NDU2MyB2YXIgc2V0IGluIGNyZWF0IG1vZGUgc291bGQgbm90IGNyZWF0IGEgbmV3IHJlY29yZFxyXG4gICAgLy8gIzc3NzcwMC4gVGhlIHJlY29yZCBzaG91bGQgYmUgbWFya2VkIGFzIHVwZGF0ZWQgaWYgdGhlIGZpZWxkJ3MgdGFzayBhbmQgdGhlIGV4cHJlc3Npb24gdGFzayBhcmUgZGlmZmVyZW50IG9yXHJcbiAgICAvLyB0aGUgZmllbGQncyB0YXNrIGlzIGluIFJlY29yZCBTdWZmaXguIFRoaXMgaXMgc2FtZSBhcyBPTCAocmVmZXIgUlQ6OlBvc3RWZWVVcGRhdGUgaW4gdmV3LmNwcCkuXHJcbiAgICBsZXQgc2V0UmVjb3JkVXBkYXRlZDogYm9vbGVhbiA9IGZsZC5nZXRUYXNrKCkgIT09IHRoaXMuRXhwVGFzayB8fCAoPFRhc2tCYXNlPmZsZC5nZXRUYXNrKCkpLmdldEJya0xldmVsKCkgPT09IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9SRUNfU1VGRklYO1xyXG5cclxuICAgIGF3YWl0IGZsZC5zZXRWYWx1ZUFuZFN0YXJ0UmVjb21wdXRlKGJ1ZnB0ciwgdmFsLklzTnVsbCwgdHJ1ZSwgc2V0UmVjb3JkVXBkYXRlZCwgZmFsc2UpO1xyXG4gICAgYXdhaXQgZmxkLnVwZGF0ZURpc3BsYXkoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic2hvd01lc3NhZ2VcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImdlbmVyYXRpb25cIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9yb2xsYmFjayhyZXNWYWw6IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gKDxUYXNrQmFzZT50aGlzLkV4cFRhc2suR2V0Q29udGV4dFRhc2soKSkgfHwgKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spO1xyXG5cclxuICAgIC8vIGV4ZWN1dGUgcm9sbGJhY2sgY29tbWFuZFxyXG4gICAgYXdhaXQgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuaGFuZGxlSW50ZXJuYWxFdmVudFdpdGhUYXNrKHRhc2ssIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9ST0xMQkFDSyk7XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7IC8vIGluIHRoZSBzZXJ2ZXIgd2UgcmV0dXJuIGFsd2VzIHRydWVcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNvdXJjZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWFza09yZ1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfbGlrZShzb3VyY2U6IEV4cFZhbCwgbWFza09yZzogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBqOiBudW1iZXI7XHJcbiAgICBsZXQgU291cmNlOiBzdHJpbmcgPSBzb3VyY2UuU3RyVmFsO1xyXG4gICAgbGV0IE1hc2tPcmc6IHN0cmluZyA9IG1hc2tPcmcuU3RyVmFsO1xyXG4gICAgbGV0IGFzdGVyaXNrQ250OiBudW1iZXIgPSAwOyAvLyBjb3VudGVyIG9mICcqJyBpbiB0aGUgc291cmNlIHN0cmluZ1xyXG4gICAgbGV0IFNhbWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgbGV0IGVzY19jaDogYm9vbGVhbjtcclxuICAgIGlmIChTb3VyY2UgPT09IG51bGwgfHwgTWFza09yZyA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IFNvdXJjZUxlbjogbnVtYmVyID0gU291cmNlLmxlbmd0aDtcclxuICAgIGxldCBNYXNrTGVuOiBudW1iZXIgPSBNYXNrT3JnLmxlbmd0aDtcclxuICAgIGxldCBNYXNrID0gbmV3IEFycmF5KE1hc2tMZW4pO1xyXG4gICAgbGV0IGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWlsZGVyKE1hc2tMZW4pO1xyXG5cclxuICAgIC8vIENoYW5nZSBpbiB0aGUgbWFzayAnXFxcXCcgLT4gJ1xcJywgJ1xcKicgLT4gJyonLCAnXFw/JyAtPiAnPycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqJyAtPiBBU1RFUklTS19DSFIsICc/JyAtPiBRVUVTVElPTl9DSFJcclxuICAgIGZvciAoaSA9IDAsIGogPSAwLCBlc2NfY2ggPSBmYWxzZTsgaSA8IE1hc2tMZW47IGkrKykge1xyXG4gICAgICBsZXQgY3VyckNocjogc3RyaW5nID0gTWFza09yZ1tpXTtcclxuICAgICAgc3dpdGNoIChjdXJyQ2hyKSB7XHJcbiAgICAgICAgY2FzZSAnXFxcXCc6XHJcbiAgICAgICAgICBpZiAoZXNjX2NoKVxyXG4gICAgICAgICAgICBNYXNrW2orK10gPSBjdXJyQ2hyO1xyXG4gICAgICAgICAgZXNjX2NoID0gIWVzY19jaDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICcqJzpcclxuICAgICAgICAgIGlmIChlc2NfY2gpXHJcbiAgICAgICAgICAgIE1hc2tbaisrXSA9IGN1cnJDaHI7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTWFza1tqKytdID0gRXhwcmVzc2lvbkV2YWx1YXRvci5BU1RFUklTS19DSFI7XHJcbiAgICAgICAgICAgIGFzdGVyaXNrQ250Kys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlc2NfY2ggPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICc/JzpcclxuICAgICAgICAgIE1hc2tbaisrXSA9IGVzY19jaCA/IGN1cnJDaHIgOiBFeHByZXNzaW9uRXZhbHVhdG9yLlFVRVNUSU9OX0NIUjtcclxuICAgICAgICAgIGVzY19jaCA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBNYXNrW2orK10gPSBjdXJyQ2hyO1xyXG4gICAgICAgICAgZXNjX2NoID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgTWFza0xlbiA9IGo7XHJcbiAgICBNYXNrT3JnID0gRXhwcmVzc2lvbkV2YWx1YXRvci5hcnJUb1N0cihNYXNrLCAwLCBNYXNrLmxlbmd0aCk7XHJcbiAgICAvLyAxLiBGaW5kIHRoZSBsYXN0ICcqJ1xyXG4gICAgbGV0IGFzdF9sYXN0X3B0cjogbnVtYmVyID0gTWFza09yZy5sYXN0SW5kZXhPZihFeHByZXNzaW9uRXZhbHVhdG9yLkFTVEVSSVNLX0NIUik7XHJcblxyXG4gICAgaWYgKGFzdF9sYXN0X3B0ciA9PT0gLTEpXHJcbiAgICAvLyAyLiBJbiB0aGUgY2FzZTogdGhlcmUgaXMgbm90IGFueSAnKidcclxuICAgICAgU2FtZSA9IEV4cHJlc3Npb25FdmFsdWF0b3Iub3BfbGlrZV9jbXAoU291cmNlLCBNYXNrT3JnKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyAyLiBJbiB0aGUgY2FzZTogdGhlcmUgYXJlIG9uZSBvciBtb3JlICcqJ1xyXG4gICAgICAvLyAyLjEgQ29tcGFyZSB0aGUgcGllY2Ugb2YgdGhlIHN0cmluZyBiZWZvcmUgdGhlIGZpcnN0ICcqJ1xyXG4gICAgICBmb3IgKGkgPSAwOyBNYXNrW2ldICE9PSBFeHByZXNzaW9uRXZhbHVhdG9yLkFTVEVSSVNLX0NIUiAmJiBTYW1lOyBpKyssIE1hc2tMZW4tLSwgU291cmNlTGVuLS0pIHtcclxuICAgICAgICBpZiAoU291cmNlTGVuID09PSAwKVxyXG4gICAgICAgICAgU2FtZSA9IGZhbHNlO1xyXG4gICAgICAgIGVsc2UgU2FtZSA9IChNYXNrW2ldID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlFVRVNUSU9OX0NIUiA/IHRydWUgOiBNYXNrW2ldID09PSBTb3VyY2VbaV0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGkgLSBpcyBpbmRleCBvZiBmaXJzdCAnKicgaW4gdGhlIG1hc2tcclxuICAgICAgU291cmNlID0gU291cmNlLnN1YnN0cihpKTtcclxuICAgICAgTWFzayA9IEV4cHJlc3Npb25FdmFsdWF0b3IuY3V0QXJyYXkoTWFzaywgaSk7XHJcblxyXG4gICAgICAvLyAyLjIgQ29tcGFyZSB0aGUgYWxsIHBpZWNlcyBiZXR3ZWVuIHRoZSAnKicgYW5kICcqJ1xyXG4gICAgICB3aGlsZSAoU2FtZSAmJiBhc3Rlcmlza0NudCAhPT0gMSkge1xyXG4gICAgICAgIGxldCBhc3RfcHRyOiBudW1iZXI7XHJcbiAgICAgICAgbGV0IHRtcF9sZW46IG51bWJlcjtcclxuICAgICAgICBmb3IgKGFzdF9wdHIgPSAxLCB0bXBfbGVuID0gMDsgYXN0X3B0ciArIGkgIT09IGFzdF9sYXN0X3B0cjsgYXN0X3B0cisrICwgdG1wX2xlbisrKVxyXG4gICAgICAgICAgaWYgKE1hc2tbYXN0X3B0cl0gPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuQVNURVJJU0tfQ0hSKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBhc3Rlcmlza0NudC0tO1xyXG4gICAgICAgIFNvdXJjZUxlbiA9IFNvdXJjZS5sZW5ndGg7XHJcbiAgICAgICAgLy8gYXN0X3B0ciAtIGluZGV4IG9mIG5leHQgJyonIChub3QgZmlyc3QgYW5kIG5vdCBsYXN0KVxyXG5cclxuICAgICAgICBpZiAodG1wX2xlbiAhPT0gMCkge1xyXG4gICAgICAgICAgLy8gbmV4dCBpbmRleCBvZiAnKicgZm91bmRcclxuICAgICAgICAgIGlmIChTb3VyY2VMZW4gPiAwKVxyXG4gICAgICAgICAgLy8gdGhlcmUgaXMgc3RpbGwgbWVtYmVycyBpbiBzb3VyY2VcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyLlJlbW92ZSgwLCBidWZmZXIuTGVuZ3RoKTtcclxuICAgICAgICAgICAgYnVmZmVyLkFwcGVuZChTb3VyY2UpO1xyXG4gICAgICAgICAgICBTYW1lID0gRXhwcmVzc2lvbkV2YWx1YXRvci5vcF9saWtlX21hcChidWZmZXIsIEV4cHJlc3Npb25FdmFsdWF0b3IuYXJyVG9TdHIoTWFzaywgMSwgdG1wX2xlbiArIDEpLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIFNvdXJjZSA9IGJ1ZmZlci5Ub1N0cmluZygpO1xyXG4gICAgICAgICAgfSBlbHNlIFNhbWUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaSArPSBhc3RfcHRyOyAvLyBtb3ZlICdwb2ludGVyJyB0byB0aGUgbmV4dCBwaWVjZSBvZiBzdHJpbmcgKGJldHdlZW4gMiBhc3Rlcmlza3MpXHJcbiAgICAgICAgTWFzayA9IEV4cHJlc3Npb25FdmFsdWF0b3IuY3V0QXJyYXkoTWFzaywgYXN0X3B0cik7XHJcbiAgICAgIH0gLy8gZW5kIG9mIHdoaWxlXHJcblxyXG4gICAgICBpZiAoTWFza1swXSA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5BU1RFUklTS19DSFIpXHJcbiAgICAgIC8vIGRlbGV0ZSBsYXN0ICcqJ1xyXG4gICAgICAgIE1hc2sgPSBFeHByZXNzaW9uRXZhbHVhdG9yLmN1dEFycmF5KE1hc2ssIDEpO1xyXG5cclxuICAgICAgLy8gMi4zIENvbXBhcmUgdGhlIHBpZWNlIG9mIHRoZSBzdHJpbmcgYWZ0ZXIgdGhlIGxhc3QgJyonXHJcbiAgICAgIGlmIChTYW1lICYmIChNYXNrLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgYnVmZmVyLlJlbW92ZSgwLCBidWZmZXIuTGVuZ3RoKTtcclxuICAgICAgICBidWZmZXIuQXBwZW5kKFNvdXJjZSk7XHJcbiAgICAgICAgU2FtZSA9IEV4cHJlc3Npb25FdmFsdWF0b3Iub3BfbGlrZV9tYXAoYnVmZmVyLCBFeHByZXNzaW9uRXZhbHVhdG9yLmFyclRvU3RyKE1hc2spLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IFNhbWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY3V0IHNvdXJjZSBhcnJheSBmcm9tIHNwZWNpYWwgbWVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNvdXJjZVwiPmFycmF5LCB0byBjdXQgaXQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZnJvbVwiPnRvIGN1dCBhbGwgbWVtYmVyIGJlZm9yZSBpdCBpbiBhcnJheTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBjdXR0ZWQgYXJyYXk8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgY3V0QXJyYXkoc291cmNlOiBzdHJpbmdbXSwgZnJvbTogbnVtYmVyKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGxlbmd0aDogbnVtYmVyID0gc291cmNlLmxlbmd0aCAtIGZyb207XHJcbiAgICBsZXQgYnVmZmVyOiBzdHJpbmdbXSA9IG5ldyBBcnJheTxzdHJpbmc+KGxlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBjdXJyOiBudW1iZXIgPSAwOyBjdXJyIDwgbGVuZ3RoOyBjdXJyKyspXHJcbiAgICAgIGJ1ZmZlcltjdXJyXSA9IHNvdXJjZVtmcm9tICsgY3Vycl07XHJcbiAgICByZXR1cm4gYnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGltcGxlbWVudHMgUmVwU3RyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfcmVwc3RyKHNvdXJjZTogRXhwVmFsLCBvcmdTdWJzdHI6IEV4cFZhbCwgbmV3U3Vic3RyOiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAoc291cmNlLlN0clZhbCA9PT0gbnVsbCB8fCBvcmdTdWJzdHIuU3RyVmFsID09PSBudWxsIHx8IG5ld1N1YnN0ci5TdHJWYWwgPT09IG51bGwgfHwgIVN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShzb3VyY2UuQXR0cikgfHwgIVN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShvcmdTdWJzdHIuQXR0cikgfHwgIVN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShuZXdTdWJzdHIuQXR0cikpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICByZXNWYWwuU3RyVmFsID0gTlN0cmluZy5SZXBsYWNlKHNvdXJjZS5TdHJWYWwsIG9yZ1N1YnN0ci5TdHJWYWwsIG5ld1N1YnN0ci5TdHJWYWwpO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBhcnJUb1N0cihhcnI6IHN0cmluZ1tdKTogc3RyaW5nO1xyXG4gIHByaXZhdGUgc3RhdGljIGFyclRvU3RyKGFycjogc3RyaW5nW10sIGZyb206IG51bWJlciwgdG86IG51bWJlcik6IHN0cmluZztcclxuICBwcml2YXRlIHN0YXRpYyBhcnJUb1N0cihhcnI6IGFueSwgZnJvbT86IG51bWJlciwgdG8/OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpXHJcbiAgICAgIHJldHVybiBFeHByZXNzaW9uRXZhbHVhdG9yLmFyclRvU3RyXzAoYXJyKTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIEV4cHJlc3Npb25FdmFsdWF0b3IuYXJyVG9TdHJfMShhcnIsIGZyb20sIHRvKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBNYWtlIHN0cmluZyBmcm9tIGFycmF5IG9mIGNoYXJhY3RlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYXJyXCI+dG8gbWFrZSBzdHJpbmcgZnJvbTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBzdHJpbmcgY29udGFpbnMgYWxsIGNoYXJhY3RlcnMgZnJvbSB0aGUgYXJyYXk8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgYXJyVG9TdHJfMChhcnI6IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBFeHByZXNzaW9uRXZhbHVhdG9yLmFyclRvU3RyKGFyciwgMCwgYXJyLmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTWFrZSBzdHJpbmcgZnJvbSBhcnJheSBvZiBjaGFyYWN0ZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFyclwiPnRvIG1ha2Ugc3RyaW5nIGZyb208L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZnJvbVwiPnRvIHN0YXJ0IGNvcHkgZnJvbSBhcnJheTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0b1wiPnRvIGZpbmlzaCBjb3B5IGZyb20gYXJyYXk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gc3RyaW5nIGNvbnRhaW5zIGFsbCBjaGFyYWN0ZXJzIGZyb20gdGhlIGFycmF5PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGFyclRvU3RyXzEoYXJyOiBzdHJpbmdbXSwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBidWZmZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcih0byAtIGZyb20pO1xyXG4gICAgZm9yICg7IGZyb20gPCB0bzsgZnJvbSsrKVxyXG4gICAgICBidWZmZXIuQXBwZW5kKGFycltmcm9tXSk7XHJcbiAgICByZXR1cm4gYnVmZmVyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29tcGlsZSAyIHN0cmluZ3MgLCByZWd1bGFyIGV4cHJlc3Npb24gZm9yICc/JyAtIGFueSBPTkUgY2hhcmFjdGVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIlNvdXJjZVwiPnRvIGJlIGNoZWNrZWQgYnkgcGF0dGVybjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJNYXNrT3JnXCI+Zm9yIFJlZ3VsYXIgZXhwcmVzc2lvbjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIHN0cmluZyBtdWNoZXMgZm9yIHRoZSBwYXR0ZXJuPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIG9wX2xpa2VfY21wKFNvdXJjZTogc3RyaW5nLCBNYXNrT3JnOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBTYW1lOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGxldCBNYXNrOiBzdHJpbmcgPSBNYXNrT3JnO1xyXG4gICAgbGV0IFNvdXJjZUxlbjogbnVtYmVyID0gU291cmNlLmxlbmd0aDtcclxuICAgIGxldCBNYXNrTGVuOiBudW1iZXIgPSBNYXNrT3JnLmxlbmd0aDtcclxuICAgIGlmIChTb3VyY2VMZW4gPCBNYXNrTGVuKVxyXG4gICAgICBTYW1lID0gZmFsc2U7XHJcblxyXG4gICAgZWxzZSBpZiAoU291cmNlTGVuID4gTWFza0xlbilcclxuICAgICAgTWFzayA9IE1hc2tPcmc7XHJcblxyXG4gICAgLy8gUUNSIDc0MzE4N1xyXG4gICAgd2hpbGUgKE1hc2subGVuZ3RoIDwgU291cmNlTGVuKVxyXG4gICAgICBNYXNrICs9ICcgJztcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgU291cmNlTGVuICYmIFNhbWU7IGkrKylcclxuICAgICAgU2FtZSA9IChNYXNrLmNoYXJBdChpKSA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5RVUVTVElPTl9DSFIgfHwgTWFzay5jaGFyQXQoaSkgPT09IFNvdXJjZS5jaGFyQXQoaSkpO1xyXG5cclxuICAgIHJldHVybiBTYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbXBpbGUgMiBzdHJpbmdzIGFuZCBtb3ZlIHNvdXJjZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJTb3VyY2VcIj5zb3VyY2UgZm9yIGNoZWNraW5nLCBDSEFOR0VEIGluIHByb2Nlc3Mgb2YgY2hlY2tpbmcsIG11c3QgYmUgY2hhbmdlZFxyXG4gIC8vLyAgIGluIGFjY29yZGFuY2UgdG8gY2hhbmdpbmcgYWZ0ZXIgdGhlIHVzaW5nIG9mIGZ1bmN0aW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIk1hc2tcIj5mb3IgUmVndWxhciBleHByZXNzaW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImVuZFwiPml0IHRoZSBsYXN0IGFzdGVyaXNrIGluIHRoZSBwYXR0ZXJuPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgc3RyaW5nIG11Y2hlcyBmb3IgdGhlIHBhdHRlcm48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgb3BfbGlrZV9tYXAoc291cmNlOiBTdHJpbmdCdWlsZGVyLCBtYXNrOiBzdHJpbmcsIGVuZDogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHNhbWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBwdHI6IHN0cmluZyA9IHNvdXJjZS5Ub1N0cmluZygpO1xyXG4gICAgbGV0IGk6IG51bWJlciA9IDA7XHJcblxyXG4gICAgLy8gbWFzayBpcyBsYXJnZXIgdGhlbiB0aGUgc291cmNlLiBUaGV5IGRvIG5vdCBtYXRjaC5cclxuICAgIGlmICghZW5kICYmIHNvdXJjZS5MZW5ndGggPCBtYXNrLmxlbmd0aClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCBqOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChqID0gMDsgaiA8IHNvdXJjZS5MZW5ndGggJiYgIXNhbWU7IGorKykge1xyXG4gICAgICBzYW1lID0gdHJ1ZTtcclxuICAgICAgaWYgKGVuZCkge1xyXG4gICAgICAgIHNhbWUgPSBFeHByZXNzaW9uRXZhbHVhdG9yLm9wX2xpa2VfY21wKHB0ci5zdWJzdHIoaiksIG1hc2spO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtYXNrLmxlbmd0aCAmJiBzYW1lOyBpKyspIHtcclxuICAgICAgICAgIC8vIElmIGFscmVhZHkgcmVhY2hlZCBhdCB0aGUgZW5kIG9mIHNvdXJjZSBzdHJpbmcsIHJldHVybiBmYWxzZS5cclxuICAgICAgICAgIGlmIChqICsgaSA9PT0gc291cmNlLkxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzYW1lID0gKG1hc2suY2hhckF0KGkpID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlFVRVNUSU9OX0NIUiB8fCBtYXNrLmNoYXJBdChpKSA9PT0gcHRyLmNoYXJBdChqICsgaSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHNhbWUpIHtcclxuICAgICAgc291cmNlLlJlbW92ZSgwLCBzb3VyY2UuTGVuZ3RoKTtcclxuICAgICAgc291cmNlLkFwcGVuZChwdHIuc3Vic3RyKGogKyBpIC0gMSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNhbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cF9nZXRfdmFyXzEodmFsMTogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGZsZE5hbWU6IHN0cmluZyA9IHZhbDEuU3RyVmFsO1xyXG4gICAgbGV0IGZsZDogRmllbGQgPSAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0RmllbGRCeU5hbWUoZmxkTmFtZSk7XHJcblxyXG4gICAgaWYgKGZsZCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OT05FKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIGZsZCBpcyBub3QgZXhwb3NlZCB0byBjbGllbnQgdGhlbiBhbGVydCB3aXRoIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBudWxsXHJcbiAgICBpZiAoZmxkLklzRXhwb3NlZFRvQ2xpZW50ID09PSBmYWxzZSkge1xyXG4gICAgICBsZXQgc2I6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgICBzYi5BcHBlbmQoTlN0cmluZy5Gb3JtYXQoJ0Vycm9yOiBWYXJpYWJsZSBcXCd7MH1cXCcgaXMgbm90IGV4cG9zZWQgdG8gY2xpZW50LicsIGZsZC5nZXRWYXJOYW1lKCkpKTtcclxuICAgICAgYWxlcnQoc2IuVG9TdHJpbmcoKSk7XHJcbiAgICAgIHJlc1ZhbC5Jc051bGwgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZsZFZhbHVlOiBzdHJpbmcgPSBmbGQuZ2V0VmFsdWUodHJ1ZSk7XHJcbiAgICByZXNWYWwuSXNOdWxsID0gZmxkLmlzTnVsbCgpO1xyXG4gICAgLy8gY3RybCA9IGZsZC5nZXRDb250cm9sKCk7XHJcbiAgICAvLyBwaWMgPSAoY3RybCA9PSBudWxsKSA/IG51bGwgOiBjdHJsLmdldFBJQygpO1xyXG4gICAgc3VwZXIuU2V0VmFsKHJlc1ZhbCwgZmxkLmdldFR5cGUoKSwgZmxkVmFsdWUsIG51bGwpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXhwX2dldF9pbmR4KHZhbDE6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBpbmRleDogbnVtYmVyID0gKDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpLmdldEluZGV4T2ZGaWVsZEJ5TmFtZSh2YWwxLlN0clZhbCk7XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGluZGV4LCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBuZWVkZWQgRmllbGQgZnJvbSB2YXIgZnVuY3Rpb25zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIml0bVwiPm51bWJlciBvZiBpdGVtXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBmaWVsZCAgZnJvbSB3aGljaCBhbiBldmVudCB3YXMgdHJpZ2dlcmVkIG9yIGZpZWxkIG9mIGl0bSBpbmRleCBvZiB0aGUgdmFyaWFibGVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGdldEZpZWxkKGl0bTogbnVtYmVyKTogRmllbGQge1xyXG4gICAgbGV0IGZsZDogRmllbGQgPSAoaXRtICE9PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykgPyAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmN0bF9pdG1fMl9wYXJlbnRfdmVlKGl0bSAtIDEpKSA6IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldEN1cnJGaWVsZCgpO1xyXG4gICAgcmV0dXJuIGZsZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIml0bVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIEdldEZpZWxkT2ZDb250ZXh0VGFzayhpdG06IG51bWJlcik6IEZpZWxkIHtcclxuICAgIHJldHVybiAoaXRtICE9PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykgPyAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2suR2V0Q29udGV4dFRhc2soKSkuY3RsX2l0bV8yX3BhcmVudF92ZWUoaXRtIC0gMSkpIDogQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0Q3VyckZpZWxkKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmVtb3ZlIHNwYWNlcyBmcm9tIHRoZSBlZGdlcyBvZiB0aGUgc3RyaW5nXHJcbiAgLy8vICAgdGhpcyBpcyBhIGhpZ2ggcGVyZm9ybWFuY2UgaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdCBjcmVhdGUgdW5uZWNlc3NhcnkgU3RyaW5nc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzXCI+dGhlIHNvdXJjZSBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZVwiPkxlZnQsIFJpZ2h0LCBCb3RoPC9wYXJhbT5cclxuICBwcml2YXRlIHN0YXRpYyB0cmltU3RyKHM6IHN0cmluZywgdHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBsOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGlmIChOU3RyaW5nLklzTnVsbE9yRW1wdHkocykpXHJcbiAgICAgIHJldHVybiBzO1xyXG5cclxuXHJcbiAgICBsZXQgcjogbnVtYmVyID0gcy5sZW5ndGggLSAxO1xyXG5cclxuICAgIC8vIHRyaW0gdGhlIGxlZnQgc2lkZVxyXG4gICAgaWYgKHR5cGUgIT09ICdSJykge1xyXG4gICAgICB3aGlsZSAobCA8IHMubGVuZ3RoICYmIHMuY2hhckF0KGwpID09PSAnICcpXHJcbiAgICAgICAgbCsrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRyaW0gdGhlIHJpZ2h0IHNpZGVcclxuICAgIGlmICh0eXBlICE9PSAnTCcpIHtcclxuICAgICAgd2hpbGUgKHIgPj0gbCAmJiBzLmNoYXJBdChyKSA9PT0gJyAnKVxyXG4gICAgICAgIHItLTtcclxuICAgIH1cclxuXHJcbiAgICByKys7IC8vIHBvaW50IHRoZSByaWdodCBib3VuZCBvZiB0aGUgc3RyaW5nIChleGNsdXNpdmUpXHJcbiAgICByZXR1cm4gciA+IGwgPyBzLnN1YnN0cihsLCAocikgLSAobCkpIDogJyc7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29tcGFyZSAyIG1hZ2ljIHZhbHVlcyBhbmQgcmV0dXJuIHRydWUgaWYgdGhleSBhcmUgZXF1YWxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYVZhbFwiPnRoZSBmaXJzdCB2YWx1ZSB0byBjb21wYXJlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFJc051bGxcIj50cnVlIGlmIHRoZSBmaXJzdCB2YWx1ZSBpcyBudWxsPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFEYXRhVHlwZVwiPnRoZSBkYXRhIHR5cGUgb2YgdGhlIGZpcnN0IHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJWYWxcIj50aGUgc2Vjb25kIHZhbHVlIHRvIGNvbXBhcmU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYklzTnVsbFwiPnRydWUgaWYgdGhlIHNlY29uZCB2YWx1ZSBpcyBudWxsPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJEYXRhVHlwZVwiPnRoZSBkYXRhIHR5cGUgb2YgdGhlIHNlY29uZCB2YWx1ZTwvcGFyYW0+XHJcbiAgc3RhdGljIG1nVmFsc0VxdWFsKGFWYWw6IHN0cmluZywgYUlzTnVsbDogYm9vbGVhbiwgYURhdGFUeXBlOiBTdG9yYWdlQXR0cmlidXRlLCBiVmFsOiBzdHJpbmcsIGJJc051bGw6IGJvb2xlYW4sIGJEYXRhVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGE6IEV4cFZhbCA9IG51bGw7XHJcbiAgICBsZXQgYjogRXhwVmFsID0gbnVsbDtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBvbmUgb2YgYVZhbCBvciBiVmFsIGhhcyBhIG51bGwgSmF2YSB2YWx1ZSBhbmQgaGFzIGEgYm9vbGVhbiBkYXRhIHR5cGVcclxuICAgIC8vIHRoZW4gZG9uJ3QgZW50ZXIgdGhlIFwiaWYgYmxvY2tcIiBiZWNhdXNlIHRoZSB2YWxfY21wX2FueSgpIG1ldGhvZCB3aWxsXHJcbiAgICAvLyB0cmVhdCB0aGF0IHZhbHVlIGFzIGZhbHNlLCBzbyBpdCBtaWdodCByZXR1cm4gYSBiYWQgcmVzdWx0XHJcbiAgICBpZiAoYUlzTnVsbCA9PT0gYklzTnVsbCAmJiAoYUlzTnVsbCB8fCAoYVZhbCAhPT0gbnVsbCAmJiBiVmFsICE9PSBudWxsKSkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhID0gbmV3IEV4cFZhbChhRGF0YVR5cGUsIGFJc051bGwsIGFWYWwpO1xyXG4gICAgICAgIGIgPSBuZXcgRXhwVmFsKGJEYXRhVHlwZSwgYklzTnVsbCwgYlZhbCk7XHJcbiAgICAgICAgcmVzdWx0ID0gKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkoYSwgYikgPT09IDApO1xyXG4gICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAvLyBRQ1IgOTgzMzMyIGlmIGJvdGggdmFsdWVzIGFyZSBudWxsIHRoZW4gdGhleSBhcmUgZXF1YWxcclxuICAgICAgICBpZiAobnVsbFZhbHVlRXhjZXB0aW9uIGluc3RhbmNlb2YgTnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoYS5Jc051bGwgJiYgYi5Jc051bGwpXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICB0aHJvdyBudWxsVmFsdWVFeGNlcHRpb247XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZnVudGlvbiB0aGF0IGdldCB0aGUgbG9naWNhbCBuYW1lIHRyYW5zbGF0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfdHJhbnNsYXRlKHN0cjogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG5cclxuICAgIGxldCBuYW1lOiBzdHJpbmcgPSBzdHIuU3RyVmFsO1xyXG4gICAgaWYgKE5TdHJpbmcuSXNOdWxsT3JFbXB0eShuYW1lKSlcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXNWYWwuU3RyVmFsID0gRW52UGFyYW1zVGFibGUuSW5zdGFuY2UudHJhbnNsYXRlKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZ1bmN0aW9uIHRoYXQgZ2V0IGEgc3RyaW5nIGFuZCBmb3JtYXRcclxuICAvLy8gICBhbmQgY2hhbmdlIHRoZSBzdHJpbmcgdG8gYmUgY29udmVydCBhcyB0aGUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfYXN0cihzb3VyY2U6IEV4cFZhbCwgZm9ybWF0OiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuXHJcbiAgICBpZiAoc291cmNlLlN0clZhbCA9PT0gbnVsbCB8fCBmb3JtYXQuU3RyVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZvcm1hdC5TdHJWYWwubGVuZ3RoID4gMCAmJiBzb3VyY2UuU3RyVmFsLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IHBpYzogUElDID0gbmV3IFBJQyhFeHByZXNzaW9uRXZhbHVhdG9yLnNldF9hX3BpYyhmb3JtYXQuU3RyVmFsKSwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UubWcyZGlzcChzb3VyY2UuVG9NZ1ZhbCgpLCBudWxsLCBwaWMsIGZhbHNlLCBmYWxzZSwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNhbGN1bGF0ZXMgdGhlIGF0dHJpYnV0ZSBvZiBhIHZlY3RvciBjZWxsc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2ZWNcIj4tIHRoZSBhY3R1YWxsIHZlY3RvciBub3QgYSAndmFyJyBsaXRlcmFsIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgc3RhdGljIGV2YWxfb3BfdmVjQ2VsbEF0dHIodmVjOiBFeHBWYWwsIHJlczogRXhwVmFsKTogdm9pZCB7XHJcbiAgICAvLyByZXR1cm4gdHlwZSBpcyBhbGx3YXkgYWxwaGFcclxuICAgIHJlcy5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIHJlcy5Jc051bGwgPSBmYWxzZTtcclxuICAgIGxldCBhdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FO1xyXG5cclxuICAgIC8vIGlmIHRoZSB2ZWN0b3IgaXMgbnVsbCB0YWtlIHRoZSB0eXBlIGZyb20gdGhlIGZpZWxkXHJcbiAgICAvLyBRQ1IgOTI4MzA4ICYmIDQyNjYxOFxyXG4gICAgaWYgKHZlYy5Jc051bGwgJiYgdmVjLlZlY3RvckZpZWxkICE9PSBudWxsKSB7XHJcbiAgICAgIGF0dHIgPSB2ZWMuVmVjdG9yRmllbGQuZ2V0Q2VsbHNUeXBlKCk7XHJcbiAgICB9IGVsc2UgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IuSXNWYWxpZFZlY3Rvcih2ZWMpKVxyXG4gICAgLy8gaWYgaXQgYSB2YWxpZCB2ZWN0b3IgdGFrZSBmcm9tIHZlY3RvclxyXG4gICAge1xyXG4gICAgICBhdHRyID0gVmVjdG9yVHlwZS5nZXRDZWxsc0F0dHIodmVjLlN0clZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzLlN0clZhbCA9ICcnICsgRXhwcmVzc2lvbkV2YWx1YXRvci5HZXRBdHRyaWJ1dGVDaGFyKGF0dHIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgYSBjZWxscyB2YWx1ZSBmcm9tIGEgdmVjdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZlY1wiPi0gdGhlIGFjdHVhbGwgdmVjdG9yIG5vdCBhICd2YXInIGxpdGVyYWw8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2VsbFwiPi0gdGhlIGNlbGwgaW5kZXggdG8gZ2V0IDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF92ZWNHZXQodmVjOiBFeHBWYWwsIGNlbGw6IEV4cFZhbCwgcmVzOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmIChjZWxsLk1nTnVtVmFsID09PSBudWxsIHx8ICFFeHByZXNzaW9uRXZhbHVhdG9yLklzVmFsaWRWZWN0b3IodmVjKSB8fCBjZWxsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSA8PSAwKSB7XHJcbiAgICAgIHJlcy5Jc051bGwgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGNlbGxBdHRyOiBTdG9yYWdlQXR0cmlidXRlO1xyXG4gICAgICBsZXQgY2VsbFZhbDogc3RyaW5nO1xyXG4gICAgICBpZiAodmVjLlZlY3RvckZpZWxkICE9PSBudWxsKSB7XHJcbiAgICAgICAgY2VsbEF0dHIgPSB2ZWMuVmVjdG9yRmllbGQuZ2V0Q2VsbHNUeXBlKCk7XHJcbiAgICAgICAgY2VsbFZhbCA9ICg8RmllbGQ+dmVjLlZlY3RvckZpZWxkKS5nZXRWZWNDZWxsVmFsdWUoY2VsbC5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCB2ZWN0b3IgPSBuZXcgVmVjdG9yVHlwZSh2ZWMuU3RyVmFsKTtcclxuICAgICAgICBjZWxsVmFsID0gdmVjdG9yLmdldFZlY0NlbGwoY2VsbC5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgICAgIGNlbGxBdHRyID0gdmVjdG9yLmdldENlbGxzQXR0cigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIHR5cGUgdHlwZVxyXG4gICAgICBpZiAoY2VsbFZhbCA9PSBudWxsKVxyXG4gICAgICAgIHJlcy5Jc051bGwgPSB0cnVlO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzd2l0Y2ggKGNlbGxBdHRyKSB7XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTUVNTzpcclxuICAgICAgICAgICAgcmVzLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgICAgICByZXMuU3RyVmFsID0gY2VsbFZhbDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgICAgIHJlcy5BdHRyID0gY2VsbEF0dHI7XHJcbiAgICAgICAgICAgIHJlcy5TdHJWYWwgPSBjZWxsVmFsO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICAgICAgcmVzLkF0dHIgPSBjZWxsQXR0cjtcclxuICAgICAgICAgICAgcmVzLlN0clZhbCA9IGNlbGxWYWw7XHJcbiAgICAgICAgICAgIHJlcy5JbmNsdWRlQmxvYlByZWZpeCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICAgICAgcmVzLkF0dHIgPSBjZWxsQXR0cjtcclxuICAgICAgICAgICAgcmVzLlN0clZhbCA9IGNlbGxWYWw7XHJcbiAgICAgICAgICAgIHJlcy5JbmNsdWRlQmxvYlByZWZpeCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgICAgICByZXMuQXR0ciA9IGNlbGxBdHRyO1xyXG4gICAgICAgICAgICByZXMuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoY2VsbFZhbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICAgICAgICByZXMuQXR0ciA9IGNlbGxBdHRyO1xyXG4gICAgICAgICAgICByZXMuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoY2VsbFZhbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgICAgICByZXMuQXR0ciA9IGNlbGxBdHRyO1xyXG4gICAgICAgICAgICByZXMuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoY2VsbFZhbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgICAgICByZXMuQXR0ciA9IGNlbGxBdHRyO1xyXG4gICAgICAgICAgICByZXMuQm9vbFZhbCA9IERpc3BsYXlDb252ZXJ0b3IudG9Cb29sZWFuKGNlbGxWYWwpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oJ2luIEV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbF9vcF92ZWNHZXQgdW5rbm93ZW4gc3RvcmFnZSB0eXBlOiAnICtcclxuICAgICAgICAgICAgICBjZWxsQXR0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdmVjdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZlY1wiPi0gdGhlIGFjdHVhbGwgdmVjdG9yIG5vdCBhICd2YXInIGxpdGVyYWw8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfdmVjU2l6ZSh2ZWM6IEV4cFZhbCwgcmVzOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIC8vIHRoZSByZXN1bHRlIHdpbGwgYWx3YXlzIGJlIG51bWVyaWNcclxuICAgIHJlcy5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgcmVzLklzTnVsbCA9IGZhbHNlO1xyXG4gICAgcmVzLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcblxyXG4gICAgcmVzLk1nTnVtVmFsLk5VTV80X0xPTkcoLTEpOyAvLyBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcmV0dXJuIC0xXHJcbiAgICAvLyBRQ1IgNDI2NjE4XHJcbiAgICBpZiAoRXhwcmVzc2lvbkV2YWx1YXRvci5Jc1ZhbGlkVmVjdG9yKHZlYykpXHJcbiAgICAgIHJlcy5NZ051bVZhbC5OVU1fNF9MT05HKDxudW1iZXI+bmV3IFZlY3RvclR5cGUodmVjLlN0clZhbCkuZ2V0VmVjU2l6ZSgpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSB2YWx1ZSBvZiBhIGdpdmVuIGNlbGxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmVjXCI+LSAgYSAndmFyJyBsaXRlcmFsIHBvaW50aW5nIHRvIHRoZSB2ZWN0b3I8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2VsbFwiPi0gdGhlIGNlbGwgaW5kZXggdG8gc2V0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5ld1ZhbFwiPi0gdGhlIHZhbHVlIHRvIGJlIHNldDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF92ZWNTZXQodmVjOiBFeHBWYWwsIGNlbGw6IEV4cFZhbCwgbmV3VmFsOiBFeHBWYWwsIHJlczogRXhwVmFsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyByZXN1bHQgaXMgbG9naWNhbFxyXG4gICAgcmVzLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXMuQm9vbFZhbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh2ZWMuTWdOdW1WYWwgIT09IG51bGwgJiYgY2VsbC5NZ051bVZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgdmVjRmllbGQ6IEZpZWxkO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHZlY0ZpZWxkID0gKDxGaWVsZD4gdGhpcy5nZXRGaWVsZCh2ZWMuTWdOdW1WYWwuTlVNXzJfTE9ORygpKSk7XHJcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZyhleCk7XHJcbiAgICAgICAgICB2ZWNGaWVsZCA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICB0aHJvdyBleDtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIGlmICgoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKHZlY0ZpZWxkLmdldENlbGxzVHlwZSgpKSAmJiBTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUobmV3VmFsLkF0dHIpKSB8fCAodmVjRmllbGQgIT09IG51bGwgJiYgKHZlY0ZpZWxkLklzVmlydHVhbCB8fCB2ZWNGaWVsZC5nZXRUYXNrKCkuZ2V0TW9kZSgpID09PSBDb25zdGFudHMuVEFTS19NT0RFX0NSRUFURSB8fCB2ZWNGaWVsZC5EYk1vZGlmaWFibGUpICYmIHZlY0ZpZWxkLmdldFR5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUiAmJiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVGhlU2FtZVR5cGUodmVjRmllbGQuZ2V0Q2VsbHNUeXBlKCksIG5ld1ZhbC5BdHRyKSB8fCBuZXdWYWwuSXNOdWxsIHx8IChTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUobmV3VmFsLkF0dHIpICYmIHZlY0ZpZWxkLmdldENlbGxzVHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpKSkpXHJcbiAgICAgIC8vIGFsbG93IGFscGhhIGludG8gYmxvYiBydGZcclxuICAgICAge1xyXG4gICAgICAgIC8vIFFDUiA3NDU1NDFcclxuICAgICAgICAvLyBjb252ZXJ0IHRoZSBhbHBoYSBkYXRhIGludG8gYmxvYlxyXG4gICAgICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUobmV3VmFsLkF0dHIpICYmIHZlY0ZpZWxkLmdldENlbGxzVHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpIHtcclxuICAgICAgICAgIHRoaXMuQ29udmVydEV4cFZhbChuZXdWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXMuQm9vbFZhbCA9IGF3YWl0IHZlY0ZpZWxkLnNldENlbGxWZWNWYWx1ZShjZWxsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSwgbmV3VmFsLlRvTWdWYWwoKSwgbmV3VmFsLklzTnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgdG9rZW5zIGluIHRoZSBzdHJpbmcgYWNvdXJkaW5nIHRvIHRoZSBnaXZlbiBkZWxpbWV0ZXJzXHJcbiAgLy8vICAgSWYgdGhlIFNvdXJjZVN0cmluZyBpcyBlbXB0eSwgcmV0dXJuIHZhbHVlIGlzIDAuXHJcbiAgLy8vICAgSWYgdGhlIGRlbGltaXRlciB3YXMgbm90IGZvdW5kICBpbiB0aGUgU291cmNlU3RyaW5nIG9yIHdhcyBlbXB0eSwgcmV0dXJuIHZhbHVlIGlzIDEuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNvdXJjZVN0cmluZ1wiPi0gdGhlIGRhdGEgc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlbGltaXRlclwiPnRoZSBkZWxpbWV0ZXI8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3Bfc3RyVG9rZW5DbnQoc291cmNlU3RyaW5nOiBFeHBWYWwsIGRlbGltaXRlcjogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgLy8gdGhlIHJldHVybiB2YWx1ZSBpcyBhbHdheXMgbnVtZXJpY1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuXHJcbiAgICAvLyB0aGUgcmVzdWx0XHJcbiAgICBsZXQgcmVzOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIC8vIGNvbnRpbnVlIG9ubHkgaWYgdGhlIHNvdXJjZSBzdHJpbmcgZXhpc3RzIGFuZCBpcyBub3QgZW1wdHlcclxuICAgIGlmICghc291cmNlU3RyaW5nLklzTnVsbCAmJiBzb3VyY2VTdHJpbmcuU3RyVmFsICE9PSBudWxsICYmIE5TdHJpbmcuVHJpbUVuZChzb3VyY2VTdHJpbmcuU3RyVmFsLCB0aGlzLl9jaGFyc1RvVHJpbSkubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgIC8vIGlmIHRoZSBkZWxpbWl0ZXIgaXMgZW1wdHlcclxuICAgICAgaWYgKGRlbGltaXRlci5Jc051bGwgfHwgTlN0cmluZy5UcmltRW5kKGRlbGltaXRlci5TdHJWYWwsIHRoaXMuX2NoYXJzVG9UcmltKS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgcmVzID0gMTtcclxuICAgICAgLy8gZmluZCB0aGUgZGVsaW1pdGVyIGluIHRoZSBzb3VyY2Ugc3RyaW5nXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIGlmIHRoZSBkZWxpbWl0ZXIgd2FzIG5vdCBmb3VuZCBpbiB0aGUgZGF0YVxyXG4gICAgICAgIGxldCB0b2tlbnNTaXplOiBudW1iZXIgPSB0aGlzLnN0clRva2VuQ291bnQoc291cmNlU3RyaW5nLlN0clZhbCwgZGVsaW1pdGVyLlN0clZhbCk7XHJcbiAgICAgICAgaWYgKHRva2Vuc1NpemUgPT09IDApXHJcbiAgICAgICAgICByZXMgPSAxO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJlcyA9IHRva2Vuc1NpemU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHJldHVybiB0aGUgcmVzIHZhbHVlXHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhyZXMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIHRva2VuIHdpdGhpbiB0aGUgc291cmNlXHJcbiAgLy8vICAgc3RyaW5nIG9yIDAgaWYgdGhlIHRva2VuIHdhcyBub3QgZm91bmQuXHJcbiAgLy8vICAgSWYgdGhlIFNvdXJjZVN0cmluZyBvciB0aGUgdG9rZW4gYXJlIGVtcHR5LCByZXR1cm4gdmFsdWUgaXMgMC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9zdHJUb2tlbklkeChzb3VyY2VTdHJpbmc6IEV4cFZhbCwgdG9rZW46IEV4cFZhbCwgZGVsaW1pdGVyOiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICAvLyB0aGUgcmV0dXJuIHZhbHVlIGlzIGFsd2F5cyBudW1lcmljXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG5cclxuICAgIC8vIHRoZSByZXN1bHRcclxuICAgIGxldCByZXM6IG51bWJlciA9IDA7XHJcblxyXG4gICAgLy8gY29udGludWUgb25seSBpZiB0aGUgc291cmNlIHN0cmluZyBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eVxyXG4gICAgLy8gYW5kIHRoZSB0b2tlbiBleGlzdCBhbmQgbm90IGVtcHR5XHJcbiAgICBpZiAoIXNvdXJjZVN0cmluZy5Jc051bGwgJiYgc291cmNlU3RyaW5nLlN0clZhbCAhPT0gbnVsbCAmJiAhdG9rZW4uSXNOdWxsICYmIHRva2VuLlN0clZhbCAhPT0gbnVsbCAmJiBOU3RyaW5nLlRyaW1FbmQoc291cmNlU3RyaW5nLlN0clZhbCwgdGhpcy5fY2hhcnNUb1RyaW0pLmxlbmd0aCAhPT0gMCAmJiB0b2tlbi5TdHJWYWwudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgIC8vIGlmIHRoZSBkZWxpbWl0ZXIgaXMgZW1wdHkgY2hlY2sgaWYgdGhlIGRhdGEgZXF1YWxzIHRvIHRoZSB0b2tlblxyXG4gICAgICBpZiAoIWRlbGltaXRlci5Jc051bGwgJiYgTlN0cmluZy5UcmltRW5kKGRlbGltaXRlci5TdHJWYWwsIHRoaXMuX2NoYXJzVG9UcmltKS5sZW5ndGggIT09IDApXHJcbiAgICAgICAgcmVzID0gdGhpcy5zdHJUb2tlbkluZGV4KHNvdXJjZVN0cmluZy5TdHJWYWwsIGRlbGltaXRlci5TdHJWYWwsIHRva2VuLlN0clZhbCk7XHJcblxyXG4gICAgICBlbHNlIGlmIChzb3VyY2VTdHJpbmcuU3RyVmFsID09PSB0b2tlbi5TdHJWYWwpXHJcbiAgICAgICAgcmVzID0gMTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHJlcyA9IDA7XHJcbiAgICB9XHJcbiAgICAvLyByZXR1cm4gdGhlIHJlcyB2YWx1ZVxyXG4gICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcocmVzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gRmluZCBhIGdpdmVuIHRva2VuIGluZGV4IGluIGEgZ2l2ZW4gc3RyaW5nICgxIGJhc2UpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzb3VyY2VcIj5UaGUgc3RyaW5nIHRvIHNlYXJjaCBvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGVsaW1pdGVyXCI+VGhlIGRlbGltaXRlcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidG9rZW5cIj5UaGUgdG9rZW4gdG8gc2VhcmNoPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RyVG9rZW5JbmRleChzb3VyY2U6IHN0cmluZywgZGVsaW1pdGVyOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgLy8gYWRkIHRoZSBkZWxpbWl0ZXIgYXQgdGhlIGZyb250IGFuZCBlbmQgb2YgdGhlIHN0cmluZyBhbmQgdGhlIHRva2VuXHJcbiAgICAvLyB0aGlzIHdpbGwgaGVscCB1cyBpZiBmaW5kaW5nIHRva2VucyB0aGF0IGFyZSBhdCB0aGUgYmVnaW5uaW5nL2VuZCBvZiB0aGUgc3RyaW5nLlxyXG4gICAgbGV0IHRyaW1EZWxpbTogc3RyaW5nID0gTlN0cmluZy5UcmltRW5kKGRlbGltaXRlciwgdGhpcy5fY2hhcnNUb1RyaW0pO1xyXG4gICAgbGV0IHRyaW1Tb3VyY2U6IHN0cmluZyA9IHRyaW1EZWxpbSArIE5TdHJpbmcuVHJpbUVuZChzb3VyY2UsIHRoaXMuX2NoYXJzVG9UcmltKSArIHRyaW1EZWxpbTtcclxuICAgIGxldCB0cmltVG9rZW46IHN0cmluZyA9ICh0b2tlbiAhPT0gbnVsbCkgPyBOU3RyaW5nLlRyaW1FbmQodG9rZW4sIHRoaXMuX2NoYXJzVG9UcmltKSA6IG51bGw7XHJcblxyXG4gICAgaWYgKHRyaW1Ub2tlbiA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICAvLyBzdXJyb3VuZCB0aGUgdG9rZW4gd2l0aCBkZWxpbWl0ZXJzXHJcbiAgICB0cmltVG9rZW4gPSB0cmltRGVsaW0gKyB0cmltVG9rZW4gKyB0cmltRGVsaW07XHJcblxyXG4gICAgbGV0IHRva2VuT2Zmc2V0OiBudW1iZXIgPSB0cmltU291cmNlLmluZGV4T2YodHJpbVRva2VuKTtcclxuXHJcbiAgICBpZiAodG9rZW5PZmZzZXQgPT09IC0xKVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBUaGUgdG9rZW4gY291bnQgaXMgdGhlIG51bWJlciBvZiB0b2tlbnMgdGlsbCBvdXIgdG9rZW4gb2Zmc2V0ICsxXHJcbiAgICAgIC8vIHNpbmNlIHdlIGFkZGVkIDEgdG9rZW4gYmVmb3JlIHRoZSBzdHJpbmcsIHdlIHdpbGwgaGF2ZSB0byBzdWJ0cmFjdCAxXHJcbiAgICAgIGxldCB0b2tlbkluZGV4OiBudW1iZXIgPSB0aGlzLnN0clRva2VuQ291bnQodHJpbVNvdXJjZS5zdWJzdHIoMCwgdG9rZW5PZmZzZXQgKyB0cmltRGVsaW0ubGVuZ3RoKSwgdHJpbURlbGltKTtcclxuICAgICAgdG9rZW5JbmRleC0tO1xyXG4gICAgICByZXR1cm4gdG9rZW5JbmRleDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ291bnQgdGhlIHRva2Vuc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic291cmNlXCI+VGhlIHN0cmluZyB0byBzcGxpdDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGVsaW1pdGVyXCI+VGhlIGRlbGltaXRyZXI8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdHJUb2tlbkNvdW50KHNvdXJjZTogc3RyaW5nLCBkZWxpbWl0ZXI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgY291bnRlcjogbnVtYmVyID0gMTtcclxuICAgIGxldCB0cmltRGVsaW06IHN0cmluZyA9IE5TdHJpbmcuVHJpbUVuZChkZWxpbWl0ZXIsIHRoaXMuX2NoYXJzVG9UcmltKTtcclxuICAgIGxldCB0cmltU291cmNlOiBzdHJpbmcgPSBOU3RyaW5nLlRyaW1FbmQoc291cmNlLCB0aGlzLl9jaGFyc1RvVHJpbSk7XHJcblxyXG4gICAgbGV0IGRlbGltTGVuZ3RoOiBudW1iZXIgPSB0cmltRGVsaW0ubGVuZ3RoO1xyXG4gICAgbGV0IGRhdGE6IHN0cmluZyA9IHRyaW1Tb3VyY2U7XHJcbiAgICBsZXQgZnJvbU9mZnNldDogbnVtYmVyID0gMDtcclxuICAgIGxldCBkZWxpbWl0ZXJPZmZzZXQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgLy8gZW1wdHkgc3RyaW5nLiBubyB0b2tlbnMuXHJcbiAgICBpZiAoc291cmNlID09PSBudWxsIHx8IHNvdXJjZS5sZW5ndGggPT09IDApXHJcbiAgICAgIHJldHVybiAwO1xyXG5cclxuICAgIGRlbGltaXRlck9mZnNldCA9IGRhdGEuaW5kZXhPZih0cmltRGVsaW0sIGZyb21PZmZzZXQpO1xyXG4gICAgLy8gZmluZCB0aGUgbnVtYmVyIG9mIHRva2VucyBieSBjb3VudGluZyB0aGUgZGVsaW1pdGVycyArIDFcclxuICAgIHdoaWxlIChkZWxpbWl0ZXJPZmZzZXQgPj0gMCkge1xyXG4gICAgICBjb3VudGVyKys7XHJcblxyXG4gICAgICAvLyBzdGFydCBuZXh0IHNlYXJjaCBhZnRlciB0aGUgZGVsaW1pdGVyXHJcbiAgICAgIGZyb21PZmZzZXQgPSBkZWxpbWl0ZXJPZmZzZXQgKyBkZWxpbUxlbmd0aDtcclxuXHJcbiAgICAgIGRlbGltaXRlck9mZnNldCA9IGRhdGEuaW5kZXhPZih0cmltRGVsaW0sIGZyb21PZmZzZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvdW50ZXI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfYmxvYnNpemUocmVzVmFsOiBFeHBWYWwsIGJsb2JWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHNpemU6IG51bWJlciA9IDA7XHJcbiAgICBzd2l0Y2ggKGJsb2JWYWwuQXR0cikge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgc2l6ZSA9IDxudW1iZXI+VmVjdG9yVHlwZS5nZXRWZWNTaXplKGJsb2JWYWwuU3RyVmFsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgICAgc2l6ZSA9IEJsb2JUeXBlLmdldEJsb2JTaXplKGJsb2JWYWwuU3RyVmFsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhzaXplKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9pc2NvbXBvbmVudChyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGN1cnJUc2s6IFRhc2tCYXNlID0gQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0Q3VyclRhc2soKSB8fCAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzayk7XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IChjdXJyVHNrLmdldENvbXBJZHgoKSAhPT0gMCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRmluZCBhbmQgRXhlY3V0ZSB1c2VyIGRlZmluZWQgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9FeGVjVXNlckRlZmluZWRGdW5jKGZ1bmNOYW1lOiBzdHJpbmcsIEV4cF9wYXJhbXM6IEV4cFZhbFtdLCByZXNWYWw6IEV4cFZhbCwgZXhwZWN0ZWRUeXBlOiBTdG9yYWdlQXR0cmlidXRlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgcnRFdnQ6IFJ1blRpbWVFdmVudCA9IG5ldyBSdW5UaW1lRXZlbnQoPFRhc2tCYXNlPnRoaXMuRXhwVGFzayk7XHJcbiAgICBydEV2dC5zZXRUeXBlKENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVVNFUl9GVU5DKTtcclxuICAgIHJ0RXZ0LnNldFVzZXJEZWZpbmVkRnVuY05hbWUoZnVuY05hbWUpO1xyXG5cclxuICAgIGxldCBldnRIYW5Qb3M6IEV2ZW50SGFuZGxlclBvc2l0aW9uID0gbmV3IEV2ZW50SGFuZGxlclBvc2l0aW9uKCk7XHJcbiAgICBldnRIYW5Qb3MuaW5pdChydEV2dCk7XHJcblxyXG4gICAgbGV0IGhhbmRsZXI6IEV2ZW50SGFuZGxlciA9IGV2dEhhblBvcy5nZXROZXh0KCk7XHJcbiAgICBsZXQgYXJnc01hdGNoOiBib29sZWFuID0gaGFuZGxlciAhPT0gbnVsbCAmJiBoYW5kbGVyLmFyZ3NNYXRjaChFeHBfcGFyYW1zKTtcclxuICAgIGxldCB2YWw6IEV4cFZhbCA9IG51bGw7XHJcbiAgICBsZXQgdmFsSW5pYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChhcmdzTWF0Y2gpIHtcclxuICAgICAgLy8gaWYgdGhlcmUgaXMgYSBoYW5kbGVyIGNoYW5nZSB0aGUgaGFuZGxlcidzIGNvbnRleHQgdGFzayB0byB0aGUgZXZlbnQncyB0YXNrXHJcbiAgICAgIGxldCBoYW5kbGVyQ29udGV4dFRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBoYW5kbGVyLmdldFRhc2soKS5HZXRDb250ZXh0VGFzaygpO1xyXG4gICAgICAvLyBJZiB1c2VyLWRlZmluZWQgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZnJvbSBoYW5kbGVyIHdoaWNoIGlzIGludm9rZWQgZnJvbSAgY29udGV4dCB0YXNrIGFscmVhZHksXHJcbiAgICAgIC8vIHRoZW4gZG8gbm90IGNoYW5nZSB0aGUgY29udGV4dCB0YXNrIGFnYWluLlxyXG4gICAgICBpZiAoaGFuZGxlci5nZXRUYXNrKCkgPT09ICBoYW5kbGVyLmdldFRhc2soKS5HZXRDb250ZXh0VGFzaygpKVxyXG4gICAgICAgIGhhbmRsZXIuZ2V0VGFzaygpLlNldENvbnRleHRUYXNrKHJ0RXZ0LmdldFRhc2soKSk7XHJcblxyXG4gICAgICBsZXQgYXJnTGlzdDogQXJndW1lbnRzTGlzdCA9IG5ldyBBcmd1bWVudHNMaXN0KEV4cF9wYXJhbXMpO1xyXG5cclxuICAgICAgcnRFdnQuc2V0QXJnTGlzdChhcmdMaXN0KTtcclxuICAgICAgLy8gaWYgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIHdpbGwgZ28gdG8gdGhlIHNlcnZlciwgd2UgZG9uJ3Qgd2FudCBpdCB0byBjb250aW51ZVxyXG4gICAgICAvLyBhbnkgb3RoZXIgZXhlY3V0aW9uIG9uIHRoZSBzZXJ2ZXIsIGxpa2UgaWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgcmFpc2UgZXZlbnQgb3Igc29tZXRoaW5nXHJcbiAgICAgIC8vIGxpa2UgdGhhdCBiZWNhdXNlIHRoZSBzZXJ2ZXIgY2Fubm90IGtub3cgb24gd2hpY2ggb3BlcmF0aW9uIHdlIGFyZSBjdXJyZW50bHkgb24gYW5kIHdoaWNoIGV4cHJzc2lvblxyXG4gICAgICAvLyBhbmQgd2hpY2ggcGFydCBvZiB0aGUgZXhwcmVzc2lvbiB3ZSBhcmUgZXZhbHVhdGluZ1xyXG4gICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5wdXNoTmV3RXhlY1N0YWNrcygpO1xyXG4gICAgICBhd2FpdCBoYW5kbGVyLmV4ZWN1dGUocnRFdnQsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLnBvcE5ld0V4ZWNTdGFja3MoKTtcclxuXHJcbiAgICAgIC8vIGV2YWx1YXRlIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHVzZXIgZGVmaW5lZCBmdW5jdGlvblxyXG4gICAgICBsZXQgZXhwOiBFeHByZXNzaW9uID0gaGFuZGxlci5nZXRUYXNrKCkuZ2V0RXhwQnlJZChoYW5kbGVyLmdldEV2ZW50KCkuZ2V0VXNlckRlZmluZWRGdW5jUmV0RXhwKCkpO1xyXG4gICAgICBpZiAoZXhwICE9PSBudWxsKSB7XHJcbiAgICAgICAgdmFsID0gYXdhaXQgZXhwLmV2YWx1YXRlV2l0aFJlc1R5cGUoZXhwZWN0ZWRUeXBlKTtcclxuICAgICAgICB2YWxJbmlhdGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gcmVzdG9yaW5nIHRoZSBjb250ZXh0XHJcbiAgICAgIGhhbmRsZXIuZ2V0VGFzaygpLlNldENvbnRleHRUYXNrKGhhbmRsZXJDb250ZXh0VGFzayk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbEluaWF0ZWQpIHtcclxuICAgICAgaWYgKGV4cGVjdGVkVHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FKSB7XHJcbiAgICAgICAgZXhwZWN0ZWRUeXBlID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgfVxyXG4gICAgICB2YWwgPSBuZXcgRXhwVmFsKGV4cGVjdGVkVHlwZSwgdHJ1ZSwgbnVsbCk7XHJcbiAgICB9XHJcbiAgICAvLyBjb3B5IGNvbnRlbnRzIGZyb20gdGhlIFZhbCBoZWxwZXIgdmFyaWFibGUgdG8gdGhlIHJlc1ZhbCBwYXJhbWV0ZXIuXHJcbiAgICByZXNWYWwuQ29weSh2YWwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGludGVybmFsIG5hbWUgb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9wdWJsaWNOYW1lKHJlc1ZhbDogRXhwVmFsLCBQYXJlbnQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHB1YmxpY05hbWU6IHN0cmluZyA9ICdOVUxMJztcclxuXHJcbiAgICBsZXQgaVBhcmVudDogbnVtYmVyID0gUGFyZW50Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoaVBhcmVudCA+PSAwICYmIGlQYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBpUGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKGlQYXJlbnQpO1xyXG4gICAgICBpZiAodGFzayAhPT0gbnVsbCAmJiB0YXNrLmlzUHJvZ3JhbSgpICYmICF0YXNrLmlzTWFpblByb2coKSlcclxuICAgICAgICBwdWJsaWNOYW1lID0gdGFzay5nZXRQdWJsaWNOYW1lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IHB1YmxpY05hbWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgZXh0ZXJuYWwgdGFzayBJRCBvZiB0aGUgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3Rhc2tJZChyZXNWYWw6IEV4cFZhbCwgUGFyZW50OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCB0YXNrSWQ6IHN0cmluZyA9ICdOVUxMJztcclxuXHJcbiAgICBsZXQgaVBhcmVudDogbnVtYmVyID0gUGFyZW50Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoaVBhcmVudCA+PSAwICYmIGlQYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBpUGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKGlQYXJlbnQpO1xyXG4gICAgICBpZiAodGFzayAhPT0gbnVsbClcclxuICAgICAgICB0YXNrSWQgPSB0YXNrLmdldEV4dGVybmFsVGFza0lkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IHRhc2tJZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2FjaGVkIHJlY29yZHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9kYnZpZXdzaXplKHJlc1ZhbDogRXhwVmFsLCBQYXJlbnQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHNpemU6IG51bWJlciA9IDA7XHJcblxyXG4gICAgbGV0IGlQYXJlbnQ6IG51bWJlciA9IFBhcmVudC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGlQYXJlbnQgPj0gMCAmJiBpUGFyZW50IDwgKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpIHx8IGlQYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcbiAgICAgIGlmICh0YXNrICE9PSBudWxsICYmICg8RGF0YVZpZXc+dGFzay5EYXRhVmlldykuSGFzTWFpblRhYmxlKSB7XHJcbiAgICAgICAgaWYgKHRhc2suR2V0Q29tcHV0ZWRQcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9QUkVMT0FEX1ZJRVcpLkdldENvbXB1dGVkVmFsdWVCb29sZWFuKCkpIHtcclxuICAgICAgICAgIHNpemUgPSAoPERhdGFWaWV3PnRhc2suRGF0YVZpZXcpLkRCVmlld1NpemU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YXNrLmlzVGFibGVXaXRoQWJzb2x1dGVzU2Nyb2xsYmFyKCkpXHJcbiAgICAgICAgICBzaXplID0gKDxEYXRhVmlldz50YXNrLkRhdGFWaWV3KS5Ub3RhbFJlY29yZHNDb3VudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBzaXplLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG51bWVyaWMgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBzZXF1ZW50aWFsIG51bWJlclxyXG4gIC8vLyAgIG9mIGEgcmVjb3JkIGluIGEgY2FjaGVkIHZpZXdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9kYnZpZXdyb3dpZHgocmVzVmFsOiBFeHBWYWwsIFBhcmVudDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgaWR4OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGxldCBpUGFyZW50OiBudW1iZXIgPSBQYXJlbnQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChpUGFyZW50ID49IDAgJiYgaVBhcmVudCA8ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSB8fCBpUGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+c3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcblxyXG4gICAgICBpZiAodGFzayAhPT0gbnVsbCAmJiB0YXNrLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUFJFTE9BRF9WSUVXKS5HZXRDb21wdXRlZFZhbHVlQm9vbGVhbigpKSB7XHJcbiAgICAgICAgLyogUUNSIyA5Njk3MjMgLSBEbyBub3QgcmV0dXJuIHRoZSByb3cgaWR4IHVudGlsbCB0aGUgcmVjb3JkIGlzIGNvbW1pdGVkLiAgKi9cclxuICAgICAgICBpZiAoKCg8RGF0YVZpZXc+dGFzay5EYXRhVmlldykuZ2V0Q3VyclJlYygpKS5nZXRNb2RlKCkgIT09IERhdGFNb2RpZmljYXRpb25UeXBlcy5JbnNlcnQpIHtcclxuICAgICAgICAgIGlkeCA9IHRhc2suRGF0YXZpZXdNYW5hZ2VyLkN1cnJlbnREYXRhdmlld01hbmFnZXIuR2V0RGJWaWV3Um93SWR4KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGlkeCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDYWxsIHRoZSBNbHMgdHJhbnNsYXRpb24gdG8gcmV0dXJuIHRoZSB0cmFuc2xhdGlvbiBvZiAnZnJvbVN0cmluZycuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfTWxzVHJhbnMocmVzVmFsOiBFeHBWYWwsIGZyb21TdHJpbmc6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcblxyXG4gICAgcmVzVmFsLlN0clZhbCA9IExhbmd1YWdlRGF0YS5JbnN0YW5jZS50cmFuc2xhdGUoTlN0cmluZy5UcmltRW5kKGZyb21TdHJpbmcuU3RyVmFsLCB0aGlzLl9jaGFyc1RvVHJpbSkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEltcGxlbWVudHMgU3RyQnVpbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9TdHJCdWlsZCh2YWxTdGFjazogU3RhY2s8RXhwVmFsPiwgcmVzVmFsOiBFeHBWYWwsIG5BcmdzOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBFeHBfcGFybXM6IEV4cFZhbFtdID0gbmV3IEFycmF5PEV4cFZhbD4obkFyZ3MpO1xyXG5cclxuICAgIC8vIFJlYWQgcGFyYW1ldGVyc1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IG5BcmdzOyBpKyspXHJcbiAgICAgIEV4cF9wYXJtc1tuQXJncyAtIDEgLSBpXSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICB0aGlzLnZhbF9jcHkoRXhwX3Bhcm1zWzBdLCByZXNWYWwpO1xyXG5cclxuICAgIGxldCByZXN1bHRTdHI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihyZXNWYWwuU3RyVmFsKTtcclxuICAgIC8vIEZvciBlYWNoIHBhcmFtZXRlciwgc2VhcmNoIFwiQG5AXCIgc3RyaW5nIGluIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAgICAvLyBJZiBmb3VuZCwgYW5kIGlmIGl0IGlzIG5vdCBwcmVjZWRlZCBieSAnXFwnXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAxOyBpIDwgbkFyZ3M7IGkrKykge1xyXG4gICAgICBsZXQgdG9SZXBsYWNlOiBzdHJpbmcgPSAnQCcgKyBpLnRvU3RyaW5nKCkudHJpbSgpICsgJ0AnO1xyXG4gICAgICBsZXQgaW5kZXhGcm9tOiBudW1iZXIgPSAwO1xyXG4gICAgICB3aGlsZSAoaW5kZXhGcm9tICE9PSAtMSkge1xyXG4gICAgICAgIGxldCBuZXh0SW5kZXg6IG51bWJlciA9IHJlc3VsdFN0ci5Ub1N0cmluZygpLmluZGV4T2YodG9SZXBsYWNlLCBpbmRleEZyb20pO1xyXG4gICAgICAgIGlmIChuZXh0SW5kZXggPT09IC0xKVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGxldCBwcmVjZWRlZEJ5U2xhc2g6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBsZXQgc2hhc2hJbmRleDogbnVtYmVyID0gcmVzdWx0U3RyLlRvU3RyaW5nKCkuaW5kZXhPZignXFxcXCcgKyB0b1JlcGxhY2UsIGluZGV4RnJvbSk7XHJcbiAgICAgICAgaWYgKHNoYXNoSW5kZXggIT09IC0xKVxyXG4gICAgICAgICAgcHJlY2VkZWRCeVNsYXNoID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gaWYgJ1xcJyBpcyBmb3VuZCBjaGVjayBpZiwgaXQgaXMgcmVmZXJyaW5nIHRoZSBjdXJyZW50IG9jY3VycmFuY2Ugb2YgQG5AXHJcbiAgICAgICAgaWYgKChwcmVjZWRlZEJ5U2xhc2ggJiYgbmV4dEluZGV4ICE9PSBzaGFzaEluZGV4ICsgMSkgfHwgIXByZWNlZGVkQnlTbGFzaCkge1xyXG4gICAgICAgICAgcmVzdWx0U3RyLlJlcGxhY2UocmVzdWx0U3RyLlRvU3RyaW5nKG5leHRJbmRleCwgbmV4dEluZGV4ICsgdG9SZXBsYWNlLmxlbmd0aCAtIG5leHRJbmRleCksIEV4cF9wYXJtc1tpXS5TdHJWYWwudHJpbSgpLCBuZXh0SW5kZXgsIG5leHRJbmRleCArIHRvUmVwbGFjZS5sZW5ndGggLSBuZXh0SW5kZXgpO1xyXG4gICAgICAgICAgaW5kZXhGcm9tID0gbmV4dEluZGV4ICsgRXhwX3Bhcm1zW2ldLlN0clZhbC50cmltKCkubGVuZ3RoO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgaW5kZXhGcm9tID0gbmV4dEluZGV4ICsgMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmVzdWx0U3RyLlJlcGxhY2UoJ1xcXFxAJywgJ0AnKTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSByZXN1bHRTdHIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBBZGQgdXNlciByYW5nZXMgb24gVGFza0Jhc2UuLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj5XaWxsIHJldHVybiBCb29sVmFsLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFybnVtXCI+IHZhcm51bSBjb250YWlucyB2YXIgbnVtIG9uIHdoaWNoIHJhbmdlIGlzIHNwZWNpZmllZC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1pblwiPiBtaW4gY29udGFpbnMgbWluIHJhbmdlIHZhbHVlLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWF4XCI+IG1heCBjb250YWlucyBtYXggcmFuZ2UgdmFsdWUuPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3BfcmFuZ2VfYWRkKHJlc1ZhbDogRXhwVmFsLCBFeHBfcGFyYW1zOiBFeHBWYWxbXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IGF3YWl0IHRoaXMuYWRkX3J0X3JhbmdlcyhFeHBfcGFyYW1zLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRnJlZSB1c2VyIHJhbmdlcyBvbiBUYXNrQmFzZS4uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPldpbGwgcmV0dXJuIEJvb2xWYWwuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBhcmVudFwiPiBwYXJlbnQgY29udGFpbnMgZ2VuZXJhdGlvbiBvZiB0aGUgdGFzay48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9yYW5nZV9yZXNldChyZXNWYWw6IEV4cFZhbCwgcGFyZW50OiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG5cclxuICAgIGxldCBpUGFyZW50OiBudW1iZXIgPSBwYXJlbnQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChpUGFyZW50ID49IDAgJiYgaVBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IGlQYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcbiAgICAgIGlmICh0YXNrICE9PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGNvbW1hbmQ6IElDbGllbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlRGF0YVZpZXdDb21tYW5kKHRhc2suZ2V0VGFza1RhZygpLCBEYXRhVmlld0NvbW1hbmRUeXBlLlJlc2V0VXNlclJhbmdlKTtcclxuICAgICAgICBhd2FpdCB0YXNrLkRhdGF2aWV3TWFuYWdlci5FeGVjdXRlKGNvbW1hbmQpO1xyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEFkZCB1c2VyIGxvY2F0ZXMgb24gVGFzay4uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPldpbGwgcmV0dXJuIEJvb2xWYWwuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YXJudW1cIj4gdmFybnVtIGNvbnRhaW5zIHZhciBudW0gb24gd2hpY2ggcmFuZ2UgaXMgc3BlY2lmaWVkLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWluXCI+IG1pbiBjb250YWlucyBtaW4gcmFuZ2UgdmFsdWUuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtYXhcIj4gbWF4IGNvbnRhaW5zIG1heCByYW5nZSB2YWx1ZS48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9sb2NhdGVfYWRkKHJlc1ZhbDogRXhwVmFsLCBFeHBfcGFyYW1zOiBFeHBWYWxbXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IGF3YWl0IHRoaXMuYWRkX3J0X3JhbmdlcyhFeHBfcGFyYW1zLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGcmVlIHVzZXIgbG9jYXRlcyBvbiBUYXNrLi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+V2lsbCByZXR1cm4gQm9vbFZhbC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGFyZW50XCI+IHBhcmVudCBjb250YWlucyBnZW5lcmF0aW9uIG9mIHRoZSB0YXNrLjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX2xvY2F0ZV9yZXNldChyZXNWYWw6IEV4cFZhbCwgcGFyZW50OiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgbGV0IGlQYXJlbnQ6IG51bWJlciA9IHBhcmVudC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGlQYXJlbnQgPj0gMCAmJiBpUGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgaVBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhpUGFyZW50KTtcclxuICAgICAgaWYgKHRhc2sgIT09IG51bGwpIHtcclxuICAgICAgICBsZXQgY29tbWFuZDogSUNsaWVudENvbW1hbmQgPSBDb21tYW5kRmFjdG9yeS5DcmVhdGVEYXRhVmlld0NvbW1hbmQodGFzay5nZXRUYXNrVGFnKCksIERhdGFWaWV3Q29tbWFuZFR5cGUuUmVzZXRVc2VyTG9jYXRlKTtcclxuICAgICAgICBhd2FpdCB0YXNrLkRhdGF2aWV3TWFuYWdlci5FeGVjdXRlKGNvbW1hbmQpO1xyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEFkZCB1c2VyIHNvcnRzIG9uIFRhc2suLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj5XaWxsIHJldHVybiBCb29sVmFsLiBTdWNjZXNzZnVsIGFuZCBBdHRyIHdpbGwgYmUgc2V0IHRvIFNUT1JBR0VfQVRUUl9CT09MRUFOLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFybnVtXCI+IHZhbDEgY29udGFpbnMgdmFyIG51bSBvbiB3aGljaCByYW5nZSBpcyBzcGVjaWZpZWQuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkaXJcIj4gZGlyIGNvbnRhaW5zIGRpcmVjdGlvbiBvZiBzb3J0LjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX3NvcnRfYWRkKHJlc1ZhbDogRXhwVmFsLCB2YXJudW06IEV4cFZhbCwgZGlyOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBhd2FpdCB0aGlzLmFkZF9zb3J0KHZhcm51bSwgZGlyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGcmVlIHVzZXIgcmFuZ2VzIG9uIFRhc2suLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj5XaWxsIHJldHVybiBCb29sVmFsLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicGFyZW50XCI+IHBhcmVudCBjb250YWlucyBnZW5lcmF0aW9uIG9mIHRhc2suPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3Bfc29ydF9yZXNldChyZXNWYWw6IEV4cFZhbCwgcGFyZW50OiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgbGV0IGlQYXJlbnQ6IG51bWJlciA9IHBhcmVudC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGlQYXJlbnQgPj0gMCAmJiBpUGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgaVBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhpUGFyZW50KTtcclxuICAgICAgaWYgKHRhc2sgIT09IG51bGwpIHtcclxuICAgICAgICBsZXQgY29tbWFuZDogSUNsaWVudENvbW1hbmQgPSBDb21tYW5kRmFjdG9yeS5DcmVhdGVEYXRhVmlld0NvbW1hbmQodGFzay5nZXRUYXNrVGFnKCksIERhdGFWaWV3Q29tbWFuZFR5cGUuUmVzZXRVc2VyU29ydCk7XHJcbiAgICAgICAgYXdhaXQgdGFzay5EYXRhdmlld01hbmFnZXIuRXhlY3V0ZShjb21tYW5kKTtcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGN1cnJlbnQgaW5zdGFuY2UgaS5lLiB0YWcgb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+V2lsbCByZXR1cm4gQm9vbFZhbC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiUGFyZW50XCI+IHBhcmVudCBjb250YWlucyBnZW5lcmF0aW9uIG9mIHRhc2suPC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfdHNrX2luc3RhbmNlKHJlc1ZhbDogRXhwVmFsLCBQYXJlbnQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHRhZzogbnVtYmVyID0gMDtcclxuICAgIGxldCBpUGFyZW50OiBudW1iZXIgPSBQYXJlbnQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChpUGFyZW50ID49IDAgJiYgaVBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IGlQYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcbiAgICAgIGlmICh0YXNrICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGFnID0gTk51bWJlci5QYXJzZSh0YXNrLmdldFRhc2tUYWcoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcodGFnKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUaGlzIGZ1bmN0aW9uIGFkZHMgVXNlciBTb3J0IG9uIHRhc2suXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIGFkZF9zb3J0KHZhcm51bTogRXhwVmFsLCBkaXI6IEV4cFZhbCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKHZhcm51bS5NZ051bVZhbCA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCBpdG06IG51bWJlciA9IHZhcm51bS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgaWYgKGl0bSA9PT0gMClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHJcbiAgICBsZXQgZmxkOiBGaWVsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKGl0bSk7XHJcblxyXG4gICAgaWYgKGZsZCA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT5mbGQuZ2V0VGFzaygpO1xyXG4gICAgbGV0IHZlZV9pZHg6IG51bWJlciA9IGZsZC5nZXRJZCgpICsgMTtcclxuXHJcbiAgICBsZXQgZXhwcl82NDogU29ydCA9IG5ldyBTb3J0KCk7XHJcblxyXG4gICAgZXhwcl82NC5mbGRJZHggPSB2ZWVfaWR4O1xyXG4gICAgZXhwcl82NC5kaXIgPSBkaXIuQm9vbFZhbDtcclxuICAgIGxldCBzb3J0OiBTb3J0ID0gZXhwcl82NDtcclxuXHJcbiAgICBsZXQgY29tbWFuZDogSUNsaWVudENvbW1hbmQgPSBDb21tYW5kRmFjdG9yeS5DcmVhdGVBZGRVc2VyU29ydERhdGF2aWV3Q29tbWFuZCh0YXNrLmdldFRhc2tUYWcoKSwgc29ydCk7XHJcbiAgICBhd2FpdCB0YXNrLkRhdGF2aWV3TWFuYWdlci5FeGVjdXRlKGNvbW1hbmQpO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRoaXMgZnVuY3Rpb24gYWRkcyBVc2VyIFNvcnQgb24gdGFzay5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgYWRkX3J0X3JhbmdlcyhFeHBfcGFyYW1zOiBFeHBWYWxbXSwgbG9jYXRlOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgdmFybnVtOiBFeHBWYWwgPSBFeHBfcGFyYW1zWzBdO1xyXG4gICAgbGV0IG1pbjogRXhwVmFsID0gRXhwX3BhcmFtc1sxXTtcclxuXHJcbiAgICBpZiAodmFybnVtLk1nTnVtVmFsID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IGl0bTogbnVtYmVyID0gdmFybnVtLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuXHJcbiAgICBpZiAoaXRtID09PSAwKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IGZsZDogRmllbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayhpdG0pO1xyXG5cclxuICAgIGlmIChmbGQgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+ZmxkLmdldFRhc2soKTtcclxuICAgIGxldCB2ZWVfaWR4OiBudW1iZXIgPSBmbGQuZ2V0SWQoKSArIDE7XHJcblxyXG4gICAgbGV0IGV4cHJfNzg6IFVzZXJSYW5nZSA9IG5ldyBVc2VyUmFuZ2UoKTtcclxuICAgIGV4cHJfNzgudmVlSWR4ID0gPG51bWJlcj52ZWVfaWR4O1xyXG5cclxuICAgIGxldCBybmc6IFVzZXJSYW5nZSA9IGV4cHJfNzg7XHJcblxyXG4gICAgaWYgKG1pbi5Jc051bGwpXHJcbiAgICAgIHJuZy5udWxsTWluID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXJuZy5udWxsTWluICYmIChtaW4uQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCBtaW4uQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSAmJiBtaW4uU3RyVmFsLmxlbmd0aCA9PT0gMClcclxuICAgICAgcm5nLmRpc2NhcmRNaW4gPSB0cnVlO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoIXJuZy5udWxsTWluKSB7XHJcbiAgICAgICAgaWYgKCFTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUaGVTYW1lVHlwZShmbGQuZ2V0VHlwZSgpLCBtaW4uQXR0cikpXHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suU3RvcmFnZUZsZEFscGhhVW5pY29kZU9yQmxvYihmbGQuZ2V0VHlwZSgpLCBtaW4uQXR0cikpXHJcbiAgICAgICAgICB0aGlzLkNvbnZlcnRFeHBWYWwobWluLCBmbGQuZ2V0VHlwZSgpKTtcclxuXHJcbiAgICAgICAgcm5nLm1pbiA9IG1pbi5Ub01nVmFsKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChFeHBfcGFyYW1zLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICBsZXQgbWF4OiBFeHBWYWwgPSBFeHBfcGFyYW1zWzJdO1xyXG4gICAgICBpZiAobWF4LklzTnVsbClcclxuICAgICAgICBybmcubnVsbE1heCA9IHRydWU7XHJcblxyXG4gICAgICBpZiAoIXJuZy5udWxsTWF4ICYmIChtYXguQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCBtYXguQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSAmJiBtYXguU3RyVmFsLmxlbmd0aCA9PT0gMClcclxuICAgICAgICBybmcuZGlzY2FyZE1heCA9IHRydWU7XHJcblxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoIXJuZy5udWxsTWF4KSB7XHJcbiAgICAgICAgICBpZiAoIVN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1RoZVNhbWVUeXBlKGZsZC5nZXRUeXBlKCksIG1heC5BdHRyKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suU3RvcmFnZUZsZEFscGhhVW5pY29kZU9yQmxvYihmbGQuZ2V0VHlwZSgpLCBtYXguQXR0cikpXHJcbiAgICAgICAgICAgIHRoaXMuQ29udmVydEV4cFZhbChtYXgsIGZsZC5nZXRUeXBlKCkpO1xyXG5cclxuICAgICAgICAgIHJuZy5tYXggPSBtYXguVG9NZ1ZhbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlXHJcbiAgICAgIHJuZy5kaXNjYXJkTWF4ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXJuZy5kaXNjYXJkTWluIHx8ICFybmcuZGlzY2FyZE1heCkge1xyXG4gICAgICBpZiAobG9jYXRlKSB7XHJcbiAgICAgICAgbGV0IGNvbW1hbmQ6IElDbGllbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlQWRkVXNlckxvY2F0ZURhdGF2aWV3Q29tbWFuZCh0YXNrLmdldFRhc2tUYWcoKSwgcm5nKTtcclxuICAgICAgICBhd2FpdCB0YXNrLkRhdGF2aWV3TWFuYWdlci5FeGVjdXRlKGNvbW1hbmQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBjb21tYW5kMjogSUNsaWVudENvbW1hbmQgPSBDb21tYW5kRmFjdG9yeS5DcmVhdGVBZGRVc2VyUmFuZ2VEYXRhdmlld0NvbW1hbmQodGFzay5nZXRUYXNrVGFnKCksIHJuZyk7XHJcbiAgICAgICAgYXdhaXQgdGFzay5EYXRhdmlld01hbmFnZXIuRXhlY3V0ZShjb21tYW5kMik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgYSBjb250ZXh0IHZhbHVlIChHZXRQYXJhbSlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5hbWVcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9nZXRQYXJhbShyZXNWYWw6IEV4cFZhbCwgbmFtZTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQoIW5hbWUuSXNOdWxsICYmIG5hbWUuU3RyVmFsICE9PSBudWxsKTtcclxuXHJcbiAgICBsZXQgZXhwVmFsOiBFeHBWYWwgPSBHbG9iYWxQYXJhbXMuSW5zdGFuY2UuZ2V0KG5hbWUuU3RyVmFsKTtcclxuICAgIGlmIChleHBWYWwgIT09IG51bGwpXHJcbiAgICAgIHJlc1ZhbC5Db3B5KGV4cFZhbCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJlc1ZhbC5OdWxsaWZ5KCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNldCBhIGNvbnRleHQgdmFsdWUgKFNldFBhcmFtKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJuYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3NldFBhcmFtKHJlc1ZhbDogRXhwVmFsLCBuYW1lOiBFeHBWYWwsIHZhbHVlOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIERlYnVnLkFzc2VydCghbmFtZS5Jc051bGwgJiYgbmFtZS5TdHJWYWwgIT09IG51bGwpO1xyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgbGV0IGdsb2JhbFBhcmFtczogR2xvYmFsUGFyYW1zID0gR2xvYmFsUGFyYW1zLkluc3RhbmNlO1xyXG5cclxuICAgIGdsb2JhbFBhcmFtcy5zZXQobmFtZS5TdHJWYWwsIHZhbHVlKTtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgKElOSXB1dClcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInVwZGF0ZUluaVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX2luaXB1dChyZXNWYWw6IEV4cFZhbCwgdmFsdWU6IEV4cFZhbCwgdXBkYXRlSW5pOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBhd2FpdCBFbnZQYXJhbXNUYWJsZS5JbnN0YW5jZS5zZXQodmFsdWUuU3RyVmFsLCB1cGRhdGVJbmkuQm9vbFZhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlIChJTklnZXQpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm5hbWVcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9pbmlnZXQocmVzVmFsOiBFeHBWYWwsIG5hbWVWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IEVudlBhcmFtc1RhYmxlLkluc3RhbmNlLmdldChuYW1lVmFsLlN0clZhbCk7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlIGJ5IHNlY3Rpb24gbmFtZSBhbmQgbG9jYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibmFtZVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2luaWdldGxuKHJlc1ZhbDogRXhwVmFsLCBzZWN0aW9uVmFsOiBFeHBWYWwsIG51bWJlclZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gRW52UGFyYW1zVGFibGUuSW5zdGFuY2UuZ2V0bG4oc2VjdGlvblZhbC5TdHJWYWwsIG51bWJlclZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEV2YWx1YXRlcyBNT0RFIGxpdGVyYWxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvZGVzXCI+Y29kZXMgc3RyaW5nIGdpdmVuIGluIE1PREUgbGl0ZXJhbDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX20ocmVzVmFsOiBFeHBWYWwsIGNvZGVzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgY29kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IG1vZGU6IHN0cmluZyA9IHRoaXMuY3N0X2NvZGVfdHJhbnNfYnVmKCdPJywgJ01DREVMUktTT04gJywgY29kZXMuY2hhckF0KGkpLCBNc2dJbnRlcmZhY2UuRVhQVEFCX1RTS19NT0RFX1JUKTtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IHJlc1ZhbC5TdHJWYWwgKyBtb2RlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyYW5zbGF0ZSBjb2RlcyBhY2NvcmRpbmcgdG8gZ2l2ZW4gc3RyaW5nIGFuZCB2aWNlIHZlcnNhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm9wclwiPklucHV0L091dHB1dDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpbnRTdHJcIj5MaXN0IG9mIGludGVybmFsIHZhbHVlcyB1c2VkIGJ5IG1hZ2ljPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvZGVcIj5JbnRlcm5hbC9leHRlcm5hbCBjb2RlIG9mIG1hZ2ljPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0cklkXCI+aW5kZXggb2Ygc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgY3N0X2NvZGVfdHJhbnNfYnVmKG9wcjogc3RyaW5nLCBpbnRTdHI6IFN0cmluZywgY29kZTogc3RyaW5nLCBzdHJJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgY29uc3RTdHI6IHN0cmluZyA9IExhbmd1YWdlRGF0YS5JbnN0YW5jZS5nZXRDb25zdE1lc3NhZ2Uoc3RySWQpO1xyXG4gICAgbGV0IHRva2VuczogQXJyYXlfRW51bWVyYXRvcjxzdHJpbmc+ID0gbmV3IEFycmF5X0VudW1lcmF0b3IoU3RyVXRpbC50b2tlbml6ZShjb25zdFN0ciwgJywnKSk7XHJcbiAgICBsZXQgdG9rZW46IHN0cmluZztcclxuICAgIGxldCByZXNWYWw6IHN0cmluZyA9ICdcXDAnO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IGludFN0ci5sZW5ndGggJiYgdG9rZW5zLk1vdmVOZXh0KCk7IGkrKykge1xyXG4gICAgICB0b2tlbiA9IDxzdHJpbmc+dG9rZW5zLkN1cnJlbnQ7XHJcbiAgICAgIGxldCBvZnM6IG51bWJlciA9IHRva2VuLmluZGV4T2YoJyYnKTtcclxuXHJcbiAgICAgIC8vIGlmICcmJyBpcyBmb3VuZCwgbW92ZSB0byBjaGFyYWN0ZXIgbmV4dCB0byAnJidcclxuICAgICAgLy8gZWxzZSBtb3ZlIHRvIGZpcnN0IGNoYXJhY3RlclxyXG4gICAgICBvZnMrKztcclxuICAgICAgbGV0IGN1cnJDb2RlOiBzdHJpbmcgPSB0b2tlbi5jaGFyQXQob2ZzKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICBpZiAob3ByID09PSAnSScpIHtcclxuICAgICAgICBpZiAoY29kZSA9PT0gY3VyckNvZGUpIHtcclxuICAgICAgICAgIHJlc1ZhbCA9IGludFN0ci5jaGFyQXQoaSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gb3ByID09ICdPJ1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoY29kZSA9PT0gaW50U3RyLmNoYXJBdChpKSkge1xyXG4gICAgICAgICAgcmVzVmFsID0gY3VyckNvZGU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXNWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGltcGxlbWVudGluZyBFeHBDYWxjIC0gZ2V0IGluZGV4IG9mIGV4cHJlc3Npb24sIGZpbmQgdGhlIGV4cHJlc3Npb24gYW5kIGV2YWx1YXRlIGl0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImV4cFZhbFwiPiBleHByZXNzaW9uIGluZGV4IDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX2V4cGNhbGMocmVzVmFsOiBFeHBWYWwsIGV4cFZhbDogRXhwVmFsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXNWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICAgIC8vIEF2b2lkIG92ZXIgNTAgcmVjdXJzaXZlIGNhbGxzXHJcbiAgICBpZiAoRXhwcmVzc2lvbkV2YWx1YXRvci5fcmVjdXJzaXZlRXhwQ2FsY0NvdW50IDwgNTApIHtcclxuICAgICAgRXhwcmVzc2lvbkV2YWx1YXRvci5fcmVjdXJzaXZlRXhwQ2FsY0NvdW50Kys7XHJcbiAgICAgIC8vIGdldCBleHByZXNzaW9uIGZyb20gaWR4IGFuZCBldmFsdWF0ZSBpdC4gcGFzcyBcIm5vbmVcIiBmb3IgdHlwZSwgc28gd2UgZ2V0IHdoYXRldmVyIHR5cGUgdGhlIHNlcnZlciBzZW50IGJhY2tcclxuICAgICAgbGV0IGV4cFZhbDI6IEV4cFZhbCA9IGF3YWl0ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRFeHBCeUlkKGV4cFZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCkpLmV2YWx1YXRlV2l0aFJlc1R5cGUoU3RvcmFnZUF0dHJpYnV0ZS5OT05FKTtcclxuICAgICAgRXhwcmVzc2lvbkV2YWx1YXRvci5fcmVjdXJzaXZlRXhwQ2FsY0NvdW50LS07XHJcblxyXG4gICAgICBpZiAoZXhwVmFsMiAhPT0gbnVsbClcclxuICAgICAgICByZXNWYWwuQ29weShleHBWYWwyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaW1wbGVtZW50YXRpb24gb2YgQ25kUmFuZ2UgZnVuY3Rpb246IElmIGNvbmRpdGlvbiBpcyB0cnVlLCB1c2UgdGhlIDJuZCBwYXJhbWV0ZXIgYXMgcmFuZ2UuIGlmIG5vdCAtXHJcbiAgLy8vIG1hcmsgdGhlIHJlc3VsdCBhcyBudWxsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbDFcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbDJcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9DbmRSYW5nZShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLkJvb2xWYWwpXHJcbiAgICAgIHJlc1ZhbC5Db3B5KHZhbDIpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXNWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBleHRlcm5hbCB0YXNrIHR5cGUgb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF90YXNrVHlwZShyZXNWYWw6IEV4cFZhbCwgUGFyZW50OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBpUGFyZW50OiBudW1iZXIgPSBQYXJlbnQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChpUGFyZW50ID49IDAgJiYgaVBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IGlQYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcbiAgICAgIGlmICh0YXNrICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9ICh0YXNrLmlzTWFpblByb2coKSA/ICdNVycgOiAnVycpO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gJyAnO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGdW5jdGlvbiBnZXR0aW5nIHRoZSB0ZXJtaW5hbCBudW1iZXIuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF90ZXJtaW5hbChyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHRlcm1pbmFsOiBudW1iZXIgPSBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRUZXJtaW5hbCgpO1xyXG5cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgdGVybWluYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBwcm9qZWN0J3MgZGlyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9wcm9qZWN0ZGlyKHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gRW52aXJvbm1lbnQuSW5zdGFuY2UuZ2V0UHJvakRpcih0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0aGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIGJsb2IgaXMgdmFsaWQgdmVjdG9yIGkuZS4gaWYgdGhlIGJsb2IgaXMgaW4gdmVjdG9yJ3MgZmxhdHRlbiBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmVjXCI+dGhlIGJsb2IgdG8gYmUgY2hlY2tlZDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIHZhbGlkIHZlY3RvcjwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBJc1ZhbGlkVmVjdG9yKHZlYzogRXhwVmFsKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmVjICE9PSBudWxsICYmIHZlYy5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SICYmIFZlY3RvclR5cGUudmFsaWRhdGVCbG9iQ29udGVudHModmVjLlN0clZhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYXR0cmlidXRlIGFjY29yZGluZyB0byBtYWdpYywgZm9yIGVnICdMJyBpcyByZXR1cm5lZCBmb3IgYm9vbGVhbi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0b3JhZ2VBdHRyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+YXR0cmlidXRlIGNoYXJhY3RlciBjb3JyZXNwb25kaW5nIHRvIHN0b3JhZ2UgYXR0cmlidXRlLjwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBHZXRBdHRyaWJ1dGVDaGFyKHN0b3JhZ2VBdHRyOiBTdG9yYWdlQXR0cmlidXRlKTogc3RyaW5nIHtcclxuICAgIGxldCBhdHRyOiBzdHJpbmcgPSA8c3RyaW5nPnN0b3JhZ2VBdHRyO1xyXG4gICAgc3dpdGNoIChzdG9yYWdlQXR0cikge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICBhdHRyID0gJ0InO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgYXR0ciA9ICdMJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXR0cjtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBNb3ZlcyB0aGUgY2FyZXQgdG8gc3BlY2lmaWVkIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImN0cmxUYXNrXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjdHJsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyb3dOb1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBIYW5kbGVDb250cm9sR290byhjdHJsVGFzazogSVRhc2ssIGN0cmw6IE1nQ29udHJvbEJhc2UsIHJvd05vOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT5jdHJsVGFzaztcclxuICAgIGlmIChjdHJsICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBkdjogRGF0YVZpZXcgPSA8RGF0YVZpZXc+dGFzay5EYXRhVmlldztcclxuICAgICAgbGV0IHRDdHJsOiBNZ0NvbnRyb2wgPSA8TWdDb250cm9sPmN0cmw7XHJcbiAgICAgIGxldCB3YW50ZWRMaW5lOiBudW1iZXIgPSB0YXNrLmdldEZvcm0oKS5EaXNwbGF5TGluZTsgLy8gMC1iYXNlZCByZWNvcmQgaW5kZXhcclxuXHJcbiAgICAgIC8vIHZhbGlkYXRlIHNwZWNpZmllZCByb3dcclxuICAgICAgaWYgKGN0cmwuSXNSZXBlYXRhYmxlICYmIHJvd05vID4gMCkge1xyXG4gICAgICAgIHRhc2suZ2V0Rm9ybSgpLmdldFRvcEluZGV4RnJvbUdVSSgpO1xyXG4gICAgICAgIGxldCB0b3BSZWNJZHg6IG51bWJlciA9IGR2LmdldFRvcFJlY0lkeCgpO1xyXG4gICAgICAgIHdhbnRlZExpbmUgPSB0b3BSZWNJZHggKyByb3dObyAtIDE7XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSByZWNvcmQgaXMgZXhpc3QgaW4gdGhlIGN1cnJlbnQgcGFnZVxyXG4gICAgICAgIGlmICh3YW50ZWRMaW5lIC0gdG9wUmVjSWR4IC0gMSA+PSB0YXNrLmdldEZvcm0oKS5nZXRSb3dzSW5QYWdlKCkpXHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGZvciBpbnZhbGlkIHJlY29yZCBpbmRleFxyXG4gICAgICAgIGlmICghdGFzay5nZXRGb3JtKCkuSXNWYWxpZFJvdyh3YW50ZWRMaW5lKSlcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRDdHJsLmlzVmlzaWJsZSgpKSB7XHJcbiAgICAgICAgaWYgKHRDdHJsLmlzU3ViZm9ybSgpKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEZWZlY3QgMTUyMzE1OiBQcm9ibGVtOiBXaGVuIGNsaWNrZWQgb24gQnV0dG9uIGFuZCBjbGlja2VkIG9uIGVkaXQgd2hpY2ggaXMgZ2VuZXJhdGVkIGFzIExhYmVsIG9uIFRhYmxlLFxyXG4gICAgICAgIC8vIENQICYgQ1Mgb2YgRWRpdCBpcyBjYWxsZWQuIFRoaXMgaXMgYmVjYXVzZSB3ZSBlZGl0IHdoaWNoIGlzIExhYmVsIGlzIG5vbi1mb2N1c2FibGUgYW4gaGVuY2UgYnV0dG9uIGdldHMgZm9jdXMgYmFjay5cclxuICAgICAgICAvLyBQb3NzaWJsZSBzb2x1dGlvbnM6XHJcblxyXG4gICAgICAgIC8vIDEpIEdvdG8gRWRpdGluZyBtb2RlIHdoZW4gb24gVGFibGVDb250cm9sIHdoZW4gY29udHJvbEdvdG8gaXMgY2FsbGVkIHRoZW4gaGFuZGxlIGNvbnRyb2xHb3RvIHN0dWZmLiBUaGlzIHdpbGwgbmVlZCBzb21lIHJlc2VhcmNoL2JpZ2dlciBjaGFuZ2VzLlxyXG4gICAgICAgIC8vIDIpIEp1c3QgcGFyayBvbiBSb3cgb24gd2hpY2ggQ29udHJvbEdvdG8gaXMgY2FsbGVkLiBUaGlzIG1lYW5zIGl0IHdpbGwgd29yayBwYXJ0aWFsbHkgaS5lLiBjYWxsIFJQIGFuZCBub3QgQ1Agb2YgY29udHJvbCBvbiB3aGljaCBDb250cm9sR290byBpcyBjYWxsZWQuXHJcbiAgICAgICAgLy8gMykgTWF5YmUoIG5vdCBpbiB0aGlzIHZlcnNpb24pIHdlIHNob3VsZCBpbnRyb2R1Y2Ug4oCcZ290b0xpbmXigJ0gLiBUaGVuIHVzZXIgY2FuIGRvIHRoaXMgYW5kIGhhdmUgZnVsbCBjb250cm9sOlxyXG4gICAgICAgIC8vICAgIEdvdG9MaW5lKFgpXHJcbiAgICAgICAgLy8gICAgUmFpc2UgUm93RWRpdGluZ1xyXG4gICAgICAgIC8vICAgIEdvdG9Db250cm9sKFkpXHJcbiAgICAgICAgLy8gT3B0aW9uIDIgd2FzIHNlbGVjdGVkIGJ5IFBNLiBJdCB3aWxsIGFwcGx5IG9ubHkgd2hlbiByb3cgaXMgbm90IGluIGVkaXRpbmcgbW9kZS5cclxuICAgICAgICBsZXQgZnJtOiBNZ0Zvcm0gPSA8TWdGb3JtPnRhc2suZ2V0Rm9ybSgpO1xyXG4gICAgICAgIGxldCBpc1Jvd0VkaXRpbmcgPSBmcm0uZ2V0SXNSb3dFZGl0aW5nRnJvbUd1aSh3YW50ZWRMaW5lKTtcclxuICAgICAgICBpZiAodEN0cmwuaXNSZXBlYXRhYmxlKCkgJiYgIWlzUm93RWRpdGluZykge1xyXG4gICAgICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuYWRkR3VpVHJpZ2dlcmVkRXZlbnRXaXRoVGFza0FuZENvZGVBbmRMaW5lKHRhc2ssIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRUNfUFJFRklYLCB3YW50ZWRMaW5lKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdVbmFibGUgdG8gcGFyayBvbiBjb250cm9sOiAnICsgdEN0cmwuTmFtZSArICcgYXMgcm93IGlzIG5vdCBpbiBlZGl0aW5nIG1vZGUnKTtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBqdW1wIHRvIHRoZSBjb250cm9sXHJcbiAgICAgICAgICBsZXQgcnRFdnQ6IFJ1blRpbWVFdmVudCA9IG5ldyBSdW5UaW1lRXZlbnQodEN0cmwsIHdhbnRlZExpbmUpO1xyXG4gICAgICAgICAgcnRFdnQuc2V0SW50ZXJuYWwoSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfRk9DVVMpO1xyXG4gICAgICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuYWRkVG9UYWlsKHJ0RXZ0KTtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vIHNldHMgdGhlIHN0YXR1cyBiYXIgdGV4dCB3aXRoIHRoZSBnaXZlbiB0ZXh0IGFuZFxyXG4gIC8vLyBzZXRzIHRoZSByZXN1bHQgd2l0aCB0aGUgbGFzdCB0ZXh0IHRoYXQgd2FzIHNldCB0byB0aGUgc3RhdHVzIGJhciBieSB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+bGFzdCB0ZXh0IG9mIHN0YXR1cyBiYXI8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RhdHVzQmFyVGV4dFwiPnRoZSB0ZXh0IHRvIGJlIHNldCBhdCBzdGF0dXMgYmFyPC9wYXJhbT5cclxuICBldmFsX29wX3NldF90aXRsZShyZXNWYWw6IEV4cFZhbCwgdGl0bGU6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcblxyXG4gICAgaWYgKCEodGl0bGUuQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSAmJiB0aXRsZS5BdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpKSB7XHJcbiAgICAgIGlmICghdGl0bGUuSXNOdWxsKSB7XHJcbiAgICAgICAgbGV0IHRleHQ6IHN0cmluZyA9IHRpdGxlLlN0clZhbDtcclxuICAgICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHRoaXMuRXhwVGFzay5HZXRDb250ZXh0VGFzaygpO1xyXG5cclxuICAgICAgICAvLyBJbiBjYXNlIG9mIG5vbiBpbnRlcmFjdGl2ZSB0YXNrcywgaXQgaXMgcG9zc2libGUgdGhhdCB0YXNrIGhhcyBvcGVuIHdpbmRvdyA9IE5vLCBTbyBkaXNwbGF5IHRoZSBzdGF0dXMgYmFyIG1zZyBvbiBmcmFtZSB3aW5kb3cuXHJcbiAgICAgICAgaWYgKHRhc2suZ2V0VG9wTW9zdEZvcm0oKSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGFzay5nZXRUb3BNb3N0Rm9ybSgpLnNldFRpdGxlKHRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vIGdldHMgdGhlIGlzUm93IGVkaXRpbmcgb24gdGhlIGN1cnJlbnQgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZXZhbF9vcF9pc19yb3dfZWRpdGluZyhyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgaXNSb3dFZGl0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGFyZW50OiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgocGFyZW50ID49IDAgJiYgcGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgcGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2socGFyZW50KTtcclxuICAgICAgbGV0IG15Zm9ybTogTWdGb3JtID0gPE1nRm9ybT50c2suZ2V0Rm9ybSgpO1xyXG4gICAgICBpc1Jvd0VkaXRpbmcgPSBteWZvcm0uZ2V0SXNSb3dFZGl0aW5nRnJvbUd1aShteWZvcm0uRGlzcGxheUxpbmUpO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBpc1Jvd0VkaXRpbmc7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gRGlzY29ubmVjdCB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiBvZiBnaXZlbiBkYXRhYmFzZSBuYW1lLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsXCI+IERhdGFiYXNlIG5hbWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPlJldHVybiBzdGF0dXMgb2YgZGlzY29ubmVjdCBvcGVyYXRpb248L3BhcmFtPlxyXG4gIC8vIHByaXZhdGUgdm9pZCBleHBfb3BfQ2xpZW50RGJEaXNjb25uZWN0KEV4cFZhbCB2YWwsIEV4cFZhbCByZXNWYWwpXHJcbiAgLy8ge1xyXG4gIC8vICAgc3RyaW5nIGRhdGFiYXNlTmFtZSA9IHZhbC5TdHJWYWw7XHJcbiAgLy8gICBUYXNrQmFzZSB0YXNrID0gKFRhc2tCYXNlKUV4cFRhc2s7XHJcblxyXG4gIC8vICAgSUNsaWVudENvbW1hbmQgY29tbWFuZCA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZUNsaWVudERiRGlzY29ubmVjdENvbW1hbmQoZGF0YWJhc2VOYW1lKTtcclxuICAvLyAgIFJldHVyblJlc3VsdCByZXN1bHQgPSB0YXNrLkRhdGF2aWV3TWFuYWdlci5Mb2NhbERhdGF2aWV3TWFuYWdlci5FeGVjdXRlKGNvbW1hbmQpO1xyXG5cclxuICAvLyAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gIC8vICAgcmVzVmFsLkJvb2xWYWwgPSByZXN1bHQuU3VjY2VzcztcclxuICAvLyB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEV4ZWN1dGUgQ29udHJvbFNlbGVjdFByb2dyYW0oKSBmdW5jdG9uLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZXhwVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIGFzeW5jIGV2YWxfb3BfY29udHJvbF9zZWxlY3RfcHJvZ3JhbShleHBWYWw6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBjb250cm9sSUQ6IG51bWJlciA9IGV4cFZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgcGFyZW50OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGxldCByZWZQYXJlbnQ6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW0ocGFyZW50KTtcclxuICAgIGxldCBtZ0NvbnRyb2w6IE1nQ29udHJvbCA9ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpLkdldENvbnRyb2xGcm9tQ29udHJvbElEKGNvbnRyb2xJRCAtIDEsIHJlZlBhcmVudCk7XHJcbiAgICBwYXJlbnQgPSByZWZQYXJlbnQudmFsdWU7XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuXHJcbiAgICAvLyBJZiBjb250cm9sIGhhcyBzZWxlY3QgcHJvZ3JhbSBwcm9wZXJ0eS5cclxuICAgIGlmIChtZ0NvbnRyb2wgIT09IG51bGwgJiYgbWdDb250cm9sLkhhc1NlbGVjdFByb2dyYW0oKSkge1xyXG4gICAgICBsZXQgc2VsZWN0UHJvZ1Byb3A6IFByb3BlcnR5ID0gbWdDb250cm9sLmdldFByb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VMRUNUX1BST0dSQU0pO1xyXG4gICAgICBsZXQgcmVhbEluZGV4OiBudW1iZXIgPSBOTnVtYmVyLlBhcnNlKGF3YWl0IHNlbGVjdFByb2dQcm9wLmdldFZhbHVlKCkpO1xyXG4gICAgICBsZXQgcHJvZ3JhbUluZGV4OiBudW1iZXIgPSAwO1xyXG4gICAgICBpZiAocmVhbEluZGV4ID4gMCkge1xyXG4gICAgICAgIGlmIChwYXJlbnQgPiAwKVxyXG4gICAgICAgICAgcHJvZ3JhbUluZGV4ID0gPG51bWJlcj5yZWFsSW5kZXggKyA8bnVtYmVyPnBhcmVudCAvIDEwMDtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBwcm9ncmFtSW5kZXggPSA8bnVtYmVyPnJlYWxJbmRleDtcclxuICAgICAgfVxyXG4gICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZSg8bnVtYmVyPnByb2dyYW1JbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBldmFsX29wX0NhbGxKUyh0YXNrOiBJVGFzaywgbWV0aG9kTmFtZTogc3RyaW5nLCBleHBWYWw6IEV4cFZhbFtdLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgaWYoKDxUYXNrQmFzZT50YXNrKS5pc01haW5Qcm9nKCkpXHJcbiAgICB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJDYWxsSlMgY2Fubm90IGJlIHVzZWQgaW4gTWFpbiBQcm9ncmFtXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZm9ybTogTWdGb3JtID0gPE1nRm9ybT4oPFRhc2tCYXNlPnRhc2spLmdldEZvcm0oKTtcclxuICAgIGxldCBhcmdzID0gdGhpcy5wYXJhbXMyYXJndW1lbnRzKGV4cFZhbCwgMCwgZXhwVmFsLmxlbmd0aCk7XHJcblxyXG4gICAgaWYoIWlzTnVsbE9yVW5kZWZpbmVkKGFyZ3MpKSB7XHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSBDb21tYW5kcy5hZGRDYWxsSlMoZm9ybSwgZm9ybS5VbmlxdWVOYW1lLCBtZXRob2ROYW1lLCBhcmdzKTtcclxuICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGV2YWxfb3Bfc2V0X2Nvb2tpZShjb29raWVOYW1lOiBzdHJpbmcsIGV4cFZhbDogRXhwVmFsW10sIHJlc1ZhbDogRXhwVmFsKVxyXG4gIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG5cclxuICAgIGxldCBhcmdzID0gdGhpcy5wYXJhbXMyYXJndW1lbnRzKGV4cFZhbCwgMCwgZXhwVmFsLmxlbmd0aCk7XHJcbiAgICB2YXIgZXhwaXJlc0RhdGUsIHBhdGgsIGRvbWFpbiwgc2VjdXJlLCBzYW1lU2l0ZTtcclxuXHJcbiAgICBleHBpcmVzRGF0ZSA9IGFyZ3NbMV07XHJcbiAgICBsZXQgZXhwaXJlc1RpbWUgPSBhcmdzWzJdO1xyXG4gICAgbGV0IG5hdGl2ZUR0OiBEYXRlO1xyXG4gICAgaWYoZXhwaXJlc0RhdGUpXHJcbiAgICB7XHJcblxyXG4gICAgICBsZXQgYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZ2V0TmV3RGF0ZUJyZWFrUGFyYW1zKCk7XHJcbiAgICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZXhwaXJlc0RhdGUsIGZhbHNlLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuXHJcblxyXG4gICAgICBpZiAoYnJlYWtQYXJhbXMueWVhciA9PSAwICYmIGJyZWFrUGFyYW1zLm1vbnRoID09IDAgJiYgYnJlYWtQYXJhbXMuZGF5ID09IDApXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIG5hdGl2ZUR0ID0gbmV3IERhdGUoYnJlYWtQYXJhbXMueWVhciwgYnJlYWtQYXJhbXMubW9udGggLSAxLCBicmVha1BhcmFtcy5kYXkpO1xyXG4gICAgICAvLyBnZXQgdGltZSBmcm9tIG1hZ2ljIG51bWJlclxyXG5cclxuICAgICAgaWYoZXhwaXJlc1RpbWUpIHtcclxuICAgICAgICBsZXQgdGltZUJyZWFrUGFyYW1zOiBUaW1lQnJlYWtQYXJhbXMgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldE5ld1RpbWVCcmVha1BhcmFtcygpO1xyXG4gICAgICAgIERpc3BsYXlDb252ZXJ0b3IudGltZV9icmVhayh0aW1lQnJlYWtQYXJhbXMsIGV4cGlyZXNUaW1lKTtcclxuXHJcbiAgICAgICAgbmF0aXZlRHQuc2V0SG91cnModGltZUJyZWFrUGFyYW1zLmhvdXIpO1xyXG4gICAgICAgIG5hdGl2ZUR0LnNldE1pbnV0ZXModGltZUJyZWFrUGFyYW1zLm1pbnV0ZSk7XHJcbiAgICAgICAgbmF0aXZlRHQuc2V0U2Vjb25kcyh0aW1lQnJlYWtQYXJhbXMuc2Vjb25kKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcGF0aCA9IGFyZ3NbM107XHJcbiAgICBkb21haW4gPSBhcmdzWzRdO1xyXG5cclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gIENvb2tpZVNlcnZpY2Uuc2V0Q29va2llKGNvb2tpZU5hbWUsIGFyZ3NbMF0sIG5hdGl2ZUR0LCBwYXRoLCBkb21haW4gLCBzZWN1cmUsIHNhbWVTaXRlKTtcclxuICB9XHJcblxyXG4gIGV2YWxfb3BfZ2V0X2Nvb2tpZShjb29raWVOYW1lOiBzdHJpbmcsIHJlc1ZhbDogRXhwVmFsKVxyXG4gIHtcclxuICAgIC8vIGdldCB0aGUgY29va2llIHZhbHVlXHJcbiAgICByZXNWYWwuU3RyVmFsID0gQ29va2llU2VydmljZS5nZXRDb29raWUoY29va2llTmFtZSk7XHJcbiAgfVxyXG5cclxuICBldmFsX29wX2RlbGV0ZV9jb29raWUoY29va2llTmFtZTogc3RyaW5nLCByZXNWYWw6IEV4cFZhbClcclxuICB7XHJcbiAgICAvLyBkZWxldGUgY29va2llc1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcblxyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBDb29raWVTZXJ2aWNlLmRlbGV0ZUNvb2tpZShjb29raWVOYW1lKTs7XHJcbiAgfVxyXG5cclxuICBldmFsX29wX3JvdXRlX2dldChyZXNWYWw6IEV4cFZhbClcclxuICB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgIHJlc1ZhbC5Jc051bGwgPSBmYWxzZTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBDb21tYW5kcy5nZXRMYXN0Um91dGUoKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHBhcmFtczJhcmd1bWVudHMoRXhwX3BhcmFtczogRXhwVmFsW10sIHN0YXJ0QXQ6IG51bWJlciwgY291bnQ6IG51bWJlcik6IEFycmF5PGFueT4ge1xyXG4gICAgbGV0IE5VTExfU1RSOiBzdHJpbmcgPSAnJztcclxuICAgIGxldCBhdHRyOiBBcnJheTxhbnk+ID0gbmV3IEFycmF5PGFueT4oKTtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSBzdGFydEF0OyBpIDwgc3RhcnRBdCArIGNvdW50OyBpKyspIHtcclxuICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKEV4cF9wYXJhbXNbaV0pKSB7XHJcbiAgICAgICAgYXR0ci5wdXNoKE5VTExfU1RSKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzd2l0Y2ggKEV4cF9wYXJhbXNbaV0uQXR0cikge1xyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgICAgIGlmIChFeHBfcGFyYW1zW2ldLlN0clZhbCAhPSBudWxsICYmIEV4cF9wYXJhbXNbaV0uU3RyVmFsLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgYXR0ci5wdXNoKEV4cF9wYXJhbXNbaV0uU3RyVmFsKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIGF0dHIucHVzaChOVUxMX1NUUik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgICAgICBhdHRyLnB1c2goRXhwX3BhcmFtc1tpXS5Cb29sVmFsID8gdHJ1ZSA6IGZhbHNlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICAgICAgYXR0ci5wdXNoKEV4cF9wYXJhbXNbaV0uTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgICAgIGF0dHIucHVzaChFeHBfcGFyYW1zW2ldLk1nTnVtVmFsLnRvX2RvdWJsZSgpKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgICAgICAgIGxldCBibG9iID0gRXhwX3BhcmFtc1tpXS5TdHJWYWw7XHJcbiAgICAgICAgICAgIGlmKCFpc051bGxPclVuZGVmaW5lZChibG9iKSkge1xyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb250ZW50VHlwZTogc3RyaW5nID0gQmxvYlR5cGUuZ2V0Q29udGVudFR5cGUoYmxvYik7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUgIT09IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9CSU5BUlkpIHtcclxuICAgICAgICAgICAgICAgICAgYXR0ci5wdXNoKEJsb2JUeXBlLmdldFN0cmluZyhibG9iKSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFcnJvclRvTG9nKCdBcmd1bWVudCAnICsgKGkgKyAxKSArICcgb2YgdHlwZSBCaW5hcnkgQmxvYiBpcyBub3Qgc3VwcG9ydGVkIGluIENhbGxKUycpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTpcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coJyBBcmd1bWVudCAnKyAoaSArIDEpKyAnIGlzIG5vdCBzdXBwb3J0ZWQgaW4gQ2FsbEpTJyApO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhdHRyO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgVGhpcyBleGNlcHRpb24gdXNlZCB3aGVuIGF0IGxlYXN0IG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgbnVsbFxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgTnVsbFZhbHVlRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHtcclxuICBwcml2YXRlIF9hdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FO1xyXG5cclxuICBjb25zdHJ1Y3RvcihhdHRyOiBTdG9yYWdlQXR0cmlidXRlKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5fYXR0ciA9IGF0dHI7XHJcbiAgICB0aGlzLm5hbWUgPSAnTnVsbFZhbHVlRXhjZXB0aW9uJztcclxuICB9XHJcblxyXG4gIGdldEF0dHIoKTogU3RvcmFnZUF0dHJpYnV0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXR0cjtcclxuICB9XHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgVGhpcyBjbGFzcyBpcyB1c2VkIGZvciB0cmFja2luZyB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudFxyXG4vLy8gICBleGVjdXRlZCBleHByZXNzaW9uLlxyXG4vLy8gICBleHBTdHJfIC0gaXMgdGhlIGN1cnJlbnQgc3RyaW5nIG9mIHRoZSBleHByZXNzaW9uIGJlaW5nIGV4ZWN1dGVkXHJcbi8vLyAgIHBvc0lkeF8gLSBpcyB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZXhwcmVzc2lvbiAod2hpbGUgZXhlY3V0aW5nIGl0KVxyXG4vLy8gICBUaGUgY2xhc3MgYWxzbyBwcm92aWRlcyBtZXRob2RzIGZvciBleHRyYWN0aW5nIHZhbHVlcy9vcGVyYXRvciBmcm9tXHJcbi8vLyAgIHRoZSBleHByZXNzaW9uIGJlaW5nIGV4ZWN1dGVkLlxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgRXhwU3RyVHJhY2tlciB7XHJcbiAgcHJpdmF0ZSBfZXhwQnl0ZXM6IEludDhBcnJheSA9IG51bGw7IC8vIEN1cnJlbnQgc3RyaW5nIG9mIHRoZSBleHByZXNzaW9uIGJlaW5nIGV4ZWN1dGVkXHJcbiAgcHJpdmF0ZSBfbG93SGlnaDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBfbnVsbEFyaXRobWV0aWM6IGJvb2xlYW4gPSBmYWxzZTsgLy8gdHJ1ZSwgaWYgdGFzayBvZiB0aGUgZXhwcmVzc2lvbiBoYXMgbnVsbCBhcml0aG1ldGljID09IG51bGxpZnk7XHJcbiAgcHJpdmF0ZSBfaXNOdWxsOiBib29sZWFuID0gZmFsc2U7IC8vIGlzIGV4cHJlc3Npb24gcmVzdWx0IE5VTExcclxuICBwcml2YXRlIF9wb3NJZHg6IG51bWJlciA9IDA7IC8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBleHByZXNzaW9uICh3aGlsZSBleGVjdXRpbmcgaXQpXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpbml0aWFsaXppbmcgdGhlIGNsYXNzIHdpdGggdGhlIGV4cHJlc3Npb24gdG8gYmUgZXhlY3V0ZWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNvbnN0cnVjdG9yKGV4cEJ5dGVzOiBJbnQ4QXJyYXksIG51bGxBcml0aG1ldGljOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9leHBCeXRlcyA9IG5ldyBJbnQ4QXJyYXkoZXhwQnl0ZXMubGVuZ3RoKTtcclxuICAgIGZvciAobGV0IF9haTogbnVtYmVyID0gMDsgX2FpIDwgdGhpcy5fZXhwQnl0ZXMubGVuZ3RoOyArK19haSlcclxuICAgICAgdGhpcy5fZXhwQnl0ZXNbX2FpXSA9IDA7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGV4cEJ5dGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICB0aGlzLl9leHBCeXRlc1tpXSA9IGV4cEJ5dGVzW2ldO1xyXG5cclxuICAgIHRoaXMuX251bGxBcml0aG1ldGljID0gbnVsbEFyaXRobWV0aWM7XHJcbiAgICB0aGlzLl9sb3dIaWdoID0gRW52aXJvbm1lbnQuSW5zdGFuY2UuZ2V0TG93SGlnaCgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCByZXN1bHQgdG8gYmUgTlVMTFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0TnVsbFJlc3VsdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9udWxsQXJpdGhtZXRpYylcclxuICAgICAgdGhpcy5faXNOdWxsID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXNldCByZXN1bHQgdG8gYmUgTlVMTFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcmVzZXROdWxsUmVzdWx0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX251bGxBcml0aG1ldGljKSB7XHJcbiAgICAgIHRoaXMuX2lzTnVsbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNoZWNrIGlmIHRoZSByZXN1bHQgbXVzdCBiZSBudWxsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpc051bGwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNOdWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhIG51bWJlciByZXByZXNlbnRlZCBpbiAxIGJ5dGUgZnJvbSB0aGUgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgbnVtYmVyXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBnZXQxQnl0ZU51bWJlcigpOiBudW1iZXIge1xyXG4gICAgbGV0IG51bTogbnVtYmVyID0gKHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKSA6ICgyNTYgKyA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IDE7XHJcblxyXG4gICAgcmV0dXJuIG51bTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgYSBudW1iZXIgcmVwcmVzZW50ZWQgaW4gMiBieXRlcyBmcm9tIHRoZSBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBudW1iZXJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGdldDJCeXRlTnVtYmVyKCk6IG51bWJlciB7XHJcbiAgICBsZXQgYzE6IG51bWJlciA9ICh0aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdID49IDApID8gKDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSkgOiAoMjU2ICsgPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKTtcclxuICAgIHRoaXMuX3Bvc0lkeCArPSAxO1xyXG5cclxuICAgIGxldCBjMjogbnVtYmVyID0gKHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKSA6ICgyNTYgKyA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IDE7XHJcblxyXG4gICAgbGV0IG51bTogbnVtYmVyID0gPG51bWJlcj4odGhpcy5fbG93SGlnaCA/IEV4cHJlc3Npb25FdmFsdWF0b3IuTUtfU0hSVCg8bnVtYmVyPmMyLCA8bnVtYmVyPmMxKSA6IEV4cHJlc3Npb25FdmFsdWF0b3IuTUtfU0hSVCg8bnVtYmVyPmMxLCA8bnVtYmVyPmMyKSk7XHJcbiAgICByZXR1cm4gbnVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhIG51bWJlciByZXByZXNlbnRlZCBpbiA0IGJ5dGUgZnJvbSB0aGUgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPnRoZSBudW1iZXI8L3JldHVybnM+XHJcbiAgZ2V0NEJ5dGVOdW1iZXIoKTogbnVtYmVyIHtcclxuICAgIGxldCBjNDogbnVtYmVyID0gKHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKSA6ICgyNTYgKyA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IDE7XHJcblxyXG4gICAgbGV0IGMzOiBudW1iZXIgPSAodGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSA+PSAwKSA/ICg8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pIDogKDI1NiArIDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSk7XHJcbiAgICB0aGlzLl9wb3NJZHggKz0gMTtcclxuXHJcbiAgICBsZXQgYzI6IG51bWJlciA9ICh0aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdID49IDApID8gKDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSkgOiAoMjU2ICsgPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKTtcclxuICAgIHRoaXMuX3Bvc0lkeCArPSAxO1xyXG5cclxuICAgIGxldCBjMTogbnVtYmVyID0gKHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKSA6ICgyNTYgKyA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IDE7XHJcblxyXG4gICAgbGV0IG51bTogbnVtYmVyID0gdGhpcy5fbG93SGlnaCA/IEV4cHJlc3Npb25FdmFsdWF0b3IuTUtfTE9ORyhjMSwgYzIsIGMzLCBjNCkgOiBFeHByZXNzaW9uRXZhbHVhdG9yLk1LX0xPTkcoYzQsIGMzLCBjMiwgYzEpO1xyXG4gICAgcmV0dXJuIG51bTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgYWxwaGEgc3RyaW5nIGZyb20gdGhlIGV4cHJlc3Npb24gYnkgaXRzIGxlbmd0aFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsZW5cIj4gICAgICAgIGxlbmd0aCBvZiBzdHJpbmcgdG8gZXh0cmFjdDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ1cGRhdGVJZHhcIj4gIHRoZSBjdXJyZW50IHBvc2l0aW9uIHdpbGwgYmUgaW5jcmVtZW50ZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaXNVbmljb2RlXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBudW1iZXI8L3JldHVybnM+XHJcbiAgZ2V0U3RyaW5nKGxlbjogbnVtYmVyLCB1cGRhdGVJZHg6IGJvb2xlYW4sIGlzVW5pY29kZTogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyOiBzdHJpbmcgPSAnJztcclxuICAgIGxldCBieXRlczogbnVtYmVyO1xyXG5cclxuICAgIGlmIChpc1VuaWNvZGUgPT09IGZhbHNlKSB7XHJcbiAgICAgIGJ5dGVzID0gbGVuO1xyXG4gICAgICBsZXQgdG1wQ2hhcjogc3RyaW5nW10gPSBuZXcgQXJyYXk8c3RyaW5nPih0aGlzLl9leHBCeXRlcy5sZW5ndGgpO1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5fZXhwQnl0ZXMubGVuZ3RoOyBpID0gaSArIDEpXHJcbiAgICAgICAgdG1wQ2hhcltpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fZXhwQnl0ZXNbaV0pO1xyXG5cclxuICAgICAgc3RyID0gTlN0cmluZy5Gcm9tQ2hhcnModG1wQ2hhciwgdGhpcy5fcG9zSWR4LCBsZW4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYnl0ZXMgPSBsZW4gKiAyO1xyXG5cclxuICAgICAgbGV0IHRtcDogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzKTtcclxuXHJcbiAgICAgIGxldCBpbmNyZW1lbnQ6IG51bWJlciA9ICghdGhpcy5fbG93SGlnaCkgPyBDb25zdEludGVyZmFjZS5CWVRFU19JTl9DSEFSIDogMTtcclxuXHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IHRoaXMuX3Bvc0lkeDsgaSA8IHRoaXMuX3Bvc0lkeCArIGJ5dGVzOyBpID0gaSArIGluY3JlbWVudCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fbG93SGlnaCkge1xyXG4gICAgICAgICAgdG1wW2kgLSB0aGlzLl9wb3NJZHhdID0gPG51bWJlcj50aGlzLl9leHBCeXRlc1tpICsgMV07XHJcbiAgICAgICAgICB0bXBbaSArIDEgLSB0aGlzLl9wb3NJZHhdID0gPG51bWJlcj50aGlzLl9leHBCeXRlc1tpXTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIHRtcFtpIC0gdGhpcy5fcG9zSWR4XSA9IDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbaV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgc3RyID0gRW5jb2RpbmcuVW5pY29kZS5HZXRTdHJpbmcodG1wLCAwLCB0bXAubGVuZ3RoKTtcclxuICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBFeGNlcHRpb24pIHtcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nKGV4KTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIHRocm93IGV4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodXBkYXRlSWR4KSB7XHJcbiAgICAgIHRoaXMuX3Bvc0lkeCArPSBieXRlcztcclxuICAgIH1cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICAvLy8gVG8gZW5oYW5jZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHJ1bnRpbWUgZXhwcmVzc2lvbiBldmFsdWF0b3IsXHJcbiAgLy8vIHRoZSBmdW5jdGlvbiBwb2ludGVyIHRvIHRoZSByZWxldmFudCBlbnRyeSBpbiB0aGUgRVhQX09QX1RBQiBpcyBzYXZlZFxyXG4gIC8vLyBpbiB0aGUgcG9saXNoZWQgZXhwcmVzc2lvbiBpbnN0ZWFkIG9mIHJlZmVyZW5jaW5nIGl0IGVhY2ggdGltZSB3ZSBuZWVkXHJcbiAgLy8vIGl0IGluIHJ1bnRpbWUuIEJ1dCBpbiBCcm93c2VyIENsaWVudCB3ZSBkbyBub3QgKHJhdGhlciB3ZSBjYW5ub3QpIHVzZVxyXG4gIC8vLyB0aGlzIGZ1bmN0aW9uIHBvaW50ZXIgYW5kIHNvIHdlIGhhdmUgdG8gc2tpcCBpdC5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVG8gZW5oYW5jZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHJ1bnRpbWUgZXhwcmVzc2lvbiBldmFsdWF0b3IsXHJcbiAgLy8vICAgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgdG8gdGhlIHJlbGV2YW50IGVudHJ5IGluIHRoZSBFWFBfT1BfVEFCIGlzIHNhdmVkXHJcbiAgLy8vICAgaW4gdGhlIHBvbGlzaGVkIGV4cHJlc3Npb24gaW5zdGVhZCBvZiByZWZlcmVuY2luZyBpdCBlYWNoIHRpbWUgd2UgbmVlZFxyXG4gIC8vLyAgIGl0IGluIHJ1bnRpbWUuIEJ1dCBpbiBCcm93c2VyIENsaWVudCB3ZSBkbyBub3QgKHJhdGhlciB3ZSBjYW5ub3QpIHVzZVxyXG4gIC8vLyAgIHRoaXMgZnVuY3Rpb24gcG9pbnRlciBhbmQgc28gd2UgaGF2ZSB0byBza2lwIGl0LlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBza2lwT3BGdW5jdGlvblB0cigpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Bvc0lkeCArPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUEVSX0ZVTkNfUFRSX0xFTjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgYW4gb3BlcmF0b3IgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgY3VycmVudCBvcGVyYXRvcjwvcmV0dXJucz5cclxuICBnZXRPcENvZGUoKTogbnVtYmVyIHtcclxuICAgIGxldCB0bXA6IG51bWJlcltdID0gW1xyXG4gICAgICB0aGlzLl9sb3dIaWdoID8gdGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSA6IHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeCArIDFdLCB0aGlzLl9sb3dIaWdoID8gdGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4ICsgMV0gOiB0aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdXHJcbiAgICBdO1xyXG4gICAgbGV0IG51bTogbnVtYmVyID0gKHRtcFsxXSA+PSAwKSA/ICg8bnVtYmVyPnRtcFsxXSkgOiAoMjU2ICsgPG51bWJlcj50bXBbMV0pO1xyXG4gICAgbnVtIDw8PSA4O1xyXG4gICAgbnVtID0gKG51bSB8ICgodG1wWzBdID49IDApID8gKDxudW1iZXI+dG1wWzBdKSA6ICgyNTYgKyA8bnVtYmVyPnRtcFswXSkpKTtcclxuICAgIHRoaXMuX3Bvc0lkeCArPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUEVSX0xFTjtcclxuXHJcbiAgICB0aGlzLnNraXBPcEZ1bmN0aW9uUHRyKCk7XHJcblxyXG4gICAgcmV0dXJuIG51bTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgYSB2YXJpYWJsZSBpZHggZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgdmFyaWFibGUgaWR4PC9yZXR1cm5zPlxyXG4gIGdldFZhcklkeCgpOiBudW1iZXIge1xyXG4gICAgbGV0IGZsaXA6IG51bWJlciA9IDA7XHJcblxyXG4gICAgaWYgKHRoaXMuX2xvd0hpZ2gpXHJcbiAgICAgIGZsaXAgPSAxIC0gZmxpcDtcclxuXHJcbiAgICAvLyB0aGUgZmlyc3QgYnl0ZSBpcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgaGVyZVxyXG4gICAgbGV0IG51bTogbnVtYmVyID0gKHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeCArIGZsaXBdID49IDApID8gKDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4ICsgZmxpcF0pIDogKDI1NiArIDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4ICsgZmxpcF0pO1xyXG4gICAgbnVtIDw8PSA4O1xyXG4gICAgZmxpcCA9IDEgLSBmbGlwO1xyXG4gICAgbnVtIHw9ICgodGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4ICsgZmxpcF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHggKyBmbGlwXSkgOiAoMjU2ICsgPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHggKyBmbGlwXSkpO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QRVJfTEVOO1xyXG5cclxuICAgIHJldHVybiBudW07XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBHZXQgYSBNYWdpYyBOdW1iZXIgZnJvbSB0aGUgZXhwcmVzc2lvblxyXG4vLy8gPC9zdW1tYXJ5PlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcImxlblwiPiBsZW5ndGggb2YgdGhlIG1hZ2ljIG51bWJlciB3aXRoaW4gdGhlIGV4cHJlc3Npb248L3BhcmFtPlxyXG4vLy8gPHBhcmFtIG5hbWUgPSBcInVwZGF0ZUlkeFwiPiAgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2lsbCBiZSBpbmNyZW1lbnRlZDwvcGFyYW0+XHJcbi8vLyA8cmV0dXJucz4gdGhlIE1hZ2ljIE51bWJlcjwvcmV0dXJucz5cclxuICBnZXRNYWdpY051bWJlcihsZW46IG51bWJlciwgdXBkYXRlSWR4OiBib29sZWFuKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IG1nTnVtOiBOVU1fVFlQRSA9IG5ldyBOVU1fVFlQRSh0aGlzLl9leHBCeXRlcywgdGhpcy5fcG9zSWR4LCBsZW4pO1xyXG4gICAgaWYgKHVwZGF0ZUlkeClcclxuICAgICAgdGhpcy5fcG9zSWR4ICs9IGxlbjtcclxuICAgIHJldHVybiBtZ051bTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTa2lwcyBhbiBvcGVyYXRvciB3aXRoaW4gYW4gZXhwcmVzc2lvbiBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBza2lwT3BlcmF0b3IoKTogdm9pZCB7XHJcbiAgICAgIGxldCBhcmdzUmVtYWluOiBudW1iZXIgPSAxO1xyXG4gICAgICBsZXQgZXhwRGVzYzogRXhwRGVzYztcclxuICAgICAgbGV0IGxlbjtcclxuXHJcbiAgICAgIHdoaWxlIChhcmdzUmVtYWluID4gMCkge1xyXG4gICAgICAgICAgYXJnc1JlbWFpbi0tO1xyXG4gICAgICAgICAgbGV0IG9wQ29kZTogbnVtYmVyID0gdGhpcy5nZXRPcENvZGUoKTtcclxuICAgICAgICAgIHN3aXRjaCAob3BDb2RlKSB7XHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgICAgICAvLyBTa2lwIFN0cmluZyB2YWx1ZVxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BOlxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSDpcclxuICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5nZXQ0Qnl0ZU51bWJlcigpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gKGxlbiAqIENvbnN0SW50ZXJmYWNlLkJZVEVTX0lOX0NIQVIpO1xyXG4gICAgICAgICAgICAgICAgICAvLyBzaW5jZSB0aGUgc2VydmVyIHNlbmRzIHVzIGJvdGggVW5pY29kZSBzdHJpbmcgQW5zaSBzdHJpbmcgZm9yXHJcbiAgICAgICAgICAgICAgICAgIC8vIGVhY2ggc3RyaW5nIGluIHRoZSBleHByZXNzaW9uLCBhbmQgdGhlIGNsaWVudCB1c2VzIG9ubHkgdW5pY29kZSxcclxuICAgICAgICAgICAgICAgICAgLy8gd2Ugd2lsbCBkaXJlZ2FyZCB0aGUgQW5zaSBzdHJpbmdcclxuICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5nZXQ0Qnl0ZU51bWJlcigpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gbGVuO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FWFRfQTpcclxuICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gbGVuO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgICAgICAvLyBTa2lwIE1hZ2ljIE51bWJlciB2YWx1ZVxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTjpcclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1Q6XHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EOlxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTTpcclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0s6XHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FOlxyXG4gICAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc0lkeCArPSBsZW47XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgIC8vIFNraXAgUHJvZyBhbmQgRmlsZSBsaXRlcmFscyB3aGljaCBhbHNvIGluY2x1ZGUgYSBjb21wb25lbnQgcmVmZXJlbmNlXHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9GOlxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUDpcclxuICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gbGVuO1xyXG4gICAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc0lkeCArPSBsZW47XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgIC8vIFNraXAgTG9naWNhbCBWYWx1ZVxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTDpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zSWR4ICs9IDI7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgIC8vIFNraXAgdmFyaWFibGVcclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1Y6XHJcbiAgICAgICAgICAgICAgICAgIC8vIGlmIHNvbWV0aGluZyB3cm9uZyB3aXRoIGVzY2FwZSB2YXJpYWJsZSwgY2hhbmdlIHRoaXMgbnVtYmVyLlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gKEV4cHJlc3Npb25FdmFsdWF0b3IuUEFSRU5UX0xFTiArIEV4cHJlc3Npb25FdmFsdWF0b3IuTE9OR19PQkpFQ1RfTEVOKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRk9STTpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zSWR4ICs9IChFeHByZXNzaW9uRXZhbHVhdG9yLlBBUkVOVF9MRU4gKyBFeHByZXNzaW9uRXZhbHVhdG9yLkxPTkdfT0JKRUNUX0xFTik7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUjpcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zSWR4ICs9IChFeHByZXNzaW9uRXZhbHVhdG9yLlBBUkVOVF9MRU4gKyBFeHByZXNzaW9uRXZhbHVhdG9yLkxPTkdfT0JKRUNUX0xFTik7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JJR0hUX0xJVEVSQUw6XHJcbiAgICAgICAgICAgICAgICAgIGxlbiA9IHRoaXMuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zSWR4ICs9IGxlbjtcclxuICAgICAgICAgICAgICAgICAgLy8gU2tpcCBleHRyYSB1bnVzZWQgc3RyaW5nIHN0b3JlZCBhZnRlciBsaXRlcmFsXHJcbiAgICAgICAgICAgICAgICAgIGxlbiA9IHRoaXMuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zSWR4ICs9IGxlbjtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIC8qIGNhc2UgRVhQX09QX0FDVDpcclxuICAgICAgICAgICAgICAgcG9zSWR4XyArPTI7XHJcbiAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgY2FzZSBFWFBfT1BfS0JEOlxyXG4gICAgICAgICAgICAgICBwb3NJZHhfICsrO1xyXG4gICAgICAgICAgICAgICBicmVhazsgKi9cclxuXHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgICAgICAvLyBDdXJyZW50IG9wZXJhdG9yIGlzIGEgZnVuY3Rpb24sIHNvIHdlIGp1c3QgbmVlZCB0byB1cGRhdGVcclxuICAgICAgICAgICAgICAvLyAgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdG8gc2tpcFxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgIGV4cERlc2MgPSBFeHByZXNzaW9uRGljdC5leHBEZXNjW29wQ29kZV07XHJcbiAgICAgICAgICAgICAgICAgIGlmIChleHBEZXNjLkFyZ0NvdW50XyA8IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcmdzUmVtYWluICs9IHRoaXMuZ2V0MUJ5dGVOdW1iZXIoKTtcclxuICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgYXJnc1JlbWFpbiArPSBleHBEZXNjLkFyZ0NvdW50XztcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIER5bmFtaWNPcGVyYXRpb24ge1xyXG4gIGFyZ0NvdW50XzogbnVtYmVyID0gMDtcclxuICBvcENvZGVfOiBudW1iZXIgPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OT05FO1xyXG59XHJcblxyXG4iXX0=
4360
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwcmVzc2lvbkV2YWx1YXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvZXhwL0V4cHJlc3Npb25FdmFsdWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IscUJBQXFCLEVBRXJCLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsTUFBTSxFQUNOLHNCQUFzQixFQUd0QixRQUFRLEVBQ1IsR0FBRyxFQUVILGFBQWEsRUFFYixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sSUFBSSxFQUNKLFlBQVksRUFDWixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLHFCQUFxQixFQUNyQixPQUFPLEVBQ1AsV0FBVyxFQUNYLGVBQWUsRUFDaEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNoQixLQUFLLEVBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxJQUFJLEVBQ0osS0FBSyxFQUNMLE9BQU8sRUFDUCxPQUFPLEVBQ1AsUUFBUSxFQUNSLEtBQUssRUFDTCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2xCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxFQUFVLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQy9FLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUVuRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scUJBQXFC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U0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1FBRWxCLElBQUksRUFBRSxHQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1FBRWxCLElBQUksRUFBRSxHQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1FBRWxCLElBQUksRUFBRSxHQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1FBRWxCLElBQUksR0FBRyxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLE9BQU8s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QUM7Q0FDRjtBQUVELE1BQU0sZ0JBQWdCO0lBQXRCO1FBQ0UsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0QixZQUFPLEdBQVcsbUJBQW1CLENBQUMsV0FBVyxDQUFDO0lBQ3BELENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQmxvYlR5cGUsXHJcbiAgQ29tbWFuZHMsXHJcbiAgRGF0YU1vZGlmaWNhdGlvblR5cGVzLFxyXG4gIERhdGVCcmVha1BhcmFtcyxcclxuICBEaXNwbGF5Q29udmVydG9yLFxyXG4gIEV4cHJlc3Npb25JbnRlcmZhY2UsXHJcbiAgRXhwVmFsLFxyXG4gIEd1aUV4cHJlc3Npb25FdmFsdWF0b3IsXHJcbiAgSVRhc2ssXHJcbiAgTWdDb250cm9sQmFzZSxcclxuICBOVU1fVFlQRSxcclxuICBQSUMsXHJcbiAgUHJvcGVydHksXHJcbiAgUHJvcEludGVyZmFjZSxcclxuICBUaW1lQnJlYWtQYXJhbXMsXHJcbiAgVmVjdG9yVHlwZVxyXG59IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHtcclxuICBDb25zdGFudHMsXHJcbiAgSW50ZXJuYWxJbnRlcmZhY2UsXHJcbiAgTG9nZ2VyLFxyXG4gIE1pc2MsXHJcbiAgTXNnSW50ZXJmYWNlLFxyXG4gIFBJQ0ludGVyZmFjZSxcclxuICBTdG9yYWdlQXR0cmlidXRlLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjayxcclxuICBTdHJVdGlsLFxyXG4gIFV0aWxEYXRlSnBuLFxyXG4gIFV0aWxTdHJCeXRlTW9kZVxyXG59IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQge1xyXG4gIEFwcGxpY2F0aW9uRXhjZXB0aW9uLFxyXG4gIEFycmF5X0VudW1lcmF0b3IsXHJcbiAgRGVidWcsXHJcbiAgRW5jb2RpbmcsXHJcbiAgRXhjZXB0aW9uLFxyXG4gIExpc3QsXHJcbiAgTkNoYXIsXHJcbiAgTk51bWJlcixcclxuICBOU3RyaW5nLFxyXG4gIFJlZlBhcmFtLFxyXG4gIFN0YWNrLFxyXG4gIFN0cmluZ0J1aWxkZXIsXHJcbiAgaXNOdWxsT3JVbmRlZmluZWRcclxufSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7RXhwcmVzc2lvbkxvY2FsSnBufSBmcm9tICcuL0V4cHJlc3Npb25Mb2NhbEpwbic7XHJcbmltcG9ydCB7RmllbGR9IGZyb20gJy4uL2RhdGEvRmllbGQnO1xyXG5pbXBvcnQge0V4cERlc2MsIEV4cHJlc3Npb25EaWN0fSBmcm9tICcuL0V4cHJlc3Npb25EaWN0JztcclxuaW1wb3J0IHtEYXRhVmlld0NvbW1hbmRUeXBlfSBmcm9tICcuLi9jb21tYW5kcy9DbGllbnRUb1NlcnZlci9EYXRhdmlld0NvbW1hbmQnO1xyXG5pbXBvcnQge1J1blRpbWVFdmVudH0gZnJvbSAnLi4vZXZlbnQvUnVuVGltZUV2ZW50JztcclxuaW1wb3J0IHtFdmVudEhhbmRsZXJQb3NpdGlvbn0gZnJvbSAnLi4vZXZlbnQvRXZlbnRIYW5kbGVyUG9zaXRpb24nO1xyXG5pbXBvcnQge0V2ZW50SGFuZGxlcn0gZnJvbSAnLi4vZXZlbnQvRXZlbnRIYW5kbGVyJztcclxuaW1wb3J0IHtBcmd1bWVudHNMaXN0fSBmcm9tICcuLi9ydC9Bcmd1bWVudHNMaXN0JztcclxuaW1wb3J0IHtFeHByZXNzaW9ufSBmcm9tICcuL0V4cHJlc3Npb24nO1xyXG5pbXBvcnQge0lDbGllbnRDb21tYW5kfSBmcm9tICcuLi9jb21tYW5kcy9JQ2xpZW50Q29tbWFuZCc7XHJcbmltcG9ydCB7Q29tbWFuZEZhY3Rvcnl9IGZyb20gJy4uL2NvbW1hbmRzL0NsaWVudFRvU2VydmVyL0NvbW1hbmRGYWN0b3J5JztcclxuaW1wb3J0IHtTb3J0fSBmcm9tICcuLi90YXNrcy9zb3J0L1NvcnQnO1xyXG5pbXBvcnQge1Rhc2tfU3ViZm9ybUV4ZWNNb2RlRW51bSwgVGFza0Jhc2UsIFVzZXJSYW5nZX0gZnJvbSAnLi4vdGFza3MvVGFza0Jhc2UnO1xyXG5pbXBvcnQge0dsb2JhbFBhcmFtc30gZnJvbSAnLi9HbG9iYWxQYXJhbXNUYWJsZSc7XHJcbmltcG9ydCB7VXNlckRldGFpbHN9IGZyb20gJy4uL3NlY3VyaXR5L1VzZXJEZXRhaWxzJztcclxuaW1wb3J0IHtPcGVyYXRpb259IGZyb20gJy4uL3J0L09wZXJhdGlvbic7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gJy4uL0NvbnN0SW50ZXJmYWNlJztcclxuaW1wb3J0IHtNZ0NvbnRyb2x9IGZyb20gJy4uL2d1aS9NZ0NvbnRyb2wnO1xyXG5pbXBvcnQge0RhdGFWaWV3fSBmcm9tICcuLi9kYXRhL0RhdGFWaWV3JztcclxuaW1wb3J0IHtSZWNvcmR9IGZyb20gJy4uL2RhdGEvUmVjb3JkJztcclxuaW1wb3J0IHtNZ0Zvcm19IGZyb20gJy4uL2d1aS9NZ0Zvcm0nO1xyXG5pbXBvcnQge0xhbmd1YWdlRGF0YX0gZnJvbSAnLi4vZW52L0xhbmd1YWdlRGF0YSc7XHJcbmltcG9ydCB7RW52UGFyYW1zVGFibGV9IGZyb20gJy4uL2Vudi9FbnZWYXJpYWJsZXNUYWJsZSc7XHJcbmltcG9ydCB7RW52aXJvbm1lbnR9IGZyb20gJy4uL2Vudi9FbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7TGFzdEZvY3VzZWRNYW5hZ2VyfSBmcm9tICcuLi9ydC9MYXN0Rm9jdXNlZE1hbmFnZXInO1xyXG5pbXBvcnQge1NlcnZlckNvbmZpZ30gZnJvbSAnLi4vU2VydmVyQ29uZmlnJztcclxuaW1wb3J0IHtBY2Nlc3NIZWxwZXJ9IGZyb20gJy4uL0FjY2Vzc0hlbHBlcic7XHJcbmltcG9ydCB7Q29va2llU2VydmljZX0gZnJvbSAnLi4vdXRpbC9jb29raWUuc2VydmljZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvbkV2YWx1YXRvciBleHRlbmRzIEd1aUV4cHJlc3Npb25FdmFsdWF0b3Ige1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBBU1RFUklTS19DSFI6IHN0cmluZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMSk7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUVVFU1RJT05fQ0hSOiBzdHJpbmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDIpO1xyXG5cclxuICAvLyBTb21lIGl0ZW1zIGluIHBvbGlzaCBhcmUgc2F2ZWQgYXMgc2hvcnQgb3IgbG9uZy5cclxuICAvLyBGb2xsb3dpbmcgY29uc3RhbnRzIGFyZSB1c2VkIHdoaWxlIHJlYWRpbmcgdGhlIHBvbGlzaGVkIGV4cHJlc3Npb24uXHJcbiAgc3RhdGljIFBBUkVOVF9MRU46IG51bWJlciA9IDI7IC8vIDIgYnl0ZXNcclxuICBzdGF0aWMgU0hPUlRfT0JKRUNUX0xFTjogbnVtYmVyID0gMjsgLy8gMiBieXRlc1xyXG4gIHN0YXRpYyBMT05HX09CSkVDVF9MRU46IG51bWJlciA9IDQ7IC8vIDQgYnl0ZXNcclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX3JlY3Vyc2l2ZUV4cENhbGNDb3VudDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9jaGFyc1RvVHJpbTogc3RyaW5nW10gPSBbJyAnLCAnXFwwJ107XHJcbiAgcHJpdmF0ZSBfZXhwcmVzc2lvbkxvY2FsSnBuOiBFeHByZXNzaW9uTG9jYWxKcG4gPSBudWxsO1xyXG4gIHN0YXRpYyBFcnJvclRvQmVXcml0dGVuSW5TZXJ2ZXJMb2c6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4gPSAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpID8gbmV3IEV4cHJlc3Npb25Mb2NhbEpwbih0aGlzKSA6IG51bGwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhIGJhc2ljIHZhbHVlIGZyb20gdGhlIGV4cHJlc3Npb24gc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImV4cFN0clRyYWNrZXJcIj50aGUgZXhwcmVzc2lvbiBwcm9jZXNzZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib3BDb2RlXCI+dGhlIG9wY29kZSBvZiB0aGUgZXhwcmVzc2lvbjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgYmFzaWMgZGF0YSB2YWx1ZSBhcyBhbiBFeHBWYWwgaW5zdGFuY2U8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRFeHBCYXNpY1ZhbHVlKGV4cFN0clRyYWNrZXI6IEV4cFN0clRyYWNrZXIsIG9wQ29kZTogbnVtYmVyKTogRXhwVmFsIHtcclxuICAgIGxldCBWYWw6IEV4cFZhbCA9IG5ldyBFeHBWYWwoKTtcclxuICAgIGxldCBsZW46IG51bWJlcjtcclxuICAgIGxldCBwYXJlbnQ6IG51bWJlciwgdmVlOiBudW1iZXI7XHJcbiAgICBsZXQgZmllbGQ6IEZpZWxkO1xyXG4gICAgbGV0IGZsZFZhbDogc3RyaW5nO1xyXG5cclxuICAgIHN3aXRjaCAob3BDb2RlKSB7XHJcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgIC8vIFN0cmluZyBWYWx1ZVxyXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0E6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSDpcclxuICAgICAgICBWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgVmFsLlN0clZhbCA9IGV4cFN0clRyYWNrZXIuZ2V0U3RyaW5nKGxlbiwgdHJ1ZSwgdHJ1ZSk7IC8vIGZpcnN0IHZhbHVlIGlzIHVuaWNvZGVcclxuICAgICAgICAvLyBzaW5jZSB0aGUgc2VydmVyIHNlbmRzIHVzIGJvdGggVW5pY29kZSBzdHJpbmcgQW5zaSBzdHJpbmcgZm9yXHJcbiAgICAgICAgLy8gZWFjaCBzdHJpbmcgaW4gdGhlIGV4cHJlc3Npb24sIGFuZCB0aGUgY2xpZW50IHVzZXMgb25seSB1bmljb2RlLFxyXG4gICAgICAgIC8vIHdlIHdpbGwgZGlyZWdhcmQgdGhlIEFuc2kgc3RyaW5nXHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQ0Qnl0ZU51bWJlcigpO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIuZ2V0U3RyaW5nKGxlbiwgdHJ1ZSwgZmFsc2UpOyAvLyBzZWNvbmQgdmFsdWUgaXMgYW5zaVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FWFRfQTpcclxuICAgICAgICBWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQ0Qnl0ZU51bWJlcigpO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIuZ2V0U3RyaW5nKGxlbiwgdHJ1ZSwgdHJ1ZSk7IC8vIGZpcnN0IHZhbHVlIGlzIHVuaWNvZGVcclxuICAgICAgICAvLyBzaW5jZSB0aGUgc2VydmVyIHNlbmRzIHVzIGJvdGggVW5pY29kZSBzdHJpbmcgQW5zaSBzdHJpbmcgZm9yXHJcbiAgICAgICAgLy8gZWFjaCBzdHJpbmcgaW4gdGhlIGV4cHJlc3Npb24sIGFuZCB0aGUgY2xpZW50IHVzZXMgb25seSB1bmljb2RlLFxyXG4gICAgICAgIC8vIHdlIHdpbGwgZGlyZWdhcmQgdGhlIEFuc2kgc3RyaW5nXHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQ0Qnl0ZU51bWJlcigpO1xyXG4gICAgICAgIFZhbC5TdHJWYWwgPSBleHBTdHJUcmFja2VyLmdldFN0cmluZyhsZW4sIHRydWUsIGZhbHNlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgIC8vIE1hZ2ljIE51bWJlciB2YWx1ZVxyXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX046XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVDpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0U6XHJcbiAgICAgICAgaWYgKG9wQ29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRClcclxuICAgICAgICAgIFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFO1xyXG4gICAgICAgIGVsc2UgaWYgKG9wQ29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVClcclxuICAgICAgICAgIFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGxlbiA9IGV4cFN0clRyYWNrZXIuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICBWYWwuTWdOdW1WYWwgPSBleHBTdHJUcmFja2VyLmdldE1hZ2ljTnVtYmVyKGxlbiwgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAvLyBMb2dpY2FsIFZhbHVlXHJcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTDpcclxuICAgICAgICBWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgICBWYWwuQm9vbFZhbCA9IChleHBTdHJUcmFja2VyLmdldDJCeXRlTnVtYmVyKCkgPT09IDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgLy8gVmFyaWFibGUgVmFsdWVcclxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WOlxyXG4gICAgICAgIHBhcmVudCA9IGV4cFN0clRyYWNrZXIuZ2V0VmFySWR4KCk7XHJcbiAgICAgICAgdmVlID0gZXhwU3RyVHJhY2tlci5nZXQ0Qnl0ZU51bWJlcigpO1xyXG4gICAgICAgIGZpZWxkID0gPEZpZWxkPnRoaXMuRXhwVGFzay5nZXRGaWVsZERlZihwYXJlbnQsIHZlZSAtIDEpO1xyXG4gICAgICAgIFZhbC5BdHRyID0gZmllbGQuZ2V0VHlwZSgpO1xyXG4gICAgICAgIC8qIEZvciBWZWN0b3IsIG51bGwgYWxsb3dlZCBpcyBhbHdheXMgdHJ1ZS4gSWYgdGhlIGZpZWxkIGlzIGEgdmVjdG9yLCB0aGUgICovXHJcbiAgICAgICAgLyogZmllbGQubnVsbEFsbG93ZWQoKSBhY3R1YWxseSByZXR1cm5zIHRoZSBudWxsIGFsbG93ZWQgZm9yIHRoZSB2ZWMgY2VsbC4gKi9cclxuICAgICAgICBsZXQgbnVsbEFsbG93ZWQ6IGJvb2xlYW4gPSAoZmllbGQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICA6IGZpZWxkLk51bGxBbGxvd2VkO1xyXG4gICAgICAgIFZhbC5Jc051bGwgPSBmaWVsZC5pc051bGwoKSAmJiBudWxsQWxsb3dlZDtcclxuICAgICAgICBWYWwuT3JpZ2luYWxOdWxsID0gVmFsLklzTnVsbDtcclxuICAgICAgICBmbGRWYWwgPSBmaWVsZC5nZXRWYWx1ZSh0cnVlKTtcclxuXHJcbiAgICAgICAgaWYgKGZsZFZhbCAhPSBudWxsICYmIFZhbC5Jc051bGwgJiZcclxuICAgICAgICAgIGZpZWxkLmdldFRhc2soKS5nZXROdWxsQXJpdGhtZXRpYygpID09PSBDb25zdGFudHMuTlVMTF9BUklUSF9VU0VfREVGKVxyXG4gICAgICAgICAgVmFsLklzTnVsbCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKFZhbC5BdHRyKSB7XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICAgICAgVmFsLlN0clZhbCA9IGZsZFZhbDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgICAgICBWYWwuVmVjdG9yRmllbGQgPSBmaWVsZDtcclxuICAgICAgICAgIC8vIGZhbGxzIHRocm91Z2hcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICAgICAgVmFsLlN0clZhbCA9IGZsZFZhbDtcclxuXHJcbiAgICAgICAgICAgIGlmIChWYWwuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgICAgICAgICBWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBWYWwuSW5jbHVkZUJsb2JQcmVmaXggPSBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgVmFsLkluY2x1ZGVCbG9iUHJlZml4ID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgICAgICBWYWwuTWdOdW1WYWwgPSBmbGRWYWwgIT0gbnVsbCA/IG5ldyBOVU1fVFlQRShmbGRWYWwpIDogbnVsbDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgICAgIGlmIChmbGRWYWwgIT0gbnVsbClcclxuICAgICAgICAgICAgICBWYWwuQm9vbFZhbCA9IERpc3BsYXlDb252ZXJ0b3IudG9Cb29sZWFuKGZsZFZhbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0ZPUk06XHJcbiAgICAgICAgcGFyZW50ID0gZXhwU3RyVHJhY2tlci5nZXRWYXJJZHgoKTtcclxuICAgICAgICBsZXQgZm9ybURpc3BsYXlJbmRleEluVGFzazogbnVtYmVyID0gZXhwU3RyVHJhY2tlci5nZXQ0Qnl0ZU51bWJlcigpO1xyXG4gICAgICAgIGZvcm1EaXNwbGF5SW5kZXhJblRhc2sgPSAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuR2V0UmVhbE1haW5EaXNwbGF5SW5kZXhPbkRlcHRoKGZvcm1EaXNwbGF5SW5kZXhJblRhc2spO1xyXG4gICAgICAgIHRoaXMuQ29uc3RydWN0TWFnaWNOdW0oVmFsLCBmb3JtRGlzcGxheUluZGV4SW5UYXNrLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WQVI6XHJcbiAgICAgICAgcGFyZW50ID0gZXhwU3RyVHJhY2tlci5nZXRWYXJJZHgoKTtcclxuICAgICAgICB2ZWUgPSBleHBTdHJUcmFja2VyLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgbGV0IGl0bTogbnVtYmVyID0gKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmN0bF9pdG1fNF9wYXJlbnRfdmVlKHBhcmVudCwgdmVlKTtcclxuICAgICAgICB0aGlzLkNvbnN0cnVjdE1hZ2ljTnVtKFZhbCwgaXRtLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9SSUdIVF9MSVRFUkFMOlxyXG4gICAgICAgIGxlbiA9IGV4cFN0clRyYWNrZXIuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICBWYWwuTWdOdW1WYWwgPSBleHBTdHJUcmFja2VyLmdldE1hZ2ljTnVtYmVyKGxlbiwgdHJ1ZSk7XHJcbiAgICAgICAgLy8gU2tpcCBleHRyYSB1bnVzZWQgc3RyaW5nIHN0b3JlZCBhZnRlciBsaXRlcmFsXHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgIFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIuZ2V0U3RyaW5nKGxlbiwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRG9lcyB0aGUgb3BlcmF0b3IgcmVwcmVzZW50cyBhIGJhc2ljIGRhdGEgdmFsdWU/XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm9wQ29kZVwiPiAgdGhlIGN1cnJlbnQgb3BlcmF0aW9uIGNvZGU8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSBpZiB0aGUgb3BlcmF0b3IgaW5kaWNhdGVzIGJhc2ljIGRhdGEgaXRlbSwgZmFsc2UgaWYgbm90PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBpc0Jhc2ljSXRlbShvcENvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChvcENvZGUgPD0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTCB8fFxyXG4gICAgICBvcENvZGUgPT09IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VYVF9BIHx8XHJcbiAgICAgIG9wQ29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUklHSFRfTElURVJBTCB8fFxyXG4gICAgICBvcENvZGUgPT09IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0UgfHxcclxuICAgICAgb3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9GT1JNKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDaGVja3MgaWYgdGhlIGZ1bmN0aW9uIGhhcyB2YXJpYWJsZSBhcmd1bWVudCBsaXN0XHJcbiAgLy8vICAgbGlrZSBpbiBtYWdpYyA6IEVYUF9PUF9JU19WQVJBUkcob3ByKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgaXNWYXJBcmdMaXN0KGV4cERlc2M6IEV4cERlc2MpOiBib29sZWFuIHtcclxuICAgIGlmIChleHBEZXNjLkFyZ0NvdW50XyA8IDAgfHwgZXhwRGVzYy5BcmdBdHRyXy5sZW5ndGggPiA8bnVtYmVyPmV4cERlc2MuQXJnQ291bnRfKVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBFeGVjdXRlIHNpbmdsZSBvcGVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib3BDb2RlXCI+b3BlcmF0aW9uIGNvZGUgdG8gZXhlY3V0ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJleHBTdHJUcmFja2VyXCI+dGhlIGV4cHJlc3Npb24gYmVpbmcgcHJvY2Vzc2VkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFN0YWNrXCI+c3RhY2sgb2YgdmFsdWVzIHRoYXQgYXJlIHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhZGRlZE9wZXJzXCI+c3RhY2sgb2Ygb3BlcmF0aW9uIHRvIGV4ZWN1dGUgYXMgYSByZXN1bHQgb2YgdGhpcyBvcGVyYXRvcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJleHBlY3RlZFR5cGVcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXhlY09wZXJhdGlvbihvcENvZGU6IG51bWJlciwgZXhwU3RyVHJhY2tlcjogRXhwU3RyVHJhY2tlciwgdmFsU3RhY2s6IFN0YWNrPGFueT4sIGFkZGVkT3BlcnM6IExpc3Q8RHluYW1pY09wZXJhdGlvbj4sIGV4cGVjdGVkVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHZhbDE6IEV4cFZhbDtcclxuICAgIGxldCB2YWwyOiBFeHBWYWw7XHJcbiAgICBsZXQgdmFsMzogRXhwVmFsO1xyXG4gICAgbGV0IHZhbDQ6IEV4cFZhbDtcclxuICAgIGxldCB2YWw1OiBFeHBWYWw7XHJcbiAgICBsZXQgdmFsNjogRXhwVmFsO1xyXG4gICAgbGV0IHZhbDc6IEV4cFZhbDtcclxuICAgIGxldCB2YWw4OiBFeHBWYWw7XHJcbiAgICBsZXQgZHluT3BlciA9IG5ldyBEeW5hbWljT3BlcmF0aW9uKCk7XHJcbiAgICBsZXQgd2hvbGU6IG51bWJlcjtcclxuICAgIGxldCBkZWM6IG51bWJlcjtcclxuXHJcbiAgICBsZXQgcmVzVmFsID0gbmV3IEV4cFZhbCgpO1xyXG4gICAgbGV0IEV4cF9wYXJhbXM6IEV4cFZhbFtdO1xyXG4gICAgbGV0IGFkZFJlc3VsdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBsZXQgbkFyZ3M6IG51bWJlcjtcclxuICAgIGxldCBzcGVjaWFsQW5zaUV4cHJlc3Npb246IGJvb2xlYW4gPSBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRTcGVjaWFsQW5zaUV4cHJlc3Npb24oKTtcclxuXHJcbiAgICAvLyB0ZW1wb3JhcnkgdmFsdWVzOlxyXG4gICAgbGV0IG9mczogbnVtYmVyLCBsZW46IG51bWJlciwgTGVuTWF4OiBudW1iZXIsIGo6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgcGljOiBQSUM7XHJcblxyXG4gICAgLy8gdGhpcyBwYXJ0IHB1dHMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaW4gdGhlIFRPUCBvZiB0aGUgc3RhY2tcclxuICAgIC8vIDQgdmFyaWFibGUgYXJndW1lbnQgbGlzdCBmdW5jdGlvbnMgT05MWVxyXG4gICAgLy8gZG9uJ3QgZm9yZ2V0IHBvcCB0aGlzIGFyZ3VtZW50IGluIHRoZSBzdGFydCBvZiB0aGUgY2FzZXMgb2YgdmFyaWFibGUgYXJndW1lbnQgbGlzdCBmdW5jdGlvbnNcclxuICAgIGxldCBleHBEZXNjOiBFeHBEZXNjID0gRXhwcmVzc2lvbkRpY3QuZXhwRGVzY1tvcENvZGVdO1xyXG5cclxuICAgIC8vIGZvciBmdW5jdGlvbiB3aXRoIE5PVCBjb25zdGFudCBudW1iZXIgb2YgYXJndW1lbnRzIE9OTFlcclxuICAgIC8vIGRvbid0IHVzZSB0aGlzIGJsb2NrIGZvciBhbm90aGVyIGNhc2VzLCBiZWNhdXNlIHRoZSB0cnktY2F0Y2ggcGFydCBpbnNlcnQgdW51c2FibGUgdmFsdWVzIHRvIHRoZSBleHByZXNzaW9uIHF1ZXVlXHJcbiAgICBpZiAoRXhwcmVzc2lvbkV2YWx1YXRvci5pc1ZhckFyZ0xpc3QoZXhwRGVzYykpIHtcclxuICAgICAgbkFyZ3MgPSBleHBTdHJUcmFja2VyLmdldDFCeXRlTnVtYmVyKCk7XHJcblxyXG4gICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWNFeHByZXNzaW9uKGV4cFN0clRyYWNrZXIsIHZhbFN0YWNrLCBTdG9yYWdlQXR0cmlidXRlLk5PTkUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgaWYgKGV4Y2VwdGlvbiBpbnN0YW5jZW9mIEV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICAvLyBnZXRPdXRMb29wXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfSBlbHNlIHRocm93IGV4Y2VwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IuaXNWYXJBcmdMaXN0KGV4cERlc2MpICYmIGogPT09IG5BcmdzKSAvLyB0aGUgZm9yX2xvb3AgZmluaXNoZWQgd2l0aG91dCBleGNlcHRpb25cclxuICAgICAge1xyXG4gICAgICAgIGxldCB0ZW1wX29iamVjdDogT2JqZWN0ID0gbkFyZ3M7XHJcbiAgICAgICAgdmFsU3RhY2sucHVzaCh0ZW1wX29iamVjdCk7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZygnRXhwcmVzc2lvbkV2YWx1YXRvci5leGVjT3BlcmF0aW9uKCkgdGhlcmUgaXMgcHJvYmxlbSB3aXRoIGFyZ3VtZW50cyBvZiAnICtcclxuICAgICAgICAgIG9wQ29kZSArICcoc2VlIEV4cHJlc3Npb25EaWN0IGZvciBuYW1lKScpO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAob3BDb2RlKSB7XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQUREOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmFkZCh2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1VCOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLnN1Yih2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTVVMOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLm11bCh2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRElWOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmRpdih2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTU9EOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLm1vZCh2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTkVHOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGlmICh2YWwxLk1nTnVtVmFsID09IG51bGwpIHtcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YWwxLk1nTnVtVmFsLm51bV9uZWcoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUodmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0ZJWDpcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGVjXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHdob2xlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgaWYgKHZhbDEuTWdOdW1WYWwgPT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMy5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHdob2xlID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsLm51bV9maXgod2hvbGUpO1xyXG4gICAgICAgIGRlYyA9IHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbC5udW1fdHJ1bmMoZGVjKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUk9VTkQ6XHJcbiAgICAgICAgLy8gaW50IHdob2xlLCBkZWM7ICAgICAgICAgbmVlZG4ndCB0aGlzIHZhcmlhYmxlcywgdGhlbSBkZWZpbmVkIGluIEVYUF9PUF9GSVhcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGVjXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHdob2xlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgaWYgKHZhbDEuTWdOdW1WYWwgPT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMy5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHdob2xlID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsLm51bV9maXgod2hvbGUpO1xyXG4gICAgICAgIGRlYyA9IHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbC5yb3VuZChkZWMpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVE6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgdmFsMikgPT09IDApO1xyXG4gICAgICAgIH0gY2F0Y2ggKG51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgaWYgKG51bGxWYWx1ZUV4Y2VwdGlvbiBpbnN0YW5jZW9mIE51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHRocm93IG51bGxWYWx1ZUV4Y2VwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTkU6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgdmFsMikgIT09IDApO1xyXG4gICAgICAgIH0gY2F0Y2ggKG51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgaWYgKG51bGxWYWx1ZUV4Y2VwdGlvbiBpbnN0YW5jZW9mIE51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKTtcclxuICAgICAgICAgIH0gZWxzZSB0aHJvdyBudWxsVmFsdWVFeGNlcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MRTpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSAoRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfY21wX2FueSh2YWwxLCB2YWwyKSA8PSAwKTtcclxuICAgICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgIGlmIChudWxsVmFsdWVFeGNlcHRpb24gaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgICAgICAgICB9IGVsc2UgdGhyb3cgbnVsbFZhbHVlRXhjZXB0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTFQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgdmFsMikgPCAwKTtcclxuICAgICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgIGlmIChudWxsVmFsdWVFeGNlcHRpb24gaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgICAgICAgICB9IGVsc2UgdGhyb3cgbnVsbFZhbHVlRXhjZXB0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfR0U6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgdmFsMikgPj0gMCk7XHJcbiAgICAgICAgfSBjYXRjaCAobnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICBpZiAobnVsbFZhbHVlRXhjZXB0aW9uIGluc3RhbmNlb2YgTnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pO1xyXG4gICAgICAgICAgfSBlbHNlIHRocm93IG51bGxWYWx1ZUV4Y2VwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0dUOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IChFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9jbXBfYW55KHZhbDEsIHZhbDIpID4gMCk7XHJcbiAgICAgICAgfSBjYXRjaCAobnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICBpZiAobnVsbFZhbHVlRXhjZXB0aW9uIGluc3RhbmNlb2YgTnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pO1xyXG4gICAgICAgICAgfSBlbHNlIHRocm93IG51bGxWYWx1ZUV4Y2VwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05PVDpcclxuICAgICAgICByZXNWYWwgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gIXJlc1ZhbC5Cb29sVmFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9PUjpcclxuICAgICAgICByZXNWYWwgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGR5bk9wZXIgPSBuZXcgRHluYW1pY09wZXJhdGlvbigpO1xyXG4gICAgICAgIGR5bk9wZXIuYXJnQ291bnRfID0gMTtcclxuXHJcbiAgICAgICAgaWYgKHJlc1ZhbC5Cb29sVmFsKSB7XHJcbiAgICAgICAgICBkeW5PcGVyLm9wQ29kZV8gPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JR05PUkU7XHJcbiAgICAgICAgICBkeW5PcGVyLmFyZ0NvdW50XyA9IDE7XHJcbiAgICAgICAgICBhZGRlZE9wZXJzLnB1c2goZHluT3Blcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGR5bk9wZXIub3BDb2RlXyA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VWQUxYO1xyXG4gICAgICAgICAgZHluT3Blci5hcmdDb3VudF8gPSAwO1xyXG4gICAgICAgICAgYWRkZWRPcGVycy5wdXNoKGR5bk9wZXIpO1xyXG4gICAgICAgICAgYWRkUmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BTkQ6XHJcbiAgICAgICAgcmVzVmFsID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBkeW5PcGVyID0gbmV3IER5bmFtaWNPcGVyYXRpb24oKTtcclxuICAgICAgICBpZiAoIXJlc1ZhbC5Cb29sVmFsKSB7XHJcbiAgICAgICAgICBkeW5PcGVyLm9wQ29kZV8gPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JR05PUkU7XHJcbiAgICAgICAgICBkeW5PcGVyLmFyZ0NvdW50XyA9IDE7XHJcbiAgICAgICAgICBhZGRlZE9wZXJzLnB1c2goZHluT3Blcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGR5bk9wZXIub3BDb2RlXyA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VWQUxYO1xyXG4gICAgICAgICAgZHluT3Blci5hcmdDb3VudF8gPSAwO1xyXG4gICAgICAgICAgYWRkZWRPcGVycy5wdXNoKGR5bk9wZXIpO1xyXG4gICAgICAgICAgYWRkUmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JRjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBpZiAodmFsMS5Cb29sVmFsKSB7XHJcbiAgICAgICAgICBkeW5PcGVyID0gbmV3IER5bmFtaWNPcGVyYXRpb24oKTtcclxuICAgICAgICAgIGR5bk9wZXIub3BDb2RlXyA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VWQUxYO1xyXG4gICAgICAgICAgZHluT3Blci5hcmdDb3VudF8gPSAwO1xyXG5cclxuICAgICAgICAgIGFkZGVkT3BlcnMucHVzaChkeW5PcGVyKTtcclxuICAgICAgICAgIGR5bk9wZXIgPSBuZXcgRHluYW1pY09wZXJhdGlvbigpO1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkeW5PcGVyLm9wQ29kZV8gPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JR05PUkU7XHJcbiAgICAgICAgICAgIGR5bk9wZXIuYXJnQ291bnRfID0gMTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBhZGRlZE9wZXJzLnB1c2goZHluT3Blcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGR5bk9wZXIgPSBuZXcgRHluYW1pY09wZXJhdGlvbigpO1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBkeW5PcGVyLm9wQ29kZV8gPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JR05PUkU7XHJcbiAgICAgICAgICAgIGR5bk9wZXIuYXJnQ291bnRfID0gMTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBhZGRlZE9wZXJzLnB1c2goZHluT3Blcik7XHJcbiAgICAgICAgICBkeW5PcGVyID0gbmV3IER5bmFtaWNPcGVyYXRpb24oKTtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZHluT3Blci5vcENvZGVfID0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVZBTFg7XHJcbiAgICAgICAgICAgIGR5bk9wZXIuYXJnQ291bnRfID0gMDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBhZGRlZE9wZXJzLnB1c2goZHluT3Blcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFkZFJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xFTjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgaWYgKHZhbDEuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICAgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMsIG5vdCBjaGFyYWN0ZXJzIChKUE46IERCQ1Mgc3VwcG9ydClcclxuICAgICAgICBpZiAoc3BlY2lhbEFuc2lFeHByZXNzaW9uIHx8IHZhbDEuQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKVxyXG4gICAgICAgICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcoVXRpbFN0ckJ5dGVNb2RlLmxlbkIodmFsMS5TdHJWYWwpKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyh2YWwxLlN0clZhbC5sZW5ndGgpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ09OOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICAgIGlmICh2YWwxLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSAmJiB2YWwxLlN0clZhbCA9PSBudWxsIHx8XHJcbiAgICAgICAgICB2YWwyLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSAmJiB2YWwyLlN0clZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9ICghTlN0cmluZy5Jc051bGxPckVtcHR5KHZhbDEuU3RyVmFsKSA/IHZhbDEuU3RyVmFsIDogJycpICsgKCFOU3RyaW5nLklzTnVsbE9yRW1wdHkodmFsMi5TdHJWYWwpID8gdmFsMi5TdHJWYWwgOiAnJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01JRDpcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbGVuZ3RoXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0YXJ0LCBvZnNldFxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdHJpbmdcclxuXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSB2YWwxLkF0dHI7XHJcbiAgICAgICAgaWYgKHZhbDIuTWdOdW1WYWwgPT0gbnVsbCB8fCB2YWwzLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMS5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIHJlc1ZhbC5BdHRyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogQ29tcHV0ZSBvZmZzZXQgYW5kIGxlbmd0aCBvZiBzdWJzdHJpbmcgKi9cclxuICAgICAgICBvZnMgPSB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgICAgICBvZnMgPSAob2ZzID4gMVxyXG4gICAgICAgICAgPyBvZnMgLSAxXHJcbiAgICAgICAgICA6IDApOyAvLyBpbiBNSUQgbWFnaWMgZnVuY3Rpb24gc3RhcnQ9MCAmJiBzdGFydD0xIHRoZSBzYW1lXHJcbiAgICAgICAgbGVuID0gdmFsMy5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgICAgIGlmIChzcGVjaWFsQW5zaUV4cHJlc3Npb24gfHwgdmFsMS5BdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpIHtcclxuICAgICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSBVdGlsU3RyQnl0ZU1vZGUubWlkQih2YWwxLlN0clZhbCwgb2ZzLCBsZW4pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBMZW5NYXggPSB2YWwxLlN0clZhbC5sZW5ndGggLSBvZnM7XHJcbiAgICAgICAgICBpZiAoTGVuTWF4IDwgbGVuKVxyXG4gICAgICAgICAgICBsZW4gPSBMZW5NYXg7XHJcbiAgICAgICAgICBpZiAobGVuIDwgMClcclxuICAgICAgICAgICAgbGVuID0gMDtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbC5zdWJzdHIob2ZzLCBsZW4pOyAvLyBjb2RlIGZyb20gdHJ5IGJsb2NrXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzVmFsLlN0clZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTEVGVDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbGVuZ3RoXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG5cclxuICAgICAgICByZXNWYWwuQXR0ciA9IHZhbDEuQXR0cjtcclxuICAgICAgICBpZiAodmFsMi5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDEuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCB2YWwxLkF0dHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbiA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG5cclxuICAgICAgICAvLyBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBub3QgY2hhcmFjdGVycyAoSlBOOiBEQkNTIHN1cHBvcnQpXHJcbiAgICAgICAgaWYgKHNwZWNpYWxBbnNpRXhwcmVzc2lvbiB8fCB2YWwxLkF0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkge1xyXG4gICAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IFV0aWxTdHJCeXRlTW9kZS5sZWZ0Qih2YWwxLlN0clZhbCwgbGVuKTtcclxuICAgICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGxlbiA+IHZhbDEuU3RyVmFsLmxlbmd0aClcclxuICAgICAgICAgICAgbGVuID0gdmFsMS5TdHJWYWwubGVuZ3RoO1xyXG4gICAgICAgICAgaWYgKGxlbiA8IDApXHJcbiAgICAgICAgICAgIGxlbiA9IDA7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWwuc3Vic3RyKDAsIGxlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9SSUdIVDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbGVuZ3RoXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG5cclxuICAgICAgICByZXNWYWwuQXR0ciA9IHZhbDEuQXR0cjtcclxuICAgICAgICBpZiAodmFsMi5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDEuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCB2YWwxLkF0dHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxlbiA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG5cclxuICAgICAgICAvLyBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBub3QgY2hhcmFjdGVycyAoSlBOOiBEQkNTIHN1cHBvcnQpXHJcbiAgICAgICAgaWYgKHNwZWNpYWxBbnNpRXhwcmVzc2lvbiB8fCB2YWwxLkF0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkge1xyXG4gICAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IFV0aWxTdHJCeXRlTW9kZS5yaWdodEIodmFsMS5TdHJWYWwsIGxlbik7XHJcbiAgICAgICAgICBpZiAocmVzVmFsLlN0clZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChsZW4gPiB2YWwxLlN0clZhbC5sZW5ndGgpXHJcbiAgICAgICAgICAgIGxlbiA9IHZhbDEuU3RyVmFsLmxlbmd0aDtcclxuICAgICAgICAgIGlmIChsZW4gPCAwKVxyXG4gICAgICAgICAgICBsZW4gPSAwO1xyXG4gICAgICAgICAgb2ZzID0gdmFsMS5TdHJWYWwubGVuZ3RoIC0gbGVuO1xyXG5cclxuICAgICAgICAgIC8vIG1lbWNweSAoRVhQX3Bhcm1zWzBdLmFkcywgRVhQX3Bhcm1zWzBdLmFkcyArIG9mcywgbGVuKTtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbC5zdWJzdHIob2ZzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0ZJTEw6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRpbWVzXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG5cclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgICAgICBpZiAodmFsMi5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDEuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZW4gPSB2YWwxLlN0clZhbC5sZW5ndGg7XHJcbiAgICAgICAgaiA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICAgIGlmIChqIDwgMClcclxuICAgICAgICAgIGogPSAwO1xyXG4gICAgICAgIExlbk1heCA9IGxlbiAqIGo7XHJcbiAgICAgICAgaWYgKExlbk1heCA+IDB4N0ZGRilcclxuICAgICAgICAvLyB0aGVyZSBpcyBNQVggbGVuZ2h0IGluIE1hZ2ljIChhY3R1YWxseSBpdCBuZWVkbid0IGluIEphdmEsIGJ1dCAuLi4pXHJcbiAgICAgICAgICBMZW5NYXggPSBNYXRoLmZsb29yKDB4N0ZGRiAvIGxlbikgKiBsZW47XHJcbiAgICAgICAgaWYgKExlbk1heCA+IDApIHtcclxuICAgICAgICAgIGlmIChsZW4gPD0gMClcclxuICAgICAgICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgICAgICAgZWxzZSBpZiAoTGVuTWF4ID09PSAxKVxyXG4gICAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWw7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHRtcEJ1ZmZlciA9IG5ldyBTdHJpbmdCdWlsZGVyKExlbk1heCk7XHJcbiAgICAgICAgICAgIGZvciAoOyBMZW5NYXggPiAwOyBMZW5NYXggLT0gbGVuKVxyXG4gICAgICAgICAgICAgIHRtcEJ1ZmZlci5BcHBlbmQodmFsMS5TdHJWYWwpO1xyXG4gICAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdG1wQnVmZmVyLlRvU3RyaW5nKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lOU1RSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdWJTdHJcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nXHJcblxyXG4gICAgICAgIG9mcyA9IDA7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgaWYgKHZhbDEuU3RyVmFsID09IG51bGwgfHwgdmFsMi5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICAgIC8vIGNvdW50IHRoZSBudW1iZXIgb2YgYnl0ZXMsIG5vdCBjaGFyYWN0ZXJzIChKUE46IERCQ1Mgc3VwcG9ydClcclxuICAgICAgICBpZiAoc3BlY2lhbEFuc2lFeHByZXNzaW9uIHx8XHJcbiAgICAgICAgICAhKHZhbDEuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFIHx8XHJcbiAgICAgICAgICAgIHZhbDIuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSkge1xyXG4gICAgICAgICAgb2ZzID0gVXRpbFN0ckJ5dGVNb2RlLmluc3RyQih2YWwxLlN0clZhbCwgdmFsMi5TdHJWYWwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodmFsMi5TdHJWYWwubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgLy8gbm90aGluZyAyIGxvb2sgZm9yXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKG9mcyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb2ZzID0gdmFsMS5TdHJWYWwuaW5kZXhPZih2YWwyLlN0clZhbCk7XHJcbiAgICAgICAgICBpZiAob2ZzIDwgMClcclxuICAgICAgICAgIC8vIHN0cmluZyBpbiBtYWdpYyBzdGFydHMgZnJvbSAxLCBpbiBqYXZhIGZyb20gMC5cclxuICAgICAgICAgICAgb2ZzID0gMDtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgb2ZzKys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhvZnMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UUklNOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xUUklNOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JUUklNOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdHJpbmdcclxuICAgICAgICByZXNWYWwuQXR0ciA9IHZhbDEuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQVxyXG4gICAgICAgICAgPyBTdG9yYWdlQXR0cmlidXRlLkFMUEhBXHJcbiAgICAgICAgICA6IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgICAgICBpZiAodmFsMS5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIHJlc1ZhbC5BdHRyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoIChvcENvZGUpIHtcclxuICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVFJJTTpcclxuICAgICAgICAgICAgdmFsMS5TdHJWYWwgPSBFeHByZXNzaW9uRXZhbHVhdG9yLnRyaW1TdHIodmFsMS5TdHJWYWwsICdCJyk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTFRSSU06XHJcbiAgICAgICAgICAgIHZhbDEuU3RyVmFsID0gRXhwcmVzc2lvbkV2YWx1YXRvci50cmltU3RyKHZhbDEuU3RyVmFsLCAnTCcpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JUUklNOlxyXG4gICAgICAgICAgICB2YWwxLlN0clZhbCA9IEV4cHJlc3Npb25FdmFsdWF0b3IudHJpbVN0cih2YWwxLlN0clZhbCwgJ1InKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1RSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwaWN0dXJlIGZvcm1hdFxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBOdW0gaW52ZXJ0IHRvIHN0cmluZ1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICAgIGlmICh2YWwyLlN0clZhbCA9PSBudWxsIHx8IHZhbDEuTWdOdW1WYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE1heCBsZW5ndGggb2YgdGhlIHBpY3R1cmUgaXMgMTAwIGNoYXJhY3RlcnMsIGxpa2UgaW4gTWFnaWNcclxuICAgICAgICBwaWMgPSBuZXcgUElDKEV4cHJlc3Npb25FdmFsdWF0b3Iuc2V0X2FfcGljKHZhbDIuU3RyVmFsKSwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5NZ051bVZhbC50b19hKHBpYyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBTDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGljdHVyZSBmb3JtYXRcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nIGludmVydCB0byBOdW1cclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBpZiAodmFsMi5TdHJWYWwgPT0gbnVsbCB8fCB2YWwxLlN0clZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwaWMgPSBuZXcgUElDKEV4cHJlc3Npb25FdmFsdWF0b3Iuc2V0X2FfcGljKHZhbDIuU3RyVmFsKSwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUodmFsMS5TdHJWYWwsIHBpYywgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX006XHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgIGxldCBjb2Rlczogc3RyaW5nID0gZXhwU3RyVHJhY2tlci5nZXRTdHJpbmcobGVuLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX20ocmVzVmFsLCBjb2Rlcyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0s6XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgbGVuID0gZXhwU3RyVHJhY2tlci5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IGV4cFN0clRyYWNrZXIuZ2V0TWFnaWNOdW1iZXIobGVuLCB0cnVlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRjpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9QOlxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGxlbiA9IGV4cFN0clRyYWNrZXIuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBleHBTdHJUcmFja2VyLmdldE1hZ2ljTnVtYmVyKGxlbiwgdHJ1ZSk7XHJcbiAgICAgICAgLy8gc2tpcCBzZWNvbmQgbnVtYmVyICh0aGUgY29tcG9uZW50IGlkeClcclxuICAgICAgICBsZW4gPSBleHBTdHJUcmFja2VyLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5nZXRNYWdpY051bWJlcihsZW4sIHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TVEFUOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBNb2Rlc1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBHZW5lcmF0aW9uXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3N0YXQocmVzVmFsLCB2YWwxLCB2YWwyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1VCRk9STV9FWEVDX01PREU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3Bfc3ViZm9ybUV4ZWNNb2RlKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lTX0xPR0dFRF9JTjpcclxuICAgICAgICB0aGlzLmV2YWxfb3BfSXNMb2dnZWRJbihyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TWVM6XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2FwcG5hbWUocmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUFJPRzpcclxuICAgICAgICB0aGlzLmV2YWxfb3BfcHJvZyhyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MRVZFTDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfbGV2ZWwocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ09VTlRFUjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfY291bnRlcihyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FTVBUWV9EQVRBX1ZJRVc6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2VtcHR5RGF0YXZpZXcocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTUFJTkxFVkVMOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9tYWlubGV2ZWwocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTUFJTkRJU1BMQVk6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX21haW5kaXNwbGF5KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lTRklSU1RSRUNPUkRDWUNMRTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfSXNGaXJzdFJlY29yZEN5Y2xlKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RBVEU6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVVRDREFURTpcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfbWFnaWMob3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9VVENEQVRFKSk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkRBVEU7IC8vIERBVEVcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQURERFQ6XHJcbiAgICAgICAgdmFsOCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsNyA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsNiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGhvdXJzXHJcbiAgICAgICAgdmFsNSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRheXNcclxuICAgICAgICB2YWw0ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbW9udGhzXHJcbiAgICAgICAgdmFsMyA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHllYXJzXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIFRpbWVcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gRGF0ZVxyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9hZGREYXRlVGltZShyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMsIHZhbDQsIHZhbDUsIHZhbDYsIHZhbDcsIHZhbDgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ESUZEVDpcclxuICAgICAgICB2YWw2ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGltZSBkaWZmXHJcbiAgICAgICAgdmFsNSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRhdGUgZGlmZlxyXG4gICAgICAgIHZhbDQgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aW1lIDJcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGF0ZSAyXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIFRpbWUgMVxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBEYXRlIDFcclxuICAgICAgICBhd2FpdCB0aGlzLmV2YWxfb3BfZGlmZHQocmVzVmFsLCB2YWwxLCB2YWwyLCB2YWwzLCB2YWw0LCB2YWw1LCB2YWw2KTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSUFJFVjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBleHBfaXRtXzJfdmVlICgpO1xyXG4gICAgICAgIHRoaXMuZXhwX2dldF92YXIocmVzVmFsLCB2YWwxLCB0cnVlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSQ1VSUjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV4cF9nZXRfdmFyKHJlc1ZhbCwgdmFsMSwgZmFsc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WQVJNT0Q6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3Zhcm1vZChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WQVJJTlA6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3ZhcmlucChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WQVJOQU1FOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF92YXJuYW1lKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUkRJU1BMQVlOQU1FOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9WYXJEaXNwbGF5TmFtZShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUkNPTlRST0xJRDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfVmFyQ29udHJvbElEKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ09OVFJPTElURU1TTElTVDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmV2YWxfb3BfQ29udHJvbEl0ZW1zTGlzdChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NPTlRST0xESVNQTEFZTElTVDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmV2YWxfb3BfQ29udHJvbERpc3BsYXlMaXN0KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVklFV01PRDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfdmlld21vZChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9USU1FOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1VUQ1RJTUU6XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcoRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS50aW1lX21hZ2ljKG9wQ29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVVRDVElNRSkpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FOyAvLyBUSU1FXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01USU1FOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1VUQ01USU1FOlxyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UubXRpbWVfbWFnaWMob3BDb2RlID09PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9VVENNVElNRSkpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FOyAvLyBUSU1FXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1BXUjpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcG93ZXJcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbnVtYmVyXHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF9wd3IodmFsMS5NZ051bVZhbCwgdmFsMi5NZ051bVZhbCk7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IChyZXNWYWwuTWdOdW1WYWwgPT0gbnVsbCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xPRzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5ldmFsX29wX2xvZyh2YWwxLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVhQOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3BfZXhwKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BQlM6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF9hYnModmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IChyZXNWYWwuTWdOdW1WYWwgPT0gbnVsbCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1NJTjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5ldmFsX29wX3Npbih2YWwxLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ09TOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3BfY29zKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVEFOOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3BfdGFuKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BU0lOOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3BfYXNpbih2YWwxLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQUNPUzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5ldmFsX29wX2Fjb3ModmFsMS5NZ051bVZhbCk7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IChyZXNWYWwuTWdOdW1WYWwgPT0gbnVsbCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FUQU46XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLk1nTnVtVmFsID0gTlVNX1RZUEUuZXZhbF9vcF9hdGFuKHZhbDEuTWdOdW1WYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSAocmVzVmFsLk1nTnVtVmFsID09IG51bGwpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9SQU5EOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLmV2YWxfb3BfcmFuZCh2YWwxLk1nTnVtVmFsKTtcclxuICAgICAgICByZXNWYWwuSXNOdWxsID0gKHJlc1ZhbC5NZ051bVZhbCA9PSBudWxsKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTUlOOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01BWDpcclxuICAgICAgICBuQXJncyA9IHZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMudmFsX2NweSg8RXhwVmFsPnZhbFN0YWNrLnBvcCgpLCByZXNWYWwpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBmb3IgKGogPSAxOyBqIDwgbkFyZ3M7IGorKykge1xyXG4gICAgICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAgICAgaWYgKG9wQ29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTUlOKSB7XHJcbiAgICAgICAgICAgICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgcmVzVmFsKSA8IDApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbF9jcHkodmFsMSwgcmVzVmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBFWFBfT1BfTUFYXHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9jbXBfYW55KHZhbDEsIHJlc1ZhbCkgPiAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWxfY3B5KHZhbDEsIHJlc1ZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChvbmVPZlZhbHVlc0lzTnVsbCkge1xyXG4gICAgICAgICAgaWYgKG9uZU9mVmFsdWVzSXNOdWxsIGluc3RhbmNlb2YgTnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgIGZvciAoOyB2YWxTdGFjay5jb3VudCgpID4gMCAmJiBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgICAgICAvLyBjbGVhbiBxdWV1ZVxyXG4gICAgICAgICAgICAgIHZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgICAgICByZXNWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzVmFsLkF0dHIgPSBvbmVPZlZhbHVlc0lzTnVsbC5nZXRBdHRyKCk7XHJcbiAgICAgICAgICB9IGVsc2UgdGhyb3cgb25lT2ZWYWx1ZXNJc051bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9SQU5HRTpcclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdXBwZXI6IEEgdmFsdWUgdGhhdCByZXByZXNlbnRzIHRoZSB1cHBlciBsaW1pdCBvZiB0aGUgcmFuZ2UuXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGxvd2VyOiBBIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGUgbG93ZXIgbGltaXQgb2YgdGhlIHJhbmdlLlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB2YWx1ZTogVGhlIHZhbHVlIGNoZWNrZWQuXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3JhbmdlKHZhbDEsIHZhbDIsIHZhbDMsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1JFUDpcclxuICAgICAgICB2YWw0ID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBsZW5fb3JpZ2luOiBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3aWxsIGJlIG1vdmVkIGZyb20gb3JpZ2luIHRvIHRhcmdldCwgc3RhcnRpbmcgZnJvbSB0aGUgbGVmdG1vc3QgY2hhcmFjdGVyIG9mIG9yaWdpbi5cclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBwb3NfdGFyZ2V0OiBUaGUgZmlyc3QgcG9zaXRpb24gaW4gdGhlIHRhcmdldCBzdHJpbmcgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIHN1YnN0cmluZyBmcm9tIG9yaWdpbi5cclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBvcmlnaW46IFRoZSBhbHBoYSBzdHJpbmcgb3IgZXhwcmVzc2lvbiB0aGF0IHByb3ZpZGVzIHRoZSBzdWJzdHJpbmcgdG8gYmUgY29waWVkIHRvIHRhcmdldC5cclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyB0YXJnZXQ6IFRoZSB0YXJnZXQgYWxwaGEgc3RyaW5nIG9yIGV4cHJlc3Npb24gd2hlcmUgdGhlIHJlcGxhY2VtZW50IHdpbGwgdGFrZSBwbGFjZS5cclxuXHJcbiAgICAgICAgLy8gY291bnQgdGhlIG51bWJlciBvZiBieXRlcywgbm90IGNoYXJhY3RlcnMgKEpQTjogREJDUyBzdXBwb3J0KVxyXG4gICAgICAgIGlmIChzcGVjaWFsQW5zaUV4cHJlc3Npb24gfHxcclxuICAgICAgICAgICEodmFsMS5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUgfHxcclxuICAgICAgICAgICAgdmFsMi5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpKSB7XHJcbiAgICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gVXRpbFN0ckJ5dGVNb2RlLnJlcEIodmFsMS5TdHJWYWwsIHZhbDIuU3RyVmFsLCB2YWwzLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSxcclxuICAgICAgICAgICAgdmFsNC5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmV2YWxfb3BfcmVwXzEocmVzVmFsLCB2YWwxLCB2YWwyLCB2YWwzLCB2YWw0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JTlM6XHJcbiAgICAgICAgdmFsNCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgLy8gbGVuZ3RoOiBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGZyb20gc291cmNlIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRhcmdldC5cclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcG9zaXRpb246IEEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gaW4gdGFyZ2V0LlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzb3VyY2U6IEFuIGFscGhhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIHNvdXJjZSBzdHJpbmcuXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRhcmdldDogQW4gYWxwaGEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgdGFyZ2V0IHN0cmluZ1xyXG5cclxuICAgICAgICAvLyBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBub3QgY2hhcmFjdGVycyAoSlBOOiBEQkNTIHN1cHBvcnQpXHJcbiAgICAgICAgaWYgKHNwZWNpYWxBbnNpRXhwcmVzc2lvbiB8fFxyXG4gICAgICAgICAgISh2YWwxLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSB8fFxyXG4gICAgICAgICAgICB2YWwyLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkpIHtcclxuICAgICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSBVdGlsU3RyQnl0ZU1vZGUuaW5zQih2YWwxLlN0clZhbCwgdmFsMi5TdHJWYWwsIHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpLFxyXG4gICAgICAgICAgICB2YWw0Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZXZhbF9vcF9pbnMocmVzVmFsLCB2YWwxLCB2YWwyLCB2YWwzLCB2YWw0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ERUw6XHJcbiAgICAgICAgdmFsMyA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgLy8gbGVuZ3RoOiBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gYmUgZGVsZXRlZCwgYmVnaW5uaW5nIHdpdGggcG9zaXRpb24gc3RhcnQgYW5kIHByb2NlZWRpbmcgcmlnaHR3YXJkLlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdGFydCA6IFRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIHRvIGJlIGRlbGV0ZWQuXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZzogQW4gYWxwaGEgc3RyaW5nIG9yIGFuIGFscGhhIHN0cmluZyBleHByZXNzaW9uLlxyXG5cclxuICAgICAgICAvLyBjb3VudCB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBub3QgY2hhcmFjdGVycyAoSlBOOiBEQkNTIHN1cHBvcnQpXHJcbiAgICAgICAgaWYgKHNwZWNpYWxBbnNpRXhwcmVzc2lvbiB8fCB2YWwxLkF0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSkge1xyXG4gICAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IFV0aWxTdHJCeXRlTW9kZS5kZWxCKHZhbDEuU3RyVmFsLCB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSxcclxuICAgICAgICAgICAgdmFsMy5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmV2YWxfb3BfZGVsKHJlc1ZhbCwgdmFsMSwgdmFsMiwgdmFsMyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRkxJUDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZmxpcChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9VUFBFUjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfdXBwZXIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTE9XRVI6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2xvd2VyKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NSQzpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvLyBudW1lcmljOiBBIG51bWJlciB0aGF0IHJlcHJlc2VudHMgdGhlIENSQyBhbGdvcml0aG0uIEluIHRoaXMgdmVyc2lvbiBvZiBNYWdpYyB1c2UgMCB0byBhcHBseSBDUkMtMTYuXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZyA6IEFuIGFscGhhIHN0cmluZyB0byB3aGljaCB0aGUgQ1JDIGlzIGFwcGxpZWQuXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2NyYyhyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DSEtER1Q6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIDAgb3IgMSAobnVtYmVyKSBmb3IgTW9kdWx1cyAxMCBvciBNb2R1bHVzIDExLCByZXNwZWN0aXZlbHkuXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgLy8gQW4gYWxwaGEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgbnVtYmVyIGZvciB3aGljaCB0aGUgY2hlY2sgZGlnaXQgd2lsbCBiZSBjYWxjdWxhdGVkXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2Noa2RndChyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TT1VORFg6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3NvdW5keChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9IU1RSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9oc3RyKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0hWQUw6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2h2YWwocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ0hSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9jaHIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQVNDOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9hc2MocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTVNUUjpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfbXN0cihyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NVkFMOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9tdmFsKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RTVFI6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBpY3R1cmUgc3RyaW5nXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRhdGUgc3RyaW5nIGl0J3MgTE9HSUNBTCA/Pz8/Pz9cclxuICAgICAgICB0aGlzLmV2YWxfb3BfZHN0cihyZXNWYWwsIHZhbDEsIHZhbDIsIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EVkFMOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwaWN0dXJlICBmb3JtYXQgb2YgZGF0ZSBzdHJpbmcgb3V0cHV0XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRhdGUgc3RyaW5nXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2R2YWwocmVzVmFsLCB2YWwxLCB2YWwyLCBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVFNUUjpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGljdHVyZSBmb3JtYXQgb2YgdGltZSBzdHJpbmcgb3V0cHV0XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRpbWUgc3RyaW5nXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3RzdHIocmVzVmFsLCB2YWwxLCB2YWwyLCBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLCBmYWxzZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01UU1RSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwaWN0dXJlIGZvcm1hdCBvZiB0aW1lIHN0cmluZyBvdXRwdXRcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGltZSBzdHJpbmdcclxuICAgICAgICB0aGlzLmV2YWxfb3BfdHN0cihyZXNWYWwsIHZhbDEsIHZhbDIsIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UsIHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UVkFMOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwaWN0dXJlIHN0cmluZ1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aW1lIHN0cmluZ1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF90dmFsKHJlc1ZhbCwgdmFsMSwgdmFsMiwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSwgZmFsc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NVFZBTDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGljdHVyZSBzdHJpbmdcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGltZSBzdHJpbmdcclxuICAgICAgICB0aGlzLmV2YWxfb3BfdHZhbChyZXNWYWwsIHZhbDEsIHZhbDIsIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UsIHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EQVk6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2RheShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NT05USDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfbW9udGgocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfWUVBUjpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfeWVhcihyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ET1c6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2RvdyhyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DRE9XOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9jZG93KHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NNT05USDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfY21vbnRoKHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05ET1c6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIG51bWJlciBvciBkYXkgb2Ygd2Vla1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9uZG93KHJlc1ZhbCwgdmFsMSwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05NT05USDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbnVtYmVyIG9yIG1vbnRoIG9mIHllYXJcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfbm1vbnRoKHJlc1ZhbCwgdmFsMSwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1NFQ09ORDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfc2Vjb25kKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01JTlVURTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfbWludXRlKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0hPVVI6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2hvdXIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfREVMQVk6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiBub3Qgd2Fyaywgbm90IGNoZWNrZWRcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZGVsYXkoKTtcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lETEU6XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2lkbGUocmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FERERBVEU6XHJcbiAgICAgICAgdmFsNCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRheXM6IFRoZSBudW1iZXIgb2YgZGF5cyB0byBhZGQgdG8gZGF0ZS4gTWF5IGJlIHplcm8uXHJcbiAgICAgICAgdmFsMyA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIG1vbnRoczogVGhlIG51bWJlciBvZiBtb250aHMgdG8gYWRkIHRvIGRhdGUuIE1heSBiZSB6ZXJvLlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB5ZWFycyA6IFRoZSBudW1iZXIgb2YgeWVhcnMgdG8gYWRkIHRvIGRhdGUuIE1heSBiZSB6ZXJvLlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBkYXRlIDogQSBkYXRlLlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9hZGRkYXRlKHJlc1ZhbCwgdmFsMSwgdmFsMiwgdmFsMywgdmFsNCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0FERFRJTUU6XHJcbiAgICAgICAgdmFsNCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHNlY29uZHM6IFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byBhZGQgdG8gdGltZS5cclxuICAgICAgICB2YWwzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbWludXRlczogVGhlIG51bWJlciBvZiBtaW51dGVzIHRvIGFkZCB0byB0aW1lLlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBob3VycyA6IFRoZSBudW1iZXIgb2YgaG91cnMgdG8gYWRkIHRvIHRpbWVcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGltZSA6IEEgdGltZSB2YWx1ZS5cclxuICAgICAgICB0aGlzLmV2YWxfb3BfYWRkdGltZShyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMsIHZhbDQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9PV05FUjpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IEVudmlyb25tZW50Lkluc3RhbmNlLmdldE93bmVyKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUkFUVFI6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3ZhcmF0dHIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSUElDOlxyXG4gICAgICAgIHZhbDIgPSAoPEV4cFZhbD52YWxTdGFjay5wb3AoKSk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgLy8gdG8gYWRkIHRoaXMgbWV0aG9kXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3ZhcnBpYyhyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EQlJPVU5EOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIC8vIHRvIGFkZCB0aGlzIG1ldGhvZFxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9kYnJvdW5kKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTEw6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9BOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfTjpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX0I6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9EOlxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfVDpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX1U6XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9POlxyXG4gICAgICAgIHRoaXMuZXhwX251bGxfdmFsX2dldChleHBlY3RlZFR5cGUsIG9wQ29kZSwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSVNOVUxMOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gdmFsMS5Jc051bGw7XHJcblxyXG4gICAgICAgIC8vIGlkZW50aWZ5IGEgc2l0dWF0aW9uIHdoZXJlIGEgdmFsdWUgd2FzIHVuLW51bGxpZmllZCBkdWUgdG8gXCJudWxsIGFyaXRobWV0aWNcIlxyXG4gICAgICAgIC8vIGFuZCBzdGlsbCwgbWFrZSBJU05VTEwoKSByZXR1cm4gVFJVRSBhbHRob3VnaCB0aGUgdmFsdWUgaXMgZmxhZ2dlZCBhcyBub24tbnVsbFxyXG4gICAgICAgIGlmICghdmFsMS5Jc051bGwgJiYgdmFsMS5PcmlnaW5hbE51bGwpXHJcbiAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHZhbDEuT3JpZ2luYWxOdWxsO1xyXG5cclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuXHJcbiAgICAgICAgLy8gbnVsbCB2YWx1ZXMgYWNjZXB0ZWQgaW50byB0aGUgSVNOVUxMKCkgZnVuY3Rpb24gZG8gbm90IG51bGxpZnkgdGhlXHJcbiAgICAgICAgLy8gV2hvbGUgZXhwcmVzc2lvbiwgdGh1cyBVTkxFU1MgU09NRVRISU5HIEVMU0UgbnVsbGlmaWVkIHRoZSBleHByZXNzaW9uLFxyXG4gICAgICAgIC8vIHdlIG1hcmsgaXQgYXMgTk9OLU5VTEwuIFdlIGNoZWNrIGlmIHNvbWV0aGluZyBlbHNlIG51bGxpZmllZCB0aGUgZXhwcmVzc2lvblxyXG4gICAgICAgIC8vIGJ5IHNjYW5uaW5nIHRoZSB2YWx1ZXMgY3VycmVudGx5IG9uIHRoZSBwYXJhbWV0ZXJzIHN0YWNrLlxyXG4gICAgICAgIGlmIChleHBTdHJUcmFja2VyLmlzTnVsbCgpKSB7XHJcbiAgICAgICAgICBsZXQgbXlBcnJheTogTGlzdDxFeHBWYWw+ID0gbmV3IExpc3Q8RXhwVmFsPigpO1xyXG4gICAgICAgICAgbGV0IHByZXZOdWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgICAgICAgd2hpbGUgKCEodmFsU3RhY2suY291bnQoKSA9PT0gMCkgJiYgIXByZXZOdWxsKSB7XHJcbiAgICAgICAgICAgIG15QXJyYXkucHVzaCg8RXhwVmFsPnZhbFN0YWNrLnBvcCgpKTtcclxuICAgICAgICAgICAgaWYgKG15QXJyYXkuZ2V0X0l0ZW0obXlBcnJheS5sZW5ndGggLSAxKS5Jc051bGwpXHJcbiAgICAgICAgICAgICAgcHJldk51bGwgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGZvciAoaSA9IG15QXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXHJcbiAgICAgICAgICAgIHZhbFN0YWNrLnB1c2gobXlBcnJheS5nZXRfSXRlbShpKSk7XHJcblxyXG4gICAgICAgICAgaWYgKCFwcmV2TnVsbClcclxuICAgICAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9CT006XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2JvbShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9CT1k6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2JveShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FT006XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2VvbShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9FT1k6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2VveShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ST0xMQkFDSzpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc2hvdyBtZXNzYWdlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGdlbmVyYXRpb24gKD8pXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3JvbGxiYWNrKHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZBUlNFVDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdmFsdWVcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gbnVtYmVyXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3ZhcnNldChyZXNWYWwsIHZhbDIsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DVFJMX05BTUU6XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2N0cmxfbmFtZShyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVERFUFRIOlxyXG4gICAgICAgIC8vIHVzZSB0aGUgY29udGV4dCB0YXNrIG9mIHRoZSBjdXJyZW50IHRhc2sgb2YgZXhwcmVzc2lvblxyXG4gICAgICAgIGxldCBjdXJyVHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCk7XHJcbiAgICAgICAgbGVuID0gKGN1cnJUc2suZ2V0VGFza0RlcHRoKGZhbHNlKSkgLSAxOyAvLyBzdGFydCBmcm9tIEZpcnN0IFRhc2tCYXNlIGFuZCBub3QgZnJvbSBtYWluIFRhc2tCYXNlXHJcbiAgICAgICAgdGhpcy5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGxlbiwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSVNERUZBVUxUOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXhwX2lzX2RlZmF1bHQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1RSVE9LRU46XHJcbiAgICAgICAgdmFsMyA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIERlbGltaXRlcnMgU3RyaW5nIC0gYWxwaGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlbGltaXRlciBzdHJpbmcuXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIFRva2VuIEluZGV4IC0gcmVxdWVzdGVkIHRva2VuIGluZGV4IChudW1lcmljKS5cclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gU291cmNlIFN0cmluZyAtIGRlbGltaXRlZCBhbHBoYSBzdHJpbmcgd2l0aCB0b2tlbnMuXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3N0cnRvayhyZXNWYWwsIHZhbDEsIHZhbDIsIHZhbDMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TVFJUT0tfQ05UOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aGUgZGVsaW1ldGVycyBzdHJpbmdcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGhlIHNvdXJjZSBzdHJpbmdcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfc3RyVG9rZW5DbnQodmFsMSwgdmFsMiwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU1RSVE9LRU5fSURYOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aGUgZGVsaW1ldGVycyBzdHJpbmdcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGhlIHRva2VuIHRvIGJlIGZvdW5kXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSBzb3VyY2Ugc3RyaW5nXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3N0clRva2VuSWR4KHZhbDEsIHZhbDIsIHZhbDMsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0JMT0JTSVpFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBCbG9iXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2Jsb2JzaXplKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9XRUJfUkVGRVJFTkNFOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gJyUnICsgdmFsMS5TdHJWYWwgKyAnJSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DQVNFOlxyXG4gICAgICAgIC8vIHRoZSBjYXNlIG5vdCB3b3JrIHdpdGggRGF0ZSBmaWVsZCwgYnV0IG5vdCB3b3JrIGluIE9uTGluZSB0b28uXHJcbiAgICAgICAgbkFyZ3MgPSB2YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBFeHBfcGFyYW1zID0gbmV3IEFycmF5KG5BcmdzKTtcclxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgIEV4cF9wYXJhbXNbbkFyZ3MgLSAxIC0gal0gPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMudmFsX2NweShFeHBfcGFyYW1zWzBdLCByZXNWYWwpOyAvLyBnZXQgIGNhc2UoQSkgLT4gJ0EnIHZhbHVlXHJcblxyXG4gICAgICAgIGZvciAoaiA9IDE7IGogPCBuQXJnczsgaiArPSAyKSB7XHJcbiAgICAgICAgICB2YWwxID0gRXhwX3BhcmFtc1tqXTtcclxuICAgICAgICAgIGxldCB2YWx1ZU1hdGNoZWQ6IGJvb2xlYW47XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YWx1ZU1hdGNoZWQgPSAoRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfY21wX2FueSh2YWwxLCByZXNWYWwpID09PSAwKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKG51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICBpZiAobnVsbFZhbHVlRXhjZXB0aW9uIGluc3RhbmNlb2YgTnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgdmFsdWVNYXRjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgIHRocm93IG51bGxWYWx1ZUV4Y2VwdGlvbjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodmFsdWVNYXRjaGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsX2NweShFeHBfcGFyYW1zW2ogKyAxXSwgcmVzVmFsKTsgLy8gdGhlIGNhc2UgZm91bmRcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaiA9PT0gKG5BcmdzIC0gMykpXHJcbiAgICAgICAgICAvLyBhcnJheSBzdGFydHMgZnJvbSAwIC0+bkFyZ3MtMTsgbGFzdCBpcyBkaWZmYXVsdCB2YWx1ZSAtPm5BcmdzLTE7XHJcbiAgICAgICAgICAvLyBsb29raW5nIG9uZSBiZWZvcmUgZGlmZmF1bHQgLT5uQXJncy0xID0+LTNcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy52YWxfY3B5KEV4cF9wYXJhbXNbaiArIDJdLCByZXNWYWwpOyAvLyBkaWZmYXVsdCBhcmd1bWVudCBmb3VuZFxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IC8vIGVuZCBvZiBmb3IgbG9vcFxyXG5cclxuICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9USElTOlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF90aGlzKHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xJS0U6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2xpa2UodmFsMSwgdmFsMiwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUkVQU1RSOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9yZXBzdHIodmFsMSwgdmFsMiwgdmFsMywgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSQ1VSUk46XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZywgbmFtZSBvZiBjb250cm9sXHJcbiAgICAgICAgdGhpcy5leHBfZ2V0X3Zhcih2YWwxLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WQVJJTkRFWDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nLCBuYW1lIG9mIGNvbnRyb2xcclxuICAgICAgICB0aGlzLmV4cF9nZXRfaW5keCh2YWwxLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSkNET1c6XHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9PSBudWxsKVxyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRhdGVcclxuICAgICAgICAgIHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbi5ldmFsX29wX2pjZG93KHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9KTU9OVEg6XHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9PSBudWxsKVxyXG4gICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIG51bWJlciBvciBtb250aCBvZiB5ZWFyXHJcbiAgICAgICAgICB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF9qbW9udGgocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0pORE9XOlxyXG4gICAgICAgIGlmICh0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4gPT0gbnVsbClcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBudW1iZXIgb3IgZGF5IG9mIHdlZWtcclxuICAgICAgICAgIHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbi5ldmFsX29wX2puZG93KHJlc1ZhbCwgdmFsMSwgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9KWUVBUjpcclxuICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGF0ZVxyXG4gICAgICAgICAgdGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuLmV2YWxfb3BfanllYXIocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0pHRU5HTzpcclxuICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZGF0ZVxyXG4gICAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIG1vZGVcclxuICAgICAgICAgIHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbi5ldmFsX29wX2pnZW5nbyhyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIHZhbDIuTWdOdW1WYWwsXHJcbiAgICAgICAgICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSEFOOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdHJpbmdcclxuICAgICAgICByZXNWYWwuQXR0ciA9IHZhbDEuQXR0cjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9PSBudWxsKVxyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsO1xyXG4gICAgICAgIGVsc2UgaWYgKHZhbDEuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgdmFsMS5BdHRyKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF9oYW4odmFsMS5TdHJWYWwpO1xyXG4gICAgICAgICAgaWYgKHJlc1ZhbC5TdHJWYWwgPT0gbnVsbClcclxuICAgICAgICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfWkVOOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzdHJpbmdcclxuICAgICAgICByZXNWYWwuQXR0ciA9IHZhbDEuQXR0cjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbiA9PSBudWxsKVxyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsO1xyXG4gICAgICAgIGVsc2UgaWYgKHZhbDEuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgdmFsMS5BdHRyKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF96ZW5zKHZhbDEuU3RyVmFsLCAwKTtcclxuICAgICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1pFTlM6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIG1vZGVcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gc3RyaW5nXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSB2YWwxLkF0dHI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4gPT0gbnVsbClcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbDtcclxuICAgICAgICBlbHNlIGlmICh2YWwyLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMS5TdHJWYWwgPT0gbnVsbClcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCB2YWwxLkF0dHIpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmVzVmFsLlN0clZhbCA9IHRoaXMuX2V4cHJlc3Npb25Mb2NhbEpwbi5ldmFsX29wX3plbnModmFsMS5TdHJWYWwsIHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1pJTUVSRUFEOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuID09IG51bGwpXHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWw7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuLmV2YWxfb3BfemltZXJlYWQoKTtcclxuICAgICAgICAgIGlmIChyZXNWYWwuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1pLQU5BOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBtb2RlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHN0cmluZ1xyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gdmFsMS5BdHRyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXhwcmVzc2lvbkxvY2FsSnBuID09IG51bGwpXHJcbiAgICAgICAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWw7XHJcbiAgICAgICAgZWxzZSBpZiAodmFsMi5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDEuU3RyVmFsID09IG51bGwpXHJcbiAgICAgICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgdmFsMS5BdHRyKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJlc1ZhbC5TdHJWYWwgPSB0aGlzLl9leHByZXNzaW9uTG9jYWxKcG4uZXZhbF9vcF96a2FuYSh2YWwxLlN0clZhbCwgdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgICAgICAgaWYgKHJlc1ZhbC5TdHJWYWwgPT0gbnVsbClcclxuICAgICAgICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfR09UT19DVFJMOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9nb3RvQ3RybCh2YWwxLCB2YWwyLCB2YWwzLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UUkFOU0xBVEU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3RyYW5zbGF0ZSh2YWwxLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9BU1RSOlxyXG4gICAgICAgIHZhbDIgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9hc3RyKHZhbDEsIHZhbDIsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MT09QQ09VTlRFUjpcclxuICAgICAgICB0aGlzLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldExvb3BDb3VudGVyKCksIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZFQ0NFTExBVFRSOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIEV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbF9vcF92ZWNDZWxsQXR0cih2YWwxLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9WRUNHRVQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSBjZWxsIGluZGV4XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSB2ZWN0b3Igbm90IGEgJ3ZhcicgbGl0ZXJhbFxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF92ZWNHZXQodmFsMSwgdmFsMiwgcmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkVDU0VUOlxyXG4gICAgICAgIHZhbDMgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB0aGUgbmV3IHZhbHVlIG9mIHRoZSBjZWxsXHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSBjZWxscyBpbmRleCB0byBiZSBzZXRcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gYSAndmFyJyBsaXRlcmFsIHJlcHJlc2VudGluZyB0aGUgdmVjdG9yXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3ZlY1NldCh2YWwxLCB2YWwyLCB2YWwzLCByZXNWYWwpO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZXhwU3RyVHJhY2tlci5pc051bGwoKSlcclxuICAgICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1ZFQ1NJWkU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHRoZSB2ZWN0b3Igbm90IGEgJ3ZhcicgbGl0ZXJhbFxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF92ZWNTaXplKHZhbDEsIHJlc1ZhbCk7XHJcbiAgICAgICAgZXhwU3RyVHJhY2tlci5yZXNldE51bGxSZXN1bHQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSU46XHJcbiAgICAgICAgbkFyZ3MgPSB2YWxTdGFjay5wb3AoKTtcclxuXHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgRXhwX3BhcmFtcyA9IG5ldyBBcnJheTxFeHBWYWw+KG5BcmdzKTtcclxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgIEV4cF9wYXJhbXNbbkFyZ3MgLSAxIC0gal0gPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgZm9yIChqID0gMTsgaiA8IG5BcmdzOyBqKyspIHtcclxuICAgICAgICAgICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkoRXhwX3BhcmFtc1swXSwgRXhwX3BhcmFtc1tqXSkgPT09IDApIHtcclxuICAgICAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgIGlmIChudWxsVmFsdWVFeGNlcHRpb24gaW5zdGFuY2VvZiBOdWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgICAgICAgICB9IGVsc2UgdGhyb3cgbnVsbFZhbHVlRXhjZXB0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lTQ09NUE9ORU5UOlxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9pc2NvbXBvbmVudChyZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVVNFUl9ERUZJTkVEX0ZVTkM6XHJcbiAgICAgICAgbkFyZ3MgPSB2YWxTdGFjay5wb3AoKTtcclxuICAgICAgICAvKiBuQXJncyBzaG91bGQgYXRsZWFzdCBiZSAxIChmb3IgaG9sZGluZyB0aGUgZnVuY3Rpb24gbmFtZSkgKi9cclxuICAgICAgICBpZiAobkFyZ3MgPiAwKSB7XHJcbiAgICAgICAgICBuQXJncy0tOyAvLyBvbmUgb2YgdGhlIGFyZ3VtZW50cyBpcyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gKGl0IHdpbGwgYmUgdGhlIDFzdCB2YWx1ZSlcclxuICAgICAgICAgIEV4cF9wYXJhbXMgPSBuZXcgQXJyYXk8RXhwVmFsPihuQXJncyk7XHJcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgICAgRXhwX3BhcmFtc1tuQXJncyAtIDEgLSBqXSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgICAgbGV0IGZ1bmNOYW1lOiBzdHJpbmcgPSAoPEV4cFZhbD52YWxTdGFjay5wb3AoKSkuU3RyVmFsO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX0V4ZWNVc2VyRGVmaW5lZEZ1bmMoZnVuY05hbWUsIEV4cF9wYXJhbXMsIHJlc1ZhbCwgZXhwZWN0ZWRUeXBlKTtcclxuICAgICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9VTklDT0RFQVNDOlxyXG4gICAgICAgIC8vIGdldCBhIHVuaWNvZGUgc3RyaW5nIGFuZCByZXR1cm4gdGhlIHVuaWNvZGUgbnVtZXJpYyBjb2RlIG9mIGl0cyBmaXJzdCBjaGFyXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoIXZhbDEuSXNOdWxsICYmIHZhbDEuU3RyVmFsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgICAgICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcodmFsMS5TdHJWYWxbMF0uY2hhckNvZGVBdCgwKSk7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICByZXNWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1BVQkxJQ05BTUU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3BfcHVibGljTmFtZShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9UQVNLSUQ6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3BfdGFza0lkKHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0RCVklFV1NJWkU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3BfZGJ2aWV3c2l6ZShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9EQlZJRVdST1dJRFg6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3BfZGJ2aWV3cm93aWR4KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1BST0pFQ1RESVI6XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3Byb2plY3RkaXIocmVzVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX01MU19UUkFOUzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gdGhlIGNvbnRyb2wgbmFtZVxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9NbHNUcmFucyhyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TVFJfQlVJTEQ6XHJcbiAgICAgICAgbkFyZ3MgPSB2YWxTdGFjay5wb3AoKTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfU3RyQnVpbGQodmFsU3RhY2ssIHJlc1ZhbCwgbkFyZ3MpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TVEFUVVNCQVJTRVRURVhUOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9zdGF0dXNiYXJfc2V0X3RleHQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TRVRfVElUTEU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3NldF90aXRsZShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lTX1JPV19FRElUSU5HOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9pc19yb3dfZWRpdGluZyhyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGV4cFN0clRyYWNrZXIucmVzZXROdWxsUmVzdWx0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0dFVFBBUkFNOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBwYXJhbWV0ZXIgbmFtZVxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9nZXRQYXJhbShyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TRVRQQVJBTTpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGFyYW1ldGVyIHZhbHVlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBhcmFtZXRlciBuYW1lXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3NldFBhcmFtKHJlc1ZhbCwgdmFsMSwgdmFsMik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0lOSVBVVDpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGFyYW1ldGVyIHZhbHVlXHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBhcmFtZXRlciBuYW1lXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX2luaXB1dChyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JTklHRVQ6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIHBhcmFtZXRlciBuYW1lXHJcbiAgICAgICAgdGhpcy5ldmFsX29wX2luaWdldChyZXNWYWwsIHZhbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JTklHRVRMTjpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcGFyYW1ldGVyIG51bWJlclxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBzZWN0aW9uIG5hbWVcclxuICAgICAgICB0aGlzLmV2YWxfb3BfaW5pZ2V0bG4ocmVzVmFsLCB2YWwxLCB2YWwyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVhQQ0FMQzpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gRVhQXHJcbiAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX2V4cGNhbGMocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVEFTS1RZUEU6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIEdlbmVyYXRpb25cclxuICAgICAgICB0aGlzLmV2YWxfb3BfdGFza1R5cGUocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUkFOR0VfQUREOlxyXG4gICAgICAgIG5BcmdzID0gdmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgIGlmIChuQXJncyA+IDApIHtcclxuICAgICAgICAgIEV4cF9wYXJhbXMgPSBuZXcgQXJyYXk8RXhwVmFsPihuQXJncyk7XHJcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgICAgRXhwX3BhcmFtc1tuQXJncyAtIDEgLSBqXSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX3JhbmdlX2FkZChyZXNWYWwsIEV4cF9wYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUkFOR0VfUkVTRVQ6XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGdlbmVyYXRpb25cclxuICAgICAgICBhd2FpdCB0aGlzLmV2YWxfb3BfcmFuZ2VfcmVzZXQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTE9DQVRFX0FERDpcclxuICAgICAgICBuQXJncyA9IHZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGlmIChuQXJncyA+IDApIHtcclxuICAgICAgICAgIEV4cF9wYXJhbXMgPSBuZXcgQXJyYXk8RXhwVmFsPihuQXJncyk7XHJcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgICAgRXhwX3BhcmFtc1tuQXJncyAtIDEgLSBqXSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5ldmFsX29wX2xvY2F0ZV9hZGQocmVzVmFsLCBFeHBfcGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0xPQ0FURV9SRVNFVDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZ2VuZXJhdGlvblxyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9sb2NhdGVfcmVzZXQocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU09SVF9BREQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7IC8vIGRpclxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyB2YXJudW1cclxuICAgICAgICBhd2FpdCB0aGlzLmV2YWxfb3Bfc29ydF9hZGQocmVzVmFsLCB2YWwxLCB2YWwyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfU09SVF9SRVNFVDpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZ2VuZXJhdGlvblxyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9zb3J0X3Jlc2V0KHJlc1ZhbCwgdmFsMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1RTS19JTlNUQU5DRTpcclxuICAgICAgICB2YWwxID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gZ2VuZXJhdGlvblxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF90c2tfaW5zdGFuY2UocmVzVmFsLCB2YWwxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX1RFUk06XHJcbiAgICAgICAgdGhpcy5ldmFsX29wX3Rlcm1pbmFsKHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfQ0xJRU5UU0VTU0lPTl9TRVQ6XHJcbiAgICAgICAgdmFsMiA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgdmFsMSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9DbGllbnRTZXNzaW9uU2V0KHZhbDEsIHZhbDIsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NORF9SQU5HRTpcclxuICAgICAgICB2YWwyID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTsgLy8gcmFuZ2UgdG8gYmUgdXNlZFxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpOyAvLyBjb25kaXRpb24gdG8gdXNlIHJhbmdlXHJcblxyXG4gICAgICAgIHRoaXMuZXZhbF9vcF9DbmRSYW5nZShyZXNWYWwsIHZhbDEsIHZhbDIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DT05UUk9MX1NFTEVDVF9QUk9HUkFNOlxyXG4gICAgICAgIHZhbDEgPSA8RXhwVmFsPnZhbFN0YWNrLnBvcCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZXZhbF9vcF9jb250cm9sX3NlbGVjdF9wcm9ncmFtKHZhbDEsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0NBTExKUzpcclxuICAgICAgICBuQXJncyA9IDxudW1iZXI+dmFsU3RhY2sucG9wKCk7XHJcbiAgICAgICAgaWYgKG5BcmdzID4gMCkge1xyXG4gICAgICAgICAgbkFyZ3MtLTsgLy8gZmlyc3QgYXJndW1lbnQgaXMgbmFtZSBvZiBqYXZhc2NyaXB0IG1ldGhvZFxyXG5cclxuICAgICAgICAgIC8vIGdldCB0aGUgcGFyYW1ldGVyc1xyXG4gICAgICAgICAgRXhwX3BhcmFtcyA9IG5ldyBBcnJheShuQXJncyk7XHJcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbkFyZ3M7IGorKylcclxuICAgICAgICAgICAgRXhwX3BhcmFtc1tuQXJncyAtIDEgLSBqXSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5ldmFsX29wX0NhbGxKUyh0aGlzLkV4cFRhc2ssICg8RXhwVmFsPnZhbFN0YWNrLnBvcCgpKS5TdHJWYWwsIEV4cF9wYXJhbXMsIHJlc1ZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9TRVRfQ09PS0lFOlxyXG4gICAgICAgIG5BcmdzID0gPG51bWJlcj52YWxTdGFjay5wb3AoKTtcclxuICAgICAgICBpZiAobkFyZ3MgPiAwKSB7XHJcbiAgICAgICAgICBuQXJncy0tOyAvLyBmaXJzdCBhcmd1bWVudCBpcyBuYW1lIG9mIGphdmFzY3JpcHQgbWV0aG9kXHJcblxyXG4gICAgICAgICAgLy8gZ2V0IHRoZSBwYXJhbWV0ZXJzXHJcbiAgICAgICAgICBFeHBfcGFyYW1zID0gbmV3IEFycmF5KG5BcmdzKTtcclxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuQXJnczsgaisrKVxyXG4gICAgICAgICAgICBFeHBfcGFyYW1zW25BcmdzIC0gMSAtIGpdID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmV2YWxfb3Bfc2V0X2Nvb2tpZSgoPEV4cFZhbD52YWxTdGFjay5wb3AoKSkuU3RyVmFsLCBFeHBfcGFyYW1zLCByZXNWYWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfR0VUX0NPT0tJRTpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICAgICAgcmVzVmFsLklzTnVsbCA9IGZhbHNlO1xyXG4gICAgICAgICB0aGlzLmV2YWxfb3BfZ2V0X2Nvb2tpZSgoPEV4cFZhbD52YWxTdGFjay5wb3AoKSkuU3RyVmFsLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ERUxFVEVfQ09PS0lFOlxyXG4gICAgICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICAgIHJlc1ZhbC5Jc051bGwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmV2YWxfb3BfZGVsZXRlX2Nvb2tpZSgoPEV4cFZhbD52YWxTdGFjay5wb3AoKSkuU3RyVmFsLCByZXNWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9ST1VURUdFVDpcclxuICAgICAgICB0aGlzLmV2YWxfb3Bfcm91dGVfZ2V0KHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChhZGRSZXN1bHQpIHtcclxuICAgICAgdGhpcy5Db252ZXJ0RXhwVmFsKHJlc1ZhbCwgZXhwZWN0ZWRUeXBlKTtcclxuICAgICAgdmFsU3RhY2sucHVzaChyZXNWYWwpO1xyXG4gICAgICAvKiBjaGVjayBpZiB3ZSBtdXN0IG51bGxpZnkgcmVzdWx0LCBiZWNhdXNlIG9uZSBvZiB0aGUgbWVtYmVycyBvZiB0aGUgZXhwcmVzc2lvbiBpcyBOVUxMXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAocmVzVmFsLklzTnVsbClcclxuICAgICAgICBleHBTdHJUcmFja2VyLnNldE51bGxSZXN1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2V0cyB0aGUgY2xpZW50IHNlc3Npb24gd2l0aCBLZXksIFZhbHVlIHBhaXIgcHJvdmlkZWQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwxXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9DbGllbnRTZXNzaW9uU2V0KHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG5cclxuICAgIGlmICghdmFsMS5pc0VtcHR5U3RyaW5nKCkpIHtcclxuICAgICAgc3dpdGNoICh2YWwxLlN0clZhbCkge1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRU5BQkxFX0NPTU1VTklDQVRJT05fRElBTE9HUzpcclxuICAgICAgICAgIGlmICh2YWwyLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTikge1xyXG4gICAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKCdJbnZhbGlkIGF0dHJpYnV0ZSBmb3IgJyArIENvbnN0SW50ZXJmYWNlLkVOQUJMRV9DT01NVU5JQ0FUSU9OX0RJQUxPR1MgKyAnIGtleSBpbiBDbGllbnRTZXNzaW9uU2V0KCknKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKCdJbnZhbGlkIEtleSBpbiBDbGllbnRTZXNzaW9uU2V0KCknKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRXhlY3V0ZSB0aGUgZXhwcmVzc2lvbiBpdHNlbGZcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZXhwU3RyVHJhY2tlclwiPnRoZSBleHByZXNzaW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFN0YWNrXCI+c3RhY2sgb2YgdmFsdWVzIHRvIHVzZSB3aGlsZSBleGVjdXRpbmcgdGhlIGV4cHJlc3Npb248L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZXhwZWN0ZWRUeXBlXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV4ZWNFeHByZXNzaW9uKGV4cFN0clRyYWNrZXI6IEV4cFN0clRyYWNrZXIsIHZhbFN0YWNrOiBTdGFjazxhbnk+LCBleHBlY3RlZFR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBleHBWYWw6IEV4cFZhbDtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgYWRkZWRPcGVyczogTGlzdDxEeW5hbWljT3BlcmF0aW9uPiA9IG5ldyBMaXN0PER5bmFtaWNPcGVyYXRpb24+KCk7XHJcbiAgICBsZXQgZHluT3BlcjogRHluYW1pY09wZXJhdGlvbjtcclxuXHJcbiAgICBsZXQgb3BDb2RlOiBudW1iZXIgPSBleHBTdHJUcmFja2VyLmdldE9wQ29kZSgpO1xyXG5cclxuICAgIC8vIGlmIGEgYmFzaWMgZGF0YSBpdGVtLCBqdXN0IGdldCBpdCBhbmQgcHVzaCBpdCB0byB0aGUgc3RhY2tcclxuICAgIGlmIChFeHByZXNzaW9uRXZhbHVhdG9yLmlzQmFzaWNJdGVtKG9wQ29kZSkpIHtcclxuICAgICAgZXhwVmFsID0gdGhpcy5nZXRFeHBCYXNpY1ZhbHVlKGV4cFN0clRyYWNrZXIsIG9wQ29kZSk7XHJcblxyXG4gICAgICB0aGlzLkNvbnZlcnRFeHBWYWwoZXhwVmFsLCBleHBlY3RlZFR5cGUpO1xyXG4gICAgICB2YWxTdGFjay5wdXNoKGV4cFZhbCk7XHJcbiAgICAgIC8qIGNoZWNrIGlmIHdlIG11c3QgbnVsbGlmeSByZXN1bHQsIGJlY2F1c2Ugb25lIG9mIHRoZSBtZW1iZXJzIG9mIHRoZSBleHByZXNzaW9uIGlzIE5VTExcclxuICAgICAgICovXHJcbiAgICAgIGlmIChleHBWYWwuSXNOdWxsKVxyXG4gICAgICAgIGV4cFN0clRyYWNrZXIuc2V0TnVsbFJlc3VsdCgpO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBleHBEZXNjOiBFeHBEZXNjID0gRXhwcmVzc2lvbkRpY3QuZXhwRGVzY1tvcENvZGVdO1xyXG5cclxuICAgIC8vIE51bGwgcmVzdWx0IG9mIGEgZnVuY3Rpb24gZGVwZW5kcyBvbmx5IG9uIHJldHVybiB2YWx1ZSBpdHMgcGFyYW1ldGVyc1xyXG4gICAgLy8gSXQgZG9lc24ndCBkZXBlbmQgb24gd2hldGhlciBhbnkgcGFyYW1ldGVyIGluIHRoZSB3aG9sZSBleHByZXNzaW9uIGlzIE5VTExcclxuICAgIC8vIEZvciBleGFtcGxlIGluIElGIChWZWNTZXQgKCdBJ1ZhciwgMSwgTlVMTCgpKSwgQSwgQilcclxuICAgIC8vIElGIHNob3VsZCBub3QgcmV0dXJuIE5VTEwgYmVjYXVzZSBWZWNTZXQgaGFzIGEgTlVMTCBwYXJhbWV0ZXIgYnV0IGl0IHNob3VsZFxyXG4gICAgLy8gcmV0dXJuIE5VTEwgaWYgZWl0aGVyIG9mIHRoZSBwYXJhbWV0ZXJzIChWZWNTZXQsIEEgb3IgQikgaXMgTlVMTFxyXG4gICAgbGV0IG51bGxBcmdzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAoZXhwRGVzYy5BcmdFdmFsQ291bnRfID4gMCkge1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZXhwRGVzYy5BcmdFdmFsQ291bnRfOyBpKyspIHtcclxuICAgICAgICBleHBTdHJUcmFja2VyLnJlc2V0TnVsbFJlc3VsdCgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY0V4cHJlc3Npb24oZXhwU3RyVHJhY2tlciwgdmFsU3RhY2ssIDxTdG9yYWdlQXR0cmlidXRlPmV4cERlc2MuQXJnQXR0cl9baV0pO1xyXG4gICAgICAgIGlmIChleHBTdHJUcmFja2VyLmlzTnVsbCgpKVxyXG4gICAgICAgICAgbnVsbEFyZ3MgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG51bGxBcmdzKVxyXG4gICAgICBleHBTdHJUcmFja2VyLnNldE51bGxSZXN1bHQoKTtcclxuXHJcbiAgICAvLyBleGVjdXRlIHRoZSBjdXJyZW50IG9wZXJhdG9yXHJcbiAgICBhd2FpdCB0aGlzLmV4ZWNPcGVyYXRpb24ob3BDb2RlLCBleHBTdHJUcmFja2VyLCB2YWxTdGFjaywgYWRkZWRPcGVycywgZXhwZWN0ZWRUeXBlKTtcclxuXHJcbiAgICAvLyBpZiB0aGVyZSBhcmUgc2lkZSBlZmZlY3Qgb3BlcmF0aW9uLCBleGVjdXRlIHRoZW1cclxuICAgIGxldCBuRHluT3BlcnM6IG51bWJlciA9IGFkZGVkT3BlcnMubGVuZ3RoO1xyXG4gICAgaWYgKG5EeW5PcGVycyA+IDApIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IG5EeW5PcGVyczsgaSsrKSB7XHJcbiAgICAgICAgZHluT3BlciA9IGFkZGVkT3BlcnMuZ2V0X0l0ZW0oMCk7XHJcbiAgICAgICAgYWRkZWRPcGVycy5SZW1vdmVBdCgwKTtcclxuICAgICAgICBzd2l0Y2ggKGR5bk9wZXIub3BDb2RlXykge1xyXG4gICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9JR05PUkU6XHJcbiAgICAgICAgICAgIGxldCBqOiBudW1iZXI7XHJcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBkeW5PcGVyLmFyZ0NvdW50XzsgaisrKVxyXG4gICAgICAgICAgICAgIGV4cFN0clRyYWNrZXIuc2tpcE9wZXJhdG9yKCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfRVZBTFg6XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY0V4cHJlc3Npb24oZXhwU3RyVHJhY2tlciwgdmFsU3RhY2ssIGV4cGVjdGVkVHlwZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDYWxjdWxhdGUgdGhlIHZhbHVlIG9mIHRoZSAxc3QgQ25kUmFuZ2UgcGFyYW1ldGVyLCBhbmQgcmV0dXJuIHRydWUgaWYgdGhlIENuZFJhbmdlIHJlc3VsdCBzaG91bGQgYmUgZGlzY2FyZGVkXHJcbiAgLy8vIFNpbWlsYXIgdG8gZXhlY0V4cHJlc3Npb24sIGJ1dCB3b3JrcyBvbmx5IG9uIENuZFJhbmdlLCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBDbmRSYW5nZSAxc3QgcGFyYW1ldGVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJleHBTdHJUcmFja2VyXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxTdGFja1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZXhwZWN0ZWRUeXBlXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+dHJ1ZSBpZiBDbmRSYW5nZSBldmFsdWF0ZWQgdG8gZmFsc2UgYW5kIHRoZSByYW5nZSBzaG91bGQgYmUgZGlzY2FyZGVkPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgYXN5bmMgRGlzY2FyZENuZFJhbmdlRXhwcmVzc2lvbihleHBTdHJUcmFja2VyOiBFeHBTdHJUcmFja2VyLCB2YWxTdGFjazogU3RhY2s8YW55Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IGV4cFZhbDogRXhwVmFsO1xyXG4gICAgbGV0IG9wQ29kZTogbnVtYmVyID0gZXhwU3RyVHJhY2tlci5nZXRPcENvZGUoKTtcclxuXHJcbiAgICAvLyBpZiBhIGJhc2ljIGRhdGEgaXRlbSwganVzdCBnZXQgaXQgYW5kIHB1c2ggaXQgdG8gdGhlIHN0YWNrXHJcbiAgICBpZiAob3BDb2RlICE9PSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9DTkRfUkFOR0UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBleHBEZXNjOiBFeHBEZXNjID0gRXhwcmVzc2lvbkRpY3QuZXhwRGVzY1tvcENvZGVdO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuZXhlY0V4cHJlc3Npb24oZXhwU3RyVHJhY2tlciwgdmFsU3RhY2ssIDxTdG9yYWdlQXR0cmlidXRlPmV4cERlc2MuQXJnQXR0cl9bMF0pO1xyXG5cclxuICAgIGV4cFZhbCA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICByZXR1cm4gZXhwVmFsLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTiAmJiAhZXhwVmFsLkJvb2xWYWw7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdmFsX2NtcF9hbnkodmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwpOiBudW1iZXIge1xyXG4gICAgbGV0IHJldHZhbDogbnVtYmVyID0gMDtcclxuICAgIGxldCBhdHRyMTogU3RvcmFnZUF0dHJpYnV0ZSA9IHZhbDEuQXR0cjtcclxuICAgIGxldCBhdHRyMjogU3RvcmFnZUF0dHJpYnV0ZSA9IHZhbDIuQXR0cjtcclxuICAgIGxldCBleHBWYWw6IEV4cHJlc3Npb25FdmFsdWF0b3IgPSBuZXcgRXhwcmVzc2lvbkV2YWx1YXRvcigpO1xyXG5cclxuICAgIGlmICh2YWwxLklzTnVsbCAmJiB2YWwyLklzTnVsbClcclxuICAgICAgcmV0dXJuIDA7XHJcblxyXG4gICAgaWYgKHZhbDEuSXNOdWxsIHx8IHZhbDIuSXNOdWxsKVxyXG4gICAgICB0aHJvdyBuZXcgTnVsbFZhbHVlRXhjZXB0aW9uKGF0dHIxKTtcclxuXHJcbiAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZUJsb2IoYXR0cjEpKSB7XHJcbiAgICAgIGlmICh2YWwxLkluY2x1ZGVCbG9iUHJlZml4ICYmIEJsb2JUeXBlLmdldENvbnRlbnRUeXBlKHZhbDEuU3RyVmFsKSA9PT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX0JJTkFSWSkge1xyXG4gICAgICAgIHZhbDEuU3RyVmFsID0gQmxvYlR5cGUucmVtb3ZlQmxvYlByZWZpeCh2YWwxLlN0clZhbCk7XHJcbiAgICAgICAgdmFsMS5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICB2YWwxLkluY2x1ZGVCbG9iUHJlZml4ID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIGV4cFZhbC5Db252ZXJ0RXhwVmFsKHZhbDEsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICB9XHJcbiAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZUJsb2IoYXR0cjIpKSB7XHJcbiAgICAgIGlmICh2YWwyLkluY2x1ZGVCbG9iUHJlZml4ICYmIEJsb2JUeXBlLmdldENvbnRlbnRUeXBlKHZhbDIuU3RyVmFsKSA9PT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX0JJTkFSWSkge1xyXG4gICAgICAgIHZhbDIuU3RyVmFsID0gQmxvYlR5cGUucmVtb3ZlQmxvYlByZWZpeCh2YWwyLlN0clZhbCk7XHJcbiAgICAgICAgdmFsMi5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICB2YWwyLkluY2x1ZGVCbG9iUHJlZml4ID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIGV4cFZhbC5Db252ZXJ0RXhwVmFsKHZhbDIsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXR0cjEgPSB2YWwxLkF0dHI7XHJcbiAgICBhdHRyMiA9IHZhbDIuQXR0cjtcclxuXHJcbiAgICBpZiAoYXR0cjEgIT09IGF0dHIyKSB7XHJcbiAgICAgIGlmICgoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVHlwZU51bWVyaWMoYXR0cjEpICYmIFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1R5cGVOdW1lcmljKGF0dHIyKSkgfHxcclxuICAgICAgICAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKGF0dHIxKSAmJiBTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUoYXR0cjIpKSkge1xyXG4gICAgICAgIC8qIERvIG5vdGhpbmcgOiBpdCdzIE9LIHRvIGNvbXBhcmUgdGhlc2UgdHlwZXMgKi9cclxuICAgICAgfSBlbHNlXHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIFRoaXMgY29kZSB3YXMgdGFrZW4gZnJvbSBTVE9SQUdFOjpmbGRfY21wIG1ldGhvZCBpbiBNYWdpY1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIHN3aXRjaCAoYXR0cjEpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwgJiYgdmFsMi5TdHJWYWwgPT09IG51bGwpXHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuXHJcbiAgICAgICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsIHx8IHZhbDIuU3RyVmFsID09PSBudWxsKVxyXG4gICAgICAgICAgdGhyb3cgbmV3IE51bGxWYWx1ZUV4Y2VwdGlvbihhdHRyMSk7XHJcblxyXG4gICAgICAgIGxldCBzdHIxOiBzdHJpbmcgPSBTdHJVdGlsLnJ0cmltKHZhbDEuU3RyVmFsKTtcclxuICAgICAgICBsZXQgc3RyMjogc3RyaW5nID0gU3RyVXRpbC5ydHJpbSh2YWwyLlN0clZhbCk7XHJcblxyXG4gICAgICAgIGlmIChFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRTcGVjaWFsQW5zaUV4cHJlc3Npb24oKSB8fFxyXG4gICAgICAgICAgKFV0aWxTdHJCeXRlTW9kZS5pc0xvY2FsZURlZkxhbmdEQkNTKCkgJiZcclxuICAgICAgICAgICAgYXR0cjEgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEgJiYgYXR0cjIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpKVxyXG4gICAgICAgICAgcmV0dmFsID0gVXRpbFN0ckJ5dGVNb2RlLnN0cmNtcChzdHIxLCBzdHIyKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXR2YWwgPSBOU3RyaW5nLkNvbXBhcmVPcmRpbmFsKHN0cjEsIHN0cjIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwgJiYgdmFsMi5NZ051bVZhbCA9PT0gbnVsbClcclxuICAgICAgICAgIHJldHVybiAwO1xyXG5cclxuICAgICAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09PSBudWxsKVxyXG4gICAgICAgICAgdGhyb3cgbmV3IE51bGxWYWx1ZUV4Y2VwdGlvbihhdHRyMSk7XHJcbiAgICAgICAgcmV0dmFsID0gTlVNX1RZUEUubnVtX2NtcCh2YWwxLk1nTnVtVmFsLCB2YWwyLk1nTnVtVmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICByZXR2YWwgPSAodmFsMS5Cb29sVmFsID8gMSA6IDApIC0gKHZhbDIuQm9vbFZhbCA/IDEgOiAwKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gKHJldHZhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2FsY3VsYXRlIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZXhwXCI+aXMgYSByZWZlcmVuY2UgdG8gdGhlIGV4cHJlc3Npb24gc3RyaW5nIHRvIGJlIGV2YWx1YXRlZC4gdGhpcyBzdHJpbmdcclxuICAvLy8gICBpcyBpbiBhbiBleHByZXNzaW9uIGluIHBvbGlzaCBub3RhdGlvbiB3aGVyZSBldmVyeSBieXRlIGlzIHJlcHJlc2VudGVkIGJ5IGFcclxuICAvLy8gICAyLWRpZ2l0IGhleCBudW1iZXI8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZXhwZWN0ZWRUeXBlXCI+aXMgdGhlIGV4cGVjdGVkIHR5cGUgb2YgdGhlIGV4cHJlc3Npb24uIHdoZW4gdGhlIGV4cHJlc3Npb25zIHR5cGUgZG9lc1xyXG4gIC8vLyAgIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgdHlwZSBhbiBleGNlcHRpb24gc2hvdWxkIGJlIHRocm93bi4gYSBzcGFjZSAoJyAnKSBoZXJlXHJcbiAgLy8vICAgbWVhbnMgYW55IGV4cHJlc3Npb24uIGl0IGlzIHVzZWQgZm9yIEV2YWx1YXRlIG9wZXJhdGlvbi48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1wiPmlzIGEgcmVmZXJlbmNlIHRvIHRoZSB0YXNrIGluIHdoaWNoIHRoZSBleHByZXNzaW9uIGlzIGRlZmluZWQuIGl0IGlzXHJcbiAgLy8vICAgdXNlZCBmb3IgZ2V0dGluZyBhIHJlZmVyZW5jZSB0byBmaWVsZHMgZm9yIGdldHRpbmcvc2V0dGluZyB0aGVpciB2YWx1ZXM8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gU3RyaW5nIGlzIHRoZSByZXN1bHQgb2YgdGhlIGV2YWx1YXRpb246XHJcbiAgLy8vICAgMS4gc3RyaW5nIHZhbHVlIHdpbGwgYmUgYSBzdHJpbmdcclxuICAvLy8gICAyLiBudW1lcmljLCBkYXRlLCB0aW1lIHdpbGwgYmUgYSBNYWdpYyBudW1iZXIgYXMgYSBzdHJpbmcgb2YgaGV4IGRpZ2l0c1xyXG4gIC8vLyAgIDMuIGxvZ2ljYWwgd2lsbCBiZSBvbmUgZGlnaXQ6IDAgZm9yIEZBTFNFLCAxIGZvciBUUlVFXHJcbiAgLy8vICAgNC4gbnVsbCB2YWx1ZSBqdXN0IHJldHVybiBudWxsIChub3QgYW4gZW1wdHkgc3RyaW5nISk8L3JldHVybnM+XHJcbiAgc3RhdGljIGFzeW5jIGV2YWwoZXhwOiBJbnQ4QXJyYXksIGV4cGVjdGVkVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgdGFzazogVGFza0Jhc2UpOiBQcm9taXNlPEV4cFZhbD4ge1xyXG4gICAgbGV0IHJlczogRXhwVmFsID0gbnVsbDtcclxuICAgIGxldCB2YWxTdGFjazogU3RhY2s8RXhwVmFsPiA9IG5ldyBTdGFjaygpO1xyXG5cclxuICAgIGlmIChleHAgIT09IG51bGwgJiYgZXhwLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IG1lOiBFeHByZXNzaW9uRXZhbHVhdG9yID0gbmV3IEV4cHJlc3Npb25FdmFsdWF0b3IoKTtcclxuICAgICAgbGV0IGV4cFN0clRyYWNrZXI6IEV4cFN0clRyYWNrZXIgPSBuZXcgRXhwU3RyVHJhY2tlcihleHAsIHRhc2suZ2V0TnVsbEFyaXRobWV0aWMoKSA9PT0gQ29uc3RhbnRzLk5VTExfQVJJVEhfTlVMTElGWSk7XHJcbiAgICAgIG1lLkV4cFRhc2sgPSB0YXNrO1xyXG4gICAgICBhd2FpdCBtZS5leGVjRXhwcmVzc2lvbihleHBTdHJUcmFja2VyLCB2YWxTdGFjaywgZXhwZWN0ZWRUeXBlKTtcclxuICAgICAgcmVzID0gPEV4cFZhbD52YWxTdGFjay5wb3AoKTtcclxuICAgICAgaWYgKGV4cFN0clRyYWNrZXIuaXNOdWxsKCkpXHJcbiAgICAgIC8vIG51bGwgYXJpdGhtZXRpYyA9PSBudWxsaWZ5IGFuZCBvbmUgb2YgdGhlIG1lbWJlcnMgb2YgdGhlIGV4cHJlc3Npb24gaXMgbnVsbCxcclxuICAgICAgLy8gc28gdGhlIHJlc3VsdCBtdXN0IGJlIE5VTExcclxuICAgICAgICByZXMuSXNOdWxsID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXN5bmMgRGlzY2FyZENuZFJhbmdlUmVzdWx0KGV4cDogSW50OEFycmF5LCB0YXNrOiBUYXNrQmFzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IHZhbFN0YWNrOiBTdGFjazxFeHBWYWw+ID0gbmV3IFN0YWNrKCk7XHJcblxyXG4gICAgaWYgKGV4cCAhPT0gbnVsbCAmJiBleHAubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgbWU6IEV4cHJlc3Npb25FdmFsdWF0b3IgPSBuZXcgRXhwcmVzc2lvbkV2YWx1YXRvcigpO1xyXG4gICAgICBsZXQgZXhwU3RyVHJhY2tlcjogRXhwU3RyVHJhY2tlciA9IG5ldyBFeHBTdHJUcmFja2VyKGV4cCwgdGFzay5nZXROdWxsQXJpdGhtZXRpYygpID09PSBDb25zdGFudHMuTlVMTF9BUklUSF9OVUxMSUZZKTtcclxuICAgICAgbWUuRXhwVGFzayA9IHRhc2s7XHJcbiAgICAgIHJldHVybiBhd2FpdCBtZS5EaXNjYXJkQ25kUmFuZ2VFeHByZXNzaW9uKGV4cFN0clRyYWNrZXIsIHZhbFN0YWNrKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgTnVsbCB0ZXJtaW5hdGVkIFBpY1xyXG4gIC8vLyAgIG1heCBsZW5ndGggb2YgdGhlIG1hc2sgaXMgMTAwIGNoYXJhY3RlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgc3RhdGljIHNldF9hX3BpYyh2YWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGVuOiBudW1iZXIgPSBNYXRoLm1pbih2YWwubGVuZ3RoLCA5OSk7XHJcbiAgICByZXR1cm4gU3RyVXRpbC5ac3RyaW5nTWFrZSh2YWwsIGxlbik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRXZhbHVhdGUgUkFOR0UgbWFnaWMgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9yYW5nZSh2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgdmFsMzogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkodmFsMSwgdmFsMikgPj0gMCkge1xyXG4gICAgICAgIHZhbDIgPSB2YWwzO1xyXG4gICAgICAgIGlmIChFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9jbXBfYW55KHZhbDEsIHZhbDIpIDw9IDApXHJcbiAgICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIE51bGxWYWx1ZUV4Y2VwdGlvbikge1xyXG4gICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBleC5nZXRBdHRyKCkpO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgICB0aHJvdyBleDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBFdmFsdWF0ZSBSRVAgbWFnaWMgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9yZXBfMShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwsIHZhbDM6IEV4cFZhbCwgdmFsNDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwgfHwgdmFsMi5TdHJWYWwgPT09IG51bGwgfHwgdmFsMy5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWw0Lk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9zX2NweSh2YWwxLCByZXNWYWwpO1xyXG4gICAgbGV0IGk6IG51bWJlciA9IHZhbDMuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKGkgPCAxKVxyXG4gICAgICBpID0gMTtcclxuICAgIGxldCBqOiBudW1iZXIgPSB2YWw0Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuXHJcbiAgICBpZiAoaiA+IHZhbDIuU3RyVmFsLmxlbmd0aClcclxuICAgICAgaiA9IHZhbDIuU3RyVmFsLmxlbmd0aDtcclxuXHJcbiAgICBpZiAoaSArIGogLSAxID4gcmVzVmFsLlN0clZhbC5sZW5ndGgpXHJcbiAgICAgIGogPSByZXNWYWwuU3RyVmFsLmxlbmd0aCAtIGkgKyAxO1xyXG5cclxuICAgIGlmICgoaiA8PSAwKSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGxldCB0bXBfczogc3RyaW5nID0gU3RyVXRpbC5tZW1jcHkoJycsIDAsIHJlc1ZhbC5TdHJWYWwsIGkgKyBqIC0gMSwgcmVzVmFsLlN0clZhbC5sZW5ndGggLSBpIC0gaiArIDEpO1xyXG5cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBTdHJVdGlsLm1lbWNweShyZXNWYWwuU3RyVmFsLCBpIC0gMSwgdmFsMi5TdHJWYWwsIDAsIGopO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IFN0clV0aWwubWVtY3B5KHJlc1ZhbC5TdHJWYWwsIGkgLSAxICsgaiwgdG1wX3MsIDAsIHJlc1ZhbC5TdHJWYWwubGVuZ3RoIC0gaSAtIGogKyAxKTtcclxuXHJcbiAgICAvKiBhZGQgYmxhbmtzIHRvIHRoZSBlbmQqL1xyXG4gICAgaWYgKGogLSB2YWwyLlN0clZhbC5sZW5ndGggPiAwKVxyXG4gICAgICByZXNWYWwuU3RyVmFsID0gU3RyVXRpbC5tZW1zZXQocmVzVmFsLlN0clZhbCwgaSArIHZhbDIuU3RyVmFsLmxlbmd0aCAtIDEsICcgJywgaiAtIHZhbDIuU3RyVmFsLmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyB2YWxfc19jcHkodmFsOiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IHZhbC5BdHRyO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IHZhbC5TdHJWYWw7XHJcbiAgICByZXNWYWwuSXNOdWxsID0gdmFsLklzTnVsbDtcclxuICAgIHJlc1ZhbC5JbmNsdWRlQmxvYlByZWZpeCA9IHZhbC5JbmNsdWRlQmxvYlByZWZpeDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsX2NweSh2YWw6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAodmFsLkF0dHIpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICBFeHByZXNzaW9uRXZhbHVhdG9yLnZhbF9zX2NweSh2YWwsIHJlc1ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIGlmICghdmFsLklzTnVsbClcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSh2YWwuTWdOdW1WYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSB2YWwuQm9vbFZhbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKCdFeHByZXNzaW9uIEV2YWx1YXRvci52YWxfY3B5IG5vIHN1Y2ggdHlwZSBvZiBhdHRyaWJ1dGUgOiAnICsgdmFsLkF0dHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLkF0dHIgPSB2YWwuQXR0cjtcclxuICAgIHJlc1ZhbC5Jc051bGwgPSB2YWwuSXNOdWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluc2VydCBzdHJpbmcgaW50byBhbm90aGVyIHN0cmluZywgSU5TIG1hZ2ljIGZ1bmN0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfaW5zKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgdmFsMzogRXhwVmFsLCB2YWw0OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsIHx8IHZhbDIuU3RyVmFsID09PSBudWxsIHx8IHZhbDMuTWdOdW1WYWwgPT09IG51bGwgfHwgdmFsNC5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGk6IG51bWJlciA9IHZhbDEuU3RyVmFsLmxlbmd0aDtcclxuXHJcbiAgICBsZXQgaW5zX29mczogbnVtYmVyID0gdmFsMy5NZ051bVZhbC5OVU1fMl9MT05HKCkgLSAxO1xyXG4gICAgaW5zX29mcyA9IE1hdGgubWF4KGluc19vZnMsIDApO1xyXG4gICAgaW5zX29mcyA9IE1hdGgubWluKGluc19vZnMsIGkpO1xyXG5cclxuICAgIGxldCBpbnNfbGVuOiBudW1iZXIgPSB2YWw0Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGluc19sZW4gPSBNYXRoLm1heChpbnNfbGVuLCAwKTtcclxuICAgIGluc19sZW4gPSBNYXRoLm1pbihpbnNfbGVuLCB2YWwyLlN0clZhbC5sZW5ndGgpO1xyXG5cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBTdHJVdGlsLm1lbWNweSgnJywgMCwgdmFsMS5TdHJWYWwsIDAsIGluc19vZnMpO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IFN0clV0aWwubWVtY3B5KHJlc1ZhbC5TdHJWYWwsIGluc19vZnMsIHZhbDIuU3RyVmFsLCAwLCBpbnNfbGVuKTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBTdHJVdGlsLm1lbWNweShyZXNWYWwuU3RyVmFsLCBpbnNfb2ZzICsgaW5zX2xlbiwgdmFsMS5TdHJWYWwsIGluc19vZnMsIGkgLSBpbnNfb2ZzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBERUwgbWFnaWMgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9kZWwocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCB2YWwzOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09PSBudWxsIHx8IHZhbDMuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgRXhwcmVzc2lvbkV2YWx1YXRvci52YWxfc19jcHkodmFsMSwgcmVzVmFsKTtcclxuICAgIGxldCBpOiBudW1iZXIgPSB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSAtIDE7XHJcbiAgICBpZiAoaSA8IDApIHtcclxuICAgICAgaSA9IDA7XHJcbiAgICB9XHJcbiAgICBpZiAoaSA+IHJlc1ZhbC5TdHJWYWwubGVuZ3RoKVxyXG4gICAgICBpID0gcmVzVmFsLlN0clZhbC5sZW5ndGg7XHJcbiAgICBsZXQgajogbnVtYmVyID0gdmFsMy5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoaSArIGogPiByZXNWYWwuU3RyVmFsLmxlbmd0aClcclxuICAgICAgaiA9IHJlc1ZhbC5TdHJWYWwubGVuZ3RoIC0gaTtcclxuICAgIGlmIChqIDw9IDApXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICByZXNWYWwuU3RyVmFsID0gU3RyVXRpbC5tZW1jcHkocmVzVmFsLlN0clZhbCwgaSwgcmVzVmFsLlN0clZhbCwgaSArIGosIHJlc1ZhbC5TdHJWYWwubGVuZ3RoIC0gaSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRkxJUCBtYWdpYyBmdW5jdGlvbiAocmV2ZXJzZSlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9mbGlwKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgcmV2X3N0ciA9IG5ldyBTdHJpbmdCdWlsZGVyKHZhbDEuU3RyVmFsKTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBTdHJVdGlsLlJldmVyc2VTdHJpbmcocmV2X3N0cikuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBVUFBFUiBtYWdpYyBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3VwcGVyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZXNWYWwuU3RyVmFsID0gdmFsMS5TdHJWYWwudG9VcHBlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBMT1dFUiBtYWdpYyBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2xvd2VyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSB2YWwxLlN0clZhbC50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENSQyBtYWdpYyBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2NyYyhyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PSBudWxsIHx8IHZhbDIuTWdOdW1WYWwgPT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBtb2RlOiBudW1iZXIgPSB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCByZXM6IG51bWJlciA9IDA7XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHJlcyA9IEV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbF9jcmNfMTYodmFsMS5TdHJWYWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgbGV0IGxlZnQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHJlcyAlIDI1Nik7XHJcbiAgICBsZXQgcmlnaHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHJlcyAvIDI1Nik7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJycgKyBsZWZ0ICsgcmlnaHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBldmFsX2NyY18xNihidWY6IFN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgY3JjXzE2X3RhYmxlID0gW1xyXG4gICAgICA0MDk2MSwgNjE0NDEsIDU1Mjk3LCA1MjIyNSwgNTA2ODksIDQ5OTIxLCA0OTUzNywgNDkzNDVcclxuICAgIF07XHJcbiAgICBsZXQgYnVmZmVyX2lkeDogbnVtYmVyID0gMDtcclxuICAgIGxldCBsZW46IG51bWJlciA9IGJ1Zi5sZW5ndGg7XHJcbiAgICBsZXQgY3JjOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yICg7IGxlbiA+IDA7IGxlbi0tKSB7XHJcbiAgICAgIGxldCBidCA9IGJ1Zi5jaGFyQ29kZUF0KGJ1ZmZlcl9pZHgrKyk7XHJcbiAgICAgIGJ0ID0gPG51bWJlcj4oYnQgXiBFeHByZXNzaW9uRXZhbHVhdG9yLkxPX0NIQVIoY3JjKSk7XHJcbiAgICAgIGNyYyA9IEV4cHJlc3Npb25FdmFsdWF0b3IuTE9fQ0hBUihFeHByZXNzaW9uRXZhbHVhdG9yLk1LX1NIUlQoMCwgRXhwcmVzc2lvbkV2YWx1YXRvci5ISV9DSEFSKGNyYykpKTtcclxuICAgICAgbGV0IG1hc2s6IG51bWJlcjtcclxuICAgICAgbGV0IHRibF9pZHg6IG51bWJlcjtcclxuICAgICAgZm9yICh0YmxfaWR4ID0gMCwgbWFzayA9IDxudW1iZXI+RXhwcmVzc2lvbkV2YWx1YXRvci5MT19DSEFSKDB4ODApOyB0YmxfaWR4IDwgODsgdGJsX2lkeCsrICwgbWFzayA9IDxudW1iZXI+KEV4cHJlc3Npb25FdmFsdWF0b3IuTE9fQ0hBUihtYXNrKSA+PiAxKSkge1xyXG4gICAgICAgIGlmICg8bnVtYmVyPkV4cHJlc3Npb25FdmFsdWF0b3IuTE9fQ0hBUig8bnVtYmVyPihidCAmIDxudW1iZXI+RXhwcmVzc2lvbkV2YWx1YXRvci5MT19DSEFSKG1hc2spKSkgIT09IDApXHJcbiAgICAgICAgICBjcmMgPSA8bnVtYmVyPihjcmMgXiBjcmNfMTZfdGFibGVbdGJsX2lkeF0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKGNyYyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBMT19DSEFSKG46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gPG51bWJlcj4obiAmIDB4ZmYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgSElfQ0hBUihuOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDxudW1iZXI+KChuICYgMHhmZjAwKSA+PiA4KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBNS19TSFJUKGMxOiBudW1iZXIsIGMyOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDxudW1iZXI+KDxudW1iZXI+KGMxIDw8IDgpIHwgPG51bWJlcj5jMik7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgTUtfTE9ORyhjMTogbnVtYmVyLCBjMjogbnVtYmVyLCBjMzogbnVtYmVyLCBjNDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAoKGMxIDw8IDI0KSB8IChjMiA8PCAxNikgfCAoYzMgPDwgOCkgfCBjNCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfY2hrZGd0KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHdlaWdodF92YWxzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSgxKSwgU3RyaW5nLmZyb21DaGFyQ29kZSgyKSwgU3RyaW5nLmZyb21DaGFyQ29kZSg1KSwgU3RyaW5nLmZyb21DaGFyQ29kZSgzKSwgU3RyaW5nLmZyb21DaGFyQ29kZSg2KSwgU3RyaW5nLmZyb21DaGFyQ29kZSg0KSwgU3RyaW5nLmZyb21DaGFyQ29kZSg4KSxcclxuICAgICAgU3RyaW5nLmZyb21DaGFyQ29kZSg3KSwgU3RyaW5nLmZyb21DaGFyQ29kZSgxMCksIFN0cmluZy5mcm9tQ2hhckNvZGUoOSlcclxuICAgIF07XHJcbiAgICBsZXQgcG9zOiBudW1iZXI7XHJcbiAgICBsZXQgbXVsOiBudW1iZXI7XHJcbiAgICBsZXQgY19zdHI6IHN0cmluZztcclxuICAgIGxldCBkaWdpdHM6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwgfHwgdmFsMi5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtb2RlOiBudW1iZXIgPSB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCByZXM6IG51bWJlciA9IDA7XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIG11bCA9IDI7XHJcbiAgICAgICAgZm9yIChwb3MgPSB2YWwxLlN0clZhbC5sZW5ndGg7IHBvcyA+PSAxOyBwb3MtLSkge1xyXG4gICAgICAgICAgY19zdHIgPSB2YWwxLlN0clZhbC5zdWJzdHIocG9zIC0gMSk7XHJcbiAgICAgICAgICBkaWdpdHMgPSB0aGlzLmFfMl9sb25nKGNfc3RyLCAxKSAqIG11bDtcclxuICAgICAgICAgIHJlcyArPSBkaWdpdHMgKyAoZGlnaXRzID4gOSA/IDEgOiAwKTtcclxuICAgICAgICAgIG11bCA9IDMgLSBtdWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcyAlPSAxMDtcclxuICAgICAgICBpZiAocmVzICE9PSAwKVxyXG4gICAgICAgICAgcmVzID0gMTAgLSByZXM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgZm9yIChwb3MgPSB2YWwxLlN0clZhbC5sZW5ndGg7IHBvcyA+PSAxOyBwb3MtLSkge1xyXG4gICAgICAgICAgbXVsID0gd2VpZ2h0X3ZhbHNbKHZhbDEuU3RyVmFsLmxlbmd0aCAtIHBvcykgJSAxMF0uY2hhckNvZGVBdCgwKTtcclxuICAgICAgICAgIGxldCBjX2NoYXI6IHN0cmluZyA9IHZhbDEuU3RyVmFsW3BvcyAtIDFdLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICBjX3N0ciA9IHZhbDEuU3RyVmFsLnN1YnN0cihwb3MgLSAxKTtcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChjX2NoYXIpKVxyXG4gICAgICAgICAgICBkaWdpdHMgPSB0aGlzLmFfMl9sb25nKGNfc3RyLCAxKSAqIG11bDtcclxuICAgICAgICAgIGVsc2UgaWYgKE5DaGFyLklzVXBwZXIoY19zdHJbMF0pKVxyXG4gICAgICAgICAgICBkaWdpdHMgPSAoY19zdHJbMF0uY2hhckNvZGVBdCgwKSAtICdBJy5jaGFyQ29kZUF0KDApICsgMSkgKiBtdWw7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGRpZ2l0cyA9IDA7XHJcbiAgICAgICAgICByZXMgKz0gZGlnaXRzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXMgJT0gMTE7XHJcbiAgICAgICAgaWYgKHJlcyAhPT0gMClcclxuICAgICAgICAgIHJlcyA9IDExIC0gcmVzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCByZXMsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFfMl9sb25nKHN0cjogc3RyaW5nLCBsZW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBsZXQgbjogbnVtYmVyID0gMDtcclxuICAgIGZvciAobGV0IHBvczogbnVtYmVyID0gMDsgcG9zIDwgbGVuOyBwb3MgPSBwb3MgKyAxKSB7XHJcbiAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChzdHIuY2hhckF0KHBvcykpKSB7XHJcbiAgICAgICAgbiA9IG4gKiAxMDtcclxuICAgICAgICBuICs9IDxudW1iZXI+KHN0ci5jaGFyQ29kZUF0KHBvcykgLSAnMCcuY2hhckNvZGVBdCgwKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3NvdW5keChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgc291bmR4X3ZhbHM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAnMCcsICcxJywgJzInLCAnMycsICcwJywgJzEnLCAnMicsICcwJywgJzAnLCAnMicsICcyJywgJzQnLCAnNScsICc1JywgJzAnLCAnMScsICcyJyxcclxuICAgICAgJzYnLFxyXG4gICAgICAnMicsICczJywgJzAnLCAnMScsICcwJywgJzInLCAnMCcsICcyJ1xyXG4gICAgXTtcclxuXHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJzAwMDAnO1xyXG4gICAgbGV0IGxhc3RjOiBzdHJpbmcgPSAnICc7XHJcbiAgICBsZXQgb3V0cG9zOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgaW5wb3M6IG51bWJlciA9IDA7IGlucG9zIDwgdmFsMS5TdHJWYWwubGVuZ3RoOyBpbnBvcysrKSB7XHJcbiAgICAgIGxldCBpbmM6IHN0cmluZyA9IHZhbDEuU3RyVmFsLmNoYXJBdChpbnBvcykudG9VcHBlckNhc2UoKTtcclxuICAgICAgbGV0IG91dGM6IHN0cmluZyA9IHNvdW5keF92YWxzWyhpbmMuY2hhckNvZGVBdCgwKSAtICdBJy5jaGFyQ29kZUF0KDApKV07XHJcbiAgICAgIGlmIChpbnBvcyA9PT0gMClcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gRXhwcmVzc2lvbkV2YWx1YXRvci5zZXRBdChyZXNWYWwuU3RyVmFsLCBvdXRwb3MrKywgaW5jKTtcclxuICAgICAgZWxzZSBpZiAob3V0YyA+ICcwJyAmJiBvdXRjICE9PSBsYXN0Yykge1xyXG4gICAgICAgIHJlc1ZhbC5TdHJWYWwgPSBFeHByZXNzaW9uRXZhbHVhdG9yLnNldEF0KHJlc1ZhbC5TdHJWYWwsIG91dHBvcysrLCBvdXRjKTtcclxuICAgICAgICBpZiAob3V0cG9zID4gMylcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGxhc3RjID0gb3V0YztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgY2hhcmFjdGVyIGluc2lkZSBzdHJpbmcgb24gbmVlZGVkIHBvc2l0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0clwiPnRvIGluc2VydCBjaGFyIGludG88L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicG9zXCI+b2YgY2hhcmFjdGVyIHRvIGluc2VydDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjaFwiPnRvIGJlIGluc2VydGVkPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHN0cmluZyB3aXRoIGluc2VydGVkIGNoYXI8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgc2V0QXQoc3RyOiBzdHJpbmcsIHBvczogbnVtYmVyLCBjaDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBidWZmZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihzdHIpO1xyXG5cclxuICAgIGlmIChwb3MgPCBzdHIubGVuZ3RoKSB7XHJcbiAgICAgIGJ1ZmZlci5zZXRfSXRlbShwb3MsIGNoKTsgLy8gdHJ5IGJsb2NrXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBidWZmZXIuQXBwZW5kKGNoKTsgLy8gY2F0Y2ggYmxvY2tcclxuICAgIH1cclxuICAgIHJldHVybiBidWZmZXIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9oc3RyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBudW0xNiA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgbGV0IG5ld251bTogTlVNX1RZUEU7XHJcbiAgICBsZXQgZGlnaXQ6IG51bWJlcjtcclxuICAgIGxldCBvdXRzdHIgPSBuZXcgQXJyYXkoMzApO1xyXG4gICAgbGV0IHRtcE91dFN0ciA9IG5ldyBTdHJpbmdCdWlsZGVyKG91dHN0ci5sZW5ndGgpO1xyXG4gICAgbGV0IG5lZ2F0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIG5vdGU6IGNhbiBiZSBvcHRpbWl6ZWQgYnkgdXNpbmcgbGFyZ2VyIGRpdmlzb3IgKi9cclxuICAgIG51bTE2Lm51bV80X2Ffc3RkKCcxNicpO1xyXG4gICAgbGV0IG9yZ251bSA9IG5ldyBOVU1fVFlQRSh2YWwxLk1nTnVtVmFsKTtcclxuICAgIGlmIChvcmdudW0ubnVtX2lzX25lZygpKSB7XHJcbiAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcclxuICAgICAgb3JnbnVtLm51bV9hYnMoKTtcclxuICAgIH1cclxuICAgIGxldCBkaWdpdHM6IG51bWJlciA9IDA7XHJcbiAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICBuZXdudW0gPSBOVU1fVFlQRS5tb2Qob3JnbnVtLCBudW0xNik7XHJcbiAgICAgIG9yZ251bSA9IE5VTV9UWVBFLmRpdihvcmdudW0sIG51bTE2KTtcclxuICAgICAgb3JnbnVtLm51bV90cnVuYygwKTtcclxuICAgICAgZGlnaXQgPSBuZXdudW0uTlVNXzJfTE9ORygpO1xyXG4gICAgICBkaWdpdHMrKztcclxuICAgICAgRXhwcmVzc2lvbkV2YWx1YXRvci5pbnRfMl9oZXgob3V0c3RyLCBvdXRzdHIubGVuZ3RoIC0gZGlnaXRzLCAxLCBkaWdpdCwgMCk7XHJcbiAgICAgIGlmIChvcmdudW0ubnVtX2lzX3plcm8oKSlcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmVnYXRpdmUpIHtcclxuICAgICAgZGlnaXRzKys7XHJcbiAgICAgIG91dHN0cltvdXRzdHIubGVuZ3RoIC0gZGlnaXRzXSA9ICctJztcclxuICAgIH1cclxuICAgIGZvciAoZGlnaXQgPSBvdXRzdHIubGVuZ3RoIC0gZGlnaXRzOyBkaWdpdCA8IG91dHN0ci5sZW5ndGg7IGRpZ2l0KyspXHJcbiAgICAgIHRtcE91dFN0ci5BcHBlbmQob3V0c3RyW2RpZ2l0XSk7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gdG1wT3V0U3RyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBpbnRfMl9oZXgoc3RyOiBzdHJpbmdbXSwgc3RyUG9zOiBudW1iZXIsIGxlbjogbnVtYmVyLCBuOiBudW1iZXIsIGxlYWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IHBvczogbnVtYmVyID0gbGVuO1xyXG4gICAgZG8ge1xyXG4gICAgICBsZXQgZGlnaXQ6IG51bWJlciA9IG4gJSAxNjtcclxuICAgICAgaWYgKGRpZ2l0IDwgMTApXHJcbiAgICAgICAgc3RyWy0tcG9zICsgc3RyUG9zXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoJzAnLmNoYXJDb2RlQXQoMCkgKyBkaWdpdCk7XHJcbiAgICAgIGVsc2Ugc3RyWy0tcG9zICsgc3RyUG9zXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoJ0EnLmNoYXJDb2RlQXQoMCkgKyBkaWdpdCAtIDEwKTtcclxuICAgICAgbiA9IE1hdGguZmxvb3IobiAvIDE2KTtcclxuICAgIH1cclxuICAgIHdoaWxlIChwb3MgPiAwICYmIG4gIT09IDApO1xyXG4gICAgRXhwcmVzc2lvbkV2YWx1YXRvci5saWJfYV9maWxsKHN0ciwgbGVuLCBwb3MgKyBzdHJQb3MsIGxlYWQpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGxpYl9hX2ZpbGwoc3RyOiBzdHJpbmdbXSwgbGVuOiBudW1iZXIsIHBvczogbnVtYmVyLCBsZWFkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmIChsZWFkID09PSAwKSB7XHJcbiAgICAgIGxlbiAtPSBwb3M7XHJcbiAgICAgIGlmIChsZW4gPiAwICYmIHBvcyA+IDApIHtcclxuICAgICAgICBTdHJVdGlsLm1lbWNweShzdHIsIDAsIHN0ciwgcG9zLCBsZW4pO1xyXG4gICAgICAgIFN0clV0aWwubWVtc2V0KHN0ciwgbGVuLCAnICcsIHBvcyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwb3MgPiAwKVxyXG4gICAgICAgIFN0clV0aWwubWVtc2V0KHN0ciwgMCwgU3RyaW5nLmZyb21DaGFyQ29kZShsZWFkKSwgcG9zKTtcclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfaHZhbChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgbnVtMTYgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBudW0gPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIGxldCBkaWdpdHM6IG51bWJlcjtcclxuICAgIGxldCBzdGF0ZTogbnVtYmVyID0gMDsgLy8gU1RBVEVfQkVGT1JFX05VTUJFUiA9IDA7IFNUQVRFX0lOX05VTUJFUiA9IDFcclxuICAgIGxldCBuZWdhdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIG5vdGU6IGNhbiBiZSBvcHRpbWl6ZWQgYnkgdXNpbmcgbGFyZ2VyIGRpdmlzb3IgKi9cclxuICAgIG51bTE2Lm51bV80X2Ffc3RkKCcxNicpO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNX1pFUk8oKTtcclxuICAgIGZvciAoZGlnaXRzID0gMDsgZGlnaXRzIDwgdmFsMS5TdHJWYWwubGVuZ3RoOyBkaWdpdHMrKykge1xyXG4gICAgICBsZXQgZGlnaXRjOiBzdHJpbmcgPSB2YWwxLlN0clZhbFtkaWdpdHNdO1xyXG4gICAgICBpZiAoZGlnaXRjID09PSAnLScgJiYgc3RhdGUgPT09IDApXHJcbiAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xyXG4gICAgICBsZXQgZGlnaXQ6IG51bWJlciA9IHRoaXMuaGV4XzJfbG9uZyh2YWwxLlN0clZhbCwgZGlnaXRzLCAxKTtcclxuICAgICAgaWYgKGRpZ2l0ID09PSAwICYmIGRpZ2l0YyAhPT0gJzAnKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICBzdGF0ZSA9IDE7XHJcbiAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IE5VTV9UWVBFLm11bChyZXNWYWwuTWdOdW1WYWwsIG51bTE2KTtcclxuICAgICAgbnVtLk5VTV80X0xPTkcoZGlnaXQpO1xyXG4gICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5hZGQocmVzVmFsLk1nTnVtVmFsLCBudW0pO1xyXG4gICAgfVxyXG4gICAgaWYgKG5lZ2F0aXZlKVxyXG4gICAgICByZXNWYWwuTWdOdW1WYWwubnVtX25lZygpO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhleF8yX2xvbmcoc3RyOiBTdHJpbmcsIHN0ckNvdW50OiBudW1iZXIsIGxlbjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGxldCBwb3M6IG51bWJlcjtcclxuICAgIGxldCBuOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChwb3MgPSBzdHJDb3VudDsgcG9zIDwgc3RyQ291bnQgKyBsZW47IHBvcysrKSB7XHJcbiAgICAgIGxldCBkaWdpdDogc3RyaW5nID0gc3RyLmNoYXJBdChwb3MpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNEaWdpdChkaWdpdCkpIHtcclxuICAgICAgICBuICo9IDE2O1xyXG4gICAgICAgIG4gKz0gZGlnaXQuY2hhckNvZGVBdCgwKSAtICcwJy5jaGFyQ29kZUF0KDApO1xyXG4gICAgICB9IGVsc2UgaWYgKGRpZ2l0ID49ICdBJyAmJiBkaWdpdCA8PSAnRicpIHtcclxuICAgICAgICBuICo9IDE2O1xyXG4gICAgICAgIG4gKz0gZGlnaXQuY2hhckNvZGVBdCgwKSAtICdBJy5jaGFyQ29kZUF0KDApICsgMTA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2NocihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcblxyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVzVmFsLlN0clZhbCA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCkpWzBdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2FzYyhyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYzogbnVtYmVyID0gKHZhbDEuU3RyVmFsLmxlbmd0aCA+IDApID8gKEVuY29kaW5nLkFTQ0lJLkdldEJ5dGVzKHZhbDEuU3RyVmFsKSlbMF0gOiAwO1xyXG5cclxuICAgIHRoaXMuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBjLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX21zdHIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PSBudWxsICYmIHZhbDIuTWdOdW1WYWwgPT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBudW0gPSBuZXcgTlVNX1RZUEUodmFsMS5NZ051bVZhbCk7XHJcbiAgICBpZiAobnVtLk5VTV9JU19MT05HKCkpXHJcbiAgICAgIG51bS5udW1fNF9zdGRfbG9uZygpO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZW4gPSBNYXRoLm1heChsZW4sIDIpO1xyXG4gICAgbGV0IHRtcEFycmF5OiBJbnQ4QXJyYXkgPSBuZXcgSW50OEFycmF5KGxlbik7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspXHJcbiAgICAgIHRtcEFycmF5W2ldID0gbnVtLkRhdGFbaV07XHJcbiAgICBsZXQgdG1wQnl0ZXM6IFVpbnQ4QXJyYXkgPSBNaXNjLlRvQnl0ZUFycmF5KHRtcEFycmF5KTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXRFbmNvZGluZygpLkdldFN0cmluZyh0bXBCeXRlcywgMCwgdG1wQnl0ZXMubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9tdmFsKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgaWYgKHZhbDEuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsLk5VTV9TRVRfWkVSTygpO1xyXG4gICAgbGV0IGxlbjogbnVtYmVyID0gTWF0aC5taW4odmFsMS5TdHJWYWwubGVuZ3RoLCBOVU1fVFlQRS5OVU1fU0laRSk7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoTWlzYy5Ub1NCeXRlQXJyYXkoRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0RW5jb2RpbmcoKS5HZXRCeXRlcyh2YWwxLlN0clZhbCkpLCAwLCBsZW4pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBldmFsdWF0aW9uIG9mIERhdGUgdG8gdGhlIEFsZmEgc3RyaW5nIHdpdGggc3BlY2lhbCBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9kc3RyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgZGlzcGxheUNvbnZlcnRvcjogRGlzcGxheUNvbnZlcnRvcik6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PSBudWxsIHx8IHZhbDIuU3RyVmFsID09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBkaXNwbGF5Q29udmVydG9yLnRvX2EocmVzVmFsLlN0clZhbCwgMTAwLCB2YWwxLk1nTnVtVmFsLk5VTV8yX1VMT05HKCksIHZhbDIuU3RyVmFsLFxyXG4gICAgICB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF90c3RyKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgZGlzcGxheUNvbnZlcnRvcjogRGlzcGxheUNvbnZlcnRvcixcclxuICAgICAgICAgICAgICAgICAgICAgICBtaWxsaVNlY29uZHM6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09IG51bGwgfHwgdmFsMi5TdHJWYWwgPT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBkaXNwbGF5Q29udmVydG9yLnRpbWVfMl9hKHJlc1ZhbC5TdHJWYWwsIDEwMCwgdmFsMS5NZ051bVZhbC5OVU1fMl9VTE9ORygpLCB2YWwyLlN0clZhbCxcclxuICAgICAgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSwgbWlsbGlTZWNvbmRzKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfZHZhbChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwsIGRpc3BsYXlDb252ZXJ0b3I6IERpc3BsYXlDb252ZXJ0b3IpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCB8fCB2YWwyLlN0clZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgLyogeWVhciAyMDAwIGJ1ZyAtIGlmIHRoZSB1c2VyIGluc2VydHMgYSBkYXRlIHZhbHVlIHdpdGggb25seSAyICovXHJcbiAgICAvKiB5ZWFyIGRpZ2l0cyAoaS5lLiBERC9NTS9ZWSksIHRoZSBhXzJfZGF0ZSBtaWdodCBpbnNlcnQgZXh0cmEgKi9cclxuICAgIC8qIDIgY2VudHVyeSBkaWdpdHMsIGFuZCBlbmxhcmdlIHRoZSBpbnB1dCBzdHJpbmcuIEluIG9yZGVyIHRvICAqL1xyXG4gICAgLyogYXZpb2QgbWVtb3J5IGNvcnJ1cHRpb25zLCB3ZSBlbmxhcmdlIHRoZSBkYXRlIHN0cmluZyBpbnB1dCAgICovXHJcbiAgICAvKiBidWZmZXIgLSBJbGFuIHNoaWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgaWYgKHZhbDEuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKVxyXG4gICAgICBpZiAodmFsMS5TdHJWYWwubGVuZ3RoICsgMiA8PSBOVU1fVFlQRS5OVU1fU0laRSkge1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCB0bXAgPSBuZXcgQXJyYXkodmFsMS5TdHJWYWwubGVuZ3RoICsgMik7XHJcbiAgICAgICAgZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCB0bXAubGVuZ3RoOyArK19haSlcclxuICAgICAgICAgIHRtcFtfYWldID0gJ1xcMCc7XHJcbiAgICAgICAgU3RyVXRpbC5tZW1jcHkodG1wLCAwLCBOU3RyaW5nLlRvQ2hhckFycmF5KHZhbDEuU3RyVmFsKSwgMCwgdmFsMS5TdHJWYWwubGVuZ3RoKTtcclxuICAgICAgfVxyXG4gICAgbGV0IGw6IG51bWJlciA9IGRpc3BsYXlDb252ZXJ0b3IuYV8yX2RhdGUodmFsMS5TdHJWYWwsIHZhbDIuU3RyVmFsLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgIGlmIChsID49IDEwMDAwMDAwMDApXHJcbiAgICAgIGwgPSAwO1xyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBsLCBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF90dmFsKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgZGlzcGxheUNvbnZlcnRvcjogRGlzcGxheUNvbnZlcnRvcixcclxuICAgICAgICAgICAgICAgICAgICAgICBtaWxsaVNlY29uZHM6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLlN0clZhbCA9PT0gbnVsbCB8fCB2YWwyLlN0clZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5USU1FKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHBpYyA9IG5ldyBQSUModmFsMi5TdHJWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICBsZXQgbDogbnVtYmVyID0gZGlzcGxheUNvbnZlcnRvci5hXzJfdGltZSh2YWwxLlN0clZhbCwgcGljLCBtaWxsaVNlY29uZHMpO1xyXG4gICAgaWYgKGwgPj0gMTAwMDAwMDAwMClcclxuICAgICAgbCA9IDA7XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGwsIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2RheShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2YWxfb3BfZGF0ZV9icmsocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCAwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBldmFsX29wX21vbnRoKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHRoaXMuZXZhbF9vcF9kYXRlX2JyayhyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIDEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3llYXIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgdGhpcy5ldmFsX29wX2RhdGVfYnJrKHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgMik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfZG93KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHRoaXMuZXZhbF9vcF9kYXRlX2JyayhyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIDMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3NlY29uZChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2YWxfb3BfdGltZV9icmsocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCAyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9taW51dGUocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgdGhpcy5ldmFsX29wX3RpbWVfYnJrKHJlc1ZhbCwgdmFsMS5NZ051bVZhbCwgMSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfaG91cihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2YWxfb3BfdGltZV9icmsocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCAwKTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgZXZhbF9vcF9kYXRlX2JyayhyZXNWYWw6IEV4cFZhbCwgdmFsMTogTlVNX1RZUEUsIHR5cDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMSA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGQ6IG51bWJlciA9IHZhbDEuTlVNXzJfTE9ORygpO1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEJyZWFrIGRhdGEgaW50byBpdHMgY29tcG9uZW50c1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGxldCBicmVha1BhcmFtczogRGF0ZUJyZWFrUGFyYW1zID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5nZXROZXdEYXRlQnJlYWtQYXJhbXMoKTtcclxuICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZCwgZmFsc2UsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgbGV0IHllYXI6IG51bWJlciA9IGJyZWFrUGFyYW1zLnllYXI7XHJcbiAgICBsZXQgbW9udGg6IG51bWJlciA9IGJyZWFrUGFyYW1zLm1vbnRoO1xyXG4gICAgbGV0IGRheTogbnVtYmVyID0gYnJlYWtQYXJhbXMuZGF5O1xyXG4gICAgbGV0IGRveTogbnVtYmVyID0gYnJlYWtQYXJhbXMuZG95O1xyXG4gICAgbGV0IGRvdzogbnVtYmVyID0gYnJlYWtQYXJhbXMuZG93O1xyXG4gICAgc3dpdGNoICh0eXApIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIGQgPSBkYXk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBkID0gbW9udGg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICBkID0geWVhcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIGQgPSBkb3c7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBkID0gVXRpbERhdGVKcG4uZ2V0SW5zdGFuY2UoKS5kYXRlX2pwbl95ZWFyX29mcyh5ZWFyLCBkb3kpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGQgPSAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBkLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3RpbWVfYnJrKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBOVU1fVFlQRSwgdHlwOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZDogbnVtYmVyID0gdmFsMS5OVU1fMl9VTE9ORygpO1xyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEJyZWFrZSBkYXRhIGludG8gaXRzIGNvbXBvbmVudHNcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgYnJlYWtQYXJhbXM6IFRpbWVCcmVha1BhcmFtcyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZ2V0TmV3VGltZUJyZWFrUGFyYW1zKCk7XHJcbiAgICBEaXNwbGF5Q29udmVydG9yLnRpbWVfYnJlYWsoYnJlYWtQYXJhbXMsIGQpO1xyXG4gICAgbGV0IGhvdXI6IG51bWJlciA9IGJyZWFrUGFyYW1zLmhvdXI7XHJcbiAgICBsZXQgbWludXRlOiBudW1iZXIgPSBicmVha1BhcmFtcy5taW51dGU7XHJcbiAgICBsZXQgc2Vjb25kOiBudW1iZXIgPSBicmVha1BhcmFtcy5zZWNvbmQ7XHJcbiAgICBzd2l0Y2ggKHR5cCkge1xyXG4gICAgICBjYXNlIDA6XHJcbiAgICAgICAgZCA9IGhvdXI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBkID0gbWludXRlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgZCA9IHNlY29uZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBkID0gMDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgZCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3BfYWRkRGF0ZVRpbWUocmVzVmFsOiBFeHBWYWwsIGRhdGVWYWw6IEV4cFZhbCwgdGltZVZhbDogRXhwVmFsLCB5ZWFyc1ZhbDogRXhwVmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aHNWYWw6IEV4cFZhbCwgZGF5c1ZhbDogRXhwVmFsLCBob3Vyc1ZhbDogRXhwVmFsLCBtaW51dGVzVmFsOiBFeHBWYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHNWYWw6IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHRtcFZhbCA9IG5ldyBFeHBWYWwoKTtcclxuXHJcbiAgICAvLyB2YWx1ZXMgY2hlY2tcclxuICAgIGlmIChkYXRlVmFsLk1nTnVtVmFsID09PSBudWxsIHx8IHRpbWVWYWwuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBnZXQgdGhlIHRpbWUgZmllbGRcclxuICAgIGxldCBmbGRUaW1lOiBGaWVsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKHRpbWVWYWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgIHN1cGVyLlNldFZhbCh0bXBWYWwsIGZsZFRpbWUuZ2V0VHlwZSgpLCBmbGRUaW1lLmdldFZhbHVlKHRydWUpLCBudWxsKTtcclxuXHJcbiAgICAvLyBBZGQgdGltZVxyXG4gICAgdGhpcy5ldmFsX29wX2FkZHRpbWUocmVzVmFsLCB0bXBWYWwsIGhvdXJzVmFsLCBtaW51dGVzVmFsLCBzZWNvbmRzVmFsKTtcclxuXHJcbiAgICBsZXQgdGltZTogbnVtYmVyID0gcmVzVmFsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBkYXRlOiBudW1iZXIgPSBNYXRoLmZsb29yKHRpbWUgLyAoNjAgKiA2MCAqIDI0KSk7IC8vIGlmIGRpZmYgaXMgbW9yZSB0aGVuIDI0IGhvdXJzLCByZW1vdmUgdGhlIGZ1bGwgZGF0ZSBjaGFuZ2VzXHJcbiAgICB0aW1lID0gdGltZSAlICg2MCAqIDYwICogMjQpOyAvLyBJZiB0aW1lIGlzIG5lZ2F0aXZlLCBtb3ZlIGJhY2sgYSBkYXkgYW5kIGNoYW5nZSB0aGUgdGltZVxyXG4gICAgaWYgKHRpbWUgPCAwKSB7XHJcbiAgICAgIGRhdGUtLTtcclxuICAgICAgdGltZSA9ICg2MCAqIDYwICogMjQpIC0gKC10aW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHZXQgdGhlIGRhdGUgZmllbGRcclxuICAgIGxldCBmbGREYXRlOiBGaWVsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKGRhdGVWYWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgIHN1cGVyLlNldFZhbCh0bXBWYWwsIGZsZERhdGUuZ2V0VHlwZSgpLCBmbGREYXRlLmdldFZhbHVlKHRydWUpLCBudWxsKTtcclxuXHJcbiAgICAvLyBBZGQgdGhlIGRhdGVcclxuICAgIHRoaXMuZXZhbF9vcF9hZGRkYXRlKHJlc1ZhbCwgdG1wVmFsLCB5ZWFyc1ZhbCwgbW9udGhzVmFsLCBkYXlzVmFsKTtcclxuXHJcbiAgICAvLyBBZGQgdGhlIHJlc3VsdCBkYXRlIHRvIHRoZSBkYXRlIGRpZmYgY2FsY3VsYXRlZCBlYXJsaWVyXHJcbiAgICBkYXRlICs9IHJlc1ZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgLy8gU2V0IG5ldyB0aW1lIGFuZCBkYXRlIGluIGZpZWxkc1xyXG4gICAgdG1wVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcodGltZSk7XHJcbiAgICBhd2FpdCBmbGRUaW1lLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUodG1wVmFsLlRvTWdWYWwoKSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICBhd2FpdCBmbGRUaW1lLnVwZGF0ZURpc3BsYXkoKTtcclxuXHJcbiAgICB0bXBWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhkYXRlKTtcclxuICAgIGF3YWl0IGZsZERhdGUuc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZSh0bXBWYWwuVG9NZ1ZhbCgpLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgIGF3YWl0IGZsZERhdGUudXBkYXRlRGlzcGxheSgpO1xyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9kaWZkdChyZXNWYWw6IEV4cFZhbCwgZGF0ZTF2YWw6IEV4cFZhbCwgdGltZTF2YWw6IEV4cFZhbCwgZGF0ZTJ2YWw6IEV4cFZhbCwgdGltZTJ2YWw6IEV4cFZhbCwgZGlmRGF0ZVZhbDogRXhwVmFsLCBkaWZUaW1lVmFsOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBsZXQgdG1wVmFsOiBFeHBWYWwgPSBuZXcgRXhwVmFsKCk7XHJcbiAgICB0bXBWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuICAgIHRtcFZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG5cclxuICAgIC8vIHZhbHVlcyBjaGVja1xyXG4gICAgaWYgKGRpZkRhdGVWYWwuTWdOdW1WYWwgPT09IG51bGwgfHwgZGlmVGltZVZhbC5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENhbGN1bGF0ZSB0aW1lIGRpZnNcclxuICAgIGxldCBkaWZEYXRlOiBudW1iZXIgPSBkYXRlMXZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCkgLSBkYXRlMnZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgZGlmVGltZTogbnVtYmVyID0gdGltZTF2YWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpIC0gdGltZTJ2YWwuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG5cclxuICAgIGlmICgoZGlmVGltZSA8IDApICYmIChkaWZUaW1lID4gLTg2NDAwKSAmJiAoZGlmRGF0ZSA+IDApKSB7XHJcbiAgICAgIGRpZkRhdGUtLTtcclxuICAgICAgZGlmVGltZSA9IDg2NDAwIC0gKC1kaWZUaW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBnZXQgdGhlIGZpZWxkc1xyXG4gICAgbGV0IGZsZERhdGU6IEZpZWxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soZGlmRGF0ZVZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgbGV0IGZsZFRpbWU6IEZpZWxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soZGlmVGltZVZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG5cclxuICAgIC8vIFNldCB0aGUgZGlmIHZhbHVlc1xyXG4gICAgdG1wVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcoZGlmRGF0ZSk7XHJcbiAgICBhd2FpdCBmbGREYXRlLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUodG1wVmFsLlRvTWdWYWwoKSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICBhd2FpdCBmbGREYXRlLnVwZGF0ZURpc3BsYXkoKTtcclxuXHJcbiAgICB0bXBWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhkaWZUaW1lKTtcclxuICAgIGF3YWl0IGZsZFRpbWUuc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZSh0bXBWYWwuVG9NZ1ZhbCgpLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgIGF3YWl0IGZsZFRpbWUudXBkYXRlRGlzcGxheSgpO1xyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9uZG93KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIGRpc3BsYXlDb252ZXJ0b3I6IERpc3BsYXlDb252ZXJ0b3IpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YWwxLk1nTnVtVmFsID0gdGhpcy5tdWxfYWRkKHZhbDEuTWdOdW1WYWwsIDAsIDYpO1xyXG4gICAgdGhpcy5ldmFsX29wX2Nkb3cocmVzVmFsLCB2YWwxLk1nTnVtVmFsLCBkaXNwbGF5Q29udmVydG9yKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3Bfbm1vbnRoKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIGRpc3BsYXlDb252ZXJ0b3I6IERpc3BsYXlDb252ZXJ0b3IpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YWwxLk1nTnVtVmFsID0gdGhpcy5tdWxfYWRkKHZhbDEuTWdOdW1WYWwsIDMxLCAtMzApO1xyXG4gICAgdGhpcy5ldmFsX29wX2Ntb250aChyZXNWYWwsIHZhbDEuTWdOdW1WYWwsIGRpc3BsYXlDb252ZXJ0b3IpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIE11bHRpcGx5ICYgYWRkIHRvIG51bWVyaWMgdHlwZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIG11bF9hZGQobnVtOiBOVU1fVFlQRSwgbXVsOiBudW1iZXIsIGFkZDogbnVtYmVyKTogTlVNX1RZUEUge1xyXG4gICAgbGV0IHRtcCA9IG5ldyBOVU1fVFlQRSgpO1xyXG5cclxuICAgIGlmIChudW0gPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIGlmIChtdWwgIT09IDApIHtcclxuICAgICAgdG1wLk5VTV80X0xPTkcobXVsKTtcclxuICAgICAgbnVtID0gTlVNX1RZUEUubXVsKG51bSwgdG1wKTtcclxuICAgIH1cclxuICAgIGlmIChhZGQgIT09IDApIHtcclxuICAgICAgdG1wLk5VTV80X0xPTkcoYWRkKTtcclxuICAgICAgbnVtID0gTlVNX1RZUEUuYWRkKG51bSwgdG1wKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudW07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfY2RvdyhyZXNWYWw6IEV4cFZhbCwgdmFsMTogTlVNX1RZUEUsIGRpc3BsYXlDb252ZXJ0b3I6IERpc3BsYXlDb252ZXJ0b3IpOiB2b2lkIHtcclxuICAgIHRoaXMuZXZhbF9vcF9kYXRlX3N0cihyZXNWYWwsIHZhbDEsICdXV1dXV1dXV1dXVCcsIGRpc3BsYXlDb252ZXJ0b3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2Ntb250aChyZXNWYWw6IEV4cFZhbCwgdmFsMTogTlVNX1RZUEUsIGRpc3BsYXlDb252ZXJ0b3I6IERpc3BsYXlDb252ZXJ0b3IpOiB2b2lkIHtcclxuICAgIHRoaXMuZXZhbF9vcF9kYXRlX3N0cihyZXNWYWwsIHZhbDEsICdNTU1NTU1NTU1NVCcsIGRpc3BsYXlDb252ZXJ0b3IpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGV2YWxfb3BfZGF0ZV9zdHIocmVzVmFsOiBFeHBWYWwsIHZhbDE6IE5VTV9UWVBFLCBmb3JtYXQ6IHN0cmluZywgZGlzcGxheUNvbnZlcnRvcjogRGlzcGxheUNvbnZlcnRvcik6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgaWYgKHZhbDEgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZG93OiBudW1iZXIgPSB2YWwxLk5VTV8yX1VMT05HKCk7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gZGlzcGxheUNvbnZlcnRvci50b19hKHJlc1ZhbC5TdHJWYWwsIDEwLCBkb3csIGZvcm1hdCwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLyBUT0RPOiBJbXBsZW1lbnQgTW9uaXRvciBmb3IgZGVsYXlcclxuICBwcml2YXRlIGV2YWxfb3BfZGVsYXkoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2lkbGUocmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBuOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGlkbGVUaW1lOiBudW1iZXIgPSBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRJZGxlVGltZSh0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgIGlmIChpZGxlVGltZSA+IDApIHtcclxuICAgICAgbGV0IEN1cnJUaW1lTWlsbGk6IG51bWJlciA9IE1pc2MuZ2V0U3lzdGVtTWlsbGlzZWNvbmRzKCk7XHJcbiAgICAgIC8vIGFjdF9pZGxlICgpOlxyXG4gICAgICBuID0gTWF0aC5mbG9vcihNYXRoLmZsb29yKChDdXJyVGltZU1pbGxpIC0gTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLkxhc3RBY3Rpb25UaW1lKSAvIDEwMDApIC8gaWRsZVRpbWUpO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgIHJlc1ZhbC5NZ051bVZhbC5OVU1fNF9MT05HKG4gKiBpZGxlVGltZSAqIDEwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9hZGRkYXRlKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgdmFsMzogRXhwVmFsLCB2YWw0OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCB0cmllczogbnVtYmVyO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwgfHwgdmFsMi5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWwzLk1nTnVtVmFsID09PSBudWxsIHx8IHZhbDQuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBkYXRlOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBCcmVha2UgZGF0YSBpbnRvIGl0cyBjb21wb25lbnRzXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IGJyZWFrUGFyYW1zOiBEYXRlQnJlYWtQYXJhbXMgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldE5ld0RhdGVCcmVha1BhcmFtcygpO1xyXG4gICAgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlX2JyZWFrX2RhdGVtb2RlKGJyZWFrUGFyYW1zLCBkYXRlLCBmYWxzZSwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICBsZXQgeWVhcjogbnVtYmVyID0gYnJlYWtQYXJhbXMueWVhcjtcclxuICAgIGxldCBtb250aDogbnVtYmVyID0gYnJlYWtQYXJhbXMubW9udGg7XHJcbiAgICBsZXQgZGF5OiBudW1iZXIgPSBicmVha1BhcmFtcy5kYXk7XHJcblxyXG4gICAgLyogMjAuNy45NSAtIEhlbiA6IEZpeCBidWcgMTk3NSAqL1xyXG4gICAgaWYgKEVudmlyb25tZW50Lkluc3RhbmNlLkdldERhdGVNb2RlKHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpID09PSAnQicpXHJcbiAgICAgIHllYXIgPSBNYXRoLm1heCh5ZWFyIC0gUElDSW50ZXJmYWNlLkRBVEVfQlVEREhJU1RfR0FQLCAwKTtcclxuICAgIHllYXIgKz0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBtb250aCArPSB2YWwzLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBkYXkxOiBudW1iZXIgPSB2YWw0Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBhZGRfZGF5OiBudW1iZXIgPSAoZGF5ID09PSAwICYmIHllYXIgIT09IDAgJiYgbW9udGggIT09IDAgJiYgZGF5MSAhPT0gMCkgPyAxIDogMDtcclxuICAgIGxldCBtb250aDE6IG51bWJlciA9IG1vbnRoICsgeWVhciAqIDEyO1xyXG4gICAgeWVhciA9IE1hdGguZmxvb3IoKG1vbnRoMSAtIDEpIC8gMTIpO1xyXG4gICAgbW9udGggPSAobW9udGgxIC0gMSkgJSAxMiArIDE7XHJcbiAgICBmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCA0OyB0cmllcysrKSB7XHJcbiAgICAgIGRhdGUgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfNF9jYWxlbmRlcih5ZWFyLCBtb250aCwgZGF5ICsgYWRkX2RheSwgMCwgZmFsc2UpO1xyXG4gICAgICBpZiAoZGF0ZSA8IDEwMDAwMDAwMDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRheS0tO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIEZNSS0yNjQsIDk5LzAxLzA4LCBKUE5JRDogTUtQOTkwMTAwMDggICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAvKiBkYXRlXzRfY2FsZW5kZXIoKSByZXR1cm5zIDEwMDAwMDAwMDBMIGFzIGFuIGludmFsaWQgZGF0ZSAqL1xyXG4gICAgLyogaW4gd2hpY2ggY2FzZSBkYXRlIHNob3VsZCBiZSAwMDAwLzAwLzAwLiAgICAgICAgICAgICAgICAgKi9cclxuICAgIGlmIChkYXRlID09PSAxMDAwMDAwMDAwKVxyXG4gICAgICBkYXRlID0gMDtcclxuICAgIGVsc2Uge1xyXG4gICAgICBkYXRlICs9IGRheTEgLSBhZGRfZGF5O1xyXG4gICAgICBkYXRlID0gTWF0aC5tYXgoZGF0ZSwgMCk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGRhdGUsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2FkZHRpbWUocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsLCB2YWwzOiBFeHBWYWwsIHZhbDQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwgfHwgdmFsMi5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWwzLk1nTnVtVmFsID09PSBudWxsIHx8IHZhbDQuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCB0aW1lOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX1VMT05HKCkgKyB2YWwyLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSAqIDM2MDAgKyB2YWwzLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSAqIDYwICsgdmFsNC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIHRpbWUsIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfYm9tKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBicmVha1BhcmFtczogRGF0ZUJyZWFrUGFyYW1zO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGRhdGU6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfVUxPTkcoKTtcclxuICAgIGlmIChkYXRlICE9PSAwKSB7XHJcbiAgICAgIGJyZWFrUGFyYW1zID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5nZXROZXdEYXRlQnJlYWtQYXJhbXMoKTtcclxuICAgICAgRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlX2JyZWFrX2RhdGVtb2RlKGJyZWFrUGFyYW1zLCBkYXRlLCBmYWxzZSwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSk7XHJcbiAgICAgIGxldCBkYXk6IG51bWJlciA9IGJyZWFrUGFyYW1zLmRheTtcclxuICAgICAgZGF0ZSAtPSAoZGF5IC0gMSk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGRhdGUsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfYm95KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBicmVha1BhcmFtczogRGF0ZUJyZWFrUGFyYW1zO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBkYXRlOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX1VMT05HKCk7XHJcbiAgICBpZiAoZGF0ZSAhPT0gMCkge1xyXG4gICAgICBicmVha1BhcmFtcyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZ2V0TmV3RGF0ZUJyZWFrUGFyYW1zKCk7XHJcbiAgICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZGF0ZSwgZmFsc2UsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgICBsZXQgeWVhcjogbnVtYmVyID0gYnJlYWtQYXJhbXMueWVhcjtcclxuICAgICAgbGV0IGRheTogbnVtYmVyID0gMTtcclxuICAgICAgbGV0IG1vbnRoOiBudW1iZXIgPSAxO1xyXG4gICAgICBpZiAoRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0RGF0ZU1vZGUodGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSkgPT09ICdCJylcclxuICAgICAgICB5ZWFyID0gTWF0aC5tYXgoeWVhciAtIFBJQ0ludGVyZmFjZS5EQVRFX0JVRERISVNUX0dBUCwgMCk7XHJcbiAgICAgIGRhdGUgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfNF9jYWxlbmRlcih5ZWFyLCBtb250aCwgZGF5LCAwLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGRhdGUsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfZW9tKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBicmVha1BhcmFtczogRGF0ZUJyZWFrUGFyYW1zO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBkYXRlOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX1VMT05HKCk7XHJcbiAgICBpZiAoZGF0ZSAhPT0gMCkge1xyXG4gICAgICBicmVha1BhcmFtcyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZ2V0TmV3RGF0ZUJyZWFrUGFyYW1zKCk7XHJcbiAgICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZGF0ZSwgZmFsc2UsIHRoaXMuRXhwVGFzay5nZXRDb21wSWR4KCkpO1xyXG4gICAgICBsZXQgeWVhcjogbnVtYmVyID0gYnJlYWtQYXJhbXMueWVhcjtcclxuICAgICAgbGV0IG1vbnRoOiBudW1iZXIgPSBicmVha1BhcmFtcy5tb250aDtcclxuICAgICAgbGV0IGRheTogbnVtYmVyID0gMzE7XHJcbiAgICAgIGlmIChFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXREYXRlTW9kZSh0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKSA9PT0gJ0InKVxyXG4gICAgICAgIHllYXIgPSBNYXRoLm1heCh5ZWFyIC0gUElDSW50ZXJmYWNlLkRBVEVfQlVEREhJU1RfR0FQLCAwKTtcclxuICAgICAgbGV0IHRyaWVzOiBudW1iZXI7XHJcbiAgICAgIGZvciAodHJpZXMgPSAwOyB0cmllcyA8IDQ7IHRyaWVzKyspIHtcclxuICAgICAgICBkYXRlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kYXRlXzRfY2FsZW5kZXIoeWVhciwgbW9udGgsIGRheSwgMCwgZmFsc2UpO1xyXG4gICAgICAgIGlmIChkYXRlIDwgMTAwMDAwMDAwMClcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRheS0tO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGRhdGUsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfZW95KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkRBVEUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZGF0ZTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9VTE9ORygpO1xyXG4gICAgaWYgKGRhdGUgIT09IDApIHtcclxuICAgICAgbGV0IGJyZWFrUGFyYW1zOiBEYXRlQnJlYWtQYXJhbXMgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldE5ld0RhdGVCcmVha1BhcmFtcygpO1xyXG4gICAgICBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfYnJlYWtfZGF0ZW1vZGUoYnJlYWtQYXJhbXMsIGRhdGUsIGZhbHNlLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgICAgbGV0IHllYXI6IG51bWJlciA9IGJyZWFrUGFyYW1zLnllYXI7XHJcbiAgICAgIGxldCBtb250aDogbnVtYmVyID0gMTI7XHJcbiAgICAgIGxldCBkYXk6IG51bWJlciA9IDMxO1xyXG4gICAgICBpZiAoRW52aXJvbm1lbnQuSW5zdGFuY2UuR2V0RGF0ZU1vZGUodGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSkgPT09ICdCJylcclxuICAgICAgICB5ZWFyID0gTWF0aC5tYXgoeWVhciAtIFBJQ0ludGVyZmFjZS5EQVRFX0JVRERISVNUX0dBUCwgMCk7XHJcbiAgICAgIGRhdGUgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmRhdGVfNF9jYWxlbmRlcih5ZWFyLCBtb250aCwgZGF5LCAwLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGRhdGUsIFN0b3JhZ2VBdHRyaWJ1dGUuREFURSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3Bfc3RydG9rKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwsIHZhbDI6IEV4cFZhbCwgdmFsMzogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgdG1wX3M6IFN0cmluZ0J1aWxkZXI7XHJcbiAgICBsZXQgdG1wX3N0cjogc3RyaW5nO1xyXG4gICAgbGV0IGlkeDogbnVtYmVyO1xyXG4gICAgbGV0IGRlbGltOiBzdHJpbmc7XHJcbiAgICBsZXQgcmV0X3N0cjogc3RyaW5nID0gJyc7XHJcbiAgICBpZiAodmFsMS5TdHJWYWwgPT09IG51bGwgfHwgdmFsMi5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWwzLlN0clZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKTtcclxuICAgIH1cclxuICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHZhbDEuU3RyVmFsKSAmJiB2YWwzLlN0clZhbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRtcF9zID0gbmV3IFN0cmluZ0J1aWxkZXIodmFsMS5TdHJWYWwubGVuZ3RoICsgMik7XHJcbiAgICAgIGlkeCA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICBpZiAoaWR4ID4gMCkge1xyXG4gICAgICAgIGRlbGltID0gTlN0cmluZy5UcmltRW5kKHZhbDMuU3RyVmFsLCB0aGlzLl9jaGFyc1RvVHJpbSk7XHJcbiAgICAgICAgdG1wX3MuQXBwZW5kKHZhbDEuU3RyVmFsKTtcclxuICAgICAgICBpZiAoZGVsaW0ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoaWR4ID09PSAxKVxyXG4gICAgICAgICAgICByZXRfc3RyID0gdG1wX3MuVG9TdHJpbmcoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdG1wX3N0ciA9IHRtcF9zLlRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGlkeDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJldF9zdHIgPSBTdHJVdGlsLnN0cnN0cih0bXBfc3RyLCBkZWxpbSk7XHJcbiAgICAgICAgICAgIGlmIChyZXRfc3RyID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGkgPT09IGlkeCAtIDEpXHJcbiAgICAgICAgICAgICAgICByZXRfc3RyID0gdG1wX3N0cjtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXRfc3RyID0gdG1wX3N0ci5zdWJzdHIoMCwgdG1wX3N0ci5sZW5ndGggLSByZXRfc3RyLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHRtcF9zdHIgPSB0bXBfc3RyLnN1YnN0cihyZXRfc3RyLmxlbmd0aCArIGRlbGltLmxlbmd0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocmV0X3N0ciAhPT0gbnVsbCkge1xyXG4gICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IHJldF9zdHI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgfVxyXG4gICAgaWR4ID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoIU5TdHJpbmcuSXNOdWxsT3JFbXB0eSh2YWwxLlN0clZhbCkgJiYgdmFsMy5TdHJWYWwubGVuZ3RoID09PSAwICYmIGlkeCA9PT0gMSkge1xyXG4gICAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDEuU3RyVmFsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2Ricm91bmQocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCwgdmFsMjogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCB8fCB2YWwyLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUodmFsMS5NZ051bVZhbCk7XHJcbiAgICBsZXQgd2hvbGU6IG51bWJlciA9IHZhbDIuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKHdob2xlIDwgMClcclxuICAgICAgcmVzVmFsLk1nTnVtVmFsLmRiUm91bmQoLXdob2xlKTtcclxuICAgIGVsc2UgcmVzVmFsLk1nTnVtVmFsLnJvdW5kKHdob2xlKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3ZhcnBpYyhyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBmbGQ6IEZpZWxkO1xyXG4gICAgbGV0IGN0cmw6IE1nQ29udHJvbDtcclxuXHJcbiAgICAvLyB2YWxpZGF0aW9uIGNoZWNrcyBvbiB0aGUgZXhwcmVzc2lvbiBhcmd1bWVudHNcclxuICAgIGlmICh2YWwyLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbW9kZTogbnVtYmVyID0gdmFsMi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgaXRtOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGZsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKGl0bSk7IC8vIGl0bSBzdGFydHMgZnJvbSBBIC0+IDEsIGJ1dCBvdXIgYXJyYXkgc3RhcnRzIGZyb20gMCAtPiAoaXRtLTEpXHJcbiAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBFeGNlcHRpb24pIHtcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZyhleCk7XHJcbiAgICAgICAgLy8gbWFrZU51bGxTdHJpbmdcclxuICAgICAgICBmbGQgPSBudWxsO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgICB0aHJvdyBleDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmxkID09PSBudWxsKSB7XHJcbiAgICAgIC8vIHZhbF9wcmVfcyAoMCkgaW4gTWFnaWNcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKCdFeHByZXNzaW9uRXZhbHVhdG9yLmV2YWxfb3BfdmFycGljIHRoZXJlIGlzIG5vIGNvbnRyb2wgbnVtYmVyICcgKyBpdG0pO1xyXG4gICAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChtb2RlICE9PSAwKSB7XHJcbiAgICAgIC8vIGdldHMgdGhlIGNvbnRyb2wgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZFxyXG4gICAgICBjdHJsID0gZmxkLmdldEN0cmwoKTtcclxuXHJcbiAgICAgIGlmIChjdHJsICE9PSBudWxsKSB7XHJcbiAgICAgICAgLy8gd2UgZG9udCBuZWVkIHRvIGNoZWNrIGlmIHRoZSBjb250cm9sIGZvcm1hdCBpcyBhbiBleHByZXNzaW9uIHNpbmNlXHJcbiAgICAgICAgLy8gdGhlIFBJQyBvYmplY3QgYWx3YXlzIGtlZXAgYW4gdXAgdG8gZGF0ZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiByZXN1bHRlXHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IGN0cmwuZ2V0UElDKCkuZ2V0Rm9ybWF0KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZmxkLmdldFR5cGUoKSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CICYmIGZsZC5nZXRUeXBlKCkgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpIHtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IGZsZC5nZXRQaWN0dXJlKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfdmFyYXR0cihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgZmxkOiBGaWVsZDtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGl0bTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICB0cnkge1xyXG4gICAgICBmbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayhpdG0pO1xyXG4gICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2coZXgpO1xyXG4gICAgICAgIGZsZCA9IG51bGw7XHJcbiAgICAgIH0gZWxzZVxyXG4gICAgICAgIHRocm93IGV4O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmbGQgPT09IG51bGwpIHtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKCdFeHByZXNzaW9uRXZhbHVhdG9yLmV2YWxfb3BfdmFyYXR0ciB0aGVyZSBpcyBubyBjb250cm9sIG51bWJlciAnICsgaXRtKTtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSA9IGZsZC5nZXRUeXBlKCk7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJycgKyBFeHByZXNzaW9uRXZhbHVhdG9yLkdldEF0dHJpYnV0ZUNoYXIoYXR0cik7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBleHBfbnVsbF92YWxfZ2V0KGV4cF9hdHRyOiBTdG9yYWdlQXR0cmlidXRlLCBvcGNvZGU6IG51bWJlciwgbnVsbF9wYXJtOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBwdHI6IHN0cmluZyA9ICcnO1xyXG4gICAgbGV0IG51bV92YWw6IG51bWJlciA9IDA7XHJcblxyXG4gICAgbnVsbF9wYXJtLklzTnVsbCA9IHRydWU7XHJcblxyXG5cclxuICAgIC8vIElmIHRoZSBUaGUgQXR0cmlidXRlIGlzIFVua25vd24gLSB1c2UgdGhlIGV4cGVjdGVkIEF0dHJpYnV0ZTpcclxuICAgIGlmIChvcGNvZGUgPT09IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTEwpIHtcclxuICAgICAgbnVsbF9wYXJtLkF0dHIgPSBleHBfYXR0cjtcclxuICAgICAgaWYgKGV4cF9hdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKVxyXG4gICAgICAgIHB0ciA9ICcnO1xyXG5cclxuICAgICAgc3dpdGNoIChleHBfYXR0cikge1xyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk1FTU86XHJcbiAgICAgICAgICBvcGNvZGUgPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX0E7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgICBvcGNvZGUgPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX047XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgICBvcGNvZGUgPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX0I7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgICBvcGNvZGUgPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX0Q7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgICBvcGNvZGUgPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX1Q7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgICBvcGNvZGUgPSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX1U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAob3Bjb2RlKSB7XHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTDpcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX0E6XHJcbiAgICAgICAgaWYgKGV4cF9hdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IgJiZcclxuICAgICAgICAgIGV4cF9hdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgICAgbnVsbF9wYXJtLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgIHB0ciA9ICcnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX046XHJcbiAgICAgICAgbnVsbF9wYXJtLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfQjpcclxuICAgICAgICBudWxsX3Bhcm0uQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgICAgICBudW1fdmFsID0gMDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9EOlxyXG4gICAgICAgIG51bGxfcGFybS5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFO1xyXG4gICAgICAgIG51bV92YWwgPSBOTnVtYmVyLlBhcnNlKFBJQ0ludGVyZmFjZS5ERUZBVUxUX0RBVEUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX1Q6XHJcbiAgICAgICAgbnVsbF9wYXJtLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlRJTUU7XHJcbiAgICAgICAgbnVtX3ZhbCA9IE5OdW1iZXIuUGFyc2UoUElDSW50ZXJmYWNlLkRFRkFVTFRfVElNRSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05VTExfVTpcclxuICAgICAgICBpZiAoZXhwX2F0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiAmJlxyXG4gICAgICAgICAgZXhwX2F0dHIgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgICBudWxsX3Bhcm0uQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgICAgICBwdHIgPSAnJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OVUxMX086XHJcbiAgICAgICAgbnVsbF9wYXJtLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJMT0I7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoIChudWxsX3Bhcm0uQXR0cikge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgbnVsbF9wYXJtLlN0clZhbCA9IHB0cjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgaWYgKG9wY29kZSA9PT0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfTlVMTF9OKSB7XHJcbiAgICAgICAgICAvLyBpbml0IE5VTEwgTnVtZXJpYyBudW1iZXJcclxuICAgICAgICAgIGxldCBudW1fdmFsdWUgPSBuZXcgSW50OEFycmF5KE5VTV9UWVBFLk5VTV9TSVpFKTtcclxuICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBudW1fdmFsdWUubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIG51bV92YWx1ZVtpXSA9IDA7XHJcbiAgICAgICAgICBudWxsX3Bhcm0uTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUobnVtX3ZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVGltZSAmIERhdGFcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLkNvbnN0cnVjdE1hZ2ljTnVtKG51bGxfcGFybSwgbnVtX3ZhbCwgbnVsbF9wYXJtLkF0dHIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgbnVsbF9wYXJtLlN0clZhbCA9IHB0cjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgIG51bGxfcGFybS5Cb29sVmFsID0gZmFsc2U7IC8vIGZhbHNlIGlzIGRlZmF1bHQgNCBib29sZWFuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBfZ2V0X3ZhcihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCBpc19wcmV2aW91czogYm9vbGVhbik6IHZvaWQgO1xyXG4gIHByaXZhdGUgZXhwX2dldF92YXIodmFsMTogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQgO1xyXG4gIHByaXZhdGUgZXhwX2dldF92YXIocmVzVmFsT3JWYWwxOiBFeHBWYWwsIHZhbDFPclJlc1ZhbDogRXhwVmFsLCBpc19wcmV2aW91cz86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXNfcHJldmlvdXMpKVxyXG4gICAgICB0aGlzLmV4cF9nZXRfdmFyXzAocmVzVmFsT3JWYWwxLCB2YWwxT3JSZXNWYWwsIGlzX3ByZXZpb3VzKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5leHBfZ2V0X3Zhcl8xKHJlc1ZhbE9yVmFsMSwgdmFsMU9yUmVzVmFsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwX2dldF92YXJfMChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCBpc19wcmV2aW91czogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IGZsZDogRmllbGQgPSBudWxsO1xyXG5cclxuICAgIC8vIGV2YWx1YXRlIGZsZCBmcm9tIG1nTnVtVmFsXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgaXRtOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgICAgZmxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soaXRtKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiBmbGQgaXMgbnVsbCwgc2V0IHJlc1ZhbCB0byBudWxsIGFuZCByZXR1cm5cclxuICAgIGlmIChmbGQgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiBmbGQgaXMgbm90IGV4cG9zZWQgdG8gY2xpZW50IHRoZW4gYWxlcnQgd2l0aCBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gbnVsbFxyXG4gICAgaWYgKGZsZC5Jc0V4cG9zZWRUb0NsaWVudCA9PT0gZmFsc2UpIHtcclxuICAgICAgbGV0IHNiOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgICAgc2IuQXBwZW5kKE5TdHJpbmcuRm9ybWF0KCdFcnJvcjogVmFyaWFibGUgXFwnezB9XFwnIGlzIG5vdCBleHBvc2VkIHRvIGNsaWVudC4nLCBmbGQuZ2V0VmFyTmFtZSgpKSk7XHJcbiAgICAgIGFsZXJ0KHNiLlRvU3RyaW5nKCkpO1xyXG4gICAgICByZXNWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc19wcmV2aW91cylcclxuICAgIC8vIHNldCB0aGUgZmxhZyB0aGF0IHdpbGwgYmUgdXNlZCBieSBmbGQuZ2V0VmFsdWVcclxuICAgICAgKDxUYXNrQmFzZT5mbGQuZ2V0VGFzaygpKS5zZXRFdmFsT2xkVmFsdWVzKHRydWUpO1xyXG5cclxuICAgIC8vIGZpcnN0IGdldCB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIGFuZCBzZXQgaXQgdG8gdGhlIHJlc3VsdC5cclxuICAgIHN1cGVyLlNldFZhbChyZXNWYWwsIGZsZC5nZXRUeXBlKCksIGZsZC5nZXRWYWx1ZSh0cnVlKSwgbnVsbCk7XHJcblxyXG4gICAgLy8gbm93IGZvciB0aGUgbnVsbCBpbmRpY2F0aW9uLlxyXG4gICAgaWYgKGlzX3ByZXZpb3VzKSB7XHJcbiAgICAgIC8vIGZvciBwcmV2aW91cywgdGhlIG51bGwgaW5kaWNhdGlvbiBpcyBub3Qgb24gdGhlIGZsZCwgd2Ugc2hvdWxkIGdldCBpdCBmcm9tIHRoZSBvcmlnaW5hbCByZWNvcmQuXHJcbiAgICAgIGlmIChmbGQuaXNPcmlnaW5hbFZhbHVlTnVsbCgpKVxyXG4gICAgICAvLyB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIHJlY29yZCBpcyBOVUxMXHJcbiAgICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORSk7XHJcbiAgICB9XHJcbiAgICAvLyBmb3IgY3VycmVudCB2YWx1ZSwgdGhlIG51bGwgaW5kaWNhdGlvbiBpcyBhbHJlYWR5IG9uIHRoZSBmbGQuXHJcblxyXG4gICAgZWxzZVxyXG4gICAgICByZXNWYWwuSXNOdWxsID0gZmxkLmlzTnVsbCgpO1xyXG5cclxuICAgIGlmIChpc19wcmV2aW91cylcclxuICAgIC8vIHJlc2V0IHRoZSBmbGFnLlxyXG4gICAgICAoPFRhc2tCYXNlPmZsZC5nZXRUYXNrKCkpLnNldEV2YWxPbGRWYWx1ZXMoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwxXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfdmFybW9kKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgaXRtOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBmbGQ6IEZpZWxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soaXRtKTtcclxuXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcblxyXG4gICAgLy8gUUNSIDc1MjI3MCBpZiB0aGUgdGhlIGFyZ3VtZW50cyBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWxpZCBmaWVsZCByZXR1cm4gZmFsc2VcclxuICAgIGlmIChmbGQgIT09IG51bGwpIHtcclxuICAgICAgbGV0IGlkeDogbnVtYmVyID0gZmxkLmdldElkKCk7XHJcbiAgICAgIGxldCBkdjogRGF0YVZpZXcgPSA8RGF0YVZpZXc+KDxUYXNrQmFzZT5mbGQuZ2V0VGFzaygpKS5EYXRhVmlldztcclxuICAgICAgbGV0IHJlYzogUmVjb3JkID0gZHYuZ2V0Q3VyclJlYygpO1xyXG4gICAgICByZXNWYWwuQm9vbFZhbCA9ICFyZWMuZmxkVmFsc0VxdWFsKGR2LmdldE9yaWdpbmFsUmVjKCksIGlkeCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfdmFyaW5wKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBpOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGV4cGtlcm5fcGFyZW50OiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoZXhwa2Vybl9wYXJlbnQgPj0gMCAmJiBleHBrZXJuX3BhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IGV4cGtlcm5fcGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soZXhwa2Vybl9wYXJlbnQpO1xyXG4gICAgICBpZiAodHNrICE9PSBudWxsKVxyXG4gICAgICAgIGkgPSB0c2suY3RsX2l0bV80X3BhcmVudF92ZWUoMCwgdHNrLmdldEN1cnJGaWVsZElkeCgpICsgMSk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGksIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfdmFybmFtZShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaXRtOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBmbGQ6IEZpZWxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soaXRtKTtcclxuICAgIGxldCBidWZmZXI6IHN0cmluZyA9IChmbGQgIT09IG51bGwpID8gZmxkLmdldE5hbWUoKSA6ICcnO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IGJ1ZmZlcjtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfVmFyRGlzcGxheU5hbWUocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcblxyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgIT09IG51bGwpIHtcclxuICAgICAgbGV0IGl0bTogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICAgIGxldCBmbGQ6IEZpZWxkID0gdGhpcy5HZXRGaWVsZE9mQ29udGV4dFRhc2soaXRtKTtcclxuXHJcbiAgICAgIGlmIChmbGQgIT09IG51bGwpXHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IGZsZC5WYXJEaXNwbGF5TmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV0dXJuIHRoZSBjb250cm9sIElEIG9mIHRoZSBjb250cm9sIHRvIHdoaWNoIGl0ZW0gKERhdGEgcHJvcGVydHkgbGl0ZXJhbCkgaXMgYXR0YWNoZWQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbDFcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9WYXJDb250cm9sSUQocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHJldDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgaXRtOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuXHJcbiAgICAgIC8vIGlmIGl0bSBpcyB0cmlnZ2VyIHRhc2ssIGNhbGN1bGF0ZSB0aGUgaXRlbSBmcm9tIGZpZWxkLlxyXG4gICAgICBpZiAoaXRtID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSylcclxuICAgICAgICBpdG0gPSAoKDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpLmN0bF9pdG1fNF9wYXJlbnRfdmVlKDAsICg8VGFza0Jhc2U+IHRoaXMuRXhwVGFzay5HZXRDb250ZXh0VGFzaygpKS5nZXRDdXJyRmllbGRJZHgoKSArIDEpKTtcclxuXHJcbiAgICAgIHJldCA9ICg8VGFza0Jhc2U+IHRoaXMuRXhwVGFzay5HZXRDb250ZXh0VGFzaygpKS5HZXRDb250cm9sSURGcm9tVmFySXRlbShpdG0gLSAxKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcocmV0KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV0dXJuIHRoZSBjaG9pY2UgY29udHJvbCdzIGl0ZW1zIGxpc3QgYWNjb3JkaW5nIHRvIGNvbnRyb2wgSUQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbDFcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9Db250cm9sSXRlbXNMaXN0KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG5cclxuICAgIGlmICh2YWwxLk1nTnVtVmFsICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBjb250cm9sSUQ6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgICBsZXQgcGFyZW50OiBudW1iZXIgPSAwO1xyXG5cclxuICAgICAgbGV0IHJlZlBhcmVudDogUmVmUGFyYW08bnVtYmVyPiA9IG5ldyBSZWZQYXJhbShwYXJlbnQpO1xyXG4gICAgICBsZXQgbWdDb250cm9sOiBNZ0NvbnRyb2wgPSAoKDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpLkdldENvbnRyb2xGcm9tQ29udHJvbElEKGNvbnRyb2xJRCAtIDEsIHJlZlBhcmVudCkpO1xyXG4gICAgICBwYXJlbnQgPSByZWZQYXJlbnQudmFsdWU7XHJcblxyXG4gICAgICBpZiAobWdDb250cm9sICE9PSBudWxsICYmIG1nQ29udHJvbC5pc0Nob2ljZUNvbnRyb2woKSlcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gYXdhaXQgbWdDb250cm9sLmdldEZvcm0oKS5HZXRDaG9pY2VDb250cm9sSXRlbUxpc3QobWdDb250cm9sKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmV0dXJuIHRoZSBjaG9pY2UgY29udHJvbCdzIGRpc3BsYXkgbGlzdCBhY2NvcmRpbmcgdG8gY29udHJvbCBJRC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsMVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX0NvbnRyb2xEaXNwbGF5TGlzdChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgY29udHJvbElEOiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgICAgbGV0IHBhcmVudDogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgIGxldCByZWZQYXJlbnQ6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW0ocGFyZW50KTtcclxuICAgICAgbGV0IG1nQ29udHJvbDogTWdDb250cm9sID0gKDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpLkdldENvbnRyb2xGcm9tQ29udHJvbElEKGNvbnRyb2xJRCAtIDEsIHJlZlBhcmVudCk7XHJcbiAgICAgIHBhcmVudCA9IHJlZlBhcmVudC52YWx1ZTtcclxuXHJcbiAgICAgIGlmIChtZ0NvbnRyb2wgIT09IG51bGwgJiYgbWdDb250cm9sLmlzQ2hvaWNlQ29udHJvbCgpKVxyXG4gICAgICAgIHJlc1ZhbC5TdHJWYWwgPSBhd2FpdCBtZ0NvbnRyb2wuZ2V0Rm9ybSgpLkdldENob2ljZUNvbnRyb2xEaXNwbGF5TGlzdChtZ0NvbnRyb2wpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX3ZpZXdtb2QocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGFyZW50OiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgocGFyZW50ID49IDAgJiYgcGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgcGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2socGFyZW50KTtcclxuICAgICAgaWYgKCF0c2suaXNNYWluUHJvZygpKSB7XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSAoKDxEYXRhVmlldz50c2suRGF0YVZpZXcpLmdldEN1cnJSZWMoKSkuTW9kaWZpZWQ7XHJcbiAgICAgICAgLy8gcmVjb3JkIG1pZ2h0IGJlIG1vZGlmaWVkIGV2ZW4gaWYgdGhlIGZsYWcgaXMgZmFsc2UgKGxpa2Ugd2hlbiB0aGVyZSBpcyBhbiB1cGRhdGUgd2l0aCBmb3JjZSB1cCA9IG5vXHJcbiAgICAgICAgLy8gaW4gdGhlIHNlcnZlciB0aGUgY2hlY2sgaXMgY29tcGFyaW5nIGFsbCB0aGUgZmllbGRzIGluIHRoZSB2aWV3LlxyXG4gICAgICAgIC8vIEhlcmUsIGlmIHRoZSBtb2RpZmllZCBpcyBmYWxzZSwgd2Ugd2lsbCBjb21wYXJlIHRoZSBjdXJyZW50IHJlYyB0byB0aGUgb3JpZ2luYWwgY3VycmVudCByZWMuXHJcbiAgICAgICAgaWYgKCFyZXNWYWwuQm9vbFZhbCkge1xyXG4gICAgICAgICAgbGV0IGN1cnJSZWM6IFJlY29yZCA9ICg8RGF0YVZpZXc+dHNrLkRhdGFWaWV3KS5nZXRDdXJyUmVjKCk7XHJcbiAgICAgICAgICBsZXQgb3JpZ2luYWxSZWM6IFJlY29yZCA9ICg8RGF0YVZpZXc+dHNrLkRhdGFWaWV3KS5nZXRPcmlnaW5hbFJlYygpO1xyXG4gICAgICAgICAgLy8gY29tcGFyZSBmaWVsZHMgYmV0d2VlbiBjdXJyZW50IHJlY29yZCBhbmQgb3JpZ2luYWwgcmVjb3JkLiBjb21wYXJlIG9ubHkgZmllbGRzIHRoYXQgYXJlIHBhcnQgb2YgZGF0YSB2aWV3LlxyXG4gICAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSAhY3VyclJlYy5pc1NhbWVSZWNEYXRhKG9yaWdpbmFsUmVjLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlXHJcbiAgICAgIHJlc1ZhbC5Cb29sVmFsID0gZmFsc2U7XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsX29wX2xldmVsKHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBvdXRzdHI6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIGlmICh2YWwxLk1nTnVtVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHBhcmVudDogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKHBhcmVudCA+PSAwICYmIHBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IHBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKHBhcmVudCk7XHJcbiAgICAgIG91dHN0ciA9IHRzay5nZXRCcmtMZXZlbCgpO1xyXG5cclxuICAgICAgLypcclxuICAgICAgICogQ2hlY2sgdGhlIGxldmVsIG9mIHRoZSBnZW5lcmF0aW9uIHRhc2suXHJcbiAgICAgICAqIEEuIElmIGl0IGlzIG5vdCBSTSwgcmV0dXJuIHRoZSBoYW5kbGVyIHRleHQuXHJcbiAgICAgICAqIEIuIElmIGl0IGlzIFJNLCB0aGVuIHdlIGhhdmUgMyBkaWZmZXJlbnQgc2l0dWF0aW9uczpcclxuICAgICAgICogMS4gSWYgdGhlIGdlbmVyYXRpb24gdGFzayBpcyBNYWluIFByb2dyYW0sIHJldHVybiBcIk1QXCIuXHJcbiAgICAgICAqIDIuIElmIHRoZSBnZW5lcmF0aW9uIHRhc2sgaXMgYSB0YXNrIHdob3NlIGltbWVkaWF0ZSBjYWxsZWQgdGFzayAoaW4gdGhlIHJ1bnRpbWUgdGFzayB0cmVlKSBpcyBhIFN1YkZvcm0sIHJldHVybiBcIlNVQkZPUk1cIi5cclxuICAgICAgICogMy4gSW4gYW55IG90aGVyIGNhc2UsIHJldHVybiB0aGUgaGFuZGxlciB0ZXh0LlxyXG4gICAgICAgKi9cclxuICAgICAgaWYgKHBhcmVudCAhPT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0sgJiYgdHNrICE9PSB0aGlzLkV4cFRhc2spIHtcclxuICAgICAgICBpZiAob3V0c3RyLnRvVXBwZXJDYXNlKCkgPT09IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9SRUNfTUFJTi50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBpZiAodHNrLmlzTWFpblByb2coKSkge1xyXG4gICAgICAgICAgICBvdXRzdHIgPSBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfTUFJTl9QUk9HO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHRza1RyZWU6IFRhc2tCYXNlW10gPSBuZXcgQXJyYXk8VGFza0Jhc2U+KCgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBfYWk6IG51bWJlciA9IDA7IF9haSA8IHRza1RyZWUubGVuZ3RoOyArK19haSlcclxuICAgICAgICAgICAgICB0c2tUcmVlW19haV0gPSBudWxsO1xyXG4gICAgICAgICAgICAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykucGF0aFRvUm9vdCh0c2tUcmVlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocGFyZW50ID4gMCAmJiB0c2tUcmVlW3BhcmVudCAtIDFdLklzU3ViRm9ybSlcclxuICAgICAgICAgICAgICBvdXRzdHIgPSBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfU1VCRk9STTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBvdXRzdHI7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gZ2V0IHRoZSB0YXNrJ3MgY291bnRlciAoYnkgdGFzayBnZW5lcmF0aW9uKS5cclxuICBwcml2YXRlIGV2YWxfb3BfY291bnRlcihyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IHBhcmVudDogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKHBhcmVudCA+PSAwICYmIHBhcmVudCA8ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSB8fCBwYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2socGFyZW50KTtcclxuICAgICAgbnVtID0gPG51bWJlcj4oKHRhc2sgPT09IG51bGwpID8gMCA6IHRhc2suZ2V0Q291bnRlcigpKTtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyg8bnVtYmVyPm51bSk7XHJcbiAgfVxyXG5cclxuICBldmFsX29wX2VtcHR5RGF0YXZpZXcocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHJldDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHBhcmVudDogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKHBhcmVudCA+PSAwICYmIHBhcmVudCA8ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSB8fCBwYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0c2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhwYXJlbnQpO1xyXG4gICAgICBpZiAodHNrICE9PSBudWxsICYmIHRzay5EYXRhVmlldy5pc0VtcHR5RGF0YXZpZXcoKSlcclxuICAgICAgICByZXQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IHJldDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsMVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX21haW5sZXZlbChyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgb3V0c3RyOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGFyZW50OiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgocGFyZW50ID49IDAgJiYgcGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgcGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2socGFyZW50KTtcclxuICAgICAgb3V0c3RyID0gdHNrLmdldE1haW5MZXZlbCgpO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLlN0clZhbCA9IG91dHN0cjtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfbWFpbmRpc3BsYXkocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IG1haW5Ec3BJZHg6IG51bWJlciA9IDA7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwYXJlbnQ6IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG5cclxuICAgIGlmICgocGFyZW50ID49IDAgJiYgcGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgcGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2socGFyZW50KTtcclxuICAgICAgbWFpbkRzcElkeCA9ICh0c2suZ2V0UHJvcChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NQUlOX0RJU1BMQVkpKS5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBtYWluRHNwSWR4LCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9Jc0ZpcnN0UmVjb3JkQ3ljbGUocmVzVmFsOiBFeHBWYWwsIHZhbDE6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGlzRmlyc3RSZWNDeWNsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgaWYgKHZhbDEuTWdOdW1WYWwgPT09IG51bGwpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBhcmVudDogbnVtYmVyID0gdmFsMS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKHBhcmVudCA+PSAwICYmIHBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IHBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKHBhcmVudCk7XHJcbiAgICAgIGlzRmlyc3RSZWNDeWNsZSA9IHRzay5pc0ZpcnN0UmVjb3JkQ3ljbGUoKTtcclxuICAgIH1cclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gaXNGaXJzdFJlY0N5Y2xlO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWwxXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV4cF9pc19kZWZhdWx0KHJlc1ZhbDogRXhwVmFsLCB2YWwxOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgIGxldCBpdG06IG51bWJlciA9IHZhbDEuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgLy8gaXRtIHN0YXJ0cyBmcm9tIEEtPjEgYnV0IHRoZSBhcnJheSBzdGFydHMgZnJvbSAwIC0+IGl0bS0xXHJcbiAgICBsZXQgZmxkOiBGaWVsZCA9ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuY3RsX2l0bV8yX3BhcmVudF92ZWUoaXRtIC0gMSkpO1xyXG4gICAgaWYgKGZsZCA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIC8vIFFDUiA5MjgzMDggLSBmb3IgdmVjdG9ycyBhcyB2ZWN0b3JzICggbm90IHBlciBjZWxsIG9mIHRoZSB2ZWN0b3IpIHRoZSBCZWhhdmlvciBpcyB0aGUgc2FtZSBhcyBibG9ic1xyXG4gICAgLy8gdGhhdCBpcyBudWxsIGlzIGFsbG93ZWQgYW5kIG51bGwgaXMgZGVmYXVsdFxyXG4gICAgaWYgKGZsZC5pc051bGwoKSAmJiAoZmxkLmlzTnVsbERlZmF1bHQoKSB8fCBmbGQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSlcclxuICAgICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG5cclxuICAgIGxldCB2YWw6IHN0cmluZyA9IGZsZC5nZXRWYWx1ZShmYWxzZSk7XHJcbiAgICBsZXQgZGVmVmFsOiBzdHJpbmcgPSBmbGQuZ2V0RGVmYXVsdFZhbHVlKCk7XHJcbiAgICBsZXQgdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSA9IGZsZC5nZXRUeXBlKCk7XHJcblxyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBFeHByZXNzaW9uRXZhbHVhdG9yLm1nVmFsc0VxdWFsKHZhbCwgZmxkLmlzTnVsbCgpLCB0eXBlLCBkZWZWYWwsIGZsZC5pc051bGxEZWZhdWx0KCksIHR5cGUpO1xyXG4gICAgLy8gdmFsdWUgbm90IGVxdWl2YWxlbnQgdG8gZGVmYXVsdCB2YWx1ZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIEZBTFNFXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybiB0cnVlIGlmIHVzZXIgaXMgbG9nZ2VkbiBpblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfSXNMb2dnZWRJbihyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IFVzZXJEZXRhaWxzLkluc3RhbmNlLmdldElzTG9nZ2VkSW4oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9hcHBuYW1lKHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gU2VydmVyQ29uZmlnLkluc3RhbmNlLmdldEFwcE5hbWUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3Byb2cocmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAoKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5xdWVyeVRhc2tQYXRoKCkpKS5Ub1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfdGhpcyhyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHRyaWdnZXJUYXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT50aGlzLkV4cFRhc2s7XHJcbiAgICBsZXQgUmVzdWx0OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIC8vIEVYUEtFUk5fcGFyZW50ID0gRVhQS0VSTl92ZWUgPSAwO1xyXG5cclxuICAgIGlmICh0cmlnZ2VyVGFzayAhPT0gbnVsbCkge1xyXG4gICAgICAvLyBFWFBLRVJOX3BhcmVudCA9IFRSSUdHRVJfVEFTSztcclxuICAgICAgUmVzdWx0ID0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0s7XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIFJlc3VsdCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIlBhcmVudFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJNb2Rlc1wiPk1PREUgbGl0ZXJhbCBnaXZlbiBhcyBtb2RlIHBhcmFtZXRlcjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3N0YXQocmVzVmFsOiBFeHBWYWwsIFBhcmVudDogRXhwVmFsLCBNb2RlczogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgUmV0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgaVBhcmVudDogbnVtYmVyID0gUGFyZW50Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoaVBhcmVudCA+PSAwICYmIGlQYXJlbnQgPCAgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgaVBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IFRzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKGlQYXJlbnQpO1xyXG4gICAgICBpZiAoVHNrICE9PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IHRza01vZGU6IHN0cmluZyA9IChUc2suZ2V0TW9kZSgpKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBNb2Rlcy5TdHJWYWwubGVuZ3RoOyBpID0gaSArIDEpIHtcclxuICAgICAgICAgIGxldCBtb2RlOiBzdHJpbmcgPSBNb2Rlcy5TdHJWYWwuY2hhckF0KGkpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICBsZXQgY29kZTogc3RyaW5nID0gdGhpcy5jc3RfY29kZV90cmFuc19idWYoJ0knLCAnTUNERVBMUktTT05CJywgbW9kZSwgTXNnSW50ZXJmYWNlLkVYUFRBQl9UU0tfTU9ERV9SVCk7XHJcblxyXG4gICAgICAgICAgLy8gY29kZSBub3QgZm91bmQsIGl0IG1pZ2h0IGJlIEVuZ2xpc2ggKHNhbWUgYXMgaW4gb25saW5lKS5cclxuICAgICAgICAgIGlmIChjb2RlID09PSAnXFwwJykge1xyXG4gICAgICAgICAgICBjb2RlID0gbW9kZS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICBpZiAoY29kZSA9PT0gJ1EnKVxyXG4gICAgICAgICAgICAgIGNvZGUgPSAnRSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29kZSA9PT0gdHNrTW9kZSkge1xyXG4gICAgICAgICAgICBSZXQgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBSZXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybnMgc3ViZm9ybSBleGVjdXRpb24gbW9kZSBmb3IgdGhlIHRhc2sgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBnZW5lcmF0aW9uXHJcbiAgLy8vIC0xIMKBRVRoZSB0YXNrIGlzIG5vdCBleGVjdXRlZCBhcyBhIHN1YmZvcm1cclxuICAvLy8gIDAgwoFFVGhlIHRhc2sgaXMgZXhlY3V0ZWQgYnkgc2V0dGluZyB0aGUgZm9jdXMgb24gaXRcclxuICAvLy8gIDEgwoFFVGhlIHN1YnRhc2sgaXMgZXhlY3V0ZWQgZm9yIHRoZSBmaXJzdCB0aW1lXHJcbiAgLy8vICAyIMKBRVRoZSB0YXNrIGlzIGV4ZWN1dGVkIGJlY2F1c2UgdGhlIEF1dG9tYXRpYyBSZWZyZXNoIHByb3BlcnR5IG9yIHRoZSBTdWJmb3JtIFJlZnJlc2ggZXZlbnQgaGFzIGJlZW5cclxuICAvLy8gICAgICB0cmlnZ2VyZWQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImdlbmVyYXRpb25cIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9zdWJmb3JtRXhlY01vZGUocmVzVmFsOiBFeHBWYWwsIGdlbmVyYXRpb246IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHN1YmZvcm1FeGVjTW9kZTogVGFza19TdWJmb3JtRXhlY01vZGVFbnVtID0gVGFza19TdWJmb3JtRXhlY01vZGVFbnVtLk5PX1NVQkZPUk07XHJcbiAgICBsZXQgaVBhcmVudDogbnVtYmVyID0gZ2VuZXJhdGlvbi5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGlQYXJlbnQgPj0gMCAmJiBpUGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgaVBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhpUGFyZW50KTtcclxuICAgICAgaWYgKHRhc2sgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAodGFzay5Jc1N1YkZvcm0pXHJcbiAgICAgICAgICBzdWJmb3JtRXhlY01vZGUgPSB0YXNrLlN1YmZvcm1FeGVjTW9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCA8bnVtYmVyPnN1YmZvcm1FeGVjTW9kZSwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF92YXJzZXQocmVzVmFsOiBFeHBWYWwsIHZhbDogRXhwVmFsLCBudW06IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gaW5pdCByZXR1cm5lZCB2YWx1ZVxyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSB0cnVlO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcblxyXG4gICAgaWYgKG51bS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICAvLyB0aGUgdmFyc2V0IGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIHRydWUuXHJcbiAgICAgIC8vIFNldE5VTEwocmVzVmFsLFNUT1JBR0VfQVRUUl9CT09MRUFOKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpdG06IG51bWJlciA9IG51bS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgbGV0IGZsZDogRmllbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayhpdG0pO1xyXG5cclxuICAgIGlmIChmbGQgPT09IG51bGwpIHtcclxuICAgICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suU3RvcmFnZUZsZEFscGhhVW5pY29kZU9yQmxvYihmbGQuZ2V0VHlwZSgpLCB2YWwuQXR0cikpXHJcbiAgICAgIHRoaXMuQ29udmVydEV4cFZhbCh2YWwsIGZsZC5nZXRUeXBlKCkpO1xyXG5cclxuICAgIGxldCBidWZwdHI6IHN0cmluZztcclxuICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUaGVTYW1lVHlwZShmbGQuZ2V0VHlwZSgpLCB2YWwuQXR0cikpIHtcclxuICAgICAgc3dpdGNoIChmbGQuZ2V0VHlwZSgpKSB7XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgICAgYnVmcHRyID0gdmFsLlN0clZhbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICAgIGJ1ZnB0ciA9IHZhbC5NZ051bVZhbC50b1hNTHJlY29yZCgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgICAgYnVmcHRyID0gdmFsLkJvb2xWYWwgPyAnMScgOiAnMCc7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgICAgICBidWZwdHIgPSB2YWwuVG9NZ1ZhbCgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICAgIGJ1ZnB0ciA9IHZhbC5Ub01nVmFsKCk7XHJcblxyXG4gICAgICAgICAgLy8gUUNSIDQ0ODY2ODJcclxuICAgICAgICAgIGlmICghdmFsLklzTnVsbCkge1xyXG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgdmFsaWQgdmVjdG9yIGluIHRoZSBibG9iXHJcbiAgICAgICAgICAgIGlmICh2YWwuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKVxyXG4gICAgICAgICAgICAgIGlmICghVmVjdG9yVHlwZS52YWxpZGF0ZUJsb2JDb250ZW50cyh2YWwuU3RyVmFsKSlcclxuICAgICAgICAgICAgICAgIGJ1ZnB0ciA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoYnVmcHRyICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgYnVmcHRyID0gT3BlcmF0aW9uLm9wZXJVcGRhdGVWZWN0b3JzKGZsZCwgYnVmcHRyKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChidWZwdHIgIT0gbnVsbClcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZmFsbHMgdGhyb3VnaFxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAvLyBjYW4ndCBjb21lIHRvIHRoaXMgcG9pbnRcclxuICAgICAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBpdCdzIG5vdCB0aGUgc2FtZSB0eXBlIG9mIHRoZSBmaWVsZCBhbmQgdmFsdWUgOlxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIGV2ZXJ5IGZpZWxkIGhhcyB0byBnZXQgaXQncyBkZWZhdWx0IHZhbHVlXHJcbiAgICAgIGJ1ZnB0ciA9IGZsZC5nZXREZWZhdWx0VmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsLklzTnVsbCkge1xyXG4gICAgICAvLyBnZXQgdGhlIG51bGwgdmFsdWUgb3IgdGhlIG1hZ2ljIGRlZmF1bHQgdmFsdWVcclxuICAgICAgYnVmcHRyID0gZmxkLmdldE51bGxWYWx1ZSgpO1xyXG4gICAgICBpZiAoYnVmcHRyID09PSBudWxsKVxyXG4gICAgICAgIGZsZC5nZXRNYWdpY0RlZmF1bHRWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgLy8gUUNSIDk4NDU2MyB2YXIgc2V0IGluIGNyZWF0IG1vZGUgc291bGQgbm90IGNyZWF0IGEgbmV3IHJlY29yZFxyXG4gICAgLy8gIzc3NzcwMC4gVGhlIHJlY29yZCBzaG91bGQgYmUgbWFya2VkIGFzIHVwZGF0ZWQgaWYgdGhlIGZpZWxkJ3MgdGFzayBhbmQgdGhlIGV4cHJlc3Npb24gdGFzayBhcmUgZGlmZmVyZW50IG9yXHJcbiAgICAvLyB0aGUgZmllbGQncyB0YXNrIGlzIGluIFJlY29yZCBTdWZmaXguIFRoaXMgaXMgc2FtZSBhcyBPTCAocmVmZXIgUlQ6OlBvc3RWZWVVcGRhdGUgaW4gdmV3LmNwcCkuXHJcbiAgICBsZXQgc2V0UmVjb3JkVXBkYXRlZDogYm9vbGVhbiA9IGZsZC5nZXRUYXNrKCkgIT09IHRoaXMuRXhwVGFzayB8fCAoPFRhc2tCYXNlPmZsZC5nZXRUYXNrKCkpLmdldEJya0xldmVsKCkgPT09IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9SRUNfU1VGRklYO1xyXG5cclxuICAgIGF3YWl0IGZsZC5zZXRWYWx1ZUFuZFN0YXJ0UmVjb21wdXRlKGJ1ZnB0ciwgdmFsLklzTnVsbCwgdHJ1ZSwgc2V0UmVjb3JkVXBkYXRlZCwgZmFsc2UpO1xyXG4gICAgYXdhaXQgZmxkLnVwZGF0ZURpc3BsYXkoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic2hvd01lc3NhZ2VcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImdlbmVyYXRpb25cIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9yb2xsYmFjayhyZXNWYWw6IEV4cFZhbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gKDxUYXNrQmFzZT50aGlzLkV4cFRhc2suR2V0Q29udGV4dFRhc2soKSkgfHwgKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spO1xyXG5cclxuICAgIC8vIGV4ZWN1dGUgcm9sbGJhY2sgY29tbWFuZFxyXG4gICAgYXdhaXQgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuaGFuZGxlSW50ZXJuYWxFdmVudFdpdGhUYXNrKHRhc2ssIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9ST0xMQkFDSyk7XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7IC8vIGluIHRoZSBzZXJ2ZXIgd2UgcmV0dXJuIGFsd2VzIHRydWVcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInNvdXJjZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWFza09yZ1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfbGlrZShzb3VyY2U6IEV4cFZhbCwgbWFza09yZzogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBqOiBudW1iZXI7XHJcbiAgICBsZXQgU291cmNlOiBzdHJpbmcgPSBzb3VyY2UuU3RyVmFsO1xyXG4gICAgbGV0IE1hc2tPcmc6IHN0cmluZyA9IG1hc2tPcmcuU3RyVmFsO1xyXG4gICAgbGV0IGFzdGVyaXNrQ250OiBudW1iZXIgPSAwOyAvLyBjb3VudGVyIG9mICcqJyBpbiB0aGUgc291cmNlIHN0cmluZ1xyXG4gICAgbGV0IFNhbWU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgbGV0IGVzY19jaDogYm9vbGVhbjtcclxuICAgIGlmIChTb3VyY2UgPT09IG51bGwgfHwgTWFza09yZyA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IFNvdXJjZUxlbjogbnVtYmVyID0gU291cmNlLmxlbmd0aDtcclxuICAgIGxldCBNYXNrTGVuOiBudW1iZXIgPSBNYXNrT3JnLmxlbmd0aDtcclxuICAgIGxldCBNYXNrID0gbmV3IEFycmF5KE1hc2tMZW4pO1xyXG4gICAgbGV0IGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWlsZGVyKE1hc2tMZW4pO1xyXG5cclxuICAgIC8vIENoYW5nZSBpbiB0aGUgbWFzayAnXFxcXCcgLT4gJ1xcJywgJ1xcKicgLT4gJyonLCAnXFw/JyAtPiAnPycsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqJyAtPiBBU1RFUklTS19DSFIsICc/JyAtPiBRVUVTVElPTl9DSFJcclxuICAgIGZvciAoaSA9IDAsIGogPSAwLCBlc2NfY2ggPSBmYWxzZTsgaSA8IE1hc2tMZW47IGkrKykge1xyXG4gICAgICBsZXQgY3VyckNocjogc3RyaW5nID0gTWFza09yZ1tpXTtcclxuICAgICAgc3dpdGNoIChjdXJyQ2hyKSB7XHJcbiAgICAgICAgY2FzZSAnXFxcXCc6XHJcbiAgICAgICAgICBpZiAoZXNjX2NoKVxyXG4gICAgICAgICAgICBNYXNrW2orK10gPSBjdXJyQ2hyO1xyXG4gICAgICAgICAgZXNjX2NoID0gIWVzY19jaDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICcqJzpcclxuICAgICAgICAgIGlmIChlc2NfY2gpXHJcbiAgICAgICAgICAgIE1hc2tbaisrXSA9IGN1cnJDaHI7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTWFza1tqKytdID0gRXhwcmVzc2lvbkV2YWx1YXRvci5BU1RFUklTS19DSFI7XHJcbiAgICAgICAgICAgIGFzdGVyaXNrQ250Kys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlc2NfY2ggPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlICc/JzpcclxuICAgICAgICAgIE1hc2tbaisrXSA9IGVzY19jaCA/IGN1cnJDaHIgOiBFeHByZXNzaW9uRXZhbHVhdG9yLlFVRVNUSU9OX0NIUjtcclxuICAgICAgICAgIGVzY19jaCA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBNYXNrW2orK10gPSBjdXJyQ2hyO1xyXG4gICAgICAgICAgZXNjX2NoID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgTWFza0xlbiA9IGo7XHJcbiAgICBNYXNrT3JnID0gRXhwcmVzc2lvbkV2YWx1YXRvci5hcnJUb1N0cihNYXNrLCAwLCBNYXNrLmxlbmd0aCk7XHJcbiAgICAvLyAxLiBGaW5kIHRoZSBsYXN0ICcqJ1xyXG4gICAgbGV0IGFzdF9sYXN0X3B0cjogbnVtYmVyID0gTWFza09yZy5sYXN0SW5kZXhPZihFeHByZXNzaW9uRXZhbHVhdG9yLkFTVEVSSVNLX0NIUik7XHJcblxyXG4gICAgaWYgKGFzdF9sYXN0X3B0ciA9PT0gLTEpXHJcbiAgICAvLyAyLiBJbiB0aGUgY2FzZTogdGhlcmUgaXMgbm90IGFueSAnKidcclxuICAgICAgU2FtZSA9IEV4cHJlc3Npb25FdmFsdWF0b3Iub3BfbGlrZV9jbXAoU291cmNlLCBNYXNrT3JnKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyAyLiBJbiB0aGUgY2FzZTogdGhlcmUgYXJlIG9uZSBvciBtb3JlICcqJ1xyXG4gICAgICAvLyAyLjEgQ29tcGFyZSB0aGUgcGllY2Ugb2YgdGhlIHN0cmluZyBiZWZvcmUgdGhlIGZpcnN0ICcqJ1xyXG4gICAgICBmb3IgKGkgPSAwOyBNYXNrW2ldICE9PSBFeHByZXNzaW9uRXZhbHVhdG9yLkFTVEVSSVNLX0NIUiAmJiBTYW1lOyBpKyssIE1hc2tMZW4tLSwgU291cmNlTGVuLS0pIHtcclxuICAgICAgICBpZiAoU291cmNlTGVuID09PSAwKVxyXG4gICAgICAgICAgU2FtZSA9IGZhbHNlO1xyXG4gICAgICAgIGVsc2UgU2FtZSA9IChNYXNrW2ldID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlFVRVNUSU9OX0NIUiA/IHRydWUgOiBNYXNrW2ldID09PSBTb3VyY2VbaV0pO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGkgLSBpcyBpbmRleCBvZiBmaXJzdCAnKicgaW4gdGhlIG1hc2tcclxuICAgICAgU291cmNlID0gU291cmNlLnN1YnN0cihpKTtcclxuICAgICAgTWFzayA9IEV4cHJlc3Npb25FdmFsdWF0b3IuY3V0QXJyYXkoTWFzaywgaSk7XHJcblxyXG4gICAgICAvLyAyLjIgQ29tcGFyZSB0aGUgYWxsIHBpZWNlcyBiZXR3ZWVuIHRoZSAnKicgYW5kICcqJ1xyXG4gICAgICB3aGlsZSAoU2FtZSAmJiBhc3Rlcmlza0NudCAhPT0gMSkge1xyXG4gICAgICAgIGxldCBhc3RfcHRyOiBudW1iZXI7XHJcbiAgICAgICAgbGV0IHRtcF9sZW46IG51bWJlcjtcclxuICAgICAgICBmb3IgKGFzdF9wdHIgPSAxLCB0bXBfbGVuID0gMDsgYXN0X3B0ciArIGkgIT09IGFzdF9sYXN0X3B0cjsgYXN0X3B0cisrICwgdG1wX2xlbisrKVxyXG4gICAgICAgICAgaWYgKE1hc2tbYXN0X3B0cl0gPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuQVNURVJJU0tfQ0hSKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBhc3Rlcmlza0NudC0tO1xyXG4gICAgICAgIFNvdXJjZUxlbiA9IFNvdXJjZS5sZW5ndGg7XHJcbiAgICAgICAgLy8gYXN0X3B0ciAtIGluZGV4IG9mIG5leHQgJyonIChub3QgZmlyc3QgYW5kIG5vdCBsYXN0KVxyXG5cclxuICAgICAgICBpZiAodG1wX2xlbiAhPT0gMCkge1xyXG4gICAgICAgICAgLy8gbmV4dCBpbmRleCBvZiAnKicgZm91bmRcclxuICAgICAgICAgIGlmIChTb3VyY2VMZW4gPiAwKVxyXG4gICAgICAgICAgLy8gdGhlcmUgaXMgc3RpbGwgbWVtYmVycyBpbiBzb3VyY2VcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYnVmZmVyLlJlbW92ZSgwLCBidWZmZXIuTGVuZ3RoKTtcclxuICAgICAgICAgICAgYnVmZmVyLkFwcGVuZChTb3VyY2UpO1xyXG4gICAgICAgICAgICBTYW1lID0gRXhwcmVzc2lvbkV2YWx1YXRvci5vcF9saWtlX21hcChidWZmZXIsIEV4cHJlc3Npb25FdmFsdWF0b3IuYXJyVG9TdHIoTWFzaywgMSwgdG1wX2xlbiArIDEpLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIFNvdXJjZSA9IGJ1ZmZlci5Ub1N0cmluZygpO1xyXG4gICAgICAgICAgfSBlbHNlIFNhbWUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaSArPSBhc3RfcHRyOyAvLyBtb3ZlICdwb2ludGVyJyB0byB0aGUgbmV4dCBwaWVjZSBvZiBzdHJpbmcgKGJldHdlZW4gMiBhc3Rlcmlza3MpXHJcbiAgICAgICAgTWFzayA9IEV4cHJlc3Npb25FdmFsdWF0b3IuY3V0QXJyYXkoTWFzaywgYXN0X3B0cik7XHJcbiAgICAgIH0gLy8gZW5kIG9mIHdoaWxlXHJcblxyXG4gICAgICBpZiAoTWFza1swXSA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5BU1RFUklTS19DSFIpXHJcbiAgICAgIC8vIGRlbGV0ZSBsYXN0ICcqJ1xyXG4gICAgICAgIE1hc2sgPSBFeHByZXNzaW9uRXZhbHVhdG9yLmN1dEFycmF5KE1hc2ssIDEpO1xyXG5cclxuICAgICAgLy8gMi4zIENvbXBhcmUgdGhlIHBpZWNlIG9mIHRoZSBzdHJpbmcgYWZ0ZXIgdGhlIGxhc3QgJyonXHJcbiAgICAgIGlmIChTYW1lICYmIChNYXNrLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgYnVmZmVyLlJlbW92ZSgwLCBidWZmZXIuTGVuZ3RoKTtcclxuICAgICAgICBidWZmZXIuQXBwZW5kKFNvdXJjZSk7XHJcbiAgICAgICAgU2FtZSA9IEV4cHJlc3Npb25FdmFsdWF0b3Iub3BfbGlrZV9tYXAoYnVmZmVyLCBFeHByZXNzaW9uRXZhbHVhdG9yLmFyclRvU3RyKE1hc2spLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IFNhbWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY3V0IHNvdXJjZSBhcnJheSBmcm9tIHNwZWNpYWwgbWVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNvdXJjZVwiPmFycmF5LCB0byBjdXQgaXQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZnJvbVwiPnRvIGN1dCBhbGwgbWVtYmVyIGJlZm9yZSBpdCBpbiBhcnJheTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBjdXR0ZWQgYXJyYXk8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgY3V0QXJyYXkoc291cmNlOiBzdHJpbmdbXSwgZnJvbTogbnVtYmVyKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGxlbmd0aDogbnVtYmVyID0gc291cmNlLmxlbmd0aCAtIGZyb207XHJcbiAgICBsZXQgYnVmZmVyOiBzdHJpbmdbXSA9IG5ldyBBcnJheTxzdHJpbmc+KGxlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBjdXJyOiBudW1iZXIgPSAwOyBjdXJyIDwgbGVuZ3RoOyBjdXJyKyspXHJcbiAgICAgIGJ1ZmZlcltjdXJyXSA9IHNvdXJjZVtmcm9tICsgY3Vycl07XHJcbiAgICByZXR1cm4gYnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGltcGxlbWVudHMgUmVwU3RyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfcmVwc3RyKHNvdXJjZTogRXhwVmFsLCBvcmdTdWJzdHI6IEV4cFZhbCwgbmV3U3Vic3RyOiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBpZiAoc291cmNlLlN0clZhbCA9PT0gbnVsbCB8fCBvcmdTdWJzdHIuU3RyVmFsID09PSBudWxsIHx8IG5ld1N1YnN0ci5TdHJWYWwgPT09IG51bGwgfHwgIVN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShzb3VyY2UuQXR0cikgfHwgIVN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShvcmdTdWJzdHIuQXR0cikgfHwgIVN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShuZXdTdWJzdHIuQXR0cikpIHtcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICByZXNWYWwuU3RyVmFsID0gTlN0cmluZy5SZXBsYWNlKHNvdXJjZS5TdHJWYWwsIG9yZ1N1YnN0ci5TdHJWYWwsIG5ld1N1YnN0ci5TdHJWYWwpO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBhcnJUb1N0cihhcnI6IHN0cmluZ1tdKTogc3RyaW5nO1xyXG4gIHByaXZhdGUgc3RhdGljIGFyclRvU3RyKGFycjogc3RyaW5nW10sIGZyb206IG51bWJlciwgdG86IG51bWJlcik6IHN0cmluZztcclxuICBwcml2YXRlIHN0YXRpYyBhcnJUb1N0cihhcnI6IGFueSwgZnJvbT86IG51bWJlciwgdG8/OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpXHJcbiAgICAgIHJldHVybiBFeHByZXNzaW9uRXZhbHVhdG9yLmFyclRvU3RyXzAoYXJyKTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIEV4cHJlc3Npb25FdmFsdWF0b3IuYXJyVG9TdHJfMShhcnIsIGZyb20sIHRvKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBNYWtlIHN0cmluZyBmcm9tIGFycmF5IG9mIGNoYXJhY3RlcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYXJyXCI+dG8gbWFrZSBzdHJpbmcgZnJvbTwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBzdHJpbmcgY29udGFpbnMgYWxsIGNoYXJhY3RlcnMgZnJvbSB0aGUgYXJyYXk8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgYXJyVG9TdHJfMChhcnI6IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBFeHByZXNzaW9uRXZhbHVhdG9yLmFyclRvU3RyKGFyciwgMCwgYXJyLmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTWFrZSBzdHJpbmcgZnJvbSBhcnJheSBvZiBjaGFyYWN0ZXJzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFyclwiPnRvIG1ha2Ugc3RyaW5nIGZyb208L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZnJvbVwiPnRvIHN0YXJ0IGNvcHkgZnJvbSBhcnJheTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0b1wiPnRvIGZpbmlzaCBjb3B5IGZyb20gYXJyYXk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gc3RyaW5nIGNvbnRhaW5zIGFsbCBjaGFyYWN0ZXJzIGZyb20gdGhlIGFycmF5PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIGFyclRvU3RyXzEoYXJyOiBzdHJpbmdbXSwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBidWZmZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcih0byAtIGZyb20pO1xyXG4gICAgZm9yICg7IGZyb20gPCB0bzsgZnJvbSsrKVxyXG4gICAgICBidWZmZXIuQXBwZW5kKGFycltmcm9tXSk7XHJcbiAgICByZXR1cm4gYnVmZmVyLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29tcGlsZSAyIHN0cmluZ3MgLCByZWd1bGFyIGV4cHJlc3Npb24gZm9yICc/JyAtIGFueSBPTkUgY2hhcmFjdGVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIlNvdXJjZVwiPnRvIGJlIGNoZWNrZWQgYnkgcGF0dGVybjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJNYXNrT3JnXCI+Zm9yIFJlZ3VsYXIgZXhwcmVzc2lvbjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIHN0cmluZyBtdWNoZXMgZm9yIHRoZSBwYXR0ZXJuPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RhdGljIG9wX2xpa2VfY21wKFNvdXJjZTogc3RyaW5nLCBNYXNrT3JnOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBTYW1lOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGxldCBNYXNrOiBzdHJpbmcgPSBNYXNrT3JnO1xyXG4gICAgbGV0IFNvdXJjZUxlbjogbnVtYmVyID0gU291cmNlLmxlbmd0aDtcclxuICAgIGxldCBNYXNrTGVuOiBudW1iZXIgPSBNYXNrT3JnLmxlbmd0aDtcclxuICAgIGlmIChTb3VyY2VMZW4gPCBNYXNrTGVuKVxyXG4gICAgICBTYW1lID0gZmFsc2U7XHJcblxyXG4gICAgZWxzZSBpZiAoU291cmNlTGVuID4gTWFza0xlbilcclxuICAgICAgTWFzayA9IE1hc2tPcmc7XHJcblxyXG4gICAgLy8gUUNSIDc0MzE4N1xyXG4gICAgd2hpbGUgKE1hc2subGVuZ3RoIDwgU291cmNlTGVuKVxyXG4gICAgICBNYXNrICs9ICcgJztcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgU291cmNlTGVuICYmIFNhbWU7IGkrKylcclxuICAgICAgU2FtZSA9IChNYXNrLmNoYXJBdChpKSA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5RVUVTVElPTl9DSFIgfHwgTWFzay5jaGFyQXQoaSkgPT09IFNvdXJjZS5jaGFyQXQoaSkpO1xyXG5cclxuICAgIHJldHVybiBTYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbXBpbGUgMiBzdHJpbmdzIGFuZCBtb3ZlIHNvdXJjZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJTb3VyY2VcIj5zb3VyY2UgZm9yIGNoZWNraW5nLCBDSEFOR0VEIGluIHByb2Nlc3Mgb2YgY2hlY2tpbmcsIG11c3QgYmUgY2hhbmdlZFxyXG4gIC8vLyAgIGluIGFjY29yZGFuY2UgdG8gY2hhbmdpbmcgYWZ0ZXIgdGhlIHVzaW5nIG9mIGZ1bmN0aW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIk1hc2tcIj5mb3IgUmVndWxhciBleHByZXNzaW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImVuZFwiPml0IHRoZSBsYXN0IGFzdGVyaXNrIGluIHRoZSBwYXR0ZXJuPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgc3RyaW5nIG11Y2hlcyBmb3IgdGhlIHBhdHRlcm48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgb3BfbGlrZV9tYXAoc291cmNlOiBTdHJpbmdCdWlsZGVyLCBtYXNrOiBzdHJpbmcsIGVuZDogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHNhbWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBwdHI6IHN0cmluZyA9IHNvdXJjZS5Ub1N0cmluZygpO1xyXG4gICAgbGV0IGk6IG51bWJlciA9IDA7XHJcblxyXG4gICAgLy8gbWFzayBpcyBsYXJnZXIgdGhlbiB0aGUgc291cmNlLiBUaGV5IGRvIG5vdCBtYXRjaC5cclxuICAgIGlmICghZW5kICYmIHNvdXJjZS5MZW5ndGggPCBtYXNrLmxlbmd0aClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCBqOiBudW1iZXIgPSAwO1xyXG4gICAgZm9yIChqID0gMDsgaiA8IHNvdXJjZS5MZW5ndGggJiYgIXNhbWU7IGorKykge1xyXG4gICAgICBzYW1lID0gdHJ1ZTtcclxuICAgICAgaWYgKGVuZCkge1xyXG4gICAgICAgIHNhbWUgPSBFeHByZXNzaW9uRXZhbHVhdG9yLm9wX2xpa2VfY21wKHB0ci5zdWJzdHIoaiksIG1hc2spO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtYXNrLmxlbmd0aCAmJiBzYW1lOyBpKyspIHtcclxuICAgICAgICAgIC8vIElmIGFscmVhZHkgcmVhY2hlZCBhdCB0aGUgZW5kIG9mIHNvdXJjZSBzdHJpbmcsIHJldHVybiBmYWxzZS5cclxuICAgICAgICAgIGlmIChqICsgaSA9PT0gc291cmNlLkxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzYW1lID0gKG1hc2suY2hhckF0KGkpID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlFVRVNUSU9OX0NIUiB8fCBtYXNrLmNoYXJBdChpKSA9PT0gcHRyLmNoYXJBdChqICsgaSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHNhbWUpIHtcclxuICAgICAgc291cmNlLlJlbW92ZSgwLCBzb3VyY2UuTGVuZ3RoKTtcclxuICAgICAgc291cmNlLkFwcGVuZChwdHIuc3Vic3RyKGogKyBpIC0gMSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNhbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cF9nZXRfdmFyXzEodmFsMTogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGZsZE5hbWU6IHN0cmluZyA9IHZhbDEuU3RyVmFsO1xyXG4gICAgbGV0IGZsZDogRmllbGQgPSAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0RmllbGRCeU5hbWUoZmxkTmFtZSk7XHJcblxyXG4gICAgaWYgKGZsZCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5OT05FKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIGZsZCBpcyBub3QgZXhwb3NlZCB0byBjbGllbnQgdGhlbiBhbGVydCB3aXRoIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBudWxsXHJcbiAgICBpZiAoZmxkLklzRXhwb3NlZFRvQ2xpZW50ID09PSBmYWxzZSkge1xyXG4gICAgICBsZXQgc2I6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgICBzYi5BcHBlbmQoTlN0cmluZy5Gb3JtYXQoJ0Vycm9yOiBWYXJpYWJsZSBcXCd7MH1cXCcgaXMgbm90IGV4cG9zZWQgdG8gY2xpZW50LicsIGZsZC5nZXRWYXJOYW1lKCkpKTtcclxuICAgICAgYWxlcnQoc2IuVG9TdHJpbmcoKSk7XHJcbiAgICAgIHJlc1ZhbC5Jc051bGwgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZsZFZhbHVlOiBzdHJpbmcgPSBmbGQuZ2V0VmFsdWUodHJ1ZSk7XHJcbiAgICByZXNWYWwuSXNOdWxsID0gZmxkLmlzTnVsbCgpO1xyXG4gICAgLy8gY3RybCA9IGZsZC5nZXRDb250cm9sKCk7XHJcbiAgICAvLyBwaWMgPSAoY3RybCA9PSBudWxsKSA/IG51bGwgOiBjdHJsLmdldFBJQygpO1xyXG4gICAgc3VwZXIuU2V0VmFsKHJlc1ZhbCwgZmxkLmdldFR5cGUoKSwgZmxkVmFsdWUsIG51bGwpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgZXhwX2dldF9pbmR4KHZhbDE6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBpbmRleDogbnVtYmVyID0gKDxUYXNrQmFzZT4gdGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpLmdldEluZGV4T2ZGaWVsZEJ5TmFtZSh2YWwxLlN0clZhbCk7XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGluZGV4LCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBuZWVkZWQgRmllbGQgZnJvbSB2YXIgZnVuY3Rpb25zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIml0bVwiPm51bWJlciBvZiBpdGVtXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBmaWVsZCAgZnJvbSB3aGljaCBhbiBldmVudCB3YXMgdHJpZ2dlcmVkIG9yIGZpZWxkIG9mIGl0bSBpbmRleCBvZiB0aGUgdmFyaWFibGVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGdldEZpZWxkKGl0bTogbnVtYmVyKTogRmllbGQge1xyXG4gICAgbGV0IGZsZDogRmllbGQgPSAoaXRtICE9PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykgPyAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmN0bF9pdG1fMl9wYXJlbnRfdmVlKGl0bSAtIDEpKSA6IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldEN1cnJGaWVsZCgpO1xyXG4gICAgcmV0dXJuIGZsZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIml0bVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIEdldEZpZWxkT2ZDb250ZXh0VGFzayhpdG06IG51bWJlcik6IEZpZWxkIHtcclxuICAgIHJldHVybiAoaXRtICE9PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykgPyAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2suR2V0Q29udGV4dFRhc2soKSkuY3RsX2l0bV8yX3BhcmVudF92ZWUoaXRtIC0gMSkpIDogQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0Q3VyckZpZWxkKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmVtb3ZlIHNwYWNlcyBmcm9tIHRoZSBlZGdlcyBvZiB0aGUgc3RyaW5nXHJcbiAgLy8vICAgdGhpcyBpcyBhIGhpZ2ggcGVyZm9ybWFuY2UgaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdCBjcmVhdGUgdW5uZWNlc3NhcnkgU3RyaW5nc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzXCI+dGhlIHNvdXJjZSBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidHlwZVwiPkxlZnQsIFJpZ2h0LCBCb3RoPC9wYXJhbT5cclxuICBwcml2YXRlIHN0YXRpYyB0cmltU3RyKHM6IHN0cmluZywgdHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBsOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGlmIChOU3RyaW5nLklzTnVsbE9yRW1wdHkocykpXHJcbiAgICAgIHJldHVybiBzO1xyXG5cclxuXHJcbiAgICBsZXQgcjogbnVtYmVyID0gcy5sZW5ndGggLSAxO1xyXG5cclxuICAgIC8vIHRyaW0gdGhlIGxlZnQgc2lkZVxyXG4gICAgaWYgKHR5cGUgIT09ICdSJykge1xyXG4gICAgICB3aGlsZSAobCA8IHMubGVuZ3RoICYmIHMuY2hhckF0KGwpID09PSAnICcpXHJcbiAgICAgICAgbCsrO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRyaW0gdGhlIHJpZ2h0IHNpZGVcclxuICAgIGlmICh0eXBlICE9PSAnTCcpIHtcclxuICAgICAgd2hpbGUgKHIgPj0gbCAmJiBzLmNoYXJBdChyKSA9PT0gJyAnKVxyXG4gICAgICAgIHItLTtcclxuICAgIH1cclxuXHJcbiAgICByKys7IC8vIHBvaW50IHRoZSByaWdodCBib3VuZCBvZiB0aGUgc3RyaW5nIChleGNsdXNpdmUpXHJcbiAgICByZXR1cm4gciA+IGwgPyBzLnN1YnN0cihsLCAocikgLSAobCkpIDogJyc7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29tcGFyZSAyIG1hZ2ljIHZhbHVlcyBhbmQgcmV0dXJuIHRydWUgaWYgdGhleSBhcmUgZXF1YWxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYVZhbFwiPnRoZSBmaXJzdCB2YWx1ZSB0byBjb21wYXJlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFJc051bGxcIj50cnVlIGlmIHRoZSBmaXJzdCB2YWx1ZSBpcyBudWxsPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFEYXRhVHlwZVwiPnRoZSBkYXRhIHR5cGUgb2YgdGhlIGZpcnN0IHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJWYWxcIj50aGUgc2Vjb25kIHZhbHVlIHRvIGNvbXBhcmU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYklzTnVsbFwiPnRydWUgaWYgdGhlIHNlY29uZCB2YWx1ZSBpcyBudWxsPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImJEYXRhVHlwZVwiPnRoZSBkYXRhIHR5cGUgb2YgdGhlIHNlY29uZCB2YWx1ZTwvcGFyYW0+XHJcbiAgc3RhdGljIG1nVmFsc0VxdWFsKGFWYWw6IHN0cmluZywgYUlzTnVsbDogYm9vbGVhbiwgYURhdGFUeXBlOiBTdG9yYWdlQXR0cmlidXRlLCBiVmFsOiBzdHJpbmcsIGJJc051bGw6IGJvb2xlYW4sIGJEYXRhVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGE6IEV4cFZhbCA9IG51bGw7XHJcbiAgICBsZXQgYjogRXhwVmFsID0gbnVsbDtcclxuICAgIGxldCByZXN1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBpZiBvbmUgb2YgYVZhbCBvciBiVmFsIGhhcyBhIG51bGwgSmF2YSB2YWx1ZSBhbmQgaGFzIGEgYm9vbGVhbiBkYXRhIHR5cGVcclxuICAgIC8vIHRoZW4gZG9uJ3QgZW50ZXIgdGhlIFwiaWYgYmxvY2tcIiBiZWNhdXNlIHRoZSB2YWxfY21wX2FueSgpIG1ldGhvZCB3aWxsXHJcbiAgICAvLyB0cmVhdCB0aGF0IHZhbHVlIGFzIGZhbHNlLCBzbyBpdCBtaWdodCByZXR1cm4gYSBiYWQgcmVzdWx0XHJcbiAgICBpZiAoYUlzTnVsbCA9PT0gYklzTnVsbCAmJiAoYUlzTnVsbCB8fCAoYVZhbCAhPT0gbnVsbCAmJiBiVmFsICE9PSBudWxsKSkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhID0gbmV3IEV4cFZhbChhRGF0YVR5cGUsIGFJc051bGwsIGFWYWwpO1xyXG4gICAgICAgIGIgPSBuZXcgRXhwVmFsKGJEYXRhVHlwZSwgYklzTnVsbCwgYlZhbCk7XHJcbiAgICAgICAgcmVzdWx0ID0gKEV4cHJlc3Npb25FdmFsdWF0b3IudmFsX2NtcF9hbnkoYSwgYikgPT09IDApO1xyXG4gICAgICB9IGNhdGNoIChudWxsVmFsdWVFeGNlcHRpb24pIHtcclxuICAgICAgICAvLyBRQ1IgOTgzMzMyIGlmIGJvdGggdmFsdWVzIGFyZSBudWxsIHRoZW4gdGhleSBhcmUgZXF1YWxcclxuICAgICAgICBpZiAobnVsbFZhbHVlRXhjZXB0aW9uIGluc3RhbmNlb2YgTnVsbFZhbHVlRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICBpZiAoYS5Jc051bGwgJiYgYi5Jc051bGwpXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICB0aHJvdyBudWxsVmFsdWVFeGNlcHRpb247XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZnVudGlvbiB0aGF0IGdldCB0aGUgbG9naWNhbCBuYW1lIHRyYW5zbGF0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdHJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfdHJhbnNsYXRlKHN0cjogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG5cclxuICAgIGxldCBuYW1lOiBzdHJpbmcgPSBzdHIuU3RyVmFsO1xyXG4gICAgaWYgKE5TdHJpbmcuSXNOdWxsT3JFbXB0eShuYW1lKSlcclxuICAgICAgc3VwZXIuU2V0TlVMTChyZXNWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXNWYWwuU3RyVmFsID0gRW52UGFyYW1zVGFibGUuSW5zdGFuY2UudHJhbnNsYXRlKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZ1bmN0aW9uIHRoYXQgZ2V0IGEgc3RyaW5nIGFuZCBmb3JtYXRcclxuICAvLy8gICBhbmQgY2hhbmdlIHRoZSBzdHJpbmcgdG8gYmUgY29udmVydCBhcyB0aGUgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfYXN0cihzb3VyY2U6IEV4cFZhbCwgZm9ybWF0OiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTtcclxuXHJcbiAgICBpZiAoc291cmNlLlN0clZhbCA9PT0gbnVsbCB8fCBmb3JtYXQuU3RyVmFsID09PSBudWxsKSB7XHJcbiAgICAgIHN1cGVyLlNldE5VTEwocmVzVmFsLCBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZvcm1hdC5TdHJWYWwubGVuZ3RoID4gMCAmJiBzb3VyY2UuU3RyVmFsLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IHBpYzogUElDID0gbmV3IFBJQyhFeHByZXNzaW9uRXZhbHVhdG9yLnNldF9hX3BpYyhmb3JtYXQuU3RyVmFsKSwgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UubWcyZGlzcChzb3VyY2UuVG9NZ1ZhbCgpLCBudWxsLCBwaWMsIGZhbHNlLCBmYWxzZSwgdGhpcy5FeHBUYXNrLmdldENvbXBJZHgoKSwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNhbGN1bGF0ZXMgdGhlIGF0dHJpYnV0ZSBvZiBhIHZlY3RvciBjZWxsc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2ZWNcIj4tIHRoZSBhY3R1YWxsIHZlY3RvciBub3QgYSAndmFyJyBsaXRlcmFsIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgc3RhdGljIGV2YWxfb3BfdmVjQ2VsbEF0dHIodmVjOiBFeHBWYWwsIHJlczogRXhwVmFsKTogdm9pZCB7XHJcbiAgICAvLyByZXR1cm4gdHlwZSBpcyBhbGx3YXkgYWxwaGFcclxuICAgIHJlcy5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIHJlcy5Jc051bGwgPSBmYWxzZTtcclxuICAgIGxldCBhdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FO1xyXG5cclxuICAgIC8vIGlmIHRoZSB2ZWN0b3IgaXMgbnVsbCB0YWtlIHRoZSB0eXBlIGZyb20gdGhlIGZpZWxkXHJcbiAgICAvLyBRQ1IgOTI4MzA4ICYmIDQyNjYxOFxyXG4gICAgaWYgKHZlYy5Jc051bGwgJiYgdmVjLlZlY3RvckZpZWxkICE9PSBudWxsKSB7XHJcbiAgICAgIGF0dHIgPSB2ZWMuVmVjdG9yRmllbGQuZ2V0Q2VsbHNUeXBlKCk7XHJcbiAgICB9IGVsc2UgaWYgKEV4cHJlc3Npb25FdmFsdWF0b3IuSXNWYWxpZFZlY3Rvcih2ZWMpKVxyXG4gICAgLy8gaWYgaXQgYSB2YWxpZCB2ZWN0b3IgdGFrZSBmcm9tIHZlY3RvclxyXG4gICAge1xyXG4gICAgICBhdHRyID0gVmVjdG9yVHlwZS5nZXRDZWxsc0F0dHIodmVjLlN0clZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzLlN0clZhbCA9ICcnICsgRXhwcmVzc2lvbkV2YWx1YXRvci5HZXRBdHRyaWJ1dGVDaGFyKGF0dHIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgYSBjZWxscyB2YWx1ZSBmcm9tIGEgdmVjdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZlY1wiPi0gdGhlIGFjdHVhbGwgdmVjdG9yIG5vdCBhICd2YXInIGxpdGVyYWw8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2VsbFwiPi0gdGhlIGNlbGwgaW5kZXggdG8gZ2V0IDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF92ZWNHZXQodmVjOiBFeHBWYWwsIGNlbGw6IEV4cFZhbCwgcmVzOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmIChjZWxsLk1nTnVtVmFsID09PSBudWxsIHx8ICFFeHByZXNzaW9uRXZhbHVhdG9yLklzVmFsaWRWZWN0b3IodmVjKSB8fCBjZWxsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSA8PSAwKSB7XHJcbiAgICAgIHJlcy5Jc051bGwgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGNlbGxBdHRyOiBTdG9yYWdlQXR0cmlidXRlO1xyXG4gICAgICBsZXQgY2VsbFZhbDogc3RyaW5nO1xyXG4gICAgICBpZiAodmVjLlZlY3RvckZpZWxkICE9PSBudWxsKSB7XHJcbiAgICAgICAgY2VsbEF0dHIgPSB2ZWMuVmVjdG9yRmllbGQuZ2V0Q2VsbHNUeXBlKCk7XHJcbiAgICAgICAgY2VsbFZhbCA9ICg8RmllbGQ+dmVjLlZlY3RvckZpZWxkKS5nZXRWZWNDZWxsVmFsdWUoY2VsbC5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCB2ZWN0b3IgPSBuZXcgVmVjdG9yVHlwZSh2ZWMuU3RyVmFsKTtcclxuICAgICAgICBjZWxsVmFsID0gdmVjdG9yLmdldFZlY0NlbGwoY2VsbC5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgICAgIGNlbGxBdHRyID0gdmVjdG9yLmdldENlbGxzQXR0cigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIHR5cGUgdHlwZVxyXG4gICAgICBpZiAoY2VsbFZhbCA9PSBudWxsKVxyXG4gICAgICAgIHJlcy5Jc051bGwgPSB0cnVlO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzd2l0Y2ggKGNlbGxBdHRyKSB7XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTUVNTzpcclxuICAgICAgICAgICAgcmVzLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgICAgICAgICByZXMuU3RyVmFsID0gY2VsbFZhbDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgICAgIHJlcy5BdHRyID0gY2VsbEF0dHI7XHJcbiAgICAgICAgICAgIHJlcy5TdHJWYWwgPSBjZWxsVmFsO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICAgICAgcmVzLkF0dHIgPSBjZWxsQXR0cjtcclxuICAgICAgICAgICAgcmVzLlN0clZhbCA9IGNlbGxWYWw7XHJcbiAgICAgICAgICAgIHJlcy5JbmNsdWRlQmxvYlByZWZpeCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICAgICAgcmVzLkF0dHIgPSBjZWxsQXR0cjtcclxuICAgICAgICAgICAgcmVzLlN0clZhbCA9IGNlbGxWYWw7XHJcbiAgICAgICAgICAgIHJlcy5JbmNsdWRlQmxvYlByZWZpeCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgICAgICByZXMuQXR0ciA9IGNlbGxBdHRyO1xyXG4gICAgICAgICAgICByZXMuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoY2VsbFZhbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICAgICAgICByZXMuQXR0ciA9IGNlbGxBdHRyO1xyXG4gICAgICAgICAgICByZXMuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoY2VsbFZhbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgICAgICByZXMuQXR0ciA9IGNlbGxBdHRyO1xyXG4gICAgICAgICAgICByZXMuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoY2VsbFZhbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgICAgICByZXMuQXR0ciA9IGNlbGxBdHRyO1xyXG4gICAgICAgICAgICByZXMuQm9vbFZhbCA9IERpc3BsYXlDb252ZXJ0b3IudG9Cb29sZWFuKGNlbGxWYWwpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oJ2luIEV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbF9vcF92ZWNHZXQgdW5rbm93ZW4gc3RvcmFnZSB0eXBlOiAnICtcclxuICAgICAgICAgICAgICBjZWxsQXR0cik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdmVjdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZlY1wiPi0gdGhlIGFjdHVhbGwgdmVjdG9yIG5vdCBhICd2YXInIGxpdGVyYWw8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfdmVjU2l6ZSh2ZWM6IEV4cFZhbCwgcmVzOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIC8vIHRoZSByZXN1bHRlIHdpbGwgYWx3YXlzIGJlIG51bWVyaWNcclxuICAgIHJlcy5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgcmVzLklzTnVsbCA9IGZhbHNlO1xyXG4gICAgcmVzLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcblxyXG4gICAgcmVzLk1nTnVtVmFsLk5VTV80X0xPTkcoLTEpOyAvLyBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcmV0dXJuIC0xXHJcbiAgICAvLyBRQ1IgNDI2NjE4XHJcbiAgICBpZiAoRXhwcmVzc2lvbkV2YWx1YXRvci5Jc1ZhbGlkVmVjdG9yKHZlYykpXHJcbiAgICAgIHJlcy5NZ051bVZhbC5OVU1fNF9MT05HKDxudW1iZXI+bmV3IFZlY3RvclR5cGUodmVjLlN0clZhbCkuZ2V0VmVjU2l6ZSgpKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSB2YWx1ZSBvZiBhIGdpdmVuIGNlbGxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmVjXCI+LSAgYSAndmFyJyBsaXRlcmFsIHBvaW50aW5nIHRvIHRoZSB2ZWN0b3I8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY2VsbFwiPi0gdGhlIGNlbGwgaW5kZXggdG8gc2V0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5ld1ZhbFwiPi0gdGhlIHZhbHVlIHRvIGJlIHNldDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF92ZWNTZXQodmVjOiBFeHBWYWwsIGNlbGw6IEV4cFZhbCwgbmV3VmFsOiBFeHBWYWwsIHJlczogRXhwVmFsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyByZXN1bHQgaXMgbG9naWNhbFxyXG4gICAgcmVzLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXMuQm9vbFZhbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh2ZWMuTWdOdW1WYWwgIT09IG51bGwgJiYgY2VsbC5NZ051bVZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgdmVjRmllbGQ6IEZpZWxkO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHZlY0ZpZWxkID0gKDxGaWVsZD4gdGhpcy5nZXRGaWVsZCh2ZWMuTWdOdW1WYWwuTlVNXzJfTE9ORygpKSk7XHJcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgRXhjZXB0aW9uKSB7XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZyhleCk7XHJcbiAgICAgICAgICB2ZWNGaWVsZCA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICB0aHJvdyBleDtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIGlmICgoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLklzVHlwZUFscGhhT3JVbmljb2RlKHZlY0ZpZWxkLmdldENlbGxzVHlwZSgpKSAmJiBTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUobmV3VmFsLkF0dHIpKSB8fCAodmVjRmllbGQgIT09IG51bGwgJiYgKHZlY0ZpZWxkLklzVmlydHVhbCB8fCB2ZWNGaWVsZC5nZXRUYXNrKCkuZ2V0TW9kZSgpID09PSBDb25zdGFudHMuVEFTS19NT0RFX0NSRUFURSB8fCB2ZWNGaWVsZC5EYk1vZGlmaWFibGUpICYmIHZlY0ZpZWxkLmdldFR5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUiAmJiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLmlzVGhlU2FtZVR5cGUodmVjRmllbGQuZ2V0Q2VsbHNUeXBlKCksIG5ld1ZhbC5BdHRyKSB8fCBuZXdWYWwuSXNOdWxsIHx8IChTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUobmV3VmFsLkF0dHIpICYmIHZlY0ZpZWxkLmdldENlbGxzVHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpKSkpXHJcbiAgICAgIC8vIGFsbG93IGFscGhhIGludG8gYmxvYiBydGZcclxuICAgICAge1xyXG4gICAgICAgIC8vIFFDUiA3NDU1NDFcclxuICAgICAgICAvLyBjb252ZXJ0IHRoZSBhbHBoYSBkYXRhIGludG8gYmxvYlxyXG4gICAgICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUobmV3VmFsLkF0dHIpICYmIHZlY0ZpZWxkLmdldENlbGxzVHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpIHtcclxuICAgICAgICAgIHRoaXMuQ29udmVydEV4cFZhbChuZXdWYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXMuQm9vbFZhbCA9IGF3YWl0IHZlY0ZpZWxkLnNldENlbGxWZWNWYWx1ZShjZWxsLk1nTnVtVmFsLk5VTV8yX0xPTkcoKSwgbmV3VmFsLlRvTWdWYWwoKSwgbmV3VmFsLklzTnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgdG9rZW5zIGluIHRoZSBzdHJpbmcgYWNvdXJkaW5nIHRvIHRoZSBnaXZlbiBkZWxpbWV0ZXJzXHJcbiAgLy8vICAgSWYgdGhlIFNvdXJjZVN0cmluZyBpcyBlbXB0eSwgcmV0dXJuIHZhbHVlIGlzIDAuXHJcbiAgLy8vICAgSWYgdGhlIGRlbGltaXRlciB3YXMgbm90IGZvdW5kICBpbiB0aGUgU291cmNlU3RyaW5nIG9yIHdhcyBlbXB0eSwgcmV0dXJuIHZhbHVlIGlzIDEuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNvdXJjZVN0cmluZ1wiPi0gdGhlIGRhdGEgc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImRlbGltaXRlclwiPnRoZSBkZWxpbWV0ZXI8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3Bfc3RyVG9rZW5DbnQoc291cmNlU3RyaW5nOiBFeHBWYWwsIGRlbGltaXRlcjogRXhwVmFsLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgLy8gdGhlIHJldHVybiB2YWx1ZSBpcyBhbHdheXMgbnVtZXJpY1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuXHJcbiAgICAvLyB0aGUgcmVzdWx0XHJcbiAgICBsZXQgcmVzOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIC8vIGNvbnRpbnVlIG9ubHkgaWYgdGhlIHNvdXJjZSBzdHJpbmcgZXhpc3RzIGFuZCBpcyBub3QgZW1wdHlcclxuICAgIGlmICghc291cmNlU3RyaW5nLklzTnVsbCAmJiBzb3VyY2VTdHJpbmcuU3RyVmFsICE9PSBudWxsICYmIE5TdHJpbmcuVHJpbUVuZChzb3VyY2VTdHJpbmcuU3RyVmFsLCB0aGlzLl9jaGFyc1RvVHJpbSkubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgIC8vIGlmIHRoZSBkZWxpbWl0ZXIgaXMgZW1wdHlcclxuICAgICAgaWYgKGRlbGltaXRlci5Jc051bGwgfHwgTlN0cmluZy5UcmltRW5kKGRlbGltaXRlci5TdHJWYWwsIHRoaXMuX2NoYXJzVG9UcmltKS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgcmVzID0gMTtcclxuICAgICAgLy8gZmluZCB0aGUgZGVsaW1pdGVyIGluIHRoZSBzb3VyY2Ugc3RyaW5nXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIGlmIHRoZSBkZWxpbWl0ZXIgd2FzIG5vdCBmb3VuZCBpbiB0aGUgZGF0YVxyXG4gICAgICAgIGxldCB0b2tlbnNTaXplOiBudW1iZXIgPSB0aGlzLnN0clRva2VuQ291bnQoc291cmNlU3RyaW5nLlN0clZhbCwgZGVsaW1pdGVyLlN0clZhbCk7XHJcbiAgICAgICAgaWYgKHRva2Vuc1NpemUgPT09IDApXHJcbiAgICAgICAgICByZXMgPSAxO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHJlcyA9IHRva2Vuc1NpemU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHJldHVybiB0aGUgcmVzIHZhbHVlXHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhyZXMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIHRva2VuIHdpdGhpbiB0aGUgc291cmNlXHJcbiAgLy8vICAgc3RyaW5nIG9yIDAgaWYgdGhlIHRva2VuIHdhcyBub3QgZm91bmQuXHJcbiAgLy8vICAgSWYgdGhlIFNvdXJjZVN0cmluZyBvciB0aGUgdG9rZW4gYXJlIGVtcHR5LCByZXR1cm4gdmFsdWUgaXMgMC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9zdHJUb2tlbklkeChzb3VyY2VTdHJpbmc6IEV4cFZhbCwgdG9rZW46IEV4cFZhbCwgZGVsaW1pdGVyOiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICAvLyB0aGUgcmV0dXJuIHZhbHVlIGlzIGFsd2F5cyBudW1lcmljXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG5cclxuICAgIC8vIHRoZSByZXN1bHRcclxuICAgIGxldCByZXM6IG51bWJlciA9IDA7XHJcblxyXG4gICAgLy8gY29udGludWUgb25seSBpZiB0aGUgc291cmNlIHN0cmluZyBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eVxyXG4gICAgLy8gYW5kIHRoZSB0b2tlbiBleGlzdCBhbmQgbm90IGVtcHR5XHJcbiAgICBpZiAoIXNvdXJjZVN0cmluZy5Jc051bGwgJiYgc291cmNlU3RyaW5nLlN0clZhbCAhPT0gbnVsbCAmJiAhdG9rZW4uSXNOdWxsICYmIHRva2VuLlN0clZhbCAhPT0gbnVsbCAmJiBOU3RyaW5nLlRyaW1FbmQoc291cmNlU3RyaW5nLlN0clZhbCwgdGhpcy5fY2hhcnNUb1RyaW0pLmxlbmd0aCAhPT0gMCAmJiB0b2tlbi5TdHJWYWwudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgIC8vIGlmIHRoZSBkZWxpbWl0ZXIgaXMgZW1wdHkgY2hlY2sgaWYgdGhlIGRhdGEgZXF1YWxzIHRvIHRoZSB0b2tlblxyXG4gICAgICBpZiAoIWRlbGltaXRlci5Jc051bGwgJiYgTlN0cmluZy5UcmltRW5kKGRlbGltaXRlci5TdHJWYWwsIHRoaXMuX2NoYXJzVG9UcmltKS5sZW5ndGggIT09IDApXHJcbiAgICAgICAgcmVzID0gdGhpcy5zdHJUb2tlbkluZGV4KHNvdXJjZVN0cmluZy5TdHJWYWwsIGRlbGltaXRlci5TdHJWYWwsIHRva2VuLlN0clZhbCk7XHJcblxyXG4gICAgICBlbHNlIGlmIChzb3VyY2VTdHJpbmcuU3RyVmFsID09PSB0b2tlbi5TdHJWYWwpXHJcbiAgICAgICAgcmVzID0gMTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHJlcyA9IDA7XHJcbiAgICB9XHJcbiAgICAvLyByZXR1cm4gdGhlIHJlcyB2YWx1ZVxyXG4gICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcocmVzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gRmluZCBhIGdpdmVuIHRva2VuIGluZGV4IGluIGEgZ2l2ZW4gc3RyaW5nICgxIGJhc2UpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzb3VyY2VcIj5UaGUgc3RyaW5nIHRvIHNlYXJjaCBvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGVsaW1pdGVyXCI+VGhlIGRlbGltaXRlcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidG9rZW5cIj5UaGUgdG9rZW4gdG8gc2VhcmNoPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc3RyVG9rZW5JbmRleChzb3VyY2U6IHN0cmluZywgZGVsaW1pdGVyOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgLy8gYWRkIHRoZSBkZWxpbWl0ZXIgYXQgdGhlIGZyb250IGFuZCBlbmQgb2YgdGhlIHN0cmluZyBhbmQgdGhlIHRva2VuXHJcbiAgICAvLyB0aGlzIHdpbGwgaGVscCB1cyBpZiBmaW5kaW5nIHRva2VucyB0aGF0IGFyZSBhdCB0aGUgYmVnaW5uaW5nL2VuZCBvZiB0aGUgc3RyaW5nLlxyXG4gICAgbGV0IHRyaW1EZWxpbTogc3RyaW5nID0gTlN0cmluZy5UcmltRW5kKGRlbGltaXRlciwgdGhpcy5fY2hhcnNUb1RyaW0pO1xyXG4gICAgbGV0IHRyaW1Tb3VyY2U6IHN0cmluZyA9IHRyaW1EZWxpbSArIE5TdHJpbmcuVHJpbUVuZChzb3VyY2UsIHRoaXMuX2NoYXJzVG9UcmltKSArIHRyaW1EZWxpbTtcclxuICAgIGxldCB0cmltVG9rZW46IHN0cmluZyA9ICh0b2tlbiAhPT0gbnVsbCkgPyBOU3RyaW5nLlRyaW1FbmQodG9rZW4sIHRoaXMuX2NoYXJzVG9UcmltKSA6IG51bGw7XHJcblxyXG4gICAgaWYgKHRyaW1Ub2tlbiA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICAvLyBzdXJyb3VuZCB0aGUgdG9rZW4gd2l0aCBkZWxpbWl0ZXJzXHJcbiAgICB0cmltVG9rZW4gPSB0cmltRGVsaW0gKyB0cmltVG9rZW4gKyB0cmltRGVsaW07XHJcblxyXG4gICAgbGV0IHRva2VuT2Zmc2V0OiBudW1iZXIgPSB0cmltU291cmNlLmluZGV4T2YodHJpbVRva2VuKTtcclxuXHJcbiAgICBpZiAodG9rZW5PZmZzZXQgPT09IC0xKVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBUaGUgdG9rZW4gY291bnQgaXMgdGhlIG51bWJlciBvZiB0b2tlbnMgdGlsbCBvdXIgdG9rZW4gb2Zmc2V0ICsxXHJcbiAgICAgIC8vIHNpbmNlIHdlIGFkZGVkIDEgdG9rZW4gYmVmb3JlIHRoZSBzdHJpbmcsIHdlIHdpbGwgaGF2ZSB0byBzdWJ0cmFjdCAxXHJcbiAgICAgIGxldCB0b2tlbkluZGV4OiBudW1iZXIgPSB0aGlzLnN0clRva2VuQ291bnQodHJpbVNvdXJjZS5zdWJzdHIoMCwgdG9rZW5PZmZzZXQgKyB0cmltRGVsaW0ubGVuZ3RoKSwgdHJpbURlbGltKTtcclxuICAgICAgdG9rZW5JbmRleC0tO1xyXG4gICAgICByZXR1cm4gdG9rZW5JbmRleDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gQ291bnQgdGhlIHRva2Vuc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic291cmNlXCI+VGhlIHN0cmluZyB0byBzcGxpdDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGVsaW1pdGVyXCI+VGhlIGRlbGltaXRyZXI8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdHJUb2tlbkNvdW50KHNvdXJjZTogc3RyaW5nLCBkZWxpbWl0ZXI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgY291bnRlcjogbnVtYmVyID0gMTtcclxuICAgIGxldCB0cmltRGVsaW06IHN0cmluZyA9IE5TdHJpbmcuVHJpbUVuZChkZWxpbWl0ZXIsIHRoaXMuX2NoYXJzVG9UcmltKTtcclxuICAgIGxldCB0cmltU291cmNlOiBzdHJpbmcgPSBOU3RyaW5nLlRyaW1FbmQoc291cmNlLCB0aGlzLl9jaGFyc1RvVHJpbSk7XHJcblxyXG4gICAgbGV0IGRlbGltTGVuZ3RoOiBudW1iZXIgPSB0cmltRGVsaW0ubGVuZ3RoO1xyXG4gICAgbGV0IGRhdGE6IHN0cmluZyA9IHRyaW1Tb3VyY2U7XHJcbiAgICBsZXQgZnJvbU9mZnNldDogbnVtYmVyID0gMDtcclxuICAgIGxldCBkZWxpbWl0ZXJPZmZzZXQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgLy8gZW1wdHkgc3RyaW5nLiBubyB0b2tlbnMuXHJcbiAgICBpZiAoc291cmNlID09PSBudWxsIHx8IHNvdXJjZS5sZW5ndGggPT09IDApXHJcbiAgICAgIHJldHVybiAwO1xyXG5cclxuICAgIGRlbGltaXRlck9mZnNldCA9IGRhdGEuaW5kZXhPZih0cmltRGVsaW0sIGZyb21PZmZzZXQpO1xyXG4gICAgLy8gZmluZCB0aGUgbnVtYmVyIG9mIHRva2VucyBieSBjb3VudGluZyB0aGUgZGVsaW1pdGVycyArIDFcclxuICAgIHdoaWxlIChkZWxpbWl0ZXJPZmZzZXQgPj0gMCkge1xyXG4gICAgICBjb3VudGVyKys7XHJcblxyXG4gICAgICAvLyBzdGFydCBuZXh0IHNlYXJjaCBhZnRlciB0aGUgZGVsaW1pdGVyXHJcbiAgICAgIGZyb21PZmZzZXQgPSBkZWxpbWl0ZXJPZmZzZXQgKyBkZWxpbUxlbmd0aDtcclxuXHJcbiAgICAgIGRlbGltaXRlck9mZnNldCA9IGRhdGEuaW5kZXhPZih0cmltRGVsaW0sIGZyb21PZmZzZXQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvdW50ZXI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxfb3BfYmxvYnNpemUocmVzVmFsOiBFeHBWYWwsIGJsb2JWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHNpemU6IG51bWJlciA9IDA7XHJcbiAgICBzd2l0Y2ggKGJsb2JWYWwuQXR0cikge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgc2l6ZSA9IDxudW1iZXI+VmVjdG9yVHlwZS5nZXRWZWNTaXplKGJsb2JWYWwuU3RyVmFsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgICAgc2l6ZSA9IEJsb2JUeXBlLmdldEJsb2JTaXplKGJsb2JWYWwuU3RyVmFsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsID0gbmV3IE5VTV9UWVBFKCk7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwuTlVNXzRfTE9ORyhzaXplKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbF9vcF9pc2NvbXBvbmVudChyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGN1cnJUc2s6IFRhc2tCYXNlID0gQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0Q3VyclRhc2soKSB8fCAoPFRhc2tCYXNlPnRoaXMuRXhwVGFzayk7XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IChjdXJyVHNrLmdldENvbXBJZHgoKSAhPT0gMCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRmluZCBhbmQgRXhlY3V0ZSB1c2VyIGRlZmluZWQgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9FeGVjVXNlckRlZmluZWRGdW5jKGZ1bmNOYW1lOiBzdHJpbmcsIEV4cF9wYXJhbXM6IEV4cFZhbFtdLCByZXNWYWw6IEV4cFZhbCwgZXhwZWN0ZWRUeXBlOiBTdG9yYWdlQXR0cmlidXRlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgcnRFdnQ6IFJ1blRpbWVFdmVudCA9IG5ldyBSdW5UaW1lRXZlbnQoPFRhc2tCYXNlPnRoaXMuRXhwVGFzayk7XHJcbiAgICBydEV2dC5zZXRUeXBlKENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVVNFUl9GVU5DKTtcclxuICAgIHJ0RXZ0LnNldFVzZXJEZWZpbmVkRnVuY05hbWUoZnVuY05hbWUpO1xyXG5cclxuICAgIGxldCBldnRIYW5Qb3M6IEV2ZW50SGFuZGxlclBvc2l0aW9uID0gbmV3IEV2ZW50SGFuZGxlclBvc2l0aW9uKCk7XHJcbiAgICBldnRIYW5Qb3MuaW5pdChydEV2dCk7XHJcblxyXG4gICAgbGV0IGhhbmRsZXI6IEV2ZW50SGFuZGxlciA9IGV2dEhhblBvcy5nZXROZXh0KCk7XHJcbiAgICBsZXQgYXJnc01hdGNoOiBib29sZWFuID0gaGFuZGxlciAhPT0gbnVsbCAmJiBoYW5kbGVyLmFyZ3NNYXRjaChFeHBfcGFyYW1zKTtcclxuICAgIGxldCB2YWw6IEV4cFZhbCA9IG51bGw7XHJcbiAgICBsZXQgdmFsSW5pYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChhcmdzTWF0Y2gpIHtcclxuICAgICAgLy8gaWYgdGhlcmUgaXMgYSBoYW5kbGVyIGNoYW5nZSB0aGUgaGFuZGxlcidzIGNvbnRleHQgdGFzayB0byB0aGUgZXZlbnQncyB0YXNrXHJcbiAgICAgIGxldCBoYW5kbGVyQ29udGV4dFRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBoYW5kbGVyLmdldFRhc2soKS5HZXRDb250ZXh0VGFzaygpO1xyXG4gICAgICAvLyBJZiB1c2VyLWRlZmluZWQgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgZnJvbSBoYW5kbGVyIHdoaWNoIGlzIGludm9rZWQgZnJvbSAgY29udGV4dCB0YXNrIGFscmVhZHksXHJcbiAgICAgIC8vIHRoZW4gZG8gbm90IGNoYW5nZSB0aGUgY29udGV4dCB0YXNrIGFnYWluLlxyXG4gICAgICBpZiAoaGFuZGxlci5nZXRUYXNrKCkgPT09ICBoYW5kbGVyLmdldFRhc2soKS5HZXRDb250ZXh0VGFzaygpKVxyXG4gICAgICAgIGhhbmRsZXIuZ2V0VGFzaygpLlNldENvbnRleHRUYXNrKHJ0RXZ0LmdldFRhc2soKSk7XHJcblxyXG4gICAgICBsZXQgYXJnTGlzdDogQXJndW1lbnRzTGlzdCA9IG5ldyBBcmd1bWVudHNMaXN0KEV4cF9wYXJhbXMpO1xyXG5cclxuICAgICAgcnRFdnQuc2V0QXJnTGlzdChhcmdMaXN0KTtcclxuICAgICAgLy8gaWYgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIHdpbGwgZ28gdG8gdGhlIHNlcnZlciwgd2UgZG9uJ3Qgd2FudCBpdCB0byBjb250aW51ZVxyXG4gICAgICAvLyBhbnkgb3RoZXIgZXhlY3V0aW9uIG9uIHRoZSBzZXJ2ZXIsIGxpa2UgaWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgcmFpc2UgZXZlbnQgb3Igc29tZXRoaW5nXHJcbiAgICAgIC8vIGxpa2UgdGhhdCBiZWNhdXNlIHRoZSBzZXJ2ZXIgY2Fubm90IGtub3cgb24gd2hpY2ggb3BlcmF0aW9uIHdlIGFyZSBjdXJyZW50bHkgb24gYW5kIHdoaWNoIGV4cHJzc2lvblxyXG4gICAgICAvLyBhbmQgd2hpY2ggcGFydCBvZiB0aGUgZXhwcmVzc2lvbiB3ZSBhcmUgZXZhbHVhdGluZ1xyXG4gICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5wdXNoTmV3RXhlY1N0YWNrcygpO1xyXG4gICAgICBhd2FpdCBoYW5kbGVyLmV4ZWN1dGUocnRFdnQsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLnBvcE5ld0V4ZWNTdGFja3MoKTtcclxuXHJcbiAgICAgIC8vIGV2YWx1YXRlIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHVzZXIgZGVmaW5lZCBmdW5jdGlvblxyXG4gICAgICBsZXQgZXhwOiBFeHByZXNzaW9uID0gaGFuZGxlci5nZXRUYXNrKCkuZ2V0RXhwQnlJZChoYW5kbGVyLmdldEV2ZW50KCkuZ2V0VXNlckRlZmluZWRGdW5jUmV0RXhwKCkpO1xyXG4gICAgICBpZiAoZXhwICE9PSBudWxsKSB7XHJcbiAgICAgICAgdmFsID0gYXdhaXQgZXhwLmV2YWx1YXRlV2l0aFJlc1R5cGUoZXhwZWN0ZWRUeXBlKTtcclxuICAgICAgICB2YWxJbmlhdGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gcmVzdG9yaW5nIHRoZSBjb250ZXh0XHJcbiAgICAgIGhhbmRsZXIuZ2V0VGFzaygpLlNldENvbnRleHRUYXNrKGhhbmRsZXJDb250ZXh0VGFzayk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbEluaWF0ZWQpIHtcclxuICAgICAgaWYgKGV4cGVjdGVkVHlwZSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FKSB7XHJcbiAgICAgICAgZXhwZWN0ZWRUeXBlID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgfVxyXG4gICAgICB2YWwgPSBuZXcgRXhwVmFsKGV4cGVjdGVkVHlwZSwgdHJ1ZSwgbnVsbCk7XHJcbiAgICB9XHJcbiAgICAvLyBjb3B5IGNvbnRlbnRzIGZyb20gdGhlIFZhbCBoZWxwZXIgdmFyaWFibGUgdG8gdGhlIHJlc1ZhbCBwYXJhbWV0ZXIuXHJcbiAgICByZXNWYWwuQ29weSh2YWwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGludGVybmFsIG5hbWUgb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9wdWJsaWNOYW1lKHJlc1ZhbDogRXhwVmFsLCBQYXJlbnQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHB1YmxpY05hbWU6IHN0cmluZyA9ICdOVUxMJztcclxuXHJcbiAgICBsZXQgaVBhcmVudDogbnVtYmVyID0gUGFyZW50Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoaVBhcmVudCA+PSAwICYmIGlQYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBpUGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKGlQYXJlbnQpO1xyXG4gICAgICBpZiAodGFzayAhPT0gbnVsbCAmJiB0YXNrLmlzUHJvZ3JhbSgpICYmICF0YXNrLmlzTWFpblByb2coKSlcclxuICAgICAgICBwdWJsaWNOYW1lID0gdGFzay5nZXRQdWJsaWNOYW1lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IHB1YmxpY05hbWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgZXh0ZXJuYWwgdGFzayBJRCBvZiB0aGUgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3Rhc2tJZChyZXNWYWw6IEV4cFZhbCwgUGFyZW50OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCB0YXNrSWQ6IHN0cmluZyA9ICdOVUxMJztcclxuXHJcbiAgICBsZXQgaVBhcmVudDogbnVtYmVyID0gUGFyZW50Lk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgoaVBhcmVudCA+PSAwICYmIGlQYXJlbnQgPCAoKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpKSB8fCBpUGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHN1cGVyLkdldENvbnRleHRUYXNrKGlQYXJlbnQpO1xyXG4gICAgICBpZiAodGFzayAhPT0gbnVsbClcclxuICAgICAgICB0YXNrSWQgPSB0YXNrLmdldEV4dGVybmFsVGFza0lkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IHRhc2tJZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2FjaGVkIHJlY29yZHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9kYnZpZXdzaXplKHJlc1ZhbDogRXhwVmFsLCBQYXJlbnQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHNpemU6IG51bWJlciA9IDA7XHJcblxyXG4gICAgbGV0IGlQYXJlbnQ6IG51bWJlciA9IFBhcmVudC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGlQYXJlbnQgPj0gMCAmJiBpUGFyZW50IDwgKDxUYXNrQmFzZT50aGlzLkV4cFRhc2spLmdldFRhc2tEZXB0aChmYWxzZSkpIHx8IGlQYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcbiAgICAgIGlmICh0YXNrICE9PSBudWxsICYmICg8RGF0YVZpZXc+dGFzay5EYXRhVmlldykuSGFzTWFpblRhYmxlKSB7XHJcbiAgICAgICAgaWYgKHRhc2suR2V0Q29tcHV0ZWRQcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9QUkVMT0FEX1ZJRVcpLkdldENvbXB1dGVkVmFsdWVCb29sZWFuKCkpIHtcclxuICAgICAgICAgIHNpemUgPSAoPERhdGFWaWV3PnRhc2suRGF0YVZpZXcpLkRCVmlld1NpemU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YXNrLmlzVGFibGVXaXRoQWJzb2x1dGVzU2Nyb2xsYmFyKCkpXHJcbiAgICAgICAgICBzaXplID0gKDxEYXRhVmlldz50YXNrLkRhdGFWaWV3KS5Ub3RhbFJlY29yZHNDb3VudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3VwZXIuQ29uc3RydWN0TWFnaWNOdW0ocmVzVmFsLCBzaXplLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIG51bWVyaWMgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBzZXF1ZW50aWFsIG51bWJlclxyXG4gIC8vLyAgIG9mIGEgcmVjb3JkIGluIGEgY2FjaGVkIHZpZXdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9kYnZpZXdyb3dpZHgocmVzVmFsOiBFeHBWYWwsIFBhcmVudDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgaWR4OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGxldCBpUGFyZW50OiBudW1iZXIgPSBQYXJlbnQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChpUGFyZW50ID49IDAgJiYgaVBhcmVudCA8ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSB8fCBpUGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+c3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcblxyXG4gICAgICBpZiAodGFzayAhPT0gbnVsbCAmJiB0YXNrLkdldENvbXB1dGVkUHJvcGVydHkoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUFJFTE9BRF9WSUVXKS5HZXRDb21wdXRlZFZhbHVlQm9vbGVhbigpKSB7XHJcbiAgICAgICAgLyogUUNSIyA5Njk3MjMgLSBEbyBub3QgcmV0dXJuIHRoZSByb3cgaWR4IHVudGlsbCB0aGUgcmVjb3JkIGlzIGNvbW1pdGVkLiAgKi9cclxuICAgICAgICBpZiAoKCg8RGF0YVZpZXc+dGFzay5EYXRhVmlldykuZ2V0Q3VyclJlYygpKS5nZXRNb2RlKCkgIT09IERhdGFNb2RpZmljYXRpb25UeXBlcy5JbnNlcnQpIHtcclxuICAgICAgICAgIGlkeCA9IHRhc2suRGF0YXZpZXdNYW5hZ2VyLkN1cnJlbnREYXRhdmlld01hbmFnZXIuR2V0RGJWaWV3Um93SWR4KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBzdXBlci5Db25zdHJ1Y3RNYWdpY051bShyZXNWYWwsIGlkeCwgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDYWxsIHRoZSBNbHMgdHJhbnNsYXRpb24gdG8gcmV0dXJuIHRoZSB0cmFuc2xhdGlvbiBvZiAnZnJvbVN0cmluZycuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGV2YWxfb3BfTWxzVHJhbnMocmVzVmFsOiBFeHBWYWwsIGZyb21TdHJpbmc6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gJyc7XHJcblxyXG4gICAgcmVzVmFsLlN0clZhbCA9IExhbmd1YWdlRGF0YS5JbnN0YW5jZS50cmFuc2xhdGUoTlN0cmluZy5UcmltRW5kKGZyb21TdHJpbmcuU3RyVmFsLCB0aGlzLl9jaGFyc1RvVHJpbSkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEltcGxlbWVudHMgU3RyQnVpbGRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF9TdHJCdWlsZCh2YWxTdGFjazogU3RhY2s8RXhwVmFsPiwgcmVzVmFsOiBFeHBWYWwsIG5BcmdzOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGxldCBFeHBfcGFybXM6IEV4cFZhbFtdID0gbmV3IEFycmF5PEV4cFZhbD4obkFyZ3MpO1xyXG5cclxuICAgIC8vIFJlYWQgcGFyYW1ldGVyc1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IG5BcmdzOyBpKyspXHJcbiAgICAgIEV4cF9wYXJtc1tuQXJncyAtIDEgLSBpXSA9IDxFeHBWYWw+dmFsU3RhY2sucG9wKCk7XHJcbiAgICB0aGlzLnZhbF9jcHkoRXhwX3Bhcm1zWzBdLCByZXNWYWwpO1xyXG5cclxuICAgIGxldCByZXN1bHRTdHI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihyZXNWYWwuU3RyVmFsKTtcclxuICAgIC8vIEZvciBlYWNoIHBhcmFtZXRlciwgc2VhcmNoIFwiQG5AXCIgc3RyaW5nIGluIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAgICAvLyBJZiBmb3VuZCwgYW5kIGlmIGl0IGlzIG5vdCBwcmVjZWRlZCBieSAnXFwnXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAxOyBpIDwgbkFyZ3M7IGkrKykge1xyXG4gICAgICBsZXQgdG9SZXBsYWNlOiBzdHJpbmcgPSAnQCcgKyBpLnRvU3RyaW5nKCkudHJpbSgpICsgJ0AnO1xyXG4gICAgICBsZXQgaW5kZXhGcm9tOiBudW1iZXIgPSAwO1xyXG4gICAgICB3aGlsZSAoaW5kZXhGcm9tICE9PSAtMSkge1xyXG4gICAgICAgIGxldCBuZXh0SW5kZXg6IG51bWJlciA9IHJlc3VsdFN0ci5Ub1N0cmluZygpLmluZGV4T2YodG9SZXBsYWNlLCBpbmRleEZyb20pO1xyXG4gICAgICAgIGlmIChuZXh0SW5kZXggPT09IC0xKVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGxldCBwcmVjZWRlZEJ5U2xhc2g6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBsZXQgc2hhc2hJbmRleDogbnVtYmVyID0gcmVzdWx0U3RyLlRvU3RyaW5nKCkuaW5kZXhPZignXFxcXCcgKyB0b1JlcGxhY2UsIGluZGV4RnJvbSk7XHJcbiAgICAgICAgaWYgKHNoYXNoSW5kZXggIT09IC0xKVxyXG4gICAgICAgICAgcHJlY2VkZWRCeVNsYXNoID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gaWYgJ1xcJyBpcyBmb3VuZCBjaGVjayBpZiwgaXQgaXMgcmVmZXJyaW5nIHRoZSBjdXJyZW50IG9jY3VycmFuY2Ugb2YgQG5AXHJcbiAgICAgICAgaWYgKChwcmVjZWRlZEJ5U2xhc2ggJiYgbmV4dEluZGV4ICE9PSBzaGFzaEluZGV4ICsgMSkgfHwgIXByZWNlZGVkQnlTbGFzaCkge1xyXG4gICAgICAgICAgcmVzdWx0U3RyLlJlcGxhY2UocmVzdWx0U3RyLlRvU3RyaW5nKG5leHRJbmRleCwgbmV4dEluZGV4ICsgdG9SZXBsYWNlLmxlbmd0aCAtIG5leHRJbmRleCksIEV4cF9wYXJtc1tpXS5TdHJWYWwudHJpbSgpLCBuZXh0SW5kZXgsIG5leHRJbmRleCArIHRvUmVwbGFjZS5sZW5ndGggLSBuZXh0SW5kZXgpO1xyXG4gICAgICAgICAgaW5kZXhGcm9tID0gbmV4dEluZGV4ICsgRXhwX3Bhcm1zW2ldLlN0clZhbC50cmltKCkubGVuZ3RoO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgaW5kZXhGcm9tID0gbmV4dEluZGV4ICsgMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmVzdWx0U3RyLlJlcGxhY2UoJ1xcXFxAJywgJ0AnKTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSByZXN1bHRTdHIuVG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBBZGQgdXNlciByYW5nZXMgb24gVGFza0Jhc2UuLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj5XaWxsIHJldHVybiBCb29sVmFsLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFybnVtXCI+IHZhcm51bSBjb250YWlucyB2YXIgbnVtIG9uIHdoaWNoIHJhbmdlIGlzIHNwZWNpZmllZC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm1pblwiPiBtaW4gY29udGFpbnMgbWluIHJhbmdlIHZhbHVlLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWF4XCI+IG1heCBjb250YWlucyBtYXggcmFuZ2UgdmFsdWUuPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3BfcmFuZ2VfYWRkKHJlc1ZhbDogRXhwVmFsLCBFeHBfcGFyYW1zOiBFeHBWYWxbXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IGF3YWl0IHRoaXMuYWRkX3J0X3JhbmdlcyhFeHBfcGFyYW1zLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRnJlZSB1c2VyIHJhbmdlcyBvbiBUYXNrQmFzZS4uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPldpbGwgcmV0dXJuIEJvb2xWYWwuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBhcmVudFwiPiBwYXJlbnQgY29udGFpbnMgZ2VuZXJhdGlvbiBvZiB0aGUgdGFzay48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9yYW5nZV9yZXNldChyZXNWYWw6IEV4cFZhbCwgcGFyZW50OiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG5cclxuICAgIGxldCBpUGFyZW50OiBudW1iZXIgPSBwYXJlbnQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChpUGFyZW50ID49IDAgJiYgaVBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IGlQYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcbiAgICAgIGlmICh0YXNrICE9PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGNvbW1hbmQ6IElDbGllbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlRGF0YVZpZXdDb21tYW5kKHRhc2suZ2V0VGFza1RhZygpLCBEYXRhVmlld0NvbW1hbmRUeXBlLlJlc2V0VXNlclJhbmdlKTtcclxuICAgICAgICBhd2FpdCB0YXNrLkRhdGF2aWV3TWFuYWdlci5FeGVjdXRlKGNvbW1hbmQpO1xyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEFkZCB1c2VyIGxvY2F0ZXMgb24gVGFzay4uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1ZhbFwiPldpbGwgcmV0dXJuIEJvb2xWYWwuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YXJudW1cIj4gdmFybnVtIGNvbnRhaW5zIHZhciBudW0gb24gd2hpY2ggcmFuZ2UgaXMgc3BlY2lmaWVkLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibWluXCI+IG1pbiBjb250YWlucyBtaW4gcmFuZ2UgdmFsdWUuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJtYXhcIj4gbWF4IGNvbnRhaW5zIG1heCByYW5nZSB2YWx1ZS48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZXZhbF9vcF9sb2NhdGVfYWRkKHJlc1ZhbDogRXhwVmFsLCBFeHBfcGFyYW1zOiBFeHBWYWxbXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IGF3YWl0IHRoaXMuYWRkX3J0X3JhbmdlcyhFeHBfcGFyYW1zLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGcmVlIHVzZXIgbG9jYXRlcyBvbiBUYXNrLi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+V2lsbCByZXR1cm4gQm9vbFZhbC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGFyZW50XCI+IHBhcmVudCBjb250YWlucyBnZW5lcmF0aW9uIG9mIHRoZSB0YXNrLjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX2xvY2F0ZV9yZXNldChyZXNWYWw6IEV4cFZhbCwgcGFyZW50OiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgbGV0IGlQYXJlbnQ6IG51bWJlciA9IHBhcmVudC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGlQYXJlbnQgPj0gMCAmJiBpUGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgaVBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhpUGFyZW50KTtcclxuICAgICAgaWYgKHRhc2sgIT09IG51bGwpIHtcclxuICAgICAgICBsZXQgY29tbWFuZDogSUNsaWVudENvbW1hbmQgPSBDb21tYW5kRmFjdG9yeS5DcmVhdGVEYXRhVmlld0NvbW1hbmQodGFzay5nZXRUYXNrVGFnKCksIERhdGFWaWV3Q29tbWFuZFR5cGUuUmVzZXRVc2VyTG9jYXRlKTtcclxuICAgICAgICBhd2FpdCB0YXNrLkRhdGF2aWV3TWFuYWdlci5FeGVjdXRlKGNvbW1hbmQpO1xyXG4gICAgICAgIHJlc1ZhbC5Cb29sVmFsID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEFkZCB1c2VyIHNvcnRzIG9uIFRhc2suLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj5XaWxsIHJldHVybiBCb29sVmFsLiBTdWNjZXNzZnVsIGFuZCBBdHRyIHdpbGwgYmUgc2V0IHRvIFNUT1JBR0VfQVRUUl9CT09MRUFOLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFybnVtXCI+IHZhbDEgY29udGFpbnMgdmFyIG51bSBvbiB3aGljaCByYW5nZSBpcyBzcGVjaWZpZWQuPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkaXJcIj4gZGlyIGNvbnRhaW5zIGRpcmVjdGlvbiBvZiBzb3J0LjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX3NvcnRfYWRkKHJlc1ZhbDogRXhwVmFsLCB2YXJudW06IEV4cFZhbCwgZGlyOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBhd2FpdCB0aGlzLmFkZF9zb3J0KHZhcm51bSwgZGlyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGcmVlIHVzZXIgcmFuZ2VzIG9uIFRhc2suLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj5XaWxsIHJldHVybiBCb29sVmFsLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicGFyZW50XCI+IHBhcmVudCBjb250YWlucyBnZW5lcmF0aW9uIG9mIHRhc2suPC9wYXJhbT5cclxuICBwcml2YXRlIGFzeW5jIGV2YWxfb3Bfc29ydF9yZXNldChyZXNWYWw6IEV4cFZhbCwgcGFyZW50OiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgbGV0IGlQYXJlbnQ6IG51bWJlciA9IHBhcmVudC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBpZiAoKGlQYXJlbnQgPj0gMCAmJiBpUGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgaVBhcmVudCA9PT0gRXhwcmVzc2lvbkV2YWx1YXRvci5UUklHR0VSX1RBU0spIHtcclxuICAgICAgbGV0IHRhc2s6IFRhc2tCYXNlID0gPFRhc2tCYXNlPiBzdXBlci5HZXRDb250ZXh0VGFzayhpUGFyZW50KTtcclxuICAgICAgaWYgKHRhc2sgIT09IG51bGwpIHtcclxuICAgICAgICBsZXQgY29tbWFuZDogSUNsaWVudENvbW1hbmQgPSBDb21tYW5kRmFjdG9yeS5DcmVhdGVEYXRhVmlld0NvbW1hbmQodGFzay5nZXRUYXNrVGFnKCksIERhdGFWaWV3Q29tbWFuZFR5cGUuUmVzZXRVc2VyU29ydCk7XHJcbiAgICAgICAgYXdhaXQgdGFzay5EYXRhdmlld01hbmFnZXIuRXhlY3V0ZShjb21tYW5kKTtcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGN1cnJlbnQgaW5zdGFuY2UgaS5lLiB0YWcgb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+V2lsbCByZXR1cm4gQm9vbFZhbC48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiUGFyZW50XCI+IHBhcmVudCBjb250YWlucyBnZW5lcmF0aW9uIG9mIHRhc2suPC9wYXJhbT5cclxuICBwcml2YXRlIGV2YWxfb3BfdHNrX2luc3RhbmNlKHJlc1ZhbDogRXhwVmFsLCBQYXJlbnQ6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHRhZzogbnVtYmVyID0gMDtcclxuICAgIGxldCBpUGFyZW50OiBudW1iZXIgPSBQYXJlbnQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChpUGFyZW50ID49IDAgJiYgaVBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IGlQYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcbiAgICAgIGlmICh0YXNrICE9PSBudWxsKSB7XHJcbiAgICAgICAgdGFnID0gTk51bWJlci5QYXJzZSh0YXNrLmdldFRhc2tUYWcoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQztcclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcodGFnKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUaGlzIGZ1bmN0aW9uIGFkZHMgVXNlciBTb3J0IG9uIHRhc2suXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIGFkZF9zb3J0KHZhcm51bTogRXhwVmFsLCBkaXI6IEV4cFZhbCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKHZhcm51bS5NZ051bVZhbCA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCBpdG06IG51bWJlciA9IHZhcm51bS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcblxyXG4gICAgaWYgKGl0bSA9PT0gMClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHJcbiAgICBsZXQgZmxkOiBGaWVsZCA9IHRoaXMuR2V0RmllbGRPZkNvbnRleHRUYXNrKGl0bSk7XHJcblxyXG4gICAgaWYgKGZsZCA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT5mbGQuZ2V0VGFzaygpO1xyXG4gICAgbGV0IHZlZV9pZHg6IG51bWJlciA9IGZsZC5nZXRJZCgpICsgMTtcclxuXHJcbiAgICBsZXQgZXhwcl82NDogU29ydCA9IG5ldyBTb3J0KCk7XHJcblxyXG4gICAgZXhwcl82NC5mbGRJZHggPSB2ZWVfaWR4O1xyXG4gICAgZXhwcl82NC5kaXIgPSBkaXIuQm9vbFZhbDtcclxuICAgIGxldCBzb3J0OiBTb3J0ID0gZXhwcl82NDtcclxuXHJcbiAgICBsZXQgY29tbWFuZDogSUNsaWVudENvbW1hbmQgPSBDb21tYW5kRmFjdG9yeS5DcmVhdGVBZGRVc2VyU29ydERhdGF2aWV3Q29tbWFuZCh0YXNrLmdldFRhc2tUYWcoKSwgc29ydCk7XHJcbiAgICBhd2FpdCB0YXNrLkRhdGF2aWV3TWFuYWdlci5FeGVjdXRlKGNvbW1hbmQpO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRoaXMgZnVuY3Rpb24gYWRkcyBVc2VyIFNvcnQgb24gdGFzay5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgYWRkX3J0X3JhbmdlcyhFeHBfcGFyYW1zOiBFeHBWYWxbXSwgbG9jYXRlOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBsZXQgdmFybnVtOiBFeHBWYWwgPSBFeHBfcGFyYW1zWzBdO1xyXG4gICAgbGV0IG1pbjogRXhwVmFsID0gRXhwX3BhcmFtc1sxXTtcclxuXHJcbiAgICBpZiAodmFybnVtLk1nTnVtVmFsID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IGl0bTogbnVtYmVyID0gdmFybnVtLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuXHJcbiAgICBpZiAoaXRtID09PSAwKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IGZsZDogRmllbGQgPSB0aGlzLkdldEZpZWxkT2ZDb250ZXh0VGFzayhpdG0pO1xyXG5cclxuICAgIGlmIChmbGQgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+ZmxkLmdldFRhc2soKTtcclxuICAgIGxldCB2ZWVfaWR4OiBudW1iZXIgPSBmbGQuZ2V0SWQoKSArIDE7XHJcblxyXG4gICAgbGV0IGV4cHJfNzg6IFVzZXJSYW5nZSA9IG5ldyBVc2VyUmFuZ2UoKTtcclxuICAgIGV4cHJfNzgudmVlSWR4ID0gPG51bWJlcj52ZWVfaWR4O1xyXG5cclxuICAgIGxldCBybmc6IFVzZXJSYW5nZSA9IGV4cHJfNzg7XHJcblxyXG4gICAgaWYgKG1pbi5Jc051bGwpXHJcbiAgICAgIHJuZy5udWxsTWluID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXJuZy5udWxsTWluICYmIChtaW4uQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCBtaW4uQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSAmJiBtaW4uU3RyVmFsLmxlbmd0aCA9PT0gMClcclxuICAgICAgcm5nLmRpc2NhcmRNaW4gPSB0cnVlO1xyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoIXJuZy5udWxsTWluKSB7XHJcbiAgICAgICAgaWYgKCFTdG9yYWdlQXR0cmlidXRlQ2hlY2suaXNUaGVTYW1lVHlwZShmbGQuZ2V0VHlwZSgpLCBtaW4uQXR0cikpXHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suU3RvcmFnZUZsZEFscGhhVW5pY29kZU9yQmxvYihmbGQuZ2V0VHlwZSgpLCBtaW4uQXR0cikpXHJcbiAgICAgICAgICB0aGlzLkNvbnZlcnRFeHBWYWwobWluLCBmbGQuZ2V0VHlwZSgpKTtcclxuXHJcbiAgICAgICAgcm5nLm1pbiA9IG1pbi5Ub01nVmFsKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChFeHBfcGFyYW1zLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICBsZXQgbWF4OiBFeHBWYWwgPSBFeHBfcGFyYW1zWzJdO1xyXG4gICAgICBpZiAobWF4LklzTnVsbClcclxuICAgICAgICBybmcubnVsbE1heCA9IHRydWU7XHJcblxyXG4gICAgICBpZiAoIXJuZy5udWxsTWF4ICYmIChtYXguQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSB8fCBtYXguQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSAmJiBtYXguU3RyVmFsLmxlbmd0aCA9PT0gMClcclxuICAgICAgICBybmcuZGlzY2FyZE1heCA9IHRydWU7XHJcblxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoIXJuZy5udWxsTWF4KSB7XHJcbiAgICAgICAgICBpZiAoIVN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5pc1RoZVNhbWVUeXBlKGZsZC5nZXRUeXBlKCksIG1heC5BdHRyKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suU3RvcmFnZUZsZEFscGhhVW5pY29kZU9yQmxvYihmbGQuZ2V0VHlwZSgpLCBtYXguQXR0cikpXHJcbiAgICAgICAgICAgIHRoaXMuQ29udmVydEV4cFZhbChtYXgsIGZsZC5nZXRUeXBlKCkpO1xyXG5cclxuICAgICAgICAgIHJuZy5tYXggPSBtYXguVG9NZ1ZhbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlXHJcbiAgICAgIHJuZy5kaXNjYXJkTWF4ID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIXJuZy5kaXNjYXJkTWluIHx8ICFybmcuZGlzY2FyZE1heCkge1xyXG4gICAgICBpZiAobG9jYXRlKSB7XHJcbiAgICAgICAgbGV0IGNvbW1hbmQ6IElDbGllbnRDb21tYW5kID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlQWRkVXNlckxvY2F0ZURhdGF2aWV3Q29tbWFuZCh0YXNrLmdldFRhc2tUYWcoKSwgcm5nKTtcclxuICAgICAgICBhd2FpdCB0YXNrLkRhdGF2aWV3TWFuYWdlci5FeGVjdXRlKGNvbW1hbmQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBjb21tYW5kMjogSUNsaWVudENvbW1hbmQgPSBDb21tYW5kRmFjdG9yeS5DcmVhdGVBZGRVc2VyUmFuZ2VEYXRhdmlld0NvbW1hbmQodGFzay5nZXRUYXNrVGFnKCksIHJuZyk7XHJcbiAgICAgICAgYXdhaXQgdGFzay5EYXRhdmlld01hbmFnZXIuRXhlY3V0ZShjb21tYW5kMik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgYSBjb250ZXh0IHZhbHVlIChHZXRQYXJhbSlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5hbWVcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9nZXRQYXJhbShyZXNWYWw6IEV4cFZhbCwgbmFtZTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQoIW5hbWUuSXNOdWxsICYmIG5hbWUuU3RyVmFsICE9PSBudWxsKTtcclxuXHJcbiAgICBsZXQgZXhwVmFsOiBFeHBWYWwgPSBHbG9iYWxQYXJhbXMuSW5zdGFuY2UuZ2V0KG5hbWUuU3RyVmFsKTtcclxuICAgIGlmIChleHBWYWwgIT09IG51bGwpXHJcbiAgICAgIHJlc1ZhbC5Db3B5KGV4cFZhbCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHJlc1ZhbC5OdWxsaWZ5KCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNldCBhIGNvbnRleHQgdmFsdWUgKFNldFBhcmFtKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJuYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX3NldFBhcmFtKHJlc1ZhbDogRXhwVmFsLCBuYW1lOiBFeHBWYWwsIHZhbHVlOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIERlYnVnLkFzc2VydCghbmFtZS5Jc051bGwgJiYgbmFtZS5TdHJWYWwgIT09IG51bGwpO1xyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgbGV0IGdsb2JhbFBhcmFtczogR2xvYmFsUGFyYW1zID0gR2xvYmFsUGFyYW1zLkluc3RhbmNlO1xyXG5cclxuICAgIGdsb2JhbFBhcmFtcy5zZXQobmFtZS5TdHJWYWwsIHZhbHVlKTtcclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgKElOSXB1dClcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsdWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInVwZGF0ZUluaVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX2luaXB1dChyZXNWYWw6IEV4cFZhbCwgdmFsdWU6IEV4cFZhbCwgdXBkYXRlSW5pOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBhd2FpdCBFbnZQYXJhbXNUYWJsZS5JbnN0YW5jZS5zZXQodmFsdWUuU3RyVmFsLCB1cGRhdGVJbmkuQm9vbFZhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlIChJTklnZXQpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm5hbWVcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9pbmlnZXQocmVzVmFsOiBFeHBWYWwsIG5hbWVWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IEVudlBhcmFtc1RhYmxlLkluc3RhbmNlLmdldChuYW1lVmFsLlN0clZhbCk7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlIGJ5IHNlY3Rpb24gbmFtZSBhbmQgbG9jYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibmFtZVwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX2luaWdldGxuKHJlc1ZhbDogRXhwVmFsLCBzZWN0aW9uVmFsOiBFeHBWYWwsIG51bWJlclZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gRW52UGFyYW1zVGFibGUuSW5zdGFuY2UuZ2V0bG4oc2VjdGlvblZhbC5TdHJWYWwsIG51bWJlclZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEV2YWx1YXRlcyBNT0RFIGxpdGVyYWxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvZGVzXCI+Y29kZXMgc3RyaW5nIGdpdmVuIGluIE1PREUgbGl0ZXJhbDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBldmFsX29wX20ocmVzVmFsOiBFeHBWYWwsIGNvZGVzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgY29kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IG1vZGU6IHN0cmluZyA9IHRoaXMuY3N0X2NvZGVfdHJhbnNfYnVmKCdPJywgJ01DREVMUktTT04gJywgY29kZXMuY2hhckF0KGkpLCBNc2dJbnRlcmZhY2UuRVhQVEFCX1RTS19NT0RFX1JUKTtcclxuICAgICAgcmVzVmFsLlN0clZhbCA9IHJlc1ZhbC5TdHJWYWwgKyBtb2RlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRyYW5zbGF0ZSBjb2RlcyBhY2NvcmRpbmcgdG8gZ2l2ZW4gc3RyaW5nIGFuZCB2aWNlIHZlcnNhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm9wclwiPklucHV0L091dHB1dDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpbnRTdHJcIj5MaXN0IG9mIGludGVybmFsIHZhbHVlcyB1c2VkIGJ5IG1hZ2ljPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvZGVcIj5JbnRlcm5hbC9leHRlcm5hbCBjb2RlIG9mIG1hZ2ljPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0cklkXCI+aW5kZXggb2Ygc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgY3N0X2NvZGVfdHJhbnNfYnVmKG9wcjogc3RyaW5nLCBpbnRTdHI6IFN0cmluZywgY29kZTogc3RyaW5nLCBzdHJJZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgY29uc3RTdHI6IHN0cmluZyA9IExhbmd1YWdlRGF0YS5JbnN0YW5jZS5nZXRDb25zdE1lc3NhZ2Uoc3RySWQpO1xyXG4gICAgbGV0IHRva2VuczogQXJyYXlfRW51bWVyYXRvcjxzdHJpbmc+ID0gbmV3IEFycmF5X0VudW1lcmF0b3IoU3RyVXRpbC50b2tlbml6ZShjb25zdFN0ciwgJywnKSk7XHJcbiAgICBsZXQgdG9rZW46IHN0cmluZztcclxuICAgIGxldCByZXNWYWw6IHN0cmluZyA9ICdcXDAnO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IGludFN0ci5sZW5ndGggJiYgdG9rZW5zLk1vdmVOZXh0KCk7IGkrKykge1xyXG4gICAgICB0b2tlbiA9IDxzdHJpbmc+dG9rZW5zLkN1cnJlbnQ7XHJcbiAgICAgIGxldCBvZnM6IG51bWJlciA9IHRva2VuLmluZGV4T2YoJyYnKTtcclxuXHJcbiAgICAgIC8vIGlmICcmJyBpcyBmb3VuZCwgbW92ZSB0byBjaGFyYWN0ZXIgbmV4dCB0byAnJidcclxuICAgICAgLy8gZWxzZSBtb3ZlIHRvIGZpcnN0IGNoYXJhY3RlclxyXG4gICAgICBvZnMrKztcclxuICAgICAgbGV0IGN1cnJDb2RlOiBzdHJpbmcgPSB0b2tlbi5jaGFyQXQob2ZzKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICBpZiAob3ByID09PSAnSScpIHtcclxuICAgICAgICBpZiAoY29kZSA9PT0gY3VyckNvZGUpIHtcclxuICAgICAgICAgIHJlc1ZhbCA9IGludFN0ci5jaGFyQXQoaSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gb3ByID09ICdPJ1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoY29kZSA9PT0gaW50U3RyLmNoYXJBdChpKSkge1xyXG4gICAgICAgICAgcmVzVmFsID0gY3VyckNvZGU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXNWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGltcGxlbWVudGluZyBFeHBDYWxjIC0gZ2V0IGluZGV4IG9mIGV4cHJlc3Npb24sIGZpbmQgdGhlIGV4cHJlc3Npb24gYW5kIGV2YWx1YXRlIGl0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImV4cFZhbFwiPiBleHByZXNzaW9uIGluZGV4IDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBldmFsX29wX2V4cGNhbGMocmVzVmFsOiBFeHBWYWwsIGV4cFZhbDogRXhwVmFsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXNWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICAgIC8vIEF2b2lkIG92ZXIgNTAgcmVjdXJzaXZlIGNhbGxzXHJcbiAgICBpZiAoRXhwcmVzc2lvbkV2YWx1YXRvci5fcmVjdXJzaXZlRXhwQ2FsY0NvdW50IDwgNTApIHtcclxuICAgICAgRXhwcmVzc2lvbkV2YWx1YXRvci5fcmVjdXJzaXZlRXhwQ2FsY0NvdW50Kys7XHJcbiAgICAgIC8vIGdldCBleHByZXNzaW9uIGZyb20gaWR4IGFuZCBldmFsdWF0ZSBpdC4gcGFzcyBcIm5vbmVcIiBmb3IgdHlwZSwgc28gd2UgZ2V0IHdoYXRldmVyIHR5cGUgdGhlIHNlcnZlciBzZW50IGJhY2tcclxuICAgICAgbGV0IGV4cFZhbDI6IEV4cFZhbCA9IGF3YWl0ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRFeHBCeUlkKGV4cFZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCkpLmV2YWx1YXRlV2l0aFJlc1R5cGUoU3RvcmFnZUF0dHJpYnV0ZS5OT05FKTtcclxuICAgICAgRXhwcmVzc2lvbkV2YWx1YXRvci5fcmVjdXJzaXZlRXhwQ2FsY0NvdW50LS07XHJcblxyXG4gICAgICBpZiAoZXhwVmFsMiAhPT0gbnVsbClcclxuICAgICAgICByZXNWYWwuQ29weShleHBWYWwyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaW1wbGVtZW50YXRpb24gb2YgQ25kUmFuZ2UgZnVuY3Rpb246IElmIGNvbmRpdGlvbiBpcyB0cnVlLCB1c2UgdGhlIDJuZCBwYXJhbWV0ZXIgYXMgcmFuZ2UuIGlmIG5vdCAtXHJcbiAgLy8vIG1hcmsgdGhlIHJlc3VsdCBhcyBudWxsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbDFcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInZhbDJcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9DbmRSYW5nZShyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsLCB2YWwyOiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGlmICh2YWwxLkJvb2xWYWwpXHJcbiAgICAgIHJlc1ZhbC5Db3B5KHZhbDIpO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXNWYWwuSXNOdWxsID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBleHRlcm5hbCB0YXNrIHR5cGUgb2YgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZXZhbF9vcF90YXNrVHlwZShyZXNWYWw6IEV4cFZhbCwgUGFyZW50OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIGxldCBpUGFyZW50OiBudW1iZXIgPSBQYXJlbnQuTWdOdW1WYWwuTlVNXzJfTE9ORygpO1xyXG4gICAgaWYgKChpUGFyZW50ID49IDAgJiYgaVBhcmVudCA8ICgoPFRhc2tCYXNlPnRoaXMuRXhwVGFzaykuZ2V0VGFza0RlcHRoKGZhbHNlKSkpIHx8IGlQYXJlbnQgPT09IEV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2soaVBhcmVudCk7XHJcbiAgICAgIGlmICh0YXNrICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9ICh0YXNrLmlzTWFpblByb2coKSA/ICdNVycgOiAnVycpO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgICByZXNWYWwuU3RyVmFsID0gJyAnO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGdW5jdGlvbiBnZXR0aW5nIHRoZSB0ZXJtaW5hbCBudW1iZXIuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF90ZXJtaW5hbChyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IHRlcm1pbmFsOiBudW1iZXIgPSBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRUZXJtaW5hbCgpO1xyXG5cclxuICAgIHN1cGVyLkNvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbCwgdGVybWluYWwsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBwcm9qZWN0J3MgZGlyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgZXZhbF9vcF9wcm9qZWN0ZGlyKHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXNWYWwuU3RyVmFsID0gRW52aXJvbm1lbnQuSW5zdGFuY2UuZ2V0UHJvakRpcih0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0aGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIGJsb2IgaXMgdmFsaWQgdmVjdG9yIGkuZS4gaWYgdGhlIGJsb2IgaXMgaW4gdmVjdG9yJ3MgZmxhdHRlbiBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmVjXCI+dGhlIGJsb2IgdG8gYmUgY2hlY2tlZDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIHZhbGlkIHZlY3RvcjwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBJc1ZhbGlkVmVjdG9yKHZlYzogRXhwVmFsKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmVjICE9PSBudWxsICYmIHZlYy5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SICYmIFZlY3RvclR5cGUudmFsaWRhdGVCbG9iQ29udGVudHModmVjLlN0clZhbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYXR0cmlidXRlIGFjY29yZGluZyB0byBtYWdpYywgZm9yIGVnICdMJyBpcyByZXR1cm5lZCBmb3IgYm9vbGVhbi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0b3JhZ2VBdHRyXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+YXR0cmlidXRlIGNoYXJhY3RlciBjb3JyZXNwb25kaW5nIHRvIHN0b3JhZ2UgYXR0cmlidXRlLjwvcmV0dXJucz5cclxuICBwcml2YXRlIHN0YXRpYyBHZXRBdHRyaWJ1dGVDaGFyKHN0b3JhZ2VBdHRyOiBTdG9yYWdlQXR0cmlidXRlKTogc3RyaW5nIHtcclxuICAgIGxldCBhdHRyOiBzdHJpbmcgPSA8c3RyaW5nPnN0b3JhZ2VBdHRyO1xyXG4gICAgc3dpdGNoIChzdG9yYWdlQXR0cikge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICBhdHRyID0gJ0InO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgYXR0ciA9ICdMJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXR0cjtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBNb3ZlcyB0aGUgY2FyZXQgdG8gc3BlY2lmaWVkIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImN0cmxUYXNrXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjdHJsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyb3dOb1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBIYW5kbGVDb250cm9sR290byhjdHJsVGFzazogSVRhc2ssIGN0cmw6IE1nQ29udHJvbEJhc2UsIHJvd05vOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGxldCB0YXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT5jdHJsVGFzaztcclxuICAgIGlmIChjdHJsICE9PSBudWxsKSB7XHJcbiAgICAgIGxldCBkdjogRGF0YVZpZXcgPSA8RGF0YVZpZXc+dGFzay5EYXRhVmlldztcclxuICAgICAgbGV0IHRDdHJsOiBNZ0NvbnRyb2wgPSA8TWdDb250cm9sPmN0cmw7XHJcbiAgICAgIGxldCB3YW50ZWRMaW5lOiBudW1iZXIgPSB0YXNrLmdldEZvcm0oKS5EaXNwbGF5TGluZTsgLy8gMC1iYXNlZCByZWNvcmQgaW5kZXhcclxuXHJcbiAgICAgIC8vIHZhbGlkYXRlIHNwZWNpZmllZCByb3dcclxuICAgICAgaWYgKGN0cmwuSXNSZXBlYXRhYmxlICYmIHJvd05vID4gMCkge1xyXG4gICAgICAgIHRhc2suZ2V0Rm9ybSgpLmdldFRvcEluZGV4RnJvbUdVSSgpO1xyXG4gICAgICAgIGxldCB0b3BSZWNJZHg6IG51bWJlciA9IGR2LmdldFRvcFJlY0lkeCgpO1xyXG4gICAgICAgIHdhbnRlZExpbmUgPSB0b3BSZWNJZHggKyByb3dObyAtIDE7XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSByZWNvcmQgaXMgZXhpc3QgaW4gdGhlIGN1cnJlbnQgcGFnZVxyXG4gICAgICAgIGlmICh3YW50ZWRMaW5lIC0gdG9wUmVjSWR4IC0gMSA+PSB0YXNrLmdldEZvcm0oKS5nZXRSb3dzSW5QYWdlKCkpXHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGZvciBpbnZhbGlkIHJlY29yZCBpbmRleFxyXG4gICAgICAgIGlmICghdGFzay5nZXRGb3JtKCkuSXNWYWxpZFJvdyh3YW50ZWRMaW5lKSlcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRDdHJsLmlzVmlzaWJsZSgpKSB7XHJcbiAgICAgICAgaWYgKHRDdHJsLmlzU3ViZm9ybSgpKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEZWZlY3QgMTUyMzE1OiBQcm9ibGVtOiBXaGVuIGNsaWNrZWQgb24gQnV0dG9uIGFuZCBjbGlja2VkIG9uIGVkaXQgd2hpY2ggaXMgZ2VuZXJhdGVkIGFzIExhYmVsIG9uIFRhYmxlLFxyXG4gICAgICAgIC8vIENQICYgQ1Mgb2YgRWRpdCBpcyBjYWxsZWQuIFRoaXMgaXMgYmVjYXVzZSB3ZSBlZGl0IHdoaWNoIGlzIExhYmVsIGlzIG5vbi1mb2N1c2FibGUgYW4gaGVuY2UgYnV0dG9uIGdldHMgZm9jdXMgYmFjay5cclxuICAgICAgICAvLyBQb3NzaWJsZSBzb2x1dGlvbnM6XHJcblxyXG4gICAgICAgIC8vIDEpIEdvdG8gRWRpdGluZyBtb2RlIHdoZW4gb24gVGFibGVDb250cm9sIHdoZW4gY29udHJvbEdvdG8gaXMgY2FsbGVkIHRoZW4gaGFuZGxlIGNvbnRyb2xHb3RvIHN0dWZmLiBUaGlzIHdpbGwgbmVlZCBzb21lIHJlc2VhcmNoL2JpZ2dlciBjaGFuZ2VzLlxyXG4gICAgICAgIC8vIDIpIEp1c3QgcGFyayBvbiBSb3cgb24gd2hpY2ggQ29udHJvbEdvdG8gaXMgY2FsbGVkLiBUaGlzIG1lYW5zIGl0IHdpbGwgd29yayBwYXJ0aWFsbHkgaS5lLiBjYWxsIFJQIGFuZCBub3QgQ1Agb2YgY29udHJvbCBvbiB3aGljaCBDb250cm9sR290byBpcyBjYWxsZWQuXHJcbiAgICAgICAgLy8gMykgTWF5YmUoIG5vdCBpbiB0aGlzIHZlcnNpb24pIHdlIHNob3VsZCBpbnRyb2R1Y2Ug4oCcZ290b0xpbmXigJ0gLiBUaGVuIHVzZXIgY2FuIGRvIHRoaXMgYW5kIGhhdmUgZnVsbCBjb250cm9sOlxyXG4gICAgICAgIC8vICAgIEdvdG9MaW5lKFgpXHJcbiAgICAgICAgLy8gICAgUmFpc2UgUm93RWRpdGluZ1xyXG4gICAgICAgIC8vICAgIEdvdG9Db250cm9sKFkpXHJcbiAgICAgICAgLy8gT3B0aW9uIDIgd2FzIHNlbGVjdGVkIGJ5IFBNLiBJdCB3aWxsIGFwcGx5IG9ubHkgd2hlbiByb3cgaXMgbm90IGluIGVkaXRpbmcgbW9kZS5cclxuICAgICAgICBsZXQgZnJtOiBNZ0Zvcm0gPSA8TWdGb3JtPnRhc2suZ2V0Rm9ybSgpO1xyXG4gICAgICAgIGxldCBpc1Jvd0VkaXRpbmcgPSBmcm0uZ2V0SXNSb3dFZGl0aW5nRnJvbUd1aSh3YW50ZWRMaW5lKTtcclxuICAgICAgICBpZiAodEN0cmwuaXNSZXBlYXRhYmxlKCkgJiYgIWlzUm93RWRpdGluZykge1xyXG4gICAgICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuYWRkR3VpVHJpZ2dlcmVkRXZlbnRXaXRoVGFza0FuZENvZGVBbmRMaW5lKHRhc2ssIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRUNfUFJFRklYLCB3YW50ZWRMaW5lKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdVbmFibGUgdG8gcGFyayBvbiBjb250cm9sOiAnICsgdEN0cmwuTmFtZSArICcgYXMgcm93IGlzIG5vdCBpbiBlZGl0aW5nIG1vZGUnKTtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBqdW1wIHRvIHRoZSBjb250cm9sXHJcbiAgICAgICAgICBsZXQgcnRFdnQ6IFJ1blRpbWVFdmVudCA9IG5ldyBSdW5UaW1lRXZlbnQodEN0cmwsIHdhbnRlZExpbmUpO1xyXG4gICAgICAgICAgcnRFdnQuc2V0SW50ZXJuYWwoSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfRk9DVVMpO1xyXG4gICAgICAgICAgQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuYWRkVG9UYWlsKHJ0RXZ0KTtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vIHNldHMgdGhlIHN0YXR1cyBiYXIgdGV4dCB3aXRoIHRoZSBnaXZlbiB0ZXh0IGFuZFxyXG4gIC8vLyBzZXRzIHRoZSByZXN1bHQgd2l0aCB0aGUgbGFzdCB0ZXh0IHRoYXQgd2FzIHNldCB0byB0aGUgc3RhdHVzIGJhciBieSB0aGUgdXNlIG9mIHRoaXMgZnVuY3Rpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+bGFzdCB0ZXh0IG9mIHN0YXR1cyBiYXI8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RhdHVzQmFyVGV4dFwiPnRoZSB0ZXh0IHRvIGJlIHNldCBhdCBzdGF0dXMgYmFyPC9wYXJhbT5cclxuICBldmFsX29wX3NldF90aXRsZShyZXNWYWw6IEV4cFZhbCwgdGl0bGU6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU47XHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcblxyXG4gICAgaWYgKCEodGl0bGUuQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSAmJiB0aXRsZS5BdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREUpKSB7XHJcbiAgICAgIGlmICghdGl0bGUuSXNOdWxsKSB7XHJcbiAgICAgICAgbGV0IHRleHQ6IHN0cmluZyA9IHRpdGxlLlN0clZhbDtcclxuICAgICAgICBsZXQgdGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+IHRoaXMuRXhwVGFzay5HZXRDb250ZXh0VGFzaygpO1xyXG5cclxuICAgICAgICAvLyBJbiBjYXNlIG9mIG5vbiBpbnRlcmFjdGl2ZSB0YXNrcywgaXQgaXMgcG9zc2libGUgdGhhdCB0YXNrIGhhcyBvcGVuIHdpbmRvdyA9IE5vLCBTbyBkaXNwbGF5IHRoZSBzdGF0dXMgYmFyIG1zZyBvbiBmcmFtZSB3aW5kb3cuXHJcbiAgICAgICAgaWYgKHRhc2suZ2V0VG9wTW9zdEZvcm0oKSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGFzay5nZXRUb3BNb3N0Rm9ybSgpLnNldFRpdGxlKHRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vIGdldHMgdGhlIGlzUm93IGVkaXRpbmcgb24gdGhlIGN1cnJlbnQgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZXZhbF9vcF9pc19yb3dfZWRpdGluZyhyZXNWYWw6IEV4cFZhbCwgdmFsMTogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgaXNSb3dFZGl0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAodmFsMS5NZ051bVZhbCA9PT0gbnVsbCkge1xyXG4gICAgICBzdXBlci5TZXROVUxMKHJlc1ZhbCwgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGFyZW50OiBudW1iZXIgPSB2YWwxLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGlmICgocGFyZW50ID49IDAgJiYgcGFyZW50IDwgKCg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrKS5nZXRUYXNrRGVwdGgoZmFsc2UpKSkgfHwgcGFyZW50ID09PSBFeHByZXNzaW9uRXZhbHVhdG9yLlRSSUdHRVJfVEFTSykge1xyXG4gICAgICBsZXQgdHNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT4gc3VwZXIuR2V0Q29udGV4dFRhc2socGFyZW50KTtcclxuICAgICAgbGV0IG15Zm9ybTogTWdGb3JtID0gPE1nRm9ybT50c2suZ2V0Rm9ybSgpO1xyXG4gICAgICBpc1Jvd0VkaXRpbmcgPSBteWZvcm0uZ2V0SXNSb3dFZGl0aW5nRnJvbUd1aShteWZvcm0uRGlzcGxheUxpbmUpO1xyXG4gICAgfVxyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBpc1Jvd0VkaXRpbmc7XHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gRGlzY29ubmVjdCB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbiBvZiBnaXZlbiBkYXRhYmFzZSBuYW1lLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsXCI+IERhdGFiYXNlIG5hbWU8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPlJldHVybiBzdGF0dXMgb2YgZGlzY29ubmVjdCBvcGVyYXRpb248L3BhcmFtPlxyXG4gIC8vIHByaXZhdGUgdm9pZCBleHBfb3BfQ2xpZW50RGJEaXNjb25uZWN0KEV4cFZhbCB2YWwsIEV4cFZhbCByZXNWYWwpXHJcbiAgLy8ge1xyXG4gIC8vICAgc3RyaW5nIGRhdGFiYXNlTmFtZSA9IHZhbC5TdHJWYWw7XHJcbiAgLy8gICBUYXNrQmFzZSB0YXNrID0gKFRhc2tCYXNlKUV4cFRhc2s7XHJcblxyXG4gIC8vICAgSUNsaWVudENvbW1hbmQgY29tbWFuZCA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZUNsaWVudERiRGlzY29ubmVjdENvbW1hbmQoZGF0YWJhc2VOYW1lKTtcclxuICAvLyAgIFJldHVyblJlc3VsdCByZXN1bHQgPSB0YXNrLkRhdGF2aWV3TWFuYWdlci5Mb2NhbERhdGF2aWV3TWFuYWdlci5FeGVjdXRlKGNvbW1hbmQpO1xyXG5cclxuICAvLyAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gIC8vICAgcmVzVmFsLkJvb2xWYWwgPSByZXN1bHQuU3VjY2VzcztcclxuICAvLyB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEV4ZWN1dGUgQ29udHJvbFNlbGVjdFByb2dyYW0oKSBmdW5jdG9uLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZXhwVmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNWYWxcIj48L3BhcmFtPlxyXG4gIGFzeW5jIGV2YWxfb3BfY29udHJvbF9zZWxlY3RfcHJvZ3JhbShleHBWYWw6IEV4cFZhbCwgcmVzVmFsOiBFeHBWYWwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBjb250cm9sSUQ6IG51bWJlciA9IGV4cFZhbC5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgcGFyZW50OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGxldCByZWZQYXJlbnQ6IFJlZlBhcmFtPG51bWJlcj4gPSBuZXcgUmVmUGFyYW0ocGFyZW50KTtcclxuICAgIGxldCBtZ0NvbnRyb2w6IE1nQ29udHJvbCA9ICg8VGFza0Jhc2U+dGhpcy5FeHBUYXNrLkdldENvbnRleHRUYXNrKCkpLkdldENvbnRyb2xGcm9tQ29udHJvbElEKGNvbnRyb2xJRCAtIDEsIHJlZlBhcmVudCk7XHJcbiAgICBwYXJlbnQgPSByZWZQYXJlbnQudmFsdWU7XHJcblxyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUoKTtcclxuXHJcbiAgICAvLyBJZiBjb250cm9sIGhhcyBzZWxlY3QgcHJvZ3JhbSBwcm9wZXJ0eS5cclxuICAgIGlmIChtZ0NvbnRyb2wgIT09IG51bGwgJiYgbWdDb250cm9sLkhhc1NlbGVjdFByb2dyYW0oKSkge1xyXG4gICAgICBsZXQgc2VsZWN0UHJvZ1Byb3A6IFByb3BlcnR5ID0gbWdDb250cm9sLmdldFByb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VMRUNUX1BST0dSQU0pO1xyXG4gICAgICBsZXQgcmVhbEluZGV4OiBudW1iZXIgPSBOTnVtYmVyLlBhcnNlKGF3YWl0IHNlbGVjdFByb2dQcm9wLmdldFZhbHVlKCkpO1xyXG4gICAgICBsZXQgcHJvZ3JhbUluZGV4OiBudW1iZXIgPSAwO1xyXG4gICAgICBpZiAocmVhbEluZGV4ID4gMCkge1xyXG4gICAgICAgIGlmIChwYXJlbnQgPiAwKVxyXG4gICAgICAgICAgcHJvZ3JhbUluZGV4ID0gPG51bWJlcj5yZWFsSW5kZXggKyA8bnVtYmVyPnBhcmVudCAvIDEwMDtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBwcm9ncmFtSW5kZXggPSA8bnVtYmVyPnJlYWxJbmRleDtcclxuICAgICAgfVxyXG4gICAgICByZXNWYWwuTWdOdW1WYWwgPSBOVU1fVFlQRS5mcm9tX2RvdWJsZSg8bnVtYmVyPnByb2dyYW1JbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBldmFsX29wX0NhbGxKUyh0YXNrOiBJVGFzaywgbWV0aG9kTmFtZTogc3RyaW5nLCBleHBWYWw6IEV4cFZhbFtdLCByZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgaWYoKDxUYXNrQmFzZT50YXNrKS5pc01haW5Qcm9nKCkpXHJcbiAgICB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJDYWxsSlMgY2Fubm90IGJlIHVzZWQgaW4gTWFpbiBQcm9ncmFtXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZm9ybTogTWdGb3JtID0gPE1nRm9ybT4oPFRhc2tCYXNlPnRhc2spLmdldEZvcm0oKTtcclxuICAgIGxldCBhcmdzID0gdGhpcy5wYXJhbXMyYXJndW1lbnRzKGV4cFZhbCwgMCwgZXhwVmFsLmxlbmd0aCk7XHJcblxyXG4gICAgaWYoIWlzTnVsbE9yVW5kZWZpbmVkKGFyZ3MpKSB7XHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSBDb21tYW5kcy5hZGRDYWxsSlMoZm9ybSwgZm9ybS5VbmlxdWVOYW1lLCBtZXRob2ROYW1lLCBhcmdzKTtcclxuICAgICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGV2YWxfb3Bfc2V0X2Nvb2tpZShjb29raWVOYW1lOiBzdHJpbmcsIGV4cFZhbDogRXhwVmFsW10sIHJlc1ZhbDogRXhwVmFsKVxyXG4gIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG5cclxuICAgIGxldCBhcmdzID0gdGhpcy5wYXJhbXMyYXJndW1lbnRzKGV4cFZhbCwgMCwgZXhwVmFsLmxlbmd0aCk7XHJcbiAgICB2YXIgZXhwaXJlc0RhdGUsIHBhdGgsIGRvbWFpbiwgc2VjdXJlLCBzYW1lU2l0ZTtcclxuXHJcbiAgICBleHBpcmVzRGF0ZSA9IGFyZ3NbMV07XHJcbiAgICBsZXQgZXhwaXJlc1RpbWUgPSBhcmdzWzJdO1xyXG4gICAgbGV0IG5hdGl2ZUR0OiBEYXRlO1xyXG4gICAgaWYoZXhwaXJlc0RhdGUpXHJcbiAgICB7XHJcblxyXG4gICAgICBsZXQgYnJlYWtQYXJhbXM6IERhdGVCcmVha1BhcmFtcyA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZ2V0TmV3RGF0ZUJyZWFrUGFyYW1zKCk7XHJcbiAgICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UuZGF0ZV9icmVha19kYXRlbW9kZShicmVha1BhcmFtcywgZXhwaXJlc0RhdGUsIGZhbHNlLCB0aGlzLkV4cFRhc2suZ2V0Q29tcElkeCgpKTtcclxuXHJcblxyXG4gICAgICBpZiAoYnJlYWtQYXJhbXMueWVhciA9PSAwICYmIGJyZWFrUGFyYW1zLm1vbnRoID09IDAgJiYgYnJlYWtQYXJhbXMuZGF5ID09IDApXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIG5hdGl2ZUR0ID0gbmV3IERhdGUoYnJlYWtQYXJhbXMueWVhciwgYnJlYWtQYXJhbXMubW9udGggLSAxLCBicmVha1BhcmFtcy5kYXkpO1xyXG4gICAgICAvLyBnZXQgdGltZSBmcm9tIG1hZ2ljIG51bWJlclxyXG5cclxuICAgICAgaWYoZXhwaXJlc1RpbWUpIHtcclxuICAgICAgICBsZXQgdGltZUJyZWFrUGFyYW1zOiBUaW1lQnJlYWtQYXJhbXMgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLmdldE5ld1RpbWVCcmVha1BhcmFtcygpO1xyXG4gICAgICAgIERpc3BsYXlDb252ZXJ0b3IudGltZV9icmVhayh0aW1lQnJlYWtQYXJhbXMsIGV4cGlyZXNUaW1lKTtcclxuXHJcbiAgICAgICAgbmF0aXZlRHQuc2V0SG91cnModGltZUJyZWFrUGFyYW1zLmhvdXIpO1xyXG4gICAgICAgIG5hdGl2ZUR0LnNldE1pbnV0ZXModGltZUJyZWFrUGFyYW1zLm1pbnV0ZSk7XHJcbiAgICAgICAgbmF0aXZlRHQuc2V0U2Vjb25kcyh0aW1lQnJlYWtQYXJhbXMuc2Vjb25kKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcGF0aCA9IGFyZ3NbM107XHJcbiAgICBkb21haW4gPSBhcmdzWzRdO1xyXG5cclxuICAgIHJlc1ZhbC5Cb29sVmFsID0gIENvb2tpZVNlcnZpY2Uuc2V0Q29va2llKGNvb2tpZU5hbWUsIChhcmdzWzBdICE9IG51bGwgPyBhcmdzWzBdLnRvU3RyaW5nKCkgOiBcIlwiKSwgbmF0aXZlRHQsIHBhdGgsIGRvbWFpbiAsIHNlY3VyZSwgc2FtZVNpdGUpO1xyXG4gIH1cclxuXHJcbiAgZXZhbF9vcF9nZXRfY29va2llKGNvb2tpZU5hbWU6IHN0cmluZywgcmVzVmFsOiBFeHBWYWwpXHJcbiAge1xyXG4gICAgLy8gZ2V0IHRoZSBjb29raWUgdmFsdWVcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSBDb29raWVTZXJ2aWNlLmdldENvb2tpZShjb29raWVOYW1lKTtcclxuICB9XHJcblxyXG4gIGV2YWxfb3BfZGVsZXRlX2Nvb2tpZShjb29raWVOYW1lOiBzdHJpbmcsIHJlc1ZhbDogRXhwVmFsKVxyXG4gIHtcclxuICAgIC8vIGRlbGV0ZSBjb29raWVzXHJcbiAgICByZXNWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuXHJcbiAgICByZXNWYWwuQm9vbFZhbCA9IENvb2tpZVNlcnZpY2UuZGVsZXRlQ29va2llKGNvb2tpZU5hbWUpOztcclxuICB9XHJcblxyXG4gIGV2YWxfb3Bfcm91dGVfZ2V0KHJlc1ZhbDogRXhwVmFsKVxyXG4gIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgcmVzVmFsLklzTnVsbCA9IGZhbHNlO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IENvbW1hbmRzLmdldExhc3RSb3V0ZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgcGFyYW1zMmFyZ3VtZW50cyhFeHBfcGFyYW1zOiBFeHBWYWxbXSwgc3RhcnRBdDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogQXJyYXk8YW55PiB7XHJcbiAgICBsZXQgTlVMTF9TVFI6IHN0cmluZyA9ICcnO1xyXG4gICAgbGV0IGF0dHI6IEFycmF5PGFueT4gPSBuZXcgQXJyYXk8YW55PigpO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IHN0YXJ0QXQ7IGkgPCBzdGFydEF0ICsgY291bnQ7IGkrKykge1xyXG4gICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoRXhwX3BhcmFtc1tpXSkpIHtcclxuICAgICAgICBhdHRyLnB1c2goTlVMTF9TVFIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN3aXRjaCAoRXhwX3BhcmFtc1tpXS5BdHRyKSB7XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICAgICAgaWYgKEV4cF9wYXJhbXNbaV0uU3RyVmFsICE9IG51bGwgJiYgRXhwX3BhcmFtc1tpXS5TdHJWYWwubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICBhdHRyLnB1c2goRXhwX3BhcmFtc1tpXS5TdHJWYWwpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgYXR0ci5wdXNoKE5VTExfU1RSKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgICAgIGF0dHIucHVzaChFeHBfcGFyYW1zW2ldLkJvb2xWYWwgPyB0cnVlIDogZmFsc2UpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgICAgICBhdHRyLnB1c2goRXhwX3BhcmFtc1tpXS5NZ051bVZhbC5OVU1fMl9MT05HKCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICAgICAgYXR0ci5wdXNoKEV4cF9wYXJhbXNbaV0uTWdOdW1WYWwudG9fZG91YmxlKCkpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICAgICAgbGV0IGJsb2IgPSBFeHBfcGFyYW1zW2ldLlN0clZhbDtcclxuICAgICAgICAgICAgaWYoIWlzTnVsbE9yVW5kZWZpbmVkKGJsb2IpKSB7XHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBCbG9iVHlwZS5nZXRDb250ZW50VHlwZShibG9iKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSAhPT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX0JJTkFSWSkge1xyXG4gICAgICAgICAgICAgICAgICBhdHRyLnB1c2goQmxvYlR5cGUuZ2V0U3RyaW5nKGJsb2IpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUVycm9yVG9Mb2coJ0FyZ3VtZW50ICcgKyAoaSArIDEpICsgJyBvZiB0eXBlIEJpbmFyeSBCbG9iIGlzIG5vdCBzdXBwb3J0ZWQgaW4gQ2FsbEpTJyk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OT05FOlxyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXJyb3JUb0xvZygnIEFyZ3VtZW50ICcrIChpICsgMSkrICcgaXMgbm90IHN1cHBvcnRlZCBpbiBDYWxsSlMnICk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF0dHI7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBUaGlzIGV4Y2VwdGlvbiB1c2VkIHdoZW4gYXQgbGVhc3Qgb25lIG9mIHRoZSBvcGVyYW5kcyBpcyBudWxsXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBOdWxsVmFsdWVFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge1xyXG4gIHByaXZhdGUgX2F0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBTdG9yYWdlQXR0cmlidXRlLk5PTkU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLl9hdHRyID0gYXR0cjtcclxuICAgIHRoaXMubmFtZSA9ICdOdWxsVmFsdWVFeGNlcHRpb24nO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXR0cigpOiBTdG9yYWdlQXR0cmlidXRlIHtcclxuICAgIHJldHVybiB0aGlzLl9hdHRyO1xyXG4gIH1cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBUaGlzIGNsYXNzIGlzIHVzZWQgZm9yIHRyYWNraW5nIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBjdXJyZW50XHJcbi8vLyAgIGV4ZWN1dGVkIGV4cHJlc3Npb24uXHJcbi8vLyAgIGV4cFN0cl8gLSBpcyB0aGUgY3VycmVudCBzdHJpbmcgb2YgdGhlIGV4cHJlc3Npb24gYmVpbmcgZXhlY3V0ZWRcclxuLy8vICAgcG9zSWR4XyAtIGlzIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBleHByZXNzaW9uICh3aGlsZSBleGVjdXRpbmcgaXQpXHJcbi8vLyAgIFRoZSBjbGFzcyBhbHNvIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGV4dHJhY3RpbmcgdmFsdWVzL29wZXJhdG9yIGZyb21cclxuLy8vICAgdGhlIGV4cHJlc3Npb24gYmVpbmcgZXhlY3V0ZWQuXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFeHBTdHJUcmFja2VyIHtcclxuICBwcml2YXRlIF9leHBCeXRlczogSW50OEFycmF5ID0gbnVsbDsgLy8gQ3VycmVudCBzdHJpbmcgb2YgdGhlIGV4cHJlc3Npb24gYmVpbmcgZXhlY3V0ZWRcclxuICBwcml2YXRlIF9sb3dIaWdoOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIF9udWxsQXJpdGhtZXRpYzogYm9vbGVhbiA9IGZhbHNlOyAvLyB0cnVlLCBpZiB0YXNrIG9mIHRoZSBleHByZXNzaW9uIGhhcyBudWxsIGFyaXRobWV0aWMgPT0gbnVsbGlmeTtcclxuICBwcml2YXRlIF9pc051bGw6IGJvb2xlYW4gPSBmYWxzZTsgLy8gaXMgZXhwcmVzc2lvbiByZXN1bHQgTlVMTFxyXG4gIHByaXZhdGUgX3Bvc0lkeDogbnVtYmVyID0gMDsgLy8gVGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGV4cHJlc3Npb24gKHdoaWxlIGV4ZWN1dGluZyBpdClcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluaXRpYWxpemluZyB0aGUgY2xhc3Mgd2l0aCB0aGUgZXhwcmVzc2lvbiB0byBiZSBleGVjdXRlZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IoZXhwQnl0ZXM6IEludDhBcnJheSwgbnVsbEFyaXRobWV0aWM6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2V4cEJ5dGVzID0gbmV3IEludDhBcnJheShleHBCeXRlcy5sZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgX2FpOiBudW1iZXIgPSAwOyBfYWkgPCB0aGlzLl9leHBCeXRlcy5sZW5ndGg7ICsrX2FpKVxyXG4gICAgICB0aGlzLl9leHBCeXRlc1tfYWldID0gMDtcclxuXHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZXhwQnl0ZXMubGVuZ3RoOyBpKyspXHJcbiAgICAgIHRoaXMuX2V4cEJ5dGVzW2ldID0gZXhwQnl0ZXNbaV07XHJcblxyXG4gICAgdGhpcy5fbnVsbEFyaXRobWV0aWMgPSBudWxsQXJpdGhtZXRpYztcclxuICAgIHRoaXMuX2xvd0hpZ2ggPSBFbnZpcm9ubWVudC5JbnN0YW5jZS5nZXRMb3dIaWdoKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHJlc3VsdCB0byBiZSBOVUxMXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXROdWxsUmVzdWx0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX251bGxBcml0aG1ldGljKVxyXG4gICAgICB0aGlzLl9pc051bGwgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJlc2V0IHJlc3VsdCB0byBiZSBOVUxMXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICByZXNldE51bGxSZXN1bHQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fbnVsbEFyaXRobWV0aWMpIHtcclxuICAgICAgdGhpcy5faXNOdWxsID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY2hlY2sgaWYgdGhlIHJlc3VsdCBtdXN0IGJlIG51bGxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzTnVsbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc051bGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IGEgbnVtYmVyIHJlcHJlc2VudGVkIGluIDEgYnl0ZSBmcm9tIHRoZSBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBudW1iZXJcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGdldDFCeXRlTnVtYmVyKCk6IG51bWJlciB7XHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSAodGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSA+PSAwKSA/ICg8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pIDogKDI1NiArIDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSk7XHJcbiAgICB0aGlzLl9wb3NJZHggKz0gMTtcclxuXHJcbiAgICByZXR1cm4gbnVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhIG51bWJlciByZXByZXNlbnRlZCBpbiAyIGJ5dGVzIGZyb20gdGhlIGV4cHJlc3Npb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIG51bWJlclxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgZ2V0MkJ5dGVOdW1iZXIoKTogbnVtYmVyIHtcclxuICAgIGxldCBjMTogbnVtYmVyID0gKHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKSA6ICgyNTYgKyA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IDE7XHJcblxyXG4gICAgbGV0IGMyOiBudW1iZXIgPSAodGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSA+PSAwKSA/ICg8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pIDogKDI1NiArIDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSk7XHJcbiAgICB0aGlzLl9wb3NJZHggKz0gMTtcclxuXHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSA8bnVtYmVyPih0aGlzLl9sb3dIaWdoID8gRXhwcmVzc2lvbkV2YWx1YXRvci5NS19TSFJUKDxudW1iZXI+YzIsIDxudW1iZXI+YzEpIDogRXhwcmVzc2lvbkV2YWx1YXRvci5NS19TSFJUKDxudW1iZXI+YzEsIDxudW1iZXI+YzIpKTtcclxuICAgIHJldHVybiBudW07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IGEgbnVtYmVyIHJlcHJlc2VudGVkIGluIDQgYnl0ZSBmcm9tIHRoZSBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+dGhlIG51bWJlcjwvcmV0dXJucz5cclxuICBnZXQ0Qnl0ZU51bWJlcigpOiBudW1iZXIge1xyXG4gICAgbGV0IGM0OiBudW1iZXIgPSAodGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSA+PSAwKSA/ICg8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pIDogKDI1NiArIDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSk7XHJcbiAgICB0aGlzLl9wb3NJZHggKz0gMTtcclxuXHJcbiAgICBsZXQgYzM6IG51bWJlciA9ICh0aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdID49IDApID8gKDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSkgOiAoMjU2ICsgPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKTtcclxuICAgIHRoaXMuX3Bvc0lkeCArPSAxO1xyXG5cclxuICAgIGxldCBjMjogbnVtYmVyID0gKHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdKSA6ICgyNTYgKyA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IDE7XHJcblxyXG4gICAgbGV0IGMxOiBudW1iZXIgPSAodGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSA+PSAwKSA/ICg8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF0pIDogKDI1NiArIDxudW1iZXI+dGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4XSk7XHJcbiAgICB0aGlzLl9wb3NJZHggKz0gMTtcclxuXHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSB0aGlzLl9sb3dIaWdoID8gRXhwcmVzc2lvbkV2YWx1YXRvci5NS19MT05HKGMxLCBjMiwgYzMsIGM0KSA6IEV4cHJlc3Npb25FdmFsdWF0b3IuTUtfTE9ORyhjNCwgYzMsIGMyLCBjMSk7XHJcbiAgICByZXR1cm4gbnVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhbHBoYSBzdHJpbmcgZnJvbSB0aGUgZXhwcmVzc2lvbiBieSBpdHMgbGVuZ3RoXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxlblwiPiAgICAgICAgbGVuZ3RoIG9mIHN0cmluZyB0byBleHRyYWN0PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInVwZGF0ZUlkeFwiPiAgdGhlIGN1cnJlbnQgcG9zaXRpb24gd2lsbCBiZSBpbmNyZW1lbnRlZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpc1VuaWNvZGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIG51bWJlcjwvcmV0dXJucz5cclxuICBnZXRTdHJpbmcobGVuOiBudW1iZXIsIHVwZGF0ZUlkeDogYm9vbGVhbiwgaXNVbmljb2RlOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGxldCBzdHI6IHN0cmluZyA9ICcnO1xyXG4gICAgbGV0IGJ5dGVzOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKGlzVW5pY29kZSA9PT0gZmFsc2UpIHtcclxuICAgICAgYnl0ZXMgPSBsZW47XHJcbiAgICAgIGxldCB0bXBDaGFyOiBzdHJpbmdbXSA9IG5ldyBBcnJheTxzdHJpbmc+KHRoaXMuX2V4cEJ5dGVzLmxlbmd0aCk7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLl9leHBCeXRlcy5sZW5ndGg7IGkgPSBpICsgMSlcclxuICAgICAgICB0bXBDaGFyW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9leHBCeXRlc1tpXSk7XHJcblxyXG4gICAgICBzdHIgPSBOU3RyaW5nLkZyb21DaGFycyh0bXBDaGFyLCB0aGlzLl9wb3NJZHgsIGxlbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBieXRlcyA9IGxlbiAqIDI7XHJcblxyXG4gICAgICBsZXQgdG1wOiBVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpO1xyXG5cclxuICAgICAgbGV0IGluY3JlbWVudDogbnVtYmVyID0gKCF0aGlzLl9sb3dIaWdoKSA/IENvbnN0SW50ZXJmYWNlLkJZVEVTX0lOX0NIQVIgOiAxO1xyXG5cclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gdGhpcy5fcG9zSWR4OyBpIDwgdGhpcy5fcG9zSWR4ICsgYnl0ZXM7IGkgPSBpICsgaW5jcmVtZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9sb3dIaWdoKSB7XHJcbiAgICAgICAgICB0bXBbaSAtIHRoaXMuX3Bvc0lkeF0gPSA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW2kgKyAxXTtcclxuICAgICAgICAgIHRtcFtpICsgMSAtIHRoaXMuX3Bvc0lkeF0gPSA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW2ldO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgdG1wW2kgLSB0aGlzLl9wb3NJZHhdID0gPG51bWJlcj50aGlzLl9leHBCeXRlc1tpXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBzdHIgPSBFbmNvZGluZy5Vbmljb2RlLkdldFN0cmluZyh0bXAsIDAsIHRtcC5sZW5ndGgpO1xyXG4gICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIEV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2coZXgpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgdGhyb3cgZXg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh1cGRhdGVJZHgpIHtcclxuICAgICAgdGhpcy5fcG9zSWR4ICs9IGJ5dGVzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG4gIC8vLyBUbyBlbmhhbmNlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgcnVudGltZSBleHByZXNzaW9uIGV2YWx1YXRvcixcclxuICAvLy8gdGhlIGZ1bmN0aW9uIHBvaW50ZXIgdG8gdGhlIHJlbGV2YW50IGVudHJ5IGluIHRoZSBFWFBfT1BfVEFCIGlzIHNhdmVkXHJcbiAgLy8vIGluIHRoZSBwb2xpc2hlZCBleHByZXNzaW9uIGluc3RlYWQgb2YgcmVmZXJlbmNpbmcgaXQgZWFjaCB0aW1lIHdlIG5lZWRcclxuICAvLy8gaXQgaW4gcnVudGltZS4gQnV0IGluIEJyb3dzZXIgQ2xpZW50IHdlIGRvIG5vdCAocmF0aGVyIHdlIGNhbm5vdCkgdXNlXHJcbiAgLy8vIHRoaXMgZnVuY3Rpb24gcG9pbnRlciBhbmQgc28gd2UgaGF2ZSB0byBza2lwIGl0LlxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBUbyBlbmhhbmNlIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgcnVudGltZSBleHByZXNzaW9uIGV2YWx1YXRvcixcclxuICAvLy8gICB0aGUgZnVuY3Rpb24gcG9pbnRlciB0byB0aGUgcmVsZXZhbnQgZW50cnkgaW4gdGhlIEVYUF9PUF9UQUIgaXMgc2F2ZWRcclxuICAvLy8gICBpbiB0aGUgcG9saXNoZWQgZXhwcmVzc2lvbiBpbnN0ZWFkIG9mIHJlZmVyZW5jaW5nIGl0IGVhY2ggdGltZSB3ZSBuZWVkXHJcbiAgLy8vICAgaXQgaW4gcnVudGltZS4gQnV0IGluIEJyb3dzZXIgQ2xpZW50IHdlIGRvIG5vdCAocmF0aGVyIHdlIGNhbm5vdCkgdXNlXHJcbiAgLy8vICAgdGhpcyBmdW5jdGlvbiBwb2ludGVyIGFuZCBzbyB3ZSBoYXZlIHRvIHNraXAgaXQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHNraXBPcEZ1bmN0aW9uUHRyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QRVJfRlVOQ19QVFJfTEVOO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhbiBvcGVyYXRvciBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBjdXJyZW50IG9wZXJhdG9yPC9yZXR1cm5zPlxyXG4gIGdldE9wQ29kZSgpOiBudW1iZXIge1xyXG4gICAgbGV0IHRtcDogbnVtYmVyW10gPSBbXHJcbiAgICAgIHRoaXMuX2xvd0hpZ2ggPyB0aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHhdIDogdGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4ICsgMV0sIHRoaXMuX2xvd0hpZ2ggPyB0aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHggKyAxXSA6IHRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeF1cclxuICAgIF07XHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSAodG1wWzFdID49IDApID8gKDxudW1iZXI+dG1wWzFdKSA6ICgyNTYgKyA8bnVtYmVyPnRtcFsxXSk7XHJcbiAgICBudW0gPDw9IDg7XHJcbiAgICBudW0gPSAobnVtIHwgKCh0bXBbMF0gPj0gMCkgPyAoPG51bWJlcj50bXBbMF0pIDogKDI1NiArIDxudW1iZXI+dG1wWzBdKSkpO1xyXG4gICAgdGhpcy5fcG9zSWR4ICs9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QRVJfTEVOO1xyXG5cclxuICAgIHRoaXMuc2tpcE9wRnVuY3Rpb25QdHIoKTtcclxuXHJcbiAgICByZXR1cm4gbnVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCBhIHZhcmlhYmxlIGlkeCBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSB2YXJpYWJsZSBpZHg8L3JldHVybnM+XHJcbiAgZ2V0VmFySWR4KCk6IG51bWJlciB7XHJcbiAgICBsZXQgZmxpcDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBpZiAodGhpcy5fbG93SGlnaClcclxuICAgICAgZmxpcCA9IDEgLSBmbGlwO1xyXG5cclxuICAgIC8vIHRoZSBmaXJzdCBieXRlIGlzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBoZXJlXHJcbiAgICBsZXQgbnVtOiBudW1iZXIgPSAodGhpcy5fZXhwQnl0ZXNbdGhpcy5fcG9zSWR4ICsgZmxpcF0gPj0gMCkgPyAoPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHggKyBmbGlwXSkgOiAoMjU2ICsgPG51bWJlcj50aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHggKyBmbGlwXSk7XHJcbiAgICBudW0gPDw9IDg7XHJcbiAgICBmbGlwID0gMSAtIGZsaXA7XHJcbiAgICBudW0gfD0gKCh0aGlzLl9leHBCeXRlc1t0aGlzLl9wb3NJZHggKyBmbGlwXSA+PSAwKSA/ICg8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeCArIGZsaXBdKSA6ICgyNTYgKyA8bnVtYmVyPnRoaXMuX2V4cEJ5dGVzW3RoaXMuX3Bvc0lkeCArIGZsaXBdKSk7XHJcbiAgICB0aGlzLl9wb3NJZHggKz0gRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BFUl9MRU47XHJcblxyXG4gICAgcmV0dXJuIG51bTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIEdldCBhIE1hZ2ljIE51bWJlciBmcm9tIHRoZSBleHByZXNzaW9uXHJcbi8vLyA8L3N1bW1hcnk+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwibGVuXCI+IGxlbmd0aCBvZiB0aGUgbWFnaWMgbnVtYmVyIHdpdGhpbiB0aGUgZXhwcmVzc2lvbjwvcGFyYW0+XHJcbi8vLyA8cGFyYW0gbmFtZSA9IFwidXBkYXRlSWR4XCI+ICB0aGUgY3VycmVudCBwb3NpdGlvbiB3aWxsIGJlIGluY3JlbWVudGVkPC9wYXJhbT5cclxuLy8vIDxyZXR1cm5zPiB0aGUgTWFnaWMgTnVtYmVyPC9yZXR1cm5zPlxyXG4gIGdldE1hZ2ljTnVtYmVyKGxlbjogbnVtYmVyLCB1cGRhdGVJZHg6IGJvb2xlYW4pOiBOVU1fVFlQRSB7XHJcbiAgICBsZXQgbWdOdW06IE5VTV9UWVBFID0gbmV3IE5VTV9UWVBFKHRoaXMuX2V4cEJ5dGVzLCB0aGlzLl9wb3NJZHgsIGxlbik7XHJcbiAgICBpZiAodXBkYXRlSWR4KVxyXG4gICAgICB0aGlzLl9wb3NJZHggKz0gbGVuO1xyXG4gICAgcmV0dXJuIG1nTnVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNraXBzIGFuIG9wZXJhdG9yIHdpdGhpbiBhbiBleHByZXNzaW9uIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNraXBPcGVyYXRvcigpOiB2b2lkIHtcclxuICAgICAgbGV0IGFyZ3NSZW1haW46IG51bWJlciA9IDE7XHJcbiAgICAgIGxldCBleHBEZXNjOiBFeHBEZXNjO1xyXG4gICAgICBsZXQgbGVuO1xyXG5cclxuICAgICAgd2hpbGUgKGFyZ3NSZW1haW4gPiAwKSB7XHJcbiAgICAgICAgICBhcmdzUmVtYWluLS07XHJcbiAgICAgICAgICBsZXQgb3BDb2RlOiBudW1iZXIgPSB0aGlzLmdldE9wQ29kZSgpO1xyXG4gICAgICAgICAgc3dpdGNoIChvcENvZGUpIHtcclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgIC8vIFNraXAgU3RyaW5nIHZhbHVlXHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0E6XHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9IOlxyXG4gICAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc0lkeCArPSAobGVuICogQ29uc3RJbnRlcmZhY2UuQllURVNfSU5fQ0hBUik7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBzZXJ2ZXIgc2VuZHMgdXMgYm90aCBVbmljb2RlIHN0cmluZyBBbnNpIHN0cmluZyBmb3JcclxuICAgICAgICAgICAgICAgICAgLy8gZWFjaCBzdHJpbmcgaW4gdGhlIGV4cHJlc3Npb24sIGFuZCB0aGUgY2xpZW50IHVzZXMgb25seSB1bmljb2RlLFxyXG4gICAgICAgICAgICAgICAgICAvLyB3ZSB3aWxsIGRpcmVnYXJkIHRoZSBBbnNpIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLmdldDRCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc0lkeCArPSBsZW47XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0VYVF9BOlxyXG4gICAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc0lkeCArPSBsZW47XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgIC8vIFNraXAgTWFnaWMgTnVtYmVyIHZhbHVlXHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9OOlxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVDpcclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0Q6XHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9NOlxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfSzpcclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0U6XHJcbiAgICAgICAgICAgICAgICAgIGxlbiA9IHRoaXMuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zSWR4ICs9IGxlbjtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICAgICAgLy8gU2tpcCBQcm9nIGFuZCBGaWxlIGxpdGVyYWxzIHdoaWNoIGFsc28gaW5jbHVkZSBhIGNvbXBvbmVudCByZWZlcmVuY2VcclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgICAgICAgICAgICBjYXNlIEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX0Y6XHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9QOlxyXG4gICAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLmdldDJCeXRlTnVtYmVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc0lkeCArPSBsZW47XHJcbiAgICAgICAgICAgICAgICAgIGxlbiA9IHRoaXMuZ2V0MkJ5dGVOdW1iZXIoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zSWR4ICs9IGxlbjtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICAgICAgLy8gU2tpcCBMb2dpY2FsIFZhbHVlXHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9MOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gMjtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICAgICAgICAgLy8gU2tpcCB2YXJpYWJsZVxyXG4gICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVjpcclxuICAgICAgICAgICAgICAgICAgLy8gaWYgc29tZXRoaW5nIHdyb25nIHdpdGggZXNjYXBlIHZhcmlhYmxlLCBjaGFuZ2UgdGhpcyBudW1iZXIuXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3Bvc0lkeCArPSAoRXhwcmVzc2lvbkV2YWx1YXRvci5QQVJFTlRfTEVOICsgRXhwcmVzc2lvbkV2YWx1YXRvci5MT05HX09CSkVDVF9MRU4pO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgY2FzZSBFeHByZXNzaW9uSW50ZXJmYWNlLkVYUF9PUF9GT1JNOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gKEV4cHJlc3Npb25FdmFsdWF0b3IuUEFSRU5UX0xFTiArIEV4cHJlc3Npb25FdmFsdWF0b3IuTE9OR19PQkpFQ1RfTEVOKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfVkFSOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gKEV4cHJlc3Npb25FdmFsdWF0b3IuUEFSRU5UX0xFTiArIEV4cHJlc3Npb25FdmFsdWF0b3IuTE9OR19PQkpFQ1RfTEVOKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgIGNhc2UgRXhwcmVzc2lvbkludGVyZmFjZS5FWFBfT1BfUklHSFRfTElURVJBTDpcclxuICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gbGVuO1xyXG4gICAgICAgICAgICAgICAgICAvLyBTa2lwIGV4dHJhIHVudXNlZCBzdHJpbmcgc3RvcmVkIGFmdGVyIGxpdGVyYWxcclxuICAgICAgICAgICAgICAgICAgbGVuID0gdGhpcy5nZXQyQnl0ZU51bWJlcigpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9wb3NJZHggKz0gbGVuO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgLyogY2FzZSBFWFBfT1BfQUNUOlxyXG4gICAgICAgICAgICAgICBwb3NJZHhfICs9MjtcclxuICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICBjYXNlIEVYUF9PUF9LQkQ6XHJcbiAgICAgICAgICAgICAgIHBvc0lkeF8gKys7XHJcbiAgICAgICAgICAgICAgIGJyZWFrOyAqL1xyXG5cclxuICAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgICAgICAgIC8vIEN1cnJlbnQgb3BlcmF0b3IgaXMgYSBmdW5jdGlvbiwgc28gd2UganVzdCBuZWVkIHRvIHVwZGF0ZVxyXG4gICAgICAgICAgICAgIC8vICB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBza2lwXHJcbiAgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgZXhwRGVzYyA9IEV4cHJlc3Npb25EaWN0LmV4cERlc2Nbb3BDb2RlXTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGV4cERlc2MuQXJnQ291bnRfIDwgMClcclxuICAgICAgICAgICAgICAgICAgICAgIGFyZ3NSZW1haW4gKz0gdGhpcy5nZXQxQnl0ZU51bWJlcigpO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcmdzUmVtYWluICs9IGV4cERlc2MuQXJnQ291bnRfO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgRHluYW1pY09wZXJhdGlvbiB7XHJcbiAgYXJnQ291bnRfOiBudW1iZXIgPSAwO1xyXG4gIG9wQ29kZV86IG51bWJlciA9IEV4cHJlc3Npb25JbnRlcmZhY2UuRVhQX09QX05PTkU7XHJcbn1cclxuXHJcbiJdfQ==