ZGlmZiAtLWdpdCBhL3N1cHdpc2RvbS9zcF9tZW51LmMgYi9zdXB3aXNkb20vc3BfbWVudS5jCmluZGV4IDdhYjY4NWUuLjRhZjA2YTMgMTAwNjQ0Ci0tLSBhL3N1cHdpc2RvbS9zcF9tZW51LmMKKysrIGIvc3Vwd2lzZG9tL3NwX21lbnUuYwpAQCAtMTU5LDEyICsxNTksMTIgQEAKIAogc3RhdGljIHZvaWQgZG9fa2V5Ym9hcmRfY2FsaWJyYXRlKHNwX3Bvc190KiBwb3MpCiB7Ci0gIGRpc3BfaGludF9pbmZvX3R3bygi0KPR6bz8xcwiLCLH68nUtcguLi4iLDApOworICBkaXNwX2hpbnRfaW5mb190d28ocG9zLCLQo9HpvPzFzCIsIsfrydS1yC4uLiIsMCk7CiAgIHNwX2tleV9jYWxpYnJhdGUoKTsKICAgZGlzcF9oaW50X2luZm9fdHdvKHBvcywgIrz8xczQo9HpzeqzySIsIsfrvOyy4iIsREVMQVlfVElNRTNzKTsKIH0KIAotc3RhdGljIHVpbnQ4IGRvX2tleWJvYXJkX3Rlc3Qoc3BfcG9zX3QqIHBvcykKK3N0YXRpYyB2b2lkIGRvX2tleWJvYXJkX3Rlc3Qoc3BfcG9zX3QqIHBvcykKIHsKICAgdWludDgga2NvZGU7CiAgIHVpbnQzMiB0aWNrOwpAQCAtMjU4LDcgKzI1OCw3IEBACiAgICAgICAgIGlmKG9mZnNldCA9PSAwKQogICAgICAgICB7CiAgICAgICAgICAgZGlzcF9oaW50X2luZm8ocG9zLCAiyKHP+7C0vPy87LLiIixERUxBWV9USU1FMnMpOwotICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZihrZXlidWZbb2Zmc2V0XSA9PSBTUF9LRVlfQ0xFQVIpCiAgICAgICAgIHsKQEAgLTI3MCw3ICsyNzAsNyBAQAogICAgICAgICBpZihrZXlidWZbb2Zmc2V0XSA9PSBTUF9LRVlfRU5URVIpCiAgICAgICAgIHsKICAgICAgICAgICBkaXNwX2hpbnRfaW5mb190d28ocG9zLCAivPzFzLzssuLV/ci3IiwivPzFzNCj17zV/bOjIixERUxBWV9USU1FM3MpOwotICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6CkBAIC0yNzgsOCArMjc4LDYgQEAKICAgICAgIH0KICAgICB9CiAgIH0KLSAgcmV0dXJuIDE7Ci0KIH0KIAogc3RhdGljIHZvaWQgc3Bfc2V0X2RldnRpbWUoc3BfcG9zX3QqIHBvcykKQEAgLTU4NCwxNyArNTgyLDI4IEBACiAKIHN0YXRpYyB2b2lkIHRlc3RfdmFsdmVfb24oc3BfcG9zX3QqIHBvcykKIHsKKyAgc3BfdmFsdmVfb24oKTsKKyAgZGlzcF9oaW50X2luZm9fdHdvKHBvcywit6fDxb+qxvTW0CIsIsfryLfIzyIsREVMQVlfVElNRTJzKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF92YWx2ZV9vZmYoc3BfcG9zX3QqIHBvcykKK3sKKyAgc3BfdmFsdmVfb2ZmKCk7CisgIGRpc3BfaGludF9pbmZvX3R3byhwb3MsIrenw8XS0bnYsdUiLCLH68i3yM8iLERFTEFZX1RJTUUzcyk7Cit9CitzdGF0aWMgdm9pZCB0ZXN0X2Zsb3dzZW5zb3Ioc3BfcG9zX3QqIHBvcykKK3sKICAgdWludDMyIHRpY2tlcjsKICAgdWludDgga2NvZGU7CiAgIHVpbnQzMiBjb3VudDsKICAgdWludDMyIHRlbXA7CiAgIGNoYXIgbXNnWzMyXTsKIAotICBkaXNwX2hpbnRfaW5mb190d28ocG9zLCK3p8PFv6rG9NbQIiwiyKHP+7z8zcuz9iIsREVMQVlfVElNRTJzKTsKLSAgdGlja2VyID0gc3BfZ2V0X3RpY2tlcigpOwogICBzcF9mbG93c2Vuc29yX2NvdW50X2NsZWFyKCk7CiAgIHNwX3ZhbHZlX29uKCk7CisgIGRpc3BfaGludF9pbmZvX3R3byhwb3MsIsH3wb+y4srU1tAiLCLH68i3yM8iLDApOwogICBjb3VudCA9IDA7CisgIHRpY2tlciA9IHNwX2dldF90aWNrZXIoKTsKICAgd2hpbGUoc3BfZ2V0X3RpY2tlcigpIC10aWNrZXIgPCBERUxBWV9USU1FNjBzKQogICB7CiAgICAgc3BfdmFsdmVfY29udHJvbCgpOwpAQCAtNjEyLDIwICs2MjEsMTEgQEAKICAgICB7CiAgICAgICBjb3VudCA9IHRlbXA7CiAgICAgICBzcHJpbnRmKG1zZywiwffBv7zGyv06JWQiLGNvdW50KTsKLSAgICAgIGRpc3BfaGludF9pbmZvX3R3byhwb3MsIrenw8Wy4srU1tAiLG1zZyxERUxBWV9USU1FMTAwbXMpOworICAgICAgZGlzcF9oaW50X2luZm9fdHdvKHBvcywiwffBv7LiytTW0CIsbXNnLERFTEFZX1RJTUUxMDBtcyk7CiAgICAgfQogICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfdmFsdmVfb2ZmKHNwX3Bvc190KiBwb3MpCi17Ci0gIHVpbnQzMiBjb3VudDsKLSAgY2hhciBtc2dbMzJdOwotCi0gIHNwX3ZhbHZlX29mZigpOwotICBjb3VudD0gc3BfZmxvd3NlbnNvcl9nZXRfY291bnQoKTsKLSAgc3ByaW50Zihtc2csIsH3wb+8xsr9OiVkIixjb3VudCk7Ci0gIGRpc3BfaGludF9pbmZvX3R3byhwb3MsIrenw8XS0bnYsdUiLG1zZyxERUxBWV9USU1FM3MpOworICBzcHJpbnRmKG1zZywiwffBv7zGyv06JWQiLHNwX2Zsb3dzZW5zb3JfZ2V0X2NvdW50KCkpOworICBkaXNwX2hpbnRfaW5mb190d28ocG9zLCLB98G/suLK1L3hyvgiLG1zZyxERUxBWV9USU1FM3MpOwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0X2ZhY3Rvcnlfb3B0aW9ucyhzcF9wb3NfdCogcG9zKQpAQCAtNjQyLDkgKzY0MiwxMCBAQAogICAgIHsiMi6wtLz8suLK1CIsIGRvX2tleWJvYXJkX3Rlc3R9LAogICAgIHsiMy6/qsb0t6fDxSIsIHRlc3RfdmFsdmVfb259LAogICAgIHsiNC652LHVt6fDxSIsIHRlc3RfdmFsdmVfb2ZmfSwKLSAgICB7IjUuzajRtrLiytQiLCB0ZXN0X2xpbmt9CisgICAgeyI1LsH3wb+y4srUIiwgdGVzdF9mbG93c2Vuc29yfSwKKyAgICB7IjYuzajRtrLiytQiLCB0ZXN0X2xpbmt9CiAgIH07Ci0gIG1heF9jbnQgPSBzaXplb2YobWVudXMpL3NpemVvZihtZW51X3QpLzM7CisgIG1heF9jbnQgPSAoc2l6ZW9mKG1lbnVzKS9zaXplb2YobWVudV90KSAtMSkvMyArIDE7CiAgIHBhZ2UgPSAwOwogICB0aWNrZXIgPSBzcF9nZXRfdGlja2VyKCk7CiAgIHdoaWxlKHNwX2dldF90aWNrZXIoKS10aWNrZXIgPD0gREVMQVlfVElNRTYwcyo1KQpAQCAtNzE2LDcgKzcxNyw3IEBACiAgICAgeyI4LtTaz9/J/by2IiwgbWFudWFsX3VwZ3JhZGV9LAogICAgIHsiOS671ri0s/azpyIsIHJlc2V0X2ZhY3Rvcnl9CiAgIH07Ci0gIG1heF9jbnQgPSBzaXplb2YobWVudXMpL3NpemVvZihtZW51X3QpLzM7CisgIG1heF9jbnQgPSAoc2l6ZW9mKG1lbnVzKS9zaXplb2YobWVudV90KSAtMSkvMyArIDE7CiAgIHBhZ2UgPSAwOwogICB0aWNrZXIgPSBzcF9nZXRfdGlja2VyKCk7CiAgIHdoaWxlKHNwX2dldF90aWNrZXIoKS10aWNrZXIgPD0gREVMQVlfVElNRTYwcyo1KQo=