ZGlmZiAtLWdpdCBhL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5jIGIvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMKaW5kZXggMDgwYTYxZC4uN2VkMzRmOSAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMKKysrIGIvc3Vwd2lzZG9tL3NwX2NvbW11bmljYXRlLmMKQEAgLTI3LDcgKzI3LDcgQEAKIH0KIAogc3RhdGljIHVpbnQ4IHNwX3VzYXJ0X3JlY3Yoc3BfcG9zX3QqIHBvcywgc3BfcHJvdG9jb2xfcmVzcG9uc2VfdCogcmVzcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzIgdGltZW91dF9tcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMiB0aW1lb3V0X21zKQogewogICB1aW50MzIgdGljazsKICAgdWludDE2IGxlbjsKQEAgLTEwOCwzMSArMTA4LDMxIEBACiAgICAgc3BfdW5wYWNrX3ZhbHVlKCZ1bnBhY2ssJmZpZWxkKTsKICAgICBpZihJU19LRVkoUEtfSU5UX1BFUk1JVCwgZmllbGQua2V5KSkKICAgICB7Ci0gICAgICBjYXJkLT5wZXJtaXQgPSBmaWVsZC52YWwuaW50dmFsOworICAgICAgY2FyZC0+cGVybWl0ID0gKHVpbnQ4KWZpZWxkLnZhbC5pbnR2YWw7CiAgICAgfQogICAgIGVsc2UgaWYoSVNfS0VZKFBLX1NUUl9MSU1JVE1TRywgZmllbGQua2V5KSkKICAgICB7Ci0gICAgICBNRU1DUFkoY2FyZC0+bGltaXRtc2csIGZpZWxkLnZhbC5zdHJ2YWwsIGZpZWxkLnN0cmxlbik7CisgICAgICBzbnByaW50ZihjYXJkLT5saW1pdG1zZywsc2l6ZW9mKGNhcmQtPmxpbWl0bXNnKSwiJXMiLCBmaWVsZC52YWwuc3RydmFsLCBmaWVsZC5zdHJsZW4pOwogICAgIH0KICAgICBlbHNlIGlmKElTX0tFWShQS19JTlRfV0FURVJMSU1JVCxmaWVsZC5rZXkpKQogICAgIHsKLSAgICAgIGNhcmQtPndhdGVybGltaXQgPSBmaWVsZC52YWwuaW50dmFsOworICAgICAgY2FyZC0+d2F0ZXJsaW1pdCA9ICh1aW50MTYpZmllbGQudmFsLmludHZhbDsKICAgICB9CiAgICAgZWxzZSBpZihJU19LRVkoUEtfSU5UX0NPQklMTE5PLGZpZWxkLmtleSkpCiAgICAgewotICAgICAgY2FyZC0+Y29iaWxsbm8gPSBmaWVsZC52YWwuaW50dmFsOworICAgICAgY2FyZC0+Y29iaWxsbm8gPSAodWludDMyKWZpZWxkLnZhbC5pbnR2YWw7CiAgICAgfQogICAgIGVsc2UgaWYoSVNfS0VZKFBLX0lOVF9GRUVBTU9VTlQsZmllbGQua2V5KSkKICAgICB7Ci0gICAgICBjYXJkLT5mZWVwYXJhLmZlZV9hbXQgPSBmaWVsZC52YWwuaW50dmFsOworICAgICAgY2FyZC0+ZmVlcGFyYS5mZWVfYW10ID0gKHVpbnQ4KWZpZWxkLnZhbC5pbnR2YWw7CiAgICAgfQogICAgIGVsc2UgaWYoSVNfS0VZKFBLX0lOVF9GRUVVTklULCBmaWVsZC5rZXkpKQogICAgIHsKLSAgICAgIGNhcmQtPmZlZXBhcmEuZmVlX3VuaXQgPSBmaWVsZC52YWwuaW50dmFsOworICAgICAgY2FyZC0+ZmVlcGFyYS5mZWVfdW5pdCA9ICh1aW50OClmaWVsZC52YWwuaW50dmFsOwogICAgIH0KICAgICBlbHNlIGlmKElTX0tFWShQS19JTlRfRkVFU1RBUlQsIGZpZWxkLmtleSkpCiAgICAgewotICAgICAgY2FyZC0+ZmVlcGFyYS5mZWVfc3RhcnQgPSBmaWVsZC52YWwuaW50dmFsOworICAgICAgY2FyZC0+ZmVlcGFyYS5mZWVfc3RhcnQgPSAodWludDgpZmllbGQudmFsLmludHZhbDsKICAgICB9CiAgIH0KICAgLy9kaXNwX2hpbnRfaW5mbyhwb3MsIsntt93Iz9aks8m5piIsREVMQVlfVElNRTFzKTsKQEAgLTI1OSw4ICsyNTksNyBAQAogICByZXQgPSBzcF91c2FydF9yZWN2KHBvcywgJnJlc3AsIENPTU1fV0FJVF9USU1FKTsKICAgaWYocmV0KQogICB7Ci0gICAgcmV0ID0gUkNfUVJDT0RFX0ZBSUxVUkU7Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gUkNfUVJDT0RFX0ZBSUxVUkU7CiAgIH0KIAogICBzcF91bnBhY2tfaW5pdCgmdW5wYWNrLHJlc3AuZGF0YSxyZXNwLmRhdGFsZW4pOwpAQCAtMjcwLDE1ICsyNjksMTUgQEAKICAgICBzcF91bnBhY2tfdmFsdWUoJnVucGFjaywmZmllbGQpOwogICAgIGlmKElTX0tFWShQS19TVFJfU0hPUlRfVVJMLCBmaWVsZC5rZXkpKQogICAgIHsKLSAgICAgIE1FTUNQWShjYXJkLT5xcmNvZGUucXJjb2RlX3VybCwgZmllbGQudmFsLnN0cnZhbCwgZmllbGQuc3RybGVuKTsKKyAgICAgIHNucHJpbnRmKGNhcmQtPnFyY29kZS5xcmNvZGVfdXJsLHNpemVvZihjYXJkLT5xcmNvZGUucXJjb2RlX3VybCksIiVzIiwgZmllbGQudmFsLnN0cnZhbCwgZmllbGQuc3RybGVuKTsKICAgICB9CiAgICAgZWxzZSBpZihJU19LRVkoUEtfSU5UX0NPQklMTE5PLCBmaWVsZC5rZXkpKQogICAgIHsKLSAgICAgIGNhcmQtPmNvYmlsbG5vID0gZmllbGQudmFsLmludHZhbDsKKyAgICAgIGNhcmQtPmNvYmlsbG5vID0gKHVpbnQzMilmaWVsZC52YWwuaW50dmFsOwogICAgIH0KICAgICBlbHNlIGlmKElTX0tFWShQS19JTlRfVkFJTERUSU1FLCBmaWVsZC5rZXkpKQogICAgIHsKLSAgICAgIGNhcmQtPnFyY29kZS52YWxpZHRpbWUgPSBmaWVsZC52YWwuaW50dmFsOworICAgICAgY2FyZC0+cXJjb2RlLnZhbGlkdGltZSA9ICh1aW50MzIpZmllbGQudmFsLmludHZhbDsKICAgICB9CiAgIH0KICAgY2FyZC0+cXJjb2RlLnN0YXJ0dGltZSA9IHNwX2dldF90aWNrZXIoKTsKQEAgLTMxNyw4ICszMTYsNyBAQAogICByZXQgPSBzcF91c2FydF9yZWN2KHBvcywgJnJlc3AsIENPTU1fV0FJVF9USU1FKTsKICAgaWYocmV0KQogICB7Ci0gICAgcmV0ID0gUkNfUVJDT0RFX1FVRVJZX0ZBSUw7Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gUkNfUVJDT0RFX1FVRVJZX0ZBSUw7CiAgIH0KIAogICBzcF91bnBhY2tfaW5pdCgmdW5wYWNrLHJlc3AuZGF0YSxyZXNwLmRhdGFsZW4pOwpAQCAtMzI4LDM1ICszMjYsMzUgQEAKICAgICBzcF91bnBhY2tfdmFsdWUoJnVucGFjaywmZmllbGQpOwogICAgIGlmKElTX0tFWShQS19JTlRfUEVSTUlULCBmaWVsZC5rZXkpKQogICAgIHsKLSAgICAgIGNhcmQtPnBlcm1pdCA9IGZpZWxkLnZhbC5pbnR2YWw7CisgICAgICBjYXJkLT5wZXJtaXQgPSAodWludDgpZmllbGQudmFsLmludHZhbDsKICAgICB9CiAgICAgZWxzZSBpZihJU19LRVkoUEtfSU5UX0NPQklMTE5PLCBmaWVsZC5rZXkpKQogICAgIHsKLSAgICAgIGNhcmQtPmNvYmlsbG5vID0gZmllbGQudmFsLmludHZhbDsKKyAgICAgIGNhcmQtPmNvYmlsbG5vID0gKHVpbnQzMilmaWVsZC52YWwuaW50dmFsOwogICAgIH0KICAgICBlbHNlIGlmKElTX0tFWShQS19JTlRfQVVUSFNUQVRVUywgZmllbGQua2V5KSkKICAgICB7Ci0gICAgICBjYXJkLT5xcmNvZGUuYXV0aHN0YXR1cyA9IGZpZWxkLnZhbC5pbnR2YWw7CisgICAgICBjYXJkLT5xcmNvZGUuYXV0aHN0YXR1cyA9ICh1aW50OClmaWVsZC52YWwuaW50dmFsOwogICAgIH0KICAgICBlbHNlIGlmKElTX0tFWShQS19JTlRfUEFZU1RBVFVTLCBmaWVsZC5rZXkpKQogICAgIHsKLSAgICAgIGNhcmQtPnFyY29kZS5wYXlzdGF0dXMgPSBmaWVsZC52YWwuaW50dmFsOworICAgICAgY2FyZC0+cXJjb2RlLnBheXN0YXR1cyA9ICh1aW50OClmaWVsZC52YWwuaW50dmFsOwogICAgIH0KICAgICBlbHNlIGlmKElTX0tFWShQS19JTlRfUEFZQU1ULCBmaWVsZC5rZXkpKQogICAgIHsKLSAgICAgIGNhcmQtPnFyY29kZS5wYWlkQW1vdW50ID0gZmllbGQudmFsLmludHZhbDsKKyAgICAgIGNhcmQtPnFyY29kZS5wYWlkQW1vdW50ID0gKHVpbnQ4KWZpZWxkLnZhbC5pbnR2YWw7CiAgICAgfQogICAgIGVsc2UgaWYoSVNfS0VZKFBLX0lOVF9GRUVBTU9VTlQsZmllbGQua2V5KSkKICAgICB7Ci0gICAgICBjYXJkLT5mZWVwYXJhLmZlZV9hbXQgPSBmaWVsZC52YWwuaW50dmFsOworICAgICAgY2FyZC0+ZmVlcGFyYS5mZWVfYW10ID0gKHVpbnQ4KWZpZWxkLnZhbC5pbnR2YWw7CiAgICAgfQogICAgIGVsc2UgaWYoSVNfS0VZKFBLX0lOVF9GRUVVTklULCBmaWVsZC5rZXkpKQogICAgIHsKLSAgICAgIGNhcmQtPmZlZXBhcmEuZmVlX3VuaXQgPSBmaWVsZC52YWwuaW50dmFsOworICAgICAgY2FyZC0+ZmVlcGFyYS5mZWVfdW5pdCA9ICh1aW50OClmaWVsZC52YWwuaW50dmFsOwogICAgIH0KICAgICBlbHNlIGlmKElTX0tFWShQS19JTlRfV0FURVJMSU1JVCwgZmllbGQua2V5KSkKICAgICB7Ci0gICAgICBjYXJkLT53YXRlcmxpbWl0ID0gZmllbGQudmFsLmludHZhbDsKKyAgICAgIGNhcmQtPndhdGVybGltaXQgPSAodWludDE2KWZpZWxkLnZhbC5pbnR2YWw7CiAgICAgfQogICB9CiAgIHJldHVybiByZXNwLnJldGNvZGU7CkBAIC01MzIsMTEgKzUzMCwxMSBAQAogICAgIHNwX3VucGFja192YWx1ZSgmdW5wYWNrLCZmaWVsZCk7CiAgICAgaWYoSVNfS0VZKFBLX0lOVF9PRkZMSU5FTUFYSE9VUiwgZmllbGQua2V5KSkKICAgICB7Ci0gICAgICBvZmZsaW5lX21heGhvdXIgPSBmaWVsZC52YWwuaW50dmFsOworICAgICAgb2ZmbGluZV9tYXhob3VyID0gKHVpbnQ4KWZpZWxkLnZhbC5pbnR2YWw7CiAgICAgfQogICAgIGVsc2UgaWYoSVNfS0VZKFBLX0lOVF9QVUxTRUlOSE1MLCBmaWVsZC5rZXkpKQogICAgIHsKLSAgICAgIHVuaXQgPSBmaWVsZC52YWwuaW50dmFsOworICAgICAgdW5pdCA9ICh1aW50OClmaWVsZC52YWwuaW50dmFsOwogICAgIH0KICAgICBlbHNlIGlmKElTX0tFWShQS19CSU5fU1lTVElNRSwgZmllbGQua2V5KSkKICAgICB7CmRpZmYgLS1naXQgYS9zdXB3aXNkb20vc3BfY29uZmlnLmggYi9zdXB3aXNkb20vc3BfY29uZmlnLmgKaW5kZXggZjg5NWE0Ni4uMTMzNzVmMyAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NvbmZpZy5oCisrKyBiL3N1cHdpc2RvbS9zcF9jb25maWcuaApAQCAtMjMyLDEwICsyMzIsMTAgQEAKICAgdWludDggY2FyZHR5cGU7CiAgIHVpbnQ4IGV4cGlyZWRhdGVbNF07CiAKLSAgdWludDggd2F0ZXJsaW1pdDsJCS8vtaW0zrP2y67Jz8/eo6gxMDBtbKOpCisgIHVpbnQxNiB3YXRlcmxpbWl0OwkJLy+1pbTOs/bLrsnPz96jqDEwMG1so6kKICAgdWludDMyIGNvYmlsbG5vOwkJLy+9u9LXtqm1pbHgusUsQkNEwusKICAgdWludDgJcGVybWl0OwkJCS8vyse38dTK0O3P+7fRo6wwLdTK0O2jrDEtsrvUytDtCi0gIHVpbnQ4IGxpbWl0bXNnWzQ1XTsJCS8vz97Wxs/7t9HQxc+iCisgIGNoYXIgbGltaXRtc2dbNDVdOwkJLy/P3tbGz/u30dDFz6IKICAgc3BfcXJjb2RlX3QgcXJjb2RlOwkvL7b+zqzC6wogICBzcF9mZWVwYXJhX3QgZmVlcGFyYTsKIH0gc3BfY2FyZF90OwpkaWZmIC0tZ2l0IGEvc3Vwd2lzZG9tL3NwX2NvbnN1bWUuYyBiL3N1cHdpc2RvbS9zcF9jb25zdW1lLmMKaW5kZXggY2ZhNzViNy4uYjQxNmE2ZCAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NvbnN1bWUuYworKysgYi9zdXB3aXNkb20vc3BfY29uc3VtZS5jCkBAIC0xMjEsOCArMTIxLDI3IEBACiB9CiAKIC8vtsHIobXa0ruxys60yc+0q8H3y67P+7fRyNXG2sqxvOQKLXN0YXRpYyB1aW50OCBzcF9yZWFkX3VuY29uZmlybV9maXJzdF9yZWNvcmQodWludDggdGVybXRpbWVbNl0pCitzdGF0aWMgdWludDggc3BfcmVhZF91bmNvbmZpcm1fZmlyc3RfcmVjb3JkKGNvbnN0IHNwX3Bvc190KiBwb3MsdWludDggdGVybXRpbWVbNl0pCiB7CisgIHNwX3RyYW5zZHRsX3QgcmVjb3JkOworICB1aW50MTYgcmV0OworICB1aW50OCBjcmNbMl07CisgIC8vvOyy4rWxx7DKx7fx09DOtMnPtKu1xMH3y64KKyAgaWYocG9zLT51bmNvbmZpcm1fdHJhbnNkdGwudHJhbnNhZGRyIDw9IHBvcy0+bGFzdF90cmFuc2R0bC50cmFuc2FkZHIpCisgIHsKKyAgICByZXQgPSBzcF9mbGFzaF9yZWFkKCh1aW50MzIpcG9zLT51bmNvbmZpcm1fdHJhbnNkdGwudHJhbnNhZGRyLCAodWludDgqKSZyZWNvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocmVjb3JkKSk7CisgICAgaWYoIXJldCkKKyAgICB7CisgICAgICBzcF9wcm90b2NvbF9jcmMoKHVpbnQ4KikmcmVjb3JkLCBzaXplb2YocmVjb3JkKS0yLGNyYyk7CisgICAgICBpZihNRU1DTVAocmVjb3JkLmNyYyxjcmMsIDIpID09IDApCisgICAgICB7CisgICAgICAgIE1FTUNQWSh0ZXJtdGltZSxyZWNvcmQudHJhbnNkYXRlLCAzKTsKKyAgICAgICAgTUVNQ1BZKHRlcm10aW1lICszLHJlY29yZC50cmFuc3RpbWUsMyk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKyAgfQogICByZXR1cm4gMTsKIH0KIApAQCAtMjA4LDYgKzIyNywxNSBAQAogICByZXR1cm4gMDsKIH0KIAorc3RhdGljIHVpbnQxNiBkb19jYXJkX2NoZWNrKHNwX3Bvc190KiBwb3Msc3BfY2FyZF90KiBjYXJkKQoreworICBpZihjYXJkLT5wZXJtaXQgPT0gMSkKKyAgeworICAgIHJldHVybiBSQ19MSU1JVF9DT05TVU1QVElPTjsKKyAgfQorICByZXR1cm4gMDsKK30KKwogc3RhdGljIHVpbnQxNiBkb19uZXcoc3BfcG9zX3QqIHBvcywgc3BfY2FyZF90KiBjYXJkKQogewogICB1aW50MTYgcmV0OwpAQCAtMjM4LDcgKzI2NiwxMiBAQAogICByZXQgPSBzcF9jYXJkX2F1dGhlbnRpY2F0aW9uKHBvcywgY2FyZCk7CiAgIGlmKHJldCkKICAgewotICAgIHJldHVybiBSQ19DQVJEX0FVVEhFTlRJQ0FUSU9OOworICAgIHJldHVybiByZXQ7CisgIH0KKyAgcmV0ID0gZG9fY2FyZF9jaGVjayhwb3MsY2FyZCk7CisgIGlmKHJldCkKKyAgeworICAgIHJldHVybiByZXQ7CiAgIH0KICAgcmV0ID0gc3BfcHJlcGFyZV9iZWhhbGZfdHJhbnNkdGwocG9zLCBjYXJkLCAmcmVjb3JkKTsKICAgaWYocmV0KQpAQCAtNTk5LDcgKzYzMiw3IEBACiAgICAgICBjYXJkV29ya1N0YXRlLT5jdXJyZW50X3N0YXRlID0gQ0FSRFdPUktTVEFUVVNfRVJST1I7CiAgICAgICBicmVhazsKICAgICB9Ci0JZGlzcF9oaW50X2luZm9fdHdvKHBvcywgIsfrx/O2/s6swusiLCLH68nUtcguLi4iLDApOworICAgIGRpc3BfaGludF9pbmZvX3R3byhwb3MsICLH68fztv7OrMLrIiwix+vJ1LXILi4uIiwwKTsKICAgICByZXQgPSBzcF9xcmNvZGVfaW5pdChwb3MsICZDQVJEKTsKICAgICBpZihyZXQpCiAgICAgewpkaWZmIC0tZ2l0IGEvc3Vwd2lzZG9tL3NwX2Rpc3BsYXkuYyBiL3N1cHdpc2RvbS9zcF9kaXNwbGF5LmMKaW5kZXggZDRmZGE0Zi4uNzZhYjEzNiAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2Rpc3BsYXkuYworKysgYi9zdXB3aXNkb20vc3BfZGlzcGxheS5jCkBAIC0yODAsNyArMjgwLDcgQEAKICAgICBzcHJpbnRmKG1zZywgIiVzIiwgIsH3wb+8xsvjtaXOu860yejWwyIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX0NBUkRfQVVUSEVOVElDQVRJT046Ci0gICAgc3ByaW50Zihtc2csICIlcyIsICK/qMjP1qTKp7DcIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICLJ7bfdyM/WpLOsyrEiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19MSU1JVF9DT05TVU1QVElPTjoKICAgICBzcHJpbnRmKG1zZywgIiVzIiwgIrjD08O7p7G7z97Wxs/7t9EiKTsK