jeiwgyBnZXRfdXNlcl9pbmZvKHVzZXJpZCkg5ou/5aeT5ZCNDQogICAgICAgICAgNS4g5YaZIFJlZGlzIHFyY29kZTpzY2FuOnt0aWNrZXR9IChUVEwgMTIwcykNCiAgICAgICAgICA2LiAqKmF1dG9fY29uZmlybT1UcnVlIOaXtiznm7TmjqXliJvlu7ogdG9rZW4gKyDlhpkgcXJjb2RlOmNvbmZpcm06e3RpY2tldH0qKg0KICAgICAgICAgICAgICjliY3nq68gcG9sbCDnq4vljbPmi7/liLAgc3RhdHVzPWNvbmZpcm1lZCArIHRva2VuLOiHquWKqOi3s+WQjuWPsCkNCg0KICAgICAgICBBcmdzOg0KICAgICAgICAgICAgdGlja2V0OiDmiavnoIHnmbvlvZXnpajmja4NCiAgICAgICAgICAgIGNvZGU6IOS8geW+riBPQXV0aDIg5o6I5p2DIGNvZGUNCiAgICAgICAgICAgIGF1dG9fY29uZmlybTog5piv5ZCm5omr56CB5ZCO6Ieq5Yqo55m75b2VKOm7mOiupCBUcnVlKQ0KDQogICAgICAgIFJldHVybnM6DQogICAgICAgICAgICBEaWN0OiDljIXlkKsgc3VjY2VzcyAvIG1lc3NhZ2UgLyBlbXBsb3llZV9pZCAvIG5hbWUNCg0KICAgICAgICBSYWlzZXM6DQogICAgICAgICAgICBWYWx1ZUVycm9yOiDnpajmja7ov4fmnJ/miJbml6DmlYgNCiAgICAgICAgIiIiDQogICAgICAgICMgMS4g5qCh6aqMIHRpY2tldCDlrZjlnKgNCiAgICAgICAgdGlja2V0X2RhdGEgPSBhd2FpdCBzZWxmLnJlZGlzLmdldChzZWxmLl90aWNrZXRfa2V5KHRpY2tldCkpDQogICAgICAgIGlmIG5vdCB0aWNrZXRfZGF0YToNCiAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKGYi5omr56CB5aSx6LSlOiB0aWNrZXQg5bey6L+H5pyf5oiW5LiN5a2Y5ZyoIHRpY2tldD17dGlja2V0Wzo4XX0uLi4iKQ0KICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigi5omr56CB56Wo5o2u5bey6L+H5pyf5oiW5LiN5a2Y5ZyoIikNCg0KICAgICAgICAjIDIuIOiOt+WPlueUqOaIt+i6q+S7vQ0KICAgICAgICBlbXBsb3llZV9pZCA9ICIiDQogICAgICAgIG5hbWUgPSAiIg0KICAgICAgICBpZiBfZGV2X21vZGVfZW5hYmxlZCgpOg0KICAgICAgICAgICAgIyBkZXYg5qih5byPOiDnlKjpooTorr4gZGV2IOeUqOaItw0KICAgICAgICAgICAgIyDmj5Dlj5YgY29kZSDkuK3nmoQgdXNlcmlkKOe6puWumiBkZXYg5qih5byP5LiLIGNvZGUg5b2i5aaCICJkZXY6ZGV2LXVzZXItMDAxIikNCiAgICAgICAgICAgIGVtcGxveWVlX2lkLCBuYW1lID0gc2VsZi5fZGV2X2V4dHJhY3RfdXNlcihjb2RlKQ0KICAgICAgICAgICAgbG9nZ2VyLmluZm8oDQogICAgICAgICAgICAgICAgZiJbREVWXSDmiavnoIHlm57osIPmqKHmi586IHRpY2tldD17dGlja2V0Wzo4XX0uLi4sICINCiAgICAgICAgICAgICAgICBmImVtcGxveWVlX2lkPXtlbXBsb3llZV9pZH0sIG5hbWU9e25hbWV9Ig0KICAgICAgICAgICAgKQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgIyDnlJ/kuqfmqKHlvI86IOiwg+S8geW+riBPQXV0aCBBUEkNCiAgICAgICAgICAgIGVtcGxveWVlX2lkLCBuYW1lID0gYXdhaXQgc2VsZi5fZmV0Y2hfb2F1dGhfdXNlcihjb2RlKQ0KDQogICAgICAgICMgMy4g5YaZIFJlZGlzIOaJq+eggee7k+aenChUVEwgMTIwcyznrYnlvoUgY29uZmlybSDnq6/ngrnmtojotLkpDQogICAgICAgIHNjYW5fcGF5bG9hZCA9IHsNCiAgICAgICAgICAgICJlbXBsb3llZV9pZCI6IGVtcGxveWVlX2lkLA0KICAgICAgICAgICAgIm5hbWUiOiBuYW1lLA0KICAgICAgICAgICAgInNjYW5uZWRfYXQiOiBkYXRldGltZS5ub3coKS5pc29mb3JtYXQoKSwNCiAgICAgICAgfQ0KICAgICAgICBhd2FpdCBzZWxmLnJlZGlzLnNldGV4KA0KICAgICAgICAgICAgc2VsZi5fc2Nhbl9rZXkodGlja2V0KSwNCiAgICAgICAgICAgIFNDQU5fVFRMX1NFQ09ORFMsDQogICAgICAgICAgICBqc29uLmR1bXBzKHNjYW5fcGF5bG9hZCwgZW5zdXJlX2FzY2lpPUZhbHNlKSwNCiAgICAgICAgKQ0KDQogICAgICAgICMgNC4gdjAuNy4xICMxMjA6IOaJq+eggeaIkOWKnyA9IOiHquWKqOeZu+W9lSjkuI3lho3pnIDopoEgY29uZmlybSkNCiAgICAgICAgIyDpu5jorqQgcm9sZXM9WyJ1c2VyIl0s5YW25LuW6KeS6Imy55So5oi35ZyoIHBvcnRhbCDnq6/pgInmi6kNCiAgICAgICAgaWYgYXV0b19jb25maXJtOg0KICAgICAgICAgICAgZnJvbSBhcHAuc2VydmljZXMudG9rZW5fc2VydmljZSBpbXBvcnQgVG9rZW5TZXJ2aWNlDQogICAgICAgICAgICB0b2tlbl9zZXJ2aWNlID0gVG9rZW5TZXJ2aWNlKHNlbGYucmVkaXMpDQogICAgICAgICAgICByb2xlcyA9IFsidXNlciJdDQogICAgICAgICAgICB0b2tlbiA9IGF3YWl0IHRva2VuX3NlcnZpY2UuY3JlYXRlX3Rva2VuKA0KICAgICAgICAgICAgICAgIGVtcGxveWVlX2lkPWVtcGxveWVlX2lkLA0KICAgICAgICAgICAgICAgIG5hbWU9bmFtZSwNCiAgICAgICAgICAgICAgICByb2xlcz1yb2xlcywNCiAgICAgICAgICAgICAgICBsb2dpbl9zb3VyY2U9InFyY29kZSIsDQogICAgICAgICAgICApDQogICAgICAgICAgICBjb25maXJtX3BheWxvYWQgPSB7DQogICAgICAgICAgICAgICAgInRva2VuIjogdG9rZW4sDQogICAgICAgICAgICAgICAgImNvbmZpcm1lZF9hdCI6IGRhdGV0aW1lLm5vdygpLmlzb2Zvcm1hdCgpLA0KICAgICAgICAgICAgICAgICJyb2xlcyI6IHJvbGVzLA0KICAgICAgICAgICAgICAgICJlbXBsb3llZV9pZCI6IGVtcGxveWVlX2lkLA0KICAgICAgICAgICAgICAgICJuYW1lIjogbmFtZSwNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGF3YWl0IHNlbGYucmVkaXMuc2V0ZXgoDQogICAgICAgICAgICAgICAgc2VsZi5fY29uZmlybV9rZXkodGlja2V0KSwNCiAgICAgICAgICAgICAgICBDT05GSVJNX1RUTF9TRUNPTkRTLA0KICAgICAgICAgICAgICAgIGpzb24uZHVtcHMoY29uZmlybV9wYXlsb2FkLCBlbnN1cmVfYXNjaWk9RmFsc2UpLA0KICAgICAgICAgICAgKQ0KICAgICAgICAgICAgbG9nZ2VyLmluZm8oDQogICAgICAgICAgICAgICAgZiLmiavnoIHoh6rliqjnmbvlvZXmiJDlip86IHRpY2tldD17dGlja2V0Wzo4