ZGlmZiAtLWdpdCBhL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5jIGIvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMKaW5kZXggYzg2NjkwYS4uN2I5NjE4MyAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMKKysrIGIvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMKQEAgLTgsNDEgKzgsNjkgQEAKICNpbmNsdWRlICJzcF91cGdyYWRlLmgiCiAjaW5jbHVkZSAiLi4vc3lzX2h3L2Rydl91c2FydC5oIgogCitzdGF0aWMgdWludDggcnhCdWZbNTEyXSA9IHswfTsKK3N0YXRpYyB1aW50MTYgcnhCdWZMZW4gPSAwOworCiBzdGF0aWMgdm9pZCBzcF91c2FydF9zZW5kKHNwX3Bvc190KiBwb3MsIHNwX3Byb3RvY29sX3JlcXVlc3RfdCogcmVxKQogewotICB1aW50OCBzZW5kQnVmZlsyNjRdOwotICBNRU1DTEVBUihzZW5kQnVmZiwgc2l6ZW9mKHNlbmRCdWZmKSk7CisgIHVpbnQ4IGJ1ZlsyNjRdOworICBNRU1DTEVBUihidWYsIHNpemVvZihidWYpKTsKKyAgc3BfcHJvdG9jb2xfY3JjKCh1aW50OCopcmVxICsyLCByZXEtPmRhdGFsZW4sICh1aW50OCopcmVxICsyICtyZXEtPmRhdGFsZW4pOworICByZXEtPmRhdGFsZW4gKz0gMjsKKyAgTUVNQ1BZKGJ1ZiwgcmVxLCByZXEtPmRhdGFsZW4rMik7CisgIHVzYXJ0X3NlbmQoYnVmLCByZXEtPmRhdGFsZW4rMik7CiAKICAgcG9zLT5sYXN0X2NvbW1fc3RhdHVzLmNvbW1hbmQgPSByZXEtPmV4Y21kOwogICBwb3MtPmxhc3RfY29tbV9zdGF0dXMuc2VuZHRpbWUgPSBzcF9nZXRfdGlja2VyKCk7Ci0KLSAgc3BfcHJvdG9jb2xfY3JjKCh1aW50OCopcmVxICsyLCByZXEtPmRhdGFsZW4sICh1aW50OCopcmVxICsyICtyZXEtPmRhdGFsZW4pOwotICByZXEtPmRhdGFsZW4gKz0gMjsKLSAgTUVNQ1BZKHNlbmRCdWZmLCByZXEsIHJlcS0+ZGF0YWxlbisyKTsKLSAgdXNhcnRfc2VuZChzZW5kQnVmZiwgcmVxLT5kYXRhbGVuKzIpOworICBNRU1DTEVBUihyeEJ1ZixzaXplb2YgcnhCdWYpOworICByeEJ1ZkxlbiA9IDA7CiB9CiAKLXN0YXRpYyB1aW50OCBzcF91c2FydF9yZWN2KHNwX3Bvc190KiBwb3MsIHNwX3Byb3RvY29sX3Jlc3BvbnNlX3QqIHJlc3AsIGludDMyIHRpbWVvdXRfbXMpCitzdGF0aWMgdWludDggc3BfdXNhcnRfcmVjdihzcF9wb3NfdCogcG9zLCBzcF9wcm90b2NvbF9yZXNwb25zZV90KiByZXNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMiB0aW1lb3V0X21zKQogewotICB1aW50MzIgdGljayA9IDA7CisgIHVpbnQzMiB0aWNrOworICB1aW50MTYgbGVuOworICBpbnQxNiBkYXRhbGVuOworICB1aW50OCBjcmNbMl07CisgIHVpbnQ4IHRlbXBbc2l6ZW9mKHNwX3Byb3RvY29sX3Jlc3BvbnNlX3QpXTsKICAgdGljayA9IHNwX2dldF90aWNrZXIoKTsKKyAgTUVNQ0xFQVIodGVtcCxzaXplb2YgdGVtcCk7CiAgIHdoaWxlKDEpCiAgIHsKLSAgICBNRU1DTEVBUihyZXNwLCBzaXplb2Yoc3BfcHJvdG9jb2xfcmVzcG9uc2VfdCkpOwotICAgIHVzYXJ0X3JlYWQoKHU4KilyZXNwLCBzaXplb2Yoc3BfcHJvdG9jb2xfcmVzcG9uc2VfdCkpOwotICAgIGlmKHBvcy0+bGFzdF9jb21tX3N0YXR1cy5jb21tYW5kID09IHJlc3AtPmV4Y21kKQorCisgICAgbGVuID0gdXNhcnRfcmVhZCgodTgqKXRlbXAsc2l6ZW9mIHRlbXApOworICAgIGlmKGxlbiA+IDApCiAgICAgewotICAgICAgTUVNQ0xFQVIoJihwb3MtPmxhc3RfY29tbV9zdGF0dXMpLCBzaXplb2Yoc3BfY29tbV9zdGF0dXNfdCkpOwotICAgICAgcmV0dXJuIHJlc3AtPnJldGNvZGU7CisgICAgICBNRU1DUFkocnhCdWYgK3J4QnVmTGVuLCB0ZW1wLGxlbik7CisgICAgICByeEJ1ZkxlbiArPSBsZW47CisgICAgICBkYXRhbGVuID0gZ2V0XzJieXRlX2ludF9sZShyeEJ1Zik7CisgICAgICBpZigoZGF0YWxlbisyKSA8PSByeEJ1ZkxlbikKKyAgICAgIHsKKyAgICAgICAgTUVNQ0xFQVIocmVzcCwgc2l6ZW9mKHNwX3Byb3RvY29sX3Jlc3BvbnNlX3QpKTsKKyAgICAgICAgTUVNQ1BZKCh1aW50OCopcmVzcCxyeEJ1ZixyeEJ1Zkxlbik7CisgICAgICAgIE1FTUNMRUFSKHJ4QnVmLHNpemVvZiByeEJ1Zik7CisgICAgICAgIHJ4QnVmTGVuID0gMDsKKyAgICAgICAgaWYocG9zLT5sYXN0X2NvbW1fc3RhdHVzLmNvbW1hbmQgPT0gcmVzcC0+ZXhjbWQpCisgICAgICAgIHsKKyAgICAgICAgICBzcF9wcm90b2NvbF9jcmMoKHVpbnQ4KilyZXNwICsyLGRhdGFsZW4gLTIsIGNyYyk7CisgICAgICAgICAgaWYoTUVNQ01QKCh1aW50OCopcmVzcCArZGF0YWxlbixjcmMsMikgPT0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBNRU1DTEVBUigmKHBvcy0+bGFzdF9jb21tX3N0YXR1cyksIHNpemVvZihzcF9jb21tX3N0YXR1c190KSk7CisgICAgICAgICAgICByZXR1cm4gcmVzcC0+cmV0Y29kZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KICAgICB9CiAgICAgaWYoKHNwX2dldF90aWNrZXIoKSAtIHRpY2spID49IHRpbWVvdXRfbXMpCiAgICAgewotICAgICAgcmV0dXJuIDE7CisgICAgICByZXR1cm4gUkNfQ09NTV9USU1FT1VUOwogICAgIH0KICAgfQogfQorCiB1aW50OCBzcF9jb21tX2NhbGwoc3BfcG9zX3QqIHBvcywgc3BfcHJvdG9jb2xfcmVxdWVzdF90KiByZXEsCi0gICAgICAgICAgICAgICAgICAgc3BfcHJvdG9jb2xfcmVzcG9uc2VfdCogcmVzcCwgaW50MzIgdGltZW91dF9tcykKKyAgICAgICAgICAgICAgICAgICBzcF9wcm90b2NvbF9yZXNwb25zZV90KiByZXNwLCB1aW50MzIgdGltZW91dF9tcykKIHsKICAgc3BfdXNhcnRfc2VuZChwb3MsIHJlcSk7CiAgIHJldHVybiBzcF91c2FydF9yZWN2KHBvcywgcmVzcCwgdGltZW91dF9tcyk7CkBAIC0xNjMsNiArMTkxLDMwIEBACiAgIHJldHVybiAwOwogfQogCit2b2lkIHNwX2xvZ2luKHNwX3Bvc190KiBwb3MpCit7CisgIHVpbnQxNiByZXQ7CisgIGNoYXIgbXNnWzIwXTsKKyAgc3BfcHJvdG9jb2xfcmVzcG9uc2VfdCByZXNwOworICBkaXNwX2hpbnRfaW5mb190d28ocG9zLCLV/dTatcfCvCIsIsfrydS1yC4uLiIsMCk7CisgIHJldCA9IHNwX2FzeW5jX2VxdWlwbWVudF9sb2dpbihwb3MpOworICBpZihyZXQpCisgIHsKKyAgICBzcHJpbnRmKG1zZywitO3O88LrPSVkIixyZXQpOworICAgIGRpc3BfaGludF9pbmZvX3R3byhwb3MsIrXHwrzKp7DcIixtc2csREVMQVlfVElNRTNzKTsKKyAgICByZXR1cm47CisgIH0KKyAgTUVNQ0xFQVIoJnJlc3Asc2l6ZW9mIHJlc3ApOworICBzcF91c2FydF9yZWN2KHBvcywmcmVzcCxDT01NX1dBSVRfVElNRSk7CisgIHJldCA9IHNwX2NvbmZpcm1fbG9naW4oJnJlc3AscG9zKTsKKyAgaWYocmV0KQorICB7CisgICAgZGlzcF9zZXJ2ZXJfZXJybXNnKHBvcywitcfCvMqnsNwiLHJlc3AuZGF0YSxyZXNwLmRhdGFsZW4pOworICAgIHJldHVybjsKKyAgfQorICBkaXNwX2hpbnRfaW5mbyhwb3MsIrXHwryzybmmIixERUxBWV9USU1FM3MpOworfQorCiAvL9DEzPjIt8jPo6y87LLizfjC58rHt/HV/bOjCiB1aW50MTYgc3BfYXN5bmNfaGVhcnRiZWF0KHNwX3Bvc190KiBwb3MpCiB7CkBAIC01MjQsMTAgKzU3Niw5IEBACiB7CiAgIHVpbnQ4IHJldCA9IDA7CiAgIHVpbnQ4IGkgPSAwOwotICBpbnQzMiB0aW1lb3V0X21zID0gQ09NTV9XQUlUX1RJTUU7CiAgIHNwX3Byb3RvY29sX3Jlc3BvbnNlX3QgcmVzcDsKIAotICByZXQgPSBzcF91c2FydF9yZWN2KHBvcywgJnJlc3AsIHRpbWVvdXRfbXMpOworICByZXQgPSBzcF91c2FydF9yZWN2KHBvcywgJnJlc3AsIDEwMCk7CiAgIGlmKHJldCkKICAgewogICAgIHJldHVybiByZXQ7CkBAIC01NjIsOCArNjEzLDggQEAKIAogdm9pZCBzcF9jb21tdW5pY2F0ZShzcF9wb3NfdCogcG9zKQogewotICB1aW50MTYgcmV0ID0gMDsKLSAgdWludDMyIHRpY2tlciA9IDA7CisgIHVpbnQxNiByZXQ7CisgIHVpbnQzMiB0aWNrZXI7CiAgIHNwX3RyYW5zZHRsX3QgdHJhbnNkdGw7CiAKICAgaWYocG9zLT5kZXZpY2VubyA9PSAwKQpAQCAtNTc2LDE0ICs2MjcsMTQgQEAKICAgICBpZihwb3MtPmRldmxvZ2luLmxhc3RfbG9naW5fdGlja2VyID09IDAgfHwgcG9zLT5kZXZsb2dpbi5sb2dpbl9mbGFnID09IDAKICAgICAgICAgfHwgdGlja2VyIC0gcG9zLT5kZXZsb2dpbi5sYXN0X2xvZ2luX3RpY2tlciA+IERFTEFZX1RJTUU2MHMqMzApCiAgICAgewotICAgICAgICBwb3MtPmRldmxvZ2luLmxhc3RfbG9naW5fdGlja2VyID0gdGlja2VyOwotICAgICAgICBzcF9hc3luY19lcXVpcG1lbnRfbG9naW4ocG9zKTsKKyAgICAgIHBvcy0+ZGV2bG9naW4ubGFzdF9sb2dpbl90aWNrZXIgPSB0aWNrZXI7CisgICAgICBzcF9hc3luY19lcXVpcG1lbnRfbG9naW4ocG9zKTsKICAgICB9CiAgICAgaWYocG9zLT5oZWFydGJlYXQubGFzdF9oZWFydGJlYXRfdGlja2VyID09IDAKICAgICAgICAgfHwgdGlja2VyIC0gcG9zLT5oZWFydGJlYXQubGFzdF9oZWFydGJlYXRfdGlja2VyID4gREVMQVlfVElNRTYwcykKICAgICB7Ci0gICAgICAgIHBvcy0+aGVhcnRiZWF0Lmxhc3RfaGVhcnRiZWF0X3RpY2tlciA9IHRpY2tlcjsKLSAgICAgICAgc3BfYXN5bmNfaGVhcnRiZWF0KHBvcyk7CisgICAgICBwb3MtPmhlYXJ0YmVhdC5sYXN0X2hlYXJ0YmVhdF90aWNrZXIgPSB0aWNrZXI7CisgICAgICBzcF9hc3luY19oZWFydGJlYXQocG9zKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKZGlmZiAtLWdpdCBhL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5oIGIvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmgKaW5kZXggMzI1OGVmZi4uOGE2ZjU5YSAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmgKKysrIGIvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmgKQEAgLTEzMiwxMCArMTMyLDExIEBACiB1aW50MTYgc3BfYXN5bmNfdXBsb2FkX3RyYW5zZHRsKHNwX3Bvc190KiBwb3MsIHNwX3RyYW5zZHRsX3QqIGR0bCk7CiB1aW50MTYgc3BfcXJjb2RlX2luaXQoc3BfcG9zX3QqIHBvcywgc3BfY2FyZF90KiBjYXJkKTsKIHVpbnQxNiBzcF9xcmNvZGVfcXVlcnkoc3BfcG9zX3QqIHBvcywgc3BfY2FyZF90KiBjYXJkKTsKK3ZvaWQgc3BfbG9naW4oc3BfcG9zX3QqIHBvcyk7CiAKIC8vzajRtgogdWludDggc3BfY29tbV9jYWxsKHNwX3Bvc190KiBwb3MsIHNwX3Byb3RvY29sX3JlcXVlc3RfdCogcmVxLAotICAgICAgICAgICAgICAgICAgIHNwX3Byb3RvY29sX3Jlc3BvbnNlX3QqIHJlc3AsIGludDMyIHRpbWVvdXRfbXMpOworICAgICAgICAgICAgICAgICAgIHNwX3Byb3RvY29sX3Jlc3BvbnNlX3QqIHJlc3AsIHVpbnQzMiB0aW1lb3V0X21zKTsKIHZvaWQgc3BfcHJvdG9jb2xfcmVxX2luaXQoc3BfcHJvdG9jb2xfcmVxdWVzdF90KiByZXEsIHVpbnQ4IGNvbW1hbmQpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3N1cHdpc2RvbS9zcF9jb25zdGFudC5oIGIvc3Vwd2lzZG9tL3NwX2NvbnN0YW50LmgKaW5kZXggYTdkZDk1Yi4uZWE3OWQwOSAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NvbnN0YW50LmgKKysrIGIvc3Vwd2lzZG9tL3NwX2NvbnN0YW50LmgKQEAgLTUxLDYgKzUxLDcgQEAKICNkZWZpbmUgUkNfREVWX05PVF9MT0dJTgkJCQk2NQkvL8nosbjOtMeptb0KICNkZWZpbmUgUkNfREVWX0ZBVUxUCQkJCQk2NiAgLy/J6LG40snLxrnK1c8KICNkZWZpbmUgUkNfREVWX05PU0VUX0ZMT1dTRU5TT1JfVU5JVAk2NyAgLy/J6LG4wffBv7zGy+O1pc67zrTJ6NbDCisjZGVmaW5lIFJDX0NPTU1fVElNRU9VVAkJCQkJNjggIC8vzajRtrOsyrEKICNkZWZpbmUgU1RBVFVTX0tFRVBPUEVOCQkJCQkxCS8vs6O/qr+oCiAjZGVmaW5lIFNUQVRVU19DTE9TRUQJCQkJCTAJLy/Ioc/7s6O/qr+oCiAKZGlmZiAtLWdpdCBhL3N1cHdpc2RvbS9zcF9tZW51LmMgYi9zdXB3aXNkb20vc3BfbWVudS5jCmluZGV4IDU3MmY3ODguLmQ5ZDFiMGEgMTAwNjQ0Ci0tLSBhL3N1cHdpc2RvbS9zcF9tZW51LmMKKysrIGIvc3Vwd2lzZG9tL3NwX21lbnUuYwpAQCAtODAsNiArODAsNyBAQAogICB0aWNrZXIgPSBzcF9nZXRfdGlja2VyKCk7CiAgIHdoaWxlKHNwX2dldF90aWNrZXIoKS10aWNrZXIgPD0gREVMQVlfVElNRTYwcykKICAgeworICAgIHNwX2ZlZWRfZG9nKCk7CiAgICAga2V5Y29kZSA9IHNwX2dldF9rZXkoKTsKICAgICBpZihrZXljb2RlICE9IFNQX0tFWV9OT05FKQogICAgIHsKQEAgLTI5Niw2ICsyOTcsNyBAQAogICB0aWNrZXIgPSBzcF9nZXRfdGlja2VyKCk7CiAgIHdoaWxlKHNwX2dldF90aWNrZXIoKSAtdGlja2VyIDwgREVMQVlfVElNRTYwcykKICAgeworICAgIHNwX2ZlZWRfZG9nKCk7CiAgICAga2NvZGUgPSBzcF9nZXRfa2V5KCk7CiAgICAgaWYoa2NvZGUgIT0gU1BfS0VZX05PTkUpCiAgICAgewpAQCAtMzU0LDQxICszNTYsNiBAQAogICB9CiB9CiAKLXN0YXRpYyB2b2lkIHNwX21hbnVhbF9sb2dpbihzcF9wb3NfdCogcG9zKQotewotICB1aW50MTYgcmV0OwotICB1aW50MzIgdGljazsKLSAgc3BfcHJvdG9jb2xfcmVzcG9uc2VfdCByZXNwOwotICBNRU1DTEVBUigmcmVzcCwgc2l6ZW9mKHJlc3ApKTsKLSAgZGlzcF9oaW50X2luZm9fdHdvKHBvcywi1f3U2rXHwrwiLCLH68nUtcguLi4iLDApOwotICBzcF9hc3luY19lcXVpcG1lbnRfbG9naW4ocG9zKTsKLSAgdGljayA9IHNwX2dldF90aWNrZXIoKTsKLSAgd2hpbGUoc3BfZ2V0X3RpY2tlcigpIC0gdGljayA8IERFTEFZX1RJTUUzcyoyKQotICB7Ci0gICAgTUVNQ0xFQVIoJnJlc3AsIHNpemVvZihyZXNwKSk7Ci0gICAgdXNhcnRfcmVhZCgodTgqKSZyZXNwLCBzaXplb2YocmVzcCkpOwotICAgIGlmKHJlc3AuZXhjbWQgPT0gU1BfQ01EX0xPR0lOKQotICAgIHsKLSAgICAgIHJldCA9IHNwX2NvbmZpcm1fbG9naW4oJnJlc3AsIHBvcyk7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldCA9IFJDX0RFVl9MT0dJTl9GQUlMOwotICAgIH0KLSAgfQotICBpZihyZXQpCi0gIHsKLSAgICBjaGFyIG1zZ1szMl07Ci0gICAgc3ByaW50Zihtc2csIrTtzvPC6z0lZCIscmV0KTsKLSAgICBkaXNwX2hpbnRfaW5mb190d28ocG9zLCLHqbW9yqew3CIsbXNnLERFTEFZX1RJTUUzcyk7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgZGlzcF9oaW50X2luZm8ocG9zLCLHqbW9s8m5piIsREVMQVlfVElNRTNzKTsKLSAgfQotfQotCiBzdGF0aWMgdm9pZCBzcF9zZXRfZGV2cGh5aWQoc3BfcG9zX3QqIHBvcykKIHsKICAgdWludDMyIHRpY2tlcjsKQEAgLTQwNyw2ICszNzQsNyBAQAogICBzcF9oZXhfdG9fc3RyKGRldnBoeWlkLDQsc3RyKTsKICAgd2hpbGUoc3BfZ2V0X3RpY2tlcigpIC10aWNrZXIgPCBERUxBWV9USU1FNjBzKQogICB7CisgICAgc3BfZmVlZF9kb2coKTsKICAgICBrY29kZSA9IHNwX2dldF9rZXkoKTsKICAgICBpZihrY29kZSAhPSBTUF9LRVlfTk9ORSkKICAgICB7CkBAIC00ODUsNiArNDUzLDcgQEAKICAgdGlja2VyID0gc3BfZ2V0X3RpY2tlcigpOwogICB3aGlsZShzcF9nZXRfdGlja2VyKCkgLXRpY2tlciA8IERFTEFZX1RJTUU2MHMpCiAgIHsKKyAgICBzcF9mZWVkX2RvZygpOwogICAgIGtjb2RlID0gc3BfZ2V0X2tleSgpOwogICAgIGlmKGtjb2RlICE9IFNQX0tFWV9OT05FKQogICAgIHsKQEAgLTYwNSw2ICs1NzQsNyBAQAogICB0aWNrZXIgPSBzcF9nZXRfdGlja2VyKCk7CiAgIHdoaWxlKHNwX2dldF90aWNrZXIoKSAtdGlja2VyIDwgREVMQVlfVElNRTYwcykKICAgeworICAgIHNwX2ZlZWRfZG9nKCk7CiAgICAgc3BfdmFsdmVfY29udHJvbCgpOwogICAgIGtjb2RlID0gc3BfZ2V0X2tleSgpOwogICAgIGlmKGtjb2RlICE9IFNQX0tFWV9OT05FKQpAQCAtNjMxLDEyICs2MDEsMTEgQEAKIAogc3RhdGljIHZvaWQgdGVzdF9mYWN0b3J5X29wdGlvbnMoc3BfcG9zX3QqIHBvcykKIHsKLSAgdWludDMyIHRpY2tlciA9IDA7CisgIHVpbnQzMiB0aWNrZXI7CiAgIHVpbnQ4IGtleWNvZGU7CiAgIHVpbnQ4IHBhZ2U7CiAgIHVpbnQ4IG1heF9jbnQ7Ci0gIHVpbnQ4IGtleV9wcmVzcyA9IDE7Ci0KKyAgdWludDgga2V5X3ByZXNzOwogICBtZW51X3QgbWVudXNbXSA9CiAgIHsKICAgICB7IjEusLS8/NCj17wiLCBkb19rZXlib2FyZF9jYWxpYnJhdGV9LApAQCAtNjQ4LDggKzYxNyw5IEBACiAgIH07CiAgIG1heF9jbnQgPSAoc2l6ZW9mKG1lbnVzKS9zaXplb2YobWVudV90KSAtMSkvMyArIDE7CiAgIHBhZ2UgPSAwOworICBrZXlfcHJlc3MgPSAxOwogICB0aWNrZXIgPSBzcF9nZXRfdGlja2VyKCk7Ci0gIHdoaWxlKHNwX2dldF90aWNrZXIoKS10aWNrZXIgPD0gREVMQVlfVElNRTYwcyo1KQorICB3aGlsZShzcF9nZXRfdGlja2VyKCktdGlja2VyIDw9IERFTEFZX1RJTUU2MHMpCiAgIHsKICAgICBzcF9mZWVkX2RvZygpOwogICAgIGtleWNvZGUgPSBzcF9nZXRfa2V5KCk7CkBAIC02NzYsNiArNjQ2LDcgQEAKICAgICAgICAgaWYobWVudXNba2V5Y29kZS1TUF9LRVlfMV0uZnVuYyAhPSBOVUxMKQogICAgICAgICB7CiAgICAgICAgICAgbWVudXNba2V5Y29kZS1TUF9LRVlfMV0uZnVuYyhwb3MpOworICAgICAgICAgIGtleV9wcmVzcyA9IDE7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIFNQX0tFWV9DTEVBUjoKQEAgLTcwMCwyOCArNjcxLDI5IEBACiAKIHZvaWQgc3BfbWVudV9vcHRpb25zKHNwX3Bvc190KiBwb3MpCiB7Ci0gIHVpbnQzMiB0aWNrZXIgPSAwOworICB1aW50MzIgdGlja2VyOwogICB1aW50OCBrZXljb2RlOwogICB1aW50OCBwYWdlOwogICB1aW50OCBtYXhfY250OwotICB1aW50OCBrZXlfcHJlc3MgPSAxOworICB1aW50OCBrZXlfcHJlc3M7CiAKICAgbWVudV90IG1lbnVzW10gPQogICB7CiAgICAgeyIxLrLpv7Syzsr9Iiwgc3Bfc2hvd19zeXNwYXJhfSwKICAgICB7IjIuuaSzp7LiytQiLCB0ZXN0X2ZhY3Rvcnlfb3B0aW9uc30sCiAgICAgeyIzLsno1sPKsbzkIiwgc3Bfc2V0X2RldnRpbWV9LAotICAgIHsiNC7K1ravtcfCvCIsIHNwX21hbnVhbF9sb2dpbn0sCisgICAgeyI0LsrWtq+1x8K8Iiwgc3BfbG9naW59LAogICAgIHsiNS7J6NbDzu/A7WlkIiwgc3Bfc2V0X2RldnBoeWlkfSwKICAgICB7IjYuyejWw7v6usUiLCBzcF9zZXRfZGV2aWNlbm99LAogICAgIHsiNy7H5b/VwffLriIsIGNsZWFyX3RyYW5zZHRsfSwKICAgICB7Ijgu1NrP38n9vLYiLCBtYW51YWxfdXBncmFkZX0sCiAgICAgeyI5LrvWuLSz9rOnIiwgcmVzZXRfZmFjdG9yeX0KICAgfTsKKyAga2V5X3ByZXNzID0gMTsKICAgbWF4X2NudCA9IChzaXplb2YobWVudXMpL3NpemVvZihtZW51X3QpIC0xKS8zICsgMTsKICAgcGFnZSA9IDA7CiAgIHRpY2tlciA9IHNwX2dldF90aWNrZXIoKTsKLSAgd2hpbGUoc3BfZ2V0X3RpY2tlcigpLXRpY2tlciA8PSBERUxBWV9USU1FNjBzKjUpCisgIHdoaWxlKHNwX2dldF90aWNrZXIoKS10aWNrZXIgPD0gREVMQVlfVElNRTYwcykKICAgewogICAgIHNwX2ZlZWRfZG9nKCk7CiAgICAga2V5Y29kZSA9IHNwX2dldF9rZXkoKTsKQEAgLTc0OCw2ICs3MjAsNyBAQAogICAgICAgICBpZihtZW51c1trZXljb2RlLVNQX0tFWV8xXS5mdW5jICE9IE5VTEwpCiAgICAgICAgIHsKICAgICAgICAgICBtZW51c1trZXljb2RlLVNQX0tFWV8xXS5mdW5jKHBvcyk7CisgICAgICAgICAga2V5X3ByZXNzID0gMTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgU1BfS0VZX0NMRUFSOgo=