ZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2NlcnRnZW4ucHkgYi9leGFtcGxlcy9jZXJ0Z2VuLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzN2QwYzcKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9jZXJ0Z2VuLnB5CkBAIC0wLDAgKzEsODAgQEAKKyMKKyMgY2VydGdlbi5weQorIworIyBDb3B5cmlnaHQgKEMpIE1hcnRpbiBTavZncmVuIGFuZCBBQiBTdHJha3QgMjAwMSwgQWxsIHJpZ2h0cyByZXNlcnZlZAorIworIyAkSWQ6IGNlcnRnZW4ucHksdiAxLjIgMjAwNC8wNy8yMiAxMjowMToyNSBtYXJ0aW4gRXhwICQKKyMKKyIiIgorQ2VydGlmaWNhdGUgZ2VuZXJhdGlvbiBtb2R1bGUuCisiIiIKKworZnJvbSBPcGVuU1NMIGltcG9ydCBjcnlwdG8KKworVFlQRV9SU0EgPSBjcnlwdG8uVFlQRV9SU0EKK1RZUEVfRFNBID0gY3J5cHRvLlRZUEVfRFNBCisKK2RlZiBjcmVhdGVLZXlQYWlyKHR5cGUsIGJpdHMpOgorICAgICIiIgorICAgIENyZWF0ZSBhIHB1YmxpYy9wcml2YXRlIGtleSBwYWlyLgorCisgICAgQXJndW1lbnRzOiB0eXBlIC0gS2V5IHR5cGUsIG11c3QgYmUgb25lIG9mIFRZUEVfUlNBIGFuZCBUWVBFX0RTQQorICAgICAgICAgICAgICAgYml0cyAtIE51bWJlciBvZiBiaXRzIHRvIHVzZSBpbiB0aGUga2V5CisgICAgUmV0dXJuczogICBUaGUgcHVibGljL3ByaXZhdGUga2V5IHBhaXIgaW4gYSBQS2V5IG9iamVjdAorICAgICIiIgorICAgIHBrZXkgPSBjcnlwdG8uUEtleSgpCisgICAgcGtleS5nZW5lcmF0ZV9rZXkodHlwZSwgYml0cykKKyAgICByZXR1cm4gcGtleQorCitkZWYgY3JlYXRlQ2VydFJlcXVlc3QocGtleSwgZGlnZXN0PSJtZDUiLCAqKm5hbWUpOgorICAgICIiIgorICAgIENyZWF0ZSBhIGNlcnRpZmljYXRlIHJlcXVlc3QuCisKKyAgICBBcmd1bWVudHM6IHBrZXkgICAtIFRoZSBrZXkgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHJlcXVlc3QKKyAgICAgICAgICAgICAgIGRpZ2VzdCAtIERpZ2VzdGlvbiBtZXRob2QgdG8gdXNlIGZvciBzaWduaW5nLCBkZWZhdWx0IGlzIG1kNQorICAgICAgICAgICAgICAgKipuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHN1YmplY3Qgb2YgdGhlIHJlcXVlc3QsIHBvc3NpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMgYXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgICBDICAgICAtIENvdW50cnkgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICBTVCAgICAtIFN0YXRlIG9yIHByb3ZpbmNlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTCAgICAgLSBMb2NhbGl0eSBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgIE8gICAgIC0gT3JnYW5pemF0aW9uIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT1UgICAgLSBPcmdhbml6YXRpb25hbCB1bml0IG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ04gICAgLSBDb21tb24gbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbEFkZHJlc3MgLSBFLW1haWwgYWRkcmVzcworICAgIFJldHVybnM6ICAgVGhlIGNlcnRpZmljYXRlIHJlcXVlc3QgaW4gYW4gWDUwOVJlcSBvYmplY3QKKyAgICAiIiIKKyAgICByZXEgPSBjcnlwdG8uWDUwOVJlcSgpCisgICAgc3ViaiA9IHJlcS5nZXRfc3ViamVjdCgpCisKKyAgICBmb3IgKGtleSx2YWx1ZSkgaW4gbmFtZS5pdGVtcygpOgorICAgICAgICBzZXRhdHRyKHN1YmosIGtleSwgdmFsdWUpCisKKyAgICByZXEuc2V0X3B1YmtleShwa2V5KQorICAgIHJlcS5zaWduKHBrZXksIGRpZ2VzdCkKKyAgICByZXR1cm4gcmVxCisKK2RlZiBjcmVhdGVDZXJ0aWZpY2F0ZShyZXEsIChpc3N1ZXJDZXJ0LCBpc3N1ZXJLZXkpLCBzZXJpYWwsIChub3RCZWZvcmUsIG5vdEFmdGVyKSwgZGlnZXN0PSJtZDUiKToKKyAgICAiIiIKKyAgICBHZW5lcmF0ZSBhIGNlcnRpZmljYXRlIGdpdmVuIGEgY2VydGlmaWNhdGUgcmVxdWVzdC4KKworICAgIEFyZ3VtZW50czogcmVxICAgICAgICAtIENlcnRpZmljYXRlIHJlcWV1c3QgdG8gdXNlCisgICAgICAgICAgICAgICBpc3N1ZXJDZXJ0IC0gVGhlIGNlcnRpZmljYXRlIG9mIHRoZSBpc3N1ZXIKKyAgICAgICAgICAgICAgIGlzc3VlcktleSAgLSBUaGUgcHJpdmF0ZSBrZXkgb2YgdGhlIGlzc3VlcgorICAgICAgICAgICAgICAgc2VyaWFsICAgICAtIFNlcmlhbCBudW1iZXIgZm9yIHRoZSBjZXJ0aWZpY2F0ZQorICAgICAgICAgICAgICAgbm90QmVmb3JlICAtIFRpbWVzdGFtcCAocmVsYXRpdmUgdG8gbm93KSB3aGVuIHRoZSBjZXJ0aWZpY2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0cyBiZWluZyB2YWxpZAorICAgICAgICAgICAgICAgbm90QWZ0ZXIgICAtIFRpbWVzdGFtcCAocmVsYXRpdmUgdG8gbm93KSB3aGVuIHRoZSBjZXJ0aWZpY2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BzIGJlaW5nIHZhbGlkCisgICAgICAgICAgICAgICBkaWdlc3QgICAgIC0gRGlnZXN0IG1ldGhvZCB0byB1c2UgZm9yIHNpZ25pbmcsIGRlZmF1bHQgaXMgbWQ1CisgICAgUmV0dXJuczogICBUaGUgc2lnbmVkIGNlcnRpZmljYXRlIGluIGFuIFg1MDkgb2JqZWN0CisgICAgIiIiCisgICAgY2VydCA9IGNyeXB0by5YNTA5KCkKKyAgICBjZXJ0LnNldF9zZXJpYWxfbnVtYmVyKHNlcmlhbCkKKyAgICBjZXJ0LmdtdGltZV9hZGpfbm90QmVmb3JlKG5vdEJlZm9yZSkKKyAgICBjZXJ0LmdtdGltZV9hZGpfbm90QWZ0ZXIobm90QWZ0ZXIpCisgICAgY2VydC5zZXRfaXNzdWVyKGlzc3VlckNlcnQuZ2V0X3N1YmplY3QoKSkKKyAgICBjZXJ0LnNldF9zdWJqZWN0KHJlcS5nZXRfc3ViamVjdCgpKQorICAgIGNlcnQuc2V0X3B1YmtleShyZXEuZ2V0X3B1YmtleSgpKQorICAgIGNlcnQuc2lnbihpc3N1ZXJLZXksIGRpZ2VzdCkKKyAgICByZXR1cm4gY2VydAorCg==